ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDhmYWE2YzAuLjVkNTZhM2YgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMjgsNiArMjgsNyBAQAogKi5negogKi5iejIKICoubHptYQorKi54egogKi5sem8KICoucGF0Y2gKICouZ2NubwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hdDkxIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hdDkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzZhODYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWF0OTEKQEAgLTAsMCArMSwyNSBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hdDkxX2Nhbi9uZXQvPGlmYWNlPi9tYjBfaWQKK0RhdGU6CQlKYW51YXJ5IDIwMTEKK0tlcm5lbFZlcnNpb246CTIuNi4zOAorQ29udGFjdDoJTWFyYyBLbGVpbmUtQnVkZGUgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KK0Rlc2NyaXB0aW9uOgorCQlWYWx1ZSByZXByZXNlbnRpbmcgdGhlIGNhbl9pZCBvZiBtYWlsYm94IDAuCisKKwkJRGVmYXVsdDogMHg3ZmYgKHN0YW5kYXJkIGZyYW1lKQorCisJCUR1ZSB0byBhIGNoaXAgYnVnIChlcnJhdGEgNTAuMi42LjMgJiA1MC4zLjUuMyBpbgorCQkiQVQ5MVNBTTkyNjMgUHJlbGltaW5hcnkgNjI0OUgtQVRBUk0tMjctSnVsLTA5IikgdGhlCisJCWNvbnRlbnRzIG9mIG1haWxib3ggMCBtYXkgYmUgc2VuZCB1bmRlciBjZXJ0YWluCisJCWNvbmRpdGlvbnMgKGV2ZW4gaWYgZGlzYWJsZWQgb3IgaW4gcnggbW9kZSkuCisKKwkJVGhlIHdvcmthcm91bmQgaW4gdGhlIGVycmF0YSBzdWdnZXN0cyBub3QgdG8gdXNlIHRoZQorCQltYWlsYm94IGFuZCBsb2FkIGl0IHdpdGggYW4gdW51c2VkIGlkZW50aWZpZXIuCisKKwkJSW4gb3JkZXIgdG8gdXNlIGFuIGV4dGVuZGVkIGNhbl9pZCBhZGQgdGhlCisJCUNBTl9FRkZfRkxBRyAoMHg4MDAwMDAwMFUpIHRvIHRoZSBjYW5faWQuIEV4YW1wbGU6CisKKwkJLSBzdGFuZGFyZCBpZCAweDdmZjoKKwkJZWNobyAweDdmZiAgICAgID4gL3N5cy9jbGFzcy9uZXQvY2FuMC9tYjBfaWQKKworCQktIGV4dGVuZGVkIGlkIDB4MWZmZmZmZmY6CisJCWVjaG8gMHg5ZmZmZmZmZiA+IC9zeXMvY2xhc3MvbmV0L2NhbjAvbWIwX2lkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKaW5kZXggMjg2MTA1NS4uYzI3OTE1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1wbApAQCAtNzMsOCArNzMsOCBAQAogICAgICAgc2VydmljZXMuCiAgICAgPC9wYXJhPgogICAgIDxwYXJhPgotICAgICAgVGhlIGNvcmUgb2YgZXZlcnkgRFJNIGRyaXZlciBpcyBzdHJ1Y3QgZHJtX2RldmljZS4gIERyaXZlcnMKLSAgICAgIHdpbGwgdHlwaWNhbGx5IHN0YXRpY2FsbHkgaW5pdGlhbGl6ZSBhIGRybV9kZXZpY2Ugc3RydWN0dXJlLAorICAgICAgVGhlIGNvcmUgb2YgZXZlcnkgRFJNIGRyaXZlciBpcyBzdHJ1Y3QgZHJtX2RyaXZlci4gIERyaXZlcnMKKyAgICAgIHdpbGwgdHlwaWNhbGx5IHN0YXRpY2FsbHkgaW5pdGlhbGl6ZSBhIGRybV9kcml2ZXIgc3RydWN0dXJlLAogICAgICAgdGhlbiBwYXNzIGl0IHRvIGRybV9pbml0KCkgYXQgbG9hZCB0aW1lLgogICAgIDwvcGFyYT4KIApAQCAtODQsNyArODQsNyBAQAogICAgIDx0aXRsZT5Ecml2ZXIgaW5pdGlhbGl6YXRpb248L3RpdGxlPgogICAgIDxwYXJhPgogICAgICAgQmVmb3JlIGNhbGxpbmcgdGhlIERSTSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgdGhlIGRyaXZlciBtdXN0Ci0gICAgICBmaXJzdCBjcmVhdGUgYW5kIGZpbGwgb3V0IGEgc3RydWN0IGRybV9kZXZpY2Ugc3RydWN0dXJlLgorICAgICAgZmlyc3QgY3JlYXRlIGFuZCBmaWxsIG91dCBhIHN0cnVjdCBkcm1fZHJpdmVyIHN0cnVjdHVyZS4KICAgICA8L3BhcmE+CiAgICAgPHByb2dyYW1saXN0aW5nPgogICAgICAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2ZpbGVzeXN0ZW1zLnRtcGwKaW5kZXggNWU4N2FkNS4uZjUxZjI4NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2ZpbGVzeXN0ZW1zLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2ZpbGVzeXN0ZW1zLnRtcGwKQEAgLTgyLDYgKzgyLDExIEBACiAgICAgIDwvc2VjdDE+CiAgIDwvY2hhcHRlcj4KIAorICA8Y2hhcHRlciBpZD0iZnNfZXZlbnRzIj4KKyAgICAgPHRpdGxlPkV2ZW50cyBiYXNlZCBvbiBmaWxlIGRlc2NyaXB0b3JzPC90aXRsZT4KKyFFZnMvZXZlbnRmZC5jCisgIDwvY2hhcHRlcj4KKwogICA8Y2hhcHRlciBpZD0ic3lzZnMiPgogICAgICA8dGl0bGU+VGhlIEZpbGVzeXN0ZW0gZm9yIEV4cG9ydGluZyBLZXJuZWwgT2JqZWN0czwvdGl0bGU+CiAhRWZzL3N5c2ZzL2ZpbGUuYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0gtTW9iaWxlL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0gtTW9iaWxlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NzFkODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TSC1Nb2JpbGUvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACitCSU4gOj0gdnJsNAorCisuUEhPTlk6IGFsbAorYWxsOiAkKEJJTikKKworLlBIT05ZOiBjbGVhbgorY2xlYW46CisJcm0gLWYgKi5vICQoQklOKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0gtTW9iaWxlL3ZybDQuYyBiL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS92cmw0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhMTkxMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS92cmw0LmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiB2cmw0IGZvcm1hdCBnZW5lcmF0b3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ltb24gSG9ybWFuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIHVzYWdlOiB2cmw0IDwgekltYWdlID4gb3V0CisgKgkgIGRkIGlmPW91dCBvZj0vZGV2L3NkeCBicz01MTIgc2Vlaz0xICMgV3JpdGUgdGhlIGltYWdlIHRvIHNlY3RvciAxCisgKgorICogUmVhZHMgYSB6SW1hZ2UgZnJvbSBzdGRpbiBhbmQgd3JpdGVzIGEgdnJsNCBpbWFnZSB0byBzdGRvdXQuCisgKiBJbiBwcmFjdGljZSB0aGlzIG1lYW5zIHdyaXRpbmcgYSBwYWRkZWQgdnJsNCBoZWFkZXIgdG8gc3Rkb3V0IGZvbGxvd2VkCisgKiBieSB0aGUgekltYWdlLgorICoKKyAqIFRoZSBwYWRkaW5nIHBsYWNlcyB0aGUgekltYWdlIGF0IEFMSUdOIGJ5dGVzIGludG8gdGhlIG91dHB1dC4KKyAqIFRoZSB2cmw0IHVzZXMgQUxJR04gKyBTVEFSVF9CQVNFIGFzIHRoZSBzdGFydF9hZGRyZXNzLgorICogVGhpcyBpcyB3aGVyZSB0aGUgbWFzayBST00gd2lsbCBqdW1wIHRvIGFmdGVyIHZlcmlmeWluZyB0aGUgaGVhZGVyLgorICoKKyAqIFRoZSBoZWFkZXIgc2V0cyBjb3B5X3NpemUgdG8gbWluKHNpemVvZih6SW1hZ2UpLCBNQVhfQk9PVF9QUk9HX0xFTikgKyBBTElHTi4KKyAqIFRoYXQgaXMsIHRoZSBtYXNrIFJPTSB3aWxsIGxvYWQgdGhlIHBhZGRlZCBoZWFkZXIgKEFMSUdOIGJ5dGVzKQorICogQW5kIHRoZW4gTUFYX0JPT1RfUFJPR19MRU4gYnl0ZXMgb2YgdGhlIGltYWdlLCBvciB0aGUgZW50aXJlIGltYWdlLAorICogd2hpY2hldmVyIGlzIHNtYWxsZXIuCisgKgorICogVGhlIHpJbWFnZSBpcyBub3QgbW9kaWZpZWQgaW4gYW55IHdheS4KKyAqLworCisjZGVmaW5lIF9CU0RfU09VUkNFCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCitzdHJ1Y3QgaGRyIHsKKwl1aW50MzJfdCBtYWdpYzE7CisJdWludDMyX3QgcmVzZXJ2ZWQxOworCXVpbnQzMl90IG1hZ2ljMjsKKwl1aW50MzJfdCByZXNlcnZlZDI7CisJdWludDE2X3QgY29weV9zaXplOworCXVpbnQxNl90IGJvb3Rfb3B0aW9uczsKKwl1aW50MzJfdCByZXNlcnZlZDM7CisJdWludDMyX3Qgc3RhcnRfYWRkcmVzczsKKwl1aW50MzJfdCByZXNlcnZlZDQ7CisJdWludDMyX3QgcmVzZXJ2ZWQ1OworCWNoYXIgICAgIHJlc2VydmVkNlszMDhdOworfTsKKworI2RlZmluZSBERUNMQVJFX0hEUihoKQkJCQkJXAorCXN0cnVjdCBoZHIgKGgpID0gewkJCQlcCisJCS5tYWdpYzEgPQlodG9sZTMyKDB4ZWEwMDAwMDApLAlcCisJCS5yZXNlcnZlZDEgPQlodG9sZTMyKDB4NTYpLAkJXAorCQkubWFnaWMyID0JaHRvbGUzMigweGU1OWZmMDA4KSwJXAorCQkucmVzZXJ2ZWQzID0JaHRvbGUxNigweDEpIH0KKworLyogQWxpZ24gdG8gNTEyIGJ5dGVzLCB0aGUgTU1DSUYgc2VjdG9yIHNpemUgKi8KKyNkZWZpbmUgQUxJR05fQklUUwk5CisjZGVmaW5lIEFMSUdOCQkoMSA8PCBBTElHTl9CSVRTKQorCisjZGVmaW5lIFNUQVJUX0JBU0UJMHhlNTViMDAwMAorCisvKgorICogV2l0aCBhbiBhbGlnbm1lbnQgb2YgNTEyIHRoZSBoZWFkZXIgdXNlcyB0aGUgZmlyc3Qgc2VjdG9yLgorICogVGhlcmUgaXMgYSAxMjggc2VjdG9yICg2NGtieXRlKSBsaW1pdCBvbiB0aGUgZGF0YSBsb2FkZWQgYnkgdGhlIG1hc2sgUk9NLgorICogU28gdGhlcmUgYXJlIDEyNyBzZWN0b3JzIGxlZnQgZm9yIHRoZSBib290IHByb2dyYW1tZS4gQnV0IGluIHByYWN0aWNlCisgKiBPbmx5IGEgc21hbGwgcG9ydGlvbiBvZiBhIHpJbWFnZSBpcyBuZWVkZWQsIDE2IHNlY3RvcnMgc2hvdWxkIGJlIG1vcmUKKyAqIHRoYW4gZW5vdWdoLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIHNldHMgaG93IG11Y2ggb2YgdGhlIHpJbWFnZSBpcyBjb3BpZWQgYnkgdGhlIG1hc2sgUk9NLgorICogVGhlIGVudGlyZSB6SW1hZ2UgaXMgcHJlc2VudCBhZnRlciB0aGUgaGVhZGVyIGFuZCBpcyBsb2FkZWQKKyAqIGJ5IHRoZSBjb2RlIGluIHRoZSBib290IHByb2dyYW0gKHdoaWNoIGlzIHRoZSBmaXJzdCBwb3J0aW9uIG9mIHRoZSB6SW1hZ2UpLgorICovCisjZGVmaW5lCU1BWF9CT09UX1BST0dfTEVOICgxNiAqIDUxMikKKworI2RlZmluZSBST1VORF9VUCh4KQkoKHggKyBBTElHTiAtIDEpICYgfihBTElHTiAtIDEpKQorCitzc2l6ZV90IGRvX3JlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzaXplX3Qgb2Zmc2V0ID0gMDsKKwlzc2l6ZV90IGw7CisKKwl3aGlsZSAob2Zmc2V0IDwgY291bnQpIHsKKwkJbCA9IHJlYWQoZmQsIGJ1ZiArIG9mZnNldCwgY291bnQgLSBvZmZzZXQpOworCQlpZiAoIWwpCisJCQlicmVhazsKKwkJaWYgKGwgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKQorCQkJCWNvbnRpbnVlOworCQkJcGVycm9yKCJyZWFkIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJb2Zmc2V0ICs9IGw7CisJfQorCisJcmV0dXJuIG9mZnNldDsKK30KKworc3NpemVfdCBkb193cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXNpemVfdCBvZmZzZXQgPSAwOworCXNzaXplX3QgbDsKKworCXdoaWxlIChvZmZzZXQgPCBjb3VudCkgeworCQlsID0gd3JpdGUoZmQsIGJ1ZiArIG9mZnNldCwgY291bnQgLSBvZmZzZXQpOworCQlpZiAobCA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRVdPVUxEQkxPQ0spCisJCQkJY29udGludWU7CisJCQlwZXJyb3IoIndyaXRlIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJb2Zmc2V0ICs9IGw7CisJfQorCisJcmV0dXJuIG9mZnNldDsKK30KKworc3NpemVfdCB3cml0ZV96ZXJvKGludCBmZCwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3QgaSA9IGxlbjsKKworCXdoaWxlIChpLS0pIHsKKwkJY29uc3QgY2hhciB4ID0gMDsKKwkJaWYgKGRvX3dyaXRlKGZkLCAmeCwgMSkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiBsZW47Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisJREVDTEFSRV9IRFIoaGRyKTsKKwljaGFyIGJvb3RfcHJvZ3JhbVtNQVhfQk9PVF9QUk9HX0xFTl07CisJc2l6ZV90IGFsaWduZWRfaGRyX2xlbiwgYWxsaWduZWRfcHJvZ19sZW47CisJc3NpemVfdCBwcm9nX2xlbjsKKworCXByb2dfbGVuID0gZG9fcmVhZCgwLCBib290X3Byb2dyYW0sIHNpemVvZihib290X3Byb2dyYW0pKTsKKwlpZiAocHJvZ19sZW4gPD0gMCkKKwkJcmV0dXJuIC0xOworCisJYWxpZ25lZF9oZHJfbGVuID0gUk9VTkRfVVAoc2l6ZW9mKGhkcikpOworCWhkci5zdGFydF9hZGRyZXNzID0gaHRvbGUzMihTVEFSVF9CQVNFICsgYWxpZ25lZF9oZHJfbGVuKTsKKwlhbGxpZ25lZF9wcm9nX2xlbiA9IFJPVU5EX1VQKHByb2dfbGVuKTsKKwloZHIuY29weV9zaXplID0gaHRvbGUxNihhbGlnbmVkX2hkcl9sZW4gKyBhbGxpZ25lZF9wcm9nX2xlbik7CisKKwlpZiAoZG9fd3JpdGUoMSwgJmhkciwgc2l6ZW9mKGhkcikpIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmICh3cml0ZV96ZXJvKDEsIGFsaWduZWRfaGRyX2xlbiAtIHNpemVvZihoZHIpKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChkb193cml0ZSgxLCBib290X3Byb2dyYW0sIHByb2dfbGVuKSA8IDApCisJCXJldHVybiAxOworCisJLyogV3JpdGUgb3V0IHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgKi8KKwl3aGlsZSAoMSkgeworCQlwcm9nX2xlbiA9IGRvX3JlYWQoMCwgYm9vdF9wcm9ncmFtLCBzaXplb2YoYm9vdF9wcm9ncmFtKSk7CisJCWlmIChwcm9nX2xlbiA8IDApCisJCQlyZXR1cm4gMTsKKwkJaWYgKHByb2dfbGVuID09IDApCisJCQlicmVhazsKKwkJaWYgKGRvX3dyaXRlKDEsIGJvb3RfcHJvZ3JhbSwgcHJvZ19sZW4pIDwgMCkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU0gtTW9iaWxlL3pib290LXJvbS1tbWNpZi50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9TSC1Nb2JpbGUvemJvb3Qtcm9tLW1tY2lmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmZmOGFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0gtTW9iaWxlL3pib290LXJvbS1tbWNpZi50eHQKQEAgLTAsMCArMSwyOSBAQAorUk9NLWFibGUgekltYWdlIGJvb3QgZnJvbSBNTUMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIFJPTS1hYmxlIHpJbWFnZSBjb21waWxlZCB3aXRoIFpCT09UX1JPTV9NTUNJRiBtYXkgYmUgd3JpdHRlbiB0byBNTUMgYW5kCitTdXBlckggTW9iaWxlIEFSTSB3aWxsIHRvIGJvb3QgZGlyZWN0bHkgZnJvbSB0aGUgTU1DSUYgaGFyZHdhcmUgYmxvY2suCisKK1RoaXMgaXMgYWNoaWV2ZWQgYnkgdGhlIG1hc2sgUk9NIGxvYWRpbmcgdGhlIGZpcnN0IHBvcnRpb24gb2YgdGhlIGltYWdlIGludG8KK01FUkFNIGFuZCB0aGVuIGp1bXBpbmcgdG8gaXQuIFRoaXMgcG9ydGlvbiBjb250YWlucyBsb2FkZXIgY29kZSB3aGljaAorY29waWVzIHRoZSBlbnRpcmUgaW1hZ2UgdG8gU0RSQU0gYW5kIGp1bXBzIHRvIGl0LiBGcm9tIHRoZXJlIHRoZSB6SW1hZ2UKK2Jvb3QgY29kZSBwcm9jZWVkcyBhcyBub3JtYWwsIHVuY29tcHJlc3NpbmcgdGhlIGltYWdlIGludG8gaXRzIGZpbmFsCitsb2NhdGlvbiBhbmQgdGhlbiBqdW1waW5nIHRvIGl0LgorCitUaGlzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIG9uIGFuIEFQNEVCIGJvYXJkIHVzaW5nIHRoZSBkZXZlbG9wZXIgMUEgZU1NQworYm9vdCBtb2RlIHdoaWNoIGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBqdW1wZXIgc2V0dGluZ3MuCitUaGUgYm9hcmQgdXNlZCBmb3IgdGVzdGluZyByZXF1aXJlZCBhIHBhdGNoZWQgbWFzayBST00gaW4gb3JkZXIgZm9yCit0aGlzIG1vZGUgdG8gZnVuY3Rpb24uCisKKyAgIDggNyA2IDUgNCAzIDIgMQorICAgeHx4fHh8eHx4fCB8eHwKK1M0IC0rLSstKy0rLSstKy0rLQorICAgIHwgfCB8IHwgfHh8IHx4IG9uCisKK1RoZSB6SW1hZ2UgbXVzdCBiZSB3cml0dGVuIHRvIHRoZSBNTUMgY2FyZCBhdCBzZWN0b3IgMSAoNTEyIGJ5dGVzKSBpbgordnJsNCBmb3JtYXQuIEEgdXRpbGl0eSB2cmw0IGlzIHN1cHBsaWVkIHRvIGFjY29tcGxpc2ggdGhpcy4KKworZS5nLgorCXZybDQgPCB6SW1hZ2UgfCBkZCBvZj0vZGV2L3NkWCBicz01MTIgc2Vlaz0xCisKK0EgZHVhbC12b2x0YWdlIE1NQyA0LjAgY2FyZCB3YXMgdXNlZCBmb3IgdGVzdGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NhdGEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2F0YS9mc2wtc2F0YS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NhdGEudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXRhL2ZzbC1zYXRhLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9lZXByb20udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2VlcHJvbS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZWVwcm9tLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2VlcHJvbS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsLzh4eHhfZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby84eHh4X2dwaW8udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84eHh4X2dwaW8udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby84eHh4X2dwaW8udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2dwaW8vZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9ncGlvL2dwaW8udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9ncGlvL2xlZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9sZWQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2dwaW8vbGVkLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vbGVkLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvaTJjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvZnNsLWkyYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2kyYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvZnNsLWkyYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbWFydmVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWFydmVsbC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbWFydmVsbC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tYXJ2ZWxsLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZXNkaGMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9mc2wtZXNkaGMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9lc2RoYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvZnNsLWVzZGhjLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tbWMtc3BpLXNsb3QudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWMtc3BpLXNsb3QudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL21tYy1zcGktc2xvdC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLXNwaS1zbG90LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdXBtLW5hbmQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9mc2wtdXBtLW5hbmQudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC91cG0tbmFuZC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZnNsLXVwbS1uYW5kLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tdGQtcGh5c21hcC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL210ZC1waHlzbWFwLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tdGQtcGh5c21hcC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvbXRkLXBoeXNtYXAudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vbXBjNXh4eC1tc2Nhbi50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2Nhbi50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY2FuL21wYzV4eHgtbXNjYW4udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2Nhbi9zamExMDAwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY2FuL3NqYTEwMDAudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2Nhbi9zamExMDAwLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4vc2phMTAwMC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9mc2wtdHNlYy1waHkudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9mc2wtdHNlYy1waHkudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2dwaW8vbWRpby50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZ3Bpby9tZGlvLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3BoeS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3BoeS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvcGh5LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9waHkudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84M3h4LTUxMngtcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvODN4eC01MTJ4LXBjaS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsLzgzeHgtNTEyeC1wY2kudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpLzgzeHgtNTEyeC1wY2kudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9jcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L2NwbS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L2NwbS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9jcG0udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9lbWFjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9lbWFjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvZW1hYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9lbWFjLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvbmRmYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvbmRmYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L25kZmMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvbmRmYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L3BwYzQ0MHNwZS1hZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9wcGM0NDBzcGUtYWRtYS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L3BwYzQ0MHNwZS1hZG1hLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L3BwYzQ0MHNwZS1hZG1hLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvcmVib290LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9yZWJvb3QudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9yZWJvb3QudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvcmVib290LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvYm9hcmQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2JvYXJkLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvYm9hcmQudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvYm9hcmQudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS9icmcudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vYnJnLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS9icmcudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS9icmcudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtL2kyYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS9pMmMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtL2kyYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL2kyYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vcGljLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL3BpYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vcGljLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vcGljLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS91c2IudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vdXNiLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS91c2IudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS91c2IudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2dwaW8udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvZ3Bpby50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvZ3Bpby50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9uZXR3b3JrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvbmV0d29yay50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9uZXR3b3JrLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9uZXR3b3JrLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL2Zpcm13YXJlLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvZmlybXdhcmUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvZmlybXdhcmUudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL2Zpcm13YXJlLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3Bhcl9pby50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL3Bhcl9pby50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9wYXJfaW8udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL3Bhcl9pby50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9waW5jZmcudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS9waW5jZmcudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvcGluY2ZnLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS9waW5jZmcudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvdWNjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvdWNjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3VjYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvdWNjLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3VzYi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL3VzYi50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS91c2IudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL3VzYi50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9zZXJpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9zZXJpYWwudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvc2VyaWFsLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9zZXJpYWwudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kaXUudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2RpdS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RpdS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9kaXUudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2RtYS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9kbWEudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2VjbS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZWNtLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9lY20udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZWNtLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZ3RtLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9ndG0udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9ndG0udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZ3RtLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZ3V0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZ3V0cy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2d1dHMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZ3V0cy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2xiYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbGJjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbGJjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2xiYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21jbS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbWNtLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbWNtLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21jbS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21jdS1tcGM4MzQ5ZW1pdHgudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21jdS1tcGM4MzQ5ZW1pdHgudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tY3UtbXBjODM0OWVtaXR4LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21jdS1tcGM4MzQ5ZW1pdHgudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MTIxLXBzYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBjNTEyMS1wc2MudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MTIxLXBzYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGM1MTIxLXBzYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUyMDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21wYzUyMDAudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MjAwLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21wYzUyMDAudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGljLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBpYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGljLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXNpLXBpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXNpLXBpYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21zaS1waWMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXNpLXBpYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3BtYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvcG1jLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvcG1jLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL3BtYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NlYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvc2VjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc2VjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL3NlYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvc3NpLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL3NzaS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbmludGVuZG8vZ2FtZWN1YmUudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvbmludGVuZG8vZ2FtZWN1YmUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL25pbnRlbmRvL2dhbWVjdWJlLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvbmludGVuZG8vZ2FtZWN1YmUudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL25pbnRlbmRvL3dpaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9uaW50ZW5kby93aWkudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL25pbnRlbmRvL3dpaS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL25pbnRlbmRvL3dpaS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL2ZzbC1zcGkudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zcGkudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL2ZzbC1zcGkudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3NwaS1idXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zcGktYnVzLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9zcGktYnVzLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zcGktYnVzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdXNiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvZnNsLXVzYi50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3VzYi50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvZnNsLXVzYi50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvdXNiLWVoY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2ItZWhjaS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvdXNiLWVoY2kudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL3VzYi1laGNpLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy94aWxpbngudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3hpbGlueC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MveGlsaW54LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3hpbGlueC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9ib290aW5nLXdpdGhvdXQtb2YudHh0CmluZGV4IDc0MDBkNzUuLjI4YjFjOWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9ib290aW5nLXdpdGhvdXQtb2YudHh0CkBAIC0xMyw3ICsxMyw2IEBACiAKICAgSSAtIEludHJvZHVjdGlvbgogICAgIDEpIEVudHJ5IHBvaW50IGZvciBhcmNoL3Bvd2VycGMKLSAgICAyKSBCb2FyZCBzdXBwb3J0CiAKICAgSUkgLSBUaGUgRFQgYmxvY2sgZm9ybWF0CiAgICAgMSkgSGVhZGVyCkBAIC00MSwxMyArNDAsNiBAQAogICBWSSAtIFN5c3RlbS1vbi1hLWNoaXAgZGV2aWNlcyBhbmQgbm9kZXMKICAgICAxKSBEZWZpbmluZyBjaGlsZCBub2RlcyBvZiBhbiBTT0MKICAgICAyKSBSZXByZXNlbnRpbmcgZGV2aWNlcyB3aXRob3V0IGEgY3VycmVudCBPRiBzcGVjaWZpY2F0aW9uCi0gICAgICBhKSBQSFkgbm9kZXMKLSAgICAgIGIpIEludGVycnVwdCBjb250cm9sbGVycwotICAgICAgYykgNHh4L0F4b24gRU1BQyBldGhlcm5ldCBub2RlcwotICAgICAgZCkgWGlsaW54IElQIGNvcmVzCi0gICAgICBlKSBVU0IgRUhDSSBjb250cm9sbGVycwotICAgICAgZikgTURJTyBvbiBHUElPcwotICAgICAgZykgU1BJIGJ1c3NlcwogCiAgIFZJSSAtIFNwZWNpZnlpbmcgaW50ZXJydXB0IGluZm9ybWF0aW9uIGZvciBkZXZpY2VzCiAgICAgMSkgaW50ZXJydXB0cyBwcm9wZXJ0eQpAQCAtMTIzLDcgKzExNSw3IEBACiBJIC0gSW50cm9kdWN0aW9uCiA9PT09PT09PT09PT09PT09CiAKLUR1cmluZyB0aGUgcmVjZW50IGRldmVsb3BtZW50IG9mIHRoZSBMaW51eC9wcGM2NCBrZXJuZWwsIGFuZCBtb3JlCitEdXJpbmcgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBMaW51eC9wcGM2NCBrZXJuZWwsIGFuZCBtb3JlCiBzcGVjaWZpY2FsbHksIHRoZSBhZGRpdGlvbiBvZiBuZXcgcGxhdGZvcm0gdHlwZXMgb3V0c2lkZSBvZiB0aGUgb2xkCiBJQk0gcFNlcmllcy9pU2VyaWVzIHBhaXIsIGl0IHdhcyBkZWNpZGVkIHRvIGVuZm9yY2Ugc29tZSBzdHJpY3QgcnVsZXMKIHJlZ2FyZGluZyB0aGUga2VybmVsIGVudHJ5IGFuZCBib290bG9hZGVyIDwtPiBrZXJuZWwgaW50ZXJmYWNlcywgaW4KQEAgLTE0Niw3ICsxMzgsNyBAQAogY3JlYXRlIGEgbm9kZSBmb3IgZXZlcnkgUENJIGRldmljZSBpbiB0aGUgc3lzdGVtLiBJdCBpcyBhIHJlcXVpcmVtZW50CiB0byBoYXZlIGEgbm9kZSBmb3IgUENJIGhvc3QgYnJpZGdlcyBpbiBvcmRlciB0byBwcm92aWRlIGludGVycnVwdAogcm91dGluZyBpbmZvcm1hdGlvbnMgYW5kIG1lbW9yeS9JTyByYW5nZXMsIGFtb25nIG90aGVycy4gSXQgaXMgYWxzbwotcmVjb21tZW5kZWQgdG8gZGVmaW5lIG5vZGVzIGZvciBvbiBjaGlwIGRldmljZXMgYW5kIG90aGVyIGJ1c3NlcyB0aGF0CityZWNvbW1lbmRlZCB0byBkZWZpbmUgbm9kZXMgZm9yIG9uIGNoaXAgZGV2aWNlcyBhbmQgb3RoZXIgYnVzZXMgdGhhdAogZG9uJ3Qgc3BlY2lmaWNhbGx5IGZpdCBpbiBhbiBleGlzdGluZyBPRiBzcGVjaWZpY2F0aW9uLiBUaGlzIGNyZWF0ZXMgYQogZ3JlYXQgZmxleGliaWxpdHkgaW4gdGhlIHdheSB0aGUga2VybmVsIGNhbiB0aGVuIHByb2JlIHRob3NlIGFuZCBtYXRjaAogZHJpdmVycyB0byBkZXZpY2UsIHdpdGhvdXQgaGF2aW5nIHRvIGhhcmQgY29kZSBhbGwgc29ydHMgb2YgdGFibGVzLiBJdApAQCAtMTU4LDcgKzE1MCw3IEBACiAxKSBFbnRyeSBwb2ludCBmb3IgYXJjaC9wb3dlcnBjCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgIFRoZXJlIGlzIG9uZSBhbmQgb25lIHNpbmdsZSBlbnRyeSBwb2ludCB0byB0aGUga2VybmVsLCBhdCB0aGUgc3RhcnQKKyAgIFRoZXJlIGlzIG9uZSBzaW5nbGUgZW50cnkgcG9pbnQgdG8gdGhlIGtlcm5lbCwgYXQgdGhlIHN0YXJ0CiAgICBvZiB0aGUga2VybmVsIGltYWdlLiBUaGF0IGVudHJ5IHBvaW50IHN1cHBvcnRzIHR3byBjYWxsaW5nCiAgICBjb252ZW50aW9uczoKIApAQCAtMjEwLDEyICsyMDIsNiBAQAogICAgICAgICB3aXRoIGFsbCBDUFVzLiBUaGUgd2F5IHRvIGRvIHRoYXQgd2l0aCBtZXRob2QgYikgd2lsbCBiZQogICAgICAgICBkZXNjcmliZWQgaW4gYSBsYXRlciByZXZpc2lvbiBvZiB0aGlzIGRvY3VtZW50LgogCi0KLTIpIEJvYXJkIHN1cHBvcnQKLS0tLS0tLS0tLS0tLS0tLS0KLQotNjQtYml0IGtlcm5lbHM6Ci0KICAgIEJvYXJkIHN1cHBvcnRzIChwbGF0Zm9ybXMpIGFyZSBub3QgZXhjbHVzaXZlIGNvbmZpZyBvcHRpb25zLiBBbgogICAgYXJiaXRyYXJ5IHNldCBvZiBib2FyZCBzdXBwb3J0cyBjYW4gYmUgYnVpbHQgaW4gYSBzaW5nbGUga2VybmVsCiAgICBpbWFnZS4gVGhlIGtlcm5lbCB3aWxsICJrbm93IiB3aGF0IHNldCBvZiBmdW5jdGlvbnMgdG8gdXNlIGZvciBhCkBAIC0yMzQsNDggKzIyMCwxMSBAQAogICAgICAgICBjb250YWluaW5nIHRoZSB2YXJpb3VzIGNhbGxiYWNrcyB0aGF0IHRoZSBnZW5lcmljIGNvZGUgd2lsbAogICAgICAgICB1c2UgdG8gZ2V0IHRvIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgY29kZQogCi0gICAgICAgIGMpIEFkZCBhIHJlZmVyZW5jZSB0byB5b3VyICJwcGNfbWQiIHN0cnVjdHVyZSBpbiB0aGUKLSAgICAgICAgIm1hY2hpbmVzIiB0YWJsZSBpbiBhcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgaWYgeW91IGFyZQotICAgICAgICBhIDY0LWJpdCBwbGF0Zm9ybS4KLQotICAgICAgICBkKSByZXF1ZXN0IGFuZCBnZXQgYXNzaWduZWQgYSBwbGF0Zm9ybSBudW1iZXIgKHNlZSBQTEFURk9STV8qCi0gICAgICAgIGNvbnN0YW50cyBpbiBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKLQotMzItYml0IGVtYmVkZGVkIGtlcm5lbHM6Ci0KLSAgQ3VycmVudGx5LCBib2FyZCBzdXBwb3J0IGlzIGVzc2VudGlhbGx5IGFuIGV4Y2x1c2l2ZSBjb25maWcgb3B0aW9uLgotICBUaGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgZm9yIGEgc2luZ2xlIHBsYXRmb3JtLiAgUGFydCBvZiB0aGUgcmVhc29uCi0gIGZvciB0aGlzIGlzIHRvIGtlZXAga2VybmVscyBvbiBlbWJlZGRlZCBzeXN0ZW1zIHNtYWxsIGFuZCBlZmZpY2llbnQ7Ci0gIHBhcnQgb2YgdGhpcyBpcyBkdWUgdG8gdGhlIGZhY3QgdGhlIGNvZGUgaXMgYWxyZWFkeSB0aGF0IHdheS4gSW4gdGhlCi0gIGZ1dHVyZSwgYSBrZXJuZWwgbWF5IHN1cHBvcnQgbXVsdGlwbGUgcGxhdGZvcm1zLCBidXQgb25seSBpZiB0aGUKKyAgQSBrZXJuZWwgaW1hZ2UgbWF5IHN1cHBvcnQgbXVsdGlwbGUgcGxhdGZvcm1zLCBidXQgb25seSBpZiB0aGUKICAgcGxhdGZvcm1zIGZlYXR1cmUgdGhlIHNhbWUgY29yZSBhcmNoaXRlY3R1cmUuICBBIHNpbmdsZSBrZXJuZWwgYnVpbGQKICAgY2Fubm90IHN1cHBvcnQgYm90aCBjb25maWd1cmF0aW9ucyB3aXRoIEJvb2sgRSBhbmQgY29uZmlndXJhdGlvbnMKICAgd2l0aCBjbGFzc2ljIFBvd2VycGMgYXJjaGl0ZWN0dXJlcy4KIAotICAzMi1iaXQgZW1iZWRkZWQgcGxhdGZvcm1zIHRoYXQgYXJlIG1vdmVkIGludG8gYXJjaC9wb3dlcnBjIHVzaW5nIGEKLSAgZmxhdHRlbmVkIGRldmljZSB0cmVlIHNob3VsZCBhZG9wdCB0aGUgbWVyZ2VkIHRyZWUgcHJhY3RpY2Ugb2YKLSAgc2V0dGluZyBwcGNfbWQgdXAgZHluYW1pY2FsbHksIGV2ZW4gdGhvdWdoIHRoZSBrZXJuZWwgaXMgY3VycmVudGx5Ci0gIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3Igb25seSBhIHNpbmdsZSBwbGF0Zm9ybSBhdCBhIHRpbWUuICBUaGlzIGFsbG93cwotICB1bmlmaWNhdGlvbiBvZiB0aGUgc2V0dXAgY29kZSwgYW5kIHdpbGwgbWFrZSBpdCBlYXNpZXIgdG8gZ28gdG8gYQotICBtdWx0aXBsZS1wbGF0Zm9ybS1zdXBwb3J0IG1vZGVsIGluIHRoZSBmdXR1cmUuCi0KLU5PVEU6IEkgYmVsaWV2ZSB0aGUgYWJvdmUgd2lsbCBiZSB0cnVlIG9uY2UgQmVuJ3MgZG9uZSB3aXRoIHRoZSBtZXJnZQotb2YgdGhlIGJvb3Qgc2VxdWVuY2VzLi4uLiBzb21lb25lIHNwZWFrIHVwIGlmIHRoaXMgaXMgd3JvbmchCi0KLSAgVG8gYWRkIGEgMzItYml0IGVtYmVkZGVkIHBsYXRmb3JtIHN1cHBvcnQsIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zCi0gIGZvciA2NC1iaXQgcGxhdGZvcm1zIGFib3ZlLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgS2NvbmZpZwotICBvcHRpb24gc2hvdWxkIGJlIHNldCB1cCBzdWNoIHRoYXQgdGhlIGtlcm5lbCBidWlsZHMgZXhjbHVzaXZlbHkgZm9yCi0gIHRoZSBwbGF0Zm9ybSBzZWxlY3RlZC4gIFRoZSBwcm9jZXNzb3IgdHlwZSBmb3IgdGhlIHBsYXRmb3JtIHNob3VsZAotICBlbmFibGUgYW5vdGhlciBjb25maWcgb3B0aW9uIHRvIHNlbGVjdCB0aGUgc3BlY2lmaWMgYm9hcmQKLSAgc3VwcG9ydGVkLgotCi1OT1RFOiBJZiBCZW4gZG9lc24ndCBtZXJnZSB0aGUgc2V0dXAgZmlsZXMsIG1heSBuZWVkIHRvIGNoYW5nZSB0aGlzIHRvCi1wb2ludCB0byBzZXR1cF8zMi5jCi0KLQotICAgSSB3aWxsIGRlc2NyaWJlIGxhdGVyIHRoZSBib290IHByb2Nlc3MgYW5kIHZhcmlvdXMgY2FsbGJhY2tzIHRoYXQKLSAgIHlvdXIgcGxhdGZvcm0gc2hvdWxkIGltcGxlbWVudC4KLQogCiBJSSAtIFRoZSBEVCBibG9jayBmb3JtYXQKID09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzAwLDggKzI0OSw4IEBACiAxKSBIZWFkZXIKIC0tLS0tLS0tLQogCi0gICBUaGUga2VybmVsIGlzIGVudGVyZWQgd2l0aCByMyBwb2ludGluZyB0byBhbiBhcmVhIG9mIG1lbW9yeSB0aGF0IGlzCi0gICByb3VnaGx5IGRlc2NyaWJlZCBpbiBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvbS5oIGJ5IHRoZSBzdHJ1Y3R1cmUKKyAgIFRoZSBrZXJuZWwgaXMgcGFzc2VkIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHBvaW50aW5nIHRvIGFuIGFyZWEgb2YgbWVtb3J5CisgICB0aGF0IGlzIHJvdWdobHkgZGVzY3JpYmVkIGluIGluY2x1ZGUvbGludXgvb2ZfZmR0LmggYnkgdGhlIHN0cnVjdHVyZQogICAgYm9vdF9wYXJhbV9oZWFkZXI6CiAKIHN0cnVjdCBib290X3BhcmFtX2hlYWRlciB7CkBAIC0zMzksNyArMjg4LDcgQEAKICAgIEFsbCB2YWx1ZXMgaW4gdGhpcyBoZWFkZXIgYXJlIGluIGJpZyBlbmRpYW4gZm9ybWF0LCB0aGUgdmFyaW91cwogICAgZmllbGRzIGluIHRoaXMgaGVhZGVyIGFyZSBkZWZpbmVkIG1vcmUgcHJlY2lzZWx5IGJlbG93LiBBbGwKICAgICJvZmZzZXQiIHZhbHVlcyBhcmUgaW4gYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlcjsgdGhhdCBpcwotICAgZnJvbSB0aGUgdmFsdWUgb2YgcjMuCisgICBmcm9tIHRoZSBwaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZSB0cmVlIGJsb2NrLgogCiAgICAtIG1hZ2ljCiAKQEAgLTQzNyw3ICszODYsNyBAQAogCiAKICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICByMyAtPiB8ICBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgIHwKKyAgICAgYmFzZSAtPiB8ICBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgIHwKICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICB8ICAgICAgKGFsaWdubWVudCBnYXApICgqKSAgIHwKICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ1Nyw3ICs0MDYsNyBAQAogICAgICAgLS0tLS0+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgfAogICAgICAgfAotICAgICAgLS0tIChyMyArIHRvdGFsc2l6ZSkKKyAgICAgIC0tLSAoYmFzZSArIHRvdGFsc2l6ZSkKIAogICAoKikgVGhlIGFsaWdubWVudCBnYXBzIGFyZSBub3QgbmVjZXNzYXJpbHkgcHJlc2VudDsgdGhlaXIgcHJlc2VuY2UKICAgICAgIGFuZCBzaXplIGFyZSBkZXBlbmRlbnQgb24gdGhlIHZhcmlvdXMgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBvZgpAQCAtNTAwLDcgKzQ0OSw3IEBACiB0aGUgZGV2aWNlLXRyZWUuIE1vcmUgZGV0YWlscyBhYm91dCB0aGUgYWN0dWFsIGZvcm1hdCBvZiB0aGVzZSB3aWxsIGJlCiBiZWxvdy4KIAotVGhlIGtlcm5lbCBwb3dlcnBjIGdlbmVyaWMgY29kZSBkb2VzIG5vdCBtYWtlIGFueSBmb3JtYWwgdXNlIG9mIHRoZQorVGhlIGtlcm5lbCBnZW5lcmljIGNvZGUgZG9lcyBub3QgbWFrZSBhbnkgZm9ybWFsIHVzZSBvZiB0aGUKIHVuaXQgYWRkcmVzcyAodGhvdWdoIHNvbWUgYm9hcmQgc3VwcG9ydCBjb2RlIG1heSBkbykgc28gdGhlIG9ubHkgcmVhbAogcmVxdWlyZW1lbnQgaGVyZSBmb3IgdGhlIHVuaXQgYWRkcmVzcyBpcyB0byBlbnN1cmUgdW5pcXVlbmVzcyBvZgogdGhlIG5vZGUgdW5pdCBuYW1lIGF0IGEgZ2l2ZW4gbGV2ZWwgb2YgdGhlIHRyZWUuIE5vZGVzIHdpdGggbm8gbm90aW9uCkBAIC01MTgsMjAgKzQ2NywyMSBAQAogCiBFdmVyeSBub2RlIHdoaWNoIGFjdHVhbGx5IHJlcHJlc2VudHMgYW4gYWN0dWFsIGRldmljZSAodGhhdCBpcywgYSBub2RlCiB3aGljaCBpc24ndCBvbmx5IGEgdmlydHVhbCAiY29udGFpbmVyIiBmb3IgbW9yZSBub2RlcywgbGlrZSAiL2NwdXMiCi1pcykgaXMgYWxzbyByZXF1aXJlZCB0byBoYXZlIGEgImRldmljZV90eXBlIiBwcm9wZXJ0eSBpbmRpY2F0aW5nIHRoZQotdHlwZSBvZiBub2RlIC4KK2lzKSBpcyBhbHNvIHJlcXVpcmVkIHRvIGhhdmUgYSAiY29tcGF0aWJsZSIgcHJvcGVydHkgaW5kaWNhdGluZyB0aGUKK3NwZWNpZmljIGhhcmR3YXJlIGFuZCBhbiBvcHRpb25hbCBsaXN0IG9mIGRldmljZXMgaXQgaXMgZnVsbHkKK2JhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGguCiAKIEZpbmFsbHksIGV2ZXJ5IG5vZGUgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBmcm9tIGEgcHJvcGVydHkgaW4gYW5vdGhlcgotbm9kZSBpcyByZXF1aXJlZCB0byBoYXZlIGEgImxpbnV4LHBoYW5kbGUiIHByb3BlcnR5LiBSZWFsIG9wZW4KLWZpcm13YXJlIGltcGxlbWVudGF0aW9ucyBwcm92aWRlIGEgdW5pcXVlICJwaGFuZGxlIiB2YWx1ZSBmb3IgZXZlcnkKLW5vZGUgdGhhdCB0aGUgInByb21faW5pdCgpIiB0cmFtcG9saW5lIGNvZGUgdHVybnMgaW50bwotImxpbnV4LHBoYW5kbGUiIHByb3BlcnRpZXMuIEhvd2V2ZXIsIHRoaXMgaXMgbWFkZSBvcHRpb25hbCBpZiB0aGUKLWZsYXR0ZW5lZCBkZXZpY2UgdHJlZSBpcyB1c2VkIGRpcmVjdGx5LiBBbiBleGFtcGxlIG9mIGEgbm9kZQorbm9kZSBpcyByZXF1aXJlZCB0byBoYXZlIGVpdGhlciBhICJwaGFuZGxlIiBvciBhICJsaW51eCxwaGFuZGxlIgorcHJvcGVydHkuIFJlYWwgT3BlbiBGaXJtd2FyZSBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZSBhIHVuaXF1ZQorInBoYW5kbGUiIHZhbHVlIGZvciBldmVyeSBub2RlIHRoYXQgdGhlICJwcm9tX2luaXQoKSIgdHJhbXBvbGluZSBjb2RlCit0dXJucyBpbnRvICJsaW51eCxwaGFuZGxlIiBwcm9wZXJ0aWVzLiBIb3dldmVyLCB0aGlzIGlzIG1hZGUgb3B0aW9uYWwKK2lmIHRoZSBmbGF0dGVuZWQgZGV2aWNlIHRyZWUgaXMgdXNlZCBkaXJlY3RseS4gQW4gZXhhbXBsZSBvZiBhIG5vZGUKIHJlZmVyZW5jaW5nIGFub3RoZXIgbm9kZSB2aWEgInBoYW5kbGUiIGlzIHdoZW4gbGF5aW5nIG91dCB0aGUKIGludGVycnVwdCB0cmVlIHdoaWNoIHdpbGwgYmUgZGVzY3JpYmVkIGluIGEgZnVydGhlciB2ZXJzaW9uIG9mIHRoaXMKIGRvY3VtZW50LgogCi1UaGlzICJsaW51eCwgcGhhbmRsZSIgcHJvcGVydHkgaXMgYSAzMi1iaXQgdmFsdWUgdGhhdCB1bmlxdWVseQorVGhlICJwaGFuZGxlIiBwcm9wZXJ0eSBpcyBhIDMyLWJpdCB2YWx1ZSB0aGF0IHVuaXF1ZWx5CiBpZGVudGlmaWVzIGEgbm9kZS4gWW91IGFyZSBmcmVlIHRvIHVzZSB3aGF0ZXZlciB2YWx1ZXMgb3Igc3lzdGVtIG9mCiB2YWx1ZXMsIGludGVybmFsIHBvaW50ZXJzLCBvciB3aGF0ZXZlciB0byBnZW5lcmF0ZSB0aGVzZSwgdGhlIG9ubHkKIHJlcXVpcmVtZW50IGlzIHRoYXQgZXZlcnkgbm9kZSBmb3Igd2hpY2ggeW91IHByb3ZpZGUgdGhhdCBwcm9wZXJ0eSBoYXMKQEAgLTY5NCw3ICs2NDQsNyBAQAogd2hpbGUgdGhlIHRvcCBjZWxsIGNvbnRhaW5zIGFkZHJlc3Mgc3BhY2UgaW5kaWNhdGlvbiwgZmxhZ3MsIGFuZCBwY2kKIGJ1cyAmIGRldmljZSBudW1iZXJzLgogCi1Gb3IgYnVzc2VzIHRoYXQgc3VwcG9ydCBkeW5hbWljIGFsbG9jYXRpb24sIGl0J3MgdGhlIGFjY2VwdGVkIHByYWN0aWNlCitGb3IgYnVzZXMgdGhhdCBzdXBwb3J0IGR5bmFtaWMgYWxsb2NhdGlvbiwgaXQncyB0aGUgYWNjZXB0ZWQgcHJhY3RpY2UKIHRvIHRoZW4gbm90IHByb3ZpZGUgdGhlIGFkZHJlc3MgaW4gInJlZyIgKGtlZXAgaXQgMCkgdGhvdWdoIHdoaWxlCiBwcm92aWRpbmcgYSBmbGFnIGluZGljYXRpbmcgdGhlIGFkZHJlc3MgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLCBhbmQKIHRoZW4sIHRvIHByb3ZpZGUgYSBzZXBhcmF0ZSAiYXNzaWduZWQtYWRkcmVzc2VzIiBwcm9wZXJ0eSB0aGF0CkBAIC03MTEsNyArNjYxLDcgQEAKIFRoZSAicmVnIiBwcm9wZXJ0eSBvbmx5IGRlZmluZXMgYWRkcmVzc2VzIGFuZCBzaXplcyAoaWYgI3NpemUtY2VsbHMgaXMKIG5vbi0wKSB3aXRoaW4gYSBnaXZlbiBidXMuIEluIG9yZGVyIHRvIHRyYW5zbGF0ZSBhZGRyZXNzZXMgdXB3YXJkCiAodGhhdCBpcyBpbnRvIHBhcmVudCBidXMgYWRkcmVzc2VzLCBhbmQgcG9zc2libHkgaW50byBDUFUgcGh5c2ljYWwKLWFkZHJlc3NlcyksIGFsbCBidXNzZXMgbXVzdCBjb250YWluIGEgInJhbmdlcyIgcHJvcGVydHkuIElmIHRoZQorYWRkcmVzc2VzKSwgYWxsIGJ1c2VzIG11c3QgY29udGFpbiBhICJyYW5nZXMiIHByb3BlcnR5LiBJZiB0aGUKICJyYW5nZXMiIHByb3BlcnR5IGlzIG1pc3NpbmcgYXQgYSBnaXZlbiBsZXZlbCwgaXQncyBhc3N1bWVkIHRoYXQKIHRyYW5zbGF0aW9uIGlzbid0IHBvc3NpYmxlLCBpLmUuLCB0aGUgcmVnaXN0ZXJzIGFyZSBub3QgdmlzaWJsZSBvbiB0aGUKIHBhcmVudCBidXMuICBUaGUgZm9ybWF0IG9mIHRoZSAicmFuZ2VzIiBwcm9wZXJ0eSBmb3IgYSBidXMgaXMgYSBsaXN0CkBAIC03MjcsOSArNjc3LDkgQEAKIFBDSTwtPklTQSBicmlkZ2UsIHRoYXQgd291bGQgYmUgYSBQQ0kgYWRkcmVzcy4gSXQgZGVmaW5lcyB0aGUgYmFzZQogYWRkcmVzcyBpbiB0aGUgcGFyZW50IGJ1cyB3aGVyZSB0aGUgYmVnaW5uaW5nIG9mIHRoYXQgcmFuZ2UgaXMgbWFwcGVkLgogCi1Gb3IgYSBuZXcgNjQtYml0IHBvd2VycGMgYm9hcmQsIEkgcmVjb21tZW5kIGVpdGhlciB0aGUgMi8yIGZvcm1hdCBvcgorRm9yIG5ldyA2NC1iaXQgYm9hcmQgc3VwcG9ydCwgSSByZWNvbW1lbmQgZWl0aGVyIHRoZSAyLzIgZm9ybWF0IG9yCiBBcHBsZSdzIDIvMSBmb3JtYXQgd2hpY2ggaXMgc2xpZ2h0bHkgbW9yZSBjb21wYWN0IHNpbmNlIHNpemVzIHVzdWFsbHkKLWZpdCBpbiBhIHNpbmdsZSAzMi1iaXQgd29yZC4gICBOZXcgMzItYml0IHBvd2VycGMgYm9hcmRzIHNob3VsZCB1c2UgYQorZml0IGluIGEgc2luZ2xlIDMyLWJpdCB3b3JkLiAgIE5ldyAzMi1iaXQgYm9hcmQgc3VwcG9ydCBzaG91bGQgdXNlIGEKIDEvMSBmb3JtYXQsIHVubGVzcyB0aGUgcHJvY2Vzc29yIHN1cHBvcnRzIHBoeXNpY2FsIGFkZHJlc3NlcyBncmVhdGVyCiB0aGFuIDMyLWJpdHMsIGluIHdoaWNoIGNhc2UgYSAyLzEgZm9ybWF0IGlzIHJlY29tbWVuZGVkLgogCkBAIC03NTQsNyArNzA0LDcgQEAKIFdoaWxlIGVhcmxpZXIgdXNlcnMgb2YgT3BlbiBGaXJtd2FyZSBsaWtlIE9sZFdvcmxkIG1hY2ludG9zaGVzIHRlbmRlZAogdG8gdXNlIHRoZSBhY3R1YWwgZGV2aWNlIG5hbWUgZm9yIHRoZSAibmFtZSIgcHJvcGVydHksIGl0J3Mgbm93YWRheXMKIGNvbnNpZGVyZWQgYSBnb29kIHByYWN0aWNlIHRvIHVzZSBhIG5hbWUgdGhhdCBpcyBjbG9zZXIgdG8gdGhlIGRldmljZQotY2xhc3MgKG9mdGVuIGVxdWFsIHRvIGRldmljZV90eXBlKS4gRm9yIGV4YW1wbGUsIG5vd2FkYXlzLCBldGhlcm5ldAorY2xhc3MgKG9mdGVuIGVxdWFsIHRvIGRldmljZV90eXBlKS4gRm9yIGV4YW1wbGUsIG5vd2FkYXlzLCBFdGhlcm5ldAogY29udHJvbGxlcnMgYXJlIG5hbWVkICJldGhlcm5ldCIsIGFuIGFkZGl0aW9uYWwgIm1vZGVsIiBwcm9wZXJ0eQogZGVmaW5pbmcgcHJlY2lzZWx5IHRoZSBjaGlwIHR5cGUvbW9kZWwsIGFuZCAiY29tcGF0aWJsZSIgcHJvcGVydHkKIGRlZmluaW5nIHRoZSBmYW1pbHkgaW4gY2FzZSBhIHNpbmdsZSBkcml2ZXIgY2FuIGRyaXZlciBtb3JlIHRoYW4gb25lCkBAIC03NzIsNyArNzIyLDcgQEAKIDQpIE5vdGUgYWJvdXQgbm9kZSBhbmQgcHJvcGVydHkgbmFtZXMgYW5kIGNoYXJhY3RlciBzZXQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hpbGUgb3BlbiBmaXJtd2FyZSBwcm92aWRlcyBtb3JlIGZsZXhpYmxlIHVzYWdlIG9mIDg4NTktMSwgdGhpcworV2hpbGUgT3BlbiBGaXJtd2FyZSBwcm92aWRlcyBtb3JlIGZsZXhpYmxlIHVzYWdlIG9mIDg4NTktMSwgdGhpcwogc3BlY2lmaWNhdGlvbiBlbmZvcmNlcyBtb3JlIHN0cmljdCBydWxlcy4gTm9kZXMgYW5kIHByb3BlcnRpZXMgc2hvdWxkCiBiZSBjb21wcmlzZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzICdhJyB0byAneicsICcwJyB0bwogJzknLCAnLCcsICcuJywgJ18nLCAnKycsICcjJywgJz8nLCBhbmQgJy0nLiBOb2RlIG5hbWVzIGFkZGl0aW9uYWxseQpAQCAtNzkyLDcgKzc0Miw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBUaGVzZSBhcmUgYWxsIHRoYXQgYXJlIGN1cnJlbnRseSByZXF1aXJlZC4gSG93ZXZlciwgaXQgaXMgc3Ryb25nbHkKICAgcmVjb21tZW5kZWQgdGhhdCB5b3UgZXhwb3NlIFBDSSBob3N0IGJyaWRnZXMgYXMgZG9jdW1lbnRlZCBpbiB0aGUKLSAgUENJIGJpbmRpbmcgdG8gb3BlbiBmaXJtd2FyZSwgYW5kIHlvdXIgaW50ZXJydXB0IHRyZWUgYXMgZG9jdW1lbnRlZAorICBQQ0kgYmluZGluZyB0byBPcGVuIEZpcm13YXJlLCBhbmQgeW91ciBpbnRlcnJ1cHQgdHJlZSBhcyBkb2N1bWVudGVkCiAgIGluIE9GIGludGVycnVwdCB0cmVlIHNwZWNpZmljYXRpb24uCiAKICAgYSkgVGhlIHJvb3Qgbm9kZQpAQCAtODAyLDIwICs3NTIsMTIgQEAKICAgICAtIG1vZGVsIDogdGhpcyBpcyB5b3VyIGJvYXJkIG5hbWUvbW9kZWwKICAgICAtICNhZGRyZXNzLWNlbGxzIDogYWRkcmVzcyByZXByZXNlbnRhdGlvbiBmb3IgInJvb3QiIGRldmljZXMKICAgICAtICNzaXplLWNlbGxzOiB0aGUgc2l6ZSByZXByZXNlbnRhdGlvbiBmb3IgInJvb3QiIGRldmljZXMKLSAgICAtIGRldmljZV90eXBlIDogVGhpcyBwcm9wZXJ0eSBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LiBIb3dldmVyLCBpZgotICAgICAgeW91IGRlY2lkZSB0byBjcmVhdGUgYSBkZXZpY2VfdHlwZSBmb3IgeW91ciByb290IG5vZGUsIG1ha2Ugc3VyZSBpdAotICAgICAgaXMgX25vdF8gImNocnAiIHVubGVzcyB5b3VyIHBsYXRmb3JtIGlzIGEgcFNlcmllcyBvciBQQVBSIGNvbXBsaWFudAotICAgICAgb25lIGZvciA2NC1iaXQsIG9yIGEgQ0hSUC10eXBlIG1hY2hpbmUgZm9yIDMyLWJpdCBhcyB0aGlzIHdpbGwKLSAgICAgIG1hdGNoZWQgYnkgdGhlIGtlcm5lbCB0aGlzIHdheS4KLQotICBBZGRpdGlvbmFsbHksIHNvbWUgcmVjb21tZW5kZWQgcHJvcGVydGllcyBhcmU6Ci0KICAgICAtIGNvbXBhdGlibGUgOiB0aGUgYm9hcmQgImZhbWlseSIgZ2VuZXJhbGx5IGZpbmRzIGl0cyB3YXkgaGVyZSwKICAgICAgIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSAyIGJvYXJkIG1vZGVscyB3aXRoIGEgc2ltaWxhciBsYXlvdXQsCiAgICAgICB0aGF0IHR5cGljYWxseSBnZXQgZHJpdmVuIGJ5IHRoZSBzYW1lIHBsYXRmb3JtIGNvZGUgaW4gdGhlCi0gICAgICBrZXJuZWwsIHlvdSB3b3VsZCB1c2UgYSBkaWZmZXJlbnQgIm1vZGVsIiBwcm9wZXJ0eSBidXQgcHV0IGEKLSAgICAgIHZhbHVlIGluICJjb21wYXRpYmxlIi4gVGhlIGtlcm5lbCBkb2Vzbid0IGRpcmVjdGx5IHVzZSB0aGF0Ci0gICAgICB2YWx1ZSBidXQgaXQgaXMgZ2VuZXJhbGx5IHVzZWZ1bC4KKyAgICAgIGtlcm5lbCwgeW91IHdvdWxkIHNwZWNpZnkgdGhlIGV4YWN0IGJvYXJkIG1vZGVsIGluIHRoZQorICAgICAgY29tcGF0aWJsZSBwcm9wZXJ0eSBmb2xsb3dlZCBieSBhbiBlbnRyeSB0aGF0IHJlcHJlc2VudHMgdGhlIFNvQworICAgICAgbW9kZWwuCiAKICAgVGhlIHJvb3Qgbm9kZSBpcyBhbHNvIGdlbmVyYWxseSB3aGVyZSB5b3UgYWRkIGFkZGl0aW9uYWwgcHJvcGVydGllcwogICBzcGVjaWZpYyB0byB5b3VyIGJvYXJkIGxpa2UgdGhlIHNlcmlhbCBudW1iZXIgaWYgYW55LCB0aGF0IHNvcnQgb2YKQEAgLTg0MSw4ICs3ODMsMTEgQEAKIAogICBTbyB1bmRlciAvY3B1cywgeW91IGFyZSBzdXBwb3NlZCB0byBjcmVhdGUgYSBub2RlIGZvciBldmVyeSBDUFUgb24KICAgdGhlIG1hY2hpbmUuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJlc3RyaWN0aW9uIG9uIHRoZSBuYW1lIG9mIHRoZQotICBDUFUsIHRob3VnaCBJdCdzIGNvbW1vbiBwcmFjdGljZSB0byBjYWxsIGl0IFBvd2VyUEMsPG5hbWU+LiBGb3IKKyAgQ1BVLCB0aG91Z2ggaXQncyBjb21tb24gdG8gY2FsbCBpdCA8YXJjaGl0ZWN0dXJlPiw8Y29yZT4uIEZvcgogICBleGFtcGxlLCBBcHBsZSB1c2VzIFBvd2VyUEMsRzUgd2hpbGUgSUJNIHVzZXMgUG93ZXJQQyw5NzBGWC4KKyAgSG93ZXZlciwgdGhlIEdlbmVyaWMgTmFtZXMgY29udmVudGlvbiBzdWdnZXN0cyB0aGF0IGl0IHdvdWxkIGJlCisgIGJldHRlciB0byBzaW1wbHkgdXNlICdjcHUnIGZvciBlYWNoIGNwdSBub2RlIGFuZCB1c2UgdGhlIGNvbXBhdGlibGUKKyAgcHJvcGVydHkgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGNwdSBjb3JlLgogCiAgIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAKQEAgLTkyMyw3ICs4NjgsNyBAQAogCiAgIGUpIFRoZSAvY2hvc2VuIG5vZGUKIAotICBUaGlzIG5vZGUgaXMgYSBiaXQgInNwZWNpYWwiLiBOb3JtYWxseSwgdGhhdCdzIHdoZXJlIG9wZW4gZmlybXdhcmUKKyAgVGhpcyBub2RlIGlzIGEgYml0ICJzcGVjaWFsIi4gTm9ybWFsbHksIHRoYXQncyB3aGVyZSBPcGVuIEZpcm13YXJlCiAgIHB1dHMgc29tZSB2YXJpYWJsZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiwgbGlrZSB0aGUgYXJndW1lbnRzLCBvcgogICB0aGUgZGVmYXVsdCBpbnB1dC9vdXRwdXQgZGV2aWNlcy4KIApAQCAtOTQwLDExICs4ODUsNyBAQAogICAgICAgY29uc29sZSBkZXZpY2UgaWYgYW55LiBUeXBpY2FsbHksIGlmIHlvdSBoYXZlIHNlcmlhbCBkZXZpY2VzIG9uCiAgICAgICB5b3VyIGJvYXJkLCB5b3UgbWF5IHdhbnQgdG8gcHV0IHRoZSBmdWxsIHBhdGggdG8gdGhlIG9uZSBzZXQgYXMKICAgICAgIHRoZSBkZWZhdWx0IGNvbnNvbGUgaW4gdGhlIGZpcm13YXJlIGhlcmUsIGZvciB0aGUga2VybmVsIHRvIHBpY2sKLSAgICAgIGl0IHVwIGFzIGl0cyBvd24gZGVmYXVsdCBjb25zb2xlLiBJZiB5b3UgbG9vayBhdCB0aGUgZnVuY3Rpb24KLSAgICAgIHNldF9wcmVmZXJyZWRfY29uc29sZSgpIGluIGFyY2gvcHBjNjQva2VybmVsL3NldHVwLmMsIHlvdSdsbCBzZWUKLSAgICAgIHRoYXQgdGhlIGtlcm5lbCB0cmllcyB0byBmaW5kIG91dCB0aGUgZGVmYXVsdCBjb25zb2xlIGFuZCBoYXMKLSAgICAgIGtub3dsZWRnZSBvZiB2YXJpb3VzIHR5cGVzIGxpa2UgODI1MCBzZXJpYWwgcG9ydHMuIFlvdSBtYXkgd2FudAotICAgICAgdG8gZXh0ZW5kIHRoaXMgZnVuY3Rpb24gdG8gYWRkIHlvdXIgb3duLgorICAgICAgaXQgdXAgYXMgaXRzIG93biBkZWZhdWx0IGNvbnNvbGUuCiAKICAgTm90ZSB0aGF0IHUtYm9vdCBjcmVhdGVzIGFuZCBmaWxscyBpbiB0aGUgY2hvc2VuIG5vZGUgZm9yIHBsYXRmb3JtcwogICB0aGF0IHVzZSBpdC4KQEAgLTk1NSwyMyArODk2LDIzIEBACiAKICAgZikgdGhlIC9zb2M8U09DbmFtZT4gbm9kZQogCi0gIFRoaXMgbm9kZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIHN5c3RlbS1vbi1hLWNoaXAgKFNPQykgYW5kIG11c3QgYmUKLSAgcHJlc2VudCBpZiB0aGUgcHJvY2Vzc29yIGlzIGEgU09DLiBUaGUgdG9wLWxldmVsIHNvYyBub2RlIGNvbnRhaW5zCi0gIGluZm9ybWF0aW9uIHRoYXQgaXMgZ2xvYmFsIHRvIGFsbCBkZXZpY2VzIG9uIHRoZSBTT0MuIFRoZSBub2RlIG5hbWUKLSAgc2hvdWxkIGNvbnRhaW4gYSB1bml0IGFkZHJlc3MgZm9yIHRoZSBTT0MsIHdoaWNoIGlzIHRoZSBiYXNlIGFkZHJlc3MKLSAgb2YgdGhlIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXIgc2V0IGZvciB0aGUgU09DLiBUaGUgbmFtZSBvZiBhbiBzb2MKKyAgVGhpcyBub2RlIGlzIHVzZWQgdG8gcmVwcmVzZW50IGEgc3lzdGVtLW9uLWEtY2hpcCAoU29DKSBhbmQgbXVzdCBiZQorICBwcmVzZW50IGlmIHRoZSBwcm9jZXNzb3IgaXMgYSBTb0MuIFRoZSB0b3AtbGV2ZWwgc29jIG5vZGUgY29udGFpbnMKKyAgaW5mb3JtYXRpb24gdGhhdCBpcyBnbG9iYWwgdG8gYWxsIGRldmljZXMgb24gdGhlIFNvQy4gVGhlIG5vZGUgbmFtZQorICBzaG91bGQgY29udGFpbiBhIHVuaXQgYWRkcmVzcyBmb3IgdGhlIFNvQywgd2hpY2ggaXMgdGhlIGJhc2UgYWRkcmVzcworICBvZiB0aGUgbWVtb3J5LW1hcHBlZCByZWdpc3RlciBzZXQgZm9yIHRoZSBTb0MuIFRoZSBuYW1lIG9mIGFuIFNvQwogICBub2RlIHNob3VsZCBzdGFydCB3aXRoICJzb2MiLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgbmFtZSBzaG91bGQKICAgcmVwcmVzZW50IHRoZSBwYXJ0IG51bWJlciBmb3IgdGhlIHNvYy4gIEZvciBleGFtcGxlLCB0aGUgTVBDODU0MCdzCiAgIHNvYyBub2RlIHdvdWxkIGJlIGNhbGxlZCAic29jODU0MCIuCiAKICAgUmVxdWlyZWQgcHJvcGVydGllczoKIAotICAgIC0gZGV2aWNlX3R5cGUgOiBTaG91bGQgYmUgInNvYyIKICAgICAtIHJhbmdlcyA6IFNob3VsZCBiZSBkZWZpbmVkIGFzIHNwZWNpZmllZCBpbiAxKSB0byBkZXNjcmliZSB0aGUKLSAgICAgIHRyYW5zbGF0aW9uIG9mIFNPQyBhZGRyZXNzZXMgZm9yIG1lbW9yeSBtYXBwZWQgU09DIHJlZ2lzdGVycy4KLSAgICAtIGJ1cy1mcmVxdWVuY3k6IENvbnRhaW5zIHRoZSBidXMgZnJlcXVlbmN5IGZvciB0aGUgU09DIG5vZGUuCisgICAgICB0cmFuc2xhdGlvbiBvZiBTb0MgYWRkcmVzc2VzIGZvciBtZW1vcnkgbWFwcGVkIFNvQyByZWdpc3RlcnMuCisgICAgLSBidXMtZnJlcXVlbmN5OiBDb250YWlucyB0aGUgYnVzIGZyZXF1ZW5jeSBmb3IgdGhlIFNvQyBub2RlLgogICAgICAgVHlwaWNhbGx5LCB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBpcyBmaWxsZWQgaW4gYnkgdGhlIGJvb3QKICAgICAgIGxvYWRlci4KKyAgICAtIGNvbXBhdGlibGUgOiBFeGFjdCBtb2RlbCBvZiB0aGUgU29DCiAKIAogICBSZWNvbW1lbmRlZCBwcm9wZXJ0aWVzOgpAQCAtMTE1NSwxMiArMTA5NiwxMyBAQAogCiAgIC0gQW4gZXhhbXBsZSBvZiBjb2RlIGZvciBpdGVyYXRpbmcgbm9kZXMgJiByZXRyaWV2aW5nIHByb3BlcnRpZXMKICAgICBkaXJlY3RseSBmcm9tIHRoZSBmbGF0dGVuZWQgdHJlZSBmb3JtYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBrZXJuZWwKLSAgICBmaWxlIGFyY2gvcHBjNjQva2VybmVsL3Byb20uYywgbG9vayBhdCBzY2FuX2ZsYXRfZHQoKSBmdW5jdGlvbiwKKyAgICBmaWxlIGRyaXZlcnMvb2YvZmR0LmMuICBMb29rIGF0IHRoZSBvZl9zY2FuX2ZsYXRfZHQoKSBmdW5jdGlvbiwKICAgICBpdHMgdXNhZ2UgaW4gZWFybHlfaW5pdF9kZXZ0cmVlKCksIGFuZCB0aGUgY29ycmVzcG9uZGluZyB2YXJpb3VzCiAgICAgZWFybHlfaW5pdF9kdF9zY2FuXyooKSBjYWxsYmFja3MuIFRoYXQgY29kZSBjYW4gYmUgcmUtdXNlZCBpbiBhCiAgICAgR1BMIGJvb3Rsb2FkZXIsIGFuZCBhcyB0aGUgYXV0aG9yIG9mIHRoYXQgY29kZSwgSSB3b3VsZCBiZSBoYXBweQogICAgIHRvIGRpc2N1c3MgcG9zc2libGUgZnJlZSBsaWNlbnNpbmcgdG8gYW55IHZlbmRvciB3aG8gd2lzaGVzIHRvCiAgICAgaW50ZWdyYXRlIGFsbCBvciBwYXJ0IG9mIHRoaXMgY29kZSBpbnRvIGEgbm9uLUdQTCBib290bG9hZGVyLgorICAgIChyZWZlcmVuY2UgbmVlZGVkOyB3aG8gaXMgJ0knIGhlcmU/IC0tLWdjbCBKYW4gMzEsIDIwMTEpCiAKIAogCkBAIC0xMjAzLDE4ICsxMTQ1LDE5IEBACiAyKSBSZXByZXNlbnRpbmcgZGV2aWNlcyB3aXRob3V0IGEgY3VycmVudCBPRiBzcGVjaWZpY2F0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUN1cnJlbnRseSwgdGhlcmUgYXJlIG1hbnkgZGV2aWNlcyBvbiBTT0NzIHRoYXQgZG8gbm90IGhhdmUgYSBzdGFuZGFyZAotcmVwcmVzZW50YXRpb24gcHJlLWRlZmluZWQgYXMgcGFydCBvZiB0aGUgb3BlbiBmaXJtd2FyZQotc3BlY2lmaWNhdGlvbnMsIG1haW5seSBiZWNhdXNlIHRoZSBib2FyZHMgdGhhdCBjb250YWluIHRoZXNlIFNPQ3MgYXJlCi1ub3QgY3VycmVudGx5IGJvb3RlZCB1c2luZyBvcGVuIGZpcm13YXJlLiAgIFRoaXMgc2VjdGlvbiBjb250YWlucwotZGVzY3JpcHRpb25zIGZvciB0aGUgU09DIGRldmljZXMgZm9yIHdoaWNoIG5ldyBub2RlcyBoYXZlIGJlZW4KLWRlZmluZWQ7IHRoaXMgbGlzdCB3aWxsIGV4cGFuZCBhcyBtb3JlIGFuZCBtb3JlIFNPQy1jb250YWluaW5nCi1wbGF0Zm9ybXMgYXJlIG1vdmVkIG92ZXIgdG8gdXNlIHRoZSBmbGF0dGVuZWQtZGV2aWNlLXRyZWUgbW9kZWwuCitDdXJyZW50bHksIHRoZXJlIGFyZSBtYW55IGRldmljZXMgb24gU29DcyB0aGF0IGRvIG5vdCBoYXZlIGEgc3RhbmRhcmQKK3JlcHJlc2VudGF0aW9uIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgT3BlbiBGaXJtd2FyZSBzcGVjaWZpY2F0aW9ucywKK21haW5seSBiZWNhdXNlIHRoZSBib2FyZHMgdGhhdCBjb250YWluIHRoZXNlIFNvQ3MgYXJlIG5vdCBjdXJyZW50bHkKK2Jvb3RlZCB1c2luZyBPcGVuIEZpcm13YXJlLiAgQmluZGluZyBkb2N1bWVudGF0aW9uIGZvciBuZXcgZGV2aWNlcworc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MgZGlyZWN0b3J5LgorVGhhdCBkaXJlY3Rvcnkgd2lsbCBleHBhbmQgYXMgZGV2aWNlIHRyZWUgc3VwcG9ydCBpcyBhZGRlZCB0byBtb3JlIGFuZAorbW9yZSBTb0NzLgorCiAKIFZJSSAtIFNwZWNpZnlpbmcgaW50ZXJydXB0IGluZm9ybWF0aW9uIGZvciBkZXZpY2VzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIGRldmljZSB0cmVlIHJlcHJlc2VudHMgdGhlIGJ1c3NlcyBhbmQgZGV2aWNlcyBvZiBhIGhhcmR3YXJlCitUaGUgZGV2aWNlIHRyZWUgcmVwcmVzZW50cyB0aGUgYnVzZXMgYW5kIGRldmljZXMgb2YgYSBoYXJkd2FyZQogc3lzdGVtIGluIGEgZm9ybSBzaW1pbGFyIHRvIHRoZSBwaHlzaWNhbCBidXMgdG9wb2xvZ3kgb2YgdGhlCiBoYXJkd2FyZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IGI5NTk2NTkuLmIzZjM1ZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTYwMywzICs2MDMsMTkgQEAKIFdobzoJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJbm9zd2FwYWNjb3VudCBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcgorV2hlbjoJMi42LjQwCitXaHk6CVRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBtZW1zdyBmZWF0dXJlIGVuYWJsZWQgYnkKKwlDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUl9TV0FQIGNvdWxkIGJlIGRpc2FibGVkIGJ5IHRoZSBub3N3YXBhY2NvdW50CisJa2VybmVsIHBhcmFtZXRlciAoaW50cm9kdWNlZCBpbiAyLjYuMjktcmMxKS4gTGF0ZXIgb24sIHRoaXMgZGVjaXNpb24KKwl0dXJuZWQgb3V0IHRvIGJlIG5vdCBpZGVhbCBiZWNhdXNlIHdlIGNhbm5vdCBoYXZlIHRoZSBmZWF0dXJlIGNvbXBpbGVkCisJaW4gYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIGxldCBvbmx5IGludGVyZXN0ZWQgdG8gZW5hYmxlIGl0CisJKGUuZy4gZ2VuZXJhbCBkaXN0cmlidXRpb24ga2VybmVscyBtaWdodCBuZWVkIGl0KS4gVGhlcmVmb3JlIHdlIGhhdmUKKwlhZGRlZCBzd2FwYWNjb3VudFs9MHwxXSBwYXJhbWV0ZXIgKGludHJvZHVjZWQgaW4gMi42LjM3KSB3aGljaCBwcm92aWRlcworCXRoZSBib3RoIHBvc3NpYmlsaXRpZXMuIElmIHdlIHJlbW92ZSBub3N3YXBhY2NvdW50IHdlIHdpbGwgaGF2ZQorCWxlc3MgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFuZCB3ZQorCWNhbiBhbHNvIGNsZWFudXAgdGhlIHBhcmFtZXRlciBoYW5kbGluZyBhIGJpdCAoKS4KK1dobzoJTWljaGFsIEhvY2tvIDxtaG9ja29Ac3VzZS5jej4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKaW5kZXggNmVmOGNmMy4uOTMzYmM2NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CkBAIC00NjAsNiArNDYwLDggQEAKIDIuMS4zMDoKIAktIEZpeCB3cml0ZXYoKSAoaXQga2VwdCB3cml0aW5nIHRoZSBmaXJzdCBzZWdtZW50IG92ZXIgYW5kIG92ZXIgYWdhaW4KIAkgIGluc3RlYWQgb2YgbW92aW5nIG9udG8gc3Vic2VxdWVudCBzZWdtZW50cykuCisJLSBGaXggY3Jhc2ggaW4gbnRmc19tZnRfcmVjb3JkX2FsbG9jKCkgd2hlbiBtYXBwaW5nIHRoZSBuZXcgZXh0ZW50IG1mdAorCSAgcmVjb3JkIGZhaWxlZC4KIDIuMS4yOToKIAktIEZpeCBhIGRlYWRsb2NrIHdoZW4gbW91bnRpbmcgcmVhZC13cml0ZS4KIDIuMS4yODoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vamM0MiBiL0RvY3VtZW50YXRpb24vaHdtb24vamM0MgppbmRleCAwZTc2ZWYxLi5hMjJlY2Y0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2pjNDIKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9qYzQyCkBAIC01MSw3ICs1MSw4IEBACiAgICogSkVERUMgSkMgNDIuNCBjb21wbGlhbnQgdGVtcGVyYXR1cmUgc2Vuc29yIGNoaXBzCiAgICAgUHJlZml4OiAnamM0MicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTggLSAweDFmCi0gICAgRGF0YXNoZWV0OiAtCisgICAgRGF0YXNoZWV0OgorCWh0dHA6Ly93d3cuamVkZWMub3JnL3NpdGVzL2RlZmF1bHQvZmlsZXMvZG9jcy80XzAxXzA0UjE5LnBkZgogCiBBdXRob3I6CiAJR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CkBAIC02MCw3ICs2MSwxMSBAQAogRGVzY3JpcHRpb24KIC0tLS0tLS0tLS0tCiAKLVRoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgSkVERUMgSkMgNDIuNCBjb21wbGlhbnQgdGVtcGVyYXR1cmUgc2Vuc29ycy4KK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgSkVERUMgSkMgNDIuNCBjb21wbGlhbnQgdGVtcGVyYXR1cmUgc2Vuc29ycywKK3doaWNoIGFyZSB1c2VkIG9uIG1hbnkgRERSMyBtZW1vcnkgbW9kdWxlcyBmb3IgbW9iaWxlIGRldmljZXMgYW5kIHNlcnZlcnMuIFNvbWUKK3N5c3RlbXMgdXNlIHRoZSBzZW5zb3IgdG8gcHJldmVudCBtZW1vcnkgb3ZlcmhlYXRpbmcgYnkgYXV0b21hdGljYWxseSB0aHJvdHRsaW5nCit0aGUgbWVtb3J5IGNvbnRyb2xsZXIuCisKIFRoZSBkcml2ZXIgYXV0by1kZXRlY3RzIHRoZSBjaGlwcyBsaXN0ZWQgYWJvdmUsIGJ1dCBjYW4gYmUgbWFudWFsbHkgaW5zdGFudGlhdGVkCiB0byBzdXBwb3J0IG90aGVyIEpDIDQyLjQgY29tcGxpYW50IGNoaXBzLgogCkBAIC04MSwxNSArODYsMTkgQEAKIHdoaWNoIGFwcGxpZXMgdG8gYWxsIGxpbWl0cy4gVGhpcyByZWdpc3RlciBjYW4gYmUgd3JpdHRlbiBieSB3cml0aW5nIGludG8KIHRlbXAxX2NyaXRfaHlzdC4gT3RoZXIgaHlzdGVyZXNpcyBhdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCiAKK0lmIHRoZSBCSU9TIGhhcyBjb25maWd1cmVkIHRoZSBzZW5zb3IgZm9yIGF1dG9tYXRpYyB0ZW1wZXJhdHVyZSBtYW5hZ2VtZW50LCBpdAoraXMgbGlrZWx5IHRoYXQgaXQgaGFzIGxvY2tlZCB0aGUgcmVnaXN0ZXJzLCBpLmUuLCB0aGF0IHRoZSB0ZW1wZXJhdHVyZSBsaW1pdHMKK2Nhbm5vdCBiZSBjaGFuZ2VkLgorCiBTeXNmcyBlbnRyaWVzCiAtLS0tLS0tLS0tLS0tCiAKIHRlbXAxX2lucHV0CQlUZW1wZXJhdHVyZSAoUk8pCi10ZW1wMV9taW4JCU1pbmltdW0gdGVtcGVyYXR1cmUgKFJXKQotdGVtcDFfbWF4CQlNYXhpbXVtIHRlbXBlcmF0dXJlIChSVykKLXRlbXAxX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyYXR1cmUgKFJXKQordGVtcDFfbWluCQlNaW5pbXVtIHRlbXBlcmF0dXJlIChSTyBvciBSVykKK3RlbXAxX21heAkJTWF4aW11bSB0ZW1wZXJhdHVyZSAoUk8gb3IgUlcpCit0ZW1wMV9jcml0CQlDcml0aWNhbCBoaWdoIHRlbXBlcmF0dXJlIChSTyBvciBSVykKIAotdGVtcDFfY3JpdF9oeXN0CQlDcml0aWNhbCBoeXN0ZXJlc2lzIHRlbXBlcmF0dXJlIChSVykKK3RlbXAxX2NyaXRfaHlzdAkJQ3JpdGljYWwgaHlzdGVyZXNpcyB0ZW1wZXJhdHVyZSAoUk8gb3IgUlcpCiB0ZW1wMV9tYXhfaHlzdAkJTWF4aW11bSBoeXN0ZXJlc2lzIHRlbXBlcmF0dXJlIChSTykKIAogdGVtcDFfbWluX2FsYXJtCQlUZW1wZXJhdHVyZSBsb3cgYWxhcm0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vazEwdGVtcCBiL0RvY3VtZW50YXRpb24vaHdtb24vazEwdGVtcAppbmRleCA2NTI2ZWVlLi5kMmI1NmE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2sxMHRlbXAKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9rMTB0ZW1wCkBAIC05LDYgKzksOCBAQAogICBTb2NrZXQgUzFHMzogQXRobG9uIElJLCBTZW1wcm9uLCBUdXJpb24gSUkKICogQU1EIEZhbWlseSAxMWggcHJvY2Vzc29yczoKICAgU29ja2V0IFMxRzI6IEF0aGxvbiAoWDIpLCBTZW1wcm9uIChYMiksIFR1cmlvbiBYMiAoVWx0cmEpCisqIEFNRCBGYW1pbHkgMTJoIHByb2Nlc3NvcnM6ICJMbGFubyIKKyogQU1EIEZhbWlseSAxNGggcHJvY2Vzc29yczogIkJyYXpvcyIgKEMvRS9HLVNlcmllcykKIAogICBQcmVmaXg6ICdrMTB0ZW1wJwogICBBZGRyZXNzZXMgc2Nhbm5lZDogUENJIHNwYWNlCkBAIC0xNywxMCArMTksMTQgQEAKICAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy8zMTExNi5wZGYKICAgQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIChCS0RHKSBmb3IgQU1EIEZhbWlseSAxMWggUHJvY2Vzc29yczoKICAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy80MTI1Ni5wZGYKKyAgQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIChCS0RHKSBmb3IgQU1EIEZhbWlseSAxNGggTW9kZWxzIDAwaC0wRmggUHJvY2Vzc29yczoKKyAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy80MzE3MC5wZGYKICAgUmV2aXNpb24gR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTBoIFByb2Nlc3NvcnM6CiAgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDEzMjIucGRmCiAgIFJldmlzaW9uIEd1aWRlIGZvciBBTUQgRmFtaWx5IDExaCBQcm9jZXNzb3JzOgogICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQxNzg4LnBkZgorICBSZXZpc2lvbiBHdWlkZSBmb3IgQU1EIEZhbWlseSAxNGggTW9kZWxzIDAwaC0wRmggUHJvY2Vzc29yczoKKyAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy80NzUzNC5wZGYKICAgQU1EIEZhbWlseSAxMWggUHJvY2Vzc29yIFBvd2VyIGFuZCBUaGVybWFsIERhdGEgU2hlZXQgZm9yIE5vdGVib29rczoKICAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy80MzM3My5wZGYKICAgQU1EIEZhbWlseSAxMGggU2VydmVyIGFuZCBXb3Jrc3RhdGlvbiBQcm9jZXNzb3IgUG93ZXIgYW5kIFRoZXJtYWwgRGF0YSBTaGVldDoKQEAgLTM0LDcgKzQwLDcgQEAKIC0tLS0tLS0tLS0tCiAKIFRoaXMgZHJpdmVyIHBlcm1pdHMgcmVhZGluZyBvZiB0aGUgaW50ZXJuYWwgdGVtcGVyYXR1cmUgc2Vuc29yIG9mIEFNRAotRmFtaWx5IDEwaCBhbmQgMTFoIHByb2Nlc3NvcnMuCitGYW1pbHkgMTBoLzExaC8xMmgvMTRoIHByb2Nlc3NvcnMuCiAKIEFsbCB0aGVzZSBwcm9jZXNzb3JzIGhhdmUgYSBzZW5zb3IsIGJ1dCBvbiB0aG9zZSBmb3IgU29ja2V0IEYgb3IgQU0yKywKIHRoZSBzZW5zb3IgbWF5IHJldHVybiBpbmNvbnNpc3RlbnQgdmFsdWVzIChlcnJhdHVtIDMxOSkuICBUaGUgZHJpdmVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDg5ODM1YTQuLmY0YTA0YzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0xNDQsNiArMTQ0LDExIEBACiBhbmQgaXMgYmV0d2VlbiAyNTYgYW5kIDQwOTYgY2hhcmFjdGVycy4gSXQgaXMgZGVmaW5lZCBpbiB0aGUgZmlsZQogLi9pbmNsdWRlL2FzbS9zZXR1cC5oIGFzIENPTU1BTkRfTElORV9TSVpFLgogCitGaW5hbGx5LCB0aGUgW0tNR10gc3VmZml4IGlzIGNvbW1vbmx5IGRlc2NyaWJlZCBhZnRlciBhIG51bWJlciBvZiBrZXJuZWwKK3BhcmFtZXRlciB2YWx1ZXMuIFRoZXNlICdLJywgJ00nLCBhbmQgJ0cnIGxldHRlcnMgcmVwcmVzZW50IHRoZSBfYmluYXJ5XworbXVsdGlwbGllcnMgJ0tpbG8nLCAnTWVnYScsIGFuZCAnR2lnYScsIGVxdWFsbGluZyAyXjEwLCAyXjIwLCBhbmQgMl4zMAorYnl0ZXMgcmVzcGVjdGl2ZWx5LiBTdWNoIGxldHRlciBzdWZmaXhlcyBjYW4gYWxzbyBiZSBlbnRpcmVseSBvbWl0dGVkLgorCiAKIAlhY3BpPQkJW0hXLEFDUEksWDg2XQogCQkJQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlCkBAIC01NDUsMTYgKzU1MCwyMCBAQAogCQkJRm9ybWF0OgogCQkJPGZpcnN0X3Nsb3Q+LDxsYXN0X3Nsb3Q+LDxwb3J0Piw8ZW51bV9iaXQ+Wyw8ZGVidWc+XQogCi0JY3Jhc2hrZXJuZWw9bm5bS01HXUBzc1tLTUddCi0JCQlbS05MXSBSZXNlcnZlIGEgY2h1bmsgb2YgcGh5c2ljYWwgbWVtb3J5IHRvCi0JCQlob2xkIGEga2VybmVsIHRvIHN3aXRjaCB0byB3aXRoIGtleGVjIG9uIHBhbmljLgorCWNyYXNoa2VybmVsPXNpemVbS01HXVtAb2Zmc2V0W0tNR11dCisJCQlbS05MXSBVc2luZyBrZXhlYywgTGludXggY2FuIHN3aXRjaCB0byBhICdjcmFzaCBrZXJuZWwnCisJCQl1cG9uIHBhbmljLiBUaGlzIHBhcmFtZXRlciByZXNlcnZlcyB0aGUgcGh5c2ljYWwKKwkJCW1lbW9yeSByZWdpb24gW29mZnNldCwgb2Zmc2V0ICsgc2l6ZV0gZm9yIHRoYXQga2VybmVsCisJCQlpbWFnZS4gSWYgJ0BvZmZzZXQnIGlzIG9taXR0ZWQsIHRoZW4gYSBzdWl0YWJsZSBvZmZzZXQKKwkJCWlzIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuIENoZWNrCisJCQlEb2N1bWVudGF0aW9uL2tkdW1wL2tkdW1wLnR4dCBmb3IgZnVydGhlciBkZXRhaWxzLgogCiAJY3Jhc2hrZXJuZWw9cmFuZ2UxOnNpemUxWyxyYW5nZTI6c2l6ZTIsLi4uXVtAb2Zmc2V0XQogCQkJW0tOTF0gU2FtZSBhcyBhYm92ZSwgYnV0IGRlcGVuZHMgb24gdGhlIG1lbW9yeQogCQkJaW4gdGhlIHJ1bm5pbmcgc3lzdGVtLiBUaGUgc3ludGF4IG9mIHJhbmdlIGlzCiAJCQlzdGFydC1bZW5kXSB3aGVyZSBzdGFydCBhbmQgZW5kIGFyZSBib3RoCiAJCQlhIG1lbW9yeSB1bml0IChhbW91bnRbS01HXSkuIFNlZSBhbHNvCi0JCQlEb2N1bWVudGF0aW9uL2tkdW1wL2tkdW1wLnR4dCBmb3IgYSBleGFtcGxlLgorCQkJRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQgZm9yIGFuIGV4YW1wbGUuCiAKIAljczg5eDBfZG1hPQlbSFcsTkVUXQogCQkJRm9ybWF0OiA8ZG1hPgpAQCAtMTI2MiwxMCArMTI3MSw5IEBACiAJCQk2IChLRVJOX0lORk8pCQlpbmZvcm1hdGlvbmFsCiAJCQk3IChLRVJOX0RFQlVHKQkJZGVidWctbGV2ZWwgbWVzc2FnZXMKIAotCWxvZ19idWZfbGVuPW4JU2V0cyB0aGUgc2l6ZSBvZiB0aGUgcHJpbnRrIHJpbmcgYnVmZmVyLCBpbiBieXRlcy4KLQkJCUZvcm1hdDogeyBuIHwgbmsgfCBuTSB9Ci0JCQluIG11c3QgYmUgYSBwb3dlciBvZiB0d28uICBUaGUgZGVmYXVsdCBzaXplCi0JCQlpcyBzZXQgaW4gdGhlIGtlcm5lbCBjb25maWcgZmlsZS4KKwlsb2dfYnVmX2xlbj1uW0tNR10JU2V0cyB0aGUgc2l6ZSBvZiB0aGUgcHJpbnRrIHJpbmcgYnVmZmVyLAorCQkJaW4gYnl0ZXMuICBuIG11c3QgYmUgYSBwb3dlciBvZiB0d28uICBUaGUgZGVmYXVsdAorCQkJc2l6ZSBpcyBzZXQgaW4gdGhlIGtlcm5lbCBjb25maWcgZmlsZS4KIAogCWxvZ28ubm9sb2dvCVtGQl0gRGlzYWJsZXMgZGlzcGxheSBvZiB0aGUgYnVpbHQtaW4gTGludXggbG9nby4KIAkJCVRoaXMgbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBtb3JlIHNjcmVlbiBzcGFjZSBmb3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWAppbmRleCBmZTVjMDk5Li40ZWRkNzhkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCkBAIC00MCw4ICs0MCw2IEBACiAJLSBpbmZvIG9uIHVzaW5nIHRoZSBERUNuZXQgbmV0d29ya2luZyBsYXllciBpbiBMaW51eC4KIGRlcGNhLnR4dAogCS0gdGhlIERpZ2l0YWwgREVQQ0EvRXRoZXJXT1JLUyBERTE/PyBhbmQgREUyPz8gTEFOQ0UgRXRoZXJuZXQgZHJpdmVyCi1kZ3JzLnR4dAotCS0gdGhlIERpZ2kgSW50ZXJuYXRpb25hbCBSaWdodFN3aXRjaCBTRS1YIEV0aGVybmV0IGRyaXZlcgogZG1mZS50eHQKIAktIGluZm8gb24gdGhlIERhdmljb20gRE05MTAyKEEpL0RNOTEzMi9ETTk4MDEgZmFzdCBldGhlcm5ldCBkcml2ZXIuCiBlMTAwLnR4dApAQCAtNTAsOCArNDgsNiBAQAogCS0gaW5mbyBvbiBJbnRlbCdzIEUxMDAwIGxpbmUgb2YgZ2lnYWJpdCBldGhlcm5ldCBib2FyZHMKIGVxbC50eHQKIAktIHNlcmlhbCBJUCBsb2FkIGJhbGFuY2luZwotZXRoZXJ0YXAudHh0Ci0JLSB0aGUgRXRoZXJ0YXAgdXNlciBzcGFjZSBwYWNrZXQgcmVjZXB0aW9uIGFuZCB0cmFuc21pc3Npb24gZHJpdmVyCiBld3JrMy50eHQKIAktIHRoZSBEaWdpdGFsIEV0aGVyV09SS1MgMyBERTIwMy80LzUgRXRoZXJuZXQgZHJpdmVyCiBmaWx0ZXIudHh0CkBAIC0xMDQsOCArMTAwLDYgQEAKIAktIFRVTi9UQVAgZGV2aWNlIGRyaXZlciwgYWxsb3dpbmcgdXNlciBzcGFjZSBSeC9UeCBvZiBwYWNrZXRzLgogdm9ydGV4LnR4dAogCS0gaW5mbyBvbiB1c2luZyAzQ29tIFZvcnRleCAoM2M1OTAsIDNjNTkyLCAzYzU5NSwgM2M1OTcpIEV0aGVybmV0IGNhcmRzLgotd2F2ZWxhbi50eHQKLQktIEFUJlQgR0lTIChuZWUgTkNSKSBXYXZlTEFOIGNhcmQ6IEFuIEV0aGVybmV0LWxpa2UgcmFkaW8gdHJhbnNjZWl2ZXIKIHgyNS50eHQKIAktIGdlbmVyYWwgaW5mbyBvbiBYLjI1IGRldmVsb3BtZW50LgogeDI1LWlmYWNlLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL01ha2VmaWxlCmluZGV4IDVhYmE3YTMuLjI0YzMwOGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTWFrZWZpbGUKQEAgLTQsNiArNCw4IEBACiAjIExpc3Qgb2YgcHJvZ3JhbXMgdG8gYnVpbGQKIGhvc3Rwcm9ncy15IDo9IGlmZW5zbGF2ZQogCitIT1NUQ0ZMQUdTX2lmZW5zbGF2ZS5vICs9IC1JJChvYmp0cmVlKS91c3IvaW5jbHVkZQorCiAjIFRlbGwga2J1aWxkIHRvIGFsd2F5cyBidWlsZCB0aGUgcHJvZ3JhbXMKIGFsd2F5cyA6PSAkKGhvc3Rwcm9ncy15KQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKaW5kZXggNWRjNjM4Ny4uMjVkMmY0MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dApAQCAtNDksNyArNDksOCBAQAogMy4zCUNvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkgd2l0aCBJZmVuc2xhdmUKIDMuMy4xCQlDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcyBNYW51YWxseQogMy40CUNvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkgdmlhIFN5c2ZzCi0zLjUJT3ZlcnJpZGluZyBDb25maWd1cmF0aW9uIGZvciBTcGVjaWFsIENhc2VzCiszLjUJQ29uZmlndXJhdGlvbiB3aXRoIEludGVyZmFjZXMgU3VwcG9ydAorMy42CU92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcwogCiA0LiBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24KIDQuMQlCb25kaW5nIENvbmZpZ3VyYXRpb24KQEAgLTE2MSw4ICsxNjIsOCBAQAogZGVmYXVsdCBrZXJuZWwgc291cmNlIGluY2x1ZGUgZGlyZWN0b3J5LgogCiBTRUNPTkQgSU1QT1JUQU5UIE5PVEU6Ci0JSWYgeW91IHBsYW4gdG8gY29uZmlndXJlIGJvbmRpbmcgdXNpbmcgc3lzZnMsIHlvdSBkbyBub3QgbmVlZAotdG8gdXNlIGlmZW5zbGF2ZS4KKwlJZiB5b3UgcGxhbiB0byBjb25maWd1cmUgYm9uZGluZyB1c2luZyBzeXNmcyBvciB1c2luZyB0aGUKKy9ldGMvbmV0d29yay9pbnRlcmZhY2VzIGZpbGUsIHlvdSBkbyBub3QgbmVlZCB0byB1c2UgaWZlbnNsYXZlLgogCiAyLiBCb25kaW5nIERyaXZlciBPcHRpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03NzksMjIgKzc4MCwyNiBAQAogCiAJWW91IGNhbiBjb25maWd1cmUgYm9uZGluZyB1c2luZyBlaXRoZXIgeW91ciBkaXN0cm8ncyBuZXR3b3JrCiBpbml0aWFsaXphdGlvbiBzY3JpcHRzLCBvciBtYW51YWxseSB1c2luZyBlaXRoZXIgaWZlbnNsYXZlIG9yIHRoZQotc3lzZnMgaW50ZXJmYWNlLiAgRGlzdHJvcyBnZW5lcmFsbHkgdXNlIG9uZSBvZiB0d28gcGFja2FnZXMgZm9yIHRoZQotbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzOiBpbml0c2NyaXB0cyBvciBzeXNjb25maWcuICBSZWNlbnQKLXZlcnNpb25zIG9mIHRoZXNlIHBhY2thZ2VzIGhhdmUgc3VwcG9ydCBmb3IgYm9uZGluZywgd2hpbGUgb2xkZXIKK3N5c2ZzIGludGVyZmFjZS4gIERpc3Ryb3MgZ2VuZXJhbGx5IHVzZSBvbmUgb2YgdGhyZWUgcGFja2FnZXMgZm9yIHRoZQorbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzOiBpbml0c2NyaXB0cywgc3lzY29uZmlnIG9yIGludGVyZmFjZXMuCitSZWNlbnQgdmVyc2lvbnMgb2YgdGhlc2UgcGFja2FnZXMgaGF2ZSBzdXBwb3J0IGZvciBib25kaW5nLCB3aGlsZSBvbGRlcgogdmVyc2lvbnMgZG8gbm90LgogCiAJV2Ugd2lsbCBmaXJzdCBkZXNjcmliZSB0aGUgb3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYm9uZGluZyBmb3IKLWRpc3Ryb3MgdXNpbmcgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgYW5kIHN5c2NvbmZpZyB3aXRoIGZ1bGwgb3IKLXBhcnRpYWwgc3VwcG9ydCBmb3IgYm9uZGluZywgdGhlbiBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGVuYWJsaW5nCitkaXN0cm9zIHVzaW5nIHZlcnNpb25zIG9mIGluaXRzY3JpcHRzLCBzeXNjb25maWcgYW5kIGludGVyZmFjZXMgd2l0aCBmdWxsCitvciBwYXJ0aWFsIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHRoZW4gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBlbmFibGluZwogYm9uZGluZyB3aXRob3V0IHN1cHBvcnQgZnJvbSB0aGUgbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzIChpLmUuLAogb2xkZXIgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnKS4KIAotCUlmIHlvdSdyZSB1bnN1cmUgd2hldGhlciB5b3VyIGRpc3RybyB1c2VzIHN5c2NvbmZpZyBvcgotaW5pdHNjcmlwdHMsIG9yIGRvbid0IGtub3cgaWYgaXQncyBuZXcgZW5vdWdoLCBoYXZlIG5vIGZlYXIuCisJSWYgeW91J3JlIHVuc3VyZSB3aGV0aGVyIHlvdXIgZGlzdHJvIHVzZXMgc3lzY29uZmlnLAoraW5pdHNjcmlwdHMgb3IgaW50ZXJmYWNlcywgb3IgZG9uJ3Qga25vdyBpZiBpdCdzIG5ldyBlbm91Z2gsIGhhdmUgbm8gZmVhci4KIERldGVybWluaW5nIHRoaXMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KIAotCUZpcnN0LCBpc3N1ZSB0aGUgY29tbWFuZDoKKwlGaXJzdCwgbG9vayBmb3IgYSBmaWxlIGNhbGxlZCBpbnRlcmZhY2VzIGluIC9ldGMvbmV0d29yayBkaXJlY3RvcnkuCitJZiB0aGlzIGZpbGUgaXMgcHJlc2VudCBpbiB5b3VyIHN5c3RlbSwgdGhlbiB5b3VyIHN5c3RlbSB1c2UgaW50ZXJmYWNlcy4gU2VlCitDb25maWd1cmF0aW9uIHdpdGggSW50ZXJmYWNlcyBTdXBwb3J0LgorCisJRWxzZSwgaXNzdWUgdGhlIGNvbW1hbmQ6CiAKICQgcnBtIC1xZiAvc2Jpbi9pZnVwCiAKQEAgLTEzMjcsOCArMTMzMiw2MiBAQAogZWNobyArZXRoMiA+IC9zeXMvY2xhc3MvbmV0L2JvbmQxL2JvbmRpbmcvc2xhdmVzCiBlY2hvICtldGgzID4gL3N5cy9jbGFzcy9uZXQvYm9uZDEvYm9uZGluZy9zbGF2ZXMKIAotMy41IE92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcworMy41IENvbmZpZ3VyYXRpb24gd2l0aCBJbnRlcmZhY2VzIFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gZGlzdHJvcyB3aGljaCB1c2UgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgZmlsZQordG8gZGVzY3JpYmUgbmV0d29yayBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiwgbW9zdCBub3RhYmx5IERlYmlhbiBhbmQgaXQncworZGVyaXZhdGl2ZXMuCisKKwlUaGUgaWZ1cCBhbmQgaWZkb3duIGNvbW1hbmRzIG9uIERlYmlhbiBkb24ndCBzdXBwb3J0IGJvbmRpbmcgb3V0IG9mCit0aGUgYm94LiBUaGUgaWZlbnNsYXZlLTIuNiBwYWNrYWdlIHNob3VsZCBiZSBpbnN0YWxsZWQgdG8gcHJvdmlkZSBib25kaW5nCitzdXBwb3J0LiAgT25jZSBpbnN0YWxsZWQsIHRoaXMgcGFja2FnZSB3aWxsIHByb3ZpZGUgYm9uZC0qIG9wdGlvbnMgdG8gYmUgdXNlZAoraW50byAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy4KKworCU5vdGUgdGhhdCBpZmVuc2xhdmUtMi42IHBhY2thZ2Ugd2lsbCBsb2FkIHRoZSBib25kaW5nIG1vZHVsZSBhbmQgdXNlCit0aGUgaWZlbnNsYXZlIGNvbW1hbmQgd2hlbiBhcHByb3ByaWF0ZS4KKworRXhhbXBsZSBDb25maWd1cmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcywgdGhlIGZvbGxvd2luZyBzdGFuemEgd2lsbCBjb25maWd1cmUgYm9uZDAsIGluCithY3RpdmUtYmFja3VwIG1vZGUsIHdpdGggZXRoMCBhbmQgZXRoMSBhcyBzbGF2ZXMuCisKK2F1dG8gYm9uZDAKK2lmYWNlIGJvbmQwIGluZXQgZGhjcAorCWJvbmQtc2xhdmVzIGV0aDAgZXRoMQorCWJvbmQtbW9kZSBhY3RpdmUtYmFja3VwCisJYm9uZC1taWltb24gMTAwCisJYm9uZC1wcmltYXJ5IGV0aDAgZXRoMQorCitJZiB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiBkb2Vzbid0IHdvcmssIHlvdSBtaWdodCBoYXZlIGEgc3lzdGVtIHVzaW5nCit1cHN0YXJ0IGZvciBzeXN0ZW0gc3RhcnR1cC4gVGhpcyBpcyBtb3N0IG5vdGFibHkgdHJ1ZSBmb3IgcmVjZW50CitVYnVudHUgdmVyc2lvbnMuIFRoZSBmb2xsb3dpbmcgc3RhbnphIGluIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIHdpbGwKK3Byb2R1Y2UgdGhlIHNhbWUgcmVzdWx0IG9uIHRob3NlIHN5c3RlbXMuCisKK2F1dG8gYm9uZDAKK2lmYWNlIGJvbmQwIGluZXQgZGhjcAorCWJvbmQtc2xhdmVzIG5vbmUKKwlib25kLW1vZGUgYWN0aXZlLWJhY2t1cAorCWJvbmQtbWlpbW9uIDEwMAorCithdXRvIGV0aDAKK2lmYWNlIGV0aDAgaW5ldCBtYW51YWwKKwlib25kLW1hc3RlciBib25kMAorCWJvbmQtcHJpbWFyeSBldGgwIGV0aDEKKworYXV0byBldGgxCitpZmFjZSBldGgxIGluZXQgbWFudWFsCisJYm9uZC1tYXN0ZXIgYm9uZDAKKwlib25kLXByaW1hcnkgZXRoMCBldGgxCisKK0ZvciBhIGZ1bGwgbGlzdCBvZiBib25kLSogc3VwcG9ydGVkIG9wdGlvbnMgaW4gL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgYW5kIHNvbWUKK21vcmUgYWR2YW5jZWQgZXhhbXBsZXMgdGFpbG9yZWQgdG8geW91IHBhcnRpY3VsYXIgZGlzdHJvcywgc2VlIHRoZSBmaWxlcyBpbgorL3Vzci9zaGFyZS9kb2MvaWZlbnNsYXZlLTIuNi4KKworMy42IE92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGVuIHVzaW5nIHRoZSBib25kaW5nIGRyaXZlciwgdGhlIHBoeXNpY2FsIHBvcnQgd2hpY2ggdHJhbnNtaXRzIGEgZnJhbWUgaXMKIHR5cGljYWxseSBzZWxlY3RlZCBieSB0aGUgYm9uZGluZyBkcml2ZXIsIGFuZCBpcyBub3QgcmVsZXZhbnQgdG8gdGhlIHVzZXIgb3IKIHN5c3RlbSBhZG1pbmlzdHJhdG9yLiAgVGhlIG91dHB1dCBwb3J0IGlzIHNpbXBseSBzZWxlY3RlZCB1c2luZyB0aGUgcG9saWNpZXMgb2YKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbnNfcmVzb2x2ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Ruc19yZXNvbHZlci50eHQKaW5kZXggYWVmZDFlNi4uMDRjYTA2MzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbnNfcmVzb2x2ZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbnNfcmVzb2x2ZXIudHh0CkBAIC02MSw3ICs2MSw2IEBACiAJY3JlYXRlCWRuc19yZXNvbHZlciAgCWZvbzoqCSoJL3Vzci9zYmluL2Rucy5mb28gJWsKIAogCi0KID09PT09CiBVU0FHRQogPT09PT0KQEAgLTEwNCw2ICsxMDMsMTQgQEAKICAgICAgcmV0dXJuZWQgYWxzby4KIAogCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSRUFESU5HIEROUyBLRVlTIEZST00gVVNFUlNQQUNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0tleXMgb2YgZG5zX3Jlc29sdmVyIHR5cGUgY2FuIGJlIHJlYWQgZnJvbSB1c2Vyc3BhY2UgdXNpbmcga2V5Y3RsX3JlYWQoKSBvcgorImtleWN0bCByZWFkL3ByaW50L3BpcGUiLgorCisKID09PT09PT09PQogTUVDSEFOSVNNCiA9PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggZDk5OTQwZC4uYWMzYjRhNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTE4Nyw3ICsxODcsNyBAQAogdGNwX2RzYWNrIC0gQk9PTEVBTgogCUFsbG93cyBUQ1AgdG8gc2VuZCAiZHVwbGljYXRlIiBTQUNLcy4KIAotdGNwX2VjbiAtIEJPT0xFQU4KK3RjcF9lY24gLSBJTlRFR0VSCiAJRW5hYmxlIEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIChFQ04pIGluIFRDUC4gRUNOIGlzIG9ubHkKIAl1c2VkIHdoZW4gYm90aCBlbmRzIG9mIHRoZSBUQ1AgZmxvdyBzdXBwb3J0IGl0LiBJdCBpcyB1c2VmdWwgdG8KIAlhdm9pZCBsb3NzZXMgZHVlIHRvIGNvbmdlc3Rpb24gKHdoZW4gdGhlIGJvdHRsZW5lY2sgcm91dGVyIHN1cHBvcnRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQKaW5kZXggMDFlNjk0MC4uMWNkNWQ1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtc3RhdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXN0YXRzLnR4dApAQCAtMSwzICsxLDcgQEAKK1ZlcnNpb24gMTUgb2Ygc2NoZWRzdGF0cyBkcm9wcGVkIGNvdW50ZXJzIGZvciBzb21lIHNjaGVkX3lpZWxkOgoreWxkX2V4cF9lbXB0eSwgeWxkX2FjdF9lbXB0eSBhbmQgeWxkX2JvdGhfZW1wdHkuIE90aGVyd2lzZSwgaXQgaXMKK2lkZW50aWNhbCB0byB2ZXJzaW9uIDE0LgorCiBWZXJzaW9uIDE0IG9mIHNjaGVkc3RhdHMgaW5jbHVkZXMgc3VwcG9ydCBmb3Igc2NoZWRfZG9tYWlucywgd2hpY2ggaGl0IHRoZQogbWFpbmxpbmUga2VybmVsIGluIDIuNi4yMCBhbHRob3VnaCBpdCBpcyBpZGVudGljYWwgdG8gdGhlIHN0YXRzIGZyb20gdmVyc2lvbgogMTIgd2hpY2ggd2FzIGluIHRoZSBrZXJuZWwgZnJvbSAyLjYuMTMtMi42LjE5ICh2ZXJzaW9uIDEzIG5ldmVyIHNhdyBhIGtlcm5lbApAQCAtMjgsMzIgKzMyLDI1IEBACiAKIENQVSBzdGF0aXN0aWNzCiAtLS0tLS0tLS0tLS0tLQotY3B1PE4+IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyCitjcHU8Tj4gMSAyIDMgNCA1IDYgNyA4IDkKIAotTk9URTogSW4gdGhlIHNjaGVkX3lpZWxkKCkgc3RhdGlzdGljcywgdGhlIGFjdGl2ZSBxdWV1ZSBpcyBjb25zaWRlcmVkIGVtcHR5Ci0gICAgaWYgaXQgaGFzIG9ubHkgb25lIHByb2Nlc3MgaW4gaXQsIHNpbmNlIG9idmlvdXNseSB0aGUgcHJvY2VzcyBjYWxsaW5nCi0gICAgc2NoZWRfeWllbGQoKSBpcyB0aGF0IHByb2Nlc3MuCi0KLUZpcnN0IGZvdXIgZmllbGRzIGFyZSBzY2hlZF95aWVsZCgpIHN0YXRpc3RpY3M6Ci0gICAgIDEpICMgb2YgdGltZXMgYm90aCB0aGUgYWN0aXZlIGFuZCB0aGUgZXhwaXJlZCBxdWV1ZSB3ZXJlIGVtcHR5Ci0gICAgIDIpICMgb2YgdGltZXMganVzdCB0aGUgYWN0aXZlIHF1ZXVlIHdhcyBlbXB0eQotICAgICAzKSAjIG9mIHRpbWVzIGp1c3QgdGhlIGV4cGlyZWQgcXVldWUgd2FzIGVtcHR5Ci0gICAgIDQpICMgb2YgdGltZXMgc2NoZWRfeWllbGQoKSB3YXMgY2FsbGVkCitGaXJzdCBmaWVsZCBpcyBhIHNjaGVkX3lpZWxkKCkgc3RhdGlzdGljOgorICAgICAxKSAjIG9mIHRpbWVzIHNjaGVkX3lpZWxkKCkgd2FzIGNhbGxlZAogCiBOZXh0IHRocmVlIGFyZSBzY2hlZHVsZSgpIHN0YXRpc3RpY3M6Ci0gICAgIDUpICMgb2YgdGltZXMgd2Ugc3dpdGNoZWQgdG8gdGhlIGV4cGlyZWQgcXVldWUgYW5kIHJldXNlZCBpdAotICAgICA2KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgd2FzIGNhbGxlZAotICAgICA3KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgbGVmdCB0aGUgcHJvY2Vzc29yIGlkbGUKKyAgICAgMikgIyBvZiB0aW1lcyB3ZSBzd2l0Y2hlZCB0byB0aGUgZXhwaXJlZCBxdWV1ZSBhbmQgcmV1c2VkIGl0CisgICAgIDMpICMgb2YgdGltZXMgc2NoZWR1bGUoKSB3YXMgY2FsbGVkCisgICAgIDQpICMgb2YgdGltZXMgc2NoZWR1bGUoKSBsZWZ0IHRoZSBwcm9jZXNzb3IgaWRsZQogCiBOZXh0IHR3byBhcmUgdHJ5X3RvX3dha2VfdXAoKSBzdGF0aXN0aWNzOgotICAgICA4KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgd2FzIGNhbGxlZAotICAgICA5KSAjIG9mIHRpbWVzIHRyeV90b193YWtlX3VwKCkgd2FzIGNhbGxlZCB0byB3YWtlIHVwIHRoZSBsb2NhbCBjcHUKKyAgICAgNSkgIyBvZiB0aW1lcyB0cnlfdG9fd2FrZV91cCgpIHdhcyBjYWxsZWQKKyAgICAgNikgIyBvZiB0aW1lcyB0cnlfdG9fd2FrZV91cCgpIHdhcyBjYWxsZWQgdG8gd2FrZSB1cCB0aGUgbG9jYWwgY3B1CiAKIE5leHQgdGhyZWUgYXJlIHN0YXRpc3RpY3MgZGVzY3JpYmluZyBzY2hlZHVsaW5nIGxhdGVuY3k6Ci0gICAgMTApIHN1bSBvZiBhbGwgdGltZSBzcGVudCBydW5uaW5nIGJ5IHRhc2tzIG9uIHRoaXMgcHJvY2Vzc29yIChpbiBqaWZmaWVzKQotICAgIDExKSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgd2FpdGluZyB0byBydW4gYnkgdGFza3Mgb24gdGhpcyBwcm9jZXNzb3IgKGluCisgICAgIDcpIHN1bSBvZiBhbGwgdGltZSBzcGVudCBydW5uaW5nIGJ5IHRhc2tzIG9uIHRoaXMgcHJvY2Vzc29yIChpbiBqaWZmaWVzKQorICAgICA4KSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgd2FpdGluZyB0byBydW4gYnkgdGFza3Mgb24gdGhpcyBwcm9jZXNzb3IgKGluCiAgICAgICAgIGppZmZpZXMpCi0gICAgMTIpICMgb2YgdGltZXNsaWNlcyBydW4gb24gdGhpcyBjcHUKKyAgICAgOSkgIyBvZiB0aW1lc2xpY2VzIHJ1biBvbiB0aGlzIGNwdQogCiAKIERvbWFpbiBzdGF0aXN0aWNzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IDE2YWU0MzAuLjBjYWY3N2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0yOTYsNiArMjk2LDcgQEAKID09PT09PT09PT09PT0KICAgbGFwdG9wCUJhc2ljIExhcHRvcCBjb25maWcgKGRlZmF1bHQpCiAgIGhwLWxhcHRvcAlIUCBsYXB0b3BzLCBlIGcgRzYwCisgIGFzdXMJCUFzdXMgSzUySlUsIExlbm92byBHNTYwCiAgIGRlbGwtbGFwdG9wCURlbGwgbGFwdG9wcwogICBkZWxsLXZvc3RybwlEZWxsIFZvc3RybwogICBvbHBjLXhvLTFfNQlPTFBDIFhPIDEuNQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93b3JrcXVldWUudHh0IGIvRG9jdW1lbnRhdGlvbi93b3JrcXVldWUudHh0CmluZGV4IDk5NmEyN2QuLjAxYzUxM2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3dvcmtxdWV1ZS50eHQKQEAgLTE5MCw5ICsxOTAsOSBAQAogCSogTG9uZyBydW5uaW5nIENQVSBpbnRlbnNpdmUgd29ya2xvYWRzIHdoaWNoIGNhbiBiZSBiZXR0ZXIKIAkgIG1hbmFnZWQgYnkgdGhlIHN5c3RlbSBzY2hlZHVsZXIuCiAKLSAgV1FfRlJFRVpFQUJMRQorICBXUV9GUkVFWkFCTEUKIAotCUEgZnJlZXplYWJsZSB3cSBwYXJ0aWNpcGF0ZXMgaW4gdGhlIGZyZWV6ZSBwaGFzZSBvZiB0aGUgc3lzdGVtCisJQSBmcmVlemFibGUgd3EgcGFydGljaXBhdGVzIGluIHRoZSBmcmVlemUgcGhhc2Ugb2YgdGhlIHN5c3RlbQogCXN1c3BlbmQgb3BlcmF0aW9ucy4gIFdvcmsgaXRlbXMgb24gdGhlIHdxIGFyZSBkcmFpbmVkIGFuZCBubwogCW5ldyB3b3JrIGl0ZW0gc3RhcnRzIGV4ZWN1dGlvbiB1bnRpbCB0aGF3ZWQuCiAKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggY2YwZjNhNS4uNTYwZWNjZSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTg4NSw3ICs4ODUsNyBAQAogCiBBUk0vUVVBTENPTU0gTVNNIE1BQ0hJTkUgU1VQUE9SVAogTToJRGF2aWQgQnJvd24gPGRhdmlkYkBjb2RlYXVyb3JhLm9yZz4KLU06CURhbmllbCBXYWxrZXIgPGR3YWxrZXJAY29kZWF1cm9yYS5vcmc+CitNOglEYW5pZWwgV2Fsa2VyIDxkd2Fsa2VyQGZpZm85OS5jb20+CiBNOglCcnlhbiBIdW50c21hbiA8YnJ5YW5oQGNvZGVhdXJvcmEub3JnPgogTDoJbGludXgtYXJtLW1zbUB2Z2VyLmtlcm5lbC5vcmcKIEY6CWFyY2gvYXJtL21hY2gtbXNtLwpAQCAtOTc4LDYgKzk3OCw4IEBACiBGOglhcmNoL2FybS9wbGF0LXNhbXN1bmcvCiBGOglhcmNoL2FybS9wbGF0LXMzYzI0eHgvCiBGOglhcmNoL2FybS9wbGF0LXM1cC8KK0Y6CWRyaXZlcnMvKi8qczNjMjQxMCoKK0Y6CWRyaXZlcnMvKi8qLypzM2MyNDEwKgogCiBBUk0vUzNDMjQxMCBBUk0gQVJDSElURUNUVVJFCiBNOglCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+CkBAIC0xMDA4LDYgKzEwMTAsMTUgQEAKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtczVwKi8KIAorQVJNL1NBTVNVTkcgTU9CSUxFIE1BQ0hJTkUgU1VQUE9SVAorTToJS3l1bmdtaW4gUGFyayA8a3l1bmdtaW4ucGFya0BzYW1zdW5nLmNvbT4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1hcXVpbGEuYworRjoJYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtZ29uaS5jCitGOglhcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC11bml2ZXJzYWxfYzIxMC5jCitGOglhcmNoL2FybS9tYWNoLWV4eW5vczQvbWFjaC1udXJpLmMKKwogQVJNL1NBTVNVTkcgUzVQIFNFUklFUyBGSU1DIFNVUFBPUlQKIE06CUt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CiBNOglTeWx3ZXN0ZXIgTmF3cm9ja2kgPHMubmF3cm9ja2lAc2Ftc3VuZy5jb20+CkBAIC0xNDY1LDYgKzE0NzYsNyBAQAogCiBCT05ESU5HIERSSVZFUgogTToJSmF5IFZvc2J1cmdoIDxmdWJhckB1cy5pYm0uY29tPgorTToJQW5keSBHb3Nwb2RhcmVrIDxhbmR5QGdyZXlob3VzZS5uZXQ+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2JvbmRpbmcvCiBTOglTdXBwb3J0ZWQKQEAgLTE2OTAsNiArMTcwMiwxMyBAQAogUzoJU3VwcG9ydGVkCiBGOglzY3JpcHRzL2NoZWNrcGF0Y2gucGwKIAorQ0hJTkVTRSBET0NVTUVOVEFUSU9OCitNOglIYXJyeSBXZWkgPGhhcnJ5eGl5b3VAZ21haWwuY29tPgorTDoJeGl5b3VsaW51eGtlcm5lbGdyb3VwQGdvb2dsZWdyb3Vwcy5jb20KK0w6CWxpbnV4LWtlcm5lbEB6aC1rZXJuZWwub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vemhfQ04vCisKIENJU0NPIFZJQyBFVEhFUk5FVCBOSUMgRFJJVkVSCiBNOglWYXNhbnRoeSBLb2xsdXJpIDx2a29sbHVyaUBjaXNjby5jb20+CiBNOglSb29wYSBQcmFiaHUgPHJvcHJhYmh1QGNpc2NvLmNvbT4KQEAgLTIwMjQsNyArMjA0Myw3IEBACiBGOglkcml2ZXJzL3Njc2kvZGMzOTV4LioKIAogRENDUCBQUk9UT0NPTAotTToJQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGdob3N0cHJvdG9jb2xzLm5ldD4KK006CUdlcnJpdCBSZW5rZXIgPGdlcnJpdEBlcmcuYWJkbi5hYy51az4KIEw6CWRjY3BAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2RjY3AKIFM6CU1haW50YWluZWQKQEAgLTIxMjQsNiArMjE0Myw3IEBACiBGOglmcy9kbG0vCiAKIERNQSBHRU5FUklDIE9GRkxPQUQgRU5HSU5FIFNVQlNZU1RFTQorTToJVmlub2QgS291bCA8dmlub2Qua291bEBpbnRlbC5jb20+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9kbWEvCkBAIC0yNzcyLDYgKzI3OTIsMTUgQEAKIEY6CWRyaXZlcnMvaXNkbi9naWdhc2V0LwogRjoJaW5jbHVkZS9saW51eC9naWdhc2V0X2Rldi5oCiAKK0dQSU8gU1VCU1lTVEVNCitNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitUOglnaXQgZ2l0Oi8vZ2l0LnNlY3JldGxhYi5jYS9naXQvbGludXgtMi42LmdpdAorRjoJRG9jdW1lbnRhdGlvbi9ncGlvL2dwaW8udHh0CitGOglkcml2ZXJzL2dwaW8vCitGOglpbmNsdWRlL2xpbnV4L2dwaW8qCisKIEdSRVRIIDEwLzEwMC8xRyBFdGhlcm5ldCBNQUMgZGV2aWNlIGRyaXZlcgogTToJS3Jpc3RvZmZlciBHbGVtYm8gPGtyaXN0b2ZmZXJAZ2Fpc2xlci5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCkBAIC0yODYxLDcgKzI4OTAsNiBAQAogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogVzoJaHR0cDovL3d3dy5sbS1zZW5zb3JzLm9yZy8KIFQ6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvamRlbHZhcmUvbGludXgtMi42L2pkZWx2YXJlLWh3bW9uLwotVDoJcXVpbHQga2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9ncm9lY2svbGludXgtc3RhZ2luZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ3JvZWNrL2xpbnV4LXN0YWdpbmcuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2h3bW9uLwpAQCAtMzEzOSw2ICszMTY3LDEyIEBACiBGOgluZXQvaWVlZTgwMjE1NC8KIEY6CWRyaXZlcnMvaWVlZTgwMjE1NC8KIAorSUtBTk9TL0FESSBFQUdMRSBBRFNMIFVTQiBEUklWRVIKK006CU1hdHRoaWV1IENhc3RldCA8Y2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnI+CitNOglTdGFuaXNsYXcgR3J1c3prYSA8c3RmX3hsQHdwLnBsPgorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYworCiBJTlRFR1JJVFkgTUVBU1VSRU1FTlQgQVJDSElURUNUVVJFIChJTUEpCiBNOglNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgogUzoJU3VwcG9ydGVkCkBAIC0zMzI3LDcgKzMzNjEsNiBAQAogRjoJaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaAogCiBJTlRFTCBXSVJFTEVTUyBXSUZJIExJTksgKGl3bHdpZmkpCi1NOglSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+CiBNOglXZXktWWkgR3V5IDx3ZXkteWkudy5ndXlAaW50ZWwuY29tPgogTToJSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKQEAgLTM0OTYsNyArMzUyOSw3IEBACiBGOglEb2N1bWVudGF0aW9uL2h3bW9uL2pjNDIKIAogSkZTIEZJTEVTWVNURU0KLU06CURhdmUgS2xlaWthbXAgPHNoYWdneUBsaW51eC52bmV0LmlibS5jb20+CitNOglEYXZlIEtsZWlrYW1wIDxzaGFnZ3lAa2VybmVsLm9yZz4KIEw6CWpmcy1kaXNjdXNzaW9uQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogVzoJaHR0cDovL2pmcy5zb3VyY2Vmb3JnZS5uZXQvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NoYWdneS9qZnMtMi42LmdpdApAQCAtNDU4NCw3ICs0NjE3LDcgQEAKIAogT1BFTiBGSVJNV0FSRSBBTkQgRkxBVFRFTkVEIERFVklDRSBUUkVFCiBNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+Ci1MOglkZXZpY2V0cmVlLWRpc2N1c3NAbGlzdHMub3psYWJzLm9yZworTDoJZGV2aWNldHJlZS1kaXNjdXNzQGxpc3RzLm96bGFicy5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL2ZkdC5zZWNyZXRsYWIuY2EKIFQ6CWdpdCBnaXQ6Ly9naXQuc2VjcmV0bGFiLmNhL2dpdC9saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCkBAIC01MTQ4LDYgKzUxODEsNyBAQAogCiBSQVBJRElPIFNVQlNZU1RFTQogTToJTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KK006CUFsZXhhbmRyZSBCb3VuaW5lIDxhbGV4YW5kcmUuYm91bmluZUBpZHQuY29tPgogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9yYXBpZGlvLwogCkBAIC01MjUwLDcgKzUyODQsNyBAQAogRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLwogCiBSVEw4MTg3IFdJUkVMRVNTIERSSVZFUgotTToJSGVydG9uIFJvbmFsZG8gS3J6ZXNpbnNraSA8aGVydG9uQG1hbmRyaXZhLmNvbS5icj4KK006CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBjYW5vbmljYWwuY29tPgogTToJSGluLVRhayBMZXVuZyA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTToJTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCkBAIC01NTQ0LDEyICs1NTc4LDExIEBACiBGOglkcml2ZXJzL3Njc2kvYmUyaXNjc2kvCiAKIFNFUlZFUiBFTkdJTkVTIDEwR2JwcyBOSUMgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgotTToJU2F0aHlhIFBlcmxhIDxzYXRoeWFwQHNlcnZlcmVuZ2luZXMuY29tPgotTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1c0BzZXJ2ZXJlbmdpbmVzLmNvbT4KLU06CVNhcnZlc2h3YXIgQmFuZGkgPHNhcnZlc2h3YXJiQHNlcnZlcmVuZ2luZXMuY29tPgotTToJQWppdCBLaGFwYXJkZSA8YWppdGtAc2VydmVyZW5naW5lcy5jb20+CitNOglTYXRoeWEgUGVybGEgPHNhdGh5YS5wZXJsYUBlbXVsZXguY29tPgorTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1LnNlZXRoYXJhbWFuQGVtdWxleC5jb20+CitNOglBaml0IEtoYXBhcmRlIDxhaml0LmtoYXBhcmRlQGVtdWxleC5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCitXOglodHRwOi8vd3d3LmVtdWxleC5jb20KIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvYmVuZXQvCiAKQEAgLTU2MDksMTggKzU2NDIsMjAgQEAKIAogU0lNVEVDIEVCMTEwQVRYIChDaGFsaWNlIENBVFMpCiBQOglCZW4gRG9va3MKLU06CVZpbmNlbnQgU2FuZGVycyA8c3VwcG9ydEBzaW10ZWMuY28udWs+CitQOglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQHNpbXRlYy5jby51az4KK006CVNpbXRlYyBMaW51eCBUZWFtIDxsaW51eEBzaW10ZWMuY28udWs+CiBXOglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjExMEFUWC8KIFM6CVN1cHBvcnRlZAogCiBTSU1URUMgRUIyNDEwSVRYIChCQVNUKQogUDoJQmVuIERvb2tzCi1NOglWaW5jZW50IFNhbmRlcnMgPHN1cHBvcnRAc2ltdGVjLmNvLnVrPgorUDoJVmluY2VudCBTYW5kZXJzIDx2aW5jZUBzaW10ZWMuY28udWs+CitNOglTaW10ZWMgTGludXggVGVhbSA8bGludXhAc2ltdGVjLmNvLnVrPgogVzoJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLwogUzoJU3VwcG9ydGVkCi1GOglhcmNoL2FybS9tYWNoLXMzYzI0MTAvCi1GOglkcml2ZXJzLyovKnMzYzI0MTAqCi1GOglkcml2ZXJzLyovKi8qczNjMjQxMCoKK0Y6CWFyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworRjoJYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaWRlLmMKK0Y6CWFyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jCiAKIFRJIERBVklOQ0kgTUFDSElORSBTVVBQT1JUCiBNOglLZXZpbiBIaWxtYW4gPGtoaWxtYW5AZGVlcHJvb3RzeXN0ZW1zLmNvbT4KQEAgLTYwODcsNyArNjEyMiw3IEBACiBGOglzZWN1cml0eS90b21veW8vCiAKIFRPUFNUQVIgTEFQVE9QIEVYVFJBUyBEUklWRVIKLU06CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CitNOglIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AY2Fub25pY2FsLmNvbT4KIEw6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3BzdGFyLWxhcHRvcC5jCkBAIC02NTk1LDYgKzY2MzAsMTYgQEAKIEY6CWRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCiBGOglpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKIAorVklSVElPIENPUkUsIE5FVCBBTkQgQkxPQ0sgRFJJVkVSUworTToJUnVzdHkgUnVzc2VsbCA8cnVzdHlAcnVzdGNvcnAuY29tLmF1PgorTToJIk1pY2hhZWwgUy4gVHNpcmtpbiIgPG1zdEByZWRoYXQuY29tPgorTDoJdmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvdmlydGlvLworRjoJZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCitGOglkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYworRjoJaW5jbHVkZS9saW51eC92aXJ0aW9fKi5oCisKIFZJUlRJTyBIT1NUIChWSE9TVCkKIE06CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KIEw6CWt2bUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTY3NjgsMTIgKzY4MTMsMTIgQEAKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS8qCiAKIFdMMTI3MSBXSVJFTEVTUyBEUklWRVIKLU06CUx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CitNOglMdWNpYW5vIENvZWxobyA8Y29lbGhvQHRpLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvd2wxMnh4CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2x1Y2Evd2wxMnh4LmdpdAogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MSoKK0Y6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC8KIEY6CWluY2x1ZGUvbGludXgvd2wxMnh4LmgKIAogV0wzNTAxIFdJUkVMRVNTIFBDTUNJQSBDQVJEIERSSVZFUgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAxZjQ3NDk1Li41MDRmNzg4IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgogU1VCTEVWRUwgPSAzOAotRVhUUkFWRVJTSU9OID0gLXJjMgorRVhUUkFWRVJTSU9OID0gLXJjOAogTkFNRSA9IEZsZXNoLUVhdGluZyBCYXRzIHdpdGggRmFuZ3MKIAogIyAqRE9DVU1FTlRBVElPTioKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCA0N2Y2M2Q0Li5jYzMxYmVjIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC0xMSw2ICsxMSw3IEBACiAJc2VsZWN0IEhBVkVfR0VORVJJQ19IQVJESVJRUwogCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQogCXNlbGVjdCBBVVRPX0lSUV9BRkZJTklUWSBpZiBTTVAKKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19ERVBSRUNBVEVECiAJaGVscAogCSAgVGhlIEFscGhhIGlzIGEgNjQtYml0IGdlbmVyYWwtcHVycG9zZSBwcm9jZXNzb3IgZGVzaWduZWQgYW5kCiAJICBtYXJrZXRlZCBieSB0aGUgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gb2YgYmxlc3NlZCBtZW1vcnksCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCmluZGV4IDlhYjIzNGYuLmExOWQ2MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCkBAIC00NCwxMSArNDQsMTYgQEAKIAogaW50IGlycV9zZWxlY3RfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzY1tpcnFdOworCXN0cnVjdCBpcnFfZGF0YSAqZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CiAJc3RhdGljIGludCBsYXN0X2NwdTsKIAlpbnQgY3B1ID0gbGFzdF9jcHUgKyAxOwogCi0JaWYgKCFkZXNjIHx8ICFnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKS0+c2V0X2FmZmluaXR5IHx8IGlycV91c2VyX2FmZmluaXR5W2lycV0pCisJaWYgKCFkYXRhKQorCQlyZXR1cm4gMTsKKwljaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwKGRhdGEpOworCisJaWYgKCFjaGlwLT5pcnFfc2V0X2FmZmluaXR5IHx8IGlycV91c2VyX2FmZmluaXR5W2lycV0pCiAJCXJldHVybiAxOwogCiAJd2hpbGUgKCFjcHVfcG9zc2libGUoY3B1KSB8fApAQCAtNTYsOCArNjEsOCBAQAogCQljcHUgPSAoY3B1IDwgKE5SX0NQVVMtMSkgPyBjcHUgKyAxIDogMCk7CiAJbGFzdF9jcHUgPSBjcHU7CiAKLQljcHVtYXNrX2NvcHkoZGVzYy0+YWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7Ci0JZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyktPnNldF9hZmZpbml0eShpcnEsIGNwdW1hc2tfb2YoY3B1KSk7CisJY3B1bWFza19jb3B5KGRhdGEtPmFmZmluaXR5LCBjcHVtYXNrX29mKGNwdSkpOworCWNoaXAtPmlycV9zZXRfYWZmaW5pdHkoZGF0YSwgY3B1bWFza19vZihjcHUpLCBmYWxzZSk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwppbmRleCAyZDA2NzliLi40MTFjYTExIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwpAQCAtMjI4LDE0ICsyMjgsOSBAQAogdm9pZCBfX2luaXQKIGluaXRfcnRjX2lycSh2b2lkKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKFJUQ19JUlEpOwotCi0JaWYgKGRlc2MpIHsKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoUlRDX0lSUSwgJm5vX2lycV9jaGlwLAotCQkJaGFuZGxlX3NpbXBsZV9pcnEsICJSVEMiKTsKLQkJc2V0dXBfaXJxKFJUQ19JUlEsICZ0aW1lcl9pcnFhY3Rpb24pOwotCX0KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShSVENfSVJRLCAmbm9faXJxX2NoaXAsCisJCQkJICAgICAgaGFuZGxlX3NpbXBsZV9pcnEsICJSVEMiKTsKKwlzZXR1cF9pcnEoUlRDX0lSUSwgJnRpbWVyX2lycWFjdGlvbik7CiB9CiAKIC8qIER1bW15IGlycWFjdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2k4MjU5LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYwppbmRleCA5NTZlYTBlLi5jN2NjOTgxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYwpAQCAtMzMsMTAgKzMzLDEwIEBACiB9CiAKIGlubGluZSB2b2lkCi1pODI1OWFfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoraTgyNTlhX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXNwaW5fbG9jaygmaTgyNTlfaXJxX2xvY2spOwotCWk4MjU5X3VwZGF0ZV9pcnFfaHcoaXJxLCBjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IGlycSkpOworCWk4MjU5X3VwZGF0ZV9pcnFfaHcoZC0+aXJxLCBjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IGQtPmlycSkpOwogCXNwaW5fdW5sb2NrKCZpODI1OV9pcnFfbG9jayk7CiB9CiAKQEAgLTQ3LDE2ICs0NywxOCBAQAogfQogCiB2b2lkCi1pODI1OWFfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK2k4MjU5YV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZpODI1OV9pcnFfbG9jayk7Ci0JX19pODI1OWFfZGlzYWJsZV9pcnEoaXJxKTsKKwlfX2k4MjU5YV9kaXNhYmxlX2lycShkLT5pcnEpOwogCXNwaW5fdW5sb2NrKCZpODI1OV9pcnFfbG9jayk7CiB9CiAKIHZvaWQKLWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitpODI1OWFfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKKwogCXNwaW5fbG9jaygmaTgyNTlfaXJxX2xvY2spOwogCV9faTgyNTlhX2Rpc2FibGVfaXJxKGlycSk7CiAKQEAgLTcxLDkgKzczLDkgQEAKIAogc3RydWN0IGlycV9jaGlwIGk4MjU5YV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiWFQtUElDIiwKLQkudW5tYXNrCQk9IGk4MjU5YV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IGk4MjU5YV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBpODI1OWFfbWFza19hbmRfYWNrX2lycSwKKwkuaXJxX3VubWFzawk9IGk4MjU5YV9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGk4MjU5YV9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gaTgyNTlhX21hc2tfYW5kX2Fja19pcnEsCiB9OwogCiB2b2lkIF9faW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2ltcGwuaCBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9pbXBsLmgKaW5kZXggYjYzY2NkNy4uZDUwN2EyMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2ltcGwuaAorKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaW1wbC5oCkBAIC0zMSwxMSArMzEsOSBAQAogCiBleHRlcm4gdm9pZCBjb21tb25faW5pdF9pc2FfZG1hKHZvaWQpOwogCi1leHRlcm4gdm9pZCBpODI1OWFfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgaTgyNTlhX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBpODI1OWFfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBpODI1OWFfc3RhcnR1cF9pcnEodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGk4MjU5YV9lbmRfaXJxKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBpODI1OWFfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpOworZXh0ZXJuIHZvaWQgaTgyNTlhX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCk7CitleHRlcm4gdm9pZCBpODI1OWFfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpOwogZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBpODI1OWFfaXJxX3R5cGU7CiBleHRlcm4gdm9pZCBpbml0X2k4MjU5YV9pcnFzKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfcHl4aXMuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9weXhpcy5jCmluZGV4IDI4NjM0NTguLmIzMDIyN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9weXhpcy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9weXhpcy5jCkBAIC0yOSwyMSArMjksMjEgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1weXhpc19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitweXhpc19lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlweXhpc191cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayB8PSAxVUwgPDwgKGlycSAtIDE2KSk7CisJcHl4aXNfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChkLT5pcnEgLSAxNikpOwogfQogCiBzdGF0aWMgdm9pZAotcHl4aXNfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3B5eGlzX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlweXhpc191cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayAmPSB+KDFVTCA8PCAoaXJxIC0gMTYpKSk7CisJcHl4aXNfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGQtPmlycSAtIDE2KSkpOwogfQogCiBzdGF0aWMgdm9pZAotcHl4aXNfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcHl4aXNfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKGlycSAtIDE2KTsKKwl1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoZC0+aXJxIC0gMTYpOwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IGNhY2hlZF9pcnFfbWFzayAmPSB+Yml0OwogCiAJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0LiAgKi8KQEAgLTU4LDkgKzU4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweXhpc19pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiUFlYSVMiLAotCS5tYXNrX2Fjawk9IHB5eGlzX21hc2tfYW5kX2Fja19pcnEsCi0JLm1hc2sJCT0gcHl4aXNfZGlzYWJsZV9pcnEsCi0JLnVubWFzawkJPSBweXhpc19lbmFibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBweXhpc19tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfbWFzawk9IHB5eGlzX2Rpc2FibGVfaXJxLAorCS5pcnFfdW5tYXNrCT0gcHl4aXNfZW5hYmxlX2lycSwKIH07CiAKIHZvaWQgCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJaWYgKChpZ25vcmVfbWFzayA+PiBpKSAmIDEpCiAJCQljb250aW51ZTsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZweXhpc19pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCWlycV90b19kZXNjKGkpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIAogCXNldHVwX2lycSgxNis3LCAmaXNhX2Nhc2NhZGVfaXJxYWN0aW9uKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9zcm0uYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9zcm0uYwppbmRleCAwZTU3ZTgyLi44MmE0N2JiIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfc3JtLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX3NybS5jCkBAIC0xOCwyNyArMTgsMjcgQEAKIERFRklORV9TUElOTE9DSyhzcm1faXJxX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXNybV9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzcm1fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZzcm1faXJxX2xvY2spOwotCWNzZXJ2ZV9lbmEoaXJxIC0gMTYpOworCWNzZXJ2ZV9lbmEoZC0+aXJxIC0gMTYpOwogCXNwaW5fdW5sb2NrKCZzcm1faXJxX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZAotc3JtX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzcm1fZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXNwaW5fbG9jaygmc3JtX2lycV9sb2NrKTsKLQljc2VydmVfZGlzKGlycSAtIDE2KTsKKwljc2VydmVfZGlzKGQtPmlycSAtIDE2KTsKIAlzcGluX3VubG9jaygmc3JtX2lycV9sb2NrKTsKIH0KIAogLyogSGFuZGxlIGludGVycnVwdHMgZnJvbSB0aGUgU1JNLCBhc3N1bWluZyBubyBhZGRpdGlvbmFsIHdlaXJkbmVzcy4gICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNybV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiU1JNIiwKLQkudW5tYXNrCQk9IHNybV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHNybV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBzcm1fZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBzcm1fZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSBzcm1fZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHNybV9kaXNhYmxlX2lycSwKIH07CiAKIHZvaWQgX19pbml0CkBAIC01Miw3ICs1Miw3IEBACiAJCWlmIChpIDwgNjQgJiYgKChpZ25vcmVfbWFzayA+PiBpKSAmIDEpKQogCQkJY29udGludWU7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3JtX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJaXJxX3RvX2Rlc2MoaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfYWxjb3IuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCmluZGV4IDdiZWY2MTcuLjg4ZDk1ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCkBAIC00NCwzMSArNDQsMzEgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1hbGNvcl9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCithbGNvcl9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlhbGNvcl91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayB8PSAxVUwgPDwgKGlycSAtIDE2KSk7CisJYWxjb3JfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChkLT5pcnEgLSAxNikpOwogfQogCiBzdGF0aWMgdm9pZAotYWxjb3JfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK2FsY29yX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlhbGNvcl91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayAmPSB+KDFVTCA8PCAoaXJxIC0gMTYpKSk7CisJYWxjb3JfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGQtPmlycSAtIDE2KSkpOwogfQogCiBzdGF0aWMgdm9pZAotYWxjb3JfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorYWxjb3JfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JYWxjb3JfZGlzYWJsZV9pcnEoaXJxKTsKKwlhbGNvcl9kaXNhYmxlX2lycShkKTsKIAogCS8qIE9uIEFMQ09SL1hMVCwgbmVlZCB0byBkaXNtaXNzIGludGVycnVwdCB2aWEgR1JVLiAqLwotCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMSA8PCAoaXJxIC0gMTYpOyBtYigpOworCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMSA8PCAoZC0+aXJxIC0gMTYpOyBtYigpOwogCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMDsgbWIoKTsKIH0KIAogc3RhdGljIHZvaWQKLWFsY29yX2lzYV9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCithbGNvcl9pc2FfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaTgyNTlhX21hc2tfYW5kX2Fja19pcnEoaXJxKTsKKwlpODI1OWFfbWFza19hbmRfYWNrX2lycShkKTsKIAogCS8qIE9uIEFMQ09SL1hMVCwgbmVlZCB0byBkaXNtaXNzIGludGVycnVwdCB2aWEgR1JVLiAqLwogCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMHg4MDAwMDAwMDsgbWIoKTsKQEAgLTc3LDkgKzc3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhbGNvcl9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiQUxDT1IiLAotCS51bm1hc2sJCT0gYWxjb3JfZW5hYmxlX2lycSwKLQkubWFzawkJPSBhbGNvcl9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBhbGNvcl9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gYWxjb3JfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSBhbGNvcl9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gYWxjb3JfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMjYsOSArMTI2LDkgQEAKIAkJaWYgKGkgPj0gMTYrMjAgJiYgaSA8PSAxNiszMCkKIAkJCWNvbnRpbnVlOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmFsY29yX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJaXJxX3RvX2Rlc2MoaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQotCWk4MjU5YV9pcnFfdHlwZS5hY2sgPSBhbGNvcl9pc2FfbWFza19hbmRfYWNrX2lycTsKKwlpODI1OWFfaXJxX3R5cGUuaXJxX2FjayA9IGFsY29yX2lzYV9tYXNrX2FuZF9hY2tfaXJxOwogCiAJaW5pdF9pODI1OWFfaXJxcygpOwogCWNvbW1vbl9pbml0X2lzYV9kbWEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19jYWJyaW9sZXQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19jYWJyaW9sZXQuYwppbmRleCBiMGM5MTY0Li41N2ViNjMwIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfY2FicmlvbGV0LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2NhYnJpb2xldC5jCkBAIC00NiwyMiArNDYsMjIgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1jYWJyaW9sZXRfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorY2FicmlvbGV0X2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGlycSkpOworCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGQtPmlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGQtPmlycSkpOwogfQogCiBzdGF0aWMgdm9pZAotY2FicmlvbGV0X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitjYWJyaW9sZXRfZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGlycSwgY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBpcnEpOworCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGQtPmlycSwgY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBkLT5pcnEpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNhYnJpb2xldF9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiQ0FCUklPTEVUIiwKLQkudW5tYXNrCQk9IGNhYnJpb2xldF9lbmFibGVfaXJxLAotCS5tYXNrCQk9IGNhYnJpb2xldF9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBjYWJyaW9sZXRfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBjYWJyaW9sZXRfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSBjYWJyaW9sZXRfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IGNhYnJpb2xldF9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtMTA3LDcgKzEwNyw3IEBACiAJCWZvciAoaSA9IDE2OyBpIDwgMzU7ICsraSkgewogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZjYWJyaW9sZXRfaXJxX3R5cGUsCiAJCQkJaGFuZGxlX2xldmVsX2lycSk7Ci0JCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwkJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMKaW5kZXggZWRhZDVmNy4uNDgxZGY0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMKQEAgLTk4LDM3ICs5OCwzNyBAQAogfQogCiBzdGF0aWMgdm9pZAotZHAyNjRfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorZHAyNjRfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZkcDI2NF9pcnFfbG9jayk7Ci0JY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBpcnE7CisJY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBkLT5pcnE7CiAJdHN1bmFtaV91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayk7CiAJc3Bpbl91bmxvY2soJmRwMjY0X2lycV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQKLWRwMjY0X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitkcDI2NF9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZkcDI2NF9pcnFfbG9jayk7Ci0JY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGlycSk7CisJY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGQtPmlycSk7CiAJdHN1bmFtaV91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayk7CiAJc3Bpbl91bmxvY2soJmRwMjY0X2lycV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQKLWNsaXBwZXJfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorY2xpcHBlcl9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzcGluX2xvY2soJmRwMjY0X2lycV9sb2NrKTsKLQljYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChpcnEgLSAxNik7CisJY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCAoZC0+aXJxIC0gMTYpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkCi1jbGlwcGVyX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitjbGlwcGVyX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzcGluX2xvY2soJmRwMjY0X2lycV9sb2NrKTsKLQljYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGlycSAtIDE2KSk7CisJY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IChkLT5pcnEgLSAxNikpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiB9CkBAIC0xNDksMTAgKzE0OSwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1kcDI2NF9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KQoteyAKK2RwMjY0X3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSwKKwkJICAgYm9vbCBmb3JjZSkKK3sKIAlzcGluX2xvY2soJmRwMjY0X2lycV9sb2NrKTsKLQljcHVfc2V0X2lycV9hZmZpbml0eShpcnEsICphZmZpbml0eSk7CisJY3B1X3NldF9pcnFfYWZmaW5pdHkoZC0+aXJxLCAqYWZmaW5pdHkpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiAKQEAgLTE2MCwxMCArMTYxLDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWNsaXBwZXJfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSkKLXsgCitjbGlwcGVyX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSwKKwkJICAgICBib29sIGZvcmNlKQorewogCXNwaW5fbG9jaygmZHAyNjRfaXJxX2xvY2spOwotCWNwdV9zZXRfaXJxX2FmZmluaXR5KGlycSAtIDE2LCAqYWZmaW5pdHkpOworCWNwdV9zZXRfaXJxX2FmZmluaXR5KGQtPmlycSAtIDE2LCAqYWZmaW5pdHkpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiAKQEAgLTE3MSwxOSArMTczLDE5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZHAyNjRfaXJxX3R5cGUgPSB7Ci0JLm5hbWUJCT0gIkRQMjY0IiwKLQkudW5tYXNrCQk9IGRwMjY0X2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gZHAyNjRfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gZHAyNjRfZGlzYWJsZV9pcnEsCi0JLnNldF9hZmZpbml0eQk9IGRwMjY0X3NldF9hZmZpbml0eSwKKwkubmFtZQkJCT0gIkRQMjY0IiwKKwkuaXJxX3VubWFzawkJPSBkcDI2NF9lbmFibGVfaXJxLAorCS5pcnFfbWFzawkJPSBkcDI2NF9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCQk9IGRwMjY0X2Rpc2FibGVfaXJxLAorCS5pcnFfc2V0X2FmZmluaXR5CT0gZHAyNjRfc2V0X2FmZmluaXR5LAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjbGlwcGVyX2lycV90eXBlID0gewotCS5uYW1lCQk9ICJDTElQUEVSIiwKLQkudW5tYXNrCQk9IGNsaXBwZXJfZW5hYmxlX2lycSwKLQkubWFzawkJPSBjbGlwcGVyX2Rpc2FibGVfaXJxLAotCS5tYXNrX2Fjawk9IGNsaXBwZXJfZGlzYWJsZV9pcnEsCi0JLnNldF9hZmZpbml0eQk9IGNsaXBwZXJfc2V0X2FmZmluaXR5LAorCS5uYW1lCQkJPSAiQ0xJUFBFUiIsCisJLmlycV91bm1hc2sJCT0gY2xpcHBlcl9lbmFibGVfaXJxLAorCS5pcnFfbWFzawkJPSBjbGlwcGVyX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJCT0gY2xpcHBlcl9kaXNhYmxlX2lycSwKKwkuaXJxX3NldF9hZmZpbml0eQk9IGNsaXBwZXJfc2V0X2FmZmluaXR5LAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTI2OCw4ICsyNzAsOCBAQAogewogCWxvbmcgaTsKIAlmb3IgKGkgPSBpbWluOyBpIDw9IGltYXg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksIG9wcywgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWI2NHAuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCmluZGV4IGFlNWYyOWQuLjQwMmU5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCkBAIC00NCwyMiArNDQsMjIgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1lYjY0cF9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitlYjY0cF9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQllYjY0cF91cGRhdGVfaXJxX2h3KGlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMSA8PCBpcnEpKTsKKwllYjY0cF91cGRhdGVfaXJxX2h3KGQtPmlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMSA8PCBkLT5pcnEpKTsKIH0KIAogc3RhdGljIHZvaWQKLWViNjRwX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitlYjY0cF9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JZWI2NHBfdXBkYXRlX2lycV9odyhpcnEsIGNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IGlycSk7CisJZWI2NHBfdXBkYXRlX2lycV9odyhkLT5pcnEsIGNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IGQtPmlycSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZWI2NHBfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIkVCNjRQIiwKLQkudW5tYXNrCQk9IGViNjRwX2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gZWI2NHBfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gZWI2NHBfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBlYjY0cF9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGViNjRwX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBlYjY0cF9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtMTE4LDkgKzExOCw5IEBACiAJaW5pdF9pODI1OWFfaXJxcygpOwogCiAJZm9yIChpID0gMTY7IGkgPCAzMjsgKytpKSB7Ci0JCWlycV90b19kZXNjKGkpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmViNjRwX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQl9CQkKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKKwl9CiAKIAljb21tb25faW5pdF9pc2FfZG1hKCk7CiAJc2V0dXBfaXJxKDE2KzUsICZpc2FfY2FzY2FkZV9pcnFhY3Rpb24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2VpZ2VyLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYwppbmRleCAxMTIxYmM1Li4wYjQ0YTU0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYwpAQCAtNTEsMTYgKzUxLDE4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotZWlnZXJfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorZWlnZXJfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJbWFzayA9IChjYWNoZWRfaXJxX21hc2tbaXJxID49IDY0XSAmPSB+KDFVTCA8PCAoaXJxICYgNjMpKSk7CiAJZWlnZXJfdXBkYXRlX2lycV9odyhpcnEsIG1hc2spOwogfQogCiBzdGF0aWMgdm9pZAotZWlnZXJfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK2VpZ2VyX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAltYXNrID0gKGNhY2hlZF9pcnFfbWFza1tpcnEgPj0gNjRdIHw9IDFVTCA8PCAoaXJxICYgNjMpKTsKIAllaWdlcl91cGRhdGVfaXJxX2h3KGlycSwgbWFzayk7CkBAIC02OCw5ICs3MCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZWlnZXJfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIkVJR0VSIiwKLQkudW5tYXNrCQk9IGVpZ2VyX2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gZWlnZXJfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gZWlnZXJfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBlaWdlcl9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGVpZ2VyX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBlaWdlcl9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMzYsOCArMTM4LDggQEAKIAlpbml0X2k4MjU5YV9pcnFzKCk7CiAKIAlmb3IgKGkgPSAxNjsgaSA8IDEyODsgKytpKSB7Ci0JCWlycV90b19kZXNjKGkpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmVpZ2VyX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYwppbmRleCAzNGY1NWUwLi4wMDM0MWI3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfamVuc2VuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2plbnNlbi5jCkBAIC02MywzNCArNjMsMzQgQEAKICAqLwogCiBzdGF0aWMgdm9pZAotamVuc2VuX2xvY2FsX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoramVuc2VuX2xvY2FsX2VuYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyogdGhlIHBhcnBvcnQgaXMgcmVhbGx5IGh3IElSUSAxLCBzaWxseSBKZW5zZW4uICAqLwotCWlmIChpcnEgPT0gNykKLQkJaTgyNTlhX2VuYWJsZV9pcnEoMSk7CisJaWYgKGQtPmlycSA9PSA3KQorCQlpODI1OWFfZW5hYmxlX2lycShkKTsKIH0KIAogc3RhdGljIHZvaWQKLWplbnNlbl9sb2NhbF9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCitqZW5zZW5fbG9jYWxfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyogdGhlIHBhcnBvcnQgaXMgcmVhbGx5IGh3IElSUSAxLCBzaWxseSBKZW5zZW4uICAqLwotCWlmIChpcnEgPT0gNykKLQkJaTgyNTlhX2Rpc2FibGVfaXJxKDEpOworCWlmIChkLT5pcnEgPT0gNykKKwkJaTgyNTlhX2Rpc2FibGVfaXJxKGQpOwogfQogCiBzdGF0aWMgdm9pZAotamVuc2VuX2xvY2FsX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCitqZW5zZW5fbG9jYWxfbWFza19hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCS8qIHRoZSBwYXJwb3J0IGlzIHJlYWxseSBodyBJUlEgMSwgc2lsbHkgSmVuc2VuLiAgKi8KLQlpZiAoaXJxID09IDcpCi0JCWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKDEpOworCWlmIChkLT5pcnEgPT0gNykKKwkJaTgyNTlhX21hc2tfYW5kX2Fja19pcnEoZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgamVuc2VuX2xvY2FsX2lycV90eXBlID0gewogCS5uYW1lCQk9ICJMT0NBTCIsCi0JLnVubWFzawkJPSBqZW5zZW5fbG9jYWxfZW5hYmxlLAotCS5tYXNrCQk9IGplbnNlbl9sb2NhbF9kaXNhYmxlLAotCS5tYXNrX2Fjawk9IGplbnNlbl9sb2NhbF9tYXNrX2FjaywKKwkuaXJxX3VubWFzawk9IGplbnNlbl9sb2NhbF9lbmFibGUsCisJLmlycV9tYXNrCT0gamVuc2VuX2xvY2FsX2Rpc2FibGUsCisJLmlycV9tYXNrX2Fjawk9IGplbnNlbl9sb2NhbF9tYXNrX2FjaywKIH07CiAKIHN0YXRpYyB2b2lkIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jCmluZGV4IDJiZmM5ZjEuLmU2MTkxMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19tYXJ2ZWwuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWFydmVsLmMKQEAgLTEwNCw5ICsxMDQsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWlvN19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitpbzdfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqY3RsOworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJc3RydWN0IGlvNyAqaW83OwogCiAJY3RsID0gaW83X2dldF9pcnFfY3RsKGlycSwgJmlvNyk7CkBAIC0xMTUsNyArMTE2LDcgQEAKIAkJICAgICAgIF9fZnVuY19fLCBpcnEpOwogCQlyZXR1cm47CiAJfQotCQkKKwogCXNwaW5fbG9jaygmaW83LT5pcnFfbG9jayk7CiAJKmN0bCB8PSAxVUwgPDwgMjQ7CiAJbWIoKTsKQEAgLTEyNCw5ICsxMjUsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWlvN19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoraW83X2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpjdGw7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAlzdHJ1Y3QgaW83ICppbzc7CiAKIAljdGwgPSBpbzdfZ2V0X2lycV9jdGwoaXJxLCAmaW83KTsKQEAgLTEzNSw3ICsxMzcsNyBAQAogCQkgICAgICAgX19mdW5jX18sIGlycSk7CiAJCXJldHVybjsKIAl9Ci0JCQorCiAJc3Bpbl9sb2NrKCZpbzctPmlycV9sb2NrKTsKIAkqY3RsICY9IH4oMVVMIDw8IDI0KTsKIAltYigpOwpAQCAtMTQ0LDM1ICsxNDYsMjkgQEAKIH0KIAogc3RhdGljIHZvaWQKLW1hcnZlbF9pcnFfbm9vcCh1bnNpZ25lZCBpbnQgaXJxKSAKLXsgCi0JcmV0dXJuOyAKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotbWFydmVsX2lycV9ub29wX3JldHVybih1bnNpZ25lZCBpbnQgaXJxKSAKLXsgCi0JcmV0dXJuIDA7IAorbWFydmVsX2lycV9ub29wKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWFydmVsX2xlZ2FjeV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiTEVHQUNZIiwKLQkubWFzawkJPSBtYXJ2ZWxfaXJxX25vb3AsCi0JLnVubWFzawkJPSBtYXJ2ZWxfaXJxX25vb3AsCisJLmlycV9tYXNrCT0gbWFydmVsX2lycV9ub29wLAorCS5pcnFfdW5tYXNrCT0gbWFydmVsX2lycV9ub29wLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbzdfbHNpX2lycV90eXBlID0gewogCS5uYW1lCQk9ICJMU0kiLAotCS51bm1hc2sJCT0gaW83X2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gaW83X2Rpc2FibGVfaXJxLAotCS5tYXNrX2Fjawk9IGlvN19kaXNhYmxlX2lycSwKKwkuaXJxX3VubWFzawk9IGlvN19lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGlvN19kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gaW83X2Rpc2FibGVfaXJxLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbzdfbXNpX2lycV90eXBlID0gewogCS5uYW1lCQk9ICJNU0kiLAotCS51bm1hc2sJCT0gaW83X2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gaW83X2Rpc2FibGVfaXJxLAotCS5hY2sJCT0gbWFydmVsX2lycV9ub29wLAorCS5pcnFfdW5tYXNrCT0gaW83X2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gaW83X2Rpc2FibGVfaXJxLAorCS5pcnFfYWNrCT0gbWFydmVsX2lycV9ub29wLAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTI4MCw4ICsyNzYsOCBAQAogCiAJLyogU2V0IHVwIHRoZSBsc2kgaXJxcy4gICovCiAJZm9yIChpID0gMDsgaSA8IDEyODsgKytpKSB7Ci0JCWlycV90b19kZXNjKGJhc2UgKyBpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGJhc2UgKyBpLCBsc2lfb3BzLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKIAl9CiAKIAkvKiBEaXNhYmxlIHRoZSBpbXBsZW1lbnRlZCBpcnFzIGluIGhhcmR3YXJlLiAgKi8KQEAgLTI5NCw4ICsyOTAsOCBAQAogCiAJLyogU2V0IHVwIHRoZSBtc2kgaXJxcy4gICovCiAJZm9yIChpID0gMTI4OyBpIDwgKDEyOCArIDUxMik7ICsraSkgewotCQlpcnFfdG9fZGVzYyhiYXNlICsgaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihiYXNlICsgaSwgbXNpX29wcywgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDE2OyArK2kpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlrYXNhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlrYXNhLmMKaW5kZXggYmNjMTYzOS4uY2Y3ZjQzZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21pa2FzYS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19taWthc2EuYwpAQCAtNDMsMjIgKzQzLDIyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotbWlrYXNhX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK21pa2FzYV9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMSA8PCAoaXJxIC0gMTYpKTsKKwltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMSA8PCAoZC0+aXJxIC0gMTYpKTsKIH0KIAogc3RhdGljIHZvaWQKLW1pa2FzYV9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorbWlrYXNhX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IChpcnEgLSAxNikpKTsKKwltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IChkLT5pcnEgLSAxNikpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtaWthc2FfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIk1JS0FTQSIsCi0JLnVubWFzawkJPSBtaWthc2FfZW5hYmxlX2lycSwKLQkubWFzawkJPSBtaWthc2FfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gbWlrYXNhX2Rpc2FibGVfaXJxLAorCS5pcnFfdW5tYXNrCT0gbWlrYXNhX2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gbWlrYXNhX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBtaWthc2FfZGlzYWJsZV9pcnEsCiB9OwogCiBzdGF0aWMgdm9pZCAKQEAgLTk4LDggKzk4LDggQEAKIAltaWthc2FfdXBkYXRlX2lycV9odygwKTsKIAogCWZvciAoaSA9IDE2OyBpIDwgMzI7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZtaWthc2FfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIAogCWluaXRfaTgyNTlhX2lycXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19ub3JpdGFrZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKaW5kZXggZTg4ZjRhZS4uOTJiYzE4OCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKQEAgLTQ4LDIyICs0OCwyMiBAQAogfQogCiBzdGF0aWMgdm9pZAotbm9yaXRha2VfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorbm9yaXRha2VfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jbm9yaXRha2VfdXBkYXRlX2lycV9odyhpcnEsIGNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IChpcnEgLSAxNikpOworCW5vcml0YWtlX3VwZGF0ZV9pcnFfaHcoZC0+aXJxLCBjYWNoZWRfaXJxX21hc2sgfD0gMSA8PCAoZC0+aXJxIC0gMTYpKTsKIH0KIAogc3RhdGljIHZvaWQKLW5vcml0YWtlX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitub3JpdGFrZV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jbm9yaXRha2VfdXBkYXRlX2lycV9odyhpcnEsIGNhY2hlZF9pcnFfbWFzayAmPSB+KDEgPDwgKGlycSAtIDE2KSkpOworCW5vcml0YWtlX3VwZGF0ZV9pcnFfaHcoZC0+aXJxLCBjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IChkLT5pcnEgLSAxNikpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBub3JpdGFrZV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiTk9SSVRBS0UiLAotCS51bm1hc2sJCT0gbm9yaXRha2VfZW5hYmxlX2lycSwKLQkubWFzawkJPSBub3JpdGFrZV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBub3JpdGFrZV9kaXNhYmxlX2lycSwKKwkuaXJxX3VubWFzawk9IG5vcml0YWtlX2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gbm9yaXRha2VfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IG5vcml0YWtlX2Rpc2FibGVfaXJxLAogfTsKIAogc3RhdGljIHZvaWQgCkBAIC0xMjcsOCArMTI3LDggQEAKIAlvdXR3KDAsIDB4NTRjKTsKIAogCWZvciAoaSA9IDE2OyBpIDwgNDg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZub3JpdGFrZV9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJaW5pdF9pODI1OWFfaXJxcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Jhd2hpZGUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19yYXdoaWRlLmMKaW5kZXggNmE1MTM2NC4uOTM2ZDQxNCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Jhd2hpZGUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcmF3aGlkZS5jCkBAIC01Niw5ICs1NiwxMCBAQAogICAoKChoKSA8IE1DUENJQV9NQVhfSE9TRVMpICYmIChjYWNoZWRfaXJxX21hc2tzWyhoKV0gIT0gMCkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAKLXJhd2hpZGVfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcmF3aGlkZV9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzaywgaG9zZTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCiAJaXJxIC09IDE2OwogCWhvc2UgPSBpcnEgLyAyNDsKQEAgLTc2LDkgKzc3LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIAotcmF3aGlkZV9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcmF3aGlkZV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgaW50IG1hc2ssIGhvc2U7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAogCWlycSAtPSAxNjsKIAlob3NlID0gaXJxIC8gMjQ7CkBAIC05Niw5ICs5OCwxMCBAQAogfQogCiBzdGF0aWMgdm9pZAotcmF3aGlkZV9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCityYXdoaWRlX21hc2tfYW5kX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBtYXNrLCBtYXNrMSwgaG9zZTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCiAJaXJxIC09IDE2OwogCWhvc2UgPSBpcnEgLyAyNDsKQEAgLTEyMyw5ICsxMjYsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHJhd2hpZGVfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIlJBV0hJREUiLAotCS51bm1hc2sJCT0gcmF3aGlkZV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHJhd2hpZGVfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gcmF3aGlkZV9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gcmF3aGlkZV9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IHJhd2hpZGVfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHJhd2hpZGVfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtMTc3LDggKzE4MCw4IEBACiAJfQogCiAJZm9yIChpID0gMTY7IGkgPCAxMjg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZyYXdoaWRlX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKIAl9CiAKIAlpbml0X2k4MjU5YV9pcnFzKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19yeDE2NC5jCmluZGV4IDg5ZTdlMzdlLi5jZWEyMmE2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYwpAQCAtNDcsMjIgKzQ3LDIyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotcngxNjRfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcngxNjRfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JcngxNjRfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChpcnEgLSAxNikpOworCXJ4MTY0X3VwZGF0ZV9pcnFfaHcoY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCAoZC0+aXJxIC0gMTYpKTsKIH0KIAogc3RhdGljIHZvaWQKLXJ4MTY0X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCityeDE2NF9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JcngxNjRfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGlycSAtIDE2KSkpOworCXJ4MTY0X3VwZGF0ZV9pcnFfaHcoY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IChkLT5pcnEgLSAxNikpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCByeDE2NF9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiUlgxNjQiLAotCS51bm1hc2sJCT0gcngxNjRfZW5hYmxlX2lycSwKLQkubWFzawkJPSByeDE2NF9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSByeDE2NF9kaXNhYmxlX2lycSwKKwkuaXJxX3VubWFzawk9IHJ4MTY0X2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gcngxNjRfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHJ4MTY0X2Rpc2FibGVfaXJxLAogfTsKIAogc3RhdGljIHZvaWQgCkBAIC05OSw4ICs5OSw4IEBACiAKIAlyeDE2NF91cGRhdGVfaXJxX2h3KDApOwogCWZvciAoaSA9IDE2OyBpIDwgNDA7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZyeDE2NF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJaW5pdF9pODI1OWFfaXJxcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYwppbmRleCA1YzQ0MjNkLi5hMzQ5NTM4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYwpAQCAtNDQzLDExICs0NDMsMTEgQEAKIC8qIEdFTkVSSUMgaXJxIHJvdXRpbmVzICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc2FibGVfbHlueF9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzYWJsZV9seW54X2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgYml0LCBtYXNrOwogCi0JYml0ID0gc2FibGVfbHlueF9pcnFfc3dpenpsZS0+aXJxX3RvX21hc2tbaXJxXTsKKwliaXQgPSBzYWJsZV9seW54X2lycV9zd2l6emxlLT5pcnFfdG9fbWFza1tkLT5pcnFdOwogCXNwaW5fbG9jaygmc2FibGVfbHlueF9pcnFfbG9jayk7CiAJbWFzayA9IHNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnNoYWRvd19tYXNrICY9IH4oMVVMIDw8IGJpdCk7CiAJc2FibGVfbHlueF9pcnFfc3dpenpsZS0+dXBkYXRlX2lycV9odyhiaXQsIG1hc2spOwpAQCAtNDU5LDExICs0NTksMTEgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNhYmxlX2x5bnhfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3NhYmxlX2x5bnhfZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgYml0LCBtYXNrOwogCi0JYml0ID0gc2FibGVfbHlueF9pcnFfc3dpenpsZS0+aXJxX3RvX21hc2tbaXJxXTsKKwliaXQgPSBzYWJsZV9seW54X2lycV9zd2l6emxlLT5pcnFfdG9fbWFza1tkLT5pcnFdOwogCXNwaW5fbG9jaygmc2FibGVfbHlueF9pcnFfbG9jayk7CiAJbWFzayA9IHNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnNoYWRvd19tYXNrIHw9IDFVTCA8PCBiaXQ7CiAJc2FibGVfbHlueF9pcnFfc3dpenpsZS0+dXBkYXRlX2lycV9odyhiaXQsIG1hc2spOwpAQCAtNDc1LDExICs0NzUsMTEgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNhYmxlX2x5bnhfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc2FibGVfbHlueF9tYXNrX2FuZF9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGJpdCwgbWFzazsKIAotCWJpdCA9IHNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPmlycV90b19tYXNrW2lycV07CisJYml0ID0gc2FibGVfbHlueF9pcnFfc3dpenpsZS0+aXJxX3RvX21hc2tbZC0+aXJxXTsKIAlzcGluX2xvY2soJnNhYmxlX2x5bnhfaXJxX2xvY2spOwogCW1hc2sgPSBzYWJsZV9seW54X2lycV9zd2l6emxlLT5zaGFkb3dfbWFzayB8PSAxVUwgPDwgYml0OwogCXNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnVwZGF0ZV9pcnFfaHcoYml0LCBtYXNrKTsKQEAgLTQ4OSw5ICs0ODksOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNhYmxlX2x5bnhfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIlNBQkxFL0xZTlgiLAotCS51bm1hc2sJCT0gc2FibGVfbHlueF9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHNhYmxlX2x5bnhfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gc2FibGVfbHlueF9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gc2FibGVfbHlueF9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IHNhYmxlX2x5bnhfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHNhYmxlX2x5bnhfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtNTE4LDkgKzUxOCw5IEBACiAJbG9uZyBpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX29mX2lycXM7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZzYWJsZV9seW54X2lycV90eXBlLAogCQkJaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJY29tbW9uX2luaXRfaXNhX2RtYSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Rha2FyYS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Rha2FyYS5jCmluZGV4IGY4YTFlOGEuLjQyYTUzMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190YWthcmEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGFrYXJhLmMKQEAgLTQ1LDE2ICs0NSwxOCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRha2FyYV9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit0YWthcmFfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJbWFzayA9IChjYWNoZWRfaXJxX21hc2tbaXJxID49IDY0XSAmPSB+KDFVTCA8PCAoaXJxICYgNjMpKSk7CiAJdGFrYXJhX3VwZGF0ZV9pcnFfaHcoaXJxLCBtYXNrKTsKIH0KIAogc3RhdGljIHZvaWQKLXRha2FyYV9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQordGFrYXJhX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAltYXNrID0gKGNhY2hlZF9pcnFfbWFza1tpcnEgPj0gNjRdIHw9IDFVTCA8PCAoaXJxICYgNjMpKTsKIAl0YWthcmFfdXBkYXRlX2lycV9odyhpcnEsIG1hc2spOwpAQCAtNjIsOSArNjQsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRha2FyYV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiVEFLQVJBIiwKLQkudW5tYXNrCQk9IHRha2FyYV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHRha2FyYV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSB0YWthcmFfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSB0YWthcmFfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSB0YWthcmFfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHRha2FyYV9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMzYsOCArMTM4LDggQEAKIAkJdGFrYXJhX3VwZGF0ZV9pcnFfaHcoaSwgLTEpOwogCiAJZm9yIChpID0gMTY7IGkgPCAxMjg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZ0YWthcmFfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIAogCWNvbW1vbl9pbml0X2lzYV9kbWEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190aXRhbi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKaW5kZXggZTAyNDk0Yi4uZjZjMTA4YSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKQEAgLTExMiw4ICsxMTIsOSBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRpdGFuX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3RpdGFuX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJc3Bpbl9sb2NrKCZ0aXRhbl9pcnFfbG9jayk7CiAJdGl0YW5fY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCAoaXJxIC0gMTYpOwogCXRpdGFuX3VwZGF0ZV9pcnFfaHcodGl0YW5fY2FjaGVkX2lycV9tYXNrKTsKQEAgLTEyMSw4ICsxMjIsOSBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRpdGFuX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit0aXRhbl9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAlzcGluX2xvY2soJnRpdGFuX2lycV9sb2NrKTsKIAl0aXRhbl9jYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGlycSAtIDE2KSk7CiAJdGl0YW5fdXBkYXRlX2lycV9odyh0aXRhbl9jYWNoZWRfaXJxX21hc2spOwpAQCAtMTQ0LDcgKzE0Niw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXRpdGFuX3NldF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KQordGl0YW5fc2V0X2lycV9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSwKKwkJICAgICAgIGJvb2wgZm9yY2UpCiB7IAogCXNwaW5fbG9jaygmdGl0YW5faXJxX2xvY2spOwogCXRpdGFuX2NwdV9zZXRfaXJxX2FmZmluaXR5KGlycSAtIDE2LCAqYWZmaW5pdHkpOwpAQCAtMTc1LDE3ICsxNzgsMTcgQEAKIHsKIAlsb25nIGk7CiAJZm9yIChpID0gaW1pbjsgaSA8PSBpbWF4OyArK2kpIHsKLQkJaXJxX3RvX2Rlc2MoaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCBvcHMsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0aXRhbl9pcnFfdHlwZSA9IHsKLSAgICAgICAubmFtZQkJPSAiVElUQU4iLAotICAgICAgIC51bm1hc2sJCT0gdGl0YW5fZW5hYmxlX2lycSwKLSAgICAgICAubWFzawkJPSB0aXRhbl9kaXNhYmxlX2lycSwKLSAgICAgICAubWFza19hY2sJPSB0aXRhbl9kaXNhYmxlX2lycSwKLSAgICAgICAuc2V0X2FmZmluaXR5CT0gdGl0YW5fc2V0X2lycV9hZmZpbml0eSwKKyAgICAgICAubmFtZQkJCT0gIlRJVEFOIiwKKyAgICAgICAuaXJxX3VubWFzawkJPSB0aXRhbl9lbmFibGVfaXJxLAorICAgICAgIC5pcnFfbWFzawkJPSB0aXRhbl9kaXNhYmxlX2lycSwKKyAgICAgICAuaXJxX21hc2tfYWNrCQk9IHRpdGFuX2Rpc2FibGVfaXJxLAorICAgICAgIC5pcnFfc2V0X2FmZmluaXR5CT0gdGl0YW5fc2V0X2lycV9hZmZpbml0eSwKIH07CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3dpbGRmaXJlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwppbmRleCBlZWM1MjU5Li5jYTYwYTM4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwpAQCAtMTA0LDEwICsxMDQsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdpbGRmaXJlX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3dpbGRmaXJlX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CisKIAlpZiAoaXJxIDwgMTYpCi0JCWk4MjU5YV9lbmFibGVfaXJxKGlycSk7CisJCWk4MjU5YV9lbmFibGVfaXJxKGQpOwogCiAJc3Bpbl9sb2NrKCZ3aWxkZmlyZV9pcnFfbG9jayk7CiAJc2V0X2JpdChpcnEsICZjYWNoZWRfaXJxX21hc2spOwpAQCAtMTE2LDEwICsxMTgsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdpbGRmaXJlX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit3aWxkZmlyZV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKKwogCWlmIChpcnEgPCAxNikKLQkJaTgyNTlhX2Rpc2FibGVfaXJxKGlycSk7CisJCWk4MjU5YV9kaXNhYmxlX2lycShkKTsKIAogCXNwaW5fbG9jaygmd2lsZGZpcmVfaXJxX2xvY2spOwogCWNsZWFyX2JpdChpcnEsICZjYWNoZWRfaXJxX21hc2spOwpAQCAtMTI4LDEwICsxMzIsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdpbGRmaXJlX21hc2tfYW5kX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3dpbGRmaXJlX21hc2tfYW5kX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CisKIAlpZiAoaXJxIDwgMTYpCi0JCWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKGlycSk7CisJCWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKGQpOwogCiAJc3Bpbl9sb2NrKCZ3aWxkZmlyZV9pcnFfbG9jayk7CiAJY2xlYXJfYml0KGlycSwgJmNhY2hlZF9pcnFfbWFzayk7CkBAIC0xNDEsOSArMTQ3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB3aWxkZmlyZV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiV0lMREZJUkUiLAotCS51bm1hc2sJCT0gd2lsZGZpcmVfZW5hYmxlX2lycSwKLQkubWFzawkJPSB3aWxkZmlyZV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSB3aWxkZmlyZV9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gd2lsZGZpcmVfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSB3aWxkZmlyZV9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gd2lsZGZpcmVfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdApAQCAtMTc3LDIxICsxODMsMjEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgewogCQlpZiAoaSA9PSAyKQogCQkJY29udGludWU7Ci0JCWlycV90b19kZXNjKGkraXJxX2JpYXMpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaStpcnFfYmlhcywgJndpbGRmaXJlX2lycV90eXBlLAogCQkJaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGkgKyBpcnFfYmlhcywgSVJRX0xFVkVMKTsKIAl9CiAKLQlpcnFfdG9fZGVzYygzNitpcnFfYmlhcyktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKDM2K2lycV9iaWFzLCAmd2lsZGZpcmVfaXJxX3R5cGUsCiAJCWhhbmRsZV9sZXZlbF9pcnEpOworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKDM2ICsgaXJxX2JpYXMsIElSUV9MRVZFTCk7CiAJZm9yIChpID0gNDA7IGkgPCA2NDsgKytpKSB7Ci0JCWlycV90b19kZXNjKGkraXJxX2JpYXMpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaStpcnFfYmlhcywgJndpbGRmaXJlX2lycV90eXBlLAogCQkJaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGkgKyBpcnFfYmlhcywgSVJRX0xFVkVMKTsKIAl9CiAKLQlzZXR1cF9pcnEoMzIraXJxX2JpYXMsICZpc2FfZW5hYmxlKTsJCisJc2V0dXBfaXJxKDMyK2lycV9iaWFzLCAmaXNhX2VuYWJsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNWNmZjE2NS4uMzhiZjY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlib29sICJGb290QnJpZGdlIgogCXNlbGVjdCBDUFVfU0ExMTAKIAlzZWxlY3QgRk9PVEJSSURHRQotCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJaGVscAogCSAgU3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgREMyMTI4NSBjb21wYW5pb24gY2hpcAogCSAgKCJGb290QnJpZGdlIiksIHN1Y2ggYXMgdGhlIFNpbXRlYyBDQVRTIGFuZCB0aGUgUmViZWwgTmV0V2luZGVyLgpAQCAtODc1LDYgKzg3NSwxNiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFNUJ3MgU1BFQXIgcGxhdGZvcm0gKFNQRUFyM3h4LCBTUEVBcjZ4eCBhbmQgU1BFQXIxM3h4KS4KIAorY29uZmlnIEFSQ0hfVlQ4NTAwCisJYm9vbCAiVklBL1dvbmRlck1lZGlhIDg1eHgiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgSEFWRV9QV00KKwloZWxwCisJICBTdXBwb3J0IGZvciBWSUEvV29uZGVyTWVkaWEgVlQ4NTAwL1dNODV4eCBTeXN0ZW0tb24tQ2hpcC4KIGVuZGNob2ljZQogCiAjCkBAIC0xMDA3LDYgKzEwMTcsOCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZyIKIAorc291cmNlICJhcmNoL2FybS9tYWNoLXZ0ODUwMC9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtdzkweDkwMC9LY29uZmlnIgogCiAjIERlZmluaXRpb25zIHRvIG1ha2UgbGlmZSBlYXNpZXIKQEAgLTExNzcsNiArMTE4OSw1MyBAQAogCSAgdmlzaWJsZSBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb3IgcG93ZXIgY29uc3VtcHRpb24gb2YgdGhlCiAJICBwcm9jZXNzb3IuCiAKK2NvbmZpZyBBUk1fRVJSQVRBXzc1MTQ3MgorCWJvb2wgIkFSTSBlcnJhdGE6IEludGVycnVwdGVkIElDSUFMTFVJUyBtYXkgcHJldmVudCBjb21wbGV0aW9uIG9mIGJyb2FkY2FzdGVkIG9wZXJhdGlvbiIKKwlkZXBlbmRzIG9uIENQVV9WNyAmJiBTTVAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB3b3JrYXJvdW5kIGZvciB0aGUgNzUxNDcyIENvcnRleC1BOSAocHJpb3IKKwkgIHRvIHIzcDApIGVycmF0dW0uIEFuIGludGVycnVwdGVkIElDSUFMTFVJUyBvcGVyYXRpb24gbWF5IHByZXZlbnQgdGhlCisJICBjb21wbGV0aW9uIG9mIGEgZm9sbG93aW5nIGJyb2FkY2FzdGVkIG9wZXJhdGlvbiBpZiB0aGUgc2Vjb25kCisJICBvcGVyYXRpb24gaXMgcmVjZWl2ZWQgYnkgYSBDUFUgYmVmb3JlIHRoZSBJQ0lBTExVSVMgaGFzIGNvbXBsZXRlZCwKKwkgIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gY29ycnVwdGVkIGVudHJpZXMgaW4gdGhlIGNhY2hlIG9yIFRMQi4KKworY29uZmlnIEFSTV9FUlJBVEFfNzUzOTcwCisJYm9vbCAiQVJNIGVycmF0YTogY2FjaGUgc3luYyBvcGVyYXRpb24gbWF5IGJlIGZhdWx0eSIKKwlkZXBlbmRzIG9uIENBQ0hFX1BMMzEwCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgd29ya2Fyb3VuZCBmb3IgdGhlIDc1Mzk3MCBQTDMxMCAocjNwMCkgZXJyYXR1bS4KKworCSAgVW5kZXIgc29tZSBjb25kaXRpb24gdGhlIGVmZmVjdCBvZiBjYWNoZSBzeW5jIG9wZXJhdGlvbiBvbgorCSAgdGhlIHN0b3JlIGJ1ZmZlciBzdGlsbCByZW1haW5zIHdoZW4gdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuCisJICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0b3JlIGJ1ZmZlciBpcyBhbHdheXMgYXNrZWQgdG8gZHJhaW4gYW5kCisJICB0aGlzIHByZXZlbnRzIGl0IGZyb20gbWVyZ2luZyBhbnkgZnVydGhlciB3cml0ZXMuIFRoZSB3b3JrYXJvdW5kCisJICBpcyB0byByZXBsYWNlIHRoZSBub3JtYWwgb2Zmc2V0IG9mIGNhY2hlIHN5bmMgb3BlcmF0aW9uICgweDczMCkKKwkgIGJ5IGFub3RoZXIgb2Zmc2V0IHRhcmdldGluZyBhbiB1bm1hcHBlZCBQTDMxMCByZWdpc3RlciAweDc0MC4KKwkgIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgY2FjaGUgc3luYyBvcGVyYXRpb246IHN0b3JlIGJ1ZmZlcgorCSAgZHJhaW4gYW5kIHdhaXRpbmcgZm9yIGFsbCBidWZmZXJzIGVtcHR5LgorCitjb25maWcgQVJNX0VSUkFUQV83NTQzMjIKKwlib29sICJBUk0gZXJyYXRhOiBwb3NzaWJsZSBmYXVsdHkgTU1VIHRyYW5zbGF0aW9ucyBmb2xsb3dpbmcgYW4gQVNJRCBzd2l0Y2giCisJZGVwZW5kcyBvbiBDUFVfVjcKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB3b3JrYXJvdW5kIGZvciB0aGUgNzU0MzIyIENvcnRleC1BOSAocjJwKiwKKwkgIHIzcCopIGVycmF0dW0uIEEgc3BlY3VsYXRpdmUgbWVtb3J5IGFjY2VzcyBtYXkgY2F1c2UgYSBwYWdlIHRhYmxlIHdhbGsKKwkgIHdoaWNoIHN0YXJ0cyBwcmlvciB0byBhbiBBU0lEIHN3aXRjaCBidXQgY29tcGxldGVzIGFmdGVyd2FyZHMuIFRoaXMKKwkgIGNhbiBwb3B1bGF0ZSB0aGUgbWljcm8tVExCIHdpdGggYSBzdGFsZSBlbnRyeSB3aGljaCBtYXkgYmUgaGl0IHdpdGgKKwkgIHRoZSBuZXcgQVNJRC4gVGhpcyB3b3JrYXJvdW5kIHBsYWNlcyB0d28gZHNiIGluc3RydWN0aW9ucyBpbiB0aGUgbW0KKwkgIHN3aXRjaGluZyBjb2RlIHNvIHRoYXQgbm8gcGFnZSB0YWJsZSB3YWxrcyBjYW4gY3Jvc3MgdGhlIEFTSUQgc3dpdGNoLgorCitjb25maWcgQVJNX0VSUkFUQV83NTQzMjcKKwlib29sICJBUk0gZXJyYXRhOiBubyBhdXRvbWF0aWMgU3RvcmUgQnVmZmVyIGRyYWluIgorCWRlcGVuZHMgb24gQ1BVX1Y3ICYmIFNNUAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHdvcmthcm91bmQgZm9yIHRoZSA3NTQzMjcgQ29ydGV4LUE5IChwcmlvciB0bworCSAgcjJwMCkgZXJyYXR1bS4gVGhlIFN0b3JlIEJ1ZmZlciBkb2VzIG5vdCBoYXZlIGFueSBhdXRvbWF0aWMgZHJhaW5pbmcKKwkgIG1lY2hhbmlzbSBhbmQgdGhlcmVmb3JlIGEgbGl2ZWxvY2sgbWF5IG9jY3VyIGlmIGFuIGV4dGVybmFsIGFnZW50CisJICBjb250aW51b3VzbHkgcG9sbHMgYSBtZW1vcnkgbG9jYXRpb24gd2FpdGluZyB0byBvYnNlcnZlIGFuIHVwZGF0ZS4KKwkgIFRoaXMgd29ya2Fyb3VuZCBkZWZpbmVzIGNwdV9yZWxheCgpIGFzIHNtcF9tYigpLCBwcmV2ZW50aW5nIGNvcnJlY3RseQorCSAgd3JpdHRlbiBwb2xsaW5nIGxvb3BzIGZyb20gZGVueWluZyB2aXNpYmlsaXR5IG9mIHVwZGF0ZXMgdG8gbWVtb3J5LgorCiBlbmRtZW51CiAKIHNvdXJjZSAiYXJjaC9hcm0vY29tbW9uL0tjb25maWciCkBAIC0xMzkxLDcgKzE0NTAsNyBAQAogCiBjb25maWcgT0FCSV9DT01QQVQKIAlib29sICJBbGxvdyBvbGQgQUJJIGJpbmFyaWVzIHRvIHJ1biB3aXRoIHRoaXMga2VybmVsIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gQUVBQkkgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBBRUFCSSAmJiBFWFBFUklNRU5UQUwgJiYgIVRIVU1CMl9LRVJORUwKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwcmVzZXJ2ZXMgdGhlIG9sZCBzeXNjYWxsIGludGVyZmFjZSBhbG9uZyB3aXRoIHRoZQpAQCAtMTYxOSw2ICsxNjc4LDE4IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gZXhlY3V0ZSB5b3VyIGNvbXByZXNzZWQga2VybmVsIGltYWdlCiAJICAoekltYWdlKSBkaXJlY3RseSBmcm9tIFJPTSBvciBmbGFzaC4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBaQk9PVF9ST01fTU1DSUYKKwlib29sICJJbmNsdWRlIE1NQ0lGIGxvYWRlciBpbiB6SW1hZ2UgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBaQk9PVF9ST00gJiYgQVJDSF9TSDczNzIgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGV4cGVyaW1lbnRhbCBNTUNJRiBsb2FkaW5nIGNvZGUgaW4gdGhlCisJICBST00tYWJsZSB6SW1hZ2UuIFdpdGggdGhpcyBlbmFibGVkIGl0IGlzIHBvc3NpYmxlIHRvIHdyaXRlIHRoZQorCSAgdGhlIFJPTS1hYmxlIHpJbWFnZSBrZXJuZWwgaW1hZ2UgdG8gYW4gTU1DIGNhcmQgYW5kIGJvb3QgdGhlCisJICBrZXJuZWwgc3RyYWlnaHQgZnJvbSB0aGUgcmVzZXQgdmVjdG9yLiBBdCByZXNldCB0aGUgcHJvY2Vzc29yCisJICBNYXNrIFJPTSB3aWxsIGxvYWQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHRoZSBST00tYWJsZSB6SW1hZ2UKKwkgIHdoaWNoIGluIHR1cm4gbG9hZHMgdGhlIHJlc3QgdGhlIGtlcm5lbCBpbWFnZSB0byBSQU0gdXNpbmcgdGhlCisJICBNTUNJRiBoYXJkd2FyZSBibG9jay4KKwogY29uZmlnIENNRExJTkUKIAlzdHJpbmcgIkRlZmF1bHQga2VybmVsIGNvbW1hbmQgc3RyaW5nIgogCWRlZmF1bHQgIiIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggYzIyYzFhZC4uY2Q1NmM5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTE1LDcgKzE1LDcgQEAKIExERkxBR1Nfdm1saW51eAkrPSAtLWJlOAogZW5kaWYKIAotT0JKQ09QWUZMQUdTCTo9LU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5ub3RlLmdudS5idWlsZC1pZCAtUiAuY29tbWVudCAtUworT0JKQ09QWUZMQUdTCTo9LU8gYmluYXJ5IC1SIC5jb21tZW50IC1TCiBHWkZMQUdTCQk6PS05CiAjS0JVSUxEX0NGTEFHUwkrPS1waXBlCiAjIEV4cGxpY2l0bHkgc3BlY2lmaXkgMzItYml0IEFSTSBJU0Egc2luY2UgdG9vbGNoYWluIGRlZmF1bHQgY2FuIGJlIC1tdGh1bWI6CkBAIC0xOTAsNiArMTkwLDcgQEAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9VODUwMCkJCTo9IHV4NTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVkVSU0FUSUxFKQk6PSB2ZXJzYXRpbGUKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9WRVhQUkVTUykJCTo9IHZleHByZXNzCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfVlQ4NTAwKQkJOj0gdnQ4NTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVzkwWDkwMCkJCTo9IHc5MHg5MDAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9OVUM5M1gpCQk6PSBudWM5M3gKIG1hY2hpbmUtJChDT05GSUdfRk9PVEJSSURHRSkJCTo9IGZvb3RicmlkZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC8uZ2l0aWdub3JlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKaW5kZXggYWIyMDRkYi4uYzYwMjg5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKQEAgLTEsMyArMSw3IEBACiBmb250LmMKLXBpZ2d5Lmd6CitsaWIxZnVuY3MuUworcGlnZ3kuZ3ppcAorcGlnZ3kubHpvCitwaWdneS5sem1hCit2bWxpbnV4CiB2bWxpbnV4LmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDBhOGY3NDguLjVmM2ExNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsOSArNCwyMCBAQAogIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXogaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAogIwogCitPQkpTCQk9CisKKyMgRW5zdXJlIHRoYXQgbW1jaWYgbG9hZGVyIGNvZGUgYXBwZWFycyBlYXJseSBpbiB0aGUgaW1hZ2UKKyMgdG8gbWluaW1pc2UgdGhhdCBudW1iZXIgb2YgYm9ja3MgdGhhdCBoYXZlIHRvIGJlIHJlYWQgaW4KKyMgb3JkZXIgdG8gbG9hZCBpdC4KK2lmZXEgKCQoQ09ORklHX1pCT09UX1JPTV9NTUNJRikseSkKK2lmZXEgKCQoQ09ORklHX0FSQ0hfU0g3MzcyKSx5KQorT0JKUwkJKz0gbW1jaWYtc2g3MzcyLm8KK2VuZGlmCitlbmRpZgorCiBBRkxBR1NfaGVhZC5vICs9IC1EVEVYVF9PRkZTRVQ9JChURVhUX09GRlNFVCkKIEhFQUQJPSBoZWFkLm8KLU9CSlMJPSBtaXNjLm8gZGVjb21wcmVzcy5vCitPQkpTCSs9IG1pc2MubyBkZWNvbXByZXNzLm8KIEZPTlRDCT0gJChzcmN0cmVlKS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9hY29ybl84eDguYwogCiAjCkBAIC0yOSw2ICs0MCwxMCBAQAogT0JKUwkJKz0gaGVhZC1zYTExMDAubwogZW5kaWYKIAoraWZlcSAoJChDT05GSUdfQVJDSF9WVDg1MDApLHkpCitPQkpTCQkrPSBoZWFkLXZ0ODUwMC5vCitlbmRpZgorCiBpZmVxICgkKENPTkZJR19DUFVfWFNDQUxFKSx5KQogT0JKUwkJKz0gaGVhZC14c2NhbGUubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNobW9iaWxlLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zaG1vYmlsZS5TCmluZGV4IDMwOTczYjcuLmM5NDNkMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNobW9iaWxlLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2htb2JpbGUuUwpAQCAtMjUsNiArMjUsMzYgQEAKIAkvKiBsb2FkIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGNvZGUgKi8KICNpbmNsdWRlIDxtYWNoL3pib290Lmg+CiAKKyNpZmRlZiBDT05GSUdfWkJPT1RfUk9NX01NQ0lGCisJLyogTG9hZCBpbWFnZSBmcm9tIE1NQyAqLworCWFkcglzcCwgX190bXBfc3RhY2sgKyAxMjgKKwlsZHIJcjAsIF9faW1hZ2Vfc3RhcnQKKwlsZHIJcjEsIF9faW1hZ2VfZW5kCisJc3VicwlyMSwgcjEsIHIwCisJbGRyCXIwLCBfX2xvYWRfYmFzZQorCWJsCW1tY2lmX2xvYWRlcgorCisJLyogSnVtcCB0byBsb2FkZWQgY29kZSAqLworCWxkcglyMCwgX19sb2FkZWQKKwlsZHIJcjEsIF9faW1hZ2Vfc3RhcnQKKwlzdWIJcjAsIHIwLCByMQorCWxkcglyMSwgX19sb2FkX2Jhc2UKKwlhZGQJcGMsIHIwLCByMQorCitfX2ltYWdlX3N0YXJ0OgorCS5sb25nCV9zdGFydAorX19pbWFnZV9lbmQ6CisJLmxvbmcJX2dvdF9lbmQKK19fbG9hZF9iYXNlOgorCS5sb25nCUNPTkZJR19NRU1PUllfU1RBUlQgKyAweDAyMDAwMDAwIEAgTG9hZCBhdCAzMk1iIGludG8gU0RSQU0KK19fbG9hZGVkOgorCS5sb25nCV9fY29udGludWUKKwkuYWxpZ24KK19fdG1wX3N0YWNrOgorCS5zcGFjZQkxMjgKK19fY29udGludWU6CisjZW5kaWYgLyogQ09ORklHX1pCT09UX1JPTV9NTUNJRiAqLworCiAJYgkxZgogX19hdGFnczpAIHRhZyAjMQogCS5sb25nCTEyCQkJQCB0YWctPmhkci5zaXplID0gdGFnX3NpemUodGFnX2NvcmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtdnQ4NTAwLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC12dDg1MDAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGMxZTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtdnQ4NTAwLlMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXZ0ODUwMC5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBWSUEgVlQ4NTAwIHNwZWNpZmljIHR3ZWFrcy4gVGhpcyBpcyBtZXJnZWQgaW50byBoZWFkLlMgYnkgdGhlIGxpbmtlci4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisJCS5zZWN0aW9uICAgICAgICAiLnN0YXJ0IiwgImF4IgorCitfX1ZUODUwMF9zdGFydDoKKwlAIENvbXBhcmUgdGhlIFNDQyBJRCByZWdpc3RlciBhZ2FpbnN0IGEgbGlzdCBvZiBrbm93biB2YWx1ZXMKKwlsZHIJcjEsIC5TQ0NJRAorCWxkcglyMywgW3IxXQorCisJQCBWVDg1MDAgb3ZlcnJpZGUKKwlsZHIJcjQsIC5WVDg1MDBTQ0MKKwljbXAJcjMsIHI0CisJbGRyZXEJcjcsIC5JRF9CVjA3CisJYmVxCS5MZW5kdnQ4NTAwCisKKwlAIFdNODUwNSBvdmVycmlkZQorCWxkcglyNCwgLldNODUwNVNDQworCWNtcAlyMywgcjQKKwlsZHJlcQlyNywgLklEXzg1MDUKKwliZXEJLkxlbmR2dDg1MDAKKworCUAgT3RoZXJ3aXNlLCBsZWF2ZSB0aGUgYm9vdGxvYWRlcidzIG1hY2hpbmUgaWQgdW50b3VjaGVkCisKKy5TQ0NJRDoKKwkud29yZAkweGQ4MTIwMDAwCisuVlQ4NTAwU0NDOgorCS53b3JkCTB4MzQwMDAxMDIKKy5XTTg1MDVTQ0M6CisJLndvcmQJMHgzNDI2MDEwMworCisuSURfQlYwNzoKKwkud29yZAlNQUNIX1RZUEVfQlYwNworLklEXzg1MDU6CisJLndvcmQJTUFDSF9UWVBFX1dNODUwNV83SU5fTkVUQk9PSworCisuTGVuZHZ0ODUwMDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9tbWNpZi1zaDczNzIuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9tbWNpZi1zaDczNzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjE4MGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21tY2lmLXNoNzM3Mi5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBzaDczNzIgTU1DSUYgbG9hZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hZ251cyBEYW1tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ltb24gSG9ybWFuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tYy9zaF9tbWNpZi5oPgorI2luY2x1ZGUgPG1hY2gvbW1jaWYuaD4KKworI2RlZmluZSBNTUNJRl9CQVNFICAgICAgKHZvaWQgX19pb21lbSAqKTB4ZTZiZDAwMDAKKworI2RlZmluZSBQT1JUODRDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NAorI2RlZmluZSBQT1JUODVDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NQorI2RlZmluZSBQT1JUODZDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NgorI2RlZmluZSBQT1JUODdDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NworI2RlZmluZSBQT1JUODhDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1OAorI2RlZmluZSBQT1JUODlDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1OQorI2RlZmluZSBQT1JUOTBDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1YQorI2RlZmluZSBQT1JUOTFDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1YgorI2RlZmluZSBQT1JUOTJDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1YworI2RlZmluZSBQT1JUOTlDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA2MworCisjZGVmaW5lIFNNU1RQQ1IzCSh2b2lkIF9faW9tZW0gKikweGU2MTUwMTNjCisKKy8qIFNINzM3MiBzcGVjaWZpYyBNTUNJRiBsb2FkZXIKKyAqCisgKiBsb2FkcyB0aGUgekltYWdlIGZyb20gYW4gTU1DIGNhcmQgc3RhcnRpbmcgZnJvbSBibG9jayAxLgorICoKKyAqIFRoZSBpbWFnZSBtdXN0IGJlIHN0YXJ0IHdpdGggYSB2cmw0IGhlYWRlciBhbmQKKyAqIHRoZSB6SW1hZ2UgbXVzdCBzdGFydCBhdCBvZmZzZXQgNTEyIG9mIHRoZSBpbWFnZS4gVGhhdCBpcywKKyAqIGF0IGJsb2NrIDIgKD1ieXRlIDEwMjQpIG9uIHRoZSBtZWRpYQorICoKKyAqIFVzZSB0aGUgZm9sbG93aW5nIGxpbmUgdG8gd3JpdGUgdGhlIHZybDQgZm9ybWF0ZWQgekltYWdlCisgKiB0byBhbiBNTUMgY2FyZAorICogIyBkZCBpZj12cmw0Lm91dCBvZj0vZGV2L3NkeCBicz01MTIgc2Vlaz0xCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBtbWNpZl9sb2FkZXIodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwltbWNpZl9pbml0X3Byb2dyZXNzKCk7CisJbW1jaWZfdXBkYXRlX3Byb2dyZXNzKE1NQ0lGX1BST0dSRVNTX0VOVEVSKTsKKworCS8qIEluaXRpYWxpc2UgTU1DCisJICogcmVnaXN0ZXJzOiBQT1JUODRDUi1QT1JUOTJDUgorCSAqICAgICAgICAgICAgKE1NQ0QwXzAtTU1DRDBfNyxNTUNDTUQwIENvbnRyb2wpCisJICogdmFsdWU6IDB4MDQgLSBzZWxlY3QgZnVuY3Rpb24gNAorCSAqLworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg0Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg1Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg2Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg3Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg4Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg5Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDkwQ1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDkxQ1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDkyQ1IpOworCisJLyogSW5pdGlhbGlzZSBNTUMKKwkgKiByZWdpc3RlcnM6IFBPUlQ5OUNSIChNTUNDTEswIENvbnRyb2wpCisJICogdmFsdWU6IDB4MTAgfCAweDA0IC0gZW5hYmxlIG91dHB1dCB8IHNlbGVjdCBmdW5jdGlvbiA0CisJICovCisJX19yYXdfd3JpdGViKDB4MTQsIFBPUlQ5OUNSKTsKKworCS8qIEVuYWJsZSBjbG9jayB0byBNTUMgaGFyZHdhcmUgYmxvY2sgKi8KKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoU01TVFBDUjMpICYgfigxIDw8IDEyKSwgU01TVFBDUjMpOworCisJbW1jaWZfdXBkYXRlX3Byb2dyZXNzKE1NQ0lGX1BST0dSRVNTX0lOSVQpOworCisJLyogc2V0dXAgTU1DSUYgaGFyZHdhcmUgKi8KKwlzaF9tbWNpZl9ib290X2luaXQoTU1DSUZfQkFTRSk7CisKKwltbWNpZl91cGRhdGVfcHJvZ3Jlc3MoTU1DSUZfUFJPR1JFU1NfTE9BRCk7CisKKwkvKiBsb2FkIGtlcm5lbCB2aWEgTU1DSUYgaW50ZXJmYWNlICovCisJc2hfbW1jaWZfYm9vdF9kb19yZWFkKE1NQ0lGX0JBU0UsIDIsIC8qIEtlcm5lbCBpcyBhdCBibG9jayAyICovCisJCQkgICAgICAobGVuICsgU0hfTU1DSUZfQkJTIC0gMSkgLyBTSF9NTUNJRl9CQlMsIGJ1Zik7CisKKworCS8qIERpc2FibGUgY2xvY2sgdG8gTU1DIGhhcmR3YXJlIGJsb2NrICovCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNNU1RQQ1IzKSAmICgxIDw8IDEyKSwgU01TVFBDUjMpOworCisJbW1jaWZfdXBkYXRlX3Byb2dyZXNzKE1NQ0lGX1BST0dSRVNTX0RPTkUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL0tjb25maWcgYi9hcmNoL2FybS9jb21tb24vS2NvbmZpZwppbmRleCA3Nzg2NTVmLi5lYTVlZTRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vS2NvbmZpZworKysgYi9hcmNoL2FybS9jb21tb24vS2NvbmZpZwpAQCAtNiw2ICs2LDggQEAKIAogY29uZmlnIEFSTV9WSUNfTlIKIAlpbnQKKwlkZWZhdWx0IDQgaWYgQVJDSF9TNVBWMjEwCisJZGVmYXVsdCAzIGlmIEFSQ0hfUzVQNjQ0MiB8fCBBUkNIX1M1UEMxMDAKIAlkZWZhdWx0IDIKIAlkZXBlbmRzIG9uIEFSTV9WSUMKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggM2FjZDhmYS4uMThhNTY2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMTIsNyArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vc2htcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL291dGVyY2FjaGUuaD4KQEAgLTIwLDEyMyArMjAsNiBAQAogI2RlZmluZSBDQUNIRV9DT0xPVVIodmFkZHIpCSgodmFkZHIgJiAoU0hNTEJBIC0gMSkpID4+IFBBR0VfU0hJRlQpCiAKIC8qCi0gKglDYWNoZSBNb2RlbAotICoJPT09PT09PT09PT0KLSAqLwotI3VuZGVmIF9DQUNIRQotI3VuZGVmIE1VTFRJX0NBQ0hFCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjMpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB2MwotIyBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjQpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB2NAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTIwVCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyMlQpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTI1VCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTEwMjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNMTAyNikKLSMgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZBNTI2KQotIyBpZmRlZiBfQ0FDSEUKLSMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCi0jIGVsc2UKLSMgIGRlZmluZSBfQ0FDSEUgZmEKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyNlQpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBhcm05MjYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTk0MFQpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBhcm05NDAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTk0NkUpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBhcm05NDYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0NBQ0hFX1Y0V0IpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB2NHdiCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9YU0NBTEUpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB4c2NhbGUKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQzMpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB4c2MzCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NT0hBV0spCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBtb2hhd2sKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZFUk9DRU9OKQotIyBkZWZpbmUgTVVMVElfQ0FDSEUgMQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfVjYpCi0vLyMgaWZkZWYgX0NBQ0hFCi0jICBkZWZpbmUgTVVMVElfQ0FDSEUgMQotLy8jIGVsc2UKLS8vIyAgZGVmaW5lIF9DQUNIRSB2NgotLy8jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9WNykKLS8vIyBpZmRlZiBfQ0FDSEUKLSMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCi0vLyMgZWxzZQotLy8jICBkZWZpbmUgX0NBQ0hFIHY3Ci0vLyMgZW5kaWYKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX0NBQ0hFKSAmJiAhZGVmaW5lZChNVUxUSV9DQUNIRSkKLSNlcnJvciBVbmtub3duIGNhY2hlIG1haW50YWluZW5jZSBtb2RlbAotI2VuZGlmCi0KLS8qCiAgKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwYWdlIHBvaW50ZWQgdG8gYnkgYSBwdGUgaXMgY2xlYW4KICAqIGFuZCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuaW5nIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gdGhlIHVzZXIuCiAgKi8KQEAgLTI0OSwxOSArMTMyLDExIEBACiAgKiB2aXNpYmxlIHRvIHRoZSBDUFUuCiAgKi8KICNkZWZpbmUgZG1hY19tYXBfYXJlYQkJCWNwdV9jYWNoZS5kbWFfbWFwX2FyZWEKLSNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQljcHVfY2FjaGUuZG1hX3VubWFwX2FyZWEKKyNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQkJY3B1X2NhY2hlLmRtYV91bm1hcF9hcmVhCiAjZGVmaW5lIGRtYWNfZmx1c2hfcmFuZ2UJCWNwdV9jYWNoZS5kbWFfZmx1c2hfcmFuZ2UKIAogI2Vsc2UKIAotI2RlZmluZSBfX2NwdWNfZmx1c2hfaWNhY2hlX2FsbAkJX19nbHVlKF9DQUNIRSxfZmx1c2hfaWNhY2hlX2FsbCkKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX2tlcm5fYWxsCQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX3VzZXJfYWxsCQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF91c2VyX2NhY2hlX2FsbCkKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX3VzZXJfcmFuZ2UJCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCi0jZGVmaW5lIF9fY3B1Y19jb2hlcmVudF9rZXJuX3JhbmdlCV9fZ2x1ZShfQ0FDSEUsX2NvaGVyZW50X2tlcm5fcmFuZ2UpCi0jZGVmaW5lIF9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlCV9fZ2x1ZShfQ0FDSEUsX2NvaGVyZW50X3VzZXJfcmFuZ2UpCi0jZGVmaW5lIF9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQotCiBleHRlcm4gdm9pZCBfX2NwdWNfZmx1c2hfaWNhY2hlX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF9rZXJuX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF91c2VyX2FsbCh2b2lkKTsKQEAgLTI3NiwxMCArMTUxLDYgQEAKICAqIGlzIHZpc2libGUgdG8gRE1BLCBvciBkYXRhIHdyaXR0ZW4gYnkgRE1BIHRvIHN5c3RlbSBtZW1vcnkgaXMKICAqIHZpc2libGUgdG8gdGhlIENQVS4KICAqLwotI2RlZmluZSBkbWFjX21hcF9hcmVhCQkJX19nbHVlKF9DQUNIRSxfZG1hX21hcF9hcmVhKQotI2RlZmluZSBkbWFjX3VubWFwX2FyZWEJCV9fZ2x1ZShfQ0FDSEUsX2RtYV91bm1hcF9hcmVhKQotI2RlZmluZSBkbWFjX2ZsdXNoX3JhbmdlCQlfX2dsdWUoX0NBQ0hFLF9kbWFfZmx1c2hfcmFuZ2UpCi0KIGV4dGVybiB2b2lkIGRtYWNfbWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBleHRlcm4gdm9pZCBkbWFjX3VubWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBleHRlcm4gdm9pZCBkbWFjX2ZsdXNoX3JhbmdlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1tdWx0aTMyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtbXVsdGkzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmI1YjBiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1tdWx0aTMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1tdWx0aTMyLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi1zdHJ1Y3QgbW1fc3RydWN0OwotCi0vKgotICogRG9uJ3QgY2hhbmdlIHRoaXMgc3RydWN0dXJlIC0gQVNNIGNvZGUKLSAqIHJlbGllcyBvbiBpdC4KLSAqLwotZXh0ZXJuIHN0cnVjdCBwcm9jZXNzb3IgewotCS8qIE1JU0MKLQkgKiBnZXQgZGF0YSBhYm9ydCBhZGRyZXNzL2ZsYWdzCi0JICovCi0Jdm9pZCAoKl9kYXRhX2Fib3J0KSh1bnNpZ25lZCBsb25nIHBjKTsKLQkvKgotCSAqIFJldHJpZXZlIHByZWZldGNoIGZhdWx0IGFkZHJlc3MKLQkgKi8KLQl1bnNpZ25lZCBsb25nICgqX3ByZWZldGNoX2Fib3J0KSh1bnNpZ25lZCBsb25nIGxyKTsKLQkvKgotCSAqIFNldCB1cCBhbnkgcHJvY2Vzc29yIHNwZWNpZmljcwotCSAqLwotCXZvaWQgKCpfcHJvY19pbml0KSh2b2lkKTsKLQkvKgotCSAqIERpc2FibGUgYW55IHByb2Nlc3NvciBzcGVjaWZpY3MKLQkgKi8KLQl2b2lkICgqX3Byb2NfZmluKSh2b2lkKTsKLQkvKgotCSAqIFNwZWNpYWwgc3R1ZmYgZm9yIGEgcmVzZXQKLQkgKi8KLQl2b2lkICgqcmVzZXQpKHVuc2lnbmVkIGxvbmcgYWRkcikgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLQkvKgotCSAqIElkbGUgdGhlIHByb2Nlc3NvcgotCSAqLwotCWludCAoKl9kb19pZGxlKSh2b2lkKTsKLQkvKgotCSAqIFByb2Nlc3NvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWMKLQkgKi8KLQkvKgotCSAqIGNsZWFuIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlIGZyb20gdGhlCi0JICogRC1jYWNoZSB3aXRob3V0IGZsdXNoaW5nIHRoZSBjYWNoZS4KLQkgKi8KLQl2b2lkICgqZGNhY2hlX2NsZWFuX2FyZWEpKHZvaWQgKmFkZHIsIGludCBzaXplKTsKLQotCS8qCi0JICogU2V0IHRoZSBwYWdlIHRhYmxlCi0JICovCi0Jdm9pZCAoKnN3aXRjaF9tbSkodW5zaWduZWQgbG9uZyBwZ2RfcGh5cywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotCS8qCi0JICogU2V0IGEgcG9zc2libHkgZXh0ZW5kZWQgUFRFLiAgTm9uLWV4dGVuZGVkIFBURXMgc2hvdWxkCi0JICogaWdub3JlICdleHQnLgotCSAqLwotCXZvaWQgKCpzZXRfcHRlX2V4dCkocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IGV4dCk7Ci19IHByb2Nlc3NvcjsKLQotI2RlZmluZSBjcHVfcHJvY19pbml0KCkJCQlwcm9jZXNzb3IuX3Byb2NfaW5pdCgpCi0jZGVmaW5lIGNwdV9wcm9jX2ZpbigpCQkJcHJvY2Vzc29yLl9wcm9jX2ZpbigpCi0jZGVmaW5lIGNwdV9yZXNldChhZGRyKQkJCXByb2Nlc3Nvci5yZXNldChhZGRyKQotI2RlZmluZSBjcHVfZG9faWRsZSgpCQkJcHJvY2Vzc29yLl9kb19pZGxlKCkKLSNkZWZpbmUgY3B1X2RjYWNoZV9jbGVhbl9hcmVhKGFkZHIsc3opCXByb2Nlc3Nvci5kY2FjaGVfY2xlYW5fYXJlYShhZGRyLHN6KQotI2RlZmluZSBjcHVfc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KQlwcm9jZXNzb3Iuc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KQotI2RlZmluZSBjcHVfZG9fc3dpdGNoX21tKHBnZCxtbSkJcHJvY2Vzc29yLnN3aXRjaF9tbShwZ2QsbW0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtc2luZ2xlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtc2luZ2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNzNhNmQyYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtc2luZ2xlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1zaW5nbGUuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgUnVzc2VsbCBLaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotLyoKLSAqIFNpbmdsZSBDUFUKLSAqLwotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lIF9fY2F0aWZ5X2ZuKG5hbWUseCkJbmFtZSMjeAotI2Vsc2UKLSNkZWZpbmUgX19jYXRpZnlfZm4obmFtZSx4KQluYW1lLyoqL3gKLSNlbmRpZgotI2RlZmluZSBfX2NwdV9mbihuYW1lLHgpCV9fY2F0aWZ5X2ZuKG5hbWUseCkKLQotLyoKLSAqIElmIHdlIGFyZSBzdXBwb3J0aW5nIG11bHRpcGxlIENQVXMsIHRoZW4gd2UgbXVzdCB1c2UgYSB0YWJsZSBvZgotICogZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoaXMgbG90LiAgT3RoZXJ3aXNlLCB3ZSBjYW4gb3B0aW1pc2UgdGhlCi0gKiB0YWJsZSBhd2F5LgotICovCi0jZGVmaW5lIGNwdV9wcm9jX2luaXQJCQlfX2NwdV9mbihDUFVfTkFNRSxfcHJvY19pbml0KQotI2RlZmluZSBjcHVfcHJvY19maW4JCQlfX2NwdV9mbihDUFVfTkFNRSxfcHJvY19maW4pCi0jZGVmaW5lIGNwdV9yZXNldAkJCV9fY3B1X2ZuKENQVV9OQU1FLF9yZXNldCkKLSNkZWZpbmUgY3B1X2RvX2lkbGUJCQlfX2NwdV9mbihDUFVfTkFNRSxfZG9faWRsZSkKLSNkZWZpbmUgY3B1X2RjYWNoZV9jbGVhbl9hcmVhCQlfX2NwdV9mbihDUFVfTkFNRSxfZGNhY2hlX2NsZWFuX2FyZWEpCi0jZGVmaW5lIGNwdV9kb19zd2l0Y2hfbW0JCV9fY3B1X2ZuKENQVV9OQU1FLF9zd2l0Y2hfbW0pCi0jZGVmaW5lIGNwdV9zZXRfcHRlX2V4dAkJCV9fY3B1X2ZuKENQVV9OQU1FLF9zZXRfcHRlX2V4dCkKLQotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0KLXN0cnVjdCBtbV9zdHJ1Y3Q7Ci0KLS8qIGRlY2xhcmUgYWxsIHRoZSBmdW5jdGlvbnMgYXMgZXh0ZXJuICovCi1leHRlcm4gdm9pZCBjcHVfcHJvY19pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgY3B1X3Byb2NfZmluKHZvaWQpOwotZXh0ZXJuIGludCBjcHVfZG9faWRsZSh2b2lkKTsKLWV4dGVybiB2b2lkIGNwdV9kY2FjaGVfY2xlYW5fYXJlYSh2b2lkICosIGludCk7Ci1leHRlcm4gdm9pZCBjcHVfZG9fc3dpdGNoX21tKHVuc2lnbmVkIGxvbmcgcGdkX3BoeXMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLWV4dGVybiB2b2lkIGNwdV9zZXRfcHRlX2V4dChwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgZXh0KTsKLWV4dGVybiB2b2lkIGNwdV9yZXNldCh1bnNpZ25lZCBsb25nIGFkZHIpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLWNhY2hlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLWNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5MWQzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLWNhY2hlLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiAgYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1jYWNoZS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAyIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQVNNX0dMVUVfQ0FDSEVfSAorI2RlZmluZSBBU01fR0xVRV9DQUNIRV9ICisKKyNpbmNsdWRlIDxhc20vZ2x1ZS5oPgorCisvKgorICoJQ2FjaGUgTW9kZWwKKyAqCT09PT09PT09PT09CisgKi8KKyN1bmRlZiBfQ0FDSEUKKyN1bmRlZiBNVUxUSV9DQUNIRQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0NBQ0hFX1YzKQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgdjMKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0NBQ0hFX1Y0KQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgdjQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyMFQpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9BUk05MjJUKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyNVQpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9BUk0xMDIwKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTEwMjYpCisjIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9GQTUyNikKKyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorIyBlbHNlCisjICBkZWZpbmUgX0NBQ0hFIGZhCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk05MjZUKQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgYXJtOTI2CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk05NDBUKQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgYXJtOTQwCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk05NDZFKQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgYXJtOTQ2CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9DQUNIRV9WNFdCKQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgdjR3YgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfWFNDQUxFKQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgeHNjYWxlCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9YU0MzKQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgeHNjMworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfTU9IQVdLKQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgbW9oYXdrCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9GRVJPQ0VPTikKKyMgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1Y2KQorLy8jIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKy8vIyBlbHNlCisvLyMgIGRlZmluZSBfQ0FDSEUgdjYKKy8vIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfVjcpCisvLyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorLy8jIGVsc2UKKy8vIyAgZGVmaW5lIF9DQUNIRSB2NworLy8jIGVuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9DQUNIRSkgJiYgIWRlZmluZWQoTVVMVElfQ0FDSEUpCisjZXJyb3IgVW5rbm93biBjYWNoZSBtYWludGFpbmVuY2UgbW9kZWwKKyNlbmRpZgorCisjaWZuZGVmIE1VTFRJX0NBQ0hFCisjZGVmaW5lIF9fY3B1Y19mbHVzaF9pY2FjaGVfYWxsCQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF9pY2FjaGVfYWxsKQorI2RlZmluZSBfX2NwdWNfZmx1c2hfa2Vybl9hbGwJCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX2tlcm5fY2FjaGVfYWxsKQorI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9hbGwJCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX3VzZXJfY2FjaGVfYWxsKQorI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9yYW5nZQkJX19nbHVlKF9DQUNIRSxfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKyNkZWZpbmUgX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UJX19nbHVlKF9DQUNIRSxfY29oZXJlbnRfa2Vybl9yYW5nZSkKKyNkZWZpbmUgX19jcHVjX2NvaGVyZW50X3VzZXJfcmFuZ2UJX19nbHVlKF9DQUNIRSxfY29oZXJlbnRfdXNlcl9yYW5nZSkKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX2RjYWNoZV9hcmVhCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX2tlcm5fZGNhY2hlX2FyZWEpCisKKyNkZWZpbmUgZG1hY19tYXBfYXJlYQkJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9tYXBfYXJlYSkKKyNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQkJX19nbHVlKF9DQUNIRSxfZG1hX3VubWFwX2FyZWEpCisjZGVmaW5lIGRtYWNfZmx1c2hfcmFuZ2UJCV9fZ2x1ZShfQ0FDSEUsX2RtYV9mbHVzaF9yYW5nZSkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtZGYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtZGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTRkNTcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1kZi5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtZGYuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIEFTTV9HTFVFX0RGX0gKKyNkZWZpbmUgQVNNX0dMVUVfREZfSAorCisjaW5jbHVkZSA8YXNtL2dsdWUuaD4KKworLyoKKyAqCURhdGEgQWJvcnQgTW9kZWwKKyAqCT09PT09PT09PT09PT09PT0KKyAqCisgKglXZSBoYXZlIHRoZSBmb2xsb3dpbmcgdG8gY2hvb3NlIGZyb206CisgKgkgIGFybTYgICAgICAgICAgLSBBUk02IHN0eWxlCisgKgkgIGFybTcJCS0gQVJNNyBzdHlsZQorICoJICB2NF9lYXJseQktIEFSTXY0IHdpdGhvdXQgVGh1bWIgZWFybHkgYWJvcnQgaGFuZGxlcgorICoJICB2NHRfbGF0ZQktIEFSTXY0IHdpdGggVGh1bWIgbGF0ZSBhYm9ydCBoYW5kbGVyCisgKgkgIHY0dF9lYXJseQktIEFSTXY0IHdpdGggVGh1bWIgZWFybHkgYWJvcnQgaGFuZGxlcgorICoJICB2NXRlal9lYXJseQktIEFSTXY1IHdpdGggVGh1bWIgYW5kIEphdmEgZWFybHkgYWJvcnQgaGFuZGxlcgorICoJICB4c2NhbGUJLSBBUk12NSB3aXRoIFRodW1iIHdpdGggWHNjYWxlIGV4dGVuc2lvbnMKKyAqCSAgdjZfZWFybHkJLSBBUk12NiBnZW5lcmljIGVhcmx5IGFib3J0IGhhbmRsZXIKKyAqCSAgdjdfZWFybHkJLSBBUk12NyBnZW5lcmljIGVhcmx5IGFib3J0IGhhbmRsZXIKKyAqLworI3VuZGVmIENQVV9EQUJPUlRfSEFORExFUgorI3VuZGVmIE1VTFRJX0RBQk9SVAorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTYxMCkKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiBjcHVfYXJtNl9kYXRhX2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk03MTApCisjIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgY3B1X2FybTdfZGF0YV9hYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfTFY0VAorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY0dF9sYXRlX2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjQKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2NF9lYXJseV9hYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY0VAorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY0dF9lYXJseV9hYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY1VEoKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2NXRqX2Vhcmx5X2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjVUCisjIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjV0X2Vhcmx5X2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjYKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2Nl9lYXJseV9hYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY3CisjIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjdfZWFybHlfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIENQVV9EQUJPUlRfSEFORExFUgorI2Vycm9yIFVua25vd24gZGF0YSBhYm9ydCBoYW5kbGVyIHR5cGUKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtcGYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtcGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzg1ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1wZi5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1wZi5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5IFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQVNNX0dMVUVfUEZfSAorI2RlZmluZSBBU01fR0xVRV9QRl9ICisKKyNpbmNsdWRlIDxhc20vZ2x1ZS5oPgorCisvKgorICoJUHJlZmV0Y2ggQWJvcnQgTW9kZWwKKyAqCT09PT09PT09PT09PT09PT0KKyAqCisgKglXZSBoYXZlIHRoZSBmb2xsb3dpbmcgdG8gY2hvb3NlIGZyb206CisgKgkgIGxlZ2FjeQktIG5vIElGU1IsIG5vIElGQVIKKyAqCSAgdjYJCS0gQVJNdjY6IElGU1IsIG5vIElGQVIKKyAqCSAgdjcJCS0gQVJNdjc6IElGU1IgYW5kIElGQVIKKyAqLworCisjdW5kZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCisjdW5kZWYgTVVMVElfUEFCT1JUCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWQorIyBpZmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9QQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIGxlZ2FjeV9wYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9QQUJSVF9WNgorIyBpZmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9QQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIHY2X3BhYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y3CisjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgdjdfcGFib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKKyNlcnJvciBVbmtub3duIHByZWZldGNoIGFib3J0IGhhbmRsZXIgdHlwZQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1wcm9jLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXByb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDY5NTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1wcm9jLmgKQEAgLTAsMCArMSwyNjQgQEAKKy8qCisgKiAgYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1wcm9jLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBBU01fR0xVRV9QUk9DX0gKKyNkZWZpbmUgQVNNX0dMVUVfUFJPQ19ICisKKyNpbmNsdWRlIDxhc20vZ2x1ZS5oPgorCisvKgorICogV29yayBvdXQgaWYgd2UgbmVlZCBtdWx0aXBsZSBDUFUgc3VwcG9ydAorICovCisjdW5kZWYgTVVMVElfQ1BVCisjdW5kZWYgQ1BVX05BTUUKKworLyoKKyAqIENQVV9OQU1FIC0gdGhlIHByZWZpeCBmb3IgQ1BVIHJlbGF0ZWQgZnVuY3Rpb25zCisgKi8KKworI2lmZGVmIENPTkZJR19DUFVfQVJNNjEwCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTdURE1JCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtN3RkbWkKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk03MTAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNNzIwVAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcyMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTc0MFQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03NDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05VERNSQorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTl0ZG1pCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOTIwVAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMlQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjIKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9GQTUyNgorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2ZhNTI2CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOTI1VAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyNQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNlQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05NDBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTQwCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOTQ2RQorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0NgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfc2ExMTAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9zYTExMDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIwCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjBFCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMGUKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIyCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjYKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDI2CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfWFNDQUxFCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfeHNjYWxlCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfWFNDMworIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9tb2hhd2sKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9GRVJPQ0VPTgorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2Zlcm9jZW9uCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfVjYKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV92NgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1Y3CisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfdjcKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE1VTFRJX0NQVQorI2RlZmluZSBjcHVfcHJvY19pbml0CQkJX19nbHVlKENQVV9OQU1FLF9wcm9jX2luaXQpCisjZGVmaW5lIGNwdV9wcm9jX2ZpbgkJCV9fZ2x1ZShDUFVfTkFNRSxfcHJvY19maW4pCisjZGVmaW5lIGNwdV9yZXNldAkJCV9fZ2x1ZShDUFVfTkFNRSxfcmVzZXQpCisjZGVmaW5lIGNwdV9kb19pZGxlCQkJX19nbHVlKENQVV9OQU1FLF9kb19pZGxlKQorI2RlZmluZSBjcHVfZGNhY2hlX2NsZWFuX2FyZWEJCV9fZ2x1ZShDUFVfTkFNRSxfZGNhY2hlX2NsZWFuX2FyZWEpCisjZGVmaW5lIGNwdV9kb19zd2l0Y2hfbW0JCV9fZ2x1ZShDUFVfTkFNRSxfc3dpdGNoX21tKQorI2RlZmluZSBjcHVfc2V0X3B0ZV9leHQJCQlfX2dsdWUoQ1BVX05BTUUsX3NldF9wdGVfZXh0KQorI2RlZmluZSBjcHVfc3VzcGVuZF9zaXplCQlfX2dsdWUoQ1BVX05BTUUsX3N1c3BlbmRfc2l6ZSkKKyNkZWZpbmUgY3B1X2RvX3N1c3BlbmQJCQlfX2dsdWUoQ1BVX05BTUUsX2RvX3N1c3BlbmQpCisjZGVmaW5lIGNwdV9kb19yZXN1bWUJCQlfX2dsdWUoQ1BVX05BTUUsX2RvX3Jlc3VtZSkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaAppbmRleCAyMzRhM2ZjLi4wZWMzNWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oCkBAIC0xNSw3ICsxNSw2IEBACiAgKi8KICNpZmRlZiBfX0tFUk5FTF9fCiAKLQogI2lmZGVmIF9fU1REQ19fCiAjZGVmaW5lIF9fX19nbHVlKG5hbWUsZm4pCW5hbWUjI2ZuCiAjZWxzZQpAQCAtMjMsMTQxICsyMiw0IEBACiAjZW5kaWYKICNkZWZpbmUgX19nbHVlKG5hbWUsZm4pCQlfX19fZ2x1ZShuYW1lLGZuKQogCi0KLQotLyoKLSAqCURhdGEgQWJvcnQgTW9kZWwKLSAqCT09PT09PT09PT09PT09PT0KLSAqCi0gKglXZSBoYXZlIHRoZSBmb2xsb3dpbmcgdG8gY2hvb3NlIGZyb206Ci0gKgkgIGFybTYgICAgICAgICAgLSBBUk02IHN0eWxlCi0gKgkgIGFybTcJCS0gQVJNNyBzdHlsZQotICoJICB2NF9lYXJseQktIEFSTXY0IHdpdGhvdXQgVGh1bWIgZWFybHkgYWJvcnQgaGFuZGxlcgotICoJICB2NHRfbGF0ZQktIEFSTXY0IHdpdGggVGh1bWIgbGF0ZSBhYm9ydCBoYW5kbGVyCi0gKgkgIHY0dF9lYXJseQktIEFSTXY0IHdpdGggVGh1bWIgZWFybHkgYWJvcnQgaGFuZGxlcgotICoJICB2NXRlal9lYXJseQktIEFSTXY1IHdpdGggVGh1bWIgYW5kIEphdmEgZWFybHkgYWJvcnQgaGFuZGxlcgotICoJICB4c2NhbGUJLSBBUk12NSB3aXRoIFRodW1iIHdpdGggWHNjYWxlIGV4dGVuc2lvbnMKLSAqCSAgdjZfZWFybHkJLSBBUk12NiBnZW5lcmljIGVhcmx5IGFib3J0IGhhbmRsZXIKLSAqCSAgdjdfZWFybHkJLSBBUk12NyBnZW5lcmljIGVhcmx5IGFib3J0IGhhbmRsZXIKLSAqLwotI3VuZGVmIENQVV9EQUJPUlRfSEFORExFUgotI3VuZGVmIE1VTFRJX0RBQk9SVAotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTYxMCkKLSMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfREFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiBjcHVfYXJtNl9kYXRhX2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk03MTApCi0jIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgY3B1X2FybTdfZGF0YV9hYm9ydAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfTFY0VAotIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY0dF9sYXRlX2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjQKLSMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfREFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2NF9lYXJseV9hYm9ydAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY0VAotIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY0dF9lYXJseV9hYm9ydAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY1VEoKLSMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfREFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2NXRqX2Vhcmx5X2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjVUCi0jIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjV0X2Vhcmx5X2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjYKLSMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfREFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2Nl9lYXJseV9hYm9ydAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FCUlRfRVY3Ci0jIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjdfZWFybHlfYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIENQVV9EQUJPUlRfSEFORExFUgotI2Vycm9yIFVua25vd24gZGF0YSBhYm9ydCBoYW5kbGVyIHR5cGUKLSNlbmRpZgotCi0vKgotICoJUHJlZmV0Y2ggQWJvcnQgTW9kZWwKLSAqCT09PT09PT09PT09PT09PT0KLSAqCi0gKglXZSBoYXZlIHRoZSBmb2xsb3dpbmcgdG8gY2hvb3NlIGZyb206Ci0gKgkgIGxlZ2FjeQktIG5vIElGU1IsIG5vIElGQVIKLSAqCSAgdjYJCS0gQVJNdjY6IElGU1IsIG5vIElGQVIKLSAqCSAgdjcJCS0gQVJNdjc6IElGU1IgYW5kIElGQVIKLSAqLwotCi0jdW5kZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCi0jdW5kZWYgTVVMVElfUEFCT1JUCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWQotIyBpZmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9QQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIGxlZ2FjeV9wYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9QQUJSVF9WNgotIyBpZmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9QQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIHY2X3BhYm9ydAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y3Ci0jIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgdjdfcGFib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKLSNlcnJvciBVbmtub3duIHByZWZldGNoIGFib3J0IGhhbmRsZXIgdHlwZQotI2VuZGlmCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oCmluZGV4IDVhZWVjMWUuLjE2YmQ0ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNkZWZpbmUgTDJYMF9SQVdfSU5UUl9TVEFUCQkweDIxQwogI2RlZmluZSBMMlgwX0lOVFJfQ0xFQVIJCQkweDIyMAogI2RlZmluZSBMMlgwX0NBQ0hFX1NZTkMJCQkweDczMAorI2RlZmluZSBMMlgwX0RVTU1ZX1JFRwkJCTB4NzQwCiAjZGVmaW5lIEwyWDBfSU5WX0xJTkVfUEEJCTB4NzcwCiAjZGVmaW5lIEwyWDBfSU5WX1dBWQkJCTB4NzdDCiAjZGVmaW5lIEwyWDBfQ0xFQU5fTElORV9QQQkJMHg3QjAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3NwODEwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zcDgxMC5oCmluZGV4IDcyMTg0N2QuLmUwZDFjMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3NwODEwLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc3A4MTAuaApAQCAtNTgsNiArNTgsOSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3lzY3RsX3NvZnRfcmVzZXQodm9pZCBfX2lvbWVtICpiYXNlKQogeworCS8qIHN3aXRjaCB0byBzbG93IG1vZGUgKi8KKwl3cml0ZWwoMHgyLCBiYXNlICsgU0NDVFJMKTsKKwogCS8qIHdyaXRpbmcgYW55IHZhbHVlIHRvIFNDU1lTU1RBVCByZWcgd2lsbCByZXNldCBzeXN0ZW0gKi8KIAl3cml0ZWwoMCwgYmFzZSArIFNDU1lTU1RBVCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAppbmRleCAyMGUwZjdjLi5kNjY2MDVkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pby5oCkBAIC05NSw2ICs5NSwxNSBAQAogCXJldHVybiAodm9pZCBfX2lvbWVtICopYWRkcjsKIH0KIAorLyogSU8gYmFycmllcnMgKi8KKyNpZmRlZiBDT05GSUdfQVJNX0RNQV9NRU1fQlVGRkVSQUJMRQorI2RlZmluZSBfX2lvcm1iKCkJCXJtYigpCisjZGVmaW5lIF9faW93bWIoKQkJd21iKCkKKyNlbHNlCisjZGVmaW5lIF9faW9ybWIoKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX2lvd21iKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAvKgogICogTm93LCBwaWNrIHVwIHRoZSBtYWNoaW5lLWRlZmluZWQgSU8gZGVmaW5pdGlvbnMKICAqLwpAQCAtMTI1LDE3ICsxMzQsMTcgQEAKICAqIFRoZSB7aW4sb3V0fVtid2xdIG1hY3JvcyBhcmUgZm9yIGVtdWxhdGluZyB4ODYtc3R5bGUgUENJL0lTQSBJTyBzcGFjZS4KICAqLwogI2lmZGVmIF9faW8KLSNkZWZpbmUgb3V0Yih2LHApCQlfX3Jhd193cml0ZWIodixfX2lvKHApKQotI2RlZmluZSBvdXR3KHYscCkJCV9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNikgXAotCQkJCQljcHVfdG9fbGUxNih2KSxfX2lvKHApKQotI2RlZmluZSBvdXRsKHYscCkJCV9fcmF3X3dyaXRlbCgoX19mb3JjZSBfX3UzMikgXAotCQkJCQljcHVfdG9fbGUzMih2KSxfX2lvKHApKQorI2RlZmluZSBvdXRiKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWIodixfX2lvKHApKTsgfSkKKyNkZWZpbmUgb3V0dyh2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGV3KChfX2ZvcmNlIF9fdTE2KSBcCisJCQkJCWNwdV90b19sZTE2KHYpLF9faW8ocCkpOyB9KQorI2RlZmluZSBvdXRsKHYscCkJKHsgX19pb3dtYigpOyBfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpIFwKKwkJCQkJY3B1X3RvX2xlMzIodiksX19pbyhwKSk7IH0pCiAKLSNkZWZpbmUgaW5iKHApCSh7IF9fdTggX192ID0gX19yYXdfcmVhZGIoX19pbyhwKSk7IF9fdjsgfSkKKyNkZWZpbmUgaW5iKHApCSh7IF9fdTggX192ID0gX19yYXdfcmVhZGIoX19pbyhwKSk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSBpbncocCkJKHsgX191MTYgX192ID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KSBcCi0JCQlfX3Jhd19yZWFkdyhfX2lvKHApKSk7IF9fdjsgfSkKKwkJCV9fcmF3X3JlYWR3KF9faW8ocCkpKTsgX19pb3JtYigpOyBfX3Y7IH0pCiAjZGVmaW5lIGlubChwKQkoeyBfX3UzMiBfX3YgPSBsZTMyX3RvX2NwdSgoX19mb3JjZSBfX2xlMzIpIFwKLQkJCV9fcmF3X3JlYWRsKF9faW8ocCkpKTsgX192OyB9KQorCQkJX19yYXdfcmVhZGwoX19pbyhwKSkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKIAogI2RlZmluZSBvdXRzYihwLGQsbCkJCV9fcmF3X3dyaXRlc2IoX19pbyhwKSxkLGwpCiAjZGVmaW5lIG91dHN3KHAsZCxsKQkJX19yYXdfd3JpdGVzdyhfX2lvKHApLGQsbCkKQEAgLTE5MiwxNCArMjAxLDYgQEAKICNkZWZpbmUgd3JpdGVsX3JlbGF4ZWQodixjKQkoKHZvaWQpX19yYXdfd3JpdGVsKChfX2ZvcmNlIHUzMikgXAogCQkJCQljcHVfdG9fbGUzMih2KSxfX21lbV9wY2koYykpKQogCi0jaWZkZWYgQ09ORklHX0FSTV9ETUFfTUVNX0JVRkZFUkFCTEUKLSNkZWZpbmUgX19pb3JtYigpCQlybWIoKQotI2RlZmluZSBfX2lvd21iKCkJCXdtYigpCi0jZWxzZQotI2RlZmluZSBfX2lvcm1iKCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19pb3dtYigpCQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQogI2RlZmluZSByZWFkYihjKQkJKHsgdTggIF9fdiA9IHJlYWRiX3JlbGF4ZWQoYyk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSByZWFkdyhjKQkJKHsgdTE2IF9fdiA9IHJlYWR3X3JlbGF4ZWQoYyk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSByZWFkbChjKQkJKHsgdTMyIF9fdiA9IHJlYWRsX3JlbGF4ZWQoYyk7IF9faW9ybWIoKTsgX192OyB9KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL2FyY2guaAppbmRleCAzYTA4OTNhLi5iZjEzYjgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL2FyY2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL2FyY2guaApAQCAtMTUsMTAgKzE1LDYgQEAKIHN0cnVjdCBzeXNfdGltZXI7CiAKIHN0cnVjdCBtYWNoaW5lX2Rlc2MgewotCS8qCi0JICogTm90ZSEgVGhlIGZpcnN0IHR3byBlbGVtZW50cyBhcmUgdXNlZAotCSAqIGJ5IGFzc2VtYmxlciBjb2RlIGluIGhlYWQuUywgaGVhZC1jb21tb24uUwotCSAqLwogCXVuc2lnbmVkIGludAkJbnI7CQkvKiBhcmNoaXRlY3R1cmUgbnVtYmVyCSovCiAJY29uc3QgY2hhcgkJKm5hbWU7CQkvKiBhcmNoaXRlY3R1cmUgbmFtZQkqLwogCXVuc2lnbmVkIGxvbmcJCWJvb3RfcGFyYW1zOwkvKiB0YWdnZWQgbGlzdAkJKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA5NzYzYmUwLi4yMmRlMDA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaWZuZGVmIF9BU01BUk1fUEdBTExPQ19ICiAjZGVmaW5lIF9BU01BUk1fUEdBTExPQ19ICiAKKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisKICNpbmNsdWRlIDxhc20vZG9tYWluLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaAppbmRleCA4ZmRhZTliLi44ZWM1MzVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmgKQEAgLTEzLDI1MCArMTMsODYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotCi0vKgotICogV29yayBvdXQgaWYgd2UgbmVlZCBtdWx0aXBsZSBDUFUgc3VwcG9ydAotICovCi0jdW5kZWYgTVVMVElfQ1BVCi0jdW5kZWYgQ1BVX05BTUUKLQotLyoKLSAqIENQVV9OQU1FIC0gdGhlIHByZWZpeCBmb3IgQ1BVIHJlbGF0ZWQgZnVuY3Rpb25zCi0gKi8KLQotI2lmZGVmIENPTkZJR19DUFVfQVJNNjEwCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTdURE1JCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtN3RkbWkKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk03MTAKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNNzIwVAotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcyMAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTc0MFQKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03NDAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk05VERNSQotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTl0ZG1pCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNOTIwVAotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMlQKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjIKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9GQTUyNgotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2ZhNTI2Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNOTI1VAotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyNQotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNlQKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk05NDBUCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTQwCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNOTQ2RQotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0NgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfc2ExMTAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9zYTExMDAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIwCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjBFCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMGUKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIyCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjYKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDI2Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfWFNDQUxFCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfeHNjYWxlCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfWFNDMwotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9tb2hhd2sKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9GRVJPQ0VPTgotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2Zlcm9jZW9uCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfVjYKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV92NgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1Y3Ci0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfdjcKLSMgZW5kaWYKLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9nbHVlLXByb2MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCitzdHJ1Y3QgbW1fc3RydWN0OworCisvKgorICogRG9uJ3QgY2hhbmdlIHRoaXMgc3RydWN0dXJlIC0gQVNNIGNvZGUgcmVsaWVzIG9uIGl0LgorICovCitleHRlcm4gc3RydWN0IHByb2Nlc3NvciB7CisJLyogTUlTQworCSAqIGdldCBkYXRhIGFib3J0IGFkZHJlc3MvZmxhZ3MKKwkgKi8KKwl2b2lkICgqX2RhdGFfYWJvcnQpKHVuc2lnbmVkIGxvbmcgcGMpOworCS8qCisJICogUmV0cmlldmUgcHJlZmV0Y2ggZmF1bHQgYWRkcmVzcworCSAqLworCXVuc2lnbmVkIGxvbmcgKCpfcHJlZmV0Y2hfYWJvcnQpKHVuc2lnbmVkIGxvbmcgbHIpOworCS8qCisJICogU2V0IHVwIGFueSBwcm9jZXNzb3Igc3BlY2lmaWNzCisJICovCisJdm9pZCAoKl9wcm9jX2luaXQpKHZvaWQpOworCS8qCisJICogRGlzYWJsZSBhbnkgcHJvY2Vzc29yIHNwZWNpZmljcworCSAqLworCXZvaWQgKCpfcHJvY19maW4pKHZvaWQpOworCS8qCisJICogU3BlY2lhbCBzdHVmZiBmb3IgYSByZXNldAorCSAqLworCXZvaWQgKCpyZXNldCkodW5zaWduZWQgbG9uZyBhZGRyKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworCS8qCisJICogSWRsZSB0aGUgcHJvY2Vzc29yCisJICovCisJaW50ICgqX2RvX2lkbGUpKHZvaWQpOworCS8qCisJICogUHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBzcGVjaWZpYworCSAqLworCS8qCisJICogY2xlYW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgZnJvbSB0aGUKKwkgKiBELWNhY2hlIHdpdGhvdXQgZmx1c2hpbmcgdGhlIGNhY2hlLgorCSAqLworCXZvaWQgKCpkY2FjaGVfY2xlYW5fYXJlYSkodm9pZCAqYWRkciwgaW50IHNpemUpOworCisJLyoKKwkgKiBTZXQgdGhlIHBhZ2UgdGFibGUKKwkgKi8KKwl2b2lkICgqc3dpdGNoX21tKSh1bnNpZ25lZCBsb25nIHBnZF9waHlzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisJLyoKKwkgKiBTZXQgYSBwb3NzaWJseSBleHRlbmRlZCBQVEUuICBOb24tZXh0ZW5kZWQgUFRFcyBzaG91bGQKKwkgKiBpZ25vcmUgJ2V4dCcuCisJICovCisJdm9pZCAoKnNldF9wdGVfZXh0KShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgZXh0KTsKKworCS8qIFN1c3BlbmQvcmVzdW1lICovCisJdW5zaWduZWQgaW50IHN1c3BlbmRfc2l6ZTsKKwl2b2lkICgqZG9fc3VzcGVuZCkodm9pZCAqKTsKKwl2b2lkICgqZG9fcmVzdW1lKSh2b2lkICopOworfSBwcm9jZXNzb3I7CisKICNpZm5kZWYgTVVMVElfQ1BVCi0jaW5jbHVkZSA8YXNtL2NwdS1zaW5nbGUuaD4KK2V4dGVybiB2b2lkIGNwdV9wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBjcHVfcHJvY19maW4odm9pZCk7CitleHRlcm4gaW50IGNwdV9kb19pZGxlKHZvaWQpOworZXh0ZXJuIHZvaWQgY3B1X2RjYWNoZV9jbGVhbl9hcmVhKHZvaWQgKiwgaW50KTsKK2V4dGVybiB2b2lkIGNwdV9kb19zd2l0Y2hfbW0odW5zaWduZWQgbG9uZyBwZ2RfcGh5cywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgY3B1X3NldF9wdGVfZXh0KHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsIHVuc2lnbmVkIGludCBleHQpOworZXh0ZXJuIHZvaWQgY3B1X3Jlc2V0KHVuc2lnbmVkIGxvbmcgYWRkcikgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKICNlbHNlCi0jaW5jbHVkZSA8YXNtL2NwdS1tdWx0aTMyLmg+CisjZGVmaW5lIGNwdV9wcm9jX2luaXQoKQkJCXByb2Nlc3Nvci5fcHJvY19pbml0KCkKKyNkZWZpbmUgY3B1X3Byb2NfZmluKCkJCQlwcm9jZXNzb3IuX3Byb2NfZmluKCkKKyNkZWZpbmUgY3B1X3Jlc2V0KGFkZHIpCQkJcHJvY2Vzc29yLnJlc2V0KGFkZHIpCisjZGVmaW5lIGNwdV9kb19pZGxlKCkJCQlwcm9jZXNzb3IuX2RvX2lkbGUoKQorI2RlZmluZSBjcHVfZGNhY2hlX2NsZWFuX2FyZWEoYWRkcixzeikJcHJvY2Vzc29yLmRjYWNoZV9jbGVhbl9hcmVhKGFkZHIsc3opCisjZGVmaW5lIGNwdV9zZXRfcHRlX2V4dChwdGVwLHB0ZSxleHQpCXByb2Nlc3Nvci5zZXRfcHRlX2V4dChwdGVwLHB0ZSxleHQpCisjZGVmaW5lIGNwdV9kb19zd2l0Y2hfbW0ocGdkLG1tKQlwcm9jZXNzb3Iuc3dpdGNoX21tKHBnZCxtbSkKICNlbmRpZgogCitleHRlcm4gdm9pZCBjcHVfcmVzdW1lKHZvaWQpOworCiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogCiAjaWZkZWYgQ09ORklHX01NVQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA2NzM1N2JhLi43YTFmMDNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtOTUsNyArOTUsNyBAQAogCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCi0jaWYgX19MSU5VWF9BUk1fQVJDSF9fID09IDYKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPT0gNiB8fCBkZWZpbmVkKENPTkZJR19BUk1fRVJSQVRBXzc1NDMyNykKICNkZWZpbmUgY3B1X3JlbGF4KCkJCQlzbXBfbWIoKQogI2Vsc2UKICNkZWZpbmUgY3B1X3JlbGF4KCkJCQliYXJyaWVyKCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9zY3UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9zY3UuaAppbmRleCAyMzc2ODM1Li40ZWI2ZDAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfc2N1LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3NjdS5oCkBAIC0xLDcgKzEsMTQgQEAKICNpZm5kZWYgX19BU01BUk1fQVJDSF9TQ1VfSAogI2RlZmluZSBfX0FTTUFSTV9BUkNIX1NDVV9ICiAKKyNkZWZpbmUgU0NVX1BNX05PUk1BTAkwCisjZGVmaW5lIFNDVV9QTV9ET1JNQU5UCTIKKyNkZWZpbmUgU0NVX1BNX1BPV0VST0ZGCTMKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiB1bnNpZ25lZCBpbnQgc2N1X2dldF9jb3JlX2NvdW50KHZvaWQgX19pb21lbSAqKTsKIHZvaWQgc2N1X2VuYWJsZSh2b2lkIF9faW9tZW0gKik7CitpbnQgc2N1X3Bvd2VyX21vZGUodm9pZCBfX2lvbWVtICosIHVuc2lnbmVkIGludCk7CisjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IGY0MWE2ZjUuLjgyZGZlNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xOCwxNiArMTgsMzQgQEAKICNkZWZpbmUgX19BU01BUk1fVExCX0gKIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKICNpZm5kZWYgQ09ORklHX01NVQogCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpCSgodm9pZCkgdGxiKQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CiAKICNlbHNlIC8qICFDT05GSUdfTU1VICovCiAKKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworLyoKKyAqIFdlIG5lZWQgdG8gZGVsYXkgcGFnZSBmcmVlaW5nIGZvciBTTVAgYXMgb3RoZXIgQ1BVcyBjYW4gYWNjZXNzIHBhZ2VzCisgKiB3aGljaCBoYXZlIGJlZW4gcmVtb3ZlZCBidXQgbm90IHlldCBoYWQgdGhlaXIgVExCIGVudHJpZXMgaW52YWxpZGF0ZWQuCisgKiBBbHNvLCBhcyBBUk12NyBzcGVjdWxhdGl2ZSBwcmVmZXRjaCBjYW4gZHJhZyBuZXcgZW50cmllcyBpbnRvIHRoZSBUTEIsCisgKiB3ZSBuZWVkIHRvIGFwcGx5IHRoaXMgc2FtZSBkZWxheWluZyB0YWN0aWMgdG8gZW5zdXJlIGNvcnJlY3Qgb3BlcmF0aW9uLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfMzJ2NykKKyNkZWZpbmUgdGxiX2Zhc3RfbW9kZSh0bGIpCTAKKyNkZWZpbmUgRlJFRV9QVEVfTlIJCTUwMAorI2Vsc2UKKyNkZWZpbmUgdGxiX2Zhc3RfbW9kZSh0bGIpCTEKKyNkZWZpbmUgRlJFRV9QVEVfTlIJCTAKKyNlbmRpZgogCiAvKgogICogVExCIGhhbmRsaW5nLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHBhZ2VzIGZyb20gdGhlIHBhZ2UKQEAgLTM2LDEyICs1NCw1OCBAQAogc3RydWN0IG1tdV9nYXRoZXIgewogCXN0cnVjdCBtbV9zdHJ1Y3QJKm1tOwogCXVuc2lnbmVkIGludAkJZnVsbG1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdAkqdm1hOwogCXVuc2lnbmVkIGxvbmcJCXJhbmdlX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCXJhbmdlX2VuZDsKKwl1bnNpZ25lZCBpbnQJCW5yOworCXN0cnVjdCBwYWdlCQkqcGFnZXNbRlJFRV9QVEVfTlJdOwogfTsKIAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiAKKy8qCisgKiBUaGlzIGlzIHVubmVjZXNzYXJpbHkgY29tcGxleC4gIFRoZXJlJ3MgdGhyZWUgd2F5cyB0aGUgVExCIHNob290ZG93bgorICogY29kZSBpcyB1c2VkOgorICogIDEuIFVubWFwcGluZyBhIHJhbmdlIG9mIHZtYXMuICBTZWUgemFwX3BhZ2VfcmFuZ2UoKSwgdW5tYXBfcmVnaW9uKCkuCisgKiAgICAgdGxiLT5mdWxsbW0gPSAwLCBhbmQgdGxiX3N0YXJ0X3ZtYS90bGJfZW5kX3ZtYSB3aWxsIGJlIGNhbGxlZC4KKyAqICAgICB0bGItPnZtYSB3aWxsIGJlIG5vbi1OVUxMLgorICogIDIuIFVubWFwcGluZyBhbGwgdm1hcy4gIFNlZSBleGl0X21tYXAoKS4KKyAqICAgICB0bGItPmZ1bGxtbSA9IDEsIGFuZCB0bGJfc3RhcnRfdm1hL3RsYl9lbmRfdm1hIHdpbGwgYmUgY2FsbGVkLgorICogICAgIHRsYi0+dm1hIHdpbGwgYmUgbm9uLU5VTEwuICBBZGRpdGlvbmFsbHksIHBhZ2UgdGFibGVzIHdpbGwgYmUgZnJlZWQuCisgKiAgMy4gVW5tYXBwaW5nIGFyZ3VtZW50IHBhZ2VzLiAgU2VlIHNoaWZ0X2FyZ19wYWdlcygpLgorICogICAgIHRsYi0+ZnVsbG1tID0gMCwgYnV0IHRsYl9zdGFydF92bWEvdGxiX2VuZF92bWEgd2lsbCBub3QgYmUgY2FsbGVkLgorICogICAgIHRsYi0+dm1hIHdpbGwgYmUgTlVMTC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQoreworCWlmICh0bGItPmZ1bGxtbSB8fCAhdGxiLT52bWEpCisJCWZsdXNoX3RsYl9tbSh0bGItPm1tKTsKKwllbHNlIGlmICh0bGItPnJhbmdlX2VuZCA+IDApIHsKKwkJZmx1c2hfdGxiX3JhbmdlKHRsYi0+dm1hLCB0bGItPnJhbmdlX3N0YXJ0LCB0bGItPnJhbmdlX2VuZCk7CisJCXRsYi0+cmFuZ2Vfc3RhcnQgPSBUQVNLX1NJWkU7CisJCXRsYi0+cmFuZ2VfZW5kID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfYWRkX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoIXRsYi0+ZnVsbG1tKSB7CisJCWlmIChhZGRyIDwgdGxiLT5yYW5nZV9zdGFydCkKKwkJCXRsYi0+cmFuZ2Vfc3RhcnQgPSBhZGRyOworCQlpZiAoYWRkciArIFBBR0VfU0laRSA+IHRsYi0+cmFuZ2VfZW5kKQorCQkJdGxiLT5yYW5nZV9lbmQgPSBhZGRyICsgUEFHRV9TSVpFOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKK3sKKwl0bGJfZmx1c2godGxiKTsKKwlpZiAoIXRsYl9mYXN0X21vZGUodGxiKSkgeworCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKHRsYi0+cGFnZXMsIHRsYi0+bnIpOworCQl0bGItPm5yID0gMDsKKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1tdV9nYXRoZXIgKgogdGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBmdWxsX21tX2ZsdXNoKQogewpAQCAtNDksNiArMTEzLDggQEAKIAogCXRsYi0+bW0gPSBtbTsKIAl0bGItPmZ1bGxtbSA9IGZ1bGxfbW1fZmx1c2g7CisJdGxiLT52bWEgPSBOVUxMOworCXRsYi0+bnIgPSAwOwogCiAJcmV0dXJuIHRsYjsKIH0KQEAgLTU2LDggKzEyMiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHRsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCWlmICh0bGItPmZ1bGxtbSkKLQkJZmx1c2hfdGxiX21tKHRsYi0+bW0pOworCXRsYl9mbHVzaF9tbXUodGxiKTsKIAogCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLwogCWNoZWNrX3BndF9jYWNoZSgpOwpAQCAtNzEsMTIgKzEzNiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHRsYl9yZW1vdmVfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQlpZiAoYWRkciA8IHRsYi0+cmFuZ2Vfc3RhcnQpCi0JCQl0bGItPnJhbmdlX3N0YXJ0ID0gYWRkcjsKLQkJaWYgKGFkZHIgKyBQQUdFX1NJWkUgPiB0bGItPnJhbmdlX2VuZCkKLQkJCXRsYi0+cmFuZ2VfZW5kID0gYWRkciArIFBBR0VfU0laRTsKLQl9CisJdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOwogfQogCiAvKgpAQCAtODksNiArMTQ5LDcgQEAKIHsKIAlpZiAoIXRsYi0+ZnVsbG1tKSB7CiAJCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOworCQl0bGItPnZtYSA9IHZtYTsKIAkJdGxiLT5yYW5nZV9zdGFydCA9IFRBU0tfU0laRTsKIAkJdGxiLT5yYW5nZV9lbmQgPSAwOwogCX0KQEAgLTk3LDEyICsxNTgsMzAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogdGxiX2VuZF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0JaWYgKCF0bGItPmZ1bGxtbSAmJiB0bGItPnJhbmdlX2VuZCA+IDApCi0JCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHRsYi0+cmFuZ2Vfc3RhcnQsIHRsYi0+cmFuZ2VfZW5kKTsKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQl0bGJfZmx1c2godGxiKTsKIH0KIAotI2RlZmluZSB0bGJfcmVtb3ZlX3BhZ2UodGxiLHBhZ2UpCWZyZWVfcGFnZV9hbmRfc3dhcF9jYWNoZShwYWdlKQotI2RlZmluZSBwdGVfZnJlZV90bGIodGxiLCBwdGVwLCBhZGRyKQlwdGVfZnJlZSgodGxiKS0+bW0sIHB0ZXApCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmICh0bGJfZmFzdF9tb2RlKHRsYikpIHsKKwkJZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBhZ2UpOworCX0gZWxzZSB7CisJCXRsYi0+cGFnZXNbdGxiLT5ucisrXSA9IHBhZ2U7CisJCWlmICh0bGItPm5yID49IEZSRUVfUFRFX05SKQorCQkJdGxiX2ZsdXNoX21tdSh0bGIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwdGUsCisJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7CisJdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOworCXRsYl9yZW1vdmVfcGFnZSh0bGIsIHB0ZSk7Cit9CisKKyNkZWZpbmUgcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCwgYWRkcikJX19wdGVfZnJlZV90bGIodGxiLCBwdGVwLCBhZGRyKQogI2RlZmluZSBwbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKQlwbWRfZnJlZSgodGxiKS0+bW0sIHBtZHApCiAKICNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggY2U3Mzc4ZWEuLmQyMDA1ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMTAsMTIgKzEwLDcgQEAKICNpZm5kZWYgX0FTTUFSTV9UTEJGTFVTSF9ICiAjZGVmaW5lIF9BU01BUk1fVExCRkxVU0hfSAogCi0KLSNpZm5kZWYgQ09ORklHX01NVQotCi0jZGVmaW5lIHRsYl9mbHVzaCh0bGIpCSgodm9pZCkgdGxiKQotCi0jZWxzZSAvKiBDT05GSUdfTU1VICovCisjaWZkZWYgQ09ORklHX01NVQogCiAjaW5jbHVkZSA8YXNtL2dsdWUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IDE4NWVlODIuLjc0NTU0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDcgQEAKIG9iai0kKENPTkZJR19BUlRIVVIpCQkrPSBhcnRodXIubwogb2JqLSQoQ09ORklHX0lTQV9ETUEpCQkrPSBkbWEtaXNhLm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSBiaW9zMzIubyBpc2Eubworb2JqLSQoQ09ORklHX1BNKQkJKz0gc2xlZXAubwogb2JqLSQoQ09ORklHX0hBVkVfU0NIRURfQ0xPQ0spCSs9IHNjaGVkX2Nsb2NrLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubyBzbXBfdGxiLm8KIG9iai0kKENPTkZJR19IQVZFX0FSTV9TQ1UpCSs9IHNtcF9zY3UubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA4MmRhNjYxLi45Mjc1MjJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMTMsNiArMTMsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtZGYuaD4KKyNpbmNsdWRlIDxhc20vZ2x1ZS1wZi5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CkBAIC0xMTQsNiArMTE3LDE0IEBACiAjaWZkZWYgTVVMVElfUEFCT1JUCiAgIERFRklORShQUk9DRVNTT1JfUEFCVF9GVU5DLAlvZmZzZXRvZihzdHJ1Y3QgcHJvY2Vzc29yLCBfcHJlZmV0Y2hfYWJvcnQpKTsKICNlbmRpZgorI2lmZGVmIE1VTFRJX0NQVQorICBERUZJTkUoQ1BVX1NMRUVQX1NJWkUsCW9mZnNldG9mKHN0cnVjdCBwcm9jZXNzb3IsIHN1c3BlbmRfc2l6ZSkpOworICBERUZJTkUoQ1BVX0RPX1NVU1BFTkQsCW9mZnNldG9mKHN0cnVjdCBwcm9jZXNzb3IsIGRvX3N1c3BlbmQpKTsKKyAgREVGSU5FKENQVV9ET19SRVNVTUUsCQlvZmZzZXRvZihzdHJ1Y3QgcHJvY2Vzc29yLCBkb19yZXN1bWUpKTsKKyNlbmRpZgorI2lmZGVmIE1VTFRJX0NBQ0hFCisgIERFRklORShDQUNIRV9GTFVTSF9LRVJOX0FMTCwJb2Zmc2V0b2Yoc3RydWN0IGNwdV9jYWNoZV9mbnMsIGZsdXNoX2tlcm5fYWxsKSk7CisjZW5kaWYKICAgQkxBTksoKTsKICAgREVGSU5FKERNQV9CSURJUkVDVElPTkFMLAlETUFfQklESVJFQ1RJT05BTCk7CiAgIERFRklORShETUFfVE9fREVWSUNFLAkJRE1BX1RPX0RFVklDRSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCAyYjQ2ZmVhLi5lOGQ4ODU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTE2LDcgKzE2LDggQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgotI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtZGYuaD4KKyNpbmNsdWRlIDxhc20vZ2x1ZS1wZi5oPgogI2luY2x1ZGUgPGFzbS92ZnBtYWNyb3MuaD4KICNpbmNsdWRlIDxtYWNoL2VudHJ5LW1hY3JvLlM+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9ub3RpZnkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCmluZGV4IGYxN2Q5YTAuLmYwNmZmOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwpAQCAtMzkxLDI1ICszOTEsMjQgQEAKIAogCiAjaWZkZWYgQ09ORklHX1NNUF9PTl9VUAorCV9fSU5JVAogX19maXh1cF9zbXA6Ci0JbW92CXI0LCAjMHgwMDA3MDAwMAotCW9ycglyMywgcjQsICMweGZmMDAwMDAwCUAgbWFzayAweGZmMDcwMDAwCi0Jb3JyCXI0LCByNCwgIzB4NDEwMDAwMDAJQCB2YWwgMHg0MTA3MDAwMAotCWFuZAlyMCwgcjksIHIzCi0JdGVxCXIwLCByNAkJCUAgQVJNIENQVSBhbmQgQVJNdjYvdjc/CisJYW5kCXIzLCByOSwgIzB4MDAwZjAwMDAJQCBhcmNoaXRlY3R1cmUgdmVyc2lvbgorCXRlcQlyMywgIzB4MDAwZjAwMDAJCUAgQ1BVIElEIHN1cHBvcnRlZD8KIAlibmUJX19maXh1cF9zbXBfb25fdXAJQCBubywgYXNzdW1lIFVQCiAKLQlvcnIJcjMsIHIzLCAjMHgwMDAwZmYwMAotCW9ycglyMywgcjMsICMweDAwMDAwMGYwCUAgbWFzayAweGZmMDdmZmYwCisJYmljCXIzLCByOSwgIzB4MDBmZjAwMDAKKwliaWMJcjMsIHIzLCAjMHgwMDAwMDAwZglAIG1hc2sgMHhmZjAwZmZmMAorCW1vdglyNCwgIzB4NDEwMDAwMDAKIAlvcnIJcjQsIHI0LCAjMHgwMDAwYjAwMAotCW9ycglyNCwgcjQsICMweDAwMDAwMDIwCUAgdmFsIDB4NDEwN2IwMjAKLQlhbmQJcjAsIHI5LCByMwotCXRlcQlyMCwgcjQJCQlAIEFSTSAxMU1QQ29yZT8KKwlvcnIJcjQsIHI0LCAjMHgwMDAwMDAyMAlAIHZhbCAweDQxMDBiMDIwCisJdGVxCXIzLCByNAkJCUAgQVJNIDExTVBDb3JlPwogCW1vdmVxCXBjLCBscgkJCUAgeWVzLCBhc3N1bWUgU01QCiAKIAltcmMJcDE1LCAwLCByMCwgYzAsIGMwLCA1CUAgcmVhZCBNUElEUgotCXRzdAlyMCwgIzEgPDwgMzEKLQltb3ZuZQlwYywgbHIJCQlAIGJpdCAzMSA9PiBTTVAKKwlhbmQJcjAsIHIwLCAjMHhjMDAwMDAwMAlAIG11bHRpcHJvY2Vzc2luZyBleHRlbnNpb25zIGFuZAorCXRlcQlyMCwgIzB4ODAwMDAwMDAJCUAgbm90IHBhcnQgb2YgYSB1bmlwcm9jZXNzb3Igc3lzdGVtPworCW1vdmVxCXBjLCBscgkJCUAgeWVzLCBhc3N1bWUgU01QCiAKIF9fZml4dXBfc21wX29uX3VwOgogCWFkcglyMCwgMWYKQEAgLTQxNywxOCArNDE2LDcgQEAKIAlzdWIJcjMsIHIwLCByMwogCWFkZAlyNCwgcjQsIHIzCiAJYWRkCXI1LCByNSwgcjMKLTI6CWNtcAlyNCwgcjUKLQltb3ZocwlwYywgbHIKLQlsZG1pYQlyNCEsIHtyMCwgcjZ9Ci0gQVJNKAlzdHIJcjYsIFtyMCwgcjNdCSkKLSBUSFVNQigJYWRkCXIwLCByMCwgcjMJKQotI2lmZGVmIF9fQVJNRUJfXwotIFRIVU1CKAltb3YJcjYsIHI2LCByb3IgIzE2CSkJQCBDb252ZXJ0IHdvcmQgb3JkZXIgZm9yIGJpZy1lbmRpYW4uCi0jZW5kaWYKLSBUSFVNQigJc3RyaAlyNiwgW3IwXSwgIzIJKQlAIEZvciBUaHVtYi0yLCBzdG9yZSBhcyB0d28gaGFsZndvcmRzCi0gVEhVTUIoCW1vdglyNiwgcjYsIGxzciAjMTYJKQlAIHRvIGJlIHJvYnVzdCBhZ2FpbnN0IG1pc2FsaWduZWQgcjMuCi0gVEhVTUIoCXN0cmgJcjYsIFtyMF0JKQotCWIJMmIKKwliCV9fZG9fZml4dXBfc21wX29uX3VwCiBFTkRQUk9DKF9fZml4dXBfc21wKQogCiAJLmFsaWduCkBAIC00NDIsNyArNDMwLDMxIEBACiAJQUxUX1NNUCgubG9uZwkxKQogCUFMVF9VUCgubG9uZwkwKQogCS5wb3BzZWN0aW9uCi0KICNlbmRpZgogCisJLnRleHQKK19fZG9fZml4dXBfc21wX29uX3VwOgorCWNtcAlyNCwgcjUKKwltb3ZocwlwYywgbHIKKwlsZG1pYQlyNCEsIHtyMCwgcjZ9CisgQVJNKAlzdHIJcjYsIFtyMCwgcjNdCSkKKyBUSFVNQigJYWRkCXIwLCByMCwgcjMJKQorI2lmZGVmIF9fQVJNRUJfXworIFRIVU1CKAltb3YJcjYsIHI2LCByb3IgIzE2CSkJQCBDb252ZXJ0IHdvcmQgb3JkZXIgZm9yIGJpZy1lbmRpYW4uCisjZW5kaWYKKyBUSFVNQigJc3RyaAlyNiwgW3IwXSwgIzIJKQlAIEZvciBUaHVtYi0yLCBzdG9yZSBhcyB0d28gaGFsZndvcmRzCisgVEhVTUIoCW1vdglyNiwgcjYsIGxzciAjMTYJKQlAIHRvIGJlIHJvYnVzdCBhZ2FpbnN0IG1pc2FsaWduZWQgcjMuCisgVEhVTUIoCXN0cmgJcjYsIFtyMF0JKQorCWIJX19kb19maXh1cF9zbXBfb25fdXAKK0VORFBST0MoX19kb19maXh1cF9zbXBfb25fdXApCisKK0VOVFJZKGZpeHVwX3NtcCkKKwlzdG1mZAlzcCEsIHtyNCAtIHI2LCBscn0KKwltb3YJcjQsIHIwCisJYWRkCXI1LCByMCwgcjEKKwltb3YJcjMsICMwCisJYmwJX19kb19maXh1cF9zbXBfb25fdXAKKwlsZG1mZAlzcCEsIHtyNCAtIHI2LCBwY30KK0VORFBST0MoZml4dXBfc21wKQorCiAjaW5jbHVkZSAiaGVhZC1jb21tb24uUyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL2FybS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IGM5ZjNmMDQuLjQ0Yjg0ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtMTM3LDExICsxMzcsMTAgQEAKIAl1MzIgZGlkcjsKIAogCS8qIERvIHdlIGltcGxlbWVudCB0aGUgZXh0ZW5kZWQgQ1BVSUQgaW50ZXJmYWNlPyAqLwotCWlmICgoKHJlYWRfY3B1aWRfaWQoKSA+PiAxNikgJiAweGYpICE9IDB4ZikgewotCQlwcl93YXJuaW5nKCJDUFVJRCBmZWF0dXJlIHJlZ2lzdGVycyBub3Qgc3VwcG9ydGVkLiAiCi0JCQkJIkFzc3VtaW5nIHY2IGRlYnVnIGlzIHByZXNlbnQuXG4iKTsKKwlpZiAoV0FSTl9PTkNFKCgoKHJlYWRfY3B1aWRfaWQoKSA+PiAxNikgJiAweGYpICE9IDB4ZiksCisJICAgICJDUFVJRCBmZWF0dXJlIHJlZ2lzdGVycyBub3Qgc3VwcG9ydGVkLiAiCisJICAgICJBc3N1bWluZyB2NiBkZWJ1ZyBpcyBwcmVzZW50LlxuIikpCiAJCXJldHVybiBBUk1fREVCVUdfQVJDSF9WNjsKLQl9CiAKIAlBUk1fREJHX1JFQUQoYzAsIDAsIGRpZHIpOwogCXJldHVybiAoZGlkciA+PiAxNikgJiAweGY7CkBAIC0xNTIsNiArMTUxLDEyIEBACiAJcmV0dXJuIGRlYnVnX2FyY2g7CiB9CiAKK3N0YXRpYyBpbnQgZGVidWdfYXJjaF9zdXBwb3J0ZWQodm9pZCkKK3sKKwl1OCBhcmNoID0gZ2V0X2RlYnVnX2FyY2goKTsKKwlyZXR1cm4gYXJjaCA+PSBBUk1fREVCVUdfQVJDSF9WNiAmJiBhcmNoIDw9IEFSTV9ERUJVR19BUkNIX1Y3X0VDUDE0OworfQorCiAvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIEJSUCByZWdpc3RlciBhdmFpbGFibGUuICovCiBzdGF0aWMgaW50IGdldF9udW1fYnJwX3Jlc291cmNlcyh2b2lkKQogewpAQCAtMjY4LDYgKzI3Myw5IEBACiAKIGludCBod19icmVha3BvaW50X3Nsb3RzKGludCB0eXBlKQogeworCWlmICghZGVidWdfYXJjaF9zdXBwb3J0ZWQoKSkKKwkJcmV0dXJuIDA7CisKIAkvKgogCSAqIFdlIGNhbiBiZSBjYWxsZWQgZWFybHksIHNvIGRvbid0IHJlbHkgb24KIAkgKiBvdXIgc3RhdGljIHZhcmlhYmxlcyBiZWluZyBpbml0aWFsaXNlZC4KQEAgLTgyOCwyMCArODM2LDMzIEBACiAvKgogICogT25lLXRpbWUgaW5pdGlhbGlzYXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcmVncyh2b2lkICp1bnVzZWQpCitzdGF0aWMgdm9pZCByZXNldF9jdHJsX3JlZ3Modm9pZCAqaW5mbykKIHsKLQlpbnQgaTsKKwlpbnQgaSwgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXUzMiBkYmdfcG93ZXI7CisJY3B1bWFza190ICpjcHVtYXNrID0gaW5mbzsKIAogCS8qCiAJICogdjcgZGVidWcgY29udGFpbnMgc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlcnMgc28gdGhhdCBkZWJ1ZyBzdGF0ZQotCSAqIGNhbiBiZSBtYWludGFpbmVkIGFjcm9zcyBsb3ctcG93ZXIgbW9kZXMgd2l0aG91dCBsZWF2aW5nCi0JICogdGhlIGRlYnVnIGxvZ2ljIHBvd2VyZWQgdXAuIEl0IGlzIElNUExFTUVOVEFUSU9OIERFRklORUQgd2hldGhlcgotCSAqIHdlIGNhbiB3cml0ZSB0byB0aGUgZGVidWcgcmVnaXN0ZXJzIG91dCBvZiByZXNldCwgc28gd2UgbXVzdAotCSAqIHVubG9jayB0aGUgT1MgTG9jayBBY2Nlc3MgUmVnaXN0ZXIgdG8gYXZvaWQgdGFraW5nIHVuZGVmaW5lZAotCSAqIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMgbGF0ZXIgb24uCisJICogY2FuIGJlIG1haW50YWluZWQgYWNyb3NzIGxvdy1wb3dlciBtb2RlcyB3aXRob3V0IGxlYXZpbmcgdGhlIGRlYnVnCisJICogbG9naWMgcG93ZXJlZCB1cC4gSXQgaXMgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB3aGV0aGVyIHdlIGNhbiBhY2Nlc3MKKwkgKiB0aGUgZGVidWcgcmVnaXN0ZXJzIG91dCBvZiByZXNldCwgc28gd2UgbXVzdCB1bmxvY2sgdGhlIE9TIExvY2sKKwkgKiBBY2Nlc3MgUmVnaXN0ZXIgdG8gYXZvaWQgdGFraW5nIHVuZGVmaW5lZCBpbnN0cnVjdGlvbiBleGNlcHRpb25zCisJICogbGF0ZXIgb24uCiAJICovCiAJaWYgKGRlYnVnX2FyY2ggPj0gQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQpIHsKIAkJLyoKKwkJICogRW5zdXJlIHN0aWNreSBwb3dlci1kb3duIGlzIGNsZWFyIChpLmUuIGRlYnVnIGxvZ2ljIGlzCisJCSAqIHBvd2VyZWQgdXApLgorCQkgKi8KKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzEsIGM1LCA0IiA6ICI9ciIgKGRiZ19wb3dlcikpOworCQlpZiAoKGRiZ19wb3dlciAmIDB4MSkgPT0gMCkgeworCQkJcHJfd2FybmluZygiQ1BVICVkIGRlYnVnIGlzIHBvd2VyZWQgZG93biFcbiIsIGNwdSk7CisJCQljcHVtYXNrX29yKGNwdW1hc2ssIGNwdW1hc2ssIGNwdW1hc2tfb2YoY3B1KSk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKgogCQkgKiBVbmNvbmRpdGlvbmFsbHkgY2xlYXIgdGhlIGxvY2sgYnkgd3JpdGluZyBhIHZhbHVlCiAJCSAqIG90aGVyIHRoYW4gMHhDNUFDQ0U1NSB0byB0aGUgYWNjZXNzIHJlZ2lzdGVyLgogCQkgKi8KQEAgLTg3OSwxMCArOTAwLDExIEBACiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX2h3X2JyZWFrcG9pbnRfaW5pdCh2b2lkKQogewogCXUzMiBkc2NyOworCWNwdW1hc2tfdCBjcHVtYXNrID0geyBDUFVfQklUU19OT05FIH07CiAKIAlkZWJ1Z19hcmNoID0gZ2V0X2RlYnVnX2FyY2goKTsKIAotCWlmIChkZWJ1Z19hcmNoID4gQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQpIHsKKwlpZiAoIWRlYnVnX2FyY2hfc3VwcG9ydGVkKCkpIHsKIAkJcHJfaW5mbygiZGVidWcgYXJjaGl0ZWN0dXJlIDB4JXggdW5zdXBwb3J0ZWQuXG4iLCBkZWJ1Z19hcmNoKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODk5LDE4ICs5MjEsMjQgQEAKIAkJcHJfaW5mbygiJWQgYnJlYWtwb2ludChzKSByZXNlcnZlZCBmb3Igd2F0Y2hwb2ludCAiCiAJCQkJInNpbmdsZS1zdGVwLlxuIiwgY29yZV9udW1fcmVzZXJ2ZWRfYnJwcyk7CiAKKwkvKgorCSAqIFJlc2V0IHRoZSBicmVha3BvaW50IHJlc291cmNlcy4gV2UgYXNzdW1lIHRoYXQgYSBoYWx0aW5nCisJICogZGVidWdnZXIgd2lsbCBsZWF2ZSB0aGUgd29ybGQgaW4gYSBuaWNlIHN0YXRlIGZvciB1cy4KKwkgKi8KKwlvbl9lYWNoX2NwdShyZXNldF9jdHJsX3JlZ3MsICZjcHVtYXNrLCAxKTsKKwlpZiAoIWNwdW1hc2tfZW1wdHkoJmNwdW1hc2spKSB7CisJCWNvcmVfbnVtX2JycHMgPSAwOworCQljb3JlX251bV9yZXNlcnZlZF9icnBzID0gMDsKKwkJY29yZV9udW1fd3JwcyA9IDA7CisJCXJldHVybiAwOworCX0KKwogCUFSTV9EQkdfUkVBRChjMSwgMCwgZHNjcik7CiAJaWYgKGRzY3IgJiBBUk1fRFNDUl9IREJHRU4pIHsKKwkJbWF4X3dhdGNocG9pbnRfbGVuID0gNDsKIAkJcHJfd2FybmluZygiaGFsdGluZyBkZWJ1ZyBtb2RlIGVuYWJsZWQuIEFzc3VtaW5nIG1heGltdW0gIgotCQkJCSJ3YXRjaHBvaW50IHNpemUgb2YgNCBieXRlcy4iKTsKKwkJCSAgICJ3YXRjaHBvaW50IHNpemUgb2YgJXUgYnl0ZXMuIiwgbWF4X3dhdGNocG9pbnRfbGVuKTsKIAl9IGVsc2UgewotCQkvKgotCQkgKiBSZXNldCB0aGUgYnJlYWtwb2ludCByZXNvdXJjZXMuIFdlIGFzc3VtZSB0aGF0IGEgaGFsdGluZwotCQkgKiBkZWJ1Z2dlciB3aWxsIGxlYXZlIHRoZSB3b3JsZCBpbiBhIG5pY2Ugc3RhdGUgZm9yIHVzLgotCQkgKi8KLQkJc21wX2NhbGxfZnVuY3Rpb24ocmVzZXRfY3RybF9yZWdzLCBOVUxMLCAxKTsKLQkJcmVzZXRfY3RybF9yZWdzKE5VTEwpOwotCiAJCS8qIFdvcmsgb3V0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCB3YXRjaHBvaW50IGxlbmd0aC4gKi8KIAkJbWF4X3dhdGNocG9pbnRfbGVuID0gZ2V0X21heF93cF9sZW4oKTsKIAkJcHJfaW5mbygibWF4aW11bSB3YXRjaHBvaW50IHNpemUgaXMgJXUgYnl0ZXMuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYwppbmRleCAyYzFmMDA1Li44ZjZlZDQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYwpAQCAtMTQzNyw3ICsxNDM3LDcgQEAKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18xMTAwXzAxMHgoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDBjNDAwMDAwKSB7CisJfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MGMwMDAwMDApIHsKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18xMTB4KGluc24sIGFzaSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwppbmRleCAyY2ZlODE2Li42ZDQxMDVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCkBAIC0yNjgsMTIgKzI2OSwyOCBAQAogCWNvbnN0IEVsZl9TaGRyICp0eHRfc2VjOwogfTsKIAorc3RhdGljIGNvbnN0IEVsZl9TaGRyICpmaW5kX21vZF9zZWN0aW9uKGNvbnN0IEVsZjMyX0VoZHIgKmhkciwKKwljb25zdCBFbGZfU2hkciAqc2VjaGRycywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBFbGZfU2hkciAqcywgKnNlOworCWNvbnN0IGNoYXIgKnNlY3N0cnMgPSAodm9pZCAqKWhkciArIHNlY2hkcnNbaGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQ7CisKKwlmb3IgKHMgPSBzZWNoZHJzLCBzZSA9IHNlY2hkcnMgKyBoZHItPmVfc2hudW07IHMgPCBzZTsgcysrKQorCQlpZiAoc3RyY21wKG5hbWUsIHNlY3N0cnMgKyBzLT5zaF9uYW1lKSA9PSAwKQorCQkJcmV0dXJuIHM7CisKKwlyZXR1cm4gTlVMTDsKK30KKworZXh0ZXJuIHZvaWQgZml4dXBfc21wKGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CisKIGludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmMzJfRWhkciAqaGRyLCBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKIAkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKKwljb25zdCBFbGZfU2hkciAqIF9fbWF5YmVfdW51c2VkIHMgPSBOVUxMOwogI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECiAJY29uc3QgY2hhciAqc2Vjc3RycyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKLQljb25zdCBFbGZfU2hkciAqcywgKnNlY2hkcnNfZW5kID0gc2VjaGRycyArIGhkci0+ZV9zaG51bTsKKwljb25zdCBFbGZfU2hkciAqc2VjaGRyc19lbmQgPSBzZWNoZHJzICsgaGRyLT5lX3NobnVtOwogCXN0cnVjdCBtb2RfdW53aW5kX21hcCBtYXBzW0FSTV9TRUNfTUFYXTsKIAlpbnQgaTsKIApAQCAtMzE1LDYgKzMzMiw5IEBACiAJCQkJCSAgICAgICAgIG1hcHNbaV0udHh0X3NlYy0+c2hfYWRkciwKIAkJCQkJICAgICAgICAgbWFwc1tpXS50eHRfc2VjLT5zaF9zaXplKTsKICNlbmRpZgorCXMgPSBmaW5kX21vZF9zZWN0aW9uKGhkciwgc2VjaGRycywgIi5hbHQuc21wLmluaXQiKTsKKwlpZiAocyAmJiAhaXNfc21wKCkpCisJCWZpeHVwX3NtcCgodm9pZCAqKXMtPnNoX2FkZHIsIHMtPnNoX3NpemUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA1ZWZhMjY0Li5kMTUwYWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTcwMCw3ICs3MDAsNyBAQAogCSAqIEZyYW1lIHBvaW50ZXJzIHNob3VsZCBzdHJpY3RseSBwcm9ncmVzcyBiYWNrIHVwIHRoZSBzdGFjawogCSAqICh0b3dhcmRzIGhpZ2hlciBhZGRyZXNzZXMpLgogCSAqLwotCWlmICh0YWlsID49IGJ1ZnRhaWwuZnApCisJaWYgKHRhaWwgKyAxID49IGJ1ZnRhaWwuZnApCiAJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIGJ1ZnRhaWwuZnAgLSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BtdS5jIGIvYXJjaC9hcm0va2VybmVsL3BtdS5jCmluZGV4IGI4YWY5NmUuLjJjNzllZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wbXUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcG11LmMKQEAgLTk3LDI4ICs5NywzNCBAQAogCQkJICAgaXJxLCBjcHUpOwogCXJldHVybiBlcnI7CiAjZWxzZQotCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOwogI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQKIGluaXRfY3B1X3BtdSh2b2lkKQogewotCWludCBpLCBlcnIgPSAwOworCWludCBpLCBpcnFzLCBlcnIgPSAwOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwbXVfZGV2aWNlc1tBUk1fUE1VX0RFVklDRV9DUFVdOwogCi0JaWYgKCFwZGV2KSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoIXBkZXYpCisJCXJldHVybiAtRU5PREVWOwogCi0JZm9yIChpID0gMDsgaSA8IHBkZXYtPm51bV9yZXNvdXJjZXM7ICsraSkgeworCWlycXMgPSBwZGV2LT5udW1fcmVzb3VyY2VzOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgc2luZ2xlIFBNVSBpbnRlcnJ1cHQgdGhhdCB3ZSBjYW4ndCBzaGlmdCwgYXNzdW1lIHRoYXQKKwkgKiB3ZSdyZSBydW5uaW5nIG9uIGEgdW5pcHJvY2Vzc29yIG1hY2hpbmUgYW5kIGNvbnRpbnVlLgorCSAqLworCWlmIChpcnFzID09IDEgJiYgIWlycV9jYW5fc2V0X2FmZmluaXR5KHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCkpKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBpcnFzOyArK2kpIHsKIAkJZXJyID0gc2V0X2lycV9hZmZpbml0eShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpLCBpKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KIAotb3V0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCAxOWM2ODE2Li5iMTNlNzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC05OTYsMTAgKzk5NiwxMCBAQAogCQl3aGlsZSAoIShhcmNoX2N0cmwubGVuICYgMHgxKSkKIAkJCWFyY2hfY3RybC5sZW4gPj49IDE7CiAKLQkJaWYgKGlkeCAmIDB4MSkKLQkJCXJlZyA9IGVuY29kZV9jdHJsX3JlZyhhcmNoX2N0cmwpOwotCQllbHNlCisJCWlmIChudW0gJiAweDEpCiAJCQlyZWcgPSBicC0+YXR0ci5icF9hZGRyOworCQllbHNlCisJCQlyZWcgPSBlbmNvZGVfY3RybF9yZWcoYXJjaF9jdHJsKTsKIAl9CiAKIHB1dDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggNDIwYjhkNi4uNWVhNGZiNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC0yMjYsOCArMjI2LDggQEAKIAkJICogUmVnaXN0ZXIgMCBhbmQgY2hlY2sgZm9yIFZNU0F2NyBvciBQTVNBdjcgKi8KIAkJYXNtKCJtcmMJcDE1LCAwLCAlMCwgYzAsIGMxLCA0IgogCQkgICAgOiAiPXIiIChtbWZyMCkpOwotCQlpZiAoKG1tZnIwICYgMHgwMDAwMDAwZikgPT0gMHgwMDAwMDAwMyB8fAotCQkgICAgKG1tZnIwICYgMHgwMDAwMDBmMCkgPT0gMHgwMDAwMDAzMCkKKwkJaWYgKChtbWZyMCAmIDB4MDAwMDAwMGYpID49IDB4MDAwMDAwMDMgfHwKKwkJICAgIChtbWZyMCAmIDB4MDAwMDAwZjApID49IDB4MDAwMDAwMzApCiAJCQljcHVfYXJjaCA9IENQVV9BUkNIX0FSTXY3OwogCQllbHNlIGlmICgobW1mcjAgJiAweDAwMDAwMDBmKSA9PSAweDAwMDAwMDAyIHx8CiAJCQkgKG1tZnIwICYgMHgwMDAwMDBmMCkgPT0gMHgwMDAwMDAyMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwppbmRleCA5MDdkNWE2Li5hYmFmODQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC00NzQsNyArNDc0LDkgQEAKIAl1bnNpZ25lZCBsb25nIGhhbmRsZXIgPSAodW5zaWduZWQgbG9uZylrYS0+c2Euc2FfaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nIHJldGNvZGU7CiAJaW50IHRodW1iID0gMDsKLQl1bnNpZ25lZCBsb25nIGNwc3IgPSByZWdzLT5BUk1fY3BzciAmIH5QU1JfZjsKKwl1bnNpZ25lZCBsb25nIGNwc3IgPSByZWdzLT5BUk1fY3BzciAmIH4oUFNSX2YgfCBQU1JfRV9CSVQpOworCisJY3BzciB8PSBQU1JfRU5EU1RBVEU7CiAKIAkvKgogCSAqIE1heWJlIHdlIG5lZWQgdG8gZGVsaXZlciBhIDMyLWJpdCBzaWduYWwgdG8gYSAyNi1iaXQgdGFzay4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbGVlcC5TIGIvYXJjaC9hcm0va2VybmVsL3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhZDY5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbGVlcC5TCkBAIC0wLDAgKzEsMTM0IEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vZ2x1ZS1wcm9jLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCS50ZXh0CisKKy8qCisgKiBTYXZlIENQVSBzdGF0ZSBmb3IgYSBzdXNwZW5kCisgKiAgcjEgPSB2OnAgb2Zmc2V0CisgKiAgcjMgPSB2aXJ0dWFsIHJldHVybiBmdW5jdGlvbgorICogTm90ZTogc3AgaXMgZGVjcmVtZW50ZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIENQVSBzdGF0ZSBvbiBzdGFjaworICogcjAtcjMscjkscjEwLGxyIGNvcnJ1cHRlZAorICovCitFTlRSWShjcHVfc3VzcGVuZCkKKwltb3YJcjksIGxyCisjaWZkZWYgTVVMVElfQ1BVCisJbGRyCXIxMCwgPXByb2Nlc3NvcgorCW1vdglyMiwgc3AJCQlAIGN1cnJlbnQgdmlydHVhbCBTUAorCWxkcglyMCwgW3IxMCwgI0NQVV9TTEVFUF9TSVpFXSBAIHNpemUgb2YgQ1BVIHNsZWVwIHN0YXRlCisJbGRyCWlwLCBbcjEwLCAjQ1BVX0RPX1JFU1VNRV0gQCB2aXJ0dWFsIHJlc3VtZSBmdW5jdGlvbgorCXN1YglzcCwgc3AsIHIwCQlAIGFsbG9jYXRlIENQVSBzdGF0ZSBvbiBzdGFjaworCW1vdglyMCwgc3AJCQlAIHNhdmUgcG9pbnRlcgorCWFkZAlpcCwgaXAsIHIxCQlAIGNvbnZlcnQgcmVzdW1lIGZuIHRvIHBoeXMKKwlzdG1mZAlzcCEsIHtyMSwgcjIsIHIzLCBpcH0JQCBzYXZlIHY6cCwgdmlydCBTUCwgcmV0Zm4sIHBoeXMgcmVzdW1lIGZuCisJbGRyCXIzLCA9c2xlZXBfc2F2ZV9zcAorCWFkZAlyMiwgc3AsIHIxCQlAIGNvbnZlcnQgU1AgdG8gcGh5cworI2lmZGVmIENPTkZJR19TTVAKKwlBTFRfU01QKG1yYyBwMTUsIDAsIGxyLCBjMCwgYzAsIDUpCisJQUxUX1VQKG1vdiBsciwgIzApCisJYW5kCWxyLCBsciwgIzE1CisJc3RyCXIyLCBbcjMsIGxyLCBsc2wgIzJdCUAgc2F2ZSBwaHlzIFNQCisjZWxzZQorCXN0cglyMiwgW3IzXQkJQCBzYXZlIHBoeXMgU1AKKyNlbmRpZgorCW1vdglsciwgcGMKKwlsZHIJcGMsIFtyMTAsICNDUFVfRE9fU1VTUEVORF0gQCBzYXZlIENQVSBzdGF0ZQorI2Vsc2UKKwltb3YJcjIsIHNwCQkJQCBjdXJyZW50IHZpcnR1YWwgU1AKKwlsZHIJcjAsID1jcHVfc3VzcGVuZF9zaXplCisJc3ViCXNwLCBzcCwgcjAJCUAgYWxsb2NhdGUgQ1BVIHN0YXRlIG9uIHN0YWNrCisJbW92CXIwLCBzcAkJCUAgc2F2ZSBwb2ludGVyCisJc3RtZmQJc3AhLCB7cjEsIHIyLCByM30JQCBzYXZlIHY6cCwgdmlydCBTUCwgcmV0dXJuIGZuCisJbGRyCXIzLCA9c2xlZXBfc2F2ZV9zcAorCWFkZAlyMiwgc3AsIHIxCQlAIGNvbnZlcnQgU1AgdG8gcGh5cworI2lmZGVmIENPTkZJR19TTVAKKwlBTFRfU01QKG1yYyBwMTUsIDAsIGxyLCBjMCwgYzAsIDUpCisJQUxUX1VQKG1vdiBsciwgIzApCisJYW5kCWxyLCBsciwgIzE1CisJc3RyCXIyLCBbcjMsIGxyLCBsc2wgIzJdCUAgc2F2ZSBwaHlzIFNQCisjZWxzZQorCXN0cglyMiwgW3IzXQkJQCBzYXZlIHBoeXMgU1AKKyNlbmRpZgorCWJsCWNwdV9kb19zdXNwZW5kCisjZW5kaWYKKworCUAgZmx1c2ggZGF0YSBjYWNoZQorI2lmZGVmIE1VTFRJX0NBQ0hFCisJbGRyCXIxMCwgPWNwdV9jYWNoZQorCW1vdglsciwgcjkKKwlsZHIJcGMsIFtyMTAsICNDQUNIRV9GTFVTSF9LRVJOX0FMTF0KKyNlbHNlCisJbW92CWxyLCByOQorCWIJX19jcHVjX2ZsdXNoX2tlcm5fYWxsCisjZW5kaWYKK0VORFBST0MoY3B1X3N1c3BlbmQpCisJLmx0b3JnCisKKy8qCisgKiByMCA9IGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKKyAqIHIxID0gdjpwIG9mZnNldCAocHJlc2VydmVkIGJ5IGNwdV9kb19yZXN1bWUpCisgKiByMiA9IHBoeXMgcGFnZSB0YWJsZSBiYXNlCisgKiByMyA9IEwxIHNlY3Rpb24gZmxhZ3MKKyAqLworRU5UUlkoY3B1X3Jlc3VtZV9tbXUpCisJYWRyCXI0LCBjcHVfcmVzdW1lX3R1cm5fbW11X29uCisJbW92CXI0LCByNCwgbHNyICMyMAorCW9ycglyMywgcjMsIHI0LCBsc2wgIzIwCisJbGRyCXI1LCBbcjIsIHI0LCBsc2wgIzJdCUAgc2F2ZSBvbGQgbWFwcGluZworCXN0cglyMywgW3IyLCByNCwgbHNsICMyXQlAIHNldHVwIDE6MSBtYXBwaW5nIGZvciBtbXUgY29kZQorCXN1YglyMiwgcjIsIHIxCisJbGRyCXIzLCA9Y3B1X3Jlc3VtZV9hZnRlcl9tbXUKKwliaWMJcjEsIHIwLCAjQ1JfQwkJQCBlbnN1cmUgRC1jYWNoZSBpcyBkaXNhYmxlZAorCWIJY3B1X3Jlc3VtZV90dXJuX21tdV9vbgorRU5EUFJPQyhjcHVfcmVzdW1lX21tdSkKKwkubHRvcmcKKwkuYWxpZ24JNQorY3B1X3Jlc3VtZV90dXJuX21tdV9vbjoKKwltY3IJcDE1LCAwLCByMSwgYzEsIGMwLCAwCUAgdHVybiBvbiBNTVUsIEktY2FjaGUsIGV0YworCW1yYwlwMTUsIDAsIHIxLCBjMCwgYzAsIDAJQCByZWFkIGlkIHJlZworCW1vdglyMSwgcjEKKwltb3YJcjEsIHIxCisJbW92CXBjLCByMwkJCUAganVtcCB0byB2aXJ0dWFsIGFkZHJlc3MKK0VORFBST0MoY3B1X3Jlc3VtZV90dXJuX21tdV9vbikKK2NwdV9yZXN1bWVfYWZ0ZXJfbW11OgorCXN0cglyNSwgW3IyLCByNCwgbHNsICMyXQlAIHJlc3RvcmUgb2xkIG1hcHBpbmcKKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgdHVybiBvbiBELWNhY2hlCisJbW92CXBjLCBscgorRU5EUFJPQyhjcHVfcmVzdW1lX2FmdGVyX21tdSkKKworLyoKKyAqIE5vdGU6IFllcywgcGFydCBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgbG9jYXRlZCBpbnRvIHRoZSAuZGF0YSBzZWN0aW9uLgorICogICAgICAgVGhpcyBpcyB0byBhbGxvdyBzbGVlcF9zYXZlX3NwIHRvIGJlIGFjY2Vzc2VkIHdpdGggYSByZWxhdGl2ZSBsb2FkCisgKiAgICAgICB3aGlsZSB3ZSBjYW4ndCByZWx5IG9uIGFueSBNTVUgdHJhbnNsYXRpb24uICBXZSBjb3VsZCBoYXZlIHB1dAorICogICAgICAgc2xlZXBfc2F2ZV9zcCBpbiB0aGUgLnRleHQgc2VjdGlvbiBhcyB3ZWxsLCBidXQgc29tZSBzZXR1cHMgbWlnaHQKKyAqICAgICAgIGluc2lzdCBvbiBpdCB0byBiZSB0cnVseSByZWFkLW9ubHkuCisgKi8KKwkuZGF0YQorCS5hbGlnbgorRU5UUlkoY3B1X3Jlc3VtZSkKKyNpZmRlZiBDT05GSUdfU01QCisJYWRyCXIwLCBzbGVlcF9zYXZlX3NwCisJQUxUX1NNUChtcmMgcDE1LCAwLCByMSwgYzAsIGMwLCA1KQorCUFMVF9VUChtb3YgcjEsICMwKQorCWFuZAlyMSwgcjEsICMxNQorCWxkcglyMCwgW3IwLCByMSwgbHNsICMyXQlAIHN0YWNrIHBoeXMgYWRkcgorI2Vsc2UKKwlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJQCBzdGFjayBwaHlzIGFkZHIKKyNlbmRpZgorCW1zcgljcHNyX2MsICNQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERSBAIHNldCBTVkMsIGlycXMgb2ZmCisjaWZkZWYgTVVMVElfQ1BVCisJbGRtaWEJcjAhLCB7cjEsIHNwLCBsciwgcGN9CUAgbG9hZCB2OnAsIHN0YWNrLCByZXR1cm4gZm4sIHJlc3VtZSBmbgorI2Vsc2UKKwlsZG1pYQlyMCEsIHtyMSwgc3AsIGxyfQlAIGxvYWQgdjpwLCBzdGFjaywgcmV0dXJuIGZuCisJYgljcHVfZG9fcmVzdW1lCisjZW5kaWYKK0VORFBST0MoY3B1X3Jlc3VtZSkKKworc2xlZXBfc2F2ZV9zcDoKKwkucmVwdAlDT05GSUdfTlJfQ1BVUworCS5sb25nCTAJCQkJQCBwcmVzZXJ2ZSBzdGFjayBwaHlzIHB0ciBoZXJlCisJLmVuZHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jCmluZGV4IDlhYjQxNDkuLmExZTc1N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF9zY3UuYwpAQCAtNTAsMyArNTAsMjYgQEAKIAkgKi8KIAlmbHVzaF9jYWNoZV9hbGwoKTsKIH0KKworLyoKKyAqIFNldCB0aGUgZXhlY3V0aW5nIENQVXMgcG93ZXIgbW9kZSBhcyBkZWZpbmVkLiAgVGhpcyB3aWxsIGJlIGluCisgKiBwcmVwYXJhdGlvbiBmb3IgaXQgZXhlY3V0aW5nIGEgV0ZJIGluc3RydWN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLCBhbmQgYXMgaXQKKyAqIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgZGlzYWJsaW5nIGNvaGVyZW5jeSwgY2FjaGVzIG11c3QgaGF2ZSBiZWVuCisgKiBmbHVzaGVkLiAgSW50ZXJydXB0cyBtdXN0IGFsc28gaGF2ZSBiZWVuIGRpc2FibGVkLgorICovCitpbnQgc2N1X3Bvd2VyX21vZGUodm9pZCBfX2lvbWVtICpzY3VfYmFzZSwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKG1vZGUgPiAzIHx8IG1vZGUgPT0gMSB8fCBjcHUgPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IF9fcmF3X3JlYWRiKHNjdV9iYXNlICsgU0NVX0NQVV9TVEFUVVMgKyBjcHUpICYgfjB4MDM7CisJdmFsIHw9IG1vZGU7CisJX19yYXdfd3JpdGViKHZhbCwgc2N1X2Jhc2UgKyBTQ1VfQ1BVX1NUQVRVUyArIGNwdSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggODZiNjZmMy4uNjE0NjI3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTIxLDYgKzIxLDEyIEBACiAjZGVmaW5lIEFSTV9DUFVfS0VFUCh4KQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTVBfT05fVVApICYmICFkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKKyNkZWZpbmUgQVJNX0VYSVRfS0VFUCh4KQl4CisjZWxzZQorI2RlZmluZSBBUk1fRVhJVF9LRUVQKHgpCisjZW5kaWYKKwogT1VUUFVUX0FSQ0goYXJtKQogRU5UUlkoc3RleHQpCiAKQEAgLTQzLDYgKzQ5LDcgQEAKIAkJX3Npbml0dGV4dCA9IC47CiAJCQlIRUFEX1RFWFQKIAkJCUlOSVRfVEVYVAorCQkJQVJNX0VYSVRfS0VFUChFWElUX1RFWFQpCiAJCV9laW5pdHRleHQgPSAuOwogCQlBUk1fQ1BVX0RJU0NBUkQoUFJPQ19JTkZPKQogCQlfX2FyY2hfaW5mb19iZWdpbiA9IC47CkBAIC02Nyw2ICs3NCw3IEBACiAjaWZuZGVmIENPTkZJR19YSVBfS0VSTkVMCiAJCV9faW5pdF9iZWdpbiA9IF9zdGV4dDsKIAkJSU5JVF9EQVRBCisJCUFSTV9FWElUX0tFRVAoRVhJVF9EQVRBKQogI2VuZGlmCiAJfQogCkBAIC0xNjIsNiArMTcwLDcgQEAKIAkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJCV9faW5pdF9iZWdpbiA9IC47CiAJCUlOSVRfREFUQQorCQlBUk1fRVhJVF9LRUVQKEVYSVRfREFUQSkKIAkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJCV9faW5pdF9lbmQgPSAuOwogI2VuZGlmCkBAIC0yNDcsNiArMjU2LDggQEAKIAl9CiAjZW5kaWYKIAorCU5PVEVTCisKIAlCU1NfU0VDVElPTigwLCAwLCAwKQogCV9lbmQgPSAuOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc25hcHBlcjkyNjAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jCmluZGV4IDBhOTliM2MuLjE3ZjdkOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jCkBAIC0xNTMsNiArMTUzLDcgQEAKIAl7CiAJCS8qIFJUQyAqLwogCQlJMkNfQk9BUkRfSU5GTygiaXNsMTIwOCIsIDB4NmYpLAorCQkuaXJxID0gZ3Bpb190b19pcnEoQVQ5MV9QSU5fUEEzMSksCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggYmZkZDhhYi4uZGRlYjY0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTIyMCwxNSArMjIwLDggQEAKICNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUJX19ncGlvX3NldF92YWx1ZQogI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAogCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBncGlvOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCi17Ci0JcmV0dXJuIGlycTsKLX0KKyNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykgKGdwaW8pCisjZGVmaW5lIGlycV90b19ncGlvKGlycSkgIChpcnEpCiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwdWZyZXEuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVmcmVxLmMKaW5kZXggMzQzZGU3My4uNGE2OGMyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwdWZyZXEuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBkYXZpbmNpX2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBkYXZpbmNpX2NwdV9pbml0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBkYXZpbmNpX2NwdWZyZXFfY29uZmlnICpwZGF0YSA9IGNwdWZyZXEuZGV2LT5wbGF0Zm9ybV9kYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKaW5kZXggOWVlYzYzMC4uYmVkYThhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCkBAIC00ODAsOCArNDgwLDE1IEBACiAJLnJlc291cmNlCT0gZGE4NTBfbWNhc3BfcmVzb3VyY2VzLAogfTsKIAorc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYXZpbmNpX3BjbV9kZXZpY2UgPSB7CisJLm5hbWUJPSAiZGF2aW5jaS1wY20tYXVkaW8iLAorCS5pZAk9IC0xLAorfTsKKwogdm9pZCBfX2luaXQgZGE4eHhfcmVnaXN0ZXJfbWNhc3AoaW50IGlkLCBzdHJ1Y3Qgc25kX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQogeworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGF2aW5jaV9wY21fZGV2aWNlKTsKKwogCS8qIERBODMwL09NQVAtTDEzNyBoYXMgMyBpbnN0YW5jZXMgb2YgTWNBU1AgKi8KIAlpZiAoY3B1X2lzX2RhdmluY2lfZGE4MzAoKSAmJiBpZCA9PSAxKSB7CiAJCWRhODMwX21jYXNwMV9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ncGlvLXRuZXR2MTA3eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2dwaW8tdG5ldHYxMDd4LmMKaW5kZXggZDEwMjk4Ni4uM2ZhM2UyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2dwaW8tdG5ldHYxMDd4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2dwaW8tdG5ldHYxMDd4LmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjdGxyLT5sb2NrLCBmbGFncyk7CiAKLQlncGlvX3JlZ19zZXRfYml0KCZyZWdzLT5lbmFibGUsIGdwaW8pOworCWdwaW9fcmVnX3NldF9iaXQocmVncy0+ZW5hYmxlLCBncGlvKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIApAQCAtNzQsNyArNzQsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIAotCWdwaW9fcmVnX2NsZWFyX2JpdCgmcmVncy0+ZW5hYmxlLCBncGlvKTsKKwlncGlvX3JlZ19jbGVhcl9iaXQocmVncy0+ZW5hYmxlLCBncGlvKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTg4LDcgKzg4LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjdGxyLT5sb2NrLCBmbGFncyk7CiAKLQlncGlvX3JlZ19zZXRfYml0KCZyZWdzLT5kaXJlY3Rpb24sIGdwaW8pOworCWdwaW9fcmVnX3NldF9iaXQocmVncy0+ZGlyZWN0aW9uLCBncGlvKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIApAQCAtMTA2LDExICsxMDYsMTEgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHZhbHVlKQotCQlncGlvX3JlZ19zZXRfYml0KCZyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CisJCWdwaW9fcmVnX3NldF9iaXQocmVncy0+ZGF0YV9vdXQsIGdwaW8pOwogCWVsc2UKLQkJZ3Bpb19yZWdfY2xlYXJfYml0KCZyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CisJCWdwaW9fcmVnX2NsZWFyX2JpdChyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CiAKLQlncGlvX3JlZ19jbGVhcl9iaXQoJnJlZ3MtPmRpcmVjdGlvbiwgZ3Bpbyk7CisJZ3Bpb19yZWdfY2xlYXJfYml0KHJlZ3MtPmRpcmVjdGlvbiwgZ3Bpbyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGxyLT5sb2NrLCBmbGFncyk7CiAKQEAgLTEyNCw3ICsxMjQsNyBAQAogCXVuc2lnbmVkIGdwaW8gPSBjaGlwLT5iYXNlICsgb2Zmc2V0OwogCWludCByZXQ7CiAKLQlyZXQgPSBncGlvX3JlZ19nZXRfYml0KCZyZWdzLT5kYXRhX2luLCBncGlvKTsKKwlyZXQgPSBncGlvX3JlZ19nZXRfYml0KHJlZ3MtPmRhdGFfaW4sIGdwaW8pOwogCiAJcmV0dXJuIHJldCA/IDEgOiAwOwogfQpAQCAtMTQwLDkgKzE0MCw5IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIAogCWlmICh2YWx1ZSkKLQkJZ3Bpb19yZWdfc2V0X2JpdCgmcmVncy0+ZGF0YV9vdXQsIGdwaW8pOworCQlncGlvX3JlZ19zZXRfYml0KHJlZ3MtPmRhdGFfb3V0LCBncGlvKTsKIAllbHNlCi0JCWdwaW9fcmVnX2NsZWFyX2JpdCgmcmVncy0+ZGF0YV9vdXQsIGdwaW8pOworCQlncGlvX3JlZ19jbGVhcl9iaXQocmVncy0+ZGF0YV9vdXQsIGdwaW8pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvY2xrZGV2LmgKaW5kZXggNzMwYzQ5ZC4uMTRhNTA0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jbGtkZXYuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfX01BQ0hfQ0xLREVWX0gKICNkZWZpbmUgX19NQUNIX0NMS0RFVl9ICiAKK3N0cnVjdCBjbGs7CisKIHN0YXRpYyBpbmxpbmUgaW50IF9fY2xrX2dldChzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKaW5kZXggZmZkZjg3Yi4uODIwNzk1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwpAQCAtODM4LDcgKzgzOCw3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGVwOTN4eF9hYzk3X3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gRVA5M1hYX0FBQ19QSFlTX0JBU0UsCi0JCS5lbmQJPSBFUDkzWFhfQUFDX1BIWVNfQkFTRSArIDB4YjAgLSAxLAorCQkuZW5kCT0gRVA5M1hYX0FBQ19QSFlTX0JBU0UgKyAweGFjIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAl7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKaW5kZXggNGIwNDMxNi4uOTk2OWJiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwpAQCAtMzAsOCArMzAsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jczQyNzEuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2ZiLmg+CisjaW5jbHVkZSA8bWFjaC9lcDkzeHhfc3BpLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTkzLDYgKzk4LDgzIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVEQjkzeHggU1BJIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBjczQyNzFfcGxhdGZvcm1fZGF0YSBlZGI5M3h4X2NzNDI3MV9kYXRhID0geworCS5ncGlvX25yZXNldAk9IC1FSU5WQUwsCS8qIGZpbGxlZCBpbiBsYXRlciAqLworfTsKKworc3RhdGljIGludCBlZGI5M3h4X2NzNDI3MV9od19zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXJldHVybiBncGlvX3JlcXVlc3Rfb25lKEVQOTNYWF9HUElPX0xJTkVfRUdQSU82LAorCQkJCUdQSU9GX09VVF9JTklUX0hJR0gsIHNwaS0+bW9kYWxpYXMpOworfQorCitzdGF0aWMgdm9pZCBlZGI5M3h4X2NzNDI3MV9od19jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJZ3Bpb19mcmVlKEVQOTNYWF9HUElPX0xJTkVfRUdQSU82KTsKK30KKworc3RhdGljIHZvaWQgZWRiOTN4eF9jczQyNzFfaHdfY3NfY29udHJvbChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgdmFsdWUpCit7CisJZ3Bpb19zZXRfdmFsdWUoRVA5M1hYX0dQSU9fTElORV9FR1BJTzYsIHZhbHVlKTsKK30KKworc3RhdGljIHN0cnVjdCBlcDkzeHhfc3BpX2NoaXBfb3BzIGVkYjkzeHhfY3M0MjcxX2h3ID0geworCS5zZXR1cAkJPSBlZGI5M3h4X2NzNDI3MV9od19zZXR1cCwKKwkuY2xlYW51cAk9IGVkYjkzeHhfY3M0MjcxX2h3X2NsZWFudXAsCisJLmNzX2NvbnRyb2wJPSBlZGI5M3h4X2NzNDI3MV9od19jc19jb250cm9sLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBlZGI5M3h4X3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcwkJPSAiY3M0MjcxIiwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmVkYjkzeHhfY3M0MjcxX2RhdGEsCisJCS5jb250cm9sbGVyX2RhdGEJPSAmZWRiOTN4eF9jczQyNzFfaHcsCisJCS5tYXhfc3BlZWRfaHoJCT0gNjAwMDAwMCwKKwkJLmJ1c19udW0JCT0gMCwKKwkJLmNoaXBfc2VsZWN0CQk9IDAsCisJCS5tb2RlCQkJPSBTUElfTU9ERV8zLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGVwOTN4eF9zcGlfaW5mbyBlZGI5M3h4X3NwaV9pbmZvIF9faW5pdGRhdGEgPSB7CisJLm51bV9jaGlwc2VsZWN0CT0gQVJSQVlfU0laRShlZGI5M3h4X3NwaV9ib2FyZF9pbmZvKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlZGI5M3h4X3JlZ2lzdGVyX3NwaSh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2VkYjkzMDEoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDIoKSkKKwkJZWRiOTN4eF9jczQyNzFfZGF0YS5ncGlvX25yZXNldCA9IEVQOTNYWF9HUElPX0xJTkVfRUdQSU8xOworCWVsc2UgaWYgKG1hY2hpbmVfaXNfZWRiOTMwMmEoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDdhKCkpCisJCWVkYjkzeHhfY3M0MjcxX2RhdGEuZ3Bpb19ucmVzZXQgPSBFUDkzWFhfR1BJT19MSU5FX0goMik7CisJZWxzZSBpZiAobWFjaGluZV9pc19lZGI5MzE1YSgpKQorCQllZGI5M3h4X2NzNDI3MV9kYXRhLmdwaW9fbnJlc2V0ID0gRVA5M1hYX0dQSU9fTElORV9FR1BJTzE0OworCisJZXA5M3h4X3JlZ2lzdGVyX3NwaSgmZWRiOTN4eF9zcGlfaW5mbywgZWRiOTN4eF9zcGlfYm9hcmRfaW5mbywKKwkJCSAgICBBUlJBWV9TSVpFKGVkYjkzeHhfc3BpX2JvYXJkX2luZm8pKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRURCOTN4eCBJMlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgZWRiOTN4eF9oYXNfYXVkaW8odm9pZCkKK3sKKwlyZXR1cm4gKG1hY2hpbmVfaXNfZWRiOTMwMSgpIHx8IG1hY2hpbmVfaXNfZWRiOTMwMigpIHx8CisJCW1hY2hpbmVfaXNfZWRiOTMwMmEoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDdhKCkgfHwKKwkJbWFjaGluZV9pc19lZGI5MzE1YSgpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGVkYjkzeHhfcmVnaXN0ZXJfaTJzKHZvaWQpCit7CisJaWYgKGVkYjkzeHhfaGFzX2F1ZGlvKCkpIHsKKwkJZXA5M3h4X3JlZ2lzdGVyX2kycygpOworCX0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRURCOTN4eCBwd20KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgX19pbml0IGVkYjkzeHhfcmVnaXN0ZXJfcHdtKHZvaWQpCkBAIC0xMTEsMTMgKzE5Myw0NyBAQAogfQogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFREI5M3h4IGZyYW1lYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZXA5M3h4ZmJfbWFjaF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eGZiX2luZm8gPSB7CisJLm51bV9tb2Rlcwk9IEVQOTNYWEZCX1VTRV9NT0RFREIsCisJLmJwcAkJPSAxNiwKKwkuZmxhZ3MJCT0gMCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVkYjkzeHhfaGFzX2ZiKHZvaWQpCit7CisJLyogVGhlc2UgcGxhdGZvcm1zIGhhdmUgYW4gZXA5M3h4IHdpdGggdmlkZW8gY2FwYWJpbGl0eSAqLworCXJldHVybiBtYWNoaW5lX2lzX2VkYjkzMDcoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMDdhKCkgfHwKKwkgICAgICAgbWFjaGluZV9pc19lZGI5MzEyKCkgfHwgbWFjaGluZV9pc19lZGI5MzE1KCkgfHwKKwkgICAgICAgbWFjaGluZV9pc19lZGI5MzE1YSgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTN4eF9yZWdpc3Rlcl9mYih2b2lkKQoreworCWlmICghZWRiOTN4eF9oYXNfZmIoKSkKKwkJcmV0dXJuOworCisJaWYgKG1hY2hpbmVfaXNfZWRiOTMwN2EoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMTVhKCkpCisJCWVkYjkzeHhmYl9pbmZvLmZsYWdzIHw9IEVQOTNYWEZCX1VTRV9TRENTTjA7CisJZWxzZQorCQllZGI5M3h4ZmJfaW5mby5mbGFncyB8PSBFUDkzWFhGQl9VU0VfU0RDU04zOworCisJZXA5M3h4X3JlZ2lzdGVyX2ZiKCZlZGI5M3h4ZmJfaW5mbyk7Cit9CisKKwogc3RhdGljIHZvaWQgX19pbml0IGVkYjkzeHhfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJZXA5M3h4X2luaXRfZGV2aWNlcygpOwogCWVkYjkzeHhfcmVnaXN0ZXJfZmxhc2goKTsKIAllcDkzeHhfcmVnaXN0ZXJfZXRoKCZlZGI5M3h4X2V0aF9kYXRhLCAxKTsKIAllZGI5M3h4X3JlZ2lzdGVyX2kyYygpOworCWVkYjkzeHhfcmVnaXN0ZXJfc3BpKCk7CisJZWRiOTN4eF9yZWdpc3Rlcl9pMnMoKTsKIAllZGI5M3h4X3JlZ2lzdGVyX3B3bSgpOworCWVkYjkzeHhfcmVnaXN0ZXJfZmIoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKaW5kZXggYmVjMzRiOC4uYTg4OWZhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwpAQCAtNjEsNyArNjEsNyBAQAogCWdwaW9faW50X3VubWFza2VkW2xpbmUgPj4gM10gJj0gfigxIDw8IChsaW5lICYgNykpOwogfQogCi12b2lkIGVwOTN4eF9ncGlvX2ludF9kZWJvdW5jZSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgZW5hYmxlKQorc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKHVuc2lnbmVkIGludCBpcnEsIGJvb2wgZW5hYmxlKQogewogCWludCBsaW5lID0gaXJxX3RvX2dwaW8oaXJxKTsKIAlpbnQgcG9ydCA9IGxpbmUgPj4gMzsKQEAgLTc1LDcgKzc1LDYgQEAKIAlfX3Jhd193cml0ZWIoZ3Bpb19pbnRfZGVib3VuY2VbcG9ydF0sCiAJCUVQOTNYWF9HUElPX1JFRyhpbnRfZGVib3VuY2VfcmVnaXN0ZXJfb2Zmc2V0W3BvcnRdKSk7CiB9Ci1FWFBPUlRfU1lNQk9MKGVwOTN4eF9ncGlvX2ludF9kZWJvdW5jZSk7CiAKIHN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2FiX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKQEAgLTMzNSw2ICszMzQsMjAgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgZXA5M3h4X2dwaW9fc2V0X2RlYm91bmNlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgZGVib3VuY2UpCit7CisJaW50IGdwaW8gPSBjaGlwLT5iYXNlICsgb2Zmc2V0OworCWludCBpcnEgPSBncGlvX3RvX2lycShncGlvKTsKKworCWlmIChpcnEgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVwOTN4eF9ncGlvX2ludF9kZWJvdW5jZShpcnEsIGRlYm91bmNlID8gdHJ1ZSA6IGZhbHNlKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19kYmdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCiB7CiAJc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgKmVwOTN4eF9jaGlwID0gdG9fZXA5M3h4X2dwaW9fY2hpcChjaGlwKTsKQEAgLTQzNCw2ICs0NDcsMTggQEAKIAkJCQkgRVA5M1hYX1NZU0NPTl9ERVZDRkdfR09OSURFIHwKIAkJCQkgRVA5M1hYX1NZU0NPTl9ERVZDRkdfSE9OSURFKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVwOTN4eF9ncGlvX2JhbmtzKTsgaSsrKQotCQlncGlvY2hpcF9hZGQoJmVwOTN4eF9ncGlvX2JhbmtzW2ldLmNoaXApOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVwOTN4eF9ncGlvX2JhbmtzKTsgaSsrKSB7CisJCXN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSAmZXA5M3h4X2dwaW9fYmFua3NbaV0uY2hpcDsKKworCQkvKgorCQkgKiBQb3J0cyBBLCBCLCBhbmQgRiBzdXBwb3J0IGlucHV0IGRlYm91bmNpbmcgd2hlbgorCQkgKiB1c2VkIGFzIGludGVycnVwdHMuCisJCSAqLworCQlpZiAoIXN0cmNtcChjaGlwLT5sYWJlbCwgIkEiKSB8fAorCQkgICAgIXN0cmNtcChjaGlwLT5sYWJlbCwgIkIiKSB8fAorCQkgICAgIXN0cmNtcChjaGlwLT5sYWJlbCwgIkYiKSkKKwkJCWNoaXAtPnNldF9kZWJvdW5jZSA9IGVwOTN4eF9ncGlvX3NldF9kZWJvdW5jZTsKKworCQlncGlvY2hpcF9hZGQoY2hpcCk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggYzk5MWIxNC4uYzU3MTUyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC05OSw4ICs5OSw2IEBACiAvKiBtYXhpbXVtIHZhbHVlIGZvciBpcnEgY2FwYWJsZSBsaW5lIGlkZW50aWZpZXJzICovCiAjZGVmaW5lIEVQOTNYWF9HUElPX0xJTkVfTUFYX0lSUQlFUDkzWFhfR1BJT19MSU5FX0YoNykKIAotZXh0ZXJuIHZvaWQgZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBlbmFibGUpOwotCiAvKiBuZXcgZ2VuZXJpYyBHUElPIEFQSSAtIHNlZSBEb2N1bWVudGF0aW9uL2dwaW8udHh0ICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYwppbmRleCBiYzVlODNmLi5hOTIxZmU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKQEAgLTQsMTAgKzQsMTEgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTggUnVzc2VsbCBLaW5nLgogICogIENvcHlyaWdodCAoQykgMTk5OCBQaGlsIEJsdW5kZWxsCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApAQCAtMTYsMzIgKzE3LDc2IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKIAotLyoKLSAqIEZvb3RicmlkZ2UgdGltZXIgMSBzdXBwb3J0LgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcjFfbGF0Y2g7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyMV9nZXR0aW1lb2Zmc2V0ICh2b2lkKQorc3RhdGljIGN5Y2xlX3QgY2tzcmNfZGMyMTI4NV9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZSA9IHRpbWVyMV9sYXRjaCAtICpDU1JfVElNRVIxX1ZBTFVFOwotCi0JcmV0dXJuICgodGlja19uc2VjIC8gMTAwMCkgKiB2YWx1ZSkgLyB0aW1lcjFfbGF0Y2g7CisJcmV0dXJuIGNzLT5tYXNrIC0gKkNTUl9USU1FUjJfVkFMVUU7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdAotdGltZXIxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaW50IGNrc3JjX2RjMjEyODVfZW5hYmxlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CisJKkNTUl9USU1FUjJfTE9BRCA9IGNzLT5tYXNrOworCSpDU1JfVElNRVIyX0NMUiA9IDA7CisJKkNTUl9USU1FUjJfQ05UTCA9IFRJTUVSX0NOVExfRU5BQkxFIHwgVElNRVJfQ05UTF9ESVYxNjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBja3NyY19kYzIxMjg1X2Rpc2FibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwkqQ1NSX1RJTUVSMl9DTlRMID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBja3NyY19kYzIxMjg1ID0geworCS5uYW1lCQk9ICJkYzIxMjg1X3RpbWVyMiIsCisJLnJhdGluZwkJPSAyMDAsCisJLnJlYWQJCT0gY2tzcmNfZGMyMTI4NV9yZWFkLAorCS5lbmFibGUJCT0gY2tzcmNfZGMyMTI4NV9lbmFibGUsCisJLmRpc2FibGUJPSBja3NyY19kYzIxMjg1X2Rpc2FibGUsCisJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygyNCksCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworc3RhdGljIHZvaWQgY2tldnRfZGMyMTI4NV9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjKQoreworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCSpDU1JfVElNRVIxX0NMUiA9IDA7CisJCSpDU1JfVElNRVIxX0xPQUQgPSAobWVtX2ZjbGtfMjEyODUgKyA4ICogSFopIC8gKDE2ICogSFopOworCQkqQ1NSX1RJTUVSMV9DTlRMID0gVElNRVJfQ05UTF9FTkFCTEUgfCBUSU1FUl9DTlRMX0FVVE9SRUxPQUQgfAorCQkJCSAgIFRJTUVSX0NOVExfRElWMTY7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJKkNTUl9USU1FUjFfQ05UTCA9IDA7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2tldnRfZGMyMTI4NSA9IHsKKwkubmFtZQkJPSAiZGMyMTI4NV90aW1lcjEiLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDLAorCS5yYXRpbmcJCT0gMjAwLAorCS5pcnEJCT0gSVJRX1RJTUVSMSwKKwkuc2V0X21vZGUJPSBja2V2dF9kYzIxMjg1X3NldF9tb2RlLAorfTsKKworc3RhdGljIGlycXJldHVybl90IHRpbWVyMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlID0gZGV2X2lkOworCiAJKkNTUl9USU1FUjFfQ0xSID0gMDsKIAotCXRpbWVyX3RpY2soKTsKKwljZS0+ZXZlbnRfaGFuZGxlcihjZSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGZvb3RicmlkZ2VfdGltZXJfaXJxID0gewotCS5uYW1lCQk9ICJUaW1lcjEgdGltZXIgdGljayIsCisJLm5hbWUJCT0gImRjMjEyODVfdGltZXIxIiwKIAkuaGFuZGxlcgk9IHRpbWVyMV9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAorCS5kZXZfaWQJCT0gJmNrZXZ0X2RjMjEyODUsCiB9OwogCiAvKgpAQCAtNDksMTYgKzk0LDE5IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBmb290YnJpZGdlX3RpbWVyX2luaXQodm9pZCkKIHsKLQl0aW1lcjFfbGF0Y2ggPSAobWVtX2ZjbGtfMjEyODUgKyA4ICogSFopIC8gKDE2ICogSFopOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlID0gJmNrZXZ0X2RjMjEyODU7CiAKLQkqQ1NSX1RJTUVSMV9DTFIgID0gMDsKLQkqQ1NSX1RJTUVSMV9MT0FEID0gdGltZXIxX2xhdGNoOwotCSpDU1JfVElNRVIxX0NOVEwgPSBUSU1FUl9DTlRMX0VOQUJMRSB8IFRJTUVSX0NOVExfQVVUT1JFTE9BRCB8IFRJTUVSX0NOVExfRElWMTY7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNrc3JjX2RjMjEyODUsIChtZW1fZmNsa18yMTI4NSArIDgpIC8gMTYpOwogCi0Jc2V0dXBfaXJxKElSUV9USU1FUjEsICZmb290YnJpZGdlX3RpbWVyX2lycSk7CisJc2V0dXBfaXJxKGNlLT5pcnEsICZmb290YnJpZGdlX3RpbWVyX2lycSk7CisKKwljbG9ja2V2ZW50c19jYWxjX211bHRfc2hpZnQoY2UsIG1lbV9mY2xrXzIxMjg1LCA1KTsKKwljZS0+bWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZiwgY2UpOworCWNlLT5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4MDAwMDA0LCBjZSk7CisKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2UpOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIGZvb3RicmlkZ2VfdGltZXIgPSB7CiAJLmluaXQJCT0gZm9vdGJyaWRnZV90aW1lcl9pbml0LAotCS5vZmZzZXQJCT0gdGltZXIxX2dldHRpbWVvZmZzZXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDNjOWUwYzQuLjMwYjk3MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTE3LDggKzE3LDggQEAKIAkvKiBGb3IgTmV0V2luZGVyIGRlYnVnZ2luZyAqLwogCQkubWFjcm8JYWRkcnVhcnQsIHJwLCBydgogCQltb3YJXHJwLCAjMHgwMDAwMDNmOAotCQlvcnIJXHJ2LCBccnAsICMweDdjMDAwMDAwCUAgcGh5c2ljYWwKLQkJb3JyCVxycCwgXHJwLCAjMHhmZjAwMDAwMAlAIHZpcnR1YWwKKwkJb3JyCVxydiwgXHJwLCAjMHhmZjAwMDAwMAlAIHZpcnR1YWwKKwkJb3JyCVxycCwgXHJwLCAjMHg3YzAwMDAwMAlAIHBoeXNpY2FsCiAJCS5lbmRtCiAKICNkZWZpbmUgVUFSVF9TSElGVAkwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMKaW5kZXggZjQ4OGZhMi4uNDQxYzZjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYwpAQCAtNCwxMCArNCwxMyBAQAogICogIENvcHlyaWdodCAoQykgMTk5OCBSdXNzZWxsIEtpbmcuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFBoaWwgQmx1bmRlbGwKICAqLworI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKQEAgLTE1LDc3ICsxOCwxMTUgQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCi0vKgotICogSVNBIHRpbWVyIHRpY2sgc3VwcG9ydAotICovCi0jZGVmaW5lIG1TRUNfMTBfZnJvbV8xNCAoKDE0MzE4MTgwICsgMTAwKSAvIDIwMCkKKyNkZWZpbmUgUElUX01PREUJMHg0MworI2RlZmluZSBQSVRfQ0gwCQkweDQwCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGlzYV9nZXR0aW1lb2Zmc2V0KHZvaWQpCisjZGVmaW5lIFBJVF9MQVRDSAkoKFBJVF9USUNLX1JBVEUgKyBIWiAvIDIpIC8gSFopCisKK3N0YXRpYyBjeWNsZV90IHBpdF9yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdGF0aWMgaW50IG9sZF9jb3VudDsKKwlzdGF0aWMgdTMyIG9sZF9qaWZzOwogCWludCBjb3VudDsKKwl1MzIgamlmczsKIAotCXN0YXRpYyBpbnQgY291bnRfcCA9IChtU0VDXzEwX2Zyb21fMTQvNik7ICAgIC8qIGZvciB0aGUgZmlyc3QgY2FsbCBhZnRlciBib290ICovCi0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19wID0gMDsKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0JLyoKLQkgKiBjYWNoZSB2b2xhdGlsZSBqaWZmaWVzIHRlbXBvcmFyaWx5OyB3ZSBoYXZlIElSUXMgdHVybmVkIG9mZi4gCi0JICovCi0JdW5zaWduZWQgbG9uZyBqaWZmaWVzX3Q7CisJamlmcyA9IGppZmZpZXM7CisJb3V0Yl9wKDB4MDAsIFBJVF9NT0RFKTsJCS8qIGxhdGNoIHRoZSBjb3VudCAqLworCWNvdW50ID0gaW5iX3AoUElUX0NIMCk7CQkvKiByZWFkIHRoZSBsYXRjaGVkIGNvdW50ICovCisJY291bnQgfD0gaW5iX3AoUElUX0NIMCkgPDwgODsKIAotCS8qIHRpbWVyIGNvdW50IG1heSB1bmRlcmZsb3cgcmlnaHQgaGVyZSAqLwotCW91dGJfcCgweDAwLCAweDQzKTsJLyogbGF0Y2ggdGhlIGNvdW50IEFTQVAgKi8KKwlpZiAoY291bnQgPiBvbGRfY291bnQgJiYgamlmcyA9PSBvbGRfamlmcykKKwkJY291bnQgPSBvbGRfY291bnQ7CiAKLQljb3VudCA9IGluYl9wKDB4NDApOwkvKiByZWFkIHRoZSBsYXRjaGVkIGNvdW50ICovCisJb2xkX2NvdW50ID0gY291bnQ7CisJb2xkX2ppZnMgPSBqaWZzOwogCi0JLyoKLQkgKiBXZSBkbyB0aGlzIGd1YXJhbnRlZWQgZG91YmxlIG1lbW9yeSBhY2Nlc3MgaW5zdGVhZCBvZiBhIF9wIAotCSAqIHBvc3RmaXggaW4gdGhlIHByZXZpb3VzIHBvcnQgYWNjZXNzLiBXaGVlZSwgaGFja2FkeSBoYWNrCi0JICovCi0gCWppZmZpZXNfdCA9IGppZmZpZXM7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCWNvdW50IHw9IGluYl9wKDB4NDApIDw8IDg7CisJY291bnQgPSAoUElUX0xBVENIIC0gMSkgLSBjb3VudDsKIAotCS8qIERldGVjdCB0aW1lciB1bmRlcmZsb3dzLiAgSWYgd2UgaGF2ZW4ndCBoYWQgYSB0aW1lciB0aWNrIHNpbmNlIAotCSAgIHRoZSBsYXN0IHRpbWUgd2Ugd2VyZSBjYWxsZWQsIGFuZCB0aW1lIGlzIGFwcGFyZW50bHkgZ29pbmcKLQkgICBiYWNrd2FyZHMsIHRoZSBjb3VudGVyIG11c3QgaGF2ZSB3cmFwcGVkIGR1cmluZyB0aGlzIHJvdXRpbmUuICovCi0JaWYgKChqaWZmaWVzX3QgPT0gamlmZmllc19wKSAmJiAoY291bnQgPiBjb3VudF9wKSkKLQkJY291bnQgLT0gKG1TRUNfMTBfZnJvbV8xNC82KTsKLQllbHNlCi0JCWppZmZpZXNfcCA9IGppZmZpZXNfdDsKLQotCWNvdW50X3AgPSBjb3VudDsKLQotCWNvdW50ID0gKCgobVNFQ18xMF9mcm9tXzE0LzYpLTEpIC0gY291bnQpICogKHRpY2tfbnNlYyAvIDEwMDApOwotCWNvdW50ID0gKGNvdW50ICsgKG1TRUNfMTBfZnJvbV8xNC82KS8yKSAvIChtU0VDXzEwX2Zyb21fMTQvNik7Ci0KLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIChjeWNsZV90KShqaWZzICogUElUX0xBVENIKSArIGNvdW50OwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QKLWlzYV90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBwaXRfY3MgPSB7CisJLm5hbWUJCT0gInBpdCIsCisJLnJhdGluZwkJPSAxMTAsCisJLnJlYWQJCT0gcGl0X3JlYWQsCisJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCit9OworCitzdGF0aWMgdm9pZCBwaXRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQogewotCXRpbWVyX3RpY2soKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCW91dGJfcCgweDM0LCBQSVRfTU9ERSk7CisJCW91dGJfcChQSVRfTEFUQ0ggJiAweGZmLCBQSVRfQ0gwKTsKKwkJb3V0Yl9wKFBJVF9MQVRDSCA+PiA4LCBQSVRfQ0gwKTsKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCQlvdXRiX3AoMHgzMCwgUElUX01PREUpOworCQlvdXRiX3AoMCwgUElUX0NIMCk7CisJCW91dGJfcCgwLCBQSVRfQ0gwKTsKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJCWJyZWFrOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcGl0X3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBwaXRfY2UgPSB7CisJLm5hbWUJCT0gInBpdCIsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMsCisJLnNldF9tb2RlCT0gcGl0X3NldF9tb2RlLAorCS5zZXRfbmV4dF9ldmVudAk9IHBpdF9zZXRfbmV4dF9ldmVudCwKKwkuc2hpZnQJCT0gMzIsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgcGl0X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2UgPSBkZXZfaWQ7CisJY2UtPmV2ZW50X2hhbmRsZXIoY2UpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXNhX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiSVNBIHRpbWVyIHRpY2siLAotCS5oYW5kbGVyCT0gaXNhX3RpbWVyX2ludGVycnVwdCwKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHBpdF90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gInBpdCIsCisJLmhhbmRsZXIJPSBwaXRfdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuZGV2X2lkCQk9ICZwaXRfY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgaXNhX3RpbWVyX2luaXQodm9pZCkKIHsKLQkvKiBlbmFibGUgUElUIHRpbWVyICovCi0JLyogc2V0IGZvciBwZXJpb2RpYyAoNCkgYW5kIExTQi9NU0Igd3JpdGUgKDB4MzApICovCi0Jb3V0YigweDM0LCAweDQzKTsKLQlvdXRiKChtU0VDXzEwX2Zyb21fMTQvNikgJiAweEZGLCAweDQwKTsKLQlvdXRiKChtU0VDXzEwX2Zyb21fMTQvNikgPj4gOCwgMHg0MCk7CisJcGl0X2NlLmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcGl0X2NlLm11bHQgPSBkaXZfc2MoUElUX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLCBwaXRfY2Uuc2hpZnQpOworCXBpdF9jZS5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4N2ZmZiwgJnBpdF9jZSk7CisJcGl0X2NlLm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHgwMDBmLCAmcGl0X2NlKTsKIAotCXNldHVwX2lycShJUlFfSVNBX1RJTUVSLCAmaXNhX3RpbWVyX2lycSk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJnBpdF9jcywgUElUX1RJQ0tfUkFURSk7CisKKwlzZXR1cF9pcnEocGl0X2NlLmlycSwgJnBpdF90aW1lcl9pcnEpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmcGl0X2NlKTsKIH0KIAogc3RydWN0IHN5c190aW1lciBpc2FfdGltZXIgPSB7CiAJLmluaXQJCT0gaXNhX3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSBpc2FfZ2V0dGltZW9mZnNldCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC1uYXM0MjIwYi5jIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvYm9hcmQtbmFzNDIyMGIuYwppbmRleCAyYmEwOTZkLi4wY2Y3YTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC1uYXM0MjIwYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLW5hczQyMjBiLmMKQEAgLTk4LDYgKzk4LDcgQEAKIAlwbGF0Zm9ybV9yZWdpc3Rlcl9wZmxhc2goU1pfMTZNLCBOVUxMLCAwKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmliNDIyMGJfbGVkX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpYjQyMjBiX2tleV9kZXZpY2UpOworCXBsYXRmb3JtX3JlZ2lzdGVyX3J0YygpOwogfQogCiBNQUNISU5FX1NUQVJUKE5BUzQyMjBCLCAiUmFpZHNvbmljIE5BUyBJQi00MjIwLUIiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvYm9hcmQtcnV0MXh4LmMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC1ydXQxeHguYwppbmRleCBhOWEwZDhiLi40ZmEwOWFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC1ydXQxeHguYworKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC1ydXQxeHguYwpAQCAtODIsNiArODIsNyBAQAogCXBsYXRmb3JtX3JlZ2lzdGVyX3BmbGFzaChTWl84TSwgTlVMTCwgMCk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydXQxeHhfbGVkcyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydXQxeHhfa2V5c19kZXZpY2UpOworCXBsYXRmb3JtX3JlZ2lzdGVyX3J0YygpOwogfQogCiBNQUNISU5FX1NUQVJUKFJVVDEwMCwgIlRlbHRvbmlrYSBSVVQxMDAiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvYm9hcmQtd2JkMTExLmMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC13YmQxMTEuYwppbmRleCA4Yjg4ZDUwLi5hZjdiNjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC13YmQxMTEuYworKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC13YmQxMTEuYwpAQCAtMTMwLDYgKzEzMCw3IEBACiAJCQkJIHdiZDExMV9udW1fcGFydGl0aW9ucyk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3YmQxMTFfbGVkc19kZXZpY2UpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmd2JkMTExX2tleXNfZGV2aWNlKTsKKwlwbGF0Zm9ybV9yZWdpc3Rlcl9ydGMoKTsKIH0KIAogTUFDSElORV9TVEFSVChXQkQxMTEsICJXaWxpYm9hcmQgV0JELTExMSIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC13YmQyMjIuYyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLXdiZDIyMi5jCmluZGV4IDFlZWJjZWMuLjk5ZTViYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLXdiZDIyMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLXdiZDIyMi5jCkBAIC0xMzAsNiArMTMwLDcgQEAKIAkJd2JkMjIyX251bV9wYXJ0aXRpb25zKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndiZDIyMl9sZWRzX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3YmQyMjJfa2V5c19kZXZpY2UpOworCXBsYXRmb3JtX3JlZ2lzdGVyX3J0YygpOwogfQogCiBNQUNISU5FX1NUQVJUKFdCRDIyMiwgIldpbGlib2FyZCBXQkQtMjIyIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvY29tbW9uLmgKaW5kZXggOTM5MjgzNC4uNzY3MGMzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvY29tbW9uLmgKQEAgLTE4LDYgKzE4LDcgQEAKIGV4dGVybiB2b2lkIGdlbWluaV9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIGdlbWluaV90aW1lcl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZ2VtaW5pX2dwaW9faW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHBsYXRmb3JtX3JlZ2lzdGVyX3J0Yyh2b2lkKTsKIAogLyogQ29tbW9uIHBsYXRmb3JtIGRldmljZXMgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBwbGF0Zm9ybV9yZWdpc3Rlcl91YXJ0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZGV2aWNlcy5jCmluZGV4IDZiNTI1MjUuLjVjZmYyOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9kZXZpY2VzLmMKQEAgLTkwLDMgKzkwLDI5IEBACiAKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwZmxhc2hfZGV2aWNlKTsKIH0KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBnZW1pbmlfcnRjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IEdFTUlOSV9SVENfQkFTRSwKKwkJLmVuZCAgICA9IEdFTUlOSV9SVENfQkFTRSArIDB4MjQsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IElSUV9SVEMsCisJCS5lbmQgICAgPSBJUlFfUlRDLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGdlbWluaV9ydGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJydGMtZ2VtaW5pIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZ2VtaW5pX3J0Y19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGdlbWluaV9ydGNfcmVzb3VyY2VzLAorfTsKKworaW50IF9faW5pdCBwbGF0Zm9ybV9yZWdpc3Rlcl9ydGModm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZnZW1pbmlfcnRjX2RldmljZSk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYwppbmRleCBhYTc2Y2ZkLi44MzgyZTc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI1XzNkcy5jCkBAIC0xODAsNyArMTgwLDcgQEAKIAlLRVkoMywgMywgS0VZX1BPV0VSKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjVwZGtfa2V5bWFwX2RhdGEgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjVwZGtfa2V5bWFwX2RhdGEgX19pbml0Y29uc3QgPSB7CiAJLmtleW1hcAkJPSBteDI1cGRrX2tleW1hcCwKIAkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG14MjVwZGtfa2V5bWFwKSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IDRkYzY4ZDYuLjlmZDg5NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi11bnNpZ25lZCBsb25nIGl4cDR4eF90aW1lcl9mcmVxID0gRlJFUTsKK3Vuc2lnbmVkIGxvbmcgaXhwNHh4X3RpbWVyX2ZyZXEgPSBJWFA0WFhfVElNRVJfRlJFUTsKIEVYUE9SVF9TWU1CT0woaXhwNHh4X3RpbWVyX2ZyZXEpOwogc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCiB7CkBAIC00OTYsNyArNDk2LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF9jbG9ja2V2ZW50X2luaXQodm9pZCkKIHsKLQljbG9ja2V2ZW50X2l4cDR4eC5tdWx0ID0gZGl2X3NjKEZSRVEsIE5TRUNfUEVSX1NFQywKKwljbG9ja2V2ZW50X2l4cDR4eC5tdWx0ID0gZGl2X3NjKElYUDRYWF9USU1FUl9GUkVRLCBOU0VDX1BFUl9TRUMsCiAJCQkJCWNsb2NrZXZlbnRfaXhwNHh4LnNoaWZ0KTsKIAljbG9ja2V2ZW50X2l4cDR4eC5tYXhfZGVsdGFfbnMgPQogCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmUsICZjbG9ja2V2ZW50X2l4cDR4eCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCmluZGV4IDJjM2Y5M2MuLmM5ZTkzMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0xMCw2ICsxMCw3IEBACiAgKiA2Ni42Ni4uLiBNSHouIFdlIGRvIGEgY29udnVsdGVkIGNhbGN1bGF0aW9uIG9mIENMT0NLX1RJQ0tfUkFURSBiL2MgdGhlCiAgKiB0aW1lciByZWdpc3RlciBpZ25vcmVzIHRoZSBib3R0b20gMiBiaXRzIG9mIHRoZSBMQVRDSCB2YWx1ZS4KICAqLwotI2RlZmluZSBGUkVRIDY2NjY2MDAwCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAoKChGUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQorI2RlZmluZSBJWFA0WFhfVElNRVJfRlJFUSA2NjY2NjAwMAorI2RlZmluZSBDTE9DS19USUNLX1JBVEUgXAorCSgoKElYUDRYWF9USU1FUl9GUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X3FtZ3IuYwppbmRleCBiZmRiZTRiLi44NTJmN2M5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9xbWdyLmMKQEAgLTI2NSw2ICsyNjUsMTEgQEAKIAkgICAgICAgcW1ncl9xdWV1ZV9kZXNjc1txdWV1ZV0sIHF1ZXVlKTsKIAlxbWdyX3F1ZXVlX2Rlc2NzW3F1ZXVlXVswXSA9ICdceDAnOwogI2VuZGlmCisKKwl3aGlsZSAoKGFkZHIgPSBxbWdyX2dldF9lbnRyeShxdWV1ZSkpKQorCQlwcmludGsoS0VSTl9FUlIgInFtZ3I6IHJlbGVhc2VkIHF1ZXVlICVpIG5vdCBlbXB0eTogMHglMDhYXG4iLAorCQkgICAgICAgcXVldWUsIGFkZHIpOworCiAJX19yYXdfd3JpdGVsKDAsICZxbWdyX3JlZ3MtPnNyYW1bcXVldWVdKTsKIAogCXVzZWRfc3JhbV9iaXRtYXBbMF0gJj0gfm1hc2tbMF07CkBAIC0yNzUsMTAgKzI4MCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZxbWdyX2xvY2spOwogCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0KLQl3aGlsZSAoKGFkZHIgPSBxbWdyX2dldF9lbnRyeShxdWV1ZSkpKQotCQlwcmludGsoS0VSTl9FUlIgInFtZ3I6IHJlbGVhc2VkIHF1ZXVlICVpIG5vdCBlbXB0eTogMHglMDhYXG4iLAotCQkgICAgICAgcXVldWUsIGFkZHIpOwogfQogCiBzdGF0aWMgaW50IHFtZ3JfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jCmluZGV4IGIxYTM2MmUuLmNhNzJhMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDIzLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKIAlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJCVwKIAlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAotCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAorCWlmIChyZWcgJiAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAogCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJfQkJCQkJCQkJXApAQCAtMzQ3LDcgKzM0Nyw3IEBACiB7CQkJCQkJCQkJXAogCWlmIChwYXJlbnQgIT0gY2xrLT5wYXJlbnQpIHsJCQkJCVwKIAkJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU18jI2JpdCwJCVwKLQkJCSBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwkJCVwKKwkJCSBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ0xLU0VRX1RPRyk7CVwKIAkJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CQkJCQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCmluZGV4IDU2MzEyYzAuLmZkMWM0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKQEAgLTM1NSwxMiArMzU1LDEyIEBACiAJfSBlbHNlIHsJCQkJCQkJXAogCQlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAogCQlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQlcCi0JCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQlcCisJCWlmIChyZWcgJiAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQlcCiAJCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwlcCiAJCQlyZXR1cm4gLUVJTlZBTDsJCQkJCVwKIAkJfQkJCQkJCQlcCiAJfQkJCQkJCQkJXAotCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DUFUpOwkJXAorCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKIAkJCQkJCQkJCVwKIAlmb3IgKGkgPSAxMDAwMDsgaTsgaS0tKQkJCQkJCVwKIAkJaWYgKCEoX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKwkJCVwKQEAgLTQ4Myw3ICs0ODMsNyBAQAogewkJCQkJCQkJCVwKIAlpZiAocGFyZW50ICE9IGNsay0+cGFyZW50KSB7CQkJCQlcCiAJCV9fcmF3X3dyaXRlbChCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfIyNiaXQsCQlcCi0JCQkgSFdfQ0xLQ1RSTF9DTEtTRVFfVE9HKTsJCQlcCisJCQkgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwlcCiAJCWNsay0+cGFyZW50ID0gcGFyZW50OwkJCQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTYwOSw3ICs2MDksNiBAQAogCV9SRUdJU1RFUl9DTE9DSygiZHVhcnQiLCBOVUxMLCB1YXJ0X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDI4LWZlYy4wIiwgTlVMTCwgZmVjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDI4LWZlYy4xIiwgTlVMTCwgZmVjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImZlYy4wIiwgTlVMTCwgZmVjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soInJ0YyIsIE5VTEwsIHJ0Y19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJwbGwyIiwgTlVMTCwgcGxsMl9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJoY2xrIiwgaGJ1c19jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2suYwppbmRleCBlN2QyMjY5Li5hNzA5M2M4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLmMKQEAgLTU3LDcgKzU3LDYgQEAKIAkJaWYgKGNsay0+ZGlzYWJsZSkKIAkJCWNsay0+ZGlzYWJsZShjbGspOwogCQlfX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLQkJX19jbGtfZGlzYWJsZShjbGstPnNlY29uZGFyeSk7CiAJfQogfQogCkBAIC02OCw3ICs2Nyw2IEBACiAKIAlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKIAkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKLQkJX19jbGtfZW5hYmxlKGNsay0+c2Vjb25kYXJ5KTsKIAogCQlpZiAoY2xrLT5lbmFibGUpCiAJCQljbGstPmVuYWJsZShjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jCmluZGV4IGQ3YWQ3YTYuLjYxOTkxZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9ncGlvLmMKQEAgLTY4LDI5ICs2OCwyOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbXhzX2dwaW9fYWNrX2lycSh1MzIgaXJxKQorc3RhdGljIHZvaWQgbXhzX2dwaW9fYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdTMyIGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oZC0+aXJxKTsKIAljbGVhcl9ncGlvX2lycXN0YXR1cygmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXSwgZ3BpbyAmIDB4MWYpOwogfQogCi1zdGF0aWMgdm9pZCBteHNfZ3Bpb19tYXNrX2lycSh1MzIgaXJxKQorc3RhdGljIHZvaWQgbXhzX2dwaW9fbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJc2V0X2dwaW9faXJxZW5hYmxlKCZteHNfZ3Bpb19wb3J0c1tncGlvIC8gMzJdLCBncGlvICYgMHgxZiwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIG14c19ncGlvX3VubWFza19pcnEodTMyIGlycSkKK3N0YXRpYyB2b2lkIG14c19ncGlvX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJc2V0X2dwaW9faXJxZW5hYmxlKCZteHNfZ3Bpb19wb3J0c1tncGlvIC8gMzJdLCBncGlvICYgMHgxZiwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgbXhzX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7CiAKLXN0YXRpYyBpbnQgbXhzX2dwaW9fc2V0X2lycV90eXBlKHUzMiBpcnEsIHUzMiB0eXBlKQorc3RhdGljIGludCBteHNfZ3Bpb19zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGlycSk7CisJdTMyIGdwaW8gPSBpcnFfdG9fZ3BpbyhkLT5pcnEpOwogCXUzMiBwaW5fbWFzayA9IDEgPDwgKGdwaW8gJiAzMSk7CiAJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPSAmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXTsKIAl2b2lkIF9faW9tZW0gKnBpbl9hZGRyOwpAQCAtMTM5LDYgKzEzOSw4IEBACiAJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPSAoc3RydWN0IG14c19ncGlvX3BvcnQgKilnZXRfaXJxX2RhdGEoaXJxKTsKIAl1MzIgZ3Bpb19pcnFfbm9fYmFzZSA9IHBvcnQtPnZpcnR1YWxfaXJxX3N0YXJ0OwogCisJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2FjaygmZGVzYy0+aXJxX2RhdGEpOworCiAJaXJxX3N0YXQgPSBfX3Jhd19yZWFkbChwb3J0LT5iYXNlICsgUElOQ1RSTF9JUlFTVEFUKHBvcnQtPmlkKSkgJgogCQkJX19yYXdfcmVhZGwocG9ydC0+YmFzZSArIFBJTkNUUkxfSVJRRU4ocG9ydC0+aWQpKTsKIApAQCAtMTU4LDkgKzE2MCw5IEBACiAgKiBAcGFyYW0gIGVuYWJsZSAgICAgICBlbmFibGUgYXMgd2FrZS11cCBpZiBlcXVhbCB0byBub24temVybwogICogQHJldHVybiAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1zdGF0aWMgaW50IG14c19ncGlvX3NldF93YWtlX2lycSh1MzIgaXJxLCB1MzIgZW5hYmxlKQorc3RhdGljIGludCBteHNfZ3Bpb19zZXRfd2FrZV9pcnEoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZW5hYmxlKQogewotCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJdTMyIGdwaW9faWR4ID0gZ3BpbyAmIDB4MWY7CiAJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPSAmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXTsKIApAQCAtMTgwLDExICsxODIsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncGlvX2lycV9jaGlwID0gewotCS5hY2sgPSBteHNfZ3Bpb19hY2tfaXJxLAotCS5tYXNrID0gbXhzX2dwaW9fbWFza19pcnEsCi0JLnVubWFzayA9IG14c19ncGlvX3VubWFza19pcnEsCi0JLnNldF90eXBlID0gbXhzX2dwaW9fc2V0X2lycV90eXBlLAotCS5zZXRfd2FrZSA9IG14c19ncGlvX3NldF93YWtlX2lycSwKKwkuaXJxX2FjayA9IG14c19ncGlvX2Fja19pcnEsCisJLmlycV9tYXNrID0gbXhzX2dwaW9fbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBteHNfZ3Bpb191bm1hc2tfaXJxLAorCS5pcnFfc2V0X3R5cGUgPSBteHNfZ3Bpb19zZXRfaXJxX3R5cGUsCisJLmlycV9zZXRfd2FrZSA9IG14c19ncGlvX3NldF93YWtlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIG14c19zZXRfZ3Bpb19kaXJlY3Rpb24oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaWNvbGwuYyBiL2FyY2gvYXJtL21hY2gtbXhzL2ljb2xsLmMKaW5kZXggNWRkNDNiYS4uMGY0YzEyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvaWNvbGwuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9pY29sbC5jCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmljb2xsX2Jhc2UgPSBNWFNfSU9fQUREUkVTUyhNWFNfSUNPTExfQkFTRV9BRERSKTsKIAotc3RhdGljIHZvaWQgaWNvbGxfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgaWNvbGxfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyoKIAkgKiBUaGUgSW50ZXJydXB0IENvbGxlY3RvciBpcyBhYmxlIHRvIHByaW9yaXRpemUgaXJxcy4KQEAgLTQ1LDIyICs0NSwyMiBAQAogCQkJaWNvbGxfYmFzZSArIEhXX0lDT0xMX0xFVkVMQUNLKTsKIH0KIAotc3RhdGljIHZvaWQgaWNvbGxfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGljb2xsX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlfX3Jhd193cml0ZWwoQk1fSUNPTExfSU5URVJSVVBUbl9FTkFCTEUsCi0JCQlpY29sbF9iYXNlICsgSFdfSUNPTExfSU5URVJSVVBUbl9DTFIoaXJxKSk7CisJCQlpY29sbF9iYXNlICsgSFdfSUNPTExfSU5URVJSVVBUbl9DTFIoZC0+aXJxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGljb2xsX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGljb2xsX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCV9fcmF3X3dyaXRlbChCTV9JQ09MTF9JTlRFUlJVUFRuX0VOQUJMRSwKLQkJCWljb2xsX2Jhc2UgKyBIV19JQ09MTF9JTlRFUlJVUFRuX1NFVChpcnEpKTsKKwkJCWljb2xsX2Jhc2UgKyBIV19JQ09MTF9JTlRFUlJVUFRuX1NFVChkLT5pcnEpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBteHNfaWNvbGxfY2hpcCA9IHsKLQkuYWNrID0gaWNvbGxfYWNrX2lycSwKLQkubWFzayA9IGljb2xsX21hc2tfaXJxLAotCS51bm1hc2sgPSBpY29sbF91bm1hc2tfaXJxLAorCS5pcnFfYWNrID0gaWNvbGxfYWNrX2lycSwKKwkuaXJxX21hc2sgPSBpY29sbF9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IGljb2xsX3VubWFza19pcnEsCiB9OwogCiB2b2lkIF9faW5pdCBpY29sbF9pbml0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY2xvY2suaAppbmRleCAwNDFlMjc2Li41OTJjOWFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY2xvY2suaApAQCAtMjksOCArMjksNiBAQAogCWludCBpZDsKIAkvKiBTb3VyY2UgY2xvY2sgdGhpcyBjbGsgZGVwZW5kcyBvbiAqLwogCXN0cnVjdCBjbGsgKnBhcmVudDsKLQkvKiBTZWNvbmRhcnkgY2xvY2sgdG8gZW5hYmxlL2Rpc2FibGUgd2l0aCB0aGlzIGNsb2NrICovCi0Jc3RydWN0IGNsayAqc2Vjb25kYXJ5OwogCS8qIFJlZmVyZW5jZSBjb3VudCBvZiBjbG9jayBlbmFibGUvZGlzYWJsZSAqLwogCV9fczggdXNlY291bnQ7CiAJLyogUmVnaXN0ZXIgYml0IHBvc2l0aW9uIGZvciBjbG9jaydzIGVuYWJsZS9kaXNhYmxlIGNvbnRyb2wuICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBjOWJlNmQ0Li5iZmI0ZmIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTE0LDE5ICsxNCw2IEBACiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogCi0vKgotICogV2UgdXNlIF9fZ2x1ZSB0byBhdm9pZCBlcnJvcnMgd2l0aCBtdWx0aXBsZSBkZWZpbml0aW9ucyBvZgotICogLmdsb2JsIG9tYXBfaXJxX2ZsYWdzIGFzIGl0J3MgaW5jbHVkZWQgZnJvbSBlbnRyeS1hcm12LlMgYnV0IG5vdAotICogZnJvbSBlbnRyeS1jb21tb24uUy4KLSAqLwotI2lmZGVmIF9fZ2x1ZQotCQkucHVzaHNlY3Rpb24gLmRhdGEKLQkJLmdsb2JsCW9tYXBfaXJxX2ZsYWdzCi1vbWFwX2lycV9mbGFnczoKLQkJLndvcmQJMAotCQkucG9wc2VjdGlvbgotI2VuZGlmCi0KICAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwppbmRleCA0NzcwMTU4Li43MzFkZDMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAl1bnNpZ25lZCBsb25nIHdha2VfZW5hYmxlOwogfTsKIAordTMyIG9tYXBfaXJxX2ZsYWdzOwogc3RhdGljIHVuc2lnbmVkIGludCBpcnFfYmFua19jb3VudDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqaXJxX2JhbmtzOwogCkBAIC0xNzYsNyArMTc3LDYgQEAKIAogdm9pZCBfX2luaXQgb21hcF9pbml0X2lycSh2b2lkKQogewotCWV4dGVybiB1bnNpZ25lZCBpbnQgb21hcF9pcnFfZmxhZ3M7CiAJaW50IGksIGo7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKaW5kZXggYzkwODhkOC4uNDUzODA5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkgKiBPbiBPTUFQMTUxMCwgaW50ZXJuYWwgTENEIGNvbnRyb2xsZXIgd2lsbCBzdGFydCB0aGUgdHJhbnNmZXIKIAkgKiB3aGVuIGl0IGdldHMgZW5hYmxlZCwgc28gYXNzdW1lIERNQSBydW5uaW5nIGlmIExDRCBlbmFibGVkLgogCSAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCWlmIChvbWFwX3JlYWR3KE9NQVBfTENEQ19DT05UUk9MKSAmIE9NQVBfTENEQ19DVFJMX0xDRF9FTikKIAkJCXJldHVybiAxOwogCkBAIC05NSw3ICs5NSw3IEBACiAKIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9yb3RhdGlvbihpbnQgcm90YXRlKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRNQSByb3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIDE1MTAgbW9kZVxuIik7CiAJCUJVRygpOwogCQlyZXR1cm47CkBAIC0xMDYsNyArMTA2LDcgQEAKIAogdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX21pcnJvcihpbnQgbWlycm9yKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRNQSBtaXJyb3IgaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOwogCQlCVUcoKTsKIAl9CkBAIC0xMTYsNyArMTE2LDcgQEAKIAogdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3Z4cmVzKHVuc2lnbmVkIGxvbmcgdnhyZXMpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRE1BIHZpcnR1YWwgcmVzdWxvdGlvbiBpcyBub3Qgc3VwcG9ydGVkICIKIAkJCQkiaW4gMTUxMCBtb2RlXG4iKTsKIAkJQlVHKCk7CkBAIC0xMjcsNyArMTI3LDcgQEAKIAogdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3NjYWxlKHVuc2lnbmVkIGludCB4c2NhbGUsIHVuc2lnbmVkIGludCB5c2NhbGUpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRE1BIHNjYWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKIAkJQlVHKCk7CiAJfQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCQlib3R0b20gPSBQSVhBRERSKGxjZF9kbWEueHJlcyAtIDEsIGxjZF9kbWEueXJlcyAtIDEpOwogCQkJLyogMTUxMCBETUEgcmVxdWlyZXMgdGhlIGJvdHRvbSBhZGRyZXNzIHRvIGJlIDIgbW9yZQogCQkJICogdGhhbiB0aGUgYWN0dWFsIGxhc3QgbWVtb3J5IGFjY2VzcyBsb2NhdGlvbi4gKi8KLQkJCWlmIChjcHVfaXNfb21hcDE1MTAoKSAmJgorCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpICYmCiAJCQkJbGNkX2RtYS5kYXRhX3R5cGUgPT0gT01BUF9ETUFfREFUQV9UWVBFX1MzMikKIAkJCQkJYm90dG9tICs9IDI7CiAJCQllaSA9IFBJWFNURVAoMCwgMCwgMSwgMCk7CkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJcmV0dXJuOwkvKiBTdXBwcmVzcyB3YXJuaW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgdmFycyAqLwogCX0KIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlvbWFwX3dyaXRldyh0b3AgPj4gMTYsIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX1UpOwogCQlvbWFwX3dyaXRldyh0b3AsIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX0wpOwogCQlvbWFwX3dyaXRldyhib3R0b20gPj4gMTYsIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX1UpOwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCUJVRygpOwogCQlyZXR1cm47CiAJfQotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKIAkJb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiB+MSwKIAkJCSAgICBPTUFQMTYxMF9ETUFfTENEX0NDUik7CiAJbGNkX2RtYS5yZXNlcnZlZCA9IDA7CkBAIC0zNjAsNyArMzYwLDcgQEAKIAkgKiBjb25uZWN0ZWQuIE90aGVyd2lzZSB0aGUgT01BUCBpbnRlcm5hbCBjb250cm9sbGVyIHdpbGwKIAkgKiBzdGFydCB0aGUgdHJhbnNmZXIgd2hlbiBpdCBnZXRzIGVuYWJsZWQuCiAJICovCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQorCWlmIChjcHVfaXNfb21hcDE1eHgoKSB8fCAhbGNkX2RtYS5leHRfY3RybCkKIAkJcmV0dXJuOwogCiAJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKQEAgLTM3OCwxNCArMzc4LDE0IEBACiB2b2lkIG9tYXBfc2V0dXBfbGNkX2RtYSh2b2lkKQogewogCUJVR19PTihsY2RfZG1hLmFjdGl2ZSk7Ci0JaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmICghY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJLyogU2V0IHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0cyAqLwogCQlvbWFwX3dyaXRldygweDU0NDAsIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKIAkJb21hcF93cml0ZXcoMHg5MTAyLCBPTUFQMTYxMF9ETUFfTENEX0NTRFApOwogCQlvbWFwX3dyaXRldygweDAwMDQsIE9NQVAxNjEwX0RNQV9MQ0RfTENIX0NUUkwpOwogCX0KIAlzZXRfYjFfcmVncygpOwotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXUxNiB3OwogCiAJCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKQEAgLTQwNyw3ICs0MDcsNyBAQAogCXUxNiB3OwogCiAJbGNkX2RtYS5hY3RpdmUgPSAwOwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCAhbGNkX2RtYS5leHRfY3RybCkKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkgfHwgIWxjZF9kbWEuZXh0X2N0cmwpCiAJCXJldHVybjsKIAogCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMKaW5kZXggZjgzZmMzMy4uNjg4NWQyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYwppbmRleCBlOTA2ZTA1Li45YTJhMzFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYwpAQCAtMTE1LDkgKzExNSw2IEBACiAKIHN0YXRpYyBpbnQgZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfbGNkKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0dQSU8sIDB4ODAsIFJFR19HUElPREFUQURJUjEpOwotCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCAweDAsIDB4MCk7Ci0KIAlpZiAoZ3Bpb19pc192YWxpZChkc3NkZXYtPnJlc2V0X2dwaW8pKQogCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChkc3NkZXYtPnJlc2V0X2dwaW8sIDEpOwogCXJldHVybiAwOwpAQCAtMjQ3LDYgKzI0NCw4IEBACiBzdGF0aWMgaW50IGRldmtpdDgwMDBfdHdsX2dwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAogCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3BpbykKIHsKKwlpbnQgcmV0OworCiAJb21hcF9tdXhfaW5pdF9ncGlvKDI5LCBPTUFQX1BJTl9JTlBVVCk7CiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKQEAgLTI1NSwxNyArMjU0LDIzIEBACiAJLyogVFdMNDAzMF9HUElPX01BWCArIDEgPT0gbGVkQiwgUE1VX1NUQVQgKG91dCwgYWN0aXZlIGxvdyBMRUQpICovCiAJZ3Bpb19sZWRzWzJdLmdwaW8gPSBncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDE7CiAKLSAgICAgICAgLyogZ3BpbyArIDEgaXMgIkxDRF9QV1JFTiIgKG91dCwgYWN0aXZlIGhpZ2gpICovCi0JZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8gPSBncGlvICsgMTsKLQlncGlvX3JlcXVlc3QoZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8sICJMQ0RfUFdSRU4iKTsKLQkvKiBEaXNhYmxlIHVudGlsIG5lZWRlZCAqLwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbywgMCk7CisJLyogVFdMNDAzMF9HUElPX01BWCArIDAgaXMgIkxDRF9QV1JFTiIgKG91dCwgYWN0aXZlIGhpZ2gpICovCisJZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8gPSBncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDA7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbywKKwkJCUdQSU9GX0RJUl9PVVQgfCBHUElPRl9JTklUX0xPVywgIkxDRF9QV1JFTiIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvID0gLUVJTlZBTDsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPIGZvciBMQ0RfUFdSTlxuIik7CisJfQogCiAJLyogZ3BpbyArIDcgaXMgIkRWSV9QRCIgKG91dCwgYWN0aXZlIGxvdykgKi8KIAlkZXZraXQ4MDAwX2R2aV9kZXZpY2UucmVzZXRfZ3BpbyA9IGdwaW8gKyA3OwotCWdwaW9fcmVxdWVzdChkZXZraXQ4MDAwX2R2aV9kZXZpY2UucmVzZXRfZ3BpbywgIkRWSSBQb3dlckRvd24iKTsKLQkvKiBEaXNhYmxlIHVudGlsIG5lZWRlZCAqLwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChkZXZraXQ4MDAwX2R2aV9kZXZpY2UucmVzZXRfZ3BpbywgMCk7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0X29uZShkZXZraXQ4MDAwX2R2aV9kZXZpY2UucmVzZXRfZ3BpbywKKwkJCUdQSU9GX0RJUl9PVVQgfCBHUElPRl9JTklUX0xPVywgIkRWSSBQb3dlckRvd24iKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZraXQ4MDAwX2R2aV9kZXZpY2UucmVzZXRfZ3BpbyA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyBmb3IgRFZJIFBvd2VyRG93blxuIik7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDRwYW5kYS5jCmluZGV4IGUwMDFhMDQuLmU5NDQwMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDRwYW5kYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDRwYW5kYS5jCkBAIC00MDksOCArNDA5LDYgQEAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwYW5kYV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBhbmRhX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJb21hcDRfdHdsNjAzMF9oc21tY19pbml0KG1tYyk7Ci0JLyogT01BUDQgUGFuZGEgdXNlcyBpbnRlcm5hbCB0cmFuc2NlaXZlciBzbyByZWdpc3RlciBub3AgdHJhbnNjZWl2ZXIgKi8KLQl1c2Jfbm9wX3hjZWl2X3JlZ2lzdGVyKCk7CiAJb21hcDRfZWhjaV9pbml0KCk7CiAJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcm02ODAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcm02ODAuYwppbmRleCBjYjc3YmU3Li4zOWE3MWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1ybTY4MC5jCkBAIC00MCw5ICs0MCw2IEBACiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcm02ODBfdmVtbWMgPSB7CiAJLmNvbnN0cmFpbnRzID0JewogCQkubmFtZQkJCT0gInJtNjgwX3ZlbW1jIiwKLQkJLm1pbl91VgkJCT0gMjkwMDAwMCwKLQkJLm1heF91VgkJCT0gMjkwMDAwMCwKLQkJLmFwcGx5X3VWCQk9IDEsCiAJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCiAJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKIAkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2RwbGwuYwppbmRleCAzMzczOTJjLi5hY2I3YWU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdF9kcGxsLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAlkZCA9IGNsay0+ZHBsbF9kYXRhOwogCiAJLyogRFBMTCBkaXZpZGVyIG11c3QgcmVzdWx0IGluIGEgdmFsaWQgaml0dGVyIGNvcnJlY3Rpb24gdmFsICovCi0JZmludCA9IGNsay0+cGFyZW50LT5yYXRlIC8gKG4gKyAxKTsKKwlmaW50ID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBuOwogCWlmIChmaW50IDwgRFBMTF9GSU5UX0JBTkQxX01JTikgewogCiAJCXByX2RlYnVnKCJyZWplY3Rpbmcgbj0lZCBkdWUgdG8gRmludCBmYWlsdXJlLCAiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kbWEuYwppbmRleCBkMmYxNWY1Li4zNDkyMmIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCWlmIChJU19FUlIob2QpKSB7CiAJCXByX2VycigiJXM6IENhbnQgYnVpbGQgb21hcF9kZXZpY2UgZm9yICVzOiVzLlxuIiwKIAkJCV9fZnVuY19fLCBuYW1lLCBvaC0+bmFtZSk7Ci0JCXJldHVybiBJU19FUlIob2QpOworCQlyZXR1cm4gUFRSX0VSUihvZCk7CiAJfQogCiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKCZvZC0+cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggYmVmYTMyMS4uODE5ODVhNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0zOCwyMCArMzgsNiBAQAogICovCiAKICNpZmRlZiBNVUxUSV9PTUFQMgotCi0vKgotICogV2UgdXNlIF9fZ2x1ZSB0byBhdm9pZCBlcnJvcnMgd2l0aCBtdWx0aXBsZSBkZWZpbml0aW9ucyBvZgotICogLmdsb2JsIG9tYXBfaXJxX2Jhc2UgYXMgaXQncyBpbmNsdWRlZCBmcm9tIGVudHJ5LWFybXYuUyBidXQgbm90Ci0gKiBmcm9tIGVudHJ5LWNvbW1vbi5TLgotICovCi0jaWZkZWYgX19nbHVlCi0JCS5wdXNoc2VjdGlvbiAuZGF0YQotCQkuZ2xvYmwJb21hcF9pcnFfYmFzZQotb21hcF9pcnFfYmFzZToKLQkJLndvcmQJMAotCQkucG9wc2VjdGlvbgotI2VuZGlmCi0KIAkJLyoKIAkJICogQ29uZmlndXJlIHRoZSBpbnRlcnJ1cHQgYmFzZSBvbiB0aGUgZmlyc3QgaW50ZXJydXB0LgogCQkgKiBTZWUgYWxzbyBvbWFwX2lycV9iYXNlX2luaXQgZm9yIHNldHRpbmcgb21hcF9pcnFfYmFzZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwppbmRleCBlNjY2ODdiLi5jMjAzMjA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC0zMTQsMTQgKzMxNCwxMyBAQAogCXJldHVybiBvbWFwX2h3bW9kX3NldF9wb3N0c2V0dXBfc3RhdGUob2gsICoodTggKilkYXRhKTsKIH0KIAordm9pZCBfX2lvbWVtICpvbWFwX2lycV9iYXNlOworCiAvKgogICogSW5pdGlhbGl6ZSBhc21faXJxX2Jhc2UgZm9yIGVudHJ5LW1hY3JvLlMKICAqLwogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaXJxX2Jhc2VfaW5pdCh2b2lkKQogewotCWV4dGVybiB2b2lkIF9faW9tZW0gKm9tYXBfaXJxX2Jhc2U7Ci0KLSNpZmRlZiBNVUxUSV9PTUFQMgogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKIAkJb21hcF9pcnFfYmFzZSA9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0WFhfSUNfQkFTRSk7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCkBAIC0zMzAsNyArMzI5LDYgQEAKIAkJb21hcF9pcnFfYmFzZSA9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0WFhfR0lDX0NQVV9CQVNFKTsKIAllbHNlCiAJCXByX2VycigiQ291bGQgbm90IGluaXRpYWxpemUgb21hcF9pcnFfYmFzZVxuIik7Ci0jZW5kaWYKIH0KIAogdm9pZCBfX2luaXQgb21hcDJfaW5pdF9jb21tb25faW5mcmFzdHJ1Y3R1cmUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKaW5kZXggMzk0NDEzZC4uMjRiODg1MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKQEAgLTE5MywxMCArMTkzLDEyIEBACiAJCW9tYXBfbWJveF90eXBlX3QgaXJxKQogewogCXN0cnVjdCBvbWFwX21ib3gyX3ByaXYgKnAgPSBtYm94LT5wcml2OwotCXUzMiBsLCBiaXQgPSAoaXJxID09IElSUV9UWCkgPyBwLT5ub3RmdWxsX2JpdCA6IHAtPm5ld21zZ19iaXQ7Ci0JbCA9IG1ib3hfcmVhZF9yZWcocC0+aXJxZGlzYWJsZSk7Ci0JbCAmPSB+Yml0OwotCW1ib3hfd3JpdGVfcmVnKGwsIHAtPmlycWRpc2FibGUpOworCXUzMiBiaXQgPSAoaXJxID09IElSUV9UWCkgPyBwLT5ub3RmdWxsX2JpdCA6IHAtPm5ld21zZ19iaXQ7CisKKwlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQorCQliaXQgPSBtYm94X3JlYWRfcmVnKHAtPmlycWRpc2FibGUpICYgfmJpdDsKKworCW1ib3hfd3JpdGVfcmVnKGJpdCwgcC0+aXJxZGlzYWJsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXAyX21ib3hfYWNrX2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LApAQCAtMzM0LDcgKzMzNiw3IEBACiAJLnByaXYJPSAmb21hcDJfbWJveF9pdmFfcHJpdiwKIH07CiAKLXN0cnVjdCBvbWFwX21ib3ggKm9tYXAyX21ib3hlc1tdID0geyAmbWJveF9pdmFfaW5mbywgJm1ib3hfZHNwX2luZm8sIE5VTEwgfTsKK3N0cnVjdCBvbWFwX21ib3ggKm9tYXAyX21ib3hlc1tdID0geyAmbWJveF9kc3BfaW5mbywgJm1ib3hfaXZhX2luZm8sIE5VTEwgfTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IGRmOGQyZjIuLjZjODQ2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJc3RydWN0IG9tYXBfbXV4ICptdXggPSBOVUxMOwogCXN0cnVjdCBvbWFwX211eF9lbnRyeSAqZTsKIAljb25zdCBjaGFyICptb2RlX25hbWU7Ci0JaW50IGZvdW5kID0gMCwgZm91bmRfbW9kZSwgbW9kZTBfbGVuID0gMDsKKwlpbnQgZm91bmQgPSAwLCBmb3VuZF9tb2RlID0gMCwgbW9kZTBfbGVuID0gMDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICptdXhtb2RlcyA9ICZwYXJ0aXRpb24tPm11eG1vZGVzOwogCiAJbW9kZV9uYW1lID0gc3RyY2hyKG11eG5hbWUsICcuJyk7CkBAIC02MDUsNyArNjA1LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZwYXJ0aXRpb24tPm11eG1vZGVzLCBub2RlKSB7CiAJCXN0cnVjdCBvbWFwX211eCAqbSA9ICZlLT5tdXg7CiAKLQkJKHZvaWQpZGVidWdmc19jcmVhdGVfZmlsZShtLT5tdXhuYW1lc1swXSwgU19JV1VHTywgbXV4X2RiZ19kaXIsCisJCSh2b2lkKWRlYnVnZnNfY3JlYXRlX2ZpbGUobS0+bXV4bmFtZXNbMF0sIFNfSVdVU1IsIG11eF9kYmdfZGlyLAogCQkJCQkgIG0sICZvbWFwX211eF9kYmdfc2lnbmFsX2ZvcHMpOwogCX0KIH0KQEAgLTEwMDAsNiArMTAwMCw3IEBACiAJaWYgKCFwYXJ0aXRpb24tPmJhc2UpIHsKIAkJcHJfZXJyKCIlczogQ291bGQgbm90IGlvcmVtYXAgbXV4IHBhcnRpdGlvbiBhdCAweCUwOHhcbiIsCiAJCQlfX2Z1bmNfXywgcGFydGl0aW9uLT5waHlzKTsKKwkJa2ZyZWUocGFydGl0aW9uKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKaW5kZXggMTI1ZjU2NS4uYTVhODNiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwpAQCAtNjM3LDE0ICs2MzcsMTQgQEAKIAogCQl9CiAKLQkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgiZW5hYmxlX29mZl9tb2RlIiwgU19JUlVHTyB8IFNfSVdVR08sIGQsCisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImVuYWJsZV9vZmZfbW9kZSIsIFNfSVJVR08gfCBTX0lXVVNSLCBkLAogCQkJCSAgICZlbmFibGVfb2ZmX21vZGUsICZwbV9kYmdfb3B0aW9uX2ZvcHMpOwotCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzbGVlcF93aGlsZV9pZGxlIiwgU19JUlVHTyB8IFNfSVdVR08sIGQsCisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoInNsZWVwX3doaWxlX2lkbGUiLCBTX0lSVUdPIHwgU19JV1VTUiwgZCwKIAkJCQkgICAmc2xlZXBfd2hpbGVfaWRsZSwgJnBtX2RiZ19vcHRpb25fZm9wcyk7Ci0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoIndha2V1cF90aW1lcl9zZWNvbmRzIiwgU19JUlVHTyB8IFNfSVdVR08sIGQsCisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoIndha2V1cF90aW1lcl9zZWNvbmRzIiwgU19JUlVHTyB8IFNfSVdVU1IsIGQsCiAJCQkJICAgJndha2V1cF90aW1lcl9zZWNvbmRzLCAmcG1fZGJnX29wdGlvbl9mb3BzKTsKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgid2FrZXVwX3RpbWVyX21pbGxpc2Vjb25kcyIsCi0JCQlTX0lSVUdPIHwgU19JV1VHTywgZCwgJndha2V1cF90aW1lcl9taWxsaXNlY29uZHMsCisJCQlTX0lSVUdPIHwgU19JV1VTUiwgZCwgJndha2V1cF90aW1lcl9taWxsaXNlY29uZHMsCiAJCQkmcG1fZGJnX29wdGlvbl9mb3BzKTsKIAlwbV9kYmdfaW5pdF9kb25lID0gMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggYTRhYTE5Mi4uMmY4NjRlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC0xNjgsOSArMTY4LDEwIEBACiAgKiBvbmNlIGR1cmluZyBib290IHNlcXVlbmNlLCBidXQgdGhpcyB3b3JrcyBhcyB3ZSBhcmUgbm90IHVzaW5nIHNlY3VyZQogICogc2VydmljZXMuCiAgKi8KLXN0YXRpYyB2b2lkIG9tYXAzX3NhdmVfc2VjdXJlX3JhbV9jb250ZXh0KHUzMiB0YXJnZXRfbXB1X3N0YXRlKQorc3RhdGljIHZvaWQgb21hcDNfc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQodm9pZCkKIHsKIAl1MzIgcmV0OworCWludCBtcHVfbmV4dF9zdGF0ZSA9IHB3cmRtX3JlYWRfbmV4dF9wd3JzdChtcHVfcHdyZG0pOwogCiAJaWYgKG9tYXBfdHlwZSgpICE9IE9NQVAyX0RFVklDRV9UWVBFX0dQKSB7CiAJCS8qCkBAIC0xODEsNyArMTgyLDcgQEAKIAkJcHdyZG1fc2V0X25leHRfcHdyc3QobXB1X3B3cmRtLCBQV1JETV9QT1dFUl9PTik7CiAJCXJldCA9IF9vbWFwX3NhdmVfc2VjdXJlX3NyYW0oKHUzMiAqKQogCQkJCV9fcGEob21hcDNfc2VjdXJlX3JhbV9zdG9yYWdlKSk7Ci0JCXB3cmRtX3NldF9uZXh0X3B3cnN0KG1wdV9wd3JkbSwgdGFyZ2V0X21wdV9zdGF0ZSk7CisJCXB3cmRtX3NldF9uZXh0X3B3cnN0KG1wdV9wd3JkbSwgbXB1X25leHRfc3RhdGUpOwogCQkvKiBGb2xsb3dpbmcgaXMgZm9yIGVycm9yIHRyYWNraW5nLCBpdCBzaG91bGQgbm90IGhhcHBlbiAqLwogCQlpZiAocmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNhdmVfc2VjdXJlX3NyYW0oKSByZXR1cm5zICUwOHhcbiIsCkBAIC0xMDk0LDcgKzEwOTUsNyBAQAogCQlsb2NhbF9maXFfZGlzYWJsZSgpOwogCiAJCW9tYXBfZG1hX2dsb2JhbF9jb250ZXh0X3NhdmUoKTsKLQkJb21hcDNfc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQoUFdSRE1fUE9XRVJfT04pOworCQlvbWFwM19zYXZlX3NlY3VyZV9yYW1fY29udGV4dCgpOwogCQlvbWFwX2RtYV9nbG9iYWxfY29udGV4dF9yZXN0b3JlKCk7CiAKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbV9tcHU0NHh4LmgKaW5kZXggNzI5YTY0NC4uMzMwMGZmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5oCkBAIC0zOCw4ICszOCw4IEBACiAjZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfSU5TVAkJMHgwODAwCiAKIC8qIFBSQ01fTVBVIGNsb2NrZG9tYWluIHJlZ2lzdGVyIG9mZnNldHMgKGZyb20gaW5zdGFuY2Ugc3RhcnQpICovCi0jZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX0NQVTBfTVBVX0NET0ZGUwkweDAwMDAKLSNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9NUFVfQ0RPRkZTCTB4MDAwMAorI2RlZmluZSBPTUFQNDQzMF9QUkNNX01QVV9DUFUwX01QVV9DRE9GRlMJMHgwMDE4CisjZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX0NQVTFfTVBVX0NET0ZGUwkweDAwMTgKIAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCmluZGV4IDc3ZWNlYmYuLjFhNzc3ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKQEAgLTI4Miw2ICsyODIsNyBAQAogCQlkZXZfZXJyKCZzcl9pbmZvLT5wZGV2LT5kZXYsICIlczogRVJST1IgaW4gcmVnaXN0ZXJpbmciCiAJCQkiaW50ZXJydXB0IGhhbmRsZXIuIFNtYXJ0cmVmbGV4IHdpbGwiCiAJCQkibm90IGZ1bmN0aW9uIGFzIGRlc2lyZWRcbiIsIF9fZnVuY19fKTsKKwkJa2ZyZWUobmFtZSk7CiAJCWtmcmVlKHNyX2luZm8pOwogCQlyZXR1cm4gcmV0OwogfQpAQCAtNzgwLDggKzc4MSw3IEBACiAJc3RydWN0IG9tYXBfc3IgKnNyX2luZm8gPSAoc3RydWN0IG9tYXBfc3IgKikgZGF0YTsKIAogCWlmICghc3JfaW5mbykgewotCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKLQkJCV9fZnVuY19fLCBzcl9pbmZvLT52b2x0ZG0tPm5hbWUpOworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3Qgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNzk1LDggKzc5NSw3IEBACiAJc3RydWN0IG9tYXBfc3IgKnNyX2luZm8gPSAoc3RydWN0IG9tYXBfc3IgKikgZGF0YTsKIAogCWlmICghc3JfaW5mbykgewotCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3QgZm9yIHNyXyVzIG5vdCBmb3VuZFxuIiwKLQkJCV9fZnVuY19fLCBzcl9pbmZvLT52b2x0ZG0tPm5hbWUpOworCQlwcl93YXJuaW5nKCIlczogb21hcF9zciBzdHJ1Y3Qgbm90IGZvdW5kXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODM0LDcgKzgzMyw4IEBACiAKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBwbGF0Zm9ybSBkYXRhIG1pc3NpbmdcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2ZyZWVfZGV2aW5mbzsKIAl9CiAKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtODgwLDcgKzg4MCw3IEBACiAJCXJldCA9IHNyX2xhdGVfaW5pdChzcl9pbmZvKTsKIAkJaWYgKHJldCkgewogCQkJcHJfd2FybmluZygiJXM6IEVycm9yIGluIFNSIGxhdGUgaW5pdFxuIiwgX19mdW5jX18pOwotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCQl9CiAJfQogCkBAIC04OTEsMTcgKzg5MSwyMCBAQAogCSAqIG5vdCB0cnkgdG8gY3JlYXRlIHJlc3Qgb2YgdGhlIGRlYnVnZnMgZW50cmllcy4KIAkgKi8KIAl2ZGRfZGJnX2RpciA9IG9tYXBfdm9sdGFnZV9nZXRfZGJnZGlyKHNyX2luZm8tPnZvbHRkbSk7Ci0JaWYgKCF2ZGRfZGJnX2RpcikKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF2ZGRfZGJnX2RpcikgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CiAKIAlkYmdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJzbWFydHJlZmxleCIsIHZkZF9kYmdfZGlyKTsKIAlpZiAoSVNfRVJSKGRiZ19kaXIpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgZGlyZWN0b3J5XG4iLAogCQkJX19mdW5jX18pOwotCQlyZXR1cm4gUFRSX0VSUihkYmdfZGlyKTsKKwkJcmV0ID0gUFRSX0VSUihkYmdfZGlyKTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCi0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF1dG9jb21wIiwgU19JUlVHTyB8IFNfSVdVR08sIGRiZ19kaXIsCisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF1dG9jb21wIiwgU19JUlVHTyB8IFNfSVdVU1IsIGRiZ19kaXIsCiAJCQkJKHZvaWQgKilzcl9pbmZvLCAmcG1fc3JfZm9wcyk7CiAJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3gzMigiZXJyd2VpZ2h0IiwgU19JUlVHTywgZGJnX2RpciwKIAkJCSZzcl9pbmZvLT5lcnJfd2VpZ2h0KTsKQEAgLTkxNCw3ICs5MTcsOCBAQAogCWlmIChJU19FUlIobnZhbHVlX2RpcikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBkaXJlY3RvcnkiCiAJCQkiZm9yIG4tdmFsdWVzXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBQVFJfRVJSKG52YWx1ZV9kaXIpOworCQlyZXQgPSBQVFJfRVJSKG52YWx1ZV9kaXIpOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKIAlvbWFwX3ZvbHRhZ2VfZ2V0X3ZvbHR0YWJsZShzcl9pbmZvLT52b2x0ZG0sICZ2b2x0X2RhdGEpOwpAQCAtOTIzLDI0ICs5MjcsMTYgQEAKIAkJCSIgY29ycmVzcG9uZGluZyB2ZGQgdmRkXyVzLiBDYW5ub3QgY3JlYXRlIGRlYnVnZnMiCiAJCQkiZW50cmllcyBmb3Igbi12YWx1ZXNcbiIsCiAJCQlfX2Z1bmNfXywgc3JfaW5mby0+dm9sdGRtLT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9EQVRBOworCQlyZXQgPSAtRU5PREFUQTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHNyX2luZm8tPm52YWx1ZV9jb3VudDsgaSsrKSB7Ci0JCWNoYXIgKm5hbWU7Ci0JCWNoYXIgdm9sdF9uYW1lWzMyXTsKKwkJY2hhciBuYW1lW05WQUxVRV9OQU1FX0xFTiArIDFdOwogCi0JCW5hbWUgPSBremFsbG9jKE5WQUxVRV9OQU1FX0xFTiArIDEsIEdGUF9LRVJORUwpOwotCQlpZiAoIW5hbWUpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IgotCQkJCSIgZm9yIG4tdmFsdWUgZGlyZWN0b3J5IG5hbWVcbiIsICBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCXN0cmNweShuYW1lLCAidm9sdF8iKTsKLQkJc3ByaW50Zih2b2x0X25hbWUsICIlZCIsIHZvbHRfZGF0YVtpXS52b2x0X25vbWluYWwpOwotCQlzdHJjYXQobmFtZSwgdm9sdF9uYW1lKTsKLQkJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3gzMihuYW1lLCBTX0lSVUdPIHwgU19JV1VHTywgbnZhbHVlX2RpciwKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAidm9sdF8lZCIsCisJCQkgdm9sdF9kYXRhW2ldLnZvbHRfbm9taW5hbCk7CisJCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV94MzIobmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsIG52YWx1ZV9kaXIsCiAJCQkJJihzcl9pbmZvLT5udmFsdWVfdGFibGVbaV0ubnZhbHVlKSk7CiAJfQogCkBAIC05NjYsNyArOTYyLDcgQEAKIAl9CiAKIAlzcl9pbmZvID0gX3NyX2xvb2t1cChwZGF0YS0+dm9sdGRtKTsKLQlpZiAoIXNyX2luZm8pIHsKKwlpZiAoSVNfRVJSKHNyX2luZm8pKSB7CiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICIlczogb21hcF9zciBzdHJ1Y3Qgbm90IGZvdW5kXG4iLAogCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwppbmRleCA3YjdjMjY4Li4wZmM1NTBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPHBsYXQvZG10aW1lci5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbHRpbWVyLmg+CisjaW5jbHVkZSA8YXNtL3NjaGVkX2Nsb2NrLmg+CiAKICNpbmNsdWRlICJ0aW1lci1ncC5oIgogCkBAIC0xOTAsNiArMTkxLDcgQEAKIC8qCiAgKiBjbG9ja3NvdXJjZQogICovCitzdGF0aWMgREVGSU5FX0NMT0NLX0RBVEEoY2QpOwogc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyICpncHRfY2xvY2tzb3VyY2U7CiBzdGF0aWMgY3ljbGVfdCBjbG9ja3NvdXJjZV9yZWFkX2N5Y2xlcyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewpAQCAtMjA0LDYgKzIwNiwxNSBAQAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKK3N0YXRpYyB2b2lkIG5vdHJhY2UgZG10aW1lcl91cGRhdGVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1MzIgY3ljOworCisJY3ljID0gb21hcF9kbV90aW1lcl9yZWFkX2NvdW50ZXIoZ3B0X2Nsb2Nrc291cmNlKTsKKworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKIC8qIFNldHVwIGZyZWUtcnVubmluZyBjb3VudGVyIGZvciBjbG9ja3NvdXJjZSAqLwogc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX2Nsb2Nrc291cmNlX2luaXQodm9pZCkKIHsKQEAgLTIyNCw2ICsyMzUsOCBAQAogCiAJb21hcF9kbV90aW1lcl9zZXRfbG9hZF9zdGFydChncHQsIDEsIDApOwogCisJaW5pdF9zY2hlZF9jbG9jaygmY2QsIGRtdGltZXJfdXBkYXRlX3NjaGVkX2Nsb2NrLCAzMiwgdGlja19yYXRlKTsKKwogCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfZ3B0LCB0aWNrX3JhdGUpKQogCQlwcmludGsoZXJyMiwgY2xvY2tzb3VyY2VfZ3B0Lm5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwppbmRleCBlZDYwNzljOS4uMTJiZTUyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKQEAgLTQ3MSw2ICs0NzEsNyBAQAogCXN0cmNhdChuYW1lLCB2ZGQtPnZvbHRkbS5uYW1lKTsKIAogCXZkZC0+ZGVidWdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHZvbHRhZ2VfZGlyKTsKKwlrZnJlZShuYW1lKTsKIAlpZiAoSVNfRVJSKHZkZC0+ZGVidWdfZGlyKSkgewogCQlwcl93YXJuaW5nKCIlczogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSBmb3IiCiAJCQkiIHZkZF8lc1xuIiwgX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktZXZhbGJvYXJkLmMKaW5kZXggNmIyYzgwMC4uMjhmNjY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLWV2YWxib2FyZC5jCkBAIC01MCw3ICs1MCw3IEBACiAJCQlHUElPMF9DT0xJQlJJX1BYQTI3MF9TRF9ERVRFQ1Q7CiAJaWYgKG1hY2hpbmVfaXNfY29saWJyaTMwMCgpKQkvKiBQWEEzMDAgQ29saWJyaSAqLwogCQljb2xpYnJpX21jaV9wbGF0Zm9ybV9kYXRhLmdwaW9fY2FyZF9kZXRlY3QgPQotCQkJR1BJTzM5X0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVDsKKwkJCUdQSU8xM19DT0xJQlJJX1BYQTMwMF9TRF9ERVRFQ1Q7CiAJZWxzZQkJCQkvKiBQWEEzMjAgQ29saWJyaSAqLwogCQljb2xpYnJpX21jaV9wbGF0Zm9ybV9kYXRhLmdwaW9fY2FyZF9kZXRlY3QgPQogCQkJR1BJTzI4X0NPTElCUklfUFhBMzIwX1NEX0RFVEVDVDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCmluZGV4IGZkZGIxNmQuLjY2ZGQ4MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYwpAQCAtNDEsNyArNDEsNyBAQAogCUdQSU80X01NQzFfREFUMSwKIAlHUElPNV9NTUMxX0RBVDIsCiAJR1BJTzZfTU1DMV9EQVQzLAotCUdQSU8zOV9HUElPLAkvKiBTRCBkZXRlY3QgKi8KKwlHUElPMTNfR1BJTywJLyogR1BJTzEzX0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVCAqLwogCiAJLyogVUhDICovCiAJR1BJTzBfMl9VU0JIX1BFTiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCmluZGV4IDM4OGE5NmYuLmNiNDIzNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaApAQCAtNjAsNyArNjAsNyBAQAogI2RlZmluZSBHUElPMTEzX0NPTElCUklfUFhBMjcwX1RTX0lSUQkxMTMKIAogLyogR1BJTyBkZWZpbml0aW9ucyBmb3IgQ29saWJyaSBQWEEzMDAvMzEwICovCi0jZGVmaW5lIEdQSU8zOV9DT0xJQlJJX1BYQTMwMF9TRF9ERVRFQ1QJMzkKKyNkZWZpbmUgR1BJTzEzX0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVAkxMwogCiAvKiBHUElPIGRlZmluaXRpb25zIGZvciBDb2xpYnJpIFBYQTMyMCAqLwogI2RlZmluZSBHUElPMjhfQ09MSUJSSV9QWEEzMjBfU0RfREVURUNUCTI4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcG0uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oCmluZGV4IGZkODM2MGMuLmYxNWFmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oCkBAIC0yMiw5ICsyMiw4IEBACiBleHRlcm4gc3RydWN0IHB4YV9jcHVfcG1fZm5zICpweGFfY3B1X3BtX2ZuczsKIAogLyogc2xlZXAuUyAqLwotZXh0ZXJuIHZvaWQgcHhhMjV4X2NwdV9zdXNwZW5kKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBweGEyN3hfY3B1X3N1c3BlbmQodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIHB4YV9jcHVfcmVzdW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgcHhhMjV4X2NwdV9zdXNwZW5kKHVuc2lnbmVkIGludCwgbG9uZyk7CitleHRlcm4gdm9pZCBweGEyN3hfY3B1X3N1c3BlbmQodW5zaWduZWQgaW50LCBsb25nKTsKIAogZXh0ZXJuIGludCBweGFfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKIGV4dGVybiBpbnQgcHhhX3BtX3ByZXBhcmUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMKaW5kZXggNDA1YjkyYS4uMzU1NzJjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbTI3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG0yN3guYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJLnB3bV9pZAkJPSAwLAogCS5tYXhfYnJpZ2h0bmVzcwk9IDB4ZmUsCiAJLmRmdF9icmlnaHRuZXNzCT0gMHg3ZSwKLQkucHdtX3BlcmlvZF9ucwk9IDM1MDAsCisJLnB3bV9wZXJpb2RfbnMJPSAzNTAwICogMTAyNCwKIAkuaW5pdAkJPSBwYWxtMjd4X2JhY2tsaWdodF9pbml0LAogCS5ub3RpZnkJCT0gcGFsbTI3eF9iYWNrbGlnaHRfbm90aWZ5LAogCS5leGl0CQk9IHBhbG0yN3hfYmFja2xpZ2h0X2V4aXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKaW5kZXggN2JmNDAxNy4uMzAxMDE5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiBzdGF0aWMgaW50IHBhbG16NzJfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQogewogCS8qIHNldHVwIHRoZSByZXN1bWVfaW5mbyBzdHJ1Y3QgZm9yIHRoZSBvcmlnaW5hbCBib290bG9hZGVyICovCi0JcGFsbXo3Ml9yZXN1bWVfaW5mby5yZXN1bWVfYWRkciA9ICh1MzIpIHB4YV9jcHVfcmVzdW1lOworCXBhbG16NzJfcmVzdW1lX2luZm8ucmVzdW1lX2FkZHIgPSAodTMyKSBjcHVfcmVzdW1lOwogCiAJLyogU3RvcmluZyBtZW1vcnkgdG91Y2hlZCBieSBST00gKi8KIAlzdG9yZV9wdHIgPSAqUEFMTVo3Ml9TQVZFX0RXT1JEOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKaW5kZXggOTc4ZTFiMi4uNTFlMTU4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wbS5jCkBAIC0zMyw3ICszMyw3IEBACiAjZW5kaWYKIAogCS8qIHNraXAgcmVnaXN0ZXJzIHNhdmluZyBmb3Igc3RhbmRieSAqLwotCWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX1NUQU5EQlkpIHsKKwlpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9TVEFOREJZICYmIHB4YV9jcHVfcG1fZm5zLT5zYXZlKSB7CiAJCXB4YV9jcHVfcG1fZm5zLT5zYXZlKHNsZWVwX3NhdmUpOwogCQkvKiBiZWZvcmUgc2xlZXBpbmcsIGNhbGN1bGF0ZSBhbmQgc2F2ZSBhIGNoZWNrc3VtICovCiAJCWZvciAoaSA9IDA7IGkgPCBweGFfY3B1X3BtX2Zucy0+c2F2ZV9jb3VudCAtIDE7IGkrKykKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlweGFfY3B1X3BtX2Zucy0+ZW50ZXIoc3RhdGUpOwogCWNwdV9pbml0KCk7CiAKLQlpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9TVEFOREJZKSB7CisJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfU1RBTkRCWSAmJiBweGFfY3B1X3BtX2Zucy0+cmVzdG9yZSkgewogCQkvKiBhZnRlciBzbGVlcGluZywgdmFsaWRhdGUgdGhlIGNoZWNrc3VtICovCiAJCWZvciAoaSA9IDA7IGkgPCBweGFfY3B1X3BtX2Zucy0+c2F2ZV9jb3VudCAtIDE7IGkrKykKIAkJCWNoZWNrc3VtICs9IHNsZWVwX3NhdmVbaV07CkBAIC02NywxMSArNjcsNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChweGFfcG1fZW50ZXIpOwogCi11bnNpZ25lZCBsb25nIHNsZWVwX3BoeXNfc3Aodm9pZCAqc3ApCi17Ci0JcmV0dXJuIHZpcnRfdG9fcGh5cyhzcCk7Ci19Ci0KIHN0YXRpYyBpbnQgcHhhX3BtX3ZhbGlkKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKIAlpZiAocHhhX2NwdV9wbV9mbnMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCmluZGV4IGZiYzViNzcuLjZiZGU1OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIFBNX1NVU1BFTkRfTUVNOgotCQlweGEyNXhfY3B1X3N1c3BlbmQoUFdSTU9ERV9TTEVFUCk7CisJCXB4YTI1eF9jcHVfc3VzcGVuZChQV1JNT0RFX1NMRUVQLCBQTEFUX1BIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQpOwogCQlicmVhazsKIAl9CiB9CkBAIC0yNTIsNyArMjUyLDcgQEAKIHN0YXRpYyBpbnQgcHhhMjV4X2NwdV9wbV9wcmVwYXJlKHZvaWQpCiB7CiAJLyogc2V0IHJlc3VtZSByZXR1cm4gYWRkcmVzcyAqLwotCVBTUFIgPSB2aXJ0X3RvX3BoeXMocHhhX2NwdV9yZXN1bWUpOworCVBTUFIgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM0Nyw2ICszNDcsNyBAQAogCSZweGEyNXhfZGV2aWNlX2Fzc3AsCiAJJnB4YTI1eF9kZXZpY2VfcHdtMCwKIAkmcHhhMjV4X2RldmljZV9wd20xLAorCSZweGFfZGV2aWNlX2Fzb2NfcGxhdGZvcm0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHhhMjV4X3N5c2RldltdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCA5ODczMDFmLi4yOGIxMWJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAJCXB4YV9jcHVfc3RhbmRieSgpOwogCQlicmVhazsKIAljYXNlIFBNX1NVU1BFTkRfTUVNOgotCQlweGEyN3hfY3B1X3N1c3BlbmQocHdybW9kZSk7CisJCXB4YTI3eF9jcHVfc3VzcGVuZChwd3Jtb2RlLCBQTEFUX1BIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQpOwogCQlicmVhazsKIAl9CiB9CkBAIC0zMTMsNyArMzEzLDcgQEAKIHN0YXRpYyBpbnQgcHhhMjd4X2NwdV9wbV9wcmVwYXJlKHZvaWQpCiB7CiAJLyogc2V0IHJlc3VtZSByZXR1cm4gYWRkcmVzcyAqLwotCVBTUFIgPSB2aXJ0X3RvX3BoeXMocHhhX2NwdV9yZXN1bWUpOworCVBTUFIgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKaW5kZXggYTdhMTllMS4uMTIzMDM0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKQEAgLTE0Miw4ICsxNDIsNyBAQAogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnAgPSAodm9sYXRpbGUgdm9pZCAqKTB4YzAwMDAwMDA7CiAJdW5zaWduZWQgbG9uZyBzYXZlZF9kYXRhID0gKnA7CiAKLQlleHRlcm4gdm9pZCBweGEzeHhfY3B1X3N1c3BlbmQodm9pZCk7Ci0JZXh0ZXJuIHZvaWQgcHhhM3h4X2NwdV9yZXN1bWUodm9pZCk7CisJZXh0ZXJuIHZvaWQgcHhhM3h4X2NwdV9zdXNwZW5kKGxvbmcpOwogCiAJLyogcmVzdW1pbmcgZnJvbSBEMiByZXF1aXJlcyB0aGUgSFNJTzIvQk9PVC9UUE0gY2xvY2tzIGVuYWJsZWQgKi8KIAlDS0VOQSB8PSAoMSA8PCBDS0VOX0JPT1QpIHwgKDEgPDwgQ0tFTl9UUE0pOwpAQCAtMTYxLDkgKzE2MCw5IEBACiAJUFNQUiA9IDB4NWMwMTQwMDA7CiAKIAkvKiBvdmVyd3JpdGUgd2l0aCB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KLQkqcCA9IHZpcnRfdG9fcGh5cyhweGEzeHhfY3B1X3Jlc3VtZSk7CisJKnAgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAKLQlweGEzeHhfY3B1X3N1c3BlbmQoKTsKKwlweGEzeHhfY3B1X3N1c3BlbmQoUExBVF9QSFlTX09GRlNFVCAtIFBBR0VfT0ZGU0VUKTsKIAogCSpwID0gc2F2ZWRfZGF0YTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKaW5kZXggYzU1MWRhOC4uNmY1MzY4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TCkBAIC0yMiwxMzMgKzIyLDI2IEBACiAKIAkJLnRleHQKIAotcHhhX2NwdV9zYXZlX2NwOgotCUAgZ2V0IGNvcHJvY2Vzc29yIHJlZ2lzdGVycwotCW1yYwlwMTQsIDAsIHIzLCBjNiwgYzAsIDAJCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgZm9yIHR1cmJvIG1vZGUKLQltcmMJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAkJQCBDUCBhY2Nlc3MgcmVnCi0JbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECi0JbXJjIAlwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgZG9tYWluIElECi0JbXJjIAlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbXJjCXAxNSwgMCwgcjgsIGMxLCBjMSwgMCAgICAgICAgICAgQCBhdXhpbGlhcnkgY29udHJvbCByZWcKLQltcmMgCXAxNSwgMCwgcjksIGMxLCBjMCwgMAkJQCBjb250cm9sIHJlZwotCi0JYmljCXIzLCByMywgIzIJCQlAIGNsZWFyIGZyZXF1ZW5jeSBjaGFuZ2UgYml0Ci0KLQlAIHN0b3JlIHRoZW0gcGx1cyBjdXJyZW50IHZpcnR1YWwgc3RhY2sgcHRyIG9uIHN0YWNrCi0JbW92CXIxMCwgc3AKLQlzdG1mZAlzcCEsIHtyMyAtIHIxMH0KLQotCW1vdglwYywgbHIKLQotcHhhX2NwdV9zYXZlX3NwOgotCUAgcHJlc2VydmUgcGh5cyBhZGRyZXNzIG9mIHN0YWNrCi0JbW92CXIwLCBzcAotCXN0cglsciwgW3NwLCAjLTRdIQotCWJsCXNsZWVwX3BoeXNfc3AKLQlsZHIJcjEsID1zbGVlcF9zYXZlX3NwCi0Jc3RyCXIwLCBbcjFdCi0JbGRyCXBjLCBbc3BdLCAjNAotCiAjaWZkZWYgQ09ORklHX1BYQTN4eAogLyoKICAqIHB4YTN4eF9jcHVfc3VzcGVuZCgpIC0gZm9yY2VzIENQVSBpbnRvIHNsZWVwIHN0YXRlIChTMkQzQzQpCiAgKgotICogTk9URTogIHVuZm9ydHVuYXRlbHksIHB4YV9jcHVfc2F2ZV9jcCBjYW4gbm90IGJlIHJldXNlZCBoZXJlIHNpbmNlCi0gKiB0aGUgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBpcyBkaWZmZXJlbnQgYmV0d2VlbiBweGEzeHgKLSAqIGFuZCBweGF7MjV4LDI3eH0KKyAqIHIwID0gdjpwIG9mZnNldAogICovCi0KIEVOVFJZKHB4YTN4eF9jcHVfc3VzcGVuZCkKIAogI2lmbmRlZiBDT05GSUdfSVdNTVhUCiAJbXJhCXIyLCByMywgYWNjMAogI2VuZGlmCiAJc3RtZmQJc3AhLCB7cjIgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0KLQltcmMJcDE0LCAwLCByMywgYzYsIGMwLCAwCQlAIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGZvciB0dXJibyBtb2RlCi0JbXJjCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDAJCUAgQ1AgYWNjZXNzIHJlZwotCW1yYwlwMTUsIDAsIHI1LCBjMTMsIGMwLCAwCQlAIFBJRAotCW1yYyAJcDE1LCAwLCByNiwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAotCW1yYyAJcDE1LCAwLCByNywgYzIsIGMwLCAwCQlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgotCW1yYwlwMTUsIDAsIHI4LCBjMSwgYzAsIDEgICAgICAgICAgIEAgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnCi0JbXJjIAlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJCUAgY29udHJvbCByZWcKLQotCWJpYwlyMywgcjMsICMyCQkJQCBjbGVhciBmcmVxdWVuY3kgY2hhbmdlIGJpdAotCi0JQCBzdG9yZSB0aGVtIHBsdXMgY3VycmVudCB2aXJ0dWFsIHN0YWNrIHB0ciBvbiBzdGFjawotCW1vdglyMTAsIHNwCi0Jc3RtZmQJc3AhLCB7cjMgLSByMTB9Ci0KLQlAIHN0b3JlIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhY2sgcG9pbnRlcgotCW1vdglyMCwgc3AKLQlibAlzbGVlcF9waHlzX3NwCi0JbGRyCXIxLCA9c2xlZXBfc2F2ZV9zcAotCXN0cglyMCwgW3IxXQotCi0JQCBjbGVhbiBkYXRhIGNhY2hlCi0JYmwJeHNjM19mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1vdglyMSwgcjAKKwlsZHIJcjMsID1weGFfY3B1X3Jlc3VtZQlAIHJlc3VtZSBmdW5jdGlvbgorCWJsCWNwdV9zdXNwZW5kCiAKIAltb3YJcjAsICMweDA2CQlAIFMyRDNDNCBtb2RlCiAJbWNyCXAxNCwgMCwgcjAsIGM3LCBjMCwgMAlAIGVudGVyIHNsZWVwCiAKIDIwOgliCTIwYgkJCUAgd2FpdGluZyBmb3Igc2xlZXAKLQotCS5kYXRhCi0JLmFsaWduIDUKLS8qCi0gKiBweGEzeHhfY3B1X3Jlc3VtZQotICovCi0KLUVOVFJZKHB4YTN4eF9jcHVfcmVzdW1lKQotCi0JbW92CXIwLCAjUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgU1ZDX01PREUJQCBzZXQgU1ZDLCBpcnFzIG9mZgotCW1zcgljcHNyX2MsIHIwCi0KLQlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJCUAgc3RhY2sgcGh5cyBhZGRyCi0JbGRtZmQJcjAsIHtyMyAtIHI5LCBzcH0JCUAgQ1AgcmVncyArIHZpcnQgc3RhY2sgcHRyCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIGNhY2hlcywgQlRCCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgKCZmaWxsKSBidWZmZXIKLQltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCA0CQlAIGZsdXNoIHByZWZldGNoIGJ1ZmZlcgotCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAgICAJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKLQotCW1jcglwMTQsIDAsIHIzLCBjNiwgYzAsIDAJCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgdHVyYm8gbW9kZS4KLQltY3IJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAkJQCBDUCBhY2Nlc3MgcmVnCi0JbWNyCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECi0JbWNyIAlwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgZG9tYWluIElECi0JbWNyIAlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbWNyCXAxNSwgMCwgcjgsIGMxLCBjMCwgMSAgICAgICAgICAgQCBhdXhpbGlhcnkgY29udHJvbCByZWcKLQotCUAgdGVtcG9yYXJpbHkgbWFwIHJlc3VtZV90dXJuX29uX21tdSBpbnRvIHRoZSBwYWdlIHRhYmxlLAotCUAgb3RoZXJ3aXNlIHByZWZldGNoIGFib3J0IG9jY3VycyBhZnRlciBNTVUgaXMgdHVybmVkIG9uCi0JbW92CXIxLCByNwotCWJpYwlyMSwgcjEsICMweDAwZmYKLQliaWMJcjEsIHIxLCAjMHgzZjAwCi0JbGRyCXIyLCA9MHg1NDJlCi0KLQlhZHIJcjMsIHJlc3VtZV90dXJuX29uX21tdQotCW1vdglyMywgcjMsIGxzciAjMjAKLQlvcnIJcjQsIHIyLCByMywgbHNsICMyMAotCWxkcglyNSwgW3IxLCByMywgbHNsICMyXQotCXN0ciAgICAgcjQsIFtyMSwgcjMsIGxzbCAjMl0KLQotCUAgTWFwcGluZyBwYWdlIHRhYmxlIGFkZHJlc3MgaW4gdGhlIHBhZ2UgdGFibGUKLQltb3YJcjYsIHIxLCBsc3IgIzIwCi0Jb3JyCXI3LCByMiwgcjYsIGxzbCAjMjAKLQlsZHIJcjgsIFtyMSwgcjYsIGxzbCAjMl0KLQlzdHIJcjcsIFtyMSwgcjYsIGxzbCAjMl0KLQotCWxkcglyMiwgPXB4YTN4eF9yZXN1bWVfYWZ0ZXJfbW11CUAgYWJzb2x1dGUgdmlydHVhbCBhZGRyZXNzCi0JYglyZXN1bWVfdHVybl9vbl9tbXUJCUAgY2FjaGUgYWxpZ24gZXhlY3V0aW9uCi0KLQkudGV4dAotcHhhM3h4X3Jlc3VtZV9hZnRlcl9tbXU6Ci0JLyogcmVzdG9yZSB0aGUgdGVtcG9yYXJ5IG1hcHBpbmcgKi8KLQlzdHIJcjUsIFtyMSwgcjMsIGxzbCAjMl0KLQlzdHIJcjgsIFtyMSwgcjYsIGxzbCAjMl0KLQliCXJlc3VtZV9hZnRlcl9tbXUKLQogI2VuZGlmIC8qIENPTkZJR19QWEEzeHggKi8KIAogI2lmZGVmIENPTkZJR19QWEEyN3gKQEAgLTE1OCwyOCArNTEsMjMgQEAKICAqIEZvcmNlcyBDUFUgaW50byBzbGVlcCBzdGF0ZS4KICAqCiAgKiByMCA9IHZhbHVlIGZvciBQV1JNT0RFIE0gZmllbGQgZm9yIGRlc2lyZWQgc2xlZXAgc3RhdGUKKyAqIHIxID0gdjpwIG9mZnNldAogICovCi0KIEVOVFJZKHB4YTI3eF9jcHVfc3VzcGVuZCkKIAogI2lmbmRlZiBDT05GSUdfSVdNTVhUCiAJbXJhCXIyLCByMywgYWNjMAogI2VuZGlmCiAJc3RtZmQJc3AhLCB7cjIgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotCi0JYmwJcHhhX2NwdV9zYXZlX2NwCi0KLQltb3YJcjUsIHIwCQkJCUAgc2F2ZSBzbGVlcCBtb2RlCi0JYmwJcHhhX2NwdV9zYXZlX3NwCi0KLQlAIGNsZWFuIGRhdGEgY2FjaGUKLQlibAl4c2NhbGVfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwltb3YJcjQsIHIwCQkJCUAgc2F2ZSBzbGVlcCBtb2RlCisJbGRyCXIzLCA9cHhhX2NwdV9yZXN1bWUJCUAgcmVzdW1lIGZ1bmN0aW9uCisJYmwJY3B1X3N1c3BlbmQKIAogCUAgUHV0IHRoZSBwcm9jZXNzb3IgdG8gc2xlZXAKIAlAIChhbHNvIHdvcmthcm91bmQgZm9yIHNpZ2h0aW5nIDI4MDcxKQogCiAJQCBwcmVwYXJlIHZhbHVlIGZvciBzbGVlcCBtb2RlCi0JbW92CXIxLCByNQkJCQlAIHNsZWVwIG1vZGUKKwltb3YJcjEsIHI0CQkJCUAgc2xlZXAgbW9kZQogCiAJQCBwcmVwYXJlIHBvaW50ZXIgdG8gcGh5c2ljYWwgYWRkcmVzcyAwICh2aXJ0dWFsIG1hcHBpbmcgaW4gZ2VuZXJpYy5jKQogCW1vdglyMiwgI1VOQ0FDSEVEX1BIWVNfMApAQCAtMjE2LDIxICsxMDQsMTYgQEAKICAqIEZvcmNlcyBDUFUgaW50byBzbGVlcCBzdGF0ZS4KICAqCiAgKiByMCA9IHZhbHVlIGZvciBQV1JNT0RFIE0gZmllbGQgZm9yIGRlc2lyZWQgc2xlZXAgc3RhdGUKKyAqIHIxID0gdjpwIG9mZnNldAogICovCiAKIEVOVFJZKHB4YTI1eF9jcHVfc3VzcGVuZCkKIAlzdG1mZAlzcCEsIHtyMiAtIHIxMiwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0KLQlibAlweGFfY3B1X3NhdmVfY3AKLQotCW1vdglyNSwgcjAJCQkJQCBzYXZlIHNsZWVwIG1vZGUKLQlibAlweGFfY3B1X3NhdmVfc3AKLQotCUAgY2xlYW4gZGF0YSBjYWNoZQotCWJsCXhzY2FsZV9mbHVzaF9rZXJuX2NhY2hlX2FsbAotCisJbW92CXI0LCByMAkJCQlAIHNhdmUgc2xlZXAgbW9kZQorCWxkcglyMywgPXB4YV9jcHVfcmVzdW1lCQlAIHJlc3VtZSBmdW5jdGlvbgorCWJsCWNwdV9zdXNwZW5kCiAJQCBwcmVwYXJlIHZhbHVlIGZvciBzbGVlcCBtb2RlCi0JbW92CXIxLCByNQkJCQlAIHNsZWVwIG1vZGUKKwltb3YJcjEsIHI0CQkJCUAgc2xlZXAgbW9kZQogCiAJQCBwcmVwYXJlIHBvaW50ZXIgdG8gcGh5c2ljYWwgYWRkcmVzcyAwICh2aXJ0dWFsIG1hcHBpbmcgaW4gZ2VuZXJpYy5jKQogCW1vdglyMiwgI1VOQ0FDSEVEX1BIWVNfMApAQCAtMzE3LDUzICsyMDAsOSBAQAogICogcHhhX2NwdV9yZXN1bWUoKQogICoKICAqIGVudHJ5IHBvaW50IGZyb20gYm9vdGxvYWRlciBpbnRvIGtlcm5lbCBkdXJpbmcgcmVzdW1lCi0gKgotICogTm90ZTogWWVzLCBwYXJ0IG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpcyBsb2NhdGVkIGludG8gdGhlIC5kYXRhIHNlY3Rpb24uCi0gKiAgICAgICBUaGlzIGlzIHRvIGFsbG93IHNsZWVwX3NhdmVfc3AgdG8gYmUgYWNjZXNzZWQgd2l0aCBhIHJlbGF0aXZlIGxvYWQKLSAqICAgICAgIHdoaWxlIHdlIGNhbid0IHJlbHkgb24gYW55IE1NVSB0cmFuc2xhdGlvbi4gIFdlIGNvdWxkIGhhdmUgcHV0Ci0gKiAgICAgICBzbGVlcF9zYXZlX3NwIGluIHRoZSAudGV4dCBzZWN0aW9uIGFzIHdlbGwsIGJ1dCBzb21lIHNldHVwcyBtaWdodAotICogICAgICAgaW5zaXN0IG9uIGl0IHRvIGJlIHRydWx5IHJlYWQtb25seS4KICAqLwotCi0JLmRhdGEKIAkuYWxpZ24gNQotRU5UUlkocHhhX2NwdV9yZXN1bWUpCi0JbW92CXIwLCAjUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgU1ZDX01PREUJQCBzZXQgU1ZDLCBpcnFzIG9mZgotCW1zcgljcHNyX2MsIHIwCi0KLQlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJCUAgc3RhY2sgcGh5cyBhZGRyCi0JbGRyCXIyLCA9cmVzdW1lX2FmdGVyX21tdQkJQCBpdHMgYWJzb2x1dGUgdmlydHVhbCBhZGRyZXNzCi0JbGRtZmQJcjAsIHtyMyAtIHI5LCBzcH0JCUAgQ1AgcmVncyArIHZpcnQgc3RhY2sgcHRyCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMCAgIAlAIGludmFsaWRhdGUgSSAmIEQgVExCcwotCW1jcglwMTUsIDAsIHIxLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBjYWNoZXMsIEJUQgotCi0JbWNyCXAxNCwgMCwgcjMsIGM2LCBjMCwgMAkJQCBjbG9jayBjb25maWd1cmF0aW9uLCB0dXJibyBtb2RlLgotCW1jcglwMTUsIDAsIHI0LCBjMTUsIGMxLCAwCQlAIENQIGFjY2VzcyByZWcKLQltY3IJcDE1LCAwLCByNSwgYzEzLCBjMCwgMAkJQCBQSUQKLQltY3IgCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAkJQCBkb21haW4gSUQKLQltY3IgCXAxNSwgMCwgcjcsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHIKLQltY3IJcDE1LCAwLCByOCwgYzEsIGMxLCAwICAgICAgICAgICBAIGF1eGlsaWFyeSBjb250cm9sIHJlZwotCWIJcmVzdW1lX3R1cm5fb25fbW11CQlAIGNhY2hlIGFsaWduIGV4ZWN1dGlvbgotCi0JLmFsaWduIDUKLXJlc3VtZV90dXJuX29uX21tdToKLQltY3IgCXAxNSwgMCwgcjksIGMxLCBjMCwgMAkJQCB0dXJuIG9uIE1NVSwgY2FjaGVzLCBldGMuCi0KLQlAIExldCB1cyBlbnN1cmUgd2UganVtcCB0byByZXN1bWVfYWZ0ZXJfbW11IG9ubHkgd2hlbiB0aGUgbWNyIGFib3ZlCi0JQCBhY3R1YWxseSB0b29rIGVmZmVjdC4gIFRoZXkgY2FsbCBpdCB0aGUgImNwd2FpdCIgb3BlcmF0aW9uLgotCW1yYwlwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgcXVldWUgYSBkZXBlbmRlbmN5IG9uIENQMTUKLQlzdWIJcGMsIHIyLCByMCwgbHNyICMzMgkJQCBqdW1wIHRvIHZpcnR1YWwgYWRkcgotCW5vcAotCW5vcAotCW5vcAotCi1zbGVlcF9zYXZlX3NwOgotCS53b3JkCTAJCQkJQCBwcmVzZXJ2ZSBzdGFjayBwaHlzIHB0ciBoZXJlCi0KLQkudGV4dAotcmVzdW1lX2FmdGVyX21tdToKK3B4YV9jcHVfcmVzdW1lOgogCWxkbWZkCXNwISwge3IyLCByM30KICNpZm5kZWYgQ09ORklHX0lXTU1YVAogCW1hcglhY2MwLCByMiwgcjMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EtYnQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EtYnQuYwppbmRleCBjMzFlNjAxLi5iOWIxZTVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLWJ0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS1idC5jCkBAIC04MSw4ICs4MSw2IEBACiAJCWdvdG8gZXJyX3Jma19hbGxvYzsKIAl9CiAKLQlyZmtpbGxfc2V0X2xlZF90cmlnZ2VyX25hbWUocmZrLCAidG9zYS1idCIpOwotCiAJcmMgPSByZmtpbGxfcmVnaXN0ZXIocmZrKTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyX3Jma2lsbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCBhZjE1MmU3Li5mMjU4MmVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC04NzUsNiArODc1LDExIEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhID0gJnNoYXJwc2xfcm9tX2RhdGEsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB3bTk3MTJfZGV2aWNlID0geworCS5uYW1lCT0gIndtOTcxMi1jb2RlYyIsCisJLmlkCT0gLTEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnRvc2FzY29vcF9kZXZpY2UsCiAJJnRvc2FzY29vcF9qY19kZXZpY2UsCkBAIC04ODUsNiArODkwLDcgQEAKIAkmdG9zYWxlZF9kZXZpY2UsCiAJJnRvc2FfYnRfZGV2aWNlLAogCSZzaGFycHNsX3JvbV9kZXZpY2UsCisJJndtOTcxMl9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCB0b3NhX3Bvd2Vyb2ZmKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMKaW5kZXggZjRiMDUzYi4uYjkyYWEzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYwpAQCAtNjc2LDcgKzY3Niw3IEBACiBzdGF0aWMgdm9pZCB6ZXVzX3Bvd2VyX29mZih2b2lkKQogewogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JcHhhMjd4X2NwdV9zdXNwZW5kKFBXUk1PREVfREVFUFNMRUVQKTsKKwlweGEyN3hfY3B1X3N1c3BlbmQoUFdSTU9ERV9ERUVQU0xFRVAsIFBMQVRfUEhZU19PRkZTRVQgLSBQQUdFX09GRlNFVCk7CiB9CiAjZWxzZQogI2RlZmluZSB6ZXVzX3Bvd2VyX29mZiAgIE5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKaW5kZXggYTBjYjI1OC4uNTA4MjVhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKQEAgLTk5LDYgKzk5LDcgQEAKIAlzZWxlY3QgUE9XRVJfU1VQUExZCiAJc2VsZWN0IE1BQ0hfTkVPMTk3MwogCXNlbGVjdCBTM0MyNDEwX1BXTQorCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCiAJaGVscAogCSAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgT3Blbm1va28gR1RBMDIgLyBGcmVlcnVubmVyIEdTTSBQaG9uZQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvaW5jbHVkZS9tYWNoL2d0YTAyLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvaW5jbHVkZS9tYWNoL2d0YTAyLmgKaW5kZXggOTUzMzMxZC4uM2E1NmEyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2luY2x1ZGUvbWFjaC9ndGEwMi5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pbmNsdWRlL21hY2gvZ3RhMDIuaApAQCAtNDQsMTkgKzQ0LDE5IEBACiAjZGVmaW5lIEdUQTAydjNfR1BJT19uVVNCX0ZMVAlTM0MyNDEwX0dQRygxMCkJLyogdjMgKyB2NCBvbmx5ICovCiAjZGVmaW5lIEdUQTAydjNfR1BJT19uR1NNX09DCVMzQzI0MTBfR1BHKDExKQkvKiB2MyArIHY0IG9ubHkgKi8KIAotI2RlZmluZSBHVEEwMl9HUElPX0FNUF9TSFVUCVMzQzI0NDBfR1BKMQkvKiB2MiArIHYzICsgdjQgb25seSAqLwotI2RlZmluZSBHVEEwMnYxX0dQSU9fV0xBTl9HUElPMTAJUzNDMjQ0MF9HUEoyCi0jZGVmaW5lIEdUQTAyX0dQSU9fSFBfSU4JUzNDMjQ0MF9HUEoyCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCi0jZGVmaW5lIEdUQTAyX0dQSU9fSU5UMAkJUzNDMjQ0MF9HUEozCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCi0jZGVmaW5lIEdUQTAyX0dQSU9fbkdTTV9FTglTM0MyNDQwX0dQSjQKLSNkZWZpbmUgR1RBMDJfR1BJT18zRF9SRVNFVAlTM0MyNDQwX0dQSjUKLSNkZWZpbmUgR1RBMDJfR1BJT19uRExfR1NNCVMzQzI0NDBfR1BKNgkvKiB2NCArIHY1IG9ubHkgKi8KLSNkZWZpbmUgR1RBMDJfR1BJT19XTEFOX0dQSU8wCVMzQzI0NDBfR1BKNwotI2RlZmluZSBHVEEwMnYxX0dQSU9fQkFUX0lECVMzQzI0NDBfR1BKOAotI2RlZmluZSBHVEEwMl9HUElPX0tFRVBBQ1QJUzNDMjQ0MF9HUEo4Ci0jZGVmaW5lIEdUQTAydjFfR1BJT19IUF9JTglTM0MyNDQwX0dQSjEwCi0jZGVmaW5lIEdUQTAyX0NISVBfUFdECQlTM0MyNDQwX0dQSjExCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCi0jZGVmaW5lIEdUQTAyX0dQSU9fbldMQU5fUkVTRVQJUzNDMjQ0MF9HUEoxMgkvKiB2MiArIHYzICsgdjQgb25seSAqLworI2RlZmluZSBHVEEwMl9HUElPX0FNUF9TSFVUCVMzQzI0MTBfR1BKKDEpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCisjZGVmaW5lIEdUQTAydjFfR1BJT19XTEFOX0dQSU8xMAlTM0MyNDEwX0dQSigyKQorI2RlZmluZSBHVEEwMl9HUElPX0hQX0lOCVMzQzI0MTBfR1BKKDIpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCisjZGVmaW5lIEdUQTAyX0dQSU9fSU5UMAkJUzNDMjQxMF9HUEooMykJLyogdjIgKyB2MyArIHY0IG9ubHkgKi8KKyNkZWZpbmUgR1RBMDJfR1BJT19uR1NNX0VOCVMzQzI0MTBfR1BKKDQpCisjZGVmaW5lIEdUQTAyX0dQSU9fM0RfUkVTRVQJUzNDMjQxMF9HUEooNSkKKyNkZWZpbmUgR1RBMDJfR1BJT19uRExfR1NNCVMzQzI0MTBfR1BKKDYpCS8qIHY0ICsgdjUgb25seSAqLworI2RlZmluZSBHVEEwMl9HUElPX1dMQU5fR1BJTzAJUzNDMjQxMF9HUEooNykKKyNkZWZpbmUgR1RBMDJ2MV9HUElPX0JBVF9JRAlTM0MyNDEwX0dQSig4KQorI2RlZmluZSBHVEEwMl9HUElPX0tFRVBBQ1QJUzNDMjQxMF9HUEooOCkKKyNkZWZpbmUgR1RBMDJ2MV9HUElPX0hQX0lOCVMzQzI0MTBfR1BKKDEwKQorI2RlZmluZSBHVEEwMl9DSElQX1BXRAkJUzNDMjQxMF9HUEooMTEpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCisjZGVmaW5lIEdUQTAyX0dQSU9fbldMQU5fUkVTRVQJUzNDMjQxMF9HUEooMTIpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCiAKICNkZWZpbmUgR1RBMDJfSVJRX0dTRU5TT1JfMQlJUlFfRUlOVDAKICNkZWZpbmUgR1RBMDJfSVJRX01PREVNCQlJUlFfRUlOVDEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKaW5kZXggZGQzNzgyMC4uZmRmYzRkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKQEAgLTE1MSw2ICsxNTEsMTIgQEAKIAkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKIAkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfSUlDLAogCX0sIHsKKwkJLm5hbWUJCT0gImkyYyIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0M2NDEwX0NMS0NPTl9QQ0xLX0kyQzEsCisJfSwgewogCQkubmFtZQkJPSAiaWlzIiwKIAkJLmlkCQk9IDAsCiAJCS5wYXJlbnQJCT0gJmNsa19wLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jCmluZGV4IDEzNWRiMWIuLmMzNTU4NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZG1hLmMKQEAgLTY5MCwxMiArNjkwLDEyIEBACiAKIAlyZWdwdHIgPSByZWdzICsgUEwwODBfQ3hfQkFTRSgwKTsKIAotCWZvciAoY2ggPSAwOyBjaCA8IDg7IGNoKyssIGNobm8rKywgY2hwdHIrKykgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJpbmcgRE1BICVkICglcClcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgY2hubywgcmVncHRyKTsKKwlmb3IgKGNoID0gMDsgY2ggPCA4OyBjaCsrLCBjaHB0cisrKSB7CisJCXByX2RlYnVnKCIlczogcmVnaXN0ZXJpbmcgRE1BICVkICglcClcbiIsCisJCQkgX19mdW5jX18sIGNobm8gKyBjaCwgcmVncHRyKTsKIAogCQljaHB0ci0+Yml0ID0gMSA8PCBjaDsKLQkJY2hwdHItPm51bWJlciA9IGNobm87CisJCWNocHRyLT5udW1iZXIgPSBjaG5vICsgY2g7CiAJCWNocHRyLT5kbWFjID0gZG1hYzsKIAkJY2hwdHItPnJlZ3MgPSByZWdwdHI7CiAJCXJlZ3B0ciArPSBQTDA4MF9DeF9TVFJJREU7CkBAIC03MDQsNyArNzA0LDggQEAKIAkvKiBmb3IgdGhlIG1vbWVudCwgcGVybWFuZW50bHkgZW5hYmxlIHRoZSBjb250cm9sbGVyICovCiAJd3JpdGVsKFBMMDgwX0NPTkZJR19FTkFCTEUsIHJlZ3MgKyBQTDA4MF9DT05GSUcpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUEwwODA6IElSUSAlZCwgYXQgJXBcbiIsIGlycSwgcmVncyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiUEwwODA6IElSUSAlZCwgYXQgJXAsIGNoYW5uZWxzICVkLi4lZFxuIiwKKwkgICAgICAgaXJxLCByZWdzLCBjaG5vLCBjaG5vKzgpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9ncGlvbGliLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZ3Bpb2xpYi5jCmluZGV4IGZkOTlhODIuLjkyYjA5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9ncGlvbGliLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2dwaW9saWIuYwpAQCAtNzIsNyArNzIsNyBAQAogCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAogfTsKIAotaW50IHMzYzY0eHhfZ3BpbzJpbnRfZ3BtKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbikKK3N0YXRpYyBpbnQgczNjNjR4eF9ncGlvMmludF9ncG0oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQogewogCXJldHVybiBwaW4gPCA1ID8gSVJRX0VJTlQoMjMpICsgcGluIDogLUVOWElPOwogfQpAQCAtMTM4LDcgKzEzOCw3IEBACiAJfSwKIH07CiAKLWludCBzM2M2NHh4X2dwaW8yaW50X2dwbChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBwaW4pCitzdGF0aWMgaW50IHMzYzY0eHhfZ3BpbzJpbnRfZ3BsKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbikKIHsKIAlyZXR1cm4gcGluID49IDggPyBJUlFfRUlOVCgxNikgKyBwaW4gLSA4IDogLUVOWElPOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtZGs2NDEwLmMKaW5kZXggZTg1MTkyYS4uYTgwYTMxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWRrNjQxMC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKICNpZmRlZiBDT05GSUdfU01ESzY0MTBfV00xMTkwX0VWMQogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29yZS5oPgpAQCAtMzUxLDcgKzM1Miw3IEBACiAvKiBWRERfVUhfTU1DLCBMRE81IG9uIEo1ICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc21kazY0MTBfdmRkdWhfbW1jID0gewogCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9VSC9QVkREX01NQyIsCisJCS5uYW1lID0gIlBWRERfVUgrUFZERF9NTUMiLAogCQkuYWx3YXlzX29uID0gMSwKIAl9LAogfTsKQEAgLTQxNyw3ICs0MTgsNyBAQAogLyogUzNDNjR4eCBpbnRlcm5hbCBsb2dpYyAmIFBMTCAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9kY2RjMV9kYXRhID0gewogCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9JTlQvUFZERF9QTEwiLAorCQkubmFtZSA9ICJQVkREX0lOVCtQVkREX1BMTCIsCiAJCS5taW5fdVYgPSAxMjAwMDAwLAogCQkubWF4X3VWID0gMTIwMDAwMCwKIAkJLmFsd2F5c19vbiA9IDEsCkBAIC00NTIsNyArNDUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9kY2RjNF9kYXRhID0gewogCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9ISS9QVkREX0VYVC9QVkREX1NZUy9QVkNDTTJNVFYiLAorCQkubmFtZSA9ICJQVkREX0hJK1BWRERfRVhUK1BWRERfU1lTK1BWQ0NNMk1UViIsCiAJCS5taW5fdVYgPSAzMDAwMDAwLAogCQkubWF4X3VWID0gMzAwMDAwMCwKIAkJLmFsd2F5c19vbiA9IDEsCkBAIC00NjQsNyArNDY1LDcgQEAKIC8qIE9UR2kvMTE5MC1FVjEgSFBWREQgJiBBVkREICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgd204MzUwX2xkbzRfZGF0YSA9IHsKIAkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlBWRERfT1RHSS9IUFZERC9BVkREIiwKKwkJLm5hbWUgPSAiUFZERF9PVEdJK0hQVkREK0FWREQiLAogCQkubWluX3VWID0gMTIwMDAwMCwKIAkJLm1heF91ViA9IDEyMDAwMDAsCiAJCS5hcHBseV91ViA9IDEsCkBAIC01NTIsNyArNTUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtMTE5Ml9kY2RjMyA9IHsKIAkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlBWRERfTUVNL1BWRERfR1BTIiwKKwkJLm5hbWUgPSAiUFZERF9NRU0rUFZERF9HUFMiLAogCQkuYWx3YXlzX29uID0gMSwKIAl9LAogfTsKQEAgLTU2Myw3ICs1NjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgd20xMTkyX2xkbzEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJQVkREX0xDRC9QVkREX0VYVCIsCisJCS5uYW1lID0gIlBWRERfTENEK1BWRERfRVhUIiwKIAkJLmFsd2F5c19vbiA9IDEsCiAJfSwKIAkuY29uc3VtZXJfc3VwcGxpZXMgPSB3bTExOTJfbGRvMV9jb25zdW1lcnMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAta2V5cGFkLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAta2V5cGFkLmMKaW5kZXggZjhlZDBkMi4uMWQ0ZDBlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWtleXBhZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1rZXlwYWQuYwpAQCAtMTcsNyArMTcsNyBAQAogdm9pZCBzYW1zdW5nX2tleXBhZF9jZmdfZ3Bpbyh1bnNpZ25lZCBpbnQgcm93cywgdW5zaWduZWQgaW50IGNvbHMpCiB7CiAJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQSyBwaW5zIHRvIHNwZWNpYWwtZnVuY3Rpb24gMzogS1BfUk9XW3hdICovCi0JczNjX2dwaW9fY2ZncmFuZ2Vfbm9wdWxsKFMzQzY0WFhfR1BLKDgpLCA4ICsgcm93cywgUzNDX0dQSU9fU0ZOKDMpKTsKKwlzM2NfZ3Bpb19jZmdyYW5nZV9ub3B1bGwoUzNDNjRYWF9HUEsoOCksIHJvd3MsIFMzQ19HUElPX1NGTigzKSk7CiAKIAkvKiBTZXQgYWxsIHRoZSBuZWNlc3NhcnkgR1BMIHBpbnMgdG8gc3BlY2lhbC1mdW5jdGlvbiAzOiBLUF9DT0xbeF0gKi8KIAlzM2NfZ3Bpb19jZmdyYW5nZV9ub3B1bGwoUzNDNjRYWF9HUEwoMCksIGNvbHMsIFMzQ19HUElPX1NGTigzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtc2RoY2kuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS5jCmluZGV4IDFhOTQyMDMuLmYzNDRhMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS5jCkBAIC01Niw3ICs1Niw3IEBACiAJZWxzZQogCQljdHJsMyA9IChTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwxIHwgUzNDX1NESENJX0NUUkwzX0ZDU0VMMCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogQ1RSTCAyPSUwOHgsIDM9JTA4eFxuIiwgX19mdW5jX18sIGN0cmwyLCBjdHJsMyk7CisJcHJfZGVidWcoIiVzOiBDVFJMIDI9JTA4eCwgMz0lMDh4XG4iLCBfX2Z1bmNfXywgY3RybDIsIGN0cmwzKTsKIAl3cml0ZWwoY3RybDIsIHIgKyBTM0NfU0RIQ0lfQ09OVFJPTDIpOwogCXdyaXRlbChjdHJsMywgciArIFMzQ19TREhDSV9DT05UUk9MMyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TCmluZGV4IGIyZWY0NDMuLmFmZTVhNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TCkBAIC0zMiwyNSArMzIsMTMgQEAKIAkgKiBjb2RlIGFmdGVyIHJlc3VtZS4KIAkgKgogCSAqIGVudHJ5OgotCSAqCXIwID0gcG9pbnRlciB0byB0aGUgc2F2ZSBibG9jaworCSAqCXIxID0gdjpwIG9mZnNldAogCSovCiAKIEVOVFJZKHMzY19jcHVfc2F2ZSkKIAlzdG1mZAlzcCEsIHsgcjQgLSByMTIsIGxyIH0KLQotCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgRkNTRS9QSUQKLQltcmMJcDE1LCAwLCByNSwgYzMsIGMwLCAwCUAgRG9tYWluIElECi0JbXJjCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwCi0JbXJjCXAxNSwgMCwgcjcsIGMyLCBjMCwgMQlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UxCi0JbXJjCXAxNSwgMCwgcjgsIGMyLCBjMCwgMglAIFRyYW5zbGF0aW9uIFRhYmxlIENvbnRyb2wKLQltcmMJcDE1LCAwLCByOSwgYzEsIGMwLCAwCUAgQ29udHJvbCByZWdpc3RlcgotCW1yYwlwMTUsIDAsIHIxMCwgYzEsIGMwLCAxCUAgQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKLQltcmMJcDE1LCAwLCByMTEsIGMxLCBjMCwgMglAIENvLXByb2Nlc3NvciBhY2Nlc3MgY29udHJvbHMKLQotCXN0bWlhCXIwLCB7IHI0IC0gcjEzIH0JQCBTYXZlIENQIHJlZ2lzdGVycyBhbmQgU1AKLQotCUBAIHNhdmUgb3VyIHN0YXRlIHRvIHJhbQotCWJsCXMzY19wbV9jYl9mbHVzaGNhY2hlCisJbGRyCXIzLCA9cmVzdW1lX3dpdGhfbW11CisJYmwJY3B1X3N1c3BlbmQKIAogCUBAIGNhbGwgZmluYWwgc3VzcGVuZCBjb2RlCiAJbGRyCXIwLCA9cG1fY3B1X3NsZWVwCkBAIC02MSwxOCArNDksNiBAQAogcmVzdW1lX3dpdGhfbW11OgogCWxkbWZkCXNwISwgeyByNCAtIHIxMiwgcGMgfQlAIHJldHVybiwgZnJvbSBzcCBmcm9tIHMzY19jcHVfc2F2ZQogCi0JLmRhdGEKLQotCS8qIHRoZSBuZXh0IGJpdCBpcyBjb2RlLCBidXQgaXQgcmVxdWlyZXMgZWFzeSBhY2Nlc3MgdG8gdGhlCi0JICogczNjX3NsZWVwX3NhdmVfcGh5cyBkYXRhIGJlZm9yZSB0aGUgTU1VIGlzIHN3aXRjaGVkIG9uLCBzbwotCSAqIHdlIHN0b3JlIHRoZSBjb2RlIHRoYXQgbmVlZHMgdGhpcyB2YXJpYWJsZSBpbiB0aGUgLmRhdGEgd2hlcmUKLQkgKiB0aGUgdmFsdWUgY2FuIGJlIHdyaXR0ZW4gdG8gKHRoZSAudGV4dCBzZWdtZW50IGlzIFJPKS4KLQkqLwotCi0JLmdsb2JhbAlzM2Nfc2xlZXBfc2F2ZV9waHlzCi1zM2Nfc2xlZXBfc2F2ZV9waHlzOgotCS53b3JkCTAKLQogCS8qIFNsZWVwIG1hZ2ljLCB0aGUgd29yZCBiZWZvcmUgdGhlIHJlc3VtZSBlbnRyeSBwb2ludCBzbyB0aGF0IHRoZQogCSAqIGJvb3Rsb2FkZXIgY2FuIGNoZWNrIGZvciBhIHJlc3VtZWFibGUgaW1hZ2UuICovCiAKQEAgLTExMCwzNSArODYsNCBAQAogCW9ycglyMCwgcjAsICMxIDw8IDE1CQkJQCBHUE4xNQogCXN0cglyMCwgWyByMywgI1MzQzY0WFhfR1BOREFUIF0KICNlbmRpZgotCi0JLyogX192Nl9zZXR1cCBmcm9tIGFyY2gvYXJtL21tL3Byb2MtdjYuUywgZW5zdXJlIHRoYXQgdGhlIGNhY2hlcwotCSAqIGFyZSB0aG9yb3VnaGx5IGNsZWFuZWQganVzdCBpbiBjYXNlIHRoZSBib290bG9hZGVyIGRpZG4ndCBkbyBpdAotCSAqIGZvciB1cy4gKi8KLQltb3YJcjAsICMwCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDAJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGNhY2hlCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMxNSwgMAkJQCBjbGVhbitpbnZhbGlkYXRlIGNhY2hlCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCi0JQEBtY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSArIEQgVExCcwotCUBAbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkJQCBJbnZhbGlkYXRlIEkgKyBEIGNhY2hlcwotCi0JbGRyCXIwLCBzM2Nfc2xlZXBfc2F2ZV9waHlzCi0JbGRtaWEJcjAsIHsgcjQgLSByMTMgfQotCi0JbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBGQ1NFL1BJRAotCW1jcglwMTUsIDAsIHI1LCBjMywgYzAsIDAJQCBEb21haW4gSUQKLQltY3IJcDE1LCAwLCByNiwgYzIsIGMwLCAwCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTAKLQltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAxCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTEKLQltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAyCUAgVHJhbnNsYXRpb24gVGFibGUgQ29udHJvbAotCW1jcglwMTUsIDAsIHIxMCwgYzEsIGMwLCAxCUAgQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKLQotCW1vdglyMCwgIzAJCQlAIHJlc3RvcmUgY29wcm8gYWNjZXNzIGNvbnRyb2xzCi0JbWNyCXAxNSwgMCwgcjExLCBjMSwgYzAsIDIJQCBDby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2xzCi0JbWNyIAlwMTUsIDAsIHIwLCBjNywgYzUsIDQKLQotCWxkcglyMiwgPXJlc3VtZV93aXRoX21tdQotCW1jcglwMTUsIDAsIHI5LCBjMSwgYzAsIDAJCS8qIHR1cm4gbW11IGJhY2sgb24gKi8KLQlub3AKLQltb3YJcGMsIHIyCQkJCS8qIGp1bXAgYmFjayAqLwotCi0JLmVuZAorCWIJY3B1X3Jlc3VtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggMjAzZGQ1YS4uMDU4ZGFiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLwogICoKICAqIFM1UDY0NDIgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCkBAIC0xNiw1NiArMTYsNjEgQEAKICNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9DSElQSUQJKDB4RTAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCVM1UDY0NDJfUEFfQ0hJUElECisjZGVmaW5lIFM1UDY0NDJfUEFfU0RSQU0JMHgyMDAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NDQyX1BBX1NZU0NPTgorI2RlZmluZSBTNVA2NDQyX1BBX0kyUzAJCTB4QzBCMDAwMDAKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9JMlMxCQkweEYyMjAwMDAwCiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9HUElPCQkoMHhFMDIwMDAwMCkKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9DSElQSUQJMHhFMDAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMAkJKDB4RTQwMDAwMDApCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMQkJKDB4RTQxMDAwMDApCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMgkJKDB4RTQyMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfU1lTQ09OCTB4RTAxMDAwMDAKIAotI2RlZmluZSBTNVA2NDQyX1BBX1NST01DCSgweEU3MDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1JPTUMJCVM1UDY0NDJfUEFfU1JPTUMKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9HUElPCQkweEUwMjAwMDAwCisKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9WSUMwCQkweEU0MDAwMDAwCisjZGVmaW5lIFM1UDY0NDJfUEFfVklDMQkJMHhFNDEwMDAwMAorI2RlZmluZSBTNVA2NDQyX1BBX1ZJQzIJCTB4RTQyMDAwMDAKKworI2RlZmluZSBTNVA2NDQyX1BBX1NST01DCTB4RTcwMDAwMDAKIAogI2RlZmluZSBTNVA2NDQyX1BBX01ETUEJCTB4RTgwMDAwMDAKICNkZWZpbmUgUzVQNjQ0Ml9QQV9QRE1BCQkweEU5MDAwMDAwCiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9USU1FUgkoMHhFQTAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVA2NDQyX1BBX1RJTUVSCisjZGVmaW5lIFM1UDY0NDJfUEFfVElNRVIJMHhFQTAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfU1lTVElNRVIgICAJKDB4RUExMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfU1lTVElNRVIJMHhFQTEwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfV0FUQ0hET0cJKDB4RUEyMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfV0FUQ0hET0cJMHhFQTIwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfVUFSVAkJKDB4RUMwMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfVUFSVAkJMHhFQzAwMDAwMAogCi0jZGVmaW5lIFM1UF9QQV9VQVJUMAkJKFM1UDY0NDJfUEFfVUFSVCArIDB4MCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQxCQkoUzVQNjQ0Ml9QQV9VQVJUICsgMHg0MDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMgkJKFM1UDY0NDJfUEFfVUFSVCArIDB4ODAwKQotI2RlZmluZSBTNVBfU1pfVUFSVAkJU1pfMjU2Ci0KLSNkZWZpbmUgUzVQNjQ0Ml9QQV9JSUMwCQkoMHhFQzEwMDAwMCkKLQotI2RlZmluZSBTNVA2NDQyX1BBX1NEUkFNCSgweDIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU0RSQU0JCVM1UDY0NDJfUEFfU0RSQU0KKyNkZWZpbmUgUzVQNjQ0Ml9QQV9JSUMwCQkweEVDMTAwMDAwCiAKICNkZWZpbmUgUzVQNjQ0Ml9QQV9TUEkJCTB4RUMzMDAwMDAKIAotLyogSTJTICovCi0jZGVmaW5lIFM1UDY0NDJfUEFfSTJTMAkJMHhDMEIwMDAwMAotI2RlZmluZSBTNVA2NDQyX1BBX0kyUzEJCTB4RjIyMDAwMDAKLQotLyogUENNICovCiAjZGVmaW5lIFM1UDY0NDJfUEFfUENNMAkJMHhGMjQwMDAwMAogI2RlZmluZSBTNVA2NDQyX1BBX1BDTTEJCTB4RjI1MDAwMDAKIAotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NDQyX1BBX1dBVENIRE9HCi0jZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVA2NDQyX1BBX1VBUlQKKy8qIENvbXBhdGliaWx0aXkgRGVmaW5lcyAqLworCiAjZGVmaW5lIFMzQ19QQV9JSUMJCVM1UDY0NDJfUEFfSUlDMAorI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NDQyX1BBX1dBVENIRE9HCisKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJUzVQNjQ0Ml9QQV9DSElQSUQKKyNkZWZpbmUgUzVQX1BBX1NEUkFNCQlTNVA2NDQyX1BBX1NEUkFNCisjZGVmaW5lIFM1UF9QQV9TUk9NQwkJUzVQNjQ0Ml9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NDQyX1BBX1NZU0NPTgorI2RlZmluZSBTNVBfUEFfVElNRVIJCVM1UDY0NDJfUEFfVElNRVIKKworLyogVUFSVCAqLworCisjZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVA2NDQyX1BBX1VBUlQKKworI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJUzVQX1BBX1VBUlQoMCkKKyNkZWZpbmUgUzVQX1BBX1VBUlQxCQlTNVBfUEFfVUFSVCgxKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCVM1UF9QQV9VQVJUKDIpCisKKyNkZWZpbmUgUzVQX1NaX1VBUlQJCVNaXzI1NgogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA1NDg2YzhmLi5hZGI1ZjI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBTNVA2NDQwX0dQSU9fQV9OUgkoNikKICNkZWZpbmUgUzVQNjQ0MF9HUElPX0JfTlIJKDcpCiAjZGVmaW5lIFM1UDY0NDBfR1BJT19DX05SCSg4KQotI2RlZmluZSBTNVA2NDQwX0dQSU9fRl9OUgkoMikKKyNkZWZpbmUgUzVQNjQ0MF9HUElPX0ZfTlIJKDE2KQogI2RlZmluZSBTNVA2NDQwX0dQSU9fR19OUgkoNykKICNkZWZpbmUgUzVQNjQ0MF9HUElPX0hfTlIJKDEwKQogI2RlZmluZSBTNVA2NDQwX0dQSU9fSV9OUgkoMTYpCkBAIC0zNiw3ICszNiw3IEBACiAjZGVmaW5lIFM1UDY0NTBfR1BJT19CX05SCSg3KQogI2RlZmluZSBTNVA2NDUwX0dQSU9fQ19OUgkoOCkKICNkZWZpbmUgUzVQNjQ1MF9HUElPX0RfTlIJKDgpCi0jZGVmaW5lIFM1UDY0NTBfR1BJT19GX05SCSgyKQorI2RlZmluZSBTNVA2NDUwX0dQSU9fRl9OUgkoMTYpCiAjZGVmaW5lIFM1UDY0NTBfR1BJT19HX05SCSgxNCkKICNkZWZpbmUgUzVQNjQ1MF9HUElPX0hfTlIJKDEwKQogI2RlZmluZSBTNVA2NDUwX0dQSU9fSV9OUgkoMTYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCBhOTM2NWU1Li45NWM5MTI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjR4MC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL21hcC5oCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKICAqIFM1UDY0WDAgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCkBAIC0xNiwzMCArMTYsNjMgQEAKICNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgUzVQNjRYMF9QQV9TRFJBTQkoMHgyMDAwMDAwMCkKKyNkZWZpbmUgUzVQNjRYMF9QQV9TRFJBTQkweDIwMDAwMDAwCiAKLSNkZWZpbmUgUzVQNjRYMF9QQV9DSElQSUQJKDB4RTAwMDAwMDApCisjZGVmaW5lIFM1UDY0WDBfUEFfQ0hJUElECTB4RTAwMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX1NZU0NPTgkweEUwMTAwMDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9HUElPCQkweEUwMzA4MDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9WSUMwCQkweEU0MDAwMDAwCisjZGVmaW5lIFM1UDY0WDBfUEFfVklDMQkJMHhFNDEwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfU1JPTUMJMHhFNzAwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfUERNQQkJMHhFOTAwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfVElNRVIJMHhFQTAwMDAwMAorI2RlZmluZSBTNVA2NFgwX1BBX1JUQwkJMHhFQTEwMDAwMAorI2RlZmluZSBTNVA2NFgwX1BBX1dEVAkJMHhFQTIwMDAwMAorCisjZGVmaW5lIFM1UDY0NDBfUEFfSUlDMAkJMHhFQzEwNDAwMAorI2RlZmluZSBTNVA2NDQwX1BBX0lJQzEJCTB4RUMyMEYwMDAKKyNkZWZpbmUgUzVQNjQ1MF9QQV9JSUMwCQkweEVDMTAwMDAwCisjZGVmaW5lIFM1UDY0NTBfUEFfSUlDMQkJMHhFQzIwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfU1BJMAkJMHhFQzQwMDAwMAorI2RlZmluZSBTNVA2NFgwX1BBX1NQSTEJCTB4RUM1MDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX0hTT1RHCTB4RUQxMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX0hTTU1DKHgpCSgweEVEODAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKKworI2RlZmluZSBTNVA2NFgwX1BBX0kyUwkJMHhGMjAwMDAwMAorI2RlZmluZSBTNVA2NDUwX1BBX0kyUzEJCTB4RjI4MDAwMDAKKyNkZWZpbmUgUzVQNjQ1MF9QQV9JMlMyCQkweEYyOTAwMDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9QQ00JCTB4RjIxMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX0FEQwkJMHhGMzAwMDAwMAorCisvKiBDb21wYXRpYmlsdGl5IERlZmluZXMgKi8KKworI2RlZmluZSBTM0NfUEFfSFNNTUMwCQlTNVA2NFgwX1BBX0hTTU1DKDApCisjZGVmaW5lIFMzQ19QQV9IU01NQzEJCVM1UDY0WDBfUEFfSFNNTUMoMSkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJUzVQNjRYMF9QQV9IU01NQygyKQorI2RlZmluZSBTM0NfUEFfSUlDCQlTNVA2NDQwX1BBX0lJQzAKKyNkZWZpbmUgUzNDX1BBX0lJQzEJCVM1UDY0NDBfUEFfSUlDMQorI2RlZmluZSBTM0NfUEFfUlRDCQlTNVA2NFgwX1BBX1JUQworI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NFgwX1BBX1dEVAorCiAjZGVmaW5lIFM1UF9QQV9DSElQSUQJCVM1UDY0WDBfUEFfQ0hJUElECi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9TWVNDT04JKDB4RTAxMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TWVNDT04JCVM1UDY0WDBfUEFfU1lTQ09OCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9HUElPCQkoMHhFMDMwODAwMCkKLQotI2RlZmluZSBTNVA2NFgwX1BBX1ZJQzAJCSgweEU0MDAwMDAwKQotI2RlZmluZSBTNVA2NFgwX1BBX1ZJQzEJCSgweEU0MTAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfU1JPTUMJKDB4RTcwMDAwMDApCiAjZGVmaW5lIFM1UF9QQV9TUk9NQwkJUzVQNjRYMF9QQV9TUk9NQwotCi0jZGVmaW5lIFM1UDY0WDBfUEFfUERNQQkJKDB4RTkwMDAwMDApCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9USU1FUgkoMHhFQTAwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX1NZU0NPTgkJUzVQNjRYMF9QQV9TWVNDT04KICNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVA2NFgwX1BBX1RJTUVSCiAKLSNkZWZpbmUgUzVQNjRYMF9QQV9SVEMJCSgweEVBMTAwMDAwKQorI2RlZmluZSBTQU1TVU5HX1BBX0FEQwkJUzVQNjRYMF9QQV9BREMKIAotI2RlZmluZSBTNVA2NFgwX1BBX1dEVAkJKDB4RUEyMDAwMDApCisvKiBVQVJUICovCiAKICNkZWZpbmUgUzVQNjQ0MF9QQV9VQVJUKHgpCSgweEVDMDAwMDAwICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCiAjZGVmaW5lIFM1UDY0NTBfUEFfVUFSVCh4KQkoKHggPCA1KSA/ICgweEVDODAwMDAwICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpIDogKDB4RUMwMDAwMDApKQpAQCAtNTMsMzYgKzg2LDQgQEAKIAogI2RlZmluZSBTNVBfU1pfVUFSVAkJU1pfMjU2CiAKLSNkZWZpbmUgUzVQNjQ0MF9QQV9JSUMwCQkoMHhFQzEwNDAwMCkKLSNkZWZpbmUgUzVQNjQ0MF9QQV9JSUMxCQkoMHhFQzIwRjAwMCkKLSNkZWZpbmUgUzVQNjQ1MF9QQV9JSUMwCQkoMHhFQzEwMDAwMCkKLSNkZWZpbmUgUzVQNjQ1MF9QQV9JSUMxCQkoMHhFQzIwMDAwMCkKLQotI2RlZmluZSBTNVA2NFgwX1BBX1NQSTAJCSgweEVDNDAwMDAwKQotI2RlZmluZSBTNVA2NFgwX1BBX1NQSTEJCSgweEVDNTAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfSFNPVEcJKDB4RUQxMDAwMDApCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9IU01NQyh4KQkoMHhFRDgwMDAwMCArICgoeCkgKiAweDEwMDAwMCkpCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9JMlMJCSgweEYyMDAwMDAwKQotI2RlZmluZSBTNVA2NDUwX1BBX0kyUzEJCTB4RjI4MDAwMDAKLSNkZWZpbmUgUzVQNjQ1MF9QQV9JMlMyCQkweEYyOTAwMDAwCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9QQ00JCSgweEYyMTAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfQURDCQkoMHhGMzAwMDAwMCkKLQotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotCi0jZGVmaW5lIFMzQ19QQV9IU01NQzAJCVM1UDY0WDBfUEFfSFNNTUMoMCkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJUzVQNjRYMF9QQV9IU01NQygxKQotI2RlZmluZSBTM0NfUEFfSFNNTUMyCQlTNVA2NFgwX1BBX0hTTU1DKDIpCi0jZGVmaW5lIFMzQ19QQV9JSUMJCVM1UDY0NDBfUEFfSUlDMAotI2RlZmluZSBTM0NfUEFfSUlDMQkJUzVQNjQ0MF9QQV9JSUMxCi0jZGVmaW5lIFMzQ19QQV9SVEMJCVM1UDY0WDBfUEFfUlRDCi0jZGVmaW5lIFMzQ19QQV9XRFQJCVM1UDY0WDBfUEFfV0RUCi0KLSNkZWZpbmUgU0FNU1VOR19QQV9BREMJCVM1UDY0WDBfUEFfQURDCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCAzMjg0NjdiLi5jY2JlNmI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTEsNSArMSw4IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oCiAgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCiAgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgogICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgogICoKQEAgLTE2LDE0NSArMTksMTE1IEBACiAjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgogI2luY2x1ZGUgPHBsYXQvbWFwLXM1cC5oPgogCi0vKgotICogbWFwLWJhc2UuaCBoYXMgYWxyZWFkeSBkZWZpbmVkIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKLSAqIFMzQ19WQV9JUlEJCVMzQ19BRERSKDB4MDAwMDAwMDApCWlycSBjb250cm9sbGVyKHMpCi0gKiBTM0NfVkFfU1lTCQlTM0NfQUREUigweDAwMTAwMDAwKQlzeXN0ZW0gY29udHJvbAotICogUzNDX1ZBX01FTQkJUzNDX0FERFIoMHgwMDIwMDAwMCkJc3lzdGVtIGNvbnRyb2wgKG5vdCB1c2VkKQotICogUzNDX1ZBX1RJTUVSCQlTM0NfQUREUigweDAwMzAwMDAwKQl0aW1lciBibG9jawotICogUzNDX1ZBX1dBVENIRE9HCVMzQ19BRERSKDB4MDA0MDAwMDApCXdhdGNoZG9nCi0gKiBTM0NfVkFfVUFSVAkJUzNDX0FERFIoMHgwMTAwMDAwMCkJVUFSVAotICoKLSAqIFM1UEMxMDAgc3BlY2lmaWMgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBjYW4gYmUgZGVmaW5lZCBoZXJlCi0gKiBTNVBDMVhYX1ZBX0dQSU8JUzNDX0FERFIoMHgwMDUwMDAwMCkJR1BJTwotICoKLSAqLworI2RlZmluZSBTNVBDMTAwX1BBX1NEUkFNCQkweDIwMDAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9PTkVOQU5EX0JVRgkoMHhCMDAwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9TWl9PTkVOQU5EX0JVRgkoU1pfMjU2TSAtIFNaXzMyTSkKKyNkZWZpbmUgUzVQQzEwMF9QQV9PTkVOQU5ECQkweEU3MTAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfT05FTkFORF9CVUYJCTB4QjAwMDAwMDAKIAotLyogQ2hpcCBJRCAqLworI2RlZmluZSBTNVBDMTAwX1BBX0NISVBJRAkJMHhFMDAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfQ0hJUElECSgweEUwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfQ0hJUElECQlTNVBDMTAwX1BBX0NISVBJRAorI2RlZmluZSBTNVBDMTAwX1BBX1NZU0NPTgkJMHhFMDEwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVBDMTAwX1BBX1NZU0NPTgorI2RlZmluZSBTNVBDMTAwX1BBX09USEVSUwkJMHhFMDIwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfT1RIRVJTCSgweEUwMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1ZBX09USEVSUwkoUzNDX1ZBX1NZUyArIDB4MTAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfR1BJTwkJCTB4RTAzMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0dQSU8JCSgweEUwMzAwMDAwKQotI2RlZmluZSBTNVBDMVhYX1ZBX0dQSU8JCVMzQ19BRERSKDB4MDA1MDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVklDMAkJCTB4RTQwMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9WSUMxCQkJMHhFNDEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzIJCQkweEU0MjAwMDAwCiAKLS8qIEludGVycnVwdCAqLwotI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzAJCSgweEU0MDAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzEJCSgweEU0MTAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzIJCSgweEU0MjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1ZBX1ZJQwkJUzNDX1ZBX0lSUQotI2RlZmluZSBTNVBDMTAwX1ZBX1ZJQ19PRkZTRVQJMHgxMDAwMAotI2RlZmluZSBTNVBDMVhYX1ZBX1ZJQyh4KQkoUzVQQzEwMF9WQV9WSUMgKyAoKHgpICogUzVQQzEwMF9WQV9WSUNfT0ZGU0VUKSkKKyNkZWZpbmUgUzVQQzEwMF9QQV9TUk9NQwkJMHhFNzAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1JPTUMJKDB4RTcwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TUk9NQwkJUzVQQzEwMF9QQV9TUk9NQworI2RlZmluZSBTNVBDMTAwX1BBX0NGQ09OCQkweEU3ODAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9PTkVOQU5ECSgweEU3MTAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX01ETUEJCQkweEU4MTAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfUERNQTAJCTB4RTkwMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9QRE1BMQkJMHhFOTIwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfQ0ZDT04JKDB4RTc4MDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVElNRVIJCTB4RUEwMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9TWVNUSU1FUgkJMHhFQTEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1dBVENIRE9HCQkweEVBMjAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfUlRDCQkJMHhFQTMwMDAwMAogCi0vKiBETUEgKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9NRE1BCQkoMHhFODEwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9QRE1BMAkoMHhFOTAwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9QRE1BMQkoMHhFOTIwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9VQVJUCQkJMHhFQzAwMDAwMAogCi0vKiBUaW1lciAqLwotI2RlZmluZSBTNVBDMTAwX1BBX1RJTUVSCSgweEVBMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfVElNRVIJCVM1UEMxMDBfUEFfVElNRVIKKyNkZWZpbmUgUzVQQzEwMF9QQV9JSUMwCQkJMHhFQzEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0lJQzEJCQkweEVDMjAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9TWVNUSU1FUgkoMHhFQTEwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9TUEkwCQkJMHhFQzMwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1NQSTEJCQkweEVDNDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfU1BJMgkJCTB4RUM1MDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX1dBVENIRE9HCSgweEVBMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1JUQwkJKDB4RUEzMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVVNCX0hTT1RHCQkweEVEMjAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfVVNCX0hTUEhZCQkweEVEMzAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9VQVJUCQkoMHhFQzAwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9IU01NQyh4KQkJKDB4RUQ4MDAwMDAgKyAoKHgpICogMHgxMDAwMDApKQogCi0jZGVmaW5lIFM1UF9QQV9VQVJUMAkJKFM1UEMxMDBfUEFfVUFSVCArIDB4MCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQxCQkoUzVQQzEwMF9QQV9VQVJUICsgMHg0MDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMgkJKFM1UEMxMDBfUEFfVUFSVCArIDB4ODAwKQotI2RlZmluZSBTNVBfUEFfVUFSVDMJCShTNVBDMTAwX1BBX1VBUlQgKyAweEMwMCkKLSNkZWZpbmUgUzVQX1NaX1VBUlQJCVNaXzI1NgorI2RlZmluZSBTNVBDMTAwX1BBX0ZCCQkJMHhFRTAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfSUlDMAkJKDB4RUMxMDAwMDApCi0jZGVmaW5lIFM1UEMxMDBfUEFfSUlDMQkJKDB4RUMyMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfRklNQzAJCTB4RUUyMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9GSU1DMQkJMHhFRTMwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMyCQkweEVFNDAwMDAwCiAKLS8qIFNQSSAqLwotI2RlZmluZSBTNVBDMTAwX1BBX1NQSTAJCTB4RUMzMDAwMDAKLSNkZWZpbmUgUzVQQzEwMF9QQV9TUEkxCQkweEVDNDAwMDAwCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1BJMgkJMHhFQzUwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0kyUzAJCQkweEYyMDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfSTJTMQkJCTB4RjIxMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9JMlMyCQkJMHhGMjIwMDAwMAogCi0vKiBVU0IgSFMgT1RHICovCi0jZGVmaW5lIFM1UEMxMDBfUEFfVVNCX0hTT1RHCSgweEVEMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1VTQl9IU1BIWQkoMHhFRDMwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9BQzk3CQkJMHhGMjMwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfRkIJCSgweEVFMDAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX1BDTTAJCQkweEYyNDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfUENNMQkJCTB4RjI1MDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMwCSgweEVFMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMxCSgweEVFMzAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMyCSgweEVFNDAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX1NQRElGCQkweEYyNjAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9JMlMwCQkoMHhGMjAwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9JMlMxCQkoMHhGMjEwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9JMlMyCQkoMHhGMjIwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9UU0FEQwkJMHhGMzAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfQUM5NwkJMHhGMjMwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0tFWVBBRAkJMHhGMzEwMDAwMAogCi0vKiBQQ00gKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9QQ00wCQkweEYyNDAwMDAwCi0jZGVmaW5lIFM1UEMxMDBfUEFfUENNMQkJMHhGMjUwMDAwMAorLyogQ29tcGF0aWJpbHRpeSBEZWZpbmVzICovCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9TUERJRgkweEYyNjAwMDAwCisjZGVmaW5lIFMzQ19QQV9GQgkJCVM1UEMxMDBfUEFfRkIKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMAkJCVM1UEMxMDBfUEFfSFNNTUMoMCkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJCVM1UEMxMDBfUEFfSFNNTUMoMSkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJCVM1UEMxMDBfUEFfSFNNTUMoMikKKyNkZWZpbmUgUzNDX1BBX0lJQwkJCVM1UEMxMDBfUEFfSUlDMAorI2RlZmluZSBTM0NfUEFfSUlDMQkJCVM1UEMxMDBfUEFfSUlDMQorI2RlZmluZSBTM0NfUEFfS0VZUEFECQkJUzVQQzEwMF9QQV9LRVlQQUQKKyNkZWZpbmUgUzNDX1BBX09ORU5BTkQJCQlTNVBDMTAwX1BBX09ORU5BTkQKKyNkZWZpbmUgUzNDX1BBX09ORU5BTkRfQlVGCQlTNVBDMTAwX1BBX09ORU5BTkRfQlVGCisjZGVmaW5lIFMzQ19QQV9SVEMJCQlTNVBDMTAwX1BBX1JUQworI2RlZmluZSBTM0NfUEFfVFNBREMJCQlTNVBDMTAwX1BBX1RTQURDCisjZGVmaW5lIFMzQ19QQV9VU0JfSFNPVEcJCVM1UEMxMDBfUEFfVVNCX0hTT1RHCisjZGVmaW5lIFMzQ19QQV9VU0JfSFNQSFkJCVM1UEMxMDBfUEFfVVNCX0hTUEhZCisjZGVmaW5lIFMzQ19QQV9XRFQJCQlTNVBDMTAwX1BBX1dBVENIRE9HCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9UU0FEQwkoMHhGMzAwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJCVM1UEMxMDBfUEFfQ0hJUElECisjZGVmaW5lIFM1UF9QQV9GSU1DMAkJCVM1UEMxMDBfUEFfRklNQzAKKyNkZWZpbmUgUzVQX1BBX0ZJTUMxCQkJUzVQQzEwMF9QQV9GSU1DMQorI2RlZmluZSBTNVBfUEFfRklNQzIJCQlTNVBDMTAwX1BBX0ZJTUMyCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJCVM1UEMxMDBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQQzEwMF9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQQzEwMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQQzEwMF9QQV9USU1FUgogCi0vKiBLRVlQQUQgKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9LRVlQQUQJKDB4RjMxMDAwMDApCisjZGVmaW5lIFNBTVNVTkdfUEFfQURDCQkJUzVQQzEwMF9QQV9UU0FEQworI2RlZmluZSBTQU1TVU5HX1BBX0NGQ09OCQlTNVBDMTAwX1BBX0NGQ09OCisjZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECQlTNVBDMTAwX1BBX0tFWVBBRAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfSFNNTUMoeCkJKDB4RUQ4MDAwMDAgKyAoKHgpICogMHgxMDAwMDApKQorI2RlZmluZSBTNVBDMTAwX1ZBX09USEVSUwkJKFMzQ19WQV9TWVMgKyAweDEwMDAwKQogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU0RSQU0JKDB4MjAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TRFJBTQkJUzVQQzEwMF9QQV9TRFJBTQorI2RlZmluZSBTM0NfU1pfT05FTkFORF9CVUYJCShTWl8yNTZNIC0gU1pfMzJNKQogCi0vKiBjb21wYXRpYmlsdGl5IGRlZmluZXMuICovCi0jZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVBDMTAwX1BBX1VBUlQKLSNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQQzEwMF9QQV9JSUMwCi0jZGVmaW5lIFMzQ19QQV9JSUMxCQlTNVBDMTAwX1BBX0lJQzEKLSNkZWZpbmUgUzNDX1BBX0ZCCQlTNVBDMTAwX1BBX0ZCCi0jZGVmaW5lIFMzQ19QQV9HMkQJCVM1UEMxMDBfUEFfRzJECi0jZGVmaW5lIFMzQ19QQV9HM0QJCVM1UEMxMDBfUEFfRzNECi0jZGVmaW5lIFMzQ19QQV9KUEVHCQlTNVBDMTAwX1BBX0pQRUcKLSNkZWZpbmUgUzNDX1BBX1JPVEFUT1IJCVM1UEMxMDBfUEFfUk9UQVRPUgotI2RlZmluZSBTNVBfVkFfVklDMAkJUzVQQzFYWF9WQV9WSUMoMCkKLSNkZWZpbmUgUzVQX1ZBX1ZJQzEJCVM1UEMxWFhfVkFfVklDKDEpCi0jZGVmaW5lIFM1UF9WQV9WSUMyCQlTNVBDMVhYX1ZBX1ZJQygyKQotI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCVM1UEMxMDBfUEFfVVNCX0hTT1RHCi0jZGVmaW5lIFMzQ19QQV9VU0JfSFNQSFkJUzVQQzEwMF9QQV9VU0JfSFNQSFkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMAkJUzVQQzEwMF9QQV9IU01NQygwKQotI2RlZmluZSBTM0NfUEFfSFNNTUMxCQlTNVBDMTAwX1BBX0hTTU1DKDEpCi0jZGVmaW5lIFMzQ19QQV9IU01NQzIJCVM1UEMxMDBfUEFfSFNNTUMoMikKLSNkZWZpbmUgUzNDX1BBX0tFWVBBRAkJUzVQQzEwMF9QQV9LRVlQQUQKLSNkZWZpbmUgUzNDX1BBX1dEVAkJUzVQQzEwMF9QQV9XQVRDSERPRwotI2RlZmluZSBTM0NfUEFfVFNBREMJCVM1UEMxMDBfUEFfVFNBREMKLSNkZWZpbmUgUzNDX1BBX09ORU5BTkQJCVM1UEMxMDBfUEFfT05FTkFORAotI2RlZmluZSBTM0NfUEFfT05FTkFORF9CVUYJUzVQQzEwMF9QQV9PTkVOQU5EX0JVRgotI2RlZmluZSBTM0NfU1pfT05FTkFORF9CVUYJUzVQQzEwMF9TWl9PTkVOQU5EX0JVRgotI2RlZmluZSBTM0NfUEFfUlRDCQlTNVBDMTAwX1BBX1JUQworLyogVUFSVCAqLwogCi0jZGVmaW5lIFNBTVNVTkdfUEFfQURDCQlTNVBDMTAwX1BBX1RTQURDCi0jZGVmaW5lIFNBTVNVTkdfUEFfQ0ZDT04JUzVQQzEwMF9QQV9DRkNPTgotI2RlZmluZSBTQU1TVU5HX1BBX0tFWVBBRAlTNVBDMTAwX1BBX0tFWVBBRAorI2RlZmluZSBTM0NfUEFfVUFSVAkJCVM1UEMxMDBfUEFfVUFSVAogCi0jZGVmaW5lIFM1UF9QQV9GSU1DMAkJUzVQQzEwMF9QQV9GSU1DMAotI2RlZmluZSBTNVBfUEFfRklNQzEJCVM1UEMxMDBfUEFfRklNQzEKLSNkZWZpbmUgUzVQX1BBX0ZJTUMyCQlTNVBDMTAwX1BBX0ZJTUMyCisjZGVmaW5lIFM1UF9QQV9VQVJUKHgpCQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJCVM1UF9QQV9VQVJUKDApCisjZGVmaW5lIFM1UF9QQV9VQVJUMQkJCVM1UF9QQV9VQVJUKDEpCisjZGVmaW5lIFM1UF9QQV9VQVJUMgkJCVM1UF9QQV9VQVJUKDIpCisjZGVmaW5lIFM1UF9QQV9VQVJUMwkJCVM1UF9QQV9VQVJUKDMpCiAKLSNlbmRpZiAvKiBfX0FTTV9BUkNIX0MxMDBfTUFQX0ggKi8KKyNkZWZpbmUgUzVQX1NaX1VBUlQJCQlTWl8yNTYKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDM2MTE0OTIuLjFkZDU4ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KICAqCiAgKiBTNVBWMjEwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucwpAQCAtMTYsMTIyICsxNiwxMjAgQEAKICNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9TUk9NX0JBTks1CSgweEE4MDAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX1NEUkFNCQkweDIwMDAwMDAwCiAKLSNkZWZpbmUgUzVQQzExMF9QQV9PTkVOQU5ECSgweEIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfT05FTkFORAkJUzVQQzExMF9QQV9PTkVOQU5ECisjZGVmaW5lIFM1UFYyMTBfUEFfU1JPTV9CQU5LNQkJMHhBODAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMTBfUEFfT05FTkFORF9ETUEJKDB4QjA2MDAwMDApCi0jZGVmaW5lIFM1UF9QQV9PTkVOQU5EX0RNQQlTNVBDMTEwX1BBX09ORU5BTkRfRE1BCisjZGVmaW5lIFM1UEMxMTBfUEFfT05FTkFORAkJMHhCMDAwMDAwMAorI2RlZmluZSBTNVBDMTEwX1BBX09ORU5BTkRfRE1BCQkweEIwNjAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9DSElQSUQJKDB4RTAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCVM1UFYyMTBfUEFfQ0hJUElECisjZGVmaW5lIFM1UFYyMTBfUEFfQ0hJUElECQkweEUwMDAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9TWVNDT04JKDB4RTAxMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TWVNDT04JCVM1UFYyMTBfUEFfU1lTQ09OCisjZGVmaW5lIFM1UFYyMTBfUEFfU1lTQ09OCQkweEUwMTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9HUElPCQkoMHhFMDIwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9HUElPCQkJMHhFMDIwMDAwMAogCi0vKiBTUEkgKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9TUEkwCQkweEUxMzAwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1BJMQkJMHhFMTQwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1NQRElGCQkweEUxMTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9LRVlQQUQJKDB4RTE2MDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfU1BJMAkJCTB4RTEzMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9TUEkxCQkJMHhFMTQwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlDMAkJKDB4RTE4MDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlDMQkJKDB4RkFCMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlDMgkJKDB4RTFBMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfS0VZUEFECQkweEUxNjAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9USU1FUgkoMHhFMjUwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVBWMjEwX1BBX1RJTUVSCisjZGVmaW5lIFM1UFYyMTBfUEFfQURDCQkJMHhFMTcwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1lTVElNRVIJKDB4RTI2MDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfSUlDMAkJCTB4RTE4MDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9JSUMxCQkJMHhGQUIwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0lJQzIJCQkweEUxQTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9XQVRDSERPRwkoMHhFMjcwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9BQzk3CQkJMHhFMjIwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfUlRDCQkoMHhFMjgwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9VQVJUCQkoMHhFMjkwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9QQ00wCQkJMHhFMjMwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1BDTTEJCQkweEUxMjAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfUENNMgkJCTB4RTJCMDAwMDAKIAotI2RlZmluZSBTNVBfUEFfVUFSVDAJCShTNVBWMjEwX1BBX1VBUlQgKyAweDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMQkJKFM1UFYyMTBfUEFfVUFSVCArIDB4NDAwKQotI2RlZmluZSBTNVBfUEFfVUFSVDIJCShTNVBWMjEwX1BBX1VBUlQgKyAweDgwMCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQzCQkoUzVQVjIxMF9QQV9VQVJUICsgMHhDMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfVElNRVIJCTB4RTI1MDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9TWVNUSU1FUgkJMHhFMjYwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1dBVENIRE9HCQkweEUyNzAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfUlRDCQkJMHhFMjgwMDAwMAogCi0jZGVmaW5lIFM1UF9TWl9VQVJUCQlTWl8yNTYKKyNkZWZpbmUgUzVQVjIxMF9QQV9VQVJUCQkJMHhFMjkwMDAwMAogCi0jZGVmaW5lIFMzQ19WQV9VQVJUeCh4KQkJKFMzQ19WQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UFYyMTBfUEFfU1JPTUMJCTB4RTgwMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX1NST01DCSgweEU4MDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1JPTUMJCVM1UFYyMTBfUEFfU1JPTUMKKyNkZWZpbmUgUzVQVjIxMF9QQV9DRkNPTgkJMHhFODIwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfQ0ZDT04JKDB4RTgyMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfSFNNTUMoeCkJCSgweEVCMDAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKIAotI2RlZmluZSBTNVBWMjEwX1BBX01ETUEJCTB4RkEyMDAwMDAKLSNkZWZpbmUgUzVQVjIxMF9QQV9QRE1BMAkweEUwOTAwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfUERNQTEJMHhFMEEwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0hTT1RHCQkweEVDMDAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfSFNQSFkJCTB4RUMxMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0ZCCQkoMHhGODAwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9JSVMwCQkJMHhFRUUzMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0lJUzEJCQkweEUyMTAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfSUlTMgkJCTB4RTJBMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMwCSgweEZCMjAwMDAwKQotI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMxCSgweEZCMzAwMDAwKQotI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMyCSgweEZCNDAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX0RNQzAJCQkweEYwMDAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfRE1DMQkJCTB4RjE0MDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0hTTU1DKHgpCSgweEVCMDAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKKyNkZWZpbmUgUzVQVjIxMF9QQV9WSUMwCQkJMHhGMjAwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1ZJQzEJCQkweEYyMTAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfVklDMgkJCTB4RjIyMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9WSUMzCQkJMHhGMjMwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfSFNPVEcJKDB4RUMwMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfSFNQSFkJKDB4RUMxMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfRkIJCQkweEY4MDAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMwCQkoMHhGMjAwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMxCQkoMHhGMjEwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMyCQkoMHhGMjIwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMzCQkoMHhGMjMwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9NRE1BCQkJMHhGQTIwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1BETUEwCQkweEUwOTAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfUERNQTEJCTB4RTBBMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX1NEUkFNCSgweDIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU0RSQU0JCVM1UFYyMTBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQVjIxMF9QQV9NSVBJX0NTSVMJCTB4RkE2MDAwMDAKIAotLyogUy9QRElGICovCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1BESUYJMHhFMTEwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMwCQkweEZCMjAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfRklNQzEJCTB4RkIzMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9GSU1DMgkJMHhGQjQwMDAwMAogCi0vKiBJMlMgKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9JSVMwCQkweEVFRTMwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlTMQkJMHhFMjEwMDAwMAotI2RlZmluZSBTNVBWMjEwX1BBX0lJUzIJCTB4RTJBMDAwMDAKKy8qIENvbXBhdGliaWx0aXkgRGVmaW5lcyAqLwogCi0vKiBQQ00gKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9QQ00wCQkweEUyMzAwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfUENNMQkJMHhFMTIwMDAwMAotI2RlZmluZSBTNVBWMjEwX1BBX1BDTTIJCTB4RTJCMDAwMDAKKyNkZWZpbmUgUzNDX1BBX0ZCCQkJUzVQVjIxMF9QQV9GQgorI2RlZmluZSBTM0NfUEFfSFNNTUMwCQkJUzVQVjIxMF9QQV9IU01NQygwKQorI2RlZmluZSBTM0NfUEFfSFNNTUMxCQkJUzVQVjIxMF9QQV9IU01NQygxKQorI2RlZmluZSBTM0NfUEFfSFNNTUMyCQkJUzVQVjIxMF9QQV9IU01NQygyKQorI2RlZmluZSBTM0NfUEFfSFNNTUMzCQkJUzVQVjIxMF9QQV9IU01NQygzKQorI2RlZmluZSBTM0NfUEFfSUlDCQkJUzVQVjIxMF9QQV9JSUMwCisjZGVmaW5lIFMzQ19QQV9JSUMxCQkJUzVQVjIxMF9QQV9JSUMxCisjZGVmaW5lIFMzQ19QQV9JSUMyCQkJUzVQVjIxMF9QQV9JSUMyCisjZGVmaW5lIFMzQ19QQV9SVEMJCQlTNVBWMjEwX1BBX1JUQworI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCQlTNVBWMjEwX1BBX0hTT1RHCisjZGVmaW5lIFMzQ19QQV9XRFQJCQlTNVBWMjEwX1BBX1dBVENIRE9HCiAKLS8qIEFDOTcgKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9BQzk3CQkweEUyMjAwMDAwCisjZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBWMjEwX1BBX0NISVBJRAorI2RlZmluZSBTNVBfUEFfRklNQzAJCQlTNVBWMjEwX1BBX0ZJTUMwCisjZGVmaW5lIFM1UF9QQV9GSU1DMQkJCVM1UFYyMTBfUEFfRklNQzEKKyNkZWZpbmUgUzVQX1BBX0ZJTUMyCQkJUzVQVjIxMF9QQV9GSU1DMgorI2RlZmluZSBTNVBfUEFfTUlQSV9DU0lTMAkJUzVQVjIxMF9QQV9NSVBJX0NTSVMKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkQJCQlTNVBDMTEwX1BBX09ORU5BTkQKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkRfRE1BCQlTNVBDMTEwX1BBX09ORU5BTkRfRE1BCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJCVM1UFYyMTBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQVjIxMF9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjIxMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQVjIxMF9QQV9USU1FUgogCi0jZGVmaW5lIFM1UFYyMTBfUEFfQURDCQkoMHhFMTcwMDAwMCkKKyNkZWZpbmUgU0FNU1VOR19QQV9BREMJCQlTNVBWMjEwX1BBX0FEQworI2RlZmluZSBTQU1TVU5HX1BBX0NGQ09OCQlTNVBWMjEwX1BBX0NGQ09OCisjZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECQlTNVBWMjEwX1BBX0tFWVBBRAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfRE1DMAkJKDB4RjAwMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfRE1DMQkJKDB4RjE0MDAwMDApCisvKiBVQVJUICovCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9NSVBJX0NTSVMJMHhGQTYwMDAwMAorI2RlZmluZSBTM0NfVkFfVUFSVHgoeCkJCQkoUzNDX1ZBX1VBUlQgKyAoKHgpICogUzNDX1VBUlRfT0ZGU0VUKSkKIAotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotI2RlZmluZSBTM0NfUEFfVUFSVAkJUzVQVjIxMF9QQV9VQVJUCi0jZGVmaW5lIFMzQ19QQV9IU01NQzAJCVM1UFYyMTBfUEFfSFNNTUMoMCkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJUzVQVjIxMF9QQV9IU01NQygxKQotI2RlZmluZSBTM0NfUEFfSFNNTUMyCQlTNVBWMjEwX1BBX0hTTU1DKDIpCi0jZGVmaW5lIFMzQ19QQV9IU01NQzMJCVM1UFYyMTBfUEFfSFNNTUMoMykKLSNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQVjIxMF9QQV9JSUMwCi0jZGVmaW5lIFMzQ19QQV9JSUMxCQlTNVBWMjEwX1BBX0lJQzEKLSNkZWZpbmUgUzNDX1BBX0lJQzIJCVM1UFYyMTBfUEFfSUlDMgotI2RlZmluZSBTM0NfUEFfRkIJCVM1UFYyMTBfUEFfRkIKLSNkZWZpbmUgUzNDX1BBX1JUQwkJUzVQVjIxMF9QQV9SVEMKLSNkZWZpbmUgUzNDX1BBX1dEVAkJUzVQVjIxMF9QQV9XQVRDSERPRwotI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCVM1UFYyMTBfUEFfSFNPVEcKLSNkZWZpbmUgUzVQX1BBX0ZJTUMwCQlTNVBWMjEwX1BBX0ZJTUMwCi0jZGVmaW5lIFM1UF9QQV9GSU1DMQkJUzVQVjIxMF9QQV9GSU1DMQotI2RlZmluZSBTNVBfUEFfRklNQzIJCVM1UFYyMTBfUEFfRklNQzIKLSNkZWZpbmUgUzVQX1BBX01JUElfQ1NJUzAJUzVQVjIxMF9QQV9NSVBJX0NTSVMKKyNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMjEwX1BBX1VBUlQKIAotI2RlZmluZSBTQU1TVU5HX1BBX0FEQwkJUzVQVjIxMF9QQV9BREMKLSNkZWZpbmUgU0FNU1VOR19QQV9DRkNPTglTNVBWMjEwX1BBX0NGQ09OCi0jZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECVM1UFYyMTBfUEFfS0VZUEFECisjZGVmaW5lIFM1UF9QQV9VQVJUKHgpCQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJCVM1UF9QQV9VQVJUKDApCisjZGVmaW5lIFM1UF9QQV9VQVJUMQkJCVM1UF9QQV9VQVJUKDEpCisjZGVmaW5lIFM1UF9QQV9VQVJUMgkJCVM1UF9QQV9VQVJUKDIpCisjZGVmaW5lIFM1UF9QQV9VQVJUMwkJCVM1UF9QQV9VQVJUKDMpCisKKyNkZWZpbmUgUzVQX1NaX1VBUlQJCQlTWl8yNTYKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtYXF1aWxhLmMKaW5kZXggNDYxYWEwMzUuLjU1N2FkZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9sZG8zX2RhdGEgPSB7CiAJLmNvbnN0cmFpbnRzCT0gewotCQkubmFtZQkJPSAiVlVTQi9NSVBJXzEuMVYiLAorCQkubmFtZQkJPSAiVlVTQitNSVBJXzEuMVYiLAogCQkubWluX3VWCQk9IDExMDAwMDAsCiAJCS5tYXhfdVYJCT0gMTEwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2xkbzhfZGF0YSA9IHsKIAkuY29uc3RyYWludHMJPSB7Ci0JCS5uYW1lCQk9ICJWVVNCL1ZBRENfMy4zViIsCisJCS5uYW1lCQk9ICJWVVNCK1ZBRENfMy4zViIsCiAJCS5taW5fdVYJCT0gMzMwMDAwMCwKIAkJLm1heF91VgkJPSAzMzAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtMjA3LDcgKzIwNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhcXVpbGFfbGRvOV9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZDQy9WQ0FNXzIuOFYiLAorCQkubmFtZQkJPSAiVkNDK1ZDQU1fMi44ViIsCiAJCS5taW5fdVYJCT0gMjgwMDAwMCwKIAkJLm1heF91VgkJPSAyODAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtMzgxLDkgKzM4MSwxMiBAQAogCS5idWNrMV9zZXQxCT0gUzVQVjIxMF9HUEgwKDMpLAogCS5idWNrMV9zZXQyCT0gUzVQVjIxMF9HUEgwKDQpLAogCS5idWNrMl9zZXQzCT0gUzVQVjIxMF9HUEgwKDUpLAotCS5idWNrMV9tYXhfdm9sdGFnZTEgPSAxMjAwMDAwLAotCS5idWNrMV9tYXhfdm9sdGFnZTIgPSAxMjAwMDAwLAotCS5idWNrMl9tYXhfdm9sdGFnZSA9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2UxCT0gMTIwMDAwMCwKKwkuYnVjazFfdm9sdGFnZTIJPSAxMjAwMDAwLAorCS5idWNrMV92b2x0YWdlMwk9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2U0CT0gMTIwMDAwMCwKKwkuYnVjazJfdm9sdGFnZTEJPSAxMjAwMDAwLAorCS5idWNrMl92b2x0YWdlMgk9IDEyMDAwMDAsCiB9OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYwppbmRleCBlMjJkNTExLi4wNTZmNWM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1nb25pLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtZ29uaS5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvM19kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZVU0IvTUlQSV8xLjFWIiwKKwkJLm5hbWUJCT0gIlZVU0IrTUlQSV8xLjFWIiwKIAkJLm1pbl91VgkJPSAxMTAwMDAwLAogCQkubWF4X3VWCQk9IDExMDAwMDAsCiAJCS5hcHBseV91Vgk9IDEsCkBAIC0zMzcsNyArMzM3LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvOF9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZVU0IvVkFEQ18zLjNWIiwKKwkJLm5hbWUJCT0gIlZVU0IrVkFEQ18zLjNWIiwKIAkJLm1pbl91VgkJPSAzMzAwMDAwLAogCQkubWF4X3VWCQk9IDMzMDAwMDAsCiAJCS5hcHBseV91Vgk9IDEsCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvOV9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZDQy9WQ0FNXzIuOFYiLAorCQkubmFtZQkJPSAiVkNDK1ZDQU1fMi44ViIsCiAJCS5taW5fdVYJCT0gMjgwMDAwMCwKIAkJLm1heF91VgkJPSAyODAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtNTIxLDkgKzUyMSwxMiBAQAogCS5idWNrMV9zZXQxCT0gUzVQVjIxMF9HUEgwKDMpLAogCS5idWNrMV9zZXQyCT0gUzVQVjIxMF9HUEgwKDQpLAogCS5idWNrMl9zZXQzCT0gUzVQVjIxMF9HUEgwKDUpLAotCS5idWNrMV9tYXhfdm9sdGFnZTEgPSAxMjAwMDAwLAotCS5idWNrMV9tYXhfdm9sdGFnZTIgPSAxMjAwMDAwLAotCS5idWNrMl9tYXhfdm9sdGFnZSA9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2UxCT0gMTIwMDAwMCwKKwkuYnVjazFfdm9sdGFnZTIJPSAxMjAwMDAwLAorCS5idWNrMV92b2x0YWdlMwk9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2U0CT0gMTIwMDAwMCwKKwkuYnVjazJfdm9sdGFnZTEJPSAxMjAwMDAwLAorCS5idWNrMl92b2x0YWdlMgk9IDEyMDAwMDAsCiB9OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NsZWVwLlMKaW5kZXggZDRkMjIyYi4uYTNkNjQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NsZWVwLlMKQEAgLTM1LDUwICszNSwyNCBAQAogCS8qIHMzY19jcHVfc2F2ZQogCSAqCiAJICogZW50cnk6Ci0JICoJcjAgPSBzYXZlIGFkZHJlc3MgKHZpcnR1YWwgYWRkciBvZiBzM2Nfc2xlZXBfc2F2ZV9waHlzKQorCSAqCXIxID0gdjpwIG9mZnNldAogCSovCiAKIEVOVFJZKHMzY19jcHVfc2F2ZSkKIAogCXN0bWZkCXNwISwgeyByMyAtIHIxMiwgbHIgfQotCi0JbXJjCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBGQ1NFL1BJRAotCW1yYwlwMTUsIDAsIHI1LCBjMywgYzAsIDAJQCBEb21haW4gSUQKLQltcmMJcDE1LCAwLCByNiwgYzIsIGMwLCAwCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTAKLQltcmMJcDE1LCAwLCByNywgYzIsIGMwLCAxCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTEKLQltcmMJcDE1LCAwLCByOCwgYzIsIGMwLCAyCUAgVHJhbnNsYXRpb24gVGFibGUgQ29udHJvbAotCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJQCBDb250cm9sIHJlZ2lzdGVyCi0JbXJjCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDEJQCBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgotCW1yYwlwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9scwotCW1yYwlwMTUsIDAsIHIxMiwgYzEwLCBjMiwgMAlAIFJlYWQgUFJSUgotCW1yYwlwMTUsIDAsIHIzLCBjMTAsIGMyLCAxCUAgUkVBRCBOTVJSCi0KLQlzdG1pYQlyMCwgeyByMyAtIHIxMyB9Ci0KLQlibAlzM2NfcG1fY2JfZmx1c2hjYWNoZQorCWxkcglyMywgPXJlc3VtZV93aXRoX21tdQorCWJsCWNwdV9zdXNwZW5kCiAKIAlsZHIJcjAsID1wbV9jcHVfc2xlZXAKIAlsZHIJcjAsIFsgcjAgXQogCW1vdglwYywgcjAKIAogcmVzdW1lX3dpdGhfbW11OgotCS8qCi0JICogQWZ0ZXIgTU1VIGlzIHR1cm5lZCBvbiwgcmVzdG9yZSB0aGUgcHJldmlvdXMgTU1VIHRhYmxlLgotCSAqLwotCWxkcglyOSAsID0oUEFHRV9PRkZTRVQgLSBQSFlTX09GRlNFVCkKLQlhZGQJcjQsIHI0LCByOQotCXN0cglyMTIsIFtyNF0KLQogCWxkbWZkCXNwISwgeyByMyAtIHIxMiwgcGMgfQogCiAJLmx0b3JnCiAKLQkuZGF0YQotCi0JLmdsb2JhbAlzM2Nfc2xlZXBfc2F2ZV9waHlzCi1zM2Nfc2xlZXBfc2F2ZV9waHlzOgotCS53b3JkCTAKLQogCS8qIHNsZWVwIG1hZ2ljLCB0byBhbGxvdyB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBmb3IgYW4gdmFsaWQKIAkgKiBpbWFnZSB0byByZXN1bWUgdG8uIE11c3QgYmUgdGhlIGZpcnN0IHdvcmQgYmVmb3JlIHRoZQogCSAqIHMzY19jcHVfcmVzdW1lIGVudHJ5LgpAQCAtOTYsNzUgKzcwLDQgQEAKIAkqLwogCiBFTlRSWShzM2NfY3B1X3Jlc3VtZSkKLQltb3YJcjAsICNQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIHIwCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIFRMQnMKLQltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBDYWNoZQotCi0JbGRyCXIwLCBzM2Nfc2xlZXBfc2F2ZV9waHlzCQlAIGFkZHJlc3Mgb2YgcmVzdG9yZSBibG9jawotCWxkbWlhCXIwLCB7IHIzIC0gcjEzIH0KLQotCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCQlAIEZDU0UvUElECi0JbWNyCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAkJQCBEb21haW4gSUQKLQotCW1jcglwMTUsIDAsIHI4LCBjMiwgYzAsIDIJCUAgVHJhbnNsYXRpb24gVGFibGUgQ29udHJvbAotCW1jcglwMTUsIDAsIHI3LCBjMiwgYzAsIDEJCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTEKLQltY3IJcDE1LCAwLCByNiwgYzIsIGMwLCAwCQlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwCi0KLQltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQkJQCBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgotCi0JbW92CXIwLCAjMAotCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJCUAgSW52YWxpZGF0ZSBJICYgRCBUTEIKLQotCW1vdglyMCwgIzAJCQkJQCByZXN0b3JlIGNvcHJvIGFjY2VzcwotCW1jcglwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCQlAIENvLXByb2Nlc3NvciBhY2Nlc3MKLQltY3IgCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAotCi0JbWNyCXAxNSwgMCwgcjEyLCBjMTAsIGMyLCAwCQlAIHdyaXRlIFBSUlIKLQltY3IJcDE1LCAwLCByMywgYzEwLCBjMiwgMQkJQCB3cml0ZSBOTVJSCi0KLQkvKgotCSAqIEluIENvcnRleC1BOCwgd2hlbiBNTVUgaXMgdHVybmVkIG9uLCB0aGUgcGlwZWxpbmUgaXMgZmx1c2hlZC4KLQkgKiBBbmQgdGhlcmUgYXJlIG5vIHZhbGlkIGVudHJpZXMgaW4gdGhlIE1NVSB0YWJsZSBhdCB0aGlzIHBvaW50LgotCSAqIFNvIGJlZm9yZSB0dXJuaW5nIG9uIHRoZSBNTVUsIHRoZSBNTVUgZW50cnkgZm9yIHRoZSBEUkFNIGFkZHJlc3MKLQkgKiByYW5nZSBpcyBhZGRlZC4gQWZ0ZXIgdGhlIE1NVSBpcyB0dXJuZWQgb24sIHRoZSBvdGhlciBlbnRyaWVzCi0JICogaW4gdGhlIE1NVSB0YWJsZSB3aWxsIGJlIHJlc3RvcmVkLgotCSovCi0KLQkvKiByNiA9IFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwICovCi0JbW92CXI0LCByNgotCW1vdglyNCwgcjQsIExTUiAjMTQKLQltb3YJcjQsIHI0LCBMU0wgIzE0Ci0KLQkvKiBMb2FkIGFkZHJlc3MgZm9yIGFkZGluZyB0byBNTVUgdGFibGUgbGlzdCAqLwotCWxkcglyMTEsID0weEUwMTBGMDAwCQlAIElORk9STTAgcmVnLgotCWxkcglyMTAsIFtyMTEsICMwXQotCW1vdglyMTAsIHIxMCwgTFNSICMxOAotCWJpYwlyMTAsIHIxMCwgIzB4MwotCW9ycglyNCwgcjQsIHIxMAotCi0JLyogQ2FsY3VsYXRlIE1NVSB0YWJsZSBlbnRyeSAqLwotCW1vdiAJcjEwLCByMTAsIExTTCAjMTgKLQlsZHIJcjUsID0weDQwRQotCW9ycglyMTAsIHIxMCwgcjUKLQotCS8qIEJhY2sgdXAgb3JpZ2luYWxseSBkYXRhICovCi0JbGRyCXIxMiwgW3I0XQotCi0JLyogQWRkIGNhbGN1bGF0ZWQgTU1VIHRhYmxlIGVudHJ5IGludG8gTU1VIHRhYmxlIGxpc3QgKi8KLQlzdHIJcjEwLCBbcjRdCi0KLQlsZHIJcjIsID1yZXN1bWVfd2l0aF9tbXUKLQltY3IJcDE1LCAwLCByOSwgYzEsIGMwLCAwCQlAIHR1cm4gb24gTU1VLCBldGMKLQotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAkJCQkJQCBzZWNvbmQtdG8tbGFzdCBiZWZvcmUgbW11Ci0KLQltb3YJcGMsIHIyCQkJCUAgZ28gYmFjayB0byB2aXJ0dWFsIGFkZHJlc3MKLQotCS5sdG9yZworCWIJY3B1X3Jlc3VtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwppbmRleCAwOWM0YzIxLi5iMmE5YWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwpAQCAtMTIyLDYgKzEyMiw3IEBACiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMyCiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMzCiAJc2VsZWN0IFM1UFYzMTBfREVWX1BECisJc2VsZWN0IFM1UFYzMTBfREVWX1NZU01NVQogCXNlbGVjdCBTNVBWMzEwX1NFVFVQX0kyQzEKIAlzZWxlY3QgUzVQVjMxMF9TRVRVUF9TREhDSQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDc0ZDQwMDYuLjkwMTY1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KICAqCiAgKiBTNVBWMzEwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucwpAQCAtMjMsOTAgKzIzLDQzIEBACiAKICNpbmNsdWRlIDxwbGF0L21hcC1zNXAuaD4KIAotI2RlZmluZSBTNVBWMzEwX1BBX1NZU1JBTQkJKDB4MDIwMjUwMDApCisjZGVmaW5lIFM1UFYzMTBfUEFfU1lTUkFNCQkweDAyMDI1MDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9JMlMwCQkJMHgwMzgzMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0kyUzEJCQkweEUzMTAwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfSTJTMgkJCTB4RTJBMDAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX1BDTTAJCQkweDAzODQwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfUENNMQkJCTB4MTM5ODAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9QQ00yCQkJMHgxMzk5MDAwMAogCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1JPTV9CQU5LKHgpCQkoMHgwNDAwMDAwMCArICgoeCkgKiAweDAxMDAwMDAwKSkKIAotI2RlZmluZSBTNVBDMjEwX1BBX09ORU5BTkQJCSgweDBDMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfT05FTkFORAkJCVM1UEMyMTBfUEFfT05FTkFORAorI2RlZmluZSBTNVBDMjEwX1BBX09ORU5BTkQJCTB4MEMwMDAwMDAKKyNkZWZpbmUgUzVQQzIxMF9QQV9PTkVOQU5EX0RNQQkJMHgwQzYwMDAwMAogCi0jZGVmaW5lIFM1UEMyMTBfUEFfT05FTkFORF9ETUEJCSgweDBDNjAwMDAwKQotI2RlZmluZSBTNVBfUEFfT05FTkFORF9ETUEJCVM1UEMyMTBfUEFfT05FTkFORF9ETUEKKyNkZWZpbmUgUzVQVjMxMF9QQV9DSElQSUQJCTB4MTAwMDAwMDAKIAotI2RlZmluZSBTNVBWMzEwX1BBX0NISVBJRAkJKDB4MTAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBWMzEwX1BBX0NISVBJRAorI2RlZmluZSBTNVBWMzEwX1BBX1NZU0NPTgkJMHgxMDAxMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX1BNVQkJCTB4MTAwMjAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9DTVUJCQkweDEwMDMwMDAwCiAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNDT04JCSgweDEwMDEwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjMxMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQVjMxMF9QQV9XQVRDSERPRwkJMHgxMDA2MDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX1JUQwkJCTB4MTAwNzAwMDAKIAotI2RlZmluZSBTNVBWMzEwX1BBX1BNVQkJCSgweDEwMDIwMDAwKQorI2RlZmluZSBTNVBWMzEwX1BBX0RNQzAJCQkweDEwNDAwMDAwCiAKLSNkZWZpbmUgUzVQVjMxMF9QQV9DTVUJCQkoMHgxMDAzMDAwMCkKKyNkZWZpbmUgUzVQVjMxMF9QQV9DT01CSU5FUgkJMHgxMDQ0ODAwMAogCi0jZGVmaW5lIFM1UFYzMTBfUEFfV0FUQ0hET0cJCSgweDEwMDYwMDAwKQotI2RlZmluZSBTNVBWMzEwX1BBX1JUQwkJCSgweDEwMDcwMDAwKQorI2RlZmluZSBTNVBWMzEwX1BBX0NPUkVQRVJJCQkweDEwNTAwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfR0lDX0NQVQkJMHgxMDUwMDEwMAorI2RlZmluZSBTNVBWMzEwX1BBX1RXRAkJCTB4MTA1MDA2MDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9HSUNfRElTVAkJMHgxMDUwMTAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0wyQ0MJCQkweDEwNTAyMDAwCiAKLSNkZWZpbmUgUzVQVjMxMF9QQV9ETUMwCQkJKDB4MTA0MDAwMDApCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9DT01CSU5FUgkJKDB4MTA0NDgwMDApCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9DT1JFUEVSSQkJKDB4MTA1MDAwMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfR0lDX0NQVQkJKDB4MTA1MDAxMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfVFdECQkJKDB4MTA1MDA2MDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfR0lDX0RJU1QJCSgweDEwNTAxMDAwKQotI2RlZmluZSBTNVBWMzEwX1BBX0wyQ0MJCQkoMHgxMDUwMjAwMCkKLQotLyogRE1BICovCi0jZGVmaW5lIFM1UFYzMTBfUEFfTURNQQkJMHgxMDgxMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1BETUEwCTB4MTI2ODAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9QRE1BMQkweDEyNjkwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9HUElPMQkJKDB4MTE0MDAwMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfR1BJTzIJCSgweDExMDAwMDAwKQotI2RlZmluZSBTNVBWMzEwX1BBX0dQSU8zCQkoMHgwMzg2MDAwMCkKLQotI2RlZmluZSBTNVBWMzEwX1BBX01JUElfQ1NJUzAJCTB4MTE4ODAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9NSVBJX0NTSVMxCQkweDExODkwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9IU01NQyh4KQkJKDB4MTI1MTAwMDAgKyAoKHgpICogMHgxMDAwMCkpCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9TUk9NQwkJKDB4MTI1NzAwMDApCi0jZGVmaW5lIFM1UF9QQV9TUk9NQwkJCVM1UFYzMTBfUEFfU1JPTUMKLQotLyogUy9QRElGICovCi0jZGVmaW5lIFM1UFYzMTBfUEFfU1BESUYJMHhFMTEwMDAwMAotCi0vKiBJMlMgKi8KLSNkZWZpbmUgUzVQVjMxMF9QQV9JMlMwCQkweDAzODMwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfSTJTMQkJMHhFMzEwMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX0kyUzIJCTB4RTJBMDAwMDAKLQotLyogUENNICovCi0jZGVmaW5lIFM1UFYzMTBfUEFfUENNMAkJMHgwMzg0MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1BDTTEJCTB4MTM5ODAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9QQ00yCQkweDEzOTkwMDAwCi0KLS8qIEFDOTcgKi8KLSNkZWZpbmUgUzVQVjMxMF9QQV9BQzk3CQkweDEzOUEwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9VQVJUCQkJKDB4MTM4MDAwMDApCi0KLSNkZWZpbmUgUzVQX1BBX1VBUlQoeCkJCQkoUzVQVjMxMF9QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCi0jZGVmaW5lIFM1UF9QQV9VQVJUMAkJCVM1UF9QQV9VQVJUKDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMQkJCVM1UF9QQV9VQVJUKDEpCi0jZGVmaW5lIFM1UF9QQV9VQVJUMgkJCVM1UF9QQV9VQVJUKDIpCi0jZGVmaW5lIFM1UF9QQV9VQVJUMwkJCVM1UF9QQV9VQVJUKDMpCi0jZGVmaW5lIFM1UF9QQV9VQVJUNAkJCVM1UF9QQV9VQVJUKDQpCi0KLSNkZWZpbmUgUzVQX1NaX1VBUlQJCQlTWl8yNTYKLQotI2RlZmluZSBTNVBWMzEwX1BBX0lJQyh4KQkJKDB4MTM4NjAwMDAgKyAoKHgpICogMHgxMDAwMCkpCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9USU1FUgkJKDB4MTM5RDAwMDApCi0jZGVmaW5lIFM1UF9QQV9USU1FUgkJCVM1UFYzMTBfUEFfVElNRVIKLQotI2RlZmluZSBTNVBWMzEwX1BBX1NEUkFNCQkoMHg0MDAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1NEUkFNCQkJUzVQVjMxMF9QQV9TRFJBTQorI2RlZmluZSBTNVBWMzEwX1BBX01ETUEJCQkweDEwODEwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfUERNQTAJCTB4MTI2ODAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9QRE1BMQkJMHgxMjY5MDAwMAogCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01ETUEJCTB4MTBBNDAwMDAKICNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfU1NTCQkweDEwQTUwMDAwCkBAIC0xMjQsMTEgKzc3LDMyIEBACiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX1RWCQkweDEyRTIwMDAwCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01GQ19MCQkweDEzNjIwMDAwCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01GQ19SCQkweDEzNjMwMDAwCi0jZGVmaW5lIFM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCTE2Ci0jZGVmaW5lIFM1UF9TWVNNTVVfVE9UQUxfSVBOVU0JCVM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCiAKLS8qIGNvbXBhdGliaWx0aXkgZGVmaW5lcy4gKi8KLSNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMzEwX1BBX1VBUlQKKyNkZWZpbmUgUzVQVjMxMF9QQV9HUElPMQkJMHgxMTQwMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0dQSU8yCQkweDExMDAwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfR1BJTzMJCTB4MDM4NjAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX01JUElfQ1NJUzAJCTB4MTE4ODAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9NSVBJX0NTSVMxCQkweDExODkwMDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9IU01NQyh4KQkJKDB4MTI1MTAwMDAgKyAoKHgpICogMHgxMDAwMCkpCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9TUk9NQwkJMHgxMjU3MDAwMAorCisjZGVmaW5lIFM1UFYzMTBfUEFfVUFSVAkJCTB4MTM4MDAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX0lJQyh4KQkJKDB4MTM4NjAwMDAgKyAoKHgpICogMHgxMDAwMCkpCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9BQzk3CQkJMHgxMzlBMDAwMAorCisjZGVmaW5lIFM1UFYzMTBfUEFfVElNRVIJCTB4MTM5RDAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX1NEUkFNCQkweDQwMDAwMDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9TUERJRgkJMHhFMTEwMDAwMAorCisvKiBDb21wYXRpYmlsdGl5IERlZmluZXMgKi8KKwogI2RlZmluZSBTM0NfUEFfSFNNTUMwCQkJUzVQVjMxMF9QQV9IU01NQygwKQogI2RlZmluZSBTM0NfUEFfSFNNTUMxCQkJUzVQVjMxMF9QQV9IU01NQygxKQogI2RlZmluZSBTM0NfUEFfSFNNTUMyCQkJUzVQVjMxMF9QQV9IU01NQygyKQpAQCAtMTQzLDcgKzExNywyOCBAQAogI2RlZmluZSBTM0NfUEFfSUlDNwkJCVM1UFYzMTBfUEFfSUlDKDcpCiAjZGVmaW5lIFMzQ19QQV9SVEMJCQlTNVBWMzEwX1BBX1JUQwogI2RlZmluZSBTM0NfUEFfV0RUCQkJUzVQVjMxMF9QQV9XQVRDSERPRworCisjZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBWMzEwX1BBX0NISVBJRAogI2RlZmluZSBTNVBfUEFfTUlQSV9DU0lTMAkJUzVQVjMxMF9QQV9NSVBJX0NTSVMwCiAjZGVmaW5lIFM1UF9QQV9NSVBJX0NTSVMxCQlTNVBWMzEwX1BBX01JUElfQ1NJUzEKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkQJCQlTNVBDMjEwX1BBX09ORU5BTkQKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkRfRE1BCQlTNVBDMjEwX1BBX09ORU5BTkRfRE1BCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJCVM1UFYzMTBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQVjMxMF9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjMxMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQVjMxMF9QQV9USU1FUgorCisvKiBVQVJUICovCisKKyNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMzEwX1BBX1VBUlQKKworI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJCShTM0NfUEFfVUFSVCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQorI2RlZmluZSBTNVBfUEFfVUFSVDAJCQlTNVBfUEFfVUFSVCgwKQorI2RlZmluZSBTNVBfUEFfVUFSVDEJCQlTNVBfUEFfVUFSVCgxKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCQlTNVBfUEFfVUFSVCgyKQorI2RlZmluZSBTNVBfUEFfVUFSVDMJCQlTNVBfUEFfVUFSVCgzKQorI2RlZmluZSBTNVBfUEFfVUFSVDQJCQlTNVBfUEFfVUFSVCg0KQorCisjZGVmaW5lIFM1UF9TWl9VQVJUCQkJU1pfMjU2CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c21tdS5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXNtbXUuaAppbmRleCA2NjJmZTg1Zi4uNTk4ZmM1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXNtbXUuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c21tdS5oCkBAIC0xMyw2ICsxMyw5IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX1NZU01NVV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX1NZU01NVV9IIF9fRklMRV9fCiAKKyNkZWZpbmUgUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU0JMTYKKyNkZWZpbmUgUzVQX1NZU01NVV9UT1RBTF9JUE5VTQkJUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU0KKwogZW51bSBzNXB2MzEwX3N5c21tdV9pcHMgewogCVNZU01NVV9NRE1BLAogCVNZU01NVV9TU1MsCkBAIC0zMiw3ICszNSw3IEBACiAJU1lTTU1VX01GQ19SLAogfTsKIAotc3RhdGljIGNoYXIgKnN5c21tdV9pcHNfbmFtZVtTNVBfU1lTTU1VX1RPVEFMX0lQTlVNXSA9IHsKK3N0YXRpYyBjaGFyICpzeXNtbXVfaXBzX25hbWVbUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU1dID0gewogCSJTWVNNTVVfTURNQSIJLAogCSJTWVNNTVVfU1NTIgksCiAJIlNZU01NVV9GSU1DMCIJLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwppbmRleCBkNDNjNWVmLi5iZDNlMWJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwpAQCAtMjQxLDYgKzI0MSw5IEBACiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGxpZV9sb2NvbW9fZGV2aWNlID0gewogCS5uYW1lCQk9ICJsb2NvbW8iLAogCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZsb2NvbW9faW5mbywKKwl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsb2NvbW9fcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBsb2NvbW9fcmVzb3VyY2VzLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbS5jCmluZGV4IGFiOWZjNDQuLmM0NjYxYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcG0uYwpAQCAtMzIsOCArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKLWV4dGVybiB2b2lkIHNhMTEwMF9jcHVfc3VzcGVuZCh2b2lkKTsKLWV4dGVybiB2b2lkIHNhMTEwMF9jcHVfcmVzdW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgc2ExMTAwX2NwdV9zdXNwZW5kKGxvbmcpOwogCiAjZGVmaW5lIFNBVkUoeCkJCXNsZWVwX3NhdmVbU0xFRVBfU0FWRV8jI3hdID0geAogI2RlZmluZSBSRVNUT1JFKHgpCXggPSBzbGVlcF9zYXZlW1NMRUVQX1NBVkVfIyN4XQpAQCAtNzMsMTAgKzcyLDEwIEBACiAJUkNTUiA9IFJDU1JfSFdSIHwgUkNTUl9TV1IgfCBSQ1NSX1dEUiB8IFJDU1JfU01SOwogCiAJLyogc2V0IHJlc3VtZSByZXR1cm4gYWRkcmVzcyAqLwotCVBTUFIgPSB2aXJ0X3RvX3BoeXMoc2ExMTAwX2NwdV9yZXN1bWUpOworCVBTUFIgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAKIAkvKiBnbyB6enogKi8KLQlzYTExMDBfY3B1X3N1c3BlbmQoKTsKKwlzYTExMDBfY3B1X3N1c3BlbmQoUExBVF9QSFlTX09GRlNFVCAtIFBBR0VfT0ZGU0VUKTsKIAogCWNwdV9pbml0KCk7CiAKQEAgLTExNSwxMSArMTE0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgbG9uZyBzbGVlcF9waHlzX3NwKHZvaWQgKnNwKQotewotCXJldHVybiB2aXJ0X3RvX3BoeXMoc3ApOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHNhMTF4MF9wbV9vcHMgPSB7CiAJLmVudGVyCQk9IHNhMTF4MF9wbV9lbnRlciwKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zbGVlcC5TCmluZGV4IDgwZjMxYmEuLjA0ZjJhNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2xlZXAuUwpAQCAtMjAsMTIgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0KLQogCQkudGV4dAotCi0KLQogLyoKICAqIHNhMTEwMF9jcHVfc3VzcGVuZCgpCiAgKgpAQCAtMzQsMjcgKzI5LDEwIEBACiAgKi8KIAogRU5UUlkoc2ExMTAwX2NwdV9zdXNwZW5kKQotCiAJc3RtZmQJc3AhLCB7cjQgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotCi0JQCBnZXQgY29wcm9jZXNzb3IgcmVnaXN0ZXJzCi0JbXJjIAlwMTUsIDAsIHI0LCBjMywgYzAsIDAJCUAgZG9tYWluIElECi0JbXJjIAlwMTUsIDAsIHI1LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbXJjCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJCUAgUElECi0JbXJjIAlwMTUsIDAsIHI3LCBjMSwgYzAsIDAJCUAgY29udHJvbCByZWcKLQotCUAgc3RvcmUgdGhlbSBwbHVzIGN1cnJlbnQgdmlydHVhbCBzdGFjayBwdHIgb24gc3RhY2sKLQltb3YJcjgsIHNwCi0Jc3RtZmQJc3AhLCB7cjQgLSByOH0KLQotCUAgcHJlc2VydmUgcGh5cyBhZGRyZXNzIG9mIHN0YWNrCi0JbW92CXIwLCBzcAotCWJsCXNsZWVwX3BoeXNfc3AKLQlsZHIJcjEsID1zbGVlcF9zYXZlX3NwCi0Jc3RyCXIwLCBbcjFdCi0KLQlAIGNsZWFuIGRhdGEgY2FjaGUgYW5kIGludmFsaWRhdGUgV0IKLQlibAl2NHdiX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJbW92CXIxLCByMAorCWxkcglyMywgPXNhMTEwMF9jcHVfcmVzdW1lCQlAIHJldHVybiBmdW5jdGlvbgorCWJsCWNwdV9zdXNwZW5kCiAKIAlAIGRpc2FibGUgY2xvY2sgc3dpdGNoaW5nCiAJbWNyCXAxNSwgMCwgcjEsIGMxNSwgYzIsIDIKQEAgLTE2Niw1MCArMTQ0LDggQEAKICAqIGNwdV9zYTExMDBfcmVzdW1lKCkKICAqCiAgKiBlbnRyeSBwb2ludCBmcm9tIGJvb3Rsb2FkZXIgaW50byBrZXJuZWwgZHVyaW5nIHJlc3VtZQotICoKLSAqIE5vdGU6IFllcywgcGFydCBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgbG9jYXRlZCBpbnRvIHRoZSAuZGF0YSBzZWN0aW9uLgotICogICAgICAgVGhpcyBpcyB0byBhbGxvdyBzbGVlcF9zYXZlX3NwIHRvIGJlIGFjY2Vzc2VkIHdpdGggYSByZWxhdGl2ZSBsb2FkCi0gKiAgICAgICB3aGlsZSB3ZSBjYW4ndCByZWx5IG9uIGFueSBNTVUgdHJhbnNsYXRpb24uICBXZSBjb3VsZCBoYXZlIHB1dAotICogICAgICAgc2xlZXBfc2F2ZV9zcCBpbiB0aGUgLnRleHQgc2VjdGlvbiBhcyB3ZWxsLCBidXQgc29tZSBzZXR1cHMgbWlnaHQKLSAqICAgICAgIGluc2lzdCBvbiBpdCB0byBiZSB0cnVseSByZWFkLW9ubHkuCiAgKi8KLQotCS5kYXRhCiAJLmFsaWduIDUKLUVOVFJZKHNhMTEwMF9jcHVfcmVzdW1lKQotCW1vdglyMCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCi0JbXNyCWNwc3JfYywgcjAJCQlAIHNldCBTVkMsIGlycXMgb2ZmCi0KLQlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJCUAgc3RhY2sgcGh5cyBhZGRyCi0JbGRyCXIyLCA9cmVzdW1lX2FmdGVyX21tdQkJQCBpdHMgYWJzb2x1dGUgdmlydHVhbCBhZGRyZXNzCi0JbGRtZmQJcjAsIHtyNCAtIHI3LCBzcH0JCUAgQ1AgcmVncyArIHZpcnQgc3RhY2sgcHRyCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMCAgIAlAIGZsdXNoIEkrRCBUTEJzCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBmbHVzaCBJJkQgY2FjaGUKLQltY3IJcDE1LCAwLCByMSwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKLQltY3IJcDE1LCAwLCByMSwgYzksIGMwLCA1CQlAIGFsbG93IHVzZXIgc3BhY2UgdG8gdXNlIFJCCi0KLQltY3IJcDE1LCAwLCByNCwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAotCW1jcglwMTUsIDAsIHI1LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbWNyCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJCUAgUElECi0JYglyZXN1bWVfdHVybl9vbl9tbXUJCUAgY2FjaGUgYWxpZ24gZXhlY3V0aW9uCi0KLQkuYWxpZ24gNQotcmVzdW1lX3R1cm5fb25fbW11OgotCW1jciAJcDE1LCAwLCByNywgYzEsIGMwLCAwCQlAIHR1cm4gb24gTU1VLCBjYWNoZXMsIGV0Yy4KLQlub3AKLQltb3YJcGMsIHIyCQkJCUAganVtcCB0byB2aXJ0dWFsIGFkZHIKLQlub3AKLQlub3AKLQlub3AKLQotc2xlZXBfc2F2ZV9zcDoKLQkud29yZAkwCQkJCUAgcHJlc2VydmUgc3RhY2sgcGh5cyBwdHIgaGVyZQotCi0JLnRleHQKLXJlc3VtZV9hZnRlcl9tbXU6CitzYTExMDBfY3B1X3Jlc3VtZToKIAltY3IJcDE1LCAwLCByMSwgYzE1LCBjMSwgMgkJQCBlbmFibGUgY2xvY2sgc3dpdGNoaW5nCiAJbGRtZmQJc3AhLCB7cjQgLSByMTIsIHBjfQkJQCByZXR1cm4gdG8gY2FsbGVyCi0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKaW5kZXggMjEyM2I5Ni4uNDMwM2E4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCkBAIC00NTQsNiArNDU0LDcgQEAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMjE3LCAwKTsKIAltZGVsYXkoMSk7CiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUMjE3LCAxKTsKKwltZGVsYXkoMTAwKTsKIAogCS8qIExDRCBiYWNrbGlnaHQgY29udHJvbGxlciAqLwogCWdwaW9fcmVxdWVzdChHUElPX1BPUlQyMzUsIE5VTEwpOyAvKiBSRVNFVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKaW5kZXggM2NmMDk1MS4uODFkNjUzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCkBAIC0xMzAzLDcgKzEzMDMsNyBAQAogCiAJbGNkY19pbmZvLmNsb2NrX3NvdXJjZQkJCT0gTENEQ19DTEtfQlVTOwogCWxjZGNfaW5mby5jaFswXS5pbnRlcmZhY2VfdHlwZQkJPSBSR0IxODsKLQlsY2RjX2luZm8uY2hbMF0uY2xvY2tfZGl2aWRlcgkJPSAyOworCWxjZGNfaW5mby5jaFswXS5jbG9ja19kaXZpZGVyCQk9IDM7CiAJbGNkY19pbmZvLmNoWzBdLmZsYWdzCQkJPSAwOwogCWxjZGNfaW5mby5jaFswXS5sY2Rfc2l6ZV9jZmcud2lkdGgJPSAxNTI7CiAJbGNkY19pbmZvLmNoWzBdLmxjZF9zaXplX2NmZy5oZWlnaHQJPSA5MTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwppbmRleCBmYjQyMTNhLi4xNjU3ZWFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCkBAIC0zMDMsNyArMzAzLDcgQEAKIAkJLmxjZF9jZmcgPSBtYWNrZXJlbF9sY2RjX21vZGVzLAogCQkubnVtX2NmZyA9IEFSUkFZX1NJWkUobWFja2VyZWxfbGNkY19tb2RlcyksCiAJCS5pbnRlcmZhY2VfdHlwZQkJPSBSR0IyNCwKLQkJLmNsb2NrX2RpdmlkZXIJCT0gMiwKKwkJLmNsb2NrX2RpdmlkZXIJCT0gMywKIAkJLmZsYWdzCQkJPSAwLAogCQkubGNkX3NpemVfY2ZnLndpZHRoCT0gMTUyLAogCQkubGNkX3NpemVfY2ZnLmhlaWdodAk9IDkxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMKaW5kZXggZGRkNGExYi4uN2U1ODkwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIH07CiAKIGVudW0geyBNU1RQMDAxLAotCU1TVFAxMjUsIE1TVFAxMTgsIE1TVFAxMTYsIE1TVFAxMDAsCisJTVNUUDEyOSwgTVNUUDEyOCwgTVNUUDEyNywgTVNUUDEyNiwgTVNUUDEyNSwgTVNUUDExOCwgTVNUUDExNiwgTVNUUDEwMCwKIAlNU1RQMjE5LAogCU1TVFAyMDcsIE1TVFAyMDYsIE1TVFAyMDQsIE1TVFAyMDMsIE1TVFAyMDIsIE1TVFAyMDEsIE1TVFAyMDAsCiAJTVNUUDMzMSwgTVNUUDMyOSwgTVNUUDMyNSwgTVNUUDMyMywgTVNUUDMxMiwKQEAgLTI3NSw2ICsyNzUsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbXN0cF9jbGtzW01TVFBfTlJdID0gewogCVtNU1RQMDAxXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjAsIDEsIDApLCAvKiBJSUMyICovCisJW01TVFAxMjldID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAyOSwgMCksIC8qIENFVTEgKi8KKwlbTVNUUDEyOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDI4LCAwKSwgLyogQ1NJMi1SWDEgKi8KKwlbTVNUUDEyN10gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDI3LCAwKSwgLyogQ0VVMCAqLworCVtNU1RQMTI2XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBTTVNUUENSMSwgMjYsIDApLCAvKiBDU0kyLVJYMCAqLwogCVtNU1RQMTI1XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IxLCAyNSwgMCksIC8qIFRNVTAgKi8KIAlbTVNUUDExOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDE4LCAwKSwgLyogRFNJVFgwICovCiAJW01TVFAxMTZdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMSwgMTYsIDApLCAvKiBJSUMwICovCkBAIC0zMDYsNiArMzEwLDkgQEAKIAlDTEtERVZfQ09OX0lEKCJyX2NsayIsICZyX2NsayksCiAKIAkvKiBESVY2IGNsb2NrcyAqLworCUNMS0RFVl9DT05fSUQoInZjazFfY2xrIiwgJmRpdjZfY2xrc1tESVY2X1ZDSzFdKSwKKwlDTEtERVZfQ09OX0lEKCJ2Y2syX2NsayIsICZkaXY2X2Nsa3NbRElWNl9WQ0syXSksCisJQ0xLREVWX0NPTl9JRCgidmNrM19jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfVkNLM10pLAogCUNMS0RFVl9JQ0tfSUQoImRzaXRfY2xrIiwgInNoLW1pcGktZHNpLjAiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAogCUNMS0RFVl9JQ0tfSUQoImRzaXRfY2xrIiwgInNoLW1pcGktZHNpLjEiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAogCUNMS0RFVl9JQ0tfSUQoImRzaTBwX2NsayIsICJzaC1taXBpLWRzaS4wIiwgJmRpdjZfY2xrc1tESVY2X0RTSTBQXSksCkBAIC0zMTMsMTEgKzMyMCwxNSBAQAogCiAJLyogTVNUUDMyIGNsb2NrcyAqLwogCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMiIsICZtc3RwX2Nsa3NbTVNUUDAwMV0pLCAvKiBJMkMyICovCi0JQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX2xjZGNfZmIuMCIsICZtc3RwX2Nsa3NbTVNUUDEwMF0pLCAvKiBMQ0RDMCAqLworCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9jZXUuMSIsICZtc3RwX2Nsa3NbTVNUUDEyOV0pLCAvKiBDRVUxICovCisJQ0xLREVWX0RFVl9JRCgic2gtbW9iaWxlLWNzaTIuMSIsICZtc3RwX2Nsa3NbTVNUUDEyOF0pLCAvKiBDU0kyLVJYMSAqLworCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9jZXUuMCIsICZtc3RwX2Nsa3NbTVNUUDEyN10pLCAvKiBDRVUwICovCisJQ0xLREVWX0RFVl9JRCgic2gtbW9iaWxlLWNzaTIuMCIsICZtc3RwX2Nsa3NbTVNUUDEyNl0pLCAvKiBDU0kyLVJYMCAqLwogCUNMS0RFVl9ERVZfSUQoInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMTI1XSksIC8qIFRNVTAwICovCiAJQ0xLREVWX0RFVl9JRCgic2hfdG11LjEiLCAmbXN0cF9jbGtzW01TVFAxMjVdKSwgLyogVE1VMDEgKi8KLQlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjAiLCAmbXN0cF9jbGtzW01TVFAxMTZdKSwgLyogSTJDMCAqLwogCUNMS0RFVl9ERVZfSUQoInNoLW1pcGktZHNpLjAiLCAmbXN0cF9jbGtzW01TVFAxMThdKSwgLyogRFNJVFggKi8KKwlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjAiLCAmbXN0cF9jbGtzW01TVFAxMTZdKSwgLyogSTJDMCAqLworCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9sY2RjX2ZiLjAiLCAmbXN0cF9jbGtzW01TVFAxMDBdKSwgLyogTENEQzAgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuNyIsICZtc3RwX2Nsa3NbTVNUUDIxOV0pLCAvKiBTQ0lGQTcgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuNSIsICZtc3RwX2Nsa3NbTVNUUDIwN10pLCAvKiBTQ0lGQTUgKi8KIAlDTEtERVZfREVWX0lEKCJzaC1zY2kuOCIsICZtc3RwX2Nsa3NbTVNUUDIwNl0pLCAvKiBTQ0lGQiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1hcDRldmIudHh0IGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1hcDRldmIudHh0CmluZGV4IGVmZDM2ODcuLjMwMjlhYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hlYWQtYXA0ZXZiLnR4dAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLWFwNGV2Yi50eHQKQEAgLTYsMTMgKzYsMTAgQEAKIEVXIDB4RTYwMjAwMDQsIDB4QTUwMAogRVcgMHhFNjAzMDAwNCwgMHhBNTAwCiAKLUREIDB4MDEwMDEwMDAsIDB4MDEwMDEwMDAKLQogTElTVCAiR1BJTyBTZXR0aW5nIgogRUIgMHhFNjA1MTAxMywgMHhBMgogCiBMSVNUICJDUEciCi1FRCAweEU2MTUwMDgwLCAweDAwMDAwMTgwCiBFRCAweEU2MTUwMEMwLCAweDAwMDAwMDAyCiAKIFdBSVQgMSwgMHhGRTQwMDA5QwpAQCAtMzcsNiArMzQsOSBAQAogCiBXQUlUIDEsIDB4RkU0MDAwOUMKIAorTElTVCAiU1VCL1VTQkNsayIKK0VEIDB4RTYxNTAwODAsIDB4MDAwMDAxODAKKwogTElTVCAiQlNDIgogRUQgMHhGRUMxMDAwMCwgMHgwMEUwMDAxQgogCkBAIC01Myw3ICs1Myw3IEBACiBFRCAweEZFNDAwMDRDLCAweDAwMTEwMjA5CiBFRCAweEZFNDAwMDEwLCAweDAwMDAwMDg3CiAKLVdBSVQgMTAsIDB4RkU0MDAwOUMKK1dBSVQgMzAsIDB4RkU0MDAwOUMKIAogRUQgMHhGRTQwMDA4NCwgMHgwMDAwMDAzRgogRUIgMHhGRTUwMDAwMCwgMHgwMApAQCAtODQsNyArODQsNyBAQAogCiBXQUlUIDEsIDB4RkU0MDAwOUMKIAotRUQgMHhFNjE1MDM1NCwgMHgwMDAwMDAwMgorRUQgMHhGRTQwMDM1NCwgMHgwMUFEODAwMgogCiBMSVNUICJTQ0lGMCAtIFNlcmlhbCBwb3J0IGZvciBlYXJseXByaW50ayIKIEVCIDB4RTYwNTMwOTgsIDB4MTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hlYWQtbWFja2VyZWwudHh0IGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1tYWNrZXJlbC50eHQKaW5kZXggZWZkMzY4Ny4uMzAyOWFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1tYWNrZXJlbC50eHQKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1tYWNrZXJlbC50eHQKQEAgLTYsMTMgKzYsMTAgQEAKIEVXIDB4RTYwMjAwMDQsIDB4QTUwMAogRVcgMHhFNjAzMDAwNCwgMHhBNTAwCiAKLUREIDB4MDEwMDEwMDAsIDB4MDEwMDEwMDAKLQogTElTVCAiR1BJTyBTZXR0aW5nIgogRUIgMHhFNjA1MTAxMywgMHhBMgogCiBMSVNUICJDUEciCi1FRCAweEU2MTUwMDgwLCAweDAwMDAwMTgwCiBFRCAweEU2MTUwMEMwLCAweDAwMDAwMDAyCiAKIFdBSVQgMSwgMHhGRTQwMDA5QwpAQCAtMzcsNiArMzQsOSBAQAogCiBXQUlUIDEsIDB4RkU0MDAwOUMKIAorTElTVCAiU1VCL1VTQkNsayIKK0VEIDB4RTYxNTAwODAsIDB4MDAwMDAxODAKKwogTElTVCAiQlNDIgogRUQgMHhGRUMxMDAwMCwgMHgwMEUwMDAxQgogCkBAIC01Myw3ICs1Myw3IEBACiBFRCAweEZFNDAwMDRDLCAweDAwMTEwMjA5CiBFRCAweEZFNDAwMDEwLCAweDAwMDAwMDg3CiAKLVdBSVQgMTAsIDB4RkU0MDAwOUMKK1dBSVQgMzAsIDB4RkU0MDAwOUMKIAogRUQgMHhGRTQwMDA4NCwgMHgwMDAwMDAzRgogRUIgMHhGRTUwMDAwMCwgMHgwMApAQCAtODQsNyArODQsNyBAQAogCiBXQUlUIDEsIDB4RkU0MDAwOUMKIAotRUQgMHhFNjE1MDM1NCwgMHgwMDAwMDAwMgorRUQgMHhGRTQwMDM1NCwgMHgwMUFEODAwMgogCiBMSVNUICJTQ0lGMCAtIFNlcmlhbCBwb3J0IGZvciBlYXJseXByaW50ayIKIEVCIDB4RTYwNTMwOTgsIDB4MTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tY2lmLWFwNGViLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tbWNpZi1hcDRlYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZDAyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tbWNpZi1hcDRlYi5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgTU1DSUZfQVA0RUJfSAorI2RlZmluZSBNTUNJRl9BUDRFQl9ICisKKyNkZWZpbmUgUE9SVDE4NUNSICAgICAgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTIwYjkKKyNkZWZpbmUgUE9SVDE4NkNSICAgICAgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTIwYmEKKyNkZWZpbmUgUE9SVDE4N0NSICAgICAgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTIwYmIKKyNkZWZpbmUgUE9SVDE4OENSICAgICAgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTIwYmMKKworI2RlZmluZSBQT1JUUjE5MV8xNjBEUiAodm9pZCBfX2lvbWVtICopMHhlNjA1NjAxNAorCitzdGF0aWMgaW5saW5lIHZvaWQgbW1jaWZfaW5pdF9wcm9ncmVzcyh2b2lkKQoreworICAgICAgIC8qIEluaXRpYWxpc2UgTEVEUzEtNAorICAgICAgICAqIHJlZ2lzdGVyczogUE9SVDE4NUNSLVBPUlQxODhDUiAoTEVEMS1MRUQ0IENvbnRyb2wpCisgICAgICAgICogdmFsdWU6ICAgICAweDEwIC0gZW5hYmxlIG91dHB1dAorICAgICAgICAqLworICAgICAgIF9fcmF3X3dyaXRlYigweDEwLCBQT1JUMTg1Q1IpOworICAgICAgIF9fcmF3X3dyaXRlYigweDEwLCBQT1JUMTg2Q1IpOworICAgICAgIF9fcmF3X3dyaXRlYigweDEwLCBQT1JUMTg3Q1IpOworICAgICAgIF9fcmF3X3dyaXRlYigweDEwLCBQT1JUMTg4Q1IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbW1jaWZfdXBkYXRlX3Byb2dyZXNzKGludCBuKQoreworCV9fcmF3X3dyaXRlbCgoX19yYXdfcmVhZGwoUE9SVFIxOTFfMTYwRFIpICYgfigweGYgPDwgMjUpKSB8CisJCSAgICAgKDEgPDwgKDI1ICsgbikpLCBQT1JUUjE5MV8xNjBEUik7Cit9CisKKyNlbmRpZiAvKiBNTUNJRl9BUDRFQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tbWNpZi1tYWNrZXJlbC5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jaWYtbWFja2VyZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjRmNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jaWYtbWFja2VyZWwuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIE1NQ0lGX01BQ0tFUkVMX0gKKyNkZWZpbmUgTU1DSUZfTUFDS0VSRUxfSAorCisjZGVmaW5lIFBPUlQwQ1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MTAwMAorI2RlZmluZSBQT1JUMUNSICAgICAgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTEwMDEKKyNkZWZpbmUgUE9SVDJDUiAgICAgICh2b2lkIF9faW9tZW0gKikweGU2MDUxMDAyCisjZGVmaW5lIFBPUlQxNTlDUiAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MDA5ZgorCisjZGVmaW5lIFBPUlRSMDMxXzAwMERSICh2b2lkIF9faW9tZW0gKikweGU2MDU1MDAwCisjZGVmaW5lIFBPUlRMMTU5XzEyOERSICh2b2lkIF9faW9tZW0gKikweGU2MDU0MDEwCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNpZl9pbml0X3Byb2dyZXNzKHZvaWQpCit7CisgICAgICAgLyogSW5pdGlhbGlzZSBMRURTMC0zCisgICAgICAgICogcmVnaXN0ZXJzOiBQT1JUMENSLVBPUlQyQ1IsUE9SVDE1OUNSIChMRUQwLUxFRDMgQ29udHJvbCkKKyAgICAgICAgKiB2YWx1ZTogICAgIDB4MTAgLSBlbmFibGUgb3V0cHV0CisgICAgICAgICovCisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQwQ1IpOworICAgICAgIF9fcmF3X3dyaXRlYigweDEwLCBQT1JUMUNSKTsKKyAgICAgICBfX3Jhd193cml0ZWIoMHgxMCwgUE9SVDJDUik7CisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxNTlDUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNpZl91cGRhdGVfcHJvZ3Jlc3MoaW50IG4pCit7CisJdW5zaWduZWQgYSA9IDAsIGIgPSAwOworCisJaWYgKG4gPCAzKQorCQlhID0gMSA8PCBuOworCWVsc2UKKwkJYiA9IDEgPDwgMzE7CisKKwlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKFBPUlRSMDMxXzAwMERSKSAmIH4weDcpIHwgYSwKKwkJICAgICBQT1JUUjAzMV8wMDBEUik7CisJX19yYXdfd3JpdGVsKChfX3Jhd19yZWFkbChQT1JUTDE1OV8xMjhEUikgJiB+KDEgPDwgMzEpKSB8IGIsCisJCSAgICAgUE9SVEwxNTlfMTI4RFIpOworfQorCisjZW5kaWYgLyogTU1DSUZfTUFDS0VSRUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jaWYuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tY2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkYzMyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tY2lmLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBNTUNJRl9ICisjZGVmaW5lIE1NQ0lGX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICoJCWJvYXJkIHNwZWNpZmljIHNldHRpbmdzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgQ09ORklHX01BQ0hfQVA0RVZCCisjaW5jbHVkZSAibWFjaC9tbWNpZi1hcDRlYi5oIgorI2VsaWYgQ09ORklHX01BQ0hfTUFDS0VSRUwKKyNpbmNsdWRlICJtYWNoL21tY2lmLW1hY2tlcmVsLmgiCisjZWxzZQorI2Vycm9yICJ1bnN1cHBvcnRlZCBib2FyZC4iCisjZW5kaWYKKworI2VuZGlmIC8qIE1NQ0lGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvY2xvY2suYwppbmRleCAxOGZlYmY5Li45OGJjN2VkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9jbG9jay5jCkBAIC0xMyw4ICsxMyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bWFjaC9taXNjX3JlZ3MuaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9taXNjX3JlZ3MuaD4KIAogLyogcm9vdCBjbGtzICovCiAvKiAzMiBLSHogb3NjaWxsYXRvciBjbG9jayAqLwpAQCAtMzksMTggKzM5LDQzIEBACiB9OwogCiAvKiBjbG9jayBkZXJpdmVkIGZyb20gMjQgTUh6IG9zYyBjbGsgKi8KKy8qIHBsbCBtYXNrcyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxsX2Nsa19tYXNrcyBwbGwxX21hc2tzID0geworCS5tb2RlX21hc2sgPSBQTExfTU9ERV9NQVNLLAorCS5tb2RlX3NoaWZ0ID0gUExMX01PREVfU0hJRlQsCisJLm5vcm1fZmRia19tX21hc2sgPSBQTExfTk9STV9GREJLX01fTUFTSywKKwkubm9ybV9mZGJrX21fc2hpZnQgPSBQTExfTk9STV9GREJLX01fU0hJRlQsCisJLmRpdGhfZmRia19tX21hc2sgPSBQTExfRElUSF9GREJLX01fTUFTSywKKwkuZGl0aF9mZGJrX21fc2hpZnQgPSBQTExfRElUSF9GREJLX01fU0hJRlQsCisJLmRpdl9wX21hc2sgPSBQTExfRElWX1BfTUFTSywKKwkuZGl2X3Bfc2hpZnQgPSBQTExfRElWX1BfU0hJRlQsCisJLmRpdl9uX21hc2sgPSBQTExfRElWX05fTUFTSywKKwkuZGl2X25fc2hpZnQgPSBQTExfRElWX05fU0hJRlQsCit9OworCiAvKiBwbGwxIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IHBsbF9jbGtfY29uZmlnIHBsbDFfY29uZmlnID0gewogCS5tb2RlX3JlZyA9IFBMTDFfQ1RSLAogCS5jZmdfcmVnID0gUExMMV9GUlEsCisJLm1hc2tzID0gJnBsbDFfbWFza3MsCit9OworCisvKiBwbGwgcmF0ZSBjb25maWd1cmF0aW9uIHRhYmxlLCBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgcmF0ZXMgKi8KK3N0cnVjdCBwbGxfcmF0ZV90YmwgcGxsX3J0YmxbXSA9IHsKKwl7Lm1vZGUgPSAwLCAubSA9IDB4ODUsIC5uID0gMHgwQywgLnAgPSAweDF9LCAvKiAyNjYgTUh6ICovCisJey5tb2RlID0gMCwgLm0gPSAweEE2LCAubiA9IDB4MEMsIC5wID0gMHgxfSwgLyogMzMyIE1IeiAqLwogfTsKIAogLyogUExMMSBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgcGxsMV9jbGsgPSB7CisJLmZsYWdzID0gRU5BQkxFRF9PTl9JTklULAogCS5wY2xrID0gJm9zY18yNG1fY2xrLAogCS5lbl9yZWcgPSBQTEwxX0NUUiwKIAkuZW5fcmVnX2JpdCA9IFBMTF9FTkFCTEUsCi0JLnJlY2FsYyA9ICZwbGwxX2Nsa19yZWNhbGMsCisJLmNhbGNfcmF0ZSA9ICZwbGxfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmcGxsX2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJnBsbF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge3BsbF9ydGJsLCBBUlJBWV9TSVpFKHBsbF9ydGJsKSwgMX0sCiAJLnByaXZhdGVfZGF0YSA9ICZwbGwxX2NvbmZpZywKIH07CiAKQEAgLTc2LDM2ICsxMDEsODMgQEAKIAkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCisvKiBhaGIgbWFza3Mgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IGJ1c19jbGtfbWFza3MgYWhiX21hc2tzID0geworCS5tYXNrID0gUExMX0hDTEtfUkFUSU9fTUFTSywKKwkuc2hpZnQgPSBQTExfSENMS19SQVRJT19TSElGVCwKK307CisKIC8qIGFoYiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwogc3RhdGljIHN0cnVjdCBidXNfY2xrX2NvbmZpZyBhaGJfY29uZmlnID0gewogCS5yZWcgPSBDT1JFX0NMS19DRkcsCi0JLm1hc2sgPSBQTExfSENMS19SQVRJT19NQVNLLAotCS5zaGlmdCA9IFBMTF9IQ0xLX1JBVElPX1NISUZULAorCS5tYXNrcyA9ICZhaGJfbWFza3MsCit9OworCisvKiBhaGIgcmF0ZSBjb25maWd1cmF0aW9uIHRhYmxlLCBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgcmF0ZXMgKi8KK3N0cnVjdCBidXNfcmF0ZV90YmwgYnVzX3J0YmxbXSA9IHsKKwl7LmRpdiA9IDN9LCAvKiA9PSBwYXJlbnQgZGl2aWRlZCBieSA0ICovCisJey5kaXYgPSAyfSwgLyogPT0gcGFyZW50IGRpdmlkZWQgYnkgMyAqLworCXsuZGl2ID0gMX0sIC8qID09IHBhcmVudCBkaXZpZGVkIGJ5IDIgKi8KKwl7LmRpdiA9IDB9LCAvKiA9PSBwYXJlbnQgZGl2aWRlZCBieSAxICovCiB9OwogCiAvKiBhaGIgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9jbGsgPSB7CiAJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCiAJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZidXNfY2FsY19yYXRlLAogCS5yZWNhbGMgPSAmYnVzX2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmJ1c19jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2J1c19ydGJsLCBBUlJBWV9TSVpFKGJ1c19ydGJsKSwgMn0sCiAJLnByaXZhdGVfZGF0YSA9ICZhaGJfY29uZmlnLAogfTsKIAotLyogdWFydCBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyB1YXJ0X2NvbmZpZyA9IHsKKy8qIGF1eGlsaWFyeSBzeW50aGVzaXplcnMgbWFza3MgKi8KK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19tYXNrcyBhdXhfbWFza3MgPSB7CisJLmVxX3NlbF9tYXNrID0gQVVYX0VRX1NFTF9NQVNLLAorCS5lcV9zZWxfc2hpZnQgPSBBVVhfRVFfU0VMX1NISUZULAorCS5lcTFfbWFzayA9IEFVWF9FUTFfU0VMLAorCS5lcTJfbWFzayA9IEFVWF9FUTJfU0VMLAorCS54c2NhbGVfc2VsX21hc2sgPSBBVVhfWFNDQUxFX01BU0ssCisJLnhzY2FsZV9zZWxfc2hpZnQgPSBBVVhfWFNDQUxFX1NISUZULAorCS55c2NhbGVfc2VsX21hc2sgPSBBVVhfWVNDQUxFX01BU0ssCisJLnlzY2FsZV9zZWxfc2hpZnQgPSBBVVhfWVNDQUxFX1NISUZULAorfTsKKworLyogdWFydCBzeW50aCBjb25maWd1cmF0aW9ucyAqLworc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyB1YXJ0X3N5bnRoX2NvbmZpZyA9IHsKIAkuc3ludGhfcmVnID0gVUFSVF9DTEtfU1lOVCwKKwkubWFza3MgPSAmYXV4X21hc2tzLAorfTsKKworLyogYXV4IHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgYXV4X3JhdGVfdGJsIGF1eF9ydGJsW10gPSB7CisJLyogRm9yIFBMTDEgPSAzMzIgTUh6ICovCisJey54c2NhbGUgPSAxLCAueXNjYWxlID0gOCwgLmVxID0gMX0sIC8qIDQxLjUgTUh6ICovCisJey54c2NhbGUgPSAxLCAueXNjYWxlID0gNCwgLmVxID0gMX0sIC8qIDgzIE1IeiAqLworCXsueHNjYWxlID0gMSwgLnlzY2FsZSA9IDIsIC5lcSA9IDF9LCAvKiAxNjYgTUh6ICovCit9OworCisvKiB1YXJ0IHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X3N5bnRoX2NsayA9IHsKKwkuZW5fcmVnID0gVUFSVF9DTEtfU1lOVCwKKwkuZW5fcmVnX2JpdCA9IEFVWF9TWU5UX0VOQiwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmF1eF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYXV4X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YXV4X3J0YmwsIEFSUkFZX1NJWkUoYXV4X3J0YmwpLCAxfSwKKwkucHJpdmF0ZV9kYXRhID0gJnVhcnRfc3ludGhfY29uZmlnLAogfTsKIAogLyogdWFydCBwYXJlbnRzICovCiBzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyB1YXJ0X3BjbGtfaW5mb1tdID0gewogCXsKLQkJLnBjbGsgPSAmcGxsMV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDFfTUFTSywKLQkJLnNjYWxhYmxlID0gMSwKKwkJLnBjbGsgPSAmdWFydF9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCiAJfSwgewogCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDNfTUFTSywKLQkJLnNjYWxhYmxlID0gMCwKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKIAl9LAogfTsKIApAQCAtMTIzLDI1ICsxOTUsMzUgQEAKIAkuZW5fcmVnX2JpdCA9IFVBUlRfQ0xLX0VOQiwKIAkucGNsa19zZWwgPSAmdWFydF9wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBVQVJUX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmF1eF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmdWFydF9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAogLyogZmlyZGEgY29uZmlndXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgZmlyZGFfY29uZmlnID0geworc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBmaXJkYV9zeW50aF9jb25maWcgPSB7CiAJLnN5bnRoX3JlZyA9IEZJUkRBX0NMS19TWU5ULAorCS5tYXNrcyA9ICZhdXhfbWFza3MsCit9OworCisvKiBmaXJkYSBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZmlyZGFfc3ludGhfY2xrID0geworCS5lbl9yZWcgPSBGSVJEQV9DTEtfU1lOVCwKKwkuZW5fcmVnX2JpdCA9IEFVWF9TWU5UX0VOQiwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmF1eF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYXV4X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YXV4X3J0YmwsIEFSUkFZX1NJWkUoYXV4X3J0YmwpLCAxfSwKKwkucHJpdmF0ZV9kYXRhID0gJmZpcmRhX3N5bnRoX2NvbmZpZywKIH07CiAKIC8qIGZpcmRhIHBhcmVudHMgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNsa19pbmZvIGZpcmRhX3BjbGtfaW5mb1tdID0gewogCXsKLQkJLnBjbGsgPSAmcGxsMV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDFfTUFTSywKLQkJLnNjYWxhYmxlID0gMSwKKwkJLnBjbGsgPSAmZmlyZGFfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAogCX0sIHsKIAkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwzX01BU0ssCi0JCS5zY2FsYWJsZSA9IDAsCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCiAJfSwKIH07CiAKQEAgLTE1OSw3MyArMjQxLDE1NSBAQAogCS5lbl9yZWdfYml0ID0gRklSREFfQ0xLX0VOQiwKIAkucGNsa19zZWwgPSAmZmlyZGFfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gRklSREFfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZmaXJkYV9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworLyogZ3B0IHN5bnRoZXNpemVyIG1hc2tzICovCitzdGF0aWMgc3RydWN0IGdwdF9jbGtfbWFza3MgZ3B0X21hc2tzID0geworCS5tc2NhbGVfc2VsX21hc2sgPSBHUFRfTVNDQUxFX01BU0ssCisJLm1zY2FsZV9zZWxfc2hpZnQgPSBHUFRfTVNDQUxFX1NISUZULAorCS5uc2NhbGVfc2VsX21hc2sgPSBHUFRfTlNDQUxFX01BU0ssCisJLm5zY2FsZV9zZWxfc2hpZnQgPSBHUFRfTlNDQUxFX1NISUZULAorfTsKKworLyogZ3B0IHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgZ3B0X3JhdGVfdGJsIGdwdF9ydGJsW10gPSB7CisJLyogRm9yIHBsbDEgPSAzMzIgTUh6ICovCisJey5tc2NhbGUgPSA0LCAubnNjYWxlID0gMH0sIC8qIDQxLjUgTUh6ICovCisJey5tc2NhbGUgPSAyLCAubnNjYWxlID0gMH0sIC8qIDU1LjMgTUh6ICovCisJey5tc2NhbGUgPSAxLCAubnNjYWxlID0gMH0sIC8qIDgzIE1IeiAqLworfTsKKworLyogZ3B0MCBzeW50aCBjbGsgY29uZmlnKi8KK3N0YXRpYyBzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgZ3B0MF9zeW50aF9jb25maWcgPSB7CisJLnN5bnRoX3JlZyA9IFBSU0MxX0NMS19DRkcsCisJLm1hc2tzID0gJmdwdF9tYXNrcywKK307CisKKy8qIGdwdCBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MF9zeW50aF9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZncHRfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmdwdF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2dwdF9ydGJsLCBBUlJBWV9TSVpFKGdwdF9ydGJsKSwgMn0sCisJLnByaXZhdGVfZGF0YSA9ICZncHQwX3N5bnRoX2NvbmZpZywKIH07CiAKIC8qIGdwdCBwYXJlbnRzICovCi1zdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBncHRfcGNsa19pbmZvW10gPSB7CitzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBncHQwX3BjbGtfaW5mb1tdID0gewogCXsKLQkJLnBjbGsgPSAmcGxsMV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDFfTUFTSywKLQkJLnNjYWxhYmxlID0gMSwKKwkJLnBjbGsgPSAmZ3B0MF9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCiAJfSwgewogCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDNfTUFTSywKLQkJLnNjYWxhYmxlID0gMCwKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKIAl9LAogfTsKIAogLyogZ3B0IHBhcmVudCBzZWxlY3Qgc3RydWN0dXJlICovCi1zdGF0aWMgc3RydWN0IHBjbGtfc2VsIGdwdF9wY2xrX3NlbCA9IHsKLQkucGNsa19pbmZvID0gZ3B0X3BjbGtfaW5mbywKLQkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0X3BjbGtfaW5mbyksCitzdGF0aWMgc3RydWN0IHBjbGtfc2VsIGdwdDBfcGNsa19zZWwgPSB7CisJLnBjbGtfaW5mbyA9IGdwdDBfcGNsa19pbmZvLAorCS5wY2xrX2NvdW50ID0gQVJSQVlfU0laRShncHQwX3BjbGtfaW5mbyksCiAJLnBjbGtfc2VsX3JlZyA9IFBFUklQX0NMS19DRkcsCiAJLnBjbGtfc2VsX21hc2sgPSBHUFRfQ0xLX01BU0ssCiB9OwogCi0vKiBncHQwIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGdwdDBfY29uZmlnID0gewotCS5zeW50aF9yZWcgPSBQUlNDMV9DTEtfQ0ZHLAotfTsKLQogLyogZ3B0MCB0aW1lciBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MF9jbGsgPSB7CiAJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCi0JLnBjbGtfc2VsID0gJmdwdF9wY2xrX3NlbCwKKwkucGNsa19zZWwgPSAmZ3B0MF9wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBHUFQwX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmZ3B0MF9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAotLyogZ3B0MSBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBncHQxX2NvbmZpZyA9IHsKKy8qIGdwdDEgc3ludGggY2xrIGNvbmZpZ3VyYXRpb25zICovCitzdGF0aWMgc3RydWN0IGdwdF9jbGtfY29uZmlnIGdwdDFfc3ludGhfY29uZmlnID0gewogCS5zeW50aF9yZWcgPSBQUlNDMl9DTEtfQ0ZHLAorCS5tYXNrcyA9ICZncHRfbWFza3MsCit9OworCisvKiBncHQxIHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncHQxX3N5bnRoX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmdwdF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmZ3B0X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7Z3B0X3J0YmwsIEFSUkFZX1NJWkUoZ3B0X3J0YmwpLCAyfSwKKwkucHJpdmF0ZV9kYXRhID0gJmdwdDFfc3ludGhfY29uZmlnLAorfTsKKworc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZ3B0MV9wY2xrX2luZm9bXSA9IHsKKwl7CisJCS5wY2xrID0gJmdwdDFfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAorCX0sIHsKKwkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDNfVkFMLAorCX0sCit9OworCisvKiBncHQgcGFyZW50IHNlbGVjdCBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNsa19zZWwgZ3B0MV9wY2xrX3NlbCA9IHsKKwkucGNsa19pbmZvID0gZ3B0MV9wY2xrX2luZm8sCisJLnBjbGtfY291bnQgPSBBUlJBWV9TSVpFKGdwdDFfcGNsa19pbmZvKSwKKwkucGNsa19zZWxfcmVnID0gUEVSSVBfQ0xLX0NGRywKKwkucGNsa19zZWxfbWFzayA9IEdQVF9DTEtfTUFTSywKIH07CiAKIC8qIGdwdDEgdGltZXIgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfY2xrID0gewogCS5lbl9yZWcgPSBQRVJJUDFfQ0xLX0VOQiwKIAkuZW5fcmVnX2JpdCA9IEdQVDFfQ0xLX0VOQiwKLQkucGNsa19zZWwgPSAmZ3B0X3BjbGtfc2VsLAorCS5wY2xrX3NlbCA9ICZncHQxX3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IEdQVDFfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZncHQxX2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCi0vKiBncHQyIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGdwdDJfY29uZmlnID0geworLyogZ3B0MiBzeW50aCBjbGsgY29uZmlndXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgZ3B0Ml9zeW50aF9jb25maWcgPSB7CiAJLnN5bnRoX3JlZyA9IFBSU0MzX0NMS19DRkcsCisJLm1hc2tzID0gJmdwdF9tYXNrcywKK307CisKKy8qIGdwdDEgc3ludGggY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfc3ludGhfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJnBsbDFfY2xrLAorCS5jYWxjX3JhdGUgPSAmZ3B0X2NhbGNfcmF0ZSwKKwkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZncHRfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtncHRfcnRibCwgQVJSQVlfU0laRShncHRfcnRibCksIDJ9LAorCS5wcml2YXRlX2RhdGEgPSAmZ3B0Ml9zeW50aF9jb25maWcsCit9OworCitzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBncHQyX3BjbGtfaW5mb1tdID0geworCXsKKwkJLnBjbGsgPSAmZ3B0Ml9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCisJfSwgeworCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCisJfSwKK307CisKKy8qIGdwdCBwYXJlbnQgc2VsZWN0IHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHQyX3BjbGtfc2VsID0geworCS5wY2xrX2luZm8gPSBncHQyX3BjbGtfaW5mbywKKwkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0Ml9wY2xrX2luZm8pLAorCS5wY2xrX3NlbF9yZWcgPSBQRVJJUF9DTEtfQ0ZHLAorCS5wY2xrX3NlbF9tYXNrID0gR1BUX0NMS19NQVNLLAogfTsKIAogLyogZ3B0MiB0aW1lciBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9jbGsgPSB7CiAJLmVuX3JlZyA9IFBFUklQMV9DTEtfRU5CLAogCS5lbl9yZWdfYml0ID0gR1BUMl9DTEtfRU5CLAotCS5wY2xrX3NlbCA9ICZncHRfcGNsa19zZWwsCisJLnBjbGtfc2VsID0gJmdwdDJfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gR1BUMl9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJmdwdDJfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKIC8qIGNsb2NrIGRlcml2ZWQgZnJvbSBwbGwzIGNsayAqLwpAQCAtMjQ1LDI2ICs0MDksMjcgQEAKIAkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCi0vKiBjbGNkIGNsb2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBjbGNkX2NsayA9IHsKLQkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKLQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFoYiBjbGsgKi8KKy8qIGFwYiBtYXNrcyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgYnVzX2Nsa19tYXNrcyBhcGJfbWFza3MgPSB7CisJLm1hc2sgPSBIQ0xLX1BDTEtfUkFUSU9fTUFTSywKKwkuc2hpZnQgPSBIQ0xLX1BDTEtfUkFUSU9fU0hJRlQsCiB9OwogCi0vKiBjbG9jayBkZXJpdmVkIGZyb20gYWhiIGNsayAqLwogLyogYXBiIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IGJ1c19jbGtfY29uZmlnIGFwYl9jb25maWcgPSB7CiAJLnJlZyA9IENPUkVfQ0xLX0NGRywKLQkubWFzayA9IEhDTEtfUENMS19SQVRJT19NQVNLLAotCS5zaGlmdCA9IEhDTEtfUENMS19SQVRJT19TSElGVCwKKwkubWFza3MgPSAmYXBiX21hc2tzLAogfTsKIAogLyogYXBiIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBhcGJfY2xrID0gewogCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAogCS5wY2xrID0gJmFoYl9jbGssCisJLmNhbGNfcmF0ZSA9ICZidXNfY2FsY19yYXRlLAogCS5yZWNhbGMgPSAmYnVzX2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmJ1c19jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2J1c19ydGJsLCBBUlJBWV9TSVpFKGJ1c19ydGJsKSwgMn0sCiAJLnByaXZhdGVfZGF0YSA9ICZhcGJfY29uZmlnLAogfTsKIApAQCAtMzI1LDggKzQ5MCwxNyBAQAogCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzEwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzIwKQorLyogZW1pIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBlbWlfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFoYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKyNlbmRpZgorCiAvKiBzc3AgY2xvY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzcF9jbGsgPSB7CitzdGF0aWMgc3RydWN0IGNsayBzc3AwX2NsayA9IHsKIAkucGNsayA9ICZhcGJfY2xrLAogCS5lbl9yZWcgPSBQRVJJUDFfQ0xLX0VOQiwKIAkuZW5fcmVnX2JpdCA9IFNTUF9DTEtfRU5CLApAQCAtMzQzLDE0ICs1MTcsMTQ1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGR1bW15X2FwYl9wY2xrOwogCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMwMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMxMCkgfHwgXAorCWRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMjApCisvKiBmc21jIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBmc21jX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhaGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisjZW5kaWYKKworLyogY29tbW9uIGNsb2NrcyB0byBzcGVhcjMxMCBhbmQgc3BlYXIzMjAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzEwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzIwKQorLyogdWFydDEgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIHVhcnQyIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYXBiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworI2VuZGlmIC8qIENPTkZJR19NQUNIX1NQRUFSMzEwIHx8IENPTkZJR19NQUNIX1NQRUFSMzIwICovCisKKy8qIGNvbW1vbiBjbG9ja3MgdG8gc3BlYXIzMDAgYW5kIHNwZWFyMzIwICovCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMwMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMyMCkKKy8qIGNsY2QgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsY2RfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJnBsbDNfNDhtX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisvKiBzZGhjaSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgc2RoY2lfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFoYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9TUEVBUjMwMCB8fCBDT05GSUdfTUFDSF9TUEVBUjMyMCAqLworCisvKiBzcGVhcjMwMCBtYWNoaW5lIHNwZWNpZmljIGNsb2NrIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9TUEVBUjMwMAorLyogZ3BpbzEgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8xX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIGtleWJvYXJkIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBrYmRfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworI2VuZGlmCisKKy8qIHNwZWFyMzEwIG1hY2hpbmUgc3BlY2lmaWMgY2xvY2sgc3RydWN0dXJlcyAqLworI2lmZGVmIENPTkZJR19NQUNIX1NQRUFSMzEwCisvKiB1YXJ0MyBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworLyogdWFydDQgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQ0X2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIHVhcnQ1IGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0NV9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYXBiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworI2VuZGlmCisKKy8qIHNwZWFyMzIwIG1hY2hpbmUgc3BlY2lmaWMgY2xvY2sgc3RydWN0dXJlcyAqLworI2lmZGVmIENPTkZJR19NQUNIX1NQRUFSMzIwCisvKiBjYW4wIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBjYW4wX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIGNhbjEgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbjFfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworLyogaTJjMSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYWhiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisvKiBzc3AxIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBzc3AxX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIHNzcDIgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzcDJfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworLyogcHdtIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBwd21fY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKyNlbmRpZgorCiAvKiBhcnJheSBvZiBhbGwgc3BlYXIgM3h4IGNsb2NrIGxvb2t1cHMgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBzcGVhcl9jbGtfbG9va3Vwc1tdID0gewotCXsgLmNvbl9pZCA9ICJhcGJfcGNsayIsCS5jbGsgPSAmZHVtbXlfYXBiX3BjbGt9LAorCXsgLmNvbl9pZCA9ICJhcGJfcGNsayIsCQkuY2xrID0gJmR1bW15X2FwYl9wY2xrfSwKIAkvKiByb290IGNsa3MgKi8KIAl7IC5jb25faWQgPSAib3NjXzMya19jbGsiLAkuY2xrID0gJm9zY18zMmtfY2xrfSwKIAl7IC5jb25faWQgPSAib3NjXzI0bV9jbGsiLAkuY2xrID0gJm9zY18yNG1fY2xrfSwKIAkvKiBjbG9jayBkZXJpdmVkIGZyb20gMzIgS0h6IG9zYyBjbGsgKi8KLQl7IC5kZXZfaWQgPSAicnRjIiwJCS5jbGsgPSAmcnRjX2Nsa30sCisJeyAuZGV2X2lkID0gInJ0Yy1zcGVhciIsCS5jbGsgPSAmcnRjX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIDI0IE1IeiBvc2MgY2xrICovCiAJeyAuY29uX2lkID0gInBsbDFfY2xrIiwJCS5jbGsgPSAmcGxsMV9jbGt9LAogCXsgLmNvbl9pZCA9ICJwbGwzXzQ4bV9jbGsiLAkuY2xrID0gJnBsbDNfNDhtX2Nsa30sCkBAIC0zNTgsMTggKzY2MywyMiBAQAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSBwbGwxIGNsayAqLwogCXsgLmNvbl9pZCA9ICJjcHVfY2xrIiwJCS5jbGsgPSAmY3B1X2Nsa30sCiAJeyAuY29uX2lkID0gImFoYl9jbGsiLAkJLmNsayA9ICZhaGJfY2xrfSwKKwl7IC5jb25faWQgPSAidWFydF9zeW50aF9jbGsiLAkuY2xrID0gJnVhcnRfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZmlyZGFfc3ludGhfY2xrIiwJLmNsayA9ICZmaXJkYV9zeW50aF9jbGt9LAorCXsgLmNvbl9pZCA9ICJncHQwX3N5bnRoX2NsayIsCS5jbGsgPSAmZ3B0MF9zeW50aF9jbGt9LAorCXsgLmNvbl9pZCA9ICJncHQxX3N5bnRoX2NsayIsCS5jbGsgPSAmZ3B0MV9zeW50aF9jbGt9LAorCXsgLmNvbl9pZCA9ICJncHQyX3N5bnRoX2NsayIsCS5jbGsgPSAmZ3B0Ml9zeW50aF9jbGt9LAogCXsgLmRldl9pZCA9ICJ1YXJ0IiwJCS5jbGsgPSAmdWFydF9jbGt9LAogCXsgLmRldl9pZCA9ICJmaXJkYSIsCQkuY2xrID0gJmZpcmRhX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwdDAiLAkJLmNsayA9ICZncHQwX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwdDEiLAkJLmNsayA9ICZncHQxX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwdDIiLAkJLmNsayA9ICZncHQyX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIHBsbDMgY2xrICovCi0JeyAuZGV2X2lkID0gInVzYmgiLAkJLmNsayA9ICZ1c2JoX2Nsa30sCi0JeyAuZGV2X2lkID0gInVzYmQiLAkJLmNsayA9ICZ1c2JkX2Nsa30sCi0JeyAuZGV2X2lkID0gImNsY2QiLAkJLmNsayA9ICZjbGNkX2Nsa30sCisJeyAuZGV2X2lkID0gImRlc2lnbndhcmVfdWRjIiwgICAuY2xrID0gJnVzYmRfY2xrfSwKKwl7IC5jb25faWQgPSAidXNiaF9jbGsiLAkJLmNsayA9ICZ1c2JoX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFoYiBjbGsgKi8KIAl7IC5jb25faWQgPSAiYXBiX2NsayIsCQkuY2xrID0gJmFwYl9jbGt9LAotCXsgLmRldl9pZCA9ICJpMmMiLAkJLmNsayA9ICZpMmNfY2xrfSwKKwl7IC5kZXZfaWQgPSAiaTJjX2Rlc2lnbndhcmUuMCIsCS5jbGsgPSAmaTJjX2Nsa30sCiAJeyAuZGV2X2lkID0gImRtYSIsCQkuY2xrID0gJmRtYV9jbGt9LAogCXsgLmRldl9pZCA9ICJqcGVnIiwJCS5jbGsgPSAmanBlZ19jbGt9LAogCXsgLmRldl9pZCA9ICJnbWFjIiwJCS5jbGsgPSAmZ21hY19jbGt9LApAQCAtMzc3LDggKzY4Niw1MCBAQAogCXsgLmRldl9pZCA9ICJjMyIsCQkuY2xrID0gJmMzX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFwYiBjbGsgKi8KIAl7IC5kZXZfaWQgPSAiYWRjIiwJCS5jbGsgPSAmYWRjX2Nsa30sCi0JeyAuZGV2X2lkID0gInNzcCIsCQkuY2xrID0gJnNzcF9jbGt9LAorCXsgLmRldl9pZCA9ICJzc3AtcGwwMjIuMCIsCS5jbGsgPSAmc3NwMF9jbGt9LAogCXsgLmRldl9pZCA9ICJncGlvIiwJCS5jbGsgPSAmZ3Bpb19jbGt9LAorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMTApIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMjApCisJeyAuZGV2X2lkID0gInBoeXNtYXAtZmxhc2giLAkuY2xrID0gJmVtaV9jbGt9LAorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMwMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMxMCkgfHwgXAorCWRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMjApCisJeyAuY29uX2lkID0gImZzbWMiLAkJLmNsayA9ICZmc21jX2Nsa30sCisjZW5kaWYKKworLyogY29tbW9uIGNsb2NrcyB0byBzcGVhcjMxMCBhbmQgc3BlYXIzMjAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzEwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzIwKQorCXsgLmRldl9pZCA9ICJ1YXJ0MSIsCQkuY2xrID0gJnVhcnQxX2Nsa30sCisJeyAuZGV2X2lkID0gInVhcnQyIiwJCS5jbGsgPSAmdWFydDJfY2xrfSwKKyNlbmRpZgorCisJLyogY29tbW9uIGNsb2NrIHRvIHNwZWFyMzAwIGFuZCBzcGVhcjMyMCAqLworI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMDApIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMjApCisJeyAuZGV2X2lkID0gImNsY2QiLAkJLmNsayA9ICZjbGNkX2Nsa30sCisJeyAuZGV2X2lkID0gInNkaGNpIiwJCS5jbGsgPSAmc2RoY2lfY2xrfSwKKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9TUEVBUjMwMCB8fCBDT05GSUdfTUFDSF9TUEVBUjMyMCAqLworCisJLyogc3BlYXIzMDAgbWFjaGluZSBzcGVjaWZpYyBjbG9jayBzdHJ1Y3R1cmVzICovCisjaWZkZWYgQ09ORklHX01BQ0hfU1BFQVIzMDAKKwl7IC5kZXZfaWQgPSAiZ3BpbzEiLAkJLmNsayA9ICZncGlvMV9jbGt9LAorCXsgLmRldl9pZCA9ICJrZXlib2FyZCIsCQkuY2xrID0gJmtiZF9jbGt9LAorI2VuZGlmCisKKwkvKiBzcGVhcjMxMCBtYWNoaW5lIHNwZWNpZmljIGNsb2NrIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9TUEVBUjMxMAorCXsgLmRldl9pZCA9ICJ1YXJ0MyIsCQkuY2xrID0gJnVhcnQzX2Nsa30sCisJeyAuZGV2X2lkID0gInVhcnQ0IiwJCS5jbGsgPSAmdWFydDRfY2xrfSwKKwl7IC5kZXZfaWQgPSAidWFydDUiLAkJLmNsayA9ICZ1YXJ0NV9jbGt9LAorCisjZW5kaWYKKwkvKiBzcGVhcjMyMCBtYWNoaW5lIHNwZWNpZmljIGNsb2NrIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9TUEVBUjMyMAorCXsgLmRldl9pZCA9ICJjX2Nhbl9wbGF0Zm9ybS4wIiwJLmNsayA9ICZjYW4wX2Nsa30sCisJeyAuZGV2X2lkID0gImNfY2FuX3BsYXRmb3JtLjEiLAkuY2xrID0gJmNhbjFfY2xrfSwKKwl7IC5kZXZfaWQgPSAiaTJjX2Rlc2lnbndhcmUuMSIsCS5jbGsgPSAmaTJjMV9jbGt9LAorCXsgLmRldl9pZCA9ICJzc3AtcGwwMjIuMSIsCS5jbGsgPSAmc3NwMV9jbGt9LAorCXsgLmRldl9pZCA9ICJzc3AtcGwwMjIuMiIsCS5jbGsgPSAmc3NwMl9jbGt9LAorCXsgLmRldl9pZCA9ICJwd20iLAkJLmNsayA9ICZwd21fY2xrfSwKKyNlbmRpZgogfTsKIAogdm9pZCBfX2luaXQgY2xrX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IDk0NzYyNWQuLjUzZGE0MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMTEsOSArMTEsOCBAQAogICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9nZW5lcmljLmgKaW5kZXggYWY3ZTAyYy4uOGUzMDYzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2dlbmVyaWMuaApAQCAtMTQsMTEgKzE0LDExIEBACiAjaWZuZGVmIF9fTUFDSF9HRU5FUklDX0gKICNkZWZpbmUgX19NQUNIX0dFTkVSSUNfSAogCi0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxwbGF0L3BhZG11eC5oPgogCiAvKiBzcGVhcjN4eCBkZWNsYXJhdGlvbnMgKi8KQEAgLTMzLDE0ICszMywxNCBAQAogLyogQWRkIHNwZWFyM3h4IGZhbWlseSBkZXZpY2Ugc3RydWN0dXJlIGRlY2xhcmF0aW9ucyBoZXJlICovCiBleHRlcm4gc3RydWN0IGFtYmFfZGV2aWNlIGdwaW9fZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBhbWJhX2RldmljZSB1YXJ0X2RldmljZTsKLWV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHNwZWFyX3N5c190aW1lcjsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHNwZWFyM3h4X3RpbWVyOwogCiAvKiBBZGQgc3BlYXIzeHggZmFtaWx5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBoZXJlICovCiB2b2lkIF9faW5pdCBjbGtfaW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IHNwZWFyX3NldHVwX3RpbWVyKHZvaWQpOwogdm9pZCBfX2luaXQgc3BlYXIzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBfX2luaXQgc3BlYXIzeHhfaW5pdF9pcnEodm9pZCk7CiB2b2lkIF9faW5pdCBzcGVhcjN4eF9pbml0KHZvaWQpOwotdm9pZCBzcGVhcl9wbXhfaW5pdChzdHJ1Y3QgcG14X2RyaXZlciAqcG14X2RyaXZlciwgdWludCBiYXNlLCB1aW50IHNpemUpOwogCiAvKiBwYWQgbXV4IGRlY2xhcmF0aW9ucyAqLwogI2RlZmluZSBQTVhfRklSREFfTUFTSwkJKDEgPDwgMTQpCkBAIC0xMjksMTIgKzEyOSwxMCBAQAogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF90ZWxlY29tX2RhYzsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9pMnM7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fYm9vdF9waW5zOwotZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF90ZWxlY29tX3NkaW9fNGJpdDsKLWV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9zZGlvXzhiaXQ7CitleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fc2RoY2lfNGJpdDsKK2V4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9zZGhjaV84Yml0OwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9ncGlvMTsKIAotdm9pZCBzcGVhcjMwMF9wbXhfaW5pdCh2b2lkKTsKLQogLyogQWRkIHNwZWFyMzAwIG1hY2hpbmUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGhlcmUgKi8KIHZvaWQgX19pbml0IHNwZWFyMzAwX2luaXQodm9pZCk7CiAKQEAgLTE1NCw4ICsxNTIsNiBAQAogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9yczQ4NV8wXzE7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3RkbTA7CiAKLXZvaWQgc3BlYXIzMTBfcG14X2luaXQodm9pZCk7Ci0KIC8qIEFkZCBzcGVhcjMxMCBtYWNoaW5lIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBoZXJlICovCiB2b2lkIF9faW5pdCBzcGVhcjMxMF9pbml0KHZvaWQpOwogCkBAIC0xNzYsMTQgKzE3MiwxNCBAQAogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9lbWk7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X2ZzbWM7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3NwcDsKLWV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfc2RpbzsKK2V4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfc2RoY2k7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X2kyczsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdWFydDE7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3VhcnQxX21vZGVtOwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF91YXJ0MjsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdG91Y2hzY3JlZW47CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X2NhbjsKLWV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfc2Rpb19sZWQ7CitleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3NkaGNpX2xlZDsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfcHdtMDsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfcHdtMTsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfcHdtMjsKQEAgLTE5NSw4ICsxOTEsNiBAQAogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9zbWlpMTsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfaTJjMTsKIAotdm9pZCBzcGVhcjMyMF9wbXhfaW5pdCh2b2lkKTsKLQogLyogQWRkIHNwZWFyMzIwIG1hY2hpbmUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGhlcmUgKi8KIHZvaWQgX19pbml0IHNwZWFyMzIwX2luaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDRhODZlNmEuLjQ2NjBjMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMTQsNiArMTQsOSBAQAogI2lmbmRlZiBfX01BQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX01BQ0hfSEFSRFdBUkVfSAogCisjaW5jbHVkZSA8cGxhdC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKwogLyogVml0dWFsIHRvIHBoeXNpY2FsIHRyYW5zbGF0aW9uIG9mIHN0YXRpY2FsbHkgbWFwcGVkIHNwYWNlICovCiAjZGVmaW5lIElPX0FERFJFU1MoeCkJCSh4IHwgMHhGMDAwMDAwMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDdmOTQwYjguLmExYTdmNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTY5LDcgKzY5LDcgQEAKICNkZWZpbmUgSVJRX0NMQ0QJCQkJSVJRX0dFTl9SQVNfMwogCiAvKiBJUlFzIHNoYXJpbmcgSVJRX0lOVFJDT01NX1JBU19BUk0gKi8KLSNkZWZpbmUgSVJRX1NESU8JCQkJSVJRX0lOVFJDT01NX1JBU19BUk0KKyNkZWZpbmUgSVJRX1NESENJCQkJCUlSUV9JTlRSQ09NTV9SQVNfQVJNCiAKIC8qIEdQSU8gcGlucyB2aXJ0dWFsIGlycXMgKi8KICNkZWZpbmUgU1BFQVJfR1BJT19JTlRfQkFTRQkJCShWSVJRX1NUQVJUICsgOSkKQEAgLTExNSw3ICsxMTUsNyBAQAogI2RlZmluZSBWSVJRX1NQUAkJCQkoVklSUV9TVEFSVCArIDIpCiAKIC8qIElSUXMgc2hhcmluZyBJUlFfR0VOX1JBU18yICovCi0jZGVmaW5lIElSUV9TRElPCQkJCUlSUV9HRU5fUkFTXzIKKyNkZWZpbmUgSVJRX1NESENJCQkJCUlSUV9HRU5fUkFTXzIKIAogLyogSVJRcyBzaGFyaW5nIElSUV9HRU5fUkFTXzMgKi8KICNkZWZpbmUgVklSUV9QTEdQSU8JCQkJKFZJUlFfU1RBUlQgKyAzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9taXNjX3JlZ3MuaAppbmRleCAzOGQ3NjdhLi41YmQ4Y2Q4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9taXNjX3JlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9taXNjX3JlZ3MuaApAQCAtMTQsMTYgKzE0LDE2IEBACiAjaWZuZGVmIF9fTUFDSF9NSVNDX1JFR1NfSAogI2RlZmluZSBfX01BQ0hfTUlTQ19SRUdTX0gKIAotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNkZWZpbmUgTUlTQ19CQVNFCQlWQV9TUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UKKyNkZWZpbmUgTUlTQ19CQVNFCQlJT01FTShWQV9TUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UpCiAKLSNkZWZpbmUgU09DX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDAwKSkKLSNkZWZpbmUgRElBR19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAwNCkpCi0jZGVmaW5lIFBMTDFfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAwOCkpCi0jZGVmaW5lIFBMTDFfRlJRCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAwQykpCi0jZGVmaW5lIFBMTDFfTU9ECQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAxMCkpCi0jZGVmaW5lIFBMTDJfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAxNCkpCisjZGVmaW5lIFNPQ19DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwMDApCisjZGVmaW5lIERJQUdfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MDA0KQorI2RlZmluZSBQTEwxX0NUUgkJKE1JU0NfQkFTRSArIDB4MDA4KQorI2RlZmluZSBQTEwxX0ZSUQkJKE1JU0NfQkFTRSArIDB4MDBDKQorI2RlZmluZSBQTEwxX01PRAkJKE1JU0NfQkFTRSArIDB4MDEwKQorI2RlZmluZSBQTEwyX0NUUgkJKE1JU0NfQkFTRSArIDB4MDE0KQogLyogUExMX0NUUiByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBQTExfRU5BQkxFCQkyCiAjZGVmaW5lIFBMTF9NT0RFX1NISUZUCQk0CkBAIC0zMyw3ICszMyw3IEBACiAjZGVmaW5lIFBMTF9NT0RFX0RJVEhfRFNCCTIKICNkZWZpbmUgUExMX01PREVfRElUSF9TU0IJMwogCi0jZGVmaW5lIFBMTDJfRlJRCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAxOCkpCisjZGVmaW5lIFBMTDJfRlJRCQkoTUlTQ19CQVNFICsgMHgwMTgpCiAvKiBQTEwgRlJRIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFBMTF9ESVZfTl9TSElGVAkJMAogI2RlZmluZSBQTExfRElWX05fTUFTSwkJMHhGRgpAQCAtNDQsMTYgKzQ0LDE2IEBACiAjZGVmaW5lIFBMTF9ESVRIX0ZEQktfTV9TSElGVAkxNgogI2RlZmluZSBQTExfRElUSF9GREJLX01fTUFTSwkweEZGRkYKIAotI2RlZmluZSBQTEwyX01PRAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMUMpKQotI2RlZmluZSBQTExfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMjApKQotI2RlZmluZSBDT1JFX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDI0KSkKKyNkZWZpbmUgUExMMl9NT0QJCShNSVNDX0JBU0UgKyAweDAxQykKKyNkZWZpbmUgUExMX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDAyMCkKKyNkZWZpbmUgQ09SRV9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwMjQpCiAvKiBDT1JFIENMSyBDRkcgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgUExMX0hDTEtfUkFUSU9fU0hJRlQJMTAKICNkZWZpbmUgUExMX0hDTEtfUkFUSU9fTUFTSwkweDMKICNkZWZpbmUgSENMS19QQ0xLX1JBVElPX1NISUZUCTgKICNkZWZpbmUgSENMS19QQ0xLX1JBVElPX01BU0sJMHgzCiAKLSNkZWZpbmUgUEVSSVBfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMjgpKQorI2RlZmluZSBQRVJJUF9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwMjgpCiAvKiBQRVJJUF9DTEtfQ0ZHIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFVBUlRfQ0xLX1NISUZUCQk0CiAjZGVmaW5lIFVBUlRfQ0xLX01BU0sJCTB4MQpAQCAtNjMsMTAgKzYzLDEwIEBACiAjZGVmaW5lIEdQVDFfQ0xLX1NISUZUCQkxMQogI2RlZmluZSBHUFQyX0NMS19TSElGVAkJMTIKICNkZWZpbmUgR1BUX0NMS19NQVNLCQkweDEKLSNkZWZpbmUgQVVYX0NMS19QTEwzX01BU0sJMAotI2RlZmluZSBBVVhfQ0xLX1BMTDFfTUFTSwkxCisjZGVmaW5lIEFVWF9DTEtfUExMM19WQUwJMAorI2RlZmluZSBBVVhfQ0xLX1BMTDFfVkFMCTEKIAotI2RlZmluZSBQRVJJUDFfQ0xLX0VOQgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMkMpKQorI2RlZmluZSBQRVJJUDFfQ0xLX0VOQgkJKE1JU0NfQkFTRSArIDB4MDJDKQogLyogUEVSSVAxX0NMS19FTkIgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgVUFSVF9DTEtfRU5CCQkzCiAjZGVmaW5lIFNTUF9DTEtfRU5CCQk1CkBAIC04NSwzNCArODUsMzUgQEAKICNkZWZpbmUgVVNCSF9DTEtfRU5CCQkyNQogI2RlZmluZSBDM19DTEtfRU5CCQkzMQogCi0jZGVmaW5lIFNPQ19DT1JFX0lECQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzMCkpCi0jZGVmaW5lIFJBU19DTEtfRU5CCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzNCkpCi0jZGVmaW5lIFBFUklQMV9TT0ZfUlNUCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzOCkpCisjZGVmaW5lIFNPQ19DT1JFX0lECQkoTUlTQ19CQVNFICsgMHgwMzApCisjZGVmaW5lIFJBU19DTEtfRU5CCQkoTUlTQ19CQVNFICsgMHgwMzQpCisjZGVmaW5lIFBFUklQMV9TT0ZfUlNUCQkoTUlTQ19CQVNFICsgMHgwMzgpCiAvKiBQRVJJUDFfU09GX1JTVCByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBKUEVHX1NPRl9SU1QJCTgKIAotI2RlZmluZSBTT0NfVVNFUl9JRAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwM0MpKQotI2RlZmluZSBSQVNfU09GX1JTVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNDApKQotI2RlZmluZSBQUlNDMV9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA0NCkpCi0jZGVmaW5lIFBSU0MyX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDQ4KSkKLSNkZWZpbmUgUFJTQzNfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNEMpKQorI2RlZmluZSBTT0NfVVNFUl9JRAkJKE1JU0NfQkFTRSArIDB4MDNDKQorI2RlZmluZSBSQVNfU09GX1JTVAkJKE1JU0NfQkFTRSArIDB4MDQwKQorI2RlZmluZSBQUlNDMV9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNDQpCisjZGVmaW5lIFBSU0MyX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDA0OCkKKyNkZWZpbmUgUFJTQzNfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDRDKQogLyogZ3B0IHN5bnRoZXNpemVyIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIEdQVF9NU0NBTEVfU0hJRlQJMAogI2RlZmluZSBHUFRfTVNDQUxFX01BU0sJCTB4RkZGCiAjZGVmaW5lIEdQVF9OU0NBTEVfU0hJRlQJMTIKICNkZWZpbmUgR1BUX05TQ0FMRV9NQVNLCQkweEYKIAotI2RlZmluZSBBTUVNX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDUwKSkKLSNkZWZpbmUgRVhQSV9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA1NCkpCi0jZGVmaW5lIENMQ0RfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDVDKSkKLSNkZWZpbmUgRklSREFfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDYwKSkKLSNkZWZpbmUgVUFSVF9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNjQpKQotI2RlZmluZSBHTUFDX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA2OCkpCi0jZGVmaW5lIFJBUzFfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDZDKSkKLSNkZWZpbmUgUkFTMl9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNzApKQotI2RlZmluZSBSQVMzX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA3NCkpCi0jZGVmaW5lIFJBUzRfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDc4KSkKKyNkZWZpbmUgQU1FTV9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNTApCisjZGVmaW5lIEVYUElfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDU0KQorI2RlZmluZSBDTENEX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNUMpCisjZGVmaW5lIEZJUkRBX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNjApCisjZGVmaW5lIFVBUlRfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA2NCkKKyNkZWZpbmUgR01BQ19DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDY4KQorI2RlZmluZSBSQVMxX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNkMpCisjZGVmaW5lIFJBUzJfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA3MCkKKyNkZWZpbmUgUkFTM19DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDc0KQorI2RlZmluZSBSQVM0X0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNzgpCiAvKiBhdXggY2xrIHN5bnRoZXNpc2VyIHJlZ2lzdGVyIG1hc2tzIGZvciBpcmRhIHRvIHJhczQgKi8KKyNkZWZpbmUgQVVYX1NZTlRfRU5CCQkzMQogI2RlZmluZSBBVVhfRVFfU0VMX1NISUZUCTMwCiAjZGVmaW5lIEFVWF9FUV9TRUxfTUFTSwkJMQogI2RlZmluZSBBVVhfRVExX1NFTAkJMApAQCAtMTIyLDQyICsxMjMsNDIgQEAKICNkZWZpbmUgQVVYX1lTQ0FMRV9TSElGVAkwCiAjZGVmaW5lIEFVWF9ZU0NBTEVfTUFTSwkJMHhGRkYKIAotI2RlZmluZSBJQ00xX0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDdDKSkKLSNkZWZpbmUgSUNNMl9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA4MCkpCi0jZGVmaW5lIElDTTNfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwODQpKQotI2RlZmluZSBJQ000X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDg4KSkKLSNkZWZpbmUgSUNNNV9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA4QykpCi0jZGVmaW5lIElDTTZfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwOTApKQotI2RlZmluZSBJQ003X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDk0KSkKLSNkZWZpbmUgSUNNOF9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA5OCkpCi0jZGVmaW5lIElDTTlfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwOUMpKQotI2RlZmluZSBETUFfQ0hOX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQTApKQotI2RlZmluZSBVU0IyX1BIWV9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEE0KSkKLSNkZWZpbmUgR01BQ19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBBOCkpCi0jZGVmaW5lIEVYUElfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQUMpKQotI2RlZmluZSBQUkMxX0xPQ0tfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBDMCkpCi0jZGVmaW5lIFBSQzJfTE9DS19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEM0KSkKLSNkZWZpbmUgUFJDM19MT0NLX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQzgpKQotI2RlZmluZSBQUkM0X0xPQ0tfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBDQykpCi0jZGVmaW5lIFBSQzFfSVJRX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRDApKQotI2RlZmluZSBQUkMyX0lSUV9DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEQ0KSkKLSNkZWZpbmUgUFJDM19JUlFfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBEOCkpCi0jZGVmaW5lIFBSQzRfSVJRX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwREMpKQotI2RlZmluZSBQV1JET1dOX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEUwKSkKLSNkZWZpbmUgQ09NUFNTVExfMVY4X0NGRwkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBFNCkpCi0jZGVmaW5lIENPTVBTU1RMXzJWNV9DRkcJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRTgpKQotI2RlZmluZSBDT01QQ09SXzNWM19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEVDKSkKLSNkZWZpbmUgU1NUTFBBRF9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBGMCkpCi0jZGVmaW5lIEJJU1QxX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEY0KSkKLSNkZWZpbmUgQklTVDJfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRjgpKQotI2RlZmluZSBCSVNUM19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBGQykpCi0jZGVmaW5lIEJJU1Q0X0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTAwKSkKLSNkZWZpbmUgQklTVDVfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMDQpKQotI2RlZmluZSBCSVNUMV9TVFNfUkVTCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDEwOCkpCi0jZGVmaW5lIEJJU1QyX1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTBDKSkKLSNkZWZpbmUgQklTVDNfU1RTX1JFUwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMTApKQotI2RlZmluZSBCSVNUNF9TVFNfUkVTCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDExNCkpCi0jZGVmaW5lIEJJU1Q1X1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTE4KSkKLSNkZWZpbmUgU1lTRVJSX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTFDKSkKKyNkZWZpbmUgSUNNMV9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwN0MpCisjZGVmaW5lIElDTTJfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDgwKQorI2RlZmluZSBJQ00zX0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA4NCkKKyNkZWZpbmUgSUNNNF9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwODgpCisjZGVmaW5lIElDTTVfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDhDKQorI2RlZmluZSBJQ002X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA5MCkKKyNkZWZpbmUgSUNNN19BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwOTQpCisjZGVmaW5lIElDTThfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDk4KQorI2RlZmluZSBJQ005X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA5QykKKyNkZWZpbmUgRE1BX0NITl9DRkcJCShNSVNDX0JBU0UgKyAweDBBMCkKKyNkZWZpbmUgVVNCMl9QSFlfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwQTQpCisjZGVmaW5lIEdNQUNfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEE4KQorI2RlZmluZSBFWFBJX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBBQykKKyNkZWZpbmUgUFJDMV9MT0NLX0NUUgkJKE1JU0NfQkFTRSArIDB4MEMwKQorI2RlZmluZSBQUkMyX0xPQ0tfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQzQpCisjZGVmaW5lIFBSQzNfTE9DS19DVFIJCShNSVNDX0JBU0UgKyAweDBDOCkKKyNkZWZpbmUgUFJDNF9MT0NLX0NUUgkJKE1JU0NfQkFTRSArIDB4MENDKQorI2RlZmluZSBQUkMxX0lSUV9DVFIJCShNSVNDX0JBU0UgKyAweDBEMCkKKyNkZWZpbmUgUFJDMl9JUlFfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRDQpCisjZGVmaW5lIFBSQzNfSVJRX0NUUgkJKE1JU0NfQkFTRSArIDB4MEQ4KQorI2RlZmluZSBQUkM0X0lSUV9DVFIJCShNSVNDX0JBU0UgKyAweDBEQykKKyNkZWZpbmUgUFdSRE9XTl9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRTApCisjZGVmaW5lIENPTVBTU1RMXzFWOF9DRkcJKE1JU0NfQkFTRSArIDB4MEU0KQorI2RlZmluZSBDT01QU1NUTF8yVjVfQ0ZHCShNSVNDX0JBU0UgKyAweDBFOCkKKyNkZWZpbmUgQ09NUENPUl8zVjNfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwRUMpCisjZGVmaW5lIFNTVExQQURfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEYwKQorI2RlZmluZSBCSVNUMV9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRjQpCisjZGVmaW5lIEJJU1QyX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBGOCkKKyNkZWZpbmUgQklTVDNfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEZDKQorI2RlZmluZSBCSVNUNF9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgxMDApCisjZGVmaW5lIEJJU1Q1X0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDEwNCkKKyNkZWZpbmUgQklTVDFfU1RTX1JFUwkJKE1JU0NfQkFTRSArIDB4MTA4KQorI2RlZmluZSBCSVNUMl9TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMEMpCisjZGVmaW5lIEJJU1QzX1NUU19SRVMJCShNSVNDX0JBU0UgKyAweDExMCkKKyNkZWZpbmUgQklTVDRfU1RTX1JFUwkJKE1JU0NfQkFTRSArIDB4MTE0KQorI2RlZmluZSBCSVNUNV9TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMTgpCisjZGVmaW5lIFNZU0VSUl9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgxMUMpCiAKICNlbmRpZiAvKiBfX01BQ0hfTUlTQ19SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhci5oCmluZGV4IGRjY2E4NTYuLjYzZmQ5ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIuaApAQCAtMTQsMTI0ICsxNCw2MSBAQAogI2lmbmRlZiBfX01BQ0hfU1BFQVIzWFhfSAogI2RlZmluZSBfX01BQ0hfU1BFQVIzWFhfSAogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxtYWNoL3NwZWFyMzAwLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGVhcjMxMC5oPgogI2luY2x1ZGUgPG1hY2gvc3BlYXIzMjAuaD4KIAotI2RlZmluZSBTUEVBUjNYWF9NTF9TRFJBTV9CQVNFCQkweDAwMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX01MX1NEUkFNX1NJWkUJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfTUxfU0RSQU1fQkFTRQkJVUwoMHgwMDAwMDAwMCkKIAotI2RlZmluZSBTUEVBUjNYWF9JQ005X0JBU0UJCTB4QzAwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNOV9TSVpFCQkweDEwMDAwMDAwCisjZGVmaW5lIFNQRUFSM1hYX0lDTTlfQkFTRQkJVUwoMHhDMDAwMDAwMCkKIAogLyogSUNNMSAtIExvdyBzcGVlZCBjb25uZWN0aW9uICovCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfMl9CQVNFCQkweEQwMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfMl9TSVpFCQkweDEwMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9VQVJUX0JBU0UJCTB4RDAwMDAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfSUNNMV8yX0JBU0UJCVVMKDB4RDAwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTFfVUFSVF9CQVNFCQlVTCgweEQwMDAwMDAwKQogI2RlZmluZSBWQV9TUEVBUjNYWF9JQ00xX1VBUlRfQkFTRQlJT19BRERSRVNTKFNQRUFSM1hYX0lDTTFfVUFSVF9CQVNFKQotI2RlZmluZSBTUEVBUjNYWF9JQ00xX1VBUlRfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfQURDX0JBU0UJCTB4RDAwODAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9BRENfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfU1NQX0JBU0UJCTB4RDAxMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9TU1BfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfSTJDX0JBU0UJCTB4RDAxODAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9JMkNfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfSlBFR19CQVNFCQkweEQwODAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfSlBFR19TSVpFCQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9JUkRBX0JBU0UJCTB4RDEwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9JUkRBX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00xX1NSQU1fQkFTRQkJMHhEMjgwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00xX1NSQU1fU0laRQkJMHgwNTgwMDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ00xX0FEQ19CQVNFCQlVTCgweEQwMDgwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00xX1NTUF9CQVNFCQlVTCgweEQwMTAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00xX0kyQ19CQVNFCQlVTCgweEQwMTgwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00xX0pQRUdfQkFTRQkJVUwoMHhEMDgwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNMV9JUkRBX0JBU0UJCVVMKDB4RDEwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTFfU1JBTV9CQVNFCQlVTCgweEQyODAwMDAwKQogCiAvKiBJQ00yIC0gQXBwbGljYXRpb24gU3Vic3lzdGVtICovCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTJfSFdBQ0NFTDBfQkFTRQkweEQ4ODAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTJfSFdBQ0NFTDBfU0laRQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNMl9IV0FDQ0VMMV9CQVNFCTB4RDkwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMl9IV0FDQ0VMMV9TSVpFCTB4MDA4MDAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfSUNNMl9IV0FDQ0VMMF9CQVNFCVVMKDB4RDg4MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTJfSFdBQ0NFTDFfQkFTRQlVTCgweEQ5MDAwMDAwKQogCiAvKiBJQ000IC0gSGlnaCBTcGVlZCBDb25uZWN0aW9uICovCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfQkFTRQkJMHhFMDAwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ000X1NJWkUJCTB4MDgwMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ000X01JSV9CQVNFCQkweEUwODAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfTUlJX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQkRfRklGT19CQVNFCTB4RTEwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX0ZJRk9fU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX0NTUl9CQVNFCTB4RTExMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX0NTUl9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQkRfUExEVF9CQVNFCTB4RTEyMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX1BMRFRfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfRUhDSTBfMV9CQVNFCTB4RTE4MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfRUhDSTBfMV9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQl9PSENJMF9CQVNFCTB4RTE5MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfT0hDSTBfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfT0hDSTFfQkFTRQkweEUyMTAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX09IQ0kxX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX0FSQl9CQVNFCTB4RTI4MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfQVJCX1NJWkUJMHgwMDAxMDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ000X0JBU0UJCVVMKDB4RTAwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfTUlJX0JBU0UJCVVMKDB4RTA4MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCRF9GSUZPX0JBU0UJVUwoMHhFMTAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX0NTUl9CQVNFCVVMKDB4RTExMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCRF9QTERUX0JBU0UJVUwoMHhFMTIwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfRUhDSTBfMV9CQVNFCVVMKDB4RTE4MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX09IQ0kwX0JBU0UJVUwoMHhFMTkwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfT0hDSTFfQkFTRQlVTCgweEUyMTAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQl9BUkJfQkFTRQlVTCgweEUyODAwMDAwKQogCiAvKiBNTDEgLSBNdWx0aSBMYXllciBDUFUgU3Vic3lzdGVtICovCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfTUwxXzJfQkFTRQkweEYwMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfTUwxXzJfU0laRQkweDBGMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfTUwxX1RNUl9CQVNFCQkweEYwMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX01MMV9UTVJfU0laRQkJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX01MMV9WSUNfQkFTRQkJMHhGMTEwMDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ00zX01MMV8yX0JBU0UJVUwoMHhGMDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfTUwxX1RNUl9CQVNFCQlVTCgweEYwMDAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9NTDFfVklDX0JBU0UJCVVMKDB4RjExMDAwMDApCiAjZGVmaW5lIFZBX1NQRUFSM1hYX01MMV9WSUNfQkFTRQlJT19BRERSRVNTKFNQRUFSM1hYX01MMV9WSUNfQkFTRSkKLSNkZWZpbmUgU1BFQVIzWFhfTUwxX1ZJQ19TSVpFCQkweDAwMTAwMDAwCiAKIC8qIElDTTMgLSBCYXNpYyBTdWJzeXN0ZW0gKi8KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TTUVNX0JBU0UJCTB4RjgwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TTUVNX1NJWkUJCTB4MDQwMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1NNSV9DVFJMX0JBU0UJMHhGQzAwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1NNSV9DVFJMX1NJWkUJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfRE1BX0JBU0UJCTB4RkM0MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19ETUFfU0laRQkJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfU0RSQU1fQ1RSTF9CQVNFCTB4RkM2MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TRFJBTV9DVFJMX1NJWkUJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMF9CQVNFCQkweEZDODAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMF9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19XRFRfQkFTRQkJMHhGQzg4MDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1dEVF9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19SVENfQkFTRQkJMHhGQzkwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1JUQ19TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19HUElPX0JBU0UJCTB4RkM5ODAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19HUElPX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1NZU19DVFJMX0JBU0UJMHhGQ0EwMDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ00zX1NNRU1fQkFTRQkJVUwoMHhGODAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNM19TTUlfQ1RSTF9CQVNFCVVMKDB4RkMwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTNfRE1BX0JBU0UJCVVMKDB4RkM0MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTNfU0RSQU1fQ1RSTF9CQVNFCVVMKDB4RkM2MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMF9CQVNFCQlVTCgweEZDODAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00zX1dEVF9CQVNFCQlVTCgweEZDODgwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00zX1JUQ19CQVNFCQlVTCgweEZDOTAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00zX0dQSU9fQkFTRQkJVUwoMHhGQzk4MDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNM19TWVNfQ1RSTF9CQVNFCVVMKDB4RkNBMDAwMDApCiAjZGVmaW5lIFZBX1NQRUFSM1hYX0lDTTNfU1lTX0NUUkxfQkFTRQlJT19BRERSRVNTKFNQRUFSM1hYX0lDTTNfU1lTX0NUUkxfQkFTRSkKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TWVNfQ1RSTF9TSVpFCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UJMHhGQ0E4MDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UJVUwoMHhGQ0E4MDAwMCkKICNkZWZpbmUgVkFfU1BFQVIzWFhfSUNNM19NSVNDX1JFR19CQVNFCUlPX0FERFJFU1MoU1BFQVIzWFhfSUNNM19NSVNDX1JFR19CQVNFKQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX01JU0NfUkVHX1NJWkUJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMV9CQVNFCQkweEZDQjAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMV9TSVpFCQkweDAwMDgwMDAwCisjZGVmaW5lIFNQRUFSM1hYX0lDTTNfVE1SMV9CQVNFCQlVTCgweEZDQjAwMDAwKQogCiAvKiBEZWJ1ZyB1YXJ0IGZvciBsaW51eCwgd2lsbCBiZSB1c2VkIGZvciBkZWJ1ZyBhbmQgdW5jb21wcmVzcyBtZXNzYWdlcyAqLwogI2RlZmluZSBTUEVBUl9EQkdfVUFSVF9CQVNFCQlTUEVBUjNYWF9JQ00xX1VBUlRfQkFTRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMDAuaCBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzAwLmgKaW5kZXggY2NhYTc2NS4uYzcyMzUxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMDAuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMwMC5oCkBAIC0xNywxMSArMTcsOSBAQAogI2RlZmluZSBfX01BQ0hfU1BFQVIzMDBfSAogCiAvKiBCYXNlIGFkZHJlc3Mgb2YgdmFyaW91cyBJUHMgKi8KLSNkZWZpbmUgU1BFQVIzMDBfVEVMRUNPTV9CQVNFCQkweDUwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX1RFTEVDT01fU0laRQkJMHgxMDAwMDAwMAorI2RlZmluZSBTUEVBUjMwMF9URUxFQ09NX0JBU0UJCVVMKDB4NTAwMDAwMDApCiAKIC8qIEludGVycnVwdCByZWdpc3RlcnMgb2Zmc2V0cyBhbmQgbWFza3MgKi8KLSNkZWZpbmUgU1BFQVIzMDBfVEVMRUNPTV9SRUdfU0laRQkweDAwMDEwMDAwCiAjZGVmaW5lIElOVF9FTkJfTUFTS19SRUcJCTB4NTQKICNkZWZpbmUgSU5UX1NUU19NQVNLX1JFRwkJMHg1OAogI2RlZmluZSBJVF9QRVJTX1NfSVJRX01BU0sJCSgxIDw8IDApCkBAIC0zNiw0NyArMzQsMjAgQEAKIAogI2RlZmluZSBTSElSUV9SQVMxX01BU0sJCQkweDFGRgogCi0jZGVmaW5lIFNQRUFSMzAwX0NMQ0RfQkFTRQkJMHg2MDAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9DTENEX1NJWkUJCTB4MTAwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9TRElPX0JBU0UJCTB4NzAwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfU0RJT19TSVpFCQkweDEwMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfTkFORF8wX0JBU0UJCTB4ODAwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfTkFORF8wX1NJWkUJCTB4MDQwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OQU5EXzFfQkFTRQkJMHg4NDAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9OQU5EXzFfU0laRQkJMHgwNDAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzAwX05BTkRfMl9CQVNFCQkweDg4MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05BTkRfMl9TSVpFCQkweDA0MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfTkFORF8zX0JBU0UJCTB4OGMwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfTkFORF8zX1NJWkUJCTB4MDQwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OT1JfMF9CQVNFCQkweDkwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05PUl8wX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OT1JfMV9CQVNFCQkweDkxMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05PUl8xX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OT1JfMl9CQVNFCQkweDkyMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05PUl8yX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OT1JfM19CQVNFCQkweDkzMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05PUl8zX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9GU01DX0JBU0UJCTB4OTQwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfRlNNQ19TSVpFCQkweDA1MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfU09DX0NPTkZJR19CQVNFCTB4OTkwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfU09DX0NPTkZJR19TSVpFCTB4MDAwMDAwMDgKLQotI2RlZmluZSBTUEVBUjMwMF9LRVlCT0FSRF9CQVNFCQkweEEwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX0tFWUJPQVJEX1NJWkUJCTB4MDkwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9HUElPX0JBU0UJCTB4QTkwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfR1BJT19TSVpFCQkweDA3MDAwMDAwCisjZGVmaW5lIFNQRUFSMzAwX0NMQ0RfQkFTRQkJVUwoMHg2MDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMDBfU0RIQ0lfQkFTRQkJVUwoMHg3MDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMDBfTkFORF8wX0JBU0UJCVVMKDB4ODAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05BTkRfMV9CQVNFCQlVTCgweDg0MDAwMDAwKQorI2RlZmluZSBTUEVBUjMwMF9OQU5EXzJfQkFTRQkJVUwoMHg4ODAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMDBfTkFORF8zX0JBU0UJCVVMKDB4OGMwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05PUl8wX0JBU0UJCVVMKDB4OTAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05PUl8xX0JBU0UJCVVMKDB4OTEwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05PUl8yX0JBU0UJCVVMKDB4OTIwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05PUl8zX0JBU0UJCVVMKDB4OTMwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX0ZTTUNfQkFTRQkJVUwoMHg5NDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMDBfU09DX0NPTkZJR19CQVNFCVVMKDB4OTkwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX0tFWUJPQVJEX0JBU0UJCVVMKDB4QTAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX0dQSU9fQkFTRQkJVUwoMHhBOTAwMDAwMCkKIAogI2VuZGlmIC8qIF9fTUFDSF9TUEVBUjMwMF9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzEwLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMxMC5oCmluZGV4IGIyN2JiOGEuLjFlODUzNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzEwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMTAuaApAQCAtMTYsMzAgKzE2LDE4IEBACiAjaWZuZGVmIF9fTUFDSF9TUEVBUjMxMF9ICiAjZGVmaW5lIF9fTUFDSF9TUEVBUjMxMF9ICiAKLSNkZWZpbmUgU1BFQVIzMTBfTkFORF9CQVNFCQkweDQwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX05BTkRfU0laRQkJMHgwNDAwMDAwMAorI2RlZmluZSBTUEVBUjMxMF9OQU5EX0JBU0UJCVVMKDB4NDAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzEwX0ZTTUNfQkFTRQkJVUwoMHg0NDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfVUFSVDFfQkFTRQkJVUwoMHhCMjAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfVUFSVDJfQkFTRQkJVUwoMHhCMjA4MDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfVUFSVDNfQkFTRQkJVUwoMHhCMjEwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfVUFSVDRfQkFTRQkJVUwoMHhCMjE4MDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfVUFSVDVfQkFTRQkJVUwoMHhCMjIwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfSERMQ19CQVNFCQlVTCgweEIyODAwMDAwKQorI2RlZmluZSBTUEVBUjMxMF9SUzQ4NV8wX0JBU0UJCVVMKDB4QjMwMDAwMDApCisjZGVmaW5lIFNQRUFSMzEwX1JTNDg1XzFfQkFTRQkJVUwoMHhCMzgwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfU09DX0NPTkZJR19CQVNFCVVMKDB4QjQwMDAwMDApCiAKLSNkZWZpbmUgU1BFQVIzMTBfRlNNQ19CQVNFCQkweDQ0MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX0ZTTUNfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzEwX1VBUlQxX0JBU0UJCTB4QjIwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMTBfVUFSVDJfQkFTRQkJMHhCMjA4MDAwMAotI2RlZmluZSBTUEVBUjMxMF9VQVJUM19CQVNFCQkweEIyMTAwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX1VBUlQ0X0JBU0UJCTB4QjIxODAwMDAKLSNkZWZpbmUgU1BFQVIzMTBfVUFSVDVfQkFTRQkJMHhCMjIwMDAwMAotI2RlZmluZSBTUEVBUjMxMF9VQVJUX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjMxMF9IRExDX0JBU0UJCTB4QjI4MDAwMDAKLSNkZWZpbmUgU1BFQVIzMTBfSERMQ19TSVpFCQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMTBfUlM0ODVfMF9CQVNFCQkweEIzMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX1JTNDg1XzBfU0laRQkJMHgwMDgwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzEwX1JTNDg1XzFfQkFTRQkJMHhCMzgwMDAwMAotI2RlZmluZSBTUEVBUjMxMF9SUzQ4NV8xX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjMxMF9TT0NfQ09ORklHX0JBU0UJMHhCNDAwMDAwMAotI2RlZmluZSBTUEVBUjMxMF9TT0NfQ09ORklHX1NJWkUJMHgwMDAwMDA3MAogLyogSW50ZXJydXB0IHJlZ2lzdGVycyBvZmZzZXRzIGFuZCBtYXNrcyAqLwogI2RlZmluZSBJTlRfU1RTX01BU0tfUkVHCQkweDA0CiAjZGVmaW5lIFNNSUkwX0lSUV9NQVNLCQkJKDEgPDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzIwLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMyMC5oCmluZGV4IGNhY2YxN2EuLjk0MGYwZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzIwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMjAuaApAQCAtMTYsNTQgKzE2LDI1IEBACiAjaWZuZGVmIF9fTUFDSF9TUEVBUjMyMF9ICiAjZGVmaW5lIF9fTUFDSF9TUEVBUjMyMF9ICiAKLSNkZWZpbmUgU1BFQVIzMjBfRU1JX0NUUkxfQkFTRQkJMHg0MDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9FTUlfQ1RSTF9TSVpFCQkweDA4MDAwMDAwCisjZGVmaW5lIFNQRUFSMzIwX0VNSV9DVFJMX0JBU0UJCVVMKDB4NDAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX0ZTTUNfQkFTRQkJVUwoMHg0QzAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfTkFORF9CQVNFCQlVTCgweDUwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9JMlNfQkFTRQkJVUwoMHg2MDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU0RIQ0lfQkFTRQkJVUwoMHg3MDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfQ0xDRF9CQVNFCQlVTCgweDkwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9QQVJfUE9SVF9CQVNFCQlVTCgweEEwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9DQU4wX0JBU0UJCVVMKDB4QTEwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX0NBTjFfQkFTRQkJVUwoMHhBMjAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfVUFSVDFfQkFTRQkJVUwoMHhBMzAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfVUFSVDJfQkFTRQkJVUwoMHhBNDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU1NQMF9CQVNFCQlVTCgweEE1MDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9TU1AxX0JBU0UJCVVMKDB4QTYwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX0kyQ19CQVNFCQlVTCgweEE3MDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9QV01fQkFTRQkJVUwoMHhBODAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU01JSTBfQkFTRQkJVUwoMHhBQTAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU01JSTFfQkFTRQkJVUwoMHhBQjAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU09DX0NPTkZJR19CQVNFCVVMKDB4QjMwMDAwMDApCiAKLSNkZWZpbmUgU1BFQVIzMjBfRlNNQ19CQVNFCQkweDRDMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX0ZTTUNfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX0kyU19CQVNFCQkweDYwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX0kyU19TSVpFCQkweDEwMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfU0RJT19CQVNFCQkweDcwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1NESU9fU0laRQkJMHgxMDAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX0NMQ0RfQkFTRQkJMHg5MDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9DTENEX1NJWkUJCTB4MTAwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9QQVJfUE9SVF9CQVNFCQkweEEwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1BBUl9QT1JUX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9DQU4wX0JBU0UJCTB4QTEwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfQ0FOMF9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfQ0FOMV9CQVNFCQkweEEyMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX0NBTjFfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX1VBUlQxX0JBU0UJCTB4QTMwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfVUFSVDJfQkFTRQkJMHhBNDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9VQVJUX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9TU1AwX0JBU0UJCTB4QTUwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfU1NQMF9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfU1NQMV9CQVNFCQkweEE2MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1NTUDFfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX0kyQ19CQVNFCQkweEE3MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX0kyQ19TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfUFdNX0JBU0UJCTB4QTgwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfUFdNX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9TTUlJMF9CQVNFCQkweEFBMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1NNSUkwX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9TTUlJMV9CQVNFCQkweEFCMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1NNSUkxX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9TT0NfQ09ORklHX0JBU0UJMHhCNDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9TT0NfQ09ORklHX1NJWkUJMHgwMDAwMDA3MAogLyogSW50ZXJydXB0IHJlZ2lzdGVycyBvZmZzZXRzIGFuZCBtYXNrcyAqLwogI2RlZmluZSBJTlRfU1RTX01BU0tfUkVHCQkweDA0CiAjZGVmaW5lIElOVF9DTFJfTUFTS19SRUcJCTB4MDQKQEAgLTc0LDcgKzQ1LDcgQEAKICNkZWZpbmUgRU1JX0lSUV9NQVNLCQkJKDEgPDwgNykKICNkZWZpbmUgQ0xDRF9JUlFfTUFTSwkJCSgxIDw8IDgpCiAjZGVmaW5lIFNQUF9JUlFfTUFTSwkJCSgxIDw8IDkpCi0jZGVmaW5lIFNESU9fSVJRX01BU0sJCQkoMSA8PCAxMCkKKyNkZWZpbmUgU0RIQ0lfSVJRX01BU0sJCQkoMSA8PCAxMCkKICNkZWZpbmUgQ0FOX1VfSVJRX01BU0sJCQkoMSA8PCAxMSkKICNkZWZpbmUgQ0FOX0xfSVJRX01BU0sJCQkoMSA8PCAxMikKICNkZWZpbmUgVUFSVDFfSVJRX01BU0sJCQkoMSA8PCAxMykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDAuYyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDAuYwppbmRleCA1YWEyZDU0Li4yNjk3ZTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMwMC5jCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CiAjaW5jbHVkZSA8cGxhdC9zaGlycS5oPgorI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyogcGFkIG11bHRpcGxleGluZyBzdXBwb3J0ICovCiAvKiBtdXhpbmcgcmVnaXN0ZXJzICovCkBAIC0zMTAsNyArMzEwLDcgQEAKIAkuZW5iX29uX3Jlc2V0ID0gMSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2X21vZGUgcG14X3RlbGVjb21fc2Rpb180Yml0X21vZGVzW10gPSB7CitzdHJ1Y3QgcG14X2Rldl9tb2RlIHBteF90ZWxlY29tX3NkaGNpXzRiaXRfbW9kZXNbXSA9IHsKIAl7CiAJCS5pZHMgPSBQSE9UT19GUkFNRV9NT0RFIHwgTEVORF9JUF9QSE9ORV9NT0RFIHwKIAkJCUhFTkRfSVBfUEhPTkVfTU9ERSB8IExFTkRfV0lGSV9QSE9ORV9NT0RFIHwKQEAgLTMyMywxNCArMzIzLDE0IEBACiAJfSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2IHBteF90ZWxlY29tX3NkaW9fNGJpdCA9IHsKLQkubmFtZSA9ICJ0ZWxlY29tX3NkaW9fNGJpdCIsCi0JLm1vZGVzID0gcG14X3RlbGVjb21fc2Rpb180Yml0X21vZGVzLAotCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfdGVsZWNvbV9zZGlvXzRiaXRfbW9kZXMpLAorc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fc2RoY2lfNGJpdCA9IHsKKwkubmFtZSA9ICJ0ZWxlY29tX3NkaGNpXzRiaXQiLAorCS5tb2RlcyA9IHBteF90ZWxlY29tX3NkaGNpXzRiaXRfbW9kZXMsCisJLm1vZGVfY291bnQgPSBBUlJBWV9TSVpFKHBteF90ZWxlY29tX3NkaGNpXzRiaXRfbW9kZXMpLAogCS5lbmJfb25fcmVzZXQgPSAxLAogfTsKIAotc3RydWN0IHBteF9kZXZfbW9kZSBwbXhfdGVsZWNvbV9zZGlvXzhiaXRfbW9kZXNbXSA9IHsKK3N0cnVjdCBwbXhfZGV2X21vZGUgcG14X3RlbGVjb21fc2RoY2lfOGJpdF9tb2Rlc1tdID0gewogCXsKIAkJLmlkcyA9IFBIT1RPX0ZSQU1FX01PREUgfCBMRU5EX0lQX1BIT05FX01PREUgfAogCQkJSEVORF9JUF9QSE9ORV9NT0RFIHwgTEVORF9XSUZJX1BIT05FX01PREUgfApAQCAtMzQyLDEwICszNDIsMTAgQEAKIAl9LAogfTsKIAotc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fc2Rpb184Yml0ID0gewotCS5uYW1lID0gInRlbGVjb21fc2Rpb184Yml0IiwKLQkubW9kZXMgPSBwbXhfdGVsZWNvbV9zZGlvXzhiaXRfbW9kZXMsCi0JLm1vZGVfY291bnQgPSBBUlJBWV9TSVpFKHBteF90ZWxlY29tX3NkaW9fOGJpdF9tb2RlcyksCitzdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9zZGhjaV84Yml0ID0geworCS5uYW1lID0gInRlbGVjb21fc2RoY2lfOGJpdCIsCisJLm1vZGVzID0gcG14X3RlbGVjb21fc2RoY2lfOGJpdF9tb2RlcywKKwkubW9kZV9jb3VudCA9IEFSUkFZX1NJWkUocG14X3RlbGVjb21fc2RoY2lfOGJpdF9tb2RlcyksCiAJLmVuYl9vbl9yZXNldCA9IDEsCiB9OwogCkBAIC0zNzAsMjYgKzM3MCw2IEBACiAJLm11eF9yZWcgPSB7Lm9mZnNldCA9IFBBRF9NVVhfQ09ORklHX1JFRywgLm1hc2sgPSAweDAwMDA3ZmZmfSwKIH07CiAKLS8qIEFkZCBzcGVhcjMwMCBzcGVjaWZpYyBkZXZpY2VzIGhlcmUgKi8KLS8qIGFybSBncGlvMSBkZXZpY2UgcmVnaXN0cmF0aW9uICovCi1zdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzFfcGxhdF9kYXRhID0gewotCS5ncGlvX2Jhc2UJPSA4LAotCS5pcnFfYmFzZQk9IFNQRUFSX0dQSU8xX0lOVF9CQVNFLAotfTsKLQotc3RydWN0IGFtYmFfZGV2aWNlIGdwaW8xX2RldmljZSA9IHsKLQkuZGV2ID0gewotCQkuaW5pdF9uYW1lID0gImdwaW8xIiwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZ3BpbzFfcGxhdF9kYXRhLAotCX0sCi0JLnJlcyA9IHsKLQkJLnN0YXJ0ID0gU1BFQVIzMDBfR1BJT19CQVNFLAotCQkuZW5kID0gU1BFQVIzMDBfR1BJT19CQVNFICsgU1BFQVIzMDBfR1BJT19TSVpFIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQkuaXJxID0ge1ZJUlFfR1BJTzEsIE5PX0lSUX0sCi19OwotCiAvKiBzcGVhcjN4eCBzaGFyZWQgaXJxICovCiBzdHJ1Y3Qgc2hpcnFfZGV2X2NvbmZpZyBzaGlycV9yYXMxX2NvbmZpZ1tdID0gewogCXsKQEAgLTQ0Myw2ICs0MjMsMjYgQEAKIAl9LAogfTsKIAorLyogQWRkIHNwZWFyMzAwIHNwZWNpZmljIGRldmljZXMgaGVyZSAqLworLyogYXJtIGdwaW8xIGRldmljZSByZWdpc3RyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMV9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDgsCisJLmlycV9iYXNlCT0gU1BFQVJfR1BJTzFfSU5UX0JBU0UsCit9OworCitzdHJ1Y3QgYW1iYV9kZXZpY2UgZ3BpbzFfZGV2aWNlID0geworCS5kZXYgPSB7CisJCS5pbml0X25hbWUgPSAiZ3BpbzEiLAorCQkucGxhdGZvcm1fZGF0YSA9ICZncGlvMV9wbGF0X2RhdGEsCisJfSwKKwkucmVzID0geworCQkuc3RhcnQgPSBTUEVBUjMwMF9HUElPX0JBU0UsCisJCS5lbmQgPSBTUEVBUjMwMF9HUElPX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLmlycSA9IHtWSVJRX0dQSU8xLCBOT19JUlF9LAorfTsKKwogLyogc3BlYXIzMDAgcm91dGluZXMgKi8KIHZvaWQgX19pbml0IHNwZWFyMzAwX2luaXQodm9pZCkKIHsKQEAgLTQ1MiwxNyArNDUyLDIxIEBACiAJc3BlYXIzeHhfaW5pdCgpOwogCiAJLyogc2hhcmVkIGlycSByZWdpc3RyYXRpb24gKi8KLQlzaGlycV9yYXMxLnJlZ3MuYmFzZSA9Ci0JCWlvcmVtYXAoU1BFQVIzMDBfVEVMRUNPTV9CQVNFLCBTUEVBUjMwMF9URUxFQ09NX1JFR19TSVpFKTsKKwlzaGlycV9yYXMxLnJlZ3MuYmFzZSA9IGlvcmVtYXAoU1BFQVIzMDBfVEVMRUNPTV9CQVNFLCBTWl80Syk7CiAJaWYgKHNoaXJxX3JhczEucmVncy5iYXNlKSB7CiAJCXJldCA9IHNwZWFyX3NoaXJxX3JlZ2lzdGVyKCZzaGlycV9yYXMxKTsKIAkJaWYgKHJldCkKIAkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVnaXN0ZXJpbmcgU2hhcmVkIElSUVxuIik7CiAJfQotfQogCi12b2lkIHNwZWFyMzAwX3BteF9pbml0KHZvaWQpCi17Ci0Jc3BlYXJfcG14X2luaXQoJnBteF9kcml2ZXIsIFNQRUFSMzAwX1NPQ19DT05GSUdfQkFTRSwKLQkJCVNQRUFSMzAwX1NPQ19DT05GSUdfU0laRSk7CisJLyogcG14IGluaXRpYWxpemF0aW9uICovCisJcG14X2RyaXZlci5iYXNlID0gaW9yZW1hcChTUEVBUjMwMF9TT0NfQ09ORklHX0JBU0UsIFNaXzRLKTsKKwlpZiAocG14X2RyaXZlci5iYXNlKSB7CisJCXJldCA9IHBteF9yZWdpc3RlcigmcG14X2RyaXZlcik7CisJCWlmIChyZXQpCisJCQlwcmludGsoS0VSTl9FUlIgInBhZG11eDogcmVnaXN0ZXJhdGlvbiBmYWlsZWQuIGVyciBubyIKKwkJCQkJIjogJWRcbiIsIHJldCk7CisJCS8qIEZyZWUgTWFwcGluZywgZGV2aWNlIHNlbGVjdGlvbiBhbHJlYWR5IGRvbmUgKi8KKwkJaW91bm1hcChwbXhfZHJpdmVyLmJhc2UpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDBfZXZiLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzAwX2V2Yi5jCmluZGV4IGJiMjFkYjEuLjQyZDIyNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDBfZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMwMF9ldmIuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qIHBhZG11eCBkZXZpY2VzIHRvIGVuYWJsZSAqLwogc3RhdGljIHN0cnVjdCBwbXhfZGV2ICpwbXhfZGV2c1tdID0gewpAQCAtMjgsNyArMjgsNyBAQAogCS8qIHNwZWFyMzAwIHNwZWNpZmljIGRldmljZXMgKi8KIAkmcG14X2ZzbWNfMl9jaGlwcywKIAkmcG14X2NsY2QsCi0JJnBteF90ZWxlY29tX3NkaW9fNGJpdCwKKwkmcG14X3RlbGVjb21fc2RoY2lfNGJpdCwKIAkmcG14X2dwaW8xLAogfTsKIApAQCAtNTEsMTQgKzUxLDEzIEBACiB7CiAJdW5zaWduZWQgaW50IGk7CiAKLQkvKiBjYWxsIHNwZWFyMzAwIG1hY2hpbmUgaW5pdCBmdW5jdGlvbiAqLwotCXNwZWFyMzAwX2luaXQoKTsKLQotCS8qIHBhZG11eCBpbml0aWFsaXphdGlvbiAqLworCS8qIHBhZG11eCBpbml0aWFsaXphdGlvbiwgbXVzdCBiZSBkb25lIGJlZm9yZSBzcGVhcjMwMF9pbml0ICovCiAJcG14X2RyaXZlci5tb2RlID0gJnBob3RvX2ZyYW1lX21vZGU7CiAJcG14X2RyaXZlci5kZXZzID0gcG14X2RldnM7CiAJcG14X2RyaXZlci5kZXZzX2NvdW50ID0gQVJSQVlfU0laRShwbXhfZGV2cyk7Ci0Jc3BlYXIzMDBfcG14X2luaXQoKTsKKworCS8qIGNhbGwgc3BlYXIzMDAgbWFjaGluZSBpbml0IGZ1bmN0aW9uICovCisJc3BlYXIzMDBfaW5pdCgpOwogCiAJLyogQWRkIFBsYXRmb3JtIERldmljZXMgKi8KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0X2RldnMsIEFSUkFZX1NJWkUocGxhdF9kZXZzKSk7CkBAIC03Miw2ICs3MSw2IEBACiAJLmJvb3RfcGFyYW1zCT0JMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9CXNwZWFyM3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPQlzcGVhcjN4eF9pbml0X2lycSwKLQkudGltZXIJCT0JJnNwZWFyX3N5c190aW1lciwKKwkudGltZXIJCT0JJnNwZWFyM3h4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPQlzcGVhcjMwMF9ldmJfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwLmMKaW5kZXggNTNiNDFiNS4uNWMwYTY3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMTAuYwpAQCAtMTMsOSArMTMsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KICNpbmNsdWRlIDxwbGF0L3NoaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9nZW5lcmljLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiBwYWQgbXVsdGlwbGV4aW5nIHN1cHBvcnQgKi8KIC8qIG11eGluZyByZWdpc3RlcnMgKi8KQEAgLTEzOSw4ICsxMzksNiBAQAogCS5tdXhfcmVnID0gey5vZmZzZXQgPSBQQURfTVVYX0NPTkZJR19SRUcsIC5tYXNrID0gMHgwMDAwN2ZmZn0sCiB9OwogCi0vKiBBZGQgc3BlYXIzMTAgc3BlY2lmaWMgZGV2aWNlcyBoZXJlICovCi0KIC8qIHNwZWFyM3h4IHNoYXJlZCBpcnEgKi8KIHN0cnVjdCBzaGlycV9kZXZfY29uZmlnIHNoaXJxX3JhczFfY29uZmlnW10gPSB7CiAJewpAQCAtMjU3LDYgKzI1NSw4IEBACiAJfSwKIH07CiAKKy8qIEFkZCBzcGVhcjMxMCBzcGVjaWZpYyBkZXZpY2VzIGhlcmUgKi8KKwogLyogc3BlYXIzMTAgcm91dGluZXMgKi8KIHZvaWQgX19pbml0IHNwZWFyMzEwX2luaXQodm9pZCkKIHsKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCXNwZWFyM3h4X2luaXQoKTsKIAogCS8qIHNoYXJlZCBpcnEgcmVnaXN0cmF0aW9uICovCi0JYmFzZSA9IGlvcmVtYXAoU1BFQVIzMTBfU09DX0NPTkZJR19CQVNFLCBTUEVBUjMxMF9TT0NfQ09ORklHX1NJWkUpOworCWJhc2UgPSBpb3JlbWFwKFNQRUFSMzEwX1NPQ19DT05GSUdfQkFTRSwgU1pfNEspOwogCWlmIChiYXNlKSB7CiAJCS8qIHNoaXJxIDEgKi8KIAkJc2hpcnFfcmFzMS5yZWdzLmJhc2UgPSBiYXNlOwpAQCAtMjkzLDEwICsyOTMsMTEgQEAKIAkJaWYgKHJldCkKIAkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVnaXN0ZXJpbmcgU2hhcmVkIElSUSA0XG4iKTsKIAl9Ci19CiAKLXZvaWQgc3BlYXIzMTBfcG14X2luaXQodm9pZCkKLXsKLQlzcGVhcl9wbXhfaW5pdCgmcG14X2RyaXZlciwgU1BFQVIzMTBfU09DX0NPTkZJR19CQVNFLAotCQkJU1BFQVIzMTBfU09DX0NPTkZJR19TSVpFKTsKKwkvKiBwbXggaW5pdGlhbGl6YXRpb24gKi8KKwlwbXhfZHJpdmVyLmJhc2UgPSBiYXNlOworCXJldCA9IHBteF9yZWdpc3RlcigmcG14X2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJwYWRtdXg6IHJlZ2lzdGVyYXRpb24gZmFpbGVkLiBlcnIgbm86ICVkXG4iLAorCQkJCXJldCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwX2V2Yi5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMxMF9ldmIuYwppbmRleCA3ZmFjZjY2Li4yZDdmMzMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwX2V2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMTBfZXZiLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiBwYWRtdXggZGV2aWNlcyB0byBlbmFibGUgKi8KIHN0YXRpYyBzdHJ1Y3QgcG14X2RldiAqcG14X2RldnNbXSA9IHsKQEAgLTU4LDE0ICs1OCwxMyBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JLyogY2FsbCBzcGVhcjMxMCBtYWNoaW5lIGluaXQgZnVuY3Rpb24gKi8KLQlzcGVhcjMxMF9pbml0KCk7Ci0KLQkvKiBwYWRtdXggaW5pdGlhbGl6YXRpb24gKi8KKwkvKiBwYWRtdXggaW5pdGlhbGl6YXRpb24sIG11c3QgYmUgZG9uZSBiZWZvcmUgc3BlYXIzMTBfaW5pdCAqLwogCXBteF9kcml2ZXIubW9kZSA9IE5VTEw7CiAJcG14X2RyaXZlci5kZXZzID0gcG14X2RldnM7CiAJcG14X2RyaXZlci5kZXZzX2NvdW50ID0gQVJSQVlfU0laRShwbXhfZGV2cyk7Ci0Jc3BlYXIzMTBfcG14X2luaXQoKTsKKworCS8qIGNhbGwgc3BlYXIzMTAgbWFjaGluZSBpbml0IGZ1bmN0aW9uICovCisJc3BlYXIzMTBfaW5pdCgpOwogCiAJLyogQWRkIFBsYXRmb3JtIERldmljZXMgKi8KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0X2RldnMsIEFSUkFZX1NJWkUocGxhdF9kZXZzKSk7CkBAIC03OSw2ICs3OCw2IEBACiAJLmJvb3RfcGFyYW1zCT0JMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9CXNwZWFyM3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPQlzcGVhcjN4eF9pbml0X2lycSwKLQkudGltZXIJCT0JJnNwZWFyX3N5c190aW1lciwKKwkudGltZXIJCT0JJnNwZWFyM3h4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPQlzcGVhcjMxMF9ldmJfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzIwLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzIwLmMKaW5kZXggODhiNDY1Mi4uNzQxYzFmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMjAuYwpAQCAtMTMsOSArMTMsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KICNpbmNsdWRlIDxwbGF0L3NoaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9nZW5lcmljLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiBwYWQgbXVsdGlwbGV4aW5nIHN1cHBvcnQgKi8KIC8qIG11eGluZyByZWdpc3RlcnMgKi8KQEAgLTExMCw3ICsxMTAsNyBAQAogCS5lbmJfb25fcmVzZXQgPSAxLAogfTsKIAotc3RydWN0IHBteF9kZXZfbW9kZSBwbXhfc2Rpb19tb2Rlc1tdID0geworc3RydWN0IHBteF9kZXZfbW9kZSBwbXhfc2RoY2lfbW9kZXNbXSA9IHsKIAl7CiAJCS5pZHMgPSBBVVRPX05FVF9TTUlJX01PREUgfCBBVVRPX05FVF9NSUlfTU9ERSB8CiAJCQlTTUFMTF9QUklOVEVSU19NT0RFLApAQCAtMTE4LDEwICsxMTgsMTAgQEAKIAl9LAogfTsKIAotc3RydWN0IHBteF9kZXYgcG14X3NkaW8gPSB7Ci0JLm5hbWUgPSAic2RpbyIsCi0JLm1vZGVzID0gcG14X3NkaW9fbW9kZXMsCi0JLm1vZGVfY291bnQgPSBBUlJBWV9TSVpFKHBteF9zZGlvX21vZGVzKSwKK3N0cnVjdCBwbXhfZGV2IHBteF9zZGhjaSA9IHsKKwkubmFtZSA9ICJzZGhjaSIsCisJLm1vZGVzID0gcG14X3NkaGNpX21vZGVzLAorCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfc2RoY2lfbW9kZXMpLAogCS5lbmJfb25fcmVzZXQgPSAxLAogfTsKIApAQCAtMjE1LDE3ICsyMTUsMTcgQEAKIAkuZW5iX29uX3Jlc2V0ID0gMSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2X21vZGUgcG14X3NkaW9fbGVkX21vZGVzW10gPSB7CitzdHJ1Y3QgcG14X2Rldl9tb2RlIHBteF9zZGhjaV9sZWRfbW9kZXNbXSA9IHsKIAl7CiAJCS5pZHMgPSBBVVRPX05FVF9TTUlJX01PREUgfCBBVVRPX05FVF9NSUlfTU9ERSwKIAkJLm1hc2sgPSBQTVhfU1NQX0NTX01BU0ssCiAJfSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2IHBteF9zZGlvX2xlZCA9IHsKLQkubmFtZSA9ICJzZGlvX2xlZCIsCi0JLm1vZGVzID0gcG14X3NkaW9fbGVkX21vZGVzLAotCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfc2Rpb19sZWRfbW9kZXMpLAorc3RydWN0IHBteF9kZXYgcG14X3NkaGNpX2xlZCA9IHsKKwkubmFtZSA9ICJzZGhjaV9sZWQiLAorCS5tb2RlcyA9IHBteF9zZGhjaV9sZWRfbW9kZXMsCisJLm1vZGVfY291bnQgPSBBUlJBWV9TSVpFKHBteF9zZGhjaV9sZWRfbW9kZXMpLAogCS5lbmJfb25fcmVzZXQgPSAxLAogfTsKIApAQCAtMzg0LDggKzM4NCw2IEBACiAJLm11eF9yZWcgPSB7Lm9mZnNldCA9IFBBRF9NVVhfQ09ORklHX1JFRywgLm1hc2sgPSAweDAwMDA3ZmZmfSwKIH07CiAKLS8qIEFkZCBzcGVhcjMyMCBzcGVjaWZpYyBkZXZpY2VzIGhlcmUgKi8KLQogLyogc3BlYXIzeHggc2hhcmVkIGlycSAqLwogc3RydWN0IHNoaXJxX2Rldl9jb25maWcgc2hpcnFfcmFzMV9jb25maWdbXSA9IHsKIAl7CkBAIC01MTAsNiArNTA4LDggQEAKIAl9LAogfTsKIAorLyogQWRkIHNwZWFyMzIwIHNwZWNpZmljIGRldmljZXMgaGVyZSAqLworCiAvKiBzcGVhcjMyMCByb3V0aW5lcyAqLwogdm9pZCBfX2luaXQgc3BlYXIzMjBfaW5pdCh2b2lkKQogewpAQCAtNTIwLDcgKzUyMCw3IEBACiAJc3BlYXIzeHhfaW5pdCgpOwogCiAJLyogc2hhcmVkIGlycSByZWdpc3RyYXRpb24gKi8KLQliYXNlID0gaW9yZW1hcChTUEVBUjMyMF9TT0NfQ09ORklHX0JBU0UsIFNQRUFSMzIwX1NPQ19DT05GSUdfU0laRSk7CisJYmFzZSA9IGlvcmVtYXAoU1BFQVIzMjBfU09DX0NPTkZJR19CQVNFLCBTWl80Syk7CiAJaWYgKGJhc2UpIHsKIAkJLyogc2hpcnEgMSAqLwogCQlzaGlycV9yYXMxLnJlZ3MuYmFzZSA9IGJhc2U7CkBAIC01NDAsMTAgKzU0MCwxMSBAQAogCQlpZiAocmV0KQogCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciByZWdpc3RlcmluZyBTaGFyZWQgSVJRIDRcbiIpOwogCX0KLX0KIAotdm9pZCBzcGVhcjMyMF9wbXhfaW5pdCh2b2lkKQotewotCXNwZWFyX3BteF9pbml0KCZwbXhfZHJpdmVyLCBTUEVBUjMyMF9TT0NfQ09ORklHX0JBU0UsCi0JCQlTUEVBUjMyMF9TT0NfQ09ORklHX1NJWkUpOworCS8qIHBteCBpbml0aWFsaXphdGlvbiAqLworCXBteF9kcml2ZXIuYmFzZSA9IGJhc2U7CisJcmV0ID0gcG14X3JlZ2lzdGVyKCZwbXhfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgInBhZG11eDogcmVnaXN0ZXJhdGlvbiBmYWlsZWQuIGVyciBubzogJWRcbiIsCisJCQkJcmV0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMjBfZXZiLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzIwX2V2Yi5jCmluZGV4IDYyYWM2ODUuLjgyMTNlNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMjBfZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMyMF9ldmIuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qIHBhZG11eCBkZXZpY2VzIHRvIGVuYWJsZSAqLwogc3RhdGljIHN0cnVjdCBwbXhfZGV2ICpwbXhfZGV2c1tdID0gewpAQCAtMjYsNyArMjYsNyBAQAogCiAJLyogc3BlYXIzMjAgc3BlY2lmaWMgZGV2aWNlcyAqLwogCSZwbXhfZnNtYywKLQkmcG14X3NkaW8sCisJJnBteF9zZGhjaSwKIAkmcG14X2kycywKIAkmcG14X3VhcnQxLAogCSZwbXhfdWFydDIsCkBAIC01NSwxNCArNTUsMTMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCS8qIGNhbGwgc3BlYXIzMjAgbWFjaGluZSBpbml0IGZ1bmN0aW9uICovCi0Jc3BlYXIzMjBfaW5pdCgpOwotCi0JLyogcGFkbXV4IGluaXRpYWxpemF0aW9uICovCisJLyogcGFkbXV4IGluaXRpYWxpemF0aW9uLCBtdXN0IGJlIGRvbmUgYmVmb3JlIHNwZWFyMzIwX2luaXQgKi8KIAlwbXhfZHJpdmVyLm1vZGUgPSAmYXV0b19uZXRfbWlpX21vZGU7CiAJcG14X2RyaXZlci5kZXZzID0gcG14X2RldnM7CiAJcG14X2RyaXZlci5kZXZzX2NvdW50ID0gQVJSQVlfU0laRShwbXhfZGV2cyk7Ci0Jc3BlYXIzMjBfcG14X2luaXQoKTsKKworCS8qIGNhbGwgc3BlYXIzMjAgbWFjaGluZSBpbml0IGZ1bmN0aW9uICovCisJc3BlYXIzMjBfaW5pdCgpOwogCiAJLyogQWRkIFBsYXRmb3JtIERldmljZXMgKi8KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0X2RldnMsIEFSUkFZX1NJWkUocGxhdF9kZXZzKSk7CkBAIC03Niw2ICs3NSw2IEBACiAJLmJvb3RfcGFyYW1zCT0JMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9CXNwZWFyM3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPQlzcGVhcjN4eF9pbml0X2lycSwKLQkudGltZXIJCT0JJnNwZWFyX3N5c190aW1lciwKKwkudGltZXIJCT0JJnNwZWFyM3h4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPQlzcGVhcjMyMF9ldmJfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyM3h4LmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyM3h4LmMKaW5kZXggNTJmNTUzYy4uZDNiYThjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzeHguYwpAQCAtMTksNyArMTksNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8bWFjaC9nZW5lcmljLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyogQWRkIHNwZWFyM3h4IG1hY2hpbmVzIGNvbW1vbiBkZXZpY2VzIGhlcmUgKi8KIC8qIGdwaW8gZGV2aWNlIHJlZ2lzdHJhdGlvbiAqLwpAQCAtMzUsNyArMzUsNyBAQAogCX0sCiAJLnJlcyA9IHsKIAkJLnN0YXJ0ID0gU1BFQVIzWFhfSUNNM19HUElPX0JBU0UsCi0JCS5lbmQgPSBTUEVBUjNYWF9JQ00zX0dQSU9fQkFTRSArIFNQRUFSM1hYX0lDTTNfR1BJT19TSVpFIC0gMSwKKwkJLmVuZCA9IFNQRUFSM1hYX0lDTTNfR1BJT19CQVNFICsgU1pfNEsgLSAxLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCS5pcnEgPSB7SVJRX0JBU0lDX0dQSU8sIE5PX0lSUX0sCkBAIC00OCw3ICs0OCw3IEBACiAJfSwKIAkucmVzID0gewogCQkuc3RhcnQgPSBTUEVBUjNYWF9JQ00xX1VBUlRfQkFTRSwKLQkJLmVuZCA9IFNQRUFSM1hYX0lDTTFfVUFSVF9CQVNFICsgU1BFQVIzWFhfSUNNMV9VQVJUX1NJWkUgLSAxLAorCQkuZW5kID0gU1BFQVIzWFhfSUNNMV9VQVJUX0JBU0UgKyBTWl80SyAtIDEsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJLmlycSA9IHtJUlFfVUFSVCwgTk9fSVJRfSwKQEAgLTcxLDIyICs3MSwyMiBAQAogCXsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjNYWF9JQ00xX1VBUlRfQkFTRSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQRUFSM1hYX0lDTTFfVUFSVF9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTUEVBUjNYWF9JQ00xX1VBUlRfU0laRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewogCQkudmlydHVhbAk9IFZBX1NQRUFSM1hYX01MMV9WSUNfQkFTRSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQRUFSM1hYX01MMV9WSUNfQkFTRSksCi0JCS5sZW5ndGgJCT0gU1BFQVIzWFhfTUwxX1ZJQ19TSVpFLAorCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LCB7CiAJCS52aXJ0dWFsCT0gVkFfU1BFQVIzWFhfSUNNM19TWVNfQ1RSTF9CQVNFLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oU1BFQVIzWFhfSUNNM19TWVNfQ1RSTF9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTUEVBUjNYWF9JQ00zX1NZU19DVFJMX1NJWkUsCisJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sIHsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjNYWF9JQ00zX01JU0NfUkVHX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNQRUFSM1hYX0lDTTNfTUlTQ19SRUdfU0laRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwKIH07CkBAIC01MjMsMjYgKzUyMywzNSBAQAogCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfcGxncGlvXzQ1XzQ2XzQ5XzUwX21vZGVzKSwKIAkuZW5iX29uX3Jlc2V0ID0gMSwKIH07CisjZW5kaWYgLyogQ09ORklHX01BQ0hfU1BFQVIzMTAgfHwgQ09ORklHX01BQ0hfU1BFQVIzMjAgKi8KIAotI2VuZGlmCi0KLS8qIHNwZWFyIHBhZG11eCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqLwotdm9pZCBzcGVhcl9wbXhfaW5pdChzdHJ1Y3QgcG14X2RyaXZlciAqcG14X2RyaXZlciwgdWludCBiYXNlLCB1aW50IHNpemUpCitzdGF0aWMgdm9pZCBfX2luaXQgc3BlYXIzeHhfdGltZXJfaW5pdCh2b2lkKQogewotCWludCByZXQgPSAwOworCWNoYXIgcGNsa19uYW1lW10gPSAicGxsM180OG1fY2xrIjsKKwlzdHJ1Y3QgY2xrICpncHRfY2xrLCAqcGNsazsKIAotCS8qIHBhZCBtdXggaW5pdGlhbGl6YXRpb24gKi8KLQlwbXhfZHJpdmVyLT5iYXNlID0gaW9yZW1hcChiYXNlLCBzaXplKTsKLQlpZiAoIXBteF9kcml2ZXItPmJhc2UpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBwbXhfZmFpbDsKKwkvKiBnZXQgdGhlIHN5c3RlbSB0aW1lciBjbG9jayAqLworCWdwdF9jbGsgPSBjbGtfZ2V0X3N5cygiZ3B0MCIsIE5VTEwpOworCWlmIChJU19FUlIoZ3B0X2NsaykpIHsKKwkJcHJfZXJyKCIlczpjb3VsZG4ndCBnZXQgY2xrIGZvciBncHRcbiIsIF9fZnVuY19fKTsKKwkJQlVHKCk7CiAJfQogCi0JcmV0ID0gcG14X3JlZ2lzdGVyKHBteF9kcml2ZXIpOwotCWlvdW5tYXAocG14X2RyaXZlci0+YmFzZSk7CisJLyogZ2V0IHRoZSBzdWl0YWJsZSBwYXJlbnQgY2xvY2sgZm9yIHRpbWVyKi8KKwlwY2xrID0gY2xrX2dldChOVUxMLCBwY2xrX25hbWUpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJcHJfZXJyKCIlczpjb3VsZG4ndCBnZXQgJXMgYXMgcGFyZW50IGZvciBncHRcbiIsCisJCQkJX19mdW5jX18sIHBjbGtfbmFtZSk7CisJCUJVRygpOworCX0KIAotcG14X2ZhaWw6Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICJwYWRtdXg6IHJlZ2lzdHJhdGlvbiBmYWlsZWQuIGVyciBubzogJWRcbiIsCi0JCQkJcmV0KTsKKwljbGtfc2V0X3BhcmVudChncHRfY2xrLCBwY2xrKTsKKwljbGtfcHV0KGdwdF9jbGspOworCWNsa19wdXQocGNsayk7CisKKwlzcGVhcl9zZXR1cF90aW1lcigpOwogfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHNwZWFyM3h4X3RpbWVyID0geworCS5pbml0ID0gc3BlYXIzeHhfdGltZXJfaW5pdCwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2Nsb2NrLmMKaW5kZXggMzZmZjA1Ni4uODhiNzQ4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvY2xvY2suYwpAQCAtMTMsOCArMTMsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPG1hY2gvbWlzY19yZWdzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvbWlzY19yZWdzLmg+CiAKIC8qIHJvb3QgY2xrcyAqLwogLyogMzIgS0h6IG9zY2lsbGF0b3IgY2xvY2sgKi8KQEAgLTM5LDE4ICszOSw0MyBAQAogfTsKIAogLyogY2xvY2sgZGVyaXZlZCBmcm9tIDMwIE1IeiBvc2MgY2xrICovCisvKiBwbGwgbWFza3Mgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IHBsbF9jbGtfbWFza3MgcGxsMV9tYXNrcyA9IHsKKwkubW9kZV9tYXNrID0gUExMX01PREVfTUFTSywKKwkubW9kZV9zaGlmdCA9IFBMTF9NT0RFX1NISUZULAorCS5ub3JtX2ZkYmtfbV9tYXNrID0gUExMX05PUk1fRkRCS19NX01BU0ssCisJLm5vcm1fZmRia19tX3NoaWZ0ID0gUExMX05PUk1fRkRCS19NX1NISUZULAorCS5kaXRoX2ZkYmtfbV9tYXNrID0gUExMX0RJVEhfRkRCS19NX01BU0ssCisJLmRpdGhfZmRia19tX3NoaWZ0ID0gUExMX0RJVEhfRkRCS19NX1NISUZULAorCS5kaXZfcF9tYXNrID0gUExMX0RJVl9QX01BU0ssCisJLmRpdl9wX3NoaWZ0ID0gUExMX0RJVl9QX1NISUZULAorCS5kaXZfbl9tYXNrID0gUExMX0RJVl9OX01BU0ssCisJLmRpdl9uX3NoaWZ0ID0gUExMX0RJVl9OX1NISUZULAorfTsKKwogLyogcGxsMSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwogc3RhdGljIHN0cnVjdCBwbGxfY2xrX2NvbmZpZyBwbGwxX2NvbmZpZyA9IHsKIAkubW9kZV9yZWcgPSBQTEwxX0NUUiwKIAkuY2ZnX3JlZyA9IFBMTDFfRlJRLAorCS5tYXNrcyA9ICZwbGwxX21hc2tzLAorfTsKKworLyogcGxsIHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgcGxsX3JhdGVfdGJsIHBsbF9ydGJsW10gPSB7CisJey5tb2RlID0gMCwgLm0gPSAweDg1LCAubiA9IDB4MEMsIC5wID0gMHgxfSwgLyogMjY2IE1IeiAqLworCXsubW9kZSA9IDAsIC5tID0gMHhBNiwgLm4gPSAweDBDLCAucCA9IDB4MX0sIC8qIDMzMiBNSHogKi8KIH07CiAKIC8qIFBMTDEgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHBsbDFfY2xrID0geworCS5mbGFncyA9IEVOQUJMRURfT05fSU5JVCwKIAkucGNsayA9ICZvc2NfMzBtX2NsaywKIAkuZW5fcmVnID0gUExMMV9DVFIsCiAJLmVuX3JlZ19iaXQgPSBQTExfRU5BQkxFLAotCS5yZWNhbGMgPSAmcGxsMV9jbGtfcmVjYWxjLAorCS5jYWxjX3JhdGUgPSAmcGxsX2NhbGNfcmF0ZSwKKwkucmVjYWxjID0gJnBsbF9jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZwbGxfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtwbGxfcnRibCwgQVJSQVlfU0laRShwbGxfcnRibCksIDF9LAogCS5wcml2YXRlX2RhdGEgPSAmcGxsMV9jb25maWcsCiB9OwogCkBAIC03NiwzMSArMTAxLDgzIEBACiAJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAorLyogYWhiIG1hc2tzIHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBidXNfY2xrX21hc2tzIGFoYl9tYXNrcyA9IHsKKwkubWFzayA9IFBMTF9IQ0xLX1JBVElPX01BU0ssCisJLnNoaWZ0ID0gUExMX0hDTEtfUkFUSU9fU0hJRlQsCit9OworCiAvKiBhaGIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBzdHJ1Y3QgYnVzX2Nsa19jb25maWcgYWhiX2NvbmZpZyA9IHsKIAkucmVnID0gQ09SRV9DTEtfQ0ZHLAotCS5tYXNrID0gUExMX0hDTEtfUkFUSU9fTUFTSywKLQkuc2hpZnQgPSBQTExfSENMS19SQVRJT19TSElGVCwKKwkubWFza3MgPSAmYWhiX21hc2tzLAorfTsKKworLyogYWhiIHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgYnVzX3JhdGVfdGJsIGJ1c19ydGJsW10gPSB7CisJey5kaXYgPSAzfSwgLyogPT0gcGFyZW50IGRpdmlkZWQgYnkgNCAqLworCXsuZGl2ID0gMn0sIC8qID09IHBhcmVudCBkaXZpZGVkIGJ5IDMgKi8KKwl7LmRpdiA9IDF9LCAvKiA9PSBwYXJlbnQgZGl2aWRlZCBieSAyICovCisJey5kaXYgPSAwfSwgLyogPT0gcGFyZW50IGRpdmlkZWQgYnkgMSAqLwogfTsKIAogLyogYWhiIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0gewogCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAogCS5wY2xrID0gJnBsbDFfY2xrLAorCS5jYWxjX3JhdGUgPSAmYnVzX2NhbGNfcmF0ZSwKIAkucmVjYWxjID0gJmJ1c19jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZidXNfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtidXNfcnRibCwgQVJSQVlfU0laRShidXNfcnRibCksIDJ9LAogCS5wcml2YXRlX2RhdGEgPSAmYWhiX2NvbmZpZywKIH07CiAKKy8qIGF1eGlsaWFyeSBzeW50aGVzaXplcnMgbWFza3MgKi8KK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19tYXNrcyBhdXhfbWFza3MgPSB7CisJLmVxX3NlbF9tYXNrID0gQVVYX0VRX1NFTF9NQVNLLAorCS5lcV9zZWxfc2hpZnQgPSBBVVhfRVFfU0VMX1NISUZULAorCS5lcTFfbWFzayA9IEFVWF9FUTFfU0VMLAorCS5lcTJfbWFzayA9IEFVWF9FUTJfU0VMLAorCS54c2NhbGVfc2VsX21hc2sgPSBBVVhfWFNDQUxFX01BU0ssCisJLnhzY2FsZV9zZWxfc2hpZnQgPSBBVVhfWFNDQUxFX1NISUZULAorCS55c2NhbGVfc2VsX21hc2sgPSBBVVhfWVNDQUxFX01BU0ssCisJLnlzY2FsZV9zZWxfc2hpZnQgPSBBVVhfWVNDQUxFX1NISUZULAorfTsKKworLyogdWFydCBjb25maWd1cmF0aW9ucyAqLworc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyB1YXJ0X3N5bnRoX2NvbmZpZyA9IHsKKwkuc3ludGhfcmVnID0gVUFSVF9DTEtfU1lOVCwKKwkubWFza3MgPSAmYXV4X21hc2tzLAorfTsKKworLyogYXV4IHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgYXV4X3JhdGVfdGJsIGF1eF9ydGJsW10gPSB7CisJLyogRm9yIFBMTDEgPSAzMzIgTUh6ICovCisJey54c2NhbGUgPSAxLCAueXNjYWxlID0gOCwgLmVxID0gMX0sIC8qIDQxLjUgTUh6ICovCisJey54c2NhbGUgPSAxLCAueXNjYWxlID0gNCwgLmVxID0gMX0sIC8qIDgzIE1IeiAqLworCXsueHNjYWxlID0gMSwgLnlzY2FsZSA9IDIsIC5lcSA9IDF9LCAvKiAxNjYgTUh6ICovCit9OworCisvKiB1YXJ0IHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X3N5bnRoX2NsayA9IHsKKwkuZW5fcmVnID0gVUFSVF9DTEtfU1lOVCwKKwkuZW5fcmVnX2JpdCA9IEFVWF9TWU5UX0VOQiwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmF1eF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYXV4X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YXV4X3J0YmwsIEFSUkFZX1NJWkUoYXV4X3J0YmwpLCAyfSwKKwkucHJpdmF0ZV9kYXRhID0gJnVhcnRfc3ludGhfY29uZmlnLAorfTsKKwogLyogdWFydCBwYXJlbnRzICovCiBzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyB1YXJ0X3BjbGtfaW5mb1tdID0gewogCXsKLQkJLnBjbGsgPSAmcGxsMV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDFfTUFTSywKLQkJLnNjYWxhYmxlID0gMSwKKwkJLnBjbGsgPSAmdWFydF9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCiAJfSwgewogCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDNfTUFTSywKLQkJLnNjYWxhYmxlID0gMCwKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKIAl9LAogfTsKIApAQCAtMTEyLDE5ICsxODksMTMgQEAKIAkucGNsa19zZWxfbWFzayA9IFVBUlRfQ0xLX01BU0ssCiB9OwogCi0vKiB1YXJ0IGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIHVhcnRfY29uZmlnID0gewotCS5zeW50aF9yZWcgPSBVQVJUX0NMS19TWU5ULAotfTsKLQogLyogdWFydDAgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQwX2NsayA9IHsKIAkuZW5fcmVnID0gUEVSSVAxX0NMS19FTkIsCiAJLmVuX3JlZ19iaXQgPSBVQVJUMF9DTEtfRU5CLAogCS5wY2xrX3NlbCA9ICZ1YXJ0X3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IFVBUlRfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZ1YXJ0X2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCiAvKiB1YXJ0MSBjbG9jayAqLwpAQCAtMTMzLDI1ICsyMDQsMzUgQEAKIAkuZW5fcmVnX2JpdCA9IFVBUlQxX0NMS19FTkIsCiAJLnBjbGtfc2VsID0gJnVhcnRfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gVUFSVF9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJnVhcnRfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKIC8qIGZpcmRhIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGZpcmRhX2NvbmZpZyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgZmlyZGFfc3ludGhfY29uZmlnID0gewogCS5zeW50aF9yZWcgPSBGSVJEQV9DTEtfU1lOVCwKKwkubWFza3MgPSAmYXV4X21hc2tzLAorfTsKKworLyogZmlyZGEgc3ludGggY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGZpcmRhX3N5bnRoX2NsayA9IHsKKwkuZW5fcmVnID0gRklSREFfQ0xLX1NZTlQsCisJLmVuX3JlZ19iaXQgPSBBVVhfU1lOVF9FTkIsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZhdXhfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmF1eF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2F1eF9ydGJsLCBBUlJBWV9TSVpFKGF1eF9ydGJsKSwgMn0sCisJLnByaXZhdGVfZGF0YSA9ICZmaXJkYV9zeW50aF9jb25maWcsCiB9OwogCiAvKiBmaXJkYSBwYXJlbnRzICovCiBzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBmaXJkYV9wY2xrX2luZm9bXSA9IHsKIAl7Ci0JCS5wY2xrID0gJnBsbDFfY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwxX01BU0ssCi0JCS5zY2FsYWJsZSA9IDEsCisJCS5wY2xrID0gJmZpcmRhX3N5bnRoX2NsaywKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwxX1ZBTCwKIAl9LCB7CiAJCS5wY2xrID0gJnBsbDNfNDhtX2NsaywKLQkJLnBjbGtfbWFzayA9IEFVWF9DTEtfUExMM19NQVNLLAotCQkuc2NhbGFibGUgPSAwLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDNfVkFMLAogCX0sCiB9OwogCkBAIC0xNjksMjUgKzI1MCwzNSBAQAogCS5lbl9yZWdfYml0ID0gRklSREFfQ0xLX0VOQiwKIAkucGNsa19zZWwgPSAmZmlyZGFfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gRklSREFfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZmaXJkYV9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAogLyogY2xjZCBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBjbGNkX2NvbmZpZyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgY2xjZF9zeW50aF9jb25maWcgPSB7CiAJLnN5bnRoX3JlZyA9IENMQ0RfQ0xLX1NZTlQsCisJLm1hc2tzID0gJmF1eF9tYXNrcywKK307CisKKy8qIGZpcmRhIHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBjbGNkX3N5bnRoX2NsayA9IHsKKwkuZW5fcmVnID0gQ0xDRF9DTEtfU1lOVCwKKwkuZW5fcmVnX2JpdCA9IEFVWF9TWU5UX0VOQiwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmF1eF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYXV4X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YXV4X3J0YmwsIEFSUkFZX1NJWkUoYXV4X3J0YmwpLCAyfSwKKwkucHJpdmF0ZV9kYXRhID0gJmNsY2Rfc3ludGhfY29uZmlnLAogfTsKIAogLyogY2xjZCBwYXJlbnRzICovCiBzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBjbGNkX3BjbGtfaW5mb1tdID0gewogCXsKLQkJLnBjbGsgPSAmcGxsMV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDFfTUFTSywKLQkJLnNjYWxhYmxlID0gMSwKKwkJLnBjbGsgPSAmY2xjZF9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCiAJfSwgewogCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDNfTUFTSywKLQkJLnNjYWxhYmxlID0gMCwKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKIAl9LAogfTsKIApAQCAtMjA1LDgyICsyOTYsMTczIEBACiAJLmVuX3JlZ19iaXQgPSBDTENEX0NMS19FTkIsCiAJLnBjbGtfc2VsID0gJmNsY2RfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gQ0xDRF9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJmNsY2RfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIGdwdCBzeW50aGVzaXplciBtYXNrcyAqLworc3RhdGljIHN0cnVjdCBncHRfY2xrX21hc2tzIGdwdF9tYXNrcyA9IHsKKwkubXNjYWxlX3NlbF9tYXNrID0gR1BUX01TQ0FMRV9NQVNLLAorCS5tc2NhbGVfc2VsX3NoaWZ0ID0gR1BUX01TQ0FMRV9TSElGVCwKKwkubnNjYWxlX3NlbF9tYXNrID0gR1BUX05TQ0FMRV9NQVNLLAorCS5uc2NhbGVfc2VsX3NoaWZ0ID0gR1BUX05TQ0FMRV9TSElGVCwKK307CisKKy8qIGdwdCByYXRlIGNvbmZpZ3VyYXRpb24gdGFibGUsIGluIGFzY2VuZGluZyBvcmRlciBvZiByYXRlcyAqLworc3RydWN0IGdwdF9yYXRlX3RibCBncHRfcnRibFtdID0geworCS8qIEZvciBwbGwxID0gMzMyIE1IeiAqLworCXsubXNjYWxlID0gNCwgLm5zY2FsZSA9IDB9LCAvKiA0MS41IE1IeiAqLworCXsubXNjYWxlID0gMiwgLm5zY2FsZSA9IDB9LCAvKiA1NS4zIE1IeiAqLworCXsubXNjYWxlID0gMSwgLm5zY2FsZSA9IDB9LCAvKiA4MyBNSHogKi8KK307CisKKy8qIGdwdDAgc3ludGggY2xrIGNvbmZpZyovCitzdGF0aWMgc3RydWN0IGdwdF9jbGtfY29uZmlnIGdwdDBfc3ludGhfY29uZmlnID0geworCS5zeW50aF9yZWcgPSBQUlNDMV9DTEtfQ0ZHLAorCS5tYXNrcyA9ICZncHRfbWFza3MsCit9OworCisvKiBncHQgc3ludGggY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDBfc3ludGhfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJnBsbDFfY2xrLAorCS5jYWxjX3JhdGUgPSAmZ3B0X2NhbGNfcmF0ZSwKKwkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZncHRfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtncHRfcnRibCwgQVJSQVlfU0laRShncHRfcnRibCksIDJ9LAorCS5wcml2YXRlX2RhdGEgPSAmZ3B0MF9zeW50aF9jb25maWcsCiB9OwogCiAvKiBncHQgcGFyZW50cyAqLwotc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZ3B0X3BjbGtfaW5mb1tdID0geworc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZ3B0MF9wY2xrX2luZm9bXSA9IHsKIAl7Ci0JCS5wY2xrID0gJnBsbDFfY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwxX01BU0ssCi0JCS5zY2FsYWJsZSA9IDEsCisJCS5wY2xrID0gJmdwdDBfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAogCX0sIHsKIAkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwzX01BU0ssCi0JCS5zY2FsYWJsZSA9IDAsCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCiAJfSwKIH07CiAKIC8qIGdwdCBwYXJlbnQgc2VsZWN0IHN0cnVjdHVyZSAqLwotc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHRfcGNsa19zZWwgPSB7Ci0JLnBjbGtfaW5mbyA9IGdwdF9wY2xrX2luZm8sCi0JLnBjbGtfY291bnQgPSBBUlJBWV9TSVpFKGdwdF9wY2xrX2luZm8pLAorc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHQwX3BjbGtfc2VsID0geworCS5wY2xrX2luZm8gPSBncHQwX3BjbGtfaW5mbywKKwkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0MF9wY2xrX2luZm8pLAogCS5wY2xrX3NlbF9yZWcgPSBQRVJJUF9DTEtfQ0ZHLAogCS5wY2xrX3NlbF9tYXNrID0gR1BUX0NMS19NQVNLLAogfTsKIAotLyogZ3B0MF8xIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGdwdDBfMV9jb25maWcgPSB7Ci0JLnN5bnRoX3JlZyA9IFBSU0MxX0NMS19DRkcsCi19OwotCiAvKiBncHQwIEFSTTEgc3Vic3lzdGVtIHRpbWVyIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQwX2NsayA9IHsKIAkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKLQkucGNsa19zZWwgPSAmZ3B0X3BjbGtfc2VsLAorCS5wY2xrX3NlbCA9ICZncHQwX3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IEdQVDBfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZncHQwXzFfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKworLyogTm90ZTogZ3B0MCBhbmQgZ3B0MSBzaGFyZSBzYW1lIHBhcmVudCBjbG9ja3MgKi8KKy8qIGdwdCBwYXJlbnQgc2VsZWN0IHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHQxX3BjbGtfc2VsID0geworCS5wY2xrX2luZm8gPSBncHQwX3BjbGtfaW5mbywKKwkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0MF9wY2xrX2luZm8pLAorCS5wY2xrX3NlbF9yZWcgPSBQRVJJUF9DTEtfQ0ZHLAorCS5wY2xrX3NlbF9tYXNrID0gR1BUX0NMS19NQVNLLAogfTsKIAogLyogZ3B0MSB0aW1lciBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9jbGsgPSB7CiAJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCi0JLnBjbGtfc2VsID0gJmdwdF9wY2xrX3NlbCwKKwkucGNsa19zZWwgPSAmZ3B0MV9wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBHUFQxX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmZ3B0MF8xX2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCi0vKiBncHQyIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGdwdDJfY29uZmlnID0geworLyogZ3B0MiBzeW50aCBjbGsgY29uZmlnKi8KK3N0YXRpYyBzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgZ3B0Ml9zeW50aF9jb25maWcgPSB7CiAJLnN5bnRoX3JlZyA9IFBSU0MyX0NMS19DRkcsCisJLm1hc2tzID0gJmdwdF9tYXNrcywKK307CisKKy8qIGdwdCBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9zeW50aF9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZncHRfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmdwdF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2dwdF9ydGJsLCBBUlJBWV9TSVpFKGdwdF9ydGJsKSwgMn0sCisJLnByaXZhdGVfZGF0YSA9ICZncHQyX3N5bnRoX2NvbmZpZywKK307CisKKy8qIGdwdCBwYXJlbnRzICovCitzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBncHQyX3BjbGtfaW5mb1tdID0geworCXsKKwkJLnBjbGsgPSAmZ3B0Ml9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCisJfSwgeworCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCisJfSwKK307CisKKy8qIGdwdCBwYXJlbnQgc2VsZWN0IHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHQyX3BjbGtfc2VsID0geworCS5wY2xrX2luZm8gPSBncHQyX3BjbGtfaW5mbywKKwkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0Ml9wY2xrX2luZm8pLAorCS5wY2xrX3NlbF9yZWcgPSBQRVJJUF9DTEtfQ0ZHLAorCS5wY2xrX3NlbF9tYXNrID0gR1BUX0NMS19NQVNLLAogfTsKIAogLyogZ3B0MiB0aW1lciBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9jbGsgPSB7Ci0JLmVuX3JlZyA9IFBFUklQMV9DTEtfRU5CLAotCS5lbl9yZWdfYml0ID0gR1BUMl9DTEtfRU5CLAotCS5wY2xrX3NlbCA9ICZncHRfcGNsa19zZWwsCisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGtfc2VsID0gJmdwdDJfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gR1BUMl9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJmdwdDJfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKLS8qIGdwdDMgY29uZmlndXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgZ3B0M19jb25maWcgPSB7CisvKiBncHQzIHN5bnRoIGNsayBjb25maWcqLworc3RhdGljIHN0cnVjdCBncHRfY2xrX2NvbmZpZyBncHQzX3N5bnRoX2NvbmZpZyA9IHsKIAkuc3ludGhfcmVnID0gUFJTQzNfQ0xLX0NGRywKKwkubWFza3MgPSAmZ3B0X21hc2tzLAorfTsKKworLyogZ3B0IHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncHQzX3N5bnRoX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmdwdF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmZ3B0X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7Z3B0X3J0YmwsIEFSUkFZX1NJWkUoZ3B0X3J0YmwpLCAyfSwKKwkucHJpdmF0ZV9kYXRhID0gJmdwdDNfc3ludGhfY29uZmlnLAorfTsKKworLyogZ3B0IHBhcmVudHMgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNsa19pbmZvIGdwdDNfcGNsa19pbmZvW10gPSB7CisJeworCQkucGNsayA9ICZncHQzX3N5bnRoX2NsaywKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwxX1ZBTCwKKwl9LCB7CisJCS5wY2xrID0gJnBsbDNfNDhtX2NsaywKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKKwl9LAorfTsKKworLyogZ3B0IHBhcmVudCBzZWxlY3Qgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IHBjbGtfc2VsIGdwdDNfcGNsa19zZWwgPSB7CisJLnBjbGtfaW5mbyA9IGdwdDNfcGNsa19pbmZvLAorCS5wY2xrX2NvdW50ID0gQVJSQVlfU0laRShncHQzX3BjbGtfaW5mbyksCisJLnBjbGtfc2VsX3JlZyA9IFBFUklQX0NMS19DRkcsCisJLnBjbGtfc2VsX21hc2sgPSBHUFRfQ0xLX01BU0ssCiB9OwogCiAvKiBncHQzIHRpbWVyIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQzX2NsayA9IHsKLQkuZW5fcmVnID0gUEVSSVAxX0NMS19FTkIsCi0JLmVuX3JlZ19iaXQgPSBHUFQzX0NMS19FTkIsCi0JLnBjbGtfc2VsID0gJmdwdF9wY2xrX3NlbCwKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsa19zZWwgPSAmZ3B0M19wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBHUFQzX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmZ3B0M19jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAogLyogY2xvY2sgZGVyaXZlZCBmcm9tIHBsbDMgY2xrICovCkBAIC0zMDksMTggKzQ5MSwyNiBAQAogfTsKIAogLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFoYiBjbGsgKi8KKy8qIGFwYiBtYXNrcyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgYnVzX2Nsa19tYXNrcyBhcGJfbWFza3MgPSB7CisJLm1hc2sgPSBIQ0xLX1BDTEtfUkFUSU9fTUFTSywKKwkuc2hpZnQgPSBIQ0xLX1BDTEtfUkFUSU9fU0hJRlQsCit9OworCiAvKiBhcGIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBzdHJ1Y3QgYnVzX2Nsa19jb25maWcgYXBiX2NvbmZpZyA9IHsKIAkucmVnID0gQ09SRV9DTEtfQ0ZHLAotCS5tYXNrID0gSENMS19QQ0xLX1JBVElPX01BU0ssCi0JLnNoaWZ0ID0gSENMS19QQ0xLX1JBVElPX1NISUZULAorCS5tYXNrcyA9ICZhcGJfbWFza3MsCiB9OwogCiAvKiBhcGIgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGFwYl9jbGsgPSB7CiAJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCiAJLnBjbGsgPSAmYWhiX2NsaywKKwkuY2FsY19yYXRlID0gJmJ1c19jYWxjX3JhdGUsCiAJLnJlY2FsYyA9ICZidXNfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYnVzX2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YnVzX3J0YmwsIEFSUkFZX1NJWkUoYnVzX3J0YmwpLCAyfSwKIAkucHJpdmF0ZV9kYXRhID0gJmFwYl9jb25maWcsCiB9OwogCkBAIC00MzIsMTIgKzYyMiwxMiBAQAogCiAvKiBhcnJheSBvZiBhbGwgc3BlYXIgNnh4IGNsb2NrIGxvb2t1cHMgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBzcGVhcl9jbGtfbG9va3Vwc1tdID0gewotCXsgLmNvbl9pZCA9ICJhcGJfcGNsayIsCS5jbGsgPSAmZHVtbXlfYXBiX3BjbGt9LAorCXsgLmNvbl9pZCA9ICJhcGJfcGNsayIsCQkuY2xrID0gJmR1bW15X2FwYl9wY2xrfSwKIAkvKiByb290IGNsa3MgKi8KIAl7IC5jb25faWQgPSAib3NjXzMya19jbGsiLAkuY2xrID0gJm9zY18zMmtfY2xrfSwKIAl7IC5jb25faWQgPSAib3NjXzMwbV9jbGsiLAkuY2xrID0gJm9zY18zMG1fY2xrfSwKIAkvKiBjbG9jayBkZXJpdmVkIGZyb20gMzIgS0h6IG9zCQkgY2xrICovCi0JeyAuZGV2X2lkID0gInJ0YyIsCQkuY2xrID0gJnJ0Y19jbGt9LAorCXsgLmRldl9pZCA9ICJydGMtc3BlYXIiLAkuY2xrID0gJnJ0Y19jbGt9LAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSAzMCBNSHogb3MJCSBjbGsgKi8KIAl7IC5jb25faWQgPSAicGxsMV9jbGsiLAkJLmNsayA9ICZwbGwxX2Nsa30sCiAJeyAuY29uX2lkID0gInBsbDNfNDhtX2NsayIsCS5jbGsgPSAmcGxsM180OG1fY2xrfSwKQEAgLTQ0NSw2ICs2MzUsMTIgQEAKIAkvKiBjbG9jayBkZXJpdmVkIGZyb20gcGxsMSBjbGsgKi8KIAl7IC5jb25faWQgPSAiY3B1X2NsayIsCQkuY2xrID0gJmNwdV9jbGt9LAogCXsgLmNvbl9pZCA9ICJhaGJfY2xrIiwJCS5jbGsgPSAmYWhiX2Nsa30sCisJeyAuY29uX2lkID0gInVhcnRfc3ludGhfY2xrIiwJLmNsayA9ICZ1YXJ0X3N5bnRoX2Nsa30sCisJeyAuY29uX2lkID0gImZpcmRhX3N5bnRoX2NsayIsCS5jbGsgPSAmZmlyZGFfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiY2xjZF9zeW50aF9jbGsiLAkuY2xrID0gJmNsY2Rfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZ3B0MF9zeW50aF9jbGsiLAkuY2xrID0gJmdwdDBfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZ3B0Ml9zeW50aF9jbGsiLAkuY2xrID0gJmdwdDJfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZ3B0M19zeW50aF9jbGsiLAkuY2xrID0gJmdwdDNfc3ludGhfY2xrfSwKIAl7IC5kZXZfaWQgPSAidWFydDAiLAkJLmNsayA9ICZ1YXJ0MF9jbGt9LAogCXsgLmRldl9pZCA9ICJ1YXJ0MSIsCQkuY2xrID0gJnVhcnQxX2Nsa30sCiAJeyAuZGV2X2lkID0gImZpcmRhIiwJCS5jbGsgPSAmZmlyZGFfY2xrfSwKQEAgLTQ1NCwyMiArNjUwLDIyIEBACiAJeyAuZGV2X2lkID0gImdwdDIiLAkJLmNsayA9ICZncHQyX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwdDMiLAkJLmNsayA9ICZncHQzX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIHBsbDMgY2xrICovCi0JeyAuZGV2X2lkID0gInVzYmgwIiwJCS5jbGsgPSAmdXNiaDBfY2xrfSwKLQl7IC5kZXZfaWQgPSAidXNiaDEiLAkJLmNsayA9ICZ1c2JoMV9jbGt9LAotCXsgLmRldl9pZCA9ICJ1c2JkIiwJCS5jbGsgPSAmdXNiZF9jbGt9LAorCXsgLmRldl9pZCA9ICJkZXNpZ253YXJlX3VkYyIsCS5jbGsgPSAmdXNiZF9jbGt9LAorCXsgLmNvbl9pZCA9ICJ1c2JoLjBfY2xrIiwJLmNsayA9ICZ1c2JoMF9jbGt9LAorCXsgLmNvbl9pZCA9ICJ1c2JoLjFfY2xrIiwJLmNsayA9ICZ1c2JoMV9jbGt9LAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSBhaGIgY2xrICovCiAJeyAuY29uX2lkID0gImFwYl9jbGsiLAkJLmNsayA9ICZhcGJfY2xrfSwKLQl7IC5kZXZfaWQgPSAiaTJjIiwJCS5jbGsgPSAmaTJjX2Nsa30sCisJeyAuZGV2X2lkID0gImkyY19kZXNpZ253YXJlLjAiLAkuY2xrID0gJmkyY19jbGt9LAogCXsgLmRldl9pZCA9ICJkbWEiLAkJLmNsayA9ICZkbWFfY2xrfSwKIAl7IC5kZXZfaWQgPSAianBlZyIsCQkuY2xrID0gJmpwZWdfY2xrfSwKIAl7IC5kZXZfaWQgPSAiZ21hYyIsCQkuY2xrID0gJmdtYWNfY2xrfSwKIAl7IC5kZXZfaWQgPSAic21pIiwJCS5jbGsgPSAmc21pX2Nsa30sCi0JeyAuZGV2X2lkID0gImZzbWMiLAkJLmNsayA9ICZmc21jX2Nsa30sCisJeyAuY29uX2lkID0gImZzbWMiLAkJLmNsayA9ICZmc21jX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFwYiBjbGsgKi8KIAl7IC5kZXZfaWQgPSAiYWRjIiwJCS5jbGsgPSAmYWRjX2Nsa30sCi0JeyAuZGV2X2lkID0gInNzcDAiLAkJLmNsayA9ICZzc3AwX2Nsa30sCi0JeyAuZGV2X2lkID0gInNzcDEiLAkJLmNsayA9ICZzc3AxX2Nsa30sCi0JeyAuZGV2X2lkID0gInNzcDIiLAkJLmNsayA9ICZzc3AyX2Nsa30sCisJeyAuZGV2X2lkID0gInNzcC1wbDAyMi4wIiwJLmNsayA9ICZzc3AwX2Nsa30sCisJeyAuZGV2X2lkID0gInNzcC1wbDAyMi4xIiwJLmNsayA9ICZzc3AxX2Nsa30sCisJeyAuZGV2X2lkID0gInNzcC1wbDAyMi4yIiwJLmNsayA9ICZzc3AyX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwaW8wIiwJCS5jbGsgPSAmZ3BpbzBfY2xrfSwKIAl7IC5kZXZfaWQgPSAiZ3BpbzEiLAkJLmNsayA9ICZncGlvMV9jbGt9LAogCXsgLmRldl9pZCA9ICJncGlvMiIsCQkuY2xrID0gJmdwaW8yX2Nsa30sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCA5ZWFlY2FlLi44YTBiMGVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTExLDkgKzExLDggQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvZ2VuZXJpYy5oCmluZGV4IDE2MjA1YTUuLjk0Y2Y0YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9nZW5lcmljLmgKQEAgLTE0LDExICsxNCwxMSBAQAogI2lmbmRlZiBfX01BQ0hfR0VORVJJQ19ICiAjZGVmaW5lIF9fTUFDSF9HRU5FUklDX0gKIAotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKIC8qCiAgKiBFYWNoIEdQVCBoYXMgMiB0aW1lciBjaGFubmVscwpAQCAtMzEsOSArMzEsMTAgQEAKIC8qIEFkZCBzcGVhcjZ4eCBmYW1pbHkgZGV2aWNlIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMgaGVyZSAqLwogZXh0ZXJuIHN0cnVjdCBhbWJhX2RldmljZSBncGlvX2RldmljZVtdOwogZXh0ZXJuIHN0cnVjdCBhbWJhX2RldmljZSB1YXJ0X2RldmljZVtdOwotZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgc3BlYXJfc3lzX3RpbWVyOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgc3BlYXI2eHhfdGltZXI7CiAKIC8qIEFkZCBzcGVhcjZ4eCBmYW1pbHkgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGhlcmUgKi8KK3ZvaWQgX19pbml0IHNwZWFyX3NldHVwX3RpbWVyKHZvaWQpOwogdm9pZCBfX2luaXQgc3BlYXI2eHhfbWFwX2lvKHZvaWQpOwogdm9pZCBfX2luaXQgc3BlYXI2eHhfaW5pdF9pcnEodm9pZCk7CiB2b2lkIF9faW5pdCBzcGVhcjZ4eF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggNzU0NTExNi4uMGIzZjk2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xNCw4ICsxNCwxMCBAQAogI2lmbmRlZiBfX01BQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX01BQ0hfSEFSRFdBUkVfSAogCisjaW5jbHVkZSA8cGxhdC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKwogLyogVml0dWFsIHRvIHBoeXNpY2FsIHRyYW5zbGF0aW9uIG9mIHN0YXRpY2FsbHkgbWFwcGVkIHNwYWNlICovCiAjZGVmaW5lIElPX0FERFJFU1MoeCkJCSh4IHwgMHhGMDAwMDAwMCkKIAogI2VuZGlmIC8qIF9fTUFDSF9IQVJEV0FSRV9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL21pc2NfcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmgKaW5kZXggMDM5MDgwMy4uNjhjMjBhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmgKQEAgLTE0LDE2ICsxNCwxNiBAQAogI2lmbmRlZiBfX01BQ0hfTUlTQ19SRUdTX0gKICNkZWZpbmUgX19NQUNIX01JU0NfUkVHU19ICiAKLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jZGVmaW5lIE1JU0NfQkFTRQkJVkFfU1BFQVI2WFhfSUNNM19NSVNDX1JFR19CQVNFCisjZGVmaW5lIE1JU0NfQkFTRQkJSU9NRU0oVkFfU1BFQVI2WFhfSUNNM19NSVNDX1JFR19CQVNFKQogCi0jZGVmaW5lIFNPQ19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAwMCkpCi0jZGVmaW5lIERJQUdfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMDQpKQotI2RlZmluZSBQTEwxX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMDgpKQotI2RlZmluZSBQTEwxX0ZSUQkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMEMpKQotI2RlZmluZSBQTEwxX01PRAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMTApKQotI2RlZmluZSBQTEwyX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMTQpKQorI2RlZmluZSBTT0NfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MDAwKQorI2RlZmluZSBESUFHX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDAwNCkKKyNkZWZpbmUgUExMMV9DVFIJCShNSVNDX0JBU0UgKyAweDAwOCkKKyNkZWZpbmUgUExMMV9GUlEJCShNSVNDX0JBU0UgKyAweDAwQykKKyNkZWZpbmUgUExMMV9NT0QJCShNSVNDX0JBU0UgKyAweDAxMCkKKyNkZWZpbmUgUExMMl9DVFIJCShNSVNDX0JBU0UgKyAweDAxNCkKIC8qIFBMTF9DVFIgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgUExMX0VOQUJMRQkJMgogI2RlZmluZSBQTExfTU9ERV9TSElGVAkJNApAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBQTExfTU9ERV9ESVRIX0RTQgkyCiAjZGVmaW5lIFBMTF9NT0RFX0RJVEhfU1NCCTMKIAotI2RlZmluZSBQTEwyX0ZSUQkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMTgpKQorI2RlZmluZSBQTEwyX0ZSUQkJKE1JU0NfQkFTRSArIDB4MDE4KQogLyogUExMIEZSUSByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBQTExfRElWX05fU0hJRlQJCTAKICNkZWZpbmUgUExMX0RJVl9OX01BU0sJCTB4RkYKQEAgLTQ0LDE2ICs0NCwxNiBAQAogI2RlZmluZSBQTExfRElUSF9GREJLX01fU0hJRlQJMTYKICNkZWZpbmUgUExMX0RJVEhfRkRCS19NX01BU0sJMHhGRkZGCiAKLSNkZWZpbmUgUExMMl9NT0QJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDFDKSkKLSNkZWZpbmUgUExMX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDIwKSkKLSNkZWZpbmUgQ09SRV9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAyNCkpCisjZGVmaW5lIFBMTDJfTU9ECQkoTUlTQ19CQVNFICsgMHgwMUMpCisjZGVmaW5lIFBMTF9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwMjApCisjZGVmaW5lIENPUkVfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDI0KQogLyogQ09SRSBDTEsgQ0ZHIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFBMTF9IQ0xLX1JBVElPX1NISUZUCTEwCiAjZGVmaW5lIFBMTF9IQ0xLX1JBVElPX01BU0sJMHgzCiAjZGVmaW5lIEhDTEtfUENMS19SQVRJT19TSElGVAk4CiAjZGVmaW5lIEhDTEtfUENMS19SQVRJT19NQVNLCTB4MwogCi0jZGVmaW5lIFBFUklQX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDI4KSkKKyNkZWZpbmUgUEVSSVBfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDI4KQogLyogUEVSSVBfQ0xLX0NGRyByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBDTENEX0NMS19TSElGVAkJMgogI2RlZmluZSBDTENEX0NMS19NQVNLCQkweDMKQEAgLTY2LDEwICs2NiwxMCBAQAogI2RlZmluZSBHUFQyX0NMS19TSElGVAkJMTEKICNkZWZpbmUgR1BUM19DTEtfU0hJRlQJCTEyCiAjZGVmaW5lIEdQVF9DTEtfTUFTSwkJMHgxCi0jZGVmaW5lIEFVWF9DTEtfUExMM19NQVNLCTAKLSNkZWZpbmUgQVVYX0NMS19QTEwxX01BU0sJMQorI2RlZmluZSBBVVhfQ0xLX1BMTDNfVkFMCTAKKyNkZWZpbmUgQVVYX0NMS19QTEwxX1ZBTAkxCiAKLSNkZWZpbmUgUEVSSVAxX0NMS19FTkIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDJDKSkKKyNkZWZpbmUgUEVSSVAxX0NMS19FTkIJCShNSVNDX0JBU0UgKyAweDAyQykKIC8qIFBFUklQMV9DTEtfRU5CIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFVBUlQwX0NMS19FTkIJCTMKICNkZWZpbmUgVUFSVDFfQ0xLX0VOQgkJNApAQCAtOTUsMzQgKzk1LDM1IEBACiAjZGVmaW5lIFVTQkgwX0NMS19FTkIJCTI1CiAjZGVmaW5lIFVTQkgxX0NMS19FTkIJCTI2CiAKLSNkZWZpbmUgU09DX0NPUkVfSUQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDMwKSkKLSNkZWZpbmUgUkFTX0NMS19FTkIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDM0KSkKLSNkZWZpbmUgUEVSSVAxX1NPRl9SU1QJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDM4KSkKKyNkZWZpbmUgU09DX0NPUkVfSUQJCShNSVNDX0JBU0UgKyAweDAzMCkKKyNkZWZpbmUgUkFTX0NMS19FTkIJCShNSVNDX0JBU0UgKyAweDAzNCkKKyNkZWZpbmUgUEVSSVAxX1NPRl9SU1QJCShNSVNDX0JBU0UgKyAweDAzOCkKIC8qIFBFUklQMV9TT0ZfUlNUIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIEpQRUdfU09GX1JTVAkJOAogCi0jZGVmaW5lIFNPQ19VU0VSX0lECQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzQykpCi0jZGVmaW5lIFJBU19TT0ZfUlNUCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA0MCkpCi0jZGVmaW5lIFBSU0MxX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDQ0KSkKLSNkZWZpbmUgUFJTQzJfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNDgpKQotI2RlZmluZSBQUlNDM19DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA0QykpCisjZGVmaW5lIFNPQ19VU0VSX0lECQkoTUlTQ19CQVNFICsgMHgwM0MpCisjZGVmaW5lIFJBU19TT0ZfUlNUCQkoTUlTQ19CQVNFICsgMHgwNDApCisjZGVmaW5lIFBSU0MxX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDA0NCkKKyNkZWZpbmUgUFJTQzJfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDQ4KQorI2RlZmluZSBQUlNDM19DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNEMpCiAvKiBncHQgc3ludGhlc2l6ZXIgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgR1BUX01TQ0FMRV9TSElGVAkwCiAjZGVmaW5lIEdQVF9NU0NBTEVfTUFTSwkJMHhGRkYKICNkZWZpbmUgR1BUX05TQ0FMRV9TSElGVAkxMgogI2RlZmluZSBHUFRfTlNDQUxFX01BU0sJCTB4RgogCi0jZGVmaW5lIEFNRU1fQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNTApKQotI2RlZmluZSBFWFBJX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDU0KSkKLSNkZWZpbmUgQ0xDRF9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNUMpKQotI2RlZmluZSBGSVJEQV9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNjApKQotI2RlZmluZSBVQVJUX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA2NCkpCi0jZGVmaW5lIEdNQUNfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDY4KSkKLSNkZWZpbmUgUkFTMV9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNkMpKQotI2RlZmluZSBSQVMyX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA3MCkpCi0jZGVmaW5lIFJBUzNfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDc0KSkKLSNkZWZpbmUgUkFTNF9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNzgpKQorI2RlZmluZSBBTUVNX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDA1MCkKKyNkZWZpbmUgRVhQSV9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNTQpCisjZGVmaW5lIENMQ0RfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA1QykKKyNkZWZpbmUgRklSREFfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA2MCkKKyNkZWZpbmUgVUFSVF9DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDY0KQorI2RlZmluZSBHTUFDX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNjgpCisjZGVmaW5lIFJBUzFfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA2QykKKyNkZWZpbmUgUkFTMl9DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDcwKQorI2RlZmluZSBSQVMzX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNzQpCisjZGVmaW5lIFJBUzRfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA3OCkKIC8qIGF1eCBjbGsgc3ludGhlc2lzZXIgcmVnaXN0ZXIgbWFza3MgZm9yIGlyZGEgdG8gcmFzNCAqLworI2RlZmluZSBBVVhfU1lOVF9FTkIJCTMxCiAjZGVmaW5lIEFVWF9FUV9TRUxfU0hJRlQJMzAKICNkZWZpbmUgQVVYX0VRX1NFTF9NQVNLCQkxCiAjZGVmaW5lIEFVWF9FUTFfU0VMCQkwCkBAIC0xMzIsNDIgKzEzMyw0MiBAQAogI2RlZmluZSBBVVhfWVNDQUxFX1NISUZUCTAKICNkZWZpbmUgQVVYX1lTQ0FMRV9NQVNLCQkweEZGRgogCi0jZGVmaW5lIElDTTFfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwN0MpKQotI2RlZmluZSBJQ00yX0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDgwKSkKLSNkZWZpbmUgSUNNM19BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA4NCkpCi0jZGVmaW5lIElDTTRfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwODgpKQotI2RlZmluZSBJQ001X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDhDKSkKLSNkZWZpbmUgSUNNNl9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA5MCkpCi0jZGVmaW5lIElDTTdfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwOTQpKQotI2RlZmluZSBJQ004X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDk4KSkKLSNkZWZpbmUgSUNNOV9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA5QykpCi0jZGVmaW5lIERNQV9DSE5fQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBBMCkpCi0jZGVmaW5lIFVTQjJfUEhZX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQTQpKQotI2RlZmluZSBHTUFDX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEE4KSkKLSNkZWZpbmUgRVhQSV9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBBQykpCi0jZGVmaW5lIFBSQzFfTE9DS19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEMwKSkKLSNkZWZpbmUgUFJDMl9MT0NLX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQzQpKQotI2RlZmluZSBQUkMzX0xPQ0tfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBDOCkpCi0jZGVmaW5lIFBSQzRfTE9DS19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MENDKSkKLSNkZWZpbmUgUFJDMV9JUlFfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBEMCkpCi0jZGVmaW5lIFBSQzJfSVJRX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRDQpKQotI2RlZmluZSBQUkMzX0lSUV9DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEQ4KSkKLSNkZWZpbmUgUFJDNF9JUlFfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBEQykpCi0jZGVmaW5lIFBXUkRPV05fQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRTApKQotI2RlZmluZSBDT01QU1NUTF8xVjhfQ0ZHCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEU0KSkKLSNkZWZpbmUgQ09NUFNTVExfMlY1X0NGRwkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBFOCkpCi0jZGVmaW5lIENPTVBDT1JfM1YzX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRUMpKQotI2RlZmluZSBTU1RMUEFEX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEYwKSkKLSNkZWZpbmUgQklTVDFfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRjQpKQotI2RlZmluZSBCSVNUMl9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBGOCkpCi0jZGVmaW5lIEJJU1QzX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEZDKSkKLSNkZWZpbmUgQklTVDRfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMDApKQotI2RlZmluZSBCSVNUNV9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDEwNCkpCi0jZGVmaW5lIEJJU1QxX1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTA4KSkKLSNkZWZpbmUgQklTVDJfU1RTX1JFUwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMEMpKQotI2RlZmluZSBCSVNUM19TVFNfUkVTCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDExMCkpCi0jZGVmaW5lIEJJU1Q0X1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTE0KSkKLSNkZWZpbmUgQklTVDVfU1RTX1JFUwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMTgpKQotI2RlZmluZSBTWVNFUlJfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMUMpKQorI2RlZmluZSBJQ00xX0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA3QykKKyNkZWZpbmUgSUNNMl9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwODApCisjZGVmaW5lIElDTTNfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDg0KQorI2RlZmluZSBJQ000X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA4OCkKKyNkZWZpbmUgSUNNNV9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwOEMpCisjZGVmaW5lIElDTTZfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDkwKQorI2RlZmluZSBJQ003X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA5NCkKKyNkZWZpbmUgSUNNOF9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwOTgpCisjZGVmaW5lIElDTTlfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDlDKQorI2RlZmluZSBETUFfQ0hOX0NGRwkJKE1JU0NfQkFTRSArIDB4MEEwKQorI2RlZmluZSBVU0IyX1BIWV9DRkcJCShNSVNDX0JBU0UgKyAweDBBNCkKKyNkZWZpbmUgR01BQ19DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQTgpCisjZGVmaW5lIEVYUElfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEFDKQorI2RlZmluZSBQUkMxX0xPQ0tfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQzApCisjZGVmaW5lIFBSQzJfTE9DS19DVFIJCShNSVNDX0JBU0UgKyAweDBDNCkKKyNkZWZpbmUgUFJDM19MT0NLX0NUUgkJKE1JU0NfQkFTRSArIDB4MEM4KQorI2RlZmluZSBQUkM0X0xPQ0tfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQ0MpCisjZGVmaW5lIFBSQzFfSVJRX0NUUgkJKE1JU0NfQkFTRSArIDB4MEQwKQorI2RlZmluZSBQUkMyX0lSUV9DVFIJCShNSVNDX0JBU0UgKyAweDBENCkKKyNkZWZpbmUgUFJDM19JUlFfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRDgpCisjZGVmaW5lIFBSQzRfSVJRX0NUUgkJKE1JU0NfQkFTRSArIDB4MERDKQorI2RlZmluZSBQV1JET1dOX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBFMCkKKyNkZWZpbmUgQ09NUFNTVExfMVY4X0NGRwkoTUlTQ19CQVNFICsgMHgwRTQpCisjZGVmaW5lIENPTVBTU1RMXzJWNV9DRkcJKE1JU0NfQkFTRSArIDB4MEU4KQorI2RlZmluZSBDT01QQ09SXzNWM19DRkcJCShNSVNDX0JBU0UgKyAweDBFQykKKyNkZWZpbmUgU1NUTFBBRF9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRjApCisjZGVmaW5lIEJJU1QxX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBGNCkKKyNkZWZpbmUgQklTVDJfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEY4KQorI2RlZmluZSBCSVNUM19DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRkMpCisjZGVmaW5lIEJJU1Q0X0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDEwMCkKKyNkZWZpbmUgQklTVDVfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MTA0KQorI2RlZmluZSBCSVNUMV9TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMDgpCisjZGVmaW5lIEJJU1QyX1NUU19SRVMJCShNSVNDX0JBU0UgKyAweDEwQykKKyNkZWZpbmUgQklTVDNfU1RTX1JFUwkJKE1JU0NfQkFTRSArIDB4MTEwKQorI2RlZmluZSBCSVNUNF9TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMTQpCisjZGVmaW5lIEJJU1Q1X1NUU19SRVMJCShNSVNDX0JBU0UgKyAweDExOCkKKyNkZWZpbmUgU1lTRVJSX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDExQykKIAogI2VuZGlmIC8qIF9fTUFDSF9NSVNDX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvc3BlYXIuaCBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL3NwZWFyLmgKaW5kZXggYTgzNWY1Yi4uN2ZkNjIxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvc3BlYXIuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9zcGVhci5oCkBAIC0xNCwxNTMgKzE0LDcwIEBACiAjaWZuZGVmIF9fTUFDSF9TUEVBUjZYWF9ICiAjZGVmaW5lIF9fTUFDSF9TUEVBUjZYWF9ICiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPG1hY2gvc3BlYXI2MDAuaD4KIAotI2RlZmluZSBTUEVBUjZYWF9NTF9TRFJBTV9CQVNFCQkweDAwMDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX01MX1NEUkFNX1NJWkUJCTB4NDAwMDAwMDAKLQorI2RlZmluZSBTUEVBUjZYWF9NTF9TRFJBTV9CQVNFCQlVTCgweDAwMDAwMDAwKQogLyogSUNNMSAtIExvdyBzcGVlZCBjb25uZWN0aW9uICovCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfQkFTRQkJMHhEMDAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NJWkUJCTB4MDgwMDAwMDAKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9CQVNFCQlVTCgweEQwMDAwMDAwKQogCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfVUFSVDBfQkFTRQkweEQwMDAwMDAwCisjZGVmaW5lIFNQRUFSNlhYX0lDTTFfVUFSVDBfQkFTRQlVTCgweEQwMDAwMDAwKQogI2RlZmluZSBWQV9TUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UJSU9fQUREUkVTUyhTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UpCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfVUFSVDBfU0laRQkweDAwMDgwMDAwCiAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9VQVJUMV9CQVNFCTB4RDAwODAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9VQVJUMV9TSVpFCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NTUDBfQkFTRQkJMHhEMDEwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NTUDBfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfU1NQMV9CQVNFCQkweEQwMTgwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfU1NQMV9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9JMkNfQkFTRQkJMHhEMDIwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX0kyQ19TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9KUEVHX0JBU0UJCTB4RDA4MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9KUEVHX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00xX0lSREFfQkFTRQkJMHhEMTAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX0lSREFfU0laRQkJMHgwMDgwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfRlNNQ19CQVNFCQkweEQxODAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfRlNNQ19TSVpFCQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9OQU5EX0JBU0UJCTB4RDIwMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9OQU5EX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NSQU1fQkFTRQkJMHhEMjgwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NSQU1fU0laRQkJMHgwMDgwMDAwMAorI2RlZmluZSBTUEVBUjZYWF9JQ00xX1VBUlQxX0JBU0UJVUwoMHhEMDA4MDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9TU1AwX0JBU0UJCVVMKDB4RDAxMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTFfU1NQMV9CQVNFCQlVTCgweEQwMTgwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00xX0kyQ19CQVNFCQlVTCgweEQwMjAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00xX0pQRUdfQkFTRQkJVUwoMHhEMDgwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9JUkRBX0JBU0UJCVVMKDB4RDEwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTFfRlNNQ19CQVNFCQlVTCgweEQxODAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00xX05BTkRfQkFTRQkJVUwoMHhEMjAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9TUkFNX0JBU0UJCVVMKDB4RDI4MDAwMDApCiAKIC8qIElDTTIgLSBBcHBsaWNhdGlvbiBTdWJzeXN0ZW0gKi8KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9CQVNFCQkweEQ4MDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfU0laRQkJMHgwODAwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfVE1SMF9CQVNFCQkweEQ4MDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfVE1SMF9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9UTVIxX0JBU0UJCTB4RDgwODAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9UTVIxX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00yX0dQSU9fQkFTRQkJMHhEODEwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00yX0dQSU9fU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfU1BJMl9CQVNFCQkweEQ4MTgwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfU1BJMl9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9BRENfQkFTRQkJMHhEODIwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00yX0FEQ19TSVpFCQkweDAwMDgwMDAwCisjZGVmaW5lIFNQRUFSNlhYX0lDTTJfQkFTRQkJVUwoMHhEODAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMl9UTVIwX0JBU0UJCVVMKDB4RDgwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTJfVE1SMV9CQVNFCQlVTCgweEQ4MDgwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00yX0dQSU9fQkFTRQkJVUwoMHhEODEwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMl9TU1AyX0JBU0UJCVVMKDB4RDgxODAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTJfQURDX0JBU0UJCVVMKDB4RDgyMDAwMDApCiAKIC8qIE1MLTEsIDIgLSBNdWx0aSBMYXllciBDUFUgU3Vic3lzdGVtICovCi0jZGVmaW5lIFNQRUFSNlhYX01MX0NQVV9CQVNFCQkweEYwMDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX01MX0NQVV9TSVpFCQkweDA4MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfQ1BVX1RNUl9CQVNFCQkweEYwMDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0NQVV9UTVJfU0laRQkJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0NQVV9HUElPX0JBU0UJCTB4RjAxMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfQ1BVX0dQSU9fU0laRQkJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0NQVV9WSUNfU0VDX0JBU0UJMHhGMTAwMDAwMAorI2RlZmluZSBTUEVBUjZYWF9NTF9DUFVfQkFTRQkJVUwoMHhGMDAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfQ1BVX1RNUl9CQVNFCQlVTCgweEYwMDAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9DUFVfR1BJT19CQVNFCQlVTCgweEYwMTAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9DUFVfVklDX1NFQ19CQVNFCVVMKDB4RjEwMDAwMDApCiAjZGVmaW5lIFZBX1NQRUFSNlhYX0NQVV9WSUNfU0VDX0JBU0UJSU9fQUREUkVTUyhTUEVBUjZYWF9DUFVfVklDX1NFQ19CQVNFKQotI2RlZmluZSBTUEVBUjZYWF9DUFVfVklDX1NFQ19TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9DUFVfVklDX1BSSV9CQVNFCTB4RjExMDAwMDAKKyNkZWZpbmUgU1BFQVI2WFhfQ1BVX1ZJQ19QUklfQkFTRQlVTCgweEYxMTAwMDAwKQogI2RlZmluZSBWQV9TUEVBUjZYWF9DUFVfVklDX1BSSV9CQVNFCUlPX0FERFJFU1MoU1BFQVI2WFhfQ1BVX1ZJQ19QUklfQkFTRSkKLSNkZWZpbmUgU1BFQVI2WFhfQ1BVX1ZJQ19QUklfU0laRQkweDAwMTAwMDAwCiAKIC8qIElDTTMgLSBCYXNpYyBTdWJzeXN0ZW0gKi8KLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19CQVNFCQkweEY4MDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU0laRQkJMHgwODAwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU01FTV9CQVNFCQkweEY4MDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU01FTV9TSVpFCQkweDA0MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19TTUlfQ1RSTF9CQVNFCTB4RkMwMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19TTUlfQ1RSTF9TSVpFCTB4MDAyMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX0NMQ0RfQkFTRQkJMHhGQzIwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00zX0NMQ0RfU0laRQkJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfRE1BX0JBU0UJCTB4RkM0MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19ETUFfU0laRQkJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU0RSQU1fQ1RSTF9CQVNFCTB4RkM2MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19TRFJBTV9DVFJMX1NJWkUJMHgwMDIwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfVE1SX0JBU0UJCTB4RkM4MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19UTVJfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfV0RUX0JBU0UJCTB4RkM4ODAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19XRFRfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfUlRDX0JBU0UJCTB4RkM5MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19SVENfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfR1BJT19CQVNFCQkweEZDOTgwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfR1BJT19TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19TWVNfQ1RSTF9CQVNFCTB4RkNBMDAwMDAKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19CQVNFCQlVTCgweEY4MDAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX1NNRU1fQkFTRQkJVUwoMHhGODAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19TTUlfQ1RSTF9CQVNFCVVMKDB4RkMwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTNfQ0xDRF9CQVNFCQlVTCgweEZDMjAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX0RNQV9CQVNFCQlVTCgweEZDNDAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX1NEUkFNX0NUUkxfQkFTRQlVTCgweEZDNjAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX1RNUl9CQVNFCQlVTCgweEZDODAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX1dEVF9CQVNFCQlVTCgweEZDODgwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX1JUQ19CQVNFCQlVTCgweEZDOTAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX0dQSU9fQkFTRQkJVUwoMHhGQzk4MDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19TWVNfQ1RSTF9CQVNFCVVMKDB4RkNBMDAwMDApCiAjZGVmaW5lIFZBX1NQRUFSNlhYX0lDTTNfU1lTX0NUUkxfQkFTRQlJT19BRERSRVNTKFNQRUFSNlhYX0lDTTNfU1lTX0NUUkxfQkFTRSkKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19TWVNfQ1RSTF9TSVpFCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX01JU0NfUkVHX0JBU0UJMHhGQ0E4MDAwMAorI2RlZmluZSBTUEVBUjZYWF9JQ00zX01JU0NfUkVHX0JBU0UJVUwoMHhGQ0E4MDAwMCkKICNkZWZpbmUgVkFfU1BFQVI2WFhfSUNNM19NSVNDX1JFR19CQVNFCUlPX0FERFJFU1MoU1BFQVI2WFhfSUNNM19NSVNDX1JFR19CQVNFKQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX01JU0NfUkVHX1NJWkUJMHgwMDA4MDAwMAogCiAvKiBJQ000IC0gSGlnaCBTcGVlZCBDb25uZWN0aW9uICovCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfQkFTRQkJMHhFMDAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1NJWkUJCTB4MDgwMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X0dNQUNfQkFTRQkJMHhFMDgwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X0dNQUNfU0laRQkJMHgwMDgwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCRF9GSUZPX0JBU0UJMHhFMTAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfRklGT19TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfQ1NSX0JBU0UJMHhFMTEwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfQ1NSX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCRF9QTERUX0JBU0UJMHhFMTIwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfUExEVF9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9FSENJMF9CQVNFCTB4RTE4MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfRUhDSTBfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfT0hDSTBfQkFTRQkweEUxOTAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX09IQ0kwX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX0VIQ0kxX0JBU0UJMHhFMjAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9FSENJMV9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9PSENJMV9CQVNFCTB4RTIxMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfT0hDSTFfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfQVJCX0JBU0UJMHhFMjgwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9BUkJfU0laRQkweDAwMDEwMDAwCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfQkFTRQkJVUwoMHhFMDAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNNF9HTUFDX0JBU0UJCVVMKDB4RTA4MDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCRF9GSUZPX0JBU0UJVUwoMHhFMTAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JEX0NTUl9CQVNFCVVMKDB4RTExMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCRF9QTERUX0JBU0UJVUwoMHhFMTIwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfRUhDSTBfQkFTRQlVTCgweEUxODAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9PSENJMF9CQVNFCVVMKDB4RTE5MDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX0VIQ0kxX0JBU0UJVUwoMHhFMjAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfT0hDSTFfQkFTRQlVTCgweEUyMTAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9BUkJfQkFTRQlVTCgweEUyODAwMDAwKQogCiAvKiBEZWJ1ZyB1YXJ0IGZvciBsaW51eCwgd2lsbCBiZSB1c2VkIGZvciBkZWJ1ZyBhbmQgdW5jb21wcmVzcyBtZXNzYWdlcyAqLwogI2RlZmluZSBTUEVBUl9EQkdfVUFSVF9CQVNFCQlTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2MDAuYyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2MDAuYwppbmRleCA1YzQ4NGM0Li5kMGU2ZWVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNjAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjYwMC5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qIEFkZCBzcGVhcjYwMCBzcGVjaWZpYyBkZXZpY2VzIGhlcmUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjYwMF9ldmIuYyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2MDBfZXZiLmMKaW5kZXggZGFmZjhkMC4uZjE5Y2VmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjYwMF9ldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNjAwX2V2Yi5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9nZW5lcmljLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmZ3Bpb19kZXZpY2VbMF0sCkBAIC00Niw2ICs0Niw2IEBACiAJLmJvb3RfcGFyYW1zCT0JMHgwMDAwMDEwMCwKIAkubWFwX2lvCQk9CXNwZWFyNnh4X21hcF9pbywKIAkuaW5pdF9pcnEJPQlzcGVhcjZ4eF9pbml0X2lycSwKLQkudGltZXIJCT0JJnNwZWFyX3N5c190aW1lciwKKwkudGltZXIJCT0JJnNwZWFyNnh4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPQlzcGVhcjYwMF9ldmJfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNnh4LmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNnh4LmMKaW5kZXggZjJmZTE0ZS4uOTgxODEyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjZ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2eHguYwpAQCAtMTgsOSArMTgsOSBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAKIC8qIEFkZCBzcGVhcjZ4eCBtYWNoaW5lcyBjb21tb24gZGV2aWNlcyBoZXJlICovCiAvKiB1YXJ0IGRldmljZSByZWdpc3RyYXRpb24gKi8KQEAgLTMxLDggKzMxLDcgQEAKIAkJfSwKIAkJLnJlcyA9IHsKIAkJCS5zdGFydCA9IFNQRUFSNlhYX0lDTTFfVUFSVDBfQkFTRSwKLQkJCS5lbmQgPSBTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UgKwotCQkJCVNQRUFSNlhYX0lDTTFfVUFSVDBfU0laRSAtIDEsCisJCQkuZW5kID0gU1BFQVI2WFhfSUNNMV9VQVJUMF9CQVNFICsgU1pfNEsgLSAxLAogCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJCX0sCiAJCS5pcnEgPSB7SVJRX1VBUlRfMCwgTk9fSVJRfSwKQEAgLTQyLDggKzQxLDcgQEAKIAkJfSwKIAkJLnJlcyA9IHsKIAkJCS5zdGFydCA9IFNQRUFSNlhYX0lDTTFfVUFSVDFfQkFTRSwKLQkJCS5lbmQgPSBTUEVBUjZYWF9JQ00xX1VBUlQxX0JBU0UgKwotCQkJCVNQRUFSNlhYX0lDTTFfVUFSVDFfU0laRSAtIDEsCisJCQkuZW5kID0gU1BFQVI2WFhfSUNNMV9VQVJUMV9CQVNFICsgU1pfNEsgLSAxLAogCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJCX0sCiAJCS5pcnEgPSB7SVJRX1VBUlRfMSwgTk9fSVJRfSwKQEAgLTcyLDggKzcwLDcgQEAKIAkJfSwKIAkJLnJlcyA9IHsKIAkJCS5zdGFydCA9IFNQRUFSNlhYX0NQVV9HUElPX0JBU0UsCi0JCQkuZW5kID0gU1BFQVI2WFhfQ1BVX0dQSU9fQkFTRSArCi0JCQkJU1BFQVI2WFhfQ1BVX0dQSU9fU0laRSAtIDEsCisJCQkuZW5kID0gU1BFQVI2WFhfQ1BVX0dQSU9fQkFTRSArIFNaXzRLIC0gMSwKIAkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCQl9LAogCQkuaXJxID0ge0lSUV9MT0NBTF9HUElPLCBOT19JUlF9LApAQCAtODQsOCArODEsNyBAQAogCQl9LAogCQkucmVzID0gewogCQkJLnN0YXJ0ID0gU1BFQVI2WFhfSUNNM19HUElPX0JBU0UsCi0JCQkuZW5kID0gU1BFQVI2WFhfSUNNM19HUElPX0JBU0UgKwotCQkJCVNQRUFSNlhYX0lDTTNfR1BJT19TSVpFIC0gMSwKKwkJCS5lbmQgPSBTUEVBUjZYWF9JQ00zX0dQSU9fQkFTRSArIFNaXzRLIC0gMSwKIAkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCQl9LAogCQkuaXJxID0ge0lSUV9CQVNJQ19HUElPLCBOT19JUlF9LApAQCAtOTYsOCArOTIsNyBAQAogCQl9LAogCQkucmVzID0gewogCQkJLnN0YXJ0ID0gU1BFQVI2WFhfSUNNMl9HUElPX0JBU0UsCi0JCQkuZW5kID0gU1BFQVI2WFhfSUNNMl9HUElPX0JBU0UgKwotCQkJCVNQRUFSNlhYX0lDTTJfR1BJT19TSVpFIC0gMSwKKwkJCS5lbmQgPSBTUEVBUjZYWF9JQ00yX0dQSU9fQkFTRSArIFNaXzRLIC0gMSwKIAkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCQl9LAogCQkuaXJxID0ge0lSUV9BUFBMX0dQSU8sIE5PX0lSUX0sCkBAIC0xMjIsMjcgKzExNywyNyBAQAogCXsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNQRUFSNlhYX0lDTTFfVUFSVDBfU0laRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewogCQkudmlydHVhbAk9IFZBX1NQRUFSNlhYX0NQVV9WSUNfUFJJX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjZYWF9DUFVfVklDX1BSSV9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTUEVBUjZYWF9DUFVfVklDX1BSSV9TSVpFLAorCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LCB7CiAJCS52aXJ0dWFsCT0gVkFfU1BFQVI2WFhfQ1BVX1ZJQ19TRUNfQkFTRSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQRUFSNlhYX0NQVV9WSUNfU0VDX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNQRUFSNlhYX0NQVV9WSUNfU0VDX1NJWkUsCisJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sIHsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjZYWF9JQ00zX1NZU19DVFJMX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjZYWF9JQ00zX1NZU19DVFJMX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNQRUFSNlhYX0lDTTNfTUlTQ19SRUdfQkFTRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewogCQkudmlydHVhbAk9IFZBX1NQRUFSNlhYX0lDTTNfTUlTQ19SRUdfQkFTRSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQRUFSNlhYX0lDTTNfTUlTQ19SRUdfQkFTRSksCi0JCS5sZW5ndGgJCT0gU1BFQVI2WFhfSUNNM19NSVNDX1JFR19TSVpFLAorCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LAogfTsKQEAgLTE1NSwzICsxNTAsMzQgQEAKIAkvKiBUaGlzIHdpbGwgaW5pdGlhbGl6ZSBjbG9jayBmcmFtZXdvcmsgKi8KIAljbGtfaW5pdCgpOwogfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc3BlYXI2eHhfdGltZXJfaW5pdCh2b2lkKQoreworCWNoYXIgcGNsa19uYW1lW10gPSAicGxsM180OG1fY2xrIjsKKwlzdHJ1Y3QgY2xrICpncHRfY2xrLCAqcGNsazsKKworCS8qIGdldCB0aGUgc3lzdGVtIHRpbWVyIGNsb2NrICovCisJZ3B0X2NsayA9IGNsa19nZXRfc3lzKCJncHQwIiwgTlVMTCk7CisJaWYgKElTX0VSUihncHRfY2xrKSkgeworCQlwcl9lcnIoIiVzOmNvdWxkbid0IGdldCBjbGsgZm9yIGdwdFxuIiwgX19mdW5jX18pOworCQlCVUcoKTsKKwl9CisKKwkvKiBnZXQgdGhlIHN1aXRhYmxlIHBhcmVudCBjbG9jayBmb3IgdGltZXIqLworCXBjbGsgPSBjbGtfZ2V0KE5VTEwsIHBjbGtfbmFtZSk7CisJaWYgKElTX0VSUihwY2xrKSkgeworCQlwcl9lcnIoIiVzOmNvdWxkbid0IGdldCAlcyBhcyBwYXJlbnQgZm9yIGdwdFxuIiwKKwkJCQlfX2Z1bmNfXywgcGNsa19uYW1lKTsKKwkJQlVHKCk7CisJfQorCisJY2xrX3NldF9wYXJlbnQoZ3B0X2NsaywgcGNsayk7CisJY2xrX3B1dChncHRfY2xrKTsKKwljbGtfcHV0KHBjbGspOworCisJc3BlYXJfc2V0dXBfdGltZXIoKTsKK30KKworc3RydWN0IHN5c190aW1lciBzcGVhcjZ4eF90aW1lciA9IHsKKwkuaW5pdCA9IHNwZWFyNnh4X3RpbWVyX2luaXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYwppbmRleCBiZDA2NjIwLi5hZDgwNDg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYwpAQCAtMjA3LDkgKzIwNyw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bHZsX2xvY2tbcG9ydF0sIGZsYWdzKTsKIAogCWlmICh0eXBlICYgKElSUV9UWVBFX0xFVkVMX0xPVyB8IElSUV9UWVBFX0xFVkVMX0hJR0gpKQotCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChkLT5pcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwogCWVsc2UgaWYgKHR5cGUgJiAoSVJRX1RZUEVfRURHRV9GQUxMSU5HIHwgSVJRX1RZUEVfRURHRV9SSVNJTkcpKQotCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCV9fc2V0X2lycV9oYW5kbGVyX3VubG9ja2VkKGQtPmlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaAppbmRleCBkNzcyMzk1Li5hMjE3ZjY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaApAQCAtMjAsNiArMjAsOCBAQAogI2lmbmRlZiBfX01BQ0hfQ0xLX0gKICNkZWZpbmUgX19NQUNIX0NMS19ICiAKK3N0cnVjdCBjbGs7CisKIHZvaWQgdGVncmFfcGVyaXBoX3Jlc2V0X2RlYXNzZXJ0KHN0cnVjdCBjbGsgKmMpOwogdm9pZCB0ZWdyYV9wZXJpcGhfcmVzZXRfYXNzZXJ0KHN0cnVjdCBjbGsgKmMpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCmluZGV4IDQxMmY1YzYuLjY2Y2QzZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0yMCw2ICsyMCw4IEBACiAjaWZuZGVmIF9fTUFDSF9DTEtERVZfSAogI2RlZmluZSBfX01BQ0hfQ0xLREVWX0gKIAorc3RydWN0IGNsazsKKwogc3RhdGljIGlubGluZSBpbnQgX19jbGtfZ2V0KHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2tiYy5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gva2JjLmgKaW5kZXggNjZhZDI3Ni4uMDRjNzc5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gva2JjLmgKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gva2JjLmgKQEAgLTU3LDUgKzU3LDYgQEAKIAljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKIAogCWJvb2wgd2FrZXVwOworCWJvb2wgdXNlX2ZuX21hcDsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jCmluZGV4IGRlN2RmYWQuLjE3Yzc0ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYwpAQCAtNDYsMjQgKzQ2LDI0IEBACiAjZGVmaW5lIElDVExSX0NPUF9JRVJfQ0xSCTB4MzgKICNkZWZpbmUgSUNUTFJfQ09QX0lFUF9DTEFTUwkweDNjCiAKLXN0YXRpYyB2b2lkICgqZ2ljX21hc2tfaXJxKShzdHJ1Y3QgaXJxX2RhdGEgKmQpOwotc3RhdGljIHZvaWQgKCpnaWNfdW5tYXNrX2lycSkoc3RydWN0IGlycV9kYXRhICpkKTsKK3N0YXRpYyB2b2lkICgqdGVncmFfZ2ljX21hc2tfaXJxKShzdHJ1Y3QgaXJxX2RhdGEgKmQpOworc3RhdGljIHZvaWQgKCp0ZWdyYV9naWNfdW5tYXNrX2lycSkoc3RydWN0IGlycV9kYXRhICpkKTsKIAotI2RlZmluZSBpcnFfdG9faWN0bHIoaXJxKSAoKChpcnEpLTMyKSA+PiA1KQorI2RlZmluZSBpcnFfdG9faWN0bHIoaXJxKSAoKChpcnEpIC0gMzIpID4+IDUpCiBzdGF0aWMgdm9pZCBfX2lvbWVtICp0ZWdyYV9pY3Rscl9iYXNlID0gSU9fQUREUkVTUyhURUdSQV9QUklNQVJZX0lDVExSX0JBU0UpOwotI2RlZmluZSBpY3Rscl90b192aXJ0KGljdGxyKSAodGVncmFfaWN0bHJfYmFzZSArIChpY3RscikqMHgxMDApCisjZGVmaW5lIGljdGxyX3RvX3ZpcnQoaWN0bHIpICh0ZWdyYV9pY3Rscl9iYXNlICsgKGljdGxyKSAqIDB4MTAwKQogCiBzdGF0aWMgdm9pZCB0ZWdyYV9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHIgPSBpY3Rscl90b192aXJ0KGlycV90b19pY3RscihkLT5pcnEpKTsKLQlnaWNfbWFza19pcnEoZCk7Ci0Jd3JpdGVsKDE8PChkLT5pcnEmMzEpLCBhZGRyK0lDVExSX0NQVV9JRVJfQ0xSKTsKKwl0ZWdyYV9naWNfbWFza19pcnEoZCk7CisJd3JpdGVsKDEgPDwgKGQtPmlycSAmIDMxKSwgYWRkcitJQ1RMUl9DUFVfSUVSX0NMUik7CiB9CiAKIHN0YXRpYyB2b2lkIHRlZ3JhX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyID0gaWN0bHJfdG9fdmlydChpcnFfdG9faWN0bHIoZC0+aXJxKSk7Ci0JZ2ljX3VubWFza19pcnEoZCk7CisJdGVncmFfZ2ljX3VubWFza19pcnEoZCk7CiAJd3JpdGVsKDE8PChkLT5pcnEmMzEpLCBhZGRyK0lDVExSX0NQVV9JRVJfU0VUKTsKIH0KIApAQCAtOTgsOCArOTgsOCBAQAogCQkgSU9fQUREUkVTUyhURUdSQV9BUk1fUEVSSUZfQkFTRSArIDB4MTAwKSk7CiAKIAlnaWMgPSBnZXRfaXJxX2NoaXAoMjkpOwotCWdpY191bm1hc2tfaXJxID0gZ2ljLT5pcnFfdW5tYXNrOwotCWdpY19tYXNrX2lycSA9IGdpYy0+aXJxX21hc2s7CisJdGVncmFfZ2ljX3VubWFza19pcnEgPSBnaWMtPmlycV91bm1hc2s7CisJdGVncmFfZ2ljX21hc2tfaXJxID0gZ2ljLT5pcnFfbWFzazsKIAl0ZWdyYV9pcnEuaXJxX2FjayA9IGdpYy0+aXJxX2FjazsKICNpZmRlZiBDT05GSUdfU01QCiAJdGVncmFfaXJxLmlycV9zZXRfYWZmaW5pdHkgPSBnaWMtPmlycV9zZXRfYWZmaW5pdHk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXV4NTAwL0tjb25maWcKaW5kZXggMjQ3Y2FhMy4uMjAzYjk4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBIQVNfTVRVCiAJc2VsZWN0IE5PTUFESUtfR1BJTworCXNlbGVjdCBBUk1fRVJSQVRBXzc1Mzk3MAogCiBtZW51ICJVeDUwMCBTb0MiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjBhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9LY29uZmlnCkBAIC0wLDAgKzEsNzMgQEAKK2lmIEFSQ0hfVlQ4NTAwCisKK2NvbmZpZyBWVFdNX1ZFUlNJT05fVlQ4NTAwCisJYm9vbAorCitjb25maWcgVlRXTV9WRVJTSU9OX1dNODUwNQorCWJvb2wKKworY29uZmlnIE1BQ0hfQlYwNworCWJvb2wgIkJlbmlnbiBCVjA3LTg1MDAgTWluaSBOZXRib29rIgorCWRlcGVuZHMgb24gQVJDSF9WVDg1MDAKKwlzZWxlY3QgVlRXTV9WRVJTSU9OX1ZUODUwMAorCWhlbHAKKwkgIEFkZCBzdXBwb3J0IGZvciB0aGUgaW5leHBlbnNpdmUgNy1pbmNoIG5ldGJvb2tzIHNvbGQgYnkgbWFueQorCSAgQ2hpbmVzZSBkaXN0cmlidXRvcnMgdW5kZXIgdmFyaW91cyBuYW1lcy4gTm90ZSB0aGF0IHRoZXJlIGFyZQorCSAgbWFueSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMgaW4gaWRlbnRpY2FsIGV4dGVyaW9yLCBtYWtlIHN1cmUKKwkgIHRoYXQgeW91cnMgaXMgaW5kZWVkIGJhc2VkIG9uIGEgVklBIFZUODUwMCBjaGlwLgorCitjb25maWcgTUFDSF9XTTg1MDVfN0lOX05FVEJPT0sKKwlib29sICJXTTg1MDUgNy1pbmNoIGdlbmVyaWMgbmV0Ym9vayIKKwlkZXBlbmRzIG9uIEFSQ0hfVlQ4NTAwCisJc2VsZWN0IFZUV01fVkVSU0lPTl9XTTg1MDUKKwloZWxwCisJICBBZGQgc3VwcG9ydCBmb3IgdGhlIGluZXhwZW5zaXZlIDctaW5jaCBuZXRib29rcyBzb2xkIGJ5IG1hbnkKKwkgIENoaW5lc2UgZGlzdHJpYnV0b3JzIHVuZGVyIHZhcmlvdXMgbmFtZXMuIE5vdGUgdGhhdCB0aGVyZSBhcmUKKwkgIG1hbnkgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zIGluIGlkZW50aWNhbCBleHRlcmlvciwgbWFrZSBzdXJlCisJICB0aGF0IHlvdXJzIGlzIGluZGVlZCBiYXNlZCBvbiBhIFdvbmRlck1lZGlhIFdNODUwNSBjaGlwLgorCitjb21tZW50ICJMQ0QgcGFuZWwgc2l6ZSIKKworY29uZmlnIFdNVF9QQU5FTF84MDBYNDgwCisJYm9vbCAiNy1pbmNoIHdpdGggODAweDQ4MCByZXNvbHV0aW9uIgorCWRlcGVuZHMgb24gKEZCX1ZUODUwMCB8fCBGQl9XTTg1MDUpCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhlc2UgYXJlIGZvdW5kIGluIG1vc3Qgb2YgdGhlIG5ldGJvb2tzIGluIGdlbmVyaWMgY2FzZXMsIGFzCisJICB3ZWxsIGFzIGluIEVrZW4gTTAwMSB0YWJsZXRzIGFuZCBwb3NzaWJseSBlbHNld2hlcmUuCisKKwkgIFRvIHNlbGVjdCB0aGlzIHBhbmVsIGF0IHJ1bnRpbWUsIHNheSB5IGhlcmUgYW5kIGFwcGVuZAorCSAgJ3BhbmVsPTgwMHg0ODAnIHRvIHlvdXIga2VybmVsIGNvbW1hbmQgbGluZS4gT3RoZXJ3aXNlLCB0aGUKKwkgIGxhcmdlc3Qgb25lIGF2YWlsYWJsZSB3aWxsIGJlIHVzZWQuCisKK2NvbmZpZyBXTVRfUEFORUxfODAwWDYwMAorCWJvb2wgIjgtaW5jaCB3aXRoIDgwMHg2MDAgcmVzb2x1dGlvbiIKKwlkZXBlbmRzIG9uIChGQl9WVDg1MDAgfHwgRkJfV004NTA1KQorCWhlbHAKKwkgIFRoZXNlIGFyZSBmb3VuZCBpbiBFa2VuIE0wMDMgdGFibGV0cyBhbmQgcG9zc2libHkgZWxzZXdoZXJlLgorCisJICBUbyBzZWxlY3QgdGhpcyBwYW5lbCBhdCBydW50aW1lLCBzYXkgeSBoZXJlIGFuZCBhcHBlbmQKKwkgICdwYW5lbD04MDB4NjAwJyB0byB5b3VyIGtlcm5lbCBjb21tYW5kIGxpbmUuIE90aGVyd2lzZSwgdGhlCisJICBsYXJnZXN0IG9uZSBhdmFpbGFibGUgd2lsbCBiZSB1c2VkLgorCitjb25maWcgV01UX1BBTkVMXzEwMjRYNTc2CisJYm9vbCAiMTAtaW5jaCB3aXRoIDEwMjR4NTc2IHJlc29sdXRpb24iCisJZGVwZW5kcyBvbiAoRkJfVlQ4NTAwIHx8IEZCX1dNODUwNSkKKwloZWxwCisJICBUaGVzZSBhcmUgZm91bmQgaW4gQ2hlcnJ5UGFsIG5ldGJvb2tzIGFuZCBwb3NzaWJseSBlbHNld2hlcmUuCisKKwkgIFRvIHNlbGVjdCB0aGlzIHBhbmVsIGF0IHJ1bnRpbWUsIHNheSB5IGhlcmUgYW5kIGFwcGVuZAorCSAgJ3BhbmVsPTEwMjR4NTc2JyB0byB5b3VyIGtlcm5lbCBjb21tYW5kIGxpbmUuIE90aGVyd2lzZSwgdGhlCisJICBsYXJnZXN0IG9uZSBhdmFpbGFibGUgd2lsbCBiZSB1c2VkLgorCitjb25maWcgV01UX1BBTkVMXzEwMjRYNjAwCisJYm9vbCAiMTAtaW5jaCB3aXRoIDEwMjR4NjAwIHJlc29sdXRpb24iCisJZGVwZW5kcyBvbiAoRkJfVlQ4NTAwIHx8IEZCX1dNODUwNSkKKwloZWxwCisJICBUaGVzZSBhcmUgZm91bmQgaW4gRWtlbiBNMDA2IHRhYmxldHMgYW5kIHBvc3NpYmx5IGVsc2V3aGVyZS4KKworCSAgVG8gc2VsZWN0IHRoaXMgcGFuZWwgYXQgcnVudGltZSwgc2F5IHkgaGVyZSBhbmQgYXBwZW5kCisJICAncGFuZWw9MTAyNHg2MDAnIHRvIHlvdXIga2VybmVsIGNvbW1hbmQgbGluZS4gT3RoZXJ3aXNlLCB0aGUKKwkgIGxhcmdlc3Qgb25lIGF2YWlsYWJsZSB3aWxsIGJlIHVzZWQuCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYWVkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKK29iai15ICs9IGRldmljZXMubyBncGlvLm8gaXJxLm8gdGltZXIubworCitvYmotJChDT05GSUdfVlRXTV9WRVJTSU9OX1ZUODUwMCkgKz0gZGV2aWNlcy12dDg1MDAubworb2JqLSQoQ09ORklHX1ZUV01fVkVSU0lPTl9XTTg1MDUpICs9IGRldmljZXMtd204NTA1Lm8KKworb2JqLSQoQ09ORklHX01BQ0hfQlYwNykgKz0gYnYwNy5vCitvYmotJChDT05GSUdfTUFDSF9XTTg1MDVfN0lOX05FVEJPT0spICs9IHdtODUwNV83aW4ubworCitvYmotJChDT05GSUdfSEFWRV9QV00pICs9IHB3bS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFjYzRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDMgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDAwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4MDEwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2J2MDcuYyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2J2MDcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGEyNjFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvYnYwNy5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC12dDg1MDAvYnYwNy5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworc3RhdGljIHZvaWQgX19pb21lbSAqcG1jX2hpYmVyOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnZ0ODUwMF9kZXZpY2VfdWFydDAsCisJJnZ0ODUwMF9kZXZpY2VfbGNkYywKKwkmdnQ4NTAwX2RldmljZV9laGNpLAorCSZ2dDg1MDBfZGV2aWNlX2dlX3JvcHMsCisJJnZ0ODUwMF9kZXZpY2VfcHdtLAorCSZ2dDg1MDBfZGV2aWNlX3B3bWJsLAorCSZ2dDg1MDBfZGV2aWNlX3J0YywKK307CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9wb3dlcl9vZmYodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXdyaXRldyg1LCBwbWNfaGliZXIpOworCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzcsIGMwLCA0IiA6IDogInIiICgwKSk7Cit9CisKK3ZvaWQgX19pbml0IGJ2MDdfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19GQl9WVDg1MDAKKwl2b2lkIF9faW9tZW0gKmdwaW9fbXV4X3JlZyA9IGlvcmVtYXAod210X2dwaW9fYmFzZSArIDB4MjAwLCA0KTsKKwlpZiAoZ3Bpb19tdXhfcmVnKSB7CisJCXdyaXRlbChyZWFkbChncGlvX211eF9yZWcpIHwgMSwgZ3Bpb19tdXhfcmVnKTsKKwkJaW91bm1hcChncGlvX211eF9yZWcpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHJlbWFwIHRoZSBHUElPIG11eCByZWdpc3RlciwgZGlzcGxheSBtYXkgbm90IHdvcmsgcHJvcGVybHkhXG4iKTsKKwl9CisjZW5kaWYKKwlwbWNfaGliZXIgPSBpb3JlbWFwKHdtdF9wbWNfYmFzZSArIDB4MTIsIDIpOworCWlmIChwbWNfaGliZXIpCisJCXBtX3Bvd2VyX29mZiA9ICZ2dDg1MDBfcG93ZXJfb2ZmOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJQTUMgSGliZXJuYXRpb24gcmVnaXN0ZXIgY291bGQgbm90IGJlIHJlbWFwcGVkLCBub3QgZW5hYmxpbmcgcG93ZXIgb2ZmIVxuIik7CisKKwl2dDg1MDBfc2V0X3Jlc291cmNlcygpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCXZ0ODUwMF9ncGlvX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChCVjA3LCAiQmVuaWduIEJWMDcgTWluaSBOZXRib29rIikKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5yZXNlcnZlCT0gdnQ4NTAwX3Jlc2VydmVfbWVtLAorCS5tYXBfaW8JCT0gdnQ4NTAwX21hcF9pbywKKwkuaW5pdF9pcnEJPSB2dDg1MDBfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZ2dDg1MDBfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGJ2MDdfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLXZ0ODUwMC5jIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy12dDg1MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTUxOWFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy12dDg1MDAuYwpAQCAtMCwwICsxLDkxIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLXZ0ODUwMC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL3Z0ODUwMF9yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC92dDg1MDBfaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvaTgwNDIuaD4KKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3ZvaWQgX19pbml0IHZ0ODUwMF9zZXRfcmVzb3VyY2VzKHZvaWQpCit7CisJc3RydWN0IHJlc291cmNlIHRtcFszXTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhWVDg1MDBfTENEQ19CQVNFLCBTWl8xSyk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX0xDREMpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX2xjZGMsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX1VBUlQwX0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQwKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0MCwgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhWVDg1MDBfVUFSVDFfQkFTRSwgMHgxMDQwKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfVUFSVDEpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3VhcnQxLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFZUODUwMF9VQVJUMl9CQVNFLCAweDEwNDApOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9VQVJUMik7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfdWFydDIsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX1VBUlQzX0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQzKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0MywgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhWVDg1MDBfRUhDSV9CQVNFLCBTWl81MTIpOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9FSENJKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV9laGNpLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFZUODUwMF9HRUdFQV9CQVNFLCBTWl8yNTYpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX2dlX3JvcHMsIHRtcCwgMSk7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX1BXTV9CQVNFLCAweDQ0KTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV9wd20sIHRtcCwgMSk7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX1JUQ19CQVNFLCAweDJjKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfUlRDKTsKKwl0bXBbMl0gPSB3bXRfaXJxX3JlcyhJUlFfUlRDU00pOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3J0YywgdG1wLCAzKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHZ0ODUwMF9zZXRfZXh0ZXJucyh2b2lkKQoreworCS8qIE5vbi1yZXNvdXJjZS1hd2FyZSBzdHVmZiAqLworCXdtdF9pY19iYXNlID0gVlQ4NTAwX0lDX0JBU0U7CisJd210X2dwaW9fYmFzZSA9IFZUODUwMF9HUElPX0JBU0U7CisJd210X3BtY19iYXNlID0gVlQ4NTAwX1BNQ19CQVNFOworCXdtdF9pODA0Ml9iYXNlID0gVlQ4NTAwX1BTMl9CQVNFOworCisJd210X25yX2lycXMgPSBWVDg1MDBfTlJfSVJRUzsKKwl3bXRfdGltZXJfaXJxID0gSVJRX1BNQ09TMDsKKwl3bXRfZ3Bpb19leHRfaXJxWzBdID0gSVJRX0VYVDA7CisJd210X2dwaW9fZXh0X2lycVsxXSA9IElSUV9FWFQxOworCXdtdF9ncGlvX2V4dF9pcnFbMl0gPSBJUlFfRVhUMjsKKwl3bXRfZ3Bpb19leHRfaXJxWzNdID0gSVJRX0VYVDM7CisJd210X2dwaW9fZXh0X2lycVs0XSA9IElSUV9FWFQ0OworCXdtdF9ncGlvX2V4dF9pcnFbNV0gPSBJUlFfRVhUNTsKKwl3bXRfZ3Bpb19leHRfaXJxWzZdID0gSVJRX0VYVDY7CisJd210X2dwaW9fZXh0X2lycVs3XSA9IElSUV9FWFQ3OworCXdtdF9pODA0Ml9rYmRfaXJxID0gSVJRX1BTMktCRDsKKwl3bXRfaTgwNDJfYXV4X2lycSA9IElSUV9QUzJNT1VTRTsKK30KKwordm9pZCBfX2luaXQgdnQ4NTAwX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdCh3bXRfaW9fZGVzYywgQVJSQVlfU0laRSh3bXRfaW9fZGVzYykpOworCisJLyogU2hvdWxkIGJlIGRvbmUgYmVmb3JlIGludGVycnVwdHMgYW5kIHRpbWVycyBhcmUgaW5pdGlhbGl6ZWQgKi8KKwl2dDg1MDBfc2V0X2V4dGVybnMoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMtd204NTA1LmMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLXdtODUwNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNDU5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLXdtODUwNS5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMtd204NTA1LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvd204NTA1X3JlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3dtODUwNV9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9pODA0Mi5oPgorI2luY2x1ZGUgImRldmljZXMuaCIKKwordm9pZCBfX2luaXQgd204NTA1X3NldF9yZXNvdXJjZXModm9pZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgdG1wWzNdOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9HT1ZSX0JBU0UsIFNaXzUxMik7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2Vfd204NTA1X2ZiLCB0bXAsIDEpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9VQVJUMF9CQVNFLCAweDEwNDApOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9VQVJUMCk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfdWFydDAsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoV004NTA1X1VBUlQxX0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQxKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0MSwgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfVUFSVDJfQkFTRSwgMHgxMDQwKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfVUFSVDIpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3VhcnQyLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9VQVJUM19CQVNFLCAweDEwNDApOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9VQVJUMyk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfdWFydDMsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoV004NTA1X1VBUlQ0X0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQ0KTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0NCwgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfVUFSVDVfQkFTRSwgMHgxMDQwKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfVUFSVDUpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3VhcnQ1LCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9FSENJX0JBU0UsIFNaXzUxMik7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX0VIQ0kpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX2VoY2ksIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoV004NTA1X0dFR0VBX0JBU0UsIFNaXzI1Nik7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfZ2Vfcm9wcywgdG1wLCAxKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfUFdNX0JBU0UsIDB4NDQpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3B3bSwgdG1wLCAxKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfUlRDX0JBU0UsIDB4MmMpOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9SVEMpOworCXRtcFsyXSA9IHdtdF9pcnFfcmVzKElSUV9SVENTTSk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfcnRjLCB0bXAsIDMpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgd204NTA1X3NldF9leHRlcm5zKHZvaWQpCit7CisJLyogTm9uLXJlc291cmNlLWF3YXJlIHN0dWZmICovCisJd210X2ljX2Jhc2UgPSBXTTg1MDVfSUNfQkFTRTsKKwl3bXRfc2ljX2Jhc2UgPSBXTTg1MDVfU0lDX0JBU0U7CisJd210X2dwaW9fYmFzZSA9IFdNODUwNV9HUElPX0JBU0U7CisJd210X3BtY19iYXNlID0gV004NTA1X1BNQ19CQVNFOworCXdtdF9pODA0Ml9iYXNlID0gV004NTA1X1BTMl9CQVNFOworCisJd210X25yX2lycXMgPSBXTTg1MDVfTlJfSVJRUzsKKwl3bXRfdGltZXJfaXJxID0gSVJRX1BNQ09TMDsKKwl3bXRfZ3Bpb19leHRfaXJxWzBdID0gSVJRX0VYVDA7CisJd210X2dwaW9fZXh0X2lycVsxXSA9IElSUV9FWFQxOworCXdtdF9ncGlvX2V4dF9pcnFbMl0gPSBJUlFfRVhUMjsKKwl3bXRfZ3Bpb19leHRfaXJxWzNdID0gSVJRX0VYVDM7CisJd210X2dwaW9fZXh0X2lycVs0XSA9IElSUV9FWFQ0OworCXdtdF9ncGlvX2V4dF9pcnFbNV0gPSBJUlFfRVhUNTsKKwl3bXRfZ3Bpb19leHRfaXJxWzZdID0gSVJRX0VYVDY7CisJd210X2dwaW9fZXh0X2lycVs3XSA9IElSUV9FWFQ3OworCXdtdF9pODA0Ml9rYmRfaXJxID0gSVJRX1BTMktCRDsKKwl3bXRfaTgwNDJfYXV4X2lycSA9IElSUV9QUzJNT1VTRTsKK30KKwordm9pZCBfX2luaXQgd204NTA1X21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdCh3bXRfaW9fZGVzYywgQVJSQVlfU0laRSh3bXRfaW9fZGVzYykpOworCisJLyogU2hvdWxkIGJlIGRvbmUgYmVmb3JlIGludGVycnVwdHMgYW5kIHRpbWVycyBhcmUgaW5pdGlhbGl6ZWQgKi8KKwl3bTg1MDVfc2V0X2V4dGVybnMoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmNkYzM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy5jCkBAIC0wLDAgKzEsMjcwIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL3Z0ODUwMGZiLmg+CisjaW5jbHVkZSA8bWFjaC9pODA0Mi5oPgorI2luY2x1ZGUgImRldmljZXMuaCIKKworLyogVGhlc2UgY2FuJ3QgdXNlIHJlc291cmNlcyBjdXJyZW50bHkgKi8KK3Vuc2lnbmVkIGxvbmcgd210X2ljX2Jhc2UgX19pbml0ZGF0YTsKK3Vuc2lnbmVkIGxvbmcgd210X3NpY19iYXNlIF9faW5pdGRhdGE7Cit1bnNpZ25lZCBsb25nIHdtdF9ncGlvX2Jhc2UgX19pbml0ZGF0YTsKK3Vuc2lnbmVkIGxvbmcgd210X3BtY19iYXNlIF9faW5pdGRhdGE7Cit1bnNpZ25lZCBsb25nIHdtdF9pODA0Ml9iYXNlIF9faW5pdGRhdGE7CisKK2ludCB3bXRfbnJfaXJxcyBfX2luaXRkYXRhOworaW50IHdtdF90aW1lcl9pcnEgX19pbml0ZGF0YTsKK2ludCB3bXRfZ3Bpb19leHRfaXJxWzhdIF9faW5pdGRhdGE7CisKKy8qIFNob3VsZCByZW1haW4gYWNjZXNzaWJsZSBhZnRlciBpbml0LgorICogaTgwNDIgZHJpdmVyIGRlc3BlcmF0ZWx5IGNhbGxzIGZvciBhdHRlbnRpb24uLi4KKyAqLworaW50IHdtdF9pODA0Ml9rYmRfaXJxOworaW50IHdtdF9pODA0Ml9hdXhfaXJxOworCitzdGF0aWMgdTY0IGZiX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX2xjZGMgPSB7CisJLm5hbWUgICAgICAgICAgID0gInZ0ODUwMC1sY2QiLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawk9ICZmYl9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3dtODUwNV9mYiA9IHsKKwkubmFtZSAgICAgICAgICAgPSAid204NTA1LWZiIiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorfTsKKworLyogU21hbGxlc3QgdG8gbGFyZ2VzdCAqLworc3RhdGljIHN0cnVjdCB2dDg1MDBmYl9wbGF0Zm9ybV9kYXRhIHBhbmVsc1tdID0geworI2lmZGVmIENPTkZJR19XTVRfUEFORUxfODAwWDQ4MAoreworCS54cmVzX3ZpcnR1YWwJPSA4MDAsCisJLnlyZXNfdmlydHVhbAk9IDQ4MCAqIDIsCisJLm1vZGUJCT0geworCQkubmFtZQkJPSAiODAweDQ4MCIsCisJCS54cmVzCQk9IDgwMCwKKwkJLnlyZXMJCT0gNDgwLAorCQkubGVmdF9tYXJnaW4JPSA4OCwKKwkJLnJpZ2h0X21hcmdpbgk9IDQwLAorCQkudXBwZXJfbWFyZ2luCT0gMzIsCisJCS5sb3dlcl9tYXJnaW4JPSAxMSwKKwkJLmhzeW5jX2xlbgk9IDAsCisJCS52c3luY19sZW4JPSAxLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19XTVRfUEFORUxfODAwWDYwMAoreworCS54cmVzX3ZpcnR1YWwJPSA4MDAsCisJLnlyZXNfdmlydHVhbAk9IDYwMCAqIDIsCisJLm1vZGUJCT0geworCQkubmFtZQkJPSAiODAweDYwMCIsCisJCS54cmVzCQk9IDgwMCwKKwkJLnlyZXMJCT0gNjAwLAorCQkubGVmdF9tYXJnaW4JPSA4OCwKKwkJLnJpZ2h0X21hcmdpbgk9IDQwLAorCQkudXBwZXJfbWFyZ2luCT0gMzIsCisJCS5sb3dlcl9tYXJnaW4JPSAxMSwKKwkJLmhzeW5jX2xlbgk9IDAsCisJCS52c3luY19sZW4JPSAxLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19XTVRfUEFORUxfMTAyNFg1NzYKK3sKKwkueHJlc192aXJ0dWFsCT0gMTAyNCwKKwkueXJlc192aXJ0dWFsCT0gNTc2ICogMiwKKwkubW9kZQkJPSB7CisJCS5uYW1lCQk9ICIxMDI0eDU3NiIsCisJCS54cmVzCQk9IDEwMjQsCisJCS55cmVzCQk9IDU3NiwKKwkJLmxlZnRfbWFyZ2luCT0gNDAsCisJCS5yaWdodF9tYXJnaW4JPSAyNCwKKwkJLnVwcGVyX21hcmdpbgk9IDMyLAorCQkubG93ZXJfbWFyZ2luCT0gMTEsCisJCS5oc3luY19sZW4JPSA5NiwKKwkJLnZzeW5jX2xlbgk9IDIsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCit9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1dNVF9QQU5FTF8xMDI0WDYwMAoreworCS54cmVzX3ZpcnR1YWwJPSAxMDI0LAorCS55cmVzX3ZpcnR1YWwJPSA2MDAgKiAyLAorCS5tb2RlCQk9IHsKKwkJLm5hbWUJCT0gIjEwMjR4NjAwIiwKKwkJLnhyZXMJCT0gMTAyNCwKKwkJLnlyZXMJCT0gNjAwLAorCQkubGVmdF9tYXJnaW4JPSA2NiwKKwkJLnJpZ2h0X21hcmdpbgk9IDIsCisJCS51cHBlcl9tYXJnaW4JPSAxOSwKKwkJLmxvd2VyX21hcmdpbgk9IDEsCisJCS5oc3luY19sZW4JPSAyMywKKwkJLnZzeW5jX2xlbgk9IDgsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCit9LAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IGN1cnJlbnRfcGFuZWxfaWR4IF9faW5pdGRhdGEgPSBBUlJBWV9TSVpFKHBhbmVscykgLSAxOworCitzdGF0aWMgaW50IF9faW5pdCBwYW5lbF9zZXR1cChjaGFyICpzdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYW5lbHMpOyBpKyspIHsKKwkJaWYgKHN0cmNtcChwYW5lbHNbaV0ubW9kZS5uYW1lLCBzdHIpID09IDApIHsKKwkJCWN1cnJlbnRfcGFuZWxfaWR4ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAwOworfQorCitlYXJseV9wYXJhbSgicGFuZWwiLCBwYW5lbF9zZXR1cCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcmVhbGxvY2F0ZV9mYihzdHJ1Y3QgdnQ4NTAwZmJfcGxhdGZvcm1fZGF0YSAqcCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWxpZ24pIHsKKwlwLT52aWRlb19tZW1fbGVuID0gKHAtPnhyZXNfdmlydHVhbCAqIHAtPnlyZXNfdmlydHVhbCAqIDQpID4+CisJCQkocC0+YnBwID4gMTYgPyAwIDogKHAtPmJwcCA+IDggPyAxIDoKKwkJCQkJKDggLyBwLT5icHApICsgMSkpOworCXAtPnZpZGVvX21lbV9waHlzID0gKHVuc2lnbmVkIGxvbmcpbWVtYmxvY2tfYWxsb2MocC0+dmlkZW9fbWVtX2xlbiwKKwkJCQkJCQkgIGFsaWduKTsKKwlwLT52aWRlb19tZW1fdmlydCA9IHBoeXNfdG9fdmlydChwLT52aWRlb19tZW1fcGh5cyk7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0MCA9IHsKKwkubmFtZQkJPSAidnQ4NTAwX3NlcmlhbCIsCisJLmlkCQk9IDAsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDEgPSB7CisJLm5hbWUJCT0gInZ0ODUwMF9zZXJpYWwiLAorCS5pZAkJPSAxLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQyID0geworCS5uYW1lCQk9ICJ2dDg1MDBfc2VyaWFsIiwKKwkuaWQJCT0gMiwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0MyA9IHsKKwkubmFtZQkJPSAidnQ4NTAwX3NlcmlhbCIsCisJLmlkCQk9IDMsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDQgPSB7CisJLm5hbWUJCT0gInZ0ODUwMF9zZXJpYWwiLAorCS5pZAkJPSA0LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQ1ID0geworCS5uYW1lCQk9ICJ2dDg1MDBfc2VyaWFsIiwKKwkuaWQJCT0gNSwKK307CisKK3N0YXRpYyB1NjQgZWhjaV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9laGNpID0geworCS5uYW1lCQk9ICJ2dDg1MDAtZWhjaSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawk9ICZlaGNpX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfZ2Vfcm9wcyA9IHsKKwkubmFtZQkJPSAid210X2dlX3JvcHMiLAorCS5pZAkJPSAtMSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9wd20gPSB7CisJLm5hbWUJCT0gInZ0ODUwMC1wd20iLAorCS5pZAkJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgdnQ4NTAwX3B3bWJsX2RhdGEgPSB7CisJLnB3bV9pZAkJPSAwLAorCS5tYXhfYnJpZ2h0bmVzcwk9IDEyOCwKKwkuZGZ0X2JyaWdodG5lc3MgPSA3MCwKKwkucHdtX3BlcmlvZF9ucwk9IDI1MDAwMCwgLyogcmV2aXNpdCB3aGVuIGNsb2NrcyBhcmUgaW1wbGVtZW50ZWQgKi8KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9wd21ibCA9IHsKKwkubmFtZQkJPSAicHdtLWJhY2tsaWdodCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnZ0ODUwMF9wd21ibF9kYXRhLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfcnRjID0geworCS5uYW1lCQk9ICJ2dDg1MDAtcnRjIiwKKwkuaWQJCT0gMCwKK307CisKK3N0cnVjdCBtYXBfZGVzYyB3bXRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJLyogU29DIE1NSU8gcmVnaXN0ZXJzICovCisJWzBdID0geworCQkudmlydHVhbAk9IDB4ZjgwMDAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbigweGQ4MDAwMDAwKSwKKwkJLmxlbmd0aAkJPSAweDAwMzkwMDAwLCAvKiBtYXggb2YgYWxsIGNoaXAgdmFyaWFudHMgKi8KKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwkvKiBQQ0kgSS9PIHNwYWNlLCBudW1iZXJzIHRpZWQgdG8gdGhvc2UgaW4gPG1hY2gvaW8uaD4gKi8KKwlbMV0gPSB7CisJCS52aXJ0dWFsCT0gMHhmMDAwMDAwMCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4YzAwMDAwMDApLAorCQkubGVuZ3RoCQk9IFNaXzY0SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKK307CisKK3ZvaWQgX19pbml0IHZ0ODUwMF9yZXNlcnZlX21lbSh2b2lkKQoreworI2lmZGVmIENPTkZJR19GQl9WVDg1MDAKKwlwYW5lbHNbY3VycmVudF9wYW5lbF9pZHhdLmJwcCA9IDE2OyAvKiBBbHdheXMgdXNlIFJHQjU2NSAqLworCXByZWFsbG9jYXRlX2ZiKCZwYW5lbHNbY3VycmVudF9wYW5lbF9pZHhdLCBTWl80TSk7CisJdnQ4NTAwX2RldmljZV9sY2RjLmRldi5wbGF0Zm9ybV9kYXRhID0gJnBhbmVsc1tjdXJyZW50X3BhbmVsX2lkeF07CisjZW5kaWYKK30KKwordm9pZCBfX2luaXQgd204NTA1X3Jlc2VydmVfbWVtKHZvaWQpCit7CisjaWYgZGVmaW5lZCBDT05GSUdfRkJfV004NTA1CisJcGFuZWxzW2N1cnJlbnRfcGFuZWxfaWR4XS5icHAgPSAzMjsgLyogQWx3YXlzIHVzZSBSR0I4ODggKi8KKwlwcmVhbGxvY2F0ZV9mYigmcGFuZWxzW2N1cnJlbnRfcGFuZWxfaWR4XSwgMzIpOworCXZ0ODUwMF9kZXZpY2Vfd204NTA1X2ZiLmRldi5wbGF0Zm9ybV9kYXRhID0gJnBhbmVsc1tjdXJyZW50X3BhbmVsX2lkeF07CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODhkNGUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy5oCkBAIC0wLDAgKzEsODggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfVlQ4NTAwX0RFVklDRVNfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfVlQ4NTAwX0RFVklDRVNfSAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKK3ZvaWQgX19pbml0IHZ0ODUwMF9pbml0X2lycSh2b2lkKTsKK3ZvaWQgX19pbml0IHdtODUwNV9pbml0X2lycSh2b2lkKTsKK3ZvaWQgX19pbml0IHZ0ODUwMF9tYXBfaW8odm9pZCk7Cit2b2lkIF9faW5pdCB3bTg1MDVfbWFwX2lvKHZvaWQpOwordm9pZCBfX2luaXQgdnQ4NTAwX3Jlc2VydmVfbWVtKHZvaWQpOwordm9pZCBfX2luaXQgd204NTA1X3Jlc2VydmVfbWVtKHZvaWQpOwordm9pZCBfX2luaXQgdnQ4NTAwX2dwaW9faW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IHZ0ODUwMF9zZXRfcmVzb3VyY2VzKHZvaWQpOwordm9pZCBfX2luaXQgd204NTA1X3NldF9yZXNvdXJjZXModm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHdtdF9pY19iYXNlIF9faW5pdGRhdGE7CitleHRlcm4gdW5zaWduZWQgbG9uZyB3bXRfc2ljX2Jhc2UgX19pbml0ZGF0YTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHdtdF9ncGlvX2Jhc2UgX19pbml0ZGF0YTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHdtdF9wbWNfYmFzZSBfX2luaXRkYXRhOworCitleHRlcm4gaW50IHdtdF9ucl9pcnFzIF9faW5pdGRhdGE7CitleHRlcm4gaW50IHdtdF90aW1lcl9pcnEgX19pbml0ZGF0YTsKK2V4dGVybiBpbnQgd210X2dwaW9fZXh0X2lycVs4XSBfX2luaXRkYXRhOworCitleHRlcm4gc3RydWN0IG1hcF9kZXNjIHdtdF9pb19kZXNjWzJdIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlc291cmNlIHdtdF9tbWlvX3Jlcyh1MzIgc3RhcnQsIHUzMiBzaXplKQoreworCXN0cnVjdCByZXNvdXJjZSB0bXAgPSB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSBzdGFydCwKKwkJLmVuZCA9IHN0YXJ0ICsgc2l6ZSAtIDEsCisJfTsKKworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlc291cmNlIHdtdF9pcnFfcmVzKGludCBpcnEpCit7CisJc3RydWN0IHJlc291cmNlIHRtcCA9IHsKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJCS5zdGFydCA9IGlycSwKKwkJLmVuZCA9IGlycSwKKwl9OworCisJcmV0dXJuIHRtcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdtdF9yZXNfYWRkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBudW0pCit7CisJaWYgKHVubGlrZWx5KHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgbnVtKSkpCisJCXByX2VycigiRmFpbGVkIHRvIGFzc2lnbiByZXNvdXJjZXNcbiIpOworfQorCitleHRlcm4gc3RydWN0IHN5c190aW1lciB2dDg1MDBfdGltZXI7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0MjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDM7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQ0OworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0NTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9sY2RjOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV93bTg1MDVfZmI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX2VoY2k7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX2dlX3JvcHM7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3B3bTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfcHdtYmw7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3J0YzsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiY2MwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9ncGlvLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtdnQ4NTAwL2dwaW8uYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworI2RlZmluZSB0b192dDg1MDAoX19jaGlwKSBjb250YWluZXJfb2YoX19jaGlwLCBzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCwgY2hpcCkKKworI2RlZmluZSBFTkFCTEVfUkVHUwkweDAKKyNkZWZpbmUgRElSRUNUSU9OX1JFR1MJMHgyMAorI2RlZmluZSBPVVRWQUxVRV9SRUdTCTB4NDAKKyNkZWZpbmUgSU5WQUxVRV9SRUdTCTB4NjAKKworI2RlZmluZSBFWFRfUkVHT0ZGCTB4MWMKKworc3RhdGljIHZvaWQgX19pb21lbSAqcmVnYmFzZTsKKworc3RydWN0IHZ0ODUwMF9ncGlvX2NoaXAgeworCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKKwl1bnNpZ25lZCBpbnQJCXNoaWZ0OworCXVuc2lnbmVkIGludAkJcmVnb2ZmOworfTsKKworc3RhdGljIGludCBncGlvX3RvX2lycV9tYXBbOF07CisKK3N0YXRpYyBpbnQgdnQ4NTAwX211eGVkX2dwaW9fcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB2dDg1MDBfZ3Bpb19jaGlwICp2dDg1MDBfY2hpcCA9IHRvX3Z0ODUwMChjaGlwKTsKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgRU5BQkxFX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKTsKKworCXZhbCB8PSAoMSA8PCB2dDg1MDBfY2hpcC0+c2hpZnQgPDwgb2Zmc2V0KTsKKwl3cml0ZWwodmFsLCByZWdiYXNlICsgRU5BQkxFX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfbXV4ZWRfZ3Bpb19mcmVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB2dDg1MDBfZ3Bpb19jaGlwICp2dDg1MDBfY2hpcCA9IHRvX3Z0ODUwMChjaGlwKTsKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgRU5BQkxFX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKTsKKworCXZhbCAmPSB+KDEgPDwgdnQ4NTAwX2NoaXAtPnNoaWZ0IDw8IG9mZnNldCk7CisJd3JpdGVsKHZhbCwgcmVnYmFzZSArIEVOQUJMRV9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX211eGVkX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgICAgIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCAqdnQ4NTAwX2NoaXAgPSB0b192dDg1MDAoY2hpcCk7CisJdW5zaWduZWQgdmFsID0gcmVhZGwocmVnYmFzZSArIERJUkVDVElPTl9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwl2YWwgJj0gfigxIDw8IHZ0ODUwMF9jaGlwLT5zaGlmdCA8PCBvZmZzZXQpOworCXdyaXRlbCh2YWwsIHJlZ2Jhc2UgKyBESVJFQ1RJT05fUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX211eGVkX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCAqdnQ4NTAwX2NoaXAgPSB0b192dDg1MDAoY2hpcCk7CisJdW5zaWduZWQgdmFsID0gcmVhZGwocmVnYmFzZSArIERJUkVDVElPTl9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwl2YWwgfD0gKDEgPDwgdnQ4NTAwX2NoaXAtPnNoaWZ0IDw8IG9mZnNldCk7CisJd3JpdGVsKHZhbCwgcmVnYmFzZSArIERJUkVDVElPTl9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwlpZiAodmFsdWUpIHsKKwkJdmFsID0gcmVhZGwocmVnYmFzZSArIE9VVFZBTFVFX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKTsKKwkJdmFsIHw9ICgxIDw8IHZ0ODUwMF9jaGlwLT5zaGlmdCA8PCBvZmZzZXQpOworCQl3cml0ZWwodmFsLCByZWdiYXNlICsgT1VUVkFMVUVfUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dDg1MDBfbXV4ZWRfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgICAgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB2dDg1MDBfZ3Bpb19jaGlwICp2dDg1MDBfY2hpcCA9IHRvX3Z0ODUwMChjaGlwKTsKKworCXJldHVybiAocmVhZGwocmVnYmFzZSArIElOVkFMVUVfUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpCisJCT4+IHZ0ODUwMF9jaGlwLT5zaGlmdCA+PiBvZmZzZXQpICYgMTsKK30KKworc3RhdGljIHZvaWQgdnQ4NTAwX211eGVkX2dwaW9fc2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB2dDg1MDBfZ3Bpb19jaGlwICp2dDg1MDBfY2hpcCA9IHRvX3Z0ODUwMChjaGlwKTsKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgSU5WQUxVRV9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwlpZiAodmFsdWUpCisJCXZhbCB8PSAoMSA8PCB2dDg1MDBfY2hpcC0+c2hpZnQgPDwgb2Zmc2V0KTsKKwllbHNlCisJCXZhbCAmPSB+KDEgPDwgdnQ4NTAwX2NoaXAtPnNoaWZ0IDw8IG9mZnNldCk7CisKKwl3cml0ZWwodmFsLCByZWdiYXNlICsgSU5WQUxVRV9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7Cit9CisKKyNkZWZpbmUgVlQ4NTAwX0dQSU9fQkFOSyhfX25hbWUsIF9fc2hpZnQsIF9fb2ZmLCBfX2Jhc2UsIF9fbnVtKQkJXAorewkJCQkJCQkJCVwKKwkuY2hpcCA9IHsJCQkJCQkJXAorCQkubGFiZWwJCQk9IF9fbmFtZSwJCQlcCisJCS5yZXF1ZXN0CQk9IHZ0ODUwMF9tdXhlZF9ncGlvX3JlcXVlc3QsCVwKKwkJLmZyZWUJCQk9IHZ0ODUwMF9tdXhlZF9ncGlvX2ZyZWUsCVwKKwkJLmRpcmVjdGlvbl9pbnB1dCAgPSB2dDg1MDBfbXV4ZWRfZ3Bpb19kaXJlY3Rpb25faW5wdXQsCVwKKwkJLmRpcmVjdGlvbl9vdXRwdXQgPSB2dDg1MDBfbXV4ZWRfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAlcCisJCS5nZXQJCQk9IHZ0ODUwMF9tdXhlZF9ncGlvX2dldF92YWx1ZSwJXAorCQkuc2V0CQkJPSB2dDg1MDBfbXV4ZWRfZ3Bpb19zZXRfdmFsdWUsCVwKKwkJLmNhbl9zbGVlcAkJPSAwLAkJCQlcCisJCS5iYXNlCQkJPSBfX2Jhc2UsCQkJXAorCQkubmdwaW8JCQk9IF9fbnVtLAkJCVwKKwl9LAkJCQkJCQkJXAorCS5zaGlmdAkJPSBfX3NoaWZ0LAkJCQkJXAorCS5yZWdvZmYJCT0gX19vZmYsCQkJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCB2dDg1MDBfbXV4ZWRfZ3Bpb3NbXSA9IHsKKwlWVDg1MDBfR1BJT19CQU5LKCJ1YXJ0MCIsCTAsCTB4MCwJOCwJNCksCisJVlQ4NTAwX0dQSU9fQkFOSygidWFydDEiLAk0LAkweDAsCTEyLAk0KSwKKwlWVDg1MDBfR1BJT19CQU5LKCJzcGkwIiwJOCwJMHgwLAkxNiwJNCksCisJVlQ4NTAwX0dQSU9fQkFOSygic3BpMSIsCTEyLAkweDAsCTIwLAk0KSwKKwlWVDg1MDBfR1BJT19CQU5LKCJzcGkyIiwJMTYsCTB4MCwJMjQsCTQpLAorCVZUODUwMF9HUElPX0JBTksoInB3bW91dCIsCTI0LAkweDAsCTI4LAkyKSwKKworCVZUODUwMF9HUElPX0JBTksoInNkbW1jIiwJMCwJMHg0LAkzMCwJMTEpLAorCVZUODUwMF9HUElPX0JBTksoIm1zIiwJCTE2LAkweDQsCTQxLAk3KSwKKwlWVDg1MDBfR1BJT19CQU5LKCJpMmMwIiwJMjQsCTB4NCwJNDgsCTIpLAorCVZUODUwMF9HUElPX0JBTksoImkyYzEiLAkyNiwJMHg0LAk1MCwJMiksCisKKwlWVDg1MDBfR1BJT19CQU5LKCJtaWkiLAkJMCwJMHg4LAk1MiwJMjApLAorCVZUODUwMF9HUElPX0JBTksoInNlZSIsCQkyMCwJMHg4LAk3MiwJNCksCisJVlQ4NTAwX0dQSU9fQkFOSygiaWRlIiwJCTI0LAkweDgsCTc2LAk3KSwKKworCVZUODUwMF9HUElPX0JBTksoImNjaXIiLAkwLAkweGMsCTgzLAkxOSksCisKKwlWVDg1MDBfR1BJT19CQU5LKCJ0cyIsCQk4LAkweDEwLAkxMDIsCTExKSwKKworCVZUODUwMF9HUElPX0JBTksoImxjZCIsCQkwLAkweDE0LAkxMTMsCTIzKSwKK307CisKK3N0YXRpYyBpbnQgdnQ4NTAwX2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgICAgIHVuc2lnbmVkIG9mZnNldCkKK3sKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgRElSRUNUSU9OX1JFR1MgKyBFWFRfUkVHT0ZGKTsKKworCXZhbCAmPSB+KDEgPDwgb2Zmc2V0KTsKKwl3cml0ZWwodmFsLCByZWdiYXNlICsgRElSRUNUSU9OX1JFR1MgKyBFWFRfUkVHT0ZGKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dDg1MDBfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIHZhbCA9IHJlYWRsKHJlZ2Jhc2UgKyBESVJFQ1RJT05fUkVHUyArIEVYVF9SRUdPRkYpOworCisJdmFsIHw9ICgxIDw8IG9mZnNldCk7CisJd3JpdGVsKHZhbCwgcmVnYmFzZSArIERJUkVDVElPTl9SRUdTICsgRVhUX1JFR09GRik7CisKKwlpZiAodmFsdWUpIHsKKwkJdmFsID0gcmVhZGwocmVnYmFzZSArIE9VVFZBTFVFX1JFR1MgKyBFWFRfUkVHT0ZGKTsKKwkJdmFsIHw9ICgxIDw8IG9mZnNldCk7CisJCXdyaXRlbCh2YWwsIHJlZ2Jhc2UgKyBPVVRWQUxVRV9SRUdTICsgRVhUX1JFR09GRik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ0ODUwMF9ncGlvX2dldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgICB1bnNpZ25lZCBvZmZzZXQpCit7CisJcmV0dXJuIChyZWFkbChyZWdiYXNlICsgSU5WQUxVRV9SRUdTICsgRVhUX1JFR09GRikgPj4gb2Zmc2V0KSAmIDE7Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgT1VUVkFMVUVfUkVHUyArIEVYVF9SRUdPRkYpOworCisJaWYgKHZhbHVlKQorCQl2YWwgfD0gKDEgPDwgb2Zmc2V0KTsKKwllbHNlCisJCXZhbCAmPSB+KDEgPDwgb2Zmc2V0KTsKKworCXdyaXRlbCh2YWwsIHJlZ2Jhc2UgKyBPVVRWQUxVRV9SRUdTICsgRVhUX1JFR09GRik7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlpZiAob2Zmc2V0ID4gNykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZ3Bpb190b19pcnFfbWFwW29mZnNldF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHZ0ODUwMF9leHRlcm5hbF9ncGlvcyA9IHsKKwkubGFiZWwJCQk9ICJleHRncGlvIiwKKwkuZGlyZWN0aW9uX2lucHV0CT0gdnQ4NTAwX2dwaW9fZGlyZWN0aW9uX2lucHV0LAorCS5kaXJlY3Rpb25fb3V0cHV0CT0gdnQ4NTAwX2dwaW9fZGlyZWN0aW9uX291dHB1dCwKKwkuZ2V0CQkJPSB2dDg1MDBfZ3Bpb19nZXRfdmFsdWUsCisJLnNldAkJCT0gdnQ4NTAwX2dwaW9fc2V0X3ZhbHVlLAorCS50b19pcnEJCQk9IHZ0ODUwMF9ncGlvX3RvX2lycSwKKwkuY2FuX3NsZWVwCQk9IDAsCisJLmJhc2UJCQk9IDAsCisJLm5ncGlvCQkJPSA4LAorfTsKKwordm9pZCBfX2luaXQgdnQ4NTAwX2dwaW9faW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZ3Bpb190b19pcnFfbWFwW2ldID0gd210X2dwaW9fZXh0X2lycVtpXTsKKworCXJlZ2Jhc2UgPSBpb3JlbWFwKHdtdF9ncGlvX2Jhc2UsIFNaXzY0Syk7CisJaWYgKCFyZWdiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBNTUlPIHJlZ2lzdGVycyBmb3IgR1BJT1xuIik7CisJCXJldHVybjsKKwl9CisKKwlncGlvY2hpcF9hZGQoJnZ0ODUwMF9leHRlcm5hbF9ncGlvcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2dDg1MDBfbXV4ZWRfZ3Bpb3MpOyBpKyspCisJCWdwaW9jaGlwX2FkZCgmdnQ4NTAwX211eGVkX2dwaW9zW2ldLmNoaXApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTE5MTYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisJLm1hY3JvCWFkZHJ1YXJ0LCBycCwgcnYKKwltb3YJXHJwLCAgICAgICMweDAwMjAwMDAwCisJb3JyCVxydiwgXHJwLCAjMHhmODAwMDAwMAorCW9ycglccnAsIFxycCwgIzB4ZDgwMDAwMDAKKwkuZW5kbQorCisJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CisJc3RyYglccmQsIFtccngsICMwXQorCS5lbmRtCisKKwkubWFjcm8JYnVzeXVhcnQscmQscngKKzEwMDE6CWxkcglccmQsIFtccngsICMweDFjXQorCWFuZHMJXHJkLCBccmQsICMweDIKKwlibmUJMTAwMWIKKwkuZW5kbQorCisJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CisJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2ODRjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgVklBIFZUODUwMAorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKwkubWFjcm8JZGlzYWJsZV9maXEKKwkuZW5kbQorCisJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCUAgcGh5c2ljYWwgMHhkODE0MDAwMCBpcyB2aXJ0dWFsIDB4ZjgxNDAwMDAKKwltb3YJXGJhc2UsICMweGY4MDAwMDAwCisJb3JyCVxiYXNlLCBcYmFzZSwgIzB4MDAxNDAwMDAKKwkuZW5kbQorCisJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwlsZHIJXGlycW5yLCBbXGJhc2VdCisJY21wCVxpcnFuciwgIzYzIEAgbWF5IGJlIGZhbHNlIHBvc2l0aXZlLCBjaGVjayBpbnRlcnJ1cHQgc3RhdHVzCisJYm5lCTEwMDFmCisJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMweDg0XQorCWFuZHMJXGlycXN0YXQsICMweDgwMDAwMDAwCisJbW92ZXEJXGlycW5yLCAjMAorMTAwMToKKwkuZW5kbQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGZmMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUJX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCisjZGVmaW5lIGdwaW9fdG9faXJxCV9fZ3Bpb190b19pcnEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0MTYzZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pODA0Mi5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2k4MDQyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q3MTQzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pODA0Mi5oCkBAIC0wLDAgKzEsMTggQEAKKy8qIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pODA0Mi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyB3bXRfaTgwNDJfYmFzZSBfX2luaXRkYXRhOworZXh0ZXJuIGludCB3bXRfaTgwNDJfa2JkX2lycTsKK2V4dGVybiBpbnQgd210X2k4MDQyX2F1eF9pcnE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNzcyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMCwwICsxLDI4IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pby5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKKworI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKChhKSArIDB4ZjAwMDAwMDApCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI5ZmQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyogVGhpcyB2YWx1ZSBpcyBqdXN0IHRvIG1ha2UgdGhlIGNvcmUgaGFwcHksIG5ldmVyIHVzZWQgb3RoZXJ3aXNlICovCisjZGVmaW5lIE5SX0lSUVMgMTI4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1ZjkxNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKy8qCisgKiBQaHlzaWNhbCBEUkFNIG9mZnNldC4KKyAqLworI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmM3NTdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKi8KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyogUE0gU29mdHdhcmUgUmVzZXQgcmVxdWVzdCByZWdpc3RlciAqLworI2RlZmluZSBWVDg1MDBfUE1TUl9WSVJUCTB4ZjgxMzAwNjAKKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCXdyaXRlbCgxLCBWVDg1MDBfUE1TUl9WSVJUKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4N2U0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBNQUNIX1RJTUVYX0gKKyNkZWZpbmUgTUFDSF9USU1FWF9ICisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoMzAwMDAwMCkKKworI2VuZGlmIC8qIE1BQ0hfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI5ZTJkMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSwzNyBAQAorLyogYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1kb3ZlL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjZGVmaW5lIFVBUlQwX1BIWVMgMHhkODIwMDAwMAorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgdm9pZCBwdXRjKGNvbnN0IGNoYXIgYykKK3sKKwl3aGlsZSAocmVhZGIoVUFSVDBfUEhZUyArIDB4MWMpICYgMHgyKQorCQkvKiBUeCBidXN5LCB3YWl0IGFuZCBwb2xsICovOworCisJd3JpdGViKGMsIFVBUlQwX1BIWVMpOworfQorCitzdGF0aWMgdm9pZCBmbHVzaCh2b2lkKQoreworfQorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjQyMjkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNkZWZpbmUgVk1BTExPQ19FTkQJMHhkMDAwMDAwMFVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwX2lycXMuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBfaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZmVlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwX2lycXMuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBfaXJxcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qIFZUODUwMCBJbnRlcnJ1cHQgU291cmNlcyAqLworCisjZGVmaW5lIElSUV9KUEVHRU5DCTAJLyogSlBFRyBFbmNvZGVyICovCisjZGVmaW5lIElSUV9KUEVHREVDCTEJLyogSlBFRyBEZWNvZGVyICovCisJCQkJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSVJRX1BBVEEJMwkvKiBQQVRBIENvbnRyb2xsZXIgKi8KKwkJCQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBJUlFfRE1BCQk1CS8qIERNQSBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9FWFQwCTYJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDAgKi8KKyNkZWZpbmUgSVJRX0VYVDEJNwkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMSAqLworI2RlZmluZSBJUlFfR0UJCTgJLyogR3JhcGhpYyBFbmdpbmUgKi8KKyNkZWZpbmUgSVJRX0dPVgkJOQkvKiBHcmFwaGljIE92ZXJsYXkgRW5naW5lICovCisjZGVmaW5lIElSUV9FVEhFUgkxMAkvKiBFdGhlcm5ldCBNQUMgKi8KKyNkZWZpbmUgSVJRX01QRUdUUwkxMQkvKiBUcmFuc3BvcnQgU3RyZWFtIEludGVyZmFjZSAqLworI2RlZmluZSBJUlFfTENEQwkxMgkvKiBMQ0QgQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfRVhUMgkxMwkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMiAqLworI2RlZmluZSBJUlFfRVhUMwkxNAkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMyAqLworI2RlZmluZSBJUlFfRVhUNAkxNQkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgNCAqLworI2RlZmluZSBJUlFfQ0lQSEVSCTE2CS8qIENpcGhlciAqLworI2RlZmluZSBJUlFfVlBQCQkxNwkvKiBWaWRlbyBQb3N0LVByb2Nlc3NvciAqLworI2RlZmluZSBJUlFfSTJDMQkxOAkvKiBJMkMgMSAqLworI2RlZmluZSBJUlFfSTJDMAkxOQkvKiBJMkMgMCAqLworI2RlZmluZSBJUlFfU0RNTUMJMjAJLyogU0QvTU1DIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX1NETU1DX0RNQQkyMQkvKiBTRC9NTUMgQ29udHJvbGxlciBETUEgKi8KKyNkZWZpbmUgSVJRX1BNQ19XVQkyMgkvKiBQb3dlciBNYW5hZ2VtZW50IENvbnRyb2xsZXIgV2FrZXVwICovCisJCQkJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSVJRX1NQSTAJMjQJLyogU1BJIDAgKi8KKyNkZWZpbmUgSVJRX1NQSTEJMjUJLyogU1BJIDEgKi8KKyNkZWZpbmUgSVJRX1NQSTIJMjYJLyogU1BJIDIgKi8KKyNkZWZpbmUgSVJRX0xDRERGCTI3CS8qIExDRCBEYXRhIEZvcm1hdHRlciAqLworI2RlZmluZSBJUlFfTkFORAkyOAkvKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX05BTkRfRE1BCTI5CS8qIE5BTkQgRmxhc2ggQ29udHJvbGxlciBETUEgKi8KKyNkZWZpbmUgSVJRX01TCQkzMAkvKiBNZW1vcnlTdGljayBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9NU19ETUEJMzEJLyogTWVtb3J5U3RpY2sgQ29udHJvbGxlciBETUEgKi8KKyNkZWZpbmUgSVJRX1VBUlQwCTMyCS8qIFVBUlQgMCAqLworI2RlZmluZSBJUlFfVUFSVDEJMzMJLyogVUFSVCAxICovCisjZGVmaW5lIElSUV9JMlMJCTM0CS8qIEkyUyAqLworI2RlZmluZSBJUlFfUENNCQkzNQkvKiBQQ00gKi8KKyNkZWZpbmUgSVJRX1BNQ09TMAkzNgkvKiBQTUMgT1MgVGltZXIgMCAqLworI2RlZmluZSBJUlFfUE1DT1MxCTM3CS8qIFBNQyBPUyBUaW1lciAxICovCisjZGVmaW5lIElSUV9QTUNPUzIJMzgJLyogUE1DIE9TIFRpbWVyIDIgKi8KKyNkZWZpbmUgSVJRX1BNQ09TMwkzOQkvKiBQTUMgT1MgVGltZXIgMyAqLworI2RlZmluZSBJUlFfVlBVCQk0MAkvKiBWaWRlbyBQcm9jZXNzaW5nIFVuaXQgKi8KKyNkZWZpbmUgSVJRX1ZJRAkJNDEJLyogVmlkZW8gRGlnaXRhbCBJbnB1dCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSVJRX0FDOTcJNDIJLyogQUM5NyBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSVJRX0VIQ0kJNDMJLyogVVNCICovCisjZGVmaW5lIElSUV9OT1IJCTQ0CS8qIE5PUiBGbGFzaCBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9QUzJNT1VTRQk0NQkvKiBQUy8yIE1vdXNlICovCisjZGVmaW5lIElSUV9QUzJLQkQJNDYJLyogUFMvMiBLZXlib2FyZCAqLworI2RlZmluZSBJUlFfVUFSVDIJNDcJLyogVUFSVCAyICovCisjZGVmaW5lIElSUV9SVEMJCTQ4CS8qIFJUQyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1JUQ1NNCTQ5CS8qIFJUQyBTZWNvbmQvTWludXRlIFVwZGF0ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1VBUlQzCTUwCS8qIFVBUlQgMyAqLworI2RlZmluZSBJUlFfQURDCQk1MQkvKiBBREMgKi8KKyNkZWZpbmUgSVJRX0VYVDUJNTIJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDUgKi8KKyNkZWZpbmUgSVJRX0VYVDYJNTMJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDYgKi8KKyNkZWZpbmUgSVJRX0VYVDcJNTQJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDcgKi8KKyNkZWZpbmUgSVJRX0NJUgkJNTUJLyogQ0lSICovCisjZGVmaW5lIElSUV9ETUEwCTU2CS8qIERNQSBDaGFubmVsIDAgKi8KKyNkZWZpbmUgSVJRX0RNQTEJNTcJLyogRE1BIENoYW5uZWwgMSAqLworI2RlZmluZSBJUlFfRE1BMgk1OAkvKiBETUEgQ2hhbm5lbCAyICovCisjZGVmaW5lIElSUV9ETUEzCTU5CS8qIERNQSBDaGFubmVsIDMgKi8KKyNkZWZpbmUgSVJRX0RNQTQJNjAJLyogRE1BIENoYW5uZWwgNCAqLworI2RlZmluZSBJUlFfRE1BNQk2MQkvKiBETUEgQ2hhbm5lbCA1ICovCisjZGVmaW5lIElSUV9ETUE2CTYyCS8qIERNQSBDaGFubmVsIDYgKi8KKyNkZWZpbmUgSVJRX0RNQTcJNjMJLyogRE1BIENoYW5uZWwgNyAqLworCisjZGVmaW5lIFZUODUwMF9OUl9JUlFTCQk2NApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3Z0ODUwMF9yZWdzLmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWM2M2VjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3Z0ODUwMF9yZWdzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwX3JlZ3MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9WVDg1MDBfUkVHU19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX1ZUODUwMF9SRUdTX0gKKworLyogVlQ4NTAwIFJlZ2lzdGVycyBNYXAgKi8KKworI2RlZmluZSBWVDg1MDBfUkVHU19TVEFSVF9QSFlTCTB4ZDgwMDAwMDAJLyogU3RhcnQgb2YgTU1JTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVlQ4NTAwX1JFR1NfU1RBUlRfVklSVAkweGY4MDAwMDAwCS8qIFZpcnR1YWwgbWFwcGluZyBzdGFydCAqLworCisjZGVmaW5lIFZUODUwMF9ERFJfQkFTRQkJMHhkODAwMDAwMAkvKiAxawlERFIvRERSMiBNZW1vcnkKKwkJCQkJCQlDb250cm9sbGVyICovCisjZGVmaW5lIFZUODUwMF9ETUFfQkFTRQkJMHhkODAwMTAwMAkvKiAxawlETUEgQ29udHJvbGxlciAqLworI2RlZmluZSBWVDg1MDBfU0ZMQVNIX0JBU0UJMHhkODAwMjAwMAkvKiAxawlTZXJpYWwgRmxhc2ggTWVtb3J5CisJCQkJCQkJQ29udHJvbGxlciAqLworI2RlZmluZSBWVDg1MDBfRVRIRVJfQkFTRQkweGQ4MDA0MDAwCS8qIDFrCUV0aGVybmV0IE1BQyAwICovCisjZGVmaW5lIFZUODUwMF9DSVBIRVJfQkFTRQkweGQ4MDA2MDAwCS8qIDRrCUNpcGhlciAqLworI2RlZmluZSBWVDg1MDBfVVNCX0JBU0UJCTB4ZDgwMDc4MDAJLyogMmsJVVNCIE9URyAqLworIyBkZWZpbmUgVlQ4NTAwX0VIQ0lfQkFTRQkweGQ4MDA3OTAwCS8qCUVIQ0kgKi8KKyMgZGVmaW5lIFZUODUwMF9VSENJX0JBU0UJMHhkODAwN2IwMQkvKglVSENJICovCisjZGVmaW5lIFZUODUwMF9QQVRBX0JBU0UJMHhkODAwODAwMAkvKiA1MTIJUEFUQSAqLworI2RlZmluZSBWVDg1MDBfUFMyX0JBU0UJCTB4ZDgwMDg4MDAJLyogMWsJUFMvMiAqLworI2RlZmluZSBWVDg1MDBfTkFORF9CQVNFCTB4ZDgwMDkwMDAJLyogMWsJTkFORCBDb250cm9sbGVyICovCisjZGVmaW5lIFZUODUwMF9OT1JfQkFTRQkJMHhkODAwOTQwMAkvKiAxawlOT1IgQ29udHJvbGxlciAqLworI2RlZmluZSBWVDg1MDBfU0RNTUNfQkFTRQkweGQ4MDBhMDAwCS8qIDFrCVNEL01NQyBDb250cm9sbGVyICovCisjZGVmaW5lIFZUODUwMF9NU19CQVNFCQkweGQ4MDBiMDAwCS8qIDFrCU1TL01TUFJPIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVlQ4NTAwX0xDRENfQkFTRQkweGQ4MDBlNDAwCS8qIDFrCUxDRCBDb250cm9sbGVyICovCisjZGVmaW5lIFZUODUwMF9WUFVfQkFTRQkJMHhkODA1MDAwMAkvKiAyNTYJVlBVICovCisjZGVmaW5lIFZUODUwMF9HT1ZfQkFTRQkJMHhkODA1MDMwMAkvKiAyNTYJR09WICovCisjZGVmaW5lIFZUODUwMF9HRUdFQV9CQVNFCTB4ZDgwNTA0MDAJLyogNzY4CUdFL0dFIEFscGhhIE1peGluZyAqLworI2RlZmluZSBWVDg1MDBfTENERl9CQVNFCTB4ZDgwNTA5MDAJLyogMjU2CUxDRCBGb3JtYXR0ZXIgKi8KKyNkZWZpbmUgVlQ4NTAwX1ZJRF9CQVNFCQkweGQ4MDUwYTAwCS8qIDI1NglWSUQgKi8KKyNkZWZpbmUgVlQ4NTAwX1ZQUF9CQVNFCQkweGQ4MDUwYjAwCS8qIDI1NglWUFAgKi8KKyNkZWZpbmUgVlQ4NTAwX1RTQktfQkFTRQkweGQ4MGY0MDAwCS8qIDRrCVRTQksgKi8KKyNkZWZpbmUgVlQ4NTAwX0pQRUdERUNfQkFTRQkweGQ4MGZlMDAwCS8qIDRrCUpQRUcgRGVjb2RlciAqLworI2RlZmluZSBWVDg1MDBfSlBFR0VOQ19CQVNFCTB4ZDgwZmYwMDAJLyogNGsJSlBFRyBFbmNvZGVyICovCisjZGVmaW5lIFZUODUwMF9SVENfQkFTRQkJMHhkODEwMDAwMAkvKiA2NGsJUlRDICovCisjZGVmaW5lIFZUODUwMF9HUElPX0JBU0UJMHhkODExMDAwMAkvKiA2NGsJR1BJTyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIFZUODUwMF9TQ0NfQkFTRQkJMHhkODEyMDAwMAkvKiA2NGsJU3lzdGVtIENvbmZpZ3VyYXRpb24qLworI2RlZmluZSBWVDg1MDBfUE1DX0JBU0UJCTB4ZDgxMzAwMDAJLyogNjRrCVBNQyBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIFZUODUwMF9JQ19CQVNFCQkweGQ4MTQwMDAwCS8qIDY0awlJbnRlcnJ1cHQgQ29udHJvbGxlciovCisjZGVmaW5lIFZUODUwMF9VQVJUMF9CQVNFCTB4ZDgyMDAwMDAJLyogNjRrCVVBUlQgMCAqLworI2RlZmluZSBWVDg1MDBfVUFSVDJfQkFTRQkweGQ4MjEwMDAwCS8qIDY0awlVQVJUIDIgKi8KKyNkZWZpbmUgVlQ4NTAwX1BXTV9CQVNFCQkweGQ4MjIwMDAwCS8qIDY0awlQV00gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBWVDg1MDBfU1BJMF9CQVNFCTB4ZDgyNDAwMDAJLyogNjRrCVNQSSAwICovCisjZGVmaW5lIFZUODUwMF9TUEkxX0JBU0UJMHhkODI1MDAwMAkvKiA2NGsJU1BJIDEgKi8KKyNkZWZpbmUgVlQ4NTAwX0NJUl9CQVNFCQkweGQ4MjcwMDAwCS8qIDY0awlDSVIgKi8KKyNkZWZpbmUgVlQ4NTAwX0kyQzBfQkFTRQkweGQ4MjgwMDAwCS8qIDY0awlJMkMgMCAqLworI2RlZmluZSBWVDg1MDBfQUM5N19CQVNFCTB4ZDgyOTAwMDAJLyogNjRrCUFDOTcgKi8KKyNkZWZpbmUgVlQ4NTAwX1NQSTJfQkFTRQkweGQ4MmEwMDAwCS8qIDY0awlTUEkgMiAqLworI2RlZmluZSBWVDg1MDBfVUFSVDFfQkFTRQkweGQ4MmIwMDAwCS8qIDY0awlVQVJUIDEgKi8KKyNkZWZpbmUgVlQ4NTAwX1VBUlQzX0JBU0UJMHhkODJjMDAwMAkvKiA2NGsJVUFSVCAzICovCisjZGVmaW5lIFZUODUwMF9QQ01fQkFTRQkJMHhkODJkMDAwMAkvKiA2NGsJUENNICovCisjZGVmaW5lIFZUODUwMF9JMkMxX0JBU0UJMHhkODMyMDAwMAkvKiA2NGsJSTJDIDEgKi8KKyNkZWZpbmUgVlQ4NTAwX0kyU19CQVNFCQkweGQ4MzMwMDAwCS8qIDY0awlJMlMgKi8KKyNkZWZpbmUgVlQ4NTAwX0FEQ19CQVNFCQkweGQ4MzQwMDAwCS8qIDY0awlBREMgKi8KKworI2RlZmluZSBWVDg1MDBfUkVHU19FTkRfUEhZUwkweGQ4MzRmZmZmCS8qIEVuZCBvZiBNTUlPIHJlZ2lzdGVycyAqLworI2RlZmluZSBWVDg1MDBfUkVHU19MRU5HVEgJKFZUODUwMF9SRUdTX0VORF9QSFlTIFwKKwkJCQktIFZUODUwMF9SRUdTX1NUQVJUX1BIWVMgKyAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBmYi5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3Z0ODUwMGZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzOTljMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBmYi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiAgVlQ4NTAwL1dNODUwNSBGcmFtZSBCdWZmZXIgcGxhdGZvcm0gZGF0YSBkZWZpbml0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgRWQgU3Bpcmlkb25vdiA8ZWRvLnJ1c0BnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9WVDg1MDBGQl9ICisjZGVmaW5lIF9WVDg1MDBGQl9ICisKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCitzdHJ1Y3QgdnQ4NTAwZmJfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IGZiX3ZpZGVvbW9kZQltb2RlOworCXUzMgkJCXhyZXNfdmlydHVhbDsKKwl1MzIJCQl5cmVzX3ZpcnR1YWw7CisJdTMyCQkJYnBwOworCXVuc2lnbmVkIGxvbmcJCXZpZGVvX21lbV9waHlzOworCXZvaWQJCQkqdmlkZW9fbWVtX3ZpcnQ7CisJdW5zaWduZWQgbG9uZwkJdmlkZW9fbWVtX2xlbjsKK307CisKKyNlbmRpZiAvKiBfVlQ4NTAwRkJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvd204NTA1X2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTI4NjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9pcnFzLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9pcnFzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyogV004NTA1IEludGVycnVwdCBTb3VyY2VzICovCisKKyNkZWZpbmUgSVJRX1VIQ0kJMAkvKiBVSEMgRlMgKFVIQ0k/KSAqLworI2RlZmluZSBJUlFfRUhDSQkxCS8qIFVIQyBIUyAqLworI2RlZmluZSBJUlFfVURDRE1BCTIJLyogVURDIERNQSAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9QUzJNT1VTRQk0CS8qIFBTLzIgTW91c2UgKi8KKyNkZWZpbmUgSVJRX1VEQwkJNQkvKiBVREMgKi8KKyNkZWZpbmUgSVJRX0VYVDAJNgkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMCAqLworI2RlZmluZSBJUlFfRVhUMQk3CS8qIEV4dGVybmFsIEludGVycnVwdCAxICovCisjZGVmaW5lIElSUV9LRVlQQUQJOAkvKiBLZXlwYWQgKi8KKyNkZWZpbmUgSVJRX0RNQQkJOQkvKiBETUEgQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfRVRIRVIJMTAJLyogRXRoZXJuZXQgTUFDICovCisJCQkJLyogUmVzZXJ2ZWQgKi8KKwkJCQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBJUlFfRVhUMgkxMwkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMiAqLworI2RlZmluZSBJUlFfRVhUMwkxNAkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMyAqLworI2RlZmluZSBJUlFfRVhUNAkxNQkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgNCAqLworI2RlZmluZSBJUlFfQVBCCQkxNgkvKiBBUEIgQnJpZGdlICovCisjZGVmaW5lIElSUV9ETUEwCTE3CS8qIERNQSBDaGFubmVsIDAgKi8KKyNkZWZpbmUgSVJRX0kyQzEJMTgJLyogSTJDIDEgKi8KKyNkZWZpbmUgSVJRX0kyQzAJMTkJLyogSTJDIDAgKi8KKyNkZWZpbmUgSVJRX1NETU1DCTIwCS8qIFNEL01NQyBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9TRE1NQ19ETUEJMjEJLyogU0QvTU1DIENvbnRyb2xsZXIgRE1BICovCisjZGVmaW5lIElSUV9QTUNfV1UJMjIJLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sbGVyIFdha2V1cCAqLworI2RlZmluZSBJUlFfUFMyS0JECTIzCS8qIFBTLzIgS2V5Ym9hcmQgKi8KKyNkZWZpbmUgSVJRX1NQSTAJMjQJLyogU1BJIDAgKi8KKyNkZWZpbmUgSVJRX1NQSTEJMjUJLyogU1BJIDEgKi8KKyNkZWZpbmUgSVJRX1NQSTIJMjYJLyogU1BJIDIgKi8KKyNkZWZpbmUgSVJRX0RNQTEJMjcJLyogRE1BIENoYW5uZWwgMSAqLworI2RlZmluZSBJUlFfTkFORAkyOAkvKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX05BTkRfRE1BCTI5CS8qIE5BTkQgRmxhc2ggQ29udHJvbGxlciBETUEgKi8KKyNkZWZpbmUgSVJRX1VBUlQ1CTMwCS8qIFVBUlQgNSAqLworI2RlZmluZSBJUlFfVUFSVDQJMzEJLyogVUFSVCA0ICovCisjZGVmaW5lIElSUV9VQVJUMAkzMgkvKiBVQVJUIDAgKi8KKyNkZWZpbmUgSVJRX1VBUlQxCTMzCS8qIFVBUlQgMSAqLworI2RlZmluZSBJUlFfRE1BMgkzNAkvKiBETUEgQ2hhbm5lbCAyICovCisjZGVmaW5lIElSUV9JMlMJCTM1CS8qIEkyUyAqLworI2RlZmluZSBJUlFfUE1DT1MwCTM2CS8qIFBNQyBPUyBUaW1lciAwICovCisjZGVmaW5lIElSUV9QTUNPUzEJMzcJLyogUE1DIE9TIFRpbWVyIDEgKi8KKyNkZWZpbmUgSVJRX1BNQ09TMgkzOAkvKiBQTUMgT1MgVGltZXIgMiAqLworI2RlZmluZSBJUlFfUE1DT1MzCTM5CS8qIFBNQyBPUyBUaW1lciAzICovCisjZGVmaW5lIElSUV9ETUEzCTQwCS8qIERNQSBDaGFubmVsIDMgKi8KKyNkZWZpbmUgSVJRX0RNQTQJNDEJLyogRE1BIENoYW5uZWwgNCAqLworI2RlZmluZSBJUlFfQUM5Nwk0MgkvKiBBQzk3IEludGVyZmFjZSAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9OT1IJCTQ0CS8qIE5PUiBGbGFzaCBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9ETUE1CTQ1CS8qIERNQSBDaGFubmVsIDUgKi8KKyNkZWZpbmUgSVJRX0RNQTYJNDYJLyogRE1BIENoYW5uZWwgNiAqLworI2RlZmluZSBJUlFfVUFSVDIJNDcJLyogVUFSVCAyICovCisjZGVmaW5lIElSUV9SVEMJCTQ4CS8qIFJUQyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1JUQ1NNCTQ5CS8qIFJUQyBTZWNvbmQvTWludXRlIFVwZGF0ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1VBUlQzCTUwCS8qIFVBUlQgMyAqLworI2RlZmluZSBJUlFfRE1BNwk1MQkvKiBETUEgQ2hhbm5lbCA3ICovCisjZGVmaW5lIElSUV9FWFQ1CTUyCS8qIEV4dGVybmFsIEludGVycnVwdCA1ICovCisjZGVmaW5lIElSUV9FWFQ2CTUzCS8qIEV4dGVybmFsIEludGVycnVwdCA2ICovCisjZGVmaW5lIElSUV9FWFQ3CTU0CS8qIEV4dGVybmFsIEludGVycnVwdCA3ICovCisjZGVmaW5lIElSUV9DSVIJCTU1CS8qIENJUiAqLworI2RlZmluZSBJUlFfU0lDMAk1NgkvKiBTSUMgSVJRMCAqLworI2RlZmluZSBJUlFfU0lDMQk1NwkvKiBTSUMgSVJRMSAqLworI2RlZmluZSBJUlFfU0lDMgk1OAkvKiBTSUMgSVJRMiAqLworI2RlZmluZSBJUlFfU0lDMwk1OQkvKiBTSUMgSVJRMyAqLworI2RlZmluZSBJUlFfU0lDNAk2MAkvKiBTSUMgSVJRNCAqLworI2RlZmluZSBJUlFfU0lDNQk2MQkvKiBTSUMgSVJRNSAqLworI2RlZmluZSBJUlFfU0lDNgk2MgkvKiBTSUMgSVJRNiAqLworI2RlZmluZSBJUlFfU0lDNwk2MwkvKiBTSUMgSVJRNyAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9KUEVHREVDCTY1CS8qIEpQRUcgRGVjb2RlciAqLworI2RlZmluZSBJUlFfU0FFCQk2NgkvKiBTQUUgKD8pICovCisJCQkJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSVJRX1ZQVQkJNzkJLyogVmlkZW8gUHJvY2Vzc2luZyBVbml0ICovCisjZGVmaW5lIElSUV9WUFAJCTgwCS8qIFZpZGVvIFBvc3QtUHJvY2Vzc29yICovCisjZGVmaW5lIElSUV9WSUQJCTgxCS8qIFZpZGVvIERpZ2l0YWwgSW5wdXQgSW50ZXJmYWNlICovCisjZGVmaW5lIElSUV9TUFUJCTgyCS8qIFNQVSAoPykgKi8KKyNkZWZpbmUgSVJRX1BJUAkJODMJLyogUElQIEVycm9yICovCisjZGVmaW5lIElSUV9HRQkJODQJLyogR3JhcGhpYyBFbmdpbmUgKi8KKyNkZWZpbmUgSVJRX0dPVgkJODUJLyogR3JhcGhpYyBPdmVybGF5IEVuZ2luZSAqLworI2RlZmluZSBJUlFfRFZPCQk4NgkvKiBEaWdpdGFsIFZpZGVvIE91dHB1dCAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9ETUE4CTkyCS8qIERNQSBDaGFubmVsIDggKi8KKyNkZWZpbmUgSVJRX0RNQTkJOTMJLyogRE1BIENoYW5uZWwgOSAqLworI2RlZmluZSBJUlFfRE1BMTAJOTQJLyogRE1BIENoYW5uZWwgMTAgKi8KKyNkZWZpbmUgSVJRX0RNQTExCTk1CS8qIERNQSBDaGFubmVsIDExICovCisjZGVmaW5lIElSUV9ETUExMgk5NgkvKiBETUEgQ2hhbm5lbCAxMiAqLworI2RlZmluZSBJUlFfRE1BMTMJOTcJLyogRE1BIENoYW5uZWwgMTMgKi8KKyNkZWZpbmUgSVJRX0RNQTE0CTk4CS8qIERNQSBDaGFubmVsIDE0ICovCisjZGVmaW5lIElSUV9ETUExNQk5OQkvKiBETUEgQ2hhbm5lbCAxNSAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9HT1ZXCTExMQkvKiBHT1ZXICg/KSAqLworI2RlZmluZSBJUlFfR09WUlNEU0NECTExMgkvKiBHT1ZSIFNEU0NEICg/KSAqLworI2RlZmluZSBJUlFfR09WUlNETUlGCTExMwkvKiBHT1ZSIFNETUlGICg/KSAqLworI2RlZmluZSBJUlFfR09WUkhEU0NECTExNAkvKiBHT1ZSIEhEU0NEICg/KSAqLworI2RlZmluZSBJUlFfR09WUkhETUlGCTExNQkvKiBHT1ZSIEhETUlGICg/KSAqLworCisjZGVmaW5lIFdNODUwNV9OUl9JUlFTCQkxMTYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC93bTg1MDVfcmVncy5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxNTUwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC93bTg1MDVfcmVncy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9yZWdzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfV004NTA1X1JFR1NfSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9XTTg1MDVfUkVHU19ICisKKy8qIFdNODUwNSBSZWdpc3RlcnMgTWFwICovCisKKyNkZWZpbmUgV004NTA1X1JFR1NfU1RBUlRfUEhZUwkweGQ4MDAwMDAwCS8qIFN0YXJ0IG9mIE1NSU8gcmVnaXN0ZXJzICovCisjZGVmaW5lIFdNODUwNV9SRUdTX1NUQVJUX1ZJUlQJMHhmODAwMDAwMAkvKiBWaXJ0dWFsIG1hcHBpbmcgc3RhcnQgKi8KKworI2RlZmluZSBXTTg1MDVfRERSX0JBU0UJCTB4ZDgwMDA0MDAJLyogMWsJRERSL0REUjIgTWVtb3J5CisJCQkJCQkJQ29udHJvbGxlciAqLworI2RlZmluZSBXTTg1MDVfRE1BX0JBU0UJCTB4ZDgwMDE4MDAJLyogMWsJRE1BIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgV004NTA1X1ZETUFfQkFTRQkweGQ4MDAxYzAwCS8qIDFrCVZETUEgKi8KKyNkZWZpbmUgV004NTA1X1NGTEFTSF9CQVNFCTB4ZDgwMDIwMDAJLyogMWsJU2VyaWFsIEZsYXNoIE1lbW9yeQorCQkJCQkJCUNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgV004NTA1X0VUSEVSX0JBU0UJMHhkODAwNDAwMAkvKiAxawlFdGhlcm5ldCBNQUMgMCAqLworI2RlZmluZSBXTTg1MDVfQ0lQSEVSX0JBU0UJMHhkODAwNjAwMAkvKiA0awlDaXBoZXIgKi8KKyNkZWZpbmUgV004NTA1X1VTQl9CQVNFCQkweGQ4MDA3MDAwCS8qIDJrCVVTQiAyLjAgSG9zdCAqLworIyBkZWZpbmUgV004NTA1X0VIQ0lfQkFTRQkweGQ4MDA3MTAwCS8qCUVIQ0kgKi8KKyMgZGVmaW5lIFdNODUwNV9VSENJX0JBU0UJMHhkODAwNzMwMQkvKglVSENJICovCisjZGVmaW5lIFdNODUwNV9QUzJfQkFTRQkJMHhkODAwODgwMAkvKiAxawlQUy8yICovCisjZGVmaW5lIFdNODUwNV9OQU5EX0JBU0UJMHhkODAwOTAwMAkvKiAxawlOQU5EIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgV004NTA1X05PUl9CQVNFCQkweGQ4MDA5NDAwCS8qIDFrCU5PUiBDb250cm9sbGVyICovCisjZGVmaW5lIFdNODUwNV9TRE1NQ19CQVNFCTB4ZDgwMGEwMDAJLyogMWsJU0QvTU1DIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgV004NTA1X1ZQVV9CQVNFCQkweGQ4MDUwMDAwCS8qIDI1NglWUFUgKi8KKyNkZWZpbmUgV004NTA1X0dPVl9CQVNFCQkweGQ4MDUwMzAwCS8qIDI1NglHT1YgKi8KKyNkZWZpbmUgV004NTA1X0dFR0VBX0JBU0UJMHhkODA1MDQwMAkvKiA3NjgJR0UvR0UgQWxwaGEgTWl4aW5nICovCisjZGVmaW5lIFdNODUwNV9HT1ZSX0JBU0UJMHhkODA1MDgwMAkvKiA1MTIJR09WUiAoZnJhbWJ1ZmZlcikgKi8KKyNkZWZpbmUgV004NTA1X1ZJRF9CQVNFCQkweGQ4MDUwYTAwCS8qIDI1NglWSUQgKi8KKyNkZWZpbmUgV004NTA1X1NDTF9CQVNFCQkweGQ4MDUwZDAwCS8qIDI1NglTQ0wgKi8KKyNkZWZpbmUgV004NTA1X1ZQUF9CQVNFCQkweGQ4MDUwZjAwCS8qIDI1NglWUFAgKi8KKyNkZWZpbmUgV004NTA1X0pQRUdERUNfQkFTRQkweGQ4MGZlMDAwCS8qIDRrCUpQRUcgRGVjb2RlciAqLworI2RlZmluZSBXTTg1MDVfUlRDX0JBU0UJCTB4ZDgxMDAwMDAJLyogNjRrCVJUQyAqLworI2RlZmluZSBXTTg1MDVfR1BJT19CQVNFCTB4ZDgxMTAwMDAJLyogNjRrCUdQSU8gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBXTTg1MDVfU0NDX0JBU0UJCTB4ZDgxMjAwMDAJLyogNjRrCVN5c3RlbSBDb25maWd1cmF0aW9uKi8KKyNkZWZpbmUgV004NTA1X1BNQ19CQVNFCQkweGQ4MTMwMDAwCS8qIDY0awlQTUMgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBXTTg1MDVfSUNfQkFTRQkJMHhkODE0MDAwMAkvKiA2NGsJSW50ZXJydXB0IENvbnRyb2xsZXIqLworI2RlZmluZSBXTTg1MDVfU0lDX0JBU0UJCTB4ZDgxNTAwMDAJLyogNjRrCVNlY29uZGFyeSBJQyAqLworI2RlZmluZSBXTTg1MDVfVUFSVDBfQkFTRQkweGQ4MjAwMDAwCS8qIDY0awlVQVJUIDAgKi8KKyNkZWZpbmUgV004NTA1X1VBUlQyX0JBU0UJMHhkODIxMDAwMAkvKiA2NGsJVUFSVCAyICovCisjZGVmaW5lIFdNODUwNV9QV01fQkFTRQkJMHhkODIyMDAwMAkvKiA2NGsJUFdNIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgV004NTA1X1NQSTBfQkFTRQkweGQ4MjQwMDAwCS8qIDY0awlTUEkgMCAqLworI2RlZmluZSBXTTg1MDVfU1BJMV9CQVNFCTB4ZDgyNTAwMDAJLyogNjRrCVNQSSAxICovCisjZGVmaW5lIFdNODUwNV9LRVlQQURfQkFTRQkweGQ4MjYwMDAwCS8qIDY0awlLZXlwYWQgY29udHJvbCAqLworI2RlZmluZSBXTTg1MDVfQ0lSX0JBU0UJCTB4ZDgyNzAwMDAJLyogNjRrCUNJUiAqLworI2RlZmluZSBXTTg1MDVfSTJDMF9CQVNFCTB4ZDgyODAwMDAJLyogNjRrCUkyQyAwICovCisjZGVmaW5lIFdNODUwNV9BQzk3X0JBU0UJMHhkODI5MDAwMAkvKiA2NGsJQUM5NyAqLworI2RlZmluZSBXTTg1MDVfU1BJMl9CQVNFCTB4ZDgyYTAwMDAJLyogNjRrCVNQSSAyICovCisjZGVmaW5lIFdNODUwNV9VQVJUMV9CQVNFCTB4ZDgyYjAwMDAJLyogNjRrCVVBUlQgMSAqLworI2RlZmluZSBXTTg1MDVfVUFSVDNfQkFTRQkweGQ4MmMwMDAwCS8qIDY0awlVQVJUIDMgKi8KKyNkZWZpbmUgV004NTA1X0kyQzFfQkFTRQkweGQ4MzIwMDAwCS8qIDY0awlJMkMgMSAqLworI2RlZmluZSBXTTg1MDVfSTJTX0JBU0UJCTB4ZDgzMzAwMDAJLyogNjRrCUkyUyAqLworI2RlZmluZSBXTTg1MDVfVUFSVDRfQkFTRQkweGQ4MzcwMDAwCS8qIDY0awlVQVJUIDQgKi8KKyNkZWZpbmUgV004NTA1X1VBUlQ1X0JBU0UJMHhkODM4MDAwMAkvKiA2NGsJVUFSVCA1ICovCisKKyNkZWZpbmUgV004NTA1X1JFR1NfRU5EX1BIWVMJMHhkODM4ZmZmZgkvKiBFbmQgb2YgTU1JTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgV004NTA1X1JFR1NfTEVOR1RICShXTTg1MDVfUkVHU19FTkRfUEhZUyBcCisJCQkJLSBXTTg1MDVfUkVHU19TVEFSVF9QSFlTICsgMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNGRkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pcnEuYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pcnEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworI2RlZmluZSBWVDg1MDBfSUNfRENUUgkJMHg0MAkJLyogRGVzdGluYXRpb24gY29udHJvbAorCQkJCQkJcmVnaXN0ZXIsIDY0KnU4ICovCisjZGVmaW5lIFZUODUwMF9JTlRfRU5BQkxFCSgxIDw8IDMpCisjZGVmaW5lIFZUODUwMF9UUklHR0VSX0hJR0gJKDAgPDwgNCkKKyNkZWZpbmUgVlQ4NTAwX1RSSUdHRVJfUklTSU5HCSgxIDw8IDQpCisjZGVmaW5lIFZUODUwMF9UUklHR0VSX0ZBTExJTkcJKDIgPDwgNCkKKyNkZWZpbmUgVlQ4NTAwX0VER0UJCSggVlQ4NTAwX1RSSUdHRVJfUklTSU5HIFwKKwkJCQl8IFZUODUwMF9UUklHR0VSX0ZBTExJTkcpCisjZGVmaW5lIFZUODUwMF9JQ19TVEFUVVMJMHg4MAkJLyogSW50ZXJydXB0IHN0YXR1cywgMip1MzIgKi8KKworc3RhdGljIHZvaWQgX19pb21lbSAqaWNfcmVnYmFzZTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnNpY19yZWdiYXNlOworCitzdGF0aWMgdm9pZCB2dDg1MDBfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBpY19yZWdiYXNlOworCXU4IGVkZ2U7CisKKwlpZiAoaXJxID49IDY0KSB7CisJCWJhc2UgPSBzaWNfcmVnYmFzZTsKKwkJaXJxIC09IDY0OworCX0KKwllZGdlID0gcmVhZGIoYmFzZSArIFZUODUwMF9JQ19EQ1RSICsgaXJxKSAmIFZUODUwMF9FREdFOworCWlmIChlZGdlKSB7CisJCXZvaWQgX19pb21lbSAqc3RhdF9yZWcgPSBiYXNlICsgVlQ4NTAwX0lDX1NUQVRVUworCQkJCQkJKyAoaXJxIDwgMzIgPyAwIDogNCk7CisJCXVuc2lnbmVkIHN0YXR1cyA9IHJlYWRsKHN0YXRfcmVnKTsKKworCQlzdGF0dXMgfD0gKDEgPDwgKGlycSAmIDB4MWYpKTsKKwkJd3JpdGVsKHN0YXR1cywgc3RhdF9yZWcpOworCX0gZWxzZSB7CisJCXU4IGRjdHIgPSByZWFkYihiYXNlICsgVlQ4NTAwX0lDX0RDVFIgKyBpcnEpOworCisJCWRjdHIgJj0gflZUODUwMF9JTlRfRU5BQkxFOworCQl3cml0ZWIoZGN0ciwgYmFzZSArIFZUODUwMF9JQ19EQ1RSICsgaXJxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaWNfcmVnYmFzZTsKKwl1OCBkY3RyOworCisJaWYgKGlycSA+PSA2NCkgeworCQliYXNlID0gc2ljX3JlZ2Jhc2U7CisJCWlycSAtPSA2NDsKKwl9CisJZGN0ciA9IHJlYWRiKGJhc2UgKyBWVDg1MDBfSUNfRENUUiArIGlycSk7CisJZGN0ciB8PSBWVDg1MDBfSU5UX0VOQUJMRTsKKwl3cml0ZWIoZGN0ciwgYmFzZSArIFZUODUwMF9JQ19EQ1RSICsgaXJxKTsKK30KKworc3RhdGljIGludCB2dDg1MDBfaXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaWNfcmVnYmFzZTsKKwl1bnNpZ25lZCBpbnQgb3JpZ19pcnEgPSBpcnE7CisJdTggZGN0cjsKKworCWlmIChpcnEgPj0gNjQpIHsKKwkJYmFzZSA9IHNpY19yZWdiYXNlOworCQlpcnEgLT0gNjQ7CisJfQorCisJZGN0ciA9IHJlYWRiKGJhc2UgKyBWVDg1MDBfSUNfRENUUiArIGlycSk7CisJZGN0ciAmPSB+VlQ4NTAwX0VER0U7CisKKwlzd2l0Y2ggKGZsb3dfdHlwZSkgeworCWNhc2UgSVJRRl9UUklHR0VSX0xPVzoKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBJUlFGX1RSSUdHRVJfSElHSDoKKwkJZGN0ciB8PSBWVDg1MDBfVFJJR0dFUl9ISUdIOworCQlpcnFfZGVzY1tvcmlnX2lycV0uaGFuZGxlX2lycSA9IGhhbmRsZV9sZXZlbF9pcnE7CisJCWJyZWFrOworCWNhc2UgSVJRRl9UUklHR0VSX0ZBTExJTkc6CisJCWRjdHIgfD0gVlQ4NTAwX1RSSUdHRVJfRkFMTElORzsKKwkJaXJxX2Rlc2Nbb3JpZ19pcnFdLmhhbmRsZV9pcnEgPSBoYW5kbGVfZWRnZV9pcnE7CisJCWJyZWFrOworCWNhc2UgSVJRRl9UUklHR0VSX1JJU0lORzoKKwkJZGN0ciB8PSBWVDg1MDBfVFJJR0dFUl9SSVNJTkc7CisJCWlycV9kZXNjW29yaWdfaXJxXS5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOworCQlicmVhazsKKwl9CisJd3JpdGViKGRjdHIsIGJhc2UgKyBWVDg1MDBfSUNfRENUUiArIGlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB2dDg1MDBfaXJxX2NoaXAgPSB7CisJLm5hbWUgICAgICA9ICJ2dDg1MDAiLAorCS5hY2sgICAgICAgPSB2dDg1MDBfaXJxX21hc2ssCisJLm1hc2sgICAgICA9IHZ0ODUwMF9pcnFfbWFzaywKKwkudW5tYXNrICAgID0gdnQ4NTAwX2lycV91bm1hc2ssCisJLnNldF90eXBlICA9IHZ0ODUwMF9pcnFfc2V0X3R5cGUsCit9OworCit2b2lkIF9faW5pdCB2dDg1MDBfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWljX3JlZ2Jhc2UgPSBpb3JlbWFwKHdtdF9pY19iYXNlLCBTWl82NEspOworCisJaWYgKGljX3JlZ2Jhc2UpIHsKKwkJLyogRW5hYmxlIHJvdGF0aW5nIHByaW9yaXR5IGZvciBJUlEgKi8KKwkJd3JpdGVsKCgxIDw8IDYpLCBpY19yZWdiYXNlICsgMHgyMCk7CisJCXdyaXRlbCgwLCBpY19yZWdiYXNlICsgMHgyNCk7CisKKwkJZm9yIChpID0gMDsgaSA8IHdtdF9ucl9pcnFzOyBpKyspIHsKKwkJCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgYW5kIHJvdXRlIHRoZW0gdG8gSVJRICovCisJCQl3cml0ZWIoMHgwMCwgaWNfcmVnYmFzZSArIFZUODUwMF9JQ19EQ1RSICsgaSk7CisKKwkJCXNldF9pcnFfY2hpcChpLCAmdnQ4NTAwX2lycV9jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZW1hcCB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgcmVnaXN0ZXJzLCBub3QgZW5hYmxpbmcgSVJRcyFcbiIpOworCX0KK30KKwordm9pZCBfX2luaXQgd204NTA1X2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpY19yZWdiYXNlID0gaW9yZW1hcCh3bXRfaWNfYmFzZSwgU1pfNjRLKTsKKwlzaWNfcmVnYmFzZSA9IGlvcmVtYXAod210X3NpY19iYXNlLCBTWl82NEspOworCisJaWYgKGljX3JlZ2Jhc2UgJiYgc2ljX3JlZ2Jhc2UpIHsKKwkJLyogRW5hYmxlIHJvdGF0aW5nIHByaW9yaXR5IGZvciBJUlEgKi8KKwkJd3JpdGVsKCgxIDw8IDYpLCBpY19yZWdiYXNlICsgMHgyMCk7CisJCXdyaXRlbCgwLCBpY19yZWdiYXNlICsgMHgyNCk7CisJCXdyaXRlbCgoMSA8PCA2KSwgc2ljX3JlZ2Jhc2UgKyAweDIwKTsKKwkJd3JpdGVsKDAsIHNpY19yZWdiYXNlICsgMHgyNCk7CisKKwkJZm9yIChpID0gMDsgaSA8IHdtdF9ucl9pcnFzOyBpKyspIHsKKwkJCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgYW5kIHJvdXRlIHRoZW0gdG8gSVJRICovCisJCQlpZiAoaSA8IDY0KQorCQkJCXdyaXRlYigweDAwLCBpY19yZWdiYXNlICsgVlQ4NTAwX0lDX0RDVFIgKyBpKTsKKwkJCWVsc2UKKwkJCQl3cml0ZWIoMHgwMCwgc2ljX3JlZ2Jhc2UgKyBWVDg1MDBfSUNfRENUUgorCQkJCQkJCQkrIGkgLSA2NCk7CisKKwkJCXNldF9pcnFfY2hpcChpLCAmdnQ4NTAwX2lycV9jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZW1hcCB0aGUgSW50ZXJydXB0IENvbnRyb2xsZXIgcmVnaXN0ZXJzLCBub3QgZW5hYmxpbmcgSVJRcyFcbiIpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL3B3bS5jIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvcHdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkODI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL3B3bS5jCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogYXJjaC9hcm0vbWFjaC12dDg1MDAvcHdtLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wd20uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNkZWZpbmUgVlQ4NTAwX05SX1BXTVMgNAorCitzdGF0aWMgREVGSU5FX01VVEVYKHB3bV9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQocHdtX2xpc3QpOworCitzdHJ1Y3QgcHdtX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CisKKwljb25zdCBjaGFyCSpsYWJlbDsKKworCXZvaWQgX19pb21lbQkqcmVnYmFzZTsKKworCXVuc2lnbmVkIGludAl1c2VfY291bnQ7CisJdW5zaWduZWQgaW50CXB3bV9pZDsKK307CisKKyNkZWZpbmUgbXNlY3NfdG9fbG9vcHModCkgKGxvb3BzX3Blcl9qaWZmeSAvIDEwMDAgKiBIWiAqIHQpCitzdGF0aWMgaW5saW5lIHZvaWQgcHdtX2J1c3lfd2FpdCh2b2lkIF9faW9tZW0gKnJlZywgdTggYml0bWFzaykKK3sKKwlpbnQgbG9vcHMgPSBtc2Vjc190b19sb29wcygxMCk7CisJd2hpbGUgKChyZWFkYihyZWcpICYgYml0bWFzaykgJiYgLS1sb29wcykKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAodW5saWtlbHkoIWxvb3BzKSkKKwkJcHJfd2FybmluZygiV2FpdGluZyBmb3Igc3RhdHVzIGJpdHMgMHgleCB0byBjbGVhciB0aW1lZCBvdXRcbiIsCisJCQkgICBiaXRtYXNrKTsKK30KKworaW50IHB3bV9jb25maWcoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwgaW50IGR1dHlfbnMsIGludCBwZXJpb2RfbnMpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGM7CisJdW5zaWduZWQgbG9uZyBwZXJpb2RfY3ljbGVzLCBwcmVzY2FsZSwgcHYsIGRjOworCisJaWYgKHB3bSA9PSBOVUxMIHx8IHBlcmlvZF9ucyA9PSAwIHx8IGR1dHlfbnMgPiBwZXJpb2RfbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJYyA9IDI1MDAwMDAwLzI7IC8qIHdpbGQgZ3Vlc3MgLS0tIG5lZWQgdG8gaW1wbGVtZW50IGNsb2NrcyAqLworCWMgPSBjICogcGVyaW9kX25zOworCWRvX2RpdihjLCAxMDAwMDAwMDAwKTsKKwlwZXJpb2RfY3ljbGVzID0gYzsKKworCWlmIChwZXJpb2RfY3ljbGVzIDwgMSkKKwkJcGVyaW9kX2N5Y2xlcyA9IDE7CisJcHJlc2NhbGUgPSAocGVyaW9kX2N5Y2xlcyAtIDEpIC8gNDA5NjsKKwlwdiA9IHBlcmlvZF9jeWNsZXMgLyAocHJlc2NhbGUgKyAxKSAtIDE7CisJaWYgKHB2ID4gNDA5NSkKKwkJcHYgPSA0MDk1OworCisJaWYgKHByZXNjYWxlID4gMTAyMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljID0gKHVuc2lnbmVkIGxvbmcgbG9uZylwdiAqIGR1dHlfbnM7CisJZG9fZGl2KGMsIHBlcmlvZF9ucyk7CisJZGMgPSBjOworCisJcHdtX2J1c3lfd2FpdChwd20tPnJlZ2Jhc2UgKyAweDQwICsgcHdtLT5wd21faWQsICgxIDw8IDEpKTsKKwl3cml0ZWwocHJlc2NhbGUsIHB3bS0+cmVnYmFzZSArIDB4NCArIChwd20tPnB3bV9pZCA8PCA0KSk7CisKKwlwd21fYnVzeV93YWl0KHB3bS0+cmVnYmFzZSArIDB4NDAgKyBwd20tPnB3bV9pZCwgKDEgPDwgMikpOworCXdyaXRlbChwdiwgcHdtLT5yZWdiYXNlICsgMHg4ICsgKHB3bS0+cHdtX2lkIDw8IDQpKTsKKworCXB3bV9idXN5X3dhaXQocHdtLT5yZWdiYXNlICsgMHg0MCArIHB3bS0+cHdtX2lkLCAoMSA8PCAzKSk7CisJd3JpdGVsKGRjLCBwd20tPnJlZ2Jhc2UgKyAweGMgKyAocHdtLT5wd21faWQgPDwgNCkpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9jb25maWcpOworCitpbnQgcHdtX2VuYWJsZShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCXB3bV9idXN5X3dhaXQocHdtLT5yZWdiYXNlICsgMHg0MCArIHB3bS0+cHdtX2lkLCAoMSA8PCAwKSk7CisJd3JpdGVsKDUsIHB3bS0+cmVnYmFzZSArIChwd20tPnB3bV9pZCA8PCA0KSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9lbmFibGUpOworCit2b2lkIHB3bV9kaXNhYmxlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJcHdtX2J1c3lfd2FpdChwd20tPnJlZ2Jhc2UgKyAweDQwICsgcHdtLT5wd21faWQsICgxIDw8IDApKTsKKwl3cml0ZWwoMCwgcHdtLT5yZWdiYXNlICsgKHB3bS0+cHdtX2lkIDw8IDQpKTsKK30KK0VYUE9SVF9TWU1CT0wocHdtX2Rpc2FibGUpOworCitzdHJ1Y3QgcHdtX2RldmljZSAqcHdtX3JlcXVlc3QoaW50IHB3bV9pZCwgY29uc3QgY2hhciAqbGFiZWwpCit7CisJc3RydWN0IHB3bV9kZXZpY2UgKnB3bTsKKwlpbnQgZm91bmQgPSAwOworCisJbXV0ZXhfbG9jaygmcHdtX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwd20sICZwd21fbGlzdCwgbm9kZSkgeworCQlpZiAocHdtLT5wd21faWQgPT0gcHdtX2lkKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZCkgeworCQlpZiAocHdtLT51c2VfY291bnQgPT0gMCkgeworCQkJcHdtLT51c2VfY291bnQrKzsKKwkJCXB3bS0+bGFiZWwgPSBsYWJlbDsKKwkJfSBlbHNlIHsKKwkJCXB3bSA9IEVSUl9QVFIoLUVCVVNZKTsKKwkJfQorCX0gZWxzZSB7CisJCXB3bSA9IEVSUl9QVFIoLUVOT0VOVCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7CisJcmV0dXJuIHB3bTsKK30KK0VYUE9SVF9TWU1CT0wocHdtX3JlcXVlc3QpOworCit2b2lkIHB3bV9mcmVlKHN0cnVjdCBwd21fZGV2aWNlICpwd20pCit7CisJbXV0ZXhfbG9jaygmcHdtX2xvY2spOworCisJaWYgKHB3bS0+dXNlX2NvdW50KSB7CisJCXB3bS0+dXNlX2NvdW50LS07CisJCXB3bS0+bGFiZWwgPSBOVUxMOworCX0gZWxzZSB7CisJCXByX3dhcm5pbmcoIlBXTSBkZXZpY2UgYWxyZWFkeSBmcmVlZFxuIik7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9mcmVlKTsKKworc3RhdGljIGlubGluZSB2b2lkIF9fYWRkX3B3bShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZwd20tPm5vZGUsICZwd21fbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHB3bV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwd21fZGV2aWNlICpwd21zOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCXB3bXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHdtX2RldmljZSkgKiBWVDg1MDBfTlJfUFdNUywgR0ZQX0tFUk5FTCk7CisJaWYgKHB3bXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IFZUODUwMF9OUl9QV01TOyBpKyspIHsKKwkJcHdtc1tpXS51c2VfY291bnQgPSAwOworCQlwd21zW2ldLnB3bV9pZCA9IGk7CisJCXB3bXNbaV0ucGRldiA9IHBkZXY7CisJfQorCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2UgZGVmaW5lZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSwgcGRldi0+bmFtZSk7CisJaWYgKHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcHdtc1swXS5yZWdiYXNlID0gaW9yZW1hcChyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CisJaWYgKHB3bXNbMF0ucmVnYmFzZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJZm9yIChpID0gMTsgaSA8IFZUODUwMF9OUl9QV01TOyBpKyspCisJCXB3bXNbaV0ucmVnYmFzZSA9IHB3bXNbMF0ucmVnYmFzZTsKKworCWZvciAoaSA9IDA7IGkgPCBWVDg1MDBfTlJfUFdNUzsgaSsrKQorCQlfX2FkZF9wd20oJnB3bXNbaV0pOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHdtcyk7CisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworZXJyX2ZyZWU6CisJa2ZyZWUocHdtcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcHdtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwd21fZGV2aWNlICpwd21zOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgaTsKKworCXB3bXMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAocHdtcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBWVDg1MDBfTlJfUFdNUzsgaSsrKQorCQlsaXN0X2RlbCgmcHdtc1tpXS5ub2RlKTsKKwltdXRleF91bmxvY2soJnB3bV9sb2NrKTsKKworCWlvdW5tYXAocHdtc1swXS5yZWdiYXNlKTsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CisKKwlrZnJlZShwd21zKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHdtX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAidnQ4NTAwLXB3bSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHB3bV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB3bV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHdtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwd21fZHJpdmVyKTsKK30KK2FyY2hfaW5pdGNhbGwocHdtX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcHdtX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHdtX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChwd21fZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Mzc2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC90aW1lci5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL3RpbWVyLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworI2RlZmluZSBWVDg1MDBfVElNRVJfT0ZGU0VUCTB4MDEwMAorI2RlZmluZSBUSU1FUl9NQVRDSF9WQUwJCTB4MDAwMAorI2RlZmluZSBUSU1FUl9DT1VOVF9WQUwJCTB4MDAxMAorI2RlZmluZSBUSU1FUl9TVEFUVVNfVkFMCTB4MDAxNAorI2RlZmluZSBUSU1FUl9JRVJfVkFMCQkweDAwMWMJCS8qIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgVElNRVJfQ1RSTF9WQUwJCTB4MDAyMAorI2RlZmluZSBUSU1FUl9BU19WQUwJCTB4MDAyNAkJLyogYWNjZXNzIHN0YXR1cyAqLworI2RlZmluZSBUSU1FUl9DT1VOVF9SX0FDVElWRQkoMSA8PCA1KQkvKiBub3QgcmVhZHkgZm9yIHJlYWQgKi8KKyNkZWZpbmUgVElNRVJfQ09VTlRfV19BQ1RJVkUJKDEgPDwgNCkJLyogbm90IHJlYWR5IGZvciB3cml0ZSAqLworI2RlZmluZSBUSU1FUl9NQVRDSF9XX0FDVElWRQkoMSA8PCAwKQkvKiBub3QgcmVhZHkgZm9yIHdyaXRlICovCisjZGVmaW5lIFZUODUwMF9USU1FUl9IWgkJMzAwMDAwMAorCisjZGVmaW5lIG1zZWNzX3RvX2xvb3BzKHQpIChsb29wc19wZXJfamlmZnkgLyAxMDAwICogSFogKiB0KQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpyZWdiYXNlOworCitzdGF0aWMgY3ljbGVfdCB2dDg1MDBfdGltZXJfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCWludCBsb29wcyA9IG1zZWNzX3RvX2xvb3BzKDEwKTsKKwl3cml0ZWwoMywgcmVnYmFzZSArIFRJTUVSX0NUUkxfVkFMKTsKKwl3aGlsZSAoKHJlYWRsKChyZWdiYXNlICsgVElNRVJfQVNfVkFMKSkgJiBUSU1FUl9DT1VOVF9SX0FDVElWRSkKKwkJCQkJCSYmIC0tbG9vcHMpCisJCWNwdV9yZWxheCgpOworCXJldHVybiByZWFkbChyZWdiYXNlICsgVElNRVJfQ09VTlRfVkFMKTsKK30KKworc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlID0geworCS5uYW1lICAgICAgICAgICA9ICJ2dDg1MDBfdGltZXIiLAorCS5yYXRpbmcgICAgICAgICA9IDIwMCwKKwkucmVhZCAgICAgICAgICAgPSB2dDg1MDBfdGltZXJfcmVhZCwKKwkubWFzayAgICAgICAgICAgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuZmxhZ3MgICAgICAgICAgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKK3N0YXRpYyBpbnQgdnQ4NTAwX3RpbWVyX3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgY3ljbGVzLAorCQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJaW50IGxvb3BzID0gbXNlY3NfdG9fbG9vcHMoMTApOworCWN5Y2xlX3QgYWxhcm0gPSBjbG9ja3NvdXJjZS5yZWFkKCZjbG9ja3NvdXJjZSkgKyBjeWNsZXM7CisJd2hpbGUgKChyZWFkbChyZWdiYXNlICsgVElNRVJfQVNfVkFMKSAmIFRJTUVSX01BVENIX1dfQUNUSVZFKQorCQkJCQkJJiYgLS1sb29wcykKKwkJY3B1X3JlbGF4KCk7CisJd3JpdGVsKCh1bnNpZ25lZCBsb25nKWFsYXJtLCByZWdiYXNlICsgVElNRVJfTUFUQ0hfVkFMKTsKKworCWlmICgoc2lnbmVkKShhbGFybSAtIGNsb2Nrc291cmNlLnJlYWQoJmNsb2Nrc291cmNlKSkgPD0gMTYpCisJCXJldHVybiAtRVRJTUU7CisKKwl3cml0ZWwoMSwgcmVnYmFzZSArIFRJTUVSX0lFUl9WQUwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF90aW1lcl9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwkJd3JpdGVsKHJlYWRsKHJlZ2Jhc2UgKyBUSU1FUl9DVFJMX1ZBTCkgfCAxLAorCQkJcmVnYmFzZSArIFRJTUVSX0NUUkxfVkFMKTsKKwkJd3JpdGVsKDAsIHJlZ2Jhc2UgKyBUSU1FUl9JRVJfVkFMKTsKKwkJYnJlYWs7CisJfQorfQorCitzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNsb2NrZXZlbnQgPSB7CisJLm5hbWUgICAgICAgICAgID0gInZ0ODUwMF90aW1lciIsCisJLmZlYXR1cmVzICAgICAgID0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkucmF0aW5nICAgICAgICAgPSAyMDAsCisJLnNldF9uZXh0X2V2ZW50ID0gdnQ4NTAwX3RpbWVyX3NldF9uZXh0X2V2ZW50LAorCS5zZXRfbW9kZSAgICAgICA9IHZ0ODUwMF90aW1lcl9zZXRfbW9kZSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB2dDg1MDBfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSBkZXZfaWQ7CisJd3JpdGVsKDB4ZiwgcmVnYmFzZSArIFRJTUVSX1NUQVRVU19WQUwpOworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdHJ1Y3QgaXJxYWN0aW9uIGlycSA9IHsKKwkubmFtZSAgICA9ICJ2dDg1MDBfdGltZXIiLAorCS5mbGFncyAgID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmhhbmRsZXIgPSB2dDg1MDBfdGltZXJfaW50ZXJydXB0LAorCS5kZXZfaWQgID0gJmNsb2NrZXZlbnQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdnQ4NTAwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlyZWdiYXNlID0gaW9yZW1hcCh3bXRfcG1jX2Jhc2UgKyBWVDg1MDBfVElNRVJfT0ZGU0VULCAweDI4KTsKKwlpZiAoIXJlZ2Jhc2UpCisJCXByaW50ayhLRVJOX0VSUiAidnQ4NTAwX3RpbWVyX2luaXQ6IGZhaWxlZCB0byBtYXAgTU1JTyByZWdpc3RlcnNcbiIpOworCisJd3JpdGVsKDEsIHJlZ2Jhc2UgKyBUSU1FUl9DVFJMX1ZBTCk7CisJd3JpdGVsKDB4ZiwgcmVnYmFzZSArIFRJTUVSX1NUQVRVU19WQUwpOworCXdyaXRlbCh+MCwgcmVnYmFzZSArIFRJTUVSX01BVENIX1ZBTCk7CisKKwlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlLCBWVDg1MDBfVElNRVJfSFopKQorCQlwcmludGsoS0VSTl9FUlIgInZ0ODUwMF90aW1lcl9pbml0OiBjbG9ja3NvdXJjZV9yZWdpc3RlciBmYWlsZWQgZm9yICVzXG4iLAorCQkJCQljbG9ja3NvdXJjZS5uYW1lKTsKKworCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdCgmY2xvY2tldmVudCwgVlQ4NTAwX1RJTUVSX0haLCA0KTsKKworCS8qIGNvcHktcGFzdGVkIGZyb20gbWFjaC1tc207IG5vIGlkZWEgKi8KKwljbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9CisJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHhmMDAwMDAwMCwgJmNsb2NrZXZlbnQpOworCWNsb2NrZXZlbnQubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucyg0LCAmY2xvY2tldmVudCk7CisJY2xvY2tldmVudC5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKKworCWlmIChzZXR1cF9pcnEod210X3RpbWVyX2lycSwgJmlycSkpCisJCXByaW50ayhLRVJOX0VSUiAidnQ4NTAwX3RpbWVyX2luaXQ6IHNldHVwX2lycSBmYWlsZWQgZm9yICVzXG4iLAorCQkJCQljbG9ja2V2ZW50Lm5hbWUpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2xvY2tldmVudCk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgdnQ4NTAwX3RpbWVyID0geworCS5pbml0ID0gdnQ4NTAwX3RpbWVyX2luaXQKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC93bTg1MDVfN2luLmMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC93bTg1MDVfN2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczYWFkYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL3dtODUwNV83aW4uYwpAQCAtMCwwICsxLDc3IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL3dtODUwNV83aW4uYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBtY19oaWJlcjsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZ2dDg1MDBfZGV2aWNlX3VhcnQwLAorCSZ2dDg1MDBfZGV2aWNlX2VoY2ksCisJJnZ0ODUwMF9kZXZpY2Vfd204NTA1X2ZiLAorCSZ2dDg1MDBfZGV2aWNlX2dlX3JvcHMsCisJJnZ0ODUwMF9kZXZpY2VfcHdtLAorCSZ2dDg1MDBfZGV2aWNlX3B3bWJsLAorCSZ2dDg1MDBfZGV2aWNlX3J0YywKK307CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9wb3dlcl9vZmYodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXdyaXRldyg1LCBwbWNfaGliZXIpOworCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzcsIGMwLCA0IiA6IDogInIiICgwKSk7Cit9CisKK3ZvaWQgX19pbml0IHdtODUwNV83aW5faW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19GQl9XTTg1MDUKKwl2b2lkIF9faW9tZW0gKmdwaW9fbXV4X3JlZyA9IGlvcmVtYXAod210X2dwaW9fYmFzZSArIDB4MjAwLCA0KTsKKwlpZiAoZ3Bpb19tdXhfcmVnKSB7CisJCXdyaXRlbChyZWFkbChncGlvX211eF9yZWcpIHwgMHg4MDAwMDAwMCwgZ3Bpb19tdXhfcmVnKTsKKwkJaW91bm1hcChncGlvX211eF9yZWcpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHJlbWFwIHRoZSBHUElPIG11eCByZWdpc3RlciwgZGlzcGxheSBtYXkgbm90IHdvcmsgcHJvcGVybHkhXG4iKTsKKwl9CisjZW5kaWYKKwlwbWNfaGliZXIgPSBpb3JlbWFwKHdtdF9wbWNfYmFzZSArIDB4MTIsIDIpOworCWlmIChwbWNfaGliZXIpCisJCXBtX3Bvd2VyX29mZiA9ICZ2dDg1MDBfcG93ZXJfb2ZmOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJQTUMgSGliZXJuYXRpb24gcmVnaXN0ZXIgY291bGQgbm90IGJlIHJlbWFwcGVkLCBub3QgZW5hYmxpbmcgcG93ZXIgb2ZmIVxuIik7CisKKwl3bTg1MDVfc2V0X3Jlc291cmNlcygpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCXZ0ODUwMF9ncGlvX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChXTTg1MDVfN0lOX05FVEJPT0ssICJXTTg1MDUgNy1pbmNoIGdlbmVyaWMgbmV0Ym9vayIpCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkucmVzZXJ2ZQk9IHdtODUwNV9yZXNlcnZlX21lbSwKKwkubWFwX2lvCQk9IHdtODUwNV9tYXBfaW8sCisJLmluaXRfaXJxCT0gd204NTA1X2luaXRfaXJxLAorCS50aW1lcgkJPSAmdnQ4NTAwX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSB3bTg1MDVfN2luX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggOWQzMGM2Zi4uZTQ1MDliYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC00MDUsNyArNDA1LDcgQEAKIGNvbmZpZyBDUFVfMzJ2NksKIAlib29sICJTdXBwb3J0IEFSTSBWNksgcHJvY2Vzc29yIGV4dGVuc2lvbnMiIGlmICFTTVAKIAlkZXBlbmRzIG9uIENQVV9WNiB8fCBDUFVfVjcKLQlkZWZhdWx0IHkgaWYgU01QICYmICEoQVJDSF9NWDMgfHwgQVJDSF9PTUFQMikKKwlkZWZhdWx0IHkgaWYgU01QCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3VyIEFSTXY2IHByb2Nlc3NvciBzdXBwb3J0cyB0aGUgJ0snIGV4dGVuc2lvbi4KIAkgIFRoaXMgZW5hYmxlcyB0aGUga2VybmVsIHRvIHVzZSBzb21lIGluc3RydWN0aW9ucyBub3QgcHJlc2VudApAQCAtNDE2LDcgKzQxNiw3IEBACiAjIEFSTXY3CiBjb25maWcgQ1BVX1Y3CiAJYm9vbCAiU3VwcG9ydCBBUk0gVjcgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBNQUNIX1JFQUxWSUVXX1BCWAotCXNlbGVjdCBDUFVfMzJ2NksgaWYgIUFSQ0hfT01BUDIKKwlzZWxlY3QgQ1BVXzMydjZLCiAJc2VsZWN0IENQVV8zMnY3CiAJc2VsZWN0IENQVV9BQlJUX0VWNwogCXNlbGVjdCBDUFVfUEFCUlRfVjcKQEAgLTY0NCw3ICs2NDQsNyBAQAogCiBjb25maWcgU1dQX0VNVUxBVEUKIAlib29sICJFbXVsYXRlIFNXUC9TV1BCIGluc3RydWN0aW9ucyIKLQlkZXBlbmRzIG9uIENQVV9WNyAmJiAhQ1BVX1Y2CisJZGVwZW5kcyBvbiAhQ1BVX1VTRV9ET01BSU5TICYmIENQVV9WNyAmJiAhQ1BVX1Y2CiAJc2VsZWN0IEhBVkVfUFJPQ19DUFUgaWYgUFJPQ19GUwogCWRlZmF1bHQgeSBpZiBTTVAKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKaW5kZXggMTcwYzliYi4uZjJjZTM4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYwpAQCAtNDksNyArNDksMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV9zeW5jKHZvaWQpCiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOworCisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNzUzOTcwCisJLyogd3JpdGUgdG8gYW4gdW5tbWFwcGVkIHJlZ2lzdGVyICovCisJd3JpdGVsX3JlbGF4ZWQoMCwgYmFzZSArIEwyWDBfRFVNTVlfUkVHKTsKKyNlbHNlCiAJd3JpdGVsX3JlbGF4ZWQoMCwgYmFzZSArIEwyWDBfQ0FDSEVfU1lOQyk7CisjZW5kaWYKIAljYWNoZV93YWl0KGJhc2UgKyBMMlgwX0NBQ0hFX1NZTkMsIDEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggNTE2NDA2OS4uY2RkZDY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMjk3LDYgKzI5NywxMiBAQAogCW1lbWJsb2NrX3Jlc2VydmUoX19wYShfc3RleHQpLCBfZW5kIC0gX3N0ZXh0KTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmIChwaHlzX2luaXRyZF9zaXplICYmCisJICAgIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSkpIHsKKwkJcHJfZXJyKCJJTklUUkQ6IDB4JTA4bHgrMHglMDhseCBvdmVybGFwcyBpbi11c2UgbWVtb3J5IHJlZ2lvbiAtIGRpc2FibGluZyBpbml0cmRcbiIsCisJCSAgICAgICBwaHlzX2luaXRyZF9zdGFydCwgcGh5c19pbml0cmRfc2l6ZSk7CisJCXBoeXNfaW5pdHJkX3N0YXJ0ID0gcGh5c19pbml0cmRfc2l6ZSA9IDA7CisJfQogCWlmIChwaHlzX2luaXRyZF9zaXplKSB7CiAJCW1lbWJsb2NrX3Jlc2VydmUocGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCmluZGV4IGJjZjc0OGQuLjIyNmUzZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCkBAIC00OTMsNiArNDkzLDkgQEAKIAkud29yZAljcHVfYXJtMTAyMF9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm0xMDIwX3N3aXRjaF9tbQogCS53b3JkCWNwdV9hcm0xMDIwX3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtMTAyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtMTAyMF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwppbmRleCBhYjdlYzI2Li44NmQ5YzJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCkBAIC00NzQsNiArNDc0LDkgQEAKIAkud29yZAljcHVfYXJtMTAyMGVfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyMGVfc3dpdGNoX21tCiAJLndvcmQJY3B1X2FybTEwMjBlX3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtMTAyMGVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwppbmRleCA4MzFjNWU1Li44M2QzZGQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwpAQCAtNDU3LDYgKzQ1Nyw5IEBACiAJLndvcmQJY3B1X2FybTEwMjJfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyMl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtMTAyMl9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjJfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCmluZGV4IGUzZjdlOWEuLjY4NjA0M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCkBAIC00NTIsNiArNDUyLDkgQEAKIAkud29yZAljcHVfYXJtMTAyNl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm0xMDI2X3N3aXRjaF9tbQogCS53b3JkCWNwdV9hcm0xMDI2X3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtMTAyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtMTAyNl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAucm9kYXRhCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwppbmRleCA2YTdiZTE4Li41Zjc5ZGM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKQEAgLTI4NCw2ICsyODQsOSBAQAogCQkud29yZAljcHVfYXJtNl9kY2FjaGVfY2xlYW5fYXJlYQogCQkud29yZAljcHVfYXJtNl9zd2l0Y2hfbW0KIAkJLndvcmQJY3B1X2FybTZfc2V0X3B0ZV9leHQKKwkJLndvcmQJMAorCQkud29yZAkwCisJCS53b3JkCTAKIAkJLnNpemUJYXJtNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtNl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIC8qCkBAIC0zMDEsNiArMzA0LDkgQEAKIAkJLndvcmQJY3B1X2FybTdfZGNhY2hlX2NsZWFuX2FyZWEKIAkJLndvcmQJY3B1X2FybTdfc3dpdGNoX21tCiAJCS53b3JkCWNwdV9hcm03X3NldF9wdGVfZXh0CisJCS53b3JkCTAKKwkJLndvcmQJMAorCQkud29yZAkwCiAJCS5zaXplCWFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKaW5kZXggYzI4NTM5NS4uNjY1MjY2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCkBAIC0xODUsNiArMTg1LDkgQEAKIAkJLndvcmQJY3B1X2FybTcyMF9kY2FjaGVfY2xlYW5fYXJlYQogCQkud29yZAljcHVfYXJtNzIwX3N3aXRjaF9tbQogCQkud29yZAljcHVfYXJtNzIwX3NldF9wdGVfZXh0CisJCS53b3JkCTAKKwkJLndvcmQJMAorCQkud29yZAkwCiAJCS5zaXplCWFybTcyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtNzIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCQkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TCmluZGV4IDM4YjI3ZGMuLjZmOWQxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUwpAQCAtMTMwLDYgKzEzMCw5IEBACiAJLndvcmQJY3B1X2FybTc0MF9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm03NDBfc3dpdGNoX21tCiAJLndvcmQJMAkJCUAgY3B1Xypfc2V0X3B0ZQorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTc0MF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtNzQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCmluZGV4IDBjOTc4NmQuLmU0YzE2NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKQEAgLTcwLDYgKzcwLDkgQEAKIAkJLndvcmQJY3B1X2FybTd0ZG1pX2RjYWNoZV9jbGVhbl9hcmVhCiAJCS53b3JkCWNwdV9hcm03dGRtaV9zd2l0Y2hfbW0KIAkJLndvcmQJMAkJQCBjcHVfKl9zZXRfcHRlCisJCS53b3JkCTAKKwkJLndvcmQJMAorCQkud29yZAkwCiAJCS5zaXplCWFybTd0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm03dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwppbmRleCA2MTA5ZjI3Li4yMTk5ODBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKQEAgLTM4Nyw2ICszODcsNDAgQEAKICNlbmRpZgogCW1vdglwYywgbHIKIAorLyogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydDogdGFrZW4gZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyAqLworLmdsb2JsCWNwdV9hcm05MjBfc3VzcGVuZF9zaXplCisuZXF1CWNwdV9hcm05MjBfc3VzcGVuZF9zaXplLCA0ICogMworI2lmZGVmIENPTkZJR19QTQorRU5UUlkoY3B1X2FybTkyMF9kb19zdXNwZW5kKQorCXN0bWZkCXNwISwge3I0IC0gcjcsIGxyfQorCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgUElECisJbXJjCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI2LCBjMiwgYzAsIDAJQCBUVEIgYWRkcmVzcworCW1yYwlwMTUsIDAsIHI3LCBjMSwgYzAsIDAJQCBDb250cm9sIHJlZ2lzdGVyCisJc3RtaWEJcjAsIHtyNCAtIHI3fQorCWxkbWZkCXNwISwge3I0IC0gcjcsIHBjfQorRU5EUFJPQyhjcHVfYXJtOTIwX2RvX3N1c3BlbmQpCisKK0VOVFJZKGNwdV9hcm05MjBfZG9fcmVzdW1lKQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCUAgaW52YWxpZGF0ZSBJK0QgVExCcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJQCBpbnZhbGlkYXRlIEkrRCBjYWNoZXMKKwlsZG1pYQlyMCwge3I0IC0gcjd9CisJbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBQSUQKKwltY3IJcDE1LCAwLCByNSwgYzMsIGMwLCAwCUAgRG9tYWluIElECisJbWNyCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAlAIFRUQiBhZGRyZXNzCisJbW92CXIwLCByNwkJCUAgY29udHJvbCByZWdpc3RlcgorCW1vdglyMiwgcjYsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsID1QTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJICAgICBQTURfU0VDVF9DQUNIRUFCTEUgfCBQTURfQklUNCB8IFBNRF9TRUNUX0FQX1dSSVRFCisJYgljcHVfcmVzdW1lX21tdQorRU5EUFJPQyhjcHVfYXJtOTIwX2RvX3Jlc3VtZSkKKyNlbHNlCisjZGVmaW5lIGNwdV9hcm05MjBfZG9fc3VzcGVuZAkwCisjZGVmaW5lIGNwdV9hcm05MjBfZG9fcmVzdW1lCTAKKyNlbmRpZgorCiAJX19DUFVJTklUCiAKIAkudHlwZQlfX2FybTkyMF9zZXR1cCwgI2Z1bmN0aW9uCkBAIC00MzIsNiArNDY2LDkgQEAKIAkud29yZAljcHVfYXJtOTIwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyMF9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTIwX3NldF9wdGVfZXh0CisJLndvcmQJY3B1X2FybTkyMF9zdXNwZW5kX3NpemUKKwkud29yZAljcHVfYXJtOTIwX2RvX3N1c3BlbmQKKwkud29yZAljcHVfYXJtOTIwX2RvX3Jlc3VtZQogCS5zaXplCWFybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKaW5kZXggYmIyZjBmNC4uMzYxNTRiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCkBAIC00MzYsNiArNDM2LDkgQEAKIAkud29yZAljcHVfYXJtOTIyX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyMl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTIyX3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm05MjJfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwppbmRleCBjMTNlMDFhLi44OWM1ZTAwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC01MDMsNiArNTAzLDkgQEAKIAkud29yZAljcHVfYXJtOTI1X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyNV9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTI1X3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtOTI1X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm05MjVfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCA0MmViNDMxLi42YTRiZGIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTQwMSw2ICs0MDEsNDAgQEAKICNlbmRpZgogCW1vdglwYywgbHIKIAorLyogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydDogdGFrZW4gZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyAqLworLmdsb2JsCWNwdV9hcm05MjZfc3VzcGVuZF9zaXplCisuZXF1CWNwdV9hcm05MjZfc3VzcGVuZF9zaXplLCA0ICogMworI2lmZGVmIENPTkZJR19QTQorRU5UUlkoY3B1X2FybTkyNl9kb19zdXNwZW5kKQorCXN0bWZkCXNwISwge3I0IC0gcjcsIGxyfQorCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgUElECisJbXJjCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI2LCBjMiwgYzAsIDAJQCBUVEIgYWRkcmVzcworCW1yYwlwMTUsIDAsIHI3LCBjMSwgYzAsIDAJQCBDb250cm9sIHJlZ2lzdGVyCisJc3RtaWEJcjAsIHtyNCAtIHI3fQorCWxkbWZkCXNwISwge3I0IC0gcjcsIHBjfQorRU5EUFJPQyhjcHVfYXJtOTI2X2RvX3N1c3BlbmQpCisKK0VOVFJZKGNwdV9hcm05MjZfZG9fcmVzdW1lKQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCUAgaW52YWxpZGF0ZSBJK0QgVExCcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJQCBpbnZhbGlkYXRlIEkrRCBjYWNoZXMKKwlsZG1pYQlyMCwge3I0IC0gcjd9CisJbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBQSUQKKwltY3IJcDE1LCAwLCByNSwgYzMsIGMwLCAwCUAgRG9tYWluIElECisJbWNyCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAlAIFRUQiBhZGRyZXNzCisJbW92CXIwLCByNwkJCUAgY29udHJvbCByZWdpc3RlcgorCW1vdglyMiwgcjYsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsID1QTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJICAgICBQTURfU0VDVF9DQUNIRUFCTEUgfCBQTURfQklUNCB8IFBNRF9TRUNUX0FQX1dSSVRFCisJYgljcHVfcmVzdW1lX21tdQorRU5EUFJPQyhjcHVfYXJtOTI2X2RvX3Jlc3VtZSkKKyNlbHNlCisjZGVmaW5lIGNwdV9hcm05MjZfZG9fc3VzcGVuZAkwCisjZGVmaW5lIGNwdV9hcm05MjZfZG9fcmVzdW1lCTAKKyNlbmRpZgorCiAJX19DUFVJTklUCiAKIAkudHlwZQlfX2FybTkyNl9zZXR1cCwgI2Z1bmN0aW9uCkBAIC00NTYsNiArNDkwLDkgQEAKIAkud29yZAljcHVfYXJtOTI2X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTkyNl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtOTI2X3NldF9wdGVfZXh0CisJLndvcmQJY3B1X2FybTkyNl9zdXNwZW5kX3NpemUKKwkud29yZAljcHVfYXJtOTI2X2RvX3N1c3BlbmQKKwkud29yZAljcHVfYXJtOTI2X2RvX3Jlc3VtZQogCS5zaXplCWFybTkyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKaW5kZXggN2IxMWNkYi4uMjZhZWEzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCkBAIC0zNjMsNiArMzYzLDkgQEAKIAkud29yZAljcHVfYXJtOTQwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTk0MF9zd2l0Y2hfbW0KIAkud29yZAkwCQlAIGNwdV8qX3NldF9wdGUKKwkud29yZAkwCisJLndvcmQJMAorCS53b3JkCTAKIAkuc2l6ZQlhcm05NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTk0MF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCmluZGV4IDFhNWJiZjA4Li44MDYzMzQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKQEAgLTQxOSw2ICs0MTksOSBAQAogCS53b3JkCWNwdV9hcm05NDZfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtOTQ2X3N3aXRjaF9tbQogCS53b3JkCTAJCUAgY3B1Xypfc2V0X3B0ZQorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTk0Nl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTQ2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCmluZGV4IGRiNjdlMzEuLjdiN2ViZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKQEAgLTcwLDYgKzcwLDkgQEAKIAkJLndvcmQJY3B1X2FybTl0ZG1pX2RjYWNoZV9jbGVhbl9hcmVhCiAJCS53b3JkCWNwdV9hcm05dGRtaV9zd2l0Y2hfbW0KIAkJLndvcmQJMAkJQCBjcHVfKl9zZXRfcHRlCisJCS53b3JkCTAKKwkJLndvcmQJMAorCQkud29yZAkwCiAJCS5zaXplCWFybTl0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm05dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKaW5kZXggN2M5YWQ2Mi4uZmMyYTRhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUwpAQCAtMTk1LDYgKzE5NSw5IEBACiAJLndvcmQJY3B1X2ZhNTI2X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2ZhNTI2X3N3aXRjaF9tbQogCS53b3JkCWNwdV9mYTUyNl9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUyBiL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUwppbmRleCBiNDU5N2VkLi5kMzg4M2VlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCkBAIC01NTQsNiArNTU0LDkgQEAKIAkud29yZAljcHVfZmVyb2Nlb25fZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfZmVyb2Nlb25fc3dpdGNoX21tCiAJLndvcmQJY3B1X2Zlcm9jZW9uX3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJZmVyb2Nlb25fcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGZlcm9jZW9uX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKaW5kZXggNDQ1OGVlNi4uOWQ0ZjJhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUworKysgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCkBAIC0zODgsNiArMzg4LDkgQEAKIAkud29yZAljcHVfbW9oYXdrX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X21vaGF3a19zd2l0Y2hfbW0KIAkud29yZAljcHVfbW9oYXdrX3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBtb2hhd2tfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKaW5kZXggNWFhOGQ1OS4uNDZmMDllZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUwpAQCAtMjAzLDYgKzIwMyw5IEBACiAJLndvcmQJY3B1X3NhMTEwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3NhMTEwX3N3aXRjaF9tbQogCS53b3JkCWNwdV9zYTExMF9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCXNhMTEwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBzYTExMF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCmluZGV4IDJhYzRlNmYuLjc0NDgzZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwpAQCAtMTY5LDYgKzE2OSw0MiBAQAogI2VuZGlmCiAJbW92CXBjLCBscgogCisuZ2xvYmwJY3B1X3NhMTEwMF9zdXNwZW5kX3NpemUKKy5lcXUJY3B1X3NhMTEwMF9zdXNwZW5kX3NpemUsIDQqNAorI2lmZGVmIENPTkZJR19QTQorRU5UUlkoY3B1X3NhMTEwMF9kb19zdXNwZW5kKQorCXN0bWZkCXNwISwge3I0IC0gcjcsIGxyfQorCW1yYwlwMTUsIDAsIHI0LCBjMywgYzAsIDAJCUAgZG9tYWluIElECisJbXJjCXAxNSwgMCwgcjUsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHIKKwltcmMJcDE1LCAwLCByNiwgYzEzLCBjMCwgMAkJQCBQSUQKKwltcmMJcDE1LCAwLCByNywgYzEsIGMwLCAwCQlAIGNvbnRyb2wgcmVnCisJc3RtaWEJcjAsIHtyNCAtIHI3fQkJCUAgc3RvcmUgY3AgcmVncworCWxkbWZkCXNwISwge3I0IC0gcjcsIHBjfQorRU5EUFJPQyhjcHVfc2ExMTAwX2RvX3N1c3BlbmQpCisKK0VOVFJZKGNwdV9zYTExMDBfZG9fcmVzdW1lKQorCWxkbWlhCXIwLCB7cjQgLSByN30JCQlAIGxvYWQgY3AgcmVncworCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCQlAIGZsdXNoIEkrRCBUTEJzCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBmbHVzaCBJJkQgY2FjaGUKKwltY3IJcDE1LCAwLCByMSwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKKwltY3IJcDE1LCAwLCByMSwgYzksIGMwLCA1CQlAIGFsbG93IHVzZXIgc3BhY2UgdG8gdXNlIFJCCisKKwltY3IJcDE1LCAwLCByNCwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAorCW1jcglwMTUsIDAsIHI1LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbWNyCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJCUAgUElECisJbW92CXIwLCByNwkJCQlAIGNvbnRyb2wgcmVnaXN0ZXIKKwltb3YJcjIsIHI1LCBsc3IgIzE0CQkJQCBnZXQgVFRCMCBiYXNlCisJbW92CXIyLCByMiwgbHNsICMxNAorCWxkcglyMywgPVBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQkgICAgIFBNRF9TRUNUX0NBQ0hFQUJMRSB8IFBNRF9TRUNUX0FQX1dSSVRFCisJYgljcHVfcmVzdW1lX21tdQorRU5EUFJPQyhjcHVfc2ExMTAwX2RvX3Jlc3VtZSkKKyNlbHNlCisjZGVmaW5lIGNwdV9zYTExMDBfZG9fc3VzcGVuZAkwCisjZGVmaW5lIGNwdV9zYTExMDBfZG9fcmVzdW1lCTAKKyNlbmRpZgorCiAJX19DUFVJTklUCiAKIAkudHlwZQlfX3NhMTEwMF9zZXR1cCwgI2Z1bmN0aW9uCkBAIC0yMTgsNiArMjU0LDkgQEAKIAkud29yZAljcHVfc2ExMTAwX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3NhMTEwMF9zd2l0Y2hfbW0KIAkud29yZAljcHVfc2ExMTAwX3NldF9wdGVfZXh0CisJLndvcmQJY3B1X3NhMTEwMF9zdXNwZW5kX3NpemUKKwkud29yZAljcHVfc2ExMTAwX2RvX3N1c3BlbmQKKwkud29yZAljcHVfc2ExMTAwX2RvX3Jlc3VtZQogCS5zaXplCXNhMTEwMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gc2ExMTAwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCmluZGV4IDU5YTdlMWYuLjgzMmI2YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKQEAgLTEyMSw2ICsxMjEsNTMgQEAKICNlbmRpZgogCW1vdglwYywgbHIKIAorLyogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydDogdGFrZW4gZnJvbSBhcmNoL2FybS9tYWNoLXMzYzY0eHgvc2xlZXAuUyAqLworLmdsb2JsCWNwdV92Nl9zdXNwZW5kX3NpemUKKy5lcXUJY3B1X3Y2X3N1c3BlbmRfc2l6ZSwgNCAqIDgKKyNpZmRlZiBDT05GSUdfUE0KK0VOVFJZKGNwdV92Nl9kb19zdXNwZW5kKQorCXN0bWZkCXNwISwge3I0IC0gcjExLCBscn0KKwltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECisJbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDEJQCBDb250ZXh0IElECisJbXJjCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJQCBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIDAKKwltcmMJcDE1LCAwLCByOCwgYzIsIGMwLCAxCUAgVHJhbnNsYXRpb24gdGFibGUgYmFzZSAxCisJbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMQlAIGF1eGlsbGFyeSBjb250cm9sIHJlZ2lzdGVyCisJbXJjCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDIJQCBjby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2wKKwltcmMJcDE1LCAwLCByMTEsIGMxLCBjMCwgMAlAIGNvbnRyb2wgcmVnaXN0ZXIKKwlzdG1pYQlyMCwge3I0IC0gcjExfQorCWxkbWZkCXNwISwge3I0LSByMTEsIHBjfQorRU5EUFJPQyhjcHVfdjZfZG9fc3VzcGVuZCkKKworRU5UUlkoY3B1X3Y2X2RvX3Jlc3VtZSkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTQsIDAJQCBjbGVhbitpbnZhbGlkYXRlIEQgY2FjaGUKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTUsIDAJQCBjbGVhbitpbnZhbGlkYXRlIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwlsZG1pYQlyMCwge3I0IC0gcjExfQorCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgRkNTRS9QSUQKKwltY3IJcDE1LCAwLCByNSwgYzEzLCBjMCwgMQlAIENvbnRleHQgSUQKKwltY3IJcDE1LCAwLCByNiwgYzMsIGMwLCAwCUAgRG9tYWluIElECisJbWNyCXAxNSwgMCwgcjcsIGMyLCBjMCwgMAlAIFRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgMAorCW1jcglwMTUsIDAsIHI4LCBjMiwgYzAsIDEJQCBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIDEKKwltY3IJcDE1LCAwLCByOSwgYzEsIGMwLCAxCUAgYXV4aWxsYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKKwltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMglAIGNvLXByb2Nlc3NvciBhY2Nlc3MgY29udHJvbAorCW1jcglwMTUsIDAsIGlwLCBjMiwgYzAsIDIJQCBUVEIgY29udHJvbCByZWdpc3RlcgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDQJQCBJU0IKKwltb3YJcjAsIHIxMQkJCUAgY29udHJvbCByZWdpc3RlcgorCW1vdglyMiwgcjcsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsIGNwdV9yZXN1bWVfbDFfZmxhZ3MKKwliCWNwdV9yZXN1bWVfbW11CitFTkRQUk9DKGNwdV92Nl9kb19yZXN1bWUpCitjcHVfcmVzdW1lX2wxX2ZsYWdzOgorCUFMVF9TTVAoLmxvbmcgUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0FQX1dSSVRFIHwgUE1EX0ZMQUdTX1NNUCkKKwlBTFRfVVAoLmxvbmcgIFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9BUF9XUklURSB8IFBNRF9GTEFHU19VUCkKKyNlbHNlCisjZGVmaW5lIGNwdV92Nl9kb19zdXNwZW5kIDAKKyNkZWZpbmUgY3B1X3Y2X2RvX3Jlc3VtZSAwCisjZW5kaWYKIAogCiAJLnR5cGUJY3B1X3Y2X25hbWUsICNvYmplY3QKQEAgLTIwNiw2ICsyNTMsOSBAQAogCS53b3JkCWNwdV92Nl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV92Nl9zd2l0Y2hfbW0KIAkud29yZAljcHVfdjZfc2V0X3B0ZV9leHQKKwkud29yZAljcHVfdjZfc3VzcGVuZF9zaXplCisJLndvcmQJY3B1X3Y2X2RvX3N1c3BlbmQKKwkud29yZAljcHVfdjZfZG9fcmVzdW1lCiAJLnNpemUJdjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHY2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCmluZGV4IDBjMTE3MmIuLjI2MmZhODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKQEAgLTEwOCwxMCArMTA4LDE2IEBACiAjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczCiAJbWNyCXAxNSwgMCwgcjIsIGM3LCBjNSwgNgkJQCBmbHVzaCBCVEFDL0JUQgogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNzU0MzIyCisJZHNiCisjZW5kaWYKIAltY3IJcDE1LCAwLCByMiwgYzEzLCBjMCwgMQkJQCBzZXQgcmVzZXJ2ZWQgY29udGV4dCBJRAogCWlzYgogMToJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkJQCBzZXQgVFRCIDAKIAlpc2IKKyNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV83NTQzMjIKKwlkc2IKKyNlbmRpZgogCW1jcglwMTUsIDAsIHIxLCBjMTMsIGMwLCAxCQlAIHNldCBjb250ZXh0IElECiAJaXNiCiAjZW5kaWYKQEAgLTE3MSw2ICsxNzcsODcgQEAKIAkuYXNjaWkJIkFSTXY3IFByb2Nlc3NvciIKIAkuYWxpZ24KIAorCS8qCisJICogTWVtb3J5IHJlZ2lvbiBhdHRyaWJ1dGVzIHdpdGggU0NUTFIuVFJFPTEKKwkgKgorCSAqICAgbiA9IFRFWFswXSxDLEIKKwkgKiAgIFRSID0gUFJSUlsybisxOjJuXQkJLSBtZW1vcnkgdHlwZQorCSAqICAgSVIgPSBOTVJSWzJuKzE6Mm5dCQktIGlubmVyIGNhY2hlYWJsZSBwcm9wZXJ0eQorCSAqICAgT1IgPSBOTVJSWzJuKzE3OjJuKzE2XQktIG91dGVyIGNhY2hlYWJsZSBwcm9wZXJ0eQorCSAqCisJICoJCQluCVRSCUlSCU9SCisJICogICBVTkNBQ0hFRAkJMDAwCTAwCisJICogICBCVUZGRVJBQkxFCQkwMDEJMTAJMDAJMDAKKwkgKiAgIFdSSVRFVEhST1VHSAkwMTAJMTAJMTAJMTAKKwkgKiAgIFdSSVRFQkFDSwkJMDExCTEwCTExCTExCisJICogICByZXNlcnZlZAkJMTEwCisJICogICBXUklURUFMTE9DCQkxMTEJMTAJMDEJMDEKKwkgKiAgIERFVl9TSEFSRUQJCTEwMAkwMQorCSAqICAgREVWX05PTlNIQVJFRAkxMDAJMDEKKwkgKiAgIERFVl9XQwkJMDAxCTEwCisJICogICBERVZfQ0FDSEVECQkwMTEJMTAKKwkgKgorCSAqIE90aGVyIGF0dHJpYnV0ZXM6CisJICoKKwkgKiAgIERTMCA9IFBSUlJbMTZdID0gMAkJLSBkZXZpY2Ugc2hhcmVhYmxlIHByb3BlcnR5CisJICogICBEUzEgPSBQUlJSWzE3XSA9IDEJCS0gZGV2aWNlIHNoYXJlYWJsZSBwcm9wZXJ0eQorCSAqICAgTlMwID0gUFJSUlsxOF0gPSAwCQktIG5vcm1hbCBzaGFyZWFibGUgcHJvcGVydHkKKwkgKiAgIE5TMSA9IFBSUlJbMTldID0gMQkJLSBub3JtYWwgc2hhcmVhYmxlIHByb3BlcnR5CisJICogICBOT1MgPSBQUlJSWzI0K25dID0gMQktIG5vdCBvdXRlciBzaGFyZWFibGUKKwkgKi8KKy5lcXUJUFJSUiwJMHhmZjBhODFhOAorLmVxdQlOTVJSLAkweDQwZTA0MGUwCisKKy8qIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6IGRlcml2ZWQgZnJvbSBhcmNoL2FybS9tYWNoLXM1cHYyMTAvc2xlZXAuUyAqLworLmdsb2JsCWNwdV92N19zdXNwZW5kX3NpemUKKy5lcXUJY3B1X3Y3X3N1c3BlbmRfc2l6ZSwgNCAqIDgKKyNpZmRlZiBDT05GSUdfUE0KK0VOVFJZKGNwdV92N19kb19zdXNwZW5kKQorCXN0bWZkCXNwISwge3I0IC0gcjExLCBscn0KKwltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECisJbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDEJQCBDb250ZXh0IElECisJbXJjCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJQCBUVEIgMAorCW1yYwlwMTUsIDAsIHI4LCBjMiwgYzAsIDEJQCBUVEIgMQorCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJQCBDb250cm9sIHJlZ2lzdGVyCisJbXJjCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDEJQCBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgorCW1yYwlwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9sCisJc3RtaWEJcjAsIHtyNCAtIHIxMX0KKwlsZG1mZAlzcCEsIHtyNCAtIHIxMSwgcGN9CitFTkRQUk9DKGNwdV92N19kb19zdXNwZW5kKQorCitFTlRSWShjcHVfdjdfZG9fcmVzdW1lKQorCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCUAgaW52YWxpZGF0ZSBUTEJzCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSSBjYWNoZQorCWxkbWlhCXIwLCB7cjQgLSByMTF9CisJbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBGQ1NFL1BJRAorCW1jcglwMTUsIDAsIHI1LCBjMTMsIGMwLCAxCUAgQ29udGV4dCBJRAorCW1jcglwMTUsIDAsIHI2LCBjMywgYzAsIDAJQCBEb21haW4gSUQKKwltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgVFRCIDAKKwltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAxCUAgVFRCIDEKKwltY3IJcDE1LCAwLCBpcCwgYzIsIGMwLCAyCUAgVFRCIGNvbnRyb2wgcmVnaXN0ZXIKKwltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQlAIEF1eGlsbGFyeSBjb250cm9sIHJlZ2lzdGVyCisJbWNyCXAxNSwgMCwgcjExLCBjMSwgYzAsIDIJQCBDby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2wKKwlsZHIJcjQsID1QUlJSCQlAIFBSUlIKKwlsZHIJcjUsID1OTVJSCQlAIE5NUlIKKwltY3IJcDE1LCAwLCByNCwgYzEwLCBjMiwgMAlAIHdyaXRlIFBSUlIKKwltY3IJcDE1LCAwLCByNSwgYzEwLCBjMiwgMQlAIHdyaXRlIE5NUlIKKwlpc2IKKwltb3YJcjAsIHI5CQkJQCBjb250cm9sIHJlZ2lzdGVyCisJbW92CXIyLCByNywgbHNyICMxNAkJQCBnZXQgVFRCMCBiYXNlCisJbW92CXIyLCByMiwgbHNsICMxNAorCWxkcglyMywgY3B1X3Jlc3VtZV9sMV9mbGFncworCWIJY3B1X3Jlc3VtZV9tbXUKK0VORFBST0MoY3B1X3Y3X2RvX3Jlc3VtZSkKK2NwdV9yZXN1bWVfbDFfZmxhZ3M6CisJQUxUX1NNUCgubG9uZyBQTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQVBfV1JJVEUgfCBQTURfRkxBR1NfU01QKQorCUFMVF9VUCgubG9uZyAgUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0FQX1dSSVRFIHwgUE1EX0ZMQUdTX1VQKQorI2Vsc2UKKyNkZWZpbmUgY3B1X3Y3X2RvX3N1c3BlbmQJMAorI2RlZmluZSBjcHVfdjdfZG9fcmVzdW1lCTAKKyNlbmRpZgorCiAJX19DUFVJTklUCiAKIC8qCkBAIC0yNjQsNiArMzUxLDEyIEBACiAJb3JyZXEJcjEwLCByMTAsICMxIDw8IDYJCUAgc2V0IGJpdCAjNgogCW1jcmVxCXAxNSwgMCwgcjEwLCBjMTUsIGMwLCAxCQlAIHdyaXRlIGRpYWdub3N0aWMgcmVnaXN0ZXIKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzc1MTQ3MgorCWNtcAlyNiwgIzB4MzAJCQlAIHByZXNlbnQgcHJpb3IgdG8gcjNwMAorCW1yY2x0CXAxNSwgMCwgcjEwLCBjMTUsIGMwLCAxCQlAIHJlYWQgZGlhZ25vc3RpYyByZWdpc3RlcgorCW9ycmx0CXIxMCwgcjEwLCAjMSA8PCAxMQkJQCBzZXQgYml0ICMxMQorCW1jcmx0CXAxNSwgMCwgcjEwLCBjMTUsIGMwLCAxCQlAIHdyaXRlIGRpYWdub3N0aWMgcmVnaXN0ZXIKKyNlbmRpZgogCiAzOgltb3YJcjEwLCAjMAogI2lmZGVmIEhBUlZBUkRfQ0FDSEUKQEAgLTI3NiwzNiArMzY5LDggQEAKIAlBTFRfU01QKG9ycglyNCwgcjQsICNUVEJfRkxBR1NfU01QKQogCUFMVF9VUChvcnIJcjQsIHI0LCAjVFRCX0ZMQUdTX1VQKQogCW1jcglwMTUsIDAsIHI0LCBjMiwgYzAsIDEJCUAgbG9hZCBUVEIxCi0JLyoKLQkgKiBNZW1vcnkgcmVnaW9uIGF0dHJpYnV0ZXMgd2l0aCBTQ1RMUi5UUkU9MQotCSAqCi0JICogICBuID0gVEVYWzBdLEMsQgotCSAqICAgVFIgPSBQUlJSWzJuKzE6Mm5dCQktIG1lbW9yeSB0eXBlCi0JICogICBJUiA9IE5NUlJbMm4rMToybl0JCS0gaW5uZXIgY2FjaGVhYmxlIHByb3BlcnR5Ci0JICogICBPUiA9IE5NUlJbMm4rMTc6Mm4rMTZdCS0gb3V0ZXIgY2FjaGVhYmxlIHByb3BlcnR5Ci0JICoKLQkgKgkJCW4JVFIJSVIJT1IKLQkgKiAgIFVOQ0FDSEVECQkwMDAJMDAKLQkgKiAgIEJVRkZFUkFCTEUJCTAwMQkxMAkwMAkwMAotCSAqICAgV1JJVEVUSFJPVUdICTAxMAkxMAkxMAkxMAotCSAqICAgV1JJVEVCQUNLCQkwMTEJMTAJMTEJMTEKLQkgKiAgIHJlc2VydmVkCQkxMTAKLQkgKiAgIFdSSVRFQUxMT0MJCTExMQkxMAkwMQkwMQotCSAqICAgREVWX1NIQVJFRAkJMTAwCTAxCi0JICogICBERVZfTk9OU0hBUkVECTEwMAkwMQotCSAqICAgREVWX1dDCQkwMDEJMTAKLQkgKiAgIERFVl9DQUNIRUQJCTAxMQkxMAotCSAqCi0JICogT3RoZXIgYXR0cmlidXRlczoKLQkgKgotCSAqICAgRFMwID0gUFJSUlsxNl0gPSAwCQktIGRldmljZSBzaGFyZWFibGUgcHJvcGVydHkKLQkgKiAgIERTMSA9IFBSUlJbMTddID0gMQkJLSBkZXZpY2Ugc2hhcmVhYmxlIHByb3BlcnR5Ci0JICogICBOUzAgPSBQUlJSWzE4XSA9IDAJCS0gbm9ybWFsIHNoYXJlYWJsZSBwcm9wZXJ0eQotCSAqICAgTlMxID0gUFJSUlsxOV0gPSAxCQktIG5vcm1hbCBzaGFyZWFibGUgcHJvcGVydHkKLQkgKiAgIE5PUyA9IFBSUlJbMjQrbl0gPSAxCS0gbm90IG91dGVyIHNoYXJlYWJsZQotCSAqLwotCWxkcglyNSwgPTB4ZmYwYTgxYTgJCQlAIFBSUlIKLQlsZHIJcjYsID0weDQwZTA0MGUwCQkJQCBOTVJSCisJbGRyCXI1LCA9UFJSUgkJCUAgUFJSUgorCWxkcglyNiwgPU5NUlIJCQlAIE5NUlIKIAltY3IJcDE1LCAwLCByNSwgYzEwLCBjMiwgMAkJQCB3cml0ZSBQUlJSCiAJbWNyCXAxNSwgMCwgcjYsIGMxMCwgYzIsIDEJCUAgd3JpdGUgTk1SUgogI2VuZGlmCkBAIC0zNTEsNiArNDE2LDkgQEAKIAkud29yZAljcHVfdjdfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfdjdfc3dpdGNoX21tCiAJLndvcmQJY3B1X3Y3X3NldF9wdGVfZXh0CisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJdjdfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHY3X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwppbmRleCBlYzI2MzU1Li42M2Q4YjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUwpAQCAtNDEzLDkgKzQxMyw1MiBAQAogCW1vdglwYywgbHIKIAogCS5sdG9yZwotCiAJLmFsaWduCiAKKy5nbG9ibAljcHVfeHNjM19zdXNwZW5kX3NpemUKKy5lcXUJY3B1X3hzYzNfc3VzcGVuZF9zaXplLCA0ICogOAorI2lmZGVmIENPTkZJR19QTQorRU5UUlkoY3B1X3hzYzNfZG9fc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyNCAtIHIxMCwgbHJ9CisJbXJjCXAxNCwgMCwgcjQsIGM2LCBjMCwgMAlAIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGZvciB0dXJibyBtb2RlCisJbXJjCXAxNSwgMCwgcjUsIGMxNSwgYzEsIDAJQCBDUCBhY2Nlc3MgcmVnCisJbXJjCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJQCBQSUQKKwltcmMgCXAxNSwgMCwgcjcsIGMzLCBjMCwgMAlAIGRvbWFpbiBJRAorCW1yYyAJcDE1LCAwLCByOCwgYzIsIGMwLCAwCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMQlAIGF1eGlsaWFyeSBjb250cm9sIHJlZworCW1yYyAJcDE1LCAwLCByMTAsIGMxLCBjMCwgMAlAIGNvbnRyb2wgcmVnCisJYmljCXI0LCByNCwgIzIJCUAgY2xlYXIgZnJlcXVlbmN5IGNoYW5nZSBiaXQKKwlzdG1pYQlyMCwge3IxLCByNCAtIHIxMH0JQCBzdG9yZSB2OnAgb2Zmc2V0ICsgY3AgcmVncworCWxkbWlhCXNwISwge3I0IC0gcjEwLCBwY30KK0VORFBST0MoY3B1X3hzYzNfZG9fc3VzcGVuZCkKKworRU5UUlkoY3B1X3hzYzNfZG9fcmVzdW1lKQorCWxkbWlhCXIwLCB7cjEsIHI0IC0gcjEwfQlAIGxvYWQgdjpwIG9mZnNldCArIGNwIHJlZ3MKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAlAIGludmFsaWRhdGUgSSAmIEQgY2FjaGVzLCBCVEIKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAlAIGRyYWluIHdyaXRlICgmZmlsbCkgYnVmZmVyCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgNAlAIGZsdXNoIHByZWZldGNoIGJ1ZmZlcgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltY3IJcDE0LCAwLCByNCwgYzYsIGMwLCAwCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgdHVyYm8gbW9kZS4KKwltY3IJcDE1LCAwLCByNSwgYzE1LCBjMSwgMAlAIENQIGFjY2VzcyByZWcKKwltY3IJcDE1LCAwLCByNiwgYzEzLCBjMCwgMAlAIFBJRAorCW1jcglwMTUsIDAsIHI3LCBjMywgYzAsIDAJQCBkb21haW4gSUQKKwltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAwCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbWNyCXAxNSwgMCwgcjksIGMxLCBjMCwgMQlAIGF1eGlsaWFyeSBjb250cm9sIHJlZworCisJQCB0ZW1wb3JhcmlseSBtYXAgcmVzdW1lX3R1cm5fb25fbW11IGludG8gdGhlIHBhZ2UgdGFibGUsCisJQCBvdGhlcndpc2UgcHJlZmV0Y2ggYWJvcnQgb2NjdXJzIGFmdGVyIE1NVSBpcyB0dXJuZWQgb24KKwltb3YJcjAsIHIxMAkJCUAgY29udHJvbCByZWdpc3RlcgorCW1vdglyMiwgcjgsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsID0weDU0MmUJCUAgc2VjdGlvbiBmbGFncworCWIJY3B1X3Jlc3VtZV9tbXUKK0VORFBST0MoY3B1X3hzYzNfZG9fcmVzdW1lKQorI2Vsc2UKKyNkZWZpbmUgY3B1X3hzYzNfZG9fc3VzcGVuZAkwCisjZGVmaW5lIGNwdV94c2MzX2RvX3Jlc3VtZQkwCisjZW5kaWYKKwogCV9fQ1BVSU5JVAogCiAJLnR5cGUJX194c2MzX3NldHVwLCAjZnVuY3Rpb24KQEAgLTQ3Niw2ICs1MTksOSBAQAogCS53b3JkCWNwdV94c2MzX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3hzYzNfc3dpdGNoX21tCiAJLndvcmQJY3B1X3hzYzNfc2V0X3B0ZV9leHQKKwkud29yZAljcHVfeHNjM19zdXNwZW5kX3NpemUKKwkud29yZAljcHVfeHNjM19kb19zdXNwZW5kCisJLndvcmQJY3B1X3hzYzNfZG9fcmVzdW1lCiAJLnNpemUJeHNjM19wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0geHNjM19wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IDVhMzdjNWUuLjA4NjAzOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtNTEzLDExICs1MTMsNDkgQEAKIAl4c2NhbGVfc2V0X3B0ZV9leHRfZXBpbG9ndWUKIAltb3YJcGMsIGxyCiAKLQogCS5sdG9yZwotCiAJLmFsaWduCiAKKy5nbG9ibAljcHVfeHNjYWxlX3N1c3BlbmRfc2l6ZQorLmVxdQljcHVfeHNjYWxlX3N1c3BlbmRfc2l6ZSwgNCAqIDcKKyNpZmRlZiBDT05GSUdfUE0KK0VOVFJZKGNwdV94c2NhbGVfZG9fc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyNCAtIHIxMCwgbHJ9CisJbXJjCXAxNCwgMCwgcjQsIGM2LCBjMCwgMAlAIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGZvciB0dXJibyBtb2RlCisJbXJjCXAxNSwgMCwgcjUsIGMxNSwgYzEsIDAJQCBDUCBhY2Nlc3MgcmVnCisJbXJjCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJQCBQSUQKKwltcmMJcDE1LCAwLCByNywgYzMsIGMwLCAwCUAgZG9tYWluIElECisJbXJjCXAxNSwgMCwgcjgsIGMyLCBjMCwgMAlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgorCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzEsIDAJQCBhdXhpbGlhcnkgY29udHJvbCByZWcKKwltcmMJcDE1LCAwLCByMTAsIGMxLCBjMCwgMAlAIGNvbnRyb2wgcmVnCisJYmljCXI0LCByNCwgIzIJCUAgY2xlYXIgZnJlcXVlbmN5IGNoYW5nZSBiaXQKKwlzdG1pYQlyMCwge3I0IC0gcjEwfQkJQCBzdG9yZSBjcCByZWdzCisJbGRtZmQJc3AhLCB7cjQgLSByMTAsIHBjfQorRU5EUFJPQyhjcHVfeHNjYWxlX2RvX3N1c3BlbmQpCisKK0VOVFJZKGNwdV94c2NhbGVfZG9fcmVzdW1lKQorCWxkbWlhCXIwLCB7cjQgLSByMTB9CQlAIGxvYWQgY3AgcmVncworCW1vdglpcCwgIzAKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAlAIGludmFsaWRhdGUgSSAmIEQgY2FjaGVzLCBCVEIKKwltY3IJcDE0LCAwLCByNCwgYzYsIGMwLCAwCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgdHVyYm8gbW9kZS4KKwltY3IJcDE1LCAwLCByNSwgYzE1LCBjMSwgMAlAIENQIGFjY2VzcyByZWcKKwltY3IJcDE1LCAwLCByNiwgYzEzLCBjMCwgMAlAIFBJRAorCW1jcglwMTUsIDAsIHI3LCBjMywgYzAsIDAJQCBkb21haW4gSUQKKwltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAwCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbWNyCXAxNSwgMCwgcjksIGMxLCBjMSwgMAlAIGF1eGlsaWFyeSBjb250cm9sIHJlZworCW1vdglyMCwgcjEwCQkJQCBjb250cm9sIHJlZ2lzdGVyCisJbW92CXIyLCByOCwgbHNyICMxNAkJQCBnZXQgVFRCMCBiYXNlCisJbW92CXIyLCByMiwgbHNsICMxNAorCWxkcglyMywgPVBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQkgICAgIFBNRF9TRUNUX0NBQ0hFQUJMRSB8IFBNRF9TRUNUX0FQX1dSSVRFCisJYgljcHVfcmVzdW1lX21tdQorRU5EUFJPQyhjcHVfeHNjYWxlX2RvX3Jlc3VtZSkKKyNlbHNlCisjZGVmaW5lIGNwdV94c2NhbGVfZG9fc3VzcGVuZAkwCisjZGVmaW5lIGNwdV94c2NhbGVfZG9fcmVzdW1lCTAKKyNlbmRpZgorCiAJX19DUFVJTklUCiAKIAkudHlwZQlfX3hzY2FsZV9zZXR1cCwgI2Z1bmN0aW9uCkBAIC01NjUsNiArNjAzLDkgQEAKIAkud29yZAljcHVfeHNjYWxlX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3hzY2FsZV9zd2l0Y2hfbW0KIAkud29yZAljcHVfeHNjYWxlX3NldF9wdGVfZXh0CisJLndvcmQJY3B1X3hzY2FsZV9zdXNwZW5kX3NpemUKKwkud29yZAljcHVfeHNjYWxlX2RvX3N1c3BlbmQKKwkud29yZAljcHVfeHNjYWxlX2RvX3Jlc3VtZQogCS5zaXplCXhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0geHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvY29tbW9uLmMgYi9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYwppbmRleCA4YWE5NzQ0Li5jMDc0ZTY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9jb21tb24uYwpAQCAtMTAsOCArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9vcHJvZmlsZS5oPgpAQCAtNDYsNiArNDQsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiB9CisjZW5kaWYKIAogc3RhdGljIGludCByZXBvcnRfdHJhY2Uoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lLCB2b2lkICpkKQogewpAQCAtODUsNyArODQsNyBAQAogCiAJLyogZnJhbWUgcG9pbnRlcnMgc2hvdWxkIHN0cmljdGx5IHByb2dyZXNzIGJhY2sgdXAgdGhlIHN0YWNrCiAJICogKHRvd2FyZHMgaGlnaGVyIGFkZHJlc3NlcykgKi8KLQlpZiAodGFpbCA+PSBidWZ0YWlsWzBdLmZwKQorCWlmICh0YWlsICsgMSA+PSBidWZ0YWlsWzBdLmZwKQogCQlyZXR1cm4gTlVMTDsKIAogCXJldHVybiBidWZ0YWlsWzBdLmZwLTE7CkBAIC0xMTEsNiArMTEwLDcgQEAKIAogaW50IF9faW5pdCBvcHJvZmlsZV9hcmNoX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKIHsKKwkvKiBwcm92aWRlIGJhY2t0cmFjZSBzdXBwb3J0IGFsc28gaW4gdGltZXIgbW9kZTogKi8KIAlvcHMtPmJhY2t0cmFjZQkJPSBhcm1fYmFja3RyYWNlOwogCiAJcmV0dXJuIG9wcm9maWxlX3BlcmZfaW5pdChvcHMpOwpAQCAtMTIwLDExICsxMjAsMyBAQAogewogCW9wcm9maWxlX3BlcmZfZXhpdCgpOwogfQotI2Vsc2UKLWludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCi17Ci0JcHJfaW5mbygib3Byb2ZpbGU6IGhhcmR3YXJlIGNvdW50ZXJzIG5vdCBhdmFpbGFibGVcbiIpOwotCXJldHVybiAtRU5PREVWOwotfQotdm9pZCBfX2V4aXQgb3Byb2ZpbGVfYXJjaF9leGl0KHZvaWQpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0hXX1BFUkZfRVZFTlRTICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCAzYTcwZWJmLi5mZjQ2OWM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTk1LDYgKzk1LDcgQEAKIAljYXNlIE1BQ0hfVFlQRV9NWDM1XzNEUzoKIAljYXNlIE1BQ0hfVFlQRV9QQ00wNDM6CiAJY2FzZSBNQUNIX1RZUEVfTElMTFkxMTMxOgorCWNhc2UgTUFDSF9UWVBFX1ZQUjIwMDoKIAkJdWFydF9iYXNlID0gTVgzWF9VQVJUMV9CQVNFX0FERFI7CiAJCWJyZWFrOwogCWNhc2UgTUFDSF9UWVBFX01BR1hfWk41OgpAQCAtMTAyLDYgKzEwMyw3IEBACiAJCWJyZWFrOwogCWNhc2UgTUFDSF9UWVBFX01YNTFfQkFCQkFHRToKIAljYXNlIE1BQ0hfVFlQRV9FVUtSRUFfQ1BVSU1YNTFTRDoKKwljYXNlIE1BQ0hfVFlQRV9NWDUxXzNEUzoKIAkJdWFydF9iYXNlID0gTVg1MV9VQVJUMV9CQVNFX0FERFI7CiAJCWJyZWFrOwogCWNhc2UgTUFDSF9UWVBFX01YNTBfUkRQOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKaW5kZXggNDU5YjMxOS4uNDlkMzIwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCkBAIC0zMjIsMTUgKzMyMiwxOCBAQAogCiBzdHJ1Y3Qgb21hcF9tYm94ICpvbWFwX21ib3hfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiB7Ci0Jc3RydWN0IG9tYXBfbWJveCAqbWJveDsKLQlpbnQgcmV0OworCXN0cnVjdCBvbWFwX21ib3ggKl9tYm94LCAqbWJveCA9IE5VTEw7CisJaW50IGksIHJldDsKIAogCWlmICghbWJveGVzKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCWZvciAobWJveCA9ICptYm94ZXM7IG1ib3g7IG1ib3grKykKLQkJaWYgKCFzdHJjbXAobWJveC0+bmFtZSwgbmFtZSkpCisJZm9yIChpID0gMDsgKF9tYm94ID0gbWJveGVzW2ldKTsgaSsrKSB7CisJCWlmICghc3RyY21wKF9tYm94LT5uYW1lLCBuYW1lKSkgeworCQkJbWJveCA9IF9tYm94OwogCQkJYnJlYWs7CisJCX0KKwl9CiAKIAlpZiAoIW1ib3gpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMgYi9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYwppbmRleCBiNzdlMDE4Li5hOWFhNWFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYworKysgYi9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYwpAQCAtMTM5LDEwICsxMzksMTEgQEAKICNkZWZpbmUgbWZwX2NvbmZpZ3VyZWQocCkJKChwKS0+Y29uZmlnICE9IC0xKQogCiAvKgotICogcGVyZm9ybSBhIHJlYWQtYmFjayBvZiBhbnkgTUZQUiByZWdpc3RlciB0byBtYWtlIHN1cmUgdGhlCisgKiBwZXJmb3JtIGEgcmVhZC1iYWNrIG9mIGFueSB2YWxpZCBNRlBSIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZSB0aGUKICAqIHByZXZpb3VzIHdyaXRpbmdzIGFyZSBmaW5pc2hlZAogICovCi0jZGVmaW5lIG1mcHJfc3luYygpCSh2b2lkKV9fcmF3X3JlYWRsKG1mcHJfbW1pb19iYXNlICsgMCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1mcHJfb2ZmX3JlYWRiYWNrOworI2RlZmluZSBtZnByX3N5bmMoKQkodm9pZClfX3Jhd19yZWFkbChtZnByX21taW9fYmFzZSArIG1mcHJfb2ZmX3JlYWRiYWNrKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19tZnBfY29uZmlnX3J1bihzdHJ1Y3QgbWZwX3BpbiAqcCkKIHsKQEAgLTI0OCw2ICsyNDksOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKIAorCS8qIG1mcCBvZmZzZXQgZm9yIHJlYWRiYWNrICovCisJbWZwcl9vZmZfcmVhZGJhY2sgPSBtYXBbMF0ub2Zmc2V0OworCiAJZm9yIChwID0gbWFwOyBwLT5zdGFydCAhPSBNRlBfUElOX0lOVkFMSUQ7IHArKykgewogCQlvZmZzZXQgPSBwLT5vZmZzZXQ7CiAJCWkgPSBwLT5zdGFydDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMKaW5kZXggZTczZTNiNmUuLmZkNzAzMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCkBAIC00NCwyMyArNDQsMTMgQEAKIAkvKiBzM2NfY3B1X3NhdmUKIAkgKgogCSAqIGVudHJ5OgotCSAqCXIwID0gc2F2ZSBhZGRyZXNzICh2aXJ0dWFsIGFkZHIgb2YgczNjX3NsZWVwX3NhdmVfcGh5cykKKwkgKglyMSA9IHY6cCBvZmZzZXQKIAkqLwogCiBFTlRSWShzM2NfY3B1X3NhdmUpCiAJc3RtZmQJc3AhLCB7IHI0IC0gcjEyLCBsciB9Ci0KLQlAQCBzdG9yZSBjby1wcm9jZXNzb3IgcmVnaXN0ZXJzCi0KLQltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIFBJRAotCW1yYwlwMTUsIDAsIHI1LCBjMywgYzAsIDAJQCBEb21haW4gSUQKLQltcmMJcDE1LCAwLCByNiwgYzIsIGMwLCAwCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyZXNzCi0JbXJjCXAxNSwgMCwgcjcsIGMxLCBjMCwgMAlAIGNvbnRyb2wgcmVnaXN0ZXIKLQotCXN0bWlhCXIwLCB7IHI0IC0gcjEzIH0KLQotCUBAIHdyaXRlIG91ciBzdGF0ZSBiYWNrIHRvIFJBTQotCWJsCXMzY19wbV9jYl9mbHVzaGNhY2hlCisJbGRyCXIzLCA9cmVzdW1lX3dpdGhfbW11CisJYmwJY3B1X3N1c3BlbmQKIAogCUBAIGp1bXAgdG8gZmluYWwgY29kZSB0byBzZW5kIHN5c3RlbSB0byBzbGVlcAogCWxkcglyMCwgPXBtX2NwdV9zbGVlcApAQCAtNzYsMjAgKzY2LDYgQEAKIAogCS5sdG9yZwogCi0JQEAgdGhlIG5leHQgYml0cyBzaXQgaW4gdGhlIC5kYXRhIHNlZ21lbnQsIGV2ZW4gdGhvdWdoIHRoZXkKLQlAQCBoYXBwZW4gdG8gYmUgY29kZS4uLiB0aGUgczNjX3NsZWVwX3NhdmVfcGh5cyBuZWVkcyB0byBiZQotCUBAIGFjY2Vzc2VkIGJ5IHRoZSByZXN1bWUgY29kZSBiZWZvcmUgaXQgY2FuIHJlc3RvcmUgdGhlIE1NVS4KLQlAQCBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGhhcyB0byBiZSBjbG9zZSBlbm91Z2ggZm9yIHRoZQotCUBAIGNvZGUgdG8gcmVhZCBpdC4uLiBzaW5jZSB0aGUgLnRleHQgc2VnbWVudCBuZWVkcyB0byBiZSBSTywKLQlAQCB0aGUgZGF0YSBzZWdtZW50IGNhbiBiZSB0aGUgb25seSBwbGFjZSB0byBwdXQgdGhpcyBjb2RlLgotCi0JLmRhdGEKLQotCS5nbG9iYWwJczNjX3NsZWVwX3NhdmVfcGh5cwotczNjX3NsZWVwX3NhdmVfcGh5czoKLQkud29yZAkwCi0KLQogCS8qIHNsZWVwIG1hZ2ljLCB0byBhbGxvdyB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBmb3IgYW4gdmFsaWQKIAkgKiBpbWFnZSB0byByZXN1bWUgdG8uIE11c3QgYmUgdGhlIGZpcnN0IHdvcmQgYmVmb3JlIHRoZQogCSAqIHMzY19jcHVfcmVzdW1lIGVudHJ5LgpAQCAtMTAwLDEwICs3Niw2IEBACiAJLyogczNjX2NwdV9yZXN1bWUKIAkgKgogCSAqIHJlc3VtZSBjb2RlIGVudHJ5IGZvciBib290bG9hZGVyIHRvIGNhbGwKLQkgKgotCSAqIHdlIG11c3QgcHV0IHRoaXMgY29kZSBoZXJlIGluIHRoZSBkYXRhIHNlZ21lbnQgYXMgd2UgaGF2ZSBubwotCSAqIG90aGVyIHdheSBvZiByZXN0b3JpbmcgdGhlIHN0YWNrIHBvaW50ZXIgYWZ0ZXIgc2xlZXAsIGFuZCB3ZQotCSAqIG11c3Qgbm90IHdyaXRlIHRvIHRoZSBjb2RlIHNlZ21lbnQgKGNvZGUgaXMgcmVhZC1vbmx5KQogCSovCiAKIEVOVFJZKHMzY19jcHVfcmVzdW1lKQpAQCAtMTM0LDI1ICsxMDYsNCBAQAogCWJlcQkxMDAxYgogI2VuZGlmIC8qIENPTkZJR19ERUJVR19SRVNVTUUgKi8KIAotCW1vdglyMSwgIzAKLQltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCQlAQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKLQltY3IJcDE1LCAwLCByMSwgYzcsIGM3LCAwCQlAQCBpbnZhbGlkYXRlIEkgJiBEIGNhY2hlcwotCi0JbGRyCXIwLCBzM2Nfc2xlZXBfc2F2ZV9waHlzCQlAIGFkZHJlc3Mgb2YgcmVzdG9yZSBibG9jawotCWxkbWlhCXIwLCB7IHI0IC0gcjEzIH0KLQotCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCQlAIFBJRAotCW1jcglwMTUsIDAsIHI1LCBjMywgYzAsIDAJCUAgRG9tYWluIElECi0JbWNyCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlCi0KLSNpZmRlZiBDT05GSUdfREVCVUdfUkVTVU1FCi0JbW92CXIzLCAjJ1InCi0Jc3RyYglyMywgWyByMiwgI1MzQzI0MTBfVVRYSCBdCi0jZW5kaWYKLQotCWxkcglyMiwgPXJlc3VtZV93aXRoX21tdQotCW1jcglwMTUsIDAsIHI3LCBjMSwgYzAsIDAJCUAgdHVybiBvbiBNTVUsIGV0YwotCW5vcAkJCQkJQCBzZWNvbmQtdG8tbGFzdCBiZWZvcmUgbW11Ci0JbW92CXBjLCByMgkJCQlAIGdvIGJhY2sgdG8gdmlydHVhbCBhZGRyZXNzCi0KLQkubHRvcmcKKwliCWNwdV9yZXN1bWUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnCmluZGV4IGRlYjM5OTUuLjU1N2Y4YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZwpAQCAtMzcsNiArMzcsMTQgQEAKIAloZWxwCiAJICBDb21tb24gY29kZSBmb3IgdGhlIEdQSU8gaW50ZXJydXB0cyAob3RoZXIgdGhhbiBleHRlcm5hbCBpbnRlcnJ1cHRzLikKIAorY29tbWVudCAiU3lzdGVtIE1NVSIKKworY29uZmlnIFM1UF9TWVNURU1fTU1VCisJYm9vbCAiUzVQIFNZU1RFTSBNTVUiCisJZGVwZW5kcyBvbiBBUkNIX1M1UFYzMTAKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBTeXN0ZW0gTU1VCisKIGNvbmZpZyBTNVBfREVWX0ZJTUMwCiAJYm9vbAogCWhlbHAKQEAgLTY2LDE5ICs3NCwzIEBACiAJYm9vbAogCWhlbHAKIAkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zIGZvciBNSVBJLUNTSVMgY2hhbm5lbCAxCi0KLW1lbnVjb25maWcgUzVQX1NZU01NVQotCWJvb2wgIlNZU01NVSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJDSF9TNVBWMzEwCi0JaGVscAotCSAgVGhpcyBpcyBhIFN5c3RlbSBNTVUgZHJpdmVyIGZvciBTYW1zdW5nIEFSTSBiYXNlZCBTb2MuCi0KLWlmIFM1UF9TWVNNTVUKLQotY29uZmlnIFM1UF9TWVNNTVVfREVCVUcKLQlib29sICJFbmFibGVzIGRlYnVnIG1lc3NhZ2VzIgotCWRlcGVuZHMgb24gUzVQX1NZU01NVQotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBTWVNNTVUgZHJpdmVyIGRlYnVnIG1hc3NhZ2VzLgotCi1lbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZQppbmRleCA5MmVmZTFhLi40YmQ1Y2Y5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQAogb2JqLXkJCQkJKz0gaXJxLm8KIG9iai0kKENPTkZJR19TNVBfRVhUX0lOVCkJKz0gaXJxLWVpbnQubwogb2JqLSQoQ09ORklHX1M1UF9HUElPX0lOVCkJKz0gaXJxLWdwaW9pbnQubworb2JqLSQoQ09ORklHX1M1UF9TWVNURU1fTU1VKQkrPSBzeXNtbXUubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gaXJxLXBtLm8KIApAQCAtMzAsNCArMzEsMyBAQAogb2JqLSQoQ09ORklHX1M1UF9ERVZfT05FTkFORCkJKz0gZGV2LW9uZW5hbmQubwogb2JqLSQoQ09ORklHX1M1UF9ERVZfQ1NJUzApCSs9IGRldi1jc2lzMC5vCiBvYmotJChDT05GSUdfUzVQX0RFVl9DU0lTMSkJKz0gZGV2LWNzaXMxLm8KLW9iai0kKENPTkZJR19TNVBfU1lTTU1VKQkrPSBzeXNtbXUubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LXVhcnQuYyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi11YXJ0LmMKaW5kZXggNmE3MzQyOC4uYWZhZjg3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LXVhcnQuYworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9kZXYtdWFydC5jCkBAIC0yOCw3ICsyOCw3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cF91YXJ0MF9yZXNvdXJjZVtdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gUzVQX1BBX1VBUlQwLAotCQkuZW5kCT0gUzVQX1BBX1VBUlQwICsgUzVQX1NaX1VBUlQsCisJCS5lbmQJPSBTNVBfUEFfVUFSVDAgKyBTNVBfU1pfVUFSVCAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtNTEsNyArNTEsNyBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBfdWFydDFfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IFM1UF9QQV9VQVJUMSwKLQkJLmVuZAk9IFM1UF9QQV9VQVJUMSArIFM1UF9TWl9VQVJULAorCQkuZW5kCT0gUzVQX1BBX1VBUlQxICsgUzVQX1NaX1VBUlQgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTc0LDcgKzc0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwX3VhcnQyX3Jlc291cmNlW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBTNVBfUEFfVUFSVDIsCi0JCS5lbmQJPSBTNVBfUEFfVUFSVDIgKyBTNVBfU1pfVUFSVCwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUMiArIFM1UF9TWl9VQVJUIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC05OCw3ICs5OCw3IEBACiAjaWYgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTID4gMwogCVswXSA9IHsKIAkJLnN0YXJ0CT0gUzVQX1BBX1VBUlQzLAotCQkuZW5kCT0gUzVQX1BBX1VBUlQzICsgUzVQX1NaX1VBUlQsCisJCS5lbmQJPSBTNVBfUEFfVUFSVDMgKyBTNVBfU1pfVUFSVCAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtMTIzLDcgKzEyMyw3IEBACiAjaWYgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTID4gNAogCVswXSA9IHsKIAkJLnN0YXJ0CT0gUzVQX1BBX1VBUlQ0LAotCQkuZW5kCT0gUzVQX1BBX1VBUlQ0ICsgUzVQX1NaX1VBUlQsCisJCS5lbmQJPSBTNVBfUEFfVUFSVDQgKyBTNVBfU1pfVUFSVCAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtMTQ4LDcgKzE0OCw3IEBACiAjaWYgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTID4gNQogCVswXSA9IHsKIAkJLnN0YXJ0CT0gUzVQX1BBX1VBUlQ1LAotCQkuZW5kCT0gUzVQX1BBX1VBUlQ1ICsgUzVQX1NaX1VBUlQsCisJCS5lbmQJPSBTNVBfUEFfVUFSVDUgKyBTNVBfU1pfVUFSVCAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3N5c21tdS5oIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3N5c21tdS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjI5OGZjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zeXNtbXUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zeXNtbXUuaAotICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCi0gKgotICogU2Ftc3VuZyBzeXNtbXUgZHJpdmVyCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpZm5kZWYgX19BU01fUExBVF9TNVBfU1lTTU1VX0gKLSNkZWZpbmUgX19BU01fUExBVF9TNVBfU1lTTU1VX0ggX19GSUxFX18KLQotLyogZGVidWcgbWFjcm8gKi8KLSNpZmRlZiBDT05GSUdfUzVQX1NZU01NVV9ERUJVRwotI2RlZmluZSBzeXNtbXVfZGVidWcoZm10LCBhcmcuLi4pCXByaW50ayhLRVJOX0lORk8gIlslc10gIiBmbXQsIF9fZnVuY19fLCAjIyBhcmcpCi0jZWxzZQotI2RlZmluZSBzeXNtbXVfZGVidWcoZm10LCBhcmcuLi4pCWRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU01fUExBVF9TNVBfU1lTTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL3N5c21tdS5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvc3lzbW11LmMKaW5kZXggZDgwNDkxNC4uZmZlOGE0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvc3lzbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvc3lzbW11LmMKQEAgLTE2LDggKzE2LDYgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3lzbW11Lmg+CiAjaW5jbHVkZSA8bWFjaC9zeXNtbXUuaD4KIAotI2luY2x1ZGUgPHBsYXQvc3lzbW11Lmg+Ci0KIHN0cnVjdCBzeXNtbXVfY29udHJvbGxlciBzNXBfc3lzbW11X2NudGxyc1tTNVBfU1lTTU1VX1RPVEFMX0lQTlVNXTsKIAogdm9pZCBzNXBfc3lzbW11X3JlZ2lzdGVyKHN0cnVjdCBzeXNtbXVfY29udHJvbGxlciAqc3lzbW11Y29ucCkKQEAgLTEyMyw3ICsxMjEsNyBAQAogCQk6ICI9ciIgKHBnKSA6IDogImNjIik7CQlcCiAJCXBnICY9IH4weDNmZmY7CiAKLQlzeXNtbXVfZGVidWcoIkNQMTUgVFRCUjAgOiAweCV4XG4iLCBwZyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENQMTUgVFRCUjAgOiAweCV4XG4iLCBfX2Z1bmNfXywgcGcpOwogCiAJLyogU2V0IHN5c21tdSBwYWdlIHRhYmxlIGJhc2UgYWRkcmVzcyAqLwogCV9fcmF3X3dyaXRlbChwZywgc3lzbW11Y29ucC0+cmVncyArIFM1UF9QVF9CQVNFX0FERFIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi10cy5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi10cy5jCmluZGV4IDIzNmVmODQuLjNlNGJkODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdHMuYworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXRzLmMKQEAgLTU4LDQgKzU4LDMgQEAKIAogCXMzY19kZXZpY2VfdHMuZGV2LnBsYXRmb3JtX2RhdGEgPSBucGQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHMzYzI0eHhfdHNfc2V0X3BsYXRkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdWFydC5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi11YXJ0LmMKaW5kZXggMzc3NmNkOS4uNTkyODEwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi11YXJ0LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi11YXJ0LmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorCiAvKiB1YXJ0IGRldmljZXMgKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTAgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmgKaW5kZXggZDkwMjVlMy4uOTM3Y2MyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcG0uaApAQCAtMTcsNiArMTcsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKK3N0cnVjdCBzeXNfZGV2aWNlOworCiAjaWZkZWYgQ09ORklHX1BNCiAKIGV4dGVybiBfX2luaXQgaW50IHMzY19wbV9pbml0KHZvaWQpOwpAQCAtNTAsMTMgKzUyLDExIEBACiAKIC8qIGZyb20gc2xlZXAuUyAqLwogCi1leHRlcm4gaW50ICBzM2NfY3B1X3NhdmUodW5zaWduZWQgbG9uZyAqc2F2ZWJsayk7CitleHRlcm4gaW50ICBzM2NfY3B1X3NhdmUodW5zaWduZWQgbG9uZyAqc2F2ZWJsaywgbG9uZyk7CiBleHRlcm4gdm9pZCBzM2NfY3B1X3Jlc3VtZSh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgczNjMjQxMF9jcHVfc3VzcGVuZCh2b2lkKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX3NsZWVwX3NhdmVfcGh5czsKLQogLyogc2xlZXAgc2F2ZSBpbmZvICovCiAKIC8qKgpAQCAtMTc5LDEzICsxNzksNSBAQAogICovCiBleHRlcm4gdm9pZCBzM2NfcG1fc2F2ZV9ncGlvcyh2b2lkKTsKIAotLyoqCi0gKiBzM2NfcG1fY2JfZmx1c2hjYWNoZSAtIGNhbGxiYWNrIGZvciBhc3NlbWJseSBjb2RlCi0gKgotICogQ2FsbGJhY2sgdG8gaXNzdWUgZmx1c2hfY2FjaGVfYWxsKCkgYXMgdGhpcyBjYWxsIGlzCi0gKiBub3QgYSBkaXJlY3RseSBjYWxsYWJsZSBvYmplY3QuCi0gKi8KLWV4dGVybiB2b2lkIHMzY19wbV9jYl9mbHVzaGNhY2hlKHZvaWQpOwotCiBleHRlcm4gdm9pZCBzM2NfcG1fc2F2ZV9jb3JlKHZvaWQpOwogZXh0ZXJuIHZvaWQgczNjX3BtX3Jlc3RvcmVfY29yZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLmMKaW5kZXggMDJkNTMxZi4uZDViNThkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLmMKQEAgLTI0MSw4ICsyNDEsNiBAQAogCiBzdGF0aWMgaW50IHMzY19wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVnc19zYXZlWzE2XTsKLQogCS8qIGVuc3VyZSB0aGUgZGVidWcgaXMgaW5pdGlhbGlzZWQgKGlmIGVuYWJsZWQpICovCiAKIAlzM2NfcG1fZGVidWdfaW5pdCgpOwpAQCAtMjY2LDEyICsyNjQsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBzdG9yZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcmVnaXN0ZXIgcmVjb3ZlcnkgYmxvY2sgKi8KLQotCXMzY19zbGVlcF9zYXZlX3BoeXMgPSB2aXJ0X3RvX3BoeXMocmVnc19zYXZlKTsKLQotCVMzQ19QTURCRygiczNjX3NsZWVwX3NhdmVfcGh5cz0weCUwOGx4XG4iLCBzM2Nfc2xlZXBfc2F2ZV9waHlzKTsKLQogCS8qIHNhdmUgYWxsIG5lY2Vzc2FyeSBjb3JlIHJlZ2lzdGVycyBub3QgY292ZXJlZCBieSB0aGUgZHJpdmVycyAqLwogCiAJczNjX3BtX3NhdmVfZ3Bpb3MoKTsKQEAgLTMwNSw3ICsyOTcsNyBAQAogCSAqIHdlIHJlc3VtZSBhcyBpdCBzYXZlcyBpdHMgb3duIHJlZ2lzdGVyIHN0YXRlIGFuZCByZXN0b3JlcyBpdAogCSAqIGR1cmluZyB0aGUgcmVzdW1lLiAgKi8KIAotCXMzY19jcHVfc2F2ZShyZWdzX3NhdmUpOworCXMzY19jcHVfc2F2ZSgwLCBQTEFUX1BIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQpOwogCiAJLyogcmVzdG9yZSB0aGUgY3B1IHN0YXRlIHVzaW5nIHRoZSBrZXJuZWwncyBjcHUgaW5pdCBjb2RlLiAqLwogCkBAIC0zMzYsMTIgKzMyOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGNhbGxiYWNrIGZyb20gYXNzZW1ibHkgY29kZSAqLwotdm9pZCBzM2NfcG1fY2JfZmx1c2hjYWNoZSh2b2lkKQotewotCWZsdXNoX2NhY2hlX2FsbCgpOwotfQotCiBzdGF0aWMgaW50IHMzY19wbV9wcmVwYXJlKHZvaWQpCiB7CiAJLyogcHJlcGFyZSBjaGVjayBhcmVhIGlmIGNvbmZpZ3VyZWQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXNwZWFyL01ha2VmaWxlCmluZGV4IGViODk1NDBhLi5iNGYzNDBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvTWFrZWZpbGUKQEAgLTMsNiArMyw2IEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15CTo9IGNsb2NrLm8gcGFkbXV4Lm8gdGltZS5vCitvYmoteQk6PSBjbG9jay5vIHRpbWUubwogCi1vYmotJChDT05GSUdfQVJDSF9TUEVBUjNYWCkJKz0gc2hpcnEubworb2JqLSQoQ09ORklHX0FSQ0hfU1BFQVIzWFgpCSs9IHNoaXJxLm8gcGFkbXV4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvY2xvY2suYwppbmRleCBlZTRmOTBlLi5iZGJkN2VjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9jbG9jay5jCkBAIC0xMiwxOCArMTIsMjUgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bWFjaC9taXNjX3JlZ3MuaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tzX2xvY2spOwogc3RhdGljIExJU1RfSEVBRChyb290X2Nsa3MpOworI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOworI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBsaXN0X2hlYWQgKik7CitzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICosIGludCBvbl9pbml0KTsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBpbnQgY2xrX2RlYnVnZnNfcmVwYXJlbnQoc3RydWN0IGNsayAqKTsKKyNlbmRpZgogCiBzdGF0aWMgaW50IGdlbmVyaWNfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CkBAIC02NSw2ICs3MiwxMDQgQEAKIAkuZGlzYWJsZSA9IGdlbmVyaWNfY2xrX2Rpc2FibGUsCiB9OwogCisvKiByZXR1cm5zIGN1cnJlbnQgcHJvZ3JhbW1lZCBjbG9ja3MgY2xvY2sgaW5mbyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNsa19pbmZvICpwY2xrX2luZm9fZ2V0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsLCBpOworCXN0cnVjdCBwY2xrX2luZm8gKmluZm8gPSBOVUxMOworCisJdmFsID0gKHJlYWRsKGNsay0+cGNsa19zZWwtPnBjbGtfc2VsX3JlZykgPj4gY2xrLT5wY2xrX3NlbF9zaGlmdCkKKwkJJiBjbGstPnBjbGtfc2VsLT5wY2xrX3NlbF9tYXNrOworCisJZm9yIChpID0gMDsgaSA8IGNsay0+cGNsa19zZWwtPnBjbGtfY291bnQ7IGkrKykgeworCQlpZiAoY2xrLT5wY2xrX3NlbC0+cGNsa19pbmZvW2ldLnBjbGtfdmFsID09IHZhbCkKKwkJCWluZm8gPSAmY2xrLT5wY2xrX3NlbC0+cGNsa19pbmZvW2ldOworCX0KKworCXJldHVybiBpbmZvOworfQorCisvKgorICogU2V0IFVwZGF0ZSBwY2xrLCBhbmQgcGNsa19pbmZvIG9mIGNsayBhbmQgYWRkIGNsb2NrIHNpYmxpbmcgbm9kZSB0byBjdXJyZW50CisgKiBwYXJlbnRzIGNoaWxkcmVuIGxpc3QKKyAqLworc3RhdGljIHZvaWQgY2xrX3JlcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IHBjbGtfaW5mbyAqcGNsa19pbmZvKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmY2xrLT5zaWJsaW5nKTsKKwlsaXN0X2FkZCgmY2xrLT5zaWJsaW5nLCAmcGNsa19pbmZvLT5wY2xrLT5jaGlsZHJlbik7CisKKwljbGstPnBjbGsgPSBwY2xrX2luZm8tPnBjbGs7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCWNsa19kZWJ1Z2ZzX3JlcGFyZW50KGNsayk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgZG9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmICghY2xrKQorCQlyZXR1cm47CisKKwlpZiAoIWNsay0+dXNhZ2VfY291bnQpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCWNsay0+dXNhZ2VfY291bnQtLTsKKworCWlmIChjbGstPnVzYWdlX2NvdW50ID09IDApIHsKKwkJLyoKKwkJICogU3VyZWx5LCB0aGVyZSBhcmUgbm8gYWN0aXZlIGNoaWxkcmVucyBvciBkaXJlY3QgdXNlcnMKKwkJICogb2YgdGhpcyBjbG9jaworCQkgKi8KKwkJaWYgKGNsay0+cGNsaykKKwkJCWRvX2Nsa19kaXNhYmxlKGNsay0+cGNsayk7CisKKwkJaWYgKGNsay0+b3BzICYmIGNsay0+b3BzLT5kaXNhYmxlKQorCQkJY2xrLT5vcHMtPmRpc2FibGUoY2xrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZG9fY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNsaykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoY2xrLT51c2FnZV9jb3VudCA9PSAwKSB7CisJCWlmIChjbGstPnBjbGspIHsKKwkJCXJldCA9IGRvX2Nsa19lbmFibGUoY2xrLT5wY2xrKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBlcnI7CisJCX0KKwkJaWYgKGNsay0+b3BzICYmIGNsay0+b3BzLT5lbmFibGUpIHsKKwkJCXJldCA9IGNsay0+b3BzLT5lbmFibGUoY2xrKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlpZiAoY2xrLT5wY2xrKQorCQkJCQlkb19jbGtfZGlzYWJsZShjbGstPnBjbGspOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisJCS8qCisJCSAqIFNpbmNlIHRoZSBjbG9jayBpcyBnb2luZyB0byBiZSB1c2VkIGZvciB0aGUgZmlyc3QKKwkJICogdGltZSBwbGVhc2UgcmVjbGFjCisJCSAqLworCQlpZiAoY2xrLT5yZWNhbGMpIHsKKwkJCXJldCA9IGNsay0+cmVjYWxjKGNsayk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQl9CisJfQorCWNsay0+dXNhZ2VfY291bnQrKzsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogY2xrX2VuYWJsZSAtIGluZm9ybSB0aGUgc3lzdGVtIHdoZW4gdGhlIGNsb2NrIHNvdXJjZSBzaG91bGQgYmUgcnVubmluZy4KICAqIEBjbGs6IGNsb2NrIHNvdXJjZQpAQCAtNzgsMTcgKzE4Myw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghY2xrIHx8IElTX0VSUihjbGspKQotCQlyZXR1cm4gLUVGQVVMVDsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWlmIChjbGstPnVzYWdlX2NvdW50ID09IDApIHsKLQkJaWYgKGNsay0+b3BzICYmIGNsay0+b3BzLT5lbmFibGUpCi0JCQlyZXQgPSBjbGstPm9wcy0+ZW5hYmxlKGNsayk7Ci0JfQotCWNsay0+dXNhZ2VfY291bnQrKzsKKwlyZXQgPSBkb19jbGtfZW5hYmxlKGNsayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOwpAQCAtMTA5LDE3ICsyMDYsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKLQkJcmV0dXJuOwotCi0JV0FSTl9PTihjbGstPnVzYWdlX2NvdW50ID09IDApOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0JY2xrLT51c2FnZV9jb3VudC0tOwotCWlmIChjbGstPnVzYWdlX2NvdW50ID09IDApIHsKLQkJaWYgKGNsay0+b3BzICYmIGNsay0+b3BzLT5kaXNhYmxlKQotCQkJY2xrLT5vcHMtPmRpc2FibGUoY2xrKTsKLQl9CisJZG9fY2xrX2Rpc2FibGUoY2xrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CkBAIC0xNTMsMTUgKzI0MSwxNCBAQAogCWludCBpLCBmb3VuZCA9IDAsIHZhbCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghY2xrIHx8IElTX0VSUihjbGspIHx8ICFwYXJlbnQgfHwgSVNfRVJSKHBhcmVudCkpCisJaWYgKCFjbGsgfHwgIXBhcmVudCkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKGNsay0+dXNhZ2VfY291bnQpCi0JCXJldHVybiAtRUJVU1k7Ci0JaWYgKCFjbGstPnBjbGtfc2VsKQotCQlyZXR1cm4gLUVQRVJNOwogCWlmIChjbGstPnBjbGsgPT0gcGFyZW50KQogCQlyZXR1cm4gMDsKKwlpZiAoIWNsay0+cGNsa19zZWwpCisJCXJldHVybiAtRVBFUk07CiAKKwkvKiBjaGVjayBpZiByZXF1ZXN0ZWQgcGFyZW50IGlzIGluIGNsayBwYXJlbnQgbGlzdCAqLwogCWZvciAoaSA9IDA7IGkgPCBjbGstPnBjbGtfc2VsLT5wY2xrX2NvdW50OyBpKyspIHsKIAkJaWYgKGNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXS5wY2xrID09IHBhcmVudCkgewogCQkJZm91bmQgPSAxOwpAQCAtMTc2LDI1ICsyNjMsNTggQEAKIAkvKiByZWZsZWN0IHBhcmVudCBjaGFuZ2UgaW4gaGFyZHdhcmUgKi8KIAl2YWwgPSByZWFkbChjbGstPnBjbGtfc2VsLT5wY2xrX3NlbF9yZWcpOwogCXZhbCAmPSB+KGNsay0+cGNsa19zZWwtPnBjbGtfc2VsX21hc2sgPDwgY2xrLT5wY2xrX3NlbF9zaGlmdCk7Ci0JdmFsIHw9IGNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXS5wY2xrX21hc2sgPDwgY2xrLT5wY2xrX3NlbF9zaGlmdDsKKwl2YWwgfD0gY2xrLT5wY2xrX3NlbC0+cGNsa19pbmZvW2ldLnBjbGtfdmFsIDw8IGNsay0+cGNsa19zZWxfc2hpZnQ7CiAJd3JpdGVsKHZhbCwgY2xrLT5wY2xrX3NlbC0+cGNsa19zZWxfcmVnKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogCiAJLyogcmVmbGVjdCBwYXJlbnQgY2hhbmdlIGluIHNvZnR3YXJlICovCi0JY2xrLT5yZWNhbGMoY2xrKTsKLQlwcm9wYWdhdGVfcmF0ZSgmY2xrLT5jaGlsZHJlbik7CisJY2xrX3JlcGFyZW50KGNsaywgJmNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXSk7CisKKwlwcm9wYWdhdGVfcmF0ZShjbGssIDApOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7CiAKKy8qKgorICogY2xrX3NldF9yYXRlIC0gc2V0IHRoZSBjbG9jayByYXRlIGZvciBhIGNsb2NrIHNvdXJjZQorICogQGNsazogY2xvY2sgc291cmNlCisgKiBAcmF0ZTogZGVzaXJlZCBjbG9jayByYXRlIGluIEh6CisgKgorICogUmV0dXJucyBzdWNjZXNzICgwKSBvciBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKCFjbGsgfHwgIXJhdGUpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGNsay0+c2V0X3JhdGUpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKKwkJaWYgKCFyZXQpCisJCQkvKiBpZiBzdWNjZXNzZnVsIC0+IHByb3BhZ2F0ZSAqLworCQkJcHJvcGFnYXRlX3JhdGUoY2xrLCAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKGNsay0+cGNsaykgeworCQl1MzIgbXVsdCA9IGNsay0+ZGl2X2ZhY3RvciA/IGNsay0+ZGl2X2ZhY3RvciA6IDE7CisJCXJldCA9IGNsa19zZXRfcmF0ZShjbGstPnBjbGssIG11bHQgKiByYXRlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOworCiAvKiByZWdpc3RlcnMgY2xvY2sgaW4gcGxhdGZvcm0gY2xvY2sgZnJhbWV3b3JrICovCiB2b2lkIGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2wpCiB7Ci0Jc3RydWN0IGNsayAqY2xrID0gY2wtPmNsazsKKwlzdHJ1Y3QgY2xrICpjbGs7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghY2xrIHx8IElTX0VSUihjbGspKQorCWlmICghY2wgfHwgIWNsLT5jbGspCiAJCXJldHVybjsKKwljbGsgPSBjbC0+Y2xrOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CiAKQEAgLTIwNyw3MSArMzI3LDE3MyBAQAogCS8qIHJvb3QgY2xvY2sgZG9uJ3QgaGF2ZSBhbnkgcGFyZW50cyAqLwogCWlmICghY2xrLT5wY2xrICYmICFjbGstPnBjbGtfc2VsKSB7CiAJCWxpc3RfYWRkKCZjbGstPnNpYmxpbmcsICZyb290X2Nsa3MpOwotCQkvKiBhZGQgY2xvY2tzIHdpdGggb25seSBvbmUgcGFyZW50IHRvIHBhcmVudCdzIGNoaWxkcmVuIGxpc3QgKi8KIAl9IGVsc2UgaWYgKGNsay0+cGNsayAmJiAhY2xrLT5wY2xrX3NlbCkgeworCQkvKiBhZGQgY2xvY2tzIHdpdGggb25seSBvbmUgcGFyZW50IHRvIHBhcmVudCdzIGNoaWxkcmVuIGxpc3QgKi8KIAkJbGlzdF9hZGQoJmNsay0+c2libGluZywgJmNsay0+cGNsay0+Y2hpbGRyZW4pOwogCX0gZWxzZSB7Ci0JCS8qIGFkZCBjbG9ja3Mgd2l0aCA+IDEgcGFyZW50IHRvIDFzdCBwYXJlbnQncyBjaGlsZHJlbiBsaXN0ICovCi0JCWxpc3RfYWRkKCZjbGstPnNpYmxpbmcsCi0JCQkgJmNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1swXS5wY2xrLT5jaGlsZHJlbik7CisJCS8qIGNsb2NrcyB3aXRoIG1vcmUgdGhhbiBvbmUgcGFyZW50ICovCisJCXN0cnVjdCBwY2xrX2luZm8gKnBjbGtfaW5mbzsKKworCQlwY2xrX2luZm8gPSBwY2xrX2luZm9fZ2V0KGNsayk7CisJCWlmICghcGNsa19pbmZvKSB7CisJCQlwcl9lcnIoIkNMS0RFVjogaW52YWxpZCBwY2xrIGluZm8gb2YgY2xrIHdpdGgiCisJCQkJCSIgJXMgZGV2X2lkIGFuZCAlcyBjb25faWRcbiIsCisJCQkJCWNsLT5kZXZfaWQsIGNsLT5jb25faWQpOworCQl9IGVsc2UgeworCQkJY2xrLT5wY2xrID0gcGNsa19pbmZvLT5wY2xrOworCQkJbGlzdF9hZGQoJmNsay0+c2libGluZywgJnBjbGtfaW5mby0+cGNsay0+Y2hpbGRyZW4pOworCQl9CiAJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKIAorCS8qIGRlYnVnZnMgc3BlY2lmaWMgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwlsaXN0X2FkZCgmY2xrLT5ub2RlLCAmY2xvY2tzKTsKKwljbGstPmNsID0gY2w7CisjZW5kaWYKKwogCS8qIGFkZCBjbG9jayB0byBhcm0gY2xvY2tkZXYgZnJhbWV3b3JrICovCiAJY2xrZGV2X2FkZChjbCk7CiB9CiAKIC8qKgotICogcHJvcGFnYXRlX3JhdGUgLSByZWNhbGN1bGF0ZSBhbmQgcHJvcGFnYXRlIGFsbCBjbG9ja3MgaW4gbGlzdCBoZWFkCisgKiBwcm9wYWdhdGVfcmF0ZSAtIHJlY2FsY3VsYXRlIGFuZCBwcm9wYWdhdGUgYWxsIGNsb2NrcyB0byBjaGlsZHJlbgorICogQHBjbGs6IHBhcmVudCBjbG9jayByZXF1aXJlZCB0byBiZSBwcm9wb2dhdGVkCisgKiBAb25faW5pdDogZmxhZyBmb3IgZW5hYmxpbmcgY2xvY2tzIHdoaWNoIGFyZSBFTkFCTEVEX09OX0lOSVQuCiAgKgotICogUmVjYWxjdWxhdGVzIGFsbCByb290IGNsb2NrcyBpbiBsaXN0IGhlYWQsIHdoaWNoIGlmIHRoZSBjbG9jaydzIC5yZWNhbGMgaXMKLSAqIHNldCBjb3JyZWN0bHksIHNob3VsZCBhbHNvIHByb3BhZ2F0ZSB0aGVpciByYXRlcy4KKyAqIFJlY2FsY3VsYXRlcyBhbGwgY2hpbGRyZW4gY2xvY2tzCiAgKi8KLXN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBsaXN0X2hlYWQgKmxoZWFkKQordm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICpwY2xrLCBpbnQgb25faW5pdCkKIHsKLQlzdHJ1Y3QgY2xrICpjbGtwLCAqX3RlbXA7CisJc3RydWN0IGNsayAqY2xrLCAqX3RlbXA7CisJaW50IHJldCA9IDA7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2xrcCwgX3RlbXAsIGxoZWFkLCBzaWJsaW5nKSB7Ci0JCWlmIChjbGtwLT5yZWNhbGMpCi0JCQljbGtwLT5yZWNhbGMoY2xrcCk7Ci0JCXByb3BhZ2F0ZV9yYXRlKCZjbGtwLT5jaGlsZHJlbik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsaywgX3RlbXAsICZwY2xrLT5jaGlsZHJlbiwgc2libGluZykgeworCQlpZiAoY2xrLT5yZWNhbGMpIHsKKwkJCXJldCA9IGNsay0+cmVjYWxjKGNsayk7CisJCQkvKgorCQkJICogcmVjYWxjIHdpbGwgcmV0dXJuIGVycm9yIGlmIGNsayBvdXQgaXMgbm90IHByb2dyYW1tZWQKKwkJCSAqIEluIHRoaXMgY2FzZSBjb25maWd1cmUgZGVmYXVsdCByYXRlLgorCQkJICovCisJCQlpZiAocmV0ICYmIGNsay0+c2V0X3JhdGUpCisJCQkJY2xrLT5zZXRfcmF0ZShjbGssIDApOworCQl9CisJCXByb3BhZ2F0ZV9yYXRlKGNsaywgb25faW5pdCk7CisKKwkJaWYgKCFvbl9pbml0KQorCQkJY29udGludWU7CisKKwkJLyogRW5hYmxlIGNsa3MgZW5hYmxlZCBvbiBpbml0LCBpbiBzb2Z0d2FyZSB2aWV3ICovCisJCWlmIChjbGstPmZsYWdzICYgRU5BQkxFRF9PTl9JTklUKQorCQkJZG9fY2xrX2VuYWJsZShjbGspOwogCX0KIH0KIAotLyogcmV0dXJucyBjdXJyZW50IHByb2dyYW1tZWQgY2xvY2tzIGNsb2NrIGluZm8gc3RydWN0dXJlICovCi1zdGF0aWMgc3RydWN0IHBjbGtfaW5mbyAqcGNsa19pbmZvX2dldChzdHJ1Y3QgY2xrICpjbGspCisvKioKKyAqIHJvdW5kX3JhdGVfaW5kZXggLSByZXR1cm4gY2xvc2VzdCBwcm9ncmFtbWFibGUgcmF0ZSBpbmRleCBpbiByYXRlX2NvbmZpZyB0YmwKKyAqIEBjbGs6IHB0ciB0byBjbG9jayBzdHJ1Y3R1cmUKKyAqIEBkcmF0ZTogZGVzaXJlZCByYXRlCisgKiBAcmF0ZTogZmluYWwgcmF0ZSB3aWxsIGJlIHJldHVybmVkIGluIHRoaXMgdmFyaWFibGUgb25seS4KKyAqCisgKiBGaW5kcyBpbmRleCBpbiByYXRlX2NvbmZpZyBmb3IgaGlnaGVzdCBjbGsgcmF0ZSB3aGljaCBpcyBsZXNzIHRoYW4KKyAqIHJlcXVlc3RlZCByYXRlLiBJZiB0aGVyZSBpcyBubyBjbGsgcmF0ZSBsZXNzZXIgdGhhbiByZXF1ZXN0ZWQgcmF0ZSB0aGVuCisgKiAtRUlOVkFMIGlzIHJldHVybmVkLiBUaGlzIHJvdXRpbmUgYXNzdW1lcyB0aGF0IHJhdGVfY29uZmlnIGlzIHdyaXR0ZW4KKyAqIGluIGluY3JlbWVudGluZyBvcmRlciBvZiBjbGsgcmF0ZXMuCisgKiBJZiBkcmF0ZSBwYXNzZWQgaXMgemVybyB0aGVuIGRlZmF1bHQgcmF0ZSBpcyBwcm9ncmFtbWVkLgorICovCitzdGF0aWMgaW50Cityb3VuZF9yYXRlX2luZGV4KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkcmF0ZSwgdW5zaWduZWQgbG9uZyAqcmF0ZSkKIHsKLQl1bnNpZ25lZCBpbnQgbWFzaywgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwY2xrX2luZm8gKmluZm8gPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgdG1wID0gMCwgcHJldl9yYXRlID0gMDsKKwlpbnQgaW5kZXg7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQltYXNrID0gKHJlYWRsKGNsay0+cGNsa19zZWwtPnBjbGtfc2VsX3JlZykgPj4gY2xrLT5wY2xrX3NlbF9zaGlmdCkKLQkJCSYgY2xrLT5wY2xrX3NlbC0+cGNsa19zZWxfbWFzazsKKwlpZiAoIWNsay0+Y2FsY19yYXRlKQorCQlyZXR1cm4gLUVGQVVMVDsKIAotCWZvciAoaSA9IDA7IGkgPCBjbGstPnBjbGtfc2VsLT5wY2xrX2NvdW50OyBpKyspIHsKLQkJaWYgKGNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXS5wY2xrX21hc2sgPT0gbWFzaykKLQkJCWluZm8gPSAmY2xrLT5wY2xrX3NlbC0+cGNsa19pbmZvW2ldOworCWlmICghZHJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBUaGlzIGxvb3BzIGVuZHMgb24gdHdvIGNvbmRpdGlvbnM6CisJICogLSBhcyBzb29uIGFzIGNsayBpcyBmb3VuZCB3aXRoIHJhdGUgZ3JlYXRlciB0aGFuIHJlcXVlc3RlZCByYXRlLgorCSAqIC0gaWYgYWxsIGNsa3MgaW4gcmF0ZV9jb25maWcgYXJlIHNtYWxsZXIgdGhhbiByZXF1ZXN0ZWQgcmF0ZS4KKwkgKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjbGstPnJhdGVfY29uZmlnLmNvdW50OyBpbmRleCsrKSB7CisJCXByZXZfcmF0ZSA9IHRtcDsKKwkJdG1wID0gY2xrLT5jYWxjX3JhdGUoY2xrLCBpbmRleCk7CisJCWlmIChkcmF0ZSA8IHRtcCkgeworCQkJaW5kZXgtLTsKKwkJCWJyZWFrOworCQl9CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJLyogcmV0dXJuIGlmIGNhbid0IGZpbmQgc3VpdGFibGUgY2xvY2sgKi8KKwlpZiAoaW5kZXggPCAwKSB7CisJCWluZGV4ID0gLUVJTlZBTDsKKwkJKnJhdGUgPSAwOworCX0gZWxzZSBpZiAoaW5kZXggPT0gY2xrLT5yYXRlX2NvbmZpZy5jb3VudCkgeworCQkvKiBwcm9ncmFtIHdpdGggaGlnaGVzdCBjbGsgcmF0ZSBwb3NzaWJsZSAqLworCQlpbmRleCA9IGNsay0+cmF0ZV9jb25maWcuY291bnQgLSAxOworCQkqcmF0ZSA9IHRtcDsKKwl9IGVsc2UKKwkJKnJhdGUgPSBwcmV2X3JhdGU7CiAKLQlyZXR1cm4gaW5mbzsKKwlyZXR1cm4gaW5kZXg7CiB9CiAKKy8qKgorICogY2xrX3JvdW5kX3JhdGUgLSBhZGp1c3QgYSByYXRlIHRvIHRoZSBleGFjdCByYXRlIGEgY2xvY2sgY2FuIHByb3ZpZGUKKyAqIEBjbGs6IGNsb2NrIHNvdXJjZQorICogQHJhdGU6IGRlc2lyZWQgY2xvY2sgcmF0ZSBpbiBIegorICoKKyAqIFJldHVybnMgcm91bmRlZCBjbG9jayByYXRlIGluIEh6LCBvciBuZWdhdGl2ZSBlcnJuby4KKyAqLworbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZHJhdGUpCit7CisJbG9uZyByYXRlID0gMDsKKwlpbnQgaW5kZXg7CisKKwkvKgorCSAqIHByb3BhZ2F0ZSBjYWxsIHRvIHBhcmVudCB3aG8gc3VwcG9ydHMgY2FsY19yYXRlLiBTaW1pbGFyIGFwcHJvYWNoIGlzCisJICogdXNlZCBpbiBjbGtfc2V0X3JhdGUuCisJICovCisJaWYgKCFjbGstPmNhbGNfcmF0ZSkgeworCQl1MzIgbXVsdDsKKwkJaWYgKCFjbGstPnBjbGspCisJCQlyZXR1cm4gY2xrLT5yYXRlOworCisJCW11bHQgPSBjbGstPmRpdl9mYWN0b3IgPyBjbGstPmRpdl9mYWN0b3IgOiAxOworCQlyZXR1cm4gY2xrX3JvdW5kX3JhdGUoY2xrLT5wY2xrLCBtdWx0ICogZHJhdGUpIC8gbXVsdDsKKwl9CisKKwlpbmRleCA9IHJvdW5kX3JhdGVfaW5kZXgoY2xrLCBkcmF0ZSwgJnJhdGUpOworCWlmIChpbmRleCA+PSAwKQorCQlyZXR1cm4gcmF0ZTsKKwllbHNlCisJCXJldHVybiBpbmRleDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOworCisvKkFsbCBiZWxvdyBmdW5jdGlvbnMgYXJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZCAqLworCiAvKgotICogU2V0IHBjbGsgYXMgY2NsaydzIHBhcmVudCBhbmQgYWRkIGNsb2NrIHNpYmxpbmcgbm9kZSB0byBjdXJyZW50IHBhcmVudHMKLSAqIGNoaWxkcmVuIGxpc3QKKyAqIENhbGN1bGF0ZXMgcGxsIGNsayByYXRlIGZvciBzcGVjaWZpYyB2YWx1ZSBvZiBtb2RlLCBtLCBuIGFuZCBwCisgKgorICogSW4gbm9ybWFsIG1vZGUKKyAqIHJhdGUgPSAoMiAqIE1bMTU6OF0gKiBGaW4pLyhOICogMl5QKQorICoKKyAqIEluIERpdGhlcmVkIG1vZGUKKyAqIHJhdGUgPSAoMiAqIE1bMTU6MF0gKiBGaW4pLygyNTYgKiBOICogMl5QKQogICovCi1zdGF0aWMgdm9pZCBjaGFuZ2VfcGFyZW50KHN0cnVjdCBjbGsgKmNjbGssIHN0cnVjdCBjbGsgKnBjbGspCit1bnNpZ25lZCBsb25nIHBsbF9jYWxjX3JhdGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaW5kZXgpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGstPnBjbGstPnJhdGU7CisJc3RydWN0IHBsbF9yYXRlX3RibCAqdGJscyA9IGNsay0+cmF0ZV9jb25maWcudGJsczsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZjY2xrLT5zaWJsaW5nKTsKLQlsaXN0X2FkZCgmY2Nsay0+c2libGluZywgJnBjbGstPmNoaWxkcmVuKTsKLQotCWNjbGstPnBjbGsgPSBwY2xrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJbW9kZSA9IHRibHNbaW5kZXhdLm1vZGUgPyAyNTYgOiAxOworCXJldHVybiAoKCgyICogcmF0ZSAvIDEwMDAwKSAqIHRibHNbaW5kZXhdLm0pIC8KKwkJCShtb2RlICogdGJsc1tpbmRleF0ubiAqICgxIDw8IHRibHNbaW5kZXhdLnApKSkgKiAxMDAwMDsKIH0KIAogLyoKQEAgLTI4Myw0NyArNTA1LDE0NiBAQAogICogSW4gRGl0aGVyZWQgbW9kZQogICogcmF0ZSA9ICgyICogTVsxNTowXSAqIEZpbikvKDI1NiAqIE4gKiAyXlApCiAgKi8KLXZvaWQgcGxsMV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK2ludCBwbGxfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJc3RydWN0IHBsbF9jbGtfY29uZmlnICpjb25maWcgPSBjbGstPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgbnVtID0gMiwgZGVuID0gMCwgdmFsLCBtb2RlID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0JbW9kZSA9IChyZWFkbChjb25maWctPm1vZGVfcmVnKSA+PiBQTExfTU9ERV9TSElGVCkgJgotCQlQTExfTU9ERV9NQVNLOworCW1vZGUgPSAocmVhZGwoY29uZmlnLT5tb2RlX3JlZykgPj4gY29uZmlnLT5tYXNrcy0+bW9kZV9zaGlmdCkgJgorCQljb25maWctPm1hc2tzLT5tb2RlX21hc2s7CiAKIAl2YWwgPSByZWFkbChjb25maWctPmNmZ19yZWcpOwogCS8qIGNhbGN1bGF0ZSBkZW5vbWluYXRvciAqLwotCWRlbiA9ICh2YWwgPj4gUExMX0RJVl9QX1NISUZUKSAmIFBMTF9ESVZfUF9NQVNLOworCWRlbiA9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+ZGl2X3Bfc2hpZnQpICYgY29uZmlnLT5tYXNrcy0+ZGl2X3BfbWFzazsKIAlkZW4gPSAxIDw8IGRlbjsKLQlkZW4gKj0gKHZhbCA+PiBQTExfRElWX05fU0hJRlQpICYgUExMX0RJVl9OX01BU0s7CisJZGVuICo9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+ZGl2X25fc2hpZnQpICYgY29uZmlnLT5tYXNrcy0+ZGl2X25fbWFzazsKIAogCS8qIGNhbGN1bGF0ZSBudW1lcmF0b3IgJiBkZW5vbWluYXRvciAqLwogCWlmICghbW9kZSkgewogCQkvKiBOb3JtYWwgbW9kZSAqLwotCQludW0gKj0gKHZhbCA+PiBQTExfTk9STV9GREJLX01fU0hJRlQpICYgUExMX05PUk1fRkRCS19NX01BU0s7CisJCW51bSAqPSAodmFsID4+IGNvbmZpZy0+bWFza3MtPm5vcm1fZmRia19tX3NoaWZ0KSAmCisJCQljb25maWctPm1hc2tzLT5ub3JtX2ZkYmtfbV9tYXNrOwogCX0gZWxzZSB7CiAJCS8qIERpdGhlcmVkIG1vZGUgKi8KLQkJbnVtICo9ICh2YWwgPj4gUExMX0RJVEhfRkRCS19NX1NISUZUKSAmIFBMTF9ESVRIX0ZEQktfTV9NQVNLOworCQludW0gKj0gKHZhbCA+PiBjb25maWctPm1hc2tzLT5kaXRoX2ZkYmtfbV9zaGlmdCkgJgorCQkJY29uZmlnLT5tYXNrcy0+ZGl0aF9mZGJrX21fbWFzazsKIAkJZGVuICo9IDI1NjsKIAl9CiAKKwlpZiAoIWRlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAljbGstPnJhdGUgPSAoKChjbGstPnBjbGstPnJhdGUvMTAwMDApICogbnVtKSAvIGRlbikgKiAxMDAwMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorICogQ29uZmlndXJlcyBuZXcgY2xvY2sgcmF0ZSBvZiBwbGwKKyAqLworaW50IHBsbF9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGRlc2lyZWRfcmF0ZSkKK3sKKwlzdHJ1Y3QgcGxsX3JhdGVfdGJsICp0YmxzID0gY2xrLT5yYXRlX2NvbmZpZy50YmxzOworCXN0cnVjdCBwbGxfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWwsIHJhdGU7CisJaW50IGk7CisKKwlpID0gcm91bmRfcmF0ZV9pbmRleChjbGssIGRlc2lyZWRfcmF0ZSwgJnJhdGUpOworCWlmIChpIDwgMCkKKwkJcmV0dXJuIGk7CisKKwl2YWwgPSByZWFkbChjb25maWctPm1vZGVfcmVnKSAmCisJCX4oY29uZmlnLT5tYXNrcy0+bW9kZV9tYXNrIDw8IGNvbmZpZy0+bWFza3MtPm1vZGVfc2hpZnQpOworCXZhbCB8PSAodGJsc1tpXS5tb2RlICYgY29uZmlnLT5tYXNrcy0+bW9kZV9tYXNrKSA8PAorCQljb25maWctPm1hc2tzLT5tb2RlX3NoaWZ0OworCXdyaXRlbCh2YWwsIGNvbmZpZy0+bW9kZV9yZWcpOworCisJdmFsID0gcmVhZGwoY29uZmlnLT5jZmdfcmVnKSAmCisJCX4oY29uZmlnLT5tYXNrcy0+ZGl2X3BfbWFzayA8PCBjb25maWctPm1hc2tzLT5kaXZfcF9zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLnAgJiBjb25maWctPm1hc2tzLT5kaXZfcF9tYXNrKSA8PAorCQljb25maWctPm1hc2tzLT5kaXZfcF9zaGlmdDsKKwl2YWwgJj0gfihjb25maWctPm1hc2tzLT5kaXZfbl9tYXNrIDw8IGNvbmZpZy0+bWFza3MtPmRpdl9uX3NoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0ubiAmIGNvbmZpZy0+bWFza3MtPmRpdl9uX21hc2spIDw8CisJCWNvbmZpZy0+bWFza3MtPmRpdl9uX3NoaWZ0OworCXZhbCAmPSB+KGNvbmZpZy0+bWFza3MtPmRpdGhfZmRia19tX21hc2sgPDwKKwkJCWNvbmZpZy0+bWFza3MtPmRpdGhfZmRia19tX3NoaWZ0KTsKKwlpZiAodGJsc1tpXS5tb2RlKQorCQl2YWwgfD0gKHRibHNbaV0ubSAmIGNvbmZpZy0+bWFza3MtPmRpdGhfZmRia19tX21hc2spIDw8CisJCQljb25maWctPm1hc2tzLT5kaXRoX2ZkYmtfbV9zaGlmdDsKKwllbHNlCisJCXZhbCB8PSAodGJsc1tpXS5tICYgY29uZmlnLT5tYXNrcy0+bm9ybV9mZGJrX21fbWFzaykgPDwKKwkJCWNvbmZpZy0+bWFza3MtPm5vcm1fZmRia19tX3NoaWZ0OworCisJd3JpdGVsKHZhbCwgY29uZmlnLT5jZmdfcmVnKTsKKworCWNsay0+cmF0ZSA9IHJhdGU7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGN1bGF0ZXMgYWhiLCBhcGIgY2xrIHJhdGUgZm9yIHNwZWNpZmljIHZhbHVlIG9mIGRpdgorICovCit1bnNpZ25lZCBsb25nIGJ1c19jYWxjX3JhdGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrLT5wY2xrLT5yYXRlOworCXN0cnVjdCBidXNfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisKKwlyZXR1cm4gcmF0ZSAvICh0YmxzW2luZGV4XS5kaXYgKyAxKTsKIH0KIAogLyogY2FsY3VsYXRlcyBjdXJyZW50IHByb2dyYW1tZWQgcmF0ZSBvZiBhaGIgb3IgYXBiIGJ1cyAqLwotdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitpbnQgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewogCXN0cnVjdCBidXNfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IGRpdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0JZGl2ID0gKChyZWFkbChjb25maWctPnJlZykgPj4gY29uZmlnLT5zaGlmdCkgJiBjb25maWctPm1hc2spICsgMTsKKwlkaXYgPSAoKHJlYWRsKGNvbmZpZy0+cmVnKSA+PiBjb25maWctPm1hc2tzLT5zaGlmdCkgJgorCQkJY29uZmlnLT5tYXNrcy0+bWFzaykgKyAxOworCisJaWYgKCFkaXYpCisJCXJldHVybiAtRUlOVkFMOworCiAJY2xrLT5yYXRlID0gKHVuc2lnbmVkIGxvbmcpY2xrLT5wY2xrLT5yYXRlIC8gZGl2OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIENvbmZpZ3VyZXMgbmV3IGNsb2NrIHJhdGUgb2YgQUhCIE9SIEFQQiBidXMgKi8KK2ludCBidXNfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpCit7CisJc3RydWN0IGJ1c19yYXRlX3RibCAqdGJscyA9IGNsay0+cmF0ZV9jb25maWcudGJsczsKKwlzdHJ1Y3QgYnVzX2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsLCByYXRlOworCWludCBpOworCisJaSA9IHJvdW5kX3JhdGVfaW5kZXgoY2xrLCBkZXNpcmVkX3JhdGUsICZyYXRlKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOworCisJdmFsID0gcmVhZGwoY29uZmlnLT5yZWcpICYKKwkJfihjb25maWctPm1hc2tzLT5tYXNrIDw8IGNvbmZpZy0+bWFza3MtPnNoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0uZGl2ICYgY29uZmlnLT5tYXNrcy0+bWFzaykgPDwgY29uZmlnLT5tYXNrcy0+c2hpZnQ7CisJd3JpdGVsKHZhbCwgY29uZmlnLT5yZWcpOworCisJY2xrLT5yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCisvKgorICogZ2l2ZXMgcmF0ZSBmb3IgZGlmZmVyZW50IHZhbHVlcyBvZiBlcSwgeCBhbmQgeQorICoKKyAqIEZvdXQgZnJvbSBzeW50aGVzaXplciBjYW4gYmUgZ2l2ZW4gZnJvbSB0d28gZXF1YXRpb25zOgorICogRm91dDEgPSAoRmluICogWC9ZKS8yCQlFUTEKKyAqIEZvdXQyID0gRmluICogWC9ZCQkJRVEyCisgKi8KK3Vuc2lnbmVkIGxvbmcgYXV4X2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCkKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGstPnBjbGstPnJhdGU7CisJc3RydWN0IGF1eF9yYXRlX3RibCAqdGJscyA9IGNsay0+cmF0ZV9jb25maWcudGJsczsKKwl1OCBlcSA9IHRibHNbaW5kZXhdLmVxID8gMSA6IDI7CisKKwlyZXR1cm4gKCgocmF0ZS8xMDAwMCkgKiB0YmxzW2luZGV4XS54c2NhbGUpIC8KKwkJCSh0YmxzW2luZGV4XS55c2NhbGUgKiBlcSkpICogMTAwMDA7CiB9CiAKIC8qCkBAIC0zMzYsNDQgKzY1Nyw3NiBAQAogICoKICAqIFNlbGVjdGlvbiBvZiBlcW4gMSBvciAyIGlzIHByb2dyYW1tZWQgaW4gcmVnaXN0ZXIKICAqLwotdm9pZCBhdXhfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitpbnQgYXV4X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewogCXN0cnVjdCBhdXhfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBjbGtfaW5mbyAqcGNsa19pbmZvID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgbnVtID0gMSwgZGVuID0gMSwgdmFsLCBlcW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIGdldCBjdXJyZW50IHByb2dyYW1tZWQgcGFyZW50ICovCi0JcGNsa19pbmZvID0gcGNsa19pbmZvX2dldChjbGspOwotCWlmICghcGNsa19pbmZvKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCQljbGstPnBjbGsgPSBOVUxMOwotCQljbGstPnJhdGUgPSAwOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQorCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKTsKIAotCWNoYW5nZV9wYXJlbnQoY2xrLCBwY2xrX2luZm8tPnBjbGspOworCWVxbiA9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+ZXFfc2VsX3NoaWZ0KSAmCisJCWNvbmZpZy0+bWFza3MtPmVxX3NlbF9tYXNrOworCWlmIChlcW4gPT0gY29uZmlnLT5tYXNrcy0+ZXExX21hc2spCisJCWRlbiAqPSAyOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0JaWYgKHBjbGtfaW5mby0+c2NhbGFibGUpIHsKLQkJdmFsID0gcmVhZGwoY29uZmlnLT5zeW50aF9yZWcpOworCS8qIGNhbGN1bGF0ZSBudW1lcmF0b3IgKi8KKwludW0gPSAodmFsID4+IGNvbmZpZy0+bWFza3MtPnhzY2FsZV9zZWxfc2hpZnQpICYKKwkJY29uZmlnLT5tYXNrcy0+eHNjYWxlX3NlbF9tYXNrOwogCi0JCWVxbiA9ICh2YWwgPj4gQVVYX0VRX1NFTF9TSElGVCkgJiBBVVhfRVFfU0VMX01BU0s7Ci0JCWlmIChlcW4gPT0gQVVYX0VRMV9TRUwpCi0JCQlkZW4gKj0gMjsKKwkvKiBjYWxjdWxhdGUgZGVub21pbmF0b3IgKi8KKwlkZW4gKj0gKHZhbCA+PiBjb25maWctPm1hc2tzLT55c2NhbGVfc2VsX3NoaWZ0KSAmCisJCWNvbmZpZy0+bWFza3MtPnlzY2FsZV9zZWxfbWFzazsKIAotCQkvKiBjYWxjdWxhdGUgbnVtZXJhdG9yICovCi0JCW51bSA9ICh2YWwgPj4gQVVYX1hTQ0FMRV9TSElGVCkgJiBBVVhfWFNDQUxFX01BU0s7CisJaWYgKCFkZW4pCisJCXJldHVybiAtRUlOVkFMOwogCi0JCS8qIGNhbGN1bGF0ZSBkZW5vbWluYXRvciAqLwotCQlkZW4gKj0gKHZhbCA+PiBBVVhfWVNDQUxFX1NISUZUKSAmIEFVWF9ZU0NBTEVfTUFTSzsKLQkJdmFsID0gKCgoY2xrLT5wY2xrLT5yYXRlLzEwMDAwKSAqIG51bSkgLyBkZW4pICogMTAwMDA7Ci0JfSBlbHNlCi0JCXZhbCA9IGNsay0+cGNsay0+cmF0ZTsKKwljbGstPnJhdGUgPSAoKChjbGstPnBjbGstPnJhdGUvMTAwMDApICogbnVtKSAvIGRlbikgKiAxMDAwMDsKKwlyZXR1cm4gMDsKK30KIAotCWNsay0+cmF0ZSA9IHZhbDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworLyogQ29uZmlndXJlcyBuZXcgY2xvY2sgcmF0ZSBvZiBhdXhpbGlhcnkgc3ludGhlc2l6ZXJzIHVzZWQgYnk6IFVBUlQsIEZJUkRBKi8KK2ludCBhdXhfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpCit7CisJc3RydWN0IGF1eF9yYXRlX3RibCAqdGJscyA9IGNsay0+cmF0ZV9jb25maWcudGJsczsKKwlzdHJ1Y3QgYXV4X2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsLCByYXRlOworCWludCBpOworCisJaSA9IHJvdW5kX3JhdGVfaW5kZXgoY2xrLCBkZXNpcmVkX3JhdGUsICZyYXRlKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOworCisJdmFsID0gcmVhZGwoY29uZmlnLT5zeW50aF9yZWcpICYKKwkJfihjb25maWctPm1hc2tzLT5lcV9zZWxfbWFzayA8PCBjb25maWctPm1hc2tzLT5lcV9zZWxfc2hpZnQpOworCXZhbCB8PSAodGJsc1tpXS5lcSAmIGNvbmZpZy0+bWFza3MtPmVxX3NlbF9tYXNrKSA8PAorCQljb25maWctPm1hc2tzLT5lcV9zZWxfc2hpZnQ7CisJdmFsICY9IH4oY29uZmlnLT5tYXNrcy0+eHNjYWxlX3NlbF9tYXNrIDw8CisJCQljb25maWctPm1hc2tzLT54c2NhbGVfc2VsX3NoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0ueHNjYWxlICYgY29uZmlnLT5tYXNrcy0+eHNjYWxlX3NlbF9tYXNrKSA8PAorCQljb25maWctPm1hc2tzLT54c2NhbGVfc2VsX3NoaWZ0OworCXZhbCAmPSB+KGNvbmZpZy0+bWFza3MtPnlzY2FsZV9zZWxfbWFzayA8PAorCQkJY29uZmlnLT5tYXNrcy0+eXNjYWxlX3NlbF9zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLnlzY2FsZSAmIGNvbmZpZy0+bWFza3MtPnlzY2FsZV9zZWxfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+eXNjYWxlX3NlbF9zaGlmdDsKKwl3cml0ZWwodmFsLCBjb25maWctPnN5bnRoX3JlZyk7CisKKwljbGstPnJhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxjdWxhdGVzIGdwdCBjbGsgcmF0ZSBmb3IgZGlmZmVyZW50IHZhbHVlcyBvZiBtc2NhbGUgYW5kIG5zY2FsZQorICoKKyAqIEZvdXQ9IEZpbi8oKDIgXiAoTisxKSkgKiAoTSsxKSkKKyAqLwordW5zaWduZWQgbG9uZyBncHRfY2FsY19yYXRlKHN0cnVjdCBjbGsgKmNsaywgaW50IGluZGV4KQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsay0+cGNsay0+cmF0ZTsKKwlzdHJ1Y3QgZ3B0X3JhdGVfdGJsICp0YmxzID0gY2xrLT5yYXRlX2NvbmZpZy50YmxzOworCisJcmV0dXJuIHJhdGUgLyAoKDEgPDwgKHRibHNbaW5kZXhdLm5zY2FsZSArIDEpKSAqCisJCQkodGJsc1tpbmRleF0ubXNjYWxlICsgMSkpOwogfQogCiAvKgpAQCAtMzgxLDQ2ICs3MzQsMTQyIEBACiAgKiBGb3V0IGZyb20gc3ludGhlc2l6ZXIgY2FuIGJlIGdpdmVuIGZyb20gYmVsb3cgZXF1YXRpb25zOgogICogRm91dD0gRmluLygoMiBeIChOKzEpKSAqIChNKzEpKQogICovCi12b2lkIGdwdF9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK2ludCBncHRfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0Jc3RydWN0IGF1eF9jbGtfY29uZmlnICpjb25maWcgPSBjbGstPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgcGNsa19pbmZvICpwY2xrX2luZm8gPSBOVUxMOworCXN0cnVjdCBncHRfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IGRpdiA9IDEsIHZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcGNsa19pbmZvID0gcGNsa19pbmZvX2dldChjbGspOwotCWlmICghcGNsa19pbmZvKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCQljbGstPnBjbGsgPSBOVUxMOwotCQljbGstPnJhdGUgPSAwOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQorCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKTsKKwlkaXYgKz0gKHZhbCA+PiBjb25maWctPm1hc2tzLT5tc2NhbGVfc2VsX3NoaWZ0KSAmCisJCWNvbmZpZy0+bWFza3MtPm1zY2FsZV9zZWxfbWFzazsKKwlkaXYgKj0gMSA8PCAoKCh2YWwgPj4gY29uZmlnLT5tYXNrcy0+bnNjYWxlX3NlbF9zaGlmdCkgJgorCQkJCWNvbmZpZy0+bWFza3MtPm5zY2FsZV9zZWxfbWFzaykgKyAxKTsKIAotCWNoYW5nZV9wYXJlbnQoY2xrLCBwY2xrX2luZm8tPnBjbGspOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0JaWYgKHBjbGtfaW5mby0+c2NhbGFibGUpIHsKLQkJdmFsID0gcmVhZGwoY29uZmlnLT5zeW50aF9yZWcpOwotCQlkaXYgKz0gKHZhbCA+PiBHUFRfTVNDQUxFX1NISUZUKSAmIEdQVF9NU0NBTEVfTUFTSzsKLQkJZGl2ICo9IDEgPDwgKCgodmFsID4+IEdQVF9OU0NBTEVfU0hJRlQpICYgR1BUX05TQ0FMRV9NQVNLKSArIDEpOwotCX0KKwlpZiAoIWRpdikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAljbGstPnJhdGUgPSAodW5zaWduZWQgbG9uZyljbGstPnBjbGstPnJhdGUgLyBkaXY7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogQ29uZmlndXJlcyBuZXcgY2xvY2sgcmF0ZSBvZiBncHRpbGlhcnkgc3ludGhlc2l6ZXJzIHVzZWQgYnk6IFVBUlQsIEZJUkRBKi8KK2ludCBncHRfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpCit7CisJc3RydWN0IGdwdF9yYXRlX3RibCAqdGJscyA9IGNsay0+cmF0ZV9jb25maWcudGJsczsKKwlzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsLCByYXRlOworCWludCBpOworCisJaSA9IHJvdW5kX3JhdGVfaW5kZXgoY2xrLCBkZXNpcmVkX3JhdGUsICZyYXRlKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOworCisJdmFsID0gcmVhZGwoY29uZmlnLT5zeW50aF9yZWcpICYgfihjb25maWctPm1hc2tzLT5tc2NhbGVfc2VsX21hc2sgPDwKKwkJCWNvbmZpZy0+bWFza3MtPm1zY2FsZV9zZWxfc2hpZnQpOworCXZhbCB8PSAodGJsc1tpXS5tc2NhbGUgJiBjb25maWctPm1hc2tzLT5tc2NhbGVfc2VsX21hc2spIDw8CisJCWNvbmZpZy0+bWFza3MtPm1zY2FsZV9zZWxfc2hpZnQ7CisJdmFsICY9IH4oY29uZmlnLT5tYXNrcy0+bnNjYWxlX3NlbF9tYXNrIDw8CisJCQljb25maWctPm1hc2tzLT5uc2NhbGVfc2VsX3NoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0ubnNjYWxlICYgY29uZmlnLT5tYXNrcy0+bnNjYWxlX3NlbF9tYXNrKSA8PAorCQljb25maWctPm1hc2tzLT5uc2NhbGVfc2VsX3NoaWZ0OworCXdyaXRlbCh2YWwsIGNvbmZpZy0+c3ludGhfcmVnKTsKKworCWNsay0+cmF0ZSA9IHJhdGU7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIFVzZWQgZm9yIGNsb2NrcyB0aGF0IGFsd2F5cyBoYXZlIHNhbWUgdmFsdWUgYXMgdGhlIHBhcmVudCBjbG9jayBkaXZpZGVkIGJ5IGEKKyAqIENhbGN1bGF0ZXMgY2xjZCBjbGsgcmF0ZSBmb3IgZGlmZmVyZW50IHZhbHVlcyBvZiBkaXYKKyAqCisgKiBGb3V0IGZyb20gc3ludGhlc2l6ZXIgY2FuIGJlIGdpdmVuIGZyb20gYmVsb3cgZXF1YXRpb246CisgKiBGb3V0PSBGaW4vMipkaXYgKGRpdmlzaW9uIGZhY3RvcikKKyAqIGRpdiBpcyAxNyBiaXRzOi0KKyAqCTAtMTMgKGZyYWN0aW9uYWwgcGFydCkKKyAqCTE0LTE2IChpbnRlZ2VyIHBhcnQpCisgKiBUbyBjYWxjdWxhdGUgRm91dCB3ZSBsZWZ0IHNoaWZ0IHZhbCBieSAxNCBiaXRzIGFuZCBkaXZpZGUgRmluIGJ5CisgKiBjb21wbGV0ZSBkaXYgKGluY2x1ZGluZyBmcmFjdGlvbmFsIHBhcnQpIGFuZCB0aGVuIHJpZ2h0IHNoaWZ0IHRoZQorICogcmVzdWx0IGJ5IDE0IHBsYWNlcy4KKyAqLwordW5zaWduZWQgbG9uZyBjbGNkX2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCkKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGstPnBjbGstPnJhdGU7CisJc3RydWN0IGNsY2RfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisKKwlyYXRlIC89IDEwMDA7CisJcmF0ZSA8PD0gMTI7CisJcmF0ZSAvPSAoMiAqIHRibHNbaW5kZXhdLmRpdik7CisJcmF0ZSA+Pj0gMTI7CisJcmF0ZSAqPSAxMDAwOworCisJcmV0dXJuIHJhdGU7Cit9CisKKy8qCisgKiBjYWxjdWxhdGVzIGN1cnJlbnQgcHJvZ3JhbW1lZCByYXRlIG9mIGNsY2Qgc3ludGhlc2l6ZXIKKyAqIEZvdXQgZnJvbSBzeW50aGVzaXplciBjYW4gYmUgZ2l2ZW4gZnJvbSBiZWxvdyBlcXVhdGlvbjoKKyAqIEZvdXQ9IEZpbi8yKmRpdiAoZGl2aXNpb24gZmFjdG9yKQorICogZGl2IGlzIDE3IGJpdHM6LQorICoJMC0xMyAoZnJhY3Rpb25hbCBwYXJ0KQorICoJMTQtMTYgKGludGVnZXIgcGFydCkKKyAqIFRvIGNhbGN1bGF0ZSBGb3V0IHdlIGxlZnQgc2hpZnQgdmFsIGJ5IDE0IGJpdHMgYW5kIGRpdmlkZSBGaW4gYnkKKyAqIGNvbXBsZXRlIGRpdiAoaW5jbHVkaW5nIGZyYWN0aW9uYWwgcGFydCkgYW5kIHRoZW4gcmlnaHQgc2hpZnQgdGhlCisgKiByZXN1bHQgYnkgMTQgcGxhY2VzLgorICovCitpbnQgY2xjZF9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlzdHJ1Y3QgY2xjZF9jbGtfY29uZmlnICpjb25maWcgPSBjbGstPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgZGl2ID0gMTsKKwl1bnNpZ25lZCBsb25nIHByYXRlOworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSByZWFkbChjb25maWctPnN5bnRoX3JlZyk7CisJZGl2ID0gKHZhbCA+PiBjb25maWctPm1hc2tzLT5kaXZfZmFjdG9yX3NoaWZ0KSAmCisJCWNvbmZpZy0+bWFza3MtPmRpdl9mYWN0b3JfbWFzazsKKworCWlmICghZGl2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByYXRlID0gY2xrLT5wY2xrLT5yYXRlIC8gMTAwMDsgLyogZmlyc3QgbGV2ZWwgZGl2aXNpb24sIG1ha2UgaXQgS0h6ICovCisKKwljbGstPnJhdGUgPSAoKCh1bnNpZ25lZCBsb25nKXByYXRlIDw8IDEyKSAvICgyICogZGl2KSkgPj4gMTI7CisJY2xrLT5yYXRlICo9IDEwMDA7CisJcmV0dXJuIDA7Cit9CisKKy8qIENvbmZpZ3VyZXMgbmV3IGNsb2NrIHJhdGUgb2YgYXV4aWxpYXJ5IHN5bnRoZXNpemVycyB1c2VkIGJ5OiBVQVJULCBGSVJEQSovCitpbnQgY2xjZF9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGRlc2lyZWRfcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xjZF9yYXRlX3RibCAqdGJscyA9IGNsay0+cmF0ZV9jb25maWcudGJsczsKKwlzdHJ1Y3QgY2xjZF9jbGtfY29uZmlnICpjb25maWcgPSBjbGstPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbCwgcmF0ZTsKKwlpbnQgaTsKKworCWkgPSByb3VuZF9yYXRlX2luZGV4KGNsaywgZGVzaXJlZF9yYXRlLCAmcmF0ZSk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKworCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKSAmIH4oY29uZmlnLT5tYXNrcy0+ZGl2X2ZhY3Rvcl9tYXNrIDw8CisJCQljb25maWctPm1hc2tzLT5kaXZfZmFjdG9yX3NoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0uZGl2ICYgY29uZmlnLT5tYXNrcy0+ZGl2X2ZhY3Rvcl9tYXNrKSA8PAorCQljb25maWctPm1hc2tzLT5kaXZfZmFjdG9yX3NoaWZ0OworCXdyaXRlbCh2YWwsIGNvbmZpZy0+c3ludGhfcmVnKTsKKworCWNsay0+cmF0ZSA9IHJhdGU7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFVzZWQgZm9yIGNsb2NrcyB0aGF0IGFsd2F5cyBoYXZlIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2sgZGl2aWRlZCBieSBhCiAgKiBmaXhlZCBkaXZpc29yCiAgKi8KLXZvaWQgZm9sbG93X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCitpbnQgZm9sbG93X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgZGl2X2ZhY3RvciA9IChjbGstPmRpdl9mYWN0b3IgPCAxKSA/IDEgOiBjbGstPmRpdl9mYWN0b3I7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQljbGstPnJhdGUgPSBjbGstPnBjbGstPnJhdGU7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwljbGstPnJhdGUgPSBjbGstPnBjbGstPnJhdGUvZGl2X2ZhY3RvcjsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC00MzEsNSArODgwLDEyNCBAQAogICovCiB2b2lkIHJlY2FsY19yb290X2Nsb2Nrcyh2b2lkKQogewotCXByb3BhZ2F0ZV9yYXRlKCZyb290X2Nsa3MpOworCXN0cnVjdCBjbGsgKnBjbGs7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGNsaywgJnJvb3RfY2xrcywgc2libGluZykgeworCQlpZiAocGNsay0+cmVjYWxjKSB7CisJCQlyZXQgPSBwY2xrLT5yZWNhbGMocGNsayk7CisJCQkvKgorCQkJICogcmVjYWxjIHdpbGwgcmV0dXJuIGVycm9yIGlmIGNsayBvdXQgaXMgbm90IHByb2dyYW1tZWQKKwkJCSAqIEluIHRoaXMgY2FzZSBjb25maWd1cmUgZGVmYXVsdCBjbG9jay4KKwkJCSAqLworCQkJaWYgKHJldCAmJiBwY2xrLT5zZXRfcmF0ZSkKKwkJCQlwY2xrLT5zZXRfcmF0ZShwY2xrLCAwKTsKKwkJfQorCQlwcm9wYWdhdGVfcmF0ZShwY2xrLCAxKTsKKwkJLyogRW5hYmxlIGNsa3MgZW5hYmxlZCBvbiBpbml0LCBpbiBzb2Z0d2FyZSB2aWV3ICovCisJCWlmIChwY2xrLT5mbGFncyAmIEVOQUJMRURfT05fSU5JVCkKKwkJCWRvX2Nsa19lbmFibGUocGNsayk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CiB9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKy8qCisgKglkZWJ1Z2ZzIHN1cHBvcnQgdG8gdHJhY2UgY2xvY2sgdHJlZSBoaWVyYXJjaHkgYW5kIGF0dHJpYnV0ZXMKKyAqLworc3RhdGljIHN0cnVjdCBkZW50cnkgKmNsa19kZWJ1Z2ZzX3Jvb3Q7CitzdGF0aWMgaW50IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyX29uZShzdHJ1Y3QgY2xrICpjKQoreworCWludCBlcnI7CisJc3RydWN0IGRlbnRyeSAqZCwgKmNoaWxkOworCXN0cnVjdCBjbGsgKnBhID0gYy0+cGNsazsKKwljaGFyIHNbMjU1XTsKKwljaGFyICpwID0gczsKKworCWlmIChjKSB7CisJCWlmIChjLT5jbC0+Y29uX2lkKQorCQkJcCArPSBzcHJpbnRmKHAsICIlcyIsIGMtPmNsLT5jb25faWQpOworCQlpZiAoYy0+Y2wtPmRldl9pZCkKKwkJCXAgKz0gc3ByaW50ZihwLCAiJXMiLCBjLT5jbC0+ZGV2X2lkKTsKKwl9CisJZCA9IGRlYnVnZnNfY3JlYXRlX2RpcihzLCBwYSA/IHBhLT5kZW50IDogY2xrX2RlYnVnZnNfcm9vdCk7CisJaWYgKCFkKQorCQlyZXR1cm4gLUVOT01FTTsKKwljLT5kZW50ID0gZDsKKworCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoInVzYWdlX2NvdW50IiwgU19JUlVHTywgYy0+ZGVudCwKKwkJCSh1MzIgKikmYy0+dXNhZ2VfY291bnQpOworCWlmICghZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoInJhdGUiLCBTX0lSVUdPLCBjLT5kZW50LCAodTMyICopJmMtPnJhdGUpOworCWlmICghZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV94MzIoImZsYWdzIiwgU19JUlVHTywgYy0+ZGVudCwgKHUzMiAqKSZjLT5mbGFncyk7CisJaWYgKCFkKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJZCA9IGMtPmRlbnQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJmQtPmRfc3ViZGlycywgZF91LmRfY2hpbGQpCisJCWRlYnVnZnNfcmVtb3ZlKGNoaWxkKTsKKwlkZWJ1Z2ZzX3JlbW92ZShjLT5kZW50KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgY2xrICpwYSA9IGMtPnBjbGs7CisKKwlpZiAocGEgJiYgIXBhLT5kZW50KSB7CisJCWVyciA9IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyKHBhKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKCFjLT5kZW50KSB7CisJCWVyciA9IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyX29uZShjKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjbGtfZGVidWdmc19pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqYzsKKwlzdHJ1Y3QgZGVudHJ5ICpkOworCWludCBlcnI7CisKKwlkID0gZGVidWdmc19jcmVhdGVfZGlyKCJjbG9jayIsIE5VTEwpOworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2xrX2RlYnVnZnNfcm9vdCA9IGQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjbG9ja3MsIG5vZGUpIHsKKwkJZXJyID0gY2xrX2RlYnVnZnNfcmVnaXN0ZXIoYyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXQ7CisJfQorCXJldHVybiAwOworZXJyX291dDoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2xrX2RlYnVnZnNfcm9vdCk7CisJcmV0dXJuIGVycjsKK30KK2xhdGVfaW5pdGNhbGwoY2xrX2RlYnVnZnNfaW5pdCk7CisKK3N0YXRpYyBpbnQgY2xrX2RlYnVnZnNfcmVwYXJlbnQoc3RydWN0IGNsayAqYykKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShjLT5kZW50KTsKKwlyZXR1cm4gY2xrX2RlYnVnZnNfcmVnaXN0ZXJfb25lKGMpOworfQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKaW5kZXggMjU3MjI2MC4uMmFlNjYwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9jbG9jay5oCkBAIC0yMSw2ICsyMSw3IEBACiAvKiBjbGsgc3RydWN0dXJlIGZsYWdzICovCiAjZGVmaW5lCUFMV0FZU19FTkFCTEVECQkoMSA8PCAwKSAvKiBjbG9jayBhbHdheXMgZW5hYmxlZCAqLwogI2RlZmluZQlSRVNFVF9UT19FTkFCTEUJCSgxIDw8IDEpIC8qIHJlc2V0IHJlZ2lzdGVyIGJpdCB0byBlbmFibGUgY2xrICovCisjZGVmaW5lCUVOQUJMRURfT05fSU5JVAkJKDEgPDwgMikgLyogY2xvY2tzIGVuYWJsZWQgYXQgaW5pdCAqLwogCiAvKioKICAqIHN0cnVjdCBjbGtvcHMgLSBjbG9jayBvcGVyYXRpb25zCkBAIC0zNSwxMyArMzYsMTEgQEAKIC8qKgogICogc3RydWN0IHBjbGtfaW5mbyAtIHBhcmVudHMgaW5mbwogICogQHBjbGs6IHBvaW50ZXIgdG8gcGFyZW50IGNsawotICogQHBjbGtfbWFzazogdmFsdWUgdG8gYmUgd3JpdHRlbiBmb3Igc2VsZWN0aW5nIHRoaXMgcGFyZW50Ci0gKiBAc2NhbGFibGU6IElzIHBhcmVudCBzY2FsYWJsZSAoMSAtIFlFUywgMCAtIE5PKQorICogQHBjbGtfdmFsOiB2YWx1ZSB0byBiZSB3cml0dGVuIGZvciBzZWxlY3RpbmcgdGhpcyBwYXJlbnQKICAqLwogc3RydWN0IHBjbGtfaW5mbyB7CiAJc3RydWN0IGNsayAqcGNsazsKLQl1OCBwY2xrX21hc2s7Ci0JdTggc2NhbGFibGU7CisJdTggcGNsa192YWw7CiB9OwogCiAvKioKQEAgLTU0LDExICs1MywyMyBAQAogc3RydWN0IHBjbGtfc2VsIHsKIAlzdHJ1Y3QgcGNsa19pbmZvICpwY2xrX2luZm87CiAJdTggcGNsa19jb3VudDsKLQl1bnNpZ25lZCBpbnQgKnBjbGtfc2VsX3JlZzsKKwl2b2lkIF9faW9tZW0gKnBjbGtfc2VsX3JlZzsKIAl1bnNpZ25lZCBpbnQgcGNsa19zZWxfbWFzazsKIH07CiAKIC8qKgorICogc3RydWN0IHJhdGVfY29uZmlnIC0gY2xrIHJhdGUgY29uZmlndXJhdGlvbnMKKyAqIEB0YmxzOiBhcnJheSBvZiBkZXZpY2Ugc3BlY2lmaWMgY2xrIHJhdGUgdGFibGVzLCBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgcmF0ZXMKKyAqIEBjb3VudDogc2l6ZSBvZiB0YmxzIGFycmF5CisgKiBAZGVmYXVsdF9pbmRleDogZGVmYXVsdCBzZXR0aW5nIHdoZW4gb3JpZ2luYWxseSBkaXNhYmxlZAorICovCitzdHJ1Y3QgcmF0ZV9jb25maWcgeworCXZvaWQgKnRibHM7CisJdTggY291bnQ7CisJdTggZGVmYXVsdF9pbmRleDsKK307CisKKy8qKgogICogc3RydWN0IGNsayAtIGNsb2NrIHN0cnVjdHVyZQogICogQHVzYWdlX2NvdW50OiBudW0gb2YgdXNlcnMgd2hvIGVuYWJsZWQgdGhpcyBjbG9jawogICogQGZsYWdzOiBmbGFncyBmb3IgY2xvY2sgcHJvcGVydGllcwpAQCAtNjcsMjEgKzc4LDMyIEBACiAgKiBAZW5fcmVnX2JpdDogY2xrIGVuYWJsZS9kaXNhYmxlIGJpdAogICogQG9wczogY2xrIGVuYWJsZS9kaXNhYmxlIG9wcyAtIGdlbmVyaWNfY2xrb3BzIHNlbGVjdGVkIGlmIE5VTEwKICAqIEByZWNhbGM6IHBvaW50ZXIgdG8gY2xvY2sgcmF0ZSByZWNhbGN1bGF0ZSBmdW5jdGlvbgorICogQHNldF9yYXRlOiBwb2ludGVyIHRvIGNsb2NrIHNldCByYXRlIGZ1bmN0aW9uCisgKiBAY2FsY19yYXRlOiBwb2ludGVyIHRvIGNsb2NrIGdldCByYXRlIGZ1bmN0aW9uIGZvciBpbmRleAorICogQHJhdGVfY29uZmlnOiByYXRlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIHVzZWQgYnkgc2V0X3JhdGUKKyAqIEBkaXZfZmFjdG9yOiBkaXZpc2lvbiBmYWN0b3IgdG8gcGFyZW50IGNsb2NrLgogICogQHBjbGs6IGN1cnJlbnQgcGFyZW50IGNsawogICogQHBjbGtfc2VsOiBwb2ludGVyIHRvIHBhcmVudCBzZWxlY3Rpb24gc3RydWN0dXJlCiAgKiBAcGNsa19zZWxfc2hpZnQ6IHJlZ2lzdGVyIHNoaWZ0IGZvciBzZWxlY3RpbmcgcGFyZW50IG9mIHRoaXMgY2xvY2sKICAqIEBjaGlsZHJlbjogbGlzdCBmb3IgY2hpbGRyZW5zIG9yIHRoaXMgY2xvY2sKICAqIEBzaWJsaW5nOiBub2RlIGZvciBsaXN0IG9mIGNsb2NrcyBoYXZpbmcgc2FtZSBwYXJlbnRzCiAgKiBAcHJpdmF0ZV9kYXRhOiBjbG9jayBzcGVjaWZpYyBwcml2YXRlIGRhdGEKKyAqIEBub2RlOiBsaXN0IHRvIG1haW50YWluIGNsb2NrcyBsaW5lYXJseQorICogQGNsOiBjbG9ja2xvb2sgdXAgYXNzb2ljYXRlZCB3aXRoIHRoaXMgY2xvY2sKKyAqIEBkZW50OiBvYmplY3QgZm9yIGRlYnVnZnMKICAqLwogc3RydWN0IGNsayB7CiAJdW5zaWduZWQgaW50IHVzYWdlX2NvdW50OwogCXVuc2lnbmVkIGludCBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHJhdGU7Ci0JdW5zaWduZWQgaW50ICplbl9yZWc7CisJdm9pZCBfX2lvbWVtICplbl9yZWc7CiAJdTggZW5fcmVnX2JpdDsKIAljb25zdCBzdHJ1Y3QgY2xrb3BzICpvcHM7Ci0Jdm9pZCAoKnJlY2FsYykgKHN0cnVjdCBjbGsgKik7CisJaW50ICgqcmVjYWxjKSAoc3RydWN0IGNsayAqKTsKKwlpbnQgKCpzZXRfcmF0ZSkgKHN0cnVjdCBjbGsgKiwgdW5zaWduZWQgbG9uZyByYXRlKTsKKwl1bnNpZ25lZCBsb25nICgqY2FsY19yYXRlKShzdHJ1Y3QgY2xrICosIGludCBpbmRleCk7CisJc3RydWN0IHJhdGVfY29uZmlnIHJhdGVfY29uZmlnOworCXVuc2lnbmVkIGludCBkaXZfZmFjdG9yOwogCiAJc3RydWN0IGNsayAqcGNsazsKIAlzdHJ1Y3QgcGNsa19zZWwgKnBjbGtfc2VsOwpAQCAtOTAsMzcgKzExMiwxMzcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkcmVuOwogCXN0cnVjdCBsaXN0X2hlYWQgc2libGluZzsKIAl2b2lkICpwcml2YXRlX2RhdGE7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBjbGtfbG9va3VwICpjbDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50OworI2VuZGlmCiB9OwogCiAvKiBwbGwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBwbGxfY2xrX21hc2tzIHsKKwl1MzIgbW9kZV9tYXNrOworCXUzMiBtb2RlX3NoaWZ0OworCisJdTMyIG5vcm1fZmRia19tX21hc2s7CisJdTMyIG5vcm1fZmRia19tX3NoaWZ0OworCXUzMiBkaXRoX2ZkYmtfbV9tYXNrOworCXUzMiBkaXRoX2ZkYmtfbV9zaGlmdDsKKwl1MzIgZGl2X3BfbWFzazsKKwl1MzIgZGl2X3Bfc2hpZnQ7CisJdTMyIGRpdl9uX21hc2s7CisJdTMyIGRpdl9uX3NoaWZ0OworfTsKKwogc3RydWN0IHBsbF9jbGtfY29uZmlnIHsKLQl1bnNpZ25lZCBpbnQgKm1vZGVfcmVnOwotCXVuc2lnbmVkIGludCAqY2ZnX3JlZzsKKwl2b2lkIF9faW9tZW0gKm1vZGVfcmVnOworCXZvaWQgX19pb21lbSAqY2ZnX3JlZzsKKwlzdHJ1Y3QgcGxsX2Nsa19tYXNrcyAqbWFza3M7Cit9OworCisvKiBwbGwgY2xrIHJhdGUgY29uZmlnIHN0cnVjdHVyZSAqLworc3RydWN0IHBsbF9yYXRlX3RibCB7CisJdTggbW9kZTsKKwl1MTYgbTsKKwl1OCBuOworCXU4IHA7CiB9OwogCiAvKiBhaGIgYW5kIGFwYiBidXMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBidXNfY2xrX2NvbmZpZyB7Ci0JdW5zaWduZWQgaW50ICpyZWc7Ci0JdW5zaWduZWQgaW50IG1hc2s7Ci0JdW5zaWduZWQgaW50IHNoaWZ0Oworc3RydWN0IGJ1c19jbGtfbWFza3MgeworCXUzMiBtYXNrOworCXUzMiBzaGlmdDsKIH07CiAKLS8qCi0gKiBBdXggY2xrIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlOiBhcHBsaWNhYmxlIHRvIEdQVCwgVUFSVCBhbmQgRklSREEKLSAqLworc3RydWN0IGJ1c19jbGtfY29uZmlnIHsKKwl2b2lkIF9faW9tZW0gKnJlZzsKKwlzdHJ1Y3QgYnVzX2Nsa19tYXNrcyAqbWFza3M7Cit9OworCisvKiBhaGIgYW5kIGFwYiBjbGsgYnVzIHJhdGUgY29uZmlnIHN0cnVjdHVyZSAqLworc3RydWN0IGJ1c19yYXRlX3RibCB7CisJdTggZGl2OworfTsKKworLyogQXV4IGNsayBjb25maWd1cmF0aW9uIHN0cnVjdHVyZTogYXBwbGljYWJsZSB0byBVQVJUIGFuZCBGSVJEQSAqLworc3RydWN0IGF1eF9jbGtfbWFza3MgeworCXUzMiBlcV9zZWxfbWFzazsKKwl1MzIgZXFfc2VsX3NoaWZ0OworCXUzMiBlcTFfbWFzazsKKwl1MzIgZXEyX21hc2s7CisJdTMyIHhzY2FsZV9zZWxfbWFzazsKKwl1MzIgeHNjYWxlX3NlbF9zaGlmdDsKKwl1MzIgeXNjYWxlX3NlbF9tYXNrOworCXUzMiB5c2NhbGVfc2VsX3NoaWZ0OworfTsKKwogc3RydWN0IGF1eF9jbGtfY29uZmlnIHsKLQl1bnNpZ25lZCBpbnQgKnN5bnRoX3JlZzsKKwl2b2lkIF9faW9tZW0gKnN5bnRoX3JlZzsKKwlzdHJ1Y3QgYXV4X2Nsa19tYXNrcyAqbWFza3M7Cit9OworCisvKiBhdXggY2xrIHJhdGUgY29uZmlnIHN0cnVjdHVyZSAqLworc3RydWN0IGF1eF9yYXRlX3RibCB7CisJdTE2IHhzY2FsZTsKKwl1MTYgeXNjYWxlOworCXU4IGVxOworfTsKKworLyogR1BUIGNsayBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLworc3RydWN0IGdwdF9jbGtfbWFza3MgeworCXUzMiBtc2NhbGVfc2VsX21hc2s7CisJdTMyIG1zY2FsZV9zZWxfc2hpZnQ7CisJdTMyIG5zY2FsZV9zZWxfbWFzazsKKwl1MzIgbnNjYWxlX3NlbF9zaGlmdDsKK307CisKK3N0cnVjdCBncHRfY2xrX2NvbmZpZyB7CisJdm9pZCBfX2lvbWVtICpzeW50aF9yZWc7CisJc3RydWN0IGdwdF9jbGtfbWFza3MgKm1hc2tzOworfTsKKworLyogZ3B0IGNsayByYXRlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBncHRfcmF0ZV90YmwgeworCXUxNiBtc2NhbGU7CisJdTE2IG5zY2FsZTsKK307CisKKy8qIGNsY2QgY2xrIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCitzdHJ1Y3QgY2xjZF9zeW50aF9tYXNrcyB7CisJdTMyIGRpdl9mYWN0b3JfbWFzazsKKwl1MzIgZGl2X2ZhY3Rvcl9zaGlmdDsKK307CisKK3N0cnVjdCBjbGNkX2Nsa19jb25maWcgeworCXZvaWQgX19pb21lbSAqc3ludGhfcmVnOworCXN0cnVjdCBjbGNkX3N5bnRoX21hc2tzICptYXNrczsKK307CisKKy8qIGNsY2QgY2xrIHJhdGUgY29uZmlnIHN0cnVjdHVyZSAqLworc3RydWN0IGNsY2RfcmF0ZV90YmwgeworCXUxNiBkaXY7CiB9OwogCiAvKiBwbGF0Zm9ybSBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMgKi8KIHZvaWQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbCk7CiB2b2lkIHJlY2FsY19yb290X2Nsb2Nrcyh2b2lkKTsKIAotLyogY2xvY2sgcmVjYWxjIGZ1bmN0aW9ucyAqLwotdm9pZCBmb2xsb3dfcGFyZW50KHN0cnVjdCBjbGsgKmNsayk7Ci12b2lkIHBsbDFfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBncHRfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBhdXhfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworLyogY2xvY2sgcmVjYWxjICYgc2V0IHJhdGUgZnVuY3Rpb25zICovCitpbnQgZm9sbG93X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOwordW5zaWduZWQgbG9uZyBwbGxfY2FsY19yYXRlKHN0cnVjdCBjbGsgKmNsaywgaW50IGluZGV4KTsKK2ludCBwbGxfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworaW50IHBsbF9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGRlc2lyZWRfcmF0ZSk7Cit1bnNpZ25lZCBsb25nIGJ1c19jYWxjX3JhdGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaW5kZXgpOworaW50IGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgYnVzX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZGVzaXJlZF9yYXRlKTsKK3Vuc2lnbmVkIGxvbmcgZ3B0X2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCk7CitpbnQgZ3B0X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK2ludCBncHRfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpOwordW5zaWduZWQgbG9uZyBhdXhfY2FsY19yYXRlKHN0cnVjdCBjbGsgKmNsaywgaW50IGluZGV4KTsKK2ludCBhdXhfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworaW50IGF1eF9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGRlc2lyZWRfcmF0ZSk7Cit1bnNpZ25lZCBsb25nIGNsY2RfY2FsY19yYXRlKHN0cnVjdCBjbGsgKmNsaywgaW50IGluZGV4KTsKK2ludCBjbGNkX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK2ludCBjbGNkX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZGVzaXJlZF9yYXRlKTsKIAogI2VuZGlmIC8qIF9fUExBVF9DTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUwppbmRleCBlOTEyNzBlLi44NTAxYmJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKQEAgLTEyLDcgKzEyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYW1iYS9zZXJpYWwuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAJCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2CiAJCW1vdglccnAsICNTUEVBUl9EQkdfVUFSVF9CQVNFCQlAIFBoeXNpY2FsIGJhc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2hhcmR3YXJlLmggYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZDY3NzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9oYXJkd2FyZS5oCisgKgorICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFNQRUFyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNUIE1pY3JvZWxlY3Ryb25pY3MKKyAqIFZpcmVzaCBLdW1hcjx2aXJlc2gua3VtYXJAc3QuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX1BMQVRfSEFSRFdBUkVfSAorI2RlZmluZSBfX1BMQVRfSEFSRFdBUkVfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBJT01FTSh4KQkoKHZvaWQgX19pb21lbSBfX2ZvcmNlICopKHgpKQorI2Vsc2UKKyNkZWZpbmUgSU9NRU0oeCkJKHgpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fUExBVF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9zeXN0ZW0uaCBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3N5c3RlbS5oCmluZGV4IDU1YTRlNDAuLmEyMzVmYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3N5c3RlbS5oCkBAIC0xNCw5ICsxNCw5IEBACiAjaWZuZGVmIF9fUExBVF9TWVNURU1fSAogI2RlZmluZSBfX1BMQVRfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zcDgxMC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zcDgxMC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCmluZGV4IDk5YmE2NzguLjFiZjg0NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKQEAgLTEzLDcgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9zZXJpYWwuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAjaWZuZGVmIF9fUExBVF9VTkNPTVBSRVNTX0gKICNkZWZpbmUgX19QTEFUX1VOQ09NUFJFU1NfSApAQCAtMjQsMTAgKzI0LDEwIEBACiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKVNQRUFSX0RCR19VQVJUX0JBU0U7CiAKLQl3aGlsZSAocmVhZGwoYmFzZSArIFVBUlQwMXhfRlIpICYgVUFSVDAxeF9GUl9UWEZGKQorCXdoaWxlIChyZWFkbF9yZWxheGVkKGJhc2UgKyBVQVJUMDF4X0ZSKSAmIFVBUlQwMXhfRlJfVFhGRikKIAkJYmFycmllcigpOwogCi0Jd3JpdGVsKGMsIGJhc2UgKyBVQVJUMDF4X0RSKTsKKwl3cml0ZWxfcmVsYXhlZChjLCBiYXNlICsgVUFSVDAxeF9EUik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvdm1hbGxvYy5oIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvdm1hbGxvYy5oCmluZGV4IDA5ZTkzNzIuLjhjOGIyNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3ZtYWxsb2MuaAorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC92bWFsbG9jLmgKQEAgLTE0LDYgKzE0LDYgQEAKICNpZm5kZWYgX19QTEFUX1ZNQUxMT0NfSAogI2RlZmluZSBfX1BMQVRfVk1BTExPQ19ICiAKLSNkZWZpbmUgVk1BTExPQ19FTkQJCTB4RjAwMDAwMDAKKyNkZWZpbmUgVk1BTExPQ19FTkQJCTB4RjAwMDAwMDBVTAogCiAjZW5kaWYgLyogX19QTEFUX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMgYi9hcmNoL2FybS9wbGF0LXNwZWFyL3RpbWUuYwppbmRleCA4MzljODhkLi5kYmI2ZTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL3RpbWUuYworKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL3RpbWUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL2FybS9wbGF0LXNwZWFyL3RpbWUuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBTVCBNaWNyb2VsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU1QgTWljcm9lbGVjdHJvbmljcwogICogU2hpcmF6IEhhc2hpbTxzaGlyYXouaGFzaGltQHN0LmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDEwICsyMCw5IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAogLyoKICAqIFdlIHdvdWxkIHVzZSBUSU1FUjAgYW5kIFRJTUVSMSBhcyBjbG9ja2V2ZW50IGFuZCBjbG9ja3NvdXJjZS4KQEAgLTIxMSw3ICsyMTAsNyBAQAogCiB2b2lkIF9faW5pdCBzcGVhcl9zZXR1cF90aW1lcih2b2lkKQogewotCXN0cnVjdCBjbGsgKnBsbDNfY2xrOworCWludCByZXQ7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihTUEVBUl9HUFQwX0JBU0UsIFNaXzFLLCAiZ3B0MCIpKSB7CiAJCXByX2VycigiJXM6Y2Fubm90IGdldCBJTyBhZGRyXG4iLCBfX2Z1bmNfXyk7CkBAIC0yMzAsMjYgKzIyOSwyMSBAQAogCQlnb3RvIGVycl9pb21hcDsKIAl9CiAKLQlwbGwzX2NsayA9IGNsa19nZXQoTlVMTCwgInBsbDNfNDhtX2NsayIpOwotCWlmICghcGxsM19jbGspIHsKLQkJcHJfZXJyKCIlczpjb3VsZG4ndCBnZXQgUExMMyBhcyBwYXJlbnQgZm9yIGdwdFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9pb21hcDsKKwlyZXQgPSBjbGtfZW5hYmxlKGdwdF9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiJXM6Y291bGRuJ3QgZW5hYmxlIGdwdCBjbG9ja1xuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9jbGs7CiAJfQogCi0JY2xrX3NldF9wYXJlbnQoZ3B0X2NsaywgcGxsM19jbGspOwotCiAJc3BlYXJfY2xvY2tldmVudF9pbml0KCk7CiAJc3BlYXJfY2xvY2tzb3VyY2VfaW5pdCgpOwogCiAJcmV0dXJuOwogCitlcnJfY2xrOgorCWNsa19wdXQoZ3B0X2Nsayk7CiBlcnJfaW9tYXA6CiAJaW91bm1hcChncHRfYmFzZSk7Ci0KIGVycl9tZW06CiAJcmVsZWFzZV9tZW1fcmVnaW9uKFNQRUFSX0dQVDBfQkFTRSwgU1pfMUspOwogfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIHNwZWFyX3N5c190aW1lciA9IHsKLQkuaW5pdCA9IHNwZWFyX3NldHVwX3RpbWVyLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCmluZGV4IDJmZWE4OTcuLjlkNmZlYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKKysrIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwpAQCAtMTIsNyArMTIsNyBAQAogIwogIyAgIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvbWFjaGluZXMvP2FjdGlvbj1uZXcKICMKLSMgTGFzdCB1cGRhdGU6IFN1biBEZWMgMTIgMjM6MjQ6MjcgMjAxMAorIyBMYXN0IHVwZGF0ZTogTW9uIEZlYiA3IDA4OjU5OjI3IDIwMTEKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMjI0MCw3ICsyMjQwLDcgQEAKIHZzX3YyMTAJCQlNQUNIX1ZTX1YyMTAJCVZTX1YyMTAJCQkyMjUyCiB2c192MjEyCQkJTUFDSF9WU19WMjEyCQlWU19WMjEyCQkJMjI1MwogaG10CQkJTUFDSF9ITVQJCUhNVAkJCTIyNTQKLXN1ZW4zCQkJTUFDSF9TVUVOMwkJU1VFTjMJCQkyMjU1CitrbV9raXJrd29vZAkJTUFDSF9LTV9LSVJLV09PRAlLTV9LSVJLV09PRAkJMjI1NQogdmVzcGVyCQkJTUFDSF9WRVNQRVIJCVZFU1BFUgkJCTIyNTYKIHN0cjkJCQlNQUNIX1NUUjkJCVNUUjkJCQkyMjU3CiBvbWFwM193bF9mZgkJTUFDSF9PTUFQM19XTF9GRglPTUFQM19XTF9GRgkJMjI1OApAQCAtMjk4Nyw3ICsyOTg3LDcgQEAKIGVhMjAJCQlNQUNIX0VBMjAJCUVBMjAJCQkzMDAyCiBhd20yCQkJTUFDSF9BV00yCQlBV00yCQkJMzAwMwogdGk4MTQ4ZXZtCQlNQUNIX1RJODE0OEVWTQkJVEk4MTQ4RVZNCQkzMDA0Ci10ZWdyYV9zZWFib2FyZAkJTUFDSF9URUdSQV9TRUFCT0FSRAlURUdSQV9TRUFCT0FSRAkJMzAwNQorc2VhYm9hcmQJCU1BQ0hfU0VBQk9BUkQJCVNFQUJPQVJECQkzMDA1CiBsaW5rc3RhdGlvbl9jaGx2MglNQUNIX0xJTktTVEFUSU9OX0NITFYyCUxJTktTVEFUSU9OX0NITFYyCTMwMDYKIHRlcmFfcHJvMl9yYWNrCQlNQUNIX1RFUkFfUFJPMl9SQUNLCVRFUkFfUFJPMl9SQUNLCQkzMDA3CiBydWJ5cwkJCU1BQ0hfUlVCWVMJCVJVQllTCQkJMzAwOApAQCAtMzE5MCw3ICszMTkwLDcgQEAKIGljc19pZl92b2lwCQlNQUNIX0lDU19JRl9WT0lQCUlDU19JRl9WT0lQCQkzMjA2CiB3bGZfY3JhZ2dfNjQxMAkJTUFDSF9XTEZfQ1JBR0dfNjQxMAlXTEZfQ1JBR0dfNjQxMAkJMzIwNwogcHVuaWNhCQkJTUFDSF9QVU5JQ0EJCVBVTklDQQkJCTMyMDgKLXNiY19udDI1MAkJTUFDSF9TQkNfTlQyNTAJCVNCQ19OVDI1MAkJMzIwOQordHJpbXNsaWNlCQlNQUNIX1RSSU1TTElDRQkJVFJJTVNMSUNFCQkzMjA5CiBteDI3X3dtdWx0cmEJCU1BQ0hfTVgyN19XTVVMVFJBCU1YMjdfV01VTFRSQQkJMzIxMAogbWFja2VyZWwJCU1BQ0hfTUFDS0VSRUwJCU1BQ0tFUkVMCQkzMjExCiBmYTl4MjcJCQlNQUNIX0ZBOVgyNwkJRkE5WDI3CQkJMzIxMwpAQCAtMzIxOSwzICszMjE5LDEwMCBAQAogcGNtMDQ4CQkJTUFDSF9QQ00wNDgJCVBDTTA0OAkJCTMyMzYKIGRkcwkJCU1BQ0hfRERTCQlERFMJCQkzMjM3CiBjaGFsdGVuX3hhMQkJTUFDSF9DSEFMVEVOX1hBMQlDSEFMVEVOX1hBMQkJMzIzOAordHM0OHh4CQkJTUFDSF9UUzQ4WFgJCVRTNDhYWAkJCTMyMzkKK3RvbmdhMl90ZnR0aW1lcgkJTUFDSF9UT05HQTJfVEZUVElNRVIJVE9OR0EyX1RGVFRJTUVSCQkzMjQwCit3aGlzdGxlcgkJTUFDSF9XSElTVExFUgkJV0hJU1RMRVIJCTMyNDEKK2FzbF9waG9lbml4CQlNQUNIX0FTTF9QSE9FTklYCUFTTF9QSE9FTklYCQkzMjQyCithdDkxc2FtOTI2M290bGl0ZQlNQUNIX0FUOTFTQU05MjYzT1RMSVRFCUFUOTFTQU05MjYzT1RMSVRFCTMyNDMKK2RkcGx1ZwkJCU1BQ0hfRERQTFVHCQlERFBMVUcJCQkzMjQ0CitkMnBsdWcJCQlNQUNIX0QyUExVRwkJRDJQTFVHCQkJMzI0NQora3ptOWQJCQlNQUNIX0taTTlECQlLWk05RAkJCTMyNDYKK3ZlcmRpX2x0ZQkJTUFDSF9WRVJESV9MVEUJCVZFUkRJX0xURQkJMzI0NworbmFub3pvb20JCU1BQ0hfTkFOT1pPT00JCU5BTk9aT09NCQkzMjQ4CitkbTM3MzBfc29tX2x2CQlNQUNIX0RNMzczMF9TT01fTFYJRE0zNzMwX1NPTV9MVgkJMzI0OQorZG0zNzMwX3RvcnBlZG8JCU1BQ0hfRE0zNzMwX1RPUlBFRE8JRE0zNzMwX1RPUlBFRE8JCTMyNTAKK2FuY2hvdnkJCQlNQUNIX0FOQ0hPVlkJCUFOQ0hPVlkJCQkzMjUxCityZTJyZXYyMAkJTUFDSF9SRTJSRVYyMAkJUkUyUkVWMjAJCTMyNTMKK3JlMnJldjIxCQlNQUNIX1JFMlJFVjIxCQlSRTJSRVYyMQkJMzI1NAorY25zMjF4eAkJCU1BQ0hfQ05TMjFYWAkJQ05TMjFYWAkJCTMyNTUKK3JpZGVyCQkJTUFDSF9SSURFUgkJUklERVIJCQkzMjU3Cituc2szMzAJCQlNQUNIX05TSzMzMAkJTlNLMzMwCQkJMzI1OAorY25zMjEzM2V2YgkJTUFDSF9DTlMyMTMzRVZCCQlDTlMyMTMzRVZCCQkzMjU5Cit6M184MTZ4X21vZAkJTUFDSF9aM184MTZYX01PRAlaM184MTZYX01PRAkJMzI2MAorejNfODE0eF9tb2QJCU1BQ0hfWjNfODE0WF9NT0QJWjNfODE0WF9NT0QJCTMyNjEKK2JlZWN0CQkJTUFDSF9CRUVDVAkJQkVFQ1QJCQkzMjYyCitkbWFfdGh1bmRlcmJ1ZwkJTUFDSF9ETUFfVEhVTkRFUkJVRwlETUFfVEhVTkRFUkJVRwkJMzI2Mworb21uX2F0OTFzYW05ZzIwCQlNQUNIX09NTl9BVDkxU0FNOUcyMAlPTU5fQVQ5MVNBTTlHMjAJCTMyNjQKK214MjVfZTJzX3VjCQlNQUNIX01YMjVfRTJTX1VDCU1YMjVfRTJTX1VDCQkzMjY1CittaW9uZQkJCU1BQ0hfTUlPTkUJCU1JT05FCQkJMzI2NgordG9wOTAwMF90Y3UJCU1BQ0hfVE9QOTAwMF9UQ1UJVE9QOTAwMF9UQ1UJCTMyNjcKK3RvcDkwMDBfYnNsCQlNQUNIX1RPUDkwMDBfQlNMCVRPUDkwMDBfQlNMCQkzMjY4CitraW5nZG9tCQkJTUFDSF9LSU5HRE9NCQlLSU5HRE9NCQkJMzI2OQorYXJtYWRpbGxvNDYwCQlNQUNIX0FSTUFESUxMTzQ2MAlBUk1BRElMTE80NjAJCTMyNzAKK2xxMgkJCU1BQ0hfTFEyCQlMUTIJCQkzMjcxCitzd2VkYV90bXMyCQlNQUNIX1NXRURBX1RNUzIJCVNXRURBX1RNUzIJCTMyNzIKK214NTNfbG9jbwkJTUFDSF9NWDUzX0xPQ08JCU1YNTNfTE9DTwkJMzI3MworYWNlcl9hOAkJCU1BQ0hfQUNFUl9BOAkJQUNFUl9BOAkJCTMyNzUKK2FjZXJfZ2F1Z3VpbgkJTUFDSF9BQ0VSX0dBVUdVSU4JQUNFUl9HQVVHVUlOCQkzMjc2CitndXBweQkJCU1BQ0hfR1VQUFkJCUdVUFBZCQkJMzI3NworbXg2MV9hcmQJCU1BQ0hfTVg2MV9BUkQJCU1YNjFfQVJECQkzMjc4Cit0eDUzCQkJTUFDSF9UWDUzCQlUWDUzCQkJMzI3OQorb21hcGwxMzhfY2FzZV9hMwlNQUNIX09NQVBMMTM4X0NBU0VfQTMJT01BUEwxMzhfQ0FTRV9BMwkzMjgwCit1ZW1kCQkJTUFDSF9VRU1ECQlVRU1ECQkJMzI4MQorY2N3bXg1MW11dAkJTUFDSF9DQ1dNWDUxTVVUCQlDQ1dNWDUxTVVUCQkzMjgyCityb2NraG9wcGVyCQlNQUNIX1JPQ0tIT1BQRVIJCVJPQ0tIT1BQRVIJCTMyODMKK25vb2tjb2xvcgkJTUFDSF9OT09LQ09MT1IJCU5PT0tDT0xPUgkJMzI4NAoraGtka2MxMDAJCU1BQ0hfSEtES0MxMDAJCUhLREtDMTAwCQkzMjg1Cit0czQyeHgJCQlNQUNIX1RTNDJYWAkJVFM0MlhYCQkJMzI4NgorYWVibAkJCU1BQ0hfQUVCTAkJQUVCTAkJCTMyODcKK3dhcmlvCQkJTUFDSF9XQVJJTwkJV0FSSU8JCQkzMjg4CitnZnNfc3BtCQkJTUFDSF9HRlNfU1BNCQlHRlNfU1BNCQkJMzI4OQorY21fdDM3MzAJCU1BQ0hfQ01fVDM3MzAJCUNNX1QzNzMwCQkzMjkwCitpc2MzCQkJTUFDSF9JU0MzCQlJU0MzCQkJMzI5MQorcmFzY2FsCQkJTUFDSF9SQVNDQUwJCVJBU0NBTAkJCTMyOTIKK2hyZWZ2NjAJCQlNQUNIX0hSRUZWNjAJCUhSRUZWNjAJCQkzMjkzCit0cHRfMl8wCQkJTUFDSF9UUFRfMl8wCQlUUFRfMl8wCQkJMzI5NAorcHlyYW1pZF90ZAkJTUFDSF9QWVJBTUlEX1RECQlQWVJBTUlEX1RECQkzMjk1CitzcGxlbmRvcgkJTUFDSF9TUExFTkRPUgkJU1BMRU5ET1IJCTMyOTYKK2d1Zl9wbGFuZXQJCU1BQ0hfR1VGX1BMQU5FVAkJR1VGX1BMQU5FVAkJMzI5NworbXNtOHg2MF9xdAkJTUFDSF9NU004WDYwX1FUCQlNU004WDYwX1FUCQkzMjk4CitodGNfaGRfbWluaQkJTUFDSF9IVENfSERfTUlOSQlIVENfSERfTUlOSQkJMzI5OQorYXRoZW5lCQkJTUFDSF9BVEhFTkUJCUFUSEVORQkJCTMzMDAKK2RlZXBfcl9la18xCQlNQUNIX0RFRVBfUl9FS18xCURFRVBfUl9FS18xCQkzMzAxCit2aXZvd19jdAkJTUFDSF9WSVZPV19DVAkJVklWT1dfQ1QJCTMzMDIKK25lcnlfMTAwMAkJTUFDSF9ORVJZXzEwMDAJCU5FUllfMTAwMAkJMzMwMworcmZsMTA5MTQ1X3NzcnYJCU1BQ0hfUkZMMTA5MTQ1X1NTUlYJUkZMMTA5MTQ1X1NTUlYJCTMzMDQKK25taAkJCU1BQ0hfTk1ICQlOTUgJCQkzMzA1Cit3bjgwMnQJCQlNQUNIX1dOODAyVAkJV044MDJUCQkJMzMwNgorZHJhZ29uZXQJCU1BQ0hfRFJBR09ORVQJCURSQUdPTkVUCQkzMzA3CitnZW5ldmFfYgkJTUFDSF9HRU5FVkFfQgkJR0VORVZBX0IJCTMzMDgKK2F0OTFzYW05MjYzZGVzazE2bAlNQUNIX0FUOTFTQU05MjYzREVTSzE2TAlBVDkxU0FNOTI2M0RFU0sxNkwJMzMwOQorYmNtaGFuYV9zdgkJTUFDSF9CQ01IQU5BX1NWCQlCQ01IQU5BX1NWCQkzMzEwCitiY21oYW5hX3RhYmxldAkJTUFDSF9CQ01IQU5BX1RBQkxFVAlCQ01IQU5BX1RBQkxFVAkJMzMxMQora29pCQkJTUFDSF9LT0kJCUtPSQkJCTMzMTIKK3RzNDgwMAkJCU1BQ0hfVFM0ODAwCQlUUzQ4MDAJCQkzMzEzCit0cW1hOTI2MwkJTUFDSF9UUU1BOTI2MwkJVFFNQTkyNjMJCTMzMTQKK2hvbGlkYXkJCQlNQUNIX0hPTElEQVkJCUhPTElEQVkJCQkzMzE1CitkbWFfNjQxMAkJTUFDSF9ETUE2NDEwCQlETUE2NDEwCQkJMzMxNgorcGNhdHNfb3ZlcmxheQkJTUFDSF9QQ0FUU19PVkVSTEFZCVBDQVRTX09WRVJMQVkJCTMzMTcKK2h3Z3c2NDEwCQlNQUNIX0hXR1c2NDEwCQlIV0dXNjQxMAkJMzMxOAorc2hlbnpob3UJCU1BQ0hfU0hFTlpIT1UJCVNIRU5aSE9VCQkzMzE5Citjd21lOTIxMAkJTUFDSF9DV01FOTIxMAkJQ1dNRTkyMTAJCTMzMjAKK2N3bWU5MjEwanMJCU1BQ0hfQ1dNRTkyMTBKUwkJQ1dNRTkyMTBKUwkJMzMyMQorcGdzX3YxCQkJTUFDSF9QR1NfU0lUQVJBCQlQR1NfU0lUQVJBCQkzMzIyCitjb2xpYnJpX3RlZ3JhMgkJTUFDSF9DT0xJQlJJX1RFR1JBMglDT0xJQlJJX1RFR1JBMgkJMzMyMwordzIxCQkJTUFDSF9XMjEJCVcyMQkJCTMzMjQKK3BvbHlzYXQxCQlNQUNIX1BPTFlTQVQxCQlQT0xZU0FUMQkJMzMyNQorZGF0YXdheQkJCU1BQ0hfREFUQVdBWQkJREFUQVdBWQkJCTMzMjYKK2NvYnJhbDEzOAkJTUFDSF9DT0JSQUwxMzgJCUNPQlJBTDEzOAkJMzMyNworcm92ZXJwY3M4CQlNQUNIX1JPVkVSUENTOAkJUk9WRVJQQ1M4CQkzMzI4CittYXJ2ZWxjCQkJTUFDSF9NQVJWRUxDCQlNQVJWRUxDCQkJMzMyOQorbmF2ZWZpaGlkCQlNQUNIX05BVkVGSUhJRAkJTkFWRUZJSElECQkzMzMwCitkbTM2NV9jdjEwMAkJTUFDSF9ETTM2NV9DVjEwMAlETTM2NV9DVjEwMAkJMzMzMQorYWJsZQkJCU1BQ0hfQUJMRQkJQUJMRQkJCTMzMzIKK2xlZ2FjeQkJCU1BQ0hfTEVHQUNZCQlMRUdBQ1kJCQkzMzMzCitpY29uZwkJCU1BQ0hfSUNPTkcJCUlDT05HCQkJMzMzNAorcm92ZXJfZzgJCU1BQ0hfUk9WRVJfRzgJCVJPVkVSX0c4CQkzMzM1Cit0NTM4OHAJCQlNQUNIX1Q1Mzg4UAkJVDUzODhQCQkJMzMzNgorZGluZ28JCQlNQUNIX0RJTkdPCQlESU5HTwkJCTMzMzcKK2dvZmxleGhvbWUJCU1BQ0hfR09GTEVYSE9NRQkJR09GTEVYSE9NRQkJMzMzOApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA5MmVjZDg0Li5iYzdlOGFlIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtOCw2ICs4LDcgQEAKICNpZm5kZWYgX19BU01fQVZSMzJfUEdBTExPQ19ICiAjZGVmaW5lIF9fQVNNX0FWUjMyX1BHQUxMT0NfSAogCisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9xdWlja2xpc3QuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2VyaWFsLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2VyaWFsLmgKaW5kZXggMWZmOWYxNC4uN2RiYzY2NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NlcmlhbC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zZXJpYWwuaApAQCAtMTAsNiArMTAsNyBAQAogI2RlZmluZSBfX0JGSU5fQVNNX1NFUklBTF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxtYWNoL2Fub21hbHkuaD4KICNpbmNsdWRlIDxtYWNoL2JmaW5fc2VyaWFsLmg+CiAKQEAgLTQxLDYgKzQyLDcgQEAKIAlzdHJ1Y3QgY2lyY19idWYgcnhfZG1hX2J1ZjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCByeF9kbWFfdGltZXI7CiAJaW50IHJ4X2RtYV9ucm93czsKKwlzcGlubG9ja190IHJ4X2xvY2s7CiAJdW5zaWduZWQgaW50IHR4X2RtYV9jaGFubmVsOwogCXVuc2lnbmVkIGludCByeF9kbWFfY2hhbm5lbDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfZG1hX3dvcmtxdWV1ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUwppbmRleCAyNTBmNGQ0Li4wNmE1ZTY3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvb3V0cy5TCkBAIC0xMyw2ICsxMyw4IEBACiAuYWxpZ24gMgogCiBFTlRSWShfb3V0c2wpCisJQ0MgPSBSMiA9PSAwOworCUlGIENDIEpVTVAgMWY7CiAJUDAgPSBSMDsJLyogUDAgPSBwb3J0ICovCiAJUDEgPSBSMTsJLyogUDEgPSBhZGRyZXNzICovCiAJUDIgPSBSMjsJLyogUDIgPSBjb3VudCAqLwpAQCAtMjAsMTAgKzIyLDEyIEBACiAJTFNFVFVQKCAuTGxvbmdfbG9vcF9zLCAuTGxvbmdfbG9vcF9lKSBMQzAgPSBQMjsKIC5MbG9uZ19sb29wX3M6IFIwID0gW1AxKytdOwogLkxsb25nX2xvb3BfZTogW1AwXSA9IFIwOwotCVJUUzsKKzE6CVJUUzsKIEVORFBST0MoX291dHNsKQogCiBFTlRSWShfb3V0c3cpCisJQ0MgPSBSMiA9PSAwOworCUlGIENDIEpVTVAgMWY7CiAJUDAgPSBSMDsJLyogUDAgPSBwb3J0ICovCiAJUDEgPSBSMTsJLyogUDEgPSBhZGRyZXNzICovCiAJUDIgPSBSMjsJLyogUDIgPSBjb3VudCAqLwpAQCAtMzEsMTAgKzM1LDEyIEBACiAJTFNFVFVQKCAuTHdvcmRfbG9vcF9zLCAuTHdvcmRfbG9vcF9lKSBMQzAgPSBQMjsKIC5Md29yZF9sb29wX3M6IFIwID0gV1tQMSsrXTsKIC5Md29yZF9sb29wX2U6IFdbUDBdID0gUjA7Ci0JUlRTOworMToJUlRTOwogRU5EUFJPQyhfb3V0c3cpCiAKIEVOVFJZKF9vdXRzYikKKwlDQyA9IFIyID09IDA7CisJSUYgQ0MgSlVNUCAxZjsKIAlQMCA9IFIwOwkvKiBQMCA9IHBvcnQgKi8KIAlQMSA9IFIxOwkvKiBQMSA9IGFkZHJlc3MgKi8KIAlQMiA9IFIyOwkvKiBQMiA9IGNvdW50ICovCkBAIC00MiwxMCArNDgsMTIgQEAKIAlMU0VUVVAoIC5MYnl0ZV9sb29wX3MsIC5MYnl0ZV9sb29wX2UpIExDMCA9IFAyOwogLkxieXRlX2xvb3BfczogUjAgPSBCW1AxKytdOwogLkxieXRlX2xvb3BfZTogQltQMF0gPSBSMDsKLQlSVFM7CisxOglSVFM7CiBFTkRQUk9DKF9vdXRzYikKIAogRU5UUlkoX291dHN3XzgpCisJQ0MgPSBSMiA9PSAwOworCUlGIENDIEpVTVAgMWY7CiAJUDAgPSBSMDsJLyogUDAgPSBwb3J0ICovCiAJUDEgPSBSMTsJLyogUDEgPSBhZGRyZXNzICovCiAJUDIgPSBSMjsJLyogUDIgPSBjb3VudCAqLwpAQCAtNTYsNSArNjQsNSBAQAogCQlSMCA9IFIwIDw8IDg7CiAJCVIwID0gUjAgKyBSMTsKIC5Md29yZDhfbG9vcF9lOiBXW1AwXSA9IFIwOwotCVJUUzsKKzE6CVJUUzsKIEVORFBST0MoX291dHN3XzgpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKaW5kZXggNzkwYzc2Ny4uYWI0YTkyNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwpAQCAtNTgsNiArNTgsOCBAQAogMToKIC5pZmVxcyAiXGZsdXNoaW5zIiwgQlJPS19GTFVTSF9JTlNUCiAJXGZsdXNoaW5zIFtQMCsrXTsKKwlub3A7CisJbm9wOwogMjoJbm9wOwogLmVsc2UKIDI6CVxmbHVzaGlucyBbUDArK107CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNDQyMjE4OS4uYzQ5YmU4NCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNzIsMTEgKzcyLDYgQEAKIAlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAJLmluaXQuZGF0YSA6IHsgSU5JVF9EQVRBIH0KIAkuaW5pdC5zZXR1cCA6IHsgSU5JVF9TRVRVUCgxNikgfQotI2lmZGVmIENPTkZJR19FVFJBWF9BUkNIX1YzMgotCV9fc3RhcnRfX19wYXJhbSA9IC47Ci0JX19wYXJhbSA6IHsgKihfX3BhcmFtKSB9Ci0JX19zdG9wX19fcGFyYW0gPSAuOwotI2VuZGlmCiAJLmluaXRjYWxsLmluaXQgOiB7CiAJCUlOSVRfQ0FMTFMKIAl9CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2lycS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYwppbmRleCBmNzQ1YzEyLi43NmVhZjM4IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKQEAgLTgwLDcgKzgwLDcgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVwogCS8qIEZJWE1FIE0zMlIgKi8KICNlbmRpZgotCV9fZG9fSVJRKGlycSk7CisJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CiAJaXJxX2V4aXQoKTsKIAlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3RyaW5nLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc3RyaW5nLmgKaW5kZXggNjViMTMxMi4uMzIxOTg0NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N0cmluZy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdHJpbmcuaApAQCAtOTksMTQgKzk5LDEyIEBACiAJCTogIithIiAoY3MpLCAiK2EiIChjdCksICI9ZCIgKHJlcykpOwogCXJldHVybiByZXM7CiB9CisjZW5kaWYgLyogQ09ORklHX0NPTERGSVJFICovCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQogZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ01QCi1leHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKICNkZWZpbmUgbWVtY21wKGQsIHMsIG4pIF9fYnVpbHRpbl9tZW1jbXAoZCwgcywgbikKLSNlbmRpZiAvKiBDT05GSUdfQ09MREZJUkUgKi8KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKIGV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL3N0cmluZy5jIGIvYXJjaC9tNjhrL2xpYi9zdHJpbmcuYwppbmRleCA0MjUzZjg3Li5kMzk5YzVmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbGliL3N0cmluZy5jCisrKyBiL2FyY2gvbTY4ay9saWIvc3RyaW5nLmMKQEAgLTI0MywxNCArMjQzLDMgQEAKIAlyZXR1cm4geGRlc3Q7CiB9CiBFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwotCi1pbnQgbWVtY21wKGNvbnN0IHZvaWQgKmNzLCBjb25zdCB2b2lkICpjdCwgc2l6ZV90IGNvdW50KQotewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN1MSwgKnN1MjsKLQotCWZvciAoc3UxID0gY3MsIHN1MiA9IGN0OyBjb3VudCA+IDA7ICsrc3UxLCArK3N1MiwgY291bnQtLSkKLQkJaWYgKCpzdTEgIT0gKnN1MikKLQkJCXJldHVybiAqc3UxIDwgKnN1MiA/IC0xIDogKzE7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG1lbWNtcCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGVmMzMyMTMuLjQ3ZTE1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNDEsNiArMTQxLDEyIEBACiAJCSooX19wYXJhbSkKIAkJX19zdG9wX19fcGFyYW0gPSAuOwogCisJCS8qIEJ1aWx0LWluIG1vZHVsZSB2ZXJzaW9ucyAqLworCQkuID0gQUxJR04oNCkgOworCQlfX3N0YXJ0X19fbW9kdmVyID0gLjsKKwkJKihfX21vZHZlcikKKwkJX19zdG9wX19fbW9kdmVyID0gLjsKKwogCQkuID0gQUxJR04oNCkgOwogCQlfZXRleHQgPSAuIDsKIAl9ID4gVEVYVApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbGliL01ha2VmaWxlIGIvYXJjaC9tNjhrbm9tbXUvbGliL01ha2VmaWxlCmluZGV4IGQ5NGQ3MDkuLjMyZDg1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL202OGtub21tdS9saWIvTWFrZWZpbGUKQEAgLTQsNCArNCw0IEBACiAKIGxpYi15CTo9IGFzaGxkaTMubyBhc2hyZGkzLm8gbHNocmRpMy5vIFwKIAkgICBtdWxkaTMubyBtdWxzaTMubyBkaXZzaTMubyB1ZGl2c2kzLm8gbW9kc2kzLm8gdW1vZHNpMy5vIFwKLQkgICBjaGVja3N1bS5vIG1lbWNweS5vIG1lbXNldC5vIGRlbGF5Lm8KKwkgICBjaGVja3N1bS5vIG1lbWNweS5vIG1lbW1vdmUubyBtZW1zZXQubyBkZWxheS5vCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9saWIvbWVtbW92ZS5jIGIvYXJjaC9tNjhrbm9tbXUvbGliL21lbW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2RjZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrbm9tbXUvbGliL21lbW1vdmUuYwpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIF9fSU5fU1RSSU5HX0MKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCit2b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisJdm9pZCAqeGRlc3QgPSBkZXN0OworCXNpemVfdCB0ZW1wOworCisJaWYgKCFuKQorCQlyZXR1cm4geGRlc3Q7CisKKwlpZiAoZGVzdCA8IHNyYykgeworCQlpZiAoKGxvbmcpZGVzdCAmIDEpIHsKKwkJCWNoYXIgKmNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IGNoYXIgKmNzcmMgPSBzcmM7CisJCQkqY2Rlc3QrKyA9ICpjc3JjKys7CisJCQlkZXN0ID0gY2Rlc3Q7CisJCQlzcmMgPSBjc3JjOworCQkJbi0tOworCQl9CisJCWlmIChuID4gMiAmJiAobG9uZylkZXN0ICYgMikgeworCQkJc2hvcnQgKnNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IHNob3J0ICpzc3JjID0gc3JjOworCQkJKnNkZXN0KysgPSAqc3NyYysrOworCQkJZGVzdCA9IHNkZXN0OworCQkJc3JjID0gc3NyYzsKKwkJCW4gLT0gMjsKKwkJfQorCQl0ZW1wID0gbiA+PiAyOworCQlpZiAodGVtcCkgeworCQkJbG9uZyAqbGRlc3QgPSBkZXN0OworCQkJY29uc3QgbG9uZyAqbHNyYyA9IHNyYzsKKwkJCXRlbXAtLTsKKwkJCWRvCisJCQkJKmxkZXN0KysgPSAqbHNyYysrOworCQkJd2hpbGUgKHRlbXAtLSk7CisJCQlkZXN0ID0gbGRlc3Q7CisJCQlzcmMgPSBsc3JjOworCQl9CisJCWlmIChuICYgMikgeworCQkJc2hvcnQgKnNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IHNob3J0ICpzc3JjID0gc3JjOworCQkJKnNkZXN0KysgPSAqc3NyYysrOworCQkJZGVzdCA9IHNkZXN0OworCQkJc3JjID0gc3NyYzsKKwkJfQorCQlpZiAobiAmIDEpIHsKKwkJCWNoYXIgKmNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IGNoYXIgKmNzcmMgPSBzcmM7CisJCQkqY2Rlc3QgPSAqY3NyYzsKKwkJfQorCX0gZWxzZSB7CisJCWRlc3QgPSAoY2hhciAqKWRlc3QgKyBuOworCQlzcmMgPSAoY29uc3QgY2hhciAqKXNyYyArIG47CisJCWlmICgobG9uZylkZXN0ICYgMSkgeworCQkJY2hhciAqY2Rlc3QgPSBkZXN0OworCQkJY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkJCSotLWNkZXN0ID0gKi0tY3NyYzsKKwkJCWRlc3QgPSBjZGVzdDsKKwkJCXNyYyA9IGNzcmM7CisJCQluLS07CisJCX0KKwkJaWYgKG4gPiAyICYmIChsb25nKWRlc3QgJiAyKSB7CisJCQlzaG9ydCAqc2Rlc3QgPSBkZXN0OworCQkJY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJCQkqLS1zZGVzdCA9ICotLXNzcmM7CisJCQlkZXN0ID0gc2Rlc3Q7CisJCQlzcmMgPSBzc3JjOworCQkJbiAtPSAyOworCQl9CisJCXRlbXAgPSBuID4+IDI7CisJCWlmICh0ZW1wKSB7CisJCQlsb25nICpsZGVzdCA9IGRlc3Q7CisJCQljb25zdCBsb25nICpsc3JjID0gc3JjOworCQkJdGVtcC0tOworCQkJZG8KKwkJCQkqLS1sZGVzdCA9ICotLWxzcmM7CisJCQl3aGlsZSAodGVtcC0tKTsKKwkJCWRlc3QgPSBsZGVzdDsKKwkJCXNyYyA9IGxzcmM7CisJCX0KKwkJaWYgKG4gJiAyKSB7CisJCQlzaG9ydCAqc2Rlc3QgPSBkZXN0OworCQkJY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJCQkqLS1zZGVzdCA9ICotLXNzcmM7CisJCQlkZXN0ID0gc2Rlc3Q7CisJCQlzcmMgPSBzc3JjOworCQl9CisJCWlmIChuICYgMSkgeworCQkJY2hhciAqY2Rlc3QgPSBkZXN0OworCQkJY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkJCSotLWNkZXN0ID0gKi0tY3NyYzsKKwkJfQorCX0KKwlyZXR1cm4geGRlc3Q7Cit9CitFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9pbnRjMi5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9pbnRjMi5jCmluZGV4IGQwOWQ5ZGEuLmM1MTUxZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNDkvaW50YzIuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjQ5L2ludGMyLmMKQEAgLTUwLDggKzUwLDEwIEBACiAJaW50IGlycTsKIAogCS8qIEdQSU8gaW50ZXJydXB0IHNvdXJjZXMgKi8KLQlmb3IgKGlycSA9IE1DRklOVEMyX0dQSU9JUlEwOyAoaXJxIDw9IE1DRklOVEMyX0dQSU9JUlE3KTsgaXJxKyspCisJZm9yIChpcnEgPSBNQ0ZJTlRDMl9HUElPSVJRMDsgKGlycSA8PSBNQ0ZJTlRDMl9HUElPSVJRNyk7IGlycSsrKSB7CiAJCWlycV9kZXNjW2lycV0uY2hpcCA9ICZpbnRjMl9pcnFfZ3Bpb19jaGlwOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMKaW5kZXggMjQwYTdhNi4uNjc2OTYwYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TCkBAIC0xMDgsNyArMTA4LDYgQEAKIAltb3ZlbAklZDEsJWEyCiAxOgogCW1vdmUJJWEyQChUSV9GTEFHUyksJWQxCS8qIHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJI19USUZfV09SS19NQVNLLCVkMQogCWpuZQlMd29ya190b19kbwogCVJFU1RPUkVfQUxMCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbW1wcm9jLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9jb21tcHJvYy5jCmluZGV4IGYyN2U2ODguLjhlNGUxMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbW1wcm9jLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29tbXByb2MuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiBjcG1faW5zdGFsbF9oYW5kbGVyKGludCB2ZWMsIHZvaWQgKCpoYW5kbGVyKSgpLCB2b2lkICpkZXZfaWQpCiB7CiAKLQlyZXF1ZXN0X2lycSh2ZWMsIGhhbmRsZXIsIElSUV9GTEdfTE9DSywgInRpbWVyIiwgZGV2X2lkKTsKKwlyZXF1ZXN0X2lycSh2ZWMsIGhhbmRsZXIsIDAsICJ0aW1lciIsIGRldl9pZCk7CiAKIC8qIAlpZiAoY3BtX3ZlY3NbdmVjXS5oYW5kbGVyICE9IDApICovCiAvKiAJCXByaW50ayhLRVJOX0lORk8gIkNQTSBpbnRlcnJ1cHQgJXggcmVwbGFjaW5nICV4XG4iLCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9jb25maWcuYwppbmRleCBhYzYyOWZhMy4uOWRkNWJjYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAgLyogU2V0IGNvbXBhcmUgcmVnaXN0ZXIgIDMyS2h6IC8gMzIgLyAxMCA9IDEwMCAqLwogICBUQ01QID0gMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAotICByZXF1ZXN0X2lycShJUlFfTUFDSFNQRUMgfCAxLCB0aW1lcl9yb3V0aW5lLCBJUlFfRkxHX0xPQ0ssICJ0aW1lciIsIE5VTEwpOworICByZXF1ZXN0X2lycShJUlFfTUFDSFNQRUMgfCAxLCB0aW1lcl9yb3V0aW5lLCAwLCAidGltZXIiLCBOVUxMKTsKICNlbmRpZgogCiAgIC8qIEdlbmVyYWwgcHVycG9zZSBxdWljYyB0aW1lcnM6IE1DNjgzNjBVTSBwNy0yMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMKaW5kZXggOGEyODc4OC4uNDZjMWIxOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TCkBAIC0xMDQsNyArMTA0LDYgQEAKIAltb3ZlbAklZDEsJWEyCiAxOgogCW1vdmUJJWEyQChUSV9GTEFHUyksJWQxCS8qIHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJI19USUZfV09SS19NQVNLLCVkMQogCWpuZQlMd29ya190b19kbwogCVJFU1RPUkVfQUxMCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2ludHMuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2ludHMuYwppbmRleCBhZDk2YWIxLi5hMjkwNDFjIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9pbnRzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvaW50cy5jCkBAIC0xMzIsOCArMTMyLDggQEAKIAlwcXVpY2MtPmludHJfY2ltciA9IDB4MDAwMDAwMDA7CiAKIAlmb3IgKGkgPSAwOyAoaSA8IE5SX0lSUVMpOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGlycSwgJmludGNfaXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9jaGlwKGksICZpbnRjX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKaW5kZXggNGRkZmMzZGEuLjU4MzdjZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUwpAQCAtMTM4LDcgKzEzOCw2IEBACiAJYW5kbAkjLVRIUkVBRF9TSVpFLCVkMQkvKiBhdCBiYXNlIG9mIGtlcm5lbCBzdGFjayAqLwogCW1vdmVsCSVkMSwlYTAKIAltb3ZlbAklYTBAKFRJX0ZMQUdTKSwlZDEJLyogZ2V0IHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJIzB4ZWZmZiwlZDEKIAlqbmUJTHdvcmtfdG9fZG8JCS8qIHN0aWxsIHdvcmsgdG8gZG8gKi8KIAogTHJldHVybjoKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKaW5kZXggNWZkMzE5MC4uYzQ1MzJmMCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KIAotI2lmZGVmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUgorI2lmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF9sb2NhbF9pcnFfc2F2ZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYjIzZjY4MC4uODg1NTc0YSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC00MTEsMjAgKzQxMSwxOSBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV91cGRhdGUocHRlX3QgKnAsIHVuc2lnbmVkIGxvbmcgY2xyLAogCQkJCXVuc2lnbmVkIGxvbmcgc2V0KQogewotCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXAsIG1zcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBvbGQsIHRtcDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJcCi0JbXNyY2xyCSUyLCAweDJcblwKLQlub3BcblwKLQlsdwklMCwgJTQsIHIwXG5cCi0JYW5kbgklMSwgJTAsICU1XG5cCi0Jb3IJJTEsICUxLCAlNlxuXAotCXN3CSUxLCAlNCwgcjBcblwKLQltdHMgICAgIHJtc3IsICUyXG5cCi0Jbm9wIgotCTogIj0mciIgKG9sZCksICI9JnIiICh0bXApLCAiPSZyIiAobXNyKSwgIj1tIiAoKnApCi0JOiAiciIgKCh1bnNpZ25lZCBsb25nKShwICsgMSkgLSA0KSwgInIiIChjbHIpLCAiciIgKHNldCksICJtIiAoKnApCi0JOiAiY2MiKTsKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCSJsdwklMCwgJTIsIHIwCVxuIgorCQkJCSJhbmRuCSUxLCAlMCwgJTMJXG4iCisJCQkJIm9yCSUxLCAlMSwgJTQJXG4iCisJCQkJInN3CSUxLCAlMiwgcjAJXG4iCisJCQk6ICI9JnIiIChvbGQpLCAiPSZyIiAodG1wKQorCQkJOiAiciIgKCh1bnNpZ25lZCBsb25nKShwICsgMSkgLSA0KSwgInIiIChjbHIpLCAiciIgKHNldCkKKwkJCTogImNjIik7CisKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIG9sZDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L3B2ci5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKaW5kZXggZTAxYWZhNi4uNDg4YzFlZCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAlyZWdpc3RlciB1bnNpZ25lZCB0bXAgX19hc21fXygicjMiKTsJCQlcCiAJdG1wID0gMHgwOwkvKiBQcmV2ZW50IHdhcm5pbmcgYWJvdXQgdW51c2VkICovCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCi0JCQkibWZzCSUwLCBycHZyIiAjcHZyaWQgIjsiCVwKKwkJCSJtZnMJJTAsIHJwdnIiICNwdnJpZCAiOyIJCVwKIAkJCTogIj1yIiAodG1wKSA6IDogIm1lbW9yeSIpOyAJCVwKIAl2YWwgPSB0bXA7CQkJCQkJXAogfQpAQCAtNTQsNyArNTQsNyBAQAogCWlmICghKGZsYWdzICYgUFZSX01TUl9CSVQpKQogCQlyZXR1cm4gMDsKIAotCWdldF9zaW5nbGVfcHZyKDB4MDAsIHB2cjApOworCWdldF9zaW5nbGVfcHZyKDAsIHB2cjApOwogCXByX2RlYnVnKCIlczogcHZyMCBpcyAweCUwOHhcbiIsIF9fZnVuY19fLCBwdnIwKTsKIAogCWlmIChwdnIwICYgUFZSMF9QVlJfRlVMTF9NQVNLKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFkLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUwppbmRleCA0MjQzNDAwLi43NzhhNWNlIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUwpAQCAtNjIsMjMgKzYyLDMyIEBACiAJYW5kaQlyMSwgcjEsIH4yCiAJbXRzCXJtc3IsIHIxCiAvKgotICogSGVyZSBpcyBjaGVja2luZyBtZWNoYW5pc20gd2hpY2ggY2hlY2sgaWYgTWljcm9ibGF6ZSBoYXMgbXNyIGluc3RydWN0aW9ucwotICogV2UgbG9hZCBtc3IgYW5kIGNvbXBhcmUgaXQgd2l0aCBwcmV2aW91cyByMSB2YWx1ZSAtIGlmIGlzIHRoZSBzYW1lLAotICogbXNyIGluc3RydWN0aW9ucyB3b3JrcyBpZiBub3QgLSBjcHUgZG9uJ3QgaGF2ZSB0aGVtLgorICogQWNjb3JkaW5nIHRvIFhpbGlueCwgbXNyY2xyIGluc3RydWN0aW9uIGJlaGF2ZXMgbGlrZSAnbWZzIHJYLHJwYycKKyAqIGlmIHRoZSBtc3JjbHIgaW5zdHJ1Y3Rpb24gaXMgbm90IGVuYWJsZWQuIFdlIHVzZSB0aGlzIHRvIGRldGVjdAorICogaWYgdGhlIG9wY29kZSBpcyBhdmFpbGFibGUsIGJ5IGlzc3VpbmcgbXNyY2xyIGFuZCB0aGVuIHRlc3RpbmcgdGhlIHJlc3VsdC4KKyAqIHI4ID09IDAgLSBtc3IgaW5zdHJ1Y3Rpb25zIGFyZSBpbXBsZW1lbnRlZAorICogcjggIT0gMCAtIG1zciBpbnN0cnVjdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZAogICovCi0JLyogcjg9MCAtIEkgaGF2ZSBtc3IgaW5zdHIsIDEgLSBJIGRvbid0IGhhdmUgdGhlbSAqLwotCXJzdWJpCXIwLCByMCwgMQkvKiBzZXQgdGhlIGNhcnJ5IGJpdCAqLwotCW1zcmNscglyMCwgMHg0CQkvKiB0cnkgdG8gY2xlYXIgaXQgKi8KLQkvKiByZWFkIHRoZSBjYXJyeSBiaXQsIHI4IHdpbGwgYmUgJzAnIGlmIG1zcmNsciBleGlzdHMgKi8KLQlhZGRpawlyOCwgcjAsIDAKKwltc3JjbHIJcjgsIDAgLyogY2xlYXIgbm90aGluZyAtIGp1c3QgcmVhZCBtc3IgZm9yIHRlc3QgKi8KKwljbXB1CXI4LCByOCwgcjEgLyogcjEgbXVzdCBjb250YWluIG1zciByZWcgY29udGVudCAqLwogCiAvKiByNyBtYXkgcG9pbnQgdG8gYW4gRkRULCBvciB0aGVyZSBtYXkgYmUgb25lIGxpbmtlZCBpbi4KICAgIGlmIGl0J3MgaW4gcjcsIHdlJ3ZlIGdvdCB0byBzYXZlIGl0IGF3YXkgQVNBUC4KICAgIFdlIGVuc3VyZSByNyBwb2ludHMgdG8gYSB2YWxpZCBGRFQsIGp1c3QgaW4gY2FzZSB0aGUgYm9vdGxvYWRlcgogICAgaXMgYnJva2VuIG9yIG5vbi1leGlzdGVudCAqLwogCWJlcWkJcjcsIG5vX2ZkdF9hcmcJCQkvKiBOVUxMIHBvaW50ZXI/ICBkb24ndCBjb3B5ICovCi0JbHcJcjExLCByMCwgcjcJCQkvKiBEb2VzIHI3IHBvaW50IHRvIGEgKi8KLQlyc3ViaQlyMTEsIHIxMSwgT0ZfRFRfSEVBREVSCQkvKiB2YWxpZCBGRFQ/ICovCisvKiBEb2VzIHI3IHBvaW50IHRvIGEgdmFsaWQgRkRUPyBMb2FkIEhFQURFUiBtYWdpYyBudW1iZXIgKi8KKwkvKiBSdW4gdGltZSBCaWcvTGl0dGxlIGVuZGlhbiBwbGF0Zm9ybSAqLworCS8qIFNhdmUgMSBhcyB3b3JkIGFuZCBsb2FkIGJ5dGUgLSAwIC0gQklHLCAxIC0gTElUVExFICovCisJYWRkaWsJcjExLCByMCwgMHgxIC8qIEJJRy9MSVRUTEUgY2hlY2tpbmcgdmFsdWUgKi8KKwkvKiBfX2Jzc19zdGFydCB3aWxsIGJlIHplcm9lZCBsYXRlciAtIGl0IGlzIGp1c3QgdGVtcCBsb2NhdGlvbiAqLworCXN3aQlyMTEsIHIwLCBUT1BIWVMoX19ic3Nfc3RhcnQpCisJbGJ1aQlyMTEsIHIwLCBUT1BIWVMoX19ic3Nfc3RhcnQpCisJYmVxaWQJcjExLCBiaWdfZW5kaWFuIC8qIERPIE5PVCBicmVhayBkZWxheSBzdG9wIGRlcGVuZGVuY3kgKi8KKwlsdwlyMTEsIHIwLCByNyAvKiBCaWcgZW5kaWFuIGxvYWQgaW4gZGVsYXkgc2xvdCAqLworCWx3cglyMTEsIHIwLCByNyAvKiBMaXR0bGUgZW5kaWFuIGxvYWQgKi8KK2JpZ19lbmRpYW46CisJcnN1YmkJcjExLCByMTEsIE9GX0RUX0hFQURFUgkvKiBDaGVjayBGRFQgaGVhZGVyICovCiAJYmVxaQlyMTEsIF9wcmVwYXJlX2NvcHlfZmR0CiAJb3IJcjcsIHIwLCByMAkJLyogY2xlYXIgUjcgd2hlbiBub3QgdmFsaWQgRFRCICovCiAJYm5laQlyMTEsIG5vX2ZkdF9hcmcJCQkvKiBObyAtIGdldCBvdXQgb2YgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCmluZGV4IDI1ZjZlMDcuLjc4MjY4MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKQEAgLTE0NywxMCArMTQ3LDYgQEAKIAkjaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfQkFSUkVMID4gMAogCSNkZWZpbmUgQlNSTEkockQsIHJBLCBpbW0pCVwKIAkJYnNybGkgckQsIHJBLCBpbW0KLQkjZWxpZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9ESVYgPiAwCi0JI2RlZmluZSBCU1JMSShyRCwgckEsIGltbSkJXAotCQlvcmkgckQsIHIwLCAoMSA8PCBpbW0pOwlcCi0JCWlkaXZ1IHJELCByRCwgckEKIAkjZWxzZQogCSNkZWZpbmUgQlNSTEkockQsIHJBLCBpbW0pIEJTUkxJICMjIGltbSAockQsIHJBKQogCS8qIE9ubHkgdGhlIHVzZWQgc2hpZnQgY29uc3RhbnRzIGRlZmluZWQgaGVyZSAtIGFkZCBtb3JlIGlmIG5lZWRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jCmluZGV4IGJiMTU1OGUuLjkzMTJmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMKQEAgLTE2MSwxMSArMTYxLDExIEBACiAjaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfTVNSX0lOU1RSCiAJaWYgKG1zcikKIAkJZXByaW50aygiISEhWW91ciBrZXJuZWwgaGFzIHNldHVwIE1TUiBpbnN0cnVjdGlvbiBidXQgIgotCQkJCSJDUFUgZG9uJ3QgaGF2ZSBpdCAlZFxuIiwgbXNyKTsKKwkJCQkiQ1BVIGRvbid0IGhhdmUgaXQgJXhcbiIsIG1zcik7CiAjZWxzZQogCWlmICghbXNyKQogCQllcHJpbnRrKCIhISFZb3VyIGtlcm5lbCBub3Qgc2V0dXAgTVNSIGluc3RydWN0aW9uIGJ1dCAiCi0JCQkJIkNQVSBoYXZlIGl0ICVkXG4iLCBtc3IpOworCQkJCSJDUFUgaGF2ZSBpdCAleFxuIiwgbXNyKTsKICNlbmRpZgogCiAJZm9yIChzcmMgPSBfX2l2dF9zdGFydDsgc3JjIDwgX19pdnRfZW5kOyBzcmMrKywgZHN0KyspCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvbGliL2Zhc3Rjb3B5LlMgYi9hcmNoL21pY3JvYmxhemUvbGliL2Zhc3Rjb3B5LlMKaW5kZXggZmRjNDhiYi4uNjIwMjFkNyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2xpYi9mYXN0Y29weS5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvZmFzdGNvcHkuUwpAQCAtMjksNiArMjksMTAgQEAKICAqCWJldHdlZW4gbWVtIGxvY2F0aW9ucyB3aXRoIHNpemUgb2YgeGZlciBzcGVjJ2QgaW4gYnl0ZXMKICAqLwogCisjaWZkZWYgX19NSUNST0JMQVpFRUxfXworI2Vycm9yIE1pY3JvYmxhemUgTEUgbm90IHN1cHBvcnQgQVNNIG9wdGltaXplZCBsaWIgZnVuYy4gRGlzYWJsZSBPUFRfTElCX0FTTS4KKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCS50ZXh0CiAJLmdsb2JsCW1lbWNweQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKaW5kZXggOTkxZDU5OS4uZmU1NmEyMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCkBAIC0yNDAsNiArMjQwLDEyIEBACiAJICogY2xhaW1zIHRvIHN1cHBvcnQga2V4ZWMuCiAJICovCiAJaW50ICgqbWFjaGluZV9rZXhlY19wcmVwYXJlKShzdHJ1Y3Qga2ltYWdlICppbWFnZSk7CisKKwkvKiBDYWxsZWQgdG8gcGVyZm9ybSB0aGUgX3JlYWxfIGtleGVjLgorCSAqIERvIE5PVCBhbGxvY2F0ZSBtZW1vcnkgb3IgZmFpbCBoZXJlLiBXZSBhcmUgcGFzdCB0aGUgcG9pbnQgb2YKKwkgKiBubyByZXR1cm4uCisJICovCisJdm9pZCAoKm1hY2hpbmVfa2V4ZWMpKHN0cnVjdCBraW1hZ2UgKmltYWdlKTsKICNlbmRpZiAvKiBDT05GSUdfS0VYRUMgKi8KIAogI2lmZGVmIENPTkZJR19TVVNQRU5ECmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaAppbmRleCA4ZWFlZDgxLi4xNzE5NGZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKQEAgLTQwLDggKzQwLDggQEAKIAogLyogTUFTIHJlZ2lzdGVycyBiaXQgZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSBNQVMwX1RMQlNFTCh4KQkJKCh4IDw8IDI4KSAmIDB4MzAwMDAwMDApCi0jZGVmaW5lIE1BUzBfRVNFTCh4KQkJKCh4IDw8IDE2KSAmIDB4MEZGRjAwMDApCisjZGVmaW5lIE1BUzBfVExCU0VMKHgpCQkoKCh4KSA8PCAyOCkgJiAweDMwMDAwMDAwKQorI2RlZmluZSBNQVMwX0VTRUwoeCkJCSgoKHgpIDw8IDE2KSAmIDB4MEZGRjAwMDApCiAjZGVmaW5lIE1BUzBfTlYoeCkJCSgoeCkgJiAweDAwMDAwRkZGKQogI2RlZmluZSBNQVMwX0hFUwkJMHgwMDAwNDAwMAogI2RlZmluZSBNQVMwX1dRX0FMTFdBWVMJCTB4MDAwMDAwMDAKQEAgLTUwLDEyICs1MCwxMiBAQAogCiAjZGVmaW5lIE1BUzFfVkFMSUQJCTB4ODAwMDAwMDAKICNkZWZpbmUgTUFTMV9JUFJPVAkJMHg0MDAwMDAwMAotI2RlZmluZSBNQVMxX1RJRCh4KQkJKCh4IDw8IDE2KSAmIDB4M0ZGRjAwMDApCisjZGVmaW5lIE1BUzFfVElEKHgpCQkoKCh4KSA8PCAxNikgJiAweDNGRkYwMDAwKQogI2RlZmluZSBNQVMxX0lORAkJMHgwMDAwMjAwMAogI2RlZmluZSBNQVMxX1RTCQkJMHgwMDAwMTAwMAogI2RlZmluZSBNQVMxX1RTSVpFX01BU0sJCTB4MDAwMDBmODAKICNkZWZpbmUgTUFTMV9UU0laRV9TSElGVAk3Ci0jZGVmaW5lIE1BUzFfVFNJWkUoeCkJCSgoeCA8PCBNQVMxX1RTSVpFX1NISUZUKSAmIE1BUzFfVFNJWkVfTUFTSykKKyNkZWZpbmUgTUFTMV9UU0laRSh4KQkJKCgoeCkgPDwgTUFTMV9UU0laRV9TSElGVCkgJiBNQVMxX1RTSVpFX01BU0spCiAKICNkZWZpbmUgTUFTMl9FUE4JCTB4RkZGRkYwMDAKICNkZWZpbmUgTUFTMl9YMAkJCTB4MDAwMDAwNDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDUzYjY0YmUuLmRhNGIyMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAKICNpZmRlZiBDT05GSUdfRkxBVE1FTQogI2RlZmluZSBBUkNIX1BGTl9PRkZTRVQJCShNRU1PUllfU1RBUlQgPj4gUEFHRV9TSElGVCkKLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA+PSBBUkNIX1BGTl9PRkZTRVQgJiYgKHBmbikgPCAoQVJDSF9QRk5fT0ZGU0VUICsgbWF4X21hcG5yKSkKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA+PSBBUkNIX1BGTl9PRkZTRVQgJiYgKHBmbikgPCBtYXhfbWFwbnIpCiAjZW5kaWYKIAogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpCXBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TCmluZGV4IDU1Y2JhNGEuLmY4Y2Q5ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCiBfR0xPQkFMKF9fc2V0dXBfY3B1XzYwMykKLQltZmxyCXI0CisJbWZscglyNQogQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCiAJbGkJcjEwLDAKIAltdHNwcglTUFJOX1NQUkdfNjAzX0xSVSxyMTAJCS8qIGluaXQgU1cgTFJVIHRyYWNraW5nICovCkBAIC0yNyw2MCArMjcsNjAgQEAKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfRlBVX1VOQVZBSUxBQkxFKQogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV82MDQpCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNjA0X2hpZDAKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NTApCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzUwY3gpCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCiAJYmwJc2V0dXBfNzUwY3gKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NTBmeCkKLQltZmxyCXI0CisJbWZscglyNQogCWJsCV9faW5pdF9mcHVfcmVnaXN0ZXJzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKIAlibAlzZXR1cF83NTBmeAotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc0MDApCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwXzc0MDBfd29ya2Fyb3VuZHMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc0MTApCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwXzc0MTBfd29ya2Fyb3VuZHMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAogCWxpCXIzLDAKIAltdHNwcglTUFJOX0wyQ1IyLHIzCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzQ1eCkKLQltZmxyCXI0CisJbWZscglyNQogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NDV4X3NwZWNpZmljcwotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiAKIC8qIEVuYWJsZSBjYWNoZXMgZm9yIDYwMydzLCA2MDQsIDc1MCAmIDc0MDAgKi8KQEAgLTE5NCwxMCArMTk0LDEwIEBACiAJY3Jvcgk0KmNyMCtlcSw0KmNyMCtlcSw0KmNyMStlcQogCWNyb3IJNCpjcjArZXEsNCpjcjArZXEsNCpjcjIrZXEKIAlibmVscgotCWx3eglyNixDUFVfU1BFQ19GRUFUVVJFUyhyNSkKKwlsd3oJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCiAJbGkJcjcsQ1BVX0ZUUl9DQU5fTkFQCiAJYW5kYwlyNixyNixyNwotCXN0dwlyNixDUFVfU1BFQ19GRUFUVVJFUyhyNSkKKwlzdHcJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCiAJYmxyCiAKIC8qIDc1MGZ4IHNwZWNpZmljCkBAIC0yMjUsMTIgKzIyNSwxMiBAQAogCWFuZGlzLglyMTEscjExLEwzQ1JfTDNFQGgKIAliZXEJMWYKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0wzQ1IpCi0JbHd6CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI1KQorCWx3eglyNixDUFVfU1BFQ19GRUFUVVJFUyhyNCkKIAlhbmRpLglyMCxyNixDUFVfRlRSX0wzX0RJU0FCTEVfTkFQCiAJYmVxCTFmCiAJbGkJcjcsQ1BVX0ZUUl9DQU5fTkFQCiAJYW5kYwlyNixyNixyNwotCXN0dwlyNixDUFVfU1BFQ19GRUFUVVJFUyhyNSkKKwlzdHcJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCiAxOgogCW1mc3ByCXIxMSxTUFJOX0hJRDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDhkNzRhMjQuLmU4ZTkxNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTIwNzYsOCArMjA3Niw4IEBACiAJICogcG9pbnRlciBvbiBwcGM2NCBhbmQgYm9va2UgYXMgd2UgYXJlIHJ1bm5pbmcgYXQgMCBpbiByZWFsIG1vZGUKIAkgKiBvbiBwcGM2NCBhbmQgcmVsb2Nfb2Zmc2V0IGlzIGFsd2F5cyAwIG9uIGJvb2tlLgogCSAqLwotCWlmIChzLT5jcHVfc2V0dXApIHsKLQkJcy0+Y3B1X3NldHVwKG9mZnNldCwgcyk7CisJaWYgKHQtPmNwdV9zZXR1cCkgeworCQl0LT5jcHVfc2V0dXAob2Zmc2V0LCB0KTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0IHx8IENPTkZJR19CT09LRSAqLwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCA0OWExNzBhLi5hNWY4NjcyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtODcsNyArODcsMTAgQEAKIAogCXNhdmVfZnRyYWNlX2VuYWJsZWQgPSBfX2Z0cmFjZV9lbmFibGVkX3NhdmUoKTsKIAotCWRlZmF1bHRfbWFjaGluZV9rZXhlYyhpbWFnZSk7CisJaWYgKHBwY19tZC5tYWNoaW5lX2tleGVjKQorCQlwcGNfbWQubWFjaGluZV9rZXhlYyhpbWFnZSk7CisJZWxzZQorCQlkZWZhdWx0X21hY2hpbmVfa2V4ZWMoaW1hZ2UpOwogCiAJX19mdHJhY2VfZW5hYmxlZF9yZXN0b3JlKHNhdmVfZnRyYWNlX2VuYWJsZWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDdhMWQ1Y2IuLjgzMDNhNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zNTMsNiArMzUzLDcgQEAKIAkJCXByaW1lX2RlYnVnX3JlZ3MobmV3X3RocmVhZCk7CiB9CiAjZWxzZQkvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworI2lmbmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCiBzdGF0aWMgdm9pZCBzZXRfZGVidWdfcmVnX2RlZmF1bHRzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCiB7CiAJaWYgKHRocmVhZC0+ZGFicikgewpAQCAtMzYwLDYgKzM2MSw3IEBACiAJCXNldF9kYWJyKDApOwogCX0KIH0KKyNlbmRpZiAvKiAhQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLwogI2VuZGlmCS8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAogaW50IHNldF9kYWJyKHVuc2lnbmVkIGxvbmcgZGFicikKQEAgLTY3MCwxMSArNjcyLDExIEBACiB7CiAJZGlzY2FyZF9sYXp5X2NwdV9zdGF0ZSgpOwogCi0jaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVFMKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCiAJZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQoY3VycmVudCk7Ci0jZWxzZSAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UUyAqLworI2Vsc2UgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLwogCXNldF9kZWJ1Z19yZWdfZGVmYXVsdHMoJmN1cnJlbnQtPnRocmVhZCk7Ci0jZW5kaWYgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVFMgKi8KKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IGJmNWNiOTEuLmZkNDgxMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJZGJnKCJyZW1vdmluZyBjcHUgJWx1IGZyb20gbm9kZSAlZFxuIiwgY3B1LCBub2RlKTsKIAogCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSkpIHsKLQkJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBjcHUgJWx1IG5vdCBmb3VuZCBpbiBub2RlICVkXG4iLAogCQkgICAgICAgY3B1LCBub2RlKTsKQEAgLTEyODksMTAgKzEyODksOSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwogCi0vKiBWcnR1YWwgUHJvY2Vzc29yIEhvbWUgTm9kZSAoVlBITikgc3VwcG9ydCAqLworLyogVmlydHVhbCBQcm9jZXNzb3IgSG9tZSBOb2RlIChWUEhOKSBzdXBwb3J0ICovCiAjaWZkZWYgQ09ORklHX1BQQ19TUExQQVIKLSNkZWZpbmUgVlBITl9OUl9DSEFOR0VfQ1RSUyAoOCkKLXN0YXRpYyB1OCB2cGhuX2NwdV9jaGFuZ2VfY291bnRzW05SX0NQVVNdW1ZQSE5fTlJfQ0hBTkdFX0NUUlNdOworc3RhdGljIHU4IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbTlJfQ1BVU11bTUFYX0RJU1RBTkNFX1JFRl9QT0lOVFNdOwogc3RhdGljIGNwdW1hc2tfdCBjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2s7CiBzdGF0aWMgaW50IHZwaG5fZW5hYmxlZDsKIHN0YXRpYyB2b2lkIHNldF90b3BvbG9neV90aW1lcih2b2lkKTsKQEAgLTEzMDMsMTYgKzEzMDIsMTggQEAKICAqLwogc3RhdGljIHZvaWQgc2V0dXBfY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlX2NvdW50ZXJzKHZvaWQpCiB7Ci0JaW50IGNwdSA9IDA7CisJaW50IGNwdTsKKworCS8qIFRoZSBWUEhOIGZlYXR1cmUgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDggcmVmZXJlbmNlIHBvaW50cyAqLworCUJVSUxEX0JVR19PTihNQVhfRElTVEFOQ0VfUkVGX1BPSU5UUyA+IDgpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpbnQgaSA9IDA7CisJCWludCBpOwogCQl1OCAqY291bnRzID0gdnBobl9jcHVfY2hhbmdlX2NvdW50c1tjcHVdOwogCQl2b2xhdGlsZSB1OCAqaHlwZXJ2aXNvcl9jb3VudHMgPSBscHBhY2FbY3B1XS52cGhuX2Fzc29jX2NvdW50czsKIAotCQlmb3IgKGkgPSAwOyBpIDwgVlBITl9OUl9DSEFOR0VfQ1RSUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoOyBpKyspCiAJCQljb3VudHNbaV0gPSBoeXBlcnZpc29yX2NvdW50c1tpXTsKLQkJfQogCX0KIH0KIApAQCAtMTMyOSw3ICsxMzMwLDcgQEAKICAqLwogc3RhdGljIGludCB1cGRhdGVfY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlc19tYXNrKHZvaWQpCiB7Ci0JaW50IGNwdSA9IDAsIG5yX2NwdXMgPSAwOworCWludCBjcHUsIG5yX2NwdXMgPSAwOwogCWNwdW1hc2tfdCAqY2hhbmdlcyA9ICZjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2s7CiAKIAljcHVtYXNrX2NsZWFyKGNoYW5nZXMpOwpAQCAtMTMzOSw4ICsxMzQwLDggQEAKIAkJdTggKmNvdW50cyA9IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbY3B1XTsKIAkJdm9sYXRpbGUgdTggKmh5cGVydmlzb3JfY291bnRzID0gbHBwYWNhW2NwdV0udnBobl9hc3NvY19jb3VudHM7CiAKLQkJZm9yIChpID0gMDsgaSA8IFZQSE5fTlJfQ0hBTkdFX0NUUlM7IGkrKykgewotCQkJaWYgKGh5cGVydmlzb3JfY291bnRzW2ldID4gY291bnRzW2ldKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoOyBpKyspIHsKKwkJCWlmIChoeXBlcnZpc29yX2NvdW50c1tpXSAhPSBjb3VudHNbaV0pIHsKIAkJCQljb3VudHNbaV0gPSBoeXBlcnZpc29yX2NvdW50c1tpXTsKIAkJCQljaGFuZ2VkID0gMTsKIAkJCX0KQEAgLTEzNTQsOCArMTM1NSwxMSBAQAogCXJldHVybiBucl9jcHVzOwogfQogCi0vKiA2IDY0LWJpdCByZWdpc3RlcnMgdW5wYWNrZWQgaW50byAxMiAzMi1iaXQgYXNzb2NpYXRpdml0eSB2YWx1ZXMgKi8KLSNkZWZpbmUgVlBITl9BU1NPQ19CVUZTSVpFICg2KnNpemVvZih1NjQpL3NpemVvZih1MzIpKQorLyoKKyAqIDYgNjQtYml0IHJlZ2lzdGVycyB1bnBhY2tlZCBpbnRvIDEyIDMyLWJpdCBhc3NvY2lhdGl2aXR5IHZhbHVlcy4gVG8gZm9ybQorICogdGhlIGNvbXBsZXRlIHByb3BlcnR5IHdlIGhhdmUgdG8gYWRkIHRoZSBsZW5ndGggaW4gdGhlIGZpcnN0IGNlbGwuCisgKi8KKyNkZWZpbmUgVlBITl9BU1NPQ19CVUZTSVpFICg2KnNpemVvZih1NjQpL3NpemVvZih1MzIpICsgMSkKIAogLyoKICAqIENvbnZlcnQgdGhlIGFzc29jaWF0aXZpdHkgZG9tYWluIG51bWJlcnMgcmV0dXJuZWQgZnJvbSB0aGUgaHlwZXJ2aXNvcgpAQCAtMTM2MywxNSArMTM2NywxNCBAQAogICovCiBzdGF0aWMgaW50IHZwaG5fdW5wYWNrX2Fzc29jaWF0aXZpdHkoY29uc3QgbG9uZyAqcGFja2VkLCB1bnNpZ25lZCBpbnQgKnVucGFja2VkKQogewotCWludCBpID0gMDsKLQlpbnQgbnJfYXNzb2NfZG9tcyA9IDA7CisJaW50IGksIG5yX2Fzc29jX2RvbXMgPSAwOwogCWNvbnN0IHUxNiAqZmllbGQgPSAoY29uc3QgdTE2KikgcGFja2VkOwogCiAjZGVmaW5lIFZQSE5fRklFTERfVU5VU0VECSgweGZmZmYpCiAjZGVmaW5lIFZQSE5fRklFTERfTVNCCQkoMHg4MDAwKQogI2RlZmluZSBWUEhOX0ZJRUxEX01BU0sJCSh+VlBITl9GSUVMRF9NU0IpCiAKLQlmb3IgKGkgPSAwOyBpIDwgVlBITl9BU1NPQ19CVUZTSVpFOyBpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDwgVlBITl9BU1NPQ19CVUZTSVpFOyBpKyspIHsKIAkJaWYgKCpmaWVsZCA9PSBWUEhOX0ZJRUxEX1VOVVNFRCkgewogCQkJLyogQWxsIHNpZ25pZmljYW50IGZpZWxkcyBwcm9jZXNzZWQsIGFuZCByZW1haW5pbmcKIAkJCSAqIGZpZWxkcyBjb250YWluIHRoZSByZXNlcnZlZCB2YWx1ZSBvZiBhbGwgMSdzLgpAQCAtMTM3OSwxNCArMTM4MiwxMiBAQAogCQkJICovCiAJCQl1bnBhY2tlZFtpXSA9ICooKHUzMiopZmllbGQpOwogCQkJZmllbGQgKz0gMjsKLQkJfQotCQllbHNlIGlmICgqZmllbGQgJiBWUEhOX0ZJRUxEX01TQikgeworCQl9IGVsc2UgaWYgKCpmaWVsZCAmIFZQSE5fRklFTERfTVNCKSB7CiAJCQkvKiBEYXRhIGlzIGluIHRoZSBsb3dlciAxNSBiaXRzIG9mIHRoaXMgZmllbGQgKi8KIAkJCXVucGFja2VkW2ldID0gKmZpZWxkICYgVlBITl9GSUVMRF9NQVNLOwogCQkJZmllbGQrKzsKIAkJCW5yX2Fzc29jX2RvbXMrKzsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCS8qIERhdGEgaXMgaW4gdGhlIGxvd2VyIDE1IGJpdHMgb2YgdGhpcyBmaWVsZAogCQkJICogY29uY2F0ZW5hdGVkIHdpdGggdGhlIG5leHQgMTYgYml0IGZpZWxkCiAJCQkgKi8KQEAgLTEzOTYsNiArMTM5Nyw5IEBACiAJCX0KIAl9CiAKKwkvKiBUaGUgZmlyc3QgY2VsbCBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSAqLworCXVucGFja2VkWzBdID0gbnJfYXNzb2NfZG9tczsKKwogCXJldHVybiBucl9hc3NvY19kb21zOwogfQogCkBAIC0xNDA1LDcgKzE0MDksNyBAQAogICovCiBzdGF0aWMgbG9uZyBoY2FsbF92cGhuKHVuc2lnbmVkIGxvbmcgY3B1LCB1bnNpZ25lZCBpbnQgKmFzc29jaWF0aXZpdHkpCiB7Ci0JbG9uZyByYyA9IDA7CisJbG9uZyByYzsKIAlsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTDlfQlVGU0laRV0gPSB7MH07CiAJdTY0IGZsYWdzID0gMTsKIAlpbnQgaHdjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CkBAIC0xNDE5LDcgKzE0MjMsNyBAQAogc3RhdGljIGxvbmcgdnBobl9nZXRfYXNzb2NpYXRpdml0eSh1bnNpZ25lZCBsb25nIGNwdSwKIAkJCQkJdW5zaWduZWQgaW50ICphc3NvY2lhdGl2aXR5KQogewotCWxvbmcgcmMgPSAwOworCWxvbmcgcmM7CiAKIAlyYyA9IGhjYWxsX3ZwaG4oY3B1LCBhc3NvY2lhdGl2aXR5KTsKIApAQCAtMTQ0NSw5ICsxNDQ5LDkgQEAKICAqLwogaW50IGFyY2hfdXBkYXRlX2NwdV90b3BvbG9neSh2b2lkKQogewotCWludCBjcHUgPSAwLCBuaWQgPSAwLCBvbGRfbmlkID0gMDsKKwlpbnQgY3B1LCBuaWQsIG9sZF9uaWQ7CiAJdW5zaWduZWQgaW50IGFzc29jaWF0aXZpdHlbVlBITl9BU1NPQ19CVUZTSVpFXSA9IHswfTsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gTlVMTDsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCiAJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2spIHsKIAkJdnBobl9nZXRfYXNzb2NpYXRpdml0eShjcHUsIGFzc29jaWF0aXZpdHkpOwpAQCAtMTUxMiw3ICsxNTE2LDggQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfVlBITikpIHsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9WUEhOKSAmJgorCSAgICBnZXRfbHBwYWNhKCktPnNoYXJlZF9wcm9jKSB7CiAJCXZwaG5fZW5hYmxlZCA9IDE7CiAJCXNldHVwX2NwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZV9jb3VudGVycygpOwogCQlpbml0X3RpbWVyX2RlZmVycmFibGUoJnRvcG9sb2d5X3RpbWVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCmluZGV4IDFlYzA2NTcuLmMxNGQwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYwpAQCAtMzgsMTMgKzM4LDExIEBACiAgKiBuZWVzZCB0byBiZSBmbHVzaGVkLiBUaGlzIGZ1bmN0aW9uIHdpbGwgZWl0aGVyIHBlcmZvcm0gdGhlIGZsdXNoCiAgKiBpbW1lZGlhdGVseSBvciB3aWxsIGJhdGNoIGl0IHVwIGlmIHRoZSBjdXJyZW50IENQVSBoYXMgYW4gYWN0aXZlCiAgKiBiYXRjaCBvbiBpdC4KLSAqCi0gKiBNdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBzb21lIGtpbmQgb2Ygc3BpbmxvY2svbm9uLXByZWVtcHQgcmVnaW9uLi4uCiAgKi8KIHZvaWQgaHB0ZV9uZWVkX2ZsdXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCSAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgcHRlLCBpbnQgaHVnZSkKIHsKLQlzdHJ1Y3QgcHBjNjRfdGxiX2JhdGNoICpiYXRjaCA9ICZfX2dldF9jcHVfdmFyKHBwYzY0X3RsYl9iYXRjaCk7CisJc3RydWN0IHBwYzY0X3RsYl9iYXRjaCAqYmF0Y2ggPSAmZ2V0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKIAl1bnNpZ25lZCBsb25nIHZzaWQsIHZhZGRyOwogCXVuc2lnbmVkIGludCBwc2l6ZTsKIAlpbnQgc3NpemU7CkBAIC05OSw2ICs5Nyw3IEBACiAJICovCiAJaWYgKCFiYXRjaC0+YWN0aXZlKSB7CiAJCWZsdXNoX2hhc2hfcGFnZSh2YWRkciwgcnB0ZSwgcHNpemUsIHNzaXplLCAwKTsKKwkJcHV0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI3LDYgKzEyNiw3IEBACiAJYmF0Y2gtPmluZGV4ID0gKytpOwogCWlmIChpID49IFBQQzY0X1RMQl9CQVRDSF9OUikKIAkJX19mbHVzaF90bGJfcGVuZGluZyhiYXRjaCk7CisJcHV0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCmluZGV4IDVkM2VhOWYuLmNhNWQ1ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwpAQCAtNzEzLDYgKzcxMywxMyBAQAogLyogTkI6IHJlZy91bnJlZyBhcmUgY2FsbGVkIHdoaWxlIGd1YXJkZWQgd2l0aCB0aGUgdHJhY2Vwb2ludHNfbXV0ZXggKi8KIGV4dGVybiBsb25nIGhjYWxsX3RyYWNlcG9pbnRfcmVmY291bnQ7CiAKKy8qIAorICogU2luY2UgdGhlIHRyYWNpbmcgY29kZSBtaWdodCBleGVjdXRlIGhjYWxscyB3ZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QKKyAqIHJlY3Vyc2lvbi4gT25lIGV4YW1wbGUgb2YgdGhpcyBhcmUgc3BpbmxvY2tzIGNhbGxpbmcgSF9ZSUVMRCBvbgorICogc2hhcmVkIHByb2Nlc3NvciBwYXJ0aXRpb25zLgorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBoY2FsbF90cmFjZV9kZXB0aCk7CisKIHZvaWQgaGNhbGxfdHJhY2Vwb2ludF9yZWdmdW5jKHZvaWQpCiB7CiAJaGNhbGxfdHJhY2Vwb2ludF9yZWZjb3VudCsrOwpAQCAtNzI1LDEyICs3MzIsNDIgQEAKIAogdm9pZCBfX3RyYWNlX2hjYWxsX2VudHJ5KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nICphcmdzKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50ICpkZXB0aDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRlcHRoID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfdHJhY2VfZGVwdGgpOworCisJaWYgKCpkZXB0aCkKKwkJZ290byBvdXQ7CisKKwkoKmRlcHRoKSsrOwogCXRyYWNlX2hjYWxsX2VudHJ5KG9wY29kZSwgYXJncyk7CisJKCpkZXB0aCktLTsKKworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogdm9pZCBfX3RyYWNlX2hjYWxsX2V4aXQobG9uZyBvcGNvZGUsIHVuc2lnbmVkIGxvbmcgcmV0dmFsLAogCQkJdW5zaWduZWQgbG9uZyAqcmV0YnVmKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50ICpkZXB0aDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRlcHRoID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfdHJhY2VfZGVwdGgpOworCisJaWYgKCpkZXB0aCkKKwkJZ290byBvdXQ7CisKKwkoKmRlcHRoKSsrOwogCXRyYWNlX2hjYWxsX2V4aXQob3Bjb2RlLCByZXR2YWwsIHJldGJ1Zik7CisJKCpkZXB0aCktLTsKKworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCBmZjE5ZWZkLi42MzZiY2I4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgQ0hTQ19TQ0gKLQlkZWZfdHJpc3RhdGUgeQorCWRlZl90cmlzdGF0ZSBtCiAJcHJvbXB0ICJTdXBwb3J0IGZvciBDSFNDIHN1YmNoYW5uZWxzIgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2FnZSBvZiBDSFNDIHN1YmNoYW5uZWxzLiBBIENIU0Mgc3ViY2hhbm5lbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAwODUxZWIxLi4yNzUxYjNhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMTMzLDExICsxMzMsMTIgQEAKIAl1bnNpZ25lZCBsb25nIG91dHB1dF9hZGRyOwogCXVuc2lnbmVkIGNoYXIgKm91dHB1dDsKIAotCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQpOworCW91dHB1dF9hZGRyID0gKCh1bnNpZ25lZCBsb25nKSAmX2VuZCArIEhFQVBfU0laRSArIDQwOTVVTCkgJiAtNDA5NlVMOworCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgb3V0cHV0X2FkZHIgKyBTWl9fYnNzX3N0YXJ0KTsKIAltZW1zZXQoJl9ic3MsIDAsICZfZWJzcyAtICZfYnNzKTsKIAlmcmVlX21lbV9wdHIgPSAodW5zaWduZWQgbG9uZykmX2VuZDsKIAlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgSEVBUF9TSVpFOwotCW91dHB1dCA9ICh1bnNpZ25lZCBjaGFyICopICgoZnJlZV9tZW1fZW5kX3B0ciArIDQwOTVVTCkgJiAtNDA5NlVMKTsKKwlvdXRwdXQgPSAodW5zaWduZWQgY2hhciAqKSBvdXRwdXRfYWRkcjsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCmluZGV4IGY0MmRiYWIuLjQ4ODg0ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCkBAIC0zOCw2ICszOCw3IEBACiAJCUJVR19PTihyZXQgIT0gYnNpemUpOwogCQlkYXRhICs9IGJzaXplIC0gaW5kZXg7CiAJCWxlbiAtPSBic2l6ZSAtIGluZGV4OworCQlpbmRleCA9IDA7CiAJfQogCiAJLyogcHJvY2VzcyBhcyBtYW55IGJsb2NrcyBhcyBwb3NzaWJsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDc2ZGFlYTEuLjVjNWJhMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTM2LDE0ICszNiwxOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfcmVhZChjb25zdCBhdG9taWNfdCAqdikKIHsKLQliYXJyaWVyKCk7Ci0JcmV0dXJuIHYtPmNvdW50ZXI7CisJaW50IGM7CisKKwlhc20gdm9sYXRpbGUoCisJCSIJbAklMCwlMVxuIgorCQk6ICI9ZCIgKGMpIDogIlEiICh2LT5jb3VudGVyKSk7CisJcmV0dXJuIGM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkKIHsKLQl2LT5jb3VudGVyID0gaTsKLQliYXJyaWVyKCk7CisJYXNtIHZvbGF0aWxlKAorCQkiCXN0CSUxLCUwXG4iCisJCTogIj1RIiAodi0+Y291bnRlcikgOiAiZCIgKGkpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQpAQCAtMTI4LDE0ICsxMzMsMTkgQEAKIAogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQogewotCWJhcnJpZXIoKTsKLQlyZXR1cm4gdi0+Y291bnRlcjsKKwlsb25nIGxvbmcgYzsKKworCWFzbSB2b2xhdGlsZSgKKwkJIglsZwklMCwlMVxuIgorCQk6ICI9ZCIgKGMpIDogIlEiICh2LT5jb3VudGVyKSk7CisJcmV0dXJuIGM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqdiwgbG9uZyBsb25nIGkpCiB7Ci0Jdi0+Y291bnRlciA9IGk7Ci0JYmFycmllcigpOworCWFzbSB2b2xhdGlsZSgKKwkJIglzdGcJJTEsJTBcbiIKKwkJOiAiPVEiICh2LT5jb3VudGVyKSA6ICJkIiAoaSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgbG9uZyBpLCBhdG9taWM2NF90ICp2KQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCAyNGFhZmE2Li4yYTMwZDVhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMTMsNiArMTMsNyBAQAogCiAjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTICAgICAyNTYKICNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQgICAgIDgKKyNkZWZpbmUgTkVUX1NLQl9QQUQJICAgMzIKIAogI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS4ucmVhZF9tb3N0bHkiKSkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDQwNWNjOTcuLjdlMWY3NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMSwyOSArMSw4IEBACiAjaWZuZGVmIF9TMzkwX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfUzM5MF9DQUNIRUZMVVNIX0gKIAotLyogS2VlcCBpbmNsdWRlcyB0aGUgc2FtZSBhY3Jvc3MgYXJjaGVzLiAgKi8KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCiAvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIHMzOTAuICovCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFIDAKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pCi0jZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotCW1lbWNweShkc3QsIHNyYywgbGVuKQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NhY2hlZmx1c2guaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIHZvaWQga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBiZjNkZTA0Li4yYzc5YjY0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xNDgsMTEgKzE0OCw2IEBACiAgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOwogCi0vKgotICogUHJpbnQgcmVnaXN0ZXIgb2YgdGFzayBpbnRvIGJ1ZmZlci4gVXNlZCBpbiBmcy9wcm9jL2FycmF5LmMuCi0gKi8KLWV4dGVybiB2b2lkIHRhc2tfc2hvd19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKLQogZXh0ZXJuIHZvaWQgc2hvd19jb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaAppbmRleCBmMWY2NDRmLi45MDc0YTU0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCA1ZWI3OGRkLi5iNWE0YTczIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC0yMzcsNDMgKzIzNyw2IEBACiAJc2hvd19sYXN0X2JyZWFraW5nX2V2ZW50KHJlZ3MpOwogfQogCi0vKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGZzL3Byb2MvYXJyYXkuYyAqLwotdm9pZCB0YXNrX3Nob3dfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLQotCXJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7Ci0Jc2VxX3ByaW50ZihtLCAidGFzazogJXAsIGtzcDogJXBcbiIsCi0JCSAgICAgICB0YXNrLCAodm9pZCAqKXRhc2stPnRocmVhZC5rc3ApOwotCXNlcV9wcmludGYobSwgIlVzZXIgUFNXIDogJXAgJXBcbiIsCi0JCSAgICAgICAodm9pZCAqKSByZWdzLT5wc3cubWFzaywgKHZvaWQgKilyZWdzLT5wc3cuYWRkcik7Ci0KLQlzZXFfcHJpbnRmKG0sICJVc2VyIEdQUlM6ICIgRk9VUkxPTkcsCi0JCQkgIHJlZ3MtPmdwcnNbMF0sIHJlZ3MtPmdwcnNbMV0sCi0JCQkgIHJlZ3MtPmdwcnNbMl0sIHJlZ3MtPmdwcnNbM10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgIiBGT1VSTE9ORywKLQkJCSAgcmVncy0+Z3Byc1s0XSwgcmVncy0+Z3Byc1s1XSwKLQkJCSAgcmVncy0+Z3Byc1s2XSwgcmVncy0+Z3Byc1s3XSk7Ci0Jc2VxX3ByaW50ZihtLCAiICAgICAgICAgICAiIEZPVVJMT05HLAotCQkJICByZWdzLT5ncHJzWzhdLCByZWdzLT5ncHJzWzldLAotCQkJICByZWdzLT5ncHJzWzEwXSwgcmVncy0+Z3Byc1sxMV0pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgIiBGT1VSTE9ORywKLQkJCSAgcmVncy0+Z3Byc1sxMl0sIHJlZ3MtPmdwcnNbMTNdLAotCQkJICByZWdzLT5ncHJzWzE0XSwgcmVncy0+Z3Byc1sxNV0pOwotCXNlcV9wcmludGYobSwgIlVzZXIgQUNSUzogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbMF0sIHRhc2stPnRocmVhZC5hY3JzWzFdLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1syXSwgdGFzay0+dGhyZWFkLmFjcnNbM10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbNF0sIHRhc2stPnRocmVhZC5hY3JzWzVdLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1s2XSwgdGFzay0+dGhyZWFkLmFjcnNbN10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbOF0sIHRhc2stPnRocmVhZC5hY3JzWzldLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1sxMF0sIHRhc2stPnRocmVhZC5hY3JzWzExXSk7Ci0Jc2VxX3ByaW50ZihtLCAiICAgICAgICAgICAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1sxMl0sIHRhc2stPnRocmVhZC5hY3JzWzEzXSwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbMTRdLCB0YXNrLT50aHJlYWQuYWNyc1sxNV0pOwotfQotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRpZV9sb2NrKTsKIAogdm9pZCBkaWUoY29uc3QgY2hhciAqIHN0ciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwppbmRleCAwN2RlYWVlLi5hNmM0ZjdlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCkBAIC0xMjUsOSArMTI1LDkgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDE7CiAKIAlhc20gdm9sYXRpbGUoCisJCSIgICBzYWNmICAyNTZcbiIKIAkJIiAgIkFISSIgICUwLC0xXG4iCiAJCSIgICBqbyAgICA1ZlxuIgotCQkiICAgc2FjZiAgMjU2XG4iCiAJCSIgICBicmFzICAlMywzZlxuIgogCQkiMDoiQUhJIiAgJTAsMjU3XG4iCiAJCSIxOiBtdmMgICAwKDEsJTEpLDAoJTIpXG4iCkBAIC0xNDIsOSArMTQyLDggQEAKIAkJIjM6IkFISSIgICUwLC0yNTZcbiIKIAkJIiAgIGpubSAgIDJiXG4iCiAJCSI0OiBleCAgICAlMCwxYi0wYiglMylcbiIKLQkJIiAgIHNhY2YgIDBcbiIKIAkJIjU6ICJTTFIiICAlMCwlMFxuIgotCQkiNjpcbiIKKwkJIjY6IHNhY2YgIDBcbiIKIAkJRVhfVEFCTEUoMWIsNmIpIEVYX1RBQkxFKDJiLDBiKSBFWF9UQUJMRSg0YiwwYikKIAkJOiAiK2EiIChzaXplKSwgIithIiAodG8pLCAiK2EiIChmcm9tKSwgIj1hIiAodG1wMSkKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTE1Niw5ICsxNTUsOSBAQAogCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKIAogCWFzbSB2b2xhdGlsZSgKKwkJIiAgIHNhY2YgIDI1NlxuIgogCQkiICAiQUhJIiAgJTAsLTFcbiIKIAkJIiAgIGpvICAgIDVmXG4iCi0JCSIgICBzYWNmICAyNTZcbiIKIAkJIiAgIGJyYXMgICUzLDNmXG4iCiAJCSIgICB4YyAgICAwKDEsJTEpLDAoJTEpXG4iCiAJCSIwOiJBSEkiICAlMCwyNTdcbiIKQEAgLTE3OCw5ICsxNzcsOCBAQAogCQkiMzoiQUhJIiAgJTAsLTI1NlxuIgogCQkiICAgam5tICAgMmJcbiIKIAkJIjQ6IGV4ICAgICUwLDAoJTMpXG4iCi0JCSIgICBzYWNmICAwXG4iCiAJCSI1OiAiU0xSIiAgJTAsJTBcbiIKLQkJIjY6XG4iCisJCSI2OiBzYWNmICAwXG4iCiAJCUVYX1RBQkxFKDFiLDZiKSBFWF9UQUJMRSgyYiwwYikgRVhfVEFCTEUoNGIsMGIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHRvKSwgIj1hIiAodG1wMSksICI9YSIgKHRtcDIpCiAJCTogOiAiY2MiLCAibWVtb3J5Iik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCAwYzcxOWM2Li5lMTg1MGMyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKQEAgLTMzNiw3ICszMzYsOCBAQAogCXBhZ2UtPmZsYWdzIF49IGJpdHM7CiAJaWYgKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSB7CiAJCS8qIFBhZ2Ugbm93IGhhcyBzb21lIGZyZWUgcGd0YWJsZSBmcmFnbWVudHMuICovCi0JCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZwYWdlLT5scnUpKQorCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwogCQlwYWdlID0gTlVMTDsKIAl9IGVsc2UKIAkJLyogQWxsIGZyYWdtZW50cyBvZiB0aGUgNEsgcGFnZSBoYXZlIGJlZW4gZnJlZWQuICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKaW5kZXggYTc4NzAxZC4uNGE1MzUwMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMyw3ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CiAKLWV4dGVybiB2b2lkIF9fbm9zYXZlX2JlZ2luLCBfX25vc2F2ZV9lbmQ7CitleHRlcm4gbG9uZyBfX25vc2F2ZV9iZWdpbiwgX19ub3NhdmVfZW5kOwogZXh0ZXJuIGxvbmcgX19tYWNodmVjX3N0YXJ0LCBfX21hY2h2ZWNfZW5kOwogZXh0ZXJuIGNoYXIgX191bmNhY2hlZF9zdGFydCwgX191bmNhY2hlZF9lbmQ7CiBleHRlcm4gY2hhciBfZWJzc1tdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKaW5kZXggNjcyOTQ0Zi4uZTUzYjRiMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHR5cGVzLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL21hY2h0eXBlcy5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC0yNTUsMTIgKzI1NSwxNyBAQAogCiB2b2lkIF9faW5pdCBwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCh2b2lkKQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldlsxXTsKKwogCWlmIChtYWNoX2lzX3J0czc3NTFyMmQoKSkgewogCQlzY2lmX3BsYXRmb3JtX2RhdGEuc2NzY3IgfD0gU0NTQ1JfQ0tFMTsKLQkJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoJnNjaWZfZGV2aWNlLCAxKTsKKwkJZGV2WzBdID0gJnNjaWZfZGV2aWNlOworCQllYXJseV9wbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXYsIDEpOwogCX0gZWxzZSB7Ci0JCWVhcmx5X3BsYXRmb3JtX2FkZF9kZXZpY2VzKCZzY2lfZGV2aWNlLCAxKTsKLQkJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoJnNjaWZfZGV2aWNlLCAxKTsKKwkJZGV2WzBdID0gJnNjaV9kZXZpY2U7CisJCWVhcmx5X3BsYXRmb3JtX2FkZF9kZXZpY2VzKGRldiwgMSk7CisJCWRldlswXSA9ICZzY2lmX2RldmljZTsKKwkJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2LCAxKTsKIAl9CiAKIAllYXJseV9wbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3NTBfZWFybHlfZGV2aWNlcywKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbGliL2RlbGF5LmMgYi9hcmNoL3NoL2xpYi9kZWxheS5jCmluZGV4IGZhYThmODYuLjA5MDFiMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9zaC9saWIvZGVsYXkuYwpAQCAtMTAsNiArMTAsMTYgQEAKIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkvKgorCQkgKiBTVDQwLTMwMCBhcHBlYXJzIHRvIGhhdmUgYW4gaXNzdWUgd2l0aCB0aGlzIGNvZGUsCisJCSAqIG5vcm1hbGx5IHRha2luZyB0d28gY3ljbGVzIGVhY2ggbG9vcCwgYXMgd2l0aCBhbGwKKwkJICogb3RoZXIgU0ggdmFyaWFudHMuIElmIGhvd2V2ZXIgdGhlIGJyYW5jaCBhbmQgdGhlCisJCSAqIGRlbGF5IHNsb3Qgc3RyYWRkbGUgYW4gOCBieXRlIGJvdW5kYXJ5LCB0aGlzIGluY3JlYXNlcworCQkgKiB0byAzIGN5Y2xlcy4KKwkJICogVGhpcyBhbGlnbiBkaXJlY3RpdmUgZW5zdXJlcyB0aGlzIGRvZXNuJ3Qgb2NjdXIuCisJCSAqLworCQkiLmJhbGlnbiA4XG5cdCIKKwogCQkidHN0CSUwLCAlMFxuXHQiCiAJCSIxOlx0IgogCQkiYmYvcwkxYlxuXHQiCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLmMgYi9hcmNoL3NoL21tL2NhY2hlLmMKaW5kZXggODhkM2RjMy4uNWE1ODBlYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUuYwpAQCAtMTA4LDcgKzEwOCw4IEBACiAJCWt1bm1hcF9hdG9taWModmZyb20sIEtNX1VTRVIwKTsKIAl9CiAKLQlpZiAocGFnZXNfZG9fYWxpYXMoKHVuc2lnbmVkIGxvbmcpdnRvLCB2YWRkciAmIFBBR0VfTUFTSykpCisJaWYgKHBhZ2VzX2RvX2FsaWFzKCh1bnNpZ25lZCBsb25nKXZ0bywgdmFkZHIgJiBQQUdFX01BU0spIHx8CisJICAgICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpCiAJCV9fZmx1c2hfcHVyZ2VfcmVnaW9uKHZ0bywgUEFHRV9TSVpFKTsKIAogCWt1bm1hcF9hdG9taWModnRvLCBLTV9VU0VSMSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Bjci5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY3IuaAppbmRleCBhMmY1YzYxLi44NDNlNGZhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Bjci5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNyLmgKQEAgLTQzLDQgKzQzLDYgQEAKIAogZXh0ZXJuIHU2NCBwY3JfZW5hYmxlOwogCitleHRlcm4gaW50IHBjcl9hcmNoX2luaXQodm9pZCk7CisKICNlbmRpZiAvKiBfX1BDUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXUuYwppbmRleCA0Nzk3N2E3Li43MjUwOWQwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMKQEAgLTI1NSwxMCArMjU1LDkgQEAKIHN0YXRpYyBpbnQgaW9tbXVfYWxsb2NfY3R4KHN0cnVjdCBpb21tdSAqaW9tbXUpCiB7CiAJaW50IGxvd2VzdCA9IGlvbW11LT5jdHhfbG93ZXN0X2ZyZWU7Ci0JaW50IHN6ID0gSU9NTVVfTlVNX0NUWFMgLSBsb3dlc3Q7Ci0JaW50IG4gPSBmaW5kX25leHRfemVyb19iaXQoaW9tbXUtPmN0eF9iaXRtYXAsIHN6LCBsb3dlc3QpOworCWludCBuID0gZmluZF9uZXh0X3plcm9fYml0KGlvbW11LT5jdHhfYml0bWFwLCBJT01NVV9OVU1fQ1RYUywgbG93ZXN0KTsKIAotCWlmICh1bmxpa2VseShuID09IHN6KSkgeworCWlmICh1bmxpa2VseShuID09IElPTU1VX05VTV9DVFhTKSkgewogCQluID0gZmluZF9uZXh0X3plcm9fYml0KGlvbW11LT5jdHhfYml0bWFwLCBsb3dlc3QsIDEpOwogCQlpZiAodW5saWtlbHkobiA9PSBsb3dlc3QpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT01NVTogUmFuIG91dCBvZiBjb250ZXh0cy5cbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY3IuYwppbmRleCBhZTk2Y2Y1Li43YzJjZWQ2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY3IuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY3IuYwpAQCAtMTY3LDUgKzE2NywzIEBACiAJdW5yZWdpc3Rlcl9wZXJmX2hzdmMoKTsKIAlyZXR1cm4gZXJyOwogfQotCi1lYXJseV9pbml0Y2FsbChwY3JfYXJjaF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKaW5kZXggYjZhMmI4Zi4uNTU1YTc2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlIDxhc20vbWRlc2MuaD4KICNpbmNsdWRlIDxhc20vbGRjLmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vcGNyLmg+CiAKICNpbmNsdWRlICJjcHVtYXAuaCIKIApAQCAtMTM1OCw2ICsxMzU5LDcgQEAKIAogdm9pZCBfX2luaXQgc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CisJcGNyX2FyY2hfaW5pdCgpOwogfQogCiB2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3VuYV9hc21fMzIuUyBiL2FyY2gvc3BhcmMva2VybmVsL3VuYV9hc21fMzIuUwppbmRleCA4Y2MwMzQ1Li44ZjA5NmU4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC91bmFfYXNtXzMyLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbV8zMi5TCkBAIC0yNCw5ICsyNCw5IEBACiAJLmdsb2JsCV9fZG9faW50X3N0b3JlCiBfX2RvX2ludF9zdG9yZToKIAlsZAlbJW8yXSwgJWcxCi0JY21wCSUxLCAyCisJY21wCSVvMSwgMgogCWJlCTJmCi0JIGNtcAklMSwgNAorCSBjbXAJJW8xLCA0CiAJYmUJMWYKIAkgc3JsCSVnMSwgMjQsICVnMgogCXNybAklZzEsIDE2LCAlZzcKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL2JpdGV4dC5jIGIvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMKaW5kZXggNzY0YjNlYi4uNDhkMDBlNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMKKysrIGIvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAKICNpbmNsdWRlIDxhc20vYml0ZXh0Lmg+CiAKQEAgLTgwLDggKzgwLDcgQEAKIAkJd2hpbGUgKHRlc3RfYml0KG9mZnNldCArIGksIHQtPm1hcCkgPT0gMCkgewogCQkJaSsrOwogCQkJaWYgKGkgPT0gbGVuKSB7Ci0JCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJCQlfX3NldF9iaXQob2Zmc2V0ICsgaSwgdC0+bWFwKTsKKwkJCQliaXRtYXBfc2V0KHQtPm1hcCwgb2Zmc2V0LCBsZW4pOwogCQkJCWlmIChvZmZzZXQgPT0gdC0+Zmlyc3RfZnJlZSkKIAkJCQkJdC0+Zmlyc3RfZnJlZSA9IGZpbmRfbmV4dF96ZXJvX2JpdAogCQkJCQkJCSh0LT5tYXAsIHQtPnNpemUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKaW5kZXggMjExY2EzZi4uNGVhMTVjYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaApAQCAtODgsNiArODgsNyBAQAogZXh0ZXJuIGludCBhY3BpX3BjaV9kaXNhYmxlZDsKIGV4dGVybiBpbnQgYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlOwogZXh0ZXJuIGludCBhY3BpX3VzZV90aW1lcl9vdmVycmlkZTsKK2V4dGVybiBpbnQgYWNwaV9maXhfcGluMl9wb2xhcml0eTsKIAogZXh0ZXJuIHU4IGFjcGlfc2NpX2ZsYWdzOwogZXh0ZXJuIGludCBhY3BpX3NjaV9vdmVycmlkZV9nc2k7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggNWUzOTY5Yy4uM2M4OTY5NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApAQCAtMjMzLDYgKzIzMyw3IEBACiBleHRlcm4gdm9pZCBpbml0X2JzcF9BUElDKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0dXBfbG9jYWxfQVBJQyh2b2lkKTsKIGV4dGVybiB2b2lkIGVuZF9sb2NhbF9BUElDX3NldHVwKHZvaWQpOworZXh0ZXJuIHZvaWQgYnNwX2VuZF9sb2NhbF9BUElDX3NldHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9hcGljX21hcHBpbmdzKHZvaWQpOwogdm9pZCByZWdpc3Rlcl9sYXBpY19hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiBleHRlcm4gdm9pZCBzZXR1cF9ib290X0FQSUNfY2xvY2sodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IDZlNmU3NTUuLjQ1NjRjOGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0zMiw2ICszMiw2IEBACiAKIERFQ0xBUkVfUEVSX0NQVShpbnQsIGNwdV9zdGF0ZSk7CiAKLWludCBfX2NwdWluaXQgbXdhaXRfdXNhYmxlKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKK2ludCBtd2FpdF91c2FibGUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICopOwogCiAjZW5kaWYgLyogX0FTTV9YODZfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDRhMmQ0ZTAuLjhiNTM5M2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMzYsOCArMzYsNiBAQAogCXVuc2lnbmVkIGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWlmIChsaWtlbHkocHJldiAhPSBuZXh0KSkgewotCQkvKiBzdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLwotCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2socHJldikpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJcGVyY3B1X3dyaXRlKGNwdV90bGJzdGF0ZS5zdGF0ZSwgVExCU1RBVEVfT0spOwogCQlwZXJjcHVfd3JpdGUoY3B1X3RsYnN0YXRlLmFjdGl2ZV9tbSwgbmV4dCk7CkBAIC00Nyw2ICs0NSw5IEBACiAJCS8qIFJlLWxvYWQgcGFnZSB0YWJsZXMgKi8KIAkJbG9hZF9jcjMobmV4dC0+cGdkKTsKIAorCQkvKiBzdG9wIGZsdXNoIGlwaXMgZm9yIHRoZSBwcmV2aW91cyBtbSAqLworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1tX2NwdW1hc2socHJldikpOworCiAJCS8qCiAJCSAqIGxvYWQgdGhlIExEVCwgaWYgdGhlIExEVCBpcyBkaWZmZXJlbnQ6CiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCA0ZDBkZmEwLi40M2ExOGM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtMzYsNiArMzYsMTEgQEAKICNkZWZpbmUgTVNSX0lBMzJfUEVSRkNUUjEJCTB4MDAwMDAwYzIKICNkZWZpbmUgTVNSX0ZTQl9GUkVRCQkJMHgwMDAwMDBjZAogCisjZGVmaW5lIE1TUl9OSE1fU05CX1BLR19DU1RfQ0ZHX0NUTAkweDAwMDAwMGUyCisjZGVmaW5lIE5ITV9DM19BVVRPX0RFTU9URQkJKDFVTCA8PCAyNSkKKyNkZWZpbmUgTkhNX0MxX0FVVE9fREVNT1RFCQkoMVVMIDw8IDI2KQorI2RlZmluZSBBVE1fTE5DX0M2X0FVVE9fREVNT1RFCQkoMVVMIDw8IDI1KQorCiAjZGVmaW5lIE1TUl9NVFJSY2FwCQkJMHgwMDAwMDBmZQogI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1JfQ1RMCQkweDAwMDAwMTE5CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKaW5kZXggMzc4OGY0Ni4uN2UxNzI5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTI3MywzNCArMjczLDM0IEBACiAJdHlwZW9mKHZhcikgcHhvX25ld19fID0gKG52YWwpOwkJCQkJXAogCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJCQlcCiAJY2FzZSAxOgkJCQkJCQkJXAotCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVhbCIJCQlcCi0JCSAgICAiXG5cdGNtcHhjaGdiICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQlhc20oIlxuXHRtb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVhbCIJCQlcCisJCSAgICAiXG4xOlx0Y21weGNoZ2IgJTIsICJfX3BlcmNwdV9hcmcoMSkJCVwKIAkJICAgICJcblx0am56IDFiIgkJCQkJXAotCQkJICAgIDogIj1hIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogIj0mYSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKIAkJCSAgICA6ICJxIiAocHhvX25ld19fKQkJCQlcCiAJCQkgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCQlcCi0JCWFzbSgiXG4xOm1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJWF4IgkJCVwKLQkJICAgICJcblx0Y21weGNoZ3cgJTIsICJfX3BlcmNwdV9hcmcoMSkJCQlcCisJCWFzbSgiXG5cdG1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJWF4IgkJCVwKKwkJICAgICJcbjE6XHRjbXB4Y2hndyAlMiwgIl9fcGVyY3B1X2FyZygxKQkJXAogCQkgICAgIlxuXHRqbnogMWIiCQkJCQlcCi0JCQkgICAgOiAiPWEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiAiPSZhIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAogCQkJICAgIDogInIiIChweG9fbmV3X18pCQkJCVwKIAkJCSAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJCVwKLQkJYXNtKCJcbjE6bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlZWF4IgkJCVwKLQkJICAgICJcblx0Y21weGNoZ2wgJTIsICJfX3BlcmNwdV9hcmcoMSkJCQlcCisJCWFzbSgiXG5cdG1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJWVheCIJCQlcCisJCSAgICAiXG4xOlx0Y21weGNoZ2wgJTIsICJfX3BlcmNwdV9hcmcoMSkJCVwKIAkJICAgICJcblx0am56IDFiIgkJCQkJXAotCQkJICAgIDogIj1hIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogIj0mYSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKIAkJCSAgICA6ICJyIiAocHhvX25ld19fKQkJCQlcCiAJCQkgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKIAljYXNlIDg6CQkJCQkJCQlcCi0JCWFzbSgiXG4xOm1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJXJheCIJCQlcCi0JCSAgICAiXG5cdGNtcHhjaGdxICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQlhc20oIlxuXHRtb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVyYXgiCQkJXAorCQkgICAgIlxuMTpcdGNtcHhjaGdxICUyLCAiX19wZXJjcHVfYXJnKDEpCQlcCiAJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKLQkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICI9JmEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCiAJCQkgICAgOiAiciIgKHB4b19uZXdfXykJCQkJXAogCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmgKaW5kZXggZTJmNmE5OS4uY2MyOTA4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaApAQCAtMjIsNiArMjIsNyBAQAogCiAjZGVmaW5lIEFSQ0hfUDRfQ05UUlZBTF9CSVRTCSg0MCkKICNkZWZpbmUgQVJDSF9QNF9DTlRSVkFMX01BU0sJKCgxVUxMIDw8IEFSQ0hfUDRfQ05UUlZBTF9CSVRTKSAtIDEpCisjZGVmaW5lIEFSQ0hfUDRfVU5GTEFHR0VEX0JJVAkoKDFVTEwpIDw8IChBUkNIX1A0X0NOVFJWQUxfQklUUyAtIDEpKQogCiAjZGVmaW5lIFA0X0VTQ1JfRVZFTlRfTUFTSwkweDdlMDAwMDAwVQogI2RlZmluZSBQNF9FU0NSX0VWRU5UX1NISUZUCTI1CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDRjMmY2M2MuLjFmNDY5NTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oCkBAIC00MCwxMCArNDAsNyBAQAogREVDTEFSRV9FQVJMWV9QRVJfQ1BVKHUxNiwgeDg2X2Jpb3NfY3B1X2FwaWNpZCk7CiAKIC8qIFN0YXRpYyBzdGF0ZSBpbiBoZWFkLlMgdXNlZCB0byBzZXQgdXAgYSBDUFUgKi8KLWV4dGVybiBzdHJ1Y3QgewotCXZvaWQgKnNwOwotCXVuc2lnbmVkIHNob3J0IHNzOwotfSBzdGFja19zdGFydDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN0YWNrX3N0YXJ0OyAvKiBJbml0aWFsIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyAqLwogCiBzdHJ1Y3Qgc21wX29wcyB7CiAJdm9pZCAoKnNtcF9wcmVwYXJlX2Jvb3RfY3B1KSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcGJvb3RfaG9va3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcGJvb3RfaG9va3MuaAppbmRleCA2YzIyYmYzLi43MjViNzc4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXBib290X2hvb2tzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wYm9vdF9ob29rcy5oCkBAIC0zNCw3ICszNCw3IEBACiAJICovCiAJQ01PU19XUklURSgwLCAweGYpOwogCi0JKigodm9sYXRpbGUgbG9uZyAqKXBoeXNfdG9fdmlydChhcGljLT50cmFtcG9saW5lX3BoeXNfbG93KSkgPSAwOworCSooKHZvbGF0aWxlIHUzMiAqKXBoeXNfdG9fdmlydChhcGljLT50cmFtcG9saW5lX3BoeXNfbG93KSkgPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNtcGJvb3Rfc2V0dXBfaW9fYXBpYyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE1OWUwOTEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X1NZU1RFTV82NF9ICi0jZGVmaW5lIF9BU01fWDg2X1NZU1RFTV82NF9ICi0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+Ci0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3I4KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBjcjg7Ci0JYXNtIHZvbGF0aWxlKCJtb3ZxICUlY3I4LCUwIiA6ICI9ciIgKGNyOCkpOwotCXJldHVybiBjcjg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjgodW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlKCJtb3ZxICUwLCUlY3I4IiA6OiAiciIgKHZhbCkgOiAibWVtb3J5Iik7Ci19Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgotCi0jZW5kaWYgLyogX0FTTV9YODZfU1lTVEVNXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCBiM2E3MTEzLi4zZTZlMmQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC03Miw2ICs3Miw3IEBACiBpbnQgYWNwaV9zY2lfb3ZlcnJpZGVfZ3NpIF9faW5pdGRhdGE7CiBpbnQgYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlIF9faW5pdGRhdGE7CiBpbnQgYWNwaV91c2VfdGltZXJfb3ZlcnJpZGUgX19pbml0ZGF0YTsKK2ludCBhY3BpX2ZpeF9waW4yX3BvbGFyaXR5IF9faW5pdGRhdGE7CiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIHN0YXRpYyB1NjQgYWNwaV9sYXBpY19hZGRyIF9faW5pdGRhdGEgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwpAQCAtNDE1LDEwICs0MTYsMTUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSAmJgotCSAgICBpbnRzcmMtPnNvdXJjZV9pcnEgPT0gMCAmJiBpbnRzcmMtPmdsb2JhbF9pcnEgPT0gMikgewotCQlwcmludGsoUFJFRklYICJCSU9TIElSUTAgcGluMiBvdmVycmlkZSBpZ25vcmVkLlxuIik7Ci0JCXJldHVybiAwOworCWlmIChpbnRzcmMtPnNvdXJjZV9pcnEgPT0gMCAmJiBpbnRzcmMtPmdsb2JhbF9pcnEgPT0gMikgeworCQlpZiAoYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlKSB7CisJCQlwcmludGsoUFJFRklYICJCSU9TIElSUTAgcGluMiBvdmVycmlkZSBpZ25vcmVkLlxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoYWNwaV9maXhfcGluMl9wb2xhcml0eSAmJiAoaW50c3JjLT5pbnRpX2ZsYWdzICYgQUNQSV9NQURUX1BPTEFSSVRZX01BU0spKSB7CisJCQlpbnRzcmMtPmludGlfZmxhZ3MgJj0gfkFDUElfTUFEVF9QT0xBUklUWV9NQVNLOworCQkJcHJpbnRrKFBSRUZJWCAiQklPUyBJUlEwIHBpbjIgb3ZlcnJpZGU6IGZvcmNpbmcgcG9sYXJpdHkgdG8gaGlnaCBhY3RpdmUuXG4iKTsKKwkJfQogCX0KIAogCW1wX292ZXJyaWRlX2xlZ2FjeV9pcnEoaW50c3JjLT5zb3VyY2VfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKaW5kZXggNjlmZDcyYS4uNjhkMTUzNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCkBAIC0xMiwxMCArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKICNpbmNsdWRlICJyZWFsbW9kZS93YWtldXAuaCIKICNpbmNsdWRlICJzbGVlcC5oIgpAQCAtMTAwLDcgKzk4LDcgQEAKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLwogCWhlYWRlci0+dHJhbXBvbGluZV9zZWdtZW50ID0gc2V0dXBfdHJhbXBvbGluZSgpID4+IDQ7CiAjaWZkZWYgQ09ORklHX1NNUAotCXN0YWNrX3N0YXJ0LnNwID0gdGVtcF9zdGFjayArIHNpemVvZih0ZW1wX3N0YWNrKTsKKwlzdGFja19zdGFydCA9ICh1bnNpZ25lZCBsb25nKXRlbXBfc3RhY2sgKyBzaXplb2YodGVtcF9zdGFjayk7CiAJZWFybHlfZ2R0X2Rlc2NyLmFkZHJlc3MgPQogCQkJKHVuc2lnbmVkIGxvbmcpZ2V0X2NwdV9nZHRfdGFibGUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlpbml0aWFsX2dzID0gcGVyX2NwdV9vZmZzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKQEAgLTE0OSw2ICsxNDcsMTUgQEAKIAltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShtZW0sIG1lbSArIFdBS0VVUF9TSVpFLCAiQUNQSSBXQUtFVVAiKTsKIH0KIAoraW50IF9faW5pdCBhY3BpX2NvbmZpZ3VyZV93YWtldXBfbWVtb3J5KHZvaWQpCit7CisJaWYgKGFjcGlfcmVhbG1vZGUpCisJCXNldF9tZW1vcnlfeChhY3BpX3JlYWxtb2RlLCBXQUtFVVBfU0laRSA+PiBQQUdFX1NISUZUKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChhY3BpX2NvbmZpZ3VyZV93YWtldXBfbWVtb3J5KTsKKwogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3NsZWVwX3NldHVwKGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggMTIzNjA4NS4uNzAzOGI5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTY3MSw3ICs2NzEsNyBAQAogCiAJYXRvbWljX3NldCgmc3RvcF9tYWNoaW5lX2ZpcnN0LCAxKTsKIAl3cm90ZV90ZXh0ID0gMDsKLQlzdG9wX21hY2hpbmUoc3RvcF9tYWNoaW5lX3RleHRfcG9rZSwgKHZvaWQgKikmdHBwLCBOVUxMKTsKKwlfX3N0b3BfbWFjaGluZShzdG9wX21hY2hpbmVfdGV4dF9wb2tlLCAodm9pZCAqKSZ0cHAsIE5VTEwpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpIHx8IGRlZmluZWQoSEFWRV9KVU1QX0xBQkVMKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jIGIvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCmluZGV4IDUxZWYzMWEuLjUxZDRlMTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogCW1lbWNweSgmYWRldi0+ZXZ0LCAmYXBidF9jbG9ja2V2ZW50LCBzaXplb2Yoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSkpOwogCiAJaWYgKG1yc3RfdGltZXJfb3B0aW9ucyA9PSBNUlNUX1RJTUVSX0xBUElDX0FQQlQpIHsKLQkJYXBidF9jbG9ja2V2ZW50LnJhdGluZyA9IEFQQlRfQ0xPQ0tFVkVOVF9SQVRJTkcgLSAxMDA7CisJCWFkZXYtPmV2dC5yYXRpbmcgPSBBUEJUX0NMT0NLRVZFTlRfUkFUSU5HIC0gMTAwOwogCQlnbG9iYWxfY2xvY2tfZXZlbnQgPSAmYWRldi0+ZXZ0OwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgY2xvY2tldmVudCByZWdpc3RlcmVkIGFzIGdsb2JhbFxuIiwKIAkJICAgICAgIGdsb2JhbF9jbG9ja19ldmVudC0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggMDZjMTk2ZC4uNzZiOTZkNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtMTM4MSwxMiArMTM4MSwxNyBAQAogI2VuZGlmCiAKIAlhcGljX3BtX2FjdGl2YXRlKCk7Cit9CisKK3ZvaWQgX19pbml0IGJzcF9lbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQoreworCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7CiAKIAkvKgogCSAqIE5vdyB0aGF0IGxvY2FsIEFQSUMgc2V0dXAgaXMgY29tcGxldGVkIGZvciBCUCwgY29uZmlndXJlIHRoZSBmYXVsdAogCSAqIGhhbmRsaW5nIGZvciBpbnRlcnJ1cHQgcmVtYXBwaW5nLgogCSAqLwotCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpICYmIGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCiAJCWVuYWJsZV9kcmhkX2ZhdWx0X2hhbmRsaW5nKCk7CiAKIH0KQEAgLTE3NTYsNyArMTc2MSw3IEBACiAJCWVuYWJsZV9JT19BUElDKCk7CiAjZW5kaWYKIAotCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7CisJYnNwX2VuZF9sb2NhbF9BUElDX3NldHVwKCk7CiAKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAlpZiAoc21wX2ZvdW5kX2NvbmZpZyAmJiAhc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCA2OTdkYzM0Li5jYTllMmEzNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtNDAwMiw2ICs0MDAyLDkgQEAKIHsKIAlpbnQgaSA9IDA7CiAKKwlpZiAobnJfaW9hcGljcyA9PSAwKQorCQlyZXR1cm4gLTE7CisKIAkvKiBGaW5kIHRoZSBJT0FQSUMgdGhhdCBtYW5hZ2VzIHRoaXMgR1NJLiAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKIAkJaWYgKChnc2kgPj0gbXBfZ3NpX3JvdXRpbmdbaV0uZ3NpX2Jhc2UpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCmluZGV4IGJkMWNhYzcuLjUyYzkzNjQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwpAQCAtMTU4LDkgKzE1OCw5IEBACiB7CiAJaWYgKGMtPng4NiA9PSAweDA2KSB7CiAJCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0VTVCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV2FybmluZzogRVNULWNhcGFibGUgQ1BVICIKLQkJCSAgICAgICAiZGV0ZWN0ZWQuIFRoZSBhY3BpLWNwdWZyZXEgbW9kdWxlIG9mZmVycyAiCi0JCQkgICAgICAgInZvbHRhZ2Ugc2NhbGluZyBpbiBhZGRpdGlvbiBvZiBmcmVxdWVuY3kgIgorCQkJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HIFBGWCAiV2FybmluZzogRVNULWNhcGFibGUgIgorCQkJICAgICAgICJDUFUgZGV0ZWN0ZWQuIFRoZSBhY3BpLWNwdWZyZXEgbW9kdWxlIG9mZmVycyAiCisJCQkgICAgICAgInZvbHRhZ2Ugc2NhbGluZyBpbiBhZGRpdGlvbiB0byBmcmVxdWVuY3kgIgogCQkJICAgICAgICJzY2FsaW5nLiBZb3Ugc2hvdWxkIHVzZSB0aGF0IGluc3RlYWQgb2YgIgogCQkJICAgICAgICJwNC1jbG9ja21vZCwgaWYgcG9zc2libGUuXG4iKTsKIAkJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggMzVjN2U2NS4uYzU2N2RlYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTE1MzcsNiArMTUzNyw3IEBACiBzdGF0aWMgaW50IF9fY3B1aW5pdCBwb3dlcm5vd2s4X2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgc3VwcG9ydGVkX2NwdXMgPSAwLCBjcHU7CisJaW50IHJ2OwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CiAJCWludCByYzsKQEAgLTE1NTUsMTQgKzE1NTYsMTQgQEAKIAogCQljcGJfY2FwYWJsZSA9IHRydWU7CiAKLQkJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcGJfbmIpOwotCiAJCW1zcnMgPSBtc3JzX2FsbG9jKCk7CiAJCWlmICghbXNycykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYWxsb2NhdGluZyBtc3JzIVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAorCQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwYl9uYik7CisKIAkJcmRtc3Jfb25fY3B1cyhjcHVfb25saW5lX21hc2ssIE1TUl9LN19IV0NSLCBtc3JzKTsKIAogCQlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spIHsKQEAgLTE1NzQsNyArMTU3NSwxMyBAQAogCQkJKGNwYl9lbmFibGVkID8gIm9uIiA6ICJvZmYiKSk7CiAJfQogCi0JcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZjcHVmcmVxX2FtZDY0X2RyaXZlcik7CisJcnYgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmY3B1ZnJlcV9hbWQ2NF9kcml2ZXIpOworCWlmIChydiA8IDAgJiYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NQQikpIHsKKwkJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwYl9uYik7CisJCW1zcnNfZnJlZShtc3JzKTsKKwkJbXNycyA9IE5VTEw7CisJfQorCXJldHVybiBydjsKIH0KIAogLyogZHJpdmVyIGVudHJ5IHBvaW50IGZvciB0ZXJtICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwppbmRleCAwMWMwZjNlLi5iZWJhYmVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKQEAgLTc5MywxMyArNzkzLDIxIEBACiB9CiAKIC8qCi0gKiBNVFJSIGluaXRpYWxpemF0aW9uIGZvciBhbGwgQVAncworICogRGVsYXllZCBNVFJSIGluaXRpYWxpemF0aW9uIGZvciBhbGwgQVAncwogICovCiB2b2lkIG10cnJfYXBzX2luaXQodm9pZCkKIHsKIAlpZiAoIXVzZV9pbnRlbCgpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIENoZWNrIGlmIHNvbWVvbmUgaGFzIHJlcXVlc3RlZCB0aGUgZGVsYXkgb2YgQVAgTVRSUiBpbml0aWFsaXphdGlvbiwKKwkgKiBieSBkb2luZyBzZXRfbXRycl9hcHNfZGVsYXllZF9pbml0KCksIHByaW9yIHRvIHRoaXMgcG9pbnQuIElmIG5vdCwKKwkgKiB0aGVuIHdlIGFyZSBkb25lLgorCSAqLworCWlmICghbXRycl9hcHNfZGVsYXllZF9pbml0KQorCQlyZXR1cm47CisKIAlzZXRfbXRycih+MFUsIDAsIDAsIDApOwogCW10cnJfYXBzX2RlbGF5ZWRfaW5pdCA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYwppbmRleCBlNTZiOWJmLi5mZjc1MWE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYwpAQCAtNjgyLDcgKzY4Miw3IEBACiAJICogaWYgYW4gZXZlbnQgaXMgc2hhcmVkIGFjY3Jvc3MgdGhlIGxvZ2ljYWwgdGhyZWFkcwogCSAqIHRoZSB1c2VyIG5lZWRzIHNwZWNpYWwgcGVybWlzc2lvbnMgdG8gYmUgYWJsZSB0byB1c2UgaXQKIAkgKi8KLQlpZiAocDRfZXZlbnRfYmluZF9tYXBbdl0uc2hhcmVkKSB7CisJaWYgKHA0X2h0X2FjdGl2ZSgpICYmIHA0X2V2ZW50X2JpbmRfbWFwW3ZdLnNoYXJlZCkgewogCQlpZiAocGVyZl9wYXJhbm9pZF9jcHUoKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRUFDQ0VTOwogCX0KQEAgLTcyNyw3ICs3MjcsOCBAQAogCQlldmVudC0+aHcuY29uZmlnID0gcDRfc2V0X2h0X2JpdChldmVudC0+aHcuY29uZmlnKTsKIAogCWlmIChldmVudC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV9SQVcpIHsKLQorCQlzdHJ1Y3QgcDRfZXZlbnRfYmluZCAqYmluZDsKKwkJdW5zaWduZWQgaW50IGVzZWw7CiAJCS8qCiAJCSAqIENsZWFyIGJpdHMgd2UgcmVzZXJ2ZSB0byBiZSBtYW5hZ2VkIGJ5IGtlcm5lbCBpdHNlbGYKIAkJICogYW5kIG5ldmVyIGFsbG93ZWQgZnJvbSBhIHVzZXIgc3BhY2UKQEAgLTc0Myw2ICs3NDQsMTMgQEAKIAkJICogYml0cyBzaW5jZSB3ZSBrZWVwIGFkZGl0aW9uYWwgaW5mbyBoZXJlIChmb3IgY2FjaGUgZXZlbnRzIGFuZCBldGMpCiAJCSAqLwogCQlldmVudC0+aHcuY29uZmlnIHw9IGV2ZW50LT5hdHRyLmNvbmZpZzsKKwkJYmluZCA9IHA0X2NvbmZpZ19nZXRfYmluZChldmVudC0+YXR0ci5jb25maWcpOworCQlpZiAoIWJpbmQpIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWVzZWwgPSBQNF9PUENPREVfRVNFTChiaW5kLT5vcGNvZGUpOworCQlldmVudC0+aHcuY29uZmlnIHw9IHA0X2NvbmZpZ19wYWNrX2NjY3IoUDRfQ0NDUl9FU0VMKGVzZWwpKTsKIAl9CiAKIAlyYyA9IHg4Nl9zZXR1cF9wZXJmY3RyKGV2ZW50KTsKQEAgLTc2Miw5ICs3NzAsMTQgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JLyogaXQgbWlnaHQgYmUgdW5mbGFnZ2VkIG92ZXJmbG93ICovCi0JcmRtc3JsKGh3Yy0+ZXZlbnRfYmFzZSArIGh3Yy0+aWR4LCB2KTsKLQlpZiAoISh2ICYgQVJDSF9QNF9DTlRSVkFMX01BU0spKQorCS8qCisJICogSW4gc29tZSBjaXJjdW1zdGFuY2VzIHRoZSBvdmVyZmxvdyBtaWdodCBpc3N1ZSBhbiBOTUkgYnV0IGRpZAorCSAqIG5vdCBzZXQgUDRfQ0NDUl9PVkYgYml0LiBCZWNhdXNlIGEgY291bnRlciBob2xkcyBhIG5lZ2F0aXZlIHZhbHVlCisJICogd2Ugc2ltcGx5IGNoZWNrIGZvciBoaWdoIGJpdCBiZWluZyBzZXQsIGlmIGl0J3MgY2xlYXJlZCBpdCBtZWFucworCSAqIHRoZSBjb3VudGVyIGhhcyByZWFjaGVkIHplcm8gdmFsdWUgYW5kIGNvbnRpbnVlZCBjb3VudGluZyBiZWZvcmUKKwkgKiByZWFsIE5NSSBzaWduYWwgd2FzIHJlY2VpdmVkOgorCSAqLworCWlmICghKHYgJiBBUkNIX1A0X1VORkxBR0dFRF9CSVQpKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCmluZGV4IDY0MTAxMzMuLmE2YjZmY2YgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKQEAgLTE0OSwxMyArMTQ5LDEzIEBACiAJdW5zaWduZWQgdXNlZCA9IDA7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aW5mbzsKIAlpbnQgZ3JhcGggPSAwOworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJdW5zaWduZWQgbG9uZyBicDsKIAogCWlmICghdGFzaykKIAkJdGFzayA9IGN1cnJlbnQ7CiAKIAlpZiAoIXN0YWNrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJCXN0YWNrID0gJmR1bW15OwogCQlpZiAodGFzayAmJiB0YXNrICE9IGN1cnJlbnQpCiAJCQlzdGFjayA9ICh1bnNpZ25lZCBsb25nICopdGFzay0+dGhyZWFkLnNwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jCmluZGV4IDc2YjhjZDkuLjllZmJkY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMKQEAgLTE0MywxNSArMTQzLDEwIEBACiAKIHN0YXRpYyB1MzIgX19pbml0IGF0aV9zYngwMF9yZXYoaW50IG51bSwgaW50IHNsb3QsIGludCBmdW5jKQogewotCXUzMiBvbGQsIGQ7CisJdTMyIGQ7CiAKLQlkID0gcmVhZF9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywgMHg3MCk7Ci0Jb2xkID0gZDsKLQlkICY9IH4oMTw8OCk7Ci0Jd3JpdGVfcGNpX2NvbmZpZyhudW0sIHNsb3QsIGZ1bmMsIDB4NzAsIGQpOwogCWQgPSByZWFkX3BjaV9jb25maWcobnVtLCBzbG90LCBmdW5jLCAweDgpOwogCWQgJj0gMHhmZjsKLQl3cml0ZV9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywgMHg3MCwgb2xkKTsKIAogCXJldHVybiBkOwogfQpAQCAtMTYwLDExICsxNTUsMTQgQEAKIHsKIAl1MzIgZCwgcmV2OwogCi0JaWYgKGFjcGlfdXNlX3RpbWVyX292ZXJyaWRlKQorCXJldiA9IGF0aV9zYngwMF9yZXYobnVtLCBzbG90LCBmdW5jKTsKKwlpZiAocmV2ID49IDB4NDApCisJCWFjcGlfZml4X3BpbjJfcG9sYXJpdHkgPSAxOworCisJaWYgKHJldiA+IDB4MTMpCiAJCXJldHVybjsKIAotCXJldiA9IGF0aV9zYngwMF9yZXYobnVtLCBzbG90LCBmdW5jKTsKLQlpZiAocmV2ID4gMHgxMykKKwlpZiAoYWNwaV91c2VfdGltZXJfb3ZlcnJpZGUpCiAJCXJldHVybjsKIAogCS8qIGNoZWNrIGZvciBJUlEwIGludGVycnVwdCBzd2FwICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwppbmRleCBmYzI5M2RjLi43NjdkNmM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKQEAgLTg1LDYgKzg1LDggQEAKICAqLwogX19IRUFECiBFTlRSWShzdGFydHVwXzMyKQorCW1vdmwgcGEoc3RhY2tfc3RhcnQpLCVlY3gKKwkKIAkvKiB0ZXN0IEtFRVBfU0VHTUVOVFMgZmxhZyB0byBzZWUgaWYgdGhlIGJvb3Rsb2FkZXIgaXMgYXNraW5nCiAJCXVzIHRvIG5vdCByZWxvYWQgc2VnbWVudHMgKi8KIAl0ZXN0YiAkKDE8PDYpLCBCUF9sb2FkZmxhZ3MoJWVzaSkKQEAgLTk5LDcgKzEwMSw5IEBACiAJbW92bCAlZWF4LCVlcwogCW1vdmwgJWVheCwlZnMKIAltb3ZsICVlYXgsJWdzCisJbW92bCAlZWF4LCVzcwogMjoKKwlsZWFsIC1fX1BBR0VfT0ZGU0VUKCVlY3gpLCVlc3AKIAogLyoKICAqIENsZWFyIEJTUyBmaXJzdCBzbyB0aGF0IHRoZXJlIGFyZSBubyBzdXJwcmlzZXMuLi4KQEAgLTE0NSw4ICsxNDksNiBAQAogICogX2Jya19lbmQgaXMgc2V0IHVwIHRvIHBvaW50IHRvIHRoZSBmaXJzdCAic2FmZSIgbG9jYXRpb24uCiAgKiBNYXBwaW5ncyBhcmUgY3JlYXRlZCBib3RoIGF0IHZpcnR1YWwgYWRkcmVzcyAwIChpZGVudGl0eSBtYXBwaW5nKQogICogYW5kIFBBR0VfT0ZGU0VUIGZvciB1cCB0byBfZW5kLgotICoKLSAqIE5vdGUgdGhhdCB0aGUgc3RhY2sgaXMgbm90IHlldCBzZXQgdXAhCiAgKi8KICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCkBAIC0yODIsNiArMjg0LDkgQEAKIAltb3ZsICVlYXgsJWVzCiAJbW92bCAlZWF4LCVmcwogCW1vdmwgJWVheCwlZ3MKKwltb3ZsIHBhKHN0YWNrX3N0YXJ0KSwlZWN4CisJbW92bCAlZWF4LCVzcworCWxlYWwgLV9fUEFHRV9PRkZTRVQoJWVjeCksJWVzcAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIGRlZmF1bHRfZW50cnk6CiAKQEAgLTM0Nyw4ICszNTIsOCBAQAogCW1vdmwgJWVheCwlY3IwCQkvKiAuLmFuZCBzZXQgcGFnaW5nIChQRykgYml0ICovCiAJbGptcCAkX19CT09UX0NTLCQxZgkvKiBDbGVhciBwcmVmZXRjaCBhbmQgbm9ybWFsaXplICVlaXAgKi8KIDE6Ci0JLyogU2V0IHVwIHRoZSBzdGFjayBwb2ludGVyICovCi0JbHNzIHN0YWNrX3N0YXJ0LCVlc3AKKwkvKiBTaGlmdCB0aGUgc3RhY2sgcG9pbnRlciB0byBhIHZpcnR1YWwgYWRkcmVzcyAqLworCWFkZGwgJF9fUEFHRV9PRkZTRVQsICVlc3AKIAogLyoKICAqIEluaXRpYWxpemUgZWZsYWdzLiAgU29tZSBCSU9TJ3MgbGVhdmUgYml0cyBsaWtlIE5UIHNldC4gIFRoaXMgd291bGQKQEAgLTM2MCw5ICszNjUsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCWNtcGIgJDAsIHJlYWR5Ci0JanogIDFmCQkJCS8qIEluaXRpYWwgQ1BVIGNsZWFucyBCU1MgKi8KLQlqbXAgY2hlY2tDUFV0eXBlCi0xOgorCWpueiBjaGVja0NQVXR5cGUKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCkBAIC00NzAsMTQgKzQ3Myw3IEBACiAKIAljbGQJCQkjIGdjYzIgd2FudHMgdGhlIGRpcmVjdGlvbiBmbGFnIGNsZWFyZWQgYXQgYWxsIHRpbWVzCiAJcHVzaGwgJDAJCSMgZmFrZSByZXR1cm4gYWRkcmVzcyBmb3IgdW53aW5kZXIKLSNpZmRlZiBDT05GSUdfU01QCi0JbW92YiByZWFkeSwgJWNsCiAJbW92YiAkMSwgcmVhZHkKLQljbXBiICQwLCVjbAkJIyB0aGUgZmlyc3QgQ1BVIGNhbGxzIHN0YXJ0X2tlcm5lbAotCWplICAgMWYKLQltb3ZsIChzdGFja19zdGFydCksICVlc3AKLTE6Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCWptcCAqKGluaXRpYWxfY29kZSkKIAogLyoKQEAgLTY3MCwxNSArNjY2LDE1IEBACiAjZW5kaWYKIAogLmRhdGEKKy5iYWxpZ24gNAogRU5UUlkoc3RhY2tfc3RhcnQpCiAJLmxvbmcgaW5pdF90aHJlYWRfdW5pb24rVEhSRUFEX1NJWkUKLQkubG9uZyBfX0JPT1RfRFMKLQotcmVhZHk6CS5ieXRlIDAKIAogZWFybHlfcmVjdXJzaW9uX2ZsYWc6CiAJLmxvbmcgMAogCityZWFkeToJLmJ5dGUgMAorCiBpbnRfbXNnOgogCS5hc2NpeiAiVW5rbm93biBpbnRlcnJ1cHQgb3IgZmF1bHQgYXQ6ICVwICVwICVwXG4iCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwppbmRleCA1Mjk0NWRhLi4zODdiNmEwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lycS5jCkBAIC0zNjcsNyArMzY3LDggQEAKIAkJaWYgKGlyciAgJiAoMSA8PCAodmVjdG9yICUgMzIpKSkgewogCQkJaXJxID0gX190aGlzX2NwdV9yZWFkKHZlY3Rvcl9pcnFbdmVjdG9yXSk7CiAKLQkJCWRhdGEgPSBpcnFfZ2V0X2lycV9kYXRhKGlycSk7CisJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCWRhdGEgPSAmZGVzYy0+aXJxX2RhdGE7CiAJCQlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAkJCWlmIChkYXRhLT5jaGlwLT5pcnFfcmV0cmlnZ2VyKQogCQkJCWRhdGEtPmNoaXAtPmlycV9yZXRyaWdnZXIoZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCBlNzY0ZmMwLi5mZjQ1NTQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTkyLDIxICs5MiwzMSBAQAogCiB2b2lkIHNob3dfcmVnc19jb21tb24odm9pZCkKIHsKLQljb25zdCBjaGFyICpib2FyZCwgKnByb2R1Y3Q7CisJY29uc3QgY2hhciAqdmVuZG9yLCAqcHJvZHVjdCwgKmJvYXJkOwogCi0JYm9hcmQgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKTsKLQlpZiAoIWJvYXJkKQotCQlib2FyZCA9ICIiOworCXZlbmRvciA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1NZU19WRU5ET1IpOworCWlmICghdmVuZG9yKQorCQl2ZW5kb3IgPSAiIjsKIAlwcm9kdWN0ID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9OQU1FKTsKIAlpZiAoIXByb2R1Y3QpCiAJCXByb2R1Y3QgPSAiIjsKIAorCS8qIEJvYXJkIE5hbWUgaXMgb3B0aW9uYWwgKi8KKwlib2FyZCA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JPQVJEX05BTUUpOworCiAJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQlwcmludGsoS0VSTl9ERUZBVUxUICJQaWQ6ICVkLCBjb21tOiAlLjIwcyAlcyAlcyAlLipzICVzLyVzXG4iLAorCXByaW50ayhLRVJOX0RFRkFVTFQgIlBpZDogJWQsIGNvbW06ICUuMjBzICVzICVzICUuKnMiLAogCQljdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIHByaW50X3RhaW50ZWQoKSwKIAkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKLQkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24sIGJvYXJkLCBwcm9kdWN0KTsKKwkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOworCXByaW50ayhLRVJOX0NPTlQgIiAiKTsKKwlwcmludGsoS0VSTl9DT05UICIlcyAlcyIsIHZlbmRvciwgcHJvZHVjdCk7CisJaWYgKGJvYXJkKSB7CisJCXByaW50ayhLRVJOX0NPTlQgIi8iKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCBib2FyZCk7CisJfQorCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiB9CiAKIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpCkBAIC01MDYsNyArNTE2LDcgQEAKICNkZWZpbmUgTVdBSVRfRUNYX0VYVEVOREVEX0lORk8JCTB4MDEKICNkZWZpbmUgTVdBSVRfRURYX0MxCQkJMHhmMAogCi1pbnQgX19jcHVpbml0IG13YWl0X3VzYWJsZShjb25zdCBzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCitpbnQgbXdhaXRfdXNhYmxlKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAl1MzIgZWF4LCBlYngsIGVjeCwgZWR4OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKaW5kZXggZmM3YWFlMS4uNzE1MDM3YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwpAQCAtMjg1LDYgKzI4NSwxNCBAQAogCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiUDRTODAwIiksCiAJCX0sCiAJfSwKKwl7CS8qIEhhbmRsZSBwcm9ibGVtcyB3aXRoIHJlYm9vdGluZyBvbiBWZXJzYUxvZ2ljIE1lbmxvdyBib2FyZHMgKi8KKwkJLmNhbGxiYWNrID0gc2V0X2Jpb3NfcmVib290LAorCQkuaWRlbnQgPSAiVmVyc2FMb2dpYyBNZW5sb3cgYmFzZWQgYm9hcmQiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiVmVyc2FMb2dpYyBDb3Jwb3JhdGlvbiIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiVmVyc2FMb2dpYyBNZW5sb3cgYm9hcmQiKSwKKwkJfSwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggMGNiZThjMC4uMDg3NzZhOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC02MzgsNyArNjM4LDcgQEAKIAkgKiB0YXJnZXQgcHJvY2Vzc29yIHN0YXRlLgogCSAqLwogCXN0YXJ0dXBfaXBpX2hvb2socGh5c19hcGljaWQsICh1bnNpZ25lZCBsb25nKSBzdGFydF9zZWNvbmRhcnksCi0JCQkgKHVuc2lnbmVkIGxvbmcpc3RhY2tfc3RhcnQuc3ApOworCQkJIHN0YWNrX3N0YXJ0KTsKIAogCS8qCiAJICogUnVuIFNUQVJUVVAgSVBJIGxvb3AuCkBAIC03ODUsNyArNzg1LDcgQEAKICNlbmRpZgogCWVhcmx5X2dkdF9kZXNjci5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKIAlpbml0aWFsX2NvZGUgPSAodW5zaWduZWQgbG9uZylzdGFydF9zZWNvbmRhcnk7Ci0Jc3RhY2tfc3RhcnQuc3AgPSAodm9pZCAqKSBjX2lkbGUuaWRsZS0+dGhyZWFkLnNwOworCXN0YWNrX3N0YXJ0ICA9IGNfaWRsZS5pZGxlLT50aHJlYWQuc3A7CiAKIAkvKiBzdGFydF9pcCBoYWQgYmV0dGVyIGJlIHBhZ2UtYWxpZ25lZCEgKi8KIAlzdGFydF9pcCA9IHNldHVwX3RyYW1wb2xpbmUoKTsKQEAgLTEwNjAsNyArMTA2MCw3IEBACiAKIAkJY29ubmVjdF9ic3BfQVBJQygpOwogCQlzZXR1cF9sb2NhbF9BUElDKCk7Ci0JCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7CisJCWJzcF9lbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMTM3LDcgKzExMzcsNyBAQAogCWlmICghc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKIAkJZW5hYmxlX0lPX0FQSUMoKTsKIAotCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7CisJYnNwX2VuZF9sb2NhbF9BUElDX3NldHVwKCk7CiAKIAltYXBfY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCAyNWJkMWJjLi42M2ZlYzE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC0xMTUwLDggKzExNTAsOCBAQAogCWt2bV9sb2FkX2xkdChzdm0tPmhvc3QubGR0KTsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJbG9hZHNlZ21lbnQoZnMsIHN2bS0+aG9zdC5mcyk7Ci0JbG9hZF9nc19pbmRleChzdm0tPmhvc3QuZ3MpOwogCXdybXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIGN1cnJlbnQtPnRocmVhZC5ncyk7CisJbG9hZF9nc19pbmRleChzdm0tPmhvc3QuZ3MpOwogI2Vsc2UKIAlsb2Fkc2VnbWVudChncywgc3ZtLT5ob3N0LmdzKTsKICNlbmRpZgpAQCAtMjc3Nyw2ICsyNzc3LDggQEAKIAkJCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCByZWcsIHZhbCk7CiAJfQogCisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwppbmRleCA4YjgzMGNhLi5kMzQzYjNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKQEAgLTI1Niw3ICsyNTYsNiBAQAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGZuKQogewogCXBncHJvdF90IGZvcmJpZGRlbiA9IF9fcGdwcm90KDApOwotCXBncHJvdF90IHJlcXVpcmVkID0gX19wZ3Byb3QoMCk7CiAKIAkvKgogCSAqIFRoZSBCSU9TIGFyZWEgYmV0d2VlbiA2NDBrIGFuZCAxTWIgbmVlZHMgdG8gYmUgZXhlY3V0YWJsZSBmb3IKQEAgLTI4MiwxMiArMjgxLDYgQEAKIAlpZiAod2l0aGluKHBmbiwgX19wYSgodW5zaWduZWQgbG9uZylfX3N0YXJ0X3JvZGF0YSkgPj4gUEFHRV9TSElGVCwKIAkJICAgX19wYSgodW5zaWduZWQgbG9uZylfX2VuZF9yb2RhdGEpID4+IFBBR0VfU0hJRlQpKQogCQlwZ3Byb3RfdmFsKGZvcmJpZGRlbikgfD0gX1BBR0VfUlc7Ci0JLyoKLQkgKiAuZGF0YSBhbmQgLmJzcyBzaG91bGQgYWx3YXlzIGJlIHdyaXRhYmxlLgotCSAqLwotCWlmICh3aXRoaW4oYWRkcmVzcywgKHVuc2lnbmVkIGxvbmcpX3NkYXRhLCAodW5zaWduZWQgbG9uZylfZWRhdGEpIHx8Ci0JICAgIHdpdGhpbihhZGRyZXNzLCAodW5zaWduZWQgbG9uZylfX2Jzc19zdGFydCwgKHVuc2lnbmVkIGxvbmcpX19ic3Nfc3RvcCkpCi0JCXBncHJvdF92YWwocmVxdWlyZWQpIHw9IF9QQUdFX1JXOwogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSAmJiBkZWZpbmVkKENPTkZJR19ERUJVR19ST0RBVEEpCiAJLyoKQEAgLTMyNyw3ICszMjAsNiBAQAogI2VuZGlmCiAKIAlwcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSAmIH5wZ3Byb3RfdmFsKGZvcmJpZGRlbikpOwotCXByb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgcGdwcm90X3ZhbChyZXF1aXJlZCkpOwogCiAJcmV0dXJuIHByb3Q7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYyBiL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jCmluZGV4IGRhYjg3NDYuLjA0NGJkYTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jCkBAIC0xNDAsOCArMTQwLDcgQEAKIAkJICogd2FzdGVkIGJvb3RtZW0pIGFuZCBoYW5kIG9mZiBjaHVua3Mgb2YgaXQgdG8gY2FsbGVycy4KIAkJICovCiAJCXJlcyA9IGFsbG9jX2Jvb3RtZW0oY2h1bmtfc2l6ZSk7Ci0JCWlmICghcmVzKQotCQkJcmV0dXJuIE5VTEw7CisJCUJVR19PTighcmVzKTsKIAkJcHJvbV9lYXJseV9hbGxvY2F0ZWQgKz0gY2h1bmtfc2l6ZTsKIAkJbWVtc2V0KHJlcywgMCwgY2h1bmtfc2l6ZSk7CiAJCWZyZWVfbWVtID0gY2h1bmtfc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9wMm0uYyBiL2FyY2gveDg2L3hlbi9wMm0uYwppbmRleCBkZGM4MWEwLi5mZDEyZDdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vcDJtLmMKKysrIGIvYXJjaC94ODYveGVuL3AybS5jCkBAIC0yNDEsMjEgKzI0MSwxNSBAQAogCQkgKiBBcyBsb25nIGFzIHRoZSBtZm5fbGlzdCBoYXMgZW5vdWdoIGVudHJpZXMgdG8gY29tcGxldGVseQogCQkgKiBmaWxsIGEgcDJtIHBhZ2UsIHBvaW50aW5nIGludG8gdGhlIGFycmF5IGlzIG9rLiBCdXQgaWYKIAkJICogbm90IHRoZSBlbnRyaWVzIGJleW9uZCB0aGUgbGFzdCBwZm4gd2lsbCBiZSB1bmRlZmluZWQuCi0JCSAqIEFuZCBndWVzc2luZyB0aGF0IHRoZSAnd2hhdC1ldmVyLXRoZXJlLWlzJyBkb2VzIG5vdCB0YWtlIGl0Ci0JCSAqIHRvbyBraW5kbHkgd2hlbiBjaGFuZ2luZyBpdCB0byBpbnZhbGlkIG1hcmtlcnMsIGEgbmV3IHBhZ2UKLQkJICogaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCBhbmQgZmlsbGVkIHdpdGggdGhlIHZhbGlkIHBhcnQuCiAJCSAqLwogCQlpZiAodW5saWtlbHkocGZuICsgUDJNX1BFUl9QQUdFID4gbWF4X3BmbikpIHsKIAkJCXVuc2lnbmVkIGxvbmcgcDJtaWR4OwotCQkJdW5zaWduZWQgbG9uZyAqcDJtID0gZXh0ZW5kX2JyayhQQUdFX1NJWkUsIFBBR0VfU0laRSk7Ci0JCQlwMm1faW5pdChwMm0pOwogCi0JCQlmb3IgKHAybWlkeCA9IDA7IHBmbiArIHAybWlkeCA8IG1heF9wZm47IHAybWlkeCsrKSB7Ci0JCQkJcDJtW3AybWlkeF0gPSBtZm5fbGlzdFtwZm4gKyBwMm1pZHhdOwotCQkJfQotCQkJcDJtX3RvcFt0b3BpZHhdW21pZGlkeF0gPSBwMm07Ci0JCX0gZWxzZQotCQkJcDJtX3RvcFt0b3BpZHhdW21pZGlkeF0gPSAmbWZuX2xpc3RbcGZuXTsKKwkJCXAybWlkeCA9IG1heF9wZm4gJSBQMk1fUEVSX1BBR0U7CisJCQlmb3IgKCA7IHAybWlkeCA8IFAyTV9QRVJfUEFHRTsgcDJtaWR4KyspCisJCQkJbWZuX2xpc3RbcGZuICsgcDJtaWR4XSA9IElOVkFMSURfUDJNX0VOVFJZOworCQl9CisJCXAybV90b3BbdG9waWR4XVttaWRpZHhdID0gJm1mbl9saXN0W3Bmbl07CiAJfQogCiAJbTJwX292ZXJyaWRlX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zZXR1cC5jIGIvYXJjaC94ODYveGVuL3NldHVwLmMKaW5kZXggYjVhN2Y5Mi4uYThhNjZhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NldHVwLmMKKysrIGIvYXJjaC94ODYveGVuL3NldHVwLmMKQEAgLTE3OSw4ICsxNzksMTMgQEAKIAllODIwLm5yX21hcCA9IDA7CiAJeGVuX2V4dHJhX21lbV9zdGFydCA9IG1lbV9lbmQ7CiAJZm9yIChpID0gMDsgaSA8IG1lbW1hcC5ucl9lbnRyaWVzOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBsb25nIGVuZCA9IG1hcFtpXS5hZGRyICsgbWFwW2ldLnNpemU7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmQ7CiAKKwkJLyogR3VhcmQgYWdhaW5zdCBub24tcGFnZSBhbGlnbmVkIEU4MjAgZW50cmllcy4gKi8KKwkJaWYgKG1hcFtpXS50eXBlID09IEU4MjBfUkFNKQorCQkJbWFwW2ldLnNpemUgLT0gKG1hcFtpXS5zaXplICsgbWFwW2ldLmFkZHIpICUgUEFHRV9TSVpFOworCisJCWVuZCA9IG1hcFtpXS5hZGRyICsgbWFwW2ldLnNpemU7CiAJCWlmIChtYXBbaV0udHlwZSA9PSBFODIwX1JBTSAmJiBlbmQgPiBtZW1fZW5kKSB7CiAJCQkvKiBSQU0gb2ZmIHRoZSBlbmQgLSBtYXkgYmUgcGFydGlhbGx5IGluY2x1ZGVkICovCiAJCQl1NjQgZGVsdGEgPSBtaW4obWFwW2ldLnNpemUsIGVuZCAtIG1lbV9lbmQpOwpAQCAtMzUwLDYgKzM1NSw3IEBACiAJYm9vdF9jcHVfZGF0YS5obHRfd29ya3Nfb2sgPSAxOwogI2VuZGlmCiAJcG1faWRsZSA9IGRlZmF1bHRfaWRsZTsKKwlib290X29wdGlvbl9pZGxlX292ZXJyaWRlID0gSURMRV9IQUxUOwogCiAJZmlkZGxlX3Zkc28oKTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDJmNDAwMmYuLjUxOGRkNDIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKIAogCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19TVE9QUEVELCBxKTsKLQlfX2Jsa19ydW5fcXVldWUocSk7CisJX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3N0YXJ0X3F1ZXVlKTsKIApAQCAtNDAzLDEzICs0MDMsMTQgQEAKIC8qKgogICogX19ibGtfcnVuX3F1ZXVlIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZQogICogQHE6CVRoZSBxdWV1ZSB0byBydW4KKyAqIEBmb3JjZV9rYmxvY2tkOiBEb24ndCBydW4gQHEtPnJlcXVlc3RfZm4gZGlyZWN0bHkuICBVc2Uga2Jsb2NrZC4KICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgIFNlZSBAYmxrX3J1bl9xdWV1ZS4gVGhpcyB2YXJpYW50IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHF1ZXVlIGxvY2sKICAqICAgIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKgogICovCi12b2lkIF9fYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3ZvaWQgX19ibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBib29sIGZvcmNlX2tibG9ja2QpCiB7CiAJYmxrX3JlbW92ZV9wbHVnKHEpOwogCkBAIC00MjMsNyArNDI0LDcgQEAKIAkgKiBPbmx5IHJlY3Vyc2Ugb25jZSB0byBhdm9pZCBvdmVycnVubmluZyB0aGUgc3RhY2ssIGxldCB0aGUgdW5wbHVnCiAJICogaGFuZGxpbmcgcmVpbnZva2UgdGhlIGhhbmRsZXIgc2hvcnRseSBpZiB3ZSBhbHJlYWR5IGdvdCB0aGVyZS4KIAkgKi8KLQlpZiAoIXF1ZXVlX2ZsYWdfdGVzdF9hbmRfc2V0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgcSkpIHsKKwlpZiAoIWZvcmNlX2tibG9ja2QgJiYgIXF1ZXVlX2ZsYWdfdGVzdF9hbmRfc2V0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgcSkpIHsKIAkJcS0+cmVxdWVzdF9mbihxKTsKIAkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1JFRU5URVIsIHEpOwogCX0gZWxzZSB7CkBAIC00NDYsNyArNDQ3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCV9fYmxrX3J1bl9xdWV1ZShxKTsKKwlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChibGtfcnVuX3F1ZXVlKTsKQEAgLTEwNTMsNyArMTA1NCw3IEBACiAKIAlkcml2ZV9zdGF0X2FjY3QocnEsIDEpOwogCV9fZWx2X2FkZF9yZXF1ZXN0KHEsIHJxLCB3aGVyZSwgMCk7Ci0JX19ibGtfcnVuX3F1ZXVlKHEpOworCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19pbnNlcnRfcmVxdWVzdCk7CkBAIC0yNjEwLDEzICsyNjExLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woa2Jsb2NrZF9zY2hlZHVsZV93b3JrKTsKIAotaW50IGtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpCi17Ci0JcmV0dXJuIHF1ZXVlX2RlbGF5ZWRfd29yayhrYmxvY2tkX3dvcmtxdWV1ZSwgZHdvcmssIGRlbGF5KTsKLX0KLUVYUE9SVF9TWU1CT0woa2Jsb2NrZF9zY2hlZHVsZV9kZWxheWVkX3dvcmspOwotCiBpbnQgX19pbml0IGJsa19kZXZfaW5pdCh2b2lkKQogewogCUJVSUxEX0JVR19PTihfX1JFUV9OUl9CSVRTID4gOCAqCmRpZmYgLS1naXQgYS9ibG9jay9ibGstZmx1c2guYyBiL2Jsb2NrL2Jsay1mbHVzaC5jCmluZGV4IDU0YjEyM2QuLmIyN2QwMjAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1mbHVzaC5jCisrKyBiL2Jsb2NrL2Jsay1mbHVzaC5jCkBAIC02NiwxMCArNjYsMTIgQEAKIAogCS8qCiAJICogTW92aW5nIGEgcmVxdWVzdCBzaWxlbnRseSB0byBlbXB0eSBxdWV1ZV9oZWFkIG1heSBzdGFsbCB0aGUKLQkgKiBxdWV1ZS4gIEtpY2sgdGhlIHF1ZXVlIGluIHRob3NlIGNhc2VzLgorCSAqIHF1ZXVlLiAgS2ljayB0aGUgcXVldWUgaW4gdGhvc2UgY2FzZXMuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorCSAqIGZyb20gcmVxdWVzdCBjb21wbGV0aW9uIHBhdGggYW5kIGNhbGxpbmcgZGlyZWN0bHkgaW50bworCSAqIHJlcXVlc3RfZm4gbWF5IGNvbmZ1c2UgdGhlIGRyaXZlci4gIEFsd2F5cyB1c2Uga2Jsb2NrZC4KIAkgKi8KIAlpZiAod2FzX2VtcHR5ICYmIG5leHRfcnEpCi0JCV9fYmxrX3J1bl9xdWV1ZShxKTsKKwkJX19ibGtfcnVuX3F1ZXVlKHEsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBwcmVfZmx1c2hfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yKQpAQCAtMTMwLDcgKzEzMiw3IEBACiAJCUJVRygpOwogCX0KIAotCWVsdl9pbnNlcnQocSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCk7CisJZWx2X2luc2VydChxLCBycSwgRUxFVkFUT1JfSU5TRVJUX1JFUVVFVUUpOwogCXJldHVybiBycTsKIH0KIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWxpYi5jIGIvYmxvY2svYmxrLWxpYi5jCmluZGV4IDFhMzIwZDIuLmVlYzc4YmUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1saWIuYworKysgYi9ibG9jay9ibGstbGliLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogfQogCiAvKioKLSAqIGJsa2Rldl9pc3N1ZV96ZXJvb3V0IGdlbmVyYXRlIG51bWJlciBvZiB6ZXJvIGZpbGVkIHdyaXRlIGJpb3MKKyAqIGJsa2Rldl9pc3N1ZV96ZXJvb3V0IC0gZ2VuZXJhdGUgbnVtYmVyIG9mIHplcm8gZmlsZWQgd3JpdGUgYmlvcwogICogQGJkZXY6CWJsb2NrZGV2IHRvIGlzc3VlCiAgKiBAc2VjdG9yOglzdGFydCBzZWN0b3IKICAqIEBucl9zZWN0czoJbnVtYmVyIG9mIHNlY3RvcnMgdG8gd3JpdGUKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmMKaW5kZXggMzgxYjA5Yi4uZTM2Y2MxMCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRocm90dGxlLmMKKysrIGIvYmxvY2svYmxrLXRocm90dGxlLmMKQEAgLTIwLDYgKzIwLDExIEBACiAvKiBUaHJvdHRsaW5nIGlzIHBlcmZvcm1lZCBvdmVyIDEwMG1zIHNsaWNlIGFuZCBhZnRlciB0aGF0IHNsaWNlIGlzIHJlbmV3ZWQgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRocm90bF9zbGljZSA9IEhaLzEwOwkvKiAxMDAgbXMgKi8KIAorLyogQSB3b3JrcXVldWUgdG8gcXVldWUgdGhyb3R0bGUgcmVsYXRlZCB3b3JrICovCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmt0aHJvdGxkX3dvcmtxdWV1ZTsKK3N0YXRpYyB2b2lkIHRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IHRocm90bF9kYXRhICp0ZCwKKwkJCQl1bnNpZ25lZCBsb25nIGRlbGF5KTsKKwogc3RydWN0IHRocm90bF9yYl9yb290IHsKIAlzdHJ1Y3QgcmJfcm9vdCByYjsKIAlzdHJ1Y3QgcmJfbm9kZSAqbGVmdDsKQEAgLTE2OCw3ICsxNzMsMTUgQEAKIAkgKiB0cmVlIG9mIGJsa2cgKGluc3RlYWQgb2YgdHJhdmVyc2luZyB0aHJvdWdoIGhhc2ggbGlzdCBhbGwKIAkgKiB0aGUgdGltZS4KIAkgKi8KLQl0ZyA9IHRnX29mX2Jsa2coYmxraW9jZ19sb29rdXBfZ3JvdXAoYmxrY2csIGtleSkpOworCisJLyoKKwkgKiBUaGlzIGlzIHRoZSBjb21tb24gY2FzZSB3aGVuIHRoZXJlIGFyZSBubyBibGtpbyBjZ3JvdXBzLgorIAkgKiBBdm9pZCBsb29rdXAgaW4gdGhpcyBjYXNlCisgCSAqLworCWlmIChibGtjZyA9PSAmYmxraW9fcm9vdF9jZ3JvdXApCisJCXRnID0gJnRkLT5yb290X3RnOworCWVsc2UKKwkJdGcgPSB0Z19vZl9ibGtnKGJsa2lvY2dfbG9va3VwX2dyb3VwKGJsa2NnLCBrZXkpKTsKIAogCS8qIEZpbGwgaW4gZGV2aWNlIGRldGFpbHMgZm9yIHJvb3QgZ3JvdXAgKi8KIAlpZiAodGcgJiYgIXRnLT5ibGtnLmRldiAmJiBiZGktPmRldiAmJiBkZXZfbmFtZShiZGktPmRldikpIHsKQEAgLTMzNywxMCArMzUwLDkgQEAKIAl1cGRhdGVfbWluX2Rpc3BhdGNoX3RpbWUoc3QpOwogCiAJaWYgKHRpbWVfYmVmb3JlX2VxKHN0LT5taW5fZGlzcHRpbWUsIGppZmZpZXMpKQotCQl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLT5xdWV1ZSwgMCk7CisJCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQsIDApOwogCWVsc2UKLQkJdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZC0+cXVldWUsCi0JCQkJKHN0LT5taW5fZGlzcHRpbWUgLSBqaWZmaWVzKSk7CisJCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQsIChzdC0+bWluX2Rpc3B0aW1lIC0gamlmZmllcykpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTgwNywxMCArODE5LDEwIEBACiB9CiAKIC8qIENhbGwgd2l0aCBxdWV1ZSBsb2NrIGhlbGQgKi8KLXZvaWQgdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgbG9uZyBkZWxheSkKK3N0YXRpYyB2b2lkCit0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCB0aHJvdGxfZGF0YSAqdGQsIHVuc2lnbmVkIGxvbmcgZGVsYXkpCiB7CiAKLQlzdHJ1Y3QgdGhyb3RsX2RhdGEgKnRkID0gcS0+dGQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSAmdGQtPnRocm90bF93b3JrOwogCiAJaWYgKHRvdGFsX25yX3F1ZXVlZCh0ZCkgPiAwKSB7CkBAIC04MTksMTIgKzgzMSwxMSBAQAogCQkgKiBDYW5jZWwgdGhhdCBhbmQgc2NoZWR1bGUgYSBuZXcgb25lLgogCQkgKi8KIAkJX19jYW5jZWxfZGVsYXllZF93b3JrKGR3b3JrKTsKLQkJa2Jsb2NrZF9zY2hlZHVsZV9kZWxheWVkX3dvcmsocSwgZHdvcmssIGRlbGF5KTsKKwkJcXVldWVfZGVsYXllZF93b3JrKGt0aHJvdGxkX3dvcmtxdWV1ZSwgZHdvcmssIGRlbGF5KTsKIAkJdGhyb3RsX2xvZyh0ZCwgInNjaGVkdWxlIHdvcmsuIGRlbGF5PSVsdSBqaWZmaWVzPSVsdSIsCiAJCQkJZGVsYXksIGppZmZpZXMpOwogCX0KIH0KLUVYUE9SVF9TWU1CT0wodGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayk7CiAKIHN0YXRpYyB2b2lkCiB0aHJvdGxfZGVzdHJveV90ZyhzdHJ1Y3QgdGhyb3RsX2RhdGEgKnRkLCBzdHJ1Y3QgdGhyb3RsX2dycCAqdGcpCkBAIC05MTIsNyArOTIzLDcgQEAKIAlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKIAogCS8qIFNjaGVkdWxlIGEgd29yayBub3cgdG8gcHJvY2VzcyB0aGUgbGltaXQgY2hhbmdlICovCi0JdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZC0+cXVldWUsIDApOworCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQsIDApOwogfQogCiBzdGF0aWMgdm9pZCB0aHJvdGxfdXBkYXRlX2Jsa2lvX2dyb3VwX3dyaXRlX2Jwcyh2b2lkICprZXksCkBAIC05MjYsNyArOTM3LDcgQEAKIAlzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCk7CiAJYXRvbWljX2luYygmdGQtPmxpbWl0c19jaGFuZ2VkKTsKIAlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKLQl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLT5xdWV1ZSwgMCk7CisJdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRocm90bF91cGRhdGVfYmxraW9fZ3JvdXBfcmVhZF9pb3BzKHZvaWQgKmtleSwKQEAgLTk0MCw3ICs5NTEsNyBAQAogCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKIAlhdG9taWNfaW5jKCZ0ZC0+bGltaXRzX2NoYW5nZWQpOwogCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwotCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQtPnF1ZXVlLCAwKTsKKwl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgdGhyb3RsX3VwZGF0ZV9ibGtpb19ncm91cF93cml0ZV9pb3BzKHZvaWQgKmtleSwKQEAgLTk1NCw3ICs5NjUsNyBAQAogCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKIAlhdG9taWNfaW5jKCZ0ZC0+bGltaXRzX2NoYW5nZWQpOwogCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwotCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQtPnF1ZXVlLCAwKTsKKwl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLCAwKTsKIH0KIAogdm9pZCB0aHJvdGxfc2h1dGRvd25fdGltZXJfd3Eoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCkBAIC0xMTI3LDYgKzExMzgsMTAgQEAKIAogc3RhdGljIGludCBfX2luaXQgdGhyb3RsX2luaXQodm9pZCkKIHsKKwlrdGhyb3RsZF93b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImt0aHJvdGxkIiwgV1FfTUVNX1JFQ0xBSU0sIDApOworCWlmICgha3Rocm90bGRfd29ya3F1ZXVlKQorCQlwYW5pYygiRmFpbGVkIHRvIGNyZWF0ZSBrdGhyb3RsZFxuIik7CisKIAlibGtpb19wb2xpY3lfcmVnaXN0ZXIoJmJsa2lvX3BvbGljeV90aHJvdGwpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggNTAxZmZkZi4uZWE4M2E0ZiAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC01OTksNyArNTk5LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZAotY2ZxX3NjYWxlZF9ncm91cF9zbGljZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCitjZnFfc2NhbGVkX2NmcXFfc2xpY2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewogCXVuc2lnbmVkIHNsaWNlID0gY2ZxX3ByaW9fdG9fc2xpY2UoY2ZxZCwgY2ZxcSk7CiAJaWYgKGNmcWQtPmNmcV9sYXRlbmN5KSB7CkBAIC02MzEsNyArNjMxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogY2ZxX3NldF9wcmlvX3NsaWNlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKLQl1bnNpZ25lZCBzbGljZSA9IGNmcV9zY2FsZWRfZ3JvdXBfc2xpY2UoY2ZxZCwgY2ZxcSk7CisJdW5zaWduZWQgc2xpY2UgPSBjZnFfc2NhbGVkX2NmcXFfc2xpY2UoY2ZxZCwgY2ZxcSk7CiAKIAljZnFxLT5zbGljZV9zdGFydCA9IGppZmZpZXM7CiAJY2ZxcS0+c2xpY2VfZW5kID0gamlmZmllcyArIHNsaWNlOwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAKIAkgKi8KIAlpZiAodGltZWRfb3V0KSB7CiAJCWlmIChjZnFfY2ZxcV9zbGljZV9uZXcoY2ZxcSkpCi0JCQljZnFxLT5zbGljZV9yZXNpZCA9IGNmcV9zY2FsZWRfZ3JvdXBfc2xpY2UoY2ZxZCwgY2ZxcSk7CisJCQljZnFxLT5zbGljZV9yZXNpZCA9IGNmcV9zY2FsZWRfY2ZxcV9zbGljZShjZnFkLCBjZnFxKTsKIAkJZWxzZQogCQkJY2ZxcS0+c2xpY2VfcmVzaWQgPSBjZnFxLT5zbGljZV9lbmQgLSBqaWZmaWVzOwogCQljZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgInJlc2lkPSVsZCIsIGNmcXEtPnNsaWNlX3Jlc2lkKTsKQEAgLTMzNTUsNyArMzM1NSw3IEBACiAJCQkgICAgY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKSB7CiAJCQkJY2ZxX2RlbF90aW1lcihjZnFkLCBjZnFxKTsKIAkJCQljZnFfY2xlYXJfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSk7Ci0JCQkJX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlKTsKKwkJCQlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUsIGZhbHNlKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2ZxX2Jsa2lvY2dfdXBkYXRlX2lkbGVfdGltZV9zdGF0cygKIAkJCQkJCSZjZnFxLT5jZnFnLT5ibGtnKTsKQEAgLTMzNzAsNyArMzM3MCw3IEBACiAJCSAqIHRoaXMgbmV3IHF1ZXVlIGlzIFJUIGFuZCB0aGUgY3VycmVudCBvbmUgaXMgQkUKIAkJICovCiAJCWNmcV9wcmVlbXB0X3F1ZXVlKGNmcWQsIGNmcXEpOwotCQlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUpOworCQlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUsIGZhbHNlKTsKIAl9CiB9CiAKQEAgLTM0MzIsNiArMzQzMiwxMCBAQAogewogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljID0gY2ZxZC0+YWN0aXZlX2NpYzsKIAorCS8qIElmIHRoZSBxdWV1ZSBhbHJlYWR5IGhhcyByZXF1ZXN0cywgZG9uJ3Qgd2FpdCAqLworCWlmICghUkJfRU1QVFlfUk9PVCgmY2ZxcS0+c29ydF9saXN0KSkKKwkJcmV0dXJuIGZhbHNlOworCiAJLyogSWYgdGhlcmUgYXJlIG90aGVyIHF1ZXVlcyBpbiB0aGUgZ3JvdXAsIGRvbid0IHdhaXQgKi8KIAlpZiAoY2ZxcS0+Y2ZxZy0+bnJfY2ZxcSA+IDEpCiAJCXJldHVybiBmYWxzZTsKQEAgLTM3MjcsNyArMzczMSw3IEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBjZnFkLT5xdWV1ZTsKIAogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlKTsKKwlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUsIGZhbHNlKTsKIAlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDI1Njk1MTIuLjIzNmU5M2MgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJICovCiAJZWx2X2RyYWluX2VsZXZhdG9yKHEpOwogCXdoaWxlIChxLT5ycS5lbHZwcml2KSB7Ci0JCV9fYmxrX3J1bl9xdWV1ZShxKTsKKwkJX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKIAkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCQltc2xlZXAoMTApOwogCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwpAQCAtNjUxLDcgKzY1MSw3IEBACiAJCSAqICAgd2l0aCBhbnl0aGluZy4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gZGVsYXlpbmcgcXVldWUKIAkJICogICBwcm9jZXNzaW5nLgogCQkgKi8KLQkJX19ibGtfcnVuX3F1ZXVlKHEpOworCQlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOwogCQlicmVhazsKIAogCWNhc2UgRUxFVkFUT1JfSU5TRVJUX1NPUlQ6CmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuYwppbmRleCA2YTViNzcyLi5jYmYxMTEyIDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCisrKyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTEzNTUsNyArMTM1NSw3IEBACiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGJkZ2V0X2Rpc2soZGlzaywgcGFydG5vKTsKIAlpZiAoYmRldikgewogCQlmc3luY19iZGV2KGJkZXYpOwotCQlyZXMgPSBfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYpOworCQlyZXMgPSBfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYsIHRydWUpOwogCQliZHB1dChiZGV2KTsKIAl9CiAJcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL2Jsb2NrL2lvY3RsLmMgYi9ibG9jay9pb2N0bC5jCmluZGV4IDkwNDlkNDYuLjExMjRjZDIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2lvY3RsLmMKKysrIGIvYmxvY2svaW9jdGwuYwpAQCAtMjk0LDkgKzI5NCwxMSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChnZXRfdXNlcihuLCAoaW50IF9fdXNlciAqKSBhcmcpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICghKG1vZGUgJiBGTU9ERV9FWENMKSAmJgotCQkgICAgYmxrZGV2X2dldChiZGV2LCBtb2RlIHwgRk1PREVfRVhDTCwgJmJkZXYpIDwgMCkKLQkJCXJldHVybiAtRUJVU1k7CisJCWlmICghKG1vZGUgJiBGTU9ERV9FWENMKSkgeworCQkJYmRncmFiKGJkZXYpOworCQkJaWYgKGJsa2Rldl9nZXQoYmRldiwgbW9kZSB8IEZNT0RFX0VYQ0wsICZiZGV2KSA8IDApCisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQogCQlyZXQgPSBzZXRfYmxvY2tzaXplKGJkZXYsIG4pOwogCQlpZiAoIShtb2RlICYgRk1PREVfRVhDTCkpCiAJCQlibGtkZXZfcHV0KGJkZXYsIG1vZGUgfCBGTU9ERV9FWENMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKaW5kZXggNTQ3ODRiYi4uZWRjMjU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKQEAgLTQxNiwxMCArNDE2LDE1IEBACiAJdTggb3JpZ2luYWxseV9lbmFibGVkOyAgLyogVHJ1ZSBpZiBHUEUgd2FzIG9yaWdpbmFsbHkgZW5hYmxlZCAqLwogfTsKIAorc3RydWN0IGFjcGlfZ3BlX25vdGlmeV9vYmplY3QgeworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOworCXN0cnVjdCBhY3BpX2dwZV9ub3RpZnlfb2JqZWN0ICpuZXh0OworfTsKKwogdW5pb24gYWNwaV9ncGVfZGlzcGF0Y2hfaW5mbyB7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm1ldGhvZF9ub2RlOwkvKiBNZXRob2Qgbm9kZSBmb3IgdGhpcyBHUEUgbGV2ZWwgKi8KIAlzdHJ1Y3QgYWNwaV9ncGVfaGFuZGxlcl9pbmZvICpoYW5kbGVyOyAgLyogSW5zdGFsbGVkIEdQRSBoYW5kbGVyICovCi0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlOyAgICAgICAgLyogUGFyZW50IF9QUlcgZGV2aWNlIGZvciBpbXBsaWNpdCBub3RpZnkgKi8KKwlzdHJ1Y3QgYWNwaV9ncGVfbm90aWZ5X29iamVjdCBkZXZpY2U7ICAgLyogTGlzdCBvZiBfUFJXIGRldmljZXMgZm9yIGltcGxpY2l0IG5vdGlmeSAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYwppbmRleCAxNDk4OGE4Li5mNDcyNTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCkBAIC00NTcsNiArNDU3LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmxvY2FsX2dwZV9ldmVudF9pbmZvOwogCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm87CisJc3RydWN0IGFjcGlfZ3BlX25vdGlmeV9vYmplY3QgKm5vdGlmeV9vYmplY3Q7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2FzeW5jaF9leGVjdXRlX2dwZV9tZXRob2QpOwogCkBAIC01MDgsMTAgKzUwOSwxOCBAQAogCQkgKiBmcm9tIHRoaXMgdGhyZWFkIC0tIGJlY2F1c2UgaGFuZGxlcnMgbWF5IGluIHR1cm4gcnVuIG90aGVyCiAJCSAqIGNvbnRyb2wgbWV0aG9kcy4KIAkJICovCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V2X3F1ZXVlX25vdGlmeV9yZXF1ZXN0KGxvY2FsX2dwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC4KLQkJCQkJCSBkZXZpY2Vfbm9kZSwKLQkJCQkJCSBBQ1BJX05PVElGWV9ERVZJQ0VfV0FLRSk7CisJCXN0YXR1cyA9IGFjcGlfZXZfcXVldWVfbm90aWZ5X3JlcXVlc3QoCisJCQkJbG9jYWxfZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLmRldmljZS5ub2RlLAorCQkJCUFDUElfTk9USUZZX0RFVklDRV9XQUtFKTsKKworCQlub3RpZnlfb2JqZWN0ID0gbG9jYWxfZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLmRldmljZS5uZXh0OworCQl3aGlsZSAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgbm90aWZ5X29iamVjdCkgeworCQkJc3RhdHVzID0gYWNwaV9ldl9xdWV1ZV9ub3RpZnlfcmVxdWVzdCgKKwkJCQkJbm90aWZ5X29iamVjdC0+bm9kZSwKKwkJCQkJQUNQSV9OT1RJRllfREVWSUNFX1dBS0UpOworCQkJbm90aWZ5X29iamVjdCA9IG5vdGlmeV9vYmplY3QtPm5leHQ7CisJCX0KKwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZ3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZncGUuYwppbmRleCBlOTU2MmE3Li41MmFhZmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZncGUuYwpAQCAtMTk4LDcgKzE5OCw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlOworCXN0cnVjdCBhY3BpX2dwZV9ub3RpZnlfb2JqZWN0ICpub3RpZnlfb2JqZWN0OwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOworCXU4IGdwZV9kaXNwYXRjaF9tYXNrOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3NldHVwX2dwZV9mb3Jfd2FrZSk7CiAKQEAgLTIxMiwzNyArMjE0LDYyIEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQkvKiBWYWxpZGF0ZSB3YWtlX2RldmljZSBpcyBvZiB0eXBlIERldmljZSAqLwotCi0JZGV2aWNlX25vZGUgPSBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlLCB3YWtlX2RldmljZSk7Ci0JaWYgKGRldmljZV9ub2RlLT50eXBlICE9IEFDUElfVFlQRV9ERVZJQ0UpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCX0KLQogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwogCiAJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIEdQRSBudW1iZXIgKi8KIAogCWdwZV9ldmVudF9pbmZvID0gYWNwaV9ldl9nZXRfZ3BlX2V2ZW50X2luZm8oZ3BlX2RldmljZSwgZ3BlX251bWJlcik7Ci0JaWYgKGdwZV9ldmVudF9pbmZvKSB7Ci0JCS8qCi0JCSAqIElmIHRoZXJlIGlzIG5vIG1ldGhvZCBvciBoYW5kbGVyIGZvciB0aGlzIEdQRSwgdGhlbiB0aGUKLQkJICogd2FrZV9kZXZpY2Ugd2lsbCBiZSBub3RpZmllZCB3aGVuZXZlciB0aGlzIEdQRSBmaXJlcyAoYWthCi0JCSAqICJpbXBsaWNpdCBub3RpZnkiKSBOb3RlOiBUaGUgR1BFIGlzIGFzc3VtZWQgdG8gYmUKLQkJICogbGV2ZWwtdHJpZ2dlcmVkIChmb3Igd2luZG93cyBjb21wYXRpYmlsaXR5KS4KLQkJICovCi0JCWlmICgoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSykgPT0KLQkJICAgIEFDUElfR1BFX0RJU1BBVENIX05PTkUpIHsKLQkJCWdwZV9ldmVudF9pbmZvLT5mbGFncyA9Ci0JCQkgICAgKEFDUElfR1BFX0RJU1BBVENIX05PVElGWSB8Ci0JCQkgICAgIEFDUElfR1BFX0xFVkVMX1RSSUdHRVJFRCk7Ci0JCQlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guZGV2aWNlX25vZGUgPSBkZXZpY2Vfbm9kZTsKLQkJfQotCi0JCWdwZV9ldmVudF9pbmZvLT5mbGFncyB8PSBBQ1BJX0dQRV9DQU5fV0FLRTsKLQkJc3RhdHVzID0gQUVfT0s7CisJaWYgKCFncGVfZXZlbnRfaW5mbykgeworCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKKwlpZiAod2FrZV9kZXZpY2UgPT0gQUNQSV9ST09UX09CSkVDVCkgeworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIG1ldGhvZCBvciBoYW5kbGVyIGZvciB0aGlzIEdQRSwgdGhlbiB0aGUKKwkgKiB3YWtlX2RldmljZSB3aWxsIGJlIG5vdGlmaWVkIHdoZW5ldmVyIHRoaXMgR1BFIGZpcmVzIChha2EKKwkgKiAiaW1wbGljaXQgbm90aWZ5IikgTm90ZTogVGhlIEdQRSBpcyBhc3N1bWVkIHRvIGJlCisJICogbGV2ZWwtdHJpZ2dlcmVkIChmb3Igd2luZG93cyBjb21wYXRpYmlsaXR5KS4KKwkgKi8KKwlncGVfZGlzcGF0Y2hfbWFzayA9IGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0s7CisJaWYgKGdwZV9kaXNwYXRjaF9tYXNrICE9IEFDUElfR1BFX0RJU1BBVENIX05PTkUKKwkgICAgJiYgZ3BlX2Rpc3BhdGNoX21hc2sgIT0gQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZKSB7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFZhbGlkYXRlIHdha2VfZGV2aWNlIGlzIG9mIHR5cGUgRGV2aWNlICovCisKKwlkZXZpY2Vfbm9kZSA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUsIHdha2VfZGV2aWNlKTsKKwlpZiAoZGV2aWNlX25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0RFVklDRSkgeworCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwl9CisKKwlpZiAoZ3BlX2Rpc3BhdGNoX21hc2sgPT0gQUNQSV9HUEVfRElTUEFUQ0hfTk9ORSkgeworCQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgPSAoQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZIHwKKwkJCQkJIEFDUElfR1BFX0xFVkVMX1RSSUdHRVJFRCk7CisJCWdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5kZXZpY2Uubm9kZSA9IGRldmljZV9ub2RlOworCQlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guZGV2aWNlLm5leHQgPSBOVUxMOworCX0gZWxzZSB7CisJCS8qIFRoZXJlIGFyZSBtdWx0aXBsZSBkZXZpY2VzIHRvIG5vdGlmeSBpbXBsaWNpdGx5LiAqLworCisJCW5vdGlmeV9vYmplY3QgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2YoKm5vdGlmeV9vYmplY3QpKTsKKwkJaWYgKCFub3RpZnlfb2JqZWN0KSB7CisJCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CisJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJfQorCisJCW5vdGlmeV9vYmplY3QtPm5vZGUgPSBkZXZpY2Vfbm9kZTsKKwkJbm90aWZ5X29iamVjdC0+bmV4dCA9IGdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5kZXZpY2UubmV4dDsKKwkJZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLmRldmljZS5uZXh0ID0gbm90aWZ5X29iamVjdDsKKwl9CisKKyBvdXQ6CisJZ3BlX2V2ZW50X2luZm8tPmZsYWdzIHw9IEFDUElfR1BFX0NBTl9XQUtFOworCXN0YXR1cyA9IEFFX09LOworCisgdW5sb2NrX2FuZF9leGl0OgogCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGVidWdmcy5jIGIvZHJpdmVycy9hY3BpL2RlYnVnZnMuYwppbmRleCA1ZGY2N2YxLi4zODRmN2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9kZWJ1Z2ZzLmMKQEAgLTI2LDcgKzI2LDkgQEAKIAkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0YXRpYyBjaGFyICpidWY7Ci0Jc3RhdGljIGludCB1bmNvcGllZF9ieXRlczsKKwlzdGF0aWMgdTMyIG1heF9zaXplOworCXN0YXRpYyB1MzIgdW5jb3BpZWRfYnl0ZXM7CisKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgdGFibGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCkBAIC0zNywxOSArMzksMjQgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0YWJsZSwgdXNlcl9idWYsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXVuY29waWVkX2J5dGVzID0gdGFibGUubGVuZ3RoOwotCQlidWYgPSBremFsbG9jKHVuY29waWVkX2J5dGVzLCBHRlBfS0VSTkVMKTsKKwkJdW5jb3BpZWRfYnl0ZXMgPSBtYXhfc2l6ZSA9IHRhYmxlLmxlbmd0aDsKKwkJYnVmID0ga3phbGxvYyhtYXhfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYnVmKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKHVuY29waWVkX2J5dGVzIDwgY291bnQpIHsKLQkJa2ZyZWUoYnVmKTsKKwlpZiAoYnVmID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKworCWlmICgoKnBwb3MgPiBtYXhfc2l6ZSkgfHwKKwkgICAgKCpwcG9zICsgY291bnQgPiBtYXhfc2l6ZSkgfHwKKwkgICAgKCpwcG9zICsgY291bnQgPCBjb3VudCkgfHwKKwkgICAgKGNvdW50ID4gdW5jb3BpZWRfYnl0ZXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihidWYgKyAoKnBwb3MpLCB1c2VyX2J1ZiwgY291bnQpKSB7CiAJCWtmcmVlKGJ1Zik7CisJCWJ1ZiA9IE5VTEw7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtNTksNiArNjYsNyBAQAogCWlmICghdW5jb3BpZWRfYnl0ZXMpIHsKIAkJc3RhdHVzID0gYWNwaV9pbnN0YWxsX21ldGhvZChidWYpOwogCQlrZnJlZShidWYpOworCQlidWYgPSBOVUxMOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYWRkX3RhaW50KFRBSU5UX09WRVJSSURERU5fQUNQSV9UQUJMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggYjA5MzE4MS4uYzkwYzc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtNjM2LDE3ICs2MzYsMjEgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX29zX3JlYWRfbWVtb3J5KGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzX2FkZHIsIHUzMiAqIHZhbHVlLCB1MzIgd2lkdGgpCiB7Ci0JdTMyIGR1bW15OwogCXZvaWQgX19pb21lbSAqdmlydF9hZGRyOwotCWludCBzaXplID0gd2lkdGggLyA4LCB1bm1hcCA9IDA7CisJdW5zaWduZWQgaW50IHNpemUgPSB3aWR0aCAvIDg7CisJYm9vbCB1bm1hcCA9IGZhbHNlOworCXUzMiBkdW1teTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAl2aXJ0X2FkZHIgPSBhY3BpX21hcF92YWRkcl9sb29rdXAocGh5c19hZGRyLCBzaXplKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAoIXZpcnRfYWRkcikgeworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJdmlydF9hZGRyID0gYWNwaV9vc19pb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSk7Ci0JCXVubWFwID0gMTsKKwkJaWYgKCF2aXJ0X2FkZHIpCisJCQlyZXR1cm4gQUVfQkFEX0FERFJFU1M7CisJCXVubWFwID0gdHJ1ZTsKIAl9CisKIAlpZiAoIXZhbHVlKQogCQl2YWx1ZSA9ICZkdW1teTsKIApAQCAtNjY2LDYgKzY3MCw4IEBACiAKIAlpZiAodW5tYXApCiAJCWlvdW5tYXAodmlydF9hZGRyKTsKKwllbHNlCisJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIEFFX09LOwogfQpAQCAtNjc0LDE0ICs2ODAsMTcgQEAKIGFjcGlfb3Nfd3JpdGVfbWVtb3J5KGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzX2FkZHIsIHUzMiB2YWx1ZSwgdTMyIHdpZHRoKQogewogCXZvaWQgX19pb21lbSAqdmlydF9hZGRyOwotCWludCBzaXplID0gd2lkdGggLyA4LCB1bm1hcCA9IDA7CisJdW5zaWduZWQgaW50IHNpemUgPSB3aWR0aCAvIDg7CisJYm9vbCB1bm1hcCA9IGZhbHNlOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCXZpcnRfYWRkciA9IGFjcGlfbWFwX3ZhZGRyX2xvb2t1cChwaHlzX2FkZHIsIHNpemUpOwotCXJjdV9yZWFkX3VubG9jaygpOwogCWlmICghdmlydF9hZGRyKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQl2aXJ0X2FkZHIgPSBhY3BpX29zX2lvcmVtYXAocGh5c19hZGRyLCBzaXplKTsKLQkJdW5tYXAgPSAxOworCQlpZiAoIXZpcnRfYWRkcikKKwkJCXJldHVybiBBRV9CQURfQUREUkVTUzsKKwkJdW5tYXAgPSB0cnVlOwogCX0KIAogCXN3aXRjaCAod2lkdGgpIHsKQEAgLTcwMCw2ICs3MDksOCBAQAogCiAJaWYgKHVubWFwKQogCQlpb3VubWFwKHZpcnRfYWRkcik7CisJZWxzZQorCQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBBRV9PSzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwppbmRleCA0MmQzZDcyLi41YWYzNDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCkBAIC04Miw2ICs4MiwxMSBAQAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gMDsKIAorCS8qIElzIHRoaXMgZGV2aWNlIGFibGUgdG8gc3VwcG9ydCB2aWRlbyBzd2l0Y2hpbmcgPyAqLworCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPRCIsICZoX2R1bW15KSkgfHwKKwkgICAgQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET1MiLCAmaF9kdW1teSkpKQorCQl2aWRlb19jYXBzIHw9IEFDUElfVklERU9fT1VUUFVUX1NXSVRDSElORzsKKwogCS8qIElzIHRoaXMgZGV2aWNlIGFibGUgdG8gcmV0cmlldmUgYSB2aWRlbyBST00gPyAqLwogCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX1JPTSIsICZoX2R1bW15KSkpCiAJCXZpZGVvX2NhcHMgfD0gQUNQSV9WSURFT19ST01fQVZBSUxBQkxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3dha2V1cC5jIGIvZHJpdmVycy9hY3BpL3dha2V1cC5jCmluZGV4IGVkNjUwMTQuLjdiZmJlNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS93YWtldXAuYworKysgYi9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKQEAgLTg2LDggKzg2LDEyIEBACiAJCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKG5vZGUsCiAJCQkJCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlLAogCQkJCQkJICAgICAgIHdha2V1cF9saXN0KTsKLQkJaWYgKGRldmljZV9jYW5fd2FrZXVwKCZkZXYtPmRldikpCisJCWlmIChkZXZpY2VfY2FuX3dha2V1cCgmZGV2LT5kZXYpKSB7CisJCQkvKiBCdXR0b24gR1BFcyBhcmUgc3VwcG9zZWQgdG8gYmUgYWx3YXlzIGVuYWJsZWQuICovCisJCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKKwkJCQkJZGV2LT53YWtldXAuZ3BlX251bWJlcik7CiAJCQlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmRldi0+ZGV2LCB0cnVlKTsKKwkJfQogCX0KIAltdXRleF91bmxvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IDMyODgyNjMuLmI4ZDk2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTI2MCw2ICsyNjAsNyBAQAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWQwMiksIGJvYXJkX2FoY2kgfSwgLyogUEJHIEFIQ0kgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFkMDQpLCBib2FyZF9haGNpIH0sIC8qIFBCRyBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZDA2KSwgYm9hcmRfYWhjaSB9LCAvKiBQQkcgUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjMyMyksIGJvYXJkX2FoY2kgfSwgLyogREg4OXh4Q0MgQUhDSSAqLwogCiAJLyogSk1pY3JvbiAzNjAvMS8zLzUvNiwgbWF0Y2ggY2xhc3MgdG8gYXZvaWQgSURFIGZ1bmN0aW9uICovCiAJeyBQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCkBAIC0zNzksNiArMzgwLDggQEAKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4NjE0NSksIGJvYXJkX2FoY2lfbXYgfSwJLyogNjE0NSAqLwogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg2MTIxKSwgYm9hcmRfYWhjaV9tdiB9LAkvKiA2MTIxICovCiAJeyBQQ0lfREVWSUNFKDB4MWI0YiwgMHg5MTIzKSwKKwkgIC5jbGFzcyA9IFBDSV9DTEFTU19TVE9SQUdFX1NBVEFfQUhDSSwKKwkgIC5jbGFzc19tYXNrID0gMHhmZmZmZmYsCiAJICAuZHJpdmVyX2RhdGEgPSBib2FyZF9haGNpX3llc19mYnMgfSwJCQkvKiA4OHNlOTEyOCAqLwogCiAJLyogUHJvbWlzZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggYTMxZmU5Ni4uZDRlNTJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC00MTM4LDYgKzQxMzgsNyBAQAogCSAqIGRldmljZSBhbmQgY29udHJvbGxlciBhcmUgU0FUQS4KIAkgKi8KIAl7ICJQSU9ORUVSIERWRC1SVyAgRFZSVEQwOCIsCSIxLjAwIiwJQVRBX0hPUktBR0VfTk9TRVRYRkVSIH0sCisJeyAiUElPTkVFUiBEVkQtUlcgIERWUi0yMTJEIiwJIjEuMjgiLCBBVEFfSE9SS0FHRV9OT1NFVFhGRVIgfSwKIAogCS8qIEVuZCBNYXJrZXIgKi8KIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IDVkZWZjNzQuLjYwMGY2MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMTA5OSw5ICsxMDk5LDkgQEAKIAkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzZGV2LT5yZXF1ZXN0X3F1ZXVlOwogCQl2b2lkICpidWY7CiAKLQkJLyogc2V0IHRoZSBtaW4gYWxpZ25tZW50IGFuZCBwYWRkaW5nICovCi0JCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAotCQkJCQkgICAgICAgQVRBX0RNQV9QQURfU1ogLSAxKTsKKwkJc2Rldi0+c2VjdG9yX3NpemUgPSBBVEFfU0VDVF9TSVpFOworCisJCS8qIHNldCBETUEgcGFkZGluZyAqLwogCQlibGtfcXVldWVfdXBkYXRlX2RtYV9wYWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJIEFUQV9ETUFfUEFEX1NaIC0gMSk7CiAKQEAgLTExMTUsMTMgKzExMTUsMjUgQEAKIAogCQlibGtfcXVldWVfZG1hX2RyYWluKHEsIGF0YXBpX2RyYWluX25lZWRlZCwgYnVmLCBBVEFQSV9NQVhfRFJBSU4pOwogCX0gZWxzZSB7Ci0JCS8qIEFUQSBkZXZpY2VzIG11c3QgYmUgc2VjdG9yIGFsaWduZWQgKi8KIAkJc2Rldi0+c2VjdG9yX3NpemUgPSBhdGFfaWRfbG9naWNhbF9zZWN0b3Jfc2l6ZShkZXYtPmlkKTsKLQkJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsCi0JCQkJCSAgICAgICBzZGV2LT5zZWN0b3Jfc2l6ZSAtIDEpOwogCQlzZGV2LT5tYW5hZ2Vfc3RhcnRfc3RvcCA9IDE7CiAJfQogCisJLyoKKwkgKiBhdGFfcGlvX3NlY3RvcnMoKSBleHBlY3RzIGJ1ZmZlciBmb3IgZWFjaCBzZWN0b3IgdG8gbm90IGNyb3NzCisJICogcGFnZSBib3VuZGFyeS4gIEVuZm9yY2UgaXQgYnkgcmVxdWlyaW5nIGJ1ZmZlcnMgdG8gYmUgc2VjdG9yCisJICogYWxpZ25lZCwgd2hpY2ggd29ya3MgaWZmIHNlY3Rvcl9zaXplIGlzIG5vdCBsYXJnZXIgdGhhbgorCSAqIFBBR0VfU0laRS4gIEFUQVBJIGRldmljZXMgYWxzbyBuZWVkIHRoZSBhbGlnbm1lbnQgYXMKKwkgKiBJREVOVElGWV9QQUNLRVQgaXMgZXhlY3V0ZWQgYXMgQVRBX1BST1RfUElPLgorCSAqLworCWlmIChzZGV2LT5zZWN0b3Jfc2l6ZSA+IFBBR0VfU0laRSkKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX1dBUk5JTkcsCisJCQkic2VjdG9yX3NpemU9JXUgPiBQQUdFX1NJWkUsIFBJTyBtYXkgbWFsZnVuY3Rpb25cbiIsCisJCQlzZGV2LT5zZWN0b3Jfc2l6ZSk7CisKKwlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKKwkJCQkgICAgICAgc2Rldi0+c2VjdG9yX3NpemUgLSAxKTsKKwogCWlmIChkZXYtPmZsYWdzICYgQVRBX0RGTEFHX0FOKQogCQlzZXRfYml0KFNERVZfRVZUX01FRElBX0NIQU5HRSwgc2Rldi0+c3VwcG9ydGVkX2V2ZW50cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCmluZGV4IGQ3ZTU3ZGIuLjUzOGVjMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDM2NiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi45IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjEwIgogCiBzdHJ1Y3QgaHB0X2Nsb2NrIHsKIAl1OAl4ZmVyX21vZGU7CkBAIC0xNjAsOCArMTYwLDggQEAKIAogCXdoaWxlIChsaXN0W2ldICE9IE5VTEwpIHsKIAkJaWYgKCFzdHJjbXAobGlzdFtpXSwgbW9kZWxfbnVtKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcy5cbiIsCi0JCQkJbW9kZXN0ciwgbGlzdFtpXSk7CisJCQlwcl93YXJuaW5nKERSVl9OQU1FICI6ICVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzLlxuIiwKKwkJCQkgICBtb2Rlc3RyLCBsaXN0W2ldKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWkrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCmluZGV4IGVmZGQxOGIuLjRjNWI1MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDM3eCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi4xOCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi4yMiIKIAogc3RydWN0IGhwdF9jbG9jayB7CiAJdTgJeGZlcl9zcGVlZDsKQEAgLTIyOSw4ICsyMjksOCBAQAogCiAJd2hpbGUgKGxpc3RbaV0gIT0gTlVMTCkgewogCQlpZiAoIXN0cmNtcChsaXN0W2ldLCBtb2RlbF9udW0pKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzLlxuIiwKLQkJCQltb2Rlc3RyLCBsaXN0W2ldKTsKKwkJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogJXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMuXG4iLAorCQkJCSAgIG1vZGVzdHIsIGxpc3RbaV0pOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJaSsrOwpAQCAtNjQyLDcgKzY0Miw2IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgaHB0Mzc0X2ZuMV9wb3J0X29wcyA9IHsKIAkuaW5oZXJpdHMJPSAmaHB0MzcyX3BvcnRfb3BzLAogCS5jYWJsZV9kZXRlY3QJPSBocHQzNzRfZm4xX2NhYmxlX2RldGVjdCwKLQkucHJlcmVzZXQJPSBocHQzN3hfcHJlX3Jlc2V0LAogfTsKIAogLyoqCkBAIC04MDMsNyArODAyLDcgQEAKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJmhwdDMwMl9wb3J0X29wcwogCX07Ci0JLyogSFBUMzc0IC0gVURNQTEwMCwgZnVuY3Rpb24gMSB1c2VzIGRpZmZlcmVudCBwcmVyZXNldCBtZXRob2QgKi8KKwkvKiBIUFQzNzQgLSBVRE1BMTAwLCBmdW5jdGlvbiAxIHVzZXMgZGlmZmVyZW50IGNhYmxlX2RldGVjdCBtZXRob2QgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzRfZm4wID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSBBVEFfUElPNCwKQEAgLTgzOCw3ICs4MzcsOCBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM2NikgeworCXN3aXRjaCAoZGV2LT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM2NjoKIAkJLyogTWF5IGJlIGEgbGF0ZXIgY2hpcCBpbiBkaXNndWlzZS4gQ2hlY2sgKi8KIAkJLyogT2xkZXIgY2hpcHMgYXJlIGluIHRoZSBIUFQzNjYgZHJpdmVyLiBJZ25vcmUgdGhlbSAqLwogCQlpZiAocmV2IDwgMykKQEAgLTg2Myw1NCArODYzLDUwIEBACiAJCQljaGlwX3RhYmxlID0gJmhwdDM3MjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICJwYXRhX2hwdDM3eDogVW5rbm93biBIUFQzNjYgc3VidHlwZSwgIgorCQkJcHJfZXJyKERSVl9OQU1FICI6IFVua25vd24gSFBUMzY2IHN1YnR5cGUsICIKIAkJCSAgICAgICAicGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwgcmV2KTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChkZXYtPmRldmljZSkgewotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MjoKLQkJCS8qIDM3Mk4gaWYgcmV2ID49IDIgKi8KLQkJCWlmIChyZXYgPj0gMikKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MjsKLQkJCWNoaXBfdGFibGUgPSAmaHB0MzcyYTsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMjoKLQkJCS8qIDMwMk4gaWYgcmV2ID4gMSAqLwotCQkJaWYgKHJldiA+IDEpCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQlwcGlbMF0gPSAmaW5mb19ocHQzMDI7Ci0JCQkvKiBDaGVjayB0aGlzICovCi0JCQljaGlwX3RhYmxlID0gJmhwdDMwMjsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MToKLQkJCWlmIChyZXYgPiAxKQotCQkJCXJldHVybiAtRU5PREVWOwotCQkJcHBpWzBdID0gJmluZm9faHB0MzAyOwotCQkJY2hpcF90YWJsZSA9ICZocHQzNzE7Ci0JCQkvKgotCQkJICogU2luZ2xlIGNoYW5uZWwgZGV2aWNlLCBtYXN0ZXIgaXMgbm90IHByZXNlbnQKLQkJCSAqIGJ1dCB0aGUgQklPUyAob3IgdXMgZm9yIG5vbiB4ODYpIG11c3QgbWFyayBpdAotCQkJICogYWJzZW50Ci0JCQkgKi8KLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOwotCQkJbWNyMSAmPSB+MHgwNDsKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIG1jcjEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzc0OgotCQkJY2hpcF90YWJsZSA9ICZocHQzNzQ7Ci0JCQlpZiAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKQotCQkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4wOwotCQkJZWxzZQotCQkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4xOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAicGF0YV9ocHQzN3g6IFBDSSB0YWJsZSBpcyBib2d1cywgcGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwKLQkJCSAgICAgICBkZXYtPmRldmljZSk7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzI6CisJCS8qIDM3Mk4gaWYgcmV2ID49IDIgKi8KKwkJaWYgKHJldiA+PSAyKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXBwaVswXSA9ICZpbmZvX2hwdDM3MjsKKwkJY2hpcF90YWJsZSA9ICZocHQzNzJhOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMjoKKwkJLyogMzAyTiBpZiByZXYgPiAxICovCisJCWlmIChyZXYgPiAxKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXBwaVswXSA9ICZpbmZvX2hwdDMwMjsKKwkJLyogQ2hlY2sgdGhpcyAqLworCQljaGlwX3RhYmxlID0gJmhwdDMwMjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzE6CisJCWlmIChyZXYgPiAxKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXBwaVswXSA9ICZpbmZvX2hwdDMwMjsKKwkJY2hpcF90YWJsZSA9ICZocHQzNzE7CisJCS8qCisJCSAqIFNpbmdsZSBjaGFubmVsIGRldmljZSwgbWFzdGVyIGlzIG5vdCBwcmVzZW50IGJ1dCB0aGUgQklPUworCQkgKiAob3IgdXMgZm9yIG5vbiB4ODYpIG11c3QgbWFyayBpdCBhYnNlbnQKKwkJICovCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOworCQltY3IxICY9IH4weDA0OworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDUwLCBtY3IxKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzQ6CisJCWNoaXBfdGFibGUgPSAmaHB0Mzc0OworCQlpZiAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKQorCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjA7CisJCWVsc2UKKwkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoRFJWX05BTUUgIjogUENJIHRhYmxlIGlzIGJvZ3VzLCBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAorCQkgICAgICAgZGV2LT5kZXZpY2UpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJLyogT2sgc28gdGhpcyBpcyBhIGNoaXAgd2Ugc3VwcG9ydCAqLwogCkBAIC05NTcsOCArOTUzLDcgQEAKIAkJdTggc3I7CiAJCXUzMiB0b3RhbCA9IDA7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgInBhdGFfaHB0Mzd4OiBCSU9TIGhhcyBub3Qgc2V0IHRpbWluZyBjbG9ja3MuXG4iKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiBCSU9TIGhhcyBub3Qgc2V0IHRpbWluZyBjbG9ja3MuXG4iKTsKIAogCQkvKiBUaGlzIGlzIHRoZSBwcm9jZXNzIHRoZSBIUFQzNzEgQklPUyBpcyByZXBvcnRlZCB0byB1c2UgKi8KIAkJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CkBAIC0xMDE0LDcgKzEwMDksNyBAQAogCQkJCQkgICAgICAgKGZfaGlnaCA8PCAxNikgfCBmX2xvdyB8IDB4MTAwKTsKIAkJfQogCQlpZiAoYWRqdXN0ID09IDgpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicGF0YV9ocHQzN3g6IERQTEwgZGlkIG5vdCBzdGFiaWxpemUhXG4iKTsKKwkJCXByX2VycihEUlZfTkFNRSAiOiBEUExMIGRpZCBub3Qgc3RhYmlsaXplIVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCQlpZiAoZHBsbCA9PSAzKQpAQCAtMTAyMiw4ICsxMDE3LDggQEAKIAkJZWxzZQogCQkJcHJpdmF0ZV9kYXRhID0gKHZvaWQgKilocHQzN3hfdGltaW5nc181MDsKIAotCQlwcmludGsoS0VSTl9JTkZPICJwYXRhX2hwdDM3eDogYnVzIGNsb2NrICVkTUh6LCB1c2luZyAlZE1IeiBEUExMLlxuIiwKLQkJICAgICAgIE1IeltjbG9ja19zbG90XSwgTUh6W2RwbGxdKTsKKwkJcHJfaW5mbyhEUlZfTkFNRSAiOiBidXMgY2xvY2sgJWRNSHosIHVzaW5nICVkTUh6IERQTEwuXG4iLAorCQkJTUh6W2Nsb2NrX3Nsb3RdLCBNSHpbZHBsbF0pOwogCX0gZWxzZSB7CiAJCXByaXZhdGVfZGF0YSA9ICh2b2lkICopY2hpcF90YWJsZS0+Y2xvY2tzW2Nsb2NrX3Nsb3RdOwogCQkvKgpAQCAtMTAzNiw4ICsxMDMxLDkgQEAKIAkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MF8zMzsKIAkJaWYgKGNsb2NrX3Nsb3QgPCAyICYmIHBwaVswXSA9PSAmaW5mb19ocHQzNzBhKQogCQkJcHBpWzBdID0gJmluZm9faHB0MzcwYV8zMzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGF0YV9ocHQzN3g6ICVzIHVzaW5nICVkTUh6IGJ1cyBjbG9jay5cbiIsCi0JCSAgICAgICBjaGlwX3RhYmxlLT5uYW1lLCBNSHpbY2xvY2tfc2xvdF0pOworCisJCXByX2luZm8oRFJWX05BTUUgIjogJXMgdXNpbmcgJWRNSHogYnVzIGNsb2NrLlxuIiwKKwkJCWNoaXBfdGFibGUtPm5hbWUsIE1IeltjbG9ja19zbG90XSk7CiAJfQogCiAJLyogTm93IGtpY2sgb2ZmIEFUQSBzZXQgdXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKaW5kZXggZDIyMzliYi4uZWNhNjhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzeDJuIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjEzIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjE0IgogCiBlbnVtIHsKIAlIUFRfUENJX0ZBU1QJPQkoMSA8PCAzMSksCkBAIC00MTgsNyArNDE4LDcgQEAKIAkJdTE2IHNyOwogCQl1MzIgdG90YWwgPSAwOwogCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgInBhdGFfaHB0M3gybjogQklPUyBjbG9jayBkYXRhIG5vdCBzZXQuXG4iKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiBCSU9TIGNsb2NrIGRhdGEgbm90IHNldC5cbiIpOwogCiAJCS8qIFRoaXMgaXMgdGhlIHByb2Nlc3MgdGhlIEhQVDM3MSBCSU9TIGlzIHJlcG9ydGVkIHRvIHVzZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKQEAgLTUyOCw4ICs1MjgsNyBAQAogCQlwcGlbMF0gPSAmaW5mb19ocHQzNzJuOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJwYXRhX2hwdDN4Mm46IFBDSSB0YWJsZSBpcyBib2d1cyBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAorCQlwcl9lcnIoRFJWX05BTUUgIjogUENJIHRhYmxlIGlzIGJvZ3VzLCBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAogCQkgICAgICAgZGV2LT5kZXZpY2UpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC01NzksMTIgKzU3OCwxMSBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg1QywgKGZfaGlnaCA8PCAxNikgfCBmX2xvdyk7CiAJfQogCWlmIChhZGp1c3QgPT0gOCkgewotCQlwcmludGsoS0VSTl9FUlIgInBhdGFfaHB0M3gybjogRFBMTCBkaWQgbm90IHN0YWJpbGl6ZSFcbiIpOworCQlwcl9lcnIoRFJWX05BTUUgIjogRFBMTCBkaWQgbm90IHN0YWJpbGl6ZSFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJwYXRhX2hwdDM3eDogYnVzIGNsb2NrICVkTUh6LCB1c2luZyA2Nk1IeiBEUExMLlxuIiwKLQkgICAgICAgcGNpX21oeik7CisJcHJfaW5mbyhEUlZfTkFNRSAiOiBidXMgY2xvY2sgJWRNSHosIHVzaW5nIDY2TUh6IERQTEwuXG4iLCBwY2lfbWh6KTsKIAogCS8qCiAJICogU2V0IG91ciBwcml2YXRlIGRhdGEgdXAuIFdlIG9ubHkgbmVlZCBhIGZldyBmbGFncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwppbmRleCA4Y2M1MzZlLi5kN2Q4MDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwpAQCAtNjEwLDcgKzYxMCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbXBjNTJ4eF9hdGFfcG9ydF9vcHMgPSB7Ci0JLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5zZmZfZGV2X3NlbGVjdAkJPSBtcGM1Mnh4X2F0YV9kZXZfc2VsZWN0LAogCS5zZXRfcGlvbW9kZQkJPSBtcGM1Mnh4X2F0YV9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gbXBjNTJ4eF9hdGFfc2V0X2RtYW1vZGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jIGIvZHJpdmVycy9hdG0vaWR0NzcxMDUuYwppbmRleCBiY2E5Y2I4Li40ODdhNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkdDc3MTA1X3ByaXZfbG9jaywgZmxhZ3MpOwogCWlmIChhcmcgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZQUklWKGRldiktPnN0YXRzLAorCXJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCAmc3RhdHMsCiAJCSAgICBzaXplb2Yoc3RydWN0IGlkdDc3MTA1X3N0YXRzKSkgPyAtRUZBVUxUIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwppbmRleCA3M2ZiMWM0Li4yNWVmMWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYworKysgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwpAQCAtODY2LDggKzg2Niw5IEBACiAJfQogCiAJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGVhZGVyKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IgJiYgbmV0X3JhdGVsaW1pdCgpKSB7Ci0JCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHBvcGVuKClcbiIpOworCWlmICghc2tiKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBwb3BlbigpXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwppbmRleCA2NTY0OTNhLi40MjYxNWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKQEAgLTQwNywxMiArNDA3LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIE1heWJlIHRoZSBwYXJlbnQgaXMgbm93IGFibGUgdG8gc3VzcGVuZC4gKi8KIAlpZiAocGFyZW50ICYmICFwYXJlbnQtPnBvd2VyLmlnbm9yZV9jaGlsZHJlbiAmJiAhZGV2LT5wb3dlci5pcnFfc2FmZSkgewotCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnBvd2VyLmxvY2spOwogCi0JCXBtX3JlcXVlc3RfaWRsZShwYXJlbnQpOworCQlzcGluX2xvY2soJnBhcmVudC0+cG93ZXIubG9jayk7CisJCXJwbV9pZGxlKHBhcmVudCwgUlBNX0FTWU5DKTsKKwkJc3Bpbl91bmxvY2soJnBhcmVudC0+cG93ZXIubG9jayk7CiAKLQkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkZXYtPnBvd2VyLmxvY2spOwogCX0KIAogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCmluZGV4IGQ3ZjQ2M2QuLjQwNTI4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQpAQCAtMzksNCArMzksNCBAQAogb2JqLSQoQ09ORklHX0JMS19ERVZfRFJCRCkgICAgICs9IGRyYmQvCiBvYmotJChDT05GSUdfQkxLX0RFVl9SQkQpICAgICArPSByYmQubwogCi1zd2ltX21vZC1vYmpzCTo9IHN3aW0ubyBzd2ltX2FzbS5vCitzd2ltX21vZC15CTo9IHN3aW0ubyBzd2ltX2FzbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9NYWtlZmlsZSBiL2RyaXZlcnMvYmxvY2svYW9lL01ha2VmaWxlCmluZGV4IGU3NmQ5OTcuLjA2ZWE4MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL01ha2VmaWxlCkBAIC0zLDQgKzMsNCBAQAogIwogCiBvYmotJChDT05GSUdfQVRBX09WRVJfRVRIKQkrPSBhb2UubwotYW9lLW9ianMgOj0gYW9lYmxrLm8gYW9lY2hyLm8gYW9lY21kLm8gYW9lZGV2Lm8gYW9lbWFpbi5vIGFvZW5ldC5vCithb2UteSA6PSBhb2VibGsubyBhb2VjaHIubyBhb2VjbWQubyBhb2VkZXYubyBhb2VtYWluLm8gYW9lbmV0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCA1MTZkNWJiLi45Mjc5MjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0yODMzLDcgKzI4MzMsNyBAQAogCXNlY3Rvcl90IHRvdGFsX3NpemU7CiAJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiA9IE5VTEw7CiAKLQlmb3IgKGxvZ3ZvbCA9IDA7IGxvZ3ZvbCA8IENJU1NfTUFYX0xVTjsgbG9ndm9sKyspIHsKKwlmb3IgKGxvZ3ZvbCA9IDA7IGxvZ3ZvbCA8PSBoLT5oaWdoZXN0X2x1bjsgbG9ndm9sKyspIHsKIAkJaWYgKCFoLT5kcnZbbG9ndm9sXSkKIAkJCWNvbnRpbnVlOwogCQlpZiAobWVtY21wKGgtPmRydltsb2d2b2xdLT5MdW5JRCwgZHJ2LT5MdW5JRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IGI5YmEwNGYuLjc3ZmM3NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtMzI4MSw3ICszMjgxLDcgQEAKIAkJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBvcGVuZWRfYmRldltjbnRdOwogCQkJaWYgKCFiZGV2IHx8IElUWVBFKGRyaXZlX3N0YXRlW2NudF0uZmRfZGV2aWNlKSAhPSB0eXBlKQogCQkJCWNvbnRpbnVlOwotCQkJX19pbnZhbGlkYXRlX2RldmljZShiZGV2KTsKKwkJCV9faW52YWxpZGF0ZV9kZXZpY2UoYmRldiwgdHJ1ZSk7CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZvcGVuX2xvY2spOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDQ0ZTE4YzAuLmRiZjMxZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC03OCw3ICs3OCw2IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRChsb29wX2RldmljZXMpOwogc3RhdGljIERFRklORV9NVVRFWChsb29wX2RldmljZXNfbXV0ZXgpOwogCkBAIC0xNTAxLDExICsxNTAwLDkgQEAKIHsKIAlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCi0JbXV0ZXhfbG9jaygmbG9vcF9tdXRleCk7CiAJbXV0ZXhfbG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAJbG8tPmxvX3JlZmNudCsrOwogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZsb29wX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUxNSw3ICsxNTEyLDYgQEAKIAlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCWludCBlcnI7CiAKLQltdXRleF9sb2NrKCZsb29wX211dGV4KTsKIAltdXRleF9sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIAogCWlmICgtLWxvLT5sb19yZWZjbnQpCkBAIC0xNTQwLDcgKzE1MzYsNiBAQAogb3V0OgogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiBvdXRfdW5sb2NrZWQ6Ci0JbXV0ZXhfdW5sb2NrKCZsb29wX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY0MSw2ICsxNjM2LDkgQEAKIAogc3RhdGljIHZvaWQgbG9vcF9mcmVlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiB7CisJaWYgKCFsby0+bG9fcXVldWUtPnF1ZXVlX2xvY2spCisJCWxvLT5sb19xdWV1ZS0+cXVldWVfbG9jayA9ICZsby0+bG9fcXVldWUtPl9fcXVldWVfbG9jazsKKwogCWJsa19jbGVhbnVwX3F1ZXVlKGxvLT5sb19xdWV1ZSk7CiAJcHV0X2Rpc2sobG8tPmxvX2Rpc2spOwogCWxpc3RfZGVsKCZsby0+bG9fbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCBhMzJmYjQxLi5lNmZjNzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTUzLDcgKzUzLDYgQEAKICNkZWZpbmUgREJHX0JMS0RFViAgICAgIDB4MDEwMAogI2RlZmluZSBEQkdfUlggICAgICAgICAgMHgwMjAwCiAjZGVmaW5lIERCR19UWCAgICAgICAgICAweDA0MDAKLXN0YXRpYyBERUZJTkVfTVVURVgobmJkX211dGV4KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdmbGFnczsKICNlbmRpZiAvKiBOREVCVUcgKi8KIApAQCAtNzE4LDExICs3MTcsOSBAQAogCWRwcmludGsoREJHX0lPQ1RMLCAiJXM6IG5iZF9pb2N0bCBjbWQ9JXMoMHgleCkgYXJnPSVsdVxuIiwKIAkJCWxvLT5kaXNrLT5kaXNrX25hbWUsIGlvY3RsX2NtZF90b19hc2NpaShjbWQpLCBjbWQsIGFyZyk7CiAKLQltdXRleF9sb2NrKCZuYmRfbXV0ZXgpOwogCW11dGV4X2xvY2soJmxvLT50eF9sb2NrKTsKIAllcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIGxvLCBjbWQsIGFyZyk7CiAJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZuYmRfbXV0ZXgpOwogCiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKaW5kZXggOTQ5ZWQwOS4uNmRjZDU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCkBAIC0zOSw2ICszOSwxMSBAQAogCS8qIEF0aGVyb3MgQVIzMDExIHdpdGggc2ZsYXNoIGZpcm13YXJlKi8KIAl7IFVTQl9ERVZJQ0UoMHgwQ0YzLCAweDMwMDIpIH0sCiAKKwkvKiBBdGhlcm9zIEFSOTI4NSBNYWxiZWMgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMxMUQpIH0sCisKKwkvKiBBdGhlcm9zIEFSNUJCVTEyIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCisJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhFMDJDKSB9LAogCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtNDcsMzMgKzUyLDE2IEBACiAjZGVmaW5lIFVTQl9SRVFfREZVX0ROTE9BRAkxCiAjZGVmaW5lIEJVTEtfU0laRQkJNDA5NgogCi1zdHJ1Y3QgYXRoM2tfZGF0YSB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0JdTggKmZ3X2RhdGE7Ci0JdTMyIGZ3X3NpemU7Ci0JdTMyIGZ3X3NlbnQ7Ci19OwotCi1zdGF0aWMgaW50IGF0aDNrX2xvYWRfZmlybXdhcmUoc3RydWN0IGF0aDNrX2RhdGEgKmRhdGEsCi0JCQkJdW5zaWduZWQgY2hhciAqZmlybXdhcmUsCi0JCQkJaW50IGNvdW50KQorc3RhdGljIGludCBhdGgza19sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUpCiB7CiAJdTggKnNlbmRfYnVmOwogCWludCBlcnIsIHBpcGUsIGxlbiwgc2l6ZSwgc2VudCA9IDA7CisJaW50IGNvdW50ID0gZmlybXdhcmUtPnNpemU7CiAKLQlCVF9EQkcoImF0aDNrICVwIHVkZXYgJXAiLCBkYXRhLCBkYXRhLT51ZGV2KTsKKwlCVF9EQkcoInVkZXYgJXAiLCB1ZGV2KTsKIAotCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dWRldiwgMCk7Ci0KLQlpZiAoKHVzYl9jb250cm9sX21zZyhkYXRhLT51ZGV2LCBwaXBlLAotCQkJCVVTQl9SRVFfREZVX0ROTE9BRCwKLQkJCQlVU0JfVFlQRV9WRU5ET1IsIDAsIDAsCi0JCQkJZmlybXdhcmUsIDIwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCkpIDwgMCkgewotCQlCVF9FUlIoIkNhbid0IGNoYW5nZSB0byBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZXJyIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCXNlbnQgKz0gMjA7Ci0JY291bnQgLT0gMjA7CisJcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKTsKIAogCXNlbmRfYnVmID0ga21hbGxvYyhCVUxLX1NJWkUsIEdGUF9BVE9NSUMpOwogCWlmICghc2VuZF9idWYpIHsKQEAgLTgxLDEyICs2OSwyMyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwltZW1jcHkoc2VuZF9idWYsIGZpcm13YXJlLT5kYXRhLCAyMCk7CisJaWYgKChlcnIgPSB1c2JfY29udHJvbF9tc2codWRldiwgcGlwZSwKKwkJCQlVU0JfUkVRX0RGVV9ETkxPQUQsCisJCQkJVVNCX1RZUEVfVkVORE9SLCAwLCAwLAorCQkJCXNlbmRfYnVmLCAyMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpKSA8IDApIHsKKwkJQlRfRVJSKCJDYW4ndCBjaGFuZ2UgdG8gbG9hZGluZyBjb25maWd1cmF0aW9uIGVyciIpOworCQlnb3RvIGVycm9yOworCX0KKwlzZW50ICs9IDIwOworCWNvdW50IC09IDIwOworCiAJd2hpbGUgKGNvdW50KSB7CiAJCXNpemUgPSBtaW5fdCh1aW50LCBjb3VudCwgQlVMS19TSVpFKTsKLQkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkYXRhLT51ZGV2LCAweDAyKTsKLQkJbWVtY3B5KHNlbmRfYnVmLCBmaXJtd2FyZSArIHNlbnQsIHNpemUpOworCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIDB4MDIpOworCQltZW1jcHkoc2VuZF9idWYsIGZpcm13YXJlLT5kYXRhICsgc2VudCwgc2l6ZSk7CiAKLQkJZXJyID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVkZXYsIHBpcGUsIHNlbmRfYnVmLCBzaXplLAorCQllcnIgPSB1c2JfYnVsa19tc2codWRldiwgcGlwZSwgc2VuZF9idWYsIHNpemUsCiAJCQkJCSZsZW4sIDMwMDApOwogCiAJCWlmIChlcnIgfHwgKGxlbiAhPSBzaXplKSkgewpAQCAtMTEyLDU3ICsxMTEsMjggQEAKIHsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgYXRoM2tfZGF0YSAqZGF0YTsKLQlpbnQgc2l6ZTsKIAogCUJUX0RCRygiaW50ZiAlcCBpZCAlcCIsIGludGYsIGlkKTsKIAogCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICE9IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRhdGEtPnVkZXYgPSB1ZGV2OwotCiAJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCAiYXRoM2stMS5mdyIsICZ1ZGV2LT5kZXYpIDwgMCkgewotCQlrZnJlZShkYXRhKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0Jc2l6ZSA9IG1heF90KHVpbnQsIGZpcm13YXJlLT5zaXplLCA0MDk2KTsKLQlkYXRhLT5md19kYXRhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEtPmZ3X2RhdGEpIHsKKwlpZiAoYXRoM2tfbG9hZF9maXJtd2FyZSh1ZGV2LCBmaXJtd2FyZSkpIHsKIAkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7Ci0JCWtmcmVlKGRhdGEpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1jcHkoZGF0YS0+ZndfZGF0YSwgZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplKTsKLQlkYXRhLT5md19zaXplID0gZmlybXdhcmUtPnNpemU7Ci0JZGF0YS0+Zndfc2VudCA9IDA7Ci0JcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRhdGEpOwotCWlmIChhdGgza19sb2FkX2Zpcm13YXJlKGRhdGEsIGRhdGEtPmZ3X2RhdGEsIGRhdGEtPmZ3X3NpemUpKSB7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JCWtmcmVlKGRhdGEtPmZ3X2RhdGEpOwotCQlrZnJlZShkYXRhKTsKIAkJcmV0dXJuIC1FSU87CiAJfQorCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDNrX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0Jc3RydWN0IGF0aDNrX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCiAJQlRfREJHKCJhdGgza19kaXNjb25uZWN0IGludGYgJXAiLCBpbnRmKTsKLQotCWtmcmVlKGRhdGEtPmZ3X2RhdGEpOwotCWtmcmVlKGRhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXRoM2tfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggMWRhNzczZjguLjcwMGEzODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwpAQCAtMTAyLDYgKzEwMiwxMiBAQAogCS8qIEF0aGVyb3MgMzAxMSB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLwogCXsgVVNCX0RFVklDRSgweDBjZjMsIDB4MzAwMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LAogCisJLyogQXRoZXJvcyBBUjkyODUgTWFsYmVjIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCisJeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgzMTFkKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCisKKwkvKiBBdGhlcm9zIEFSNUJCVTEyIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCisJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhlMDJjKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCisKIAkvKiBCcm9hZGNvbSBCQ00yMDM1ICovCiAJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDM1KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NPX01UVSB9LAogCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjAwYSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1dST05HX1NDT19NVFUgfSwKQEAgLTgyNiw3ICs4MzIsNyBAQAogCiAJaWYgKGhkZXYtPmNvbm5faGFzaC5zY29fbnVtID4gMCkgewogCQlpZiAoIXRlc3RfYml0KEJUVVNCX0RJRF9JU09fUkVTVU1FLCAmZGF0YS0+ZmxhZ3MpKSB7Ci0JCQllcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGF0YS0+aXNvYyk7CisJCQllcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGF0YS0+aXNvYyA/IGRhdGEtPmlzb2MgOiBkYXRhLT5pbnRmKTsKIAkJCWlmIChlcnIgPCAwKSB7CiAJCQkJY2xlYXJfYml0KEJUVVNCX0lTT0NfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKIAkJCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pc29jX2FuY2hvcik7CkBAIC04NTUsNyArODYxLDcgQEAKIAogCQlfX3NldF9pc29jX2ludGVyZmFjZShoZGV2LCAwKTsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCVFVTQl9ESURfSVNPX1JFU1VNRSwgJmRhdGEtPmZsYWdzKSkKLQkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkYXRhLT5pc29jKTsKKwkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkYXRhLT5pc29jID8gZGF0YS0+aXNvYyA6IGRhdGEtPmludGYpOwogCX0KIH0KIApAQCAtMTAzOCw4ICsxMDQ0LDYgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7CiAKLQl1c2JfZW5hYmxlX2F1dG9zdXNwZW5kKGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwppbmRleCAxNDAzM2EzNi4uZTJjNDhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jCisrKyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwpAQCAtNDA5LDcgKzQwOSw4IEBACiAJfQogCiAJRU5TVVJFKGRyaXZlX3N0YXR1cywgQ0RDX0RSSVZFX1NUQVRVUyApOwotCUVOU1VSRShtZWRpYV9jaGFuZ2VkLCBDRENfTUVESUFfQ0hBTkdFRCk7CisJaWYgKGNkby0+Y2hlY2tfZXZlbnRzID09IE5VTEwgJiYgY2RvLT5tZWRpYV9jaGFuZ2VkID09IE5VTEwpCisJCSpjaGFuZ2VfY2FwYWJpbGl0eSA9IH4oQ0RDX01FRElBX0NIQU5HRUQgfCBDRENfU0VMRUNUX0RJU0MpOwogCUVOU1VSRSh0cmF5X21vdmUsIENEQ19DTE9TRV9UUkFZIHwgQ0RDX09QRU5fVFJBWSk7CiAJRU5TVVJFKGxvY2tfZG9vciwgQ0RDX0xPQ0spOwogCUVOU1VSRShzZWxlY3Rfc3BlZWQsIENEQ19TRUxFQ1RfU1BFRUQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IDViYzc2NWQuLjgyMzhmODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKQEAgLTMwLDYgKzMwLDcgQEAKIG9iai0kKENPTkZJR19BTUlHQV9CVUlMVElOX1NFUklBTCkgKz0gYW1pc2VyaWFsLm8KIG9iai0kKENPTkZJR19TWCkJCSs9IHN4Lm8gZ2VuZXJpY19zZXJpYWwubwogb2JqLSQoQ09ORklHX1JJTykJCSs9IHJpby8gZ2VuZXJpY19zZXJpYWwubworb2JqLSQoQ09ORklHX1ZJUlRJT19DT05TT0xFKQkrPSB2aXJ0aW9fY29uc29sZS5vCiBvYmotJChDT05GSUdfUkFXX0RSSVZFUikJKz0gcmF3Lm8KIG9iai0kKENPTkZJR19TR0lfU05TQykJCSs9IHNuc2MubyBzbnNjX2V2ZW50Lm8KIG9iai0kKENPTkZJR19NU1BFQykJCSs9IG1zcGVjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZwppbmRleCBmY2Q4NjdkLi5kOGIxYjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCkBAIC01MCw3ICs1MCw3IEBACiAKIGNvbmZpZyBBR1BfQU1ECiAJdHJpc3RhdGUgIkFNRCBJcm9uZ2F0ZSwgNzYxLCBhbmQgNzYyIGNoaXBzZXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFHUCAmJiAoWDg2XzMyIHx8IEFMUEhBKQorCWRlcGVuZHMgb24gQUdQICYmIFg4Nl8zMgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGdpdmVzIHlvdSBBR1Agc3VwcG9ydCBmb3IgdGhlIEdMWCBjb21wb25lbnQgb2YKIAkgIFggb24gQU1EIElyb25nYXRlLCA3NjEsIGFuZCA3NjIgY2hpcHNldHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCmluZGV4IGIxYjQzNjIuLjQ1NjgxYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCkBAIC00MSwyMiArNDEsOCBAQAogCWlmIChwYWdlX21hcC0+cmVhbCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotI2lmbmRlZiBDT05GSUdfWDg2Ci0JU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlX21hcC0+cmVhbCkpOwotCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwotCXBhZ2VfbWFwLT5yZW1hcHBlZCA9IGlvcmVtYXBfbm9jYWNoZSh2aXJ0X3RvX3BoeXMocGFnZV9tYXAtPnJlYWwpLAotCQkJCQkgICAgUEFHRV9TSVpFKTsKLQlpZiAocGFnZV9tYXAtPnJlbWFwcGVkID09IE5VTEwpIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZV9tYXAtPnJlYWwpOwotCQlwYWdlX21hcC0+cmVhbCA9IE5VTEw7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlnbG9iYWxfY2FjaGVfZmx1c2goKTsKLSNlbHNlCiAJc2V0X21lbW9yeV91YygodW5zaWduZWQgbG9uZylwYWdlX21hcC0+cmVhbCwgMSk7CiAJcGFnZV9tYXAtPnJlbWFwcGVkID0gcGFnZV9tYXAtPnJlYWw7Ci0jZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBQQUdFX1NJWkUgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7IGkrKykgewogCQl3cml0ZWwoYWdwX2JyaWRnZS0+c2NyYXRjaF9wYWdlLCBwYWdlX21hcC0+cmVtYXBwZWQraSk7CkBAIC02OCwxMiArNTQsNyBAQAogCiBzdGF0aWMgdm9pZCBhbWRfZnJlZV9wYWdlX21hcChzdHJ1Y3QgYW1kX3BhZ2VfbWFwICpwYWdlX21hcCkKIHsKLSNpZm5kZWYgQ09ORklHX1g4NgotCWlvdW5tYXAocGFnZV9tYXAtPnJlbWFwcGVkKTsKLQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocGFnZV9tYXAtPnJlYWwpKTsKLSNlbHNlCiAJc2V0X21lbW9yeV93YigodW5zaWduZWQgbG9uZylwYWdlX21hcC0+cmVhbCwgMSk7Ci0jZW5kaWYKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHBhZ2VfbWFwLT5yZWFsKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKaW5kZXggOTI1MmU4NS4uNzgwNDk4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCkBAIC03NzMsMTggKzc3MywyMyBAQAogI2Vsc2UKIAkJCXByaW50ayhLRVJOX0lORk8gUEZYICJZb3UgY2FuIGJvb3Qgd2l0aCBhZ3A9dHJ5X3Vuc3VwcG9ydGVkXG4iKTsKICNlbmRpZgorCQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZ3BfYW1kNjRfcGNpX2RyaXZlcik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCiAJCS8qIEZpcnN0IGNoZWNrIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgQU1ENjQgTkIgKi8KLQkJaWYgKCFwY2lfZGV2X3ByZXNlbnQoYW1kX25iX21pc2NfaWRzKSkKKwkJaWYgKCFwY2lfZGV2X3ByZXNlbnQoYW1kX25iX21pc2NfaWRzKSkgeworCQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZ3BfYW1kNjRfcGNpX2RyaXZlcik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQogCiAJCS8qIExvb2sgZm9yIGFueSBBR1AgYnJpZGdlICovCiAJCWFncF9hbWQ2NF9wY2lfZHJpdmVyLmlkX3RhYmxlID0gYWdwX2FtZDY0X3BjaV9wcm9taXNjX3RhYmxlOwogCQllcnIgPSBkcml2ZXJfYXR0YWNoKCZhZ3BfYW1kNjRfcGNpX2RyaXZlci5kcml2ZXIpOwotCQlpZiAoZXJyID09IDAgJiYgYWdwX2JyaWRnZXNfZm91bmQgPT0gMCkKKwkJaWYgKGVyciA9PSAwICYmIGFncF9icmlkZ2VzX2ZvdW5kID09IDApIHsKKwkJCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYWdwX2FtZDY0X3BjaV9kcml2ZXIpOwogCQkJZXJyID0gLUVOT0RFVjsKKwkJfQogCX0KIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKaW5kZXggODU3ZGYxMC4uYjBhMGRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCkBAIC03NzQsMjAgKzc3NCwxNCBAQAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJbnRlbCAlcyBDaGlwc2V0XG4iLCBpbnRlbF9hZ3BfY2hpcHNldHNbaV0ubmFtZSk7CiAKIAkvKgotCSogSWYgdGhlIGRldmljZSBoYXMgbm90IGJlZW4gcHJvcGVybHkgc2V0dXAsIHRoZSBmb2xsb3dpbmcgd2lsbCBjYXRjaAotCSogdGhlIHByb2JsZW0gYW5kIHNob3VsZCBzdG9wIHRoZSBzeXN0ZW0gZnJvbSBjcmFzaGluZy4KLQkqIDIwMDMwNjEwIC0gaGFtaXNoQHpvdC5vcmcKLQkqLwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBlbmFibGUgUENJIGRldmljZVxuIik7Ci0JCWFncF9wdXRfYnJpZGdlKGJyaWRnZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qCiAJKiBUaGUgZm9sbG93aW5nIGZpeGVzIHRoZSBjYXNlIHdoZXJlIHRoZSBCSU9TIGhhcyAiZm9yZ290dGVuIiB0bwogCSogcHJvdmlkZSBhbiBhZGRyZXNzIHJhbmdlIGZvciB0aGUgR0FSVC4KIAkqIDIwMDMwNjEwIC0gaGFtaXNoQHpvdC5vcmcKKwkqIFRoaXMgaGFwcGVucyBiZWZvcmUgcGNpX2VuYWJsZV9kZXZpY2UoKSBpbnRlbnRpb25hbGx5OworCSogY2FsbGluZyBwY2lfZW5hYmxlX2RldmljZSgpIGJlZm9yZSBhc3NpZ25pbmcgdGhlIHJlc291cmNlCisJKiB3aWxsIHJlc3VsdCBpbiB0aGUgR0FSVCBiZWluZyBkaXNhYmxlZCBvbiBtYWNoaW5lcyB3aXRoIHN1Y2gKKwkqIEJJT1NzICh0aGUgR0FSVCBlbmRzIHVwIHdpdGggYSBCQVIgc3RhcnRpbmcgYXQgMCwgd2hpY2gKKwkqIGNvbmZsaWN0cyBhIGxvdCBvZiBvdGhlciBkZXZpY2VzKS4KIAkqLwogCXIgPSAmcGRldi0+cmVzb3VyY2VbMF07CiAJaWYgKCFyLT5zdGFydCAmJiByLT5lbmQpIHsKQEAgLTc5OCw2ICs3OTIsMTcgQEAKIAkJfQogCX0KIAorCS8qCisJKiBJZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBwcm9wZXJseSBzZXR1cCwgdGhlIGZvbGxvd2luZyB3aWxsIGNhdGNoCisJKiB0aGUgcHJvYmxlbSBhbmQgc2hvdWxkIHN0b3AgdGhlIHN5c3RlbSBmcm9tIGNyYXNoaW5nLgorCSogMjAwMzA2MTAgLSBoYW1pc2hAem90Lm9yZworCSovCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJYWdwX3B1dF9icmlkZ2UoYnJpZGdlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJLyogRmlsbCBpbiB0aGUgbW9kZSByZWdpc3RlciAqLwogCWlmIChjYXBfcHRyKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuaCBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmgKaW5kZXggYzE5NWJmZS4uNWZlZWJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuaAorKysgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5oCkBAIC0xMzAsNiArMTMwLDcgQEAKICNkZWZpbmUgSU5URUxfR01DSF9HTVNfU1RPTEVOXzM1Mk0JKDB4ZCA8PCA0KQogCiAjZGVmaW5lIEk5MTVfSUZQQUREUiAgICAweDYwCisjZGVmaW5lIEk4MzBfSElDICAgICAgICAweDcwCiAKIC8qIEludGVsIDk2NUcgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEk5NjVfTVNBQyAweDYyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYwppbmRleCBmYWIzZDMyLi4wZDA5YjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlICJhZ3AuaCIKICNpbmNsdWRlICJpbnRlbC1hZ3AuaCIKQEAgLTcwLDEyICs3MSw4IEBACiAJdTMyIF9faW9tZW0gKmd0dDsJCS8qIEk5MTVHICovCiAJYm9vbCBjbGVhcl9mYWtlX2FncDsgLyogb24gZmlyc3QgYWNjZXNzIHZpYSBhZ3AsIGZpbGwgd2l0aCBzY3JhdGNoICovCiAJaW50IG51bV9kY2FjaGVfZW50cmllczsKLQl1bmlvbiB7Ci0JCXZvaWQgX19pb21lbSAqaTl4eF9mbHVzaF9wYWdlOwotCQl2b2lkICppOHh4X2ZsdXNoX3BhZ2U7Ci0JfTsKKwl2b2lkIF9faW9tZW0gKmk5eHhfZmx1c2hfcGFnZTsKIAljaGFyICppODF4X2d0dF90YWJsZTsKLQlzdHJ1Y3QgcGFnZSAqaTh4eF9wYWdlOwogCXN0cnVjdCByZXNvdXJjZSBpZnBfcmVzb3VyY2U7CiAJaW50IHJlc291cmNlX3ZhbGlkOwogCXN0cnVjdCBwYWdlICpzY3JhdGNoX3BhZ2U7CkBAIC03MjIsMjggKzcxOSw2IEBACiAKIHN0YXRpYyB2b2lkIGk4MzBfY2xlYW51cCh2b2lkKQogewotCWlmIChpbnRlbF9wcml2YXRlLmk4eHhfZmx1c2hfcGFnZSkgewotCQlrdW5tYXAoaW50ZWxfcHJpdmF0ZS5pOHh4X2ZsdXNoX3BhZ2UpOwotCQlpbnRlbF9wcml2YXRlLmk4eHhfZmx1c2hfcGFnZSA9IE5VTEw7Ci0JfQotCi0JX19mcmVlX3BhZ2UoaW50ZWxfcHJpdmF0ZS5pOHh4X3BhZ2UpOwotCWludGVsX3ByaXZhdGUuaTh4eF9wYWdlID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgaW50ZWxfaTgzMF9zZXR1cF9mbHVzaCh2b2lkKQotewotCS8qIHJldHVybiBpZiB3ZSd2ZSBhbHJlYWR5IHNldCB0aGUgZmx1c2ggbWVjaGFuaXNtIHVwICovCi0JaWYgKGludGVsX3ByaXZhdGUuaTh4eF9wYWdlKQotCQlyZXR1cm47Ci0KLQlpbnRlbF9wcml2YXRlLmk4eHhfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbnRlbF9wcml2YXRlLmk4eHhfcGFnZSkKLQkJcmV0dXJuOwotCi0JaW50ZWxfcHJpdmF0ZS5pOHh4X2ZsdXNoX3BhZ2UgPSBrbWFwKGludGVsX3ByaXZhdGUuaTh4eF9wYWdlKTsKLQlpZiAoIWludGVsX3ByaXZhdGUuaTh4eF9mbHVzaF9wYWdlKQotCQlpODMwX2NsZWFudXAoKTsKIH0KIAogLyogVGhlIGNoaXBzZXRfZmx1c2ggaW50ZXJmYWNlIG5lZWRzIHRvIGdldCBkYXRhIHRoYXQgaGFzIGFscmVhZHkgYmVlbgpAQCAtNzU4LDE0ICs3MzMsMjcgQEAKICAqLwogc3RhdGljIHZvaWQgaTgzMF9jaGlwc2V0X2ZsdXNoKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50ICpwZyA9IGludGVsX3ByaXZhdGUuaTh4eF9mbHVzaF9wYWdlOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOwogCi0JbWVtc2V0KHBnLCAwLCAxMDI0KTsKKwkvKiBGb3JjaWJseSBldmljdCBldmVyeXRoaW5nIGZyb20gdGhlIENQVSB3cml0ZSBidWZmZXJzLgorCSAqIGNsZmx1c2ggYXBwZWFycyB0byBiZSBpbnN1ZmZpY2llbnQuCisJICovCisJd2JpbnZkX29uX2FsbF9jcHVzKCk7CiAKLQlpZiAoY3B1X2hhc19jbGZsdXNoKQotCQljbGZsdXNoX2NhY2hlX3JhbmdlKHBnLCAxMDI0KTsKLQllbHNlIGlmICh3YmludmRfb25fYWxsX2NwdXMoKSAhPSAwKQotCQlwcmludGsoS0VSTl9FUlIgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBjYWNoZSBmbHVzaC5cbiIpOworCS8qIE5vdyB3ZSd2ZSBvbmx5IHNlZW4gZG9jdW1lbnRzIGZvciB0aGlzIG1hZ2ljIGJpdCBvbiA4NTVHTSwKKwkgKiB3ZSBob3BlIGl0IGV4aXN0cyBmb3IgdGhlIG90aGVyIGdlbjIgY2hpcHNldHMuLi4KKwkgKgorCSAqIEFsc28gd29ya3MgYXMgYWR2ZXJ0aXNlZCBvbiBteSA4NDVHLgorCSAqLworCXdyaXRlbChyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODMwX0hJQykgfCAoMTw8MzEpLAorCSAgICAgICBpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODMwX0hJQyk7CisKKwl3aGlsZSAocmVhZGwoaW50ZWxfcHJpdmF0ZS5yZWdpc3RlcnMrSTgzMF9ISUMpICYgKDE8PDMxKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCWJyZWFrOworCisJCXVkZWxheSg1MCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpODMwX3dyaXRlX2VudHJ5KGRtYV9hZGRyX3QgYWRkciwgdW5zaWduZWQgaW50IGVudHJ5LApAQCAtODQ5LDggKzgzNyw2IEBACiAKIAlpbnRlbF9wcml2YXRlLmd0dF9idXNfYWRkciA9IHJlZ19hZGRyICsgSTgxMF9QVEVfQkFTRTsKIAotCWludGVsX2k4MzBfc2V0dXBfZmx1c2goKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGI2YWU2ZTkuLjc4NTVmOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0zMjAsNiArMzIwLDcgQEAKIHN0YXRpYyBpbnQgYWRkX3NtaShzdHJ1Y3Qgc21pX2luZm8gKnNtaSk7CiBzdGF0aWMgaW50IHRyeV9zbWlfaW5pdChzdHJ1Y3Qgc21pX2luZm8gKnNtaSk7CiBzdGF0aWMgdm9pZCBjbGVhbnVwX29uZV9zaShzdHJ1Y3Qgc21pX2luZm8gKnRvX2NsZWFuKTsKK3N0YXRpYyB2b2lkIGNsZWFudXBfaXBtaV9zaSh2b2lkKTsKIAogc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKHhhY3Rpb25fbm90aWZpZXJfbGlzdCk7CiBzdGF0aWMgaW50IHJlZ2lzdGVyX3hhY3Rpb25fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKQEAgLTM0NTAsMTYgKzM0NTEsNyBAQAogCW11dGV4X2xvY2soJnNtaV9pbmZvc19sb2NrKTsKIAlpZiAodW5sb2FkX3doZW5fZW1wdHkgJiYgbGlzdF9lbXB0eSgmc21pX2luZm9zKSkgewogCQltdXRleF91bmxvY2soJnNtaV9pbmZvc19sb2NrKTsKLSNpZmRlZiBDT05GSUdfUENJCi0JCWlmIChwY2lfcmVnaXN0ZXJlZCkKLQkJCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXBtaV9wY2lfZHJpdmVyKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BQQ19PRgotCQlpZiAob2ZfcmVnaXN0ZXJlZCkKLQkJCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpcG1pX29mX3BsYXRmb3JtX2RyaXZlcik7Ci0jZW5kaWYKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJmlwbWlfZHJpdmVyLmRyaXZlcik7CisJCWNsZWFudXBfaXBtaV9zaSgpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAogCQkgICAgICAgIlVuYWJsZSB0byBmaW5kIGFueSBTeXN0ZW0gSW50ZXJmYWNlKHMpXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCA3NzcxODFhLi5iY2JiYzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTgzMCw4ICs4MzAsNyBAQAogCQkJICAgIHRlc3RfYml0KElTX0FOWV9UMSwgJmRldi0+ZmxhZ3MpKSkgewogCQkJCURFQlVHUCg0LCBkZXYsICJQZXJmb3JtIEFVVE9QUFNcbiIpOwogCQkJCXNldF9iaXQoSVNfQVVUT1BQU19BQ1QsICZkZXYtPmZsYWdzKTsKLQkJCQlwdHNyZXEucHJvdG9jb2wgPSBwdHNyZXEucHJvdG9jb2wgPQotCQkJCSAgICAoMHgwMSA8PCBkZXYtPnByb3RvKTsKKwkJCQlwdHNyZXEucHJvdG9jb2wgPSAoMHgwMSA8PCBkZXYtPnByb3RvKTsKIAkJCQlwdHNyZXEuZmxhZ3MgPSAweDAxOwogCQkJCXB0c3JlcS5wdHMxID0gMHgwMDsKIAkJCQlwdHNyZXEucHRzMiA9IDB4MDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYwppbmRleCA5NGI4ZWI0Li40NDQxNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmMKQEAgLTc4LDcgKzc4LDYgQEAKIHN0YXRpYyBpbnQgaXB3aXJlbGVzc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHZvaWQgKnByaXZfZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X2RldiAqaXB3ID0gcHJpdl9kYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzb3VyY2U7CiAJaW50IHJldDsKIAogCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKQEAgLTkyLDkgKzkxLDEyIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlvX3Jlc291cmNlID0gcmVxdWVzdF9yZWdpb24ocF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCwKLQkJCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVswXSksCi0JCQkJSVBXSVJFTEVTU19QQ0NBUkRfTkFNRSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkJICAgIHJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzBdKSwKKwkJCSAgICBJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDsKKwl9CiAKIAlwX2Rldi0+cmVzb3VyY2VbMl0tPmZsYWdzIHw9CiAJCVdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRTsKQEAgLTEwNSwyMiArMTA3LDI1IEBACiAKIAlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LCBwX2Rldi0+cmVzb3VyY2VbMl0sIHBfZGV2LT5jYXJkX2FkZHIpOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBleGl0MjsKKwkJZ290byBleGl0MTsKIAogCWlwdy0+aXNfdjJfY2FyZCA9IHJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSA9PSAweDEwMDsKIAotCWlwdy0+YXR0cl9tZW1vcnkgPSBpb3JlbWFwKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCisJaXB3LT5jb21tb25fbWVtb3J5ID0gaW9yZW1hcChwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAogCQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSk7Ci0JcmVxdWVzdF9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCi0JCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVsyXSksCi0JCQlJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSwKKwkJCQlJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDI7CisJfQogCiAJcF9kZXYtPnJlc291cmNlWzNdLT5mbGFncyB8PSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9BTSB8CiAJCQkJCVdJTl9FTkFCTEU7CiAJcF9kZXYtPnJlc291cmNlWzNdLT5lbmQgPSAwOyAvKiB0aGlzIHVzZWQgdG8gYmUgMHgxMDAwICovCiAJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KHBfZGV2LCBwX2Rldi0+cmVzb3VyY2VbM10sIDApOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBleGl0MjsKKwkJZ290byBleGl0MzsKIAogCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIHBfZGV2LT5yZXNvdXJjZVszXSwgMCk7CiAJaWYgKHJldCAhPSAwKQpAQCAtMTI4LDIzICsxMzMsMjggQEAKIAogCWlwdy0+YXR0cl9tZW1vcnkgPSBpb3JlbWFwKHBfZGV2LT5yZXNvdXJjZVszXS0+c3RhcnQsCiAJCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbM10pKTsKLQlyZXF1ZXN0X21lbV9yZWdpb24ocF9kZXYtPnJlc291cmNlWzNdLT5zdGFydCwKLQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzNdKSwKLQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVszXS0+c3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbM10pLAorCQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBleGl0NDsKKwl9CiAKIAlyZXR1cm4gMDsKIAorZXhpdDQ6CisJaW91bm1hcChpcHctPmF0dHJfbWVtb3J5KTsKIGV4aXQzOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMl0pKTsKIGV4aXQyOgotCWlmIChpcHctPmNvbW1vbl9tZW1vcnkpIHsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCi0JCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMl0pKTsKLQkJaW91bm1hcChpcHctPmNvbW1vbl9tZW1vcnkpOwotCX0KKwlpb3VubWFwKGlwdy0+Y29tbW9uX21lbW9yeSk7CiBleGl0MToKLQlyZWxlYXNlX3Jlc291cmNlKGlvX3Jlc291cmNlKTsKKwlyZWxlYXNlX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMF0pKTsKK2V4aXQ6CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHBfZGV2KTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBjb25maWdfaXB3aXJlbGVzcyhzdHJ1Y3QgaXB3X2RldiAqaXB3KQpAQCAtMjE5LDYgKzIyOSw4IEBACiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfaXB3aXJlbGVzcyhzdHJ1Y3QgaXB3X2RldiAqaXB3KQogeworCXJlbGVhc2VfcmVnaW9uKGlwdy0+bGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShpcHctPmxpbmstPnJlc291cmNlWzBdKSk7CiAJaWYgKGlwdy0+Y29tbW9uX21lbW9yeSkgewogCQlyZWxlYXNlX21lbV9yZWdpb24oaXB3LT5saW5rLT5yZXNvdXJjZVsyXS0+c3RhcnQsCiAJCQkJcmVzb3VyY2Vfc2l6ZShpcHctPmxpbmstPnJlc291cmNlWzJdKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCAzNmUwZmExLi4xZjQ2ZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTM2NCwxNCArMzY0LDEyIEBACiAJCSAgICB0cG1fcHJvdGVjdGVkX29yZGluYWxfZHVyYXRpb25bb3JkaW5hbCAmCiAJCQkJCQkgICBUUE1fUFJPVEVDVEVEX09SRElOQUxfTUFTS107CiAKLQlpZiAoZHVyYXRpb25faWR4ICE9IFRQTV9VTkRFRklORUQpIHsKKwlpZiAoZHVyYXRpb25faWR4ICE9IFRQTV9VTkRFRklORUQpCiAJCWR1cmF0aW9uID0gY2hpcC0+dmVuZG9yLmR1cmF0aW9uW2R1cmF0aW9uX2lkeF07Ci0JCS8qIGlmIGR1cmF0aW9uIGlzIDAsIGl0J3MgYmVjYXVzZSBjaGlwLT52ZW5kb3IuZHVyYXRpb24gd2Fzbid0ICovCi0JCS8qIGZpbGxlZCB5ZXQsIHNvIHdlIHNldCB0aGUgbG93ZXN0IHRpbWVvdXQganVzdCB0byBnaXZlIGVub3VnaCAqLwotCQkvKiB0aW1lIGZvciB0cG1fZ2V0X3RpbWVvdXRzKCkgdG8gc3VjY2VlZCAqLwotCQlyZXR1cm4gKGR1cmF0aW9uIDw9IDAgPyBIWiA6IGR1cmF0aW9uKTsKLQl9IGVsc2UKKwlpZiAoZHVyYXRpb24gPD0gMCkKIAkJcmV0dXJuIDIgKiA2MCAqIEhaOworCWVsc2UKKwkJcmV0dXJuIGR1cmF0aW9uOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX2NhbGNfb3JkaW5hbF9kdXJhdGlvbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L2h2Yy92aXJ0aW9fY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZHJpdmVycy90dHkvaHZjL3ZpcnRpb19jb25zb2xlLmMKcmVuYW1lIHRvIGRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCmluZGV4IDg5NmEyY2UuLjg0YjE2NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L2h2Yy92aXJ0aW9fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBSdXN0eSBSdXNzZWxsLCBJQk0gQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIEFtaXQgU2hhaCA8YW1pdC5zaGFoQHJlZGhhdC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zMSw3ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSAiaHZjX2NvbnNvbGUuaCIKKyNpbmNsdWRlICIuLi90dHkvaHZjL2h2Y19jb25zb2xlLmgiCiAKIC8qCiAgKiBUaGlzIGlzIGEgZ2xvYmFsIHN0cnVjdCBmb3Igc3RvcmluZyBjb21tb24gZGF0YSBmb3IgYWxsIHRoZSBkZXZpY2VzCkBAIC0zODcsNiArMzg4LDEwIEBACiAJdW5zaWduZWQgaW50IGxlbjsKIAlpbnQgcmV0OwogCisJaWYgKCFwb3J0LT5wb3J0ZGV2KSB7CisJCS8qIERldmljZSBoYXMgYmVlbiB1bnBsdWdnZWQuICB2cXMgYXJlIGFscmVhZHkgZ29uZS4gKi8KKwkJcmV0dXJuOworCX0KIAl2cSA9IHBvcnQtPmluX3ZxOwogCWlmIChwb3J0LT5pbmJ1ZikKIAkJYnVmID0gcG9ydC0+aW5idWY7CkBAIC00NjksNiArNDc0LDEwIEBACiAJdm9pZCAqYnVmOwogCXVuc2lnbmVkIGludCBsZW47CiAKKwlpZiAoIXBvcnQtPnBvcnRkZXYpIHsKKwkJLyogRGV2aWNlIGhhcyBiZWVuIHVucGx1Z2dlZC4gIHZxcyBhcmUgYWxyZWFkeSBnb25lLiAqLworCQlyZXR1cm47CisJfQogCXdoaWxlICgoYnVmID0gdmlydHF1ZXVlX2dldF9idWYocG9ydC0+b3V0X3ZxLCAmbGVuKSkpIHsKIAkJa2ZyZWUoYnVmKTsKIAkJcG9ydC0+b3V0dnFfZnVsbCA9IGZhbHNlOwpAQCAtMTQ2Miw2ICsxNDcxLDE3IEBACiAJc3Bpbl91bmxvY2soJnBvcnRkZXYtPmN2cV9sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgb3V0X2ludHIoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCit7CisJc3RydWN0IHBvcnQgKnBvcnQ7CisKKwlwb3J0ID0gZmluZF9wb3J0X2J5X3ZxKHZxLT52ZGV2LT5wcml2LCB2cSk7CisJaWYgKCFwb3J0KQorCQlyZXR1cm47CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPndhaXRxdWV1ZSk7Cit9CisKIHN0YXRpYyB2b2lkIGluX2ludHIoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCiB7CiAJc3RydWN0IHBvcnQgKnBvcnQ7CkBAIC0xNTY2LDcgKzE1ODYsNyBAQAogCSAqLwogCWogPSAwOwogCWlvX2NhbGxiYWNrc1tqXSA9IGluX2ludHI7Ci0JaW9fY2FsbGJhY2tzW2ogKyAxXSA9IE5VTEw7CisJaW9fY2FsbGJhY2tzW2ogKyAxXSA9IG91dF9pbnRyOwogCWlvX25hbWVzW2pdID0gImlucHV0IjsKIAlpb19uYW1lc1tqICsgMV0gPSAib3V0cHV0IjsKIAlqICs9IDI7CkBAIC0xNTgwLDcgKzE2MDAsNyBAQAogCQlmb3IgKGkgPSAxOyBpIDwgbnJfcG9ydHM7IGkrKykgewogCQkJaiArPSAyOwogCQkJaW9fY2FsbGJhY2tzW2pdID0gaW5faW50cjsKLQkJCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBOVUxMOworCQkJaW9fY2FsbGJhY2tzW2ogKyAxXSA9IG91dF9pbnRyOwogCQkJaW9fbmFtZXNbal0gPSAiaW5wdXQiOwogCQkJaW9fbmFtZXNbaiArIDFdID0gIm91dHB1dCI7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IDExMDlmNjguLjVjYjRkMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMTkxOSw4ICsxOTE5LDEwIEBACiAKIAlyZXQgPSBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLAogCQkJCQkmY3B1ZnJlcV9zeXNkZXZfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9udWxsX2RyaXZlcjsKIAotCWlmICgoIXJldCkgJiYgIShjcHVmcmVxX2RyaXZlci0+ZmxhZ3MgJiBDUFVGUkVRX1NUSUNLWSkpIHsKKwlpZiAoIShjcHVmcmVxX2RyaXZlci0+ZmxhZ3MgJiBDUFVGUkVRX1NUSUNLWSkpIHsKIAkJaW50IGk7CiAJCXJldCA9IC1FTk9ERVY7CiAKQEAgLTE5MzUsMjEgKzE5MzcsMjIgQEAKIAkJaWYgKHJldCkgewogCQkJZHByaW50aygibm8gQ1BVIGluaXRpYWxpemVkIGZvciBkcml2ZXIgJXNcbiIsCiAJCQkJCQkJZHJpdmVyX2RhdGEtPm5hbWUpOwotCQkJc3lzZGV2X2RyaXZlcl91bnJlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLAotCQkJCQkJJmNwdWZyZXFfc3lzZGV2X2RyaXZlcik7Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7Ci0JCQljcHVmcmVxX2RyaXZlciA9IE5VTEw7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CisJCQlnb3RvIGVycl9zeXNkZXZfdW5yZWc7CiAJCX0KIAl9CiAKLQlpZiAoIXJldCkgewotCQlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmNwdWZyZXFfY3B1X25vdGlmaWVyKTsKLQkJZHByaW50aygiZHJpdmVyICVzIHVwIGFuZCBydW5uaW5nXG4iLCBkcml2ZXJfZGF0YS0+bmFtZSk7Ci0JCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOwotCX0KKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmNwdWZyZXFfY3B1X25vdGlmaWVyKTsKKwlkcHJpbnRrKCJkcml2ZXIgJXMgdXAgYW5kIHJ1bm5pbmdcbiIsIGRyaXZlcl9kYXRhLT5uYW1lKTsKKwljcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQoKTsKIAorCXJldHVybiAwOworZXJyX3N5c2Rldl91bnJlZzoKKwlzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsCisJCQkmY3B1ZnJlcV9zeXNkZXZfZHJpdmVyKTsKK2Vycl9udWxsX2RyaXZlcjoKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOworCWNwdWZyZXFfZHJpdmVyID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2FtYmEtcGwwOHguYyBiL2RyaXZlcnMvZG1hL2FtYmEtcGwwOHguYwppbmRleCAyOTdmNDhiLi4wN2JjYTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9hbWJhLXBsMDh4LmMKKysrIGIvZHJpdmVycy9kbWEvYW1iYS1wbDA4eC5jCkBAIC03OSw2ICs3OSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CkBAIC0yMzUsMTYgKzIzNiwxOSBAQAogfQogCiAvKgotICogT3ZlcmFsbCBETUFDIHJlbWFpbnMgZW5hYmxlZCBhbHdheXMuCisgKiBQYXVzZSB0aGUgY2hhbm5lbCBieSBzZXR0aW5nIHRoZSBIQUxUIGJpdC4KICAqCi0gKiBEaXNhYmxpbmcgaW5kaXZpZHVhbCBjaGFubmVscyBjb3VsZCBsb3NlIGRhdGEuCisgKiBGb3IgTS0+UCB0cmFuc2ZlcnMsIHBhdXNlIHRoZSBETUFDIGZpcnN0IGFuZCB0aGVuIHN0b3AgdGhlIHBlcmlwaGVyYWwgLQorICogdGhlIEZJRk8gY2FuIG9ubHkgZHJhaW4gaWYgdGhlIHBlcmlwaGVyYWwgaXMgc3RpbGwgcmVxdWVzdGluZyBkYXRhLgorICogKG5vdGU6IHRoaXMgY2FuIHN0aWxsIHRpbWVvdXQgaWYgdGhlIERNQUMgRklGTyBuZXZlciBkcmFpbnMgb2YgZGF0YS4pCiAgKgotICogRGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBETUEgYWZ0ZXIgZGlzYWJsaW5nIHRoZSBETUFDIGluIG9yZGVyIHRvIGFsbG93Ci0gKiB0aGUgRE1BQyBGSUZPIHRvIGRyYWluLCBhbmQgaGVuY2UgYWxsb3cgdGhlIGNoYW5uZWwgdG8gc2hvdyBpbmFjdGl2ZQorICogRm9yIFAtPk0gdHJhbnNmZXJzLCBkaXNhYmxlIHRoZSBwZXJpcGhlcmFsIGZpcnN0IHRvIHN0b3AgaXQgZmlsbGluZworICogdGhlIERNQUMgRklGTywgYW5kIHRoZW4gcGF1c2UgdGhlIERNQUMuCiAgKi8KIHN0YXRpYyB2b2lkIHBsMDh4X3BhdXNlX3BoeV9jaGFuKHN0cnVjdCBwbDA4eF9waHlfY2hhbiAqY2gpCiB7CiAJdTMyIHZhbDsKKwlpbnQgdGltZW91dDsKIAogCS8qIFNldCB0aGUgSEFMVCBiaXQgYW5kIHdhaXQgZm9yIHRoZSBGSUZPIHRvIGRyYWluICovCiAJdmFsID0gcmVhZGwoY2gtPmJhc2UgKyBQTDA4MF9DSF9DT05GSUcpOwpAQCAtMjUyLDggKzI1NiwxMyBAQAogCXdyaXRlbCh2YWwsIGNoLT5iYXNlICsgUEwwODBfQ0hfQ09ORklHKTsKIAogCS8qIFdhaXQgZm9yIGNoYW5uZWwgaW5hY3RpdmUgKi8KLQl3aGlsZSAocGwwOHhfcGh5X2NoYW5uZWxfYnVzeShjaCkpCi0JCWNwdV9yZWxheCgpOworCWZvciAodGltZW91dCA9IDEwMDA7IHRpbWVvdXQ7IHRpbWVvdXQtLSkgeworCQlpZiAoIXBsMDh4X3BoeV9jaGFubmVsX2J1c3koY2gpKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwl9CisJaWYgKHBsMDh4X3BoeV9jaGFubmVsX2J1c3koY2gpKQorCQlwcl9lcnIoInBsMDh4OiBjaGFubmVsJXUgdGltZW91dCB3YWl0aW5nIGZvciBwYXVzZVxuIiwgY2gtPmlkKTsKIH0KIAogc3RhdGljIHZvaWQgcGwwOHhfcmVzdW1lX3BoeV9jaGFuKHN0cnVjdCBwbDA4eF9waHlfY2hhbiAqY2gpCkBAIC0yNjcsMTkgKzI3NiwyNCBAQAogfQogCiAKLS8qIFN0b3BzIHRoZSBjaGFubmVsICovCi1zdGF0aWMgdm9pZCBwbDA4eF9zdG9wX3BoeV9jaGFuKHN0cnVjdCBwbDA4eF9waHlfY2hhbiAqY2gpCisvKgorICogcGwwOHhfdGVybWluYXRlX3BoeV9jaGFuKCkgc3RvcHMgdGhlIGNoYW5uZWwsIGNsZWFycyB0aGUgRklGTyBhbmQKKyAqIGNsZWFycyBhbnkgcGVuZGluZyBpbnRlcnJ1cHQgc3RhdHVzLiAgVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgZm9yCisgKiBhbiBvbi1nb2luZyB0cmFuc2ZlciwgYnV0IGFzIGEgbWV0aG9kIG9mIHNodXR0aW5nIGRvd24gYSBjaGFubmVsCisgKiAoZWcsIHdoZW4gaXQncyBubyBsb25nZXIgdXNlZCkgb3IgdGVybWluYXRpbmcgYSB0cmFuc2Zlci4KKyAqLworc3RhdGljIHZvaWQgcGwwOHhfdGVybWluYXRlX3BoeV9jaGFuKHN0cnVjdCBwbDA4eF9kcml2ZXJfZGF0YSAqcGwwOHgsCisJc3RydWN0IHBsMDh4X3BoeV9jaGFuICpjaCkKIHsKLQl1MzIgdmFsOworCXUzMiB2YWwgPSByZWFkbChjaC0+YmFzZSArIFBMMDgwX0NIX0NPTkZJRyk7CiAKLQlwbDA4eF9wYXVzZV9waHlfY2hhbihjaCk7CisJdmFsICY9IH4oUEwwODBfQ09ORklHX0VOQUJMRSB8IFBMMDgwX0NPTkZJR19FUlJfSVJRX01BU0sgfAorCSAgICAgICAgIFBMMDgwX0NPTkZJR19UQ19JUlFfTUFTSyk7CiAKLQkvKiBEaXNhYmxlIGNoYW5uZWwgKi8KLQl2YWwgPSByZWFkbChjaC0+YmFzZSArIFBMMDgwX0NIX0NPTkZJRyk7Ci0JdmFsICY9IH5QTDA4MF9DT05GSUdfRU5BQkxFOwotCXZhbCAmPSB+UEwwODBfQ09ORklHX0VSUl9JUlFfTUFTSzsKLQl2YWwgJj0gflBMMDgwX0NPTkZJR19UQ19JUlFfTUFTSzsKIAl3cml0ZWwodmFsLCBjaC0+YmFzZSArIFBMMDgwX0NIX0NPTkZJRyk7CisKKwl3cml0ZWwoMSA8PCBjaC0+aWQsIHBsMDh4LT5iYXNlICsgUEwwODBfRVJSX0NMRUFSKTsKKwl3cml0ZWwoMSA8PCBjaC0+aWQsIHBsMDh4LT5iYXNlICsgUEwwODBfVENfQ0xFQVIpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBnZXRfYnl0ZXNfaW5fY2N0bCh1MzIgY2N0bCkKQEAgLTQwNCwxMyArNDE4LDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOworCiAJLyogU3RvcCB0aGUgY2hhbm5lbCBhbmQgY2xlYXIgaXRzIGludGVycnVwdHMgKi8KLQlwbDA4eF9zdG9wX3BoeV9jaGFuKGNoKTsKLQl3cml0ZWwoKDEgPDwgY2gtPmlkKSwgcGwwOHgtPmJhc2UgKyBQTDA4MF9FUlJfQ0xFQVIpOwotCXdyaXRlbCgoMSA8PCBjaC0+aWQpLCBwbDA4eC0+YmFzZSArIFBMMDgwX1RDX0NMRUFSKTsKKwlwbDA4eF90ZXJtaW5hdGVfcGh5X2NoYW4ocGwwOHgsIGNoKTsKIAogCS8qIE1hcmsgaXQgYXMgZnJlZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZjaC0+bG9jaywgZmxhZ3MpOwogCWNoLT5zZXJ2aW5nID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaC0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMTQ0OSw3ICsxNDYyLDcgQEAKIAkJcGxjaGFuLT5zdGF0ZSA9IFBMMDhYX0NIQU5fSURMRTsKIAogCQlpZiAocGxjaGFuLT5waHljaGFuKSB7Ci0JCQlwbDA4eF9zdG9wX3BoeV9jaGFuKHBsY2hhbi0+cGh5Y2hhbik7CisJCQlwbDA4eF90ZXJtaW5hdGVfcGh5X2NoYW4ocGwwOHgsIHBsY2hhbi0+cGh5Y2hhbik7CiAKIAkJCS8qCiAJCQkgKiBNYXJrIHBoeXNpY2FsIGNoYW5uZWwgYXMgZnJlZSBhbmQgZnJlZSBhbnkgc2xhdmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lteC1kbWEuYyBiL2RyaXZlcnMvZG1hL2lteC1kbWEuYwppbmRleCBlNTNkNDM4Li5lMThlYWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pbXgtZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvaW14LWRtYS5jCkBAIC00OSw2ICs0OSw3IEBACiAKIHN0cnVjdCBpbXhkbWFfZW5naW5lIHsKIAlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwlzdHJ1Y3QgZGV2aWNlX2RtYV9wYXJhbWV0ZXJzCWRtYV9wYXJtczsKIAlzdHJ1Y3QgZG1hX2RldmljZQkJZG1hX2RldmljZTsKIAlzdHJ1Y3QgaW14ZG1hX2NoYW5uZWwJCWNoYW5uZWxbTUFYX0RNQV9DSEFOTkVMU107CiB9OwpAQCAtMjQyLDYgKzI0MywyMSBAQAogCWVsc2UKIAkJZG1hbW9kZSA9IERNQV9NT0RFX1dSSVRFOwogCisJc3dpdGNoIChpbXhkbWFjLT53b3JkX3NpemUpIHsKKwljYXNlIERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOgorCQlpZiAoc2dsLT5sZW5ndGggJiAzIHx8IHNnbC0+ZG1hX2FkZHJlc3MgJiAzKQorCQkJcmV0dXJuIE5VTEw7CisJCWJyZWFrOworCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVM6CisJCWlmIChzZ2wtPmxlbmd0aCAmIDEgfHwgc2dsLT5kbWFfYWRkcmVzcyAmIDEpCisJCQlyZXR1cm4gTlVMTDsKKwkJYnJlYWs7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9CisKIAlyZXQgPSBpbXhfZG1hX3NldHVwX3NnKGlteGRtYWMtPmlteGRtYV9jaGFubmVsLCBzZ2wsIHNnX2xlbiwKIAkJIGRtYV9sZW5ndGgsIGlteGRtYWMtPnBlcl9hZGRyZXNzLCBkbWFtb2RlKTsKIAlpZiAocmV0KQpAQCAtMzI5LDYgKzM0NSw5IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmaW14ZG1hLT5kbWFfZGV2aWNlLmNoYW5uZWxzKTsKIAorCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgaW14ZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfQ1lDTElDLCBpbXhkbWEtPmRtYV9kZXZpY2UuY2FwX21hc2spOworCiAJLyogSW5pdGlhbGl6ZSBjaGFubmVsIHBhcmFtZXRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOTkVMUzsgaSsrKSB7CiAJCXN0cnVjdCBpbXhkbWFfY2hhbm5lbCAqaW14ZG1hYyA9ICZpbXhkbWEtPmNoYW5uZWxbaV07CkBAIC0zNDYsMTEgKzM2NSw3IEBACiAJCWlteGRtYWMtPmlteGRtYSA9IGlteGRtYTsKIAkJc3Bpbl9sb2NrX2luaXQoJmlteGRtYWMtPmxvY2spOwogCi0JCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgaW14ZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKLQkJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgaW14ZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKLQogCQlpbXhkbWFjLT5jaGFuLmRldmljZSA9ICZpbXhkbWEtPmRtYV9kZXZpY2U7Ci0JCWlteGRtYWMtPmNoYW4uY2hhbl9pZCA9IGk7CiAJCWlteGRtYWMtPmNoYW5uZWwgPSBpOwogCiAJCS8qIEFkZCB0aGUgY2hhbm5lbCB0byB0aGUgRE1BQyBsaXN0ICovCkBAIC0zNzAsNiArMzg1LDkgQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGlteGRtYSk7CiAKKwlpbXhkbWEtPmRtYV9kZXZpY2UuZGV2LT5kbWFfcGFybXMgPSAmaW14ZG1hLT5kbWFfcGFybXM7CisJZG1hX3NldF9tYXhfc2VnX3NpemUoaW14ZG1hLT5kbWFfZGV2aWNlLmRldiwgMHhmZmZmZmYpOworCiAJcmV0ID0gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmaW14ZG1hLT5kbWFfZGV2aWNlKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlclxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jIGIvZHJpdmVycy9kbWEvaW14LXNkbWEuYwppbmRleCBkNWE1ZDRkLi5iNmQxNDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lteC1zZG1hLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogICogc3RydWN0IHNkbWFfY2hhbm5lbCAtIGhvdXNla2VlcGluZyBmb3IgYSBTRE1BIGNoYW5uZWwKICAqCiAgKiBAc2RtYQkJcG9pbnRlciB0byB0aGUgU0RNQSBlbmdpbmUgZm9yIHRoaXMgY2hhbm5lbAotICogQGNoYW5uZWwJCXRoZSBjaGFubmVsIG51bWJlciwgbWF0Y2hlcyBkbWFlbmdpbmUgY2hhbl9pZAorICogQGNoYW5uZWwJCXRoZSBjaGFubmVsIG51bWJlciwgbWF0Y2hlcyBkbWFlbmdpbmUgY2hhbl9pZCArIDEKICAqIEBkaXJlY3Rpb24JCXRyYW5zZmVyIHR5cGUuIE5lZWRlZCBmb3Igc2V0dGluZyBTRE1BIHNjcmlwdAogICogQHBlcmlwaGVyYWxfdHlwZQlQZXJpcGhlcmFsIHR5cGUuIE5lZWRlZCBmb3Igc2V0dGluZyBTRE1BIHNjcmlwdAogICogQGV2ZW50X2lkMAkJYWthIGRtYSByZXF1ZXN0IGxpbmUKQEAgLTMwMSw2ICszMDEsNyBAQAogCiBzdHJ1Y3Qgc2RtYV9lbmdpbmUgewogCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCXN0cnVjdCBkZXZpY2VfZG1hX3BhcmFtZXRlcnMJZG1hX3Bhcm1zOwogCXN0cnVjdCBzZG1hX2NoYW5uZWwJCWNoYW5uZWxbTUFYX0RNQV9DSEFOTkVMU107CiAJc3RydWN0IHNkbWFfY2hhbm5lbF9jb250cm9sCSpjaGFubmVsX2NvbnRyb2w7CiAJdm9pZCBfX2lvbWVtCQkJKnJlZ3M7CkBAIC00NDksNyArNDUwLDcgQEAKIAkJaWYgKGJkLT5tb2RlLnN0YXR1cyAmIEJEX1JST1IpCiAJCQlzZG1hYy0+c3RhdHVzID0gRE1BX0VSUk9SOwogCQllbHNlCi0JCQlzZG1hYy0+c3RhdHVzID0gRE1BX1NVQ0NFU1M7CisJCQlzZG1hYy0+c3RhdHVzID0gRE1BX0lOX1BST0dSRVNTOwogCiAJCWJkLT5tb2RlLnN0YXR1cyB8PSBCRF9ET05FOwogCQlzZG1hYy0+YnVmX3RhaWwrKzsKQEAgLTc3MCwxNSArNzcxLDE1IEBACiAJX19yYXdfd3JpdGVsKDEgPDwgY2hhbm5lbCwgc2RtYS0+cmVncyArIFNETUFfSF9TVEFSVCk7CiB9CiAKLXN0YXRpYyBkbWFfY29va2llX3Qgc2RtYV9hc3NpZ25fY29va2llKHN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWEpCitzdGF0aWMgZG1hX2Nvb2tpZV90IHNkbWFfYXNzaWduX2Nvb2tpZShzdHJ1Y3Qgc2RtYV9jaGFubmVsICpzZG1hYykKIHsKLQlkbWFfY29va2llX3QgY29va2llID0gc2RtYS0+Y2hhbi5jb29raWU7CisJZG1hX2Nvb2tpZV90IGNvb2tpZSA9IHNkbWFjLT5jaGFuLmNvb2tpZTsKIAogCWlmICgrK2Nvb2tpZSA8IDApCiAJCWNvb2tpZSA9IDE7CiAKLQlzZG1hLT5jaGFuLmNvb2tpZSA9IGNvb2tpZTsKLQlzZG1hLT5kZXNjLmNvb2tpZSA9IGNvb2tpZTsKKwlzZG1hYy0+Y2hhbi5jb29raWUgPSBjb29raWU7CisJc2RtYWMtPmRlc2MuY29va2llID0gY29va2llOwogCiAJcmV0dXJuIGNvb2tpZTsKIH0KQEAgLTc5OCw3ICs3OTksNyBAQAogCiAJY29va2llID0gc2RtYV9hc3NpZ25fY29va2llKHNkbWFjKTsKIAotCXNkbWFfZW5hYmxlX2NoYW5uZWwoc2RtYSwgdHgtPmNoYW4tPmNoYW5faWQpOworCXNkbWFfZW5hYmxlX2NoYW5uZWwoc2RtYSwgc2RtYWMtPmNoYW5uZWwpOwogCiAJc3Bpbl91bmxvY2tfaXJxKCZzZG1hYy0+bG9jayk7CiAKQEAgLTgxMSwxMCArODEyLDYgQEAKIAlzdHJ1Y3QgaW14X2RtYV9kYXRhICpkYXRhID0gY2hhbi0+cHJpdmF0ZTsKIAlpbnQgcHJpbywgcmV0OwogCi0JLyogTm8gbmVlZCB0byBleGVjdXRlIHRoaXMgZm9yIGludGVybmFsIGNoYW5uZWwgMCAqLwotCWlmIChjaGFuLT5jaGFuX2lkID09IDApCi0JCXJldHVybiAwOwotCiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODc5LDcgKzg3Niw3IEBACiAJc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMgPSB0b19zZG1hX2NoYW4oY2hhbik7CiAJc3RydWN0IHNkbWFfZW5naW5lICpzZG1hID0gc2RtYWMtPnNkbWE7CiAJaW50IHJldCwgaSwgY291bnQ7Ci0JaW50IGNoYW5uZWwgPSBjaGFuLT5jaGFuX2lkOworCWludCBjaGFubmVsID0gc2RtYWMtPmNoYW5uZWw7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAogCWlmIChzZG1hYy0+c3RhdHVzID09IERNQV9JTl9QUk9HUkVTUykKQEAgLTkyNCwyMiArOTIxLDMzIEBACiAJCQlyZXQgPSAgLUVJTlZBTDsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQotCQlpZiAoc2RtYWMtPndvcmRfc2l6ZSA9PSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUykKKworCQlzd2l0Y2ggKHNkbWFjLT53b3JkX3NpemUpIHsKKwkJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzoKIAkJCWJkLT5tb2RlLmNvbW1hbmQgPSAwOwotCQllbHNlCi0JCQliZC0+bW9kZS5jb21tYW5kID0gc2RtYWMtPndvcmRfc2l6ZTsKKwkJCWlmIChjb3VudCAmIDMgfHwgc2ctPmRtYV9hZGRyZXNzICYgMykKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlIERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOgorCQkJYmQtPm1vZGUuY29tbWFuZCA9IDI7CisJCQlpZiAoY291bnQgJiAxIHx8IHNnLT5kbWFfYWRkcmVzcyAmIDEpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlicmVhazsKKwkJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFOgorCQkJYmQtPm1vZGUuY29tbWFuZCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBOVUxMOworCQl9CiAKIAkJcGFyYW0gPSBCRF9ET05FIHwgQkRfRVhURCB8IEJEX0NPTlQ7CiAKLQkJaWYgKHNkbWFjLT5mbGFncyAmIElNWF9ETUFfU0dfTE9PUCkgeworCQlpZiAoaSArIDEgPT0gc2dfbGVuKSB7CiAJCQlwYXJhbSB8PSBCRF9JTlRSOwotCQkJaWYgKGkgKyAxID09IHNnX2xlbikKLQkJCQlwYXJhbSB8PSBCRF9XUkFQOworCQkJcGFyYW0gfD0gQkRfTEFTVDsKKwkJCXBhcmFtICY9IH5CRF9DT05UOwogCQl9CiAKLQkJaWYgKGkgKyAxID09IHNnX2xlbikKLQkJCXBhcmFtIHw9IEJEX0lOVFI7Ci0KIAkJZGV2X2RiZyhzZG1hLT5kZXYsICJlbnRyeSAlZDogY291bnQ6ICVkIGRtYTogMHglMDh4ICVzJXNcbiIsCiAJCQkJaSwgY291bnQsIHNnLT5kbWFfYWRkcmVzcywKIAkJCQlwYXJhbSAmIEJEX1dSQVAgPyAid3JhcCIgOiAiIiwKQEAgLTk1Myw2ICs5NjEsNyBAQAogCiAJcmV0dXJuICZzZG1hYy0+ZGVzYzsKIGVycl9vdXQ6CisJc2RtYWMtPnN0YXR1cyA9IERNQV9FUlJPUjsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtOTYzLDcgKzk3Miw3IEBACiAJc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMgPSB0b19zZG1hX2NoYW4oY2hhbik7CiAJc3RydWN0IHNkbWFfZW5naW5lICpzZG1hID0gc2RtYWMtPnNkbWE7CiAJaW50IG51bV9wZXJpb2RzID0gYnVmX2xlbiAvIHBlcmlvZF9sZW47Ci0JaW50IGNoYW5uZWwgPSBjaGFuLT5jaGFuX2lkOworCWludCBjaGFubmVsID0gc2RtYWMtPmNoYW5uZWw7CiAJaW50IHJldCwgaSA9IDAsIGJ1ZiA9IDA7CiAKIAlkZXZfZGJnKHNkbWEtPmRldiwgIiVzIGNoYW5uZWw6ICVkXG4iLCBfX2Z1bmNfXywgY2hhbm5lbCk7CkBAIC0xMDY2LDE0ICsxMDc1LDEyIEBACiB7CiAJc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMgPSB0b19zZG1hX2NoYW4oY2hhbik7CiAJZG1hX2Nvb2tpZV90IGxhc3RfdXNlZDsKLQllbnVtIGRtYV9zdGF0dXMgcmV0OwogCiAJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOwogCi0JcmV0ID0gZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGNvb2tpZSwgc2RtYWMtPmxhc3RfY29tcGxldGVkLCBsYXN0X3VzZWQpOwogCWRtYV9zZXRfdHhfc3RhdGUodHhzdGF0ZSwgc2RtYWMtPmxhc3RfY29tcGxldGVkLCBsYXN0X3VzZWQsIDApOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2RtYWMtPnN0YXR1czsKIH0KIAogc3RhdGljIHZvaWQgc2RtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKQEAgLTExMzUsNyArMTE0Miw3IEBACiAJLyogZG93bmxvYWQgdGhlIFJBTSBpbWFnZSBmb3IgU0RNQSAqLwogCXNkbWFfbG9hZF9zY3JpcHQoc2RtYSwgcmFtX2NvZGUsCiAJCQloZWFkZXItPnJhbV9jb2RlX3NpemUsCi0JCQlzZG1hLT5zY3JpcHRfYWRkcnMtPnJhbV9jb2RlX3N0YXJ0X2FkZHIpOworCQkJYWRkci0+cmFtX2NvZGVfc3RhcnRfYWRkcik7CiAJY2xrX2Rpc2FibGUoc2RtYS0+Y2xrKTsKIAogCXNkbWFfYWRkX3NjcmlwdHMoc2RtYSwgYWRkcik7CkBAIC0xMjM3LDcgKzEyNDQsNiBAQAogCXN0cnVjdCByZXNvdXJjZSAqaW9yZXM7CiAJc3RydWN0IHNkbWFfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgaTsKLQlkbWFfY2FwX21hc2tfdCBtYXNrOwogCXN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYTsKIAogCXNkbWEgPSBremFsbG9jKHNpemVvZigqc2RtYSksIEdGUF9LRVJORUwpOwpAQCAtMTI4MCw2ICsxMjg2LDkgQEAKIAogCXNkbWEtPnZlcnNpb24gPSBwZGF0YS0+c2RtYV92ZXJzaW9uOwogCisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBzZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfQ1lDTElDLCBzZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKKwogCUlOSVRfTElTVF9IRUFEKCZzZG1hLT5kbWFfZGV2aWNlLmNoYW5uZWxzKTsKIAkvKiBJbml0aWFsaXplIGNoYW5uZWwgcGFyYW1ldGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfRE1BX0NIQU5ORUxTOyBpKyspIHsKQEAgLTEyODgsMTUgKzEyOTcsMTcgQEAKIAkJc2RtYWMtPnNkbWEgPSBzZG1hOwogCQlzcGluX2xvY2tfaW5pdCgmc2RtYWMtPmxvY2spOwogCi0JCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgc2RtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7Ci0JCWRtYV9jYXBfc2V0KERNQV9DWUNMSUMsIHNkbWEtPmRtYV9kZXZpY2UuY2FwX21hc2spOwotCiAJCXNkbWFjLT5jaGFuLmRldmljZSA9ICZzZG1hLT5kbWFfZGV2aWNlOwotCQlzZG1hYy0+Y2hhbi5jaGFuX2lkID0gaTsKIAkJc2RtYWMtPmNoYW5uZWwgPSBpOwogCi0JCS8qIEFkZCB0aGUgY2hhbm5lbCB0byB0aGUgRE1BQyBsaXN0ICovCi0JCWxpc3RfYWRkX3RhaWwoJnNkbWFjLT5jaGFuLmRldmljZV9ub2RlLCAmc2RtYS0+ZG1hX2RldmljZS5jaGFubmVscyk7CisJCS8qCisJCSAqIEFkZCB0aGUgY2hhbm5lbCB0byB0aGUgRE1BQyBsaXN0LiBEbyBub3QgYWRkIGNoYW5uZWwgMCB0aG91Z2gKKwkJICogYmVjYXVzZSB3ZSBuZWVkIGl0IGludGVybmFsbHkgaW4gdGhlIFNETUEgZHJpdmVyLiBUaGlzIGFsc28gbWVhbnMKKwkJICogdGhhdCBjaGFubmVsIDAgaW4gZG1hZW5naW5lIGNvdW50aW5nIG1hdGNoZXMgc2RtYSBjaGFubmVsIDEuCisJCSAqLworCQlpZiAoaSkKKwkJCWxpc3RfYWRkX3RhaWwoJnNkbWFjLT5jaGFuLmRldmljZV9ub2RlLAorCQkJCQkmc2RtYS0+ZG1hX2RldmljZS5jaGFubmVscyk7CiAJfQogCiAJcmV0ID0gc2RtYV9pbml0KHNkbWEpOwpAQCAtMTMxNyw2ICsxMzI4LDggQEAKIAlzZG1hLT5kbWFfZGV2aWNlLmRldmljZV9wcmVwX2RtYV9jeWNsaWMgPSBzZG1hX3ByZXBfZG1hX2N5Y2xpYzsKIAlzZG1hLT5kbWFfZGV2aWNlLmRldmljZV9jb250cm9sID0gc2RtYV9jb250cm9sOwogCXNkbWEtPmRtYV9kZXZpY2UuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBzZG1hX2lzc3VlX3BlbmRpbmc7CisJc2RtYS0+ZG1hX2RldmljZS5kZXYtPmRtYV9wYXJtcyA9ICZzZG1hLT5kbWFfcGFybXM7CisJZG1hX3NldF9tYXhfc2VnX3NpemUoc2RtYS0+ZG1hX2RldmljZS5kZXYsIDY1NTM1KTsKIAogCXJldCA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJnNkbWEtPmRtYV9kZXZpY2UpOwogCWlmIChyZXQpIHsKQEAgLTEzMjQsMTMgKzEzMzcsNiBAQAogCQlnb3RvIGVycl9pbml0OwogCX0KIAotCS8qIHJlcXVlc3QgY2hhbm5lbCAwLiBUaGlzIGlzIGFuIGludGVybmFsIGNvbnRyb2wgY2hhbm5lbAotCSAqIHRvIHRoZSBTRE1BIGVuZ2luZSBhbmQgbm90IGF2YWlsYWJsZSB0byBjbGllbnRzLgotCSAqLwotCWRtYV9jYXBfemVybyhtYXNrKTsKLQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOwotCWRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgTlVMTCwgTlVMTCk7Ci0KIAlkZXZfaW5mbyhzZG1hLT5kZXYsICJpbml0aWFsaXplZFxuIik7CiAKIAlyZXR1cm4gMDsKQEAgLTEzNDgsNyArMTM1NCw3IEBACiBlcnJfcmVxdWVzdF9yZWdpb246CiBlcnJfaXJxOgogCWtmcmVlKHNkbWEpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19leGl0IHNkbWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKaW5kZXggY2IyNmVlOS4uYzFhMTI1ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKQEAgLTExNDUsMjkgKzExNDUsNiBAQAogCXJlZyA9IGlkbWFjX3JlYWRfaWNyZWcoaXB1LCBJRE1BQ19DSEFfRU4pOwogCWlkbWFjX3dyaXRlX2ljcmVnKGlwdSwgcmVnICYgfmNoYW5fbWFzaywgSURNQUNfQ0hBX0VOKTsKIAotCS8qCi0JICogUHJvYmxlbSAob2JzZXJ2ZWQgd2l0aCBjaGFubmVsIERNQUlDXzcpOiBhZnRlciBlbmFibGluZyB0aGUgY2hhbm5lbAotCSAqIGFuZCBpbml0aWFsaXNpbmcgYnVmZmVycywgdGhlcmUgY29tZXMgYW4gaW50ZXJydXB0IHdpdGggY3VycmVudCBzdGlsbAotCSAqIHBvaW50aW5nIGF0IGJ1ZmZlciAwLCB3aGVyZWFzIGl0IHNob3VsZCB1c2UgYnVmZmVyIDAgZmlyc3QgYW5kIG9ubHkKLQkgKiBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgd2hlbiBpdCBpcyBkb25lLCB0aGVuIGN1cnJlbnQgc2hvdWxkIGFscmVhZHkKLQkgKiBwb2ludCB0byBidWZmZXIgMS4gVGhpcyBzcHVyaW91cyBpbnRlcnJ1cHQgYWxzbyBjb21lcyBvbiBjaGFubmVsCi0JICogRE1BU0RDXzAuIFdpdGggRE1BSUNfNyBub3JtYWxseSwgaXMgd2UganVzdCBsZWF2ZSB0aGUgSVNSIGFmdGVyIHRoZQotCSAqIGZpcnN0IGludGVycnVwdCwgdGhlcmUgY29tZXMgdGhlIHNlY29uZCB3aXRoIGN1cnJlbnQgY29ycmVjdGx5Ci0JICogcG9pbnRpbmcgdG8gYnVmZmVyIDEgdGhpcyB0aW1lLiBCdXQgc29tZXRpbWVzIHRoaXMgc2Vjb25kIGludGVycnVwdAotCSAqIGRvZXNuJ3QgY29tZSBhbmQgdGhlIGNoYW5uZWwgaGFuZ3MuIENsZWFyaW5nIEJVRnhfUkRZIHdoZW4gZGlzYWJsaW5nCi0JICogdGhlIGNoYW5uZWwgc2VlbXMgdG8gcHJldmVudCB0aGUgY2hhbm5lbCBmcm9tIGhhbmdpbmcsIGJ1dCBpdCBkb2Vzbid0Ci0JICogcHJldmVudCB0aGUgc3B1cmlvdXMgaW50ZXJydXB0LiBUaGlzIG1pZ2h0IGFsc28gYmUgdW5zYWZlLiBUaGluawotCSAqIGFib3V0IHRoZSBJRE1BQyBjb250cm9sbGVyIHRyeWluZyB0byBzd2l0Y2ggdG8gYSBidWZmZXIsIHdoZW4gd2UKLQkgKiBjbGVhciB0aGUgcmVhZHkgYml0LCBhbmQgcmUtZW5hYmxlIGl0IGEgbW9tZW50IGxhdGVyLgotCSAqLwotCXJlZyA9IGlkbWFjX3JlYWRfaXB1cmVnKGlwdSwgSVBVX0NIQV9CVUYwX1JEWSk7Ci0JaWRtYWNfd3JpdGVfaXB1cmVnKGlwdSwgMCwgSVBVX0NIQV9CVUYwX1JEWSk7Ci0JaWRtYWNfd3JpdGVfaXB1cmVnKGlwdSwgcmVnICYgfigxVUwgPDwgY2hhbm5lbCksIElQVV9DSEFfQlVGMF9SRFkpOwotCi0JcmVnID0gaWRtYWNfcmVhZF9pcHVyZWcoaXB1LCBJUFVfQ0hBX0JVRjFfUkRZKTsKLQlpZG1hY193cml0ZV9pcHVyZWcoaXB1LCAwLCBJUFVfQ0hBX0JVRjFfUkRZKTsKLQlpZG1hY193cml0ZV9pcHVyZWcoaXB1LCByZWcgJiB+KDFVTCA8PCBjaGFubmVsKSwgSVBVX0NIQV9CVUYxX1JEWSk7Ci0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHUtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMTI0NiwzMyArMTIyMyw2IEBACiAKIAkvKiBPdGhlciBpbnRlcnJ1cHRzIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGlzIGNoYW5uZWwgKi8KIAlzcGluX2xvY2soJmljaGFuLT5sb2NrKTsKLQlpZiAodW5saWtlbHkoY2hhbl9pZCAhPSBJRE1BQ19TRENfMCAmJiBjaGFuX2lkICE9IElETUFDX1NEQ18xICYmCi0JCSAgICAgKChjdXJidWYgPj4gY2hhbl9pZCkgJiAxKSA9PSBpY2hhbi0+YWN0aXZlX2J1ZmZlciAmJgotCQkgICAgICFsaXN0X2lzX2xhc3QoaWNoYW4tPnF1ZXVlLm5leHQsICZpY2hhbi0+cXVldWUpKSkgewotCQlpbnQgaSA9IDEwMDsKLQotCQkvKiBUaGlzIGRvZXNuJ3QgaGVscC4gU2VlIGNvbW1lbnQgaW4gaXB1X2Rpc2FibGVfY2hhbm5lbCgpICovCi0JCXdoaWxlICgtLWkpIHsKLQkJCWN1cmJ1ZiA9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9DVVJfQlVGKTsKLQkJCWlmICgoKGN1cmJ1ZiA+PiBjaGFuX2lkKSAmIDEpICE9IGljaGFuLT5hY3RpdmVfYnVmZmVyKQotCQkJCWJyZWFrOwotCQkJY3B1X3JlbGF4KCk7Ci0JCX0KLQotCQlpZiAoIWkpIHsKLQkJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7Ci0JCQlkZXZfZGJnKGRldiwKLQkJCQkiSVJRIG9uIGFjdGl2ZSBidWZmZXIgb24gY2hhbm5lbCAleCwgYWN0aXZlICIKLQkJCQkiJWQsIHJlYWR5ICV4LCAleCwgY3VycmVudCAleCFcbiIsIGNoYW5faWQsCi0JCQkJaWNoYW4tPmFjdGl2ZV9idWZmZXIsIHJlYWR5MCwgcmVhZHkxLCBjdXJidWYpOwotCQkJcmV0dXJuIElSUV9OT05FOwotCQl9IGVsc2UKLQkJCWRldl9kYmcoZGV2LAotCQkJCSJCdWZmZXIgZGVhY3RpdmF0ZWQgb24gY2hhbm5lbCAleCwgYWN0aXZlICIKLQkJCQkiJWQsIHJlYWR5ICV4LCAleCwgY3VycmVudCAleCwgcmVzdCAlZCFcbiIsIGNoYW5faWQsCi0JCQkJaWNoYW4tPmFjdGl2ZV9idWZmZXIsIHJlYWR5MCwgcmVhZHkxLCBjdXJidWYsIGkpOwotCX0KLQogCWlmICh1bmxpa2VseSgoaWNoYW4tPmFjdGl2ZV9idWZmZXIgJiYgKHJlYWR5MSA+PiBjaGFuX2lkKSAmIDEpIHx8CiAJCSAgICAgKCFpY2hhbi0+YWN0aXZlX2J1ZmZlciAmJiAocmVhZHkwID4+IGNoYW5faWQpICYgMSkKIAkJICAgICApKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwppbmRleCA0YTVlY2M1Li4yM2UwMzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKQEAgLTgyNiw4ICs4MjYsNiBAQAogLyogRGlzcGxheSBhbmQgZGVjb2RlIHZhcmlvdXMgTkIgcmVnaXN0ZXJzIGZvciBkZWJ1ZyBwdXJwb3Nlcy4gKi8KIHN0YXRpYyB2b2lkIGFtZDY0X2R1bXBfbWlzY19yZWdzKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKIHsKLQlpbnQgZ2FuZ2VkOwotCiAJZGVidWdmMSgiRjN4RTggKE5CIENhcCk6IDB4JTA4eFxuIiwgcHZ0LT5uYmNhcCk7CiAKIAlkZWJ1Z2YxKCIgIE5CIHR3byBjaGFubmVsIERSQU0gY2FwYWJsZTogJXNcbiIsCkBAIC04NTEsMjggKzg0OSwxOSBAQAogCWRlYnVnZjEoIiAgRHJhbUhvbGVWYWxpZDogJXNcbiIsCiAJCShwdnQtPmRoYXIgJiBESEFSX1ZBTElEKSA/ICJ5ZXMiIDogIm5vIik7CiAKKwlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMCwgcHZ0KTsKKwogCS8qIGV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBwb2ludCBpcyBGYW0xMGggYW5kIGFib3ZlICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZikgewotCQlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMCwgcHZ0KTsKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmKQogCQlyZXR1cm47Ci0JfQorCisJYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDEsIHB2dCk7CiAKIAlhbWQ2NF9pbmZvKCJ1c2luZyAlcyBzeW5kcm9tZXMuXG4iLCAoKHB2dC0+c3luX3R5cGUgPT0gOCkgPyAieDgiIDogIng0IikpOwogCiAJLyogT25seSBpZiBOT1QgZ2FuZ2VkIGRvZXMgZGNscjEgaGF2ZSB2YWxpZCBpbmZvICovCiAJaWYgKCFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkpCiAJCWFtZDY0X2R1bXBfZHJhbWNmZ19sb3cocHZ0LT5kY2xyMSwgMSk7Ci0KLQkvKgotCSAqIERldGVybWluZSBpZiBnYW5nZWQgYW5kIHRoZW4gZHVtcCBtZW1vcnkgc2l6ZXMgZm9yIGZpcnN0IGNvbnRyb2xsZXIsCi0JICogYW5kIGlmIE5PVCBnYW5nZWQgZHVtcCBpbmZvIGZvciAybmQgY29udHJvbGxlci4KLQkgKi8KLQlnYW5nZWQgPSBkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCk7Ci0KLQlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMCwgcHZ0KTsKLQotCWlmICghZ2FuZ2VkKQotCQlhbWQ2NF9kZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXMoMSwgcHZ0KTsKIH0KIAogLyogUmVhZCBpbiBib3RoIG9mIERCQU0gcmVnaXN0ZXJzICovCkBAIC0xNjQ0LDExICsxNjMzLDEwIEBACiAJCSAgICAgICBXQVJOX09OKGN0cmwgIT0gMCk7CiAJfQogCi0JZGVidWdmMSgiRjJ4JWQ4MCAoRFJBTSBCYW5rIEFkZHJlc3MgTWFwcGluZyk6IDB4JTA4eFxuIiwKLQkJY3RybCwgY3RybCA/IHB2dC0+ZGJhbTEgOiBwdnQtPmRiYW0wKTsKKwlkYmFtID0gKGN0cmwgJiYgIWRjdF9nYW5naW5nX2VuYWJsZWQocHZ0KSkgPyBwdnQtPmRiYW0xIDogcHZ0LT5kYmFtMDsKKwlkY3NiID0gKGN0cmwgJiYgIWRjdF9nYW5naW5nX2VuYWJsZWQocHZ0KSkgPyBwdnQtPmRjc2IxIDogcHZ0LT5kY3NiMDsKIAotCWRiYW0gPSBjdHJsID8gcHZ0LT5kYmFtMSA6IHB2dC0+ZGJhbTA7Ci0JZGNzYiA9IGN0cmwgPyBwdnQtPmRjc2IxIDogcHZ0LT5kY3NiMDsKKwlkZWJ1Z2YxKCJGMnglZDgwIChEUkFNIEJhbmsgQWRkcmVzcyBNYXBwaW5nKTogMHglMDh4XG4iLCBjdHJsLCBkYmFtKTsKIAogCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJEQ1QlZCBjaGlwIHNlbGVjdHM6XG4iLCBjdHJsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jIGIvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCmluZGV4IGUyOGU0MTY2OC4uYmNiMTEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtMzc4LDEwICszNzgsMTcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGRtaV9kdW1wX2lkcyh2b2lkKQogeworCWNvbnN0IGNoYXIgKmJvYXJkOwkvKiBCb2FyZCBOYW1lIGlzIG9wdGlvbmFsICovCisKIAlwcmludGsoS0VSTl9ERUJVRyAiRE1JOiAiKTsKLQlwcmludF9maWx0ZXJlZChkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKSk7Ci0JcHJpbnRrKEtFUk5fQ09OVCAiLyIpOworCXByaW50X2ZpbHRlcmVkKGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1NZU19WRU5ET1IpKTsKKwlwcmludGsoS0VSTl9DT05UICIgIik7CiAJcHJpbnRfZmlsdGVyZWQoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfUFJPRFVDVF9OQU1FKSk7CisJYm9hcmQgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKTsKKwlpZiAoYm9hcmQpIHsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiLyIpOworCQlwcmludF9maWx0ZXJlZChib2FyZCk7CisJfQogCXByaW50ayhLRVJOX0NPTlQgIiwgQklPUyAiKTsKIAlwcmludF9maWx0ZXJlZChkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pKTsKIAlwcmludGsoS0VSTl9DT05UICIgIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwppbmRleCBhMjYxOTcyLi5iNDczNDI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYworKysgYi9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCkBAIC02MCw2ICs2MCw3IEBACiAJdW5zaWduZWQgZ3Bpb19zdGFydDsKIAl1aW50MTZfdCByZWdfb3V0cHV0OwogCXVpbnQxNl90IHJlZ19kaXJlY3Rpb247CisJc3RydWN0IG11dGV4IGkyY19sb2NrOwogCiAjaWZkZWYgQ09ORklHX0dQSU9fUENBOTUzWF9JUlEKIAlzdHJ1Y3QgbXV0ZXggaXJxX2xvY2s7CkBAIC0xMTksMTMgKzEyMCwxNyBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKIAorCW11dGV4X2xvY2soJmNoaXAtPmkyY19sb2NrKTsKIAlyZWdfdmFsID0gY2hpcC0+cmVnX2RpcmVjdGlvbiB8ICgxdSA8PCBvZmYpOwogCXJldCA9IHBjYTk1M3hfd3JpdGVfcmVnKGNoaXAsIFBDQTk1M1hfRElSRUNUSU9OLCByZWdfdmFsKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGV4aXQ7CiAKIAljaGlwLT5yZWdfZGlyZWN0aW9uID0gcmVnX3ZhbDsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworZXhpdDoKKwltdXRleF91bmxvY2soJmNoaXAtPmkyY19sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBjYTk1M3hfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmdjLApAQCAtMTM3LDYgKzE0Miw3IEBACiAKIAljaGlwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgcGNhOTUzeF9jaGlwLCBncGlvX2NoaXApOwogCisJbXV0ZXhfbG9jaygmY2hpcC0+aTJjX2xvY2spOwogCS8qIHNldCBvdXRwdXQgbGV2ZWwgKi8KIAlpZiAodmFsKQogCQlyZWdfdmFsID0gY2hpcC0+cmVnX291dHB1dCB8ICgxdSA8PCBvZmYpOwpAQCAtMTQ1LDcgKzE1MSw3IEBACiAKIAlyZXQgPSBwY2E5NTN4X3dyaXRlX3JlZyhjaGlwLCBQQ0E5NTNYX09VVFBVVCwgcmVnX3ZhbCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBleGl0OwogCiAJY2hpcC0+cmVnX291dHB1dCA9IHJlZ192YWw7CiAKQEAgLTE1MywxMCArMTU5LDEzIEBACiAJcmVnX3ZhbCA9IGNoaXAtPnJlZ19kaXJlY3Rpb24gJiB+KDF1IDw8IG9mZik7CiAJcmV0ID0gcGNhOTUzeF93cml0ZV9yZWcoY2hpcCwgUENBOTUzWF9ESVJFQ1RJT04sIHJlZ192YWwpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXhpdDsKIAogCWNoaXAtPnJlZ19kaXJlY3Rpb24gPSByZWdfdmFsOwotCXJldHVybiAwOworCXJldCA9IDA7CitleGl0OgorCW11dGV4X3VubG9jaygmY2hpcC0+aTJjX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGNhOTUzeF9ncGlvX2dldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgb2ZmKQpAQCAtMTY3LDcgKzE3Niw5IEBACiAKIAljaGlwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgcGNhOTUzeF9jaGlwLCBncGlvX2NoaXApOwogCisJbXV0ZXhfbG9jaygmY2hpcC0+aTJjX2xvY2spOwogCXJldCA9IHBjYTk1M3hfcmVhZF9yZWcoY2hpcCwgUENBOTUzWF9JTlBVVCwgJnJlZ192YWwpOworCW11dGV4X3VubG9jaygmY2hpcC0+aTJjX2xvY2spOwogCWlmIChyZXQgPCAwKSB7CiAJCS8qIE5PVEU6ICBkaWFnbm9zdGljIGFscmVhZHkgZW1pdHRlZDsgdGhhdCdzIGFsbCB3ZSBzaG91bGQKIAkJICogZG8gdW5sZXNzIGdwaW9fKl92YWx1ZV9jYW5zbGVlcCgpIGNhbGxzIGJlY29tZSBkaWZmZXJlbnQKQEAgLTE4Nyw2ICsxOTgsNyBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKIAorCW11dGV4X2xvY2soJmNoaXAtPmkyY19sb2NrKTsKIAlpZiAodmFsKQogCQlyZWdfdmFsID0gY2hpcC0+cmVnX291dHB1dCB8ICgxdSA8PCBvZmYpOwogCWVsc2UKQEAgLTE5NCw5ICsyMDYsMTEgQEAKIAogCXJldCA9IHBjYTk1M3hfd3JpdGVfcmVnKGNoaXAsIFBDQTk1M1hfT1VUUFVULCByZWdfdmFsKTsKIAlpZiAocmV0KQotCQlyZXR1cm47CisJCWdvdG8gZXhpdDsKIAogCWNoaXAtPnJlZ19vdXRwdXQgPSByZWdfdmFsOworZXhpdDoKKwltdXRleF91bmxvY2soJmNoaXAtPmkyY19sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgcGNhOTUzeF9zZXR1cF9ncGlvKHN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAsIGludCBncGlvcykKQEAgLTUxNyw2ICs1MzEsOCBAQAogCiAJY2hpcC0+bmFtZXMgPSBwZGF0YS0+bmFtZXM7CiAKKwltdXRleF9pbml0KCZjaGlwLT5pMmNfbG9jayk7CisKIAkvKiBpbml0aWFsaXplIGNhY2hlZCByZWdpc3RlcnMgZnJvbSB0aGVpciBvcmlnaW5hbCB2YWx1ZXMuCiAJICogd2UgY2FuJ3Qgc2hhcmUgdGhpcyBjaGlwIHdpdGggYW5vdGhlciBpMmMgbWFzdGVyLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwppbmRleCAyYmFhNjcwLi42NTRmYWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtMjY3NCwzICsyNjc0LDIzIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQorCit2b2lkIGRybV9tb2RlX2NvbmZpZ19yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBoZWFkKQorCQlpZiAoY3J0Yy0+ZnVuY3MtPnJlc2V0KQorCQkJY3J0Yy0+ZnVuY3MtPnJlc2V0KGNydGMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpCisJCWlmIChlbmNvZGVyLT5mdW5jcy0+cmVzZXQpCisJCQllbmNvZGVyLT5mdW5jcy0+cmVzZXQoZW5jb2Rlcik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpCisJCWlmIChjb25uZWN0b3ItPmZ1bmNzLT5yZXNldCkKKwkJCWNvbm5lY3Rvci0+ZnVuY3MtPnJlc2V0KGNvbm5lY3Rvcik7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2NvbmZpZ19yZXNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKaW5kZXggOTUyYjNkNC4uOTIzNjk2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwpAQCAtMzQzLDEzICszNDMsMTIgQEAKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJYm9vbCByZXQgPSB0cnVlOwogCi0JYWRqdXN0ZWRfbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGUpOwotCiAJY3J0Yy0+ZW5hYmxlZCA9IGRybV9oZWxwZXJfY3J0Y19pbl91c2UoY3J0Yyk7Ci0KIAlpZiAoIWNydGMtPmVuYWJsZWQpCiAJCXJldHVybiB0cnVlOwogCisJYWRqdXN0ZWRfbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGUpOworCiAJc2F2ZWRfaHdtb2RlID0gY3J0Yy0+aHdtb2RlOwogCXNhdmVkX21vZGUgPSBjcnRjLT5tb2RlOwogCXNhdmVkX3ggPSBjcnRjLT54OwpAQCAtNDM3LDEwICs0MzYsOSBAQAogCSAqLwogCWRybV9jYWxjX3RpbWVzdGFtcGluZ19jb25zdGFudHMoY3J0Yyk7CiAKLQkvKiBYWFggZnJlZSBhZGp1c3RlZG1vZGUgKi8KLQlkcm1fbW9kZV9kZXN0cm95KGRldiwgYWRqdXN0ZWRfbW9kZSk7CiAJLyogRklYTUU6IGFkZCBzdWJwaXhlbCBvcmRlciAqLwogZG9uZToKKwlkcm1fbW9kZV9kZXN0cm95KGRldiwgYWRqdXN0ZWRfbW9kZSk7CiAJaWYgKCFyZXQpIHsKIAkJY3J0Yy0+aHdtb2RlID0gc2F2ZWRfaHdtb2RlOwogCQljcnRjLT5tb2RlID0gc2F2ZWRfbW9kZTsKQEAgLTQ5NywxNCArNDk1LDE3IEBACiAKIAljcnRjX2Z1bmNzID0gc2V0LT5jcnRjLT5oZWxwZXJfcHJpdmF0ZTsKIAorCWlmICghc2V0LT5tb2RlKQorCQlzZXQtPmZiID0gTlVMTDsKKwogCWlmIChzZXQtPmZiKSB7CiAJCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXSBbRkI6JWRdICNjb25uZWN0b3JzPSVkICh4IHkpICglaSAlaSlcbiIsCiAJCQkJc2V0LT5jcnRjLT5iYXNlLmlkLCBzZXQtPmZiLT5iYXNlLmlkLAogCQkJCShpbnQpc2V0LT5udW1fY29ubmVjdG9ycywgc2V0LT54LCBzZXQtPnkpOwogCX0gZWxzZSB7Ci0JCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXSBbTk9GQl0gI2Nvbm5lY3RvcnM9JWQgKHggeSkgKCVpICVpKVxuIiwKLQkJCQlzZXQtPmNydGMtPmJhc2UuaWQsIChpbnQpc2V0LT5udW1fY29ubmVjdG9ycywKLQkJCQlzZXQtPngsIHNldC0+eSk7CisJCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXSBbTk9GQl1cbiIsIHNldC0+Y3J0Yy0+YmFzZS5pZCk7CisJCXNldC0+bW9kZSA9IE5VTEw7CisJCXNldC0+bnVtX2Nvbm5lY3RvcnMgPSAwOwogCX0KIAogCWRldiA9IHNldC0+Y3J0Yy0+ZGV2OwpAQCAtNjQ5LDggKzY1MCw4IEBACiAJCW1vZGVfY2hhbmdlZCA9IHRydWU7CiAKIAlpZiAobW9kZV9jaGFuZ2VkKSB7Ci0JCXNldC0+Y3J0Yy0+ZW5hYmxlZCA9IChzZXQtPm1vZGUgIT0gTlVMTCk7Ci0JCWlmIChzZXQtPm1vZGUgIT0gTlVMTCkgeworCQlzZXQtPmNydGMtPmVuYWJsZWQgPSBkcm1faGVscGVyX2NydGNfaW5fdXNlKHNldC0+Y3J0Yyk7CisJCWlmIChzZXQtPmNydGMtPmVuYWJsZWQpIHsKIAkJCURSTV9ERUJVR19LTVMoImF0dGVtcHRpbmcgdG8gc2V0IG1vZGUgZnJvbSIKIAkJCQkJIiB1c2Vyc3BhY2VcbiIpOwogCQkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShzZXQtPm1vZGUpOwpAQCAtNjY1LDYgKzY2NiwxMiBAQAogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBmYWlsOwogCQkJfQorCQkJRFJNX0RFQlVHX0tNUygiU2V0dGluZyBjb25uZWN0b3IgRFBNUyBzdGF0ZSB0byBvblxuIik7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2V0LT5udW1fY29ubmVjdG9yczsgaSsrKSB7CisJCQkJRFJNX0RFQlVHX0tNUygiXHRbQ09OTkVDVE9SOiVkOiVzXSBzZXQgRFBNUyBvblxuIiwgc2V0LT5jb25uZWN0b3JzW2ldLT5iYXNlLmlkLAorCQkJCQkgICAgICBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKHNldC0+Y29ubmVjdG9yc1tpXSkpOworCQkJCXNldC0+Y29ubmVjdG9yc1tpXS0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT047CisJCQl9CiAJCX0KIAkJZHJtX2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoZGV2KTsKIAl9IGVsc2UgaWYgKGZiX2NoYW5nZWQpIHsKQEAgLTY4MSwxMiArNjg4LDYgQEAKIAkJCWdvdG8gZmFpbDsKIAkJfQogCX0KLQlEUk1fREVCVUdfS01TKCJTZXR0aW5nIGNvbm5lY3RvciBEUE1TIHN0YXRlIHRvIG9uXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2V0LT5udW1fY29ubmVjdG9yczsgaSsrKSB7Ci0JCURSTV9ERUJVR19LTVMoIlx0W0NPTk5FQ1RPUjolZDolc10gc2V0IERQTVMgb25cbiIsIHNldC0+Y29ubmVjdG9yc1tpXS0+YmFzZS5pZCwKLQkJCSAgICAgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoc2V0LT5jb25uZWN0b3JzW2ldKSk7Ci0JCXNldC0+Y29ubmVjdG9yc1tpXS0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT047Ci0JfQogCiAJa2ZyZWUoc2F2ZV9jb25uZWN0b3JzKTsKIAlrZnJlZShzYXZlX2VuY29kZXJzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4IDY5NzdhMWMuLmY3M2VmNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtNjcyLDcgKzY3Miw3IEBACiAJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19mdW5jczsKIAl1MTYgKnJlZCwgKmdyZWVuLCAqYmx1ZSwgKnRyYW5zcDsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0JaW50IGksIHJjID0gMDsKKwlpbnQgaSwgaiwgcmMgPSAwOwogCWludCBzdGFydDsKIAogCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgewpAQCAtNjg1LDcgKzY4NSw3IEBACiAJCXRyYW5zcCA9IGNtYXAtPnRyYW5zcDsKIAkJc3RhcnQgPSBjbWFwLT5zdGFydDsKIAotCQlmb3IgKGkgPSAwOyBpIDwgY21hcC0+bGVuOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IGNtYXAtPmxlbjsgaisrKSB7CiAJCQl1MTYgaHJlZCwgaGdyZWVuLCBoYmx1ZSwgaHRyYW5zcCA9IDB4ZmZmZjsKIAogCQkJaHJlZCA9ICpyZWQrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKaW5kZXggM2NkYmFmMy4uYmU5YTljMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKQEAgLTI4MywxNyArMjgzLDE4IEBACiAjZW5kaWYKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlzZXFfcHJpbnRmKG0sICJ2bWEgdXNlIGNvdW50OiAlZCwgaGlnaF9tZW1vcnkgPSAlcCwgMHglMDhsbHhcbiIsCisJc2VxX3ByaW50ZihtLCAidm1hIHVzZSBjb3VudDogJWQsIGhpZ2hfbWVtb3J5ID0gJXBLLCAweCVwS1xuIiwKIAkJICAgYXRvbWljX3JlYWQoJmRldi0+dm1hX2NvdW50KSwKLQkJICAgaGlnaF9tZW1vcnksICh1NjQpdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSk7CisJCSAgIGhpZ2hfbWVtb3J5LCAodm9pZCAqKXZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwdCwgJmRldi0+dm1hbGlzdCwgaGVhZCkgewogCQl2bWEgPSBwdC0+dm1hOwogCQlpZiAoIXZtYSkKIAkJCWNvbnRpbnVlOwogCQlzZXFfcHJpbnRmKG0sCi0JCQkgICAiXG4lNWQgMHglMDhseC0weCUwOGx4ICVjJWMlYyVjJWMlYyAweCUwOGx4MDAwIiwKLQkJCSAgIHB0LT5waWQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAorCQkJICAgIlxuJTVkIDB4JXBLLTB4JXBLICVjJWMlYyVjJWMlYyAweCUwOGx4MDAwIiwKKwkJCSAgIHB0LT5waWQsCisJCQkgICAodm9pZCAqKXZtYS0+dm1fc3RhcnQsICh2b2lkICopdm1hLT52bV9lbmQsCiAJCQkgICB2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCA/ICdyJyA6ICctJywKIAkJCSAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSA/ICd3JyA6ICctJywKIAkJCSAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDID8gJ3gnIDogJy0nLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKaW5kZXggMDA1NGU5NS4uMjhkMWQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC0xNjQsOCArMTY0LDEwIEBACiAJICogYXZhaWxhYmxlLiBJbiB0aGF0IGNhc2Ugd2UgY2FuJ3QgYWNjb3VudCBmb3IgdGhpcyBhbmQganVzdAogCSAqIGhvcGUgZm9yIHRoZSBiZXN0LgogCSAqLwotCWlmICgodmJscmMgPiAwKSAmJiAoYWJzKGRpZmZfbnMpID4gMTAwMDAwMCkpCisJaWYgKCh2YmxyYyA+IDApICYmIChhYnM2NChkaWZmX25zKSA+IDEwMDAwMDApKSB7CiAJCWF0b21pY19pbmMoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCX0KIAogCS8qIEludmFsaWRhdGUgYWxsIHRpbWVzdGFtcHMgd2hpbGUgdmJsYW5rIGlycSdzIGFyZSBvZmYuICovCiAJY2xlYXJfdmJsYW5rX3RpbWVzdGFtcHMoZGV2LCBjcnRjKTsKQEAgLTQ5MSw2ICs0OTMsMTIgQEAKIAkvKiBEb3QgY2xvY2sgaW4gSHo6ICovCiAJZG90Y2xvY2sgPSAodTY0KSBjcnRjLT5od21vZGUuY2xvY2sgKiAxMDAwOwogCisJLyogRmllbGRzIG9mIGludGVybGFjZWQgc2Nhbm91dCBtb2RlcyBhcmUgb25seSBoYWx2ZSBhIGZyYW1lIGR1cmF0aW9uLgorCSAqIERvdWJsZSB0aGUgZG90Y2xvY2sgdG8gZ2V0IGhhbHZlIHRoZSBmcmFtZS0vbGluZS0vcGl4ZWxkdXJhdGlvbi4KKwkgKi8KKwlpZiAoY3J0Yy0+aHdtb2RlLmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCWRvdGNsb2NrICo9IDI7CisKIAkvKiBWYWxpZCBkb3RjbG9jaz8gKi8KIAlpZiAoZG90Y2xvY2sgPiAwKSB7CiAJCS8qIENvbnZlcnQgc2NhbmxpbmUgbGVuZ3RoIGluIHBpeGVscyBhbmQgdmlkZW8gZG90IGNsb2NrIHRvCkBAIC02MDMsMTQgKzYxMSw2IEBACiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCS8qIERvbid0IGtub3cgeWV0IGhvdyB0byBoYW5kbGUgaW50ZXJsYWNlZCBvcgotCSAqIGRvdWJsZSBzY2FuIG1vZGVzLiBKdXN0IG5vLW9wIGZvciBub3cuCi0JICovCi0JaWYgKG1vZGUtPmZsYWdzICYgKERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFIHwgRFJNX01PREVfRkxBR19EQkxTQ0FOKSkgewotCQlEUk1fREVCVUcoImNydGMgJWQ6IE5vb3AgZHVlIHRvIHVuc3VwcG9ydGVkIG1vZGUuXG4iLCBjcnRjKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KIAkvKiBHZXQgY3VycmVudCBzY2Fub3V0IHBvc2l0aW9uIHdpdGggc3lzdGVtIHRpbWVzdGFtcC4KIAkgKiBSZXBlYXQgcXVlcnkgdXAgdG8gRFJNX1RJTUVTVEFNUF9NQVhSRVRSSUVTIHRpbWVzCiAJICogaWYgc2luZ2xlIHF1ZXJ5IHRha2VzIGxvbmdlciB0aGFuIG1heF9lcnJvciBuYW5vc2Vjb25kcy4KQEAgLTg1OCwxMCArODU4LDExIEBACiAJaWYgKHJjKSB7CiAJCXRzbG90ID0gYXRvbWljX3JlYWQoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSkgKyBkaWZmOwogCQl2Ymxhbmt0aW1lc3RhbXAoZGV2LCBjcnRjLCB0c2xvdCkgPSB0X3ZibGFuazsKLQkJc21wX3dtYigpOwogCX0KIAorCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKIAlhdG9taWNfYWRkKGRpZmYsICZkZXYtPl92YmxhbmtfY291bnRbY3J0Y10pOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwogfQogCiAvKioKQEAgLTEwMTEsNyArMTAxMiw4IEBACiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsICptb2Rlc2V0ID0gZGF0YTsKLQlpbnQgY3J0YywgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgY3J0YzsKIAogCS8qIElmIGRybV92YmxhbmtfaW5pdCgpIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQsIGp1c3Qgbm8tb3AgKi8KIAlpZiAoIWRldi0+bnVtX2NydGNzKQpAQCAtMTI1MCw3ICsxMjUyLDcgQEAKICAqIERyaXZlcnMgc2hvdWxkIGNhbGwgdGhpcyByb3V0aW5lIGluIHRoZWlyIHZibGFuayBpbnRlcnJ1cHQgaGFuZGxlcnMgdG8KICAqIHVwZGF0ZSB0aGUgdmJsYW5rIGNvdW50ZXIgYW5kIHNlbmQgYW55IHNpZ25hbHMgdGhhdCBtYXkgYmUgcGVuZGluZy4KICAqLwotdm9pZCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKK2Jvb2wgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpCiB7CiAJdTMyIHZibGNvdW50OwogCXM2NCBkaWZmX25zOwpAQCAtMTI1OCw3ICsxMjYwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJaWYgKCFkZXYtPm51bV9jcnRjcykKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBOZWVkIHRpbWVzdGFtcCBsb2NrIHRvIHByZXZlbnQgY29uY3VycmVudCBleGVjdXRpb24gd2l0aAogCSAqIHZibGFuayBlbmFibGUvZGlzYWJsZSwgYXMgdGhpcyB3b3VsZCBjYXVzZSBpbmNvbnNpc3RlbnQKQEAgLTEyNjksNyArMTI3MSw3IEBACiAJLyogVmJsYW5rIGlycSBoYW5kbGluZyBkaXNhYmxlZC4gTm90aGluZyB0byBkby4gKi8KIAlpZiAoIWRldi0+dmJsYW5rX2VuYWJsZWRbY3J0Y10pIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxhbmtfdGltZV9sb2NrLCBpcnFmbGFncyk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIEZldGNoIGNvcnJlc3BvbmRpbmcgdGltZXN0YW1wIGZvciB0aGlzIHZibGFuayBpbnRlcnZhbCBmcm9tCkBAIC0xMjkzLDE1ICsxMjk1LDE2IEBACiAJICogZS5nLiwgZHVlIHRvIHNwdXJpb3VzIHZibGFuayBpbnRlcnJ1cHRzLiBXZSBuZWVkIHRvCiAJICogaWdub3JlIHRob3NlIGZvciBhY2NvdW50aW5nLgogCSAqLwotCWlmIChhYnMoZGlmZl9ucykgPiBEUk1fUkVEVU5EQU5UX1ZCTElSUV9USFJFU0hfTlMpIHsKKwlpZiAoYWJzNjQoZGlmZl9ucykgPiBEUk1fUkVEVU5EQU5UX1ZCTElSUV9USFJFU0hfTlMpIHsKIAkJLyogU3RvcmUgbmV3IHRpbWVzdGFtcCBpbiByaW5nYnVmZmVyLiAqLwogCQl2Ymxhbmt0aW1lc3RhbXAoZGV2LCBjcnRjLCB2Ymxjb3VudCArIDEpID0gdHZibGFuazsKLQkJc21wX3dtYigpOwogCiAJCS8qIEluY3JlbWVudCBjb29rZWQgdmJsYW5rIGNvdW50LiBUaGlzIGFsc28gYXRvbWljYWxseSBjb21taXRzCiAJCSAqIHRoZSB0aW1lc3RhbXAgY29tcHV0ZWQgYWJvdmUuCiAJCSAqLworCQlzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCk7CiAJCWF0b21pY19pbmMoJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7CisJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwogCX0gZWxzZSB7CiAJCURSTV9ERUJVRygiY3J0YyAlZDogUmVkdW5kYW50IHZibGlycSBpZ25vcmVkLiBkaWZmX25zID0gJWRcbiIsCiAJCQkgIGNydGMsIChpbnQpIGRpZmZfbnMpOwpAQCAtMTMxMSw1ICsxMzE0LDYgQEAKIAlkcm1faGFuZGxlX3ZibGFua19ldmVudHMoZGV2LCBjcnRjKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsYW5rX3RpbWVfbG9jaywgaXJxZmxhZ3MpOworCXJldHVybiB0cnVlOwogfQogRVhQT1JUX1NZTUJPTChkcm1faGFuZGxlX3ZibGFuayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCmluZGV4IDM2MDE0NjYuLjRmZjliNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC04NjUsNyArODY1LDcgQEAKIAkJaW50IG1heF9mcmVxOwogCiAJCS8qIFJQU1RBVDEgaXMgaW4gdGhlIEdUIHBvd2VyIHdlbGwgKi8KLQkJX19nZW42X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2KTsKKwkJX19nZW42X2d0X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2KTsKIAogCQlzZXFfcHJpbnRmKG0sICJHVF9QRVJGX1NUQVRVUzogMHglMDh4XG4iLCBndF9wZXJmX3N0YXR1cyk7CiAJCXNlcV9wcmludGYobSwgIlJQU1RBVDE6IDB4JTA4eFxuIiwgSTkxNV9SRUFEKEdFTjZfUlBTVEFUMSkpOwpAQCAtODg4LDcgKzg4OCw3IEBACiAJCXNlcV9wcmludGYobSwgIk1heCBub24tb3ZlcmNsb2NrZWQgKFJQMCkgZnJlcXVlbmN5OiAlZE1IelxuIiwKIAkJCSAgIG1heF9mcmVxICogMTAwKTsKIAotCQlfX2dlbjZfZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYpOworCQlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYpOwogCX0gZWxzZSB7CiAJCXNlcV9wcmludGYobSwgIm5vIFAtc3RhdGUgaW5mbyBhdmFpbGFibGVcbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDE3YmQ3NjYuLmUzM2Q5YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMTg5NSw2ICsxODk1LDE3IEBACiAJaWYgKElTX0dFTjIoZGV2KSkKIAkJZG1hX3NldF9jb2hlcmVudF9tYXNrKCZkZXYtPnBkZXYtPmRldiwgRE1BX0JJVF9NQVNLKDMwKSk7CiAKKwkvKiA5NjVHTSBzb21ldGltZXMgaW5jb3JyZWN0bHkgd3JpdGVzIHRvIGhhcmR3YXJlIHN0YXR1cyBwYWdlIChIV1MpCisJICogdXNpbmcgMzJiaXQgYWRkcmVzc2luZywgb3ZlcndyaXRpbmcgbWVtb3J5IGlmIEhXUyBpcyBsb2NhdGVkCisJICogYWJvdmUgNEdCLgorCSAqCisJICogVGhlIGRvY3VtZW50YXRpb24gYWxzbyBtZW50aW9ucyBhbiBpc3N1ZSB3aXRoIHVuZGVmaW5lZAorCSAqIGJlaGF2aW91ciBpZiBhbnkgZ2VuZXJhbCBzdGF0ZSBpcyBhY2Nlc3NlZCB3aXRoaW4gYSBwYWdlIGFib3ZlIDRHQiwKKwkgKiB3aGljaCBhbHNvIG5lZWRzIHRvIGJlIGhhbmRsZWQgY2FyZWZ1bGx5LgorCSAqLworCWlmIChJU19CUk9BRFdBVEVSKGRldikgfHwgSVNfQ1JFU1RMSU5FKGRldikpCisJCWRtYV9zZXRfY29oZXJlbnRfbWFzaygmZGV2LT5wZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOworCiAJbW1pb19iYXIgPSBJU19HRU4yKGRldikgPyAxIDogMDsKIAlkZXZfcHJpdi0+cmVncyA9IHBjaV9pb21hcChkZXYtPnBkZXYsIG1taW9fYmFyLCAwKTsKIAlpZiAoIWRldl9wcml2LT5yZWdzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCA2Njc5NmJiLi4yMmVjMDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTQ2LDYgKzQ2LDEyIEBACiB1bnNpZ25lZCBpbnQgaTkxNV9wb3dlcnNhdmUgPSAxOwogbW9kdWxlX3BhcmFtX25hbWVkKHBvd2Vyc2F2ZSwgaTkxNV9wb3dlcnNhdmUsIGludCwgMDYwMCk7CiAKK3Vuc2lnbmVkIGludCBpOTE1X3NlbWFwaG9yZXMgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKHNlbWFwaG9yZXMsIGk5MTVfc2VtYXBob3JlcywgaW50LCAwNjAwKTsKKwordW5zaWduZWQgaW50IGk5MTVfZW5hYmxlX3JjNiA9IDA7Cittb2R1bGVfcGFyYW1fbmFtZWQoaTkxNV9lbmFibGVfcmM2LCBpOTE1X2VuYWJsZV9yYzYsIGludCwgMDYwMCk7CisKIHVuc2lnbmVkIGludCBpOTE1X2x2ZHNfZG93bmNsb2NrID0gMDsKIG1vZHVsZV9wYXJhbV9uYW1lZChsdmRzX2Rvd25jbG9jaywgaTkxNV9sdmRzX2Rvd25jbG9jaywgaW50LCAwNDAwKTsKIApAQCAtMjUxLDcgKzI1Nyw3IEBACiAJfQogfQogCi12b2lkIF9fZ2VuNl9mb3JjZV93YWtlX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit2b2lkIF9fZ2VuNl9ndF9mb3JjZV93YWtlX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJaW50IGNvdW50OwogCkBAIC0yNjcsMTIgKzI3MywyMiBAQAogCQl1ZGVsYXkoMTApOwogfQogCi12b2lkIF9fZ2VuNl9mb3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit2b2lkIF9fZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJSTkxNV9XUklURV9OT1RSQUNFKEZPUkNFV0FLRSwgMCk7CiAJUE9TVElOR19SRUFEKEZPUkNFV0FLRSk7CiB9CiAKK3ZvaWQgX19nZW42X2d0X3dhaXRfZm9yX2ZpZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCWludCBsb29wID0gNTAwOworCXUzMiBmaWZvID0gSTkxNV9SRUFEX05PVFJBQ0UoR1RfRklGT19GUkVFX0VOVFJJRVMpOworCXdoaWxlIChmaWZvIDwgMjAgJiYgbG9vcC0tKSB7CisJCXVkZWxheSgxMCk7CisJCWZpZm8gPSBJOTE1X1JFQURfTk9UUkFDRShHVF9GSUZPX0ZSRUVfRU5UUklFUyk7CisJfQorfQorCiBzdGF0aWMgaW50IGk5MTVfZHJtX2ZyZWV6ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0zNTQsMTIgKzM3MCwxMyBAQAogCQllcnJvciA9IGk5MTVfZ2VtX2luaXRfcmluZ2J1ZmZlcihkZXYpOwogCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAorCQlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGV2KTsKIAkJZHJtX2lycV9pbnN0YWxsKGRldik7CiAKIAkJLyogUmVzdW1lIHRoZSBtb2Rlc2V0IGZvciBldmVyeSBhY3RpdmF0ZWQgQ1JUQyAqLwogCQlkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKGRldik7CiAKLQkJaWYgKGRldl9wcml2LT5yZW5kZXJjdHggJiYgZGV2X3ByaXYtPnB3cmN0eCkKKwkJaWYgKElTX0lST05MQUtFX00oZGV2KSkKIAkJCWlyb25sYWtlX2VuYWJsZV9yYzYoZGV2KTsKIAl9CiAKQEAgLTU0Miw2ICs1NTksNyBAQAogCiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCQlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGV2KTsKIAkJZHJtX2lycV9pbnN0YWxsKGRldik7CiAJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAl9CkBAIC01NjYsNiArNTg0LDE0IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogaTkxNV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CisJLyogT25seSBiaW5kIHRvIGZ1bmN0aW9uIDAgb2YgdGhlIGRldmljZS4gRWFybHkgZ2VuZXJhdGlvbnMKKwkgKiB1c2VkIGZ1bmN0aW9uIDEgYXMgYSBwbGFjZWhvbGRlciBmb3IgbXVsdGktaGVhZC4gVGhpcyBjYXVzZXMKKwkgKiB1cyBjb25mdXNpb24gaW5zdGVhZCwgZXNwZWNpYWxseSBvbiB0aGUgc3lzdGVtcyB3aGVyZSBib3RoCisJICogZnVuY3Rpb25zIGhhdmUgdGhlIHNhbWUgUENJLUlEIQorCSAqLworCWlmIChQQ0lfRlVOQyhwZGV2LT5kZXZmbikpCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0dXJuIGRybV9nZXRfcGNpX2RldihwZGV2LCBlbnQsICZkcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBhMDE0OWM2Li40NTZmNDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTk1Niw4ICs5NTYsMTAgQEAKIGV4dGVybiBpbnQgaTkxNV9tYXhfaW9jdGw7CiBleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfZmJwZXJjcnRjOwogZXh0ZXJuIHVuc2lnbmVkIGludCBpOTE1X3Bvd2Vyc2F2ZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9zZW1hcGhvcmVzOwogZXh0ZXJuIHVuc2lnbmVkIGludCBpOTE1X2x2ZHNfZG93bmNsb2NrOwogZXh0ZXJuIHVuc2lnbmVkIGludCBpOTE1X3BhbmVsX3VzZV9zc2M7CitleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfZW5hYmxlX3JjNjsKIAogZXh0ZXJuIGludCBpOTE1X3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIGV4dGVybiBpbnQgaTkxNV9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CkBAIC0xMTc2LDYgKzExNzgsOSBAQAogdm9pZCBpOTE1X2dlbV9mcmVlX2FsbF9waHlzX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgaTkxNV9nZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwogCit1aW50MzJfdAoraTkxNV9nZW1fZ2V0X3VuZmVuY2VkX2d0dF9hbGlnbm1lbnQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CisKIC8qIGk5MTVfZ2VtX2d0dC5jICovCiB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZ3R0X21hcHBpbmdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9ndHRfYmluZF9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CkBAIC0xMzUyLDIyICsxMzU3LDMyIEBACiAgKiBtdXN0IGJlIHNldCB0byBwcmV2ZW50IEdUIGNvcmUgZnJvbSBwb3dlciBkb3duIGFuZCBzdGFsZSB2YWx1ZXMgYmVpbmcKICAqIHJldHVybmVkLgogICovCi12b2lkIF9fZ2VuNl9mb3JjZV93YWtlX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBfX2dlbjZfZm9yY2Vfd2FrZV9wdXQgKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci1zdGF0aWMgaW5saW5lIHUzMiBpOTE1X3NhZmVfcmVhZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiByZWcpCit2b2lkIF9fZ2VuNl9ndF9mb3JjZV93YWtlX2dldChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK3ZvaWQgX19nZW42X2d0X3dhaXRfZm9yX2ZpZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKworc3RhdGljIGlubGluZSB1MzIgaTkxNV9ndF9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZykKIHsKIAl1MzIgdmFsOwogCiAJaWYgKGRldl9wcml2LT5pbmZvLT5nZW4gPj0gNikgewotCQlfX2dlbjZfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOworCQlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOwogCQl2YWwgPSBJOTE1X1JFQUQocmVnKTsKLQkJX19nZW42X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKKwkJX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKIAl9IGVsc2UKIAkJdmFsID0gSTkxNV9SRUFEKHJlZyk7CiAKIAlyZXR1cm4gdmFsOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaTkxNV9ndF93cml0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJdTMyIHJlZywgdTMyIHZhbCkKK3sKKwlpZiAoZGV2X3ByaXYtPmluZm8tPmdlbiA+PSA2KQorCQlfX2dlbjZfZ3Rfd2FpdF9mb3JfZmlmbyhkZXZfcHJpdik7CisJSTkxNV9XUklURShyZWcsIHZhbCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogaTkxNV93cml0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiByZWcsIHU2NCB2YWwsIGludCBsZW4pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBjZjRmNzRjLi4zNmU2NmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTEzOTgsNyArMTM5OCw3IEBACiAgKiBSZXR1cm4gdGhlIHJlcXVpcmVkIEdUVCBhbGlnbm1lbnQgZm9yIGFuIG9iamVjdCwgb25seSB0YWtpbmcgaW50byBhY2NvdW50CiAgKiB1bmZlbmNlZCB0aWxlZCBzdXJmYWNlIHJlcXVpcmVtZW50cy4KICAqLwotc3RhdGljIHVpbnQzMl90Cit1aW50MzJfdAogaTkxNV9nZW1fZ2V0X3VuZmVuY2VkX2d0dF9hbGlnbm1lbnQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwppbmRleCBkMmY0NDVlLi41MGFiMTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBAIC03NzIsOCArNzcyLDggQEAKIAlpZiAoZnJvbSA9PSBOVUxMIHx8IHRvID09IGZyb20pCiAJCXJldHVybiAwOwogCi0JLyogWFhYIGdwdSBzZW1hcGhvcmVzIGFyZSBjdXJyZW50bHkgY2F1c2luZyBoYXJkIGhhbmdzIG9uIFNOQiBtb2JpbGUgKi8KLQlpZiAoSU5URUxfSU5GTyhvYmotPmJhc2UuZGV2KS0+Z2VuIDwgNiB8fCBJU19NT0JJTEUob2JqLT5iYXNlLmRldikpCisJLyogWFhYIGdwdSBzZW1hcGhvcmVzIGFyZSBpbXBsaWNhdGVkIGluIHZhcmlvdXMgaGFyZCBoYW5ncyBvbiBTTkIgKi8KKwlpZiAoSU5URUxfSU5GTyhvYmotPmJhc2UuZGV2KS0+Z2VuIDwgNiB8fCAhaTkxNV9zZW1hcGhvcmVzKQogCQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgdHJ1ZSk7CiAKIAlpZHggPSBpbnRlbF9yaW5nX3N5bmNfaW5kZXgoZnJvbSwgdG8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwppbmRleCAyMmEzMmI5Li5kNjQ4NDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpAQCAtMzQ5LDE0ICszNDksMjcgQEAKIAkJCShvYmotPmd0dF9vZmZzZXQgKyBvYmotPmJhc2Uuc2l6ZSA8PSBkZXZfcHJpdi0+bW0uZ3R0X21hcHBhYmxlX2VuZCAmJgogCQkJIGk5MTVfZ2VtX29iamVjdF9mZW5jZV9vayhvYmosIGFyZ3MtPnRpbGluZ19tb2RlKSk7CiAKLQkJb2JqLT50aWxpbmdfY2hhbmdlZCA9IHRydWU7Ci0JCW9iai0+dGlsaW5nX21vZGUgPSBhcmdzLT50aWxpbmdfbW9kZTsKLQkJb2JqLT5zdHJpZGUgPSBhcmdzLT5zdHJpZGU7CisJCS8qIFJlYmluZCBpZiB3ZSBuZWVkIGEgY2hhbmdlIG9mIGFsaWdubWVudCAqLworCQlpZiAoIW9iai0+bWFwX2FuZF9mZW5jZWFibGUpIHsKKwkJCXUzMiB1bmZlbmNlZF9hbGlnbm1lbnQgPQorCQkJCWk5MTVfZ2VtX2dldF91bmZlbmNlZF9ndHRfYWxpZ25tZW50KG9iaik7CisJCQlpZiAob2JqLT5ndHRfb2Zmc2V0ICYgKHVuZmVuY2VkX2FsaWdubWVudCAtIDEpKQorCQkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF91bmJpbmQob2JqKTsKKwkJfQorCisJCWlmIChyZXQgPT0gMCkgeworCQkJb2JqLT50aWxpbmdfY2hhbmdlZCA9IHRydWU7CisJCQlvYmotPnRpbGluZ19tb2RlID0gYXJncy0+dGlsaW5nX21vZGU7CisJCQlvYmotPnN0cmlkZSA9IGFyZ3MtPnN0cmlkZTsKKwkJfQogCX0KKwkvKiB3ZSBoYXZlIHRvIG1haW50YWluIHRoaXMgZXhpc3RpbmcgQUJJLi4uICovCisJYXJncy0+c3RyaWRlID0gb2JqLT5zdHJpZGU7CisJYXJncy0+dGlsaW5nX21vZGUgPSBvYmotPnRpbGluZ19tb2RlOwogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCAwNjJmMzUzLi44YTllMDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTMxNiw2ICszMTYsOCBAQAogCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7CiAJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7CiAKKwlEUk1fREVCVUdfS01TKCJydW5uaW5nIGVuY29kZXIgaG90cGx1ZyBmdW5jdGlvbnNcbiIpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmbW9kZV9jb25maWctPmVuY29kZXJfbGlzdCwgYmFzZS5oZWFkKQogCQlpZiAoZW5jb2Rlci0+aG90X3BsdWcpCiAJCQllbmNvZGVyLT5ob3RfcGx1ZyhlbmNvZGVyKTsKQEAgLTExOTYsMTggKzExOTgsMTggQEAKIAkJCQlpbnRlbF9maW5pc2hfcGFnZV9mbGlwX3BsYW5lKGRldiwgMSk7CiAJCX0KIAotCQlpZiAocGlwZWFfc3RhdHMgJiB2Ymxhbmtfc3RhdHVzKSB7CisJCWlmIChwaXBlYV9zdGF0cyAmIHZibGFua19zdGF0dXMgJiYKKwkJICAgIGRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCkpIHsKIAkJCXZibGFuaysrOwotCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAkJCWlmICghZGV2X3ByaXYtPmZsaXBfcGVuZGluZ19pc19kb25lKSB7CiAJCQkJaTkxNV9wYWdlZmxpcF9zdGFsbF9jaGVjayhkZXYsIDApOwogCQkJCWludGVsX2ZpbmlzaF9wYWdlX2ZsaXAoZGV2LCAwKTsKIAkJCX0KIAkJfQogCi0JCWlmIChwaXBlYl9zdGF0cyAmIHZibGFua19zdGF0dXMpIHsKKwkJaWYgKHBpcGViX3N0YXRzICYgdmJsYW5rX3N0YXR1cyAmJgorCQkgICAgZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKSkgewogCQkJdmJsYW5rKys7Ci0JCQlkcm1faGFuZGxlX3ZibGFuayhkZXYsIDEpOwogCQkJaWYgKCFkZXZfcHJpdi0+ZmxpcF9wZW5kaW5nX2lzX2RvbmUpIHsKIAkJCQlpOTE1X3BhZ2VmbGlwX3N0YWxsX2NoZWNrKGRldiwgMSk7CiAJCQkJaW50ZWxfZmluaXNoX3BhZ2VfZmxpcChkZXYsIDEpOwpAQCAtMTY0OSw5ICsxNjUxLDcgQEAKIAl9IGVsc2UgewogCQlob3RwbHVnX21hc2sgPSBTREVfQ1JUX0hPVFBMVUcgfCBTREVfUE9SVEJfSE9UUExVRyB8CiAJCQkgICAgICAgU0RFX1BPUlRDX0hPVFBMVUcgfCBTREVfUE9SVERfSE9UUExVRzsKLQkJaG90cGx1Z19tYXNrIHw9IFNERV9BVVhfTUFTSyB8IFNERV9GRElfTUFTSyB8IFNERV9UUkFOU19NQVNLOwotCQlJOTE1X1dSSVRFKEZESV9SWEFfSU1SLCAwKTsKLQkJSTkxNV9XUklURShGRElfUlhCX0lNUiwgMCk7CisJCWhvdHBsdWdfbWFzayB8PSBTREVfQVVYX01BU0s7CiAJfQogCiAJZGV2X3ByaXYtPnBjaF9pcnFfbWFzayA9IH5ob3RwbHVnX21hc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCA1Y2ZjNjg5Li4zZTZmNDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTE3NCw3ICsxNzQsOSBAQAogICogICBhZGRyZXNzL3ZhbHVlIHBhaXJzLiBEb24ndCBvdmVyZHVlIGl0LCB0aG91Z2gsIHggPD0gMl40IG11c3QgaG9sZCEKICAqLwogI2RlZmluZSBNSV9MT0FEX1JFR0lTVEVSX0lNTSh4KQlNSV9JTlNUUigweDIyLCAyKngtMSkKLSNkZWZpbmUgTUlfRkxVU0hfRFcJCU1JX0lOU1RSKDB4MjYsIDIpIC8qIGZvciBHRU42ICovCisjZGVmaW5lIE1JX0ZMVVNIX0RXCQlNSV9JTlNUUigweDI2LCAxKSAvKiBmb3IgR0VONiAqLworI2RlZmluZSAgIE1JX0lOVkFMSURBVEVfVExCCSgxPDwxOCkKKyNkZWZpbmUgICBNSV9JTlZBTElEQVRFX0JTRAkoMTw8NykKICNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSCQlNSV9JTlNUUigweDMwLCAxKQogI2RlZmluZSAgIE1JX0JBVENIX05PTl9TRUNVUkUJKDEpCiAjZGVmaW5lICAgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1ICgxPDw4KQpAQCAtMTU1MSwxNyArMTU1Myw3IEBACiAKIC8qIEJhY2tsaWdodCBjb250cm9sICovCiAjZGVmaW5lIEJMQ19QV01fQ1RMCQkweDYxMjU0Ci0jZGVmaW5lICAgQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9TSElGVAkJKDE3KQogI2RlZmluZSBCTENfUFdNX0NUTDIJCTB4NjEyNTAgLyogOTY1KyBvbmx5ICovCi0jZGVmaW5lICAgQkxNX0NPTUJJTkFUSU9OX01PREUgKDEgPDwgMzApCi0vKgotICogVGhpcyBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCAxNSBiaXRzIG9mIHRoZSBudW1iZXIgb2YgYmFja2xpZ2h0IGN5Y2xlcyBpbiBhCi0gKiBjb21wbGV0ZSBjeWNsZSBvZiB0aGUgbW9kdWxhdGVkIGJhY2tsaWdodCBjb250cm9sLgotICoKLSAqIFRoZSBhY3R1YWwgdmFsdWUgaXMgdGhpcyBmaWVsZCBtdWx0aXBsaWVkIGJ5IHR3by4KLSAqLwotI2RlZmluZSAgIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfTUFTSwkJKDB4N2ZmZiA8PCAxNykKLSNkZWZpbmUgICBCTE1fTEVHQUNZX01PREUJCQkJKDEgPDwgMTYpCiAvKgogICogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGN5Y2xlcyBvdXQgb2YgdGhlIGJhY2tsaWdodCBtb2R1bGF0aW9uIGN5Y2xlIGZvciB3aGljaAogICogdGhlIGJhY2tsaWdodCBpcyBvbi4KQEAgLTMyNjksNiArMzI2MSw4IEBACiAjZGVmaW5lICBGT1JDRVdBS0UJCQkJMHhBMThDCiAjZGVmaW5lICBGT1JDRVdBS0VfQUNLCQkJCTB4MTMwMDkwCiAKKyNkZWZpbmUgIEdUX0ZJRk9fRlJFRV9FTlRSSUVTCQkJMHgxMjAwMDgKKwogI2RlZmluZSBHRU42X1JQTlNXUkVRCQkJCTB4QTAwOAogI2RlZmluZSAgIEdFTjZfVFVSQk9fRElTQUJMRQkJCSgxPDwzMSkKICNkZWZpbmUgICBHRU42X0ZSRVFVRU5DWSh4KQkJCSgoeCk8PDI1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCAxNzAzNWI4Li44YTc3ZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtNTM1LDYgKzUzNSwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRfcmVzZXQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGludGVsX2NydCAqY3J0ID0gaW50ZWxfYXR0YWNoZWRfY3J0KGNvbm5lY3Rvcik7CisKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQorCQljcnQtPmZvcmNlX2hvdHBsdWdfcmVxdWlyZWQgPSAxOworfQorCiAvKgogICogUm91dGluZXMgZm9yIGNvbnRyb2xsaW5nIHN0dWZmIG9uIHRoZSBhbmFsb2cgcG9ydAogICovCkBAIC01NDgsNiArNTU3LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBpbnRlbF9jcnRfY29ubmVjdG9yX2Z1bmNzID0geworCS5yZXNldCA9IGludGVsX2NydF9yZXNldCwKIAkuZHBtcyA9IGRybV9oZWxwZXJfY29ubmVjdG9yX2RwbXMsCiAJLmRldGVjdCA9IGludGVsX2NydF9kZXRlY3QsCiAJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggZDdmMjM3ZC4uNDlmYjU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMTIxOSw3ICsxMjE5LDcgQEAKIAl1MzIgYmx0X2Vjb3NrcGQ7CiAKIAkvKiBNYWtlIHN1cmUgYmxpdHRlciBub3RpZmllcyBGQkMgb2Ygd3JpdGVzICovCi0JX19nZW42X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2KTsKKwlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOwogCWJsdF9lY29za3BkID0gSTkxNV9SRUFEKEdFTjZfQkxJVFRFUl9FQ09TS1BEKTsKIAlibHRfZWNvc2twZCB8PSBHRU42X0JMSVRURVJfRkJDX05PVElGWSA8PAogCQlHRU42X0JMSVRURVJfTE9DS19TSElGVDsKQEAgLTEyMzAsNyArMTIzMCw3IEBACiAJCQkgR0VONl9CTElUVEVSX0xPQ0tfU0hJRlQpOwogCUk5MTVfV1JJVEUoR0VONl9CTElUVEVSX0VDT1NLUEQsIGJsdF9lY29za3BkKTsKIAlQT1NUSU5HX1JFQUQoR0VONl9CTElUVEVSX0VDT1NLUEQpOwotCV9fZ2VuNl9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7CisJX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKIH0KIAogc3RhdGljIHZvaWQgaXJvbmxha2VfZW5hYmxlX2ZiYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwpCkBAIC0xNjMwLDE5ICsxNjMwLDE5IEBACiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihvbGRfZmIpLT5vYmo7CiAKIAkJd2FpdF9ldmVudChkZXZfcHJpdi0+cGVuZGluZ19mbGlwX3F1ZXVlLAorCQkJICAgYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpIHx8CiAJCQkgICBhdG9taWNfcmVhZCgmb2JqLT5wZW5kaW5nX2ZsaXApID09IDApOwogCiAJCS8qIEJpZyBIYW1tZXIsIHdlIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBhbnkgcGVuZGluZwogCQkgKiBNSV9XQUlUX0ZPUl9FVkVOVCBpbnNpZGUgYSB1c2VyIGJhdGNoIGJ1ZmZlciBvbiB0aGUKIAkJICogY3VycmVudCBzY2Fub3V0IGlzIHJldGlyZWQgYmVmb3JlIHVucGlubmluZyB0aGUgb2xkCiAJCSAqIGZyYW1lYnVmZmVyLgorCQkgKgorCQkgKiBUaGlzIHNob3VsZCBvbmx5IGZhaWwgdXBvbiBhIGh1bmcgR1BVLCBpbiB3aGljaCBjYXNlIHdlCisJCSAqIGNhbiBzYWZlbHkgY29udGludWUuCiAJCSAqLwogCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1KG9iaiwgZmFsc2UpOwotCQlpZiAocmV0KSB7Ci0JCQlpOTE1X2dlbV9vYmplY3RfdW5waW4odG9faW50ZWxfZnJhbWVidWZmZXIoY3J0Yy0+ZmIpLT5vYmopOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9CisJCSh2b2lkKSByZXQ7CiAJfQogCiAJcmV0ID0gaW50ZWxfcGlwZV9zZXRfYmFzZV9hdG9taWMoY3J0YywgY3J0Yy0+ZmIsIHgsIHksCkBAIC0yMDQ1LDYgKzIwNDUsMzEgQEAKIAkJICAgYXRvbWljX3JlYWQoJm9iai0+cGVuZGluZ19mbGlwKSA9PSAwKTsKIH0KIAorc3RhdGljIGJvb2wgaW50ZWxfY3J0Y19kcml2aW5nX3BjaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOworCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIGEgbm9uLVBDSCBlRFAgb24gdGhpcyBjcnRjLCBpdCBtdXN0IGJlIERQX0EsIGFuZCB0aGF0CisJICogbXVzdCBiZSBkcml2ZW4gYnkgaXRzIG93biBjcnRjOyBubyBzaGFyaW5nIGlzIHBvc3NpYmxlLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJm1vZGVfY29uZmlnLT5lbmNvZGVyX2xpc3QsIGJhc2UuaGVhZCkgeworCQlpZiAoZW5jb2Rlci0+YmFzZS5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGVuY29kZXItPnR5cGUpIHsKKwkJY2FzZSBJTlRFTF9PVVRQVVRfRURQOgorCQkJaWYgKCFpbnRlbF9lbmNvZGVyX2lzX3BjaF9lZHAoJmVuY29kZXItPmJhc2UpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyB2b2lkIGlyb25sYWtlX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwpAQCAtMjA1Myw2ICsyMDc4LDcgQEAKIAlpbnQgcGlwZSA9IGludGVsX2NydGMtPnBpcGU7CiAJaW50IHBsYW5lID0gaW50ZWxfY3J0Yy0+cGxhbmU7CiAJdTMyIHJlZywgdGVtcDsKKwlib29sIGlzX3BjaF9wb3J0ID0gZmFsc2U7CiAKIAlpZiAoaW50ZWxfY3J0Yy0+YWN0aXZlKQogCQlyZXR1cm47CkBAIC0yMDY2LDcgKzIwOTIsNTYgQEAKIAkJCUk5MTVfV1JJVEUoUENIX0xWRFMsIHRlbXAgfCBMVkRTX1BPUlRfRU4pOwogCX0KIAotCWlyb25sYWtlX2ZkaV9lbmFibGUoY3J0Yyk7CisJaXNfcGNoX3BvcnQgPSBpbnRlbF9jcnRjX2RyaXZpbmdfcGNoKGNydGMpOworCisJaWYgKGlzX3BjaF9wb3J0KQorCQlpcm9ubGFrZV9mZGlfZW5hYmxlKGNydGMpOworCWVsc2UgeworCQkvKiBkaXNhYmxlIENQVSBGREkgdHggYW5kIFBDSCBGREkgcnggKi8KKwkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKKwkJdGVtcCA9IEk5MTVfUkVBRChyZWcpOworCQlJOTE1X1dSSVRFKHJlZywgdGVtcCAmIH5GRElfVFhfRU5BQkxFKTsKKwkJUE9TVElOR19SRUFEKHJlZyk7CisKKwkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwkJdGVtcCA9IEk5MTVfUkVBRChyZWcpOworCQl0ZW1wICY9IH4oMHg3IDw8IDE2KTsKKwkJdGVtcCB8PSAoSTkxNV9SRUFEKFBJUEVDT05GKHBpcGUpKSAmIFBJUEVfQlBDX01BU0spIDw8IDExOworCQlJOTE1X1dSSVRFKHJlZywgdGVtcCAmIH5GRElfUlhfRU5BQkxFKTsKKworCQlQT1NUSU5HX1JFQUQocmVnKTsKKwkJdWRlbGF5KDEwMCk7CisKKwkJLyogSXJvbmxha2Ugd29ya2Fyb3VuZCwgZGlzYWJsZSBjbG9jayBwb2ludGVyIGFmdGVyIGRvd25pbmcgRkRJICovCisJCWlmIChIQVNfUENIX0lCWChkZXYpKQorCQkJSTkxNV9XUklURShGRElfUlhfQ0hJQ0tFTihwaXBlKSwKKwkJCQkgICBJOTE1X1JFQUQoRkRJX1JYX0NISUNLRU4ocGlwZSkgJgorCQkJCQkgICAgIH5GRElfUlhfUEhBU0VfU1lOQ19QT0lOVEVSX0VOQUJMRSkpOworCisJCS8qIHN0aWxsIHNldCB0cmFpbiBwYXR0ZXJuIDEgKi8KKwkJcmVnID0gRkRJX1RYX0NUTChwaXBlKTsKKwkJdGVtcCA9IEk5MTVfUkVBRChyZWcpOworCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwkJSTkxNV9XUklURShyZWcsIHRlbXApOworCisJCXJlZyA9IEZESV9SWF9DVEwocGlwZSk7CisJCXRlbXAgPSBJOTE1X1JFQUQocmVnKTsKKwkJaWYgKEhBU19QQ0hfQ1BUKGRldikpIHsKKwkJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX1BBVFRFUk5fTUFTS19DUFQ7CisJCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMV9DUFQ7CisJCX0gZWxzZSB7CisJCQl0ZW1wICY9IH5GRElfTElOS19UUkFJTl9OT05FOworCQkJdGVtcCB8PSBGRElfTElOS19UUkFJTl9QQVRURVJOXzE7CisJCX0KKwkJLyogQlBDIGluIEZESSByeCBpcyBjb25zaXN0ZW50IHdpdGggdGhhdCBpbiBQSVBFQ09ORiAqLworCQl0ZW1wICY9IH4oMHgwNyA8PCAxNik7CisJCXRlbXAgfD0gKEk5MTVfUkVBRChQSVBFQ09ORihwaXBlKSkgJiBQSVBFX0JQQ19NQVNLKSA8PCAxMTsKKwkJSTkxNV9XUklURShyZWcsIHRlbXApOworCisJCVBPU1RJTkdfUkVBRChyZWcpOworCQl1ZGVsYXkoMTAwKTsKKwl9CiAKIAkvKiBFbmFibGUgcGFuZWwgZml0dGluZyBmb3IgTFZEUyAqLwogCWlmIChkZXZfcHJpdi0+cGNoX3BmX3NpemUgJiYKQEAgLTIxMDAsNiArMjE3NSwxMCBAQAogCQlpbnRlbF9mbHVzaF9kaXNwbGF5X3BsYW5lKGRldiwgcGxhbmUpOwogCX0KIAorCS8qIFNraXAgdGhlIFBDSCBzdHVmZiBpZiBwb3NzaWJsZSAqLworCWlmICghaXNfcGNoX3BvcnQpCisJCWdvdG8gZG9uZTsKKwogCS8qIEZvciBQQ0ggb3V0cHV0LCB0cmFpbmluZyBGREkgbGluayAqLwogCWlmIChJU19HRU42KGRldikpCiAJCWdlbjZfZmRpX2xpbmtfdHJhaW4oY3J0Yyk7CkBAIC0yMTg0LDcgKzIyNjMsNyBAQAogCUk5MTVfV1JJVEUocmVnLCB0ZW1wIHwgVFJBTlNfRU5BQkxFKTsKIAlpZiAod2FpdF9mb3IoSTkxNV9SRUFEKHJlZykgJiBUUkFOU19TVEFURV9FTkFCTEUsIDEwMCkpCiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSB0cmFuc2NvZGVyICVkXG4iLCBwaXBlKTsKLQorZG9uZToKIAlpbnRlbF9jcnRjX2xvYWRfbHV0KGNydGMpOwogCWludGVsX3VwZGF0ZV9mYmMoZGV2KTsKIAlpbnRlbF9jcnRjX3VwZGF0ZV9jdXJzb3IoY3J0YywgdHJ1ZSk7CkBAIC01NTUxLDYgKzU2MzAsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisKKwkvKiBSZXNldCBmbGFncyBiYWNrIHRvIHRoZSAndW5rbm93bicgc3RhdHVzIHNvIHRoYXQgdGhleQorCSAqIHdpbGwgYmUgY29ycmVjdGx5IHNldCBvbiB0aGUgaW5pdGlhbCBtb2Rlc2V0LgorCSAqLworCWludGVsX2NydGMtPmRwbXNfbW9kZSA9IC0xOworfQorCiBzdGF0aWMgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBpbnRlbF9oZWxwZXJfZnVuY3MgPSB7CiAJLmRwbXMgPSBpbnRlbF9jcnRjX2RwbXMsCiAJLm1vZGVfZml4dXAgPSBpbnRlbF9jcnRjX21vZGVfZml4dXAsCkBAIC01NTYyLDYgKzU2NTEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbnRlbF9jcnRjX2Z1bmNzID0geworCS5yZXNldCA9IGludGVsX2NydGNfcmVzZXQsCiAJLmN1cnNvcl9zZXQgPSBpbnRlbF9jcnRjX2N1cnNvcl9zZXQsCiAJLmN1cnNvcl9tb3ZlID0gaW50ZWxfY3J0Y19jdXJzb3JfbW92ZSwKIAkuZ2FtbWFfc2V0ID0gaW50ZWxfY3J0Y19nYW1tYV9zZXQsCkBAIC01NjUyLDggKzU3NDIsNyBAQAogCWRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmdbaW50ZWxfY3J0Yy0+cGxhbmVdID0gJmludGVsX2NydGMtPmJhc2U7CiAJZGV2X3ByaXYtPnBpcGVfdG9fY3J0Y19tYXBwaW5nW2ludGVsX2NydGMtPnBpcGVdID0gJmludGVsX2NydGMtPmJhc2U7CiAKLQlpbnRlbF9jcnRjLT5jdXJzb3JfYWRkciA9IDA7Ci0JaW50ZWxfY3J0Yy0+ZHBtc19tb2RlID0gLTE7CisJaW50ZWxfY3J0Y19yZXNldCgmaW50ZWxfY3J0Yy0+YmFzZSk7CiAJaW50ZWxfY3J0Yy0+YWN0aXZlID0gdHJ1ZTsgLyogZm9yY2UgdGhlIHBpcGUgb2ZmIG9uIHNldHVwX2luaXRfY29uZmlnICovCiAKIAlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CkBAIC02MTkzLDcgKzYyODIsNyBAQAogCSAqIHVzZXJzcGFjZS4uLgogCSAqLwogCUk5MTVfV1JJVEUoR0VONl9SQ19TVEFURSwgMCk7Ci0JX19nZW42X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2KTsKKwlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOwogCiAJLyogZGlzYWJsZSB0aGUgY291bnRlcnMgYW5kIHNldCBkZXRlcm1pbmlzdGljIHRocmVzaG9sZHMgKi8KIAlJOTE1X1dSSVRFKEdFTjZfUkNfQ09OVFJPTCwgMCk7CkBAIC02MjkxLDcgKzYzODAsNyBAQAogCS8qIGVuYWJsZSBhbGwgUE0gaW50ZXJydXB0cyAqLwogCUk5MTVfV1JJVEUoR0VONl9QTUlOVFJNU0ssIDApOwogCi0JX19nZW42X2ZvcmNlX3dha2VfcHV0KGRldl9wcml2KTsKKwlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYpOwogfQogCiB2b2lkIGludGVsX2VuYWJsZV9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKQEAgLTY0NTIsMjkgKzY1NDEsMTkgQEAKIAl9CiB9CiAKLXZvaWQgaW50ZWxfZGlzYWJsZV9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGlyb25sYWtlX3RlYXJkb3duX3JjNihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAlpZiAoZGV2X3ByaXYtPnJlbmRlcmN0eCkgewotCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqID0gZGV2X3ByaXYtPnJlbmRlcmN0eDsKLQotCQlJOTE1X1dSSVRFKENDSUQsIDApOwotCQlQT1NUSU5HX1JFQUQoQ0NJRCk7Ci0KLQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCQlpOTE1X2dlbV9vYmplY3RfdW5waW4oZGV2X3ByaXYtPnJlbmRlcmN0eCk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZkZXZfcHJpdi0+cmVuZGVyY3R4LT5iYXNlKTsKIAkJZGV2X3ByaXYtPnJlbmRlcmN0eCA9IE5VTEw7CiAJfQogCiAJaWYgKGRldl9wcml2LT5wd3JjdHgpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGRldl9wcml2LT5wd3JjdHg7Ci0KLQkJSTkxNV9XUklURShQV1JDVFhBLCAwKTsKLQkJUE9TVElOR19SRUFEKFBXUkNUWEEpOwotCi0JCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5wd3JjdHgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZGV2X3ByaXYtPnB3cmN0eC0+YmFzZSk7CiAJCWRldl9wcml2LT5wd3JjdHggPSBOVUxMOwogCX0KIH0KQEAgLTY0ODMsMjEgKzY1NjIsMzkgQEAKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCi0JLyogV2FrZSB0aGUgR1BVLCBwcmV2ZW50IFJDNiwgdGhlbiByZXN0b3JlIFJTVERCWUNUTCAqLwotCUk5MTVfV1JJVEUoUlNUREJZQ1RMLCBJOTE1X1JFQUQoUlNUREJZQ1RMKSB8IFJDWF9TV19FWElUKTsKLQl3YWl0X2ZvcigoKEk5MTVfUkVBRChSU1REQllDVEwpICYgUlNYX1NUQVRVU19NQVNLKSA9PSBSU1hfU1RBVFVTX09OKSwKLQkJIDEwKTsKLQlQT1NUSU5HX1JFQUQoQ0NJRCk7Ci0JSTkxNV9XUklURShQV1JDVFhBLCAwKTsKLQlQT1NUSU5HX1JFQUQoUFdSQ1RYQSk7Ci0JSTkxNV9XUklURShSU1REQllDVEwsIEk5MTVfUkVBRChSU1REQllDVEwpICYgflJDWF9TV19FWElUKTsKLQlQT1NUSU5HX1JFQUQoUlNUREJZQ1RMKTsKLQlpOTE1X2dlbV9vYmplY3RfdW5waW4oZGV2X3ByaXYtPnJlbmRlcmN0eCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmRldl9wcml2LT5yZW5kZXJjdHgtPmJhc2UpOwotCWRldl9wcml2LT5yZW5kZXJjdHggPSBOVUxMOwotCWk5MTVfZ2VtX29iamVjdF91bnBpbihkZXZfcHJpdi0+cHdyY3R4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZGV2X3ByaXYtPnB3cmN0eC0+YmFzZSk7Ci0JZGV2X3ByaXYtPnB3cmN0eCA9IE5VTEw7CisJaWYgKEk5MTVfUkVBRChQV1JDVFhBKSkgeworCQkvKiBXYWtlIHRoZSBHUFUsIHByZXZlbnQgUkM2LCB0aGVuIHJlc3RvcmUgUlNUREJZQ1RMICovCisJCUk5MTVfV1JJVEUoUlNUREJZQ1RMLCBJOTE1X1JFQUQoUlNUREJZQ1RMKSB8IFJDWF9TV19FWElUKTsKKwkJd2FpdF9mb3IoKChJOTE1X1JFQUQoUlNUREJZQ1RMKSAmIFJTWF9TVEFUVVNfTUFTSykgPT0gUlNYX1NUQVRVU19PTiksCisJCQkgNTApOworCisJCUk5MTVfV1JJVEUoUFdSQ1RYQSwgMCk7CisJCVBPU1RJTkdfUkVBRChQV1JDVFhBKTsKKworCQlJOTE1X1dSSVRFKFJTVERCWUNUTCwgSTkxNV9SRUFEKFJTVERCWUNUTCkgJiB+UkNYX1NXX0VYSVQpOworCQlQT1NUSU5HX1JFQUQoUlNUREJZQ1RMKTsKKwl9CisKKwlpcm9ubGFrZV90ZWFyZG93bl9yYzYoZGV2KTsKK30KKworc3RhdGljIGludCBpcm9ubGFrZV9zZXR1cF9yYzYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9wcml2LT5yZW5kZXJjdHggPT0gTlVMTCkKKwkJZGV2X3ByaXYtPnJlbmRlcmN0eCA9IGludGVsX2FsbG9jX2NvbnRleHRfcGFnZShkZXYpOworCWlmICghZGV2X3ByaXYtPnJlbmRlcmN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoZGV2X3ByaXYtPnB3cmN0eCA9PSBOVUxMKQorCQlkZXZfcHJpdi0+cHdyY3R4ID0gaW50ZWxfYWxsb2NfY29udGV4dF9wYWdlKGRldik7CisJaWYgKCFkZXZfcHJpdi0+cHdyY3R4KSB7CisJCWlyb25sYWtlX3RlYXJkb3duX3JjNihkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpcm9ubGFrZV9lbmFibGVfcmM2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCkBAIC02NTA1LDE1ICs2NjAyLDI2IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgcmV0OwogCisJLyogcmM2IGRpc2FibGVkIGJ5IGRlZmF1bHQgZHVlIHRvIHJlcGVhdGVkIHJlcG9ydHMgb2YgaGFuZ2luZyBkdXJpbmcKKwkgKiBib290IGFuZCByZXN1bWUuCisJICovCisJaWYgKCFpOTE1X2VuYWJsZV9yYzYpCisJCXJldHVybjsKKworCXJldCA9IGlyb25sYWtlX3NldHVwX3JjNihkZXYpOworCWlmIChyZXQpCisJCXJldHVybjsKKwogCS8qCiAJICogR1BVIGNhbiBhdXRvbWF0aWNhbGx5IHBvd2VyIGRvd24gdGhlIHJlbmRlciB1bml0IGlmIGdpdmVuIGEgcGFnZQogCSAqIHRvIHNhdmUgc3RhdGUuCiAJICovCiAJcmV0ID0gQkVHSU5fTFBfUklORyg2KTsKIAlpZiAocmV0KSB7Ci0JCWlyb25sYWtlX2Rpc2FibGVfcmM2KGRldik7CisJCWlyb25sYWtlX3RlYXJkb3duX3JjNihkZXYpOwogCQlyZXR1cm47CiAJfQorCiAJT1VUX1JJTkcoTUlfU1VTUEVORF9GTFVTSCB8IE1JX1NVU1BFTkRfRkxVU0hfRU4pOwogCU9VVF9SSU5HKE1JX1NFVF9DT05URVhUKTsKIAlPVVRfUklORyhkZXZfcHJpdi0+cmVuZGVyY3R4LT5ndHRfb2Zmc2V0IHwKQEAgLTY1MzAsNiArNjYzOCw3IEBACiAJSTkxNV9XUklURShSU1REQllDVEwsIEk5MTVfUkVBRChSU1REQllDVEwpICYgflJDWF9TV19FWElUKTsKIH0KIAorCiAvKiBTZXQgdXAgY2hpcCBzcGVjaWZpYyBkaXNwbGF5IGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgaW50ZWxfaW5pdF9kaXNwbGF5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC02NzcyLDIxICs2ODgxLDkgQEAKIAlpZiAoSVNfR0VONihkZXYpKQogCQlnZW42X2VuYWJsZV9ycHMoZGV2X3ByaXYpOwogCi0JaWYgKElTX0lST05MQUtFX00oZGV2KSkgewotCQlkZXZfcHJpdi0+cmVuZGVyY3R4ID0gaW50ZWxfYWxsb2NfY29udGV4dF9wYWdlKGRldik7Ci0JCWlmICghZGV2X3ByaXYtPnJlbmRlcmN0eCkKLQkJCWdvdG8gc2tpcF9yYzY7Ci0JCWRldl9wcml2LT5wd3JjdHggPSBpbnRlbF9hbGxvY19jb250ZXh0X3BhZ2UoZGV2KTsKLQkJaWYgKCFkZXZfcHJpdi0+cHdyY3R4KSB7Ci0JCQlpOTE1X2dlbV9vYmplY3RfdW5waW4oZGV2X3ByaXYtPnJlbmRlcmN0eCk7Ci0JCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZGV2X3ByaXYtPnJlbmRlcmN0eC0+YmFzZSk7Ci0JCQlkZXZfcHJpdi0+cmVuZGVyY3R4ID0gTlVMTDsKLQkJCWdvdG8gc2tpcF9yYzY7Ci0JCX0KKwlpZiAoSVNfSVJPTkxBS0VfTShkZXYpKQogCQlpcm9ubGFrZV9lbmFibGVfcmM2KGRldik7Ci0JfQogCi1za2lwX3JjNjoKIAlJTklUX1dPUksoJmRldl9wcml2LT5pZGxlX3dvcmssIGludGVsX2lkbGVfdXBkYXRlKTsKIAlzZXR1cF90aW1lcigmZGV2X3ByaXYtPmlkbGVfdGltZXIsIGludGVsX2dwdV9pZGxlX3RpbWVyLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IDFmNDI0MmIuLjUxY2I0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtMTYzOSw2ICsxNjM5LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBib29sCitpbnRlbF9kcF9kZXRlY3RfYXVkaW8oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gaW50ZWxfYXR0YWNoZWRfZHAoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlib29sIGhhc19hdWRpbyA9IGZhbHNlOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsICZpbnRlbF9kcC0+YWRhcHRlcik7CisJaWYgKGVkaWQpIHsKKwkJaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnJhd19lZGlkID0gTlVMTDsKKwkJa2ZyZWUoZWRpZCk7CisJfQorCisJcmV0dXJuIGhhc19hdWRpbzsKK30KKwogc3RhdGljIGludAogaW50ZWxfZHBfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCSAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LApAQCAtMTY1MiwxNyArMTY3MCwyMyBAQAogCQlyZXR1cm4gcmV0OwogCiAJaWYgKHByb3BlcnR5ID09IGludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewotCQlpZiAodmFsID09IGludGVsX2RwLT5mb3JjZV9hdWRpbykKKwkJaW50IGkgPSB2YWw7CisJCWJvb2wgaGFzX2F1ZGlvOworCisJCWlmIChpID09IGludGVsX2RwLT5mb3JjZV9hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX2RwLT5mb3JjZV9hdWRpbyA9IHZhbDsKKwkJaW50ZWxfZHAtPmZvcmNlX2F1ZGlvID0gaTsKIAotCQlpZiAodmFsID4gMCAmJiBpbnRlbF9kcC0+aGFzX2F1ZGlvKQotCQkJcmV0dXJuIDA7Ci0JCWlmICh2YWwgPCAwICYmICFpbnRlbF9kcC0+aGFzX2F1ZGlvKQorCQlpZiAoaSA9PSAwKQorCQkJaGFzX2F1ZGlvID0gaW50ZWxfZHBfZGV0ZWN0X2F1ZGlvKGNvbm5lY3Rvcik7CisJCWVsc2UKKwkJCWhhc19hdWRpbyA9IGkgPiAwOworCisJCWlmIChoYXNfYXVkaW8gPT0gaW50ZWxfZHAtPmhhc19hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX2RwLT5oYXNfYXVkaW8gPSB2YWwgPiAwOworCQlpbnRlbF9kcC0+aGFzX2F1ZGlvID0gaGFzX2F1ZGlvOwogCQlnb3RvIGRvbmU7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDc0ZGIyNTUuLjJjNDMxMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0yOTgsNyArMjk4LDYgQEAKIGV4dGVybiB2b2lkIGludGVsX2NydGNfZmJfZ2FtbWFfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCiAJCQkJICAgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKTsKIGV4dGVybiB2b2lkIGludGVsX2VuYWJsZV9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBpbnRlbF9kaXNhYmxlX2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGlyb25sYWtlX2VuYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgaXJvbmxha2VfZGlzYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZ2VuNl9lbmFibGVfcnBzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKaW5kZXggMGQwMjczZS4uYzYzNWM5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwpAQCAtMjUxLDYgKzI1MSwyNyBAQAogCQkJCSAgICZkZXZfcHJpdi0+Z21idXNbaW50ZWxfaGRtaS0+ZGRjX2J1c10uYWRhcHRlcik7CiB9CiAKK3N0YXRpYyBib29sCitpbnRlbF9oZG1pX2RldGVjdF9hdWRpbyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBpbnRlbF9oZG1pICppbnRlbF9oZG1pID0gaW50ZWxfYXR0YWNoZWRfaGRtaShjb25uZWN0b3IpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGNvbm5lY3Rvci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlib29sIGhhc19hdWRpbyA9IGZhbHNlOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsCisJCQkgICAgJmRldl9wcml2LT5nbWJ1c1tpbnRlbF9oZG1pLT5kZGNfYnVzXS5hZGFwdGVyKTsKKwlpZiAoZWRpZCkgeworCQlpZiAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKQorCQkJaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnJhd19lZGlkID0gTlVMTDsKKwkJa2ZyZWUoZWRpZCk7CisJfQorCisJcmV0dXJuIGhhc19hdWRpbzsKK30KKwogc3RhdGljIGludAogaW50ZWxfaGRtaV9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJICAgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCkBAIC0yNjQsMTcgKzI4NSwyMyBAQAogCQlyZXR1cm4gcmV0OwogCiAJaWYgKHByb3BlcnR5ID09IGludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7Ci0JCWlmICh2YWwgPT0gaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW8pCisJCWludCBpID0gdmFsOworCQlib29sIGhhc19hdWRpbzsKKworCQlpZiAoaSA9PSBpbnRlbF9oZG1pLT5mb3JjZV9hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX2hkbWktPmZvcmNlX2F1ZGlvID0gdmFsOworCQlpbnRlbF9oZG1pLT5mb3JjZV9hdWRpbyA9IGk7CiAKLQkJaWYgKHZhbCA+IDAgJiYgaW50ZWxfaGRtaS0+aGFzX2F1ZGlvKQotCQkJcmV0dXJuIDA7Ci0JCWlmICh2YWwgPCAwICYmICFpbnRlbF9oZG1pLT5oYXNfYXVkaW8pCisJCWlmIChpID09IDApCisJCQloYXNfYXVkaW8gPSBpbnRlbF9oZG1pX2RldGVjdF9hdWRpbyhjb25uZWN0b3IpOworCQllbHNlCisJCQloYXNfYXVkaW8gPSBpID4gMDsKKworCQlpZiAoaGFzX2F1ZGlvID09IGludGVsX2hkbWktPmhhc19hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX2hkbWktPmhhc19hdWRpbyA9IHZhbCA+IDA7CisJCWludGVsX2hkbWktPmhhc19hdWRpbyA9IGhhc19hdWRpbzsKIAkJZ290byBkb25lOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IGFjZThkNWQuLmJjZGJhN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTI2MSwxMiArMjYxLDYgQEAKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JLyogTWFrZSBzdXJlIHByZS05NjVzIHNldCBkaXRoZXIgY29ycmVjdGx5ICovCi0JaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNCkgewotCQlpZiAoZGV2X3ByaXYtPmx2ZHNfZGl0aGVyKQotCQkJcGZpdF9jb250cm9sIHw9IFBBTkVMXzhUTzZfRElUSEVSX0VOQUJMRTsKLQl9Ci0KIAkvKiBOYXRpdmUgbW9kZXMgZG9uJ3QgbmVlZCBmaXR0aW5nICovCiAJaWYgKGFkanVzdGVkX21vZGUtPmhkaXNwbGF5ID09IG1vZGUtPmhkaXNwbGF5ICYmCiAJICAgIGFkanVzdGVkX21vZGUtPnZkaXNwbGF5ID09IG1vZGUtPnZkaXNwbGF5KQpAQCAtMzc0LDEwICszNjgsMTYgQEAKIAl9CiAKIG91dDoKKwkvKiBJZiBub3QgZW5hYmxpbmcgc2NhbGluZywgYmUgY29uc2lzdGVudCBhbmQgYWx3YXlzIHVzZSAwLiAqLwogCWlmICgocGZpdF9jb250cm9sICYgUEZJVF9FTkFCTEUpID09IDApIHsKIAkJcGZpdF9jb250cm9sID0gMDsKIAkJcGZpdF9wZ21fcmF0aW9zID0gMDsKIAl9CisKKwkvKiBNYWtlIHN1cmUgcHJlLTk2NSBzZXQgZGl0aGVyIGNvcnJlY3RseSAqLworCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDQgJiYgZGV2X3ByaXYtPmx2ZHNfZGl0aGVyKQorCQlwZml0X2NvbnRyb2wgfD0gUEFORUxfOFRPNl9ESVRIRVJfRU5BQkxFOworCiAJaWYgKHBmaXRfY29udHJvbCAhPSBpbnRlbF9sdmRzLT5wZml0X2NvbnRyb2wgfHwKIAkgICAgcGZpdF9wZ21fcmF0aW9zICE9IGludGVsX2x2ZHMtPnBmaXRfcGdtX3JhdGlvcykgewogCQlpbnRlbF9sdmRzLT5wZml0X2NvbnRyb2wgPSBwZml0X2NvbnRyb2w7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYwppbmRleCBjNjU5OTJkLi5kODYwYWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKQEAgLTMwLDggKzMwLDYgQEAKIAogI2luY2x1ZGUgImludGVsX2Rydi5oIgogCi0jZGVmaW5lIFBDSV9MQlBDIDB4ZjQgLyogbGVnYWN5L2NvbWJpbmF0aW9uIGJhY2tsaWdodCBtb2RlcyAqLwotCiB2b2lkCiBpbnRlbF9maXhlZF9wYW5lbF9tb2RlKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpmaXhlZF9tb2RlLAogCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCkBAIC0xMTIsMTkgKzExMCw2IEBACiAJZGV2X3ByaXYtPnBjaF9wZl9zaXplID0gKHdpZHRoIDw8IDE2KSB8IGhlaWdodDsKIH0KIAotc3RhdGljIGludCBpc19iYWNrbGlnaHRfY29tYmluYXRpb25fbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkKLQkJcmV0dXJuIEk5MTVfUkVBRChCTENfUFdNX0NUTDIpICYgQkxNX0NPTUJJTkFUSU9OX01PREU7Ci0KLQlpZiAoSVNfR0VOMihkZXYpKQotCQlyZXR1cm4gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKSAmIEJMTV9MRUdBQ1lfTU9ERTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTMyIGk5MTVfcmVhZF9ibGNfcHdtX2N0bChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJdTMyIHZhbDsKQEAgLTE4MSw5ICsxNjYsNiBAQAogCQkJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNCkKIAkJCQltYXggJj0gfjE7CiAJCX0KLQotCQlpZiAoaXNfYmFja2xpZ2h0X2NvbWJpbmF0aW9uX21vZGUoZGV2KSkKLQkJCW1heCAqPSAweGZmOwogCX0KIAogCURSTV9ERUJVR19EUklWRVIoIm1heCBiYWNrbGlnaHQgUFdNID0gJWRcbiIsIG1heCk7CkBAIC0yMDEsMTUgKzE4Myw2IEBACiAJCXZhbCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCkgJiBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOwogCQlpZiAoSVNfUElORVZJRVcoZGV2KSkKIAkJCXZhbCA+Pj0gMTsKLQotCQlpZiAoaXNfYmFja2xpZ2h0X2NvbWJpbmF0aW9uX21vZGUoZGV2KSl7Ci0JCQl1OCBsYnBjOwotCi0JCQl2YWwgJj0gfjE7Ci0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYtPnBkZXYsIFBDSV9MQlBDLCAmbGJwYyk7Ci0JCQl2YWwgKj0gbGJwYzsKLQkJCXZhbCA+Pj0gMTsKLQkJfQogCX0KIAogCURSTV9ERUJVR19EUklWRVIoImdldCBiYWNrbGlnaHQgUFdNID0gJWRcbiIsIHZhbCk7CkBAIC0yMzIsMTYgKzIwNSw2IEBACiAKIAlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZXR1cm4gaW50ZWxfcGNoX3BhbmVsX3NldF9iYWNrbGlnaHQoZGV2LCBsZXZlbCk7Ci0KLQlpZiAoaXNfYmFja2xpZ2h0X2NvbWJpbmF0aW9uX21vZGUoZGV2KSl7Ci0JCXUzMiBtYXggPSBpbnRlbF9wYW5lbF9nZXRfbWF4X2JhY2tsaWdodChkZXYpOwotCQl1OCBscGJjOwotCi0JCWxwYmMgPSBsZXZlbCAqIDB4ZmUgLyBtYXggKyAxOwotCQlsZXZlbCAvPSBscGJjOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBQQ0lfTEJQQywgbHBiYyk7Ci0JfQotCiAJdG1wID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKIAlpZiAoSVNfUElORVZJRVcoZGV2KSkgewogCQl0bXAgJj0gfihCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLIC0gMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggNjIxOGZhOS4uNDQ1ZjI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtMTA1OSwyMiArMTA1OSwyNSBAQAogfQogCiBzdGF0aWMgaW50IGdlbjZfcmluZ19mbHVzaChzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcsCi0JCQkgICB1MzIgaW52YWxpZGF0ZV9kb21haW5zLAotCQkJICAgdTMyIGZsdXNoX2RvbWFpbnMpCisJCQkgICB1MzIgaW52YWxpZGF0ZSwgdTMyIGZsdXNoKQogeworCXVpbnQzMl90IGNtZDsKIAlpbnQgcmV0OwogCi0JaWYgKChmbHVzaF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUikgPT0gMCkKKwlpZiAoKChpbnZhbGlkYXRlIHwgZmx1c2gpICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpID09IDApCiAJCXJldHVybiAwOwogCiAJcmV0ID0gaW50ZWxfcmluZ19iZWdpbihyaW5nLCA0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX0ZMVVNIX0RXKTsKKwljbWQgPSBNSV9GTFVTSF9EVzsKKwlpZiAoaW52YWxpZGF0ZSAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKQorCQljbWQgfD0gTUlfSU5WQUxJREFURV9UTEIgfCBNSV9JTlZBTElEQVRFX0JTRDsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgY21kKTsKIAlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CiAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOwotCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CiAJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwogCXJldHVybiAwOwogfQpAQCAtMTIzMCwyMiArMTIzMywyNSBAQAogfQogCiBzdGF0aWMgaW50IGJsdF9yaW5nX2ZsdXNoKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKLQkJCSAgIHUzMiBpbnZhbGlkYXRlX2RvbWFpbnMsCi0JCQkgICB1MzIgZmx1c2hfZG9tYWlucykKKwkJCSAgdTMyIGludmFsaWRhdGUsIHUzMiBmbHVzaCkKIHsKKwl1aW50MzJfdCBjbWQ7CiAJaW50IHJldDsKIAotCWlmICgoZmx1c2hfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpID09IDApCisJaWYgKCgoaW52YWxpZGF0ZSB8IGZsdXNoKSAmIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpID09IDApCiAJCXJldHVybiAwOwogCiAJcmV0ID0gYmx0X3JpbmdfYmVnaW4ocmluZywgNCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9GTFVTSF9EVyk7CisJY21kID0gTUlfRkxVU0hfRFc7CisJaWYgKGludmFsaWRhdGUgJiBJOTE1X0dFTV9ET01BSU5fUkVOREVSKQorCQljbWQgfD0gTUlfSU5WQUxJREFURV9UTEI7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIGNtZCk7CiAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOwogCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKLQlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CisJaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX05PT1ApOwogCWludGVsX3JpbmdfYWR2YW5jZShyaW5nKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAppbmRleCA2ZDZmZGU4Li4zNDMwNjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCkBAIC0xNCwyMiArMTQsMjMgQEAKIAlzdHJ1Y3QJCWRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIH07CiAKLSNkZWZpbmUgSTkxNV9SSU5HX1JFQUQocmVnKSBpOTE1X3NhZmVfcmVhZChkZXZfcHJpdiwgcmVnKQorI2RlZmluZSBJOTE1X1JJTkdfUkVBRChyZWcpIGk5MTVfZ3RfcmVhZChkZXZfcHJpdiwgcmVnKQorI2RlZmluZSBJOTE1X1JJTkdfV1JJVEUocmVnLCB2YWwpIGk5MTVfZ3Rfd3JpdGUoZGV2X3ByaXYsIHJlZywgdmFsKQogCiAjZGVmaW5lIEk5MTVfUkVBRF9UQUlMKHJpbmcpIEk5MTVfUklOR19SRUFEKFJJTkdfVEFJTCgocmluZyktPm1taW9fYmFzZSkpCi0jZGVmaW5lIEk5MTVfV1JJVEVfVEFJTChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19UQUlMKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQorI2RlZmluZSBJOTE1X1dSSVRFX1RBSUwocmluZywgdmFsKSBJOTE1X1JJTkdfV1JJVEUoUklOR19UQUlMKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQogCiAjZGVmaW5lIEk5MTVfUkVBRF9TVEFSVChyaW5nKSBJOTE1X1JJTkdfUkVBRChSSU5HX1NUQVJUKChyaW5nKS0+bW1pb19iYXNlKSkKLSNkZWZpbmUgSTkxNV9XUklURV9TVEFSVChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19TVEFSVCgocmluZyktPm1taW9fYmFzZSksIHZhbCkKKyNkZWZpbmUgSTkxNV9XUklURV9TVEFSVChyaW5nLCB2YWwpIEk5MTVfUklOR19XUklURShSSU5HX1NUQVJUKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQogCiAjZGVmaW5lIEk5MTVfUkVBRF9IRUFEKHJpbmcpICBJOTE1X1JJTkdfUkVBRChSSU5HX0hFQUQoKHJpbmcpLT5tbWlvX2Jhc2UpKQotI2RlZmluZSBJOTE1X1dSSVRFX0hFQUQocmluZywgdmFsKSBJOTE1X1dSSVRFKFJJTkdfSEVBRCgocmluZyktPm1taW9fYmFzZSksIHZhbCkKKyNkZWZpbmUgSTkxNV9XUklURV9IRUFEKHJpbmcsIHZhbCkgSTkxNV9SSU5HX1dSSVRFKFJJTkdfSEVBRCgocmluZyktPm1taW9fYmFzZSksIHZhbCkKIAogI2RlZmluZSBJOTE1X1JFQURfQ1RMKHJpbmcpIEk5MTVfUklOR19SRUFEKFJJTkdfQ1RMKChyaW5nKS0+bW1pb19iYXNlKSkKLSNkZWZpbmUgSTkxNV9XUklURV9DVEwocmluZywgdmFsKSBJOTE1X1dSSVRFKFJJTkdfQ1RMKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQorI2RlZmluZSBJOTE1X1dSSVRFX0NUTChyaW5nLCB2YWwpIEk5MTVfUklOR19XUklURShSSU5HX0NUTCgocmluZyktPm1taW9fYmFzZSksIHZhbCkKIAotI2RlZmluZSBJOTE1X1dSSVRFX0lNUihyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19JTVIoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCiAjZGVmaW5lIEk5MTVfUkVBRF9JTVIocmluZykgSTkxNV9SSU5HX1JFQUQoUklOR19JTVIoKHJpbmcpLT5tbWlvX2Jhc2UpKQorI2RlZmluZSBJOTE1X1dSSVRFX0lNUihyaW5nLCB2YWwpIEk5MTVfUklOR19XUklURShSSU5HX0lNUigocmluZyktPm1taW9fYmFzZSksIHZhbCkKIAogI2RlZmluZSBJOTE1X1JFQURfTk9QSUQocmluZykgSTkxNV9SSU5HX1JFQUQoUklOR19OT1BJRCgocmluZyktPm1taW9fYmFzZSkpCiAjZGVmaW5lIEk5MTVfUkVBRF9TWU5DXzAocmluZykgSTkxNV9SSU5HX1JFQUQoUklOR19TWU5DXzAoKHJpbmcpLT5tbWlvX2Jhc2UpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCmluZGV4IDQ1Y2QzNzYuLjdjNTBjZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBTRFZPX1RWX01BU0spCiAKICNkZWZpbmUgSVNfVFYoYykJKGMtPm91dHB1dF9mbGFnICYgU0RWT19UVl9NQVNLKQorI2RlZmluZSBJU19UTURTKGMpCShjLT5vdXRwdXRfZmxhZyAmIFNEVk9fVE1EU19NQVNLKQogI2RlZmluZSBJU19MVkRTKGMpCShjLT5vdXRwdXRfZmxhZyAmIFNEVk9fTFZEU19NQVNLKQogI2RlZmluZSBJU19UVl9PUl9MVkRTKGMpIChjLT5vdXRwdXRfZmxhZyAmIChTRFZPX1RWX01BU0sgfCBTRFZPX0xWRFNfTUFTSykpCiAKQEAgLTQ3MywyMCArNDc0LDYgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWkgPSAzOwotCXdoaWxlIChzdGF0dXMgPT0gU0RWT19DTURfU1RBVFVTX1BFTkRJTkcgJiYgaS0tKSB7Ci0JCWlmICghaW50ZWxfc2R2b19yZWFkX2J5dGUoaW50ZWxfc2R2bywKLQkJCQkJICBTRFZPX0kyQ19DTURfU1RBVFVTLAotCQkJCQkgICZzdGF0dXMpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKSB7Ci0JCURSTV9ERUJVR19LTVMoImNvbW1hbmQgcmV0dXJucyByZXNwb25zZSAlcyBbJWRdXG4iLAotCQkJICAgICAgc3RhdHVzIDw9IFNEVk9fQ01EX1NUQVRVU19TQ0FMSU5HX05PVF9TVVBQID8gY21kX3N0YXR1c19uYW1lc1tzdGF0dXNdIDogIj8/PyIsCi0JCQkgICAgICBzdGF0dXMpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ5Nyw2ICs0ODQsOCBAQAogCXU4IHN0YXR1czsKIAlpbnQgaTsKIAorCURSTV9ERUJVR19LTVMoIiVzOiBSOiAiLCBTRFZPX05BTUUoaW50ZWxfc2R2bykpOworCiAJLyoKIAkgKiBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBhbGwgY29tbWFuZHMgd2lsbCBiZQogCSAqIHByb2Nlc3NlZCB3aXRoaW4gMTXCtXMsIGFuZCB0aGF0IHdlIG5lZWQgb25seSBwb2xsCkBAIC01MDUsMTQgKzQ5NCwxOSBAQAogCSAqCiAJICogQ2hlY2sgNSB0aW1lcyBpbiBjYXNlIHRoZSBoYXJkd2FyZSBmYWlsZWQgdG8gcmVhZCB0aGUgZG9jcy4KIAkgKi8KLQlkbyB7CisJaWYgKCFpbnRlbF9zZHZvX3JlYWRfYnl0ZShpbnRlbF9zZHZvLAorCQkJCSAgU0RWT19JMkNfQ01EX1NUQVRVUywKKwkJCQkgICZzdGF0dXMpKQorCQlnb3RvIGxvZ19mYWlsOworCisJd2hpbGUgKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfUEVORElORyAmJiByZXRyeS0tKSB7CisJCXVkZWxheSgxNSk7CiAJCWlmICghaW50ZWxfc2R2b19yZWFkX2J5dGUoaW50ZWxfc2R2bywKIAkJCQkJICBTRFZPX0kyQ19DTURfU1RBVFVTLAogCQkJCQkgICZzdGF0dXMpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0gd2hpbGUgKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfUEVORElORyAmJiAtLXJldHJ5KTsKKwkJCWdvdG8gbG9nX2ZhaWw7CisJfQogCi0JRFJNX0RFQlVHX0tNUygiJXM6IFI6ICIsIFNEVk9fTkFNRShpbnRlbF9zZHZvKSk7CiAJaWYgKHN0YXR1cyA8PSBTRFZPX0NNRF9TVEFUVVNfU0NBTElOR19OT1RfU1VQUCkKIAkJRFJNX0xPR19LTVMoIiglcykiLCBjbWRfc3RhdHVzX25hbWVzW3N0YXR1c10pOwogCWVsc2UKQEAgLTUzMyw3ICs1MjcsNyBAQAogCXJldHVybiB0cnVlOwogCiBsb2dfZmFpbDoKLQlEUk1fTE9HX0tNUygiXG4iKTsKKwlEUk1fTE9HX0tNUygiLi4uIGZhaWxlZFxuIik7CiAJcmV0dXJuIGZhbHNlOwogfQogCkBAIC01NTAsNiArNTQ0LDcgQEAKIHN0YXRpYyBib29sIGludGVsX3Nkdm9fc2V0X2NvbnRyb2xfYnVzX3N3aXRjaChzdHJ1Y3QgaW50ZWxfc2R2byAqaW50ZWxfc2R2bywKIAkJCQkJICAgICAgdTggZGRjX2J1cykKIHsKKwkvKiBUaGlzIG11c3QgYmUgdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyB3cml0ZSBiZWZvcmUgdGhlIGkyYyB4ZmVyICovCiAJcmV0dXJuIGludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX3Nkdm8sCiAJCQkJICAgIFNEVk9fQ01EX1NFVF9DT05UUk9MX0JVU19TV0lUQ0gsCiAJCQkJICAgICZkZGNfYnVzLCAxKTsKQEAgLTU1Nyw3ICs1NTIsMTAgQEAKIAogc3RhdGljIGJvb2wgaW50ZWxfc2R2b19zZXRfdmFsdWUoc3RydWN0IGludGVsX3Nkdm8gKmludGVsX3Nkdm8sIHU4IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKLQlyZXR1cm4gaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgY21kLCBkYXRhLCBsZW4pOworCWlmICghaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgY21kLCBkYXRhLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKGludGVsX3Nkdm8sIE5VTEwsIDApOwogfQogCiBzdGF0aWMgYm9vbApAQCAtODU5LDE4ICs4NTcsMjEgQEAKIAogCWludGVsX2RpcF9pbmZvZnJhbWVfY3N1bSgmYXZpX2lmKTsKIAotCWlmICghaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywgU0RWT19DTURfU0VUX0hCVUZfSU5ERVgsCisJaWYgKCFpbnRlbF9zZHZvX3NldF92YWx1ZShpbnRlbF9zZHZvLAorCQkJCSAgU0RWT19DTURfU0VUX0hCVUZfSU5ERVgsCiAJCQkJICBzZXRfYnVmX2luZGV4LCAyKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihhdmlfaWYpOyBpICs9IDgpIHsKLQkJaWYgKCFpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBTRFZPX0NNRF9TRVRfSEJVRl9EQVRBLAorCQlpZiAoIWludGVsX3Nkdm9fc2V0X3ZhbHVlKGludGVsX3Nkdm8sCisJCQkJCSAgU0RWT19DTURfU0VUX0hCVUZfREFUQSwKIAkJCQkJICBkYXRhLCA4KSkKIAkJCXJldHVybiBmYWxzZTsKIAkJZGF0YSsrOwogCX0KIAotCXJldHVybiBpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBTRFZPX0NNRF9TRVRfSEJVRl9UWFJBVEUsCisJcmV0dXJuIGludGVsX3Nkdm9fc2V0X3ZhbHVlKGludGVsX3Nkdm8sCisJCQkJICAgIFNEVk9fQ01EX1NFVF9IQlVGX1RYUkFURSwKIAkJCQkgICAgJnR4X3JhdGUsIDEpOwogfQogCkBAIC0xMzU5LDcgKzEzNjAsOCBAQAogCQkJCWludGVsX3Nkdm8tPmhhc19oZG1pX21vbml0b3IgPSBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihlZGlkKTsKIAkJCQlpbnRlbF9zZHZvLT5oYXNfaGRtaV9hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKIAkJCX0KLQkJfQorCQl9IGVsc2UKKwkJCXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwogCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5yYXdfZWRpZCA9IE5VTEw7CiAJCWtmcmVlKGVkaWQpOwogCX0KQEAgLTE0MDcsMTAgKzE0MDksMjUgQEAKIAogCWlmICgoaW50ZWxfc2R2b19jb25uZWN0b3ItPm91dHB1dF9mbGFnICYgcmVzcG9uc2UpID09IDApCiAJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwotCWVsc2UgaWYgKHJlc3BvbnNlICYgU0RWT19UTURTX01BU0spCisJZWxzZSBpZiAoSVNfVE1EUyhpbnRlbF9zZHZvX2Nvbm5lY3RvcikpCiAJCXJldCA9IGludGVsX3Nkdm9faGRtaV9zaW5rX2RldGVjdChjb25uZWN0b3IpOwotCWVsc2UKLQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJZWxzZSB7CisJCXN0cnVjdCBlZGlkICplZGlkOworCisJCS8qIGlmIHdlIGhhdmUgYW4gZWRpZCBjaGVjayBpdCBtYXRjaGVzIHRoZSBjb25uZWN0aW9uICovCisJCWVkaWQgPSBpbnRlbF9zZHZvX2dldF9lZGlkKGNvbm5lY3Rvcik7CisJCWlmIChlZGlkID09IE5VTEwpCisJCQllZGlkID0gaW50ZWxfc2R2b19nZXRfYW5hbG9nX2VkaWQoY29ubmVjdG9yKTsKKwkJaWYgKGVkaWQgIT0gTlVMTCkgeworCQkJaWYgKGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJCWVsc2UKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnJhd19lZGlkID0gTlVMTDsKKwkJCWtmcmVlKGVkaWQpOworCQl9IGVsc2UKKwkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCX0KIAogCS8qIE1heSB1cGRhdGUgZW5jb2RlciBmbGFnIGZvciBsaWtlIGNsb2NrIGZvciBTRFZPIFRWLCBldGMuKi8KIAlpZiAocmV0ID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSB7CkBAIC0xNDQ2LDEwICsxNDYzLDE1IEBACiAJCWVkaWQgPSBpbnRlbF9zZHZvX2dldF9hbmFsb2dfZWRpZChjb25uZWN0b3IpOwogCiAJaWYgKGVkaWQgIT0gTlVMTCkgewotCQlpZiAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKSB7CisJCXN0cnVjdCBpbnRlbF9zZHZvX2Nvbm5lY3RvciAqaW50ZWxfc2R2b19jb25uZWN0b3IgPSB0b19pbnRlbF9zZHZvX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCQlib29sIG1vbml0b3JfaXNfZGlnaXRhbCA9ICEhKGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCk7CisJCWJvb2wgY29ubmVjdG9yX2lzX2RpZ2l0YWwgPSAhIUlTX1RNRFMoaW50ZWxfc2R2b19jb25uZWN0b3IpOworCisJCWlmIChjb25uZWN0b3JfaXNfZGlnaXRhbCA9PSBtb25pdG9yX2lzX2RpZ2l0YWwpIHsKIAkJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOwogCQkJZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CiAJCX0KKwogCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5yYXdfZWRpZCA9IE5VTEw7CiAJCWtmcmVlKGVkaWQpOwogCX0KQEAgLTE2NjgsNiArMTY5MCwyMiBAQAogCWtmcmVlKGNvbm5lY3Rvcik7CiB9CiAKK3N0YXRpYyBib29sIGludGVsX3Nkdm9fZGV0ZWN0X2hkbWlfYXVkaW8oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfc2R2byAqaW50ZWxfc2R2byA9IGludGVsX2F0dGFjaGVkX3Nkdm8oY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlib29sIGhhc19hdWRpbyA9IGZhbHNlOworCisJaWYgKCFpbnRlbF9zZHZvLT5pc19oZG1pKQorCQlyZXR1cm4gZmFsc2U7CisKKwllZGlkID0gaW50ZWxfc2R2b19nZXRfZWRpZChjb25uZWN0b3IpOworCWlmIChlZGlkICE9IE5VTEwgJiYgZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKQorCQloYXNfYXVkaW8gPSBkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRpZCk7CisKKwlyZXR1cm4gaGFzX2F1ZGlvOworfQorCiBzdGF0aWMgaW50CiBpbnRlbF9zZHZvX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCkBAIC0xNjg0LDE3ICsxNzIyLDIzIEBACiAJCXJldHVybiByZXQ7CiAKIAlpZiAocHJvcGVydHkgPT0gaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7Ci0JCWlmICh2YWwgPT0gaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvKQorCQlpbnQgaSA9IHZhbDsKKwkJYm9vbCBoYXNfYXVkaW87CisKKwkJaWYgKGkgPT0gaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvKQogCQkJcmV0dXJuIDA7CiAKLQkJaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvID0gdmFsOworCQlpbnRlbF9zZHZvX2Nvbm5lY3Rvci0+Zm9yY2VfYXVkaW8gPSBpOwogCi0JCWlmICh2YWwgPiAwICYmIGludGVsX3Nkdm8tPmhhc19oZG1pX2F1ZGlvKQotCQkJcmV0dXJuIDA7Ci0JCWlmICh2YWwgPCAwICYmICFpbnRlbF9zZHZvLT5oYXNfaGRtaV9hdWRpbykKKwkJaWYgKGkgPT0gMCkKKwkJCWhhc19hdWRpbyA9IGludGVsX3Nkdm9fZGV0ZWN0X2hkbWlfYXVkaW8oY29ubmVjdG9yKTsKKwkJZWxzZQorCQkJaGFzX2F1ZGlvID0gaSA+IDA7CisKKwkJaWYgKGhhc19hdWRpbyA9PSBpbnRlbF9zZHZvLT5oYXNfaGRtaV9hdWRpbykKIAkJCXJldHVybiAwOwogCi0JCWludGVsX3Nkdm8tPmhhc19oZG1pX2F1ZGlvID0gdmFsID4gMDsKKwkJaW50ZWxfc2R2by0+aGFzX2hkbWlfYXVkaW8gPSBoYXNfYXVkaW87CiAJCWdvdG8gZG9uZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IDkzMjA2ZTQuLmZlNGE1M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMTIzNCw3ICsxMjM0LDggQEAKICAqIFxyZXR1cm4gZmFsc2UgaWYgVFYgaXMgZGlzY29ubmVjdGVkLgogICovCiBzdGF0aWMgaW50Ci1pbnRlbF90dl9kZXRlY3RfdHlwZSAoc3RydWN0IGludGVsX3R2ICppbnRlbF90dikKK2ludGVsX3R2X2RldGVjdF90eXBlIChzdHJ1Y3QgaW50ZWxfdHYgKmludGVsX3R2LAorCQkgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZpbnRlbF90di0+YmFzZS5iYXNlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CkBAIC0xMjQ1LDExICsxMjQ2LDEzIEBACiAJaW50IHR5cGU7CiAKIAkvKiBEaXNhYmxlIFRWIGludGVycnVwdHMgYXJvdW5kIGxvYWQgZGV0ZWN0IG9yIHdlJ2xsIHJlY3Vyc2UgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7Ci0JaTkxNV9kaXNhYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLAotCQkJICAgICAgUElQRV9IT1RQTFVHX0lOVEVSUlVQVF9FTkFCTEUgfAotCQkJICAgICAgUElQRV9IT1RQTFVHX1RWX0lOVEVSUlVQVF9FTkFCTEUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCWlmIChjb25uZWN0b3ItPnBvbGxlZCAmIERSTV9DT05ORUNUT1JfUE9MTF9IUEQpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCQlpOTE1X2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsCisJCQkJICAgICAgUElQRV9IT1RQTFVHX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCSAgICAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfRU5BQkxFKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJfQogCiAJc2F2ZV90dl9kYWMgPSB0dl9kYWMgPSBJOTE1X1JFQUQoVFZfREFDKTsKIAlzYXZlX3R2X2N0bCA9IHR2X2N0bCA9IEk5MTVfUkVBRChUVl9DVEwpOwpAQCAtMTMwMiwxMSArMTMwNSwxMyBAQAogCUk5MTVfV1JJVEUoVFZfQ1RMLCBzYXZlX3R2X2N0bCk7CiAKIAkvKiBSZXN0b3JlIGludGVycnVwdCBjb25maWcgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7Ci0JaTkxNV9lbmFibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsCi0JCQkgICAgIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfRU5BQkxFIHwKLQkJCSAgICAgUElQRV9IT1RQTFVHX1RWX0lOVEVSUlVQVF9FTkFCTEUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCWlmIChjb25uZWN0b3ItPnBvbGxlZCAmIERSTV9DT05ORUNUT1JfUE9MTF9IUEQpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCQlpOTE1X2VuYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgMCwKKwkJCQkgICAgIFBJUEVfSE9UUExVR19JTlRFUlJVUFRfRU5BQkxFIHwKKwkJCQkgICAgIFBJUEVfSE9UUExVR19UVl9JTlRFUlJVUFRfRU5BQkxFKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJfQogCiAJcmV0dXJuIHR5cGU7CiB9CkBAIC0xMzU2LDcgKzEzNjEsNyBAQAogCWRybV9tb2RlX3NldF9jcnRjaW5mbygmbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7CiAKIAlpZiAoaW50ZWxfdHYtPmJhc2UuYmFzZS5jcnRjICYmIGludGVsX3R2LT5iYXNlLmJhc2UuY3J0Yy0+ZW5hYmxlZCkgewotCQl0eXBlID0gaW50ZWxfdHZfZGV0ZWN0X3R5cGUoaW50ZWxfdHYpOworCQl0eXBlID0gaW50ZWxfdHZfZGV0ZWN0X3R5cGUoaW50ZWxfdHYsIGNvbm5lY3Rvcik7CiAJfSBlbHNlIGlmIChmb3JjZSkgewogCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJCWludCBkcG1zX21vZGU7CkBAIC0xMzY0LDcgKzEzNjksNyBAQAogCQljcnRjID0gaW50ZWxfZ2V0X2xvYWRfZGV0ZWN0X3BpcGUoJmludGVsX3R2LT5iYXNlLCBjb25uZWN0b3IsCiAJCQkJCQkgICZtb2RlLCAmZHBtc19tb2RlKTsKIAkJaWYgKGNydGMpIHsKLQkJCXR5cGUgPSBpbnRlbF90dl9kZXRlY3RfdHlwZShpbnRlbF90dik7CisJCQl0eXBlID0gaW50ZWxfdHZfZGV0ZWN0X3R5cGUoaW50ZWxfdHYsIGNvbm5lY3Rvcik7CiAJCQlpbnRlbF9yZWxlYXNlX2xvYWRfZGV0ZWN0X3BpcGUoJmludGVsX3R2LT5iYXNlLCBjb25uZWN0b3IsCiAJCQkJCQkgICAgICAgZHBtc19tb2RlKTsKIAkJfSBlbHNlCkBAIC0xNjU4LDYgKzE2NjMsMTggQEAKIAlpbnRlbF9lbmNvZGVyID0gJmludGVsX3R2LT5iYXNlOwogCWNvbm5lY3RvciA9ICZpbnRlbF9jb25uZWN0b3ItPmJhc2U7CiAKKwkvKiBUaGUgZG9jdW1lbnRhdGlvbiwgZm9yIHRoZSBvbGRlciBjaGlwc2V0cyBhdCBsZWFzdCwgcmVjb21tZW5kCisJICogdXNpbmcgYSBwb2xsaW5nIG1ldGhvZCByYXRoZXIgdGhhbiBob3RwbHVnIGRldGVjdGlvbiBmb3IgVFZzLgorCSAqIFRoaXMgaXMgYmVjYXVzZSBpbiBvcmRlciB0byBwZXJmb3JtIHRoZSBob3RwbHVnIGRldGVjdGlvbiwgdGhlIFBMTHMKKwkgKiBmb3IgdGhlIFRWIG11c3QgYmUga2VwdCBhbGl2ZSBpbmNyZWFzaW5nIHBvd2VyIGRyYWluIGFuZCBzdGFydmluZworCSAqIGJhbmR3aWR0aCBmcm9tIG90aGVyIGVuY29kZXJzLiBOb3RhYmx5IGZvciBpbnN0YW5jZSwgaXQgY2F1c2VzCisJICogcGlwZSB1bmRlcnJ1bnMgb24gQ3Jlc3RsaW5lIHdoZW4gdGhpcyBlbmNvZGVyIGlzIHN1cHBvc2VkbHkgaWRsZS4KKwkgKgorCSAqIE1vcmUgcmVjZW50IGNoaXBzZXRzIGZhdm91ciBIRE1JIHJhdGhlciB0aGFuIGludGVncmF0ZWQgUy1WaWRlby4KKwkgKi8KKwljb25uZWN0b3ItPnBvbGxlZCA9CisJCURSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUIHwgRFJNX0NPTk5FQ1RPUl9QT0xMX0RJU0NPTk5FQ1Q7CisKIAlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZpbnRlbF90dl9jb25uZWN0b3JfZnVuY3MsCiAJCQkgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYwppbmRleCAyYWVmNWNkLi42YmRhYjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYwpAQCAtNjIyOCw3ICs2MjI4LDcgQEAKIAkJZW50cnktPnR2Y29uZi5oYXNfY29tcG9uZW50X291dHB1dCA9IGZhbHNlOwogCQlicmVhazsKIAljYXNlIE9VVFBVVF9MVkRTOgotCQlpZiAoKGNvbm4gJiAweDAwMDAzZjAwKSAhPSAweDEwKQorCQlpZiAoKGNvbm4gJiAweDAwMDAzZjAwKSA+PiA4ICE9IDB4MTApCiAJCQllbnRyeS0+bHZkc2NvbmYudXNlX3N0cmFwc19mb3JfbW9kZSA9IHRydWU7CiAJCWVudHJ5LT5sdmRzY29uZi51c2VfcG93ZXJfc2NyaXB0cyA9IHRydWU7CiAJCWJyZWFrOwpAQCAtNjMxMCw2ICs2MzEwLDkgQEAKIHN0YXRpYyBib29sCiBhcHBseV9kY2JfZW5jb2Rlcl9xdWlya3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGlkeCwgdTMyICpjb25uLCB1MzIgKmNvbmYpCiB7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYjsKKwogCS8qIERlbGwgUHJlY2lzaW9uIE02MzAwCiAJICogICBEQ0IgZW50cnkgMjogMDIwMjUzMTIgMDAwMDAwMTAKIAkgKiAgIERDQiBlbnRyeSAzOiAwMjAyNjMxMiAwMDAwMDAyMApAQCAtNjMyNyw2ICs2MzMwLDE4IEBACiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCisJLyogR2VGb3JjZTMgVGkgMjAwCisJICoKKwkgKiBEQ0IgcmVwb3J0cyBhbiBMVkRTIG91dHB1dCB0aGF0IHNob3VsZCBiZSBUTURTOgorCSAqICAgRENCIGVudHJ5IDE6IGYyMDA1MDE0IGZmZmZmZmZmCisJICovCisJaWYgKG52X21hdGNoX2RldmljZShkZXYsIDB4MDIwMSwgMHgxNDYyLCAweDg4NTEpKSB7CisJCWlmICgqY29ubiA9PSAweGYyMDA1MDE0ICYmICpjb25mID09IDB4ZmZmZmZmZmYpIHsKKwkJCWZhYnJpY2F0ZV9kY2Jfb3V0cHV0KGRjYiwgT1VUUFVUX1RNRFMsIDEsIDEsIDEpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCiAJcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYwppbmRleCBhN2ZhZTI2Li5hNTIxODQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCkBAIC00OSw3ICs0OSwxMCBAQAogCQlEUk1fRVJST1IoImJvICVwIHN0aWxsIGF0dGFjaGVkIHRvIEdFTSBvYmplY3RcbiIsIGJvKTsKIAogCW52MTBfbWVtX3B1dF90aWxlX3JlZ2lvbihkZXYsIG52Ym8tPnRpbGUsIE5VTEwpOwotCW5vdXZlYXVfdm1fcHV0KCZudmJvLT52bWEpOworCWlmIChudmJvLT52bWEubm9kZSkgeworCQlub3V2ZWF1X3ZtX3VubWFwKCZudmJvLT52bWEpOworCQlub3V2ZWF1X3ZtX3B1dCgmbnZiby0+dm1hKTsKKwl9CiAJa2ZyZWUobnZibyk7CiB9CiAKQEAgLTEyOCw2ICsxMzEsNyBAQAogCQl9CiAJfQogCisJbnZiby0+Ym8ubWVtLm51bV9wYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKIAlub3V2ZWF1X2JvX3BsYWNlbWVudF9zZXQobnZibywgZmxhZ3MsIDApOwogCiAJbnZiby0+Y2hhbm5lbCA9IGNoYW47CkBAIC0xNjYsMTcgKzE3MCwxNyBAQAogc2V0X3BsYWNlbWVudF9yYW5nZShzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibywgdWludDMyX3QgdHlwZSkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub3V2ZWF1X2JkZXYobnZiby0+Ym8uYmRldik7CisJaW50IHZyYW1fcGFnZXMgPSBkZXZfcHJpdi0+dnJhbV9zaXplID4+IFBBR0VfU0hJRlQ7CiAKIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl8xMCAmJgotCSAgICBudmJvLT50aWxlX21vZGUgJiYgKHR5cGUgJiBUVE1fUExfRkxBR19WUkFNKSkgeworCSAgICBudmJvLT50aWxlX21vZGUgJiYgKHR5cGUgJiBUVE1fUExfRkxBR19WUkFNKSAmJgorCSAgICBudmJvLT5iby5tZW0ubnVtX3BhZ2VzIDwgdnJhbV9wYWdlcyAvIDIpIHsKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoYXQgdGhlIGNvbG9yIGFuZCBkZXB0aCBidWZmZXJzIGFyZSBoYW5kbGVkCiAJCSAqIGJ5IGluZGVwZW5kZW50IG1lbW9yeSBjb250cm9sbGVyIHVuaXRzLiBVcCB0byBhIDl4CiAJCSAqIHNwZWVkIHVwIHdoZW4gYWxwaGEtYmxlbmRpbmcgYW5kIGRlcHRoLXRlc3QgYXJlIGVuYWJsZWQKIAkJICogYXQgdGhlIHNhbWUgdGltZS4KIAkJICovCi0JCWludCB2cmFtX3BhZ2VzID0gZGV2X3ByaXYtPnZyYW1fc2l6ZSA+PiBQQUdFX1NISUZUOwotCiAJCWlmIChudmJvLT50aWxlX2ZsYWdzICYgTk9VVkVBVV9HRU1fVElMRV9aRVRBKSB7CiAJCQludmJvLT5wbGFjZW1lbnQuZnBmbiA9IHZyYW1fcGFnZXMgLyAyOwogCQkJbnZiby0+cGxhY2VtZW50LmxwZm4gPSB+MDsKQEAgLTc4NSw3ICs3ODksNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gdHRtX2JvX21vdmVfdHRtKGJvLCBldmljdCwgbm9fd2FpdF9yZXNlcnZlLCBub193YWl0X2dwdSwgbmV3X21lbSk7CisJcmV0ID0gdHRtX2JvX21vdmVfdHRtKGJvLCB0cnVlLCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCBuZXdfbWVtKTsKIG91dDoKIAl0dG1fYm9fbWVtX3B1dChibywgJnRtcF9tZW0pOwogCXJldHVybiByZXQ7CkBAIC04MTEsMTEgKzgxNSwxMSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB0dG1fYm9fbW92ZV90dG0oYm8sIGV2aWN0LCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCAmdG1wX21lbSk7CisJcmV0ID0gdHRtX2JvX21vdmVfdHRtKGJvLCB0cnVlLCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCAmdG1wX21lbSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBub3V2ZWF1X2JvX21vdmVfbTJtZihibywgZXZpY3QsIGludHIsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUsIG5ld19tZW0pOworCXJldCA9IG5vdXZlYXVfYm9fbW92ZV9tMm1mKGJvLCB0cnVlLCBpbnRyLCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCBuZXdfbWVtKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKaW5kZXggYTIxZTAwMC4uMzkwZDgyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCkBAIC01MDcsNiArNTA3LDcgQEAKIAlpbnQgaGlnaF93ID0gMCwgaGlnaF9oID0gMCwgaGlnaF92ID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJm52X2Nvbm5lY3Rvci0+YmFzZS5wcm9iZWRfbW9kZXMsIGhlYWQpIHsKKwkJbW9kZS0+dnJlZnJlc2ggPSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKTsKIAkJaWYgKGhlbHBlci0+bW9kZV92YWxpZChjb25uZWN0b3IsIG1vZGUpICE9IE1PREVfT0sgfHwKIAkJICAgIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKaW5kZXggNjU2OTliZi4uYjM2OGVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCkBAIC04Myw3ICs4Myw4IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiBOVl9NRU1PUllfVE9fTUVNT1JZX0ZPUk1BVCByZXF1aXJlcyBhIG5vdGlmaWVyIG9iamVjdCAqLwotCXJldCA9IG5vdXZlYXVfbm90aWZpZXJfYWxsb2MoY2hhbiwgTnZOb3RpZnkwLCAzMiwgJmNoYW4tPm0ybWZfbnRmeSk7CisJcmV0ID0gbm91dmVhdV9ub3RpZmllcl9hbGxvYyhjaGFuLCBOdk5vdGlmeTAsIDMyLCAweGZkMCwgMHgxMDAwLAorCQkJCSAgICAgJmNoYW4tPm0ybWZfbnRmeSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKaW5kZXggMDFiZmZjNC4uOTgyZDcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCkBAIC04NDgsMTQgKzg0OCwxMiBAQAogCQkJCSAgICAgc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXJfZnVuYyBub3V2ZWF1X3ZyYW1fbWFuYWdlcjsKIAotLyogbnZjMF92cmFtLmMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXJfZnVuYyBudmMwX3ZyYW1fbWFuYWdlcjsKLQogLyogbm91dmVhdV9ub3RpZmllci5jICovCiBleHRlcm4gaW50ICBub3V2ZWF1X25vdGlmaWVyX2luaXRfY2hhbm5lbChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIHZvaWQgbm91dmVhdV9ub3RpZmllcl90YWtlZG93bl9jaGFubmVsKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKik7CiBleHRlcm4gaW50ICBub3V2ZWF1X25vdGlmaWVyX2FsbG9jKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKiwgdWludDMyX3QgaGFuZGxlLAotCQkJCSAgIGludCBjb3V0LCB1aW50MzJfdCAqb2Zmc2V0KTsKKwkJCQkgICBpbnQgY291dCwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwKKwkJCQkgICB1aW50MzJfdCAqb2Zmc2V0KTsKIGV4dGVybiBpbnQgIG5vdXZlYXVfbm90aWZpZXJfb2Zmc2V0KHN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqLCB1aW50MzJfdCAqKTsKIGV4dGVybiBpbnQgIG5vdXZlYXVfaW9jdGxfbm90aWZpZXJfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKiwgdm9pZCAqZGF0YSwKIAkJCQkJIHN0cnVjdCBkcm1fZmlsZSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCmluZGV4IDI2MzQ3YjcuLmIwZmI5YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYwpAQCAtNzI1LDggKzcyNSwxMCBAQAogCXJldCA9IHZyYW0tPmdldChkZXYsIG1lbS0+bnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQsCiAJCQltZW0tPnBhZ2VfYWxpZ25tZW50IDw8IFBBR0VfU0hJRlQsIHNpemVfbmMsCiAJCQkobnZiby0+dGlsZV9mbGFncyA+PiA4KSAmIDB4ZmYsICZub2RlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCWlmIChyZXQpIHsKKwkJbWVtLT5tbV9ub2RlID0gTlVMTDsKKwkJcmV0dXJuIChyZXQgPT0gLUVOT1NQQykgPyAwIDogcmV0OworCX0KIAogCW5vZGUtPnBhZ2Vfc2hpZnQgPSAxMjsKIAlpZiAobnZiby0+dm1hLm5vZGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21tLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21tLmMKaW5kZXggODg0NGI1MGMuLjc2MDk3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21tLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gLUVOT1NQQzsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKaW5kZXggZmUyOWQ2MC4uNWVhMTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYwpAQCAtOTYsNyArOTYsOCBAQAogCiBpbnQKIG5vdXZlYXVfbm90aWZpZXJfYWxsb2Moc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgdWludDMyX3QgaGFuZGxlLAotCQkgICAgICAgaW50IHNpemUsIHVpbnQzMl90ICpiX29mZnNldCkKKwkJICAgICAgIGludCBzaXplLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLAorCQkgICAgICAgdWludDMyX3QgKmJfb2Zmc2V0KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpub2JqID0gTlVMTDsKQEAgLTEwNCw5ICsxMDUsMTAgQEAKIAl1aW50MzJfdCBvZmZzZXQ7CiAJaW50IHRhcmdldCwgcmV0OwogCi0JbWVtID0gZHJtX21tX3NlYXJjaF9mcmVlKCZjaGFuLT5ub3RpZmllcl9oZWFwLCBzaXplLCAwLCAwKTsKKwltZW0gPSBkcm1fbW1fc2VhcmNoX2ZyZWVfaW5fcmFuZ2UoJmNoYW4tPm5vdGlmaWVyX2hlYXAsIHNpemUsIDAsCisJCQkJCSAgc3RhcnQsIGVuZCwgMCk7CiAJaWYgKG1lbSkKLQkJbWVtID0gZHJtX21tX2dldF9ibG9jayhtZW0sIHNpemUsIDApOworCQltZW0gPSBkcm1fbW1fZ2V0X2Jsb2NrX3JhbmdlKG1lbSwgc2l6ZSwgMCwgc3RhcnQsIGVuZCk7CiAJaWYgKCFtZW0pIHsKIAkJTlZfRVJST1IoZGV2LCAiQ2hhbm5lbCAlZCBub3RpZmllciBibG9jayBmdWxsXG4iLCBjaGFuLT5pZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTc3LDcgKzE3OSw4IEBACiAJaWYgKElTX0VSUihjaGFuKSkKIAkJcmV0dXJuIFBUUl9FUlIoY2hhbik7CiAKLQlyZXQgPSBub3V2ZWF1X25vdGlmaWVyX2FsbG9jKGNoYW4sIG5hLT5oYW5kbGUsIG5hLT5zaXplLCAmbmEtPm9mZnNldCk7CisJcmV0ID0gbm91dmVhdV9ub3RpZmllcl9hbGxvYyhjaGFuLCBuYS0+aGFuZGxlLCBuYS0+c2l6ZSwgMCwgMHgxMDAwLAorCQkJCSAgICAgJm5hLT5vZmZzZXQpOwogCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmNoYW4pOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMKaW5kZXggZmI4NDZhMy4uNDM5OWUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcG0uYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJc3RydWN0IG5vdXZlYXVfcG1fZW5naW5lICpwbSA9ICZkZXZfcHJpdi0+ZW5naW5lLnBtOwogCiAJaWYgKHBtLT5od21vbikgewotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBtLT5od21vbi0+a29iaiwgJmh3bW9uX2F0dHJncm91cCk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5wZGV2LT5kZXYua29iaiwgJmh3bW9uX2F0dHJncm91cCk7CiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKHBtLT5od21vbik7CiAJfQogI2VuZGlmCkBAIC01NDMsNyArNTQzLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9wbV9lbmdpbmUgKnBtID0gJmRldl9wcml2LT5lbmdpbmUucG07CiAJc3RydWN0IG5vdXZlYXVfcG1fbGV2ZWwgKnBlcmZsdmw7CiAKLQlpZiAocG0tPmN1ciA9PSAmcG0tPmJvb3QpCisJaWYgKCFwbS0+Y3VyIHx8IHBtLT5jdXIgPT0gJnBtLT5ib290KQogCQlyZXR1cm47CiAKIAlwZXJmbHZsID0gcG0tPmN1cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdGVtcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKaW5kZXggN2VjYzRhZC4uOGQ5OTY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvW10gPSB7CiAJCXsgSTJDX0JPQVJEX0lORk8oInc4M2w3ODV0cyIsIDB4MmQpIH0sCiAJCXsgSTJDX0JPQVJEX0lORk8oInc4Mzc4MWQiLCAweDJkKSB9LAotCQl7IEkyQ19CT0FSRF9JTkZPKCJmNzUzNzUiLCAweDJlKSB9LAogCQl7IEkyQ19CT0FSRF9JTkZPKCJhZHQ3NDczIiwgMHgyZSkgfSwKKwkJeyBJMkNfQk9BUkRfSU5GTygiZjc1Mzc1IiwgMHgyZSkgfSwKIAkJeyBJMkNfQk9BUkRfSU5GTygibG05OSIsIDB4NGMpIH0sCiAJCXsgfQogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwppbmRleCBlZjIzNTUwLi5jODJkYjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKQEAgLTM0Miw4ICszNDIsOCBAQAogCWlmIChudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX0xWRFMpIHsKIAkJYm9vbCBkdWFsbGluaywgZHVtbXk7CiAKLQkJbm91dmVhdV9iaW9zX3BhcnNlX2x2ZHNfdGFibGUoZGV2LCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlLT4KLQkJCQkJICAgICAgY2xvY2ssICZkdWFsbGluaywgJmR1bW15KTsKKwkJbm91dmVhdV9iaW9zX3BhcnNlX2x2ZHNfdGFibGUoZGV2LCBvdXRwdXRfbW9kZS0+Y2xvY2ssCisJCQkJCSAgICAgICZkdWFsbGluaywgJmR1bW15KTsKIAkJaWYgKGR1YWxsaW5rKQogCQkJcmVncC0+ZnBfY29udHJvbCB8PSAoOCA8PCAyOCk7CiAJfSBlbHNlCkBAIC01MTgsOCArNTE4LDYgQEAKIAkJcmV0dXJuOwogCiAJaWYgKG52X2VuY29kZXItPmRjYi0+bHZkc2NvbmYudXNlX3Bvd2VyX3NjcmlwdHMpIHsKLQkJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBub3V2ZWF1X2VuY29kZXJfY29ubmVjdG9yX2dldChudl9lbmNvZGVyKTsKLQogCQkvKiB3aGVuIHJlbW92aW5nIGFuIG91dHB1dCwgY3J0YyBtYXkgbm90IGJlIHNldCwgYnV0IFBBTkVMX09GRgogCQkgKiBtdXN0IHN0aWxsIGJlIHJ1bgogCQkgKi8KQEAgLTUyNywxMiArNTI1LDggQEAKIAkJCSAgIG52MDRfZGZwX2dldF9ib3VuZF9oZWFkKGRldiwgbnZfZW5jb2Rlci0+ZGNiKTsKIAogCQlpZiAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSB7Ci0JCQlpZiAoIW52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUpIHsKLQkJCQlOVl9FUlJPUihkZXYsICJOb3QgdHVybmluZyBvbiBMVkRTIHdpdGhvdXQgbmF0aXZlIG1vZGVcbiIpOwotCQkJCXJldHVybjsKLQkJCX0KIAkJCWNhbGxfbHZkc19zY3JpcHQoZGV2LCBudl9lbmNvZGVyLT5kY2IsIGhlYWQsCi0JCQkJCSBMVkRTX1BBTkVMX09OLCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlLT5jbG9jayk7CisJCQkJCSBMVkRTX1BBTkVMX09OLCBudl9lbmNvZGVyLT5tb2RlLmNsb2NrKTsKIAkJfSBlbHNlCiAJCQkvKiBweGNsayBvZiAwIGlzIGZpbmUgZm9yIFBBTkVMX09GRiwgYW5kIGZvciBhCiAJCQkgKiBkaXNjb25uZWN0ZWQgTFZEUyBlbmNvZGVyIHRoZXJlIGlzIG5vIG5hdGl2ZV9tb2RlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKaW5kZXggODg3MGQ3Mi4uMThkMzBjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYwpAQCAtMjExLDMwICsyMTEsMzUgQEAKIAlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSA9ICZkZXZfcHJpdi0+dGlsZS5yZWdbaV07CiAKIAlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JY2FzZSAweDQ0OgotCWNhc2UgMHg0YToKKwljYXNlIDB4NDA6CisJY2FzZSAweDQxOiAvKiBndWVzcyAqLworCWNhc2UgMHg0MjoKKwljYXNlIDB4NDM6CisJY2FzZSAweDQ1OiAvKiBndWVzcyAqLwogCWNhc2UgMHg0ZToKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7CiAJCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9UTElNSVQoaSksIHRpbGUtPmxpbWl0KTsKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RJTEUoaSksIHRpbGUtPmFkZHIpOwotCQlicmVhazsKLQotCWNhc2UgMHg0NjoKLQljYXNlIDB4NDc6Ci0JY2FzZSAweDQ5OgotCWNhc2UgMHg0YjoKLQkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7Ci0JCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9UTElNSVQoaSksIHRpbGUtPmxpbWl0KTsKLQkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RJTEUoaSksIHRpbGUtPmFkZHIpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVFNJWkUxKGkpLCB0aWxlLT5waXRjaCk7CiAJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UTElNSVQxKGkpLCB0aWxlLT5saW1pdCk7CiAJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9USUxFMShpKSwgdGlsZS0+YWRkcik7CiAJCWJyZWFrOwotCi0JZGVmYXVsdDoKKwljYXNlIDB4NDQ6CisJY2FzZSAweDRhOgogCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVFNJWkUoaSksIHRpbGUtPnBpdGNoKTsKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RMSU1JVChpKSwgdGlsZS0+bGltaXQpOwogCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVElMRShpKSwgdGlsZS0+YWRkcik7CisJCWJyZWFrOworCWNhc2UgMHg0NjoKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwljYXNlIDB4NGM6CisJY2FzZSAweDY3OgorCWRlZmF1bHQ6CisJCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9UU0laRShpKSwgdGlsZS0+cGl0Y2gpOworCQludl93cjMyKGRldiwgTlY0N19QR1JBUEhfVExJTUlUKGkpLCB0aWxlLT5saW1pdCk7CisJCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9USUxFKGkpLCB0aWxlLT5hZGRyKTsKIAkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RTSVpFMShpKSwgdGlsZS0+cGl0Y2gpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVExJTUlUMShpKSwgdGlsZS0+bGltaXQpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVElMRTEoaSksIHRpbGUtPmFkZHIpOwpAQCAtMzk2LDE3ICs0MDEsMjAgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCQljYXNlIDB4NDY6Ci0JCWNhc2UgMHg0NzoKLQkJY2FzZSAweDQ5OgotCQljYXNlIDB4NGI6Ci0JCQludl93cjMyKGRldiwgMHg0MDBERjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7Ci0JCQludl93cjMyKGRldiwgMHg0MDBERjQsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcxKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKKwkJY2FzZSAweDQxOgorCQljYXNlIDB4NDI6CisJCWNhc2UgMHg0MzoKKwkJY2FzZSAweDQ1OgorCQljYXNlIDB4NGU6CisJCWNhc2UgMHg0NDoKKwkJY2FzZSAweDRhOgogCQkJbnZfd3IzMihkZXYsIDB4NDAwOUYwLCBudl9yZDMyKGRldiwgTlYwNF9QRkJfQ0ZHMCkpOwogCQkJbnZfd3IzMihkZXYsIDB4NDAwOUY0LCBudl9yZDMyKGRldiwgTlYwNF9QRkJfQ0ZHMSkpOwogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQludl93cjMyKGRldiwgMHg0MDBERjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7CisJCQludl93cjMyKGRldiwgMHg0MDBERjQsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcxKSk7CisJCQlicmVhazsKIAkJfQogCQludl93cjMyKGRldiwgMHg0MDY5RjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7CiAJCW52X3dyMzIoZGV2LCAweDQwNjlGNCwgbnZfcmQzMihkZXYsIE5WMDRfUEZCX0NGRzEpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5jCmluZGV4IDE0ZTI0ZTkuLjBlYTA5MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYwpAQCAtMjgzLDggKzI4Myw3IEBACiAJCQludjUwX2V2b19jaGFubmVsX2RlbCgmZGV2X3ByaXYtPmV2byk7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JfSBlbHNlCi0JaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NTApIHsKKwl9IGVsc2UgewogCQlyZXQgPSBudjUwX2V2b19kbWFvYmpfbmV3KGV2bywgMHgzZCwgTnZFdm9GQjE2LCAweDcwLCAweDE5LAogCQkJCQkgIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMTAwMDApOwogCQlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKaW5kZXggMmQ3ZWE3NS4uMzdlMjFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwpAQCAtMjU2LDYgKzI1Niw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lICpwZmlmbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmZpZm87CiAJaW50IGksIGhkciA9IChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSA/IDB4MjAwIDogMHgyMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yNjUsNiArMjY2LDcgQEAKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisJcGZpZm8tPnJlYXNzaWduKGRldiwgZmFsc2UpOwogCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCBmYWxzZSk7CiAKIAlpZiAocGdyYXBoLT5jaGFubmVsKGRldikgPT0gY2hhbikKQEAgLTI3NSw2ICsyNzcsNyBAQAogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCiAJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCXBmaWZvLT5yZWFzc2lnbihkZXYsIHRydWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnJhbWluX2dyY3R4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKaW5kZXggZWEwMDQxOC4uZTU3Y2FhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKQEAgLTQwMywxNiArNDAzLDI0IEBACiB2b2lkCiBudjUwX2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CiAJbnZfd3IzMihkZXYsIDB4MDAzMzBjLCAweDAwMDAwMDAxKTsKIAlpZiAoIW52X3dhaXQoZGV2LCAweDAwMzMwYywgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMCkpCiAJCU5WX0VSUk9SKGRldiwgIlBSQU1JTiBmbHVzaCB0aW1lb3V0XG4iKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOwogfQogCiB2b2lkCiBudjg0X2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CiAJbnZfd3IzMihkZXYsIDB4MDcwMDAwLCAweDAwMDAwMDAxKTsKIAlpZiAoIW52X3dhaXQoZGV2LCAweDA3MDAwMCwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMCkpCiAJCU5WX0VSUk9SKGRldiwgIlBSQU1JTiBmbHVzaCB0aW1lb3V0XG4iKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMKaW5kZXggMzhlNTIzZS4uNjE0NDE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdm0uYwpAQCAtNDUsMTEgKzQ1LDYgQEAKIAl9CiAKIAlpZiAocGh5cyAmIDEpIHsKLQkJaWYgKGRldl9wcml2LT52cmFtX3N5c19iYXNlKSB7Ci0JCQlwaHlzICs9IGRldl9wcml2LT52cmFtX3N5c19iYXNlOwotCQkJcGh5cyB8PSAweDMwOwotCQl9Ci0KIAkJaWYgKGNvdmVyYWdlIDw9IDMyICogMTAyNCAqIDEwMjQpCiAJCQlwaHlzIHw9IDB4NjA7CiAJCWVsc2UgaWYgKGNvdmVyYWdlIDw9IDY0ICogMTAyNCAqIDEwMjQpCkBAIC0xNzQsNyArMTY5LDExIEBACiB2b2lkCiBudjUwX3ZtX2ZsdXNoX2VuZ2luZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZW5naW5lKQogeworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKIAludl93cjMyKGRldiwgMHgxMDBjODAsIChlbmdpbmUgPDwgMTYpIHwgMSk7CiAJaWYgKCFudl93YWl0KGRldiwgMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKQogCQlOVl9FUlJPUihkZXYsICJ2bSBmbHVzaCB0aW1lb3V0OiBlbmdpbmUgJWRcbiIsIGVuZ2luZSk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYwppbmRleCBlNmVhN2Q4Li5lYjE4YTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmFwaC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAibnZjMF9ncmFwaC5oIgogCiBzdGF0aWMgdm9pZCBudmMwX2dyYXBoX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIG52YzBfcnVuazE0MF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CiBzdGF0aWMgaW50ICBudmMwX2dyYXBoX3VubG9hZF9jb250ZXh0X3RvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBjaGFuKTsKIAogdm9pZApAQCAtMjgxLDYgKzI4Miw3IEBACiAJCXJldHVybjsKIAogCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCAxMik7CisJbm91dmVhdV9pcnFfdW5yZWdpc3RlcihkZXYsIDI1KTsKIAogCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcHJpdi0+dW5rNDE4OGI4KTsKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnByaXYtPnVuazQxODhiNCk7CkBAIC0zOTAsNiArMzkyLDcgQEAKIAl9CiAKIAlub3V2ZWF1X2lycV9yZWdpc3RlcihkZXYsIDEyLCBudmMwX2dyYXBoX2lzcik7CisJbm91dmVhdV9pcnFfcmVnaXN0ZXIoZGV2LCAyNSwgbnZjMF9ydW5rMTQwX2lzcik7CiAJTlZPQkpfQ0xBU1MoZGV2LCAweDkwMmQsIEdSKTsgLyogMkQgKi8KIAlOVk9CSl9DTEFTUyhkZXYsIDB4OTAzOSwgR1IpOyAvKiBNMk1GICovCiAJTlZPQkpfQ0xBU1MoZGV2LCAweDkwOTcsIEdSKTsgLyogM0QgKi8KQEAgLTUxMiw4ICs1MTUsOCBAQAogCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHgyMjQpLCAweGMwMDAwMDAwKTsKIAkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4NDhjKSwgMHhjMDAwMDAwMCk7CiAJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDA4NCksIDB4YzAwMDAwMDApOwotCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHhlNDQpLCAweDAwMWZmZmZlKTsKLQkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4ZTRjKSwgMHgwMDAwMDAwZik7CisJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDY0NCksIDB4MDAxZmZmZmUpOworCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHg2NGMpLCAweDAwMDAwMDBmKTsKIAkJfQogCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDJjOTApLCAweGZmZmZmZmZmKTsKIAkJbnZfd3IzMihkZXYsIEdQQ19VTklUKGdwYywgMHgyYzk0KSwgMHhmZmZmZmZmZik7CkBAIC03NzcsMyArNzgwLDE5IEBACiAKIAludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMTAwMDEpOwogfQorCitzdGF0aWMgdm9pZAorbnZjMF9ydW5rMTQwX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXUzMiB1bml0cyA9IG52X3JkMzIoZGV2LCAweDAwMDE3YykgJiAweDFmOworCisJd2hpbGUgKHVuaXRzKSB7CisJCXUzMiB1bml0ID0gZmZzKHVuaXRzKSAtIDE7CisJCXUzMiByZWcgPSAweDE0MDAwMCArIHVuaXQgKiAweDIwMDA7CisJCXUzMiBzdDAgPSBudl9tYXNrKGRldiwgcmVnICsgMHgxMDIwLCAwLCAwKTsKKwkJdTMyIHN0MSA9IG52X21hc2soZGV2LCByZWcgKyAweDE0MjAsIDAsIDApOworCisJCU5WX0lORk8oZGV2LCAiUFJVTksxNDA6ICVkIDB4JTA4eCAweCUwOHhcbiIsIHVuaXQsIHN0MCwgc3QxKTsKKwkJdW5pdHMgJj0gfigxIDw8IHVuaXQpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JjdHguYwppbmRleCBiOWU2OGIyLi5mODgwZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyY3R4LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmN0eC5jCkBAIC0xODMwLDcgKzE4MzAsNyBAQAogCiAJZm9yICh0cCA9IDAsIGlkID0gMDsgdHAgPCA0OyB0cCsrKSB7CiAJCWZvciAoZ3BjID0gMDsgZ3BjIDwgcHJpdi0+Z3BjX25yOyBncGMrKykgewotCQkJaWYgKHRwIDw9IHByaXYtPnRwX25yW2dwY10pIHsKKwkJCWlmICh0cCA8IHByaXYtPnRwX25yW2dwY10pIHsKIAkJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDY5OCksIGlkKTsKIAkJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDRlOCksIGlkKTsKIAkJCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDBjMTAgKyB0cCAqIDQpLCBpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IGQzY2ExNzAuLmE0ZTVlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC00OCwyOSArNDgsMjkgQEAKIAogCXN3aXRjaCAocmFkZW9uX2NydGMtPnJteF90eXBlKSB7CiAJY2FzZSBSTVhfQ0VOVEVSOgotCQlhcmdzLnVzT3ZlcnNjYW5Ub3AgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIG1vZGUtPmNydGNfdmRpc3BsYXkpIC8gMjsKLQkJYXJncy51c092ZXJzY2FuQm90dG9tID0gKGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5KSAvIDI7Ci0JCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMjsKLQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMjsKKwkJYXJncy51c092ZXJzY2FuVG9wID0gY3B1X3RvX2xlMTYoKGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5KSAvIDIpOworCQlhcmdzLnVzT3ZlcnNjYW5Cb3R0b20gPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIG1vZGUtPmNydGNfdmRpc3BsYXkpIC8gMik7CisJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMik7CisJCWFyZ3MudXNPdmVyc2NhblJpZ2h0ID0gY3B1X3RvX2xlMTYoKGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgLSBtb2RlLT5jcnRjX2hkaXNwbGF5KSAvIDIpOwogCQlicmVhazsKIAljYXNlIFJNWF9BU1BFQ1Q6CiAJCWExID0gbW9kZS0+Y3J0Y192ZGlzcGxheSAqIGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7CiAJCWEyID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAqIG1vZGUtPmNydGNfaGRpc3BsYXk7CiAKIAkJaWYgKGExID4gYTIpIHsKLQkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDI7Ci0JCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0gKGEyIC8gbW9kZS0+Y3J0Y192ZGlzcGxheSkpIC8gMjsKKwkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDIpOworCQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDIpOwogCQl9IGVsc2UgaWYgKGEyID4gYTEpIHsKLQkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDI7Ci0JCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5IC0gKGExIC8gbW9kZS0+Y3J0Y19oZGlzcGxheSkpIC8gMjsKKwkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDIpOworCQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUk1YX0ZVTEw6CiAJZGVmYXVsdDoKLQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSByYWRlb25fY3J0Yy0+aF9ib3JkZXI7Ci0JCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSByYWRlb25fY3J0Yy0+aF9ib3JkZXI7Ci0JCWFyZ3MudXNPdmVyc2NhbkJvdHRvbSA9IHJhZGVvbl9jcnRjLT52X2JvcmRlcjsKLQkJYXJncy51c092ZXJzY2FuVG9wID0gcmFkZW9uX2NydGMtPnZfYm9yZGVyOworCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IGNwdV90b19sZTE2KHJhZGVvbl9jcnRjLT5oX2JvcmRlcik7CisJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+aF9ib3JkZXIpOworCQlhcmdzLnVzT3ZlcnNjYW5Cb3R0b20gPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+dl9ib3JkZXIpOworCQlhcmdzLnVzT3ZlcnNjYW5Ub3AgPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+dl9ib3JkZXIpOwogCQlicmVhazsKIAl9CiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CkBAIC00MTksMjMgKzQxOSwyMyBAQAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAogCWlmIChBU0lDX0lTX0RDRTUocmRldikpIHsKLQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50RnJhYyA9IDA7CisJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudEZyYWMgPSBjcHVfdG9fbGUxNigwKTsKIAkJYXJncy52My51Y1NwcmVhZFNwZWN0cnVtVHlwZSA9IHNzLT50eXBlOwogCQlzd2l0Y2ggKHBsbF9pZCkgewogCQljYXNlIEFUT01fUFBMTDE6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX1AxUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gc3MtPmFtb3VudDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBzcy0+c3RlcDsKKwkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudCA9IGNwdV90b19sZTE2KHNzLT5hbW91bnQpOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IGNwdV90b19sZTE2KHNzLT5zdGVwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fUFBMTDI6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX1AyUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gc3MtPmFtb3VudDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBzcy0+c3RlcDsKKwkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudCA9IGNwdV90b19sZTE2KHNzLT5hbW91bnQpOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IGNwdV90b19sZTE2KHNzLT5zdGVwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fRENQTEw6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX0RDUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gMDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSAwOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoMCk7CisJCQlhcmdzLnYzLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoMCk7CiAJCQlicmVhazsKIAkJY2FzZSBBVE9NX1BQTExfSU5WQUxJRDoKIAkJCXJldHVybjsKQEAgLTQ0NywxOCArNDQ3LDE4IEBACiAJCXN3aXRjaCAocGxsX2lkKSB7CiAJCWNhc2UgQVRPTV9QUExMMToKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfUDFQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBzcy0+YW1vdW50OwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IHNzLT5zdGVwOworCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoc3MtPmFtb3VudCk7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoc3MtPnN0ZXApOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRPTV9QUExMMjoKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfUDJQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBzcy0+YW1vdW50OwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IHNzLT5zdGVwOworCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoc3MtPmFtb3VudCk7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoc3MtPnN0ZXApOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRPTV9EQ1BMTDoKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfRENQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSAwOwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IDA7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBjcHVfdG9fbGUxNigwKTsKKwkJCWFyZ3MudjIudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBjcHVfdG9fbGUxNigwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fUFBMTF9JTlZBTElEOgogCQkJcmV0dXJuOwpAQCAtNTM4LDcgKzUzOCw2IEBACiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0hJR0hfRkJfRElWOwogCQllbHNlCiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0xPV19SRUZfRElWOwotCiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKQEAgLTU1NSwyMyArNTU0LDI4IEBACiAJCQkJCWRwX2Nsb2NrID0gZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2s7CiAJCQkJfQogCQkJfQotI2lmIDAgLyogZG9lc24ndCB3b3JrIHByb3Blcmx5IG9uIHNvbWUgbGFwdG9wcyAqLworCiAJCQkvKiB1c2UgcmVjb21tZW5kZWQgcmVmX2RpdiBmb3Igc3MgKi8KIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKIAkJCQlpZiAoc3NfZW5hYmxlZCkgewogCQkJCQlpZiAoc3MtPnJlZmRpdikgeworCQkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUDsKIAkJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKIAkJCQkJCXBsbC0+cmVmZXJlbmNlX2RpdiA9IHNzLT5yZWZkaXY7CisJCQkJCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX0ZSQUNfRkJfRElWOwogCQkJCQl9CiAJCQkJfQogCQkJfQotI2VuZGlmCisKIAkJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CiAJCQkJLyogRFZPIHdhbnRzIDJ4IHBpeGVsIGNsb2NrIGlmIHRoZSBEVk8gY2hpcCBpcyBpbiAxMiBiaXQgbW9kZSAqLwogCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCA9PSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfRFZPMSkKIAkJCQkJYWRqdXN0ZWRfY2xvY2sgPSBtb2RlLT5jbG9jayAqIDI7CiAJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0NMT1NFU1RfTE9XRVI7CisJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkKKwkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX0lTX0xDRDsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGVuY29kZXItPmVuY29kZXJfdHlwZSAhPSBEUk1fTU9ERV9FTkNPREVSX0RBQykKIAkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX05PX09ERF9QT1NUX0RJVjsKQEAgLTY1OCwxMCArNjYyLDEyIEBACiAJCQkJCQkgICBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogCQkJCWFkanVzdGVkX2Nsb2NrID0gbGUzMl90b19jcHUoYXJncy52My5zT3V0cHV0LnVsRGlzcFBsbEZyZXEpICogMTA7CiAJCQkJaWYgKGFyZ3MudjMuc091dHB1dC51Y1JlZkRpdikgeworCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX0ZSQUNfRkJfRElWOwogCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX1JFRl9ESVY7CiAJCQkJCXBsbC0+cmVmZXJlbmNlX2RpdiA9IGFyZ3MudjMuc091dHB1dC51Y1JlZkRpdjsKIAkJCQl9CiAJCQkJaWYgKGFyZ3MudjMuc091dHB1dC51Y1Bvc3REaXYpIHsKKwkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1VTRV9GUkFDX0ZCX0RJVjsKIAkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1VTRV9QT1NUX0RJVjsKIAkJCQkJcGxsLT5wb3N0X2RpdiA9IGFyZ3MudjMuc091dHB1dC51Y1Bvc3REaXY7CiAJCQkJfQpAQCAtNzE1LDE0ICs3MjEsMTQgQEAKIAkJCSAqIFNldFBpeGVsQ2xvY2sgcHJvdmlkZXMgdGhlIGRpdmlkZXJzCiAJCQkgKi8KIAkJCWFyZ3MudjUudWNDUlRDID0gQVRPTV9DUlRDX0lOVkFMSUQ7Ci0JCQlhcmdzLnY1LnVzUGl4ZWxDbG9jayA9IGRpc3BjbGs7CisJCQlhcmdzLnY1LnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KGRpc3BjbGspOwogCQkJYXJncy52NS51Y1BwbGwgPSBBVE9NX0RDUExMOwogCQkJYnJlYWs7CiAJCWNhc2UgNjoKIAkJCS8qIGlmIHRoZSBkZWZhdWx0IGRjcGxsIGNsb2NrIGlzIHNwZWNpZmllZCwKIAkJCSAqIFNldFBpeGVsQ2xvY2sgcHJvdmlkZXMgdGhlIGRpdmlkZXJzCiAJCQkgKi8KLQkJCWFyZ3MudjYudWxEaXNwRW5nQ2xrRnJlcSA9IGRpc3BjbGs7CisJCQlhcmdzLnY2LnVsRGlzcEVuZ0Nsa0ZyZXEgPSBjcHVfdG9fbGUzMihkaXNwY2xrKTsKIAkJCWFyZ3MudjYudWNQcGxsID0gQVRPTV9EQ1BMTDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtOTUxLDggKzk1NywxMiBAQAogCS8qIGFkanVzdCBwaXhlbCBjbG9jayBhcyBuZWVkZWQgKi8KIAlhZGp1c3RlZF9jbG9jayA9IGF0b21iaW9zX2FkanVzdF9wbGwoY3J0YywgbW9kZSwgcGxsLCBzc19lbmFibGVkLCAmc3MpOwogCi0JcmFkZW9uX2NvbXB1dGVfcGxsKHBsbCwgYWRqdXN0ZWRfY2xvY2ssICZwbGxfY2xvY2ssICZmYl9kaXYsICZmcmFjX2ZiX2RpdiwKLQkJCSAgICZyZWZfZGl2LCAmcG9zdF9kaXYpOworCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQlyYWRlb25fY29tcHV0ZV9wbGxfYXZpdm8ocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgJnJlZl9kaXYsICZwb3N0X2Rpdik7CisJZWxzZQorCQlyYWRlb25fY29tcHV0ZV9wbGxfbGVnYWN5KHBsbCwgYWRqdXN0ZWRfY2xvY2ssICZwbGxfY2xvY2ssICZmYl9kaXYsICZmcmFjX2ZiX2RpdiwKKwkJCQkJICAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKIAogCWF0b21iaW9zX2NydGNfcHJvZ3JhbV9zcyhjcnRjLCBBVE9NX0RJU0FCTEUsIHJhZGVvbl9jcnRjLT5wbGxfaWQsICZzcyk7CiAKQEAgLTk4MSw5ICs5OTEsOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBldmVyZ3JlZW5fY3J0Y19kb19zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJICAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCi0JCQkJICAgICAgaW50IHgsIGludCB5LCBpbnQgYXRvbWljKQorc3RhdGljIGludCBkY2U0X2NydGNfZG9fc2V0X2Jhc2Uoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCQkgaW50IHgsIGludCB5LCBpbnQgYXRvbWljKQogewogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwpAQCAtOTk0LDYgKzEwMDQsNyBAQAogCXN0cnVjdCByYWRlb25fYm8gKnJibzsKIAl1aW50NjRfdCBmYl9sb2NhdGlvbjsKIAl1aW50MzJfdCBmYl9mb3JtYXQsIGZiX3BpdGNoX3BpeGVscywgdGlsaW5nX2ZsYWdzOworCXUzMiBmYl9zd2FwID0gRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoRVZFUkdSRUVOX0dSUEhfRU5ESUFOX05PTkUpOwogCWludCByOwogCiAJLyogbm8gZmIgYm91bmQgKi8KQEAgLTEwNDUsMTEgKzEwNTYsMTcgQEAKIAljYXNlIDE2OgogCQlmYl9mb3JtYXQgPSAoRVZFUkdSRUVOX0dSUEhfREVQVEgoRVZFUkdSRUVOX0dSUEhfREVQVEhfMTZCUFApIHwKIAkJCSAgICAgRVZFUkdSRUVOX0dSUEhfRk9STUFUKEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCNTY1KSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWZiX3N3YXAgPSBFVkVSR1JFRU5fR1JQSF9FTkRJQU5fU1dBUChFVkVSR1JFRU5fR1JQSF9FTkRJQU5fOElOMTYpOworI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgMjQ6CiAJY2FzZSAzMjoKIAkJZmJfZm9ybWF0ID0gKEVWRVJHUkVFTl9HUlBIX0RFUFRIKEVWRVJHUkVFTl9HUlBIX0RFUFRIXzMyQlBQKSB8CiAJCQkgICAgIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVChFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQVJHQjg4ODgpKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJZmJfc3dhcCA9IEVWRVJHUkVFTl9HUlBIX0VORElBTl9TV0FQKEVWRVJHUkVFTl9HUlBIX0VORElBTl84SU4zMik7CisjZW5kaWYKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbnN1cHBvcnRlZCBzY3JlZW4gZGVwdGggJWRcbiIsCkBAIC0xMDk0LDYgKzExMTEsNyBAQAogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAogCSAgICAgICAodTMyKSBmYl9sb2NhdGlvbiAmIEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfQUREUkVTU19NQVNLKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZmJfZm9ybWF0KTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU1dBUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9zd2FwKTsKIAogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX09GRlNFVF9YICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9PRkZTRVRfWSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CkBAIC0xMTE1LDEyICsxMTMzLDYgQEAKIAlXUkVHMzIoRVZFUkdSRUVOX1ZJRVdQT1JUX1NJWkUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgIChjcnRjLT5tb2RlLmhkaXNwbGF5IDw8IDE2KSB8IGNydGMtPm1vZGUudmRpc3BsYXkpOwogCi0JaWYgKGNydGMtPm1vZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJV1JFRzMyKEVWRVJHUkVFTl9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKLQkJICAgICAgIEVWRVJHUkVFTl9JTlRFUkxFQVZFX0VOKTsKLQllbHNlCi0JCVdSRUczMihFVkVSR1JFRU5fREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOwotCiAJaWYgKCFhdG9taWMgJiYgZmIgJiYgZmIgIT0gY3J0Yy0+ZmIpIHsKIAkJcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKIAkJcmJvID0gcmFkZW9uX2ZiLT5vYmotPmRyaXZlcl9wcml2YXRlOwpAQCAtMTE1MCw2ICsxMTYyLDcgQEAKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICp0YXJnZXRfZmI7CiAJdWludDY0X3QgZmJfbG9jYXRpb247CiAJdWludDMyX3QgZmJfZm9ybWF0LCBmYl9waXRjaF9waXhlbHMsIHRpbGluZ19mbGFnczsKKwl1MzIgZmJfc3dhcCA9IFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOX05PTkU7CiAJaW50IHI7CiAKIAkvKiBubyBmYiBib3VuZCAqLwpAQCAtMTIwMywxMiArMTIxNiwxOCBAQAogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMTZCUFAgfAogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfMTZCUFBfUkdCNTY1OworI2lmZGVmIF9fQklHX0VORElBTgorCQlmYl9zd2FwID0gUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMTZCSVQ7CisjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSAyNDoKIAljYXNlIDMyOgogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMzJCUFAgfAogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfMzJCUFBfQVJHQjg4ODg7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl8zMkJJVDsKKyNlbmRpZgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIHNjcmVlbiBkZXB0aCAlZFxuIiwKQEAgLTEyNDgsNiArMTI2Nyw4IEBACiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsKIAkgICAgICAgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAodTMyKSBmYl9sb2NhdGlvbik7CiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9mb3JtYXQpOworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQorCQlXUkVHMzIoUjYwMF9EMUdSUEhfU1dBUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9zd2FwKTsKIAogCVdSRUczMihBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9TVVJGQUNFX09GRlNFVF9ZICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKQEAgLTEyNjksMTIgKzEyOTAsNiBAQAogCVdSRUczMihBVklWT19EMU1PREVfVklFV1BPUlRfU0laRSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKIAkgICAgICAgKGNydGMtPm1vZGUuaGRpc3BsYXkgPDwgMTYpIHwgY3J0Yy0+bW9kZS52ZGlzcGxheSk7CiAKLQlpZiAoY3J0Yy0+bW9kZS5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQotCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCQkgICAgICAgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOwotCWVsc2UKLQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7Ci0KIAlpZiAoIWF0b21pYyAmJiBmYiAmJiBmYiAhPSBjcnRjLT5mYikgewogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIoZmIpOwogCQlyYm8gPSByYWRlb25fZmItPm9iai0+ZHJpdmVyX3ByaXZhdGU7CkBAIC0xMjk4LDcgKzEzMTMsNyBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChBU0lDX0lTX0RDRTQocmRldikpCi0JCXJldHVybiBldmVyZ3JlZW5fY3J0Y19kb19zZXRfYmFzZShjcnRjLCBvbGRfZmIsIHgsIHksIDApOworCQlyZXR1cm4gZGNlNF9jcnRjX2RvX3NldF9iYXNlKGNydGMsIG9sZF9mYiwgeCwgeSwgMCk7CiAJZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKIAkJcmV0dXJuIGF2aXZvX2NydGNfZG9fc2V0X2Jhc2UoY3J0Yywgb2xkX2ZiLCB4LCB5LCAwKTsKIAllbHNlCkBAIC0xMzEzLDcgKzEzMjgsNyBAQAogICAgICAgIHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChBU0lDX0lTX0RDRTQocmRldikpCi0JCXJldHVybiBldmVyZ3JlZW5fY3J0Y19kb19zZXRfYmFzZShjcnRjLCBmYiwgeCwgeSwgMSk7CisJCXJldHVybiBkY2U0X2NydGNfZG9fc2V0X2Jhc2UoY3J0YywgZmIsIHgsIHksIDEpOwogCWVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCiAJCXJldHVybiBhdml2b19jcnRjX2RvX3NldF9iYXNlKGNydGMsIGZiLCB4LCB5LCAxKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKaW5kZXggNGU3Nzc4ZC4uNjk1ZGU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwpAQCAtMTg3LDkgKzE4Nyw5IEBACiBpbnQgZHBfbW9kZV92YWxpZCh1OCBkcGNkW0RQX0RQQ0RfU0laRV0sIGludCBtb2RlX2Nsb2NrKQogewogCWludCBsYW5lcyA9IGRwX2xhbmVzX2Zvcl9tb2RlX2Nsb2NrKGRwY2QsIG1vZGVfY2xvY2spOwotCWludCBidyA9IGRwX2xhbmVzX2Zvcl9tb2RlX2Nsb2NrKGRwY2QsIG1vZGVfY2xvY2spOworCWludCBkcF9jbG9jayA9IGRwX2xpbmtfY2xvY2tfZm9yX21vZGVfY2xvY2soZHBjZCwgbW9kZV9jbG9jayk7CiAKLQlpZiAoKGxhbmVzID09IDApIHx8IChidyA9PSAwKSkKKwlpZiAoKGxhbmVzID09IDApIHx8IChkcF9jbG9jayA9PSAwKSkKIAkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKIAogCXJldHVybiBNT0RFX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKaW5kZXggNjc3YWY5MS4uZDI3MGIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCkBAIC05NywyNiArOTcsMjkgQEAKIH0KIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwotdTMyIGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHRlbXAgPSAoUlJFRzMyKENHX01VTFRfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+CiAJCUFTSUNfVF9TSElGVDsKIAl1MzIgYWN0dWFsX3RlbXAgPSAwOwogCi0JaWYgKCh0ZW1wID4+IDEwKSAmIDEpCi0JCWFjdHVhbF90ZW1wID0gMDsKLQllbHNlIGlmICgodGVtcCA+PiA5KSAmIDEpCisJaWYgKHRlbXAgJiAweDQwMCkKKwkJYWN0dWFsX3RlbXAgPSAtMjU2OworCWVsc2UgaWYgKHRlbXAgJiAweDIwMCkKIAkJYWN0dWFsX3RlbXAgPSAyNTU7Ci0JZWxzZQotCQlhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7CisJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwl9IGVsc2UKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CisJcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKIH0KIAotdTMyIHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgdGVtcCA9IFJSRUczMihDR19USEVSTUFMX1NUQVRVUykgJiAweGZmOwotCXUzMiBhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwlpbnQgYWN0dWFsX3RlbXAgPSB0ZW1wIC0gNDk7CiAKIAlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOwogfQpAQCAtMTE4Miw2ICsxMTg1LDIyIEBACiAvKgogICogQ1AuCiAgKi8KK3ZvaWQgZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCit7CisJLyogc2V0IHRvIERYMTAvMTEgbW9kZSAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19NT0RFX0NPTlRST0wsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKKwkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lORElSRUNUX0JVRkZFUiwgMikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkgICgyIDw8IDApIHwKKyNlbmRpZgorCQkJICAoaWItPmdwdV9hZGRyICYgMHhGRkZGRkZGQykpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSAmIDB4RkYpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5sZW5ndGhfZHcpOworfQorCiAKIHN0YXRpYyBpbnQgZXZlcmdyZWVuX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewpAQCAtMTE5Miw3ICsxMjExLDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcjcwMF9jcF9zdG9wKHJkZXYpOwotCVdSRUczMihDUF9SQl9DTlRMLCBSQl9OT19VUERBVEUgfCAoMTUgPDwgOCkgfCAoMyA8PCAwKSk7CisJV1JFRzMyKENQX1JCX0NOVEwsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJICAgICAgIEJVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgorCSAgICAgICBSQl9OT19VUERBVEUgfCBSQl9CTEtTWigxNSkgfCBSQl9CVUZTWigzKSk7CiAKIAlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKXJkZXYtPnBmcF9mdy0+ZGF0YTsKIAlXUkVHMzIoQ1BfUEZQX1VDT0RFX0FERFIsIDApOwpAQCAtMTIzMyw3ICsxMjU2LDcgQEAKIAljcF9tZSA9IDB4ZmY7CiAJV1JFRzMyKENQX01FX0NOVEwsIGNwX21lKTsKIAotCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIGV2ZXJncmVlbl9kZWZhdWx0X3NpemUgKyAxNSk7CisJciA9IHJhZGVvbl9yaW5nX2xvY2socmRldiwgZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZSArIDE5KTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogY3AgZmFpbGVkIHRvIGxvY2sgcmluZyAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwpAQCAtMTI2Niw2ICsxMjg5LDExIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhmZmZmZmZmZik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhmZmZmZmZmZik7CiAKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweGMwMDI2OTAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMzE2KTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDBlKTsgLyogVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHgwMDAwMDAxMCk7IC8qICAqLworCiAJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMTMwNiw3ICsxMzM0LDExIEBACiAJV1JFRzMyKENQX1JCX1dQVFIsIDApOwogCiAJLyogc2V0IHRoZSB3YiBhZGRyZXNzIHdldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90ICovCi0JV1JFRzMyKENQX1JCX1JQVFJfQUREUiwgKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX0NQX1JQVFJfT0ZGU0VUKSAmIDB4RkZGRkZGRkMpOworCVdSRUczMihDUF9SQl9SUFRSX0FERFIsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJICAgICAgIFJCX1JQVFJfU1dBUCgyKSB8CisjZW5kaWYKKwkgICAgICAgKChyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGRkZGRkZDKSk7CiAJV1JFRzMyKENQX1JCX1JQVFJfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGKTsKIAlXUkVHMzIoU0NSQVRDSF9BRERSLCAoKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX1NDUkFUQ0hfT0ZGU0VUKSA+PiA4KSAmIDB4RkZGRkZGRkYpOwogCkBAIC0yMDcyLDYgKzIxMDQsNyBAQAogCVdSRUczMihWR1RfQ0FDSEVfSU5WQUxJREFUSU9OLCB2Z3RfY2FjaGVfaW52YWxpZGF0aW9uKTsKIAogCVdSRUczMihWR1RfR1NfVkVSVEVYX1JFVVNFLCAxNik7CisJV1JFRzMyKFBBX1NVX0xJTkVfU1RJUFBMRV9WQUxVRSwgMCk7CiAJV1JFRzMyKFBBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CiAKIAlXUkVHMzIoVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAxNCk7CkBAIC0yNjA2LDggKzI2MzksOCBAQAogCXdoaWxlIChycHRyICE9IHdwdHIpIHsKIAkJLyogd3B0ci9ycHRyIGFyZSBpbiBieXRlcyEgKi8KIAkJcmluZ19pbmRleCA9IHJwdHIgLyA0OwotCQlzcmNfaWQgPSAgcmRldi0+aWgucmluZ1tyaW5nX2luZGV4XSAmIDB4ZmY7Ci0JCXNyY19kYXRhID0gcmRldi0+aWgucmluZ1tyaW5nX2luZGV4ICsgMV0gJiAweGZmZmZmZmY7CisJCXNyY19pZCA9ICBsZTMyX3RvX2NwdShyZGV2LT5paC5yaW5nW3JpbmdfaW5kZXhdKSAmIDB4ZmY7CisJCXNyY19kYXRhID0gbGUzMl90b19jcHUocmRldi0+aWgucmluZ1tyaW5nX2luZGV4ICsgMV0pICYgMHhmZmZmZmZmOwogCiAJCXN3aXRjaCAoc3JjX2lkKSB7CiAJCWNhc2UgMTogLyogRDEgdmJsYW5rL3ZsaW5lICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYwppbmRleCBiNzU4ZGM3Li4yYWRmYjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlpZiAoaCA8IDgpCiAJCWggPSA4OwogCi0JY2JfY29sb3JfaW5mbyA9ICgoZm9ybWF0IDw8IDIpIHwgKDEgPDwgMjQpKTsKKwljYl9jb2xvcl9pbmZvID0gKChmb3JtYXQgPDwgMikgfCAoMSA8PCAyNCkgfCAoMSA8PCA4KSk7CiAJcGl0Y2ggPSAodyAvIDgpIC0gMTsKIAlzbGljZSA9ICgodyAqIGgpIC8gNjQpIC0gMTsKIApAQCAtMTMzLDYgKzEzMyw5IEBACiAKIAkvKiBoaWdoIGFkZHIsIHN0cmlkZSAqLwogCXNxX3Z0eF9jb25zdGFudF93b3JkMiA9ICgodXBwZXJfMzJfYml0cyhncHVfYWRkcikgJiAweGZmKSB8ICgxNiA8PCA4KSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJc3FfdnR4X2NvbnN0YW50X3dvcmQyIHw9ICgyIDw8IDMwKTsKKyNlbmRpZgogCS8qIHh5encgc3dpenpsZXMgKi8KIAlzcV92dHhfY29uc3RhbnRfd29yZDMgPSAoMCA8PCAzKSB8ICgxIDw8IDYpIHwgKDIgPDwgOSkgfCAoMyA8PCAxMik7CiAKQEAgLTE3Myw3ICsxNzYsNyBAQAogCXNxX3RleF9yZXNvdXJjZV93b3JkMCA9ICgxIDw8IDApOyAvKiAyRCAqLwogCXNxX3RleF9yZXNvdXJjZV93b3JkMCB8PSAoKCgocGl0Y2ggPj4gMykgLSAxKSA8PCA2KSB8CiAJCQkJICAoKHcgLSAxKSA8PCAxOCkpOwotCXNxX3RleF9yZXNvdXJjZV93b3JkMSA9ICgoaCAtIDEpIDw8IDApOworCXNxX3RleF9yZXNvdXJjZV93b3JkMSA9ICgoaCAtIDEpIDw8IDApIHwgKDEgPDwgMjgpOwogCS8qIHh5encgc3dpenpsZXMgKi8KIAlzcV90ZXhfcmVzb3VyY2Vfd29yZDQgPSAoMCA8PCAxNikgfCAoMSA8PCAxOSkgfCAoMiA8PCAyMikgfCAoMyA8PCAyNSk7CiAKQEAgLTIyMSw3ICsyMjQsMTEgQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBESV9QVF9SRUNUTElTVCk7CiAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ERVhfVFlQRSwgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIERJX0lOREVYX1NJWkVfMTZfQklUKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LAorI2lmZGVmIF9fQklHX0VORElBTgorCQkJICAoMiA8PCAyKSB8CisjZW5kaWYKKwkJCSAgRElfSU5ERVhfU0laRV8xNl9CSVQpOwogCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX05VTV9JTlNUQU5DRVMsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKQEAgLTIzMiw3ICsyMzksNyBAQAogCiB9CiAKLS8qIGVtaXRzIDMwICovCisvKiBlbWl0cyAzNiAqLwogc3RhdGljIHZvaWQKIHNldF9kZWZhdWx0X3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewpAQCAtMjQ1LDYgKzI1Miw4IEBACiAJaW50IG51bV9oc190aHJlYWRzLCBudW1fbHNfdGhyZWFkczsKIAlpbnQgbnVtX3BzX3N0YWNrX2VudHJpZXMsIG51bV92c19zdGFja19lbnRyaWVzLCBudW1fZ3Nfc3RhY2tfZW50cmllcywgbnVtX2VzX3N0YWNrX2VudHJpZXM7CiAJaW50IG51bV9oc19zdGFja19lbnRyaWVzLCBudW1fbHNfc3RhY2tfZW50cmllczsKKwl1NjQgZ3B1X2FkZHI7CisJaW50IGR3b3JkczsKIAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX0NFREFSOgpAQCAtNDk3LDYgKzUwNiwxOCBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4MDAwMDAwMDApOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4MDAwMDAwMDApOwogCisJLyogc2V0IHRvIERYMTAvMTEgbW9kZSAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19NT0RFX0NPTlRST0wsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKKworCS8qIGVtaXQgYW4gSUIgcG9pbnRpbmcgYXQgZGVmYXVsdCBzdGF0ZSAqLworCWR3b3JkcyA9IEFMSUdOKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4sIDB4MTApOworCWdwdV9hZGRyID0gcmRldi0+cjYwMF9ibGl0LnNoYWRlcl9ncHVfYWRkciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQ7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lORElSRUNUX0JVRkZFUiwgMikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGdwdV9hZGRyICYgMHhGRkZGRkZGQyk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgdXBwZXJfMzJfYml0cyhncHVfYWRkcikgJiAweEZGKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBkd29yZHMpOworCiB9CiAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgaTJmKHVpbnQzMl90IGlucHV0KQpAQCAtNTI3LDggKzU0OCwxMCBAQAogaW50IGV2ZXJncmVlbl9ibGl0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIG9ial9zaXplOwotCWludCByOworCWludCBpLCByLCBkd29yZHM7CiAJdm9pZCAqcHRyOworCXUzMiBwYWNrZXQyc1sxNl07CisJaW50IG51bV9wYWNrZXQycyA9IDA7CiAKIAkvKiBwaW4gY29weSBzaGFkZXIgaW50byB2cmFtIGlmIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KIAlpZiAocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopCkBAIC01MzYsOCArNTU5LDE3IEBACiAKIAltdXRleF9pbml0KCZyZGV2LT5yNjAwX2JsaXQubXV0ZXgpOwogCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgPSAwOwotCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gPSAwOwotCW9ial9zaXplID0gMDsKKworCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gPSBldmVyZ3JlZW5fZGVmYXVsdF9zaXplOworCisJZHdvcmRzID0gcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbjsKKwl3aGlsZSAoZHdvcmRzICYgMHhmKSB7CisJCXBhY2tldDJzW251bV9wYWNrZXQycysrXSA9IGNwdV90b19sZTMyKFBBQ0tFVDIoMCkpOworCQlkd29yZHMrKzsKKwl9CisKKwlvYmpfc2l6ZSA9IGR3b3JkcyAqIDQ7CisJb2JqX3NpemUgPSBBTElHTihvYmpfc2l6ZSwgMjU2KTsKIAogCXJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgPSBvYmpfc2l6ZTsKIAlvYmpfc2l6ZSArPSBldmVyZ3JlZW5fdnNfc2l6ZSAqIDQ7CkBAIC01NjcsOCArNTk5LDE2IEBACiAJCXJldHVybiByOwogCX0KIAotCW1lbWNweShwdHIgKyByZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0LCBldmVyZ3JlZW5fdnMsIGV2ZXJncmVlbl92c19zaXplICogNCk7Ci0JbWVtY3B5KHB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQsIGV2ZXJncmVlbl9wcywgZXZlcmdyZWVuX3BzX3NpemUgKiA0KTsKKwltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0LAorCQkgICAgZXZlcmdyZWVuX2RlZmF1bHRfc3RhdGUsIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KTsKKworCWlmIChudW1fcGFja2V0MnMpCisJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgKyAocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpLAorCQkJICAgIHBhY2tldDJzLCBudW1fcGFja2V0MnMgKiA0KTsKKwlmb3IgKGkgPSAwOyBpIDwgZXZlcmdyZWVuX3ZzX3NpemU7IGkrKykKKwkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGV2ZXJncmVlbl92c1tpXSk7CisJZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl9wc19zaXplOyBpKyspCisJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihldmVyZ3JlZW5fcHNbaV0pOwogCXJhZGVvbl9ib19rdW5tYXAocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCXJhZGVvbl9ib191bnJlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCkBAIC02NTIsNyArNjkyLDcgQEAKIAkvKiBjYWxjdWxhdGUgbnVtYmVyIG9mIGxvb3BzIGNvcnJlY3RseSAqLwogCXJpbmdfc2l6ZSA9IG51bV9sb29wcyAqIGR3b3Jkc19wZXJfbG9vcDsKIAkvKiBzZXQgZGVmYXVsdCAgKyBzaGFkZXJzICovCi0JcmluZ19zaXplICs9IDQ2OyAvKiBzaGFkZXJzICsgZGVmIHN0YXRlICovCisJcmluZ19zaXplICs9IDUyOyAvKiBzaGFkZXJzICsgZGVmIHN0YXRlICovCiAJcmluZ19zaXplICs9IDEwOyAvKiBmZW5jZSBlbWl0IGZvciBWQiBJQiAqLwogCXJpbmdfc2l6ZSArPSA1OyAvKiBkb25lIGNvcHkgKi8KIAlyaW5nX3NpemUgKz0gMTA7IC8qIGZlbmNlIGVtaXQgZm9yIGRvbmUgY29weSAqLwpAQCAtNjYwLDcgKzcwMCw3IEBACiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0Jc2V0X2RlZmF1bHRfc3RhdGUocmRldik7IC8qIDMwICovCisJc2V0X2RlZmF1bHRfc3RhdGUocmRldik7IC8qIDM2ICovCiAJc2V0X3NoYWRlcnMocmRldik7IC8qIDE2ICovCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfc2hhZGVycy5jCmluZGV4IGVmMWQyOGMuLjNhMTAzOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfc2hhZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfc2hhZGVycy5jCkBAIC0zMTEsMTEgKzMxMSwxOSBAQAogCTB4MDAwMDAwMDAsCiAJMHgzYzAwMDAwMCwKIAkweDY3OTYxMDAxLAorI2lmZGVmIF9fQklHX0VORElBTgorCTB4MDAwYTAwMDAsCisjZWxzZQogCTB4MDAwODAwMDAsCisjZW5kaWYKIAkweDAwMDAwMDAwLAogCTB4MWMwMDAwMDAsCiAJMHg2Nzk2MTAwMCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMDIwMDA4LAorI2Vsc2UKIAkweDAwMDAwMDA4LAorI2VuZGlmCiAJMHgwMDAwMDAwMCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKaW5kZXggMzZkMzJkOC4uZWI0YWNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKQEAgLTk4LDYgKzk4LDcgQEAKICNkZWZpbmUJCUJVRl9TV0FQXzMyQklUCQkJCQkoMiA8PCAxNikKICNkZWZpbmUJQ1BfUkJfUlBUUgkJCQkJMHg4NzAwCiAjZGVmaW5lCUNQX1JCX1JQVFJfQUREUgkJCQkJMHhDMTBDCisjZGVmaW5lCQlSQl9SUFRSX1NXQVAoeCkJCQkJCSgoeCkgPDwgMCkKICNkZWZpbmUJQ1BfUkJfUlBUUl9BRERSX0hJCQkJCTB4QzExMAogI2RlZmluZQlDUF9SQl9SUFRSX1dSCQkJCQkweEMxMDgKICNkZWZpbmUJQ1BfUkJfV1BUUgkJCQkJMHhDMTE0CkBAIC0yNDAsNiArMjQxLDcgQEAKICNkZWZpbmUJCUZPUkNFX0VPVl9NQVhfQ0xLX0NOVCh4KQkJCSgoeCkgPDwgMCkKICNkZWZpbmUJCUZPUkNFX0VPVl9NQVhfUkVaX0NOVCh4KQkJCSgoeCkgPDwgMTYpCiAjZGVmaW5lIFBBX1NDX0xJTkVfU1RJUFBMRQkJCQkweDI4QTBDCisjZGVmaW5lCVBBX1NVX0xJTkVfU1RJUFBMRV9WQUxVRQkJCTB4OEE2MAogI2RlZmluZQlQQV9TQ19MSU5FX1NUSVBQTEVfU1RBVEUJCQkweDhCMTAKIAogI2RlZmluZQlTQ1JBVENIX1JFRzAJCQkJCTB4ODUwMApAQCAtNjUyLDYgKzY1NCw3IEBACiAjZGVmaW5lCVBBQ0tFVDNfRElTUEFUQ0hfRElSRUNUCQkJCTB4MTUKICNkZWZpbmUJUEFDS0VUM19ESVNQQVRDSF9JTkRJUkVDVAkJCTB4MTYKICNkZWZpbmUJUEFDS0VUM19JTkRJUkVDVF9CVUZGRVJfRU5ECQkJMHgxNworI2RlZmluZQlQQUNLRVQzX01PREVfQ09OVFJPTAkJCQkweDE4CiAjZGVmaW5lCVBBQ0tFVDNfU0VUX1BSRURJQ0FUSU9OCQkJCTB4MjAKICNkZWZpbmUJUEFDS0VUM19SRUdfUk1XCQkJCQkweDIxCiAjZGVmaW5lCVBBQ0tFVDNfQ09ORF9FWEVDCQkJCTB4MjIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKaW5kZXggNjA3MjQxYy4uNWE4MmI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKQEAgLTY3Myw4ICs2NzMsMTAgQEAKIAlsYXN0X3JlZyA9IHN0cnRvbChsYXN0X3JlZ19zLCBOVUxMLCAxNik7CiAKIAlkbyB7Ci0JCWlmIChmZ2V0cyhidWYsIDEwMjQsIGZpbGUpID09IE5VTEwpCisJCWlmIChmZ2V0cyhidWYsIDEwMjQsIGZpbGUpID09IE5VTEwpIHsKKwkJCWZjbG9zZShmaWxlKTsKIAkJCXJldHVybiAtMTsKKwkJfQogCQlsZW4gPSBzdHJsZW4oYnVmKTsKIAkJaWYgKGZ0ZWxsKGZpbGUpID09IGVuZCkKIAkJCWRvbmUgPSAxOwpAQCAtNjg1LDYgKzY4Nyw3IEBACiAJCQkJZnByaW50ZihzdGRlcnIsCiAJCQkJCSJFcnJvciBtYXRjaGluZyByZWd1bGFyIGV4cHJlc3Npb24gJWQgaW4gJXNcbiIsCiAJCQkJCXIsIGZpbGVuYW1lKTsKKwkJCQlmY2xvc2UoZmlsZSk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfSBlbHNlIHsKIAkJCQlidWZbbWF0Y2hbMF0ucm1fZW9dID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggNTk2OGRkZS4uOTNmYTczNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTEwMzEsOCArMTAzMSw4IEBACiAJV1JFRzMyKFJBREVPTl9DUF9DU1FfTU9ERSwKIAkgICAgICAgUkVHX1NFVChSQURFT05fSU5ESVJFQ1QyX1NUQVJULCBpbmRpcmVjdDJfc3RhcnQpIHwKIAkgICAgICAgUkVHX1NFVChSQURFT05fSU5ESVJFQ1QxX1NUQVJULCBpbmRpcmVjdDFfc3RhcnQpKTsKLQlXUkVHMzIoMHg3MTgsIDApOwotCVdSRUczMigweDc0NCwgMHgwMDAwNEQ0RCk7CisJV1JFRzMyKFJBREVPTl9DUF9SQl9XUFRSX0RFTEFZLCAwKTsKKwlXUkVHMzIoUkFERU9OX0NQX0NTUV9NT0RFLCAweDAwMDA0RDREKTsKIAlXUkVHMzIoUkFERU9OX0NQX0NTUV9DTlRMLCBSQURFT05fQ1NRX1BSSUJNX0lOREJNKTsKIAlyYWRlb25fcmluZ19zdGFydChyZGV2KTsKIAlyID0gcmFkZW9uX3JpbmdfdGVzdChyZGV2KTsKQEAgLTE0MjcsNiArMTQyNyw3IEBACiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKIAkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUOgpAQCAtMTQzOSw2ICsxNDQwLDcgQEAKIAkJfQogCQl0cmFjay0+Y2JbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+Y2JbMF0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RYT0ZGU0VUXzA6CkBAIC0xNDU0LDYgKzE0NTYsNyBAQAogCQl9CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8wOgogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8xOgpAQCAtMTQ3MSw2ICsxNDc0LDcgQEAKIAkJdHJhY2stPnRleHR1cmVzWzBdLmN1YmVfaW5mb1tpXS5vZmZzZXQgPSBpZHhfdmFsdWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzWzBdLmN1YmVfaW5mb1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDFfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDFfMToKQEAgLTE0ODgsNiArMTQ5Miw3IEBACiAJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QyXzA6CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QyXzE6CkBAIC0xNTA1LDkgKzE1MTAsMTIgQEAKIAkJdHJhY2stPnRleHR1cmVzWzJdLmN1YmVfaW5mb1tpXS5vZmZzZXQgPSBpZHhfdmFsdWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzWzJdLmN1YmVfaW5mb1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SRV9XSURUSF9IRUlHSFQ6CiAJCXRyYWNrLT5tYXh5ID0gKChpZHhfdmFsdWUgPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9SUElUQ0g6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0xNTI4LDkgKzE1MzYsMTEgQEAKIAkJaWJbaWR4XSA9IHRtcDsKIAogCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0RFUFRIUElUQ0g6CiAJCXRyYWNrLT56Yi5waXRjaCA9IGlkeF92YWx1ZSAmIFJBREVPTl9ERVBUSFBJVENIX01BU0s7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ05UTDoKIAkJc3dpdGNoICgoaWR4X3ZhbHVlID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSB7CkBAIC0xNTU1LDYgKzE1NjUsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJdHJhY2stPnpfZW5hYmxlZCA9ICEhKGlkeF92YWx1ZSAmIFJBREVPTl9aX0VOQUJMRSk7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfWlNURU5DSUxDTlRMOgogCQlzd2l0Y2ggKGlkeF92YWx1ZSAmIDB4ZikgewpAQCAtMTU3Miw2ICsxNTg0LDcgQEAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfWlBBU1NfQUREUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTE1ODgsNiArMTYwMSw3IEBACiAJCQl1aW50MzJfdCB0ZW1wID0gaWR4X3ZhbHVlID4+IDQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCiAJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOworCQkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fU0VfVkZfQ05UTDoKQEAgLTE2MDIsMTIgKzE2MTYsMTQgQEAKIAkJaSA9IChyZWcgLSBSQURFT05fUFBfVEVYX1NJWkVfMCkgLyA4OwogCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGlkeF92YWx1ZSAmIFJBREVPTl9URVhfVlNJWkVfTUFTSykgPj4gUkFERU9OX1RFWF9WU0laRV9TSElGVCkgKyAxOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVEVYX1BJVENIXzA6CiAJY2FzZSBSQURFT05fUFBfVEVYX1BJVENIXzE6CiAJY2FzZSBSQURFT05fUFBfVEVYX1BJVENIXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RFWF9QSVRDSF8wKSAvIDg7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IGlkeF92YWx1ZSArIDMyOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhGSUxURVJfMDoKIAljYXNlIFJBREVPTl9QUF9UWEZJTFRFUl8xOgpAQCAtMTYyMSw2ICsxNjM3LDcgQEAKIAkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RYRk9STUFUXzA6CiAJY2FzZSBSQURFT05fUFBfVFhGT1JNQVRfMToKQEAgLTE2NzMsNiArMTY5MCw3IEBACiAJCX0KIAkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMTYpICYgMHhmKTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS5oZWlnaHQgPSAxIDw8ICgoaWR4X3ZhbHVlID4+IDIwKSAmIDB4Zik7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19GQUNFU18wOgogCWNhc2UgUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzE6CkBAIC0xNjgzLDYgKzE3MDEsNyBAQAogCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDEgPDwgKCh0bXAgPj4gKGZhY2UgKiA4KSkgJiAweGYpOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS5oZWlnaHQgPSAxIDw8ICgodG1wID4+ICgoZmFjZSAqIDgpICsgNCkpICYgMHhmKTsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJGb3JiaWRkZW4gcmVnaXN0ZXIgMHglMDRYIGluIGNzIGF0ICVkXG4iLApAQCAtMjM0NywxMCArMjM2NiwxMCBAQAogCiAJdGVtcCA9IFJSRUczMihSQURFT05fQ09ORklHX0NOVEwpOwogCWlmIChzdGF0ZSA9PSBmYWxzZSkgewotCQl0ZW1wICY9IH4oMTw8OCk7Ci0JCXRlbXAgfD0gKDE8PDkpOworCQl0ZW1wICY9IH5SQURFT05fQ0ZHX1ZHQV9SQU1fRU47CisJCXRlbXAgfD0gUkFERU9OX0NGR19WR0FfSU9fRElTOwogCX0gZWxzZSB7Ci0JCXRlbXAgJj0gfigxPDw5KTsKKwkJdGVtcCAmPSB+UkFERU9OX0NGR19WR0FfSU9fRElTOwogCX0KIAlXUkVHMzIoUkFERU9OX0NPTkZJR19DTlRMLCB0ZW1wKTsKIH0KQEAgLTMzMTgsOSArMzMzNyw5IEBACiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXVuc2lnbmVkIHByaW1fd2FsazsKIAl1bnNpZ25lZCBudmVydHM7Ci0JdW5zaWduZWQgbnVtX2NiID0gdHJhY2stPm51bV9jYjsKKwl1bnNpZ25lZCBudW1fY2IgPSB0cmFjay0+Y2JfZGlydHkgPyB0cmFjay0+bnVtX2NiIDogMDsKIAotCWlmICghdHJhY2stPnpiX2NiX2NsZWFyICYmICF0cmFjay0+Y29sb3JfY2hhbm5lbF9tYXNrICYmCisJaWYgKG51bV9jYiAmJiAhdHJhY2stPnpiX2NiX2NsZWFyICYmICF0cmFjay0+Y29sb3JfY2hhbm5lbF9tYXNrICYmCiAJICAgICF0cmFjay0+YmxlbmRfcmVhZF9lbmFibGUpCiAJCW51bV9jYiA9IDA7CiAKQEAgLTMzNDEsNyArMzM2MCw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KLQlpZiAodHJhY2stPnpfZW5hYmxlZCkgeworCXRyYWNrLT5jYl9kaXJ0eSA9IGZhbHNlOworCisJaWYgKHRyYWNrLT56Yl9kaXJ0eSAmJiB0cmFjay0+el9lbmFibGVkKSB7CiAJCWlmICh0cmFjay0+emIucm9iaiA9PSBOVUxMKSB7CiAJCQlEUk1fRVJST1IoIltkcm1dIE5vIGJ1ZmZlciBmb3IgeiBidWZmZXIgIVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMzNTgsNiArMzM3OSwyOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CisJdHJhY2stPnpiX2RpcnR5ID0gZmFsc2U7CisKKwlpZiAodHJhY2stPmFhX2RpcnR5ICYmIHRyYWNrLT5hYXJlc29sdmUpIHsKKwkJaWYgKHRyYWNrLT5hYS5yb2JqID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiW2RybV0gTm8gYnVmZmVyIGZvciBBQSByZXNvbHZlIGJ1ZmZlciAlZCAhXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qIEkgYmVsaWV2ZSB0aGUgZm9ybWF0IGNvbWVzIGZyb20gY29sb3JidWZmZXIwLiAqLworCQlzaXplID0gdHJhY2stPmFhLnBpdGNoICogdHJhY2stPmNiWzBdLmNwcCAqIHRyYWNrLT5tYXh5OworCQlzaXplICs9IHRyYWNrLT5hYS5vZmZzZXQ7CisJCWlmIChzaXplID4gcmFkZW9uX2JvX3NpemUodHJhY2stPmFhLnJvYmopKSB7CisJCQlEUk1fRVJST1IoIltkcm1dIEJ1ZmZlciB0b28gc21hbGwgZm9yIEFBIHJlc29sdmUgYnVmZmVyICVkICIKKwkJCQkgICIobmVlZCAlbHUgaGF2ZSAlbHUpICFcbiIsIGksIHNpemUsCisJCQkJICByYWRlb25fYm9fc2l6ZSh0cmFjay0+YWEucm9iaikpOworCQkJRFJNX0VSUk9SKCJbZHJtXSBBQSByZXNvbHZlIGJ1ZmZlciAlZCAoJXUgJXUgJXUgJXUpXG4iLAorCQkJCSAgaSwgdHJhY2stPmFhLnBpdGNoLCB0cmFjay0+Y2JbMF0uY3BwLAorCQkJCSAgdHJhY2stPmFhLm9mZnNldCwgdHJhY2stPm1heHkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJdHJhY2stPmFhX2RpcnR5ID0gZmFsc2U7CisKIAlwcmltX3dhbGsgPSAodHJhY2stPnZhcF92Zl9jbnRsID4+IDQpICYgMHgzOwogCWlmICh0cmFjay0+dmFwX3ZmX2NudGwgJiAoMSA8PCAxNCkpIHsKIAkJbnZlcnRzID0gdHJhY2stPnZhcF9hbHRfbnZlcnRzOwpAQCAtMzQxNywxMyArMzQ2MCwyMyBAQAogCQkJICBwcmltX3dhbGspOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmV0dXJuIHIxMDBfY3NfdHJhY2tfdGV4dHVyZV9jaGVjayhyZGV2LCB0cmFjayk7CisKKwlpZiAodHJhY2stPnRleF9kaXJ0eSkgeworCQl0cmFjay0+dGV4X2RpcnR5ID0gZmFsc2U7CisJCXJldHVybiByMTAwX2NzX3RyYWNrX3RleHR1cmVfY2hlY2socmRldiwgdHJhY2spOworCX0KKwlyZXR1cm4gMDsKIH0KIAogdm9pZCByMTAwX2NzX3RyYWNrX2NsZWFyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2spCiB7CiAJdW5zaWduZWQgaSwgZmFjZTsKIAorCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CisJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKKwl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKKwl0cmFjay0+YWFfZGlydHkgPSB0cnVlOworCiAJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfUjMwMCkgewogCQl0cmFjay0+bnVtX2NiID0gMTsKIAkJaWYgKHJkZXYtPmZhbWlseSA8PSBDSElQX1JTMjAwKQpAQCAtMzQzNyw2ICszNDkwLDggQEAKIAkJdHJhY2stPm51bV90ZXh0dXJlID0gMTY7CiAJCXRyYWNrLT5tYXh5ID0gNDA5NjsKIAkJdHJhY2stPnNlcGFyYXRlX2N1YmUgPSAwOworCQl0cmFjay0+YWFyZXNvbHZlID0gZmFsc2U7CisJCXRyYWNrLT5hYS5yb2JqID0gTlVMTDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV9jYjsgaSsrKSB7CkBAIC0zNzQ2LDggKzM4MDEsNiBAQAogCXIxMDBfbWNfcHJvZ3JhbShyZGV2KTsKIAkvKiBSZXN1bWUgY2xvY2sgKi8KIAlyMTAwX2Nsb2NrX3N0YXJ0dXAocmRldik7Ci0JLyogSW5pdGlhbGl6ZSBHUFUgY29uZmlndXJhdGlvbiAoIyBwaXBlcywgLi4uKSAqLwotLy8JcjEwMF9ncHVfaW5pdChyZGV2KTsKIAkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQogCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLwogCXIxMDBfZW5hYmxlX2JtKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBfdHJhY2suaAppbmRleCBhZjY1NjAwLi4yZmVmOWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBfdHJhY2suaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBfdHJhY2suaApAQCAtNTIsMTQgKzUyLDcgQEAKIAl1bnNpZ25lZCAgICAgICAgICAgICAgICBjb21wcmVzc19mb3JtYXQ7CiB9OwogCi1zdHJ1Y3QgcjEwMF9jc190cmFja19saW1pdHMgewotCXVuc2lnbmVkIG51bV9jYjsKLQl1bnNpZ25lZCBudW1fdGV4dHVyZTsKLQl1bnNpZ25lZCBtYXhfbGV2ZWxzOwotfTsKLQogc3RydWN0IHIxMDBfY3NfdHJhY2sgewotCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2OwogCXVuc2lnbmVkCQkJbnVtX2NiOwogCXVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3RleHR1cmU7CiAJdW5zaWduZWQJCQltYXh5OwpAQCAtNzMsMTEgKzY2LDE3IEBACiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfYXJyYXkJYXJyYXlzWzExXTsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja19jYiAJY2JbUjMwMF9NQVhfQ0JdOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrX2NiIAl6YjsKKwlzdHJ1Y3QgcjEwMF9jc190cmFja19jYiAJYWE7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfdGV4dHVyZQl0ZXh0dXJlc1tSMzAwX1RSQUNLX01BWF9URVhUVVJFXTsKIAlib29sCQkJCXpfZW5hYmxlZDsKIAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlX2N1YmU7CiAJYm9vbAkJCQl6Yl9jYl9jbGVhcjsKIAlib29sCQkJCWJsZW5kX3JlYWRfZW5hYmxlOworCWJvb2wJCQkJY2JfZGlydHk7CisJYm9vbAkJCQl6Yl9kaXJ0eTsKKwlib29sCQkJCXRleF9kaXJ0eTsKKwlib29sCQkJCWFhX2RpcnR5OworCWJvb2wJCQkJYWFyZXNvbHZlOwogfTsKIAogaW50IHIxMDBfY3NfdHJhY2tfY2hlY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCmluZGV4IGQyNDA4YzMuLmYyNDA1ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCkBAIC0xODQsNiArMTg0LDcgQEAKIAkJfQogCQl0cmFjay0+emIucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+emIub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JPRkZTRVQ6CkBAIC0xOTYsNiArMTk3LDcgQEAKIAkJfQogCQl0cmFjay0+Y2JbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+Y2JbMF0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWE9GRlNFVF8wOgpAQCAtMjE0LDYgKzIxNiw3IEBACiAJCX0KIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8wOgogCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjJfMDoKQEAgLTI1Nyw5ICsyNjAsMTIgQEAKIAkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlIC0gMV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JFX1dJRFRIX0hFSUdIVDoKIAkJdHJhY2stPm1heHkgPSAoKGlkeF92YWx1ZSA+PiAxNikgJiAweDdGRik7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ09MT1JQSVRDSDoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTI4MCw5ICsyODYsMTEgQEAKIAkJaWJbaWR4XSA9IHRtcDsKIAogCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0RFUFRIUElUQ0g6CiAJCXRyYWNrLT56Yi5waXRjaCA9IGlkeF92YWx1ZSAmIFJBREVPTl9ERVBUSFBJVENIX01BU0s7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ05UTDoKIAkJc3dpdGNoICgoaWR4X3ZhbHVlID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSB7CkBAIC0zMTIsNiArMzIwLDggQEAKIAkJfQogCiAJCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiBSQURFT05fWl9FTkFCTEUpOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKIAkJc3dpdGNoIChpZHhfdmFsdWUgJiAweGYpIHsKQEAgLTMyOSw2ICszMzksNyBAQAogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9aUEFTU19BRERSOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMzQ1LDYgKzM1Niw3IEBACiAJCQl1aW50MzJfdCB0ZW1wID0gaWR4X3ZhbHVlID4+IDQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCiAJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOworCQkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fU0VfVkZfQ05UTDoKQEAgLTM2OSw2ICszODEsNyBAQAogCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhTSVpFXzApIC8gMzI7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhQSVRDSF8wOgogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzE6CkBAIC0zNzgsNiArMzkxLDcgQEAKIAljYXNlIFIyMDBfUFBfVFhQSVRDSF81OgogCQlpID0gKHJlZyAtIFIyMDBfUFBfVFhQSVRDSF8wKSAvIDMyOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgKyAzMjsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8wOgogCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8xOgpAQCAtMzk0LDYgKzQwOCw3IEBACiAJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjcpICYgMHg3OwogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDYpCiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gZmFsc2U7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhNVUxUSV9DVExfMDoKIAljYXNlIFIyMDBfUFBfVFhNVUxUSV9DVExfMToKQEAgLTQzMiw2ICs0NDcsNyBAQAogCQkJdHJhY2stPnRleHR1cmVzW2ldLnRleF9jb29yZF90eXBlID0gMTsKIAkJCWJyZWFrOwogCQl9CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhGT1JNQVRfMDoKIAljYXNlIFIyMDBfUFBfVFhGT1JNQVRfMToKQEAgLTQ4OCw2ICs1MDQsNyBAQAogCQl9CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0ud2lkdGggPSAxIDw8ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4Zik7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0uaGVpZ2h0ID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzA6CiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzE6CkBAIC01MDEsNiArNTE4LDcgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0ud2lkdGggPSAxIDw8ICgodG1wID4+IChmYWNlICogOCkpICYgMHhmKTsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0uaGVpZ2h0ID0gMSA8PCAoKHRtcCA+PiAoKGZhY2UgKiA4KSArIDQpKSAmIDB4Zik7CiAJCX0KKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiRm9yYmlkZGVuIHJlZ2lzdGVyIDB4JTA0WCBpbiBjcyBhdCAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKaW5kZXggY2Y4NjJjYS4uMDY5ZWZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKQEAgLTY5LDYgKzY5LDkgQEAKIAltYigpOwogfQogCisjZGVmaW5lIFIzMDBfUFRFX1dSSVRFQUJMRSAoMSA8PCAyKQorI2RlZmluZSBSMzAwX1BURV9SRUFEQUJMRSAgKDEgPDwgMykKKwogaW50IHJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGksIHVpbnQ2NF90IGFkZHIpCiB7CiAJdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPmdhcnQudGFibGUudnJhbS5wdHI7CkBAIC03OCw3ICs4MSw3IEBACiAJfQogCWFkZHIgPSAobG93ZXJfMzJfYml0cyhhZGRyKSA+PiA4KSB8CiAJICAgICAgICgodXBwZXJfMzJfYml0cyhhZGRyKSAmIDB4ZmYpIDw8IDI0KSB8Ci0JICAgICAgIDB4YzsKKwkgICAgICAgUjMwMF9QVEVfV1JJVEVBQkxFIHwgUjMwMF9QVEVfUkVBREFCTEU7CiAJLyogb24geDg2IHdlIHdhbnQgdGhpcyB0byBiZSBDUFUgZW5kaWFuLCBvbiBwb3dlcnBjCiAJICogb24gcG93ZXJwYyB3aXRob3V0IEhXIHN3YXBwZXJzLCBpdCdsbCBnZXQgc3dhcHBlZCBvbiB3YXkKIAkgKiBpbnRvIFZSQU0gLSBzbyBubyBuZWVkIGZvciBjcHVfdG9fbGUzMiBvbiBWUkFNIHRhYmxlcyAqLwpAQCAtMTM1LDcgKzEzOCw3IEBACiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfRElTQ0FSRF9SRF9BRERSX0xPLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9ESVNDQVJEX1JEX0FERFJfSEksIDApOwogCS8qIENsZWFyIGVycm9yICovCi0JV1JFRzMyX1BDSUUoMHgxOCwgMCk7CisJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9FUlJPUiwgMCk7CiAJdG1wID0gUlJFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9DTlRMKTsKIAl0bXAgfD0gUkFERU9OX1BDSUVfVFhfR0FSVF9FTjsKIAl0bXAgfD0gUkFERU9OX1BDSUVfVFhfR0FSVF9VTk1BUFBFRF9BQ0NFU1NfRElTQ0FSRDsKQEAgLTY2NCw2ICs2NjcsNyBAQAogCQl9CiAJCXRyYWNrLT5jYltpXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCXRyYWNrLT5jYltpXS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSMzAwX1pCX0RFUFRIT0ZGU0VUOgpAQCAtNjc2LDYgKzY4MCw3IEBACiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKIAkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIzMDBfVFhfT0ZGU0VUXzA6CkBAIC03MTQsNiArNzE5LDcgQEAKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAkvKiBUcmFja2VkIHJlZ2lzdGVycyAqLwogCWNhc2UgMHgyMDg0OgpAQCAtNzQwLDYgKzc0Niw4IEBACiAJCWlmIChwLT5yZGV2LT5mYW1pbHkgPCBDSElQX1JWNTE1KSB7CiAJCQl0cmFjay0+bWF4eSAtPSAxNDQwOwogCQl9CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0RTAwOgogCQkvKiBSQjNEX0NDVEwgKi8KQEAgLTc0OSw2ICs3NTcsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJdHJhY2stPm51bV9jYiA9ICgoaWR4X3ZhbHVlID4+IDUpICYgMHgzKSArIDE7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0RTM4OgogCWNhc2UgMHg0RTNDOgpAQCAtODExLDYgKzgyMCw3IEBACiAJCQkJICAoKGlkeF92YWx1ZSA+PiAyMSkgJiAweEYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0RjAwOgogCQkvKiBaQl9DTlRMICovCkBAIC04MTksNiArODI5LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXRyYWNrLT56X2VuYWJsZWQgPSBmYWxzZTsKIAkJfQorCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NEYxMDoKIAkJLyogWkJfRk9STUFUICovCkBAIC04MzUsNiArODQ2LDcgQEAKIAkJCQkgIChpZHhfdmFsdWUgJiAweEYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0RjI0OgogCQkvKiBaQl9ERVBUSFBJVENIICovCkBAIC04NTgsMTQgKzg3MCwxNyBAQAogCQlpYltpZHhdID0gdG1wOwogCiAJCXRyYWNrLT56Yi5waXRjaCA9IGlkeF92YWx1ZSAmIDB4M0ZGQzsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDQxMDQ6CisJCS8qIFRYX0VOQUJMRSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQkJYm9vbCBlbmFibGVkOwogCiAJCQllbmFibGVkID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgaSkpOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSBlbmFibGVkOwogCQl9CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NDRDMDoKIAljYXNlIDB4NDRDNDoKQEAgLTg5NSw2ICs5MTAsNyBAQAogCQkJdHJhY2stPnRleHR1cmVzW2ldLmNvbXByZXNzX2Zvcm1hdCA9IFIxMDBfVFJBQ0tfQ09NUF9OT05FOwogCQkJYnJlYWs7CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWDE2OgorCQljYXNlIFIzMDBfVFhfRk9STUFUX0ZMX0kxNjoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9ZOFg4OgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1o1WTZYNToKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aNlk1WDU6CkBAIC05MDcsNiArOTIzLDcgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jb21wcmVzc19mb3JtYXQgPSBSMTAwX1RSQUNLX0NPTVBfTk9ORTsKIAkJCWJyZWFrOwogCQljYXNlIFIzMDBfVFhfRk9STUFUX1kxNlgxNjoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9GTF9JMTZBMTY6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWjExWTExWDEwOgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1oxMFkxMVgxMToKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9XOFo4WThYODoKQEAgLTk0OCw4ICs5NjUsOCBAQAogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHRleHR1cmUgZm9ybWF0ICV1XG4iLAogCQkJCSAgKGlkeF92YWx1ZSAmIDB4MUYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7CiAJCX0KKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0NDAwOgogCWNhc2UgMHg0NDA0OgpAQCAtOTc3LDYgKzk5NCw3IEBACiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNCB8fCB0bXAgPT0gNikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IGZhbHNlOwogCQl9CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NDUwMDoKIAljYXNlIDB4NDUwNDoKQEAgLTEwMTQsNiArMTAzMiw3IEBACiAJCQlEUk1fRVJST1IoIkZvcmJpZGRlbiBiaXQgVFhGT1JNQVRfTVNCXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NDQ4MDoKIAljYXNlIDB4NDQ4NDoKQEAgLTEwNDMsNiArMTA2Miw3IEBACiAJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAhIXRtcDsKIAkJdG1wID0gKGlkeF92YWx1ZSA+PiAyMikgJiAweEY7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gdG1wOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSMzAwX1pCX1pQQVNTX0FERFI6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0xMDU3LDYgKzEwNzcsNyBAQAogCWNhc2UgMHg0ZTBjOgogCQkvKiBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSyAqLwogCQl0cmFjay0+Y29sb3JfY2hhbm5lbF9tYXNrID0gaWR4X3ZhbHVlOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NDNhNDoKIAkJLyogU0NfSFlQRVJaX0VOICovCkBAIC0xMDcwLDYgKzEwOTEsOCBAQAogCWNhc2UgMHg0ZjFjOgogCQkvKiBaQl9CV19DTlRMICovCiAJCXRyYWNrLT56Yl9jYl9jbGVhciA9ICEhKGlkeF92YWx1ZSAmICgxIDw8IDUpKTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJaWYgKHAtPnJkZXYtPmh5cGVyel9maWxwICE9IHAtPmZpbHApIHsKIAkJCWlmIChpZHhfdmFsdWUgJiAoUjMwMF9ISVpfRU5BQkxFIHwKIAkJCQkJIFIzMDBfUkRfQ09NUF9FTkFCTEUgfApAQCAtMTA4MSw4ICsxMTA0LDI4IEBACiAJY2FzZSAweDRlMDQ6CiAJCS8qIFJCM0RfQkxFTkRDTlRMICovCiAJCXRyYWNrLT5ibGVuZF9yZWFkX2VuYWJsZSA9ICEhKGlkeF92YWx1ZSAmICgxIDw8IDIpKTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7Ci0JY2FzZSAweDRmMjg6IC8qIFpCX0RFUFRIQ0xFQVJWQUxVRSAqLworCWNhc2UgUjMwMF9SQjNEX0FBUkVTT0xWRV9PRkZTRVQ6CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCSAgaWR4LCByZWcpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJdHJhY2stPmFhLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPmFhLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPmFhX2RpcnR5ID0gdHJ1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlicmVhazsKKwljYXNlIFIzMDBfUkIzRF9BQVJFU09MVkVfUElUQ0g6CisJCXRyYWNrLT5hYS5waXRjaCA9IGlkeF92YWx1ZSAmIDB4M0ZGRTsKKwkJdHJhY2stPmFhX2RpcnR5ID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBSMzAwX1JCM0RfQUFSRVNPTFZFX0NUTDoKKwkJdHJhY2stPmFhcmVzb2x2ZSA9IGlkeF92YWx1ZSAmIDB4MTsKKwkJdHJhY2stPmFhX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDRmMzA6IC8qIFpCX01BU0tfT0ZGU0VUICovCiAJY2FzZSAweDRmMzQ6IC8qIFpCX1pNQVNLX1BJVENIICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKaW5kZXggMWEwZDUzNi4uZjBiY2UzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaApAQCAtMTM3MSw2ICsxMzcxLDggQEAKICNkZWZpbmUgUjMwMF9SQjNEX0NPTE9SUElUQ0gyICAgICAgICAgICAgICAgMHg0RTQwIC8qIEdVRVNTICovCiAjZGVmaW5lIFIzMDBfUkIzRF9DT0xPUlBJVENIMyAgICAgICAgICAgICAgIDB4NEU0NCAvKiBHVUVTUyAqLwogCisjZGVmaW5lIFIzMDBfUkIzRF9BQVJFU09MVkVfT0ZGU0VUICAgICAgICAgIDB4NEU4MAorI2RlZmluZSBSMzAwX1JCM0RfQUFSRVNPTFZFX1BJVENIICAgICAgICAgICAweDRFODQKICNkZWZpbmUgUjMwMF9SQjNEX0FBUkVTT0xWRV9DVEwgICAgICAgICAgICAgMHg0RTg4CiAvKiBnYXAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYwppbmRleCBjMzg3MzQ2Li4wYjU5ZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYwpAQCAtOTYsNyArOTYsNyBAQAogCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAkvKiBnZXQgbWF4IG51bWJlciBvZiBwaXBlcyAqLwotCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKDB4NDAyQyk7CisJZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoUjQwMF9HQl9QSVBFX1NFTEVDVCk7CiAJbnVtX3BpcGVzID0gKChnYl9waXBlX3NlbGVjdCA+PiAxMikgJiAzKSArIDE7CiAKIAkvKiBTRSBjaGlwcyBoYXZlIDEgcGlwZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYwppbmRleCAzYzg2NzdmLi4yY2U4MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjAuYwpAQCAtNzksOCArNzksOCBAQAogCQlXUkVHMzIoMHg0MTI4LCAweEZGKTsKIAl9CiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwotCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKDB4NDAyQyk7Ci0JdG1wID0gUlJFRzMyKDB4MTcwQyk7CisJZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoUjQwMF9HQl9QSVBFX1NFTEVDVCk7CisJdG1wID0gUlJFRzMyKFIzMDBfRFNUX1BJUEVfQ09ORklHKTsKIAlwaXBlX3NlbGVjdF9jdXJyZW50ID0gKHRtcCA+PiAyKSAmIDM7CiAJdG1wID0gKDEgPDwgcGlwZV9zZWxlY3RfY3VycmVudCkgfAogCSAgICAgICgoKGdiX3BpcGVfc2VsZWN0ID4+IDgpICYgMHhGKSA8PCA0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKaW5kZXggMWUxMGUzZS4uZGU4ODYyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKQEAgLTk3LDEyICs5NywxNiBAQAogc3RhdGljIHZvaWQgcjYwMF9wY2llX2dlbjJfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwotdTMyIHJ2Nnh4X2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoraW50IHJ2Nnh4X2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiB0ZW1wID0gKFJSRUczMihDR19USEVSTUFMX1NUQVRVUykgJiBBU0lDX1RfTUFTSykgPj4KIAkJQVNJQ19UX1NISUZUOworCWludCBhY3R1YWxfdGVtcCA9IHRlbXAgJiAweGZmOwogCi0JcmV0dXJuIHRlbXAgKiAxMDAwOworCWlmICh0ZW1wICYgMHgxMDApCisJCWFjdHVhbF90ZW1wIC09IDI1NjsKKworCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CiB9CiAKIHZvaWQgcjYwMF9wbV9nZXRfZHlucG1fc3RhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC0yMTAxLDcgKzIxMDUsMTEgQEAKIAogCXI2MDBfY3Bfc3RvcChyZGV2KTsKIAotCVdSRUczMihDUF9SQl9DTlRMLCBSQl9OT19VUERBVEUgfCBSQl9CTEtTWigxNSkgfCBSQl9CVUZTWigzKSk7CisJV1JFRzMyKENQX1JCX0NOVEwsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJICAgICAgIEJVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgorCSAgICAgICBSQl9OT19VUERBVEUgfCBSQl9CTEtTWigxNSkgfCBSQl9CVUZTWigzKSk7CiAKIAkvKiBSZXNldCBjcCAqLwogCVdSRUczMihHUkJNX1NPRlRfUkVTRVQsIFNPRlRfUkVTRVRfQ1ApOwpAQCAtMjE4OCw3ICsyMTk2LDExIEBACiAJV1JFRzMyKENQX1JCX1dQVFIsIDApOwogCiAJLyogc2V0IHRoZSB3YiBhZGRyZXNzIHdoZXRoZXIgaXQncyBlbmFibGVkIG9yIG5vdCAqLwotCVdSRUczMihDUF9SQl9SUFRSX0FERFIsIChyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGRkZGRkZDKTsKKwlXUkVHMzIoQ1BfUkJfUlBUUl9BRERSLAorI2lmZGVmIF9fQklHX0VORElBTgorCSAgICAgICBSQl9SUFRSX1NXQVAoMikgfAorI2VuZGlmCisJICAgICAgICgocmRldi0+d2IuZ3B1X2FkZHIgKyBSQURFT05fV0JfQ1BfUlBUUl9PRkZTRVQpICYgMHhGRkZGRkZGQykpOwogCVdSRUczMihDUF9SQl9SUFRSX0FERFJfSEksIHVwcGVyXzMyX2JpdHMocmRldi0+d2IuZ3B1X2FkZHIgKyBSQURFT05fV0JfQ1BfUlBUUl9PRkZTRVQpICYgMHhGRik7CiAJV1JFRzMyKFNDUkFUQ0hfQUREUiwgKChyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9TQ1JBVENIX09GRlNFVCkgPj4gOCkgJiAweEZGRkZGRkZGKTsKIApAQCAtMjYyNCw3ICsyNjM2LDExIEBACiB7CiAJLyogRklYTUU6IGltcGxlbWVudCAqLwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19JTkRJUkVDVF9CVUZGRVIsIDIpKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBpYi0+Z3B1X2FkZHIgJiAweEZGRkZGRkZDKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LAorI2lmZGVmIF9fQklHX0VORElBTgorCQkJICAoMiA8PCAwKSB8CisjZW5kaWYKKwkJCSAgKGliLT5ncHVfYWRkciAmIDB4RkZGRkZGRkMpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCB1cHBlcl8zMl9iaXRzKGliLT5ncHVfYWRkcikgJiAweEZGKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBpYi0+bGVuZ3RoX2R3KTsKIH0KQEAgLTMyOTMsOCArMzMwOSw4IEBACiAJd2hpbGUgKHJwdHIgIT0gd3B0cikgewogCQkvKiB3cHRyL3JwdHIgYXJlIGluIGJ5dGVzISAqLwogCQlyaW5nX2luZGV4ID0gcnB0ciAvIDQ7Ci0JCXNyY19pZCA9ICByZGV2LT5paC5yaW5nW3JpbmdfaW5kZXhdICYgMHhmZjsKLQkJc3JjX2RhdGEgPSByZGV2LT5paC5yaW5nW3JpbmdfaW5kZXggKyAxXSAmIDB4ZmZmZmZmZjsKKwkJc3JjX2lkID0gbGUzMl90b19jcHUocmRldi0+aWgucmluZ1tyaW5nX2luZGV4XSkgJiAweGZmOworCQlzcmNfZGF0YSA9IGxlMzJfdG9fY3B1KHJkZXYtPmloLnJpbmdbcmluZ19pbmRleCArIDFdKSAmIDB4ZmZmZmZmZjsKIAogCQlzd2l0Y2ggKHNyY19pZCkgewogCQljYXNlIDE6IC8qIEQxIHZibGFuay92bGluZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKaW5kZXggY2E1YzI5Zi4uN2YxMDQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCkBAIC0xMzcsOSArMTM3LDkgQEAKIAlwcyA9ICh1MzIgKikgKChjaGFyICopZGV2LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlICsgZGV2X3ByaXYtPmJsaXRfdmItPm9mZnNldCArIDI1Nik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcjZ4eF92c19zaXplOyBpKyspCi0JCXZzW2ldID0gcjZ4eF92c1tpXTsKKwkJdnNbaV0gPSBjcHVfdG9fbGUzMihyNnh4X3ZzW2ldKTsKIAlmb3IgKGkgPSAwOyBpIDwgcjZ4eF9wc19zaXplOyBpKyspCi0JCXBzW2ldID0gcjZ4eF9wc1tpXTsKKwkJcHNbaV0gPSBjcHVfdG9fbGUzMihyNnh4X3BzW2ldKTsKIAogCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkID0gNTEyOwogCkBAIC0xOTIsNiArMTkyLDkgQEAKIAlEUk1fREVCVUcoIlxuIik7CiAKIAlzcV92dHhfY29uc3RhbnRfd29yZDIgPSAoKChncHVfYWRkciA+PiAzMikgJiAweGZmKSB8ICgxNiA8PCA4KSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJc3FfdnR4X2NvbnN0YW50X3dvcmQyIHw9ICgyIDw8IDMwKTsKKyNlbmRpZgogCiAJQkVHSU5fUklORyg5KTsKIAlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX1JFU09VUkNFLCA3KSk7CkBAIC0yOTEsNyArMjk0LDExIEBACiAJT1VUX1JJTkcoRElfUFRfUkVDVExJU1QpOwogCiAJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX0lOREVYX1RZUEUsIDApKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlPVVRfUklORygoMiA8PCAyKSB8IERJX0lOREVYX1NJWkVfMTZfQklUKTsKKyNlbHNlCiAJT1VUX1JJTkcoRElfSU5ERVhfU0laRV8xNl9CSVQpOworI2VuZGlmCiAKIAlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfTlVNX0lOU1RBTkNFUywgMCkpOwogCU9VVF9SSU5HKDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwppbmRleCA4NmU1YWEwLi40MWY3YWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9rbXMuYwpAQCAtNTQsNyArNTQsNyBAQAogCWlmIChoIDwgOCkKIAkJaCA9IDg7CiAKLQljYl9jb2xvcl9pbmZvID0gKChmb3JtYXQgPDwgMikgfCAoMSA8PCAyNykpOworCWNiX2NvbG9yX2luZm8gPSAoKGZvcm1hdCA8PCAyKSB8ICgxIDw8IDI3KSB8ICgxIDw8IDgpKTsKIAlwaXRjaCA9ICh3IC8gOCkgLSAxOwogCXNsaWNlID0gKCh3ICogaCkgLyA2NCkgLSAxOwogCkBAIC0xNjUsNiArMTY1LDkgQEAKIAl1MzIgc3FfdnR4X2NvbnN0YW50X3dvcmQyOwogCiAJc3FfdnR4X2NvbnN0YW50X3dvcmQyID0gKCh1cHBlcl8zMl9iaXRzKGdwdV9hZGRyKSAmIDB4ZmYpIHwgKDE2IDw8IDgpKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwlzcV92dHhfY29uc3RhbnRfd29yZDIgfD0gKDIgPDwgMzApOworI2VuZGlmCiAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX1JFU09VUkNFLCA3KSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHg0NjApOwpAQCAtMTk5LDcgKzIwMiw3IEBACiAJaWYgKGggPCAxKQogCQloID0gMTsKIAotCXNxX3RleF9yZXNvdXJjZV93b3JkMCA9ICgxIDw8IDApOworCXNxX3RleF9yZXNvdXJjZV93b3JkMCA9ICgxIDw8IDApIHwgKDEgPDwgMyk7CiAJc3FfdGV4X3Jlc291cmNlX3dvcmQwIHw9ICgoKChwaXRjaCA+PiAzKSAtIDEpIDw8IDgpIHwKIAkJCQkgICgodyAtIDEpIDw8IDE5KSk7CiAKQEAgLTI1Myw3ICsyNTYsMTEgQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBESV9QVF9SRUNUTElTVCk7CiAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ERVhfVFlQRSwgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIERJX0lOREVYX1NJWkVfMTZfQklUKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LAorI2lmZGVmIF9fQklHX0VORElBTgorCQkJICAoMiA8PCAyKSB8CisjZW5kaWYKKwkJCSAgRElfSU5ERVhfU0laRV8xNl9CSVQpOwogCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX05VTV9JTlNUQU5DRVMsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKQEAgLTQyNCw3ICs0MzEsMTEgQEAKIAlkd29yZHMgPSBBTElHTihyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuLCAweDEwKTsKIAlncHVfYWRkciA9IHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfZ3B1X2FkZHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0OwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19JTkRJUkVDVF9CVUZGRVIsIDIpKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBncHVfYWRkciAmIDB4RkZGRkZGRkMpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkgICgyIDw8IDApIHwKKyNlbmRpZgorCQkJICAoZ3B1X2FkZHIgJiAweEZGRkZGRkZDKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgdXBwZXJfMzJfYml0cyhncHVfYWRkcikgJiAweEZGKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBkd29yZHMpOwogCkBAIC00NjcsNyArNDc4LDcgQEAKIGludCByNjAwX2JsaXRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgb2JqX3NpemU7Ci0JaW50IHIsIGR3b3JkczsKKwlpbnQgaSwgciwgZHdvcmRzOwogCXZvaWQgKnB0cjsKIAl1MzIgcGFja2V0MnNbMTZdOwogCWludCBudW1fcGFja2V0MnMgPSAwOwpAQCAtNDg2LDcgKzQ5Nyw3IEBACiAKIAlkd29yZHMgPSByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuOwogCXdoaWxlIChkd29yZHMgJiAweGYpIHsKLQkJcGFja2V0MnNbbnVtX3BhY2tldDJzKytdID0gUEFDS0VUMigwKTsKKwkJcGFja2V0MnNbbnVtX3BhY2tldDJzKytdID0gY3B1X3RvX2xlMzIoUEFDS0VUMigwKSk7CiAJCWR3b3JkcysrOwogCX0KIApAQCAtNTI5LDggKzU0MCwxMCBAQAogCWlmIChudW1fcGFja2V0MnMpCiAJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgKyAocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpLAogCQkJICAgIHBhY2tldDJzLCBudW1fcGFja2V0MnMgKiA0KTsKLQltZW1jcHkocHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCwgcjZ4eF92cywgcjZ4eF92c19zaXplICogNCk7Ci0JbWVtY3B5KHB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQsIHI2eHhfcHMsIHI2eHhfcHNfc2l6ZSAqIDQpOworCWZvciAoaSA9IDA7IGkgPCByNnh4X3ZzX3NpemU7IGkrKykKKwkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKHI2eHhfdnNbaV0pOworCWZvciAoaSA9IDA7IGkgPCByNnh4X3BzX3NpemU7IGkrKykKKwkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKHI2eHhfcHNbaV0pOwogCXJhZGVvbl9ib19rdW5tYXAocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCXJhZGVvbl9ib191bnJlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmMKaW5kZXggZTgxNTFjMS4uMmQxZjZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYwpAQCAtNjg0LDcgKzY4NCwxMSBAQAogCTB4MDAwMDAwMDAsCiAJMHgzYzAwMDAwMCwKIAkweDY4Y2QxMDAwLAorI2lmZGVmIF9fQklHX0VORElBTgorCTB4MDAwYTAwMDAsCisjZWxzZQogCTB4MDAwODAwMDAsCisjZW5kaWYKIAkweDAwMDAwMDAwLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYwppbmRleCA0ZjRjZDhiLi5jM2FiOTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYwpAQCAtMzk2LDYgKzM5Niw5IEBACiAJcjYwMF9kb19jcF9zdG9wKGRldl9wcml2KTsKIAogCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCSAgICAgUjYwMF9CVUZfU1dBUF8zMkJJVCB8CisjZW5kaWYKIAkJICAgICBSNjAwX1JCX05PX1VQREFURSB8CiAJCSAgICAgUjYwMF9SQl9CTEtTWigxNSkgfAogCQkgICAgIFI2MDBfUkJfQlVGU1ooMykpOwpAQCAtNDg2LDkgKzQ4OSwxMiBAQAogCXI2MDBfZG9fY3Bfc3RvcChkZXZfcHJpdik7CiAKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorI2lmZGVmIF9fQklHX0VORElBTgorCQkgICAgIFI2MDBfQlVGX1NXQVBfMzJCSVQgfAorI2VuZGlmCiAJCSAgICAgUjYwMF9SQl9OT19VUERBVEUgfAotCQkgICAgICgxNSA8PCA4KSB8Ci0JCSAgICAgKDMgPDwgMCkpOworCQkgICAgIFI2MDBfUkJfQkxLU1ooMTUpIHwKKwkJICAgICBSNjAwX1JCX0JVRlNaKDMpKTsKIAogCVJBREVPTl9XUklURShSNjAwX0dSQk1fU09GVF9SRVNFVCwgUjYwMF9TT0ZUX1JFU0VUX0NQKTsKIAlSQURFT05fUkVBRChSNjAwX0dSQk1fU09GVF9SRVNFVCk7CkBAIC01NTAsOCArNTU2LDEyIEBACiAKIAlpZiAoIWRldl9wcml2LT53cml0ZWJhY2tfd29ya3MpIHsKIAkJLyogRGlzYWJsZSB3cml0ZWJhY2sgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYnVzIG1hc3RlciB0cmFuc2ZlciAqLwotCQlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLCBSQURFT05fUkVBRChSNjAwX0NQX1JCX0NOVEwpIHwKLQkJCSAgICAgUkFERU9OX1JCX05PX1VQREFURSk7CisJCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkgICAgIFI2MDBfQlVGX1NXQVBfMzJCSVQgfAorI2VuZGlmCisJCQkgICAgIFJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfQ05UTCkgfAorCQkJICAgICBSNjAwX1JCX05PX1VQREFURSk7CiAJCVJBREVPTl9XUklURShSNjAwX1NDUkFUQ0hfVU1TSywgMCk7CiAJfQogfQpAQCAtNTc1LDcgKzU4NSwxMSBAQAogCiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfV1BUUl9ERUxBWSwgMCk7CiAJY3BfcmJfY250bCA9IFJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfQ05UTCk7Ci0JUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwgUjYwMF9SQl9SUFRSX1dSX0VOQSk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJICAgICBSNjAwX0JVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgorCQkgICAgIFI2MDBfUkJfUlBUUl9XUl9FTkEpOwogCiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfUlBUUl9XUiwgY3BfcHRyKTsKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSLCBjcF9wdHIpOwpAQCAtMTgzOCw3ICsxODUyLDEwIEBACiAJCQkrIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0OwogCX0KIAlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9SUFRSX0FERFIsCi0JCSAgICAgcnB0cl9hZGRyICYgMHhmZmZmZmZmZik7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCSAgICAgKDIgPDwgMCkgfAorI2VuZGlmCisJCSAgICAgKHJwdHJfYWRkciAmIDB4ZmZmZmZmZmMpKTsKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9SUFRSX0FERFJfSEksCiAJCSAgICAgdXBwZXJfMzJfYml0cyhycHRyX2FkZHIpKTsKIApAQCAtMTg4OSw3ICsxOTA2LDcgQEAKIAl7CiAJCXU2NCBzY3JhdGNoX2FkZHI7CiAKLQkJc2NyYXRjaF9hZGRyID0gUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9SUFRSX0FERFIpOworCQlzY3JhdGNoX2FkZHIgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFJfQUREUikgJiAweEZGRkZGRkZDOwogCQlzY3JhdGNoX2FkZHIgfD0gKCh1NjQpUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9SUFRSX0FERFJfSEkpKSA8PCAzMjsKIAkJc2NyYXRjaF9hZGRyICs9IFI2MDBfU0NSQVRDSF9SRUdfT0ZGU0VUOwogCQlzY3JhdGNoX2FkZHIgPj49IDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCmluZGV4IDc4MzFlMDguLjE1MzA5NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC0yOTUsMTcgKzI5NSwxOCBAQAogCX0KIAogCWlmICghSVNfQUxJR05FRChwaXRjaCwgcGl0Y2hfYWxpZ24pKSB7Ci0JCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIHBpdGNoICglZCkgaW52YWxpZFxuIiwKLQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgcGl0Y2ggKCVkLCAweCV4LCAlZCkgaW52YWxpZFxuIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoLCBwaXRjaF9hbGlnbiwgYXJyYXlfbW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoIUlTX0FMSUdORUQoaGVpZ2h0LCBoZWlnaHRfYWxpZ24pKSB7Ci0JCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIGhlaWdodCAoJWQpIGludmFsaWRcbiIsCi0JCQkgX19mdW5jX18sIF9fTElORV9fLCBoZWlnaHQpOworCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBjYiBoZWlnaHQgKCVkLCAweCV4LCAlZCkgaW52YWxpZFxuIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGhlaWdodCwgaGVpZ2h0X2FsaWduLCBhcnJheV9tb2RlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICghSVNfQUxJR05FRChiYXNlX29mZnNldCwgYmFzZV9hbGlnbikpIHsKLQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXMgb2Zmc2V0WyVkXSAweCVsbHggbm90IGFsaWduZWRcbiIsIF9fZnVuY19fLCBpLCBiYXNlX29mZnNldCk7CisJCWRldl93YXJuKHAtPmRldiwgIiVzIG9mZnNldFslZF0gMHglbGx4IDB4JWxseCwgJWQgbm90IGFsaWduZWRcbiIsIF9fZnVuY19fLCBpLAorCQkJIGJhc2Vfb2Zmc2V0LCBiYXNlX2FsaWduLCBhcnJheV9tb2RlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zMjAsNyArMzIxLDEwIEBACiAJCQkgKiBicm9rZW4gdXNlcnNwYWNlLgogCQkJICovCiAJCX0gZWxzZSB7Ci0JCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdICVkICVkICVsdSB0b28gYmlnXG4iLCBfX2Z1bmNfXywgaSwgdHJhY2stPmNiX2NvbG9yX2JvX29mZnNldFtpXSwgdG1wLCByYWRlb25fYm9fc2l6ZSh0cmFjay0+Y2JfY29sb3JfYm9baV0pKTsKKwkJCWRldl93YXJuKHAtPmRldiwgIiVzIG9mZnNldFslZF0gJWQgJWQgJWQgJWx1IHRvbyBiaWdcbiIsIF9fZnVuY19fLCBpLAorCQkJCSBhcnJheV9tb2RlLAorCQkJCSB0cmFjay0+Y2JfY29sb3JfYm9fb2Zmc2V0W2ldLCB0bXAsCisJCQkJIHJhZGVvbl9ib19zaXplKHRyYWNrLT5jYl9jb2xvcl9ib1tpXSkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC00NTUsMTcgKzQ1OSwxOCBAQAogCQkJfQogCiAJCQlpZiAoIUlTX0FMSUdORUQocGl0Y2gsIHBpdGNoX2FsaWduKSkgewotCQkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGRiIHBpdGNoICglZCkgaW52YWxpZFxuIiwKLQkJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOworCQkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGRiIHBpdGNoICglZCwgMHgleCwgJWQpIGludmFsaWRcbiIsCisJCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoLCBwaXRjaF9hbGlnbiwgYXJyYXlfbW9kZSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpZiAoIUlTX0FMSUdORUQoaGVpZ2h0LCBoZWlnaHRfYWxpZ24pKSB7Ci0JCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgZGIgaGVpZ2h0ICglZCkgaW52YWxpZFxuIiwKLQkJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgaGVpZ2h0KTsKKwkJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBkYiBoZWlnaHQgKCVkLCAweCV4LCAlZCkgaW52YWxpZFxuIiwKKwkJCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgaGVpZ2h0LCBoZWlnaHRfYWxpZ24sIGFycmF5X21vZGUpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJaWYgKCFJU19BTElHTkVEKGJhc2Vfb2Zmc2V0LCBiYXNlX2FsaWduKSkgewotCQkJCWRldl93YXJuKHAtPmRldiwgIiVzIG9mZnNldFslZF0gMHglbGx4IG5vdCBhbGlnbmVkXG4iLCBfX2Z1bmNfXywgaSwgYmFzZV9vZmZzZXQpOworCQkJCWRldl93YXJuKHAtPmRldiwgIiVzIG9mZnNldFslZF0gMHglbGx4LCAweCVsbHgsICVkIG5vdCBhbGlnbmVkXG4iLCBfX2Z1bmNfXywgaSwKKwkJCQkJIGJhc2Vfb2Zmc2V0LCBiYXNlX2FsaWduLCBhcnJheV9tb2RlKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIApAQCAtNDczLDkgKzQ3OCwxMCBAQAogCQkJbnZpZXdzID0gR18wMjgwMDRfU0xJQ0VfTUFYKHRyYWNrLT5kYl9kZXB0aF92aWV3KSArIDE7CiAJCQl0bXAgPSBudGlsZXMgKiBicGUgKiA2NCAqIG52aWV3czsKIAkJCWlmICgodG1wICsgdHJhY2stPmRiX29mZnNldCkgPiByYWRlb25fYm9fc2l6ZSh0cmFjay0+ZGJfYm8pKSB7Ci0JCQkJZGV2X3dhcm4ocC0+ZGV2LCAiei9zdGVuY2lsIGJ1ZmZlciB0b28gc21hbGwgKDB4JTA4WCAlZCAlZCAlZCAtPiAldSBoYXZlICVsdSlcbiIsCi0JCQkJCQl0cmFjay0+ZGJfZGVwdGhfc2l6ZSwgbnRpbGVzLCBudmlld3MsIGJwZSwgdG1wICsgdHJhY2stPmRiX29mZnNldCwKLQkJCQkJCXJhZGVvbl9ib19zaXplKHRyYWNrLT5kYl9ibykpOworCQkJCWRldl93YXJuKHAtPmRldiwgInovc3RlbmNpbCBidWZmZXIgKCVkKSB0b28gc21hbGwgKDB4JTA4WCAlZCAlZCAlZCAtPiAldSBoYXZlICVsdSlcbiIsCisJCQkJCSBhcnJheV9tb2RlLAorCQkJCQkgdHJhY2stPmRiX2RlcHRoX3NpemUsIG50aWxlcywgbnZpZXdzLCBicGUsIHRtcCArIHRyYWNrLT5kYl9vZmZzZXQsCisJCQkJCSByYWRlb25fYm9fc2l6ZSh0cmFjay0+ZGJfYm8pKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQpAQCAtMTIyNywxOCArMTIzMywxOCBAQAogCS8qIFhYWCBjaGVjayBoZWlnaHQgYXMgd2VsbC4uLiAqLwogCiAJaWYgKCFJU19BTElHTkVEKHBpdGNoLCBwaXRjaF9hbGlnbikpIHsKLQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4IHBpdGNoICglZCkgaW52YWxpZFxuIiwKLQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4IHBpdGNoICglZCwgMHgleCwgJWQpIGludmFsaWRcbiIsCisJCQkgX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCwgcGl0Y2hfYWxpZ24sIEdfMDM4MDAwX1RJTEVfTU9ERSh3b3JkMCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKCFJU19BTElHTkVEKGJhc2Vfb2Zmc2V0LCBiYXNlX2FsaWduKSkgewotCQlkZXZfd2FybihwLT5kZXYsICIlczolZCB0ZXggYmFzZSBvZmZzZXQgKDB4JWxseCkgaW52YWxpZFxuIiwKLQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGJhc2Vfb2Zmc2V0KTsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4IGJhc2Ugb2Zmc2V0ICgweCVsbHgsIDB4JWxseCwgJWQpIGludmFsaWRcbiIsCisJCQkgX19mdW5jX18sIF9fTElORV9fLCBiYXNlX29mZnNldCwgYmFzZV9hbGlnbiwgR18wMzgwMDBfVElMRV9NT0RFKHdvcmQwKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoIUlTX0FMSUdORUQobWlwX29mZnNldCwgYmFzZV9hbGlnbikpIHsKLQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4IG1pcCBvZmZzZXQgKDB4JWxseCkgaW52YWxpZFxuIiwKLQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIG1pcF9vZmZzZXQpOworCQlkZXZfd2FybihwLT5kZXYsICIlczolZCB0ZXggbWlwIG9mZnNldCAoMHglbGx4LCAweCVsbHgsICVkKSBpbnZhbGlkXG4iLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgbWlwX29mZnNldCwgYmFzZV9hbGlnbiwgR18wMzgwMDBfVElMRV9NT0RFKHdvcmQwKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX3JlZy5oCmluZGV4IDMzY2RhMDEuLmY4Njk4OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfcmVnLmgKQEAgLTgxLDcgKzgxLDExIEBACiAjZGVmaW5lIFI2MDBfTUVESVVNX1ZJRF9MT1dFUl9HUElPX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MjAKICNkZWZpbmUgUjYwMF9MT1dfVklEX0xPV0VSX0dQSU9fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcyNAogCi0KKyNkZWZpbmUgUjYwMF9EMUdSUEhfU1dBUF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEwQworIyAgICAgICBkZWZpbmUgUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fTk9ORSAgICAgICAgICAgICAgICAgICAgKDAgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOXzE2QklUICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl8zMkJJVCAgICAgICAgICAgICAgICAgICAoMiA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fNjRCSVQgICAgICAgICAgICAgICAgICAgKDMgPDwgMCkKIAogI2RlZmluZSBSNjAwX0hEUF9OT05TVVJGQUNFX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MmMwNAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKaW5kZXggYTVkODk4Yi4uMDRiYWMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaApAQCAtMTU0LDEzICsxNTQsMTQgQEAKICNkZWZpbmUJCVJPUV9JQjJfU1RBUlQoeCkJCQkJKCh4KSA8PCA4KQogI2RlZmluZQlDUF9SQl9CQVNFCQkJCQkweEMxMDAKICNkZWZpbmUJQ1BfUkJfQ05UTAkJCQkJMHhDMTA0Ci0jZGVmaW5lCQlSQl9CVUZTWih4KQkJCQkJKCh4KTw8MCkKLSNkZWZpbmUJCVJCX0JMS1NaKHgpCQkJCQkoKHgpPDw4KQotI2RlZmluZQkJUkJfTk9fVVBEQVRFCQkJCQkoMTw8MjcpCi0jZGVmaW5lCQlSQl9SUFRSX1dSX0VOQQkJCQkJKDE8PDMxKQorI2RlZmluZQkJUkJfQlVGU1ooeCkJCQkJCSgoeCkgPDwgMCkKKyNkZWZpbmUJCVJCX0JMS1NaKHgpCQkJCQkoKHgpIDw8IDgpCisjZGVmaW5lCQlSQl9OT19VUERBVEUJCQkJCSgxIDw8IDI3KQorI2RlZmluZQkJUkJfUlBUUl9XUl9FTkEJCQkJCSgxIDw8IDMxKQogI2RlZmluZQkJQlVGX1NXQVBfMzJCSVQJCQkJCSgyIDw8IDE2KQogI2RlZmluZQlDUF9SQl9SUFRSCQkJCQkweDg3MDAKICNkZWZpbmUJQ1BfUkJfUlBUUl9BRERSCQkJCQkweEMxMEMKKyNkZWZpbmUJCVJCX1JQVFJfU1dBUCh4KQkJCQkJKCh4KSA8PCAwKQogI2RlZmluZQlDUF9SQl9SUFRSX0FERFJfSEkJCQkJMHhDMTEwCiAjZGVmaW5lCUNQX1JCX1JQVFJfV1IJCQkJCTB4QzEwOAogI2RlZmluZQlDUF9SQl9XUFRSCQkJCQkweEMxMTQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCmluZGV4IDcxZDJhNTUuLjU2YzQ4YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaApAQCAtMTc5LDEwICsxNzksMTAgQEAKIHZvaWQgcmFkZW9uX2F0b21iaW9zX2dldF9wb3dlcl9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MTYgbGV2ZWwpOwogdm9pZCByczY5MF9wbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB1MzIgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHUzMiBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdTMyIGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdTMyIHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBydjZ4eF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgZXZlcmdyZWVuX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qCiAgKiBGZW5jZXMuCkBAIC04MTIsOCArODEyLDcgQEAKIAlmaXhlZDIwXzEyCQlzY2xrOwogCWZpeGVkMjBfMTIJCW1jbGs7CiAJZml4ZWQyMF8xMgkJbmVlZGVkX2JhbmR3aWR0aDsKLQkvKiBYWFg6IHVzZSBhIGRlZmluZSBmb3IgbnVtIHBvd2VyIG1vZGVzICovCi0Jc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSBwb3dlcl9zdGF0ZVs4XTsKKwlzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlICpwb3dlcl9zdGF0ZTsKIAkvKiBudW1iZXIgb2YgdmFsaWQgcG93ZXIgc3RhdGVzICovCiAJaW50ICAgICAgICAgICAgICAgICAgICAgbnVtX3Bvd2VyX3N0YXRlczsKIAlpbnQgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Bvd2VyX3N0YXRlX2luZGV4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCmluZGV4IDNhMWIxNjEuLmU3NWQ2M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKQEAgLTc1OSw3ICs3NTksNyBAQAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZldmVyZ3JlZW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCi0JLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkucmluZ19pYl9leGVjdXRlID0gJmV2ZXJncmVlbl9yaW5nX2liX2V4ZWN1dGUsCiAJLmlycV9zZXQgPSAmZXZlcmdyZWVuX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJmV2ZXJncmVlbl9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJmV2ZXJncmVlbl9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC04MDUsNyArODA1LDcgQEAKIAkuZ2FydF90bGJfZmx1c2ggPSAmZXZlcmdyZWVuX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAkucmluZ190ZXN0ID0gJnI2MDBfcmluZ190ZXN0LAotCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjYwMF9yaW5nX2liX2V4ZWN1dGUsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZldmVyZ3JlZW5fcmluZ19pYl9leGVjdXRlLAogCS5pcnFfc2V0ID0gJmV2ZXJncmVlbl9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZldmVyZ3JlZW5faXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZldmVyZ3JlZW5fZ2V0X3ZibGFua19jb3VudGVyLApAQCAtODQ4LDcgKzg0OCw3IEBACiAJLmdhcnRfdGxiX2ZsdXNoID0gJmV2ZXJncmVlbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKLQkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZSwKIAkuaXJxX3NldCA9ICZldmVyZ3JlZW5faXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmZXZlcmdyZWVuX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmZXZlcmdyZWVuX2dldF92YmxhbmtfY291bnRlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAppbmRleCBlMDFmMDc3MS4uYzU5YmQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaApAQCAtMzU1LDYgKzM1NSw3IEBACiBib29sIGV2ZXJncmVlbl9ncHVfaXNfbG9ja3VwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCBldmVyZ3JlZW5fYXNpY19yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIGV2ZXJncmVlbl9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpOwogaW50IGV2ZXJncmVlbl9jb3B5X2JsaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQl1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkJdW5zaWduZWQgbnVtX3BhZ2VzLCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwppbmRleCA1Mjc3NzkwLi4wMmQ1YzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKQEAgLTg4LDcgKzg4LDcgQEAKIAkJCS8qIHNvbWUgZXZlcmdyZWVuIGJvYXJkcyBoYXZlIGJhZCBkYXRhIGZvciB0aGlzIGVudHJ5ICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CiAJCQkJaWYgKChpID09IDcpICYmCi0JCQkJICAgIChncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4ID09IDB4MTkzNikgJiYKKwkJCQkgICAgKGxlMTZfdG9fY3B1KGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXgpID09IDB4MTkzNikgJiYKIAkJCQkgICAgKGdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID09IDApKSB7CiAJCQkJCWdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID0gMHg5NzsKIAkJCQkJZ3Bpby0+dWNEYXRhTWFza1NoaWZ0ID0gODsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCQkJLyogc29tZSBEQ0UzIGJvYXJkcyBoYXZlIGJhZCBkYXRhIGZvciB0aGlzIGVudHJ5ICovCiAJCQlpZiAoQVNJQ19JU19EQ0UzKHJkZXYpKSB7CiAJCQkJaWYgKChpID09IDQpICYmCi0JCQkJICAgIChncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4ID09IDB4MWZkYSkgJiYKKwkJCQkgICAgKGxlMTZfdG9fY3B1KGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXgpID09IDB4MWZkYSkgJiYKIAkJCQkgICAgKGdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID09IDB4OTQpKQogCQkJCQlncGlvLT5zdWNJMmNJZC51Y0FjY2VzcyA9IDB4MTQ7CiAJCQl9CkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJCS8qIHNvbWUgZXZlcmdyZWVuIGJvYXJkcyBoYXZlIGJhZCBkYXRhIGZvciB0aGlzIGVudHJ5ICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CiAJCQkJaWYgKChpID09IDcpICYmCi0JCQkJICAgIChncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4ID09IDB4MTkzNikgJiYKKwkJCQkgICAgKGxlMTZfdG9fY3B1KGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXgpID09IDB4MTkzNikgJiYKIAkJCQkgICAgKGdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID09IDApKSB7CiAJCQkJCWdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID0gMHg5NzsKIAkJCQkJZ3Bpby0+dWNEYXRhTWFza1NoaWZ0ID0gODsKQEAgLTE4NSw3ICsxODUsNyBAQAogCQkJLyogc29tZSBEQ0UzIGJvYXJkcyBoYXZlIGJhZCBkYXRhIGZvciB0aGlzIGVudHJ5ICovCiAJCQlpZiAoQVNJQ19JU19EQ0UzKHJkZXYpKSB7CiAJCQkJaWYgKChpID09IDQpICYmCi0JCQkJICAgIChncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4ID09IDB4MWZkYSkgJiYKKwkJCQkgICAgKGxlMTZfdG9fY3B1KGdwaW8tPnVzQ2xrTWFza1JlZ2lzdGVySW5kZXgpID09IDB4MWZkYSkgJiYKIAkJCQkgICAgKGdwaW8tPnN1Y0kyY0lkLnVjQWNjZXNzID09IDB4OTQpKQogCQkJCQlncGlvLT5zdWNJMmNJZC51Y0FjY2VzcyA9IDB4MTQ7CiAJCQl9CkBAIC0yNTIsNyArMjUyLDcgQEAKIAkJCXBpbiA9ICZncGlvX2luZm8tPmFzR1BJT19QaW5baV07CiAJCQlpZiAoaWQgPT0gcGluLT51Y0dQSU9fSUQpIHsKIAkJCQlncGlvLmlkID0gcGluLT51Y0dQSU9fSUQ7Ci0JCQkJZ3Bpby5yZWcgPSBwaW4tPnVzR3Bpb1Bpbl9BSW5kZXggKiA0OworCQkJCWdwaW8ucmVnID0gbGUxNl90b19jcHUocGluLT51c0dwaW9QaW5fQUluZGV4KSAqIDQ7CiAJCQkJZ3Bpby5tYXNrID0gKDEgPDwgcGluLT51Y0dwaW9QaW5CaXRTaGlmdCk7CiAJCQkJZ3Bpby52YWxpZCA9IHRydWU7CiAJCQkJYnJlYWs7CkBAIC0xMTYzLDE2ICsxMTYzLDYgQEAKIAkJCQlwMXBsbC0+cGxsX291dF9taW4gPSA2NDgwMDsKIAkJCWVsc2UKIAkJCQlwMXBsbC0+cGxsX291dF9taW4gPSAyMDAwMDsKLQkJfSBlbHNlIGlmIChwMXBsbC0+cGxsX291dF9taW4gPiA2NDgwMCkgewotCQkJLyogTGltaXRpbmcgdGhlIHBsbCBvdXRwdXQgcmFuZ2UgaXMgYSBnb29kIHRoaW5nIGdlbmVyYWxseSBhcwotCQkJICogaXQgbGltaXRzIHRoZSBudW1iZXIgb2YgcG9zc2libGUgcGxsIGNvbWJpbmF0aW9ucyBmb3IgYSBnaXZlbgotCQkJICogZnJlcXVlbmN5IHByZXN1bWFibHkgdG8gdGhlIG9uZXMgdGhhdCB3b3JrIGJlc3Qgb24gZWFjaCBjYXJkLgotCQkJICogSG93ZXZlciwgY2VydGFpbiBkdWFsbGluayBEVkkgbW9uaXRvcnMgc2VlbSB0byBsaWtlCi0JCQkgKiBwbGwgY29tYmluYXRpb25zIHRoYXQgd291bGQgYmUgbGltaXRlZCBieSB0aGlzIGF0IGxlYXN0IG9uCi0JCQkgKiBwcmUtRENFIDMuMCByNnh4IGhhcmR3YXJlLiAgVGhpcyBtaWdodCBuZWVkIHRvIGJlIGFkanVzdGVkIHBlcgotCQkJICogZmFtaWx5LgotCQkJICovCi0JCQlwMXBsbC0+cGxsX291dF9taW4gPSA2NDgwMDsKIAkJfQogCiAJCXAxcGxsLT5wbGxfaW5fbWluID0KQEAgLTEyODQsMTEgKzEyNzQsMTEgQEAKIAkJCQkgICAgICBkYXRhX29mZnNldCk7CiAJCXN3aXRjaCAoY3JldikgewogCQljYXNlIDE6Ci0JCQlpZiAoaWdwX2luZm8tPmluZm8udWxCb290VXBNZW1vcnlDbG9jaykKKwkJCWlmIChsZTMyX3RvX2NwdShpZ3BfaW5mby0+aW5mby51bEJvb3RVcE1lbW9yeUNsb2NrKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlpZiAoaWdwX2luZm8tPmluZm9fMi51bEJvb3RVcFNpZGVQb3J0Q2xvY2spCisJCQlpZiAobGUzMl90b19jcHUoaWdwX2luZm8tPmluZm9fMi51bEJvb3RVcFNpZGVQb3J0Q2xvY2spKQogCQkJCXJldHVybiB0cnVlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0xNDUyLDcgKzE0NDIsNyBAQAogCiAJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2luZGljZXM7IGkrKykgewogCQkJCWlmICgoc3NfaW5mby0+aW5mby5hc1NwcmVhZFNwZWN0cnVtW2ldLnVjQ2xvY2tJbmRpY2F0aW9uID09IGlkKSAmJgotCQkJCSAgICAoY2xvY2sgPD0gc3NfaW5mby0+aW5mby5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpIHsKKwkJCQkgICAgKGNsb2NrIDw9IGxlMzJfdG9fY3B1KHNzX2luZm8tPmluZm8uYXNTcHJlYWRTcGVjdHJ1bVtpXS51bFRhcmdldENsb2NrUmFuZ2UpKSkgewogCQkJCQlzcy0+cGVyY2VudGFnZSA9CiAJCQkJCQlsZTE2X3RvX2NwdShzc19pbmZvLT5pbmZvLmFzU3ByZWFkU3BlY3RydW1baV0udXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UpOwogCQkJCQlzcy0+dHlwZSA9IHNzX2luZm8tPmluZm8uYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y1NwcmVhZFNwZWN0cnVtTW9kZTsKQEAgLTE0NjYsNyArMTQ1Niw3IEBACiAJCQkJc2l6ZW9mKEFUT01fQVNJQ19TU19BU1NJR05NRU5UX1YyKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBudW1faW5kaWNlczsgaSsrKSB7CiAJCQkJaWYgKChzc19pbmZvLT5pbmZvXzIuYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y0Nsb2NrSW5kaWNhdGlvbiA9PSBpZCkgJiYKLQkJCQkgICAgKGNsb2NrIDw9IHNzX2luZm8tPmluZm9fMi5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpIHsKKwkJCQkgICAgKGNsb2NrIDw9IGxlMzJfdG9fY3B1KHNzX2luZm8tPmluZm9fMi5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpKSB7CiAJCQkJCXNzLT5wZXJjZW50YWdlID0KIAkJCQkJCWxlMTZfdG9fY3B1KHNzX2luZm8tPmluZm9fMi5hc1NwcmVhZFNwZWN0cnVtW2ldLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlKTsKIAkJCQkJc3MtPnR5cGUgPSBzc19pbmZvLT5pbmZvXzIuYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y1NwcmVhZFNwZWN0cnVtTW9kZTsKQEAgLTE0ODAsNyArMTQ3MCw3IEBACiAJCQkJc2l6ZW9mKEFUT01fQVNJQ19TU19BU1NJR05NRU5UX1YzKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBudW1faW5kaWNlczsgaSsrKSB7CiAJCQkJaWYgKChzc19pbmZvLT5pbmZvXzMuYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y0Nsb2NrSW5kaWNhdGlvbiA9PSBpZCkgJiYKLQkJCQkgICAgKGNsb2NrIDw9IHNzX2luZm8tPmluZm9fMy5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpIHsKKwkJCQkgICAgKGNsb2NrIDw9IGxlMzJfdG9fY3B1KHNzX2luZm8tPmluZm9fMy5hc1NwcmVhZFNwZWN0cnVtW2ldLnVsVGFyZ2V0Q2xvY2tSYW5nZSkpKSB7CiAJCQkJCXNzLT5wZXJjZW50YWdlID0KIAkJCQkJCWxlMTZfdG9fY3B1KHNzX2luZm8tPmluZm9fMy5hc1NwcmVhZFNwZWN0cnVtW2ldLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlKTsKIAkJCQkJc3MtPnR5cGUgPSBzc19pbmZvLT5pbmZvXzMuYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y1NwcmVhZFNwZWN0cnVtTW9kZTsKQEAgLTE1NjMsOCArMTU1Myw4IEBACiAJCWlmIChtaXNjICYgQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERSkKIAkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfREJMU0NBTjsKIAotCQlsdmRzLT5uYXRpdmVfbW9kZS53aWR0aF9tbSA9IGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSW1hZ2VIU2l6ZTsKLQkJbHZkcy0+bmF0aXZlX21vZGUuaGVpZ2h0X21tID0gbHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNJbWFnZVZTaXplOworCQlsdmRzLT5uYXRpdmVfbW9kZS53aWR0aF9tbSA9IGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSW1hZ2VIU2l6ZSk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhlaWdodF9tbSA9IGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSW1hZ2VWU2l6ZSk7CiAKIAkJLyogc2V0IGNydGMgdmFsdWVzICovCiAJCWRybV9tb2RlX3NldF9jcnRjaW5mbygmbHZkcy0+bmF0aXZlX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOwpAQCAtMTU3OSwxMyArMTU2OSwxMyBAQAogCQkJbHZkcy0+bGlua2IgPSBmYWxzZTsKIAogCQkvKiBwYXJzZSB0aGUgbGNkIHJlY29yZCB0YWJsZSAqLwotCQlpZiAobHZkc19pbmZvLT5pbmZvLnVzTW9kZVBhdGNoVGFibGVPZmZzZXQpIHsKKwkJaWYgKGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby51c01vZGVQYXRjaFRhYmxlT2Zmc2V0KSkgewogCQkJQVRPTV9GQUtFX0VESURfUEFUQ0hfUkVDT1JEICpmYWtlX2VkaWRfcmVjb3JkOwogCQkJQVRPTV9QQU5FTF9SRVNPTFVUSU9OX1BBVENIX1JFQ09SRCAqcGFuZWxfcmVzX3JlY29yZDsKIAkJCWJvb2wgYmFkX3JlY29yZCA9IGZhbHNlOwogCQkJdTggKnJlY29yZCA9ICh1OCAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCiAJCQkJCSAgICBkYXRhX29mZnNldCArCi0JCQkJCSAgICBsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCk7CisJCQkJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkpOwogCQkJd2hpbGUgKCpyZWNvcmQgIT0gQVRPTV9SRUNPUkRfRU5EX1RZUEUpIHsKIAkJCQlzd2l0Y2ggKCpyZWNvcmQpIHsKIAkJCQljYXNlIExDRF9NT0RFX1BBVENIX1JFQ09SRF9NT0RFX1RZUEU6CkBAIC0xOTg3LDYgKzE5NzcsOSBAQAogCW51bV9tb2RlcyA9IHBvd2VyX2luZm8tPmluZm8udWNOdW1PZlBvd2VyTW9kZUVudHJpZXM7CiAJaWYgKG51bV9tb2RlcyA+IEFUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLKQogCQludW1fbW9kZXMgPSBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSzsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICogbnVtX21vZGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYtPnBtLnBvd2VyX3N0YXRlKQorCQlyZXR1cm4gc3RhdGVfaW5kZXg7CiAJLyogbGFzdCBtb2RlIGlzIHVzdWFsbHkgZGVmYXVsdCwgYXJyYXkgaXMgbG93IHRvIGhpZ2ggKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX21vZGVzOyBpKyspIHsKIAkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0gVk9MVEFHRV9OT05FOwpAQCAtMjE5Niw3ICsyMTg5LDcgQEAKIAkJZmlybXdhcmVfaW5mbyA9CiAJCQkodW5pb24gZmlybXdhcmVfaW5mbyAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCiAJCQkJCQlkYXRhX29mZnNldCk7Ci0JCXZkZGMgPSBmaXJtd2FyZV9pbmZvLT5pbmZvXzE0LnVzQm9vdFVwVkREQ1ZvbHRhZ2U7CisJCXZkZGMgPSBsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzE0LnVzQm9vdFVwVkREQ1ZvbHRhZ2UpOwogCX0KIAogCXJldHVybiB2ZGRjOwpAQCAtMjI5MSw3ICsyMjg0LDcgQEAKIAkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0udm9sdGFnZS50eXBlID0KIAkJCVZPTFRBR0VfU1c7CiAJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2Uudm9sdGFnZSA9Ci0JCQljbG9ja19pbmZvLT5ldmVyZ3JlZW4udXNWRERDOworCQkJbGUxNl90b19jcHUoY2xvY2tfaW5mby0+ZXZlcmdyZWVuLnVzVkREQyk7CiAJfSBlbHNlIHsKIAkJc2NsayA9IGxlMTZfdG9fY3B1KGNsb2NrX2luZm8tPnI2MDAudXNFbmdpbmVDbG9ja0xvdyk7CiAJCXNjbGsgfD0gY2xvY2tfaW5mby0+cjYwMC51Y0VuZ2luZUNsb2NrSGlnaCA8PCAxNjsKQEAgLTIzMDIsNyArMjI5NSw3IEBACiAJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2UudHlwZSA9CiAJCQlWT0xUQUdFX1NXOwogCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnZvbHRhZ2UgPQotCQkJY2xvY2tfaW5mby0+cjYwMC51c1ZEREM7CisJCQlsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5yNjAwLnVzVkREQyk7CiAJfQogCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgewpAQCAtMjMzOCw2ICsyMzMxLDEwIEBACiAJcG93ZXJfaW5mbyA9ICh1bmlvbiBwb3dlcl9pbmZvICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQpOwogCiAJcmFkZW9uX2F0b21iaW9zX2FkZF9wcGxpYl90aGVybWFsX2NvbnRyb2xsZXIocmRldiwgJnBvd2VyX2luZm8tPnBwbGliLnNUaGVybWFsQ29udHJvbGxlcik7CisJcmRldi0+cG0ucG93ZXJfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlKSAqCisJCQkJICAgICAgIHBvd2VyX2luZm8tPnBwbGliLnVjTnVtU3RhdGVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkZXYtPnBtLnBvd2VyX3N0YXRlKQorCQlyZXR1cm4gc3RhdGVfaW5kZXg7CiAJLyogZmlyc3QgbW9kZSBpcyB1c3VhbGx5IGRlZmF1bHQsIGZvbGxvd2VkIGJ5IGxvdyB0byBoaWdoICovCiAJZm9yIChpID0gMDsgaSA8IHBvd2VyX2luZm8tPnBwbGliLnVjTnVtU3RhdGVzOyBpKyspIHsKIAkJbW9kZV9pbmRleCA9IDA7CkBAIC0yNDExLDEzICsyNDA4LDE3IEBACiAJcmFkZW9uX2F0b21iaW9zX2FkZF9wcGxpYl90aGVybWFsX2NvbnRyb2xsZXIocmRldiwgJnBvd2VyX2luZm8tPnBwbGliLnNUaGVybWFsQ29udHJvbGxlcik7CiAJc3RhdGVfYXJyYXkgPSAoc3RydWN0IFN0YXRlQXJyYXkgKikKIAkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQgKwotCQkgcG93ZXJfaW5mby0+cHBsaWIudXNTdGF0ZUFycmF5T2Zmc2V0KTsKKwkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPnBwbGliLnVzU3RhdGVBcnJheU9mZnNldCkpOwogCWNsb2NrX2luZm9fYXJyYXkgPSAoc3RydWN0IENsb2NrSW5mb0FycmF5ICopCiAJCShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0ICsKLQkJIHBvd2VyX2luZm8tPnBwbGliLnVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQpOworCQkgbGUxNl90b19jcHUocG93ZXJfaW5mby0+cHBsaWIudXNDbG9ja0luZm9BcnJheU9mZnNldCkpOwogCW5vbl9jbG9ja19pbmZvX2FycmF5ID0gKHN0cnVjdCBOb25DbG9ja0luZm9BcnJheSAqKQogCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCArCi0JCSBwb3dlcl9pbmZvLT5wcGxpYi51c05vbkNsb2NrSW5mb0FycmF5T2Zmc2V0KTsKKwkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPnBwbGliLnVzTm9uQ2xvY2tJbmZvQXJyYXlPZmZzZXQpKTsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICoKKwkJCQkgICAgICAgc3RhdGVfYXJyYXktPnVjTnVtRW50cmllcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGV2LT5wbS5wb3dlcl9zdGF0ZSkKKwkJcmV0dXJuIHN0YXRlX2luZGV4OwogCWZvciAoaSA9IDA7IGkgPCBzdGF0ZV9hcnJheS0+dWNOdW1FbnRyaWVzOyBpKyspIHsKIAkJbW9kZV9pbmRleCA9IDA7CiAJCXBvd2VyX3N0YXRlID0gKHVuaW9uIHBwbGliX3Bvd2VyX3N0YXRlICopJnN0YXRlX2FycmF5LT5zdGF0ZXNbaV07CkBAIC0yNDkxLDE5ICsyNDkyLDIyIEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7Ci0JCS8qIGFkZCB0aGUgZGVmYXVsdCBtb2RlICovCi0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KLQkJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IDE7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X21jbGs7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGs7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5kZWZhdWx0X2Nsb2NrX21vZGUgPQotCQkJJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX05PTkU7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5wY2llX2xhbmVzID0gMTY7Ci0JCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSBzdGF0ZV9pbmRleDsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmZsYWdzID0gMDsKLQkJc3RhdGVfaW5kZXgrKzsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZSkgeworCQkJLyogYWRkIHRoZSBkZWZhdWx0IG1vZGUgKi8KKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X21jbGs7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmRlZmF1bHRfY2xvY2tfbW9kZSA9CisJCQkJJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0gVk9MVEFHRV9OT05FOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnBjaWVfbGFuZXMgPSAxNjsKKwkJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSBzdGF0ZV9pbmRleDsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5mbGFncyA9IDA7CisJCQlzdGF0ZV9pbmRleCsrOworCQl9CiAJfQogCiAJcmRldi0+cG0ubnVtX3Bvd2VyX3N0YXRlcyA9IHN0YXRlX2luZGV4OwpAQCAtMjUyOSw3ICsyNTMzLDcgQEAKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBHZXRFbmdpbmVDbG9jayk7CiAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKLQlyZXR1cm4gYXJncy51bFJldHVybkVuZ2luZUNsb2NrOworCXJldHVybiBsZTMyX3RvX2NwdShhcmdzLnVsUmV0dXJuRW5naW5lQ2xvY2spOwogfQogCiB1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtMjUzOCw3ICsyNTQyLDcgQEAKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBHZXRNZW1vcnlDbG9jayk7CiAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKLQlyZXR1cm4gYXJncy51bFJldHVybk1lbW9yeUNsb2NrOworCXJldHVybiBsZTMyX3RvX2NwdShhcmdzLnVsUmV0dXJuTWVtb3J5Q2xvY2spOwogfQogCiB2b2lkIHJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCkBAIC0yNTQ3LDcgKzI1NTEsNyBAQAogCVNFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldEVuZ2luZUNsb2NrKTsKIAotCWFyZ3MudWxUYXJnZXRFbmdpbmVDbG9jayA9IGVuZ19jbG9jazsJLyogMTAga2h6ICovCisJYXJncy51bFRhcmdldEVuZ2luZUNsb2NrID0gY3B1X3RvX2xlMzIoZW5nX2Nsb2NrKTsJLyogMTAga2h6ICovCiAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KQEAgLTI1NjEsNyArMjU2NSw3IEBACiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKIAkJcmV0dXJuOwogCi0JYXJncy51bFRhcmdldE1lbW9yeUNsb2NrID0gbWVtX2Nsb2NrOwkvKiAxMCBraHogKi8KKwlhcmdzLnVsVGFyZ2V0TWVtb3J5Q2xvY2sgPSBjcHVfdG9fbGUzMihtZW1fY2xvY2spOwkvKiAxMCBraHogKi8KIAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogfQpAQCAtMjYxOSw3ICsyNjIzLDcgQEAKIAliaW9zXzJfc2NyYXRjaCAmPSB+QVRPTV9TMl9WUklfQlJJR0hUX0VOQUJMRTsKIAogCS8qIHRlbGwgdGhlIGJpb3Mgbm90IHRvIGhhbmRsZSBtb2RlIHN3aXRjaGluZyAqLwotCWJpb3NfNl9zY3JhdGNoIHw9IChBVE9NX1M2X0FDQ19CTE9DS19ESVNQTEFZX1NXSVRDSCB8IEFUT01fUzZfQUNDX01PREUpOworCWJpb3NfNl9zY3JhdGNoIHw9IEFUT01fUzZfQUNDX0JMT0NLX0RJU1BMQVlfU1dJVENIOwogCiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApIHsKIAkJV1JFRzMyKFI2MDBfQklPU18yX1NDUkFUQ0gsIGJpb3NfMl9zY3JhdGNoKTsKQEAgLTI2NzAsMTAgKzI2NzQsMTMgQEAKIAllbHNlCiAJCWJpb3NfNl9zY3JhdGNoID0gUlJFRzMyKFJBREVPTl9CSU9TXzZfU0NSQVRDSCk7CiAKLQlpZiAobG9jaykKKwlpZiAobG9jaykgewogCQliaW9zXzZfc2NyYXRjaCB8PSBBVE9NX1M2X0NSSVRJQ0FMX1NUQVRFOwotCWVsc2UKKwkJYmlvc182X3NjcmF0Y2ggJj0gfkFUT01fUzZfQUNDX01PREU7CisJfSBlbHNlIHsKIAkJYmlvc182X3NjcmF0Y2ggJj0gfkFUT01fUzZfQ1JJVElDQUxfU1RBVEU7CisJCWJpb3NfNl9zY3JhdGNoIHw9IEFUT01fUzZfQUNDX01PREU7CisJfQogCiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCiAJCVdSRUczMihSNjAwX0JJT1NfNl9TQ1JBVENILCBiaW9zXzZfc2NyYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKaW5kZXggNTkxZmNhZS4uY2Y3YzhkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwpAQCAtMTUwNCw2ICsxNTA0LDExIEBACiAJCQkgICAocmRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDRhNDgpKSB7CiAJCQkvKiBNYWMgWDgwMCAqLwogCQkJcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSA9IENUX01BQ19YODAwOworCQl9IGVsc2UgaWYgKChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg0MTUwKSAmJgorCQkJICAgKHJkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDAyKSAmJgorCQkJICAgKHJkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHg0MTUwKSkgeworCQkJLyogTWFjIEc1IDk2MDAgKi8KKwkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9NQUNfRzVfOTYwMDsKIAkJfSBlbHNlCiAjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCiAjaWZkZWYgQ09ORklHX1BQQzY0CkBAIC0yMDIyLDYgKzIwMjcsNDggQEAKIAkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JLAogCQkJCQkgICAgJmhwZCk7CiAJCWJyZWFrOworCWNhc2UgQ1RfTUFDX0c1Xzk2MDA6CisJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChtYWMgZzUgOTYwMClcbiIsCisJCQkgcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSk7CisJCS8qIERWSSAtIHR2IGRhYywgZHZvICovCisJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMocmRldiwgRERDX0RWSSwgMCwgMCk7CisJCWhwZC5ocGQgPSBSQURFT05fSFBEXzE7IC8qID8/PyAqLworCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfZW51bShkZXYsCisJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JULAorCQkJCQkJCQkgIDApLAorCQkJCQkgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCk7CisJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAorCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9lbnVtKGRldiwKKwkJCQkJCQkJICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCisJCQkJCQkJCSAgMiksCisJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKKwkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwKKwkJCQkJICAgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCB8CisJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JLAorCQkJCQkgICAgJmhwZCk7CisJCS8qIEFEQyAtIHByaW1hcnkgZGFjLCBpbnRlcm5hbCB0bWRzICovCisJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMocmRldiwgRERDX1ZHQSwgMCwgMCk7CisJCWhwZC5ocGQgPSBSQURFT05fSFBEXzI7IC8qID8/PyAqLworCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfZW51bShkZXYsCisJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JULAorCQkJCQkJCQkgIDApLAorCQkJCQkgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCk7CisJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAorCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9lbnVtKGRldiwKKwkJCQkJCQkJICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCisJCQkJCQkJCSAgMSksCisJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKKwkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKKwkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CisJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JLAorCQkJCQkgICAgJmhwZCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgdGFibGU6ICVkIChpbnZhbGlkKVxuIiwKIAkJCSByZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlKTsKQEAgLTI0NDIsNiArMjQ4OSwxNyBAQAogCiAJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleCA9IC0xOwogCisJLyogYWxsb2NhdGUgMiBwb3dlciBzdGF0ZXMgKi8KKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUpICogMiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGV2LT5wbS5wb3dlcl9zdGF0ZSkgeworCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7CisJCXJkZXYtPnBtLm51bV9wb3dlcl9zdGF0ZXMgPSAwOworCisJCXJkZXYtPnBtLmN1cnJlbnRfcG93ZXJfc3RhdGVfaW5kZXggPSByZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4OworCQlyZGV2LT5wbS5jdXJyZW50X2Nsb2NrX21vZGVfaW5kZXggPSAwOworCQlyZXR1cm47CisJfQorCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX01PQklMSVRZKSB7CiAJCW9mZnNldCA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfUE9XRVJQTEFZX0lORk9fVEFCTEUpOwogCQlpZiAob2Zmc2V0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IDBkNDc4OTMuLjQ5NTRlMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCkBAIC05MzYsOCArOTM2LDExIEBACiBpbnQgcmFkZW9uX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKKwlpbnQgcmVzY2hlZDsKIAogCXJhZGVvbl9zYXZlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOworCS8qIGJsb2NrIFRUTSAqLworCXJlc2NoZWQgPSB0dG1fYm9fbG9ja19kZWxheWVkX3dvcmtxdWV1ZSgmcmRldi0+bW1hbi5iZGV2KTsKIAlyYWRlb25fc3VzcGVuZChyZGV2KTsKIAogCXIgPSByYWRlb25fYXNpY19yZXNldChyZGV2KTsKQEAgLTk0Niw2ICs5NDksNyBAQAogCQlyYWRlb25fcmVzdW1lKHJkZXYpOwogCQlyYWRlb25fcmVzdG9yZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2KTsKIAkJZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShyZGV2LT5kZGV2KTsKKwkJdHRtX2JvX3VubG9ja19kZWxheWVkX3dvcmtxdWV1ZSgmcmRldi0+bW1hbi5iZGV2LCByZXNjaGVkKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGJhZCBuZXdzLCBob3cgdG8gdGVsbCBpdCB0byB1c2Vyc3BhY2UgPyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IGQyNmRhYmYuLjNlN2U3ZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC03ODAsNiArNzgwLDEyNSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIGF2aXZvICovCitzdGF0aWMgdm9pZCBhdml2b19nZXRfZmJfZGl2KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkgICAgIHUzMiB0YXJnZXRfY2xvY2ssCisJCQkgICAgIHUzMiBwb3N0X2RpdiwKKwkJCSAgICAgdTMyIHJlZl9kaXYsCisJCQkgICAgIHUzMiAqZmJfZGl2LAorCQkJICAgICB1MzIgKmZyYWNfZmJfZGl2KQoreworCXUzMiB0bXAgPSBwb3N0X2RpdiAqIHJlZl9kaXY7CisKKwl0bXAgKj0gdGFyZ2V0X2Nsb2NrOworCSpmYl9kaXYgPSB0bXAgLyBwbGwtPnJlZmVyZW5jZV9mcmVxOworCSpmcmFjX2ZiX2RpdiA9IHRtcCAlIHBsbC0+cmVmZXJlbmNlX2ZyZXE7CisKKyAgICAgICAgaWYgKCpmYl9kaXYgPiBwbGwtPm1heF9mZWVkYmFja19kaXYpCisJCSpmYl9kaXYgPSBwbGwtPm1heF9mZWVkYmFja19kaXY7CisgICAgICAgIGVsc2UgaWYgKCpmYl9kaXYgPCBwbGwtPm1pbl9mZWVkYmFja19kaXYpCisgICAgICAgICAgICAgICAgKmZiX2RpdiA9IHBsbC0+bWluX2ZlZWRiYWNrX2RpdjsKK30KKworc3RhdGljIHUzMiBhdml2b19nZXRfcG9zdF9kaXYoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJCSAgICAgIHUzMiB0YXJnZXRfY2xvY2spCit7CisJdTMyIHZjbywgcG9zdF9kaXYsIHRtcDsKKworCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9VU0VfUE9TVF9ESVYpCisJCXJldHVybiBwbGwtPnBvc3RfZGl2OworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUCkgeworCQlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfSVNfTENEKQorCQkJdmNvID0gcGxsLT5sY2RfcGxsX291dF9taW47CisJCWVsc2UKKwkJCXZjbyA9IHBsbC0+cGxsX291dF9taW47CisJfSBlbHNlIHsKKwkJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX0lTX0xDRCkKKwkJCXZjbyA9IHBsbC0+bGNkX3BsbF9vdXRfbWF4OworCQllbHNlCisJCQl2Y28gPSBwbGwtPnBsbF9vdXRfbWF4OworCX0KKworCXBvc3RfZGl2ID0gdmNvIC8gdGFyZ2V0X2Nsb2NrOworCXRtcCA9IHZjbyAlIHRhcmdldF9jbG9jazsKKworCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9QUkVGRVJfTUlOTV9PVkVSX01BWFApIHsKKwkJaWYgKHRtcCkKKwkJCXBvc3RfZGl2Kys7CisJfSBlbHNlIHsKKwkJaWYgKCF0bXApCisJCQlwb3N0X2Rpdi0tOworCX0KKworCWlmIChwb3N0X2RpdiA+IHBsbC0+bWF4X3Bvc3RfZGl2KQorCQlwb3N0X2RpdiA9IHBsbC0+bWF4X3Bvc3RfZGl2OworCWVsc2UgaWYgKHBvc3RfZGl2IDwgcGxsLT5taW5fcG9zdF9kaXYpCisJCXBvc3RfZGl2ID0gcGxsLT5taW5fcG9zdF9kaXY7CisKKwlyZXR1cm4gcG9zdF9kaXY7Cit9CisKKyNkZWZpbmUgTUFYX1RPTEVSQU5DRSAxMAorCit2b2lkIHJhZGVvbl9jb21wdXRlX3BsbF9hdml2byhzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJICAgICAgdTMyIGZyZXEsCisJCQkgICAgICB1MzIgKmRvdF9jbG9ja19wLAorCQkJICAgICAgdTMyICpmYl9kaXZfcCwKKwkJCSAgICAgIHUzMiAqZnJhY19mYl9kaXZfcCwKKwkJCSAgICAgIHUzMiAqcmVmX2Rpdl9wLAorCQkJICAgICAgdTMyICpwb3N0X2Rpdl9wKQoreworCXUzMiB0YXJnZXRfY2xvY2sgPSBmcmVxIC8gMTA7CisJdTMyIHBvc3RfZGl2ID0gYXZpdm9fZ2V0X3Bvc3RfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrKTsKKwl1MzIgcmVmX2RpdiA9IHBsbC0+bWluX3JlZl9kaXY7CisJdTMyIGZiX2RpdiA9IDAsIGZyYWNfZmJfZGl2ID0gMCwgdG1wOworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9SRUZfRElWKQorCQlyZWZfZGl2ID0gcGxsLT5yZWZlcmVuY2VfZGl2OworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9GUkFDX0ZCX0RJVikgeworCQlhdml2b19nZXRfZmJfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrLCBwb3N0X2RpdiwgcmVmX2RpdiwgJmZiX2RpdiwgJmZyYWNfZmJfZGl2KTsKKwkJZnJhY19mYl9kaXYgPSAoMTAwICogZnJhY19mYl9kaXYpIC8gcGxsLT5yZWZlcmVuY2VfZnJlcTsKKwkJaWYgKGZyYWNfZmJfZGl2ID49IDUpIHsKKwkJCWZyYWNfZmJfZGl2IC09IDU7CisJCQlmcmFjX2ZiX2RpdiA9IGZyYWNfZmJfZGl2IC8gMTA7CisJCQlmcmFjX2ZiX2RpdisrOworCQl9CisJCWlmIChmcmFjX2ZiX2RpdiA+PSAxMCkgeworCQkJZmJfZGl2Kys7CisJCQlmcmFjX2ZiX2RpdiA9IDA7CisJCX0KKwl9IGVsc2UgeworCQl3aGlsZSAocmVmX2RpdiA8PSBwbGwtPm1heF9yZWZfZGl2KSB7CisJCQlhdml2b19nZXRfZmJfZGl2KHBsbCwgdGFyZ2V0X2Nsb2NrLCBwb3N0X2RpdiwgcmVmX2RpdiwKKwkJCQkJICZmYl9kaXYsICZmcmFjX2ZiX2Rpdik7CisJCQlpZiAoZnJhY19mYl9kaXYgPj0gKHBsbC0+cmVmZXJlbmNlX2ZyZXEgLyAyKSkKKwkJCQlmYl9kaXYrKzsKKwkJCWZyYWNfZmJfZGl2ID0gMDsKKwkJCXRtcCA9IChwbGwtPnJlZmVyZW5jZV9mcmVxICogZmJfZGl2KSAvIChwb3N0X2RpdiAqIHJlZl9kaXYpOworCQkJdG1wID0gKHRtcCAqIDEwMDAwKSAvIHRhcmdldF9jbG9jazsKKworCQkJaWYgKHRtcCA+ICgxMDAwMCArIE1BWF9UT0xFUkFOQ0UpKQorCQkJCXJlZl9kaXYrKzsKKwkJCWVsc2UgaWYgKHRtcCA+PSAoMTAwMDAgLSBNQVhfVE9MRVJBTkNFKSkKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQlyZWZfZGl2Kys7CisJCX0KKwl9CisKKwkqZG90X2Nsb2NrX3AgPSAoKHBsbC0+cmVmZXJlbmNlX2ZyZXEgKiBmYl9kaXYgKiAxMCkgKyAocGxsLT5yZWZlcmVuY2VfZnJlcSAqIGZyYWNfZmJfZGl2KSkgLworCQkocmVmX2RpdiAqIHBvc3RfZGl2ICogMTApOworCSpmYl9kaXZfcCA9IGZiX2RpdjsKKwkqZnJhY19mYl9kaXZfcCA9IGZyYWNfZmJfZGl2OworCSpyZWZfZGl2X3AgPSByZWZfZGl2OworCSpwb3N0X2Rpdl9wID0gcG9zdF9kaXY7CisJRFJNX0RFQlVHX0tNUygiJWQsIHBsbCBkaXZpZGVycyAtIGZiOiAlZC4lZCByZWY6ICVkLCBwb3N0ICVkXG4iLAorCQkgICAgICAqZG90X2Nsb2NrX3AsIGZiX2RpdiwgZnJhY19mYl9kaXYsIHJlZl9kaXYsIHBvc3RfZGl2KTsKK30KKworLyogcHJlLWF2aXZvICovCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJhZGVvbl9kaXYodWludDY0X3QgbiwgdWludDMyX3QgZCkKIHsKIAl1aW50NjRfdCBtb2Q7CkBAIC03OTAsMTMgKzkwOSwxMyBAQAogCXJldHVybiBuOwogfQogCi12b2lkIHJhZGVvbl9jb21wdXRlX3BsbChzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAotCQkJdWludDY0X3QgZnJlcSwKLQkJCXVpbnQzMl90ICpkb3RfY2xvY2tfcCwKLQkJCXVpbnQzMl90ICpmYl9kaXZfcCwKLQkJCXVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAotCQkJdWludDMyX3QgKnJlZl9kaXZfcCwKLQkJCXVpbnQzMl90ICpwb3N0X2Rpdl9wKQordm9pZCByYWRlb25fY29tcHV0ZV9wbGxfbGVnYWN5KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkgICAgICAgdWludDY0X3QgZnJlcSwKKwkJCSAgICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCisJCQkgICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAorCQkJICAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAorCQkJICAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCisJCQkgICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApCiB7CiAJdWludDMyX3QgbWluX3JlZl9kaXYgPSBwbGwtPm1pbl9yZWZfZGl2OwogCXVpbnQzMl90IG1heF9yZWZfZGl2ID0gcGxsLT5tYXhfcmVmX2RpdjsKQEAgLTgyNiw2ICs5NDUsOSBAQAogCQlwbGxfb3V0X21heCA9IHBsbC0+cGxsX291dF9tYXg7CiAJfQogCisJaWYgKHBsbF9vdXRfbWluID4gNjQ4MDApCisJCXBsbF9vdXRfbWluID0gNjQ4MDA7CisKIAlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfVVNFX1JFRl9ESVYpCiAJCW1pbl9yZWZfZGl2ID0gbWF4X3JlZl9kaXYgPSBwbGwtPnJlZmVyZW5jZV9kaXY7CiAJZWxzZSB7CkBAIC05NjUsNiArMTA4NywxMCBAQAogCSpmcmFjX2ZiX2Rpdl9wID0gYmVzdF9mcmFjX2ZlZWRiYWNrX2RpdjsKIAkqcmVmX2Rpdl9wID0gYmVzdF9yZWZfZGl2OwogCSpwb3N0X2Rpdl9wID0gYmVzdF9wb3N0X2RpdjsKKwlEUk1fREVCVUdfS01TKCIlZCAlZCwgcGxsIGRpdmlkZXJzIC0gZmI6ICVkLiVkIHJlZjogJWQsIHBvc3QgJWRcbiIsCisJCSAgICAgIGZyZXEsIGJlc3RfZnJlcSAvIDEwMDAsIGJlc3RfZmVlZGJhY2tfZGl2LCBiZXN0X2ZyYWNfZmVlZGJhY2tfZGl2LAorCQkgICAgICBiZXN0X3JlZl9kaXYsIGJlc3RfcG9zdF9kaXYpOworCiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCmluZGV4IDQ0OGViYTguLjVjYmE0NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCkBAIC0xNTI0LDYgKzE1MjQsNyBAQAogI2RlZmluZSBSNjAwX0NQX1JCX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTA0CiAjICAgICAgIGRlZmluZSBSNjAwX1JCX0JVRlNaKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCiAjICAgICAgIGRlZmluZSBSNjAwX1JCX0JMS1NaKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjCWRlZmluZSBSNjAwX0JVRl9TV0FQXzMyQklUCQkgICAgICAgICAgICAgICAoMiA8PCAxNikKICMgICAgICAgZGVmaW5lIFI2MDBfUkJfTk9fVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI3KQogIyAgICAgICBkZWZpbmUgUjYwMF9SQl9SUFRSX1dSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIFI2MDBfQ1BfUkJfUlBUUl9XUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDhmZDE4NDIuLmI0Mjc0ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtNjQxLDcgKzY0MSw3IEBACiAJc3dpdGNoIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQjogLyogSERNSS1CIGlzIGJhc2ljYWxseSBETC1EVkk7IGFuYWxvZyB3b3JrcyBmaW5lICovCi0JCWlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpIHsKKwkJaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSAmJiByYWRlb25fYXVkaW8pIHsKIAkJCS8qIGZpeCBtZSAqLwogCQkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKIAkJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtNjU1LDcgKzY1NSw3IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKIAlkZWZhdWx0OgotCQlpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKSB7CisJCWlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgJiYgcmFkZW9uX2F1ZGlvKSB7CiAJCQkvKiBmaXggbWUgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTQocmRldikpCiAJCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTY3Myw3ICs2NzMsNyBAQAogCQlpZiAoKGRpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUKSB8fAogCQkgICAgKGRpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFA7Ci0JCWVsc2UgaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkgeworCQllbHNlIGlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgJiYgcmFkZW9uX2F1ZGlvKSB7CiAJCQkvKiBmaXggbWUgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTQocmRldikpCiAJCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTkxMCw3ICs5MTAsNyBAQAogCiAJYXJncy52MS51Y0FjdGlvbiA9IGFjdGlvbjsKIAlpZiAoYWN0aW9uID09IEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0lOSVQpIHsKLQkJYXJncy52MS51c0luaXRJbmZvID0gY29ubmVjdG9yX29iamVjdF9pZDsKKwkJYXJncy52MS51c0luaXRJbmZvID0gY3B1X3RvX2xlMTYoY29ubmVjdG9yX29iamVjdF9pZCk7CiAJfSBlbHNlIGlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVBfVlNFTVBIKSB7CiAJCWFyZ3MudjEuYXNNb2RlLnVjTGFuZVNlbCA9IGxhbmVfbnVtOwogCQlhcmdzLnYxLmFzTW9kZS51Y0xhbmVTZXQgPSBsYW5lX3NldDsKQEAgLTEwNjMsNyArMTA2Myw3IEBACiAJaWYgKCFBU0lDX0lTX0RDRTQocmRldikpCiAJCXJldHVybjsKIAotCWlmICgoYWN0aW9uICE9IEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1BPV0VSX09OKSB8fAorCWlmICgoYWN0aW9uICE9IEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1BPV0VSX09OKSAmJgogCSAgICAoYWN0aW9uICE9IEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1BPV0VSX09GRikpCiAJCXJldHVybjsKIApAQCAtMTE0MCw3ICsxMTQwLDcgQEAKIAkJY2FzZSAzOgogCQkJYXJncy52My5zRXh0RW5jb2Rlci51Y0FjdGlvbiA9IGFjdGlvbjsKIAkJCWlmIChhY3Rpb24gPT0gRVhURVJOQUxfRU5DT0RFUl9BQ1RJT05fVjNfRU5DT0RFUl9JTklUKQotCQkJCWFyZ3MudjMuc0V4dEVuY29kZXIudXNDb25uZWN0b3JJZCA9IGNvbm5lY3Rvcl9vYmplY3RfaWQ7CisJCQkJYXJncy52My5zRXh0RW5jb2Rlci51c0Nvbm5lY3RvcklkID0gY3B1X3RvX2xlMTYoY29ubmVjdG9yX29iamVjdF9pZCk7CiAJCQllbHNlCiAJCQkJYXJncy52My5zRXh0RW5jb2Rlci51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJCQlhcmdzLnYzLnNFeHRFbmNvZGVyLnVjRW5jb2Rlck1vZGUgPSBhdG9tYmlvc19nZXRfZW5jb2Rlcl9tb2RlKGVuY29kZXIpOwpAQCAtMTU3MCwxMSArMTU3MCwyMSBAQAogCX0KIAogCS8qIHNldCBzY2FsZXIgY2xlYXJzIHRoaXMgb24gc29tZSBjaGlwcyAqLwotCS8qIFhYWCBjaGVjayBEQ0U0ICovCi0JaWYgKCEocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpKSB7Ci0JCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpICYmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKLQkJCVdSRUczMihBVklWT19EMU1PREVfREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCi0JCQkgICAgICAgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOworCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpICYmCisJICAgICghKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSkpIHsKKwkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQkJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCQkJV1JFRzMyKEVWRVJHUkVFTl9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKKwkJCQkgICAgICAgRVZFUkdSRUVOX0lOVEVSTEVBVkVfRU4pOworCQkJZWxzZQorCQkJCVdSRUczMihFVkVSR1JFRU5fREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCQl9IGVsc2UgeworCQkJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKKwkJCQkgICAgICAgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOworCQkJZWxzZQorCQkJCVdSRUczMihBVklWT19EMU1PREVfREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwppbmRleCA2NjMyNGI1Li5jYzQ0YmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKQEAgLTExMywxMSArMTEzLDE0IEBACiAJdTMyIHRpbGluZ19mbGFncyA9IDA7CiAJaW50IHJldDsKIAlpbnQgYWxpZ25lZF9zaXplLCBzaXplOworCWludCBoZWlnaHQgPSBtb2RlX2NtZC0+aGVpZ2h0OwogCiAJLyogbmVlZCB0byBhbGlnbiBwaXRjaCB3aXRoIGNydGMgbGltaXRzICovCiAJbW9kZV9jbWQtPnBpdGNoID0gcmFkZW9uX2FsaWduX3BpdGNoKHJkZXYsIG1vZGVfY21kLT53aWR0aCwgbW9kZV9jbWQtPmJwcCwgZmJfdGlsZWQpICogKChtb2RlX2NtZC0+YnBwICsgMSkgLyA4KTsKIAotCXNpemUgPSBtb2RlX2NtZC0+cGl0Y2ggKiBtb2RlX2NtZC0+aGVpZ2h0OworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQorCQloZWlnaHQgPSBBTElHTihtb2RlX2NtZC0+aGVpZ2h0LCA4KTsKKwlzaXplID0gbW9kZV9jbWQtPnBpdGNoICogaGVpZ2h0OwogCWFsaWduZWRfc2l6ZSA9IEFMSUdOKHNpemUsIFBBR0VfU0laRSk7CiAJcmV0ID0gcmFkZW9uX2dlbV9vYmplY3RfY3JlYXRlKHJkZXYsIGFsaWduZWRfc2l6ZSwgMCwKIAkJCQkgICAgICAgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKaW5kZXggOTgzMjEyOS4uODM4N2QzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKQEAgLTI0Nyw2ICsyNDcsOCBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpZiAocmRldi0+aHlwZXJ6X2ZpbHAgPT0gZmlsZV9wcml2KQogCQlyZGV2LT5oeXBlcnpfZmlscCA9IE5VTEw7CisJaWYgKHJkZXYtPmNtYXNrX2ZpbHAgPT0gZmlsZV9wcml2KQorCQlyZGV2LT5jbWFza19maWxwID0gTlVMTDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCmluZGV4IGFjZTJlNjMuLmNmMDYzOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwpAQCAtNzc4LDkgKzc3OCw5IEBACiAJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCWlmICghdXNlX2Jpb3NfZGl2cykgewotCQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBtb2RlLT5jbG9jaywKLQkJCQkgICAmZnJlcSwgJmZlZWRiYWNrX2RpdiwgJmZyYWNfZmJfZGl2LAotCQkJCSAgICZyZWZlcmVuY2VfZGl2LCAmcG9zdF9kaXZpZGVyKTsKKwkJcmFkZW9uX2NvbXB1dGVfcGxsX2xlZ2FjeShwbGwsIG1vZGUtPmNsb2NrLAorCQkJCQkgICZmcmVxLCAmZmVlZGJhY2tfZGl2LCAmZnJhY19mYl9kaXYsCisJCQkJCSAgJnJlZmVyZW5jZV9kaXYsICZwb3N0X2RpdmlkZXIpOwogCiAJCWZvciAocG9zdF9kaXYgPSAmcG9zdF9kaXZzWzBdOyBwb3N0X2Rpdi0+ZGl2aWRlcjsgKytwb3N0X2RpdikgewogCQkJaWYgKHBvc3RfZGl2LT5kaXZpZGVyID09IHBvc3RfZGl2aWRlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAppbmRleCAxMmJkZWFiLi5hNjcwY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCkBAIC0xNDksNiArMTQ5LDcgQEAKICNkZWZpbmUgUkFERU9OX1BMTF9QUkVGRVJfQ0xPU0VTVF9MT1dFUiAoMSA8PCAxMSkKICNkZWZpbmUgUkFERU9OX1BMTF9VU0VfUE9TVF9ESVYgICAgICAgICAoMSA8PCAxMikKICNkZWZpbmUgUkFERU9OX1BMTF9JU19MQ0QgICAgICAgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgUkFERU9OX1BMTF9QUkVGRVJfTUlOTV9PVkVSX01BWFAgKDEgPDwgMTQpCiAKIHN0cnVjdCByYWRlb25fcGxsIHsKIAkvKiByZWZlcmVuY2UgZnJlcXVlbmN5ICovCkBAIC0yMDgsNiArMjA5LDcgQEAKIAlDVF9FTUFDLAogCUNUX1JONTBfUE9XRVIsCiAJQ1RfTUFDX1g4MDAsCisJQ1RfTUFDX0c1Xzk2MDAsCiB9OwogCiBlbnVtIHJhZGVvbl9kdm9fY2hpcCB7CkBAIC01MTAsMTMgKzUxMiwyMSBAQAogCQkJCQkgICAgIHN0cnVjdCByYWRlb25fYXRvbV9zcyAqc3MsCiAJCQkJCSAgICAgaW50IGlkLCB1MzIgY2xvY2spOwogCi1leHRlcm4gdm9pZCByYWRlb25fY29tcHV0ZV9wbGwoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKLQkJCSAgICAgICB1aW50NjRfdCBmcmVxLAotCQkJICAgICAgIHVpbnQzMl90ICpkb3RfY2xvY2tfcCwKLQkJCSAgICAgICB1aW50MzJfdCAqZmJfZGl2X3AsCi0JCQkgICAgICAgdWludDMyX3QgKmZyYWNfZmJfZGl2X3AsCi0JCQkgICAgICAgdWludDMyX3QgKnJlZl9kaXZfcCwKLQkJCSAgICAgICB1aW50MzJfdCAqcG9zdF9kaXZfcCk7CitleHRlcm4gdm9pZCByYWRlb25fY29tcHV0ZV9wbGxfbGVnYWN5KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkJICAgICAgdWludDY0X3QgZnJlcSwKKwkJCQkgICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCisJCQkJICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAorCQkJCSAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAorCQkJCSAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCisJCQkJICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApOworCitleHRlcm4gdm9pZCByYWRlb25fY29tcHV0ZV9wbGxfYXZpdm8oc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJCQkgICAgIHUzMiBmcmVxLAorCQkJCSAgICAgdTMyICpkb3RfY2xvY2tfcCwKKwkJCQkgICAgIHUzMiAqZmJfZGl2X3AsCisJCQkJICAgICB1MzIgKmZyYWNfZmJfZGl2X3AsCisJCQkJICAgICB1MzIgKnJlZl9kaXZfcCwKKwkJCQkgICAgIHUzMiAqcG9zdF9kaXZfcCk7CiAKIGV4dGVybiB2b2lkIHJhZGVvbl9zZXR1cF9lbmNvZGVyX2Nsb25lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKaW5kZXggM2IxYjJiZi4uMmFlZDAzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCkBAIC00MzAsNyArNDMwLDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IHBjaV9nZXRfZHJ2ZGF0YSh0b19wY2lfZGV2KGRldikpOwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIHRlbXA7CisJaW50IHRlbXA7CiAKIAlzd2l0Y2ggKHJkZXYtPnBtLmludF90aGVybWFsX3R5cGUpIHsKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjZYWDoKQEAgLTY0Niw2ICs2NDYsOSBAQAogI2VuZGlmCiAJfQogCisJaWYgKHJkZXYtPnBtLnBvd2VyX3N0YXRlKQorCQlrZnJlZShyZGV2LT5wbS5wb3dlcl9zdGF0ZSk7CisKIAlyYWRlb25faHdtb25fZmluaShyZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAppbmRleCAzY2Q0ZGFjLi5lYzkzYTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaApAQCAtMzc1LDYgKzM3NSw4IEBACiAjZGVmaW5lIFJBREVPTl9DT05GSUdfQVBFUl9TSVpFICAgICAgICAgICAgIDB4MDEwOAogI2RlZmluZSBSQURFT05fQ09ORklHX0JPTkRTICAgICAgICAgICAgICAgICAweDAwZTgKICNkZWZpbmUgUkFERU9OX0NPTkZJR19DTlRMICAgICAgICAgICAgICAgICAgMHgwMGUwCisjICAgICAgIGRlZmluZSBSQURFT05fQ0ZHX1ZHQV9SQU1fRU4gICAgICAgICgxIDw8IDgpCisjICAgICAgIGRlZmluZSBSQURFT05fQ0ZHX1ZHQV9JT19ESVMgICAgICAgICgxIDw8IDkpCiAjICAgICAgIGRlZmluZSBSQURFT05fQ0ZHX0FUSV9SRVZfQTExICAgICAgICgwICAgPDwgMTYpCiAjICAgICAgIGRlZmluZSBSQURFT05fQ0ZHX0FUSV9SRVZfQTEyICAgICAgICgxICAgPDwgMTYpCiAjICAgICAgIGRlZmluZSBSQURFT05fQ0ZHX0FUSV9SRVZfQTEzICAgICAgICgyICAgPDwgMTYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCmluZGV4IDEyNzJlNGIuLmU1YjJjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCkBAIC03ODcsOSArNzg3LDkgQEAKIAkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLnNob3cgPSAmcmFkZW9uX21tX2R1bXBfdGFibGU7CiAJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5kcml2ZXJfZmVhdHVyZXMgPSAwOwogCQlpZiAoaSA9PSAwKQotCQkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLmRhdGEgPSAmcmRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExfVlJBTV0ucHJpdjsKKwkJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5kYXRhID0gcmRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExfVlJBTV0ucHJpdjsKIAkJZWxzZQotCQkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLmRhdGEgPSAmcmRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExfVFRdLnByaXY7CisJCQlyYWRlb25fbWVtX3R5cGVzX2xpc3RbaV0uZGF0YSA9IHJkZXYtPm1tYW4uYmRldi5tYW5bVFRNX1BMX1RUXS5wcml2OwogCiAJfQogCS8qIEFkZCB0dG0gcGFnZSBwb29sIHRvIGRlYnVnZnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjMwMCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjMwMAppbmRleCBiNTA2ZWMxLi5lOGExNzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IzMDAKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMzAwCkBAIC02ODMsOSArNjgzLDcgQEAKIDB4NERGNCBVU19BTFVfQ09OU1RfR18zMQogMHg0REY4IFVTX0FMVV9DT05TVF9CXzMxCiAweDRERkMgVVNfQUxVX0NPTlNUX0FfMzEKLTB4NEUwNCBSQjNEX0JMRU5EQ05UTF9SMwogMHg0RTA4IFJCM0RfQUJMRU5EQ05UTF9SMwotMHg0RTBDIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLCiAweDRFMTAgUkIzRF9DT05TVEFOVF9DT0xPUgogMHg0RTE0IFJCM0RfQ09MT1JfQ0xFQVJfVkFMVUUKIDB4NEUxOCBSQjNEX1JPUENOVExfUjMKQEAgLTcwNiwxMyArNzA0LDExIEBACiAweDRFNzQgUkIzRF9DTUFTS19XUklOREVYCiAweDRFNzggUkIzRF9DTUFTS19EV09SRAogMHg0RTdDIFJCM0RfQ01BU0tfUkRJTkRFWAotMHg0RTgwIFJCM0RfQUFSRVNPTFZFX09GRlNFVAotMHg0RTg0IFJCM0RfQUFSRVNPTFZFX1BJVENICi0weDRFODggUkIzRF9BQVJFU09MVkVfQ1RMCiAweDRFQTAgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9MVEVfVEhSRVNIT0xECiAweDRFQTQgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9HVEVfVEhSRVNIT0xECiAweDRGMDQgWkJfWlNURU5DSUxDTlRMCiAweDRGMDggWkJfU1RFTkNJTFJFRk1BU0sKIDB4NEYxNCBaQl9aVE9QCiAweDRGMTggWkJfWkNBQ0hFX0NUTFNUQVQKKzB4NEYyOCBaQl9ERVBUSENMRUFSVkFMVUUKIDB4NEY1OCBaQl9aUEFTU19EQVRBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I0MjAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I0MjAKaW5kZXggOGMxMjE0Yy4uNzIyMDc0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNDIwCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjQyMApAQCAtMTMwLDcgKzEzMCw2IEBACiAweDQwMUMgR0JfU0VMRUNUCiAweDQwMjAgR0JfQUFfQ09ORklHCiAweDQwMjQgR0JfRklGT19TSVpFCi0weDQwMjggR0JfWl9QRVFfQ09ORklHCiAweDQxMDAgVFhfSU5WQUxUQUdTCiAweDQyMDAgR0FfUE9JTlRfUzAKIDB4NDIwNCBHQV9QT0lOVF9UMApAQCAtNzUwLDkgKzc0OSw3IEBACiAweDRERjQgVVNfQUxVX0NPTlNUX0dfMzEKIDB4NERGOCBVU19BTFVfQ09OU1RfQl8zMQogMHg0REZDIFVTX0FMVV9DT05TVF9BXzMxCi0weDRFMDQgUkIzRF9CTEVORENOVExfUjMKIDB4NEUwOCBSQjNEX0FCTEVORENOVExfUjMKLTB4NEUwQyBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSwogMHg0RTEwIFJCM0RfQ09OU1RBTlRfQ09MT1IKIDB4NEUxNCBSQjNEX0NPTE9SX0NMRUFSX1ZBTFVFCiAweDRFMTggUkIzRF9ST1BDTlRMX1IzCkBAIC03NzMsMTMgKzc3MCwxMSBAQAogMHg0RTc0IFJCM0RfQ01BU0tfV1JJTkRFWAogMHg0RTc4IFJCM0RfQ01BU0tfRFdPUkQKIDB4NEU3QyBSQjNEX0NNQVNLX1JESU5ERVgKLTB4NEU4MCBSQjNEX0FBUkVTT0xWRV9PRkZTRVQKLTB4NEU4NCBSQjNEX0FBUkVTT0xWRV9QSVRDSAotMHg0RTg4IFJCM0RfQUFSRVNPTFZFX0NUTAogMHg0RUEwIFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfTFRFX1RIUkVTSE9MRAogMHg0RUE0IFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfR1RFX1RIUkVTSE9MRAogMHg0RjA0IFpCX1pTVEVOQ0lMQ05UTAogMHg0RjA4IFpCX1NURU5DSUxSRUZNQVNLCiAweDRGMTQgWkJfWlRPUAogMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCisweDRGMjggWkJfREVQVEhDTEVBUlZBTFVFCiAweDRGNTggWkJfWlBBU1NfREFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAKaW5kZXggMDgyOGQ4MC4uZDlmNjI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3JzNjAwCkBAIC03NDksOSArNzQ5LDcgQEAKIDB4NERGNCBVU19BTFVfQ09OU1RfR18zMQogMHg0REY4IFVTX0FMVV9DT05TVF9CXzMxCiAweDRERkMgVVNfQUxVX0NPTlNUX0FfMzEKLTB4NEUwNCBSQjNEX0JMRU5EQ05UTF9SMwogMHg0RTA4IFJCM0RfQUJMRU5EQ05UTF9SMwotMHg0RTBDIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLCiAweDRFMTAgUkIzRF9DT05TVEFOVF9DT0xPUgogMHg0RTE0IFJCM0RfQ09MT1JfQ0xFQVJfVkFMVUUKIDB4NEUxOCBSQjNEX1JPUENOVExfUjMKQEAgLTc3MiwxMyArNzcwLDExIEBACiAweDRFNzQgUkIzRF9DTUFTS19XUklOREVYCiAweDRFNzggUkIzRF9DTUFTS19EV09SRAogMHg0RTdDIFJCM0RfQ01BU0tfUkRJTkRFWAotMHg0RTgwIFJCM0RfQUFSRVNPTFZFX09GRlNFVAotMHg0RTg0IFJCM0RfQUFSRVNPTFZFX1BJVENICi0weDRFODggUkIzRF9BQVJFU09MVkVfQ1RMCiAweDRFQTAgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9MVEVfVEhSRVNIT0xECiAweDRFQTQgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9HVEVfVEhSRVNIT0xECiAweDRGMDQgWkJfWlNURU5DSUxDTlRMCiAweDRGMDggWkJfU1RFTkNJTFJFRk1BU0sKIDB4NEYxNCBaQl9aVE9QCiAweDRGMTggWkJfWkNBQ0hFX0NUTFNUQVQKKzB4NEYyOCBaQl9ERVBUSENMRUFSVkFMVUUKIDB4NEY1OCBaQl9aUEFTU19EQVRBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1IGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNQppbmRleCBlZjQyMmJiLi45MTFhOGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnY1MTUKQEAgLTE2NCw3ICsxNjQsNiBAQAogMHg0MDFDIEdCX1NFTEVDVAogMHg0MDIwIEdCX0FBX0NPTkZJRwogMHg0MDI0IEdCX0ZJRk9fU0laRQotMHg0MDI4IEdCX1pfUEVRX0NPTkZJRwogMHg0MTAwIFRYX0lOVkFMVEFHUwogMHg0MTE0IFNVX1RFWF9XUkFQX1BTMwogMHg0MTE4IFBTM19FTkFCTEUKQEAgLTQ2MSw5ICs0NjAsNyBAQAogMHg0REY0IFVTX0FMVV9DT05TVF9HXzMxCiAweDRERjggVVNfQUxVX0NPTlNUX0JfMzEKIDB4NERGQyBVU19BTFVfQ09OU1RfQV8zMQotMHg0RTA0IFJCM0RfQkxFTkRDTlRMX1IzCiAweDRFMDggUkIzRF9BQkxFTkRDTlRMX1IzCi0weDRFMEMgUkIzRF9DT0xPUl9DSEFOTkVMX01BU0sKIDB4NEUxMCBSQjNEX0NPTlNUQU5UX0NPTE9SCiAweDRFMTQgUkIzRF9DT0xPUl9DTEVBUl9WQUxVRQogMHg0RTE4IFJCM0RfUk9QQ05UTF9SMwpAQCAtNDg0LDkgKzQ4MSw2IEBACiAweDRFNzQgUkIzRF9DTUFTS19XUklOREVYCiAweDRFNzggUkIzRF9DTUFTS19EV09SRAogMHg0RTdDIFJCM0RfQ01BU0tfUkRJTkRFWAotMHg0RTgwIFJCM0RfQUFSRVNPTFZFX09GRlNFVAotMHg0RTg0IFJCM0RfQUFSRVNPTFZFX1BJVENICi0weDRFODggUkIzRF9BQVJFU09MVkVfQ1RMCiAweDRFQTAgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9MVEVfVEhSRVNIT0xECiAweDRFQTQgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9HVEVfVEhSRVNIT0xECiAweDRFRjggUkIzRF9DT05TVEFOVF9DT0xPUl9BUgpAQCAtNDk2LDQgKzQ5MCw1IEBACiAweDRGMTQgWkJfWlRPUAogMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCiAweDRGNTggWkJfWlBBU1NfREFUQQorMHg0RjI4IFpCX0RFUFRIQ0xFQVJWQUxVRQogMHg0RkQ0IFpCX1NURU5DSUxSRUZNQVNLX0JGCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKaW5kZXggNTUxMmU0ZS4uYzc2MjgzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwpAQCAtMjAzLDYgKzIwMyw5IEBACiAJcmFkZW9uX2dhcnRfdGFibGVfcmFtX2ZyZWUocmRldik7CiB9CiAKKyNkZWZpbmUgUlM0MDBfUFRFX1dSSVRFQUJMRSAoMSA8PCAyKQorI2RlZmluZSBSUzQwMF9QVEVfUkVBREFCTEUgICgxIDw8IDMpCisKIGludCByczQwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcikKIHsKIAl1aW50MzJfdCBlbnRyeTsKQEAgLTIxMyw3ICsyMTYsNyBAQAogCiAJZW50cnkgPSAobG93ZXJfMzJfYml0cyhhZGRyKSAmIFBBR0VfTUFTSykgfAogCQkoKHVwcGVyXzMyX2JpdHMoYWRkcikgJiAweGZmKSA8PCA0KSB8Ci0JCTB4YzsKKwkJUlM0MDBfUFRFX1dSSVRFQUJMRSB8IFJTNDAwX1BURV9SRUFEQUJMRTsKIAllbnRyeSA9IGNwdV90b19sZTMyKGVudHJ5KTsKIAlyZGV2LT5nYXJ0LnRhYmxlLnJhbS5wdHJbaV0gPSBlbnRyeTsKIAlyZXR1cm4gMDsKQEAgLTIyNiw4ICsyMjksOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CiAJCS8qIHJlYWQgTUNfU1RBVFVTICovCi0JCXRtcCA9IFJSRUczMigweDAxNTApOwotCQlpZiAodG1wICYgKDEgPDwgMikpIHsKKwkJdG1wID0gUlJFRzMyKFJBREVPTl9NQ19TVEFUVVMpOworCQlpZiAodG1wICYgUkFERU9OX01DX0lETEUpIHsKIAkJCXJldHVybiAwOwogCQl9CiAJCURSTV9VREVMQVkoMSk7CkBAIC0yNDEsNyArMjQ0LDcgQEAKIAlyNDIwX3BpcGVzX2luaXQocmRldik7CiAJaWYgKHJzNDAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicnM0MDA6IEZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi4gJTA4eFxuIiwgUlJFRzMyKDB4MTUwKSk7CisJCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLiAlMDh4XG4iLCBSUkVHMzIoUkFERU9OX01DX1NUQVRVUykpOwogCX0KIH0KIApAQCAtMzAwLDkgKzMwMyw5IEBACiAJCXNlcV9wcmludGYobSwgIk1DQ0ZHX0FHUF9CQVNFXzIgMHglMDh4XG4iLCB0bXApOwogCQl0bXAgPSBSUkVHMzJfTUMoUlM2OTBfTUNDRkdfQUdQX0xPQ0FUSU9OKTsKIAkJc2VxX3ByaW50ZihtLCAiTUNDRkdfQUdQX0xPQ0FUSU9OIDB4JTA4eFxuIiwgdG1wKTsKLQkJdG1wID0gUlJFRzMyX01DKDB4MTAwKTsKKwkJdG1wID0gUlJFRzMyX01DKFJTNjkwX01DQ0ZHX0ZCX0xPQ0FUSU9OKTsKIAkJc2VxX3ByaW50ZihtLCAiTUNDRkdfRkJfTE9DQVRJT04gMHglMDh4XG4iLCB0bXApOwotCQl0bXAgPSBSUkVHMzIoMHgxMzQpOworCQl0bXAgPSBSUkVHMzIoUlM2OTBfSERQX0ZCX0xPQ0FUSU9OKTsKIAkJc2VxX3ByaW50ZihtLCAiSERQX0ZCX0xPQ0FUSU9OIDB4JTA4eFxuIiwgdG1wKTsKIAl9IGVsc2UgewogCQl0bXAgPSBSUkVHMzIoUkFERU9OX0FHUF9CQVNFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCAwMTM3ZDNlLi42NjM4YzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC03Nyw5ICs3Nyw5IEBACiAJCXN3aXRjaCAoY3JldikgewogCQljYXNlIDE6CiAJCQl0bXAuZnVsbCA9IGRmaXhlZF9jb25zdCgxMDApOwotCQkJcmRldi0+cG0uaWdwX3NpZGVwb3J0X21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdChpbmZvLT5pbmZvLnVsQm9vdFVwTWVtb3J5Q2xvY2spOworCQkJcmRldi0+cG0uaWdwX3NpZGVwb3J0X21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdChsZTMyX3RvX2NwdShpbmZvLT5pbmZvLnVsQm9vdFVwTWVtb3J5Q2xvY2spKTsKIAkJCXJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLmZ1bGwgPSBkZml4ZWRfZGl2KHJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLCB0bXApOwotCQkJaWYgKGluZm8tPmluZm8udXNLOE1lbW9yeUNsb2NrKQorCQkJaWYgKGxlMTZfdG9fY3B1KGluZm8tPmluZm8udXNLOE1lbW9yeUNsb2NrKSkKIAkJCQlyZGV2LT5wbS5pZ3Bfc3lzdGVtX21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdChsZTE2X3RvX2NwdShpbmZvLT5pbmZvLnVzSzhNZW1vcnlDbG9jaykpOwogCQkJZWxzZSBpZiAocmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKSB7CiAJCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QocmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKTsKQEAgLTkxLDE2ICs5MSwxNiBAQAogCQkJYnJlYWs7CiAJCWNhc2UgMjoKIAkJCXRtcC5mdWxsID0gZGZpeGVkX2NvbnN0KDEwMCk7Ci0JCQlyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsay5mdWxsID0gZGZpeGVkX2NvbnN0KGluZm8tPmluZm9fdjIudWxCb290VXBTaWRlUG9ydENsb2NrKTsKKwkJCXJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QobGUzMl90b19jcHUoaW5mby0+aW5mb192Mi51bEJvb3RVcFNpZGVQb3J0Q2xvY2spKTsKIAkJCXJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLmZ1bGwgPSBkZml4ZWRfZGl2KHJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLCB0bXApOwotCQkJaWYgKGluZm8tPmluZm9fdjIudWxCb290VXBVTUFDbG9jaykKLQkJCQlyZGV2LT5wbS5pZ3Bfc3lzdGVtX21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdChpbmZvLT5pbmZvX3YyLnVsQm9vdFVwVU1BQ2xvY2spOworCQkJaWYgKGxlMzJfdG9fY3B1KGluZm8tPmluZm9fdjIudWxCb290VXBVTUFDbG9jaykpCisJCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QobGUzMl90b19jcHUoaW5mby0+aW5mb192Mi51bEJvb3RVcFVNQUNsb2NrKSk7CiAJCQllbHNlIGlmIChyZGV2LT5jbG9jay5kZWZhdWx0X21jbGspCiAJCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QocmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKTsKIAkJCWVsc2UKIAkJCQlyZGV2LT5wbS5pZ3Bfc3lzdGVtX21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdCg2NjcwMCk7CiAJCQlyZGV2LT5wbS5pZ3Bfc3lzdGVtX21jbGsuZnVsbCA9IGRmaXhlZF9kaXYocmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLCB0bXApOwotCQkJcmRldi0+cG0uaWdwX2h0X2xpbmtfY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QoaW5mby0+aW5mb192Mi51bEhUTGlua0ZyZXEpOworCQkJcmRldi0+cG0uaWdwX2h0X2xpbmtfY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QobGUzMl90b19jcHUoaW5mby0+aW5mb192Mi51bEhUTGlua0ZyZXEpKTsKIAkJCXJkZXYtPnBtLmlncF9odF9saW5rX2Nsay5mdWxsID0gZGZpeGVkX2RpdihyZGV2LT5wbS5pZ3BfaHRfbGlua19jbGssIHRtcCk7CiAJCQlyZGV2LT5wbS5pZ3BfaHRfbGlua193aWR0aC5mdWxsID0gZGZpeGVkX2NvbnN0KGxlMTZfdG9fY3B1KGluZm8tPmluZm9fdjIudXNNaW5IVExpbmtXaWR0aCkpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggNWQ1NjlmNC4uNjRiNTdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtNjksMTMgKzY5LDEzIEBACiAJCQkgIElTWU5DX0NQU0NSQVRDSF9JRExFR1VJKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFdBSVRfVU5USUwsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBXQUlUXzJEX0lETEVDTEVBTiB8IFdBSVRfM0RfSURMRUNMRUFOKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcwQywgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEgPDwgMzEpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9EU1RfUElQRV9DT05GSUcsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSMzAwX1BJUEVfQVVUT19DT05GSUcpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoR0JfU0VMRUNULCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChHQl9FTkFCTEUsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4NDJDOCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjUwMF9TVV9SRUdfREVTVCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IHJkZXYtPm51bV9nYl9waXBlcykgLSAxKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFZBUF9JTkRFWF9PRkZTRVQsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKQEAgLTE1Myw4ICsxNTMsOCBAQAogCX0KIAlydjUxNV92Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwotCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKDB4NDAyQyk7Ci0JdG1wID0gUlJFRzMyKDB4MTcwQyk7CisJZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoUjQwMF9HQl9QSVBFX1NFTEVDVCk7CisJdG1wID0gUlJFRzMyKFIzMDBfRFNUX1BJUEVfQ09ORklHKTsKIAlwaXBlX3NlbGVjdF9jdXJyZW50ID0gKHRtcCA+PiAyKSAmIDM7CiAJdG1wID0gKDEgPDwgcGlwZV9zZWxlY3RfY3VycmVudCkgfAogCSAgICAgICgoKGdiX3BpcGVfc2VsZWN0ID4+IDgpICYgMHhGKSA8PCA0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCA0OTFkYzkwLi5kOGJhNjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC03OCwxOCArNzgsMjMgQEAKIH0KIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwotdTMyIHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoraW50IHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiB0ZW1wID0gKFJSRUczMihDR19NVUxUX1RIRVJNQUxfU1RBVFVTKSAmIEFTSUNfVF9NQVNLKSA+PgogCQlBU0lDX1RfU0hJRlQ7Ci0JdTMyIGFjdHVhbF90ZW1wID0gMDsKKwlpbnQgYWN0dWFsX3RlbXA7CiAKLQlpZiAoKHRlbXAgPj4gOSkgJiAxKQotCQlhY3R1YWxfdGVtcCA9IDA7Ci0JZWxzZQotCQlhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwlpZiAodGVtcCAmIDB4NDAwKQorCQlhY3R1YWxfdGVtcCA9IC0yNTY7CisJZWxzZSBpZiAodGVtcCAmIDB4MjAwKQorCQlhY3R1YWxfdGVtcCA9IDI1NTsKKwllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7CisJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwl9IGVsc2UKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CisJcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKIH0KIAogdm9pZCBydjc3MF9wbV9taXNjKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtMzE2LDcgKzMyMSwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXI3MDBfY3Bfc3RvcChyZGV2KTsKLQlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgKDE1IDw8IDgpIHwgKDMgPDwgMCkpOworCVdSRUczMihDUF9SQl9DTlRMLAorI2lmZGVmIF9fQklHX0VORElBTgorCSAgICAgICBCVUZfU1dBUF8zMkJJVCB8CisjZW5kaWYKKwkgICAgICAgUkJfTk9fVVBEQVRFIHwgUkJfQkxLU1ooMTUpIHwgUkJfQlVGU1ooMykpOwogCiAJLyogUmVzZXQgY3AgKi8KIAlXUkVHMzIoR1JCTV9TT0ZUX1JFU0VULCBTT0ZUX1JFU0VUX0NQKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCmluZGV4IGFiYzhjZjUuLjc5ZmE1ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtNzYsMTAgKzc2LDEwIEBACiAjZGVmaW5lCQlST1FfSUIxX1NUQVJUKHgpCQkJCSgoeCkgPDwgMCkKICNkZWZpbmUJCVJPUV9JQjJfU1RBUlQoeCkJCQkJKCh4KSA8PCA4KQogI2RlZmluZQlDUF9SQl9DTlRMCQkJCQkweEMxMDQKLSNkZWZpbmUJCVJCX0JVRlNaKHgpCQkJCQkoKHgpPDwwKQotI2RlZmluZQkJUkJfQkxLU1ooeCkJCQkJCSgoeCk8PDgpCi0jZGVmaW5lCQlSQl9OT19VUERBVEUJCQkJCSgxPDwyNykKLSNkZWZpbmUJCVJCX1JQVFJfV1JfRU5BCQkJCQkoMTw8MzEpCisjZGVmaW5lCQlSQl9CVUZTWih4KQkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJUkJfQkxLU1ooeCkJCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCVJCX05PX1VQREFURQkJCQkJKDEgPDwgMjcpCisjZGVmaW5lCQlSQl9SUFRSX1dSX0VOQQkJCQkJKDEgPDwgMzEpCiAjZGVmaW5lCQlCVUZfU1dBUF8zMkJJVAkJCQkJKDIgPDwgMTYpCiAjZGVmaW5lCUNQX1JCX1JQVFIJCQkJCTB4ODcwMAogI2RlZmluZQlDUF9SQl9SUFRSX0FERFIJCQkJCTB4QzEwQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnIGIvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnCmluZGV4IDA5YWVhNWYuLjcwZTYwYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9zdHViL0tjb25maWcKQEAgLTEsMTEgKzEsMTMgQEAKIGNvbmZpZyBTVFVCX1BPVUxTQk8KIAl0cmlzdGF0ZSAiSW50ZWwgR01BNTAwIFN0dWIgRHJpdmVyIgogCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBORVQgIyBmb3IgVEhFUk1BTAogCSMgUG91bHNibyBzdHViIGRlcGVuZHMgb24gQUNQSV9WSURFTyB3aGVuIEFDUEkgaXMgZW5hYmxlZAogCSMgYnV0IGZvciBzZWxlY3QgdG8gd29yaywgbmVlZCB0byBzZWxlY3QgQUNQSV9WSURFTydzIGRlcGVuZGVuY2llcywgaWNrCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaWYgQUNQSQogCXNlbGVjdCBJTlBVVCBpZiBBQ1BJCiAJc2VsZWN0IEFDUElfVklERU8gaWYgQUNQSQorCXNlbGVjdCBUSEVSTUFMIGlmIEFDUEkKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBoYXMgSW50ZWwgR01BNTAwCiAJICAoUG91bHNibykgaW50ZWdyYXRlZCBncmFwaGljcy4gSWYgTSBpcyBzZWxlY3RlZCwgdGhlIG1vZHVsZSB3aWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNzczZTQ4NC4uMjk3YmM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtMjM4LDEzICsyMzgsMTMgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIGs4dGVtcC4KIAogY29uZmlnIFNFTlNPUlNfSzEwVEVNUAotCXRyaXN0YXRlICJBTUQgUGhlbm9tL1NlbXByb24vVHVyaW9uL09wdGVyb24gdGVtcGVyYXR1cmUgc2Vuc29yIgorCXRyaXN0YXRlICJBTUQgRmFtaWx5IDEwaC8xMWgvMTJoLzE0aCB0ZW1wZXJhdHVyZSBzZW5zb3IiCiAJZGVwZW5kcyBvbiBYODYgJiYgUENJCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSB0ZW1wZXJhdHVyZQogCSAgc2Vuc29yKHMpIGluc2lkZSB5b3VyIENQVS4gU3VwcG9ydGVkIGFyZSBsYXRlciByZXZpc2lvbnMgb2YKLQkgIHRoZSBBTUQgRmFtaWx5IDEwaCBhbmQgYWxsIHJldmlzaW9ucyBvZiB0aGUgQU1EIEZhbWlseSAxMWgKLQkgIG1pY3JvYXJjaGl0ZWN0dXJlcy4KKwkgIHRoZSBBTUQgRmFtaWx5IDEwaCBhbmQgYWxsIHJldmlzaW9ucyBvZiB0aGUgQU1EIEZhbWlseSAxMWgsCisJICAxMmggKExsYW5vKSwgYW5kIDE0aCAoQnJhem9zKSBtaWNyb2FyY2hpdGVjdHVyZXMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGsxMHRlbXAuCkBAIC00NTUsMTMgKzQ1NSwxNCBAQAogCSAgY2FsbGVkIGp6NDc0MC1od21vbi4KIAogY29uZmlnIFNFTlNPUlNfSkM0MgotCXRyaXN0YXRlICJKRURFQyBKQzQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvcnMiCisJdHJpc3RhdGUgIkpFREVDIEpDNDIuNCBjb21wbGlhbnQgbWVtb3J5IG1vZHVsZSB0ZW1wZXJhdHVyZSBzZW5zb3JzIgogCWRlcGVuZHMgb24gSTJDCiAJaGVscAotCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIEplZGVjIEpDNDIuNCBjb21wbGlhbnQKLQkgIHRlbXBlcmF0dXJlIHNlbnNvcnMuIFN1cHBvcnQgd2lsbCBpbmNsdWRlLCBidXQgbm90IGJlIGxpbWl0ZWQgdG8sCi0JICBBRFQ3NDA4LCBDQVQzNFRTMDIsLCBDQVQ2MDk1LCBNQVg2NjA0LCBNQ1A5ODA1LCBNQ1A5ODI0MiwgTUNQOTgyNDMsCi0JICBNQ1A5ODQzLCBTRTk3LCBTRTk4LCBTVFRTNDI0LCBUU0UyMDAyQjMsIGFuZCBUUzMwMDBCMy4KKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUsIHlvdSBnZXQgc3VwcG9ydCBmb3IgSkVERUMgSkM0Mi40IGNvbXBsaWFudAorCSAgdGVtcGVyYXR1cmUgc2Vuc29ycywgd2hpY2ggYXJlIHVzZWQgb24gbWFueSBERFIzIG1lbW9yeSBtb2R1bGVzIGZvcgorCSAgbW9iaWxlIGRldmljZXMgYW5kIHNlcnZlcnMuICBTdXBwb3J0IHdpbGwgaW5jbHVkZSwgYnV0IG5vdCBiZSBsaW1pdGVkCisJICB0bywgQURUNzQwOCwgQ0FUMzRUUzAyLCBDQVQ2MDk1LCBNQVg2NjA0LCBNQ1A5ODA1LCBNQ1A5ODI0MiwgTUNQOTgyNDMsCisJICBNQ1A5ODQzLCBTRTk3LCBTRTk4LCBTVFRTNDI0KEUpLCBUU0UyMDAyQjMsIGFuZCBUUzMwMDBCMy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgamM0Mi4KQEAgLTU3NCw3ICs1NzUsNyBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODUKIAkgIHNlbnNvciBjaGlwcyBhbmQgY2xvbmVzOiBBRE0xMDI3LCBBRFQ3NDYzLCBBRFQ3NDY4LCBFTUM2RDEwMCwKLQkgIEVNQzZEMTAxIGFuZCBFTUM2RDEwMi4KKwkgIEVNQzZEMTAxLCBFTUM2RDEwMiwgYW5kIEVNQzZEMTAzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTg1LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZDc0MTQuYyBiL2RyaXZlcnMvaHdtb24vYWQ3NDE0LmMKaW5kZXggODZkODIyYS4uZDQ2YzBjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZDc0MTQuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkNzQxNC5jCkBAIC0yNDIsNiArMjQyLDcgQEAKIAl7ICJhZDc0MTQiLCAwIH0sCiAJe30KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWQ3NDE0X2lkKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkNzQxNF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWR0NzQxMS5jIGIvZHJpdmVycy9od21vbi9hZHQ3NDExLmMKaW5kZXggZjEzYzg0My4uNWNjM2UzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZHQ3NDExLmMKKysrIGIvZHJpdmVycy9od21vbi9hZHQ3NDExLmMKQEAgLTMzNCw2ICszMzQsNyBAQAogCXsgImFkdDc0MTEiLCAwIH0sCiAJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkdDc0MTFfaWQpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWR0NzQxMV9kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKaW5kZXggY2UwMzcyZjAuLjRjMDc0MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYworKysgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKQEAgLTEwNzIsNiArMTA3Miw3IEBACiAJCQlub2RlLT5zZGEuZGV2X2F0dHIuc2hvdyA9IGdycC0+c2hvdzsKIAkJCW5vZGUtPnNkYS5kZXZfYXR0ci5zdG9yZSA9IGdycC0+c3RvcmU7CiAJCQlhdHRyID0gJm5vZGUtPnNkYS5kZXZfYXR0ci5hdHRyOworCQkJc3lzZnNfYXR0cl9pbml0KGF0dHIpOwogCQkJYXR0ci0+bmFtZSA9IG5vZGUtPm5hbWU7CiAJCQlhdHRyLT5tb2RlID0gU19JUlVHTyB8IChncnAtPnN0b3JlID8gU19JV1VTUiA6IDApOwogCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCBhdHRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCmluZGV4IDJkNjhjZjMuLmI1ZTg5MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKKysrIGIvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGl4Zi5oPgpAQCAtMjIsNiArMjMsMjEgQEAKIAogI2RlZmluZSBBVEtfSElEICJBVEswMTEwIgogCitzdGF0aWMgYm9vbCBuZXdfaWY7Cittb2R1bGVfcGFyYW0obmV3X2lmLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobmV3X2lmLCAiT3ZlcnJpZGUgZGV0ZWN0aW9uIGhldXJpc3RpYyBhbmQgZm9yY2UgdGhlIHVzZSBvZiB0aGUgbmV3IEFUSzAxMTAgaW50ZXJmYWNlIik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRjb25zdCBhdGtfZm9yY2VfbmV3X2lmW10gPSB7CisJeworCQkvKiBPbGQgaW50ZXJmYWNlIGhhcyBicm9rZW4gTUNIIHRlbXAgbW9uaXRvcmluZyAqLworCQkuaWRlbnQgPSAiQXN1cyBTYWJlcnRvb3RoIFg1OCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiU0FCRVJUT09USCBYNTgiKQorCQl9CisJfSwKKwl7IH0KK307CisKIC8qIE1pbmltdW0gdGltZSBiZXR3ZWVuIHJlYWRpbmdzLCBlbmZvcmNlZCBpbiBvcmRlciB0byBhdm9pZAogICogaG9nZ2luZyB0aGUgQ1BVLgogICovCkBAIC0xMzAyLDcgKzEzMTgsOSBAQAogCSAqIGFuYWx5c2lzIG9mIG11bHRpcGxlIERTRFRzIGluZGljYXRlcyB0aGF0IHdoZW4gYm90aCBpbnRlcmZhY2VzCiAJICogYXJlIHByZXNlbnQgdGhlIG5ldyBvbmUgKEdHUlAvR0lUTSkgaXMgbm90IGZ1bmN0aW9uYWwuCiAJICovCi0JaWYgKGRhdGEtPnJ0bXBfaGFuZGxlICYmIGRhdGEtPnJ2bHRfaGFuZGxlICYmIGRhdGEtPnJmYW5faGFuZGxlKQorCWlmIChuZXdfaWYpCisJCWRldl9pbmZvKGRldiwgIk92ZXJyaWRpbmcgaW50ZXJmYWNlIGRldGVjdGlvblxuIik7CisJaWYgKGRhdGEtPnJ0bXBfaGFuZGxlICYmIGRhdGEtPnJ2bHRfaGFuZGxlICYmIGRhdGEtPnJmYW5faGFuZGxlICYmICFuZXdfaWYpCiAJCWRhdGEtPm9sZF9pbnRlcmZhY2UgPSB0cnVlOwogCWVsc2UgaWYgKGRhdGEtPmVudW1lcmF0ZV9oYW5kbGUgJiYgZGF0YS0+cmVhZF9oYW5kbGUgJiYKIAkJCWRhdGEtPndyaXRlX2hhbmRsZSkKQEAgLTE0MjAsNiArMTQzOCw5IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCisJaWYgKGRtaV9jaGVja19zeXN0ZW0oYXRrX2ZvcmNlX25ld19pZikpCisJCW5ld19pZiA9IHRydWU7CisKIAlyZXQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmF0a19kcml2ZXIpOwogCWlmIChyZXQpCiAJCXByX2luZm8oImFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlciBmYWlsZWQ6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9lbWMxNDAzLmMgYi9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYwppbmRleCA1ZGVhOWZhLi5jZDJhNmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYworKysgYi9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBlbWMxNDAzX2FkZHJlc3NfbGlzdFtdID0gewotCTB4MTgsIDB4MmEsIDB4NGMsIDB4NGQsIEkyQ19DTElFTlRfRU5ECisJMHgxOCwgMHgyOSwgMHg0YywgMHg0ZCwgSTJDX0NMSUVOVF9FTkQKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBlbWMxNDAzX2lkdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vamM0Mi5jIGIvZHJpdmVycy9od21vbi9qYzQyLmMKaW5kZXggMzQwZmM3OC4uOTM0OTkxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9qYzQyLmMKKysrIGIvZHJpdmVycy9od21vbi9qYzQyLmMKQEAgLTUzLDYgKzUzLDggQEAKIAogLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciBkZWZpbmVzICovCiAjZGVmaW5lIEpDNDJfQ0ZHX0NSSVRfT05MWQkoMSA8PCAyKQorI2RlZmluZSBKQzQyX0NGR19UQ1JJVF9MT0NLCSgxIDw8IDYpCisjZGVmaW5lIEpDNDJfQ0ZHX0VWRU5UX0xPQ0sJKDEgPDwgNykKICNkZWZpbmUgSkM0Ml9DRkdfU0hVVERPV04JKDEgPDwgOCkKICNkZWZpbmUgSkM0Ml9DRkdfSFlTVF9TSElGVAk5CiAjZGVmaW5lIEpDNDJfQ0ZHX0hZU1RfTUFTSwkweDAzCkBAIC0zMzIsNyArMzM0LDcgQEAKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBqYzQyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgZGlmZiwgaHlzdDsKIAlpbnQgZXJyOwogCWludCByZXQgPSBjb3VudDsKQEAgLTM4MCwxNCArMzgyLDE0IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywKIAkJICAgc2hvd190ZW1wX2lucHV0LCBOVUxMKTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lSVUdPLAogCQkgICBzaG93X3RlbXBfY3JpdCwgc2V0X3RlbXBfY3JpdCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVJVR08sCiAJCSAgIHNob3dfdGVtcF9taW4sIHNldF90ZW1wX21pbik7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVJVR08sCiAJCSAgIHNob3dfdGVtcF9tYXgsIHNldF90ZW1wX21heCk7CiAKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0X2h5c3QsIFNfSVdVU1IgfCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JUlVHTywKIAkJICAgc2hvd190ZW1wX2NyaXRfaHlzdCwgc2V0X3RlbXBfY3JpdF9oeXN0KTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHTywKIAkJICAgc2hvd190ZW1wX21heF9oeXN0LCBOVUxMKTsKQEAgLTQxMiw4ICs0MTQsMzEgQEAKIAlOVUxMCiB9OwogCitzdGF0aWMgbW9kZV90IGpjNDJfYXR0cmlidXRlX21vZGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGludCBjb25maWcgPSBkYXRhLT5jb25maWc7CisJYm9vbCByZWFkb25seTsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl90ZW1wMV9jcml0LmF0dHIpCisJCXJlYWRvbmx5ID0gY29uZmlnICYgSkM0Ml9DRkdfVENSSVRfTE9DSzsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl90ZW1wMV9taW4uYXR0ciB8fAorCQkgYXR0ciA9PSAmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIpCisJCXJlYWRvbmx5ID0gY29uZmlnICYgSkM0Ml9DRkdfRVZFTlRfTE9DSzsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl90ZW1wMV9jcml0X2h5c3QuYXR0cikKKwkJcmVhZG9ubHkgPSBjb25maWcgJiAoSkM0Ml9DRkdfRVZFTlRfTE9DSyB8IEpDNDJfQ0ZHX1RDUklUX0xPQ0spOworCWVsc2UKKwkJcmVhZG9ubHkgPSB0cnVlOworCisJcmV0dXJuIFNfSVJVR08gfCAocmVhZG9ubHkgPyAwIDogU19JV1VTUik7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGpjNDJfZ3JvdXAgPSB7CiAJLmF0dHJzID0gamM0Ml9hdHRyaWJ1dGVzLAorCS5pc192aXNpYmxlID0gamM0Ml9hdHRyaWJ1dGVfbW9kZSwKIH07CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9rMTB0ZW1wLmMgYi9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYwppbmRleCBkYTVhMjQwLi44MmJmNjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYworKysgYi9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBrMTB0ZW1wLmMgLSBBTUQgRmFtaWx5IDEwaC8xMWggcHJvY2Vzc29yIGhhcmR3YXJlIG1vbml0b3JpbmcKKyAqIGsxMHRlbXAuYyAtIEFNRCBGYW1pbHkgMTBoLzExaC8xMmgvMTRoIHByb2Nlc3NvciBoYXJkd2FyZSBtb25pdG9yaW5nCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA5IENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgogICoKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKLU1PRFVMRV9ERVNDUklQVElPTigiQU1EIEZhbWlseSAxMGgvMTFoIENQVSBjb3JlIHRlbXBlcmF0dXJlIG1vbml0b3IiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQU1EIEZhbWlseSAxMGgvMTFoLzEyaC8xNGggQ1BVIGNvcmUgdGVtcGVyYXR1cmUgbW9uaXRvciIpOwogTU9EVUxFX0FVVEhPUigiQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTIwOCw2ICsyMDgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGsxMHRlbXBfaWRfdGFibGVbXSA9IHsKIAl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTBIX05CX01JU0MpIH0sCiAJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzExSF9OQl9NSVNDKSB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DTkIxN0hfRjMpIH0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgazEwdGVtcF9pZF90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYwppbmRleCAxYjY3NGI3Li5kODA1ZThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKQEAgLTk1Nyw3ICs5NTcsNyBAQAogCiAJLyogYmFpbCBpZiB3ZSBkaWQgbm90IGdldCBhbiBJUlEgZnJvbSB0aGUgYnVzIGxheWVyICovCiAJaWYgKCFkZXYtPmlycSkgewotCQlwcl9lcnIoIk5vIElSUS4gRGlzYWJsaW5nIC9kZXYvZnJlZWZhbGxcbiIpOworCQlwcl9kZWJ1ZygiTm8gSVJRLiBEaXNhYmxpbmcgL2Rldi9mcmVlZmFsbFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTYzLmMgYi9kcml2ZXJzL2h3bW9uL2xtNjMuYwppbmRleCA3NzZhZWIzLi41MDhjYjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNjMuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNjMuYwpAQCAtOTgsNiArOTgsOSBAQAogICogdmFsdWUsIGl0IHVzZXMgc2lnbmVkIDgtYml0IHZhbHVlcyB3aXRoIExTQiA9IDEgZGVncmVlIENlbHNpdXMuCiAgKiBGb3IgcmVtb3RlIHRlbXBlcmF0dXJlLCBsb3cgYW5kIGhpZ2ggbGltaXRzLCBpdCB1c2VzIHNpZ25lZCAxMS1iaXQgdmFsdWVzCiAgKiB3aXRoIExTQiA9IDAuMTI1IGRlZ3JlZSBDZWxzaXVzLCBsZWZ0LWp1c3RpZmllZCBpbiAxNi1iaXQgcmVnaXN0ZXJzLgorICogRm9yIExNNjQgdGhlIGFjdHVhbCByZW1vdGUgZGlvZGUgdGVtcGVyYXR1cmUgaXMgMTYgZGVncmVlIENlbHNpdXMgaGlnaGVyCisgKiB0aGFuIHRoZSByZWdpc3RlciByZWFkaW5nLiBSZW1vdGUgdGVtcGVyYXR1cmUgc2V0cG9pbnRzIGhhdmUgdG8gYmUKKyAqIGFkYXB0ZWQgYWNjb3JkaW5nbHkuCiAgKi8KIAogI2RlZmluZSBGQU5fRlJPTV9SRUcocmVnKQkoKHJlZykgPT0gMHhGRkZDIHx8IChyZWcpID09IDAgPyAwIDogXApAQCAtMTY1LDYgKzE2OCw4IEBACiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7IC8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLworCWludCBraW5kOworCWludCB0ZW1wMl9vZmZzZXQ7CiAKIAkvKiByZWdpc3RlcnMgdmFsdWVzICovCiAJdTggY29uZmlnLCBjb25maWdfZmFuOwpAQCAtMjQ3LDE2ICsyNTIsMzQgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+Y29uZmlnX2ZhbiAmIDB4MjAgPyAxIDogMik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcDgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgY2hhciAqYnVmKQorLyoKKyAqIFRoZXJlIGFyZSA4Yml0IHJlZ2lzdGVycyBmb3IgYm90aCBsb2NhbCh0ZW1wMSkgYW5kIHJlbW90ZSh0ZW1wMikgc2Vuc29yLgorICogRm9yIHJlbW90ZSBzZW5zb3IgcmVnaXN0ZXJzIHRlbXAyX29mZnNldCBoYXMgdG8gYmUgY29uc2lkZXJlZCwKKyAqIGZvciBsb2NhbCBzZW5zb3IgaXQgbXVzdCBub3QuCisgKiBTbyB3ZSBuZWVkIHNlcGFyYXRlIDhiaXQgYWNjZXNzb3JzIGZvciBsb2NhbCBhbmQgcmVtb3RlIHNlbnNvci4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19sb2NhbF90ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkJY2hhciAqYnVmKQogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gbG02M191cGRhdGVfZGV2aWNlKGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSkpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZXRfdGVtcDgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZHVtbXksCi0JCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBzaG93X3JlbW90ZV90ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBsbTYzX2RhdGEgKmRhdGEgPSBsbTYzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDhfRlJPTV9SRUcoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKQorCQkgICAgICAgKyBkYXRhLT50ZW1wMl9vZmZzZXQpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfbG9jYWxfdGVtcDgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkdW1teSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBsbTYzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKQEAgLTI3NCw3ICsyOTcsOCBAQAogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gbG02M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVAxMV9GUk9NX1JFRyhkYXRhLT50ZW1wMTFbYXR0ci0+aW5kZXhdKSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVAxMV9GUk9NX1JFRyhkYXRhLT50ZW1wMTFbYXR0ci0+aW5kZXhdKQorCQkgICAgICAgKyBkYXRhLT50ZW1wMl9vZmZzZXQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzZXRfdGVtcDExKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCkBAIC0yOTQsNyArMzE4LDcgQEAKIAlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT50ZW1wMTFbbnJdID0gVEVNUDExX1RPX1JFRyh2YWwpOworCWRhdGEtPnRlbXAxMVtucl0gPSBURU1QMTFfVE9fUkVHKHZhbCAtIGRhdGEtPnRlbXAyX29mZnNldCk7CiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1sobnIgLSAxKSAqIDJdLAogCQkJCSAgZGF0YS0+dGVtcDExW25yXSA+PiA4KTsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnWyhuciAtIDEpICogMiArIDFdLApAQCAtMzEwLDYgKzMzNCw3IEBACiB7CiAJc3RydWN0IGxtNjNfZGF0YSAqZGF0YSA9IGxtNjNfdXBkYXRlX2RldmljZShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QOF9GUk9NX1JFRyhkYXRhLT50ZW1wOFsyXSkKKwkJICAgICAgICsgZGF0YS0+dGVtcDJfb2Zmc2V0CiAJCSAgICAgICAtIFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXAyX2NyaXRfaHlzdCkpOwogfQogCkBAIC0zMjQsNyArMzQ5LDcgQEAKIAlsb25nIGh5c3Q7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JaHlzdCA9IFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXA4WzJdKSAtIHZhbDsKKwloeXN0ID0gVEVNUDhfRlJPTV9SRUcoZGF0YS0+dGVtcDhbMl0pICsgZGF0YS0+dGVtcDJfb2Zmc2V0IC0gdmFsOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTYzX1JFR19SRU1PVEVfVENSSVRfSFlTVCwKIAkJCQkgIEhZU1RfVE9fUkVHKGh5c3QpKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTM1NSwxNiArMzgwLDIxIEBACiBzdGF0aWMgREVWSUNFX0FUVFIocHdtMSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtMSwgc2V0X3B3bTEpOwogc3RhdGljIERFVklDRV9BVFRSKHB3bTFfZW5hYmxlLCBTX0lSVUdPLCBzaG93X3B3bTFfZW5hYmxlLCBOVUxMKTsKIAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wOCwgTlVMTCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDgsCi0Jc2V0X3RlbXA4LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfbG9jYWxfdGVtcDgsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2xvY2FsX3RlbXA4LAorCXNldF9sb2NhbF90ZW1wOCwgMSk7CiAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcDExLCBOVUxMLCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wMTEsCiAJc2V0X3RlbXAxMSwgMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDExLAogCXNldF90ZW1wMTEsIDIpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0LCBTX0lSVUdPLCBzaG93X3RlbXA4LCBOVUxMLCAyKTsKKy8qCisgKiBPbiBMTTYzLCB0ZW1wMl9jcml0IGNhbiBiZSBzZXQgb25seSBvbmNlLCB3aGljaCBzaG91bGQgYmUgam9iCisgKiBvZiB0aGUgYm9vdGxvYWRlci4KKyAqLworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0LCBTX0lSVUdPLCBzaG93X3JlbW90ZV90ZW1wOCwKKwlOVUxMLCAyKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMl9jcml0X2h5c3QsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAyX2NyaXRfaHlzdCwKIAlzZXRfdGVtcDJfY3JpdF9oeXN0KTsKIApAQCAtNDc5LDcgKzUwOSwxMiBAQAogCWRhdGEtPnZhbGlkID0gMDsKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKLQkvKiBJbml0aWFsaXplIHRoZSBMTTYzIGNoaXAgKi8KKwkvKiBTZXQgdGhlIGRldmljZSB0eXBlICovCisJZGF0YS0+a2luZCA9IGlkLT5kcml2ZXJfZGF0YTsKKwlpZiAoZGF0YS0+a2luZCA9PSBsbTY0KQorCQlkYXRhLT50ZW1wMl9vZmZzZXQgPSAxNjAwMDsKKworCS8qIEluaXRpYWxpemUgY2hpcCAqLwogCWxtNjNfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTg1LmMgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwppbmRleCAxZTIyOTg0Li5kMmNjMjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwpAQCAtNDEsNyArNDEsNyBAQAogZW51bSBjaGlwcyB7CiAJYW55X2NoaXAsIGxtODViLCBsbTg1YywKIAlhZG0xMDI3LCBhZHQ3NDYzLCBhZHQ3NDY4LAotCWVtYzZkMTAwLCBlbWM2ZDEwMgorCWVtYzZkMTAwLCBlbWM2ZDEwMiwgZW1jNmQxMDMKIH07CiAKIC8qIFRoZSBMTTg1IHJlZ2lzdGVycyAqLwpAQCAtOTAsNiArOTAsOSBAQAogI2RlZmluZQlMTTg1X1ZFUlNURVBfRU1DNkQxMDBfQTAgICAgICAgIDB4NjAKICNkZWZpbmUJTE04NV9WRVJTVEVQX0VNQzZEMTAwX0ExICAgICAgICAweDYxCiAjZGVmaW5lCUxNODVfVkVSU1RFUF9FTUM2RDEwMgkJMHg2NQorI2RlZmluZQlMTTg1X1ZFUlNURVBfRU1DNkQxMDNfQTAJMHg2OAorI2RlZmluZQlMTTg1X1ZFUlNURVBfRU1DNkQxMDNfQTEJMHg2OQorI2RlZmluZQlMTTg1X1ZFUlNURVBfRU1DNkQxMDNTCQkweDZBCS8qIEFsc28ga25vd24gYXMgRU1DNkQxMDM6QTIgKi8KIAogI2RlZmluZQlMTTg1X1JFR19DT05GSUcJCQkweDQwCiAKQEAgLTM0OCw2ICszNTEsNyBAQAogCXsgImVtYzZkMTAwIiwgZW1jNmQxMDAgfSwKIAl7ICJlbWM2ZDEwMSIsIGVtYzZkMTAwIH0sCiAJeyAiZW1jNmQxMDIiLCBlbWM2ZDEwMiB9LAorCXsgImVtYzZkMTAzIiwgZW1jNmQxMDMgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG04NV9pZCk7CkBAIC0xMjUwLDYgKzEyNTQsMjAgQEAKIAkJY2FzZSBMTTg1X1ZFUlNURVBfRU1DNkQxMDI6CiAJCQl0eXBlX25hbWUgPSAiZW1jNmQxMDIiOwogCQkJYnJlYWs7CisJCWNhc2UgTE04NV9WRVJTVEVQX0VNQzZEMTAzX0EwOgorCQljYXNlIExNODVfVkVSU1RFUF9FTUM2RDEwM19BMToKKwkJCXR5cGVfbmFtZSA9ICJlbWM2ZDEwMyI7CisJCQlicmVhazsKKwkJLyoKKwkJICogUmVnaXN0ZXJzIGFwcGFyZW50bHkgbWlzc2luZyBpbiBFTUM2RDEwM1MvRU1DNkQxMDM6QTIKKwkJICogY29tcGFyZWQgdG8gRU1DNkQxMDM6QTAsIEVNQzZEMTAzOkExLCBhbmQgRU1DNkQxMDIKKwkJICogKGFjY29yZGluZyB0byB0aGUgZGF0YSBzaGVldHMpLCBidXQgdXNlZCB1bmNvbmRpdGlvbmFsbHkKKwkJICogaW4gdGhlIGRyaXZlcjogNjJbNTo3XSwgNkRbMDo3XSwgYW5kIDZFWzA6N10uCisJCSAqIFNvIHNraXAgRU1DNkQxMDNTIGZvciBub3cuCisJCWNhc2UgTE04NV9WRVJTVEVQX0VNQzZEMTAzUzoKKwkJCXR5cGVfbmFtZSA9ICJlbWM2ZDEwM3MiOworCQkJYnJlYWs7CisJCSAqLwogCQl9CiAJfSBlbHNlIHsKIAkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LApAQCAtMTI4Myw2ICsxMzAxLDcgQEAKIAljYXNlIGFkdDc0Njg6CiAJY2FzZSBlbWM2ZDEwMDoKIAljYXNlIGVtYzZkMTAyOgorCWNhc2UgZW1jNmQxMDM6CiAJCWRhdGEtPmZyZXFfbWFwID0gYWRtMTAyN19mcmVxX21hcDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE0NjgsNyArMTQ4Nyw3IEBACiAJCQkvKiBNb3JlIGFsYXJtIGJpdHMgKi8KIAkJCWRhdGEtPmFsYXJtcyB8PSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LAogCQkJCQkJRU1DNkQxMDBfUkVHX0FMQVJNMykgPDwgMTY7Ci0JCX0gZWxzZSBpZiAoZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMikgeworCQl9IGVsc2UgaWYgKGRhdGEtPnR5cGUgPT0gZW1jNmQxMDIgfHwgZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMykgewogCQkJLyogSGF2ZSB0byByZWFkIExTQiBiaXRzIGFmdGVyIHRoZSBNU0Igb25lcyBiZWNhdXNlCiAJCQkgICB0aGUgcmVhZGluZyBvZiB0aGUgTVNCIGJpdHMgaGFzIGZyb3plbiB0aGUKIAkJCSAgIExTQnMgKGJhY2t3YXJkIGZyb20gdGhlIEFETTEwMjcpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwppbmRleCBiNjA1ZmYzLi44MjlhMmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwpAQCAtODQ3LDExICs4NDcsMTUgQEAKIAkJCWRldl9lcnIoZGV2LT5kZXYsICJBcmJpdHJhdGlvbiBsb3N0XG4iKTsKIAkJCWVyciB8PSBPTUFQX0kyQ19TVEFUX0FMOwogCQl9CisJCS8qCisJCSAqIFByb0RCMDAxNzA1MjogQ2xlYXIgQVJEWSBiaXQgdHdpY2UKKwkJICovCiAJCWlmIChzdGF0ICYgKE9NQVBfSTJDX1NUQVRfQVJEWSB8IE9NQVBfSTJDX1NUQVRfTkFDSyB8CiAJCQkJCU9NQVBfSTJDX1NUQVRfQUwpKSB7CiAJCQlvbWFwX2kyY19hY2tfc3RhdChkZXYsIHN0YXQgJgogCQkJCShPTUFQX0kyQ19TVEFUX1JSRFkgfCBPTUFQX0kyQ19TVEFUX1JEUiB8Ci0JCQkJT01BUF9JMkNfU1RBVF9YUkRZIHwgT01BUF9JMkNfU1RBVF9YRFIpKTsKKwkJCQlPTUFQX0kyQ19TVEFUX1hSRFkgfCBPTUFQX0kyQ19TVEFUX1hEUiB8CisJCQkJT01BUF9JMkNfU1RBVF9BUkRZKSk7CiAJCQlvbWFwX2kyY19jb21wbGV0ZV9jbWQoZGV2LCBlcnIpOwogCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQl9CkBAIC0xMTM3LDEyICsxMTQxLDQxIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1VTUEVORAorc3RhdGljIGludCBvbWFwX2kyY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoIXBtX3J1bnRpbWVfc3VzcGVuZGVkKGRldikpCisJCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0gJiYgZGV2LT5idXMtPnBtLT5ydW50aW1lX3N1c3BlbmQpCisJCQlkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9pMmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoIXBtX3J1bnRpbWVfc3VzcGVuZGVkKGRldikpCisJCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0gJiYgZGV2LT5idXMtPnBtLT5ydW50aW1lX3Jlc3VtZSkKKwkJCWRldi0+YnVzLT5wbS0+cnVudGltZV9yZXN1bWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgb21hcF9pMmNfcG1fb3BzID0geworCS5zdXNwZW5kID0gb21hcF9pMmNfc3VzcGVuZCwKKwkucmVzdW1lID0gb21hcF9pMmNfcmVzdW1lLAorfTsKKyNkZWZpbmUgT01BUF9JMkNfUE1fT1BTICgmb21hcF9pMmNfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgT01BUF9JMkNfUE1fT1BTIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9tYXBfaTJjX3Byb2JlLAogCS5yZW1vdmUJCT0gb21hcF9pMmNfcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJvbWFwX2kyYyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkucG0JPSBPTUFQX0kyQ19QTV9PUFMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3R1MzAwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXN0dTMwMC5jCmluZGV4IDQ5NWJlNDUuLjI2NjEzNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3R1MzAwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHUzMDAuYwpAQCAtOTQyLDcgKzk0Miw3IEBACiAJYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkvKiBEREMgY2xhc3MgYnV0IGFjdHVhbGx5IG9mdGVuIHVzZWQgZm9yIG1vcmUgZ2VuZXJpYyBJMkMgKi8KIAlhZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19EREM7Ci0Jc3RybmNweShhZGFwLT5uYW1lLCAiU1QgTWljcm9lbGVjdHJvbmljcyBEREMgSTJDIGFkYXB0ZXIiLAorCXN0cmxjcHkoYWRhcC0+bmFtZSwgIlNUIE1pY3JvZWxlY3Ryb25pY3MgRERDIEkyQyBhZGFwdGVyIiwKIAkJc2l6ZW9mKGFkYXAtPm5hbWUpKTsKIAlhZGFwLT5uciA9IGJ1c19ucjsKIAlhZGFwLT5hbGdvID0gJnN0dTMwMF9hbGdvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYyBiL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMKaW5kZXggMWZhMDkxZS4uNGE1YzRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYworKysgYi9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxhc20vbXdhaXQuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CiAKICNkZWZpbmUgSU5URUxfSURMRV9WRVJTSU9OICIwLjQiCiAjZGVmaW5lIFBSRUZJWCAiaW50ZWxfaWRsZTogIgpAQCAtODUsNiArODYsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqY3B1aWRsZV9zdGF0ZV90YWJsZTsKIAogLyoKKyAqIEhhcmR3YXJlIEMtc3RhdGUgYXV0by1kZW1vdGlvbiBtYXkgbm90IGFsd2F5cyBiZSBvcHRpbWFsLgorICogSW5kaWNhdGUgd2hpY2ggZW5hYmxlIGJpdHMgdG8gY2xlYXIgaGVyZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBhdXRvX2RlbW90aW9uX2Rpc2FibGVfZmxhZ3M7CisKKy8qCiAgKiBTZXQgdGhpcyBmbGFnIGZvciBzdGF0ZXMgd2hlcmUgdGhlIEhXIGZsdXNoZXMgdGhlIFRMQiBmb3IgdXMKICAqIGFuZCBzbyB3ZSBkb24ndCBuZWVkIGNyb3NzLWNhbGxzIHRvIGtlZXAgaXQgY29uc2lzdGVudC4KICAqIElmIHRoaXMgZmxhZyBpcyBzZXQsIFNXIGZsdXNoZXMgdGhlIFRMQiwgc28gZXZlbiBpZiB0aGUKQEAgLTI4MSw2ICsyODgsMTUgQEAKIAkubm90aWZpZXJfY2FsbCA9IHNldHVwX2Jyb2FkY2FzdF9jcHVocF9ub3RpZnksCiB9OwogCitzdGF0aWMgdm9pZCBhdXRvX2RlbW90aW9uX2Rpc2FibGUodm9pZCAqZHVtbXkpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIG1zcl9iaXRzOworCisJcmRtc3JsKE1TUl9OSE1fU05CX1BLR19DU1RfQ0ZHX0NUTCwgbXNyX2JpdHMpOworCW1zcl9iaXRzICY9IH5hdXRvX2RlbW90aW9uX2Rpc2FibGVfZmxhZ3M7CisJd3Jtc3JsKE1TUl9OSE1fU05CX1BLR19DU1RfQ0ZHX0NUTCwgbXNyX2JpdHMpOworfQorCiAvKgogICogaW50ZWxfaWRsZV9wcm9iZSgpCiAgKi8KQEAgLTMyNCwxMSArMzQwLDE3IEBACiAJY2FzZSAweDI1OgkvKiBXZXN0bWVyZSAqLwogCWNhc2UgMHgyQzoJLyogV2VzdG1lcmUgKi8KIAkJY3B1aWRsZV9zdGF0ZV90YWJsZSA9IG5laGFsZW1fY3N0YXRlczsKKwkJYXV0b19kZW1vdGlvbl9kaXNhYmxlX2ZsYWdzID0KKwkJCShOSE1fQzFfQVVUT19ERU1PVEUgfCBOSE1fQzNfQVVUT19ERU1PVEUpOwogCQlicmVhazsKIAogCWNhc2UgMHgxQzoJLyogMjggLSBBdG9tIFByb2Nlc3NvciAqLworCQljcHVpZGxlX3N0YXRlX3RhYmxlID0gYXRvbV9jc3RhdGVzOworCQlicmVhazsKKwogCWNhc2UgMHgyNjoJLyogMzggLSBMaW5jcm9mdCBBdG9tIFByb2Nlc3NvciAqLwogCQljcHVpZGxlX3N0YXRlX3RhYmxlID0gYXRvbV9jc3RhdGVzOworCQlhdXRvX2RlbW90aW9uX2Rpc2FibGVfZmxhZ3MgPSBBVE1fTE5DX0M2X0FVVE9fREVNT1RFOwogCQlicmVhazsKIAogCWNhc2UgMHgyQToJLyogU05CICovCkBAIC00MzYsNiArNDU4LDggQEAKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJfQorCWlmIChhdXRvX2RlbW90aW9uX2Rpc2FibGVfZmxhZ3MpCisJCXNtcF9jYWxsX2Z1bmN0aW9uKGF1dG9fZGVtb3Rpb25fZGlzYWJsZSwgTlVMTCwgMSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCmluZGV4IGUzOGJlMWJjLi5mYmJmYTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKQEAgLTEwNzksNyArMTA3OSw3IEBACiAKIAlpYl91bnJlZ2lzdGVyX2V2ZW50X2hhbmRsZXIoJnNhX2Rldi0+ZXZlbnRfaGFuZGxlcik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtxdWV1ZShpYl93cSk7CiAKIAlmb3IgKGkgPSAwOyBpIDw9IHNhX2Rldi0+ZW5kX3BvcnQgLSBzYV9kZXYtPnN0YXJ0X3BvcnQ7ICsraSkgewogCQlpZiAocmRtYV9wb3J0X2dldF9saW5rX2xheWVyKGRldmljZSwgaSArIDEpID09IElCX0xJTktfTEFZRVJfSU5GSU5JQkFORCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCmluZGV4IGNhMTJhY2YuLmVjMWU5ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKQEAgLTYzNiw2ICs2MzYsMTYgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHVjbWFfY29weV9pd19yb3V0ZShzdHJ1Y3QgcmRtYV91Y21fcXVlcnlfcm91dGVfcmVzcCAqcmVzcCwKKwkJCSAgICAgICBzdHJ1Y3QgcmRtYV9yb3V0ZSAqcm91dGUpCit7CisJc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyOworCisJZGV2X2FkZHIgPSAmcm91dGUtPmFkZHIuZGV2X2FkZHI7CisJcmRtYV9hZGRyX2dldF9kZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZyZXNwLT5pYl9yb3V0ZVswXS5kZ2lkKTsKKwlyZG1hX2FkZHJfZ2V0X3NnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJnJlc3AtPmliX3JvdXRlWzBdLnNnaWQpOworfQorCiBzdGF0aWMgc3NpemVfdCB1Y21hX3F1ZXJ5X3JvdXRlKHN0cnVjdCB1Y21hX2ZpbGUgKmZpbGUsCiAJCQkJY29uc3QgY2hhciBfX3VzZXIgKmluYnVmLAogCQkJCWludCBpbl9sZW4sIGludCBvdXRfbGVuKQpAQCAtNjcwLDggKzY4MCwxMCBAQAogCiAJcmVzcC5ub2RlX2d1aWQgPSAoX19mb3JjZSBfX3U2NCkgY3R4LT5jbV9pZC0+ZGV2aWNlLT5ub2RlX2d1aWQ7CiAJcmVzcC5wb3J0X251bSA9IGN0eC0+Y21faWQtPnBvcnRfbnVtOwotCWlmIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChjdHgtPmNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSkgPT0gUkRNQV9UUkFOU1BPUlRfSUIpIHsKLQkJc3dpdGNoIChyZG1hX3BvcnRfZ2V0X2xpbmtfbGF5ZXIoY3R4LT5jbV9pZC0+ZGV2aWNlLCBjdHgtPmNtX2lkLT5wb3J0X251bSkpIHsKKwlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6CisJCXN3aXRjaCAocmRtYV9wb3J0X2dldF9saW5rX2xheWVyKGN0eC0+Y21faWQtPmRldmljZSwKKwkJCWN0eC0+Y21faWQtPnBvcnRfbnVtKSkgewogCQljYXNlIElCX0xJTktfTEFZRVJfSU5GSU5JQkFORDoKIAkJCXVjbWFfY29weV9pYl9yb3V0ZSgmcmVzcCwgJmN0eC0+Y21faWQtPnJvdXRlKTsKIAkJCWJyZWFrOwpAQCAtNjgxLDYgKzY5MywxMiBAQAogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJCX0KKwkJYnJlYWs7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JV0FSUDoKKwkJdWNtYV9jb3B5X2l3X3JvdXRlKCZyZXNwLCAmY3R4LT5jbV9pZC0+cm91dGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl92cS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmMKaW5kZXggOWNlNzgxOWIuLjJlYzcxNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl92cS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl92cS5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAlyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGMyX3ZxX3JlcSksIEdGUF9LRVJORUwpOwogCWlmIChyKSB7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnItPndhaXRfb2JqZWN0KTsKLQkJci0+cmVwbHlfbXNnID0gKHU2NCkgTlVMTDsKKwkJci0+cmVwbHlfbXNnID0gMDsKIAkJci0+ZXZlbnQgPSAwOwogCQlyLT5jbV9pZCA9IE5VTEw7CiAJCXItPnFwID0gTlVMTDsKQEAgLTEyMyw3ICsxMjMsNyBAQAogICovCiB2b2lkIHZxX3JlcV9mcmVlKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfdnFfcmVxICpyKQogewotCXItPnJlcGx5X21zZyA9ICh1NjQpIE5VTEw7CisJci0+cmVwbHlfbXNnID0gMDsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmci0+cmVmY250KSkgewogCQlrZnJlZShyKTsKIAl9CkBAIC0xNTEsNyArMTUxLDcgQEAKIHZvaWQgdnFfcmVxX3B1dChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3ZxX3JlcSAqcikKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmci0+cmVmY250KSkgewotCQlpZiAoci0+cmVwbHlfbXNnICE9ICh1NjQpIE5VTEwpCisJCWlmIChyLT5yZXBseV9tc2cgIT0gMCkKIAkJCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LAogCQkJCSAgICAgICAodm9pZCAqKSAodW5zaWduZWQgbG9uZykgci0+cmVwbHlfbXNnKTsKIAkJa2ZyZWUocik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCmluZGV4IDBkYzYyYjEuLjhiMDBlNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCkBAIC0zODAsNyArMzgwLDcgQEAKIAkJCQkJICAxNikpIHwgRldfV1JfRkxPV0lEKGVwLT5od3RpZCkpOwogCiAJZmxvd2MtPm1uZW12YWxbMF0ubW5lbW9uaWMgPSBGV19GTE9XQ19NTkVNX1BGTlZGTjsKLQlmbG93Yy0+bW5lbXZhbFswXS52YWwgPSBjcHVfdG9fYmUzMigwKTsKKwlmbG93Yy0+bW5lbXZhbFswXS52YWwgPSBjcHVfdG9fYmUzMihQQ0lfRlVOQyhlcC0+Y29tLmRldi0+cmRldi5sbGRpLnBkZXYtPmRldmZuKSA8PCA4KTsKIAlmbG93Yy0+bW5lbXZhbFsxXS5tbmVtb25pYyA9IEZXX0ZMT1dDX01ORU1fQ0g7CiAJZmxvd2MtPm1uZW12YWxbMV0udmFsID0gY3B1X3RvX2JlMzIoZXAtPnR4X2NoYW4pOwogCWZsb3djLT5tbmVtdmFsWzJdLm1uZW1vbmljID0gRldfRkxPV0NfTU5FTV9QT1JUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYwppbmRleCAyMDgwMDkwLi40ZjBiZTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJCVZfRldfUklfUkVTX1dSX0RDQUVOKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRENBQ1BVKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRkJNSU4oMikgfAotCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgzKSB8CisJCVZfRldfUklfUkVTX1dSX0ZCTUFYKDIpIHwKIAkJVl9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0goMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9FUVNJWkUoZXFzaXplKSk7CkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJVl9GV19SSV9SRVNfV1JfRENBRU4oMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FDUFUoMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9GQk1JTigyKSB8Ci0JCVZfRldfUklfUkVTX1dSX0ZCTUFYKDMpIHwKKwkJVl9GV19SSV9SRVNfV1JfRkJNQVgoMikgfAogCQlWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE8oMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSCgwKSB8CiAJCVZfRldfUklfUkVTX1dSX0VRU0laRShlcXNpemUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCmluZGV4IDhiNjA2ZmQuLjA4YzE5NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwpAQCAtMjYxMCw5ICsyNjEwLDExIEBACiAJCQkJCW5ldGlmX2NhcnJpZXJfb24obmVzdm5pYy0+bmV0ZGV2KTsKIAogCQkJCQlzcGluX2xvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKLQkJCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDApIHsKLQkJCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMTsKLQkJCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJCWlmIChuZXN2bmljLT5vZl9kZXZpY2VfcmVnaXN0ZXJlZCkgeworCQkJCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDApIHsKKwkJCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDE7CisJCQkJCQkJbmVzX3BvcnRfaWJldmVudChuZXN2bmljKTsKKwkJCQkJCX0KIAkJCQkJfQogCQkJCQlzcGluX3VubG9jaygmbmVzdm5pYy0+cG9ydF9pYmV2ZW50X2xvY2spOwogCQkJCX0KQEAgLTI2NDIsOSArMjY0NCwxMSBAQAogCQkJCQluZXRpZl9jYXJyaWVyX29mZihuZXN2bmljLT5uZXRkZXYpOwogCiAJCQkJCXNwaW5fbG9jaygmbmVzdm5pYy0+cG9ydF9pYmV2ZW50X2xvY2spOwotCQkJCQlpZiAobmVzZGV2LT5pd19zdGF0dXMgPT0gMSkgewotCQkJCQkJbmVzZGV2LT5pd19zdGF0dXMgPSAwOwotCQkJCQkJbmVzX3BvcnRfaWJldmVudChuZXN2bmljKTsKKwkJCQkJaWYgKG5lc3ZuaWMtPm9mX2RldmljZV9yZWdpc3RlcmVkKSB7CisJCQkJCQlpZiAobmVzZGV2LT5pd19zdGF0dXMgPT0gMSkgeworCQkJCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMDsKKwkJCQkJCQluZXNfcG9ydF9pYmV2ZW50KG5lc3ZuaWMpOworCQkJCQkJfQogCQkJCQl9CiAJCQkJCXNwaW5fdW5sb2NrKCZuZXN2bmljLT5wb3J0X2liZXZlbnRfbG9jayk7CiAJCQkJfQpAQCAtMjcwMyw5ICsyNzA3LDExIEBACiAJCQkJbmV0aWZfY2Fycmllcl9vbihuZXN2bmljLT5uZXRkZXYpOwogCiAJCQkJc3Bpbl9sb2NrKCZuZXN2bmljLT5wb3J0X2liZXZlbnRfbG9jayk7Ci0JCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDApIHsKLQkJCQkJbmVzZGV2LT5pd19zdGF0dXMgPSAxOwotCQkJCQluZXNfcG9ydF9pYmV2ZW50KG5lc3ZuaWMpOworCQkJCWlmIChuZXN2bmljLT5vZl9kZXZpY2VfcmVnaXN0ZXJlZCkgeworCQkJCQlpZiAobmVzZGV2LT5pd19zdGF0dXMgPT0gMCkgeworCQkJCQkJbmVzZGV2LT5pd19zdGF0dXMgPSAxOworCQkJCQkJbmVzX3BvcnRfaWJldmVudChuZXN2bmljKTsKKwkJCQkJfQogCQkJCX0KIAkJCQlzcGluX3VubG9jaygmbmVzdm5pYy0+cG9ydF9pYmV2ZW50X2xvY2spOwogCQkJfQpAQCAtMjcyMyw5ICsyNzI5LDExIEBACiAJCQkJbmV0aWZfY2Fycmllcl9vZmYobmVzdm5pYy0+bmV0ZGV2KTsKIAogCQkJCXNwaW5fbG9jaygmbmVzdm5pYy0+cG9ydF9pYmV2ZW50X2xvY2spOwotCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAxKSB7Ci0JCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMDsKLQkJCQkJbmVzX3BvcnRfaWJldmVudChuZXN2bmljKTsKKwkJCQlpZiAobmVzdm5pYy0+b2ZfZGV2aWNlX3JlZ2lzdGVyZWQpIHsKKwkJCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDEpIHsKKwkJCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMDsKKwkJCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJCX0KIAkJCQl9CiAJCQkJc3Bpbl91bmxvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYwppbmRleCA1MGNjZWIzLi5iMDE4MDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCkBAIC02MjMsNyArNjIzLDYgQEAKIAl1OCBpYm1hbGZ1c2VzbmFwOwogCXN0cnVjdCBxaWJfcXNmcF9kYXRhIHFzZnBfZGF0YTsKIAljaGFyIGVwbXNnYnVmWzE5Ml07IC8qIGZvciBwb3J0IGVycm9yIGludGVycnVwdCBtc2cgYnVmZmVyICovCi0JdTggYm91bmNlZDsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgewpAQCAtMTg4MSwyMyArMTg4MCw3IEBACiAJCSAgICBJQl9QSFlTUE9SVFNUQVRFX0RJU0FCTEVEKQogCQkJcWliX3NldF9pYl83MzIyX2xzdGF0ZShwcGQsIDAsCiAJCQkgICAgICAgUUxPR0lDX0lCX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSk7Ci0JCWVsc2UgewotCQkJdTMyIGxzdGF0ZTsKLQkJCS8qCi0JCQkgKiBXZSBuZWVkIHRoZSBjdXJyZW50IGxvZ2ljYWwgbGluayBzdGF0ZSBiZWZvcmUKLQkJCSAqIGxmbGFncyBhcmUgc2V0IGluIGhhbmRsZV9lX2lic3RhdHVzY2hhbmdlZC4KLQkJCSAqLwotCQkJbHN0YXRlID0gcWliXzczMjJfaWJsaW5rX3N0YXRlKGliY3MpOwotCi0JCQlpZiAoSVNfUU1IKGRkKSAmJiAhcHBkLT5jcHNwZWMtPmJvdW5jZWQgJiYKLQkJCSAgICBsdHN0YXRlID09IElCX1BIWVNQT1JUU1RBVEVfTElOS1VQICYmCi0JCQkgICAgKGxzdGF0ZSA+PSBJQl9QT1JUX0lOSVQgJiYKLQkJCQlsc3RhdGUgPD0gSUJfUE9SVF9BQ1RJVkUpKSB7Ci0JCQkJcHBkLT5jcHNwZWMtPmJvdW5jZWQgPSAxOwotCQkJCXFpYl83MzIyX3NldF9pYl9jZmcocHBkLCBRSUJfSUJfQ0ZHX0xTVEFURSwKLQkJCQkJSUJfTElOS0NNRF9ET1dOIHwgSUJfTElOS0lOSVRDTURfUE9MTCk7Ci0JCQl9Ci0KKwkJZWxzZQogCQkJLyoKIAkJCSAqIFNpbmNlIGdvaW5nIGludG8gYSByZWNvdmVyeSBzdGF0ZSBjYXVzZXMgdGhlIGxpbmsKIAkJCSAqIHN0YXRlIHRvIGdvIGRvd24gYW5kIHNpbmNlIHJlY292ZXJ5IGlzIHRyYW5zaXRvcnksCkBAIC0xOTExLDcgKzE4OTQsNiBAQAogCQkJICAgIGx0c3RhdGUgIT0gSUJfUEhZU1BPUlRTVEFURV9SRUNPVkVSWV9XQUlUUk1UICYmCiAJCQkgICAgbHRzdGF0ZSAhPSBJQl9QSFlTUE9SVFNUQVRFX1JFQ09WRVJZX0lETEUpCiAJCQkJcWliX2hhbmRsZV9lX2lic3RhdHVzY2hhbmdlZChwcGQsIGliY3MpOwotCQl9CiAJfQogCWlmICgqbXNnICYmIGlzZXJyKQogCQlxaWJfZGV2X3BvcnRlcnIoZGQsIHBwZC0+cG9ydCwgIiVzIGVycm9yXG4iLCBtc2cpOwpAQCAtMjM4MSw2ICsyMzYzLDExIEBACiAJcWliX3dyaXRlX2tyZWdfcG9ydChwcGQsIGtycF9yY3ZjdHJsLCBwcGQtPnBfcmN2Y3RybCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGQtPmNzcGVjLT5yY3Ztb2RfbG9jaywgZmxhZ3MpOwogCisJLyogSG9sZCB0aGUgbGluayBzdGF0ZSBtYWNoaW5lIGZvciBtZXp6IGJvYXJkcyAqLworCWlmIChJU19RTUgoZGQpIHx8IElTX1FNRShkZCkpCisJCXFpYl9zZXRfaWJfNzMyMl9sc3RhdGUocHBkLCAwLAorCQkJCSAgICAgICBRTE9HSUNfSUJfSUJDQ19MSU5LSU5JVENNRF9ESVNBQkxFKTsKKwogCS8qIEFsc28gZW5hYmxlIElCU1RBVFVTQ0hHIGludGVycnVwdC4gICovCiAJdmFsID0gcWliX3JlYWRfa3JlZ19wb3J0KHBwZCwga3JwX2Vycm1hc2spOwogCXFpYl93cml0ZV9rcmVnX3BvcnQocHBkLCBrcnBfZXJybWFzaywKQEAgLTU3MDIsNiArNTY4OSwxMSBAQAogCQkJCXBwZC0+Y3BzcGVjLT5oMV92YWwgPSBoMTsKIAkJCS8qIG5vdyBjaGFuZ2UgdGhlIElCQyBhbmQgc2VyZGVzLCBvdmVycmlkaW5nIGdlbmVyaWMgKi8KIAkJCWluaXRfdHhkZHNfdGFibGUocHBkLCAxKTsKKwkJCS8qIFJlLWVuYWJsZSB0aGUgcGh5c2ljYWwgc3RhdGUgbWFjaGluZSBvbiBtZXp6IGJvYXJkcworCQkJICogbm93IHRoYXQgdGhlIGNvcnJlY3Qgc2V0dGluZ3MgaGF2ZSBiZWVuIHNldC4gKi8KKwkJCWlmIChJU19RTUgoZGQpIHx8IElTX1FNRShkZCkpCisJCQkJcWliX3NldF9pYl83MzIyX2xzdGF0ZShwcGQsIDAsCisJCQkJCSAgICBRTE9HSUNfSUJfSUJDQ19MSU5LSU5JVENNRF9TTEVFUCk7CiAJCQlhbnkrKzsKIAkJfQogCQlpZiAoKm54dCA9PSAnXG4nKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcmMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3JjLmMKaW5kZXggODI0NTIzNy4uZWNhMGM0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcmMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9yYy5jCkBAIC0xMDA1LDcgKzEwMDUsOCBAQAogCSAqIHRoZXJlIGFyZSBzdGlsbCByZXF1ZXN0cyB0aGF0IGhhdmVuJ3QgYmVlbiBhY2tlZC4KIAkgKi8KIAlpZiAoKHBzbiAmIElCX0JUSF9SRVFfQUNLKSAmJiBxcC0+c19hY2tlZCAhPSBxcC0+c190YWlsICYmCi0JICAgICEocXAtPnNfZmxhZ3MgJiAoUUlCX1NfVElNRVIgfCBRSUJfU19XQUlUX1JOUiB8IFFJQl9TX1dBSVRfUFNOKSkpCisJICAgICEocXAtPnNfZmxhZ3MgJiAoUUlCX1NfVElNRVIgfCBRSUJfU19XQUlUX1JOUiB8IFFJQl9TX1dBSVRfUFNOKSkgJiYKKwkgICAgKGliX3FpYl9zdGF0ZV9vcHNbcXAtPnN0YXRlXSAmIFFJQl9QUk9DRVNTX1JFQ1ZfT0spKQogCQlzdGFydF90aW1lcihxcCk7CiAKIAl3aGlsZSAocXAtPnNfbGFzdCAhPSBxcC0+c19hY2tlZCkgewpAQCAtMTQzOSw2ICsxNDQwLDggQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCWlmICghKGliX3FpYl9zdGF0ZV9vcHNbcXAtPnN0YXRlXSAmIFFJQl9QUk9DRVNTX1JFQ1ZfT0spKQorCQlnb3RvIGFja19kb25lOwogCiAJLyogSWdub3JlIGludmFsaWQgcmVzcG9uc2VzLiAqLwogCWlmIChxaWJfY21wMjQocHNuLCBxcC0+c19uZXh0X3BzbikgPj0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwppbmRleCAyM2NmOGZjLi41YjhmNTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIAlldmVudC0+b3duZXIgPSBvd25lcjsKIAogCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5ub2RlLCAmZ2FtZXBvcnRfZXZlbnRfbGlzdCk7Ci0Jc2NoZWR1bGVfd29yaygmZ2FtZXBvcnRfZXZlbnRfd29yayk7CisJcXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgJmdhbWVwb3J0X2V2ZW50X3dvcmspOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FtZXBvcnRfZXZlbnRfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IDc5ODUxMTQuLjExOTA1YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTc1LDcgKzc1LDYgQEAKICAqIGRldi0+ZXZlbnRfbG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogICovCiBzdGF0aWMgdm9pZCBpbnB1dF9wYXNzX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJCSAgICAgc3RydWN0IGlucHV0X2hhbmRsZXIgKnNyY19oYW5kbGVyLAogCQkJICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqaGFuZGxlcjsKQEAgLTk0LDE1ICs5Myw2IEBACiAJCQkJY29udGludWU7CiAKIAkJCWhhbmRsZXIgPSBoYW5kbGUtPmhhbmRsZXI7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGlzIHRoZSBoYW5kbGVyIHRoYXQgaW5qZWN0ZWQgdGhpcwotCQkJICogcGFydGljdWxhciBldmVudCB3ZSB3YW50IHRvIHNraXAgaXQgdG8gYXZvaWQKLQkJCSAqIGZpbHRlcnMgZmlyaW5nIGFnYWluIGFuZCBhZ2Fpbi4KLQkJCSAqLwotCQkJaWYgKGhhbmRsZXIgPT0gc3JjX2hhbmRsZXIpCi0JCQkJY29udGludWU7Ci0KIAkJCWlmICghaGFuZGxlci0+ZmlsdGVyKSB7CiAJCQkJaWYgKGZpbHRlcmVkKQogCQkJCQlicmVhazsKQEAgLTEzMiw3ICsxMjIsNyBAQAogCWlmICh0ZXN0X2JpdChkZXYtPnJlcGVhdF9rZXksIGRldi0+a2V5KSAmJgogCSAgICBpc19ldmVudF9zdXBwb3J0ZWQoZGV2LT5yZXBlYXRfa2V5LCBkZXYtPmtleWJpdCwgS0VZX01BWCkpIHsKIAotCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgTlVMTCwgRVZfS0VZLCBkZXYtPnJlcGVhdF9rZXksIDIpOworCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfS0VZLCBkZXYtPnJlcGVhdF9rZXksIDIpOwogCiAJCWlmIChkZXYtPnN5bmMpIHsKIAkJCS8qCkBAIC0xNDEsNyArMTMxLDcgQEAKIAkJCSAqIE90aGVyd2lzZSBhc3N1bWUgdGhhdCB0aGUgZHJpdmVyIHdpbGwgc2VuZAogCQkJICogU1lOX1JFUE9SVCBvbmNlIGl0J3MgZG9uZS4KIAkJCSAqLwotCQkJaW5wdXRfcGFzc19ldmVudChkZXYsIE5VTEwsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7CisJCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKIAkJfQogCiAJCWlmIChkZXYtPnJlcFtSRVBfUEVSSU9EXSkKQEAgLTE3NCw3ICsxNjQsNiBAQAogI2RlZmluZSBJTlBVVF9QQVNTX1RPX0FMTAkoSU5QVVRfUEFTU19UT19IQU5ETEVSUyB8IElOUFVUX1BBU1NfVE9fREVWSUNFKQogCiBzdGF0aWMgaW50IGlucHV0X2hhbmRsZV9hYnNfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LAotCQkJCSAgc3RydWN0IGlucHV0X2hhbmRsZXIgKnNyY19oYW5kbGVyLAogCQkJCSAgdW5zaWduZWQgaW50IGNvZGUsIGludCAqcHZhbCkKIHsKIAlib29sIGlzX210X2V2ZW50OwpAQCAtMjE4LDE1ICsyMDcsMTMgQEAKIAkvKiBGbHVzaCBwZW5kaW5nICJzbG90IiBldmVudCAqLwogCWlmIChpc19tdF9ldmVudCAmJiBkZXYtPnNsb3QgIT0gaW5wdXRfYWJzX2dldF92YWwoZGV2LCBBQlNfTVRfU0xPVCkpIHsKIAkJaW5wdXRfYWJzX3NldF92YWwoZGV2LCBBQlNfTVRfU0xPVCwgZGV2LT5zbG90KTsKLQkJaW5wdXRfcGFzc19ldmVudChkZXYsIHNyY19oYW5kbGVyLAotCQkJCSBFVl9BQlMsIEFCU19NVF9TTE9ULCBkZXYtPnNsb3QpOworCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfQUJTLCBBQlNfTVRfU0xPVCwgZGV2LT5zbG90KTsKIAl9CiAKIAlyZXR1cm4gSU5QVVRfUEFTU19UT19IQU5ETEVSUzsKIH0KIAogc3RhdGljIHZvaWQgaW5wdXRfaGFuZGxlX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqc3JjX2hhbmRsZXIsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7CiAJaW50IGRpc3Bvc2l0aW9uID0gSU5QVVRfSUdOT1JFX0VWRU5UOwpAQCAtMjc5LDggKzI2Niw3IEBACiAKIAljYXNlIEVWX0FCUzoKIAkJaWYgKGlzX2V2ZW50X3N1cHBvcnRlZChjb2RlLCBkZXYtPmFic2JpdCwgQUJTX01BWCkpCi0JCQlkaXNwb3NpdGlvbiA9IGlucHV0X2hhbmRsZV9hYnNfZXZlbnQoZGV2LCBzcmNfaGFuZGxlciwKLQkJCQkJCQkgICAgIGNvZGUsICZ2YWx1ZSk7CisJCQlkaXNwb3NpdGlvbiA9IGlucHV0X2hhbmRsZV9hYnNfZXZlbnQoZGV2LCBjb2RlLCAmdmFsdWUpOwogCiAJCWJyZWFrOwogCkBAIC0zMzgsNyArMzI0LDcgQEAKIAkJZGV2LT5ldmVudChkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKIAogCWlmIChkaXNwb3NpdGlvbiAmIElOUFVUX1BBU1NfVE9fSEFORExFUlMpCi0JCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBzcmNfaGFuZGxlciwgdHlwZSwgY29kZSwgdmFsdWUpOworCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgdHlwZSwgY29kZSwgdmFsdWUpOwogfQogCiAvKioKQEAgLTM2Nyw3ICszNTMsNyBAQAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAkJYWRkX2lucHV0X3JhbmRvbW5lc3ModHlwZSwgY29kZSwgdmFsdWUpOwotCQlpbnB1dF9oYW5kbGVfZXZlbnQoZGV2LCBOVUxMLCB0eXBlLCBjb2RlLCB2YWx1ZSk7CisJCWlucHV0X2hhbmRsZV9ldmVudChkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAJfQogfQpAQCAtMzk3LDggKzM4Myw3IEBACiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJZ3JhYiA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmdyYWIpOwogCQlpZiAoIWdyYWIgfHwgZ3JhYiA9PSBoYW5kbGUpCi0JCQlpbnB1dF9oYW5kbGVfZXZlbnQoZGV2LCBoYW5kbGUtPmhhbmRsZXIsCi0JCQkJCSAgIHR5cGUsIGNvZGUsIHZhbHVlKTsKKwkJCWlucHV0X2hhbmRsZV9ldmVudChkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CkBAIC02MTEsMTAgKzU5NiwxMCBAQAogCQlmb3IgKGNvZGUgPSAwOyBjb2RlIDw9IEtFWV9NQVg7IGNvZGUrKykgewogCQkJaWYgKGlzX2V2ZW50X3N1cHBvcnRlZChjb2RlLCBkZXYtPmtleWJpdCwgS0VZX01BWCkgJiYKIAkJCSAgICBfX3Rlc3RfYW5kX2NsZWFyX2JpdChjb2RlLCBkZXYtPmtleSkpIHsKLQkJCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgTlVMTCwgRVZfS0VZLCBjb2RlLCAwKTsKKwkJCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfS0VZLCBjb2RlLCAwKTsKIAkJCX0KIAkJfQotCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgTlVMTCwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKKwkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7CiAJfQogfQogCkBAIC04ODksOSArODc0LDkgQEAKIAkgICAgIWlzX2V2ZW50X3N1cHBvcnRlZChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQsIEtFWV9NQVgpICYmCiAJICAgIF9fdGVzdF9hbmRfY2xlYXJfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleSkpIHsKIAotCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgTlVMTCwgRVZfS0VZLCBvbGRfa2V5Y29kZSwgMCk7CisJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBFVl9LRVksIG9sZF9rZXljb2RlLCAwKTsKIAkJaWYgKGRldi0+c3luYykKLQkJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBOVUxMLCBFVl9TWU4sIFNZTl9SRVBPUlQsIDEpOworCQkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7CiAJfQogCiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90ZWdyYS1rYmMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGVncmEta2JjLmMKaW5kZXggOTM5NDc2Ni4uOTljZTkwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90ZWdyYS1rYmMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RlZ3JhLWtiYy5jCkBAIC03MSw4ICs3MSw5IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGludCByZXBvbGxfZGx5OwogCXVuc2lnbmVkIGxvbmcgY3BfZGx5X2ppZmZpZXM7CisJYm9vbCB1c2VfZm5fbWFwOwogCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0JdW5zaWduZWQgc2hvcnQga2V5Y29kZVtLQkNfTUFYX0tFWV07CisJdW5zaWduZWQgc2hvcnQga2V5Y29kZVtLQkNfTUFYX0tFWSAqIDJdOwogCXVuc2lnbmVkIHNob3J0IGN1cnJlbnRfa2V5c1tLQkNfTUFYX0tQRU5UXTsKIAl1bnNpZ25lZCBpbnQgbnVtX3ByZXNzZWRfa2V5czsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKQEAgLTg2LDcgKzg3LDcgQEAKIAlLRVkoMCwgNSwgS0VZX1opLAogCUtFWSgwLCA3LCBLRVlfRk4pLAogCi0JS0VZKDEsIDcsIEtFWV9NRU5VKSwKKwlLRVkoMSwgNywgS0VZX0xFRlRNRVRBKSwKIAogCUtFWSgyLCA2LCBLRVlfUklHSFRBTFQpLAogCUtFWSgyLCA3LCBLRVlfTEVGVEFMVCksCkBAIC0xNzgsNiArMTc5LDQwIEBACiAJS0VZKDE1LCA1LCBLRVlfRjIpLAogCUtFWSgxNSwgNiwgS0VZX0NBUFNMT0NLKSwKIAlLRVkoMTUsIDcsIEtFWV9GNiksCisKKwkvKiBTb2Z0d2FyZSBIYW5kbGVkIEZ1bmN0aW9uIEtleXMgKi8KKwlLRVkoMjAsIDAsIEtFWV9LUDcpLAorCisJS0VZKDIxLCAwLCBLRVlfS1A5KSwKKwlLRVkoMjEsIDEsIEtFWV9LUDgpLAorCUtFWSgyMSwgMiwgS0VZX0tQNCksCisJS0VZKDIxLCA0LCBLRVlfS1AxKSwKKworCUtFWSgyMiwgMSwgS0VZX0tQU0xBU0gpLAorCUtFWSgyMiwgMiwgS0VZX0tQNiksCisJS0VZKDIyLCAzLCBLRVlfS1A1KSwKKwlLRVkoMjIsIDQsIEtFWV9LUDMpLAorCUtFWSgyMiwgNSwgS0VZX0tQMiksCisJS0VZKDIyLCA3LCBLRVlfS1AwKSwKKworCUtFWSgyNywgMSwgS0VZX0tQQVNURVJJU0spLAorCUtFWSgyNywgMywgS0VZX0tQTUlOVVMpLAorCUtFWSgyNywgNCwgS0VZX0tQUExVUyksCisJS0VZKDI3LCA1LCBLRVlfS1BET1QpLAorCisJS0VZKDI4LCA1LCBLRVlfVk9MVU1FVVApLAorCisJS0VZKDI5LCAzLCBLRVlfSE9NRSksCisJS0VZKDI5LCA0LCBLRVlfRU5EKSwKKwlLRVkoMjksIDUsIEtFWV9CUklHSFRORVNTRE9XTiksCisJS0VZKDI5LCA2LCBLRVlfVk9MVU1FRE9XTiksCisJS0VZKDI5LCA3LCBLRVlfQlJJR0hUTkVTU1VQKSwKKworCUtFWSgzMCwgMCwgS0VZX05VTUxPQ0spLAorCUtFWSgzMCwgMSwgS0VZX1NDUk9MTExPQ0spLAorCUtFWSgzMCwgMiwgS0VZX01VVEUpLAorCisJS0VZKDMxLCA0LCBLRVlfSEVMUCksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSB0ZWdyYV9rYmNfZGVmYXVsdF9rZXltYXBfZGF0YSA9IHsKQEAgLTIyNCw2ICsyNTksNyBAQAogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCBudW1fZG93biA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGZuX2tleXByZXNzID0gZmFsc2U7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgma2JjLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IEtCQ19NQVhfS1BFTlQ7IGkrKykgewpAQCAtMjM3LDExICsyNzMsMjggQEAKIAkJCQlNQVRSSVhfU0NBTl9DT0RFKHJvdywgY29sLCBLQkNfUk9XX1NISUZUKTsKIAogCQkJc2NhbmNvZGVzW251bV9kb3duXSA9IHNjYW5jb2RlOwotCQkJa2V5Y29kZXNbbnVtX2Rvd24rK10gPSBrYmMtPmtleWNvZGVbc2NhbmNvZGVdOworCQkJa2V5Y29kZXNbbnVtX2Rvd25dID0ga2JjLT5rZXljb2RlW3NjYW5jb2RlXTsKKwkJCS8qIElmIGRyaXZlciB1c2VzIEZuIG1hcCwgZG8gbm90IHJlcG9ydCB0aGUgRm4ga2V5LiAqLworCQkJaWYgKChrZXljb2Rlc1tudW1fZG93bl0gPT0gS0VZX0ZOKSAmJiBrYmMtPnVzZV9mbl9tYXApCisJCQkJZm5fa2V5cHJlc3MgPSB0cnVlOworCQkJZWxzZQorCQkJCW51bV9kb3duKys7CiAJCX0KIAogCQl2YWwgPj49IDg7CiAJfQorCisJLyoKKwkgKiBJZiB0aGUgcGxhdGZvcm0gdXNlcyBGbiBrZXltYXBzLCB0cmFuc2xhdGUga2V5cyBvbiBhIEZuIGtleXByZXNzLgorCSAqIEZ1bmN0aW9uIGtleWNvZGVzIGFyZSBLQkNfTUFYX0tFWSBhcGFydCBmcm9tIHRoZSBwbGFpbiBrZXljb2Rlcy4KKwkgKi8KKwlpZiAoZm5fa2V5cHJlc3MpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9kb3duOyBpKyspIHsKKwkJCXNjYW5jb2Rlc1tpXSArPSBLQkNfTUFYX0tFWTsKKwkJCWtleWNvZGVzW2ldID0ga2JjLT5rZXljb2RlW3NjYW5jb2Rlc1tpXV07CisJCX0KKwl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrYmMtPmxvY2ssIGZsYWdzKTsKIAogCXRlZ3JhX2tiY19yZXBvcnRfcmVsZWFzZWRfa2V5cyhrYmMtPmlkZXYsCkBAIC0zNTUsOCArNDA4LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgS0JDX01BWF9HUElPOyBpKyspIHsKIAkJdTMyIHJfc2hmdCA9IDUgKiAoaSAlIDYpOwogCQl1MzIgY19zaGZ0ID0gNCAqIChpICUgOCk7Ci0JCXUzMiByX21hc2sgPSAweDFmIDw8IHJfc2hpZnQ7Ci0JCXUzMiBjX21hc2sgPSAweDBmIDw8IGNfc2hpZnQ7CisJCXUzMiByX21hc2sgPSAweDFmIDw8IHJfc2hmdDsKKwkJdTMyIGNfbWFzayA9IDB4MGYgPDwgY19zaGZ0OwogCQl1MzIgcl9vZmZzID0gKGkgLyA2KSAqIDQgKyBLQkNfUk9XX0NGRzBfMDsKIAkJdTMyIGNfb2ZmcyA9IChpIC8gOCkgKiA0ICsgS0JDX0NPTF9DRkcwXzA7CiAJCXUzMiByb3dfY2ZnID0gcmVhZGwoa2JjLT5tbWlvICsgcl9vZmZzKTsKQEAgLTU5NCw4ICs2NDcsMTEgQEAKIAogCWlucHV0X2Rldi0+a2V5Y29kZSA9IGtiYy0+a2V5Y29kZTsKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKGtiYy0+a2V5Y29kZVswXSk7Ci0JaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShrYmMtPmtleWNvZGUpOworCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEtCQ19NQVhfS0VZOworCWlmIChwZGF0YS0+dXNlX2ZuX21hcCkKKwkJaW5wdXRfZGV2LT5rZXljb2RlbWF4ICo9IDI7CiAKKwlrYmMtPnVzZV9mbl9tYXAgPSBwZGF0YS0+dXNlX2ZuX21hcDsKIAlrZXltYXBfZGF0YSA9IHBkYXRhLT5rZXltYXBfZGF0YSA/OiAmdGVncmFfa2JjX2RlZmF1bHRfa2V5bWFwX2RhdGE7CiAJbWF0cml4X2tleXBhZF9idWlsZF9rZXltYXAoa2V5bWFwX2RhdGEsIEtCQ19ST1dfU0hJRlQsCiAJCQkJICAgaW5wdXRfZGV2LT5rZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYwppbmRleCA5ZGZkNmU1Li4xZjM4MzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKQEAgLTY5LDExICs2OSw3IEBACiAJfQogCiAJaWYgKHZhbHVlID4gMjAgJiYgdmFsdWUgPCAzMjc2NykKLSNpZm5kZWYgRlJFUQotCQljb3VudCA9IChpeHA0eHhfZ2V0X2JvYXJkX3RpY2tfcmF0ZSgpIC8gKHZhbHVlICogNCkpIC0gMTsKLSNlbHNlCi0JCWNvdW50ID0gKEZSRVEgLyAodmFsdWUgKiA0KSkgLSAxOwotI2VuZGlmCisJCWNvdW50ID0gKElYUDRYWF9USU1FUl9GUkVRIC8gKHZhbHVlICogNCkpIC0gMTsKIAogCWl4cDR4eF9zcGtyX2NvbnRyb2wocGluLCBjb3VudCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMKaW5kZXggMWY4ZTAxMC4uN2U2NGQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiAJLyogcmVxdWVzdCB0aGUgSVJRcyAqLwogCWVyciA9IHJlcXVlc3RfaXJxKGVuY29kZXItPmlycV9hLCAmcm90YXJ5X2VuY29kZXJfaXJxLAotCQkJICBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8IElPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCisJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCSAgRFJWX05BTUUsIGVuY29kZXIpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgSVJRICVkXG4iLApAQCAtMTg1LDcgKzE4NSw3IEBACiAJfQogCiAJZXJyID0gcmVxdWVzdF9pcnEoZW5jb2Rlci0+aXJxX2IsICZyb3RhcnlfZW5jb2Rlcl9pcnEsCi0JCQkgIElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKKwkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJICBEUlZfTkFNRSwgZW5jb2Rlcik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBkYTM5MmMyLi5hYTE4NmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTc1NSwyMyArNzU1LDI2IEBACiB7CiAJc3RydWN0IHN5bmFwdGljc19kYXRhICpwcml2ID0gcHNtb3VzZS0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEgb2xkX3ByaXYgPSAqcHJpdjsKKwlpbnQgcmV0cnkgPSAwOworCWludCBlcnJvcjsKIAotCXBzbW91c2VfcmVzZXQocHNtb3VzZSk7CisJZG8geworCQlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworCQllcnJvciA9IHN5bmFwdGljc19kZXRlY3QocHNtb3VzZSwgMCk7CisJfSB3aGlsZSAoZXJyb3IgJiYgKytyZXRyeSA8IDMpOwogCi0JaWYgKHN5bmFwdGljc19kZXRlY3QocHNtb3VzZSwgMCkpCisJaWYgKGVycm9yKQogCQlyZXR1cm4gLTE7CiAKKwlpZiAocmV0cnkgPiAxKQorCQlwcmludGsoS0VSTl9ERUJVRyAiU3luYXB0aWNzIHJlY29ubmVjdGVkIGFmdGVyICVkIHRyaWVzXG4iLAorCQkJcmV0cnkpOworCiAJaWYgKHN5bmFwdGljc19xdWVyeV9oYXJkd2FyZShwc21vdXNlKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBxdWVyeSBTeW5hcHRpY3MgaGFyZHdhcmUuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChvbGRfcHJpdi5pZGVudGl0eSAhPSBwcml2LT5pZGVudGl0eSB8fAotCSAgICBvbGRfcHJpdi5tb2RlbF9pZCAhPSBwcml2LT5tb2RlbF9pZCB8fAotCSAgICBvbGRfcHJpdi5jYXBhYmlsaXRpZXMgIT0gcHJpdi0+Y2FwYWJpbGl0aWVzIHx8Ci0JICAgIG9sZF9wcml2LmV4dF9jYXAgIT0gcHJpdi0+ZXh0X2NhcCkKLQkJcmV0dXJuIC0xOwotCiAJaWYgKHN5bmFwdGljc19zZXRfYWJzb2x1dGVfbW9kZShwc21vdXNlKSkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBpbml0aWFsaXplIFN5bmFwdGljcyBoYXJkd2FyZS5cbiIpOwogCQlyZXR1cm4gLTE7CkBAIC03ODIsNiArNzg1LDE5IEBACiAJCXJldHVybiAtMTsKIAl9CiAKKwlpZiAob2xkX3ByaXYuaWRlbnRpdHkgIT0gcHJpdi0+aWRlbnRpdHkgfHwKKwkgICAgb2xkX3ByaXYubW9kZWxfaWQgIT0gcHJpdi0+bW9kZWxfaWQgfHwKKwkgICAgb2xkX3ByaXYuY2FwYWJpbGl0aWVzICE9IHByaXYtPmNhcGFiaWxpdGllcyB8fAorCSAgICBvbGRfcHJpdi5leHRfY2FwICE9IHByaXYtPmV4dF9jYXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTeW5hcHRpY3MgaGFyZHdhcmUgYXBwZWFycyB0byBiZSBkaWZmZXJlbnQ6ICIKKwkJCSJpZCglbGQtJWxkKSwgbW9kZWwoJWxkLSVsZCksIGNhcHMoJWx4LSVseCksIGV4dCglbHgtJWx4KS5cbiIsCisJCQlvbGRfcHJpdi5pZGVudGl0eSwgcHJpdi0+aWRlbnRpdHksCisJCQlvbGRfcHJpdi5tb2RlbF9pZCwgcHJpdi0+bW9kZWxfaWQsCisJCQlvbGRfcHJpdi5jYXBhYmlsaXRpZXMsIHByaXYtPmNhcGFiaWxpdGllcywKKwkJCW9sZF9wcml2LmV4dF9jYXAsIHByaXYtPmV4dF9jYXApOworCQlyZXR1cm4gLTE7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oCmluZGV4IDI1ZTVkMDQuLjc0NTM5MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaApAQCAtNTEsNiArNTEsMjkgQEAKICNkZWZpbmUgU1lOX0VYVF9DQVBfUkVRVUVTVFMoYykJCSgoKGMpICYgMHg3MDAwMDApID4+IDIwKQogI2RlZmluZSBTWU5fQ0FQX01VTFRJX0JVVFRPTl9OTyhlYykJKCgoZWMpICYgMHgwMGYwMDApID4+IDEyKQogI2RlZmluZSBTWU5fQ0FQX1BST0RVQ1RfSUQoZWMpCQkoKChlYykgJiAweGZmMDAwMCkgPj4gMTYpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlc2NyaWJlcyByZXNwb25zZSBmb3IgdGhlIDB4MGMgcXVlcnkuCisgKgorICogYnl0ZQltYXNrCW5hbWUJCQltZWFuaW5nCisgKiAtLS0tCS0tLS0JLS0tLS0tLQkJCS0tLS0tLS0tLS0tLQorICogMQkweDAxCWFkanVzdGFibGUgdGhyZXNob2xkCWNhcGFjaXRpdmUgYnV0dG9uIHNlbnNpdGl2aXR5CisgKgkJCQkJY2FuIGJlIGFkanVzdGVkCisgKiAxCTB4MDIJcmVwb3J0IG1heAkJcXVlcnkgMHgwZCBnaXZlcyBtYXggY29vcmQgcmVwb3J0ZWQKKyAqIDEJMHgwNAljbGVhcnBhZAkJc2Vuc29yIGlzIENsZWFyUGFkIHByb2R1Y3QKKyAqIDEJMHgwOAlhZHZhbmNlZCBnZXN0dXJlCW5vdCBwYXJ0aWN1bGFybHkgbWVhbmluZ2Z1bAorICogMQkweDEwCWNsaWNrcGFkIGJpdCAwCQkxLWJ1dHRvbiBDbGlja1BhZAorICogMQkweDYwCW11bHRpZmluZ2VyIG1vZGUJaWRlbnRpZmllcyBmaXJtd2FyZSBmaW5nZXIgY291bnRpbmcKKyAqCQkJCQkobm90IHJlcG9ydGluZyEpIGFsZ29yaXRobS4KKyAqCQkJCQlOb3QgcGFydGljdWxhcmx5IG1lYW5pbmdmdWwKKyAqIDEJMHg4MCAgICBjb3ZlcmVkIHBhZAkJVyBjbGlwcGVkIHRvIDE0LCAxNSA9PSBwYWQgbW9zdGx5IGNvdmVyZWQKKyAqIDIJMHgwMSAgICBjbGlja3BhZCBiaXQgMQkJMi1idXR0b24gQ2xpY2tQYWQKKyAqIDIJMHgwMiAgICBkZWx1eGUgTEVEIGNvbnRyb2xzCXRvdWNocGFkIHN1cHBvcnQgTEVEIGNvbW1hbmRzCisgKgkJCQkJYWxhIG11bHRpbWVkaWEgY29udHJvbCBiYXIKKyAqIDIJMHgwNAlyZWR1Y2VkIGZpbHRlcmluZwlmaXJtd2FyZSBkb2VzIGxlc3MgZmlsdGVyaW5nIG9uCisgKgkJCQkJcG9zaXRpb24gZGF0YSwgZHJpdmVyIHNob3VsZCB3YXRjaAorICoJCQkJCWZvciBub2lzZS4KKyAqLwogI2RlZmluZSBTWU5fQ0FQX0NMSUNLUEFEKGV4MGMpCQkoKGV4MGMpICYgMHgxMDAwMDApIC8qIDEtYnV0dG9uIENsaWNrUGFkICovCiAjZGVmaW5lIFNZTl9DQVBfQ0xJQ0tQQUQyQlROKGV4MGMpCSgoZXgwYykgJiAweDAwMDEwMCkgLyogMi1idXR0b24gQ2xpY2tQYWQgKi8KICNkZWZpbmUgU1lOX0NBUF9NQVhfRElNRU5TSU9OUyhleDBjKQkoKGV4MGMpICYgMHgwMjAwMDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKaW5kZXggZGI1YjBiYy4uYmE3MDA1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtMTg4LDcgKzE4OCw4IEBACiAJa2ZyZWUoZXZlbnQpOwogfQogCi1zdGF0aWMgdm9pZCBzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhzdHJ1Y3Qgc2VyaW9fZXZlbnQgKmV2ZW50KQorc3RhdGljIHZvaWQgc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHModm9pZCAqb2JqZWN0LAorCQkJCQkgIGVudW0gc2VyaW9fZXZlbnRfdHlwZSB0eXBlKQogewogCXN0cnVjdCBzZXJpb19ldmVudCAqZSwgKm5leHQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE5NiwxMyArMTk3LDEzIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlcmlvX2V2ZW50X2xvY2ssIGZsYWdzKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuZXh0LCAmc2VyaW9fZXZlbnRfbGlzdCwgbm9kZSkgewotCQlpZiAoZXZlbnQtPm9iamVjdCA9PSBlLT5vYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBlLT5vYmplY3QpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGlzIGV2ZW50IGlzIG9mIGRpZmZlcmVudCB0eXBlIHdlIHNob3VsZCBub3QKIAkJCSAqIGxvb2sgZnVydGhlciAtIHdlIG9ubHkgc3VwcHJlc3MgZHVwbGljYXRlIGV2ZW50cwogCQkJICogdGhhdCB3ZXJlIHNlbnQgYmFjay10by1iYWNrLgogCQkJICovCi0JCQlpZiAoZXZlbnQtPnR5cGUgIT0gZS0+dHlwZSkKKwkJCWlmICh0eXBlICE9IGUtPnR5cGUpCiAJCQkJYnJlYWs7CiAKIAkJCWxpc3RfZGVsX2luaXQoJmUtPm5vZGUpOwpAQCAtMjQ1LDcgKzI0Niw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXNlcmlvX3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKGV2ZW50KTsKKwkJc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoZXZlbnQtPm9iamVjdCwgZXZlbnQtPnR5cGUpOwogCQlzZXJpb19mcmVlX2V2ZW50KGV2ZW50KTsKIAl9CiAKQEAgLTI5OCw3ICsyOTksNyBAQAogCWV2ZW50LT5vd25lciA9IG93bmVyOwogCiAJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPm5vZGUsICZzZXJpb19ldmVudF9saXN0KTsKLQlzY2hlZHVsZV93b3JrKCZzZXJpb19ldmVudF93b3JrKTsKKwlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmc2VyaW9fZXZlbnRfd29yayk7CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXJpb19ldmVudF9sb2NrLCBmbGFncyk7CkBAIC00MzYsMTAgKzQzNywxMiBAQAogCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAicmVzY2FuIiwgY291bnQpKSB7CiAJCXNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChzZXJpbyk7CiAJCXNlcmlvX2ZpbmRfZHJpdmVyKHNlcmlvKTsKKwkJc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoc2VyaW8sIFNFUklPX1JFU0NBTl9QT1JUKTsKIAl9IGVsc2UgaWYgKChkcnYgPSBkcml2ZXJfZmluZChidWYsICZzZXJpb19idXMpKSAhPSBOVUxMKSB7CiAJCXNlcmlvX2Rpc2Nvbm5lY3RfcG9ydChzZXJpbyk7CiAJCWVycm9yID0gc2VyaW9fYmluZF9kcml2ZXIoc2VyaW8sIHRvX3NlcmlvX2RyaXZlcihkcnYpKTsKIAkJcHV0X2RyaXZlcihkcnYpOworCQlzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhzZXJpbywgU0VSSU9fUkVTQ0FOX1BPUlQpOwogCX0gZWxzZSB7CiAJCWVycm9yID0gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCmluZGV4IGZjMzgxNDkuLmNmOGZiOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCkBAIC01MTksNyArNTE5LDcgQEAKIAkvKiBSZXRyaWV2ZSB0aGUgcGh5c2ljYWwgYW5kIGxvZ2ljYWwgc2l6ZSBmb3IgT0VNIGRldmljZXMgKi8KIAllcnJvciA9IHdhY29tX3JldHJpZXZlX2hpZF9kZXNjcmlwdG9yKGludGYsIGZlYXR1cmVzKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDI7CisJCWdvdG8gZmFpbDM7CiAKIAl3YWNvbV9zZXR1cF9kZXZpY2VfcXVpcmtzKGZlYXR1cmVzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCAxNGVhNTRiLi40YmYyMzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtOTQxLDI4ICs5NDEsMjkgQEAKIAlzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IGVycjsKIAotCS8qIFJFVklTSVQgd2hlbiB0aGUgaXJxIGNhbiBiZSB0cmlnZ2VyZWQgYWN0aXZlLWxvdywgb3IgaWYgZm9yIHNvbWUKKwkvKgorCSAqIFJFVklTSVQgd2hlbiB0aGUgaXJxIGNhbiBiZSB0cmlnZ2VyZWQgYWN0aXZlLWxvdywgb3IgaWYgZm9yIHNvbWUKIAkgKiByZWFzb24gdGhlIHRvdWNoc2NyZWVuIGlzbid0IGhvb2tlZCB1cCwgd2UgZG9uJ3QgbmVlZCB0byBhY2Nlc3MKIAkgKiB0aGUgcGVuZG93biBzdGF0ZS4KIAkgKi8KLQlpZiAoIXBkYXRhLT5nZXRfcGVuZG93bl9zdGF0ZSAmJiAhZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb19wZW5kb3duKSkgewotCQlkZXZfZXJyKCZzcGktPmRldiwgIm5vIGdldF9wZW5kb3duX3N0YXRlIG5vciBncGlvX3BlbmRvd24/XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJaWYgKHBkYXRhLT5nZXRfcGVuZG93bl9zdGF0ZSkgewogCQl0cy0+Z2V0X3BlbmRvd25fc3RhdGUgPSBwZGF0YS0+Z2V0X3BlbmRvd25fc3RhdGU7Ci0JCXJldHVybiAwOwotCX0KKwl9IGVsc2UgaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9fcGVuZG93bikpIHsKIAotCWVyciA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb19wZW5kb3duLCAiYWRzNzg0Nl9wZW5kb3duIik7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IHBlbmRvd24gR1BJTyVkXG4iLAotCQkJcGRhdGEtPmdwaW9fcGVuZG93bik7Ci0JCXJldHVybiBlcnI7Ci0JfQorCQllcnIgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9fcGVuZG93biwgImFkczc4NDZfcGVuZG93biIpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IHBlbmRvd24gR1BJTyVkXG4iLAorCQkJCXBkYXRhLT5ncGlvX3BlbmRvd24pOworCQkJcmV0dXJuIGVycjsKKwkJfQogCi0JdHMtPmdwaW9fcGVuZG93biA9IHBkYXRhLT5ncGlvX3BlbmRvd247CisJCXRzLT5ncGlvX3BlbmRvd24gPSBwZGF0YS0+Z3Bpb19wZW5kb3duOworCisJfSBlbHNlIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJubyBnZXRfcGVuZG93bl9zdGF0ZSBub3IgZ3Bpb19wZW5kb3duP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTM1Myw3ICsxMzU0LDcgQEAKICBlcnJfcHV0X3JlZ3VsYXRvcjoKIAlyZWd1bGF0b3JfcHV0KHRzLT5yZWcpOwogIGVycl9mcmVlX2dwaW86Ci0JaWYgKHRzLT5ncGlvX3BlbmRvd24gIT0gLTEpCisJaWYgKCF0cy0+Z2V0X3BlbmRvd25fc3RhdGUpCiAJCWdwaW9fZnJlZSh0cy0+Z3Bpb19wZW5kb3duKTsKICBlcnJfY2xlYW51cF9maWx0ZXI6CiAJaWYgKHRzLT5maWx0ZXJfY2xlYW51cCkKQEAgLTEzODMsOCArMTM4NCwxMyBAQAogCXJlZ3VsYXRvcl9kaXNhYmxlKHRzLT5yZWcpOwogCXJlZ3VsYXRvcl9wdXQodHMtPnJlZyk7CiAKLQlpZiAodHMtPmdwaW9fcGVuZG93biAhPSAtMSkKKwlpZiAoIXRzLT5nZXRfcGVuZG93bl9zdGF0ZSkgeworCQkvKgorCQkgKiBJZiB3ZSBhcmUgbm90IHVzaW5nIHNwZWNpYWxpemVkIHBlbmRvd24gbWV0aG9kIHdlIG11c3QKKwkJICogaGF2ZSBiZWVuIHJlbHlpbmcgb24gZ3BpbyB3ZSBzZXQgdXAgb3Vyc2VsdmVzLgorCQkgKi8KIAkJZ3Bpb19mcmVlKHRzLT5ncGlvX3BlbmRvd24pOworCX0KIAogCWlmICh0cy0+ZmlsdGVyX2NsZWFudXApCiAJCXRzLT5maWx0ZXJfY2xlYW51cCh0cy0+ZmlsdGVyX2RhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jCmluZGV4IDVjYjg0NDkuLmMxNDQxMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dhY29tX3c4MDAxLmMKQEAgLTUxLDYgKzUxLDEwIEBACiAjZGVmaW5lIFc4MDAxX1BLVExFTl9UUENDVEwJMTEJLyogY29udHJvbCBwYWNrZXQgKi8KICNkZWZpbmUgVzgwMDFfUEtUTEVOX1RPVUNIMkZHCTEzCiAKKy8qIHJlc29sdXRpb24gaW4gcG9pbnRzL21tICovCisjZGVmaW5lIFc4MDAxX1BFTl9SRVNPTFVUSU9OICAgIDEwMAorI2RlZmluZSBXODAwMV9UT1VDSF9SRVNPTFVUSU9OICAxMAorCiBzdHJ1Y3QgdzgwMDFfY29vcmQgewogCXU4IHJkeTsKIAl1OCB0c3c7CkBAIC0xOTgsNyArMjAyLDcgQEAKIAkJcXVlcnktPnkgPSAxMDI0OwogCQlpZiAocXVlcnktPnBhbmVsX3JlcykKIAkJCXF1ZXJ5LT54ID0gcXVlcnktPnkgPSAoMSA8PCBxdWVyeS0+cGFuZWxfcmVzKTsKLQkJcXVlcnktPnBhbmVsX3JlcyA9IDEwOworCQlxdWVyeS0+cGFuZWxfcmVzID0gVzgwMDFfVE9VQ0hfUkVTT0xVVElPTjsKIAl9CiB9CiAKQEAgLTM5NCw2ICszOTgsOCBAQAogCiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1gsIDAsIGNvb3JkLngsIDAsIDApOwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19ZLCAwLCBjb29yZC55LCAwLCAwKTsKKwkJaW5wdXRfYWJzX3NldF9yZXMoZGV2LCBBQlNfWCwgVzgwMDFfUEVOX1JFU09MVVRJT04pOworCQlpbnB1dF9hYnNfc2V0X3JlcyhkZXYsIEFCU19ZLCBXODAwMV9QRU5fUkVTT0xVVElPTik7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1BSRVNTVVJFLCAwLCBjb29yZC5wZW5fcHJlc3N1cmUsIDAsIDApOwogCQlpZiAoY29vcmQudGlsdF94ICYmIGNvb3JkLnRpbHRfeSkgewogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfVElMVF9YLCAwLCBjb29yZC50aWx0X3gsIDAsIDApOwpAQCAtNDE4LDE0ICs0MjQsMTcgQEAKIAkJdzgwMDEtPm1heF90b3VjaF94ID0gdG91Y2gueDsKIAkJdzgwMDEtPm1heF90b3VjaF95ID0gdG91Y2gueTsKIAotCQkvKiBzY2FsZSB0byBwZW4gbWF4aW11bSAqLwogCQlpZiAodzgwMDEtPm1heF9wZW5feCAmJiB3ODAwMS0+bWF4X3Blbl95KSB7CisJCQkvKiBpZiBwZW4gaXMgc3VwcG9ydGVkIHNjYWxlIHRvIHBlbiBtYXhpbXVtICovCiAJCQl0b3VjaC54ID0gdzgwMDEtPm1heF9wZW5feDsKIAkJCXRvdWNoLnkgPSB3ODAwMS0+bWF4X3Blbl95OworCQkJdG91Y2gucGFuZWxfcmVzID0gVzgwMDFfUEVOX1JFU09MVVRJT047CiAJCX0KIAogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19YLCAwLCB0b3VjaC54LCAwLCAwKTsKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWSwgMCwgdG91Y2gueSwgMCwgMCk7CisJCWlucHV0X2Fic19zZXRfcmVzKGRldiwgQUJTX1gsIHRvdWNoLnBhbmVsX3Jlcyk7CisJCWlucHV0X2Fic19zZXRfcmVzKGRldiwgQUJTX1ksIHRvdWNoLnBhbmVsX3Jlcyk7CiAKIAkJc3dpdGNoICh0b3VjaC5zZW5zb3JfaWQpIHsKIAkJY2FzZSAwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2lzdHJlYW0uYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pc3RyZWFtLmMKaW5kZXggMThmODc5OC4uN2JkNWJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2lzdHJlYW0uYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vaXN0cmVhbS5jCkBAIC02Miw3ICs2Miw3IEBACiAgIHN0cmVhbSBpbnRlcmZhY2UuCiAgIElmIHN5bmNocm9ub3VzIHNlcnZpY2Ugd2FzIHJlcXVlc3RlZCwgdGhlbiBmdW5jdGlvbgogICBkb2VzIHJldHVybiBhbW91bnQgb2YgZGF0YSB3cml0dGVuIHRvIHN0cmVhbS4KLSAgJ2ZpbmFsJyBkb2VzIGluZGljYXRlIHRoYXQgcGljZSBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4gaXMKKyAgJ2ZpbmFsJyBkb2VzIGluZGljYXRlIHRoYXQgcGllY2Ugb2YgZGF0YSB0byBiZSB3cml0dGVuIGlzCiAgIGZpbmFsIHBhcnQgb2YgZnJhbWUgKG5lY2Vzc2FyeSBvbmx5IGJ5IHN0cnVjdHVyZWQgZGF0YXRyYW5zZmVyKQogICByZXR1cm4gIDAgaWYgemVybyBsZW5naCBwYWNrZXQgd2FzIHdyaXR0ZW4KICAgcmV0dXJuIC0xIGlmIHN0cmVhbSBpcyBmdWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMKaW5kZXggMDg1ODc5MS4uY2ZmZjBjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDIuYwpAQCAtMTI0NywxMCArMTI0NywxMCBAQAogbDJfcHVsbF9pcXVldWUoc3RydWN0IEZzbUluc3QgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgUFN0YWNrICpzdCA9IGZpLT51c2VyZGF0YTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqb3NrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBMYXllcjIgKmwyID0gJnN0LT5sMjsKIAl1X2NoYXIgaGVhZGVyW01BWF9IRUFERVJfTEVOXTsKLQlpbnQgaTsKKwlpbnQgaSwgaGRyX3NwYWNlX25lZWRlZDsKIAlpbnQgdW5zaWduZWQgcDE7CiAJdV9sb25nIGZsYWdzOwogCkBAIC0xMjYxLDYgKzEyNjEsMTYgQEAKIAlpZiAoIXNrYikKIAkJcmV0dXJuOwogCisJaGRyX3NwYWNlX25lZWRlZCA9IGwyaGVhZGVyc2l6ZShsMiwgMCk7CisJaWYgKGhkcl9zcGFjZV9uZWVkZWQgPiBza2JfaGVhZHJvb20oc2tiKSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IgPSBza2I7CisKKwkJc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBoZHJfc3BhY2VfbmVlZGVkKTsKKwkJaWYgKCFza2IpIHsKKwkJCWRldl9rZnJlZV9za2Iob3JpZ19za2IpOworCQkJcmV0dXJuOworCQl9CisJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZsMi0+bG9jaywgZmxhZ3MpOwogCWlmKHRlc3RfYml0KEZMR19NT0QxMjgsICZsMi0+ZmxhZykpCiAJCXAxID0gKGwyLT52cyAtIGwyLT52YSkgJSAxMjg7CkBAIC0xMjg1LDE5ICsxMjk1LDcgQEAKIAkJbDItPnZzID0gKGwyLT52cyArIDEpICUgODsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDItPmxvY2ssIGZsYWdzKTsKLQlwMSA9IHNrYi0+ZGF0YSAtIHNrYi0+aGVhZDsKLQlpZiAocDEgPj0gaSkKLQkJbWVtY3B5KHNrYl9wdXNoKHNrYiwgaSksIGhlYWRlciwgaSk7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJImlzZGwyIHB1bGxfaXF1ZXVlIHNrYiBoZWFkZXIoJWQvJWQpIHRvbyBzaG9ydFxuIiwgaSwgcDEpOwotCQlvc2tiID0gc2tiOwotCQlza2IgPSBhbGxvY19za2Iob3NrYi0+bGVuICsgaSwgR0ZQX0FUT01JQyk7Ci0JCW1lbWNweShza2JfcHV0KHNrYiwgaSksIGhlYWRlciwgaSk7Ci0JCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEob3NrYiwKLQkJCQkJICBza2JfcHV0KHNrYiwgb3NrYi0+bGVuKSwgb3NrYi0+bGVuKTsKLQkJZGV2X2tmcmVlX3NrYihvc2tiKTsKLQl9CisJbWVtY3B5KHNrYl9wdXNoKHNrYiwgaSksIGhlYWRlciwgaSk7CiAJc3QtPmwyLmwybDEoc3QsIFBIX1BVTEwgfCBJTkRJQ0FUSU9OLCBza2IpOwogCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQUNLX1BFTkQsICZzdC0+bDIuZmxhZyk7CiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEZMR19UMjAwX1JVTiwgJnN0LT5sMi5mbGFnKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2RlZnMuaCBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmgKaW5kZXggNzI5ZGY0MC4uMThiODAxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2RlZnMuaAorKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fZGVmcy5oCkBAIC0yMjcsNyArMjI3LDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogaW0vZXhwb3J0ZWQgZnVuY3Rpb25zICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWV4dGVybiBjaGFyICpoeXNkbl9nZXRyZXYoY29uc3QgY2hhciAqKTsKIAogLyogaHlzZG5fcHJvY2NvbmYuYyAqLwogZXh0ZXJuIGludCBoeXNkbl9wcm9jY29uZl9pbml0KHZvaWQpOwkvKiBpbml0IHByb2MgY29uZmlnIGZpbGVzeXMgKi8KQEAgLTI1OSw3ICsyNTgsNiBAQAogCiAvKiBoeXNkbl9uZXQuYyAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCBoeW5ldF9lbmFibGU7IAotZXh0ZXJuIGNoYXIgKmh5c2RuX25ldF9yZXZpc2lvbjsKIGV4dGVybiBpbnQgaHlzZG5fbmV0X2NyZWF0ZShoeXNkbl9jYXJkICopOwkvKiBjcmVhdGUgYSBuZXcgbmV0IGRldmljZSAqLwogZXh0ZXJuIGludCBoeXNkbl9uZXRfcmVsZWFzZShoeXNkbl9jYXJkICopOwkvKiBkZWxldGUgdGhlIGRldmljZSAqLwogZXh0ZXJuIGNoYXIgKmh5c2RuX25ldF9nZXRuYW1lKGh5c2RuX2NhcmQgKik7CS8qIGdldCBuYW1lIG9mIG5ldCBpbnRlcmZhY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCmluZGV4IGI3Y2M1YzIuLjBhYjQyYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2luaXQuYwpAQCAtMzYsNyArMzYsNiBAQAogTU9EVUxFX0FVVEhPUigiV2VybmVyIENvcm5lbGl1cyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgY2hhciAqaHlzZG5faW5pdF9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuNi42LjYgJCI7CiBzdGF0aWMgaW50IGNhcmRtYXg7CQkvKiBudW1iZXIgb2YgZm91bmQgY2FyZHMgKi8KIGh5c2RuX2NhcmQgKmNhcmRfcm9vdCA9IE5VTEw7CS8qIHBvaW50ZXIgdG8gZmlyc3QgY2FyZCAqLwogc3RhdGljIGh5c2RuX2NhcmQgKmNhcmRfbGFzdCA9IE5VTEw7CS8qIHBvaW50ZXIgdG8gZmlyc3QgY2FyZCAqLwpAQCAtNDksMjUgKzQ4LDYgQEAKIC8qIEFkZGl0aW9uYWxseSBuZXdlciB2ZXJzaW9ucyBtYXkgYmUgYWN0aXZhdGVkIHdpdGhvdXQgcmVib290aW5nLiAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBleHRyYWN0IHJldmlzaW9uIG51bWJlciBmcm9tIHN0cmluZyBmb3IgbG9nIG91dHB1dCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWNoYXIgKgotaHlzZG5fZ2V0cmV2KGNvbnN0IGNoYXIgKnJldmlzaW9uKQotewotCWNoYXIgKnJldjsKLQljaGFyICpwOwotCi0JaWYgKChwID0gc3RyY2hyKHJldmlzaW9uLCAnOicpKSkgewotCQlyZXYgPSBwICsgMjsKLQkJcCA9IHN0cmNocihyZXYsICckJyk7Ci0JCSotLXAgPSAwOwotCX0gZWxzZQotCQlyZXYgPSAiPz8/IjsKLQlyZXR1cm4gcmV2OwotfQotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogaW5pdF9tb2R1bGUgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRlZCB0byBkbyBhbGwgbmVjZXNzYXJ5ICovCiAvKiB0aGluZ3MgbGlrZSBhdXRvZGV0ZWN0Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE3NSwxMyArMTU1LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBoeXNkbl9pbml0KHZvaWQpCiB7Ci0JY2hhciB0bXBbNTBdOwogCWludCByYzsKIAotCXN0cmNweSh0bXAsIGh5c2RuX2luaXRfcmV2aXNpb24pOwotCXByaW50ayhLRVJOX05PVElDRSAiSFlTRE46IG1vZHVsZSBSZXY6ICVzIGxvYWRlZFxuIiwgaHlzZG5fZ2V0cmV2KHRtcCkpOwotCXN0cmNweSh0bXAsIGh5c2RuX25ldF9yZXZpc2lvbik7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJIWVNETjogbmV0d29yayBpbnRlcmZhY2UgUmV2OiAlcyBcbiIsIGh5c2RuX2dldHJldih0bXApKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkhZU0ROOiBtb2R1bGUgbG9hZGVkXG4iKTsKIAogCXJjID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaHlzZG5fcGNpX2RyaXZlcik7CiAJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCmluZGV4IGZlZWM4ZDguLjExZjJjY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKQEAgLTI2LDkgKzI2LDYgQEAKIHVuc2lnbmVkIGludCBoeW5ldF9lbmFibGUgPSAweGZmZmZmZmZmOyAKIG1vZHVsZV9wYXJhbShoeW5ldF9lbmFibGUsIHVpbnQsIDApOwogCi0vKiBzdG9yZSB0aGUgYWN0dWFsIHZlcnNpb24gZm9yIGxvZyByZXBvcnRpbmcgKi8KLWNoYXIgKmh5c2RuX25ldF9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuOC42LjQgJCI7Ci0KICNkZWZpbmUgTUFYX1NLQl9CVUZGRVJTIDIwCS8qIG51bWJlciBvZiBidWZmZXJzIGZvciBrZWVwaW5nIFRYLWRhdGEgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jCmluZGV4IDk2YjNlMzkuLjVmZTgzYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiaHlzZG5fZGVmcy5oIgogCiBzdGF0aWMgREVGSU5FX01VVEVYKGh5c2RuX2NvbmZfbXV0ZXgpOwotc3RhdGljIGNoYXIgKmh5c2RuX3Byb2Njb25mX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS44LjYuNCAkIjsKIAogI2RlZmluZSBJTkZPX09VVF9MRU4gODAJCS8qIGxlbmd0aCBvZiBpbmZvIGxpbmUgaW5jbHVkaW5nIGxmICovCiAKQEAgLTQwNCw3ICs0MDMsNyBAQAogCQljYXJkID0gY2FyZC0+bmV4dDsJLyogbmV4dCBlbnRyeSAqLwogCX0KIAotCXByaW50ayhLRVJOX05PVElDRSAiSFlTRE46IHByb2NmcyBSZXYuICVzIGluaXRpYWxpc2VkXG4iLCBoeXNkbl9nZXRyZXYoaHlzZG5fcHJvY2NvbmZfcmV2aXNpb24pKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkhZU0ROOiBwcm9jZnMgaW5pdGlhbGlzZWRcbiIpOwogCXJldHVybiAoMCk7CiB9CQkJCS8qIGh5c2RuX3Byb2Njb25mX2luaXQgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2ljbi9pY24uYyBiL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMKaW5kZXggZjJiNWJhYi4uMWYzNTViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2ljbi9pY24uYworKysgYi9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jCkBAIC0xNjI3LDcgKzE2MjcsNyBAQAogc3RhdGljIGludCBfX2luaXQgaWNuX2luaXQodm9pZCkKIHsKIAljaGFyICpwOwotCWNoYXIgcmV2WzIwXTsKKwljaGFyIHJldlsyMV07CiAKIAltZW1zZXQoJmRldiwgMCwgc2l6ZW9mKGljbl9kZXYpKTsKIAlkZXYubWVtYWRkciA9IChtZW1iYXNlICYgMHgwZmZjMDAwKTsKQEAgLTE2MzgsNiArMTYzOCw3IEBACiAKIAlpZiAoKHAgPSBzdHJjaHIocmV2aXNpb24sICc6JykpKSB7CiAJCXN0cm5jcHkocmV2LCBwICsgMSwgMjApOworCQlyZXZbMjBdID0gJ1wwJzsKIAkJcCA9IHN0cmNocihyZXYsICckJyk7CiAJCWlmIChwKQogCQkJKnAgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuYyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKaW5kZXggOGEyZjc2Ny4uMGVkN2Y2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0yMTYsNyArMjE2LDYgQEAKIAogCWlmIChtZF9jaGVja19ub19iaXRtYXAobWRkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmbWRkZXYtPnF1ZXVlLT5fX3F1ZXVlX2xvY2s7CiAJY29uZiA9IGxpbmVhcl9jb25mKG1kZGV2LCBtZGRldi0+cmFpZF9kaXNrcyk7CiAKIAlpZiAoIWNvbmYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggYjc2Y2ZjOC4uODE4MzEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMjg3LDYgKzI4Nyw3IEBACiAJbWRkZXZfdCAqbWRkZXYgPSBxLT5xdWV1ZWRhdGE7CiAJaW50IHJ2OwogCWludCBjcHU7CisJdW5zaWduZWQgaW50IHNlY3RvcnM7CiAKIAlpZiAobWRkZXYgPT0gTlVMTCB8fCBtZGRldi0+cGVycyA9PSBOVUxMCiAJICAgIHx8ICFtZGRldi0+cmVhZHkpIHsKQEAgLTMxMSwxMiArMzEyLDE2IEBACiAJYXRvbWljX2luYygmbWRkZXYtPmFjdGl2ZV9pbyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKKwkvKgorCSAqIHNhdmUgdGhlIHNlY3RvcnMgbm93IHNpbmNlIG91ciBiaW8gY2FuCisJICogZ28gYXdheSBpbnNpZGUgbWFrZV9yZXF1ZXN0CisJICovCisJc2VjdG9ycyA9IGJpb19zZWN0b3JzKGJpbyk7CiAJcnYgPSBtZGRldi0+cGVycy0+bWFrZV9yZXF1ZXN0KG1kZGV2LCBiaW8pOwogCiAJY3B1ID0gcGFydF9zdGF0X2xvY2soKTsKIAlwYXJ0X3N0YXRfaW5jKGNwdSwgJm1kZGV2LT5nZW5kaXNrLT5wYXJ0MCwgaW9zW3J3XSk7Ci0JcGFydF9zdGF0X2FkZChjcHUsICZtZGRldi0+Z2VuZGlzay0+cGFydDAsIHNlY3RvcnNbcnddLAotCQkgICAgICBiaW9fc2VjdG9ycyhiaW8pKTsKKwlwYXJ0X3N0YXRfYWRkKGNwdSwgJm1kZGV2LT5nZW5kaXNrLT5wYXJ0MCwgc2VjdG9yc1tyd10sIHNlY3RvcnMpOwogCXBhcnRfc3RhdF91bmxvY2soKTsKIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtZGRldi0+YWN0aXZlX2lvKSAmJiBtZGRldi0+c3VzcGVuZGVkKQpAQCAtNTQ4LDYgKzU1Myw5IEBACiB7CiAJbWRkZXZfdCAqbWRkZXYsICpuZXcgPSBOVUxMOwogCisJaWYgKHVuaXQgJiYgTUFKT1IodW5pdCkgIT0gTURfTUFKT1IpCisJCXVuaXQgJj0gfigoMTw8TWRwTWlub3JTaGlmdCktMSk7CisKICByZXRyeToKIAlzcGluX2xvY2soJmFsbF9tZGRldnNfbG9jayk7CiAKQEAgLTE5NDcsOCArMTk1NSw2IEBACiAJCQlfX2JkZXZuYW1lKGRldiwgYikpOwogCQlyZXR1cm4gUFRSX0VSUihiZGV2KTsKIAl9Ci0JaWYgKCFzaGFyZWQpCi0JCXNldF9iaXQoQWxsUmVzZXJ2ZWQsICZyZGV2LT5mbGFncyk7CiAJcmRldi0+YmRldiA9IGJkZXY7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTI0NjUsNiArMjQ3MSw5IEBACiAJCWlmIChyZGV2LT5yYWlkX2Rpc2sgIT0gLTEpCiAJCQlyZXR1cm4gLUVCVVNZOwogCisJCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SVU5OSU5HLCAmcmRldi0+bWRkZXYtPnJlY292ZXJ5KSkKKwkJCXJldHVybiAtRUJVU1k7CisKIAkJaWYgKHJkZXYtPm1kZGV2LT5wZXJzLT5ob3RfYWRkX2Rpc2sgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yNjEwLDEyICsyNjE5LDExIEBACiAKIAkJCW1kZGV2X2xvY2sobWRkZXYpOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2MiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCi0JCQkJaWYgKHRlc3RfYml0KEFsbFJlc2VydmVkLCAmcmRldjItPmZsYWdzKSB8fAotCQkJCSAgICAocmRldi0+YmRldiA9PSByZGV2Mi0+YmRldiAmJgotCQkJCSAgICAgcmRldiAhPSByZGV2MiAmJgotCQkJCSAgICAgb3ZlcmxhcHMocmRldi0+ZGF0YV9vZmZzZXQsIHJkZXYtPnNlY3RvcnMsCi0JCQkJCSAgICAgIHJkZXYyLT5kYXRhX29mZnNldCwKLQkJCQkJICAgICAgcmRldjItPnNlY3RvcnMpKSkgeworCQkJCWlmIChyZGV2LT5iZGV2ID09IHJkZXYyLT5iZGV2ICYmCisJCQkJICAgIHJkZXYgIT0gcmRldjIgJiYKKwkJCQkgICAgb3ZlcmxhcHMocmRldi0+ZGF0YV9vZmZzZXQsIHJkZXYtPnNlY3RvcnMsCisJCQkJCSAgICAgcmRldjItPmRhdGFfb2Zmc2V0LAorCQkJCQkgICAgIHJkZXYyLT5zZWN0b3JzKSkgewogCQkJCQlvdmVybGFwID0gMTsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNDEzMywxMCArNDE0MSwxMCBAQAogCX0KIAogCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gc2VjdG9yczsKLQlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKLQlpZiAobWRkZXYtPnBlcnMpCisJaWYgKG1kZGV2LT5wZXJzKSB7CisJCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCQlyZXZhbGlkYXRlX2Rpc2sobWRkZXYtPmdlbmRpc2spOwotCisJfQogCXJldHVybiBsZW47CiB9CiAKQEAgLTQ2MTksNiArNDYyNyw3IEBACiAJfQogCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCXJldmFsaWRhdGVfZGlzayhtZGRldi0+Z2VuZGlzayk7CisJbWRkZXYtPmNoYW5nZWQgPSAxOwogCWtvYmplY3RfdWV2ZW50KCZkaXNrX3RvX2RldihtZGRldi0+Z2VuZGlzayktPmtvYmosIEtPQkpfQ0hBTkdFKTsKIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtNDcwNyw2ICs0NzE2LDcgQEAKIAltZGRldi0+c3luY19zcGVlZF9taW4gPSBtZGRldi0+c3luY19zcGVlZF9tYXggPSAwOwogCW1kZGV2LT5yZWNvdmVyeSA9IDA7CiAJbWRkZXYtPmluX3N5bmMgPSAwOworCW1kZGV2LT5jaGFuZ2VkID0gMDsKIAltZGRldi0+ZGVncmFkZWQgPSAwOwogCW1kZGV2LT5zYWZlbW9kZSA9IDA7CiAJbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCA9IDA7CkBAIC00ODIyLDYgKzQ4MzIsNyBAQAogCiAJCXNldF9jYXBhY2l0eShkaXNrLCAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZtZGRldi0+b3Blbl9tdXRleCk7CisJCW1kZGV2LT5jaGFuZ2VkID0gMTsKIAkJcmV2YWxpZGF0ZV9kaXNrKGRpc2spOwogCiAJCWlmIChtZGRldi0+cm8pCkBAIC01NTc4LDYgKzU1ODksOCBAQAogCW1kZGV2LT5kZWx0YV9kaXNrcyA9IHJhaWRfZGlza3MgLSBtZGRldi0+cmFpZF9kaXNrczsKIAogCXJ2ID0gbWRkZXYtPnBlcnMtPmNoZWNrX3Jlc2hhcGUobWRkZXYpOworCWlmIChydiA8IDApCisJCW1kZGV2LT5kZWx0YV9kaXNrcyA9IDA7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC02MDA0LDcgKzYwMTcsNyBAQAogCWF0b21pY19pbmMoJm1kZGV2LT5vcGVuZXJzKTsKIAltdXRleF91bmxvY2soJm1kZGV2LT5vcGVuX211dGV4KTsKIAotCWNoZWNrX2Rpc2tfc2l6ZV9jaGFuZ2UobWRkZXYtPmdlbmRpc2ssIGJkZXYpOworCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOwogIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjAxOSw2ICs2MDMyLDIxIEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBtZF9tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQoreworCW1kZGV2X3QgKm1kZGV2ID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIG1kZGV2LT5jaGFuZ2VkOworfQorCitzdGF0aWMgaW50IG1kX3JldmFsaWRhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2spCit7CisJbWRkZXZfdCAqbWRkZXYgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisKKwltZGRldi0+Y2hhbmdlZCA9IDA7CisJcmV0dXJuIDA7Cit9CiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG1kX2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTYwMjksNiArNjA1Nyw4IEBACiAJLmNvbXBhdF9pb2N0bAk9IG1kX2NvbXBhdF9pb2N0bCwKICNlbmRpZgogCS5nZXRnZW8JCT0gbWRfZ2V0Z2VvLAorCS5tZWRpYV9jaGFuZ2VkICA9IG1kX21lZGlhX2NoYW5nZWQsCisJLnJldmFsaWRhdGVfZGlzaz0gbWRfcmV2YWxpZGF0ZSwKIH07CiAKIHN0YXRpYyBpbnQgbWRfdGhyZWFkKHZvaWQgKiBhcmcpCkBAIC02OTg1LDkgKzcwMTUsNiBAQAogCX0gZWxzZSBpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVRVUVTVEVELCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJbWRkZXYtPnJlc3luY19taW4gPSBtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkOwogCW1kZGV2LT5jdXJyX3Jlc3luYyA9IDA7Ci0JaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KSkKLQkJbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA9IDA7Ci0Jc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgInN5bmNfY29tcGxldGVkIik7CiAJd2FrZV91cCgmcmVzeW5jX3dhaXQpOwogCXNldF9iaXQoTURfUkVDT1ZFUllfRE9ORSwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKQEAgLTcwMjgsNyArNzA1NSw3IEBACiAJCQl9CiAJCX0KIAotCWlmIChtZGRldi0+ZGVncmFkZWQgJiYgISBtZGRldi0+cm8gJiYgIW1kZGV2LT5yZWNvdmVyeV9kaXNhYmxlZCkgeworCWlmIChtZGRldi0+ZGVncmFkZWQgJiYgIW1kZGV2LT5yZWNvdmVyeV9kaXNhYmxlZCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKIAkJCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSAmJgpAQCAtNzE1MSw3ICs3MTc4LDIwIEBACiAJCQkvKiBPbmx5IHRoaW5nIHdlIGRvIG9uIGEgcm8gYXJyYXkgaXMgcmVtb3ZlCiAJCQkgKiBmYWlsZWQgZGV2aWNlcy4KIAkJCSAqLwotCQkJcmVtb3ZlX2FuZF9hZGRfc3BhcmVzKG1kZGV2KTsKKwkJCW1ka19yZGV2X3QgKnJkZXY7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQorCQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgorCQkJCSAgICAhdGVzdF9iaXQoQmxvY2tlZCwgJnJkZXYtPmZsYWdzKSAmJgorCQkJCSAgICB0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykgJiYKKwkJCQkgICAgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpPT0wKSB7CisJCQkJCWlmIChtZGRldi0+cGVycy0+aG90X3JlbW92ZV9kaXNrKAorCQkJCQkJICAgIG1kZGV2LCByZGV2LT5yYWlkX2Rpc2spPT0wKSB7CisJCQkJCQljaGFyIG5tWzIwXTsKKwkJCQkJCXNwcmludGYobm0sInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOworCQkJCQkJc3lzZnNfcmVtb3ZlX2xpbmsoJm1kZGV2LT5rb2JqLCBubSk7CisJCQkJCQlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKKwkJCQkJfQorCQkJCX0KIAkJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJZ290byB1bmxvY2s7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCBlZWM1MTdjLi4xMjIxNWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKKysrIGIvZHJpdmVycy9tZC9tZC5oCkBAIC05Myw4ICs5Myw2IEBACiAjZGVmaW5lCUZhdWx0eQkJMQkJLyogZGV2aWNlIGlzIGtub3duIHRvIGhhdmUgYSBmYXVsdCAqLwogI2RlZmluZQlJbl9zeW5jCQkyCQkvKiBkZXZpY2UgaXMgaW5fc3luYyB3aXRoIHJlc3Qgb2YgYXJyYXkgKi8KICNkZWZpbmUJV3JpdGVNb3N0bHkJNAkJLyogQXZvaWQgcmVhZGluZyBpZiBhdCBhbGwgcG9zc2libGUgKi8KLSNkZWZpbmUJQWxsUmVzZXJ2ZWQJNgkJLyogSWYgd2hvbGUgZGV2aWNlIGlzIHJlc2VydmVkIGZvcgotCQkJCQkgKiBvbmUgYXJyYXkgKi8KICNkZWZpbmUJQXV0b0RldGVjdGVkCTcJCS8qIGFkZGVkIGJ5IGF1dG8tZGV0ZWN0ICovCiAjZGVmaW5lIEJsb2NrZWQJCTgJCS8qIEFuIGVycm9yIG9jY3VyZWQgb24gYW4gZXh0ZXJuYWxseQogCQkJCQkgKiBtYW5hZ2VkIGFycmF5LCBkb24ndCBhbGxvdyB3cml0ZXMKQEAgLTI3Niw2ICsyNzQsOCBAQAogCWF0b21pY190CQkJYWN0aXZlOwkJLyogZ2VuZXJhbCByZWZjb3VudCAqLwogCWF0b21pY190CQkJb3BlbmVyczsJLyogbnVtYmVyIG9mIGFjdGl2ZSBvcGVucyAqLwogCisJaW50CQkJCWNoYW5nZWQ7CS8qIFRydWUgaWYgd2UgbWlnaHQgbmVlZCB0bworCQkJCQkJCSAqIHJlcmVhZCBwYXJ0aXRpb24gaW5mbyAqLwogCWludAkJCQlkZWdyYWRlZDsJLyogd2hldGhlciBtZCBzaG91bGQgY29uc2lkZXIKIAkJCQkJCQkgKiBhZGRpbmcgYSBzcGFyZQogCQkJCQkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKaW5kZXggNmQ3ZGRmMy4uM2E2MmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYworKysgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCkBAIC00MzUsNyArNDM1LDYgQEAKIAkgKiBib29ra2VlcGluZyBhcmVhLiBbd2hhdGV2ZXIgd2UgYWxsb2NhdGUgaW4gbXVsdGlwYXRoX3J1bigpLAogCSAqIHNob3VsZCBiZSBmcmVlZCBpbiBtdWx0aXBhdGhfc3RvcCgpXQogCSAqLwotCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZtZGRldi0+cXVldWUtPl9fcXVldWVfbG9jazsKIAogCWNvbmYgPSBremFsbG9jKHNpemVvZihtdWx0aXBhdGhfY29uZl90KSwgR0ZQX0tFUk5FTCk7CiAJbWRkZXYtPnByaXZhdGUgPSBjb25mOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMC5jIGIvZHJpdmVycy9tZC9yYWlkMC5jCmluZGV4IGEzOWY0YzMuLmMwYWM0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDAuYworKysgYi9kcml2ZXJzL21kL3JhaWQwLmMKQEAgLTE3OSw2ICsxNzksMTQgQEAKIAkJCXJkZXYxLT5uZXdfcmFpZF9kaXNrID0gajsKIAkJfQogCisJCWlmIChtZGRldi0+bGV2ZWwgPT0gMSkgeworCQkJLyogdGFpa2luZyBvdmVyIGEgcmFpZDEgYXJyYXktCisJCQkgKiB3ZSBoYXZlIG9ubHkgb25lIGFjdGl2ZSBkaXNrCisJCQkgKi8KKwkJCWogPSAwOworCQkJcmRldjEtPm5ld19yYWlkX2Rpc2sgPSBqOworCQl9CisKIAkJaWYgKGogPCAwIHx8IGogPj0gbWRkZXYtPnJhaWRfZGlza3MpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAibWQvcmFpZDA6JXM6IGJhZCBkaXNrIG51bWJlciAlZCAtICIKIAkJCSAgICAgICAiYWJvcnRpbmchXG4iLCBtZG5hbWUobWRkZXYpLCBqKTsKQEAgLTM1Myw3ICszNjEsNiBAQAogCWlmIChtZF9jaGVja19ub19iaXRtYXAobWRkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBtZGRldi0+Y2h1bmtfc2VjdG9ycyk7Ci0JbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJm1kZGV2LT5xdWV1ZS0+X19xdWV1ZV9sb2NrOwogCiAJLyogaWYgcHJpdmF0ZSBpcyBub3QgbnVsbCwgd2UgYXJlIGhlcmUgYWZ0ZXIgdGFrZW92ZXIgKi8KIAlpZiAobWRkZXYtPnByaXZhdGUgPT0gTlVMTCkgewpAQCAtNjQ0LDEyICs2NTEsMzkgQEAKIAlyZXR1cm4gcHJpdl9jb25mOwogfQogCitzdGF0aWMgdm9pZCAqcmFpZDBfdGFrZW92ZXJfcmFpZDEobWRkZXZfdCAqbWRkZXYpCit7CisJcmFpZDBfY29uZl90ICpwcml2X2NvbmY7CisKKwkvKiBDaGVjayBsYXlvdXQ6CisJICogIC0gKE4gLSAxKSBtaXJyb3IgZHJpdmVzIG11c3QgYmUgYWxyZWFkeSBmYXVsdHkKKwkgKi8KKwlpZiAoKG1kZGV2LT5yYWlkX2Rpc2tzIC0gMSkgIT0gbWRkZXYtPmRlZ3JhZGVkKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWQvcmFpZDA6JXM6IChOIC0gMSkgbWlycm9ycyBkcml2ZXMgbXVzdCBiZSBhbHJlYWR5IGZhdWx0eSFcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJLyogU2V0IG5ldyBwYXJhbWV0ZXJzICovCisJbWRkZXYtPm5ld19sZXZlbCA9IDA7CisJbWRkZXYtPm5ld19sYXlvdXQgPSAwOworCW1kZGV2LT5uZXdfY2h1bmtfc2VjdG9ycyA9IDEyODsgLyogYnkgZGVmYXVsdCBzZXQgY2h1bmsgc2l6ZSB0byA2NGsgKi8KKwltZGRldi0+ZGVsdGFfZGlza3MgPSAxIC0gbWRkZXYtPnJhaWRfZGlza3M7CisJbWRkZXYtPnJhaWRfZGlza3MgPSAxOworCS8qIG1ha2Ugc3VyZSBpdCB3aWxsIGJlIG5vdCBtYXJrZWQgYXMgZGlydHkgKi8KKwltZGRldi0+cmVjb3ZlcnlfY3AgPSBNYXhTZWN0b3I7CisKKwljcmVhdGVfc3RyaXBfem9uZXMobWRkZXYsICZwcml2X2NvbmYpOworCXJldHVybiBwcml2X2NvbmY7Cit9CisKIHN0YXRpYyB2b2lkICpyYWlkMF90YWtlb3ZlcihtZGRldl90ICptZGRldikKIHsKIAkvKiByYWlkMCBjYW4gdGFrZSBvdmVyOgogCSAqICByYWlkNCAtIGlmIGFsbCBkYXRhIGRpc2tzIGFyZSBhY3RpdmUuCiAJICogIHJhaWQ1IC0gcHJvdmlkaW5nIGl0IGlzIFJhaWQ0IGxheW91dCBhbmQgb25lIGRpc2sgaXMgZmF1bHR5CiAJICogIHJhaWQxMCAtIGFzc3VtaW5nIHdlIGhhdmUgYWxsIG5lY2Vzc2FyeSBhY3RpdmUgZGlza3MKKwkgKiAgcmFpZDEgLSB3aXRoIChOIC0xKSBtaXJyb3IgZHJpdmVzIGZhdWx0eQogCSAqLwogCWlmIChtZGRldi0+bGV2ZWwgPT0gNCkKIAkJcmV0dXJuIHJhaWQwX3Rha2VvdmVyX3JhaWQ0NShtZGRldik7CkBAIC02NjUsNiArNjk5LDEyIEBACiAJaWYgKG1kZGV2LT5sZXZlbCA9PSAxMCkKIAkJcmV0dXJuIHJhaWQwX3Rha2VvdmVyX3JhaWQxMChtZGRldik7CiAKKwlpZiAobWRkZXYtPmxldmVsID09IDEpCisJCXJldHVybiByYWlkMF90YWtlb3Zlcl9yYWlkMShtZGRldik7CisKKwlwcmludGsoS0VSTl9FUlIgIlRha2VvdmVyIGZyb20gcmFpZCVpIHRvIHJhaWQwIG5vdCBzdXBwb3J0ZWRcbiIsCisJCW1kZGV2LT5sZXZlbCk7CisKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGEyM2ZmYTMuLjA2Y2Q3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTU5Myw3ICs1OTMsMTAgQEAKIAlpZiAoY29uZi0+cGVuZGluZ19iaW9fbGlzdC5oZWFkKSB7CiAJCXN0cnVjdCBiaW8gKmJpbzsKIAkJYmlvID0gYmlvX2xpc3RfZ2V0KCZjb25mLT5wZW5kaW5nX2Jpb19saXN0KTsKKwkJLyogT25seSB0YWtlIHRoZSBzcGlubG9jayB0byBxdWlldCBhIHdhcm5pbmcgKi8KKwkJc3Bpbl9sb2NrKGNvbmYtPm1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayk7CiAJCWJsa19yZW1vdmVfcGx1Zyhjb25mLT5tZGRldi0+cXVldWUpOworCQlzcGluX3VubG9jayhjb25mLT5tZGRldi0+cXVldWUtPnF1ZXVlX2xvY2spOwogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJLyogZmx1c2ggYW55IHBlbmRpbmcgYml0bWFwIHdyaXRlcyB0bwogCQkgKiBkaXNrIGJlZm9yZSBwcm9jZWVkaW5nIHcvIEkvTyAqLwpAQCAtOTU5LDcgKzk2Miw3IEBACiAJCWF0b21pY19pbmMoJnIxX2Jpby0+cmVtYWluaW5nKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAJCWJpb19saXN0X2FkZCgmY29uZi0+cGVuZGluZ19iaW9fbGlzdCwgbWJpbyk7Ci0JCWJsa19wbHVnX2RldmljZShtZGRldi0+cXVldWUpOworCQlibGtfcGx1Z19kZXZpY2VfdW5sb2NrZWQobWRkZXYtPnF1ZXVlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAl9CiAJcjFfYmlvX3dyaXRlX2RvbmUocjFfYmlvLCBiaW8tPmJpX3ZjbnQsIGJlaGluZF9wYWdlcywgYmVoaW5kX3BhZ2VzICE9IE5VTEwpOwpAQCAtMjAyMSw3ICsyMDI0LDYgQEAKIAlpZiAoSVNfRVJSKGNvbmYpKQogCQlyZXR1cm4gUFRSX0VSUihjb25mKTsKIAotCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCWRpc2tfc3RhY2tfbGltaXRzKG1kZGV2LT5nZW5kaXNrLCByZGV2LT5iZGV2LAogCQkJCSAgcmRldi0+ZGF0YV9vZmZzZXQgPDwgOSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA2OWI2NTk1Li43NDdkMDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTY2Miw3ICs2NjIsMTAgQEAKIAlpZiAoY29uZi0+cGVuZGluZ19iaW9fbGlzdC5oZWFkKSB7CiAJCXN0cnVjdCBiaW8gKmJpbzsKIAkJYmlvID0gYmlvX2xpc3RfZ2V0KCZjb25mLT5wZW5kaW5nX2Jpb19saXN0KTsKKwkJLyogU3BpbmxvY2sgb25seSB0YWtlbiB0byBxdWlldCBhIHdhcm5pbmcgKi8KKwkJc3Bpbl9sb2NrKGNvbmYtPm1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayk7CiAJCWJsa19yZW1vdmVfcGx1Zyhjb25mLT5tZGRldi0+cXVldWUpOworCQlzcGluX3VubG9jayhjb25mLT5tZGRldi0+cXVldWUtPnF1ZXVlX2xvY2spOwogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJLyogZmx1c2ggYW55IHBlbmRpbmcgYml0bWFwIHdyaXRlcyB0byBkaXNrCiAJCSAqIGJlZm9yZSBwcm9jZWVkaW5nIHcvIEkvTyAqLwpAQCAtOTcxLDcgKzk3NCw3IEBACiAJCWF0b21pY19pbmMoJnIxMF9iaW8tPnJlbWFpbmluZyk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwogCQliaW9fbGlzdF9hZGQoJmNvbmYtPnBlbmRpbmdfYmlvX2xpc3QsIG1iaW8pOwotCQlibGtfcGx1Z19kZXZpY2UobWRkZXYtPnF1ZXVlKTsKKwkJYmxrX3BsdWdfZGV2aWNlX3VubG9ja2VkKG1kZGV2LT5xdWV1ZSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAJfQogCkBAIC0yMzA0LDggKzIzMDcsNiBAQAogCWlmICghY29uZikKIAkJZ290byBvdXQ7CiAKLQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7Ci0KIAltZGRldi0+dGhyZWFkID0gY29uZi0+dGhyZWFkOwogCWNvbmYtPnRocmVhZCA9IE5VTEw7CiAKQEAgLTI0NjMsMTEgKzI0NjQsMTMgQEAKIAltZGRldi0+cmVjb3ZlcnlfY3AgPSBNYXhTZWN0b3I7CiAKIAljb25mID0gc2V0dXBfY29uZihtZGRldik7Ci0JaWYgKCFJU19FUlIoY29uZikpCisJaWYgKCFJU19FUlIoY29uZikpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKIAkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCkKIAkJCQlyZGV2LT5uZXdfcmFpZF9kaXNrID0gcmRldi0+cmFpZF9kaXNrICogMjsKLQkJCisJCWNvbmYtPmJhcnJpZXIgPSAxOworCX0KKwogCXJldHVybiBjb25mOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggNTA0NGJhYi4uNzg1MzZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtNTIwNCw3ICs1MjA0LDYgQEAKIAogCQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2RhdGEgPSBtZGRldjsKIAkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQ1X2Nvbmdlc3RlZDsKLQkJbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJmNvbmYtPmRldmljZV9sb2NrOwogCQltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IHJhaWQ1X3VucGx1Z19xdWV1ZTsKIAogCQljaHVua19zaXplID0gbWRkZXYtPmNodW5rX3NlY3RvcnMgPDwgOTsKQEAgLTU1MTcsNyArNTUxNiw2IEBACiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAlpbnQgc3BhcmVzID0gMDsKLQlpbnQgYWRkZWRfZGV2aWNlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SVU5OSU5HLCAmbWRkZXYtPnJlY292ZXJ5KSkKQEAgLTU1MjcsOCArNTUyNSw4IEBACiAJCXJldHVybiAtRU5PU1BDOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKLQkJaWYgKChyZGV2LT5yYWlkX2Rpc2sgPCAwIHx8IHJkZXYtPnJhaWRfZGlzayA+PSBjb25mLT5yYWlkX2Rpc2tzKQotCQkgICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCisJCWlmICghdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKQorCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKIAkJCXNwYXJlcysrOwogCiAJaWYgKHNwYXJlcyAtIG1kZGV2LT5kZWdyYWRlZCA8IG1kZGV2LT5kZWx0YV9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCkKQEAgLTU1NzEsMzQgKzU1NjksMzUgQEAKIAkgKiB0byBjb3JyZWN0bHkgcmVjb3JkIHRoZSAicGFydGlhbGx5IHJlY29uc3RydWN0ZWQiIHN0YXRlIG9mCiAJICogc3VjaCBkZXZpY2VzIGR1cmluZyB0aGUgcmVzaGFwZSBhbmQgY29uZnVzaW9uIGNvdWxkIHJlc3VsdC4KIAkgKi8KLQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID49IDApCi0JICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCi0JCWlmIChyZGV2LT5yYWlkX2Rpc2sgPCAwICYmCi0JCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7Ci0JCQlpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHsKLQkJCQljaGFyIG5tWzIwXTsKLQkJCQlpZiAocmRldi0+cmFpZF9kaXNrID49IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpIHsKLQkJCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwotCQkJCQlhZGRlZF9kZXZpY2VzKys7Ci0JCQkJfSBlbHNlCi0JCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IDA7Ci0JCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOwotCQkJCWlmIChzeXNmc19jcmVhdGVfbGluaygmbWRkZXYtPmtvYmosCi0JCQkJCQkgICAgICAmcmRldi0+a29iaiwgbm0pKQotCQkJCQkvKiBGYWlsdXJlIGhlcmUgaXMgT0sgKi87Ci0JCQl9IGVsc2UKLQkJCQlicmVhazsKLQkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcwotCQkJICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewotCQkJLyogVGhpcyBpcyBhIHNwYXJlIHRoYXQgd2FzIG1hbnVhbGx5IGFkZGVkICovCi0JCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7Ci0JCQlhZGRlZF9kZXZpY2VzKys7Ci0JCX0KKwlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID49IDApIHsKKwkJaW50IGFkZGVkX2RldmljZXMgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQorCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA8IDAgJiYKKwkJCSAgICAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CisJCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7CisJCQkJCWNoYXIgbm1bMjBdOworCQkJCQlpZiAocmRldi0+cmFpZF9kaXNrCisJCQkJCSAgICA+PSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKSB7CisJCQkJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CisJCQkJCQlhZGRlZF9kZXZpY2VzKys7CisJCQkJCX0gZWxzZQorCQkJCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKKwkJCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOworCQkJCQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJm1kZGV2LT5rb2JqLAorCQkJCQkJCSAgICAgICZyZGV2LT5rb2JqLCBubSkpCisJCQkJCQkvKiBGYWlsdXJlIGhlcmUgaXMgT0sgKi87CisJCQkJfQorCQkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcworCQkJCSAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKKwkJCQkvKiBUaGlzIGlzIGEgc3BhcmUgdGhhdCB3YXMgbWFudWFsbHkgYWRkZWQgKi8KKwkJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7CisJCQkJYWRkZWRfZGV2aWNlcysrOworCQkJfQogCi0JLyogV2hlbiBhIHJlc2hhcGUgY2hhbmdlcyB0aGUgbnVtYmVyIG9mIGRldmljZXMsIC0+ZGVncmFkZWQKLQkgKiBpcyBtZWFzdXJlZCBhZ2FpbnN0IHRoZSBsYXJnZXIgb2YgdGhlIHByZSBhbmQgcG9zdCBudW1iZXIgb2YKLQkgKiBkZXZpY2VzLiovCi0JaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA+IDApIHsKKwkJLyogV2hlbiBhIHJlc2hhcGUgY2hhbmdlcyB0aGUgbnVtYmVyIG9mIGRldmljZXMsCisJCSAqIC0+ZGVncmFkZWQgaXMgbWVhc3VyZWQgYWdhaW5zdCB0aGUgbGFyZ2VyIG9mIHRoZQorCQkgKiBwcmUgYW5kIHBvc3QgbnVtYmVyIG9mIGRldmljZXMuCisJCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJbWRkZXYtPmRlZ3JhZGVkICs9IChjb25mLT5yYWlkX2Rpc2tzIC0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKIAkJCS0gYWRkZWRfZGV2aWNlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXItbGlyYy1jb2RlYy5jIGIvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKaW5kZXggZjAxMWM1ZC4uMWM1Y2M2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMKQEAgLTEsNCArMSw0IEBACi0vKiBpci1saXJjLWNvZGVjLmMgLSBpci1jb3JlIHRvIGNsYXNzaWMgbGlyYyBpbnRlcmZhY2UgYnJpZGdlCisvKiBpci1saXJjLWNvZGVjLmMgLSByYy1jb3JlIHRvIGNsYXNzaWMgbGlyYyBpbnRlcmZhY2UgYnJpZGdlCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KICAqCkBAIC00Nyw2ICs0Nyw3IEBACiAJLyogQ2FycmllciByZXBvcnRzICovCiAJaWYgKGV2LmNhcnJpZXJfcmVwb3J0KSB7CiAJCXNhbXBsZSA9IExJUkNfRlJFUVVFTkNZKGV2LmNhcnJpZXIpOworCQlJUl9kcHJpbnRrKDIsICJjYXJyaWVyIHJlcG9ydCAoZnJlcTogJWQpXG4iLCBzYW1wbGUpOwogCiAJLyogUGFja2V0IGVuZCAqLwogCX0gZWxzZSBpZiAoZXYudGltZW91dCkgewpAQCAtNjIsNiArNjMsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJc2FtcGxlID0gTElSQ19USU1FT1VUKGV2LmR1cmF0aW9uIC8gMTAwMCk7CisJCUlSX2RwcmludGsoMiwgInRpbWVvdXQgcmVwb3J0IChkdXJhdGlvbjogJWQpXG4iLCBzYW1wbGUpOwogCiAJLyogTm9ybWFsIHNhbXBsZSAqLwogCX0gZWxzZSB7CkBAIC04NSw2ICs4Nyw4IEBACiAKIAkJc2FtcGxlID0gZXYucHVsc2UgPyBMSVJDX1BVTFNFKGV2LmR1cmF0aW9uIC8gMTAwMCkgOgogCQkJCQlMSVJDX1NQQUNFKGV2LmR1cmF0aW9uIC8gMTAwMCk7CisJCUlSX2RwcmludGsoMiwgImRlbGl2ZXJpbmcgJXV1cyAlcyB0byBsaXJjX2RldlxuIiwKKwkJCSAgIFRPX1VTKGV2LmR1cmF0aW9uKSwgVE9fU1RSKGV2LnB1bHNlKSk7CiAJfQogCiAJbGlyY19idWZmZXJfd3JpdGUoZGV2LT5yYXctPmxpcmMuZHJ2LT5yYnVmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzYtbWNlLmMKaW5kZXggM2JmMzMzNy4uMmY1ZGMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jCkBAIC0zLDYgKzMsOSBAQAogICoKICAqIENvcHlyaWdodCAoYykgMjAxMCBieSBKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+CiAgKgorICogU2VlIGh0dHA6Ly9tZWRpYWNlbnRlcmd1aWRlcy5jb20vYm9vay9leHBvcnQvaHRtbC8zMSBmb3IgZGV0YWlscyBvbgorICoga2V5IG1hcHBpbmdzLgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKQEAgLTYwLDYgKzYzLDkgQEAKIAl7IDB4ODAwZjA0MjYsIEtFWV9FUEcgfSwJCS8qIEd1aWRlICovCiAJeyAweDgwMGYwNDI3LCBLRVlfWk9PTSB9LAkJLyogQXNwZWN0ICovCiAKKwl7IDB4ODAwZjA0MzIsIEtFWV9NT0RFIH0sCQkvKiBWaXN1YWxpemF0aW9uICovCisJeyAweDgwMGYwNDMzLCBLRVlfUFJFU0VOVEFUSU9OIH0sCS8qIFNsaWRlIFNob3cgKi8KKwl7IDB4ODAwZjA0MzQsIEtFWV9FSkVDVENEIH0sCiAJeyAweDgwMGYwNDNhLCBLRVlfQlJJR0hUTkVTU1VQIH0sCiAKIAl7IDB4ODAwZjA0NDYsIEtFWV9UViB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYyBiL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMKaW5kZXggMDc5MzUzZS4uNmRmMGE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jCkBAIC04MTYsNyArODE2LDcgQEAKIAlzd2l0Y2ggKGlyLT5idWZfaW5baW5kZXhdKSB7CiAJLyogMi1ieXRlIHJldHVybiB2YWx1ZSBjb21tYW5kcyAqLwogCWNhc2UgTUNFX0NNRF9TX1RJTUVPVVQ6Ci0JCWlyLT5yYy0+dGltZW91dCA9IE1TX1RPX05TKChoaSA8PCA4IHwgbG8pIC8gMik7CisJCWlyLT5yYy0+dGltZW91dCA9IFVTX1RPX05TKChoaSA8PCA4IHwgbG8pIC8gMik7CiAJCWJyZWFrOwogCiAJLyogMS1ieXRlIHJldHVybiB2YWx1ZSBjb21tYW5kcyAqLwpAQCAtODU1LDkgKzg1NSwxMCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUEFSU0VfSVJEQVRBOgogCQkJaXItPnJlbS0tOworCQkJaW5pdF9pcl9yYXdfZXZlbnQoJnJhd2lyKTsKIAkJCXJhd2lyLnB1bHNlID0gKChpci0+YnVmX2luW2ldICYgTUNFX1BVTFNFX0JJVCkgIT0gMCk7CiAJCQlyYXdpci5kdXJhdGlvbiA9IChpci0+YnVmX2luW2ldICYgTUNFX1BVTFNFX01BU0spCi0JCQkJCSAqIE1TX1RPX1VTKE1DRV9USU1FX1VOSVQpOworCQkJCQkgKiBVU19UT19OUyhNQ0VfVElNRV9VTklUKTsKIAogCQkJZGV2X2RiZyhpci0+ZGV2LCAiU3RvcmluZyAlcyB3aXRoIGR1cmF0aW9uICVkXG4iLAogCQkJCXJhd2lyLnB1bHNlID8gInB1bHNlIiA6ICJzcGFjZSIsCkBAIC04ODMsNiArODg0LDggQEAKIAkJCQkJICAgICBpLCBpci0+cmVtICsgMSwgZmFsc2UpOwogCQkJaWYgKGlyLT5yZW0pCiAJCQkJaXItPnBhcnNlcl9zdGF0ZSA9IFBBUlNFX0lSREFUQTsKKwkJCWVsc2UKKwkJCQlpcl9yYXdfZXZlbnRfcmVzZXQoaXItPnJjKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEwNjAsNyArMTA2Myw3IEBACiAJcmMtPnByaXYgPSBpcjsKIAlyYy0+ZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfSVJfUkFXOwogCXJjLT5hbGxvd2VkX3Byb3RvcyA9IFJDX1RZUEVfQUxMOwotCXJjLT50aW1lb3V0ID0gTVNfVE9fTlMoMTAwMCk7CisJcmMtPnRpbWVvdXQgPSBVU19UT19OUygxMDAwKTsKIAlpZiAoIWlyLT5mbGFncy5ub190eCkgewogCQlyYy0+c190eF9tYXNrID0gbWNldXNiX3NldF90eF9tYXNrOwogCQlyYy0+c190eF9jYXJyaWVyID0gbWNldXNiX3NldF90eF9jYXJyaWVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jIGIvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jCmluZGV4IGRkNGNhZjguLjI3M2Q5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvbnV2b3Rvbi1jaXIuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQljYXJyaWVyID0gKGNvdW50ICogMTAwMDAwMCkgLyBkdXJhdGlvbjsKKwljYXJyaWVyID0gTVNfVE9fTlMoY291bnQpIC8gZHVyYXRpb247CiAKIAlpZiAoKGNhcnJpZXIgPiBNQVhfQ0FSUklFUikgfHwgKGNhcnJpZXIgPCBNSU5fQ0FSUklFUikpCiAJCW52dF9kYmcoIldURj8gQ2FycmllciBmcmVxdWVuY3kgb3V0IG9mIHJhbmdlISIpOwpAQCAtNjEyLDggKzYxMiw4IEBACiAJCXNhbXBsZSA9IG52dC0+YnVmW2ldOwogCiAJCXJhd2lyLnB1bHNlID0gKChzYW1wbGUgJiBCVUZfUFVMU0VfQklUKSAhPSAwKTsKLQkJcmF3aXIuZHVyYXRpb24gPSAoc2FtcGxlICYgQlVGX0xFTl9NQVNLKQotCQkJCQkqIFNBTVBMRV9QRVJJT0QgKiAxMDAwOworCQlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKChzYW1wbGUgJiBCVUZfTEVOX01BU0spCisJCQkJCSAgKiBTQU1QTEVfUEVSSU9EKTsKIAogCQlpZiAoKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykgPT0gQlVGX0xFTl9NQVNLKSB7CiAJCQlpZiAobnZ0LT5yYXdpci5wdWxzZSA9PSByYXdpci5wdWxzZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKaW5kZXggNzJiZThhMC4uNTEyYTJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMKQEAgLTQ1OCwyMSArNDU4LDI3IEBACiAJCWluZGV4ID0gaXJfbG9va3VwX2J5X3NjYW5jb2RlKHJjX21hcCwgc2NhbmNvZGUpOwogCX0KIAotCWlmIChpbmRleCA+PSByY19tYXAtPmxlbikgewotCQlpZiAoIShrZS0+ZmxhZ3MgJiBJTlBVVF9LRVlNQVBfQllfSU5ERVgpKQotCQkJSVJfZHByaW50aygxLCAidW5rbm93biBrZXkgZm9yIHNjYW5jb2RlIDB4JTA0eFxuIiwKLQkJCQkgICBzY2FuY29kZSk7CisJaWYgKGluZGV4IDwgcmNfbWFwLT5sZW4pIHsKKwkJZW50cnkgPSAmcmNfbWFwLT5zY2FuW2luZGV4XTsKKworCQlrZS0+aW5kZXggPSBpbmRleDsKKwkJa2UtPmtleWNvZGUgPSBlbnRyeS0+a2V5Y29kZTsKKwkJa2UtPmxlbiA9IHNpemVvZihlbnRyeS0+c2NhbmNvZGUpOworCQltZW1jcHkoa2UtPnNjYW5jb2RlLCAmZW50cnktPnNjYW5jb2RlLCBzaXplb2YoZW50cnktPnNjYW5jb2RlKSk7CisKKwl9IGVsc2UgaWYgKCEoa2UtPmZsYWdzICYgSU5QVVRfS0VZTUFQX0JZX0lOREVYKSkgeworCQkvKgorCQkgKiBXZSBkbyBub3QgcmVhbGx5IGtub3cgdGhlIHZhbGlkIHJhbmdlIG9mIHNjYW5jb2RlcworCQkgKiBzbyBsZXQncyByZXNwb25kIHdpdGggS0VZX1JFU0VSVkVEIHRvIGFueXRoaW5nIHdlCisJCSAqIGRvIG5vdCBoYXZlIG1hcHBpbmcgZm9yIFt5ZXRdLgorCQkgKi8KKwkJa2UtPmluZGV4ID0gaW5kZXg7CisJCWtlLT5rZXljb2RlID0gS0VZX1JFU0VSVkVEOworCX0gZWxzZSB7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWVudHJ5ID0gJnJjX21hcC0+c2NhbltpbmRleF07Ci0KLQlrZS0+aW5kZXggPSBpbmRleDsKLQlrZS0+a2V5Y29kZSA9IGVudHJ5LT5rZXljb2RlOwotCWtlLT5sZW4gPSBzaXplb2YoZW50cnktPnNjYW5jb2RlKTsKLQltZW1jcHkoa2UtPnNjYW5jb2RlLCAmZW50cnktPnNjYW5jb2RlLCBzaXplb2YoZW50cnktPnNjYW5jb2RlKSk7Ci0KIAlyZXR2YWwgPSAwOwogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3N0cmVhbXphcC5jIGIvZHJpdmVycy9tZWRpYS9yYy9zdHJlYW16YXAuYwppbmRleCA2ZTI5MTFjLi5lNDM1ZDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3N0cmVhbXphcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQkJCXN6LT5zaWduYWxfc3RhcnQudHZfdXNlYyAtCiAJCQkJc3otPnNpZ25hbF9sYXN0LnR2X3VzZWMpOwogCQkJcmF3aXIuZHVyYXRpb24gLT0gc3otPnN1bTsKLQkJCXJhd2lyLmR1cmF0aW9uICo9IDEwMDA7CisJCQlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKHJhd2lyLmR1cmF0aW9uKTsKIAkJCXJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKIAkJfQogCQlzel9wdXNoKHN6LCByYXdpcik7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyYXdpci5kdXJhdGlvbiA9ICgoaW50KSB2YWx1ZSkgKiBTWl9SRVNPTFVUSU9OOwogCXJhd2lyLmR1cmF0aW9uICs9IFNaX1JFU09MVVRJT04gLyAyOwogCXN6LT5zdW0gKz0gcmF3aXIuZHVyYXRpb247Ci0JcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKHJhd2lyLmR1cmF0aW9uKTsKIAlyYXdpci5kdXJhdGlvbiAmPSBJUl9NQVhfRFVSQVRJT047CiAJc3pfcHVzaChzeiwgcmF3aXIpOwogfQpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJcmF3aXIuZHVyYXRpb24gPSAoKGludCkgdmFsdWUpICogU1pfUkVTT0xVVElPTjsKIAlyYXdpci5kdXJhdGlvbiArPSBTWl9SRVNPTFVUSU9OIC8gMjsKIAlzei0+c3VtICs9IHJhd2lyLmR1cmF0aW9uOwotCXJhd2lyLmR1cmF0aW9uICo9IDEwMDA7CisJcmF3aXIuZHVyYXRpb24gPSBVU19UT19OUyhyYXdpci5kdXJhdGlvbik7CiAJc3pfcHVzaChzeiwgcmF3aXIpOwogfQogCkBAIC0yNzMsNiArMjczLDcgQEAKIAkJCQlpZiAoc3otPnRpbWVvdXRfZW5hYmxlZCkKIAkJCQkJc3pfcHVzaChzeiwgcmF3aXIpOwogCQkJCWlyX3Jhd19ldmVudF9oYW5kbGUoc3otPnJkZXYpOworCQkJCWlyX3Jhd19ldmVudF9yZXNldChzei0+cmRldik7CiAJCQl9IGVsc2UgewogCQkJCXN6X3B1c2hfZnVsbF9zcGFjZShzeiwgc3otPmJ1Zl9pbltpXSk7CiAJCQl9CkBAIC0yOTAsNiArMjkxLDcgQEAKIAkJfQogCX0KIAorCWlyX3Jhd19ldmVudF9oYW5kbGUoc3otPnJkZXYpOwogCXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAKIAlyZXR1cm47CkBAIC00MzAsMTMgKzQzMiwxMyBAQAogCXN6LT5kZWNvZGVyX3N0YXRlID0gUHVsc2VTcGFjZTsKIAkvKiBGSVhNRTogZG9uJ3QgeWV0IGhhdmUgYSB3YXkgdG8gc2V0IHRoaXMgKi8KIAlzei0+dGltZW91dF9lbmFibGVkID0gdHJ1ZTsKLQlzei0+cmRldi0+dGltZW91dCA9ICgoKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OICogMTAwMCkgJgorCXN6LT5yZGV2LT50aW1lb3V0ID0gKChVU19UT19OUyhTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTikgJgogCQkJCUlSX01BWF9EVVJBVElPTikgfCAweDAzMDAwMDAwKTsKIAkjaWYgMAogCS8qIG5vdCB5ZXQgc3VwcG9ydGVkLCBkZXBlbmRzIG9uIHBhdGNoZXMgZnJvbSBtYXhpbSAqLwogCS8qIHNlZSBhbHNvOiBMSVJDX0dFVF9SRUNfUkVTT0xVVElPTiBhbmQgTElSQ19TRVRfUkVDX1RJTUVPVVQgKi8KLQlzei0+bWluX3RpbWVvdXQgPSBTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTiAqIDEwMDA7Ci0Jc3otPm1heF90aW1lb3V0ID0gU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04gKiAxMDAwOworCXN6LT5taW5fdGltZW91dCA9IFVTX1RPX05TKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OKTsKKwlzei0+bWF4X3RpbWVvdXQgPSBVU19UT19OUyhTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTik7CiAJI2VuZGlmCiAKIAlkb19nZXR0aW1lb2ZkYXkoJnN6LT5zaWduYWxfc3RhcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IDg2NTIxNmUuLjQ3MjM2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTU3OTMsNyArNTc5Myw3IEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDB4ZGQ6CSAqIGRlbGF5ICovCi0JCQltc2xlZXAoYWN0aW9uLT52YWwgLyA2NCArIDEwKTsKKwkJCW1zbGVlcChhY3Rpb24tPmlkeCk7CiAJCQlicmVhazsKIAkJfQogCQlhY3Rpb24rKzsKQEAgLTU4MzAsNyArNTgzMCw3IEBACiAJCVtTRU5TT1JfR0MwMzA1XSA9CWdjMDMwNV9tYXRyaXgsCiAJCVtTRU5TT1JfSERDUzIwMjBiXSA9CU5VTEwsCiAJCVtTRU5TT1JfSFY3MTMxQl0gPQlOVUxMLAotCQlbU0VOU09SX0hWNzEzMVJdID0JTlVMTCwKKwkJW1NFTlNPUl9IVjcxMzFSXSA9CXBvMjAzMF9tYXRyaXgsCiAJCVtTRU5TT1JfSUNNMTA1QV0gPQlwbzIwMzBfbWF0cml4LAogCQlbU0VOU09SX01DNTAxQ0JdID0JTlVMTCwKIAkJW1NFTlNPUl9NVDlWMTExXzFdID0JZ2MwMzA1X21hdHJpeCwKQEAgLTU5MzYsNiArNTkzNiw3IEBACiAJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX0hWNzEzMUI6CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9PVjc2MjA6CiAJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAljYXNlIFNFTlNPUl9QTzIwMzA6CkBAIC02MTA4LDExICs2MTA5LDEzIEBACiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDBjLCAweDAwM2EpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGIsIDB4MDAzOSk7Ci0JCXJlZ193KGdzcGNhX2RldiwgMHgwYiwgMHgwMDM4KTsKKwkJaWYgKHNlbnNvciA9PSBTRU5TT1JfUEFTMjAyQikKKwkJCXJlZ193KGdzcGNhX2RldiwgMHgwYiwgMHgwMDM4KTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNjcwNCwxMCArNjcwNywxMyBAQAogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIDB4MDAzYik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMDM4KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDMsIDB4MDAzYik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwYywgMHgwMDNhKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDBiLCAweDAwMzkpOworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfSFY3MTMxUikKKwkJCXJlZ193KGdzcGNhX2RldiwgMHg1MCwgWkMzWFhfUjExRF9HTE9CQUxHQUlOKTsKIAkJYnJlYWs7CiAJfQogCkBAIC02NzIwLDYgKzY3MjYsNyBAQAogCQlicmVhazsKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX0dDMDMwNToKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX1RBUzUxMzBDOgogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwOCk7CiAJCS8qIGZhbGwgdGhydSAqLwpAQCAtNjc2MCw2ICs2NzY3LDEyIEBACiAJCQkJCQkvKiBtcy13aW4gKyAqLwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4NDAsIDB4MDExNyk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX0hWNzEzMVI6CisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MjUsIDB4MDQsIDB4MDApOwkvKiBleHBvc3VyZSAqLworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDI2LCAweDkzLCAweDAwKTsKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgyNywgMHhlMCwgMHgwMCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9UQVM1MTMwQzoKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwpAQCAtNjgwOCw5ICs2ODIxLDE3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsJLyogc3RhcnQgb2YgZnJhbWUgKi8KKwkvKiBjaGVjayB0aGUgSlBFRyBlbmQgb2YgZnJhbWUgKi8KKwlpZiAobGVuID49IDMKKwkgJiYgZGF0YVtsZW4gLSAzXSA9PSAweGZmICYmIGRhdGFbbGVuIC0gMl0gPT0gMHhkOSkgeworLypmaXhtZTogd2hhdCBkb2VzIHRoZSBsYXN0IGJ5dGUgbWVhbj8qLwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwKLQkJCQkJTlVMTCwgMCk7CisJCQkJCWRhdGEsIGxlbiAtIDEpOworCQlyZXR1cm47CisJfQorCisJLyogY2hlY2sgdGhlIEpQRUcgc3RhcnQgb2YgYSBmcmFtZSAqLworCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGQ4KSB7CiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwogCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCiAJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKaW5kZXggYTY1NzJlNS4uYTI3ZDkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKQEAgLTI4Myw2ICsyODMsNyBAQAogCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzaXplX3QgYnVmZmVyX3NpemU7CiAJaW50IGk7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CkBAIC0zODEsMTMgKzM4MiwyMSBAQAogI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKIAlyZXR2YWwgPSBoZHB2cl9yZWdpc3Rlcl9pMmNfYWRhcHRlcihkZXYpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgaTJjIGFkYXB0ZXIgZmFpbGVkXG4iKTsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJpMmMgYWRhcHRlciByZWdpc3RlciBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXJldHZhbCA9IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihkZXYpOwotCWlmIChyZXR2YWwgPCAwKQotCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInJlZ2lzdGVyaW5nIGkyYyBJUiBkZXZpY2VzIGZhaWxlZFxuIik7CisJY2xpZW50ID0gaGRwdnJfcmVnaXN0ZXJfaXJfcnhfaTJjKGRldik7CisJaWYgKCFjbGllbnQpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJpMmMgSVIgUlggZGV2aWNlIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gcmVnX2ZhaWw7CisJfQorCisJY2xpZW50ID0gaGRwdnJfcmVnaXN0ZXJfaXJfdHhfaTJjKGRldik7CisJaWYgKCFjbGllbnQpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJpMmMgSVIgVFggZGV2aWNlIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gcmVnX2ZhaWw7CisJfQogI2VuZGlmCiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCkBAIC0zOTUsNiArNDA0LDEwIEBACiAJCSAgdmlkZW9fZGV2aWNlX25vZGVfbmFtZShkZXYtPnZpZGVvX2RldikpOwogCXJldHVybiAwOwogCityZWdfZmFpbDoKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwdGVyKTsKKyNlbmRpZgogZXJyb3I6CiAJaWYgKGRldikgewogCQkvKiBEZXN0cm95IHNpbmdsZSB0aHJlYWQgKi8KQEAgLTQyNCw2ICs0MzcsOSBAQAogCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOwogCWhkcHZyX2NhbmNlbF9xdWV1ZShkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfYWRhcHRlcigmZGV2LT5pMmNfYWRhcHRlcik7CisjZW5kaWYKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZpZGVvX2Rldik7CiAJYXRvbWljX2RlYygmZGV2X25yKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWkyYy5jCmluZGV4IDg5YjcxZmEuLmU1M2ZhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYwpAQCAtMzEsMjYgKzMxLDM0IEBACiAjZGVmaW5lIFo4RjA4MTFfSVJfUlhfSTJDX0FERFIJMHg3MQogCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaGRwdnJfaTJjX2JvYXJkX2luZm8gPSB7Ci0JSTJDX0JPQVJEX0lORk8oImlyX3R4X3o4ZjA4MTFfaGRwdnIiLCBaOEYwODExX0lSX1RYX0kyQ19BRERSKSwKLQlJMkNfQk9BUkRfSU5GTygiaXJfcnhfejhmMDgxMV9oZHB2ciIsIFo4RjA4MTFfSVJfUlhfSTJDX0FERFIpLAotfTsKLQotaW50IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCitzdHJ1Y3QgaTJjX2NsaWVudCAqaGRwdnJfcmVnaXN0ZXJfaXJfdHhfaTJjKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKIAlzdHJ1Y3QgSVJfaTJjX2luaXRfZGF0YSAqaW5pdF9kYXRhID0gJmRldi0+aXJfaTJjX2luaXRfZGF0YTsKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaGRwdnJfaXJfdHhfaTJjX2JvYXJkX2luZm8gPSB7CisJCUkyQ19CT0FSRF9JTkZPKCJpcl90eF96OGYwODExX2hkcHZyIiwgWjhGMDgxMV9JUl9UWF9JMkNfQUREUiksCisJfTsKKworCWluaXRfZGF0YS0+bmFtZSA9ICJIRC1QVlIiOworCWhkcHZyX2lyX3R4X2kyY19ib2FyZF9pbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CisKKwlyZXR1cm4gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pcl90eF9pMmNfYm9hcmRfaW5mbyk7Cit9CisKK3N0cnVjdCBpMmNfY2xpZW50ICpoZHB2cl9yZWdpc3Rlcl9pcl9yeF9pMmMoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhICppbml0X2RhdGEgPSAmZGV2LT5pcl9pMmNfaW5pdF9kYXRhOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBoZHB2cl9pcl9yeF9pMmNfYm9hcmRfaW5mbyA9IHsKKwkJSTJDX0JPQVJEX0lORk8oImlyX3J4X3o4ZjA4MTFfaGRwdnIiLCBaOEYwODExX0lSX1JYX0kyQ19BRERSKSwKKwl9OwogCiAJLyogT3VyIGRlZmF1bHQgaW5mb3JtYXRpb24gZm9yIGlyLWtiZC1pMmMuYyB0byB1c2UgKi8KIAlpbml0X2RhdGEtPmlyX2NvZGVzID0gUkNfTUFQX0hBVVBQQVVHRV9ORVc7CiAJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUjsKIAlpbml0X2RhdGEtPnR5cGUgPSBSQ19UWVBFX1JDNTsKLQlpbml0X2RhdGEtPm5hbWUgPSAiSEQgUFZSIjsKLQloZHB2cl9pMmNfYm9hcmRfaW5mby5wbGF0Zm9ybV9kYXRhID0gaW5pdF9kYXRhOworCWluaXRfZGF0YS0+bmFtZSA9ICJIRC1QVlIiOworCWhkcHZyX2lyX3J4X2kyY19ib2FyZF9pbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CiAKLQljID0gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pMmNfYm9hcmRfaW5mbyk7Ci0KLQlyZXR1cm4gKGMgPT0gTlVMTCkgPyAtRU5PREVWIDogMDsKKwlyZXR1cm4gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2FkYXB0ZXIsICZoZHB2cl9pcl9yeF9pMmNfYm9hcmRfaW5mbyk7CiB9CiAKIHN0YXRpYyBpbnQgaGRwdnJfaTJjX3JlYWQoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCBpbnQgYnVzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCmluZGV4IGVlNzRlM2IuLjA3MmYyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKQEAgLTMxMyw3ICszMTMsOCBAQAogLyogaTJjIGFkYXB0ZXIgcmVnaXN0cmF0aW9uICovCiBpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKIAotaW50IGhkcHZyX3JlZ2lzdGVyX2kyY19pcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworc3RydWN0IGkyY19jbGllbnQgKmhkcHZyX3JlZ2lzdGVyX2lyX3J4X2kyYyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworc3RydWN0IGkyY19jbGllbnQgKmhkcHZyX3JlZ2lzdGVyX2lyX3R4X2kyYyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBidWZmZXIgbWFuYWdlbWVudCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwppbmRleCBkMmIyMGFkLi5hMjIxYWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYwpAQCAtMTI4LDYgKzEyOCwxOSBAQAogCiBzdGF0aWMgaW50IGdldF9rZXlfaGF1cF94dnIoc3RydWN0IElSX2kyYyAqaXIsIHUzMiAqaXJfa2V5LCB1MzIgKmlyX3JhdykKIHsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmWzFdID0geyAwIH07CisKKwkvKgorCSAqIFRoaXMgaXMgdGhlIHNhbWUgYXBwYXJlbnQgImFyZSB5b3UgcmVhZHk/IiBwb2xsIGNvbW1hbmQgb2JzZXJ2ZWQKKwkgKiB3YXRjaGluZyBXaW5kb3dzIGRyaXZlciB0cmFmZmljIGFuZCBpbXBsZW1lbnRlZCBpbiBsaXJjX3ppbG9nLiBXaXRoCisJICogdGhpcyBhZGRlZCwgd2UgZ2V0IGZhciBzYW5lciByZW1vdGUgYmVoYXZpb3Igd2l0aCB6OCBjaGlwcyBvbiB1c2IKKwkgKiBjb25uZWN0ZWQgZGV2aWNlcywgZXZlbiB3aXRoIHRoZSBkZWZhdWx0IHBvbGxpbmcgaW50ZXJ2YWwgb2YgMTAwbXMuCisJICovCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGlyLT5jLCBidWYsIDEpOworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IC1FSU5WQUw7CisKIAlyZXR1cm4gZ2V0X2tleV9oYXVwX2NvbW1vbiAoaXIsIGlyX2tleSwgaXJfcmF3LCA2LCAzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKaW5kZXggY2NjODg0OS4uNDUxZWNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCkBAIC01OTcsNyArNTk3LDYgQEAKIAkJaW5pdF9kYXRhLT5pbnRlcm5hbF9nZXRfa2V5X2Z1bmMgPSBJUl9LQkRfR0VUX0tFWV9IQVVQX1hWUjsKIAkJaW5pdF9kYXRhLT50eXBlICAgICAgICAgICAgICAgICAgPSBSQ19UWVBFX1JDNTsKIAkJaW5pdF9kYXRhLT5uYW1lICAgICAgICAgICAgICAgICAgPSBoZHctPmhkd19kZXNjLT5kZXNjcmlwdGlvbjsKLQkJaW5pdF9kYXRhLT5wb2xsaW5nX2ludGVydmFsICAgICAgPSAyNjA7IC8qIG1zIEZyb20gbGlyY196aWxvZyAqLwogCQkvKiBJUiBSZWNlaXZlciAqLwogCQlpbmZvLmFkZHIgICAgICAgICAgPSAweDcxOwogCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IGYzNTQ1OWQuLjBkYjkwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC0xNTY1LDcgKzE1NjUsNyBAQAogCWNoaXBfaWQgPSBuYW1lWzVdOwogCiAJLyogQ2hlY2sgd2hldGhlciB0aGlzIGNoaXAgaXMgcGFydCBvZiB0aGUgc2FhNzExeCBzZXJpZXMgKi8KLQlpZiAobWVtY21wKG5hbWUsICIxZjcxMSIsIDUpKSB7CisJaWYgKG1lbWNtcChuYW1lICsgMSwgImY3MTEiLCA0KSkgewogCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoSUQgJXMpIGRvZXMgbm90IG1hdGNoIGEga25vd24gc2FhNzExeCBjaGlwLlxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBuYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lbXN0aWNrL2NvcmUvbWVtc3RpY2suYyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCmluZGV4IGU5YTNlYWIuLjhjMWQ4NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCisrKyBiL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jCkBAIC02MjEsNyArNjIxLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQl3b3JrcXVldWUgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoImttZW1zdGljayIpOworCXdvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKCJrbWVtc3RpY2siKTsKIAlpZiAoIXdvcmtxdWV1ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKaW5kZXggZjcxZjIyOS4uMTczNWM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKQEAgLTc2LDggKzc2LDggQEAKICNkZWZpbmUgQ09QWVJJR0hUCSJDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCAiIE1PRFVMRUFVVEhPUgogI2VuZGlmCiAKLSNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjE3IgotI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMTciCisjZGVmaW5lIE1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgkiMy4wNC4xOCIKKyNkZWZpbmUgTVBUX0xJTlVYX1BBQ0tBR0VfTkFNRQkJIkAoIyltcHRsaW51eC0zLjA0LjE4IgogI2RlZmluZSBXSEFUX01BR0lDX1NUUklORwkJIkAiICIoIiAiIyIgIikiCiAKICNkZWZpbmUgc2hvd19tcHRtb2RfdmVyKHMsdmVyKSAgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKaW5kZXggYTM4NTZlZC4uZThkZWI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCkBAIC01OTcsNiArNTk3LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQKK21wdGN0bF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKwlmYXN5bmNfaGVscGVyKC0xLCBmaWxlcCwgMCwgJmFzeW5jX3F1ZXVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbXB0Y3RsX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IG1vZGUpCiB7CiAJTVBUX0FEQVBURVIJKmlvYzsKQEAgLTI4MTUsNiArMjgyMiw3IEBACiAJLmxsc2VlayA9CW5vX2xsc2VlaywKIAkuZmFzeW5jID0gCW1wdGN0bF9mYXN5bmMsCiAJLnVubG9ja2VkX2lvY3RsID0gbXB0Y3RsX2lvY3RsLAorCS5yZWxlYXNlID0JbXB0Y3RsX3JlbGVhc2UsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwgPSBjb21wYXRfbXBjdGxfaW9jdGwsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwppbmRleCA1OWI4ZjUzLi4wZDliODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCkBAIC0xODczLDggKzE4NzMsOSBAQAogCX0KIAogIG91dDoKLQlwcmludGsoTVlJT0Nfc19JTkZPX0ZNVCAidGFzayBhYm9ydDogJXMgKHNjPSVwKVxuIiwKLQkgICAgaW9jLT5uYW1lLCAoKHJldHZhbCA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgU0NwbnQpOworCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICJ0YXNrIGFib3J0OiAlcyAocnY9JTA0eCkgKHNjPSVwKSAoc249JWxkKVxuIiwKKwkgICAgaW9jLT5uYW1lLCAoKHJldHZhbCA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgcmV0dmFsLAorCSAgICBTQ3BudCwgU0NwbnQtPnNlcmlhbF9udW1iZXIpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTE5MTEsNyArMTkxMiw3IEBACiAKIAl2ZGV2aWNlID0gU0NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAJaWYgKCF2ZGV2aWNlIHx8ICF2ZGV2aWNlLT52dGFyZ2V0KSB7Ci0JCXJldHZhbCA9IFNVQ0NFU1M7CisJCXJldHZhbCA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvYXNpYzMuYyBiL2RyaXZlcnMvbWZkL2FzaWMzLmMKaW5kZXggNmExZjk0MC4uYzQ1ZTYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYXNpYzMuYworKysgYi9kcml2ZXJzL21mZC9hc2ljMy5jCkBAIC0xNDMsOSArMTQzLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhc2ljMyAqYXNpYzsKIAotCWRlc2MtPmNoaXAtPmFjayhpcnEpOworCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9hY2soJmRlc2MtPmlycV9kYXRhKTsKIAotCWFzaWMgPSBkZXNjLT5oYW5kbGVyX2RhdGE7CisJYXNpYyA9IGdldF9pcnFfZGF0YShpcnEpOwogCiAJZm9yIChpdGVyID0gMCA7IGl0ZXIgPCBNQVhfQVNJQ19JU1JfTE9PUFM7IGl0ZXIrKykgewogCQl1MzIgc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvZGF2aW5jaV92b2ljZWNvZGVjLmMgYi9kcml2ZXJzL21mZC9kYXZpbmNpX3ZvaWNlY29kZWMuYwppbmRleCAzM2M5MjNkLi5mZGQ4YTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9kYXZpbmNpX3ZvaWNlY29kZWMuYworKysgYi9kcml2ZXJzL21mZC9kYXZpbmNpX3ZvaWNlY29kZWMuYwpAQCAtMTE4LDEyICsxMTgsMTIgQEAKIAogCS8qIFZvaWNlIGNvZGVjIGludGVyZmFjZSBjbGllbnQgKi8KIAljZWxsID0gJmRhdmluY2lfdmMtPmNlbGxzW0RBVklOQ0lfVkNfVkNJRl9DRUxMXTsKLQljZWxsLT5uYW1lID0gImRhdmluY2lfdmNpZiI7CisJY2VsbC0+bmFtZSA9ICJkYXZpbmNpLXZjaWYiOwogCWNlbGwtPmRyaXZlcl9kYXRhID0gZGF2aW5jaV92YzsKIAogCS8qIFZvaWNlIGNvZGVjIENROTNWQyBjbGllbnQgKi8KIAljZWxsID0gJmRhdmluY2lfdmMtPmNlbGxzW0RBVklOQ0lfVkNfQ1E5M1ZDX0NFTExdOwotCWNlbGwtPm5hbWUgPSAiY3E5M3ZjIjsKKwljZWxsLT5uYW1lID0gImNxOTN2Yy1jb2RlYyI7CiAJY2VsbC0+ZHJpdmVyX2RhdGEgPSBkYXZpbmNpX3ZjOwogCiAJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZwZGV2LT5kZXYsIHBkZXYtPmlkLCBkYXZpbmNpX3ZjLT5jZWxscywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3RwczY1ODZ4LmMgYi9kcml2ZXJzL21mZC90cHM2NTg2eC5jCmluZGV4IDYyN2NmNTcuLmU5MDE4ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3RwczY1ODZ4LmMKKysrIGIvZHJpdmVycy9tZmQvdHBzNjU4NnguYwpAQCAtMTUwLDEyICsxNTAsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9fdHBzNjU4Nnhfd3JpdGVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCByZWcsCiAJCQkJICBpbnQgbGVuLCB1aW50OF90ICp2YWwpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCi0JcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVnLCBsZW4sIHZhbCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgd3JpdGluZ3MgdG8gMHglMDJ4XG4iLCByZWcpOwotCQlyZXR1cm4gcmV0OworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlyZXQgPSBfX3RwczY1ODZ4X3dyaXRlKGNsaWVudCwgcmVnICsgaSwgKih2YWwgKyBpKSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYwppbmRleCAwMDBjYjQxLi45MmI4NWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxeDAwLXRzLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jCkBAIC0zODUsMTIgKzM4NSwxOCBAQAogCWlkZXYtPmNsb3NlICAgICAgPSB1Y2IxeDAwX3RzX2Nsb3NlOwogCiAJX19zZXRfYml0KEVWX0FCUywgaWRldi0+ZXZiaXQpOwotCV9fc2V0X2JpdChBQlNfWCwgaWRldi0+YWJzYml0KTsKLQlfX3NldF9iaXQoQUJTX1ksIGlkZXYtPmFic2JpdCk7Ci0JX19zZXRfYml0KEFCU19QUkVTU1VSRSwgaWRldi0+YWJzYml0KTsKIAogCWlucHV0X3NldF9kcnZkYXRhKGlkZXYsIHRzKTsKIAorCXVjYjF4MDBfYWRjX2VuYWJsZSh0cy0+dWNiKTsKKwl0cy0+eF9yZXMgPSB1Y2IxeDAwX3RzX3JlYWRfeHJlcyh0cyk7CisJdHMtPnlfcmVzID0gdWNiMXgwMF90c19yZWFkX3lyZXModHMpOworCXVjYjF4MDBfYWRjX2Rpc2FibGUodHMtPnVjYik7CisKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpZGV2LCBBQlNfWCwgMCwgdHMtPnhfcmVzLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpZGV2LCBBQlNfWSwgMCwgdHMtPnlfcmVzLCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpZGV2LCBBQlNfUFJFU1NVUkUsIDAsIDAsIDAsIDApOworCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMgYi9kcml2ZXJzL21mZC93bTg5OTQtY29yZS5jCmluZGV4IDQxMjMzYzcuLmY0MDE2YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvd204OTk0LWNvcmUuYwpAQCAtMjQ2LDYgKzI0NiwxNiBAQAogCXN0cnVjdCB3bTg5OTQgKndtODk5NCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQ7CiAKKwkvKiBEb24ndCBhY3R1YWxseSBnbyB0aHJvdWdoIHdpdGggdGhlIHN1c3BlbmQgaWYgdGhlIENPREVDIGlzCisJICogc3RpbGwgYWN0aXZlIChlZywgZm9yIGF1ZGlvIHBhc3N0aHJvdWdoIGZyb20gQ1AuICovCisJcmV0ID0gd204OTk0X3JlZ19yZWFkKHdtODk5NCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBwb3dlciBzdGF0dXM6ICVkXG4iLCByZXQpOworCX0gZWxzZSBpZiAocmV0ICYgV004OTk0X1ZNSURfU0VMX01BU0spIHsKKwkJZGV2X2RiZyhkZXYsICJDT0RFQyBzdGlsbCBhY3RpdmUsIGlnbm9yaW5nIHN1c3BlbmRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiBHUElPIGNvbmZpZ3VyYXRpb24gc3RhdGUgaXMgc2F2ZWQgaGVyZSBzaW5jZSB3ZSBtYXkgYmUgY29uZmlndXJpbmcKIAkgKiB0aGUgR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb25zIGV2ZW4gaWYgd2UncmUgbm90IHVzaW5nIHRoZSBncGlvbGliCiAJICogZHJpdmVyIGZvciB0aGVtLgpAQCAtMjYxLDYgKzI3MSw4IEBACiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHNhdmUgTERPIHJlZ2lzdGVyczogJWRcbiIsIHJldCk7CiAKKwl3bTg5OTQtPnN1c3BlbmRlZCA9IHRydWU7CisKIAlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxlKHdtODk5NC0+bnVtX3N1cHBsaWVzLAogCQkJCSAgICAgd204OTk0LT5zdXBwbGllcyk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC0yNzYsNiArMjg4LDEwIEBACiAJc3RydWN0IHdtODk5NCAqd204OTk0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldDsKIAorCS8qIFdlIG1heSBoYXZlIGxpZWQgdG8gdGhlIFBNIGNvcmUgYWJvdXQgc3VzcGVuZGluZyAqLworCWlmICghd204OTk0LT5zdXNwZW5kZWQpCisJCXJldHVybiAwOworCiAJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKHdtODk5NC0+bnVtX3N1cHBsaWVzLAogCQkJCSAgICB3bTg5OTQtPnN1cHBsaWVzKTsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTI5OCw2ICszMTQsOCBAQAogCWlmIChyZXQgPCAwKQogCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXN0b3JlIEdQSU8gcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKIAorCXdtODk5NC0+c3VzcGVuZGVkID0gZmFsc2U7CisKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2JtcDA4NS5jIGIvZHJpdmVycy9taXNjL2JtcDA4NS5jCmluZGV4IDYzZWU0YzEuLmI2ZTFjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9ibXAwODUuYworKysgYi9kcml2ZXJzL21pc2MvYm1wMDg1LmMKQEAgLTQ0OSw2ICs0NDksNyBAQAogCXsgImJtcDA4NSIsIDAgfSwKIAl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYm1wMDg1X2lkKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGJtcDA4NV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy90aWZtX2NvcmUuYyBiL2RyaXZlcnMvbWlzYy90aWZtX2NvcmUuYwppbmRleCA1ZjY4NTJkLi40NGQ0NDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvdGlmbV9jb3JlLmMKKysrIGIvZHJpdmVycy9taXNjL3RpZm1fY29yZS5jCkBAIC0zMjksNyArMzI5LDcgQEAKIHsKIAlpbnQgcmM7CiAKLQl3b3JrcXVldWUgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoInRpZm0iKTsKKwl3b3JrcXVldWUgPSBjcmVhdGVfZnJlZXphYmxlX3dvcmtxdWV1ZSgidGlmbSIpOwogCWlmICghd29ya3F1ZXVlKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3Ztd19iYWxsb29uLmMgYi9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYwppbmRleCA0ZDJlYThlLi42ZGY1YTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYworKysgYi9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJaWYgKHg4Nl9oeXBlciAhPSAmeDg2X2h5cGVyX3Ztd2FyZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQl2bWJhbGxvb25fd3EgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoInZtbWVtY3RsIik7CisJdm1iYWxsb29uX3dxID0gY3JlYXRlX2ZyZWV6YWJsZV93b3JrcXVldWUoInZtbWVtY3RsIik7CiAJaWYgKCF2bWJhbGxvb25fd3EpIHsKIAkJcHJfZXJyKCJmYWlsZWQgdG8gY3JlYXRlIHdvcmtxdWV1ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwppbmRleCA1YzRhNTRkLi5lYmM2MmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwpAQCAtNzkyLDcgKzc5Miw2IEBACiAJICovCiAJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKIAllcnIgPSBtbWNfYWRkX2NhcmQoaG9zdC0+Y2FyZCk7Ci0JbW1jX2NsYWltX2hvc3QoaG9zdCk7CiAJaWYgKGVycikKIAkJZ290byByZW1vdmVfYWRkZWQ7CiAKQEAgLTgwNSwxMiArODA0LDEyIEBACiAJCQlnb3RvIHJlbW92ZV9hZGRlZDsKIAl9CiAKKwltbWNfY2xhaW1faG9zdChob3N0KTsKIAlyZXR1cm4gMDsKIAogCiByZW1vdmVfYWRkZWQ6CiAJLyogUmVtb3ZlIHdpdGhvdXQgbG9jayBpZiB0aGUgZGV2aWNlIGhhcyBiZWVuIGFkZGVkLiAqLwotCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CiAJbW1jX3NkaW9fcmVtb3ZlKGhvc3QpOwogCW1tY19jbGFpbV9ob3N0KGhvc3QpOwogcmVtb3ZlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jIGIvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jCmluZGV4IGJhYzdkNjIuLjAzNzFiZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2YoKm1tYyksICZwZGV2LT5kZXYpOworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3Qgc2RoX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMKaW5kZXggYjNhMGFiMC4uNzQyMThhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtODI3LDggKzgyOCw4IEBACiAJfQogCiAJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jIik7Ci0JaWYgKCFob3N0LT5jbGspIHsKLQkJcmV0ID0gLUVOT0VOVDsKKwlpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IG1tYyBjbG9ja1xuIik7CiAJCWdvdG8gZXJyX2ZyZWVfaG9zdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDJkZTEyZmUuLjJkNmRlM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CkBAIC0yODMsMTkgKzI4NCwxOSBAQAogCQl1MzIgcmVtYWluLCBzdWNjZXNzOwogCiAJCS8qIENhbGN1bGF0ZSBob3cgZmFyIHdlIGFyZSBpbnRvIHRoZSB0cmFuc2ZlciAqLwotCQlyZW1haW4gPSByZWFkbChob3N0LT5iYXNlICsgTU1DSURBVEFDTlQpIDw8IDI7CisJCXJlbWFpbiA9IHJlYWRsKGhvc3QtPmJhc2UgKyBNTUNJREFUQUNOVCk7CiAJCXN1Y2Nlc3MgPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrcyAtIHJlbWFpbjsKIAogCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIk1DSSBFUlJPUiBJUlEgKHN0YXR1cyAlMDh4KVxuIiwgc3RhdHVzKTsKIAkJaWYgKHN0YXR1cyAmIE1DSV9EQVRBQ1JDRkFJTCkgewogCQkJLyogTGFzdCBibG9jayB3YXMgbm90IHN1Y2Nlc3NmdWwgKi8KLQkJCWhvc3QtPmRhdGFfeGZlcmVkID0gKChzdWNjZXNzIC8gZGF0YS0+Ymxrc3opIC0gMSAqIGRhdGEtPmJsa3N6KTsKKwkJCWhvc3QtPmRhdGFfeGZlcmVkID0gcm91bmRfZG93bihzdWNjZXNzIC0gMSwgZGF0YS0+Ymxrc3opOwogCQkJZGF0YS0+ZXJyb3IgPSAtRUlMU0VROwogCQl9IGVsc2UgaWYgKHN0YXR1cyAmIE1DSV9EQVRBVElNRU9VVCkgewotCQkJaG9zdC0+ZGF0YV94ZmVyZWQgPSBzdWNjZXNzOworCQkJaG9zdC0+ZGF0YV94ZmVyZWQgPSByb3VuZF9kb3duKHN1Y2Nlc3MsIGRhdGEtPmJsa3N6KTsKIAkJCWRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKIAkJfSBlbHNlIGlmIChzdGF0dXMgJiAoTUNJX1RYVU5ERVJSVU58TUNJX1JYT1ZFUlJVTikpIHsKLQkJCWhvc3QtPmRhdGFfeGZlcmVkID0gc3VjY2VzczsKKwkJCWhvc3QtPmRhdGFfeGZlcmVkID0gcm91bmRfZG93bihzdWNjZXNzLCBkYXRhLT5ibGtzeik7CiAJCQlkYXRhLT5lcnJvciA9IC1FSU87CiAJCX0KIApAQCAtMzE5LDcgKzMyMCw3IEBACiAJaWYgKHN0YXR1cyAmIE1DSV9EQVRBQkxPQ0tFTkQpCiAJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAic3RyYXkgTUNJX0RBVEFCTE9DS0VORCBpbnRlcnJ1cHRcbiIpOwogCi0JaWYgKHN0YXR1cyAmIE1DSV9EQVRBRU5EKSB7CisJaWYgKHN0YXR1cyAmIE1DSV9EQVRBRU5EIHx8IGRhdGEtPmVycm9yKSB7CiAJCW1tY2lfc3RvcF9kYXRhKGhvc3QpOwogCiAJCWlmICghZGF0YS0+ZXJyb3IpCkBAIC0zNDIsMTUgKzM0MywxNSBAQAogCiAJaG9zdC0+Y21kID0gTlVMTDsKIAotCWNtZC0+cmVzcFswXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UwKTsKLQljbWQtPnJlc3BbMV0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMSk7Ci0JY21kLT5yZXNwWzJdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTIpOwotCWNtZC0+cmVzcFszXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UzKTsKLQogCWlmIChzdGF0dXMgJiBNQ0lfQ01EVElNRU9VVCkgewogCQljbWQtPmVycm9yID0gLUVUSU1FRE9VVDsKIAl9IGVsc2UgaWYgKHN0YXR1cyAmIE1DSV9DTURDUkNGQUlMICYmIGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0NSQykgewogCQljbWQtPmVycm9yID0gLUVJTFNFUTsKKwl9IGVsc2UgeworCQljbWQtPnJlc3BbMF0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMCk7CisJCWNtZC0+cmVzcFsxXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UxKTsKKwkJY21kLT5yZXNwWzJdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTIpOworCQljbWQtPnJlc3BbM10gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMyk7CiAJfQogCiAJaWYgKCFjbWQtPmRhdGEgfHwgY21kLT5lcnJvcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKaW5kZXggMTcyMDM1OC4uNTMwOWFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCkBAIC0yNzcsMTAgKzI3Nyw0MyBAQAogCWhvc3QtPmNsb2NrID0gY2xvY2s7CiB9CiAKKy8qKgorICogc2RoY2lfczNjX3BsYXRmb3JtXzhiaXRfd2lkdGggLSBzdXBwb3J0IDhiaXQgYnVzd2lkdGgKKyAqIEBob3N0OiBUaGUgU0RIQ0kgaG9zdCBiZWluZyBxdWVyaWVkCisgKiBAd2lkdGg6IE1NQ19CVVNfV0lEVEhfIG1hY3JvIGZvciB0aGUgYnVzIHdpZHRoIGJlaW5nIHJlcXVlc3RlZAorICoKKyAqIFdlIGhhdmUgOC1iaXQgd2lkdGggc3VwcG9ydCBidXQgaXMgbm90IGEgdjMgY29udHJvbGxlci4KKyAqIFNvIHdlIGFkZCBwbGF0Zm9ybV84Yml0X3dpZHRoKCkgYW5kIHN1cHBvcnQgOGJpdCB3aWR0aC4KKyAqLworc3RhdGljIGludCBzZGhjaV9zM2NfcGxhdGZvcm1fOGJpdF93aWR0aChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHdpZHRoKQoreworCXU4IGN0cmw7CisKKwljdHJsID0gc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKworCXN3aXRjaCAod2lkdGgpIHsKKwljYXNlIE1NQ19CVVNfV0lEVEhfODoKKwkJY3RybCB8PSBTREhDSV9DVFJMXzhCSVRCVVM7CisJCWN0cmwgJj0gflNESENJX0NUUkxfNEJJVEJVUzsKKwkJYnJlYWs7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzQ6CisJCWN0cmwgfD0gU0RIQ0lfQ1RSTF80QklUQlVTOworCQljdHJsICY9IH5TREhDSV9DVFJMXzhCSVRCVVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXNkaGNpX3dyaXRlYihob3N0LCBjdHJsLCBTREhDSV9IT1NUX0NPTlRST0wpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2RoY2lfb3BzIHNkaGNpX3MzY19vcHMgPSB7CiAJLmdldF9tYXhfY2xvY2sJCT0gc2RoY2lfczNjX2dldF9tYXhfY2xrLAogCS5zZXRfY2xvY2sJCT0gc2RoY2lfczNjX3NldF9jbG9jaywKIAkuZ2V0X21pbl9jbG9jawkJPSBzZGhjaV9zM2NfZ2V0X21pbl9jbG9jaywKKwkucGxhdGZvcm1fOGJpdF93aWR0aAk9IHNkaGNpX3MzY19wbGF0Zm9ybV84Yml0X3dpZHRoLAogfTsKIAogc3RhdGljIHZvaWQgc2RoY2lfczNjX25vdGlmeV9jaGFuZ2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgc3RhdGUpCkBAIC00NzMsNiArNTA2LDkgQEAKIAlpZiAocGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX1BFUk1BTkVOVCkKIAkJaG9zdC0+bW1jLT5jYXBzID0gTU1DX0NBUF9OT05SRU1PVkFCTEU7CiAKKwlpZiAocGRhdGEtPmhvc3RfY2FwcykKKwkJaG9zdC0+bW1jLT5jYXBzIHw9IHBkYXRhLT5ob3N0X2NhcHM7CisKIAlob3N0LT5xdWlya3MgfD0gKFNESENJX1FVSVJLXzMyQklUX0RNQV9BRERSIHwKIAkJCSBTREhDSV9RVUlSS18zMkJJVF9ETUFfU0laRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdXNoYy5jIGIvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMKaW5kZXggZjhmNjVkZi4uZjA4Zjk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yODUyLmMgYi9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYwppbmRleCBkOWQ3ZWZiLi42MzIyZDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYwpAQCAtOTMwLDcgKzkzMCw3IEBACiAKIAlpbml0X2NvbXBsZXRpb24oJmRldi0+ZG1hX2RvbmUpOwogCi0JZGV2LT5jYXJkX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZShEUlZfTkFNRSk7CisJZGV2LT5jYXJkX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKIAogCWlmICghZGV2LT5jYXJkX3dvcmtxdWV1ZSkKIAkJZ290byBlcnJvcjk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9zbV9mdGwuYyBiL2RyaXZlcnMvbXRkL3NtX2Z0bC5jCmluZGV4IDY3ODIyY2YuLmFjMGQ2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3NtX2Z0bC5jCisrKyBiL2RyaXZlcnMvbXRkL3NtX2Z0bC5jCkBAIC0xMjU4LDcgKzEyNTgsNyBAQAogc3RhdGljIF9faW5pdCBpbnQgc21fbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwotCWNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgic21mbHVzaCIpOworCWNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKCJzbWZsdXNoIik7CiAKIAlpZiAoSVNfRVJSKGNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSkpCiAJCXJldHVybiBQVFJfRVJSKGNhY2hlX2ZsdXNoX3dvcmtxdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCmluZGV4IGY0OWU0OWQuLjVlYmUyODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCkBAIC02NzIsMzMgKzY3Miw3IEBACiAJCXViaS0+bm9yX2ZsYXNoID0gMTsKIAl9CiAKLQkvKgotCSAqIFNldCBVQkkgbWluLiBJL08gc2l6ZSAoQHViaS0+bWluX2lvX3NpemUpLiBXZSB1c2UgQG10ZC0+d3JpdGVidWZzaXplCi0JICogZm9yIHRoZXNlIHB1cnBvc2VzLCBub3QgQG10ZC0+d3JpdGVzaXplLiBBdCB0aGUgbW9tZW50IHRoaXMgZG9lcyBub3QKLQkgKiBtYXR0ZXIgZm9yIE5BTkQsIGJlY2F1c2UgY3VycmVudGx5IEBtdGQtPndyaXRlYnVmc2l6ZSBpcyBlcXVpdmFsZW50IHRvCi0JICogQG10ZC0+d3JpdGVzaXplIGZvciBhbGwgTkFORHMuIEhvd2V2ZXIsIHNvbWUgQ0ZJIE5PUiBmbGFzaGVzIG1heQotCSAqIGhhdmUgQG10ZC0+d3JpdGVidWZzaXplIHdoaWNoIGlzIG11bHRpcGxlIG9mIEBtdGQtPndyaXRlc2l6ZS4KLQkgKgotCSAqIFRoZSByZWFzb24gd2UgdXNlIEBtdGQtPndyaXRlYnVmc2l6ZSBmb3IgQHViaS0+bWluX2lvX3NpemUgaXMgdGhhdAotCSAqIFVCSSBhbmQgVUJJRlMgcmVjb3ZlcnkgYWxnb3JpdGhtcyByZWx5IG9uIHRoZSBmYWN0IHRoYXQgaWYgdGhlcmUgd2FzCi0JICogYW4gdW5jbGVhbiBwb3dlciBjdXQsIHRoZW4gd2UgY2FuIGZpbmQgb2Zmc2V0IG9mIHRoZSBsYXN0IGNvcnJ1cHRlZAotCSAqIG5vZGUsIGFsaWduIHRoZSBvZmZzZXQgdG8gQHViaS0+bWluX2lvX3NpemUsIHJlYWQgdGhlIHJlc3Qgb2YgdGhlCi0JICogZXJhc2VibG9jayBzdGFydGluZyBmcm9tIHRoaXMgb2Zmc2V0LCBhbmQgY2hlY2sgd2hldGhlciB0aGVyZSBhcmUKLQkgKiBvbmx5IDB4RkYgYnl0ZXMuIElmIHllcywgdGhlbiB3ZSBhcmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGEKLQkgKiBjb3JydXB0aW9uIGNhdXNlZCBieSBhIHBvd2VyIGN1dCwgaWYgbm90LCB0aGVuIHRoaXMgaXMgcHJvYmFibHkgc29tZQotCSAqIHNldmVyZSBjb3JydXB0aW9uLgotCSAqCi0JICogVGh1cywgd2UgaGF2ZSB0byB1c2UgdGhlIG1heGltdW0gd3JpdGUgdW5pdCBzaXplIG9mIHRoZSBmbGFzaCwgd2hpY2gKLQkgKiBpcyBAbXRkLT53cml0ZWJ1ZnNpemUsIGJlY2F1c2UgQG10ZC0+d3JpdGVzaXplIGlzIHRoZSBtaW5pbXVtIHdyaXRlCi0JICogc2l6ZSwgbm90IHRoZSBtYXhpbXVtLgotCSAqLwotCWlmICh1YmktPm10ZC0+dHlwZSA9PSBNVERfTkFOREZMQVNIKQotCQl1YmlfYXNzZXJ0KHViaS0+bXRkLT53cml0ZWJ1ZnNpemUgPT0gdWJpLT5tdGQtPndyaXRlc2l6ZSk7Ci0JZWxzZSBpZiAodWJpLT5tdGQtPnR5cGUgPT0gTVREX05PUkZMQVNIKQotCQl1YmlfYXNzZXJ0KHViaS0+bXRkLT53cml0ZWJ1ZnNpemUgJSB1YmktPm10ZC0+d3JpdGVzaXplID09IDApOwotCi0JdWJpLT5taW5faW9fc2l6ZSA9IHViaS0+bXRkLT53cml0ZWJ1ZnNpemU7Ci0KKwl1YmktPm1pbl9pb19zaXplID0gdWJpLT5tdGQtPndyaXRlc2l6ZTsKIAl1YmktPmhkcnNfbWluX2lvX3NpemUgPSB1YmktPm10ZC0+d3JpdGVzaXplID4+IHViaS0+bXRkLT5zdWJwYWdlX3NmdDsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKaW5kZXggYTY5OWJiZi4uMzgyNDM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwpAQCAtNDgsNiArNDgsNyBAQAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMkNfQil9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMkNfQjIpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFEKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wxRF8yXzApfSwKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCiAJeyAwIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKaW5kZXggMGM3ODExZi4uYTE3OWNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwpAQCAtMTc4Niw2ICsxNzg2LDEwIEBACiAJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CiAKIAl3cmIgPSB3cmJfZnJvbV9tY2NxKGFkYXB0ZXIpOworCWlmICghd3JiKSB7CisJCXN0YXR1cyA9IC1FQlVTWTsKKwkJZ290byBlcnI7CisJfQogCXJlcSA9IG5vbmVtYl9jbWQtPnZhOwogCXNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOwogCkBAIC0xODAxLDYgKzE4MDUsNyBAQAogCiAJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOwogCitlcnI6CiAJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IGRlNDBkM2IuLjI4YTMyYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTMxMiwxMSArMzEyLDkgQEAKIAlpZiAoYWRhcHRlci0+bGlua191cCAhPSBsaW5rX3VwKSB7CiAJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAtMTsKIAkJaWYgKGxpbmtfdXApIHsKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogTGluayB1cFxuIiwgbmV0ZGV2LT5uYW1lKTsKIAkJfSBlbHNlIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogTGluayBkb3duXG4iLCBuZXRkZXYtPm5hbWUpOwogCQl9CkBAIC0yNjI4LDggKzI2MjYsNiBAQAogCiAJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+dHhfZXEubmFwaSwgYmVfcG9sbF90eF9tY2MsCiAJCUJFX05BUElfV0VJR0hUKTsKLQotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgYmVfdW5tYXBfcGNpX2JhcnMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggZGY5OWVkZi4uMGJhNTlkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNzU1Myw2ICs3NTUzLDEwIEBACiAJICAgICEoZGF0YSAmIEVUSF9GTEFHX1JYVkxBTikpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogVFNPIHdpdGggVkxBTiB0YWcgd29uJ3Qgd29yayB3aXRoIGN1cnJlbnQgZmlybXdhcmUgKi8KKwlpZiAoIShkYXRhICYgRVRIX0ZMQUdfVFhWTEFOKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlyYyA9IGV0aHRvb2xfb3Bfc2V0X2ZsYWdzKGRldiwgZGF0YSwgRVRIX0ZMQUdfUlhIQVNIIHwgRVRIX0ZMQUdfUlhWTEFOIHwKIAkJCQkgIEVUSF9GTEFHX1RYVkxBTik7CiAJaWYgKHJjKQpAQCAtNzk2MiwxMSArNzk2Niw4IEBACiAKIAkJLyogQUVSIChBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcpIGhvb2tzICovCiAJCWVyciA9IHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7Ci0JCWlmIChlcnIpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgIgotCQkJCQkgICAgImZhaWxlZCAweCV4XG4iLCBlcnIpOwotCQkJLyogbm9uLWZhdGFsLCBjb250aW51ZSAqLwotCQl9CisJCWlmICghZXJyKQorCQkJYnAtPmZsYWdzIHw9IEJOWDJfRkxBR19BRVJfRU5BQkxFRDsKIAogCX0gZWxzZSB7CiAJCWJwLT5wY2l4X2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QQ0lYKTsKQEAgLTgyMjksOCArODIzMCwxMCBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0X3VubWFwOgotCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfUENJRSkKKwlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX0FFUl9FTkFCTEVEKSB7CiAJCXBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOworCQlicC0+ZmxhZ3MgJj0gfkJOWDJfRkxBR19BRVJfRU5BQkxFRDsKKwl9CiAKIAlpZiAoYnAtPnJlZ3ZpZXcpIHsKIAkJaW91bm1hcChicC0+cmVndmlldyk7CkBAIC04NDE4LDggKzg0MjEsMTAgQEAKIAogCWtmcmVlKGJwLT50ZW1wX3N0YXRzX2Jsayk7CiAKLQlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1BDSUUpCisJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19BRVJfRU5BQkxFRCkgewogCQlwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwkJYnAtPmZsYWdzICY9IH5CTlgyX0ZMQUdfQUVSX0VOQUJMRUQ7CisJfQogCiAJZnJlZV9uZXRkZXYoZGV2KTsKIApAQCAtODUzNSw3ICs4NTQwLDcgQEAKIAl9CiAJcnRubF91bmxvY2soKTsKIAotCWlmICghKGJwLT5mbGFncyAmIEJOWDJfRkxBR19QQ0lFKSkKKwlpZiAoIShicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQpKQogCQlyZXR1cm4gcmVzdWx0OwogCiAJZXJyID0gcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggNTQ4OGEyZTguLmY0NTlmYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuaAorKysgYi9kcml2ZXJzL25ldC9ibngyLmgKQEAgLTY3NDEsNiArNjc0MSw3IEBACiAjZGVmaW5lIEJOWDJfRkxBR19KVU1CT19CUk9LRU4JCTB4MDAwMDA4MDAKICNkZWZpbmUgQk5YMl9GTEFHX0NBTl9LRUVQX1ZMQU4JCTB4MDAwMDEwMDAKICNkZWZpbmUgQk5YMl9GTEFHX0JST0tFTl9TVEFUUwkJMHgwMDAwMjAwMAorI2RlZmluZSBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQJCTB4MDAwMDQwMDAKIAogCXN0cnVjdCBibngyX25hcGkJYm54Ml9uYXBpW0JOWDJfTUFYX01TSVhfVkVDXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnguaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKaW5kZXggOGU0MTgzNy4uNzg5N2QxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnguaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCkBAIC0yMiw4ICsyMiw4IEBACiAgKiAoeW91IHdpbGwgbmVlZCB0byByZWJvb3QgYWZ0ZXJ3YXJkcykgKi8KIC8qICNkZWZpbmUgQk5YMlhfU1RPUF9PTl9FUlJPUiAqLwogCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAgICAgICIxLjYyLjAwLTQiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURSAgICAgICIyMDExLzAxLzE4IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gICAgICAiMS42Mi4wMC02IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUgICAgICAiMjAxMS8wMS8zMCIKICNkZWZpbmUgQk5YMlhfQkNfVkVSICAgICAgICAgICAgMHgwNDAyMDAKIAogI2RlZmluZSBCTlgyWF9NVUxUSV9RVUVVRQpAQCAtMTYxMywxOSArMTYxMywyMyBAQAogI2RlZmluZSBCTlgyWF9CVFIJCQk0CiAjZGVmaW5lIE1BWF9TUFFfUEVORElORwkJCTgKIAotCi0vKiBDTU5HIGNvbnN0YW50cwotICAgZGVyaXZlZCBmcm9tIGxhYiBleHBlcmltZW50cywgYW5kIG5vdCBmcm9tIHN5c3RlbSBzcGVjIGNhbGN1bGF0aW9ucyAhISEgKi8KLSNkZWZpbmUgREVGX01JTl9SQVRFCQkJMTAwCisvKiBDTU5HIGNvbnN0YW50cywgYXMgZGVyaXZlZCBmcm9tIHN5c3RlbSBzcGVjIGNhbGN1bGF0aW9ucyAqLworLyogZGVmYXVsdCBNSU4gcmF0ZSBpbiBjYXNlIFZOSUMgbWluIHJhdGUgaXMgY29uZmlndXJlZCB0byB6ZXJvIC0gMTAwTWJwcyAqLworI2RlZmluZSBERUZfTUlOX1JBVEUJCQkJCTEwMAogLyogcmVzb2x1dGlvbiBvZiB0aGUgcmF0ZSBzaGFwaW5nIHRpbWVyIC0gMTAwIHVzZWMgKi8KLSNkZWZpbmUgUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDCTEwMAotLyogcmVzb2x1dGlvbiBvZiBmYWlybmVzcyBhbGdvcml0aG0gaW4gdXNlY3MgLQotICAgY29lZmZpY2llbnQgZm9yIGNhbGN1bGF0aW5nIHRoZSBhY3R1YWwgdCBmYWlyICovCi0jZGVmaW5lIFRfRkFJUl9DT0VGCQkJMTAwMDAwMDAKKyNkZWZpbmUgUlNfUEVSSU9ESUNfVElNRU9VVF9VU0VDCQkJMTAwCiAvKiBudW1iZXIgb2YgYnl0ZXMgaW4gc2luZ2xlIFFNIGFyYml0cmF0aW9uIGN5Y2xlIC0KLSAgIGNvZWZmaWNpZW50IGZvciBjYWxjdWxhdGluZyB0aGUgZmFpcm5lc3MgdGltZXIgKi8KLSNkZWZpbmUgUU1fQVJCX0JZVEVTCQkJNDAwMDAKLSNkZWZpbmUgRkFJUl9NRU0JCQkyCisgKiBjb2VmZmljaWVudCBmb3IgY2FsY3VsYXRpbmcgdGhlIGZhaXJuZXNzIHRpbWVyICovCisjZGVmaW5lIFFNX0FSQl9CWVRFUwkJCQkJMTYwMDAwCisvKiByZXNvbHV0aW9uIG9mIE1pbiBhbGdvcml0aG0gMToxMDAgKi8KKyNkZWZpbmUgTUlOX1JFUwkJCQkJCTEwMAorLyogaG93IG1hbnkgYnl0ZXMgYWJvdmUgdGhyZXNob2xkIGZvciB0aGUgbWluaW1hbCBjcmVkaXQgb2YgTWluIGFsZ29yaXRobSovCisjZGVmaW5lIE1JTl9BQk9WRV9USFJFU0gJCQkJMzI3NjgKKy8qIEZhaXJuZXNzIGFsZ29yaXRobSBpbnRlZ3JhdGlvbiB0aW1lIGNvZWZmaWNpZW50IC0KKyAqIGZvciBjYWxjdWxhdGluZyB0aGUgYWN0dWFsIFRmYWlyICovCisjZGVmaW5lIFRfRkFJUl9DT0VGCSgoTUlOX0FCT1ZFX1RIUkVTSCArICBRTV9BUkJfQllURVMpICogOCAqIE1JTl9SRVMpCisvKiBNZW1vcnkgb2YgZmFpcm5lc3MgYWxnb3JpdGhtIC4gMiBjeWNsZXMgKi8KKyNkZWZpbmUgRkFJUl9NRU0JCQkJCTIKIAogCiAjZGVmaW5lIEFUVE5fTklHX0ZPUl9GVU5DCQkoMUwgPDwgOCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKaW5kZXggNzEwY2U1ZC4uOTM3OTgxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKQEAgLTI1OSwxMCArMjU5LDQ0IEBACiAjZW5kaWYKIH0KIAorLyogVGltZXN0YW1wIG9wdGlvbiBsZW5ndGggYWxsb3dlZCBmb3IgVFBBIGFnZ3JlZ2F0aW9uOgorICoKKyAqCQlub3Agbm9wIGtpbmQgbGVuZ3RoIGVjaG8gdmFsCisgKi8KKyNkZWZpbmUgVFBBX1RTVEFNUF9PUFRfTEVOCTEyCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgYXBwcm94aW1hdGUgdmFsdWUgb2YgdGhlIE1TUyBmb3IgdGhpcworICogYWdncmVnYXRpb24gdXNpbmcgdGhlIGZpcnN0IHBhY2tldCBvZiBpdC4KKyAqCisgKiBAcGFyYW0gYnAKKyAqIEBwYXJhbSBwYXJzaW5nX2ZsYWdzIFBhcnNpbmcgZmxhZ3MgZnJvbSB0aGUgU1RBUlQgQ1FFCisgKiBAcGFyYW0gbGVuX29uX2JkIFRvdGFsIGxlbmd0aCBvZiB0aGUgZmlyc3QgcGFja2V0IGZvciB0aGUKKyAqCQkgICAgIGFnZ3JlZ2F0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHUxNiBibngyeF9zZXRfbHJvX21zcyhzdHJ1Y3QgYm54MnggKmJwLCB1MTYgcGFyc2luZ19mbGFncywKKwkJCQkgICAgdTE2IGxlbl9vbl9iZCkKK3sKKwkvKiBUUEEgYXJyZ3JlZ2F0aW9uIHdvbid0IGhhdmUgYW4gSVAgb3B0aW9ucyBhbmQgVENQIG9wdGlvbnMKKwkgKiBvdGhlciB0aGFuIHRpbWVzdGFtcC4KKwkgKi8KKwl1MTYgaGRyc19sZW4gPSBFVEhfSExFTiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOworCisKKwkvKiBDaGVjayBpZiB0aGVyZSB3YXMgYSBUQ1AgdGltZXN0YW1wLCBpZiB0aGVyZSBpcyBpdCdzIHdpbGwKKwkgKiBhbHdheXMgYmUgMTIgYnl0ZXMgbGVuZ3RoOiBub3Agbm9wIGtpbmQgbGVuZ3RoIGVjaG8gdmFsLgorCSAqCisJICogT3RoZXJ3aXNlIEZXIHdvdWxkIGNsb3NlIHRoZSBhZ2dyZWdhdGlvbi4KKwkgKi8KKwlpZiAocGFyc2luZ19mbGFncyAmIFBBUlNJTkdfRkxBR1NfVElNRV9TVEFNUF9FWElTVF9GTEFHKQorCQloZHJzX2xlbiArPSBUUEFfVFNUQU1QX09QVF9MRU47CisKKwlyZXR1cm4gbGVuX29uX2JkIC0gaGRyc19sZW47Cit9CisKIHN0YXRpYyBpbnQgYm54MnhfZmlsbF9mcmFnX3NrYihzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLAogCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IGV0aF9mYXN0X3BhdGhfcnhfY3FlICpmcF9jcWUsCi0JCQkgICAgICAgdTE2IGNxZV9pZHgpCisJCQkgICAgICAgdTE2IGNxZV9pZHgsIHUxNiBwYXJzaW5nX2ZsYWdzKQogewogCXN0cnVjdCBzd19yeF9wYWdlICpyeF9wZywgb2xkX3J4X3BnOwogCXUxNiBsZW5fb25fYmQgPSBsZTE2X3RvX2NwdShmcF9jcWUtPmxlbl9vbl9iZCk7CkBAIC0yNzUsOCArMzA5LDggQEAKIAogCS8qIFRoaXMgaXMgbmVlZGVkIGluIG9yZGVyIHRvIGVuYWJsZSBmb3J3YXJkaW5nIHN1cHBvcnQgKi8KIAlpZiAoZnJhZ19zaXplKQotCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gbWluKCh1MzIpU0dFX1BBR0VfU0laRSwKLQkJCQkJICAgICAgIG1heChmcmFnX3NpemUsICh1MzIpbGVuX29uX2JkKSk7CisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSBibngyeF9zZXRfbHJvX21zcyhicCwgcGFyc2luZ19mbGFncywKKwkJCQkJCQkgICAgICBsZW5fb25fYmQpOwogCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCWlmIChwYWdlcyA+IG1pbl90KHUzMiwgOCwgTUFYX1NLQl9GUkFHUykqU0dFX1BBR0VfU0laRSpQQUdFU19QRVJfU0dFKSB7CkBAIC0zNDQsNiArMzc4LDggQEAKIAlpZiAobGlrZWx5KG5ld19za2IpKSB7CiAJCS8qIGZpeCBpcCB4c3VtIGFuZCBnaXZlIGl0IHRvIHRoZSBzdGFjayAqLwogCQkvKiAobm8gbmVlZCB0byBtYXAgdGhlIG5ldyBza2IpICovCisJCXUxNiBwYXJzaW5nX2ZsYWdzID0KKwkJCWxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKTsKIAogCQlwcmVmZXRjaChza2IpOwogCQlwcmVmZXRjaCgoKGNoYXIgKikoc2tiKSkgKyBMMV9DQUNIRV9CWVRFUyk7CkBAIC0zNzMsOSArNDA5LDkgQEAKIAkJfQogCiAJCWlmICghYm54MnhfZmlsbF9mcmFnX3NrYihicCwgZnAsIHNrYiwKLQkJCQkJICZjcWUtPmZhc3RfcGF0aF9jcWUsIGNxZV9pZHgpKSB7Ci0JCQlpZiAoKGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS4KLQkJCSAgICBwYXJzX2ZsYWdzLmZsYWdzKSAmIFBBUlNJTkdfRkxBR1NfVkxBTikpCisJCQkJCSAmY3FlLT5mYXN0X3BhdGhfY3FlLCBjcWVfaWR4LAorCQkJCQkgcGFyc2luZ19mbGFncykpIHsKKwkJCWlmIChwYXJzaW5nX2ZsYWdzICYgUEFSU0lOR19GTEFHU19WTEFOKQogCQkJCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLAogCQkJCQkJIGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS4KIAkJCQkJCQkgICAgIHZsYW5fdGFnKSk7CkBAIC03MDMsMTkgKzczOSwyMCBAQAogewogCXUxNiBsaW5lX3NwZWVkID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOwogCWlmIChJU19NRihicCkpIHsKLQkJdTE2IG1heENmZyA9IChicC0+bWZfY29uZmlnW0JQX1ZOKGJwKV0gJgotCQkJCQkJRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+Ci0JCQkJCQlGVU5DX01GX0NGR19NQVhfQldfU0hJRlQ7Ci0JCS8qIENhbGN1bGF0ZSB0aGUgY3VycmVudCBNQVggbGluZSBzcGVlZCBsaW1pdCBmb3IgdGhlIERDQwotCQkgKiBjYXBhYmxlIGRldmljZXMKKwkJdTE2IG1heENmZyA9IGJueDJ4X2V4dHJhY3RfbWF4X2NmZyhicCwKKwkJCQkJCSAgIGJwLT5tZl9jb25maWdbQlBfVk4oYnApXSk7CisKKwkJLyogQ2FsY3VsYXRlIHRoZSBjdXJyZW50IE1BWCBsaW5lIHNwZWVkIGxpbWl0IGZvciB0aGUgTUYKKwkJICogZGV2aWNlcwogCQkgKi8KLQkJaWYgKElTX01GX1NEKGJwKSkgeworCQlpZiAoSVNfTUZfU0koYnApKQorCQkJbGluZV9zcGVlZCA9IChsaW5lX3NwZWVkICogbWF4Q2ZnKSAvIDEwMDsKKwkJZWxzZSB7IC8qIFNEIG1vZGUgKi8KIAkJCXUxNiB2bl9tYXhfcmF0ZSA9IG1heENmZyAqIDEwMDsKIAogCQkJaWYgKHZuX21heF9yYXRlIDwgbGluZV9zcGVlZCkKIAkJCQlsaW5lX3NwZWVkID0gdm5fbWF4X3JhdGU7Ci0JCX0gZWxzZSAvKiBJU19NRl9TSShicCkpICovCi0JCQlsaW5lX3NwZWVkID0gKGxpbmVfc3BlZWQgKiBtYXhDZmcpIC8gMTAwOworCQl9CiAJfQogCiAJcmV0dXJuIGxpbmVfc3BlZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5oCmluZGV4IDAzZWI0ZDYuLjMyNmJhNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5oCkBAIC0xMDQ0LDQgKzEwNDQsMjQgQEAKIHZvaWQgYm54MnhfYWNxdWlyZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKTsKIHZvaWQgYm54MnhfcmVsZWFzZV9waHlfbG9jayhzdHJ1Y3QgYm54MnggKmJwKTsKIAorLyoqCisgKiBFeHRyYWN0cyBNQVggQlcgcGFydCBmcm9tIE1GIGNvbmZpZ3VyYXRpb24uCisgKgorICogQHBhcmFtIGJwCisgKiBAcGFyYW0gbWZfY2ZnCisgKgorICogQHJldHVybiB1MTYKKyAqLworc3RhdGljIGlubGluZSB1MTYgYm54MnhfZXh0cmFjdF9tYXhfY2ZnKHN0cnVjdCBibngyeCAqYnAsIHUzMiBtZl9jZmcpCit7CisJdTE2IG1heF9jZmcgPSAobWZfY2ZnICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+CisJCQkgICAgICBGVU5DX01GX0NGR19NQVhfQldfU0hJRlQ7CisJaWYgKCFtYXhfY2ZnKSB7CisJCUJOWDJYX0VSUigiSWxsZWdhbCBjb25maWd1cmF0aW9uIGRldGVjdGVkIGZvciBNYXggQlcgLSAiCisJCQkgICJ1c2luZyAxMDAgaW5zdGVhZFxuIik7CisJCW1heF9jZmcgPSAxMDA7CisJfQorCXJldHVybiBtYXhfY2ZnOworfQorCiAjZW5kaWYgLyogQk5YMlhfQ01OX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYwppbmRleCA1YjQ0YThiLi5lZjI5MTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCkBAIC0yMzgsNyArMjM4LDcgQEAKIAlzcGVlZCB8PSAoY21kLT5zcGVlZF9oaSA8PCAxNik7CiAKIAlpZiAoSVNfTUZfU0koYnApKSB7Ci0JCXUzMiBwYXJhbSA9IDA7CisJCXUzMiBwYXJhbSA9IDAsIHBhcnQ7CiAJCXUzMiBsaW5lX3NwZWVkID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOwogCiAJCS8qIHVzZSAxMEcgaWYgbm8gbGluayBkZXRlY3RlZCAqLwpAQCAtMjUxLDkgKzI1MSwxMSBAQAogCQkJCSAgICAgICBSRVFfQkNfVkVSXzRfU0VUX01GX0JXKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChsaW5lX3NwZWVkIDwgc3BlZWQpIHsKLQkJCUJOWDJYX0RFVl9JTkZPKCJOZXcgc3BlZWQgc2hvdWxkIGJlIGxlc3Mgb3IgZXF1YWwgIgotCQkJCSAgICAgICAidG8gYWN0dWFsIGxpbmUgc3BlZWRcbiIpOworCQlwYXJ0ID0gKHNwZWVkICogMTAwKSAvIGxpbmVfc3BlZWQ7CisJCWlmIChsaW5lX3NwZWVkIDwgc3BlZWQgfHwgIXBhcnQpIHsKKwkJCUJOWDJYX0RFVl9JTkZPKCJTcGVlZCBzZXR0aW5nIHNob3VsZCBiZSBpbiBhIHJhbmdlICIKKwkJCQkgICAgICAgImZyb20gMSUlIHRvIDEwMCUlICIKKwkJCQkgICAgICAgIm9mIGFjdHVhbCBsaW5lIHNwZWVkXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCS8qIGxvYWQgb2xkIHZhbHVlcyAqLwpAQCAtMjYzLDggKzI2NSw3IEBACiAJCXBhcmFtICY9IEZVTkNfTUZfQ0ZHX01JTl9CV19NQVNLOwogCiAJCS8qIHNldCBuZXcgTUFYIHZhbHVlICovCi0JCXBhcmFtIHw9ICgoKHNwZWVkICogMTAwKSAvIGxpbmVfc3BlZWQpCi0JCQkJIDw8IEZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVCkKKwkJcGFyYW0gfD0gKHBhcnQgPDwgRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUKQogCQkJCSAgJiBGVU5DX01GX0NGR19NQVhfQldfTUFTSzsKIAogCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfU0VUX01GX0JXLCBwYXJhbSk7CkBAIC0xNzgxLDkgKzE3ODIsNyBAQAogCQl7IDB4MTAwLCAweDM1MCB9LCAvKiBtYW51Zl9pbmZvICovCiAJCXsgMHg0NTAsICAweGYwIH0sIC8qIGZlYXR1cmVfaW5mbyAqLwogCQl7IDB4NjQwLCAgMHg2NCB9LCAvKiB1cGdyYWRlX2tleV9pbmZvICovCi0JCXsgMHg2YTQsICAweDY0IH0sCiAJCXsgMHg3MDgsICAweDcwIH0sIC8qIG1hbnVmX2tleV9pbmZvICovCi0JCXsgMHg3NzgsICAweDcwIH0sCiAJCXsgICAgIDAsICAgICAwIH0KIAl9OwogCV9fYmUzMiBidWZbMHgzNTAgLyA0XTsKQEAgLTE5MzMsMTEgKzE5MzIsMTEgQEAKIAkJYnVmWzRdID0gMTsKIAkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAl9Ci0JaWYgKGJwLT5wb3J0LnBtZikKLQkJaWYgKGJueDJ4X2xpbmtfdGVzdChicCwgaXNfc2VyZGVzKSAhPSAwKSB7Ci0JCQlidWZbNV0gPSAxOwotCQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKLQkJfQorCisJaWYgKGJueDJ4X2xpbmtfdGVzdChicCwgaXNfc2VyZGVzKSAhPSAwKSB7CisJCWJ1Zls1XSA9IDE7CisJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJfQogCiAjaWZkZWYgQk5YMlhfRVhUUkFfREVCVUcKIAlibngyeF9wYW5pY19kdW1wKGJwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXQuaCBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXQuaAppbmRleCA1YTI2OGU5Li5mYTZkYmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oCkBAIC0yNDEsNyArMjQxLDcgQEAKIAkvKiBCbG9jayBJR1UsIE1JU0MsIFBYUCBhbmQgUFhQMiBwYXJpdHkgZXJyb3JzIGFzIGxvbmcgYXMgd2UgZG9uJ3QKIAkgKiB3YW50IHRvIGhhbmRsZSAic3lzdGVtIGtpbGwiIGZsb3cgYXQgdGhlIG1vbWVudC4KIAkgKi8KLQlCTE9DS19QUlRZX0lORk8oUFhQLCAweDNmZmZmZmYsIDB4M2ZmZmZmZiwgMHgzZmZmZmZmLCAweDNmZmZmZmYpLAorCUJMT0NLX1BSVFlfSU5GTyhQWFAsIDB4N2ZmZmZmZiwgMHgzZmZmZmZmLCAweDNmZmZmZmYsIDB4N2ZmZmZmZiksCiAJQkxPQ0tfUFJUWV9JTkZPXzAoUFhQMiwJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiksCiAJQkxPQ0tfUFJUWV9JTkZPXzEoUFhQMiwJMHg3ZmYsIDB4N2YsIDB4N2YsIDB4N2ZmKSwKIAlCTE9DS19QUlRZX0lORk8oSEMsIDB4NywgMHg3LCAweDcsIDApLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCmluZGV4IDcxNjBlYzUuLmRkMTIxMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYworKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKQEAgLTM5NDgsNDggKzM5NDgsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfODA3M19zZXRfeGF1aV9sb3dfcG93ZXJfbW9kZShzdHJ1Y3QgYm54MnggKmJwLAotCQkJCQkgICAgICAgc3RydWN0IGJueDJ4X3BoeSAqcGh5KQotewotCXUxNiB2YWw7Ci0JYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCi0JCQlNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZ2YWwpOwotCi0JaWYgKHZhbCA9PSAwKSB7Ci0JCS8qIE11c3RuJ3Qgc2V0IGxvdyBwb3dlciBtb2RlIGluIDgwNzMgQTAgKi8KLQkJcmV0dXJuOwotCX0KLQotCS8qIERpc2FibGUgUExMIHNlcXVlbmNlciAodXNlIHJlYWQtbW9kaWZ5LXdyaXRlIHRvIGNsZWFyIGJpdCAxMykgKi8KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwKLQkJCU1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgJnZhbCk7Ci0JdmFsICY9IH4oMTw8MTMpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKLQkJICAgICAgIE1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgdmFsKTsKLQotCS8qIFBMTCBjb250cm9scyAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MDVFLCAweDEwNzcpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MDVELCAweDAwMDApOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MDVDLCAweDAzMEIpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MDVCLCAweDEyNDApOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MDVBLCAweDI0OTApOwotCi0JLyogVHggQ29udHJvbHMgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBBNywgMHgwQzc0KTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBBNiwgMHg5MDQxKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODBBNSwgMHg0NjQwKTsKLQotCS8qIFJ4IENvbnRyb2xzICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwRkUsIDB4MDFDNCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwRkQsIDB4OTI0OSk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwRkMsIDB4MjAxNSk7Ci0KLQkvKiBFbmFibGUgUExMIHNlcXVlbmNlciAgKHVzZSByZWFkLW1vZGlmeS13cml0ZSB0byBzZXQgYml0IDEzKSAqLwotCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LCBNRElPX1hTX0RFVkFELCBNRElPX1hTX1BMTF9TRVFVRU5DRVIsICZ2YWwpOwotCXZhbCB8PSAoMTw8MTMpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgTURJT19YU19QTExfU0VRVUVOQ0VSLCB2YWwpOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoJCQlCQ004MDczIFBIWSBTRUNUSU9OCQkJICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQxNDgsOCArNDEwNiw2IEBACiAKIAlibngyeF84MDczX3NldF9wYXVzZV9jbDM3KHBhcmFtcywgcGh5LCB2YXJzKTsKIAotCWJueDJ4XzgwNzNfc2V0X3hhdWlfbG93X3Bvd2VyX21vZGUoYnAsIHBoeSk7Ci0KIAlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwKIAkJCU1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywgJnRtcDEpOwogCkBAIC02NTE5LDYgKzY0NzUsMTggQEAKIAkJCQkJIE1ESU9fUE1BX0RFVkFELAogCQkJCQkgTURJT19QTUFfUkVHXzg0ODFfTEVEMV9NQVNLLAogCQkJCQkgMHg4MCk7CisKKwkJCS8qIFRlbGwgTEVEMyB0byBibGluayBvbiBzb3VyY2UgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAorCQkJCQlNRElPX1BNQV9ERVZBRCwKKwkJCQkJTURJT19QTUFfUkVHXzg0ODFfTElOS19TSUdOQUwsCisJCQkJCSZ2YWwpOworCQkJdmFsICY9IH4oNzw8Nik7CisJCQl2YWwgfD0gKDE8PDYpOyAvKiBBODNCWzg6Nl09IDEgKi8KKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwKKwkJCQkJIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgTURJT19QTUFfUkVHXzg0ODFfTElOS19TSUdOQUwsCisJCQkJCSB2YWwpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTc3MjAsMTAgKzc2ODgsMTMgQEAKIAlzdHJ1Y3QgYm54MnhfcGh5IHBoeVtQT1JUX01BWF07CiAJc3RydWN0IGJueDJ4X3BoeSAqcGh5X2Jsa1tQT1JUX01BWF07CiAJdTE2IHZhbDsKLQlzOCBwb3J0OworCXM4IHBvcnQgPSAwOwogCXM4IHBvcnRfb2ZfcGF0aCA9IDA7Ci0KLQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCAwKTsKKwl1MzIgc3dhcF92YWwsIHN3YXBfb3ZlcnJpZGU7CisJc3dhcF92YWwgPSBSRUdfUkQoYnAsICBOSUdfUkVHX1BPUlRfU1dBUCk7CisJc3dhcF9vdmVycmlkZSA9IFJFR19SRChicCwgIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpOworCXBvcnQgXj0gKHN3YXBfdmFsICYmIHN3YXBfb3ZlcnJpZGUpOworCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIHBvcnQpOwogCS8qIFBBUlQxIC0gUmVzZXQgYm90aCBwaHlzICovCiAJZm9yIChwb3J0ID0gUE9SVF9NQVggLSAxOyBwb3J0ID49IFBPUlRfMDsgcG9ydC0tKSB7CiAJCXUzMiBzaG1lbV9iYXNlLCBzaG1lbTJfYmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYwppbmRleCA4Y2RjZjViMy4uMDMyYWUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYwpAQCAtMTk3NCwxMyArMTk3NCwyMiBAQAogCQl2bl9tYXhfcmF0ZSA9IDA7CiAKIAl9IGVsc2UgeworCQl1MzIgbWF4Q2ZnID0gYm54MnhfZXh0cmFjdF9tYXhfY2ZnKGJwLCB2bl9jZmcpOworCiAJCXZuX21pbl9yYXRlID0gKCh2bl9jZmcgJiBGVU5DX01GX0NGR19NSU5fQldfTUFTSykgPj4KIAkJCQlGVU5DX01GX0NGR19NSU5fQldfU0hJRlQpICogMTAwOwotCQkvKiBJZiBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEgKi8KKwkJLyogSWYgZmFpcm5lc3MgaXMgZW5hYmxlZCAobm90IGFsbCBtaW4gcmF0ZXMgYXJlIHplcm9lcykgYW5kCisJCSAgIGlmIGN1cnJlbnQgbWluIHJhdGUgaXMgemVybyAtIHNldCBpdCB0byAxLgorCQkgICBUaGlzIGlzIGEgcmVxdWlyZW1lbnQgb2YgdGhlIGFsZ29yaXRobS4gKi8KIAkJaWYgKGJwLT52bl93ZWlnaHRfc3VtICYmICh2bl9taW5fcmF0ZSA9PSAwKSkKIAkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOwotCQl2bl9tYXhfcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+Ci0JCQkJRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUKSAqIDEwMDsKKworCQlpZiAoSVNfTUZfU0koYnApKQorCQkJLyogbWF4Q2ZnIGluIHBlcmNlbnRzIG9mIGxpbmtzcGVlZCAqLworCQkJdm5fbWF4X3JhdGUgPSAoYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkICogbWF4Q2ZnKSAvIDEwMDsKKwkJZWxzZQorCQkJLyogbWF4Q2ZnIGlzIGFic29sdXRlIGluIDEwME1iIHVuaXRzICovCisJCQl2bl9tYXhfcmF0ZSA9IG1heENmZyAqIDEwMDsKIAl9CiAKIAlEUChORVRJRl9NU0dfSUZVUCwKQEAgLTIwMDYsNyArMjAxNSw4IEBACiAJCW1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEgPQogCQkJbWF4X3QodTMyLCAodm5fbWluX3JhdGUgKiAoVF9GQUlSX0NPRUYgLwogCQkJCQkJICAgKDggKiBicC0+dm5fd2VpZ2h0X3N1bSkpKSwKLQkJCSAgICAgIChicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgKiAyKSk7CisJCQkgICAgICAoYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkICsKKwkJCQkJCQlNSU5fQUJPVkVfVEhSRVNIKSk7CiAJCURQKE5FVElGX01TR19JRlVQLCAibV9mYWlyX3ZuLnZuX2NyZWRpdF9kZWx0YSAlZFxuIiwKIAkJICAgbV9mYWlyX3ZuLnZuX2NyZWRpdF9kZWx0YSk7CiAJfQpAQCAtMjMwMSwxNSArMjMxMSwxMCBAQAogCQkvKiBhY2NlcHQgbWF0Y2hlZCB1Y2FzdCAqLwogCQlkcm9wX2FsbF91Y2FzdCA9IDA7CiAJfQotCWlmIChmaWx0ZXJzICYgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCkgeworCWlmIChmaWx0ZXJzICYgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCkKIAkJLyogYWNjZXB0IG1hdGNoZWQgbWNhc3QgKi8KIAkJZHJvcF9hbGxfbWNhc3QgPSAwOwotCQlpZiAoSVNfTUZfU0koYnApKQotCQkJLyogc2luY2UgbWNhc3QgYWRkcmVzc2VzIHdvbid0IGFycml2ZSB3aXRoIG92bGFuLAotCQkJICogZncgbmVlZHMgdG8gYWNjZXB0IGFsbCBvZiB0aGVtIGluCi0JCQkgKiBzd2l0Y2gtaW5kZXBlbmRlbnQgbW9kZSAqLwotCQkJYWNjcF9hbGxfbWNhc3QgPSAxOwotCX0KKwogCWlmIChmaWx0ZXJzICYgQk5YMlhfQUNDRVBUX0FMTF9VTklDQVNUKSB7CiAJCS8qIGFjY2VwdCBhbGwgbWNhc3QgKi8KIAkJZHJvcF9hbGxfdWNhc3QgPSAwOwpAQCAtNDI4MSw5ICs0Mjg2LDEyIEBACiAJCWRlZl9xX2ZpbHRlcnMgfD0gQk5YMlhfQUNDRVBUX1VOSUNBU1QgfCBCTlgyWF9BQ0NFUFRfQlJPQURDQVNUIHwKIAkJCQlCTlgyWF9BQ0NFUFRfTVVMVElDQVNUOwogI2lmZGVmIEJDTV9DTklDCi0JCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOwotCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgQk5YMlhfQUNDRVBUX1VOSUNBU1QgfAotCQkJCQkgIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpOworCQlpZiAoIU5PX0ZDT0UoYnApKSB7CisJCQljbF9pZCA9IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKTsKKwkJCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLAorCQkJCQkJICBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8CisJCQkJCQkgIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpOworCQl9CiAjZW5kaWYKIAkJYnJlYWs7CiAKQEAgLTQyOTEsMTggKzQyOTksMjkgQEAKIAkJZGVmX3FfZmlsdGVycyB8PSBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8IEJOWDJYX0FDQ0VQVF9CUk9BRENBU1QgfAogCQkJCUJOWDJYX0FDQ0VQVF9BTExfTVVMVElDQVNUOwogI2lmZGVmIEJDTV9DTklDCi0JCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOwotCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgQk5YMlhfQUNDRVBUX1VOSUNBU1QgfAotCQkJCQkgIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpOworCQkvKgorCQkgKiAgUHJldmVudCBkdXBsaWNhdGlvbiBvZiBtdWx0aWNhc3QgcGFja2V0cyBieSBjb25maWd1cmluZyBGQ29FCisJCSAqICBMMiBDbGllbnQgdG8gcmVjZWl2ZSBvbmx5IG1hdGNoZWQgdW5pY2FzdCBmcmFtZXMuCisJCSAqLworCQlpZiAoIU5PX0ZDT0UoYnApKSB7CisJCQljbF9pZCA9IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKTsKKwkJCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLAorCQkJCQkJICBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCk7CisJCX0KICNlbmRpZgogCQlicmVhazsKIAogCWNhc2UgQk5YMlhfUlhfTU9ERV9QUk9NSVNDOgogCQlkZWZfcV9maWx0ZXJzIHw9IEJOWDJYX1BST01JU0NVT1VTX01PREU7CiAjaWZkZWYgQkNNX0NOSUMKLQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7Ci0JCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLCBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8Ci0JCQkJCSAgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCk7CisJCS8qCisJCSAqICBQcmV2ZW50IHBhY2tldHMgZHVwbGljYXRpb24gYnkgY29uZmlndXJpbmcgRFJPUF9BTEwgZm9yIEZDb0UKKwkJICogIEwyIENsaWVudC4KKwkJICovCisJCWlmICghTk9fRkNPRShicCkpIHsKKwkJCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOworCQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsIEJOWDJYX0FDQ0VQVF9OT05FKTsKKwkJfQogI2VuZGlmCiAJCS8qIHBhc3MgbWFuYWdlbWVudCB1bmljYXN0IHBhY2tldHMgYXMgd2VsbCAqLwogCQlsbGhfbWFzayB8PSBOSUdfTExIMF9CUkIxX0RSVl9NQVNLX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfVU5DU1Q7CkBAIC01Mjk2LDEwICs1MzE1LDYgQEAKIAkJfQogCX0KIAotCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IGJueDJ4X2h3X2xvY2tfcmVxdWlyZWQoYnAsCi0JCQkJCQkgICAgICAgYnAtPmNvbW1vbi5zaG1lbV9iYXNlLAotCQkJCQkJICAgICAgIGJwLT5jb21tb24uc2htZW0yX2Jhc2UpOwotCiAJYm54Mnhfc2V0dXBfZmFuX2ZhaWx1cmVfZGV0ZWN0aW9uKGJwKTsKIAogCS8qIGNsZWFyIFBYUDIgYXR0ZW50aW9ucyAqLwpAQCAtNTUwMyw5ICs1NTE4LDYgQEAKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIE1DUF9CTE9DSywgaW5pdF9zdGFnZSk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgRE1BRV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JYnAtPnBvcnQubmVlZF9od19sb2NrID0gYm54MnhfaHdfbG9ja19yZXF1aXJlZChicCwKLQkJCQkJCSAgICAgICBicC0+Y29tbW9uLnNobWVtX2Jhc2UsCi0JCQkJCQkgICAgICAgYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSk7CiAJaWYgKGJueDJ4X2Zhbl9mYWlsdXJlX2RldF9yZXEoYnAsIGJwLT5jb21tb24uc2htZW1fYmFzZSwKIAkJCQkgICAgICBicC0+Y29tbW9uLnNobWVtMl9iYXNlLCBwb3J0KSkgewogCQl1MzIgcmVnX2FkZHIgPSAocG9ydCA/IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCA6CkBAIC04Mzc5LDYgKzgzOTEsMTcgQEAKIAkJIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTk9UX0NPTk4pKQogCQlicC0+bWRpby5wcnRhZCA9CiAJCQlYR1hTX0VYVF9QSFlfQUREUihleHRfcGh5X2NvbmZpZyk7CisKKwkvKgorCSAqIENoZWNrIGlmIGh3IGxvY2sgaXMgcmVxdWlyZWQgdG8gYWNjZXNzIE1EQy9NRElPIGJ1cyB0byB0aGUgUEhZKHMpCisJICogSW4gTUYgbW9kZSwgaXQgaXMgc2V0IHRvIGNvdmVyIHNlbGYgdGVzdCBjYXNlcworCSAqLworCWlmIChJU19NRihicCkpCisJCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IDE7CisJZWxzZQorCQlicC0+cG9ydC5uZWVkX2h3X2xvY2sgPSBibngyeF9od19sb2NrX3JlcXVpcmVkKGJwLAorCQkJCQkJCWJwLT5jb21tb24uc2htZW1fYmFzZSwKKwkJCQkJCQlicC0+Y29tbW9uLnNobWVtMl9iYXNlKTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X2dldF9tYWNfaHdpbmZvKHN0cnVjdCBibngyeCAqYnApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuYwppbmRleCBiZGE2MGQ1Li4zNDQ1ZGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmMKQEAgLTEyMzksMTQgKzEyMzksMTQgQEAKIAlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKIAkJcmV0dXJuOwogCisJYm54Mnhfc3RhdHNfc3RtW2JwLT5zdGF0c19zdGF0ZV1bZXZlbnRdLmFjdGlvbihicCk7CisKIAkvKiBQcm90ZWN0IGEgc3RhdGUgY2hhbmdlIGZsb3cgKi8KIAlzcGluX2xvY2tfYmgoJmJwLT5zdGF0c19sb2NrKTsKIAlzdGF0ZSA9IGJwLT5zdGF0c19zdGF0ZTsKIAlicC0+c3RhdHNfc3RhdGUgPSBibngyeF9zdGF0c19zdG1bc3RhdGVdW2V2ZW50XS5uZXh0X3N0YXRlOwogCXNwaW5fdW5sb2NrX2JoKCZicC0+c3RhdHNfbG9jayk7CiAKLQlibngyeF9zdGF0c19zdG1bc3RhdGVdW2V2ZW50XS5hY3Rpb24oYnApOwotCiAJaWYgKChldmVudCAhPSBTVEFUU19FVkVOVF9VUERBVEUpIHx8IG5ldGlmX21zZ190aW1lcihicCkpCiAJCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRlICVkIC0+IGV2ZW50ICVkIC0+IHN0YXRlICVkXG4iLAogCQkgICBzdGF0ZSwgZXZlbnQsIGJwLT5zdGF0c19zdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggMTcxNzgyZS4uMTAyNGFlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtMjQ3MCw2ICsyNDcwLDEwIEBACiAJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9NQVNURVIpKQogCQlnb3RvIG91dDsKIAorCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlnb3RvIG91dDsKKwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbGFjcGR1KSkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggZjRlNjM4Yy4uNWM2ZmJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtMzI2LDYgKzMyNiwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJZ290byBvdXQ7CisKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBhcnBfaGRyX2xlbihib25kX2RldikpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggYjEwMjViOC4uMTYzZTBiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0yNzMzLDYgKzI3MzMsMTAgQEAKIAlpZiAoIXNsYXZlIHx8ICFzbGF2ZV9kb19hcnBfdmFsaWRhdGUoYm9uZCwgc2xhdmUpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJZ290byBvdXRfdW5sb2NrOworCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgYXJwX2hkcl9sZW4oZGV2KSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZwppbmRleCBkNWE5ZGI2Li41ZGVjNDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZwpAQCAtMjMsNyArMjMsNyBAQAogCiAJICBBcyBvbmx5IHRoZSBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb2YgQ0FOIGZyYW1lcyBpcyBpbXBsZW1lbnRlZCwgdGhpcwogCSAgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggdGhlIChzZXJpYWwvVVNCKSBDQU4gaGFyZHdhcmUgZnJvbToKLQkgIHd3dy5jYW51c2IuY29tIC8gd3d3LmNhbjIzMi5jb20gLyB3d3cubWljdHJvbmljLmNvbSAvIHd3dy5jYW5oYWNrLmRlCisJICB3d3cuY2FudXNiLmNvbSAvIHd3dy5jYW4yMzIuY29tIC8gd3d3Lm1pY3Ryb25pY3MuZGUgLyB3d3cuY2FuaGFjay5kZQogCiAJICBVc2Vyc3BhY2UgdG9vbHMgdG8gYXR0YWNoIHRoZSBTTENBTiBsaW5lIGRpc2NpcGxpbmUgKHNsY2FuX2F0dGFjaCwKIAkgIHNsY2FuZCkgY2FuIGJlIGZvdW5kIGluIHRoZSBjYW4tdXRpbHMgYXQgdGhlIFNvY2tldENBTiBTVk4sIHNlZQpAQCAtMTE3LDYgKzExNyw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL0tjb25maWciCisKIGNvbmZpZyBDQU5fREVCVUdfREVWSUNFUwogCWJvb2wgIkNBTiBkZXZpY2VzIGRlYnVnZ2luZyBtZXNzYWdlcyIKIAlkZXBlbmRzIG9uIENBTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlCmluZGV4IDA3Y2ExNTkuLjUzYzgyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiBjYW4tZGV2LXkJCQk6PSBkZXYubwogCiBvYmoteQkJCQkrPSB1c2IvCitvYmoteQkJCQkrPSBzb2Z0aW5nLwogCiBvYmotJChDT05GSUdfQ0FOX1NKQTEwMDApCSs9IHNqYTEwMDAvCiBvYmotJChDT05GSUdfQ0FOX01TQ0FOKQkJKz0gbXNjYW4vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCmluZGV4IDdlZjgzZDAuLjU3ZDJmZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCkBAIC0yLDcgKzIsNyBAQAogICogYXQ5MV9jYW4uYyAtIENBTiBuZXR3b3JrIGRyaXZlciBmb3IgQVQ5MSBTb0MgQ0FOIGNvbnRyb2xsZXIKICAqCiAgKiAoQykgMjAwNyBieSBIYW5zIEouIEtvY2ggPGhqa0BoYW5zamtvY2guZGU+Ci0gKiAoQykgMjAwOCwgMjAwOSwgMjAxMCBieSBNYXJjIEtsZWluZS1CdWRkZSA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICogKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgYnkgTWFyYyBLbGVpbmUtQnVkZGUgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBkaXN0cmlidXRlZCBpbiB0aGUgJ0NPUFlJTkcnCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTQwLDIyICs0MSwyMyBAQAogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogCi0jZGVmaW5lIEFUOTFfTkFQSV9XRUlHSFQJMTIKKyNkZWZpbmUgQVQ5MV9OQVBJX1dFSUdIVAkxMQogCiAvKgogICogUlgvVFggTWFpbGJveCBzcGxpdAogICogZG9uJ3QgZGFyZSB0byB0b3VjaAogICovCi0jZGVmaW5lIEFUOTFfTUJfUlhfTlVNCQkxMgorI2RlZmluZSBBVDkxX01CX1JYX05VTQkJMTEKICNkZWZpbmUgQVQ5MV9NQl9UWF9TSElGVAkyCiAKLSNkZWZpbmUgQVQ5MV9NQl9SWF9GSVJTVAkwCisjZGVmaW5lIEFUOTFfTUJfUlhfRklSU1QJMQogI2RlZmluZSBBVDkxX01CX1JYX0xBU1QJCShBVDkxX01CX1JYX0ZJUlNUICsgQVQ5MV9NQl9SWF9OVU0gLSAxKQogCiAjZGVmaW5lIEFUOTFfTUJfUlhfTUFTSyhpKQkoKDEgPDwgKGkpKSAtIDEpCiAjZGVmaW5lIEFUOTFfTUJfUlhfU1BMSVQJOAogI2RlZmluZSBBVDkxX01CX1JYX0xPV19MQVNUCShBVDkxX01CX1JYX1NQTElUIC0gMSkKLSNkZWZpbmUgQVQ5MV9NQl9SWF9MT1dfTUFTSwkoQVQ5MV9NQl9SWF9NQVNLKEFUOTFfTUJfUlhfU1BMSVQpKQorI2RlZmluZSBBVDkxX01CX1JYX0xPV19NQVNLCShBVDkxX01CX1JYX01BU0soQVQ5MV9NQl9SWF9TUExJVCkgJiBcCisJCQkJIH5BVDkxX01CX1JYX01BU0soQVQ5MV9NQl9SWF9GSVJTVCkpCiAKICNkZWZpbmUgQVQ5MV9NQl9UWF9OVU0JCSgxIDw8IEFUOTFfTUJfVFhfU0hJRlQpCiAjZGVmaW5lIEFUOTFfTUJfVFhfRklSU1QJKEFUOTFfTUJfUlhfTEFTVCArIDEpCkBAIC0xNjgsNiArMTcwLDggQEAKIAogCXN0cnVjdCBjbGsJCSpjbGs7CiAJc3RydWN0IGF0OTFfY2FuX2RhdGEJKnBkYXRhOworCisJY2FuaWRfdAkJCW1iMF9pZDsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCBhdDkxX2JpdHRpbWluZ19jb25zdCA9IHsKQEAgLTIyMCw2ICsyMjQsMTggQEAKIAlzZXRfbWJfbW9kZV9wcmlvKHByaXYsIG1iLCBtb2RlLCAwKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgYXQ5MV9jYW5faWRfdG9fcmVnX21pZChjYW5pZF90IGNhbl9pZCkKK3sKKwl1MzIgcmVnX21pZDsKKworCWlmIChjYW5faWQgJiBDQU5fRUZGX0ZMQUcpCisJCXJlZ19taWQgPSAoY2FuX2lkICYgQ0FOX0VGRl9NQVNLKSB8IEFUOTFfTUlEX01JREU7CisJZWxzZQorCQlyZWdfbWlkID0gKGNhbl9pZCAmIENBTl9TRkZfTUFTSykgPDwgMTg7CisKKwlyZXR1cm4gcmVnX21pZDsKK30KKwogLyoKICAqIFN3dGljaCB0cmFuc2NlaXZlciBvbiBvciBvZmYKICAqLwpAQCAtMjMzLDEyICsyNDksMjIgQEAKIHsKIAlzdHJ1Y3QgYXQ5MV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgcmVnX21pZDsKIAogCS8qCi0JICogVGhlIGZpcnN0IDEyIG1haWxib3hlcyBhcmUgdXNlZCBhcyBhIHJlY2VwdGlvbiBGSUZPLiBUaGUKLQkgKiBsYXN0IG1haWxib3ggaXMgY29uZmlndXJlZCB3aXRoIG92ZXJ3cml0ZSBvcHRpb24uIFRoZQotCSAqIG92ZXJ3cml0ZSBmbGFnIGluZGljYXRlcyBhIEZJRk8gb3ZlcmZsb3cuCisJICogRHVlIHRvIGEgY2hpcCBidWcgKGVycmF0YSA1MC4yLjYuMyAmIDUwLjMuNS4zKSB0aGUgZmlyc3QKKwkgKiBtYWlsYm94IGlzIGRpc2FibGVkLiBUaGUgbmV4dCAxMSBtYWlsYm94ZXMgYXJlIHVzZWQgYXMgYQorCSAqIHJlY2VwdGlvbiBGSUZPLiBUaGUgbGFzdCBtYWlsYm94IGlzIGNvbmZpZ3VyZWQgd2l0aAorCSAqIG92ZXJ3cml0ZSBvcHRpb24uIFRoZSBvdmVyd3JpdGUgZmxhZyBpbmRpY2F0ZXMgYSBGSUZPCisJICogb3ZlcmZsb3cuCiAJICovCisJcmVnX21pZCA9IGF0OTFfY2FuX2lkX3RvX3JlZ19taWQocHJpdi0+bWIwX2lkKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVQ5MV9NQl9SWF9GSVJTVDsgaSsrKSB7CisJCXNldF9tYl9tb2RlKHByaXYsIGksIEFUOTFfTUJfTU9ERV9ESVNBQkxFRCk7CisJCWF0OTFfd3JpdGUocHJpdiwgQVQ5MV9NSUQoaSksIHJlZ19taWQpOworCQlhdDkxX3dyaXRlKHByaXYsIEFUOTFfTUNSKGkpLCAweDApOwkvKiBjbGVhciBkbGMgKi8KKwl9CisKIAlmb3IgKGkgPSBBVDkxX01CX1JYX0ZJUlNUOyBpIDwgQVQ5MV9NQl9SWF9MQVNUOyBpKyspCiAJCXNldF9tYl9tb2RlKHByaXYsIGksIEFUOTFfTUJfTU9ERV9SWCk7CiAJc2V0X21iX21vZGUocHJpdiwgQVQ5MV9NQl9SWF9MQVNULCBBVDkxX01CX01PREVfUlhfT1ZSV1IpOwpAQCAtMjU0LDcgKzI4MCw4IEBACiAJCXNldF9tYl9tb2RlX3ByaW8ocHJpdiwgaSwgQVQ5MV9NQl9NT0RFX1RYLCAwKTsKIAogCS8qIFJlc2V0IHR4IGFuZCByeCBoZWxwZXIgcG9pbnRlcnMgKi8KLQlwcml2LT50eF9uZXh0ID0gcHJpdi0+dHhfZWNobyA9IHByaXYtPnJ4X25leHQgPSAwOworCXByaXYtPnR4X25leHQgPSBwcml2LT50eF9lY2hvID0gMDsKKwlwcml2LT5yeF9uZXh0ID0gQVQ5MV9NQl9SWF9GSVJTVDsKIH0KIAogc3RhdGljIGludCBhdDkxX3NldF9iaXR0aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTM3MiwxMiArMzk5LDcgQEAKIAkJbmV0ZGV2X2VycihkZXYsICJCVUchIFRYIGJ1ZmZlciBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KLQotCWlmIChjZi0+Y2FuX2lkICYgQ0FOX0VGRl9GTEFHKQotCQlyZWdfbWlkID0gKGNmLT5jYW5faWQgJiBDQU5fRUZGX01BU0spIHwgQVQ5MV9NSURfTUlERTsKLQllbHNlCi0JCXJlZ19taWQgPSAoY2YtPmNhbl9pZCAmIENBTl9TRkZfTUFTSykgPDwgMTg7Ci0KKwlyZWdfbWlkID0gYXQ5MV9jYW5faWRfdG9fcmVnX21pZChjZi0+Y2FuX2lkKTsKIAlyZWdfbWNyID0gKChjZi0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKSA/IEFUOTFfTUNSX01SVFIgOiAwKSB8CiAJCShjZi0+Y2FuX2RsYyA8PCAxNikgfCBBVDkxX01DUl9NVENSOwogCkBAIC01MzksMjcgKzU2MSwzMSBAQAogICoKICAqIFRoZW9yeSBvZiBPcGVyYXRpb246CiAgKgotICogMTIgb2YgdGhlIDE2IG1haWxib3hlcyBvbiB0aGUgY2hpcCBhcmUgcmVzZXJ2ZWQgZm9yIFJYLiB3ZSBzcGxpdAotICogdGhlbSBpbnRvIDIgZ3JvdXBzLiBUaGUgbG93ZXIgZ3JvdXAgaG9sZHMgOCBhbmQgdXBwZXIgNCBtYWlsYm94ZXMuCisgKiAxMSBvZiB0aGUgMTYgbWFpbGJveGVzIG9uIHRoZSBjaGlwIGFyZSByZXNlcnZlZCBmb3IgUlguIHdlIHNwbGl0CisgKiB0aGVtIGludG8gMiBncm91cHMuIFRoZSBsb3dlciBncm91cCBob2xkcyA3IGFuZCB1cHBlciA0IG1haWxib3hlcy4KICAqCiAgKiBMaWtlIGl0IG9yIG5vdCwgYnV0IHRoZSBjaGlwIGFsd2F5cyBzYXZlcyBhIHJlY2VpdmVkIENBTiBtZXNzYWdlCiAgKiBpbnRvIHRoZSBmaXJzdCBmcmVlIG1haWxib3ggaXQgZmluZHMgKHN0YXJ0aW5nIHdpdGggdGhlCiAgKiBsb3dlc3QpLiBUaGlzIG1ha2VzIGl0IHZlcnkgZGlmZmljdWx0IHRvIHJlYWQgdGhlIG1lc3NhZ2VzIGluIHRoZQogICogcmlnaHQgb3JkZXIgZnJvbSB0aGUgY2hpcC4gVGhpcyBpcyBob3cgd2Ugd29yayBhcm91bmQgdGhhdCBwcm9ibGVtOgogICoKLSAqIFRoZSBmaXJzdCBtZXNzYWdlIGdvZXMgaW50byBtYiBuci4gMCBhbmQgaXNzdWVzIGFuIGludGVycnVwdC4gQWxsCisgKiBUaGUgZmlyc3QgbWVzc2FnZSBnb2VzIGludG8gbWIgbnIuIDEgYW5kIGlzc3VlcyBhbiBpbnRlcnJ1cHQuIEFsbAogICogcnggaW50cyBhcmUgZGlzYWJsZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCBhIG5hcGkgcG9sbCBpcwogICogc2NoZWR1bGVkLiBXZSByZWFkIHRoZSBtYWlsYm94LCBidXQgZG8gX25vdF8gcmVlbmFibGUgdGhlIG1iICh0bwogICogcmVjZWl2ZSBhbm90aGVyIG1lc3NhZ2UpLgogICoKICAqICAgIGxvd2VyIG1ieHMgICAgICB1cHBlcgotICogICBfX19fX19eX19fX19fICAgIF9fXl9fCi0gKiAgLyAgICAgICAgICAgICBcICAvICAgICBcCisgKiAgICAgX19fX15fX19fX18gICAgX19eX18KKyAqICAgIC8gICAgICAgICAgIFwgIC8gICAgIFwKICAqICstKy0rLSstKy0rLSstKy0rKy0rLSstKy0rCi0gKiB8eHx4fHh8eHx4fHh8eHx4fHwgfCB8IHwgfAorICogfCB8eHx4fHh8eHx4fHh8eHx8IHwgfCB8IHwKICAqICstKy0rLSstKy0rLSstKy0rKy0rLSstKy0rCiAgKiAgMCAwIDAgMCAwIDAgIDAgMCAwIDAgMSAxICBcIG1haWwKICAqICAwIDEgMiAzIDQgNSAgNiA3IDggOSAwIDEgIC8gYm94CisgKiAgXgorICogIHwKKyAqICAgXAorICogICAgIHVudXNlZCwgZHVlIHRvIGNoaXAgYnVnCiAgKgogICogVGhlIHZhcmlhYmxlIHByaXYtPnJ4X25leHQgcG9pbnRzIHRvIHRoZSBuZXh0IG1haWxib3ggdG8gcmVhZCBhCiAgKiBtZXNzYWdlIGZyb20uIEFzIGxvbmcgd2UncmUgaW4gdGhlIGxvd2VyIG1haWxib3hlcyB3ZSBqdXN0IHJlYWQgdGhlCkBAIC01OTAsMTAgKzYxNiwxMCBAQAogCQkJIm9yZGVyIG9mIGluY29taW5nIGZyYW1lcyBjYW5ub3QgYmUgZ3VhcmFudGVlZFxuIik7CiAKICBhZ2FpbjoKLQlmb3IgKG1iID0gZmluZF9uZXh0X2JpdChhZGRyLCBBVDkxX01CX1JYX05VTSwgcHJpdi0+cnhfbmV4dCk7Ci0JICAgICBtYiA8IEFUOTFfTUJfUlhfTlVNICYmIHF1b3RhID4gMDsKKwlmb3IgKG1iID0gZmluZF9uZXh0X2JpdChhZGRyLCBBVDkxX01CX1JYX0xBU1QgKyAxLCBwcml2LT5yeF9uZXh0KTsKKwkgICAgIG1iIDwgQVQ5MV9NQl9SWF9MQVNUICsgMSAmJiBxdW90YSA+IDA7CiAJICAgICByZWdfc3IgPSBhdDkxX3JlYWQocHJpdiwgQVQ5MV9TUiksCi0JICAgICBtYiA9IGZpbmRfbmV4dF9iaXQoYWRkciwgQVQ5MV9NQl9SWF9OVU0sICsrcHJpdi0+cnhfbmV4dCkpIHsKKwkgICAgIG1iID0gZmluZF9uZXh0X2JpdChhZGRyLCBBVDkxX01CX1JYX0xBU1QgKyAxLCArK3ByaXYtPnJ4X25leHQpKSB7CiAJCWF0OTFfcmVhZF9tc2coZGV2LCBtYik7CiAKIAkJLyogcmVhY3RpdmF0ZSBtYWlsYm94ZXMgKi8KQEAgLTYxMCw4ICs2MzYsOCBAQAogCiAJLyogdXBwZXIgZ3JvdXAgY29tcGxldGVkLCBsb29rIGFnYWluIGluIGxvd2VyICovCiAJaWYgKHByaXYtPnJ4X25leHQgPiBBVDkxX01CX1JYX0xPV19MQVNUICYmCi0JICAgIHF1b3RhID4gMCAmJiBtYiA+PSBBVDkxX01CX1JYX05VTSkgewotCQlwcml2LT5yeF9uZXh0ID0gMDsKKwkgICAgcXVvdGEgPiAwICYmIG1iID4gQVQ5MV9NQl9SWF9MQVNUKSB7CisJCXByaXYtPnJ4X25leHQgPSBBVDkxX01CX1JYX0ZJUlNUOwogCQlnb3RvIGFnYWluOwogCX0KIApAQCAtMTAzNyw2ICsxMDYzLDY0IEBACiAJLm5kb19zdGFydF94bWl0CT0gYXQ5MV9zdGFydF94bWl0LAogfTsKIAorc3RhdGljIHNzaXplX3QgYXQ5MV9zeXNmc19zaG93X21iMF9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGF0OTFfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisKKwlpZiAocHJpdi0+bWIwX2lkICYgQ0FOX0VGRl9GTEFHKQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwOHhcbiIsIHByaXYtPm1iMF9pZCk7CisJZWxzZQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwM3hcbiIsIHByaXYtPm1iMF9pZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF0OTFfc3lzZnNfc2V0X21iMF9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3QgYXQ5MV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJdW5zaWduZWQgbG9uZyBjYW5faWQ7CisJc3NpemVfdCByZXQ7CisJaW50IGVycjsKKworCXJ0bmxfbG9jaygpOworCisJaWYgKG5kZXYtPmZsYWdzICYgSUZGX1VQKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmY2FuX2lkKTsKKwlpZiAoZXJyKSB7CisJCXJldCA9IGVycjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNhbl9pZCAmIENBTl9FRkZfRkxBRykKKwkJY2FuX2lkICY9IENBTl9FRkZfTUFTSyB8IENBTl9FRkZfRkxBRzsKKwllbHNlCisJCWNhbl9pZCAmPSBDQU5fU0ZGX01BU0s7CisKKwlwcml2LT5tYjBfaWQgPSBjYW5faWQ7CisJcmV0ID0gY291bnQ7CisKKyBvdXQ6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobWIwX2lkLCBTX0lXVVNSIHwgU19JUlVHTywKKwlhdDkxX3N5c2ZzX3Nob3dfbWIwX2lkLCBhdDkxX3N5c2ZzX3NldF9tYjBfaWQpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXQ5MV9zeXNmc19hdHRyc1tdID0geworCSZkZXZfYXR0cl9tYjBfaWQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYXQ5MV9zeXNmc19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGF0OTFfc3lzZnNfYXR0cnMsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdDkxX2Nhbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMDgyLDYgKzExNjYsNyBAQAogCWRldi0+bmV0ZGV2X29wcwk9ICZhdDkxX25ldGRldl9vcHM7CiAJZGV2LT5pcnEgPSBpcnE7CiAJZGV2LT5mbGFncyB8PSBJRkZfRUNITzsKKwlkZXYtPnN5c2ZzX2dyb3Vwc1swXSA9ICZhdDkxX3N5c2ZzX2F0dHJfZ3JvdXA7CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlwcml2LT5jYW4uY2xvY2suZnJlcSA9IGNsa19nZXRfcmF0ZShjbGspOwpAQCAtMTA5Myw2ICsxMTc4LDcgQEAKIAlwcml2LT5kZXYgPSBkZXY7CiAJcHJpdi0+Y2xrID0gY2xrOwogCXByaXYtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJcHJpdi0+bWIwX2lkID0gMHg3ZmY7CiAKIAluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5uYXBpLCBhdDkxX3BvbGwsIEFUOTFfTkFQSV9XRUlHSFQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jIGIvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYwppbmRleCBiOWE2ZDdhLi4zNjZmNWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKQEAgLTE2MTgsNyArMTYxOCw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIodGVybWluYXRpb24sIFNfSVdVR08gfCBTX0lSVUdPLCBpY2FuM19zeXNmc19zaG93X3Rlcm0sCitzdGF0aWMgREVWSUNFX0FUVFIodGVybWluYXRpb24sIFNfSVdVU1IgfCBTX0lSVUdPLCBpY2FuM19zeXNmc19zaG93X3Rlcm0sCiAJCQkJCQkgICBpY2FuM19zeXNmc19zZXRfdGVybSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppY2FuM19zeXNmc19hdHRyc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYyBiL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMKaW5kZXggN2FiNTM0YS4uNzUxM2M0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYworKysgYi9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jCkBAIC05NDAsNyArOTQwLDcgQEAKIAkJZ290byBvcGVuX3VubG9jazsKIAl9CiAKLQlwcml2LT53cSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgibWNwMjUxeF93cSIpOworCXByaXYtPndxID0gY3JlYXRlX2ZyZWV6YWJsZV93b3JrcXVldWUoIm1jcDI1MXhfd3EiKTsKIAlJTklUX1dPUksoJnByaXYtPnR4X3dvcmssIG1jcDI1MXhfdHhfd29ya19oYW5kbGVyKTsKIAlJTklUX1dPUksoJnByaXYtPnJlc3RhcnRfd29yaywgbWNwMjUxeF9yZXN0YXJ0X3dvcmtfaGFuZGxlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcKaW5kZXggMjdkMWQzOS4uZDM4NzA2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgQ0FOX01TQ0FOCi0JZGVwZW5kcyBvbiBDQU5fREVWICYmIChQUEMgfHwgTTY4SyB8fCBNNjhLTk9NTVUpCisJZGVwZW5kcyBvbiBDQU5fREVWICYmIChQUEMgfHwgTTY4SykKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgRnJlZXNjYWxlIE1TQ0FOIGJhc2VkIGNoaXBzIgogCS0tLWhlbHAtLS0KIAkgIFRoZSBNb3Rvcm9sYSBTY2FsYWJsZSBDb250cm9sbGVyIEFyZWEgTmV0d29yayAoTVNDQU4pIGRlZmluaXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jCmluZGV4IGM0MmU5NzIuLmU1NDcxMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCBwY2hfY2FuX2JpdHRpbWluZ19jb25zdCA9IHsKIAkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAotCS50c2VnMV9taW4gPSAxLAorCS50c2VnMV9taW4gPSAyLAogCS50c2VnMV9tYXggPSAxNiwKIAkudHNlZzJfbWluID0gMSwKIAkudHNlZzJfbWF4ID0gOCwKQEAgLTk1OSwxMyArOTU5LDEzIEBACiAJc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJdW5yZWdpc3Rlcl9jYW5kZXYocHJpdi0+bmRldik7Ci0JcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+cmVncyk7CiAJaWYgKHByaXYtPnVzZV9tc2kpCiAJCXBjaV9kaXNhYmxlX21zaShwcml2LT5kZXYpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlwY2hfY2FuX3Jlc2V0KHByaXYpOworCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPnJlZ3MpOwogCWZyZWVfY2FuZGV2KHByaXYtPm5kZXYpOwogfQogCkBAIC0xMjM4LDYgKzEyMzgsNyBAQAogCQlwcml2LT51c2VfbXNpID0gMDsKIAl9IGVsc2UgewogCQluZXRkZXZfZXJyKG5kZXYsICJQQ0ggQ0FOIG9wZW5lZCB3aXRoIE1TSVxuIik7CisJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCQlwcml2LT51c2VfbXNpID0gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTQ2YTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9LY29uZmlnCkBAIC0wLDAgKzEsMzAgQEAKK2NvbmZpZyBDQU5fU09GVElORworCXRyaXN0YXRlICJTb2Z0aW5nIEdtYmggQ0FOIGdlbmVyaWMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIENBTl9ERVYgJiYgSEFTX0lPTUVNCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgQ0FOIGNhcmRzIGZyb20gU29mdGluZyBHbWJoICYgc29tZSBjYXJkcworCSAgZnJvbSBWZWN0b3IgR21iaC4KKwkgIFNvZnRpbmcgR21iaCBDQU4gY2FyZHMgY29tZSB3aXRoIDEgb3IgMiBwaHlzaWNhbCBidXNzZXMuCisJICBUaG9zZSBjYXJkcyB0eXBpY2FsbHkgdXNlIER1YWwgUG9ydCBSQU0gdG8gY29tbXVuaWNhdGUKKwkgIHdpdGggdGhlIGhvc3QgQ1BVLiBUaGUgaW50ZXJmYWNlIGlzIHRoZW4gaWRlbnRpY2FsIGZvciBQQ0kKKwkgIGFuZCBQQ01DSUEgY2FyZHMuIFRoaXMgZHJpdmVyIG9wZXJhdGVzIG9uIGEgcGxhdGZvcm0gZGV2aWNlLAorCSAgd2hpY2ggaGFzIGJlZW4gY3JlYXRlZCBieSBzb2Z0aW5nX2NzIG9yIHNvZnRpbmdfcGNpIGRyaXZlci4KKwkgIFdhcm5pbmc6CisJICBUaGUgQVBJIG9mIHRoZSBjYXJkIGRvZXMgbm90IGFsbG93IGZpbmUgY29udHJvbCBwZXIgYnVzLCBidXQKKwkgIGNvbnRyb2xzIHRoZSAyIGJ1c3NlcyBvbiB0aGUgY2FyZCB0b2dldGhlci4KKwkgIEFzIHN1Y2gsIHNvbWUgYWN0aW9ucyAoc3RhcnQvc3RvcC9idXNvZmYgcmVjb3ZlcnkpIG9uIDEgYnVzCisJICBtdXN0IGJyaW5nIGRvd24gdGhlIG90aGVyIGJ1cyB0b28gdGVtcG9yYXJpbHkuCisKK2NvbmZpZyBDQU5fU09GVElOR19DUworCXRyaXN0YXRlICJTb2Z0aW5nIEdtYmggQ0FOIHBjbWNpYSBjYXJkcyIKKwlkZXBlbmRzIG9uIFBDTUNJQQorCWRlcGVuZHMgb24gQ0FOX1NPRlRJTkcKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgZnJvbSBTb2Z0aW5nIEdtYmggJiBzb21lIGNhcmRzCisJICBmcm9tIFZlY3RvciBHbWJoLgorCSAgWW91IG5lZWQgZmlybXdhcmUgZm9yIHRoZXNlLCB3aGljaCB5b3UgY2FuIGdldCBhdAorCSAgaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL3NvY2tldGNhbi8KKwkgIFRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGlzIHdyaXR0ZW4gYWdhaW5zdAorCSAgZmlybXdhcmUgdmVyc2lvbiA0LjYgKHNvZnRpbmctZnctNC42LWJpbmFyaWVzLnRhci5neikKKwkgIEluIG9yZGVyIHRvIHVzZSB0aGUgY2FyZCBhcyBDQU4gZGV2aWNlLCB5b3UgbmVlZCB0aGUgU29mdGluZyBnZW5lcmljCisJICBzdXBwb3J0IHRvby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlNTAxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorCitzb2Z0aW5nLXkgOj0gc29mdGluZ19tYWluLm8gc29mdGluZ19mdy5vCitvYmotJChDT05GSUdfQ0FOX1NPRlRJTkcpICs9IHNvZnRpbmcubworb2JqLSQoQ09ORklHX0NBTl9TT0ZUSU5HX0NTKSArPSBzb2Z0aW5nX2NzLm8KKworY2NmbGFncy0kKENPTkZJR19DQU5fREVCVUdfREVWSUNFUykgOj0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzlmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBzb2Z0aW5nIGNvbW1vbiBpbnRlcmZhY2VzCisgKgorICogYnkgS3VydCBWYW4gRGlqY2ssIDIwMDgtMjAxMAorICovCisKKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4vZGV2Lmg+CisKKyNpbmNsdWRlICJzb2Z0aW5nX3BsYXRmb3JtLmgiCisKK3N0cnVjdCBzb2Z0aW5nOworCitzdHJ1Y3Qgc29mdGluZ19wcml2IHsKKwlzdHJ1Y3QgY2FuX3ByaXYgY2FuOyAvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIhICovCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZDsKKwlzdHJ1Y3QgeworCQlpbnQgcGVuZGluZzsKKwkJLyogdmFyaWFibGVzIHdpY2ggaG9sZCB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWludCBlY2hvX3B1dDsKKwkJaW50IGVjaG9fZ2V0OworCX0gdHg7CisJc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgYnRyX2NvbnN0OworCWludCBpbmRleDsKKwl1aW50OF90IG91dHB1dDsKKwl1aW50MTZfdCBjaGlwOworfTsKKyNkZWZpbmUgbmV0ZGV2MnNvZnRpbmcobmV0ZGV2KQkoKHN0cnVjdCBzb2Z0aW5nX3ByaXYgKiluZXRkZXZfcHJpdihuZXRkZXYpKQorCitzdHJ1Y3Qgc29mdGluZyB7CisJY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqcGRhdDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRbMl07CisJc3BpbmxvY2tfdCBzcGluOyAvKiBwcm90ZWN0IHRoaXMgc3RydWN0dXJlICYgRFBSQU0gYWNjZXNzICovCisJa3RpbWVfdCB0c19yZWY7CisJa3RpbWVfdCB0c19vdmVyZmxvdzsgLyogdGltZXN0YW1wIG92ZXJmbG93IHZhbHVlLCBpbiBrdGltZSAqLworCisJc3RydWN0IHsKKwkJLyogaW5kaWNhdGlvbiBvZiBmaXJtd2FyZSBzdGF0dXMgKi8KKwkJaW50IHVwOworCQkvKiBwcm90ZWN0aW9uIG9mIHRoZSAndXAnIHZhcmlhYmxlICovCisJCXN0cnVjdCBtdXRleCBsb2NrOworCX0gZnc7CisJc3RydWN0IHsKKwkJaW50IG5yOworCQlpbnQgcmVxdWVzdGVkOworCQlpbnQgc3ZjX2NvdW50OworCQl1bnNpZ25lZCBpbnQgZHByYW1fcG9zaXRpb247CisJfSBpcnE7CisJc3RydWN0IHsKKwkJaW50IHBlbmRpbmc7CisJCWludCBsYXN0X2J1czsKKwkJLyoKKwkJICoga2VlcCB0aGUgYnVzIHRoYXQgbGFzdCB0eCdkIGEgbWVzc2FnZSwKKwkJICogaW4gb3JkZXIgdG8gbGV0IGV2ZXJ5IG5ldGRldiBxdWV1ZSByZXN1bWUKKwkJICovCisJfSB0eDsKKwlfX2lvbWVtIHVpbnQ4X3QgKmRwcmFtOworCXVuc2lnbmVkIGxvbmcgZHByYW1fcGh5czsKKwl1bnNpZ25lZCBsb25nIGRwcmFtX3NpemU7CisJc3RydWN0IHsKKwkJdWludDE2X3QgZndfdmVyc2lvbiwgaHdfdmVyc2lvbiwgbGljZW5zZSwgc2VyaWFsOworCQl1aW50MTZfdCBjaGlwWzJdOworCQl1bnNpZ25lZCBpbnQgZnJlcTsgLyogcmVtb3RlIGNwdSdzIG9wZXJhdGluZyBmcmVxdWVuY3kgKi8KKwl9IGlkOworfTsKKworZXh0ZXJuIGludCBzb2Z0aW5nX2RlZmF1bHRfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCitleHRlcm4ga3RpbWVfdCBzb2Z0aW5nX3JhdzJrdGltZShzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgdTMyIHJhdyk7CisKK2V4dGVybiBpbnQgc29mdGluZ19jaGlwX3Bvd2Vyb24oc3RydWN0IHNvZnRpbmcgKmNhcmQpOworCitleHRlcm4gaW50IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwKKwkJY29uc3QgY2hhciAqbXNnKTsKKworLyogTG9hZCBmaXJtd2FyZSBhZnRlciByZXNldCAqLworZXh0ZXJuIGludCBzb2Z0aW5nX2xvYWRfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQsCisJCQlfX2lvbWVtIHVpbnQ4X3QgKnZpcnQsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgb2Zmc2V0KTsKKworLyogTG9hZCBmaW5hbCBhcHBsaWNhdGlvbiBmaXJtd2FyZSBhZnRlciBib290bG9hZGVyICovCitleHRlcm4gaW50IHNvZnRpbmdfbG9hZF9hcHBfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQpOworCisvKgorICogZW5hYmxlIG9yIGRpc2FibGUgaXJxCisgKiBvbmx5IGNhbGxlZCB3aXRoIGZ3LmxvY2sgbG9ja2VkCisgKi8KK2V4dGVybiBpbnQgc29mdGluZ19lbmFibGVfaXJxKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQgZW5hYmxlKTsKKworLyogc3RhcnQvc3RvcCAxIGJ1cyBvbiBjYXJkICovCitleHRlcm4gaW50IHNvZnRpbmdfc3RhcnRzdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB1cCk7CisKKy8qIG5ldGlmX3J4KCkgKi8KK2V4dGVybiBpbnQgc29mdGluZ19uZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJY29uc3Qgc3RydWN0IGNhbl9mcmFtZSAqbXNnLCBrdGltZV90IGt0aW1lKTsKKworLyogU09GVElORyBEUFJBTSBtYXBwaW5ncyAqLworI2RlZmluZSBEUFJBTV9SWAkJMHgwMDAwCisJI2RlZmluZSBEUFJBTV9SWF9TSVpFCTMyCisJI2RlZmluZSBEUFJBTV9SWF9DTlQJMTYKKyNkZWZpbmUgRFBSQU1fUlhfUkQJCTB4MDIwMQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JYX1dSCQkweDAyMDUJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9SWF9MT1NUCQkweDAyMDcJLyogdWludDhfdCAqLworCisjZGVmaW5lIERQUkFNX0ZDVF9QQVJBTQkJMHgwMzAwCS8qIGludDE2X3QgWzIwXSAqLworI2RlZmluZSBEUFJBTV9GQ1RfUkVTVUxUCTB4MDMyOAkvKiBpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0ZDVF9IT1NUCQkweDAzMmIJLyogdWludDE2X3QgKi8KKworI2RlZmluZSBEUFJBTV9JTkZPX0JVU1NUQVRFCTB4MDMzMQkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9JTkZPX0JVU1NUQVRFMgkweDAzMzUJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fSU5GT19FUlJTVEFURQkweDAzMzkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fSU5GT19FUlJTVEFURTIJMHgwMzNkCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUCQkweDAzNDEJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fQ0xSX1JFQ1ZfRklGTwkweDAzNDUJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVTRVRfVElNRQkweDAzNGQJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fVElNRQkJMHgwMzUwCS8qIHVpbnQ2NF90ICovCisjZGVmaW5lIERQUkFNX1dSX1NUQVJUCQkweDAzNTgJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9XUl9FTkQJCTB4MDM1OQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUX1JYX0ZJRk8JMHgwMzYxCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUX1RYX0ZJRk8JMHgwMzY0CS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVBRF9GSUZPX0xFVkVMCTB4MDM2NQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JYX0ZJRk9fTEVWRUwJMHgwMzY2CS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1RYX0ZJRk9fTEVWRUwJMHgwMzY2CS8qIHVpbnQxNl90ICovCisKKyNkZWZpbmUgRFBSQU1fVFgJCTB4MDQwMAkvKiB1aW50MTZfdCAqLworCSNkZWZpbmUgRFBSQU1fVFhfU0laRQkxNgorCSNkZWZpbmUgRFBSQU1fVFhfQ05UCTMyCisjZGVmaW5lIERQUkFNX1RYX1JECQkweDA2MDEJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9UWF9XUgkJMHgwNjA1CS8qIHVpbnQ4X3QgKi8KKworI2RlZmluZSBEUFJBTV9DT01NQU5ECQkweDA3ZTAJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVDRUlQVAkJMHgwN2YwCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0lSUV9UT0hPU1QJMHgwN2ZlCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fSVJRX1RPQ0FSRAkweDA3ZmYJLyogdWludDhfdCAqLworCisjZGVmaW5lIERQUkFNX1YyX1JFU0VUCQkweDBlMDAJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9WMl9JUlFfVE9IT1NUCTB4MGUwMgkvKiB1aW50OF90ICovCisKKyNkZWZpbmUgVFhNQVgJKERQUkFNX1RYX0NOVCAtIDEpCisKKy8qIERQUkFNIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBSRVNfTk9ORQkwCisjZGVmaW5lIFJFU19PSwkJMQorI2RlZmluZSBSRVNfTk9LCQkyCisjZGVmaW5lIFJFU19VTktOT1dOCTMKKy8qIERQUkFNIGZsYWdzICovCisjZGVmaW5lIENNRF9UWAkJMHgwMQorI2RlZmluZSBDTURfQUNLCQkweDAyCisjZGVmaW5lIENNRF9YVEQJCTB4MDQKKyNkZWZpbmUgQ01EX1JUUgkJMHgwOAorI2RlZmluZSBDTURfRVJSCQkweDEwCisjZGVmaW5lIENNRF9CVVMyCTB4ODAKKworLyogcmV0dXJuZWQgZmlmbyBlbnRyeSBidXMgc3RhdGUgbWFza3MgKi8KKyNkZWZpbmUgU0ZfTUFTS19CVVNPRkYJCTB4ODAKKyNkZWZpbmUgU0ZfTUFTS19FUEFTU0lWRQkweDYwCisKKy8qIGJ1cyBzdGF0ZXMgKi8KKyNkZWZpbmUgU1RBVEVfQlVTT0ZGCTIKKyNkZWZpbmUgU1RBVEVfRVBBU1NJVkUJMQorI2RlZmluZSBTVEFURV9FQUNUSVZFCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfY3MuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFiYjRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19jcy5jCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAKKyAqCisgKiAtIEt1cnQgVmFuIERpamNrLCBFSUEgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKworI2luY2x1ZGUgInNvZnRpbmdfcGxhdGZvcm0uaCIKKworc3RhdGljIGludCBzb2Z0aW5nY3NfaW5kZXg7CitzdGF0aWMgc3BpbmxvY2tfdCBzb2Z0aW5nY3NfaW5kZXhfbG9jazsKKworc3RhdGljIGludCBzb2Z0aW5nY3NfcmVzZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHYpOworc3RhdGljIGludCBzb2Z0aW5nY3NfZW5hYmxlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdik7CisKKy8qCisgKiBwbGF0Zm9ybV9kYXRhIGRlc2NyaXB0aW9ucworICovCisjZGVmaW5lIE1IWiAoMTAwMCoxMDAwKQorc3RhdGljIGNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgc29mdGluZ2NzX3BsYXRmb3JtX2RhdGFbXSA9IHsKK3sKKwkubmFtZSA9ICJDQU5jYXJkIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwMSwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMTYgKiBNSFosIC5tYXhfYnJwID0gMzIsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNhcmQuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIkNBTmNhcmQtTkVDIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwMiwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMTYgKiBNSFosIC5tYXhfYnJwID0gMzIsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNhcmQuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIkNBTmNhcmQtU0pBIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwNCwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjAgKiBNSFosIC5tYXhfYnJwID0gMzIsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbnNqYS5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiQ0FOY2FyZC0yIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwNSwKKwkuZ2VuZXJhdGlvbiA9IDIsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjQgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MTAwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkMi5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQyLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY3JkMi5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gTlVMTCwKK30sIHsKKwkubmFtZSA9ICJWZWN0b3ItQ0FOY2FyZCIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgwODEsCisJLmdlbmVyYXRpb24gPSAxLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDE2ICogTUhaLCAubWF4X2JycCA9IDY0LCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDA4MDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZC5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jYXJkLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJWZWN0b3ItQ0FOY2FyZC1TSkEiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDg0LAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAyMCAqIE1IWiwgLm1heF9icnAgPSAzMiwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2Fuc2phLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJWZWN0b3ItQ0FOY2FyZC0yIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDA4NSwKKwkuZ2VuZXJhdGlvbiA9IDIsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjQgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MTAwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkMi5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQyLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY3JkMi5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gTlVMTCwKK30sIHsKKwkubmFtZSA9ICJFRElDY2FyZC1ORUMiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MTAyLAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAxNiAqIE1IWiwgLm1heF9icnAgPSA2NCwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY2FyZC5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiRURJQ2NhcmQtMiIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgxMDUsCisJLmdlbmVyYXRpb24gPSAyLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDI0ICogTUhaLCAubWF4X2JycCA9IDY0LCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDEwMDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZDIuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkMi5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNyZDIuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IE5VTEwsCit9LCB7CisJMCwgMCwKK30sCit9OworCitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJiY2FyZC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImxkY2FyZC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImNhbmNhcmQuYmluIik7CitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJjYW5zamEuYmluIik7CisKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImJjYXJkMi5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImxkY2FyZDIuYmluIik7CitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJjYW5jcmQyLmJpbiIpOworCitzdGF0aWMgX19kZXZpbml0IGNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEKKypzb2Z0aW5nY3NfZmluZF9wbGF0Zm9ybV9kYXRhKHVuc2lnbmVkIGludCBtYW5mLCB1bnNpZ25lZCBpbnQgcHJvZCkKK3sKKwljb25zdCBzdHJ1Y3Qgc29mdGluZ19wbGF0Zm9ybV9kYXRhICpscDsKKworCWZvciAobHAgPSBzb2Z0aW5nY3NfcGxhdGZvcm1fZGF0YTsgbHAtPm1hbmY7ICsrbHApIHsKKwkJaWYgKChscC0+bWFuZiA9PSBtYW5mKSAmJiAobHAtPnByb2QgPT0gcHJvZCkpCisJCQlyZXR1cm4gbHA7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogcGxhdGZvcm1kYXRhIGNhbGxiYWNrcworICovCitzdGF0aWMgaW50IHNvZnRpbmdjc19yZXNldChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdikKK3sKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhID0gdG9fcGNtY2lhX2RldihwZGV2LT5kZXYucGFyZW50KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInBjbWNpYSBjb25maWcgWzJdICUwMnhcbiIsIHYgPyAwIDogMHgyMCk7CisJcmV0dXJuIHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShwY21jaWEsIDIsIHYgPyAwIDogMHgyMCk7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ2NzX2VuYWJsZV9pcnEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHYpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYSA9IHRvX3BjbWNpYV9kZXYocGRldi0+ZGV2LnBhcmVudCk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJwY21jaWEgY29uZmlnIFswXSAlMDJ4XG4iLCB2ID8gMHg2MCA6IDApOworCXJldHVybiBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUocGNtY2lhLCAwLCB2ID8gMHg2MCA6IDApOworfQorCisvKgorICogcGNtY2lhIGNoZWNrCisgKi8KK3N0YXRpYyBfX2RldmluaXQgaW50IHNvZnRpbmdjc19wcm9iZV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYSwKKwkJdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKnBkYXQgPSBwcml2X2RhdGE7CisJc3RydWN0IHJlc291cmNlICpwcmVzOworCWludCBtZW1zcGVlZCA9IDA7CisKKwlXQVJOX09OKCFwZGF0KTsKKwlwcmVzID0gcGNtY2lhLT5yZXNvdXJjZVtQQ01DSUFfSU9NRU1fMF07CisJaWYgKHJlc291cmNlX3NpemUocHJlcykgPCAweDEwMDApCisJCXJldHVybiAtRVJBTkdFOworCisJcHJlcy0+ZmxhZ3MgfD0gV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRTsKKwlpZiAocGRhdC0+Z2VuZXJhdGlvbiA8IDIpIHsKKwkJcHJlcy0+ZmxhZ3MgfD0gV0lOX1VTRV9XQUlUIHwgV0lOX0RBVEFfV0lEVEhfODsKKwkJbWVtc3BlZWQgPSAzOworCX0gZWxzZSB7CisJCXByZXMtPmZsYWdzIHw9IFdJTl9EQVRBX1dJRFRIXzE2OworCX0KKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3Rfd2luZG93KHBjbWNpYSwgcHJlcywgbWVtc3BlZWQpOworfQorCitzdGF0aWMgX19kZXZleGl0IHZvaWQgc29mdGluZ2NzX3JlbW92ZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwY21jaWEtPnByaXY7CisKKwkvKiBmcmVlIGJpdHMgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKwkvKiByZWxlYXNlIHBjbWNpYSBzdHVmZiAqLworCXBjbWNpYV9kaXNhYmxlX2RldmljZShwY21jaWEpOworfQorCisvKgorICogcGxhdGZvcm1fZGV2aWNlIHdyYXBwZXIKKyAqIHBkZXYtPnJlc291cmNlIGhhcyAyIGVudHJpZXM6IGlvICYgaXJxCisgKi8KK3N0YXRpYyB2b2lkIHNvZnRpbmdjc19wZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlrZnJlZShwZGV2KTsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKnBkYXQ7CisJc3RydWN0IHJlc291cmNlICpwcmVzOworCXN0cnVjdCBkZXYgeworCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBkZXY7CisJCXN0cnVjdCByZXNvdXJjZSByZXNbMl07CisJfSAqZGV2OworCisJLyogZmluZCBtYXRjaGluZyBwbGF0Zm9ybV9kYXRhICovCisJcGRhdCA9IHNvZnRpbmdjc19maW5kX3BsYXRmb3JtX2RhdGEocGNtY2lhLT5tYW5mX2lkLCBwY21jaWEtPmNhcmRfaWQpOworCWlmICghcGRhdCkKKwkJcmV0dXJuIC1FTk9UVFk7CisKKwkvKiBzZXR1cCBwY21jaWEgZGV2aWNlICovCisJcGNtY2lhLT5jb25maWdfZmxhZ3MgfD0gQ09ORl9FTkFCTEVfSVJRIHwgQ09ORl9BVVRPX1NFVF9JT01FTSB8CisJCUNPTkZfQVVUT19TRVRfVlBQIHwgQ09ORl9BVVRPX0NIRUNLX1ZDQzsKKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcocGNtY2lhLCBzb2Z0aW5nY3NfcHJvYmVfY29uZmlnLCAodm9pZCAqKXBkYXQpOworCWlmIChyZXQpCisJCWdvdG8gcGNtY2lhX2ZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9lbmFibGVfZGV2aWNlKHBjbWNpYSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcGNtY2lhX2ZhaWxlZDsKKworCXByZXMgPSBwY21jaWEtPnJlc291cmNlW1BDTUNJQV9JT01FTV8wXTsKKwlpZiAoIXByZXMpIHsKKwkJcmV0ID0gLUVCQURGOworCQlnb3RvIHBjbWNpYV9iYWQ7CisJfQorCisJLyogY3JlYXRlIHNvZnRpbmcgcGxhdGZvcm0gZGV2aWNlICovCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gbWVtX2ZhaWxlZDsKKwl9CisJZGV2LT5wZGV2LnJlc291cmNlID0gZGV2LT5yZXM7CisJZGV2LT5wZGV2Lm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGRldi0+cmVzKTsKKwlkZXYtPnBkZXYuZGV2LnJlbGVhc2UgPSBzb2Z0aW5nY3NfcGRldl9yZWxlYXNlOworCisJcGRldiA9ICZkZXYtPnBkZXY7CisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAodm9pZCAqKXBkYXQ7CisJcGRldi0+ZGV2LnBhcmVudCA9ICZwY21jaWEtPmRldjsKKwlwY21jaWEtPnByaXYgPSBwZGV2OworCisJLyogcGxhdGZvcm0gZGV2aWNlIHJlc291cmNlcyAqLworCXBkZXYtPnJlc291cmNlWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgPSBwcmVzLT5zdGFydDsKKwlwZGV2LT5yZXNvdXJjZVswXS5lbmQgPSBwcmVzLT5lbmQ7CisKKwlwZGV2LT5yZXNvdXJjZVsxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJROworCXBkZXYtPnJlc291cmNlWzFdLnN0YXJ0ID0gcGNtY2lhLT5pcnE7CisJcGRldi0+cmVzb3VyY2VbMV0uZW5kID0gcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7CisKKwkvKiBwbGF0Zm9ybSBkZXZpY2Ugc2V0dXAgKi8KKwlzcGluX2xvY2soJnNvZnRpbmdjc19pbmRleF9sb2NrKTsKKwlwZGV2LT5pZCA9IHNvZnRpbmdjc19pbmRleCsrOworCXNwaW5fdW5sb2NrKCZzb2Z0aW5nY3NfaW5kZXhfbG9jayk7CisJcGRldi0+bmFtZSA9ICJzb2Z0aW5nIjsKKwlkZXZfc2V0X25hbWUoJnBkZXYtPmRldiwgInNvZnRpbmdjcy4laSIsIHBkZXYtPmlkKTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcGxhdGZvcm1fZmFpbGVkOworCisJZGV2X2luZm8oJnBjbWNpYS0+ZGV2LCAiY3JlYXRlZCAlc1xuIiwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCXJldHVybiAwOworCitwbGF0Zm9ybV9mYWlsZWQ6CisJa2ZyZWUoZGV2KTsKK21lbV9mYWlsZWQ6CitwY21jaWFfYmFkOgorcGNtY2lhX2ZhaWxlZDoKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UocGNtY2lhKTsKKwlwY21jaWEtPnByaXYgPSBOVUxMOworCXJldHVybiByZXQgPzogLUVOT0RFVjsKK30KKworc3RhdGljIC8qY29uc3QqLyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBzb2Z0aW5nY3NfaWRzW10gPSB7CisJLyogc29mdGluZyAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDAxKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDAwMiksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwMDQpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDA1KSwKKwkvKiB2ZWN0b3IsIG1hbnVmYWN0dXJlcj8gKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDA4MSksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwODQpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDg1KSwKKwkvKiBFRElDICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAxMDIpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMTA1KSwKKwlQQ01DSUFfREVWSUNFX05VTEwsCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgc29mdGluZ2NzX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciBzb2Z0aW5nY3NfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSAic29mdGluZ2NzIiwKKwkuaWRfdGFibGUJPSBzb2Z0aW5nY3NfaWRzLAorCS5wcm9iZQkJPSBzb2Z0aW5nY3NfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzb2Z0aW5nY3NfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNvZnRpbmdjc19zdGFydCh2b2lkKQoreworCXNwaW5fbG9ja19pbml0KCZzb2Z0aW5nY3NfaW5kZXhfbG9jayk7CisJcmV0dXJuIHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnNvZnRpbmdjc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc29mdGluZ2NzX3N0b3Aodm9pZCkKK3sKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvZnRpbmdjc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzb2Z0aW5nY3Nfc3RhcnQpOworbW9kdWxlX2V4aXQoc29mdGluZ2NzX3N0b3ApOworCitNT0RVTEVfREVTQ1JJUFRJT04oInNvZnRpbmcgQ0FOY2FyZCBkcml2ZXIiCisJCSIsIGxpbmtzIFBDTUNJQSBjYXJkIHRvIHNvZnRpbmcgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX2Z3LmMgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX2Z3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyMDc4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfZncuYwpAQCAtMCwwICsxLDY5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwCisgKgorICogLSBLdXJ0IFZhbiBEaWpjaywgRUlBIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlICJzb2Z0aW5nLmgiCisKKy8qCisgKiBsb3cgbGV2ZWwgRFBSQU0gY29tbWFuZC4KKyAqIE1ha2Ugc3VyZSB0aGF0IGNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9IT1NUXSBpcyBwcmVzZXQKKyAqLworc3RhdGljIGludCBfc29mdGluZ19mY3RfY21kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwgdWludDE2X3QgdmVjdG9yLAorCQljb25zdCBjaGFyICptc2cpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHN0YW1wOworCisJaW93cml0ZTE2KGNtZCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTV0pOworCWlvd3JpdGU4KHZlY3RvciA+PiA4LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX0hPU1QgKyAxXSk7CisJaW93cml0ZTgodmVjdG9yLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX0hPU1RdKTsKKwkvKiBiZSBzdXJlIHRvIGZsdXNoIHRoaXMgdG8gdGhlIGNhcmQgKi8KKwl3bWIoKTsKKwlzdGFtcCA9IGppZmZpZXMgKyAxICogSFo7CisJLyogd2FpdCBmb3IgY2FyZCAqLworCWRvIHsKKwkJLyogRFBSQU1fRkNUX0hPU1QgaXMgX25vdF8gYWxpZ25lZCAqLworCQlyZXQgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVF0pICsKKwkJCShpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVCArIDFdKSA8PCA4KTsKKwkJLyogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIHZhcmlhYmxlcyAqLworCQlybWIoKTsKKwkJaWYgKHJldCA9PSBSRVNfT0spCisJCQkvKiByZWFkIHJldHVybi12YWx1ZSBub3cgKi8KKwkJCXJldHVybiBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1JFU1VMVF0pOworCisJCWlmICgocmV0ICE9IHZlY3RvcikgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBzdGFtcCkpCisJCQlicmVhazsKKwkJLyogcHJvY2VzcyBjb250ZXh0ID0+IHJlbGF4ICovCisJCXVzbGVlcF9yYW5nZSg1MDAsIDEwMDAwKTsKKwl9IHdoaWxlICgxKTsKKworCXJldCA9IChyZXQgPT0gUkVTX05PTkUpID8gLUVUSU1FRE9VVCA6IC1FQ0FOQ0VMRUQ7CisJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBmYWlsZWQgKCVpKVxuIiwgbXNnLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19mY3RfY21kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwgY29uc3QgY2hhciAqbXNnKQoreworCWludCByZXQ7CisKKwlyZXQgPSBfc29mdGluZ19mY3RfY21kKGNhcmQsIGNtZCwgMCwgbXNnKTsKKwlpZiAocmV0ID4gMCkgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgIiVzIHJldHVybmVkICV1XG4iLCBtc2csIHJldCk7CisJCXJldCA9IC1FSU87CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgaW50MTZfdCBjbWQsCisJCWNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgc3RhbXA7CisKKwlpb3dyaXRlMTYoUkVTX05PTkUsICZjYXJkLT5kcHJhbVtEUFJBTV9SRUNFSVBUXSk7CisJaW93cml0ZTE2KGNtZCwgJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkRdKTsKKwkvKiBiZSBzdXJlIHRvIGZsdXNoIHRoaXMgdG8gdGhlIGNhcmQgKi8KKwl3bWIoKTsKKwlzdGFtcCA9IGppZmZpZXMgKyAzICogSFo7CisJLyogd2FpdCBmb3IgY2FyZCAqLworCWRvIHsKKwkJcmV0ID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX1JFQ0VJUFRdKTsKKwkJLyogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIHZhcmlhYmxlcyAqLworCQlybWIoKTsKKwkJaWYgKHJldCA9PSBSRVNfT0spCisJCQlyZXR1cm4gMDsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhbXApKQorCQkJYnJlYWs7CisJCS8qIHByb2Nlc3MgY29udGV4dCA9PiByZWxheCAqLworCQl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwMCk7CisJfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKKworCXJldCA9IChyZXQgPT0gUkVTX05PTkUpID8gLUVUSU1FRE9VVCA6IC1FQ0FOQ0VMRUQ7CisJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJib290bG9hZGVyICVzIGZhaWxlZCAoJWkpXG4iLCBtc2csIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmd19wYXJzZShjb25zdCB1aW50OF90ICoqcG1lbSwgdWludDE2X3QgKnB0eXBlLCB1aW50MzJfdCAqcGFkZHIsCisJCXVpbnQxNl90ICpwbGVuLCBjb25zdCB1aW50OF90ICoqcGRhdCkKK3sKKwl1aW50MTZfdCBjaGVja3N1bVsyXTsKKwljb25zdCB1aW50OF90ICptZW07CisJY29uc3QgdWludDhfdCAqZW5kOworCisJLyoKKwkgKiBmaXJtd2FyZSByZWNvcmRzIGFyZSBhIGJpbmFyeSwgdW5hbGlnbmVkIHN0cmVhbSBjb21wb3NlZCBvZjoKKwkgKiB1aW50MTZfdCB0eXBlOworCSAqIHVpbnQzMl90IGFkZHI7CisJICogdWludDE2X3QgbGVuOworCSAqIHVpbnQ4X3QgZGF0W2xlbl07CisJICogdWludDE2X3QgY2hlY2tzdW07CisJICogYWxsIHZhbHVlcyBpbiBsaXR0bGUgZW5kaWFuLgorCSAqIFdlIGNvdWxkIGRlZmluZSBhIHN0cnVjdCBmb3IgdGhpcywgd2l0aCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSwKKwkgKiBidXQgd291bGQgdGhhdCBzb2x2ZSB0aGUgYWxpZ25tZW50IGluIF9hbGxfIGNhc2VzIChjZnIuIHRoZQorCSAqIHN0cnVjdCBpdHNlbGYgbWF5IGJlIGFuIG9kZCBhZGRyZXNzKT8KKwkgKgorCSAqIEkgY2hvc2UgdG8gdXNlIGxlWFhfdG9fY3B1cCgpIHNpbmNlIHRoaXMgc29sdmVzIGJvdGgKKwkgKiBlbmRpYW5uZXNzICYgYWxpZ25tZW50LgorCSAqLworCW1lbSA9ICpwbWVtOworCSpwdHlwZSA9IGxlMTZfdG9fY3B1cCgodm9pZCAqKSZtZW1bMF0pOworCSpwYWRkciA9IGxlMzJfdG9fY3B1cCgodm9pZCAqKSZtZW1bMl0pOworCSpwbGVuID0gbGUxNl90b19jcHVwKCh2b2lkICopJm1lbVs2XSk7CisJKnBkYXQgPSAmbWVtWzhdOworCS8qIHZlcmlmeSBjaGVja3N1bSAqLworCWVuZCA9ICZtZW1bOCArICpwbGVuXTsKKwljaGVja3N1bVswXSA9IGxlMTZfdG9fY3B1cCgodm9pZCAqKWVuZCk7CisJZm9yIChjaGVja3N1bVsxXSA9IDA7IG1lbSA8IGVuZDsgKyttZW0pCisJCWNoZWNrc3VtWzFdICs9ICptZW07CisJaWYgKGNoZWNrc3VtWzBdICE9IGNoZWNrc3VtWzFdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBpbmNyZW1lbnQgKi8KKwkqcG1lbSArPSAxMCArICpwbGVuOworCXJldHVybiAwOworfQorCitpbnQgc29mdGluZ19sb2FkX2Z3KGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzb2Z0aW5nICpjYXJkLAorCQlfX2lvbWVtIHVpbnQ4X3QgKmRwcmFtLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisJY29uc3QgdWludDhfdCAqbWVtLCAqZW5kLCAqZGF0OworCXVpbnQxNl90IHR5cGUsIGxlbjsKKwl1aW50MzJfdCBhZGRyOworCXVpbnQ4X3QgKmJ1ZiA9IE5VTEw7CisJaW50IGJ1ZmxlbiA9IDA7CisJaW50OF90IHR5cGVfZW5kID0gMDsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaWxlLCAmY2FyZC0+cGRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkZXZfZGJnKCZjYXJkLT5wZGV2LT5kZXYsICIlcywgZmlybXdhcmUoJXMpIGdvdCAldSBieXRlcyIKKwkJIiwgb2Zmc2V0ICVjMHglMDR4XG4iLAorCQljYXJkLT5wZGF0LT5uYW1lLCBmaWxlLCAodW5zaWduZWQgaW50KWZ3LT5zaXplLAorCQkob2Zmc2V0ID49IDApID8gJysnIDogJy0nLCAodW5zaWduZWQgaW50KWFicyhvZmZzZXQpKTsKKwkvKiBwYXJzZSB0aGUgZmlybXdhcmUgKi8KKwltZW0gPSBmdy0+ZGF0YTsKKwllbmQgPSAmbWVtW2Z3LT5zaXplXTsKKwkvKiBsb29rIGZvciBoZWFkZXIgcmVjb3JkICovCisJcmV0ID0gZndfcGFyc2UoJm1lbSwgJnR5cGUsICZhZGRyLCAmbGVuLCAmZGF0KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJaWYgKHR5cGUgIT0gMHhmZmZmKQorCQlnb3RvIGZhaWxlZDsKKwlpZiAoc3RybmNtcCgiU3RydWN0dXJlZCBCaW5hcnkgRm9ybWF0LCBTb2Z0aW5nIEdtYkgiICwgZGF0LCBsZW4pKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbGVkOworCX0KKwkvKiBvaywgd2UgaGFkIGEgaGVhZGVyICovCisJd2hpbGUgKG1lbSA8IGVuZCkgeworCQlyZXQgPSBmd19wYXJzZSgmbWVtLCAmdHlwZSwgJmFkZHIsICZsZW4sICZkYXQpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQlpZiAodHlwZSA9PSAzKSB7CisJCQkvKiBzdGFydCBhZGRyZXNzLCBub3QgdXNlZCBoZXJlICovCisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICh0eXBlID09IDEpIHsKKwkJCS8qIGVvZiAqLworCQkJdHlwZV9lbmQgPSAxOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAodHlwZSAhPSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQlpZiAoKGFkZHIgKyBsZW4gKyBvZmZzZXQpID4gc2l6ZSkKKwkJCWdvdG8gZmFpbGVkOworCQltZW1jcHlfdG9pbygmZHByYW1bYWRkciArIG9mZnNldF0sIGRhdCwgbGVuKTsKKwkJLyogYmUgc3VyZSB0byBmbHVzaCBjYWNoZXMgZnJvbSBJTyBzcGFjZSAqLworCQltYigpOworCQlpZiAobGVuID4gYnVmbGVuKSB7CisJCQkvKiBhbGlnbiBidWZsZW4gKi8KKwkJCWJ1ZmxlbiA9IChsZW4gKyAoMTAyNC0xKSkgJiB+KDEwMjQtMSk7CisJCQlidWYgPSBrcmVhbGxvYyhidWYsIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWJ1ZikgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisJCX0KKwkJLyogdmVyaWZ5IHJlY29yZCBkYXRhICovCisJCW1lbWNweV9mcm9taW8oYnVmLCAmZHByYW1bYWRkciArIG9mZnNldF0sIGxlbik7CisJCWlmIChtZW1jbXAoYnVmLCBkYXQsIGxlbikpIHsKKwkJCS8qIGlzIG5vdCBvayAqLworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJEUFJBTSByZWFkYmFjayBmYWlsZWRcbiIpOworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJfQorCWlmICghdHlwZV9lbmQpCisJCS8qIG5vIGVuZCByZWNvcmQgc2VlbiAqLworCQlnb3RvIGZhaWxlZDsKKwlyZXQgPSAwOworZmFpbGVkOgorCWtmcmVlKGJ1Zik7CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJaWYgKHJldCA8IDApCisJCWRldl9pbmZvKCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBmYWlsZWRcbiIsIGZpbGUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2xvYWRfYXBwX2Z3KGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3QgdWludDhfdCAqbWVtLCAqZW5kLCAqZGF0OworCWludCByZXQsIGo7CisJdWludDE2X3QgdHlwZSwgbGVuOworCXVpbnQzMl90IGFkZHIsIHN0YXJ0X2FkZHIgPSAwOworCXVuc2lnbmVkIGludCBzdW0sIHJ4X3N1bTsKKwlpbnQ4X3QgdHlwZV9lbmQgPSAwLCB0eXBlX2VudHJ5cG9pbnQgPSAwOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpbGUsICZjYXJkLT5wZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJyZXF1ZXN0X2Zpcm13YXJlKCVzKSBnb3QgJWlcbiIsCisJCQlmaWxlLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXZfZGJnKCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSglcykgZ290ICVsdSBieXRlc1xuIiwKKwkJZmlsZSwgKHVuc2lnbmVkIGxvbmcpZnctPnNpemUpOworCS8qIHBhcnNlIHRoZSBmaXJtd2FyZSAqLworCW1lbSA9IGZ3LT5kYXRhOworCWVuZCA9ICZtZW1bZnctPnNpemVdOworCS8qIGxvb2sgZm9yIGhlYWRlciByZWNvcmQgKi8KKwlyZXQgPSBmd19wYXJzZSgmbWVtLCAmdHlwZSwgJmFkZHIsICZsZW4sICZkYXQpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCXJldCA9IC1FSU5WQUw7CisJaWYgKHR5cGUgIT0gMHhmZmZmKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZmlybXdhcmUgc3RhcnRzIHdpdGggdHlwZSAweCV4XG4iLAorCQkJdHlwZSk7CisJCWdvdG8gZmFpbGVkOworCX0KKwlpZiAoc3RybmNtcCgiU3RydWN0dXJlZCBCaW5hcnkgRm9ybWF0LCBTb2Z0aW5nIEdtYkgiLCBkYXQsIGxlbikpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSBzdHJpbmcgJyUuKnMnIGZhdWx0XG4iLAorCQkJCWxlbiwgZGF0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCS8qIG9rLCB3ZSBoYWQgYSBoZWFkZXIgKi8KKwl3aGlsZSAobWVtIDwgZW5kKSB7CisJCXJldCA9IGZ3X3BhcnNlKCZtZW0sICZ0eXBlLCAmYWRkciwgJmxlbiwgJmRhdCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKKworCQlpZiAodHlwZSA9PSAzKSB7CisJCQkvKiBzdGFydCBhZGRyZXNzICovCisJCQlzdGFydF9hZGRyID0gYWRkcjsKKwkJCXR5cGVfZW50cnlwb2ludCA9IDE7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICh0eXBlID09IDEpIHsKKwkJCS8qIGVvZiAqLworCQkJdHlwZV9lbmQgPSAxOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAodHlwZSAhPSAwKSB7CisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwKKwkJCQkJInVua25vd24gcmVjb3JkIHR5cGUgMHglMDR4XG4iLCB0eXBlKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIHJlZ3VhbGFyIGRhdGEgKi8KKwkJZm9yIChzdW0gPSAwLCBqID0gMDsgaiA8IGxlbjsgKytqKQorCQkJc3VtICs9IGRhdFtqXTsKKwkJLyogd29yayBpbiAxNmJpdCAodGFyZ2V0KSAqLworCQlzdW0gJj0gMHhmZmZmOworCisJCW1lbWNweV90b2lvKCZjYXJkLT5kcHJhbVtjYXJkLT5wZGF0LT5hcHAub2Zmc10sIGRhdCwgbGVuKTsKKwkJaW93cml0ZTMyKGNhcmQtPnBkYXQtPmFwcC5vZmZzICsgY2FyZC0+cGRhdC0+YXBwLmFkZHIsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkQgKyAyXSk7CisJCWlvd3JpdGUzMihhZGRyLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDZdKTsKKwkJaW93cml0ZTE2KGxlbiwgJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkQgKyAxMF0pOworCQlpb3dyaXRlOCgxLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDEyXSk7CisJCXJldCA9IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKGNhcmQsIDEsICJsb2FkaW5nIGFwcC4iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogdmVyaWZ5IGNoZWNrc3VtICovCisJCXJ4X3N1bSA9IGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9SRUNFSVBUICsgMl0pOworCQlpZiAocnhfc3VtICE9IHN1bSkgeworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJTUkFNIHNlZW1zIHRvIGJlIGRhbWFnZWQiCisJCQkJIiwgd2FudGVkIDB4JTA0eCwgZ290IDB4JTA0eFxuIiwgc3VtLCByeF9zdW0pOworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJfQorCWlmICghdHlwZV9lbmQgfHwgIXR5cGVfZW50cnlwb2ludCkKKwkJZ290byBmYWlsZWQ7CisJLyogc3RhcnQgYXBwbGljYXRpb24gaW4gY2FyZCAqLworCWlvd3JpdGUzMihzdGFydF9hZGRyLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDJdKTsKKwlpb3dyaXRlOCgxLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDZdKTsKKwlyZXQgPSBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChjYXJkLCAzLCAic3RhcnQgYXBwLiIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwlyZXQgPSAwOworZmFpbGVkOgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCWlmIChyZXQgPCAwKQorCQlkZXZfaW5mbygmY2FyZC0+cGRldi0+ZGV2LCAiZmlybXdhcmUgJXMgZmFpbGVkXG4iLCBmaWxlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNvZnRpbmdfcmVzZXRfY2hpcChzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpbnQgcmV0OworCisJZG8geworCQkvKiByZXNldCBjaGlwICovCisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SRVNFVF9SWF9GSUZPXSk7CisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SRVNFVF9SWF9GSUZPKzFdKTsKKwkJaW93cml0ZTgoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFU0VUXSk7CisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SRVNFVCsxXSk7CisKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDAsICJyZXNldF9jYW4iKTsKKwkJaWYgKCFyZXQpCisJCQlicmVhazsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJLyogZG9uJ3Qgd2FpdCBhbnkgbG9uZ2VyICovCisJCQlicmVhazsKKwl9IHdoaWxlICgxKTsKKwljYXJkLT50eC5wZW5kaW5nID0gMDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc29mdGluZ19jaGlwX3Bvd2Vyb24oc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaW50IHJldDsKKwkvKiBzeW5jICovCisJcmV0ID0gX3NvZnRpbmdfZmN0X2NtZChjYXJkLCA5OSwgMHg1NSwgInN5bmMtYSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IF9zb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgOTksIDB4YWEsICJzeW5jLWIiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBzb2Z0aW5nX3Jlc2V0X2NoaXAoY2FyZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIGdldF9zZXJpYWwgKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNDMsICJnZXRfc2VyaWFsX251bWJlciIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwljYXJkLT5pZC5zZXJpYWwgPSBpb3JlYWQzMigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNXSk7CisJLyogZ2V0X3ZlcnNpb24gKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTIsICJnZXRfdmVyc2lvbiIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwljYXJkLT5pZC5md192ZXJzaW9uID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwljYXJkLT5pZC5od192ZXJzaW9uID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwljYXJkLT5pZC5saWNlbnNlID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwljYXJkLT5pZC5jaGlwWzBdID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwljYXJkLT5pZC5jaGlwWzFdID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJcmV0dXJuIDA7CitmYWlsZWQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc29mdGluZ19pbml0aWFsaXplX3RpbWVzdGFtcChzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwl1aW50NjRfdCBvdmY7CisKKwljYXJkLT50c19yZWYgPSBrdGltZV9nZXQoKTsKKworCS8qIDE2TUh6IGlzIHRoZSByZWZlcmVuY2UgKi8KKwlvdmYgPSAweDEwMDAwMDAwMFVMTCAqIDE2OworCWRvX2RpdihvdmYsIGNhcmQtPnBkYXQtPmZyZXEgPzogMTYpOworCisJY2FyZC0+dHNfb3ZlcmZsb3cgPSBrdGltZV9hZGRfdXMoa3RpbWVfc2V0KDAsIDApLCBvdmYpOworfQorCitrdGltZV90IHNvZnRpbmdfcmF3Mmt0aW1lKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCB1MzIgcmF3KQoreworCXVpbnQ2NF90IHJhd2w7CisJa3RpbWVfdCBub3csIHJlYWxfb2Zmc2V0OworCWt0aW1lX3QgdGFyZ2V0OworCWt0aW1lX3QgdG1wOworCisJbm93ID0ga3RpbWVfZ2V0KCk7CisJcmVhbF9vZmZzZXQgPSBrdGltZV9zdWIoa3RpbWVfZ2V0X3JlYWwoKSwgbm93KTsKKworCS8qIGZpbmQgbnNlYyBmcm9tIGNhcmQgKi8KKwlyYXdsID0gcmF3ICogMTY7CisJZG9fZGl2KHJhd2wsIGNhcmQtPnBkYXQtPmZyZXEgPzogMTYpOworCXRhcmdldCA9IGt0aW1lX2FkZF91cyhjYXJkLT50c19yZWYsIHJhd2wpOworCS8qIHRlc3QgZm9yIG92ZXJmbG93cyAqLworCXRtcCA9IGt0aW1lX2FkZCh0YXJnZXQsIGNhcmQtPnRzX292ZXJmbG93KTsKKwl3aGlsZSAodW5saWtlbHkoa3RpbWVfdG9fbnModG1wKSA+IGt0aW1lX3RvX25zKG5vdykpKSB7CisJCWNhcmQtPnRzX3JlZiA9IGt0aW1lX2FkZChjYXJkLT50c19yZWYsIGNhcmQtPnRzX292ZXJmbG93KTsKKwkJdGFyZ2V0ID0gdG1wOworCQl0bXAgPSBrdGltZV9hZGQodGFyZ2V0LCBjYXJkLT50c19vdmVyZmxvdyk7CisJfQorCXJldHVybiBrdGltZV9hZGQodGFyZ2V0LCByZWFsX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlyZXR1cm4gKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9CRVJSX1JFUE9SVElORykKKwkJPyAxIDogMDsKK30KKworaW50IHNvZnRpbmdfc3RhcnRzdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB1cCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzb2Z0aW5nICpjYXJkOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlpbnQgYnVzX2JpdG1hc2tfc3RhcnQ7CisJaW50IGosIGVycm9yX3JlcG9ydGluZzsKKwlzdHJ1Y3QgY2FuX2ZyYW1lIG1zZzsKKwljb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQ7CisKKwlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljYXJkID0gcHJpdi0+Y2FyZDsKKworCWlmICghY2FyZC0+ZncudXApCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYXJkLT5mdy5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYnVzX2JpdG1hc2tfc3RhcnQgPSAwOworCWlmIChkZXYgJiYgdXApCisJCS8qIHByZXBhcmUgdG8gc3RhcnQgdGhpcyBidXMgYXMgd2VsbCAqLworCQlidXNfYml0bWFza19zdGFydCB8PSAoMSA8PCBwcml2LT5pbmRleCk7CisJLyogYnJpbmcgbmV0ZGV2cyBkb3duICovCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCW5ldGRldiA9IGNhcmQtPm5ldFtqXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkJaWYgKGRldiAhPSBuZXRkZXYpCisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQkJaWYgKGRldiAhPSBuZXRkZXYpCisJCQkJYnVzX2JpdG1hc2tfc3RhcnQgfD0gKDEgPDwgaik7CisJCQlwcml2LT50eC5wZW5kaW5nID0gMDsKKwkJCXByaXYtPnR4LmVjaG9fcHV0ID0gMDsKKwkJCXByaXYtPnR4LmVjaG9fZ2V0ID0gMDsKKwkJCS8qCisJCQkgKiB0aGlzIGJ1cycgbWF5IGp1c3QgaGF2ZSBjYWxsZWQgb3Blbl9jYW5kZXYoKQorCQkJICogd2hpY2ggaXMgcmF0aGVyIHN0dXBpZCB0byBjYWxsIGNsb3NlX2NhbmRldigpCisJCQkgKiBhbHJlYWR5CisJCQkgKiBidXQgd2UgbWF5IGNvbWUgaGVyZSBmcm9tIGJ1c29mZiByZWNvdmVyeSB0b28KKwkJCSAqIGluIHdoaWNoIGNhc2UgdGhlIGVjaG9fc2tiIF9uZWVkc18gZmx1c2hpbmcgdG9vLgorCQkJICoganVzdCBiZSBzdXJlIHRvIGNhbGwgb3Blbl9jYW5kZXYoKSBhZ2FpbgorCQkJICovCisJCQljbG9zZV9jYW5kZXYobmV0ZGV2KTsKKwkJfQorCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKKwl9CisJY2FyZC0+dHgucGVuZGluZyA9IDA7CisKKwlzb2Z0aW5nX2VuYWJsZV9pcnEoY2FyZCwgMCk7CisJcmV0ID0gc29mdGluZ19yZXNldF9jaGlwKGNhcmQpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCWlmICghYnVzX2JpdG1hc2tfc3RhcnQpCisJCS8qIG5vIGJ1c3NlcyB0byBiZSBicm91Z2h0IHVwICovCisJCWdvdG8gY2FyZF9kb25lOworCisJaWYgKChidXNfYml0bWFza19zdGFydCAmIDEpICYmIChidXNfYml0bWFza19zdGFydCAmIDIpCisJCQkmJiAoc29mdGluZ19lcnJvcl9yZXBvcnRpbmcoY2FyZC0+bmV0WzBdKQorCQkJCSE9IHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKGNhcmQtPm5ldFsxXSkpKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LAorCQkJCSJlcnJfcmVwb3J0aW5nIGZsYWcgZGlmZmVycyBmb3IgYnVzc2VzXG4iKTsKKwkJZ290byBpbnZhbGlkOworCX0KKwllcnJvcl9yZXBvcnRpbmcgPSAwOworCWlmIChidXNfYml0bWFza19zdGFydCAmIDEpIHsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0WzBdOworCQlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkJZXJyb3JfcmVwb3J0aW5nICs9IHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKG5ldGRldik7CisJCS8qIGluaXQgY2hpcCAxICovCisJCWJ0ID0gJnByaXYtPmNhbi5iaXR0aW1pbmc7CisJCWlvd3JpdGUxNihidC0+YnJwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoYnQtPnNqdywgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJaW93cml0ZTE2KGJ0LT5waGFzZV9zZWcxICsgYnQtPnByb3Bfc2VnLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNihidC0+cGhhc2Vfc2VnMiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwkJaW93cml0ZTE2KChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfM19TQU1QTEVTKSA/IDEgOiAwLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMSwgImluaXRpYWxpemVfY2hpcFswXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgbW9kZSAqLworCQlpb3dyaXRlMTYoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAzLCAic2V0X21vZGVbMF0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IGZpbHRlciAqLworCQkvKiAxMWJpdCBpZCAmIG1hc2sgKi8KKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KDB4MDdmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJLyogMjliaXQgaWQubG8gJiBtYXNrLmxvICYgaWQuaGkgJiBtYXNrLmhpICovCisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNigweGZmZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlpb3dyaXRlMTYoMHgxZmZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTJdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDcsICJzZXRfZmlsdGVyWzBdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBvdXRwdXQgY29udHJvbCAqLworCQlpb3dyaXRlMTYocHJpdi0+b3V0cHV0LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNSwgInNldF9vdXRwdXRbMF0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwl9CisJaWYgKGJ1c19iaXRtYXNrX3N0YXJ0ICYgMikgeworCQluZXRkZXYgPSBjYXJkLT5uZXRbMV07CisJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQllcnJvcl9yZXBvcnRpbmcgKz0gc29mdGluZ19lcnJvcl9yZXBvcnRpbmcobmV0ZGV2KTsKKwkJLyogaW5pdCBjaGlwMiAqLworCQlidCA9ICZwcml2LT5jYW4uYml0dGltaW5nOworCQlpb3dyaXRlMTYoYnQtPmJycCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KGJ0LT5zancsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJCWlvd3JpdGUxNihidC0+cGhhc2Vfc2VnMSArIGJ0LT5wcm9wX3NlZywKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNl0pOworCQlpb3dyaXRlMTYoYnQtPnBoYXNlX3NlZzIsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJCWlvd3JpdGUxNigocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFXzNfU0FNUExFUykgPyAxIDogMCwKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTBdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDIsICJpbml0aWFsaXplX2NoaXBbMV0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IG1vZGUyICovCisJCWlvd3JpdGUxNigwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDQsICJzZXRfbW9kZVsxXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgZmlsdGVyMiAqLworCQkvKiAxMWJpdCBpZCAmIG1hc2sgKi8KKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KDB4MDdmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJLyogMjliaXQgaWQubG8gJiBtYXNrLmxvICYgaWQuaGkgJiBtYXNrLmhpICovCisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNigweGZmZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlpb3dyaXRlMTYoMHgxZmZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTJdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDgsICJzZXRfZmlsdGVyWzFdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBvdXRwdXQgY29udHJvbDIgKi8KKwkJaW93cml0ZTE2KHByaXYtPm91dHB1dCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDYsICJzZXRfb3V0cHV0WzFdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJfQorCS8qIGVuYWJsZV9lcnJvcl9mcmFtZSAqLworCS8qCisJICogRXJyb3IgcmVwb3J0aW5nIGlzIHN3aXRjaGVkIG9mZiBhdCB0aGUgbW9tZW50IHNpbmNlCisJICogdGhlIHJlY2VpdmluZyBvZiB0aGVtIGlzIG5vdCB5ZXQgMTAwJSB2ZXJpZmllZAorCSAqIFRoaXMgc2hvdWxkIGJlIGVuYWJsZWQgc29vbmVyIG9yIGxhdGVyCisJICoKKwlpZiAoZXJyb3JfcmVwb3J0aW5nKSB7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA1MSwgImVuYWJsZV9lcnJvcl9mcmFtZSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCX0KKwkqLworCS8qIGluaXRpYWxpemUgaW50ZXJmYWNlICovCisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTJdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDE0XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxNl0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMThdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDIwXSk7CisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDE3LCAiaW5pdGlhbGl6ZV9pbnRlcmZhY2UiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogZW5hYmxlX2ZpZm8gKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMzYsICJlbmFibGVfZmlmbyIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBlbmFibGUgZmlmbyB0eCBhY2sgKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTMsICJmaWZvX3R4X2Fja1swXSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBlbmFibGUgZmlmbyB0eCBhY2syICovCisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDE0LCAiZmlmb190eF9hY2tbMV0iKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogc3RhcnRfY2hpcCAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxMSwgInN0YXJ0X2NoaXAiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0lORk9fQlVTU1RBVEVdKTsKKwlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fSU5GT19CVVNTVEFURTJdKTsKKwlpZiAoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA8IDIpIHsKKwkJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1YyX0lSUV9UT0hPU1RdKTsKKwkJLyogZmx1c2ggdGhlIERQUkFNIGNhY2hlcyAqLworCQl3bWIoKTsKKwl9CisKKwlzb2Z0aW5nX2luaXRpYWxpemVfdGltZXN0YW1wKGNhcmQpOworCisJLyoKKwkgKiBkbyBzb2NrZXRjYW4gbm90aWZpY2F0aW9ucy9zdGF0dXMgY2hhbmdlcworCSAqIGZyb20gaGVyZSwgbm8gZXJyb3JzIHNob3VsZCBvY2N1ciwgb3IgdGhlIGZhaWxlZDogcGFydAorCSAqIG11c3QgYmUgcmV2aWV3ZWQKKwkgKi8KKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCW1zZy5jYW5faWQgPSBDQU5fRVJSX0ZMQUcgfCBDQU5fRVJSX1JFU1RBUlRFRDsKKwltc2cuY2FuX2RsYyA9IENBTl9FUlJfRExDOworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQlpZiAoIShidXNfYml0bWFza19zdGFydCAmICgxIDw8IGopKSkKKwkJCWNvbnRpbnVlOworCQluZXRkZXYgPSBjYXJkLT5uZXRbal07CisJCWlmICghbmV0ZGV2KQorCQkJY29udGludWU7CisJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOworCQlvcGVuX2NhbmRldihuZXRkZXYpOworCQlpZiAoZGV2ICE9IG5ldGRldikgeworCQkJLyogbm90aWZ5IG90aGVyIGJ1c3NlcyBvbiB0aGUgcmVzdGFydCAqLworCQkJc29mdGluZ19uZXRkZXZfcngobmV0ZGV2LCAmbXNnLCBrdGltZV9zZXQoMCwgMCkpOworCQkJKytwcml2LT5jYW4uY2FuX3N0YXRzLnJlc3RhcnRzOworCQl9CisJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwl9CisKKwkvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCXJldCA9IHNvZnRpbmdfZW5hYmxlX2lycShjYXJkLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKK2NhcmRfZG9uZToKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCXJldHVybiAwOworaW52YWxpZDoKKwlyZXQgPSAtRUlOVkFMOworZmFpbGVkOgorCXNvZnRpbmdfZW5hYmxlX2lycShjYXJkLCAwKTsKKwlzb2Z0aW5nX3Jlc2V0X2NoaXAoY2FyZCk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwkvKiBicmluZyBhbGwgb3RoZXIgaW50ZXJmYWNlcyBkb3duICovCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCW5ldGRldiA9IGNhcmQtPm5ldFtqXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJZGV2X2Nsb3NlKG5ldGRldik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2RlZmF1bHRfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwcml2LT5jYXJkOworCisJc3dpdGNoIChwcml2LT5jaGlwKSB7CisJY2FzZSAxMDAwOgorCQlyZXR1cm4gKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPCAyKSA/IDB4ZmIgOiAweGZhOworCWNhc2UgNToKKwkJcmV0dXJuIDB4NjA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDB4NDA7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWVhOWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMKQEAgLTAsMCArMSw4OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMAorICoKKyAqIC0gS3VydCBWYW4gRGlqY2ssIEVJQSBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgInNvZnRpbmcuaCIKKworI2RlZmluZSBUWF9FQ0hPX1NLQl9NQVggKCgoVFhNQVgrMSkvMiktMSkKKworLyoKKyAqIHRlc3QgaXMgYSBzcGVjaWZpYyBDQU4gbmV0ZGV2CisgKiBpcyBvbmxpbmUgKGllLiB1cCAnbiBydW5uaW5nLCBub3Qgc2xlZXBpbmcsIG5vdCBidXNvZmYKKyAqLworc3RhdGljIGlubGluZSBpbnQgY2FuaWZfaXNfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGNhbl9wcml2ICpjYW4gPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCXJldHVybiAwOworCXJldHVybiAoY2FuLT5zdGF0ZSA8PSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRSk7Cit9CisKKy8qIHJlc2V0IERQUkFNICovCitzdGF0aWMgaW5saW5lIHZvaWQgc29mdGluZ19zZXRfcmVzZXRfZHByYW0oc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaWYgKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPj0gMikgeworCQlzcGluX2xvY2tfYmgoJmNhcmQtPnNwaW4pOworCQlpb3dyaXRlOChpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9WMl9SRVNFVF0pICYgfjEsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX1YyX1JFU0VUXSk7CisJCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2Z0aW5nX2Nscl9yZXNldF9kcHJhbShzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA+PSAyKSB7CisJCXNwaW5fbG9ja19iaCgmY2FyZC0+c3Bpbik7CisJCWlvd3JpdGU4KGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1YyX1JFU0VUXSkgfCAxLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9WMl9SRVNFVF0pOworCQlzcGluX3VubG9ja19iaCgmY2FyZC0+c3Bpbik7CisJfQorfQorCisvKiB0cmlnZ2VyIHRoZSB0eCBxdWV1ZS1pbmcgKi8KK3N0YXRpYyBuZXRkZXZfdHhfdCBzb2Z0aW5nX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwcml2LT5jYXJkOworCWludCByZXQ7CisJdWludDhfdCAqcHRyOworCXVpbnQ4X3QgZmlmb193ciwgZmlmb19yZDsKKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuX2ZyYW1lICopc2tiLT5kYXRhOworCXVpbnQ4X3QgYnVmW0RQUkFNX1RYX1NJWkVdOworCisJaWYgKGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKGRldiwgc2tiKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworCXNwaW5fbG9jaygmY2FyZC0+c3Bpbik7CisKKwlyZXQgPSBORVRERVZfVFhfQlVTWTsKKwlpZiAoIWNhcmQtPmZ3LnVwIHx8CisJCQkoY2FyZC0+dHgucGVuZGluZyA+PSBUWE1BWCkgfHwKKwkJCShwcml2LT50eC5wZW5kaW5nID49IFRYX0VDSE9fU0tCX01BWCkpCisJCWdvdG8geG1pdF9kb25lOworCWZpZm9fd3IgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9UWF9XUl0pOworCWZpZm9fcmQgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9UWF9SRF0pOworCWlmIChmaWZvX3dyID09IGZpZm9fcmQpCisJCS8qIGZpZm8gZnVsbCAqLworCQlnb3RvIHhtaXRfZG9uZTsKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJcHRyID0gYnVmOworCSpwdHIgPSBDTURfVFg7CisJaWYgKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpCisJCSpwdHIgfD0gQ01EX1JUUjsKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykKKwkJKnB0ciB8PSBDTURfWFREOworCWlmIChwcml2LT5pbmRleCkKKwkJKnB0ciB8PSBDTURfQlVTMjsKKwkrK3B0cjsKKwkqcHRyKysgPSBjZi0+Y2FuX2RsYzsKKwkqcHRyKysgPSAoY2YtPmNhbl9pZCA+PiAwKTsKKwkqcHRyKysgPSAoY2YtPmNhbl9pZCA+PiA4KTsKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykgeworCQkqcHRyKysgPSAoY2YtPmNhbl9pZCA+PiAxNik7CisJCSpwdHIrKyA9IChjZi0+Y2FuX2lkID4+IDI0KTsKKwl9IGVsc2UgeworCQkvKiBpbmNyZW1lbnQgMSwgbm90IDIgYXMgeW91IG1pZ2h0IHRoaW5rICovCisJCXB0ciArPSAxOworCX0KKwlpZiAoIShjZi0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKSkKKwkJbWVtY3B5KHB0ciwgJmNmLT5kYXRhWzBdLCBjZi0+Y2FuX2RsYyk7CisJbWVtY3B5X3RvaW8oJmNhcmQtPmRwcmFtW0RQUkFNX1RYICsgRFBSQU1fVFhfU0laRSAqIGZpZm9fd3JdLAorCQkJYnVmLCBEUFJBTV9UWF9TSVpFKTsKKwlpZiAoKytmaWZvX3dyID49IERQUkFNX1RYX0NOVCkKKwkJZmlmb193ciA9IDA7CisJaW93cml0ZTgoZmlmb193ciwgJmNhcmQtPmRwcmFtW0RQUkFNX1RYX1dSXSk7CisJY2FyZC0+dHgubGFzdF9idXMgPSBwcml2LT5pbmRleDsKKwkrK2NhcmQtPnR4LnBlbmRpbmc7CisJKytwcml2LT50eC5wZW5kaW5nOworCWNhbl9wdXRfZWNob19za2Ioc2tiLCBkZXYsIHByaXYtPnR4LmVjaG9fcHV0KTsKKwkrK3ByaXYtPnR4LmVjaG9fcHV0OworCWlmIChwcml2LT50eC5lY2hvX3B1dCA+PSBUWF9FQ0hPX1NLQl9NQVgpCisJCXByaXYtPnR4LmVjaG9fcHV0ID0gMDsKKwkvKiBjYW5fcHV0X2VjaG9fc2tiKCkgc2F2ZXMgdGhlIHNrYiwgc2FmZSB0byByZXR1cm4gVFhfT0sgKi8KKwlyZXQgPSBORVRERVZfVFhfT0s7Cit4bWl0X2RvbmU6CisJc3Bpbl91bmxvY2soJmNhcmQtPnNwaW4pOworCWlmIChjYXJkLT50eC5wZW5kaW5nID49IFRYTUFYKSB7CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJCWlmIChjYXJkLT5uZXRbal0pCisJCQkJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5uZXRbal0pOworCQl9CisJfQorCWlmIChyZXQgIT0gTkVUREVWX1RYX09LKQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc2hvcnRjdXQgZm9yIHNrYiBkZWxpdmVyeQorICovCitpbnQgc29mdGluZ19uZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgc3RydWN0IGNhbl9mcmFtZSAqbXNnLAorCQlrdGltZV90IGt0aW1lKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGNhbl9mcmFtZSAqY2Y7CisKKwlza2IgPSBhbGxvY19jYW5fc2tiKG5ldGRldiwgJmNmKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNmLCBtc2csIHNpemVvZigqbXNnKSk7CisJc2tiLT50c3RhbXAgPSBrdGltZTsKKwlyZXR1cm4gbmV0aWZfcngoc2tiKTsKK30KKworLyoKKyAqIHNvZnRpbmdfaGFuZGxlXzEKKyAqIHBvcCAxIGVudHJ5IGZyb20gdGhlIERQUkFNIHF1ZXVlLCBhbmQgcHJvY2VzcworICovCitzdGF0aWMgaW50IHNvZnRpbmdfaGFuZGxlXzEoc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2OworCWt0aW1lX3Qga3RpbWU7CisJc3RydWN0IGNhbl9mcmFtZSBtc2c7CisJaW50IGNudCA9IDAsIGxvc3RfbXNnOworCXVpbnQ4X3QgZmlmb19yZCwgZmlmb193ciwgY21kOworCXVpbnQ4X3QgKnB0cjsKKwl1aW50MzJfdCB0bXBfdTMyOworCXVpbnQ4X3QgYnVmW0RQUkFNX1JYX1NJWkVdOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkvKiB0ZXN0IGZvciBsb3N0IG1zZ3MgKi8KKwlsb3N0X21zZyA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1JYX0xPU1RdKTsKKwlpZiAobG9zdF9tc2cpIHsKKwkJaW50IGo7CisJCS8qIHJlc2V0IGNvbmRpdGlvbiAqLworCQlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fUlhfTE9TVF0pOworCQkvKiBwcmVwYXJlIG1zZyAqLworCQltc2cuY2FuX2lkID0gQ0FOX0VSUl9GTEFHIHwgQ0FOX0VSUl9DUlRMOworCQltc2cuY2FuX2RsYyA9IENBTl9FUlJfRExDOworCQltc2cuZGF0YVsxXSA9IENBTl9FUlJfQ1JUTF9SWF9PVkVSRkxPVzsKKwkJLyoKKwkJICogc2VydmljZSB0byBhbGwgYnVzc2VzLCB3ZSBkb24ndCBrbm93IHdoaWNoIGl0IHdhcyBhcHBsaWNhYmxlCisJCSAqIGJ1dCBvbmx5IHNlcnZpY2UgYnVzc2VzIHRoYXQgYXJlIG9ubGluZQorCQkgKi8KKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCQluZXRkZXYgPSBjYXJkLT5uZXRbal07CisJCQlpZiAoIW5ldGRldikKKwkJCQljb250aW51ZTsKKwkJCWlmICghY2FuaWZfaXNfYWN0aXZlKG5ldGRldikpCisJCQkJLyogYSBkZWFkIGJ1cyBoYXMgbm8gb3ZlcmZsb3dzICovCisJCQkJY29udGludWU7CisJCQkrK25ldGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnM7CisJCQlzb2Z0aW5nX25ldGRldl9yeChuZXRkZXYsICZtc2csIGt0aW1lX3NldCgwLCAwKSk7CisJCX0KKwkJLyogcHJlcGFyZSBmb3Igb3RoZXIgdXNlICovCisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJCSsrY250OworCX0KKworCWZpZm9fcmQgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9SWF9SRF0pOworCWZpZm9fd3IgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9SWF9XUl0pOworCisJaWYgKCsrZmlmb19yZCA+PSBEUFJBTV9SWF9DTlQpCisJCWZpZm9fcmQgPSAwOworCWlmIChmaWZvX3dyID09IGZpZm9fcmQpCisJCXJldHVybiBjbnQ7CisKKwltZW1jcHlfZnJvbWlvKGJ1ZiwgJmNhcmQtPmRwcmFtW0RQUkFNX1JYICsgRFBSQU1fUlhfU0laRSpmaWZvX3JkXSwKKwkJCURQUkFNX1JYX1NJWkUpOworCW1iKCk7CisJLyogdHJpZ2dlciBkdWFsIHBvcnQgUkFNICovCisJaW93cml0ZTgoZmlmb19yZCwgJmNhcmQtPmRwcmFtW0RQUkFNX1JYX1JEXSk7CisKKwlwdHIgPSBidWY7CisJY21kID0gKnB0cisrOworCWlmIChjbWQgPT0gMHhmZikKKwkJLyogbm90IHF1aXRlIHVzZWZ1bGwsIHByb2JhYmx5IHRoZSBjYXJkIGhhcyBnb3Qgb3V0ICovCisJCXJldHVybiAwOworCW5ldGRldiA9IGNhcmQtPm5ldFswXTsKKwlpZiAoY21kICYgQ01EX0JVUzIpCisJCW5ldGRldiA9IGNhcmQtPm5ldFsxXTsKKwlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChjbWQgJiBDTURfRVJSKSB7CisJCXVpbnQ4X3QgY2FuX3N0YXRlLCBzdGF0ZTsKKworCQlzdGF0ZSA9ICpwdHIrKzsKKworCQltc2cuY2FuX2lkID0gQ0FOX0VSUl9GTEFHOworCQltc2cuY2FuX2RsYyA9IENBTl9FUlJfRExDOworCisJCWlmIChzdGF0ZSAmIFNGX01BU0tfQlVTT0ZGKSB7CisJCQljYW5fc3RhdGUgPSBDQU5fU1RBVEVfQlVTX09GRjsKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX0VSUl9CVVNPRkY7CisJCQlzdGF0ZSA9IFNUQVRFX0JVU09GRjsKKwkJfSBlbHNlIGlmIChzdGF0ZSAmIFNGX01BU0tfRVBBU1NJVkUpIHsKKwkJCWNhbl9zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFOworCQkJbXNnLmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CisJCQltc2cuZGF0YVsxXSA9IENBTl9FUlJfQ1JUTF9UWF9QQVNTSVZFOworCQkJc3RhdGUgPSBTVEFURV9FUEFTU0lWRTsKKwkJfSBlbHNlIHsKKwkJCWNhbl9zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJCQltc2cuY2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKKwkJCXN0YXRlID0gU1RBVEVfRUFDVElWRTsKKwkJfQorCQkvKiB1cGRhdGUgRFBSQU0gKi8KKwkJaW93cml0ZTgoc3RhdGUsICZjYXJkLT5kcHJhbVtwcml2LT5pbmRleCA/CisJCQkJRFBSQU1fSU5GT19CVVNTVEFURTIgOiBEUFJBTV9JTkZPX0JVU1NUQVRFXSk7CisJCS8qIHRpbWVzdGFtcCAqLworCQl0bXBfdTMyID0gbGUzMl90b19jcHVwKCh2b2lkICopcHRyKTsKKwkJcHRyICs9IDQ7CisJCWt0aW1lID0gc29mdGluZ19yYXcya3RpbWUoY2FyZCwgdG1wX3UzMik7CisKKwkJKytuZXRkZXYtPnN0YXRzLnJ4X2Vycm9yczsKKwkJLyogdXBkYXRlIGludGVybmFsIHN0YXR1cyAqLworCQlpZiAoY2FuX3N0YXRlICE9IHByaXYtPmNhbi5zdGF0ZSkgeworCQkJcHJpdi0+Y2FuLnN0YXRlID0gY2FuX3N0YXRlOworCQkJaWYgKGNhbl9zdGF0ZSA9PSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRSkKKwkJCQkrK3ByaXYtPmNhbi5jYW5fc3RhdHMuZXJyb3JfcGFzc2l2ZTsKKwkJCWVsc2UgaWYgKGNhbl9zdGF0ZSA9PSBDQU5fU1RBVEVfQlVTX09GRikgeworCQkJCS8qIHRoaXMgY2FsbHMgY2FuX2Nsb3NlX2NsZWFudXAoKSAqLworCQkJCWNhbl9idXNfb2ZmKG5ldGRldik7CisJCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQkJfQorCQkJLyogdHJpZ2dlciBzb2NrZXRjYW4gKi8KKwkJCXNvZnRpbmdfbmV0ZGV2X3J4KG5ldGRldiwgJm1zZywga3RpbWUpOworCQl9CisKKwl9IGVsc2UgeworCQlpZiAoY21kICYgQ01EX1JUUikKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX1JUUl9GTEFHOworCQltc2cuY2FuX2RsYyA9IGdldF9jYW5fZGxjKCpwdHIrKyk7CisJCWlmIChjbWQgJiBDTURfWFREKSB7CisJCQltc2cuY2FuX2lkIHw9IENBTl9FRkZfRkxBRzsKKwkJCW1zZy5jYW5faWQgfD0gbGUzMl90b19jcHVwKCh2b2lkICopcHRyKTsKKwkJCXB0ciArPSA0OworCQl9IGVsc2UgeworCQkJbXNnLmNhbl9pZCB8PSBsZTE2X3RvX2NwdXAoKHZvaWQgKilwdHIpOworCQkJcHRyICs9IDI7CisJCX0KKwkJLyogdGltZXN0YW1wICovCisJCXRtcF91MzIgPSBsZTMyX3RvX2NwdXAoKHZvaWQgKilwdHIpOworCQlwdHIgKz0gNDsKKwkJa3RpbWUgPSBzb2Z0aW5nX3JhdzJrdGltZShjYXJkLCB0bXBfdTMyKTsKKwkJaWYgKCEobXNnLmNhbl9pZCAmIENBTl9SVFJfRkxBRykpCisJCQltZW1jcHkoJm1zZy5kYXRhWzBdLCBwdHIsIDgpOworCQlwdHIgKz0gODsKKwkJLyogdXBkYXRlIHNvY2tldCAqLworCQlpZiAoY21kICYgQ01EX0FDSykgeworCQkJLyogYWNrbm93bGVkZ2UsIHdhcyB0eCBtc2cgKi8KKwkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQlza2IgPSBwcml2LT5jYW4uZWNob19za2JbcHJpdi0+dHguZWNob19nZXRdOworCQkJaWYgKHNrYikKKwkJCQlza2ItPnRzdGFtcCA9IGt0aW1lOworCQkJY2FuX2dldF9lY2hvX3NrYihuZXRkZXYsIHByaXYtPnR4LmVjaG9fZ2V0KTsKKwkJCSsrcHJpdi0+dHguZWNob19nZXQ7CisJCQlpZiAocHJpdi0+dHguZWNob19nZXQgPj0gVFhfRUNIT19TS0JfTUFYKQorCQkJCXByaXYtPnR4LmVjaG9fZ2V0ID0gMDsKKwkJCWlmIChwcml2LT50eC5wZW5kaW5nKQorCQkJCS0tcHJpdi0+dHgucGVuZGluZzsKKwkJCWlmIChjYXJkLT50eC5wZW5kaW5nKQorCQkJCS0tY2FyZC0+dHgucGVuZGluZzsKKwkJCSsrbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzOworCQkJaWYgKCEobXNnLmNhbl9pZCAmIENBTl9SVFJfRkxBRykpCisJCQkJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBtc2cuY2FuX2RsYzsKKwkJfSBlbHNlIHsKKwkJCWludCByZXQ7CisKKwkJCXJldCA9IHNvZnRpbmdfbmV0ZGV2X3J4KG5ldGRldiwgJm1zZywga3RpbWUpOworCQkJaWYgKHJldCA9PSBORVRfUlhfU1VDQ0VTUykgeworCQkJCSsrbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzOworCQkJCWlmICghKG1zZy5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpKQorCQkJCQluZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IG1zZy5jYW5fZGxjOworCQkJfSBlbHNlIHsKKwkJCQkrK25ldGRldi0+c3RhdHMucnhfZHJvcHBlZDsKKwkJCX0KKwkJfQorCX0KKwkrK2NudDsKKwlyZXR1cm4gY250OworfQorCisvKgorICogcmVhbCBpbnRlcnJ1cHQgaGFuZGxlcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc29mdGluZ19pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IChzdHJ1Y3Qgc29mdGluZyAqKWRldl9pZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJaW50IGosIG9mZnNldCwgd29ya19kb25lOworCisJd29ya19kb25lID0gMDsKKwlzcGluX2xvY2tfYmgoJmNhcmQtPnNwaW4pOworCXdoaWxlIChzb2Z0aW5nX2hhbmRsZV8xKGNhcmQpID4gMCkgeworCQkrK2NhcmQtPmlycS5zdmNfY291bnQ7CisJCSsrd29ya19kb25lOworCX0KKwlzcGluX3VubG9ja19iaCgmY2FyZC0+c3Bpbik7CisJLyogcmVzdW1lIHR4IHF1ZXVlJ3MgKi8KKwlvZmZzZXQgPSBjYXJkLT50eC5sYXN0X2J1czsKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJaWYgKGNhcmQtPnR4LnBlbmRpbmcgPj0gVFhNQVgpCisJCQlicmVhazsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0WyhqICsgb2Zmc2V0ICsgMSkgJSBjYXJkLT5wZGF0LT5uYnVzXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCWlmICghY2FuaWZfaXNfYWN0aXZlKG5ldGRldikpCisJCQkvKiBpdCBtYWtlcyBubyBzZW5zZSB0byB3YWtlIGRlYWQgYnVzc2VzICovCisJCQljb250aW51ZTsKKwkJaWYgKHByaXYtPnR4LnBlbmRpbmcgPj0gVFhfRUNIT19TS0JfTUFYKQorCQkJY29udGludWU7CisJCSsrd29ya19kb25lOworCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJfQorCXJldHVybiB3b3JrX2RvbmUgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOworfQorCisvKgorICogaW50ZXJydXB0IHJvdXRpbmVzOgorICogc2NoZWR1bGUgdGhlICdyZWFsIGludGVycnVwdCBoYW5kbGVyJworICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc29mdGluZ19pcnFfdjIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gKHN0cnVjdCBzb2Z0aW5nICopZGV2X2lkOworCXVpbnQ4X3QgaXI7CisKKwlpciA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1YyX0lSUV9UT0hPU1RdKTsKKwlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fVjJfSVJRX1RPSE9TVF0pOworCXJldHVybiAoMSA9PSBpcikgPyBJUlFfV0FLRV9USFJFQUQgOiBJUlFfTk9ORTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNvZnRpbmdfaXJxX3YxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IChzdHJ1Y3Qgc29mdGluZyAqKWRldl9pZDsKKwl1aW50OF90IGlyOworCisJaXIgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9JUlFfVE9IT1NUXSk7CisJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0lSUV9UT0hPU1RdKTsKKwlyZXR1cm4gaXIgPyBJUlFfV0FLRV9USFJFQUQgOiBJUlFfTk9ORTsKK30KKworLyoKKyAqIG5ldGRldi9jYW5kZXYgaW50ZXItb3BlcmFiaWxpdHkKKyAqLworc3RhdGljIGludCBzb2Z0aW5nX25ldGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCWludCByZXQ7CisKKwkvKiBjaGVjayBvciBkZXRlcm1pbmUgYW5kIHNldCBiaXR0aW1lICovCisJcmV0ID0gb3Blbl9jYW5kZXYobmRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IHNvZnRpbmdfc3RhcnRzdG9wKG5kZXYsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19uZXRkZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlpbnQgcmV0OworCisJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKworCS8qIHNvZnRpbmcgY3ljbGUgZG9lcyBjbG9zZV9jYW5kZXYoKSAqLworCXJldCA9IHNvZnRpbmdfc3RhcnRzdG9wKG5kZXYsIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19jYW5kZXZfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gY2FuX21vZGUgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDQU5fTU9ERV9TVEFSVDoKKwkJLyogc29mdGluZ19zdGFydHN0b3AgZG9lcyBjbG9zZV9jYW5kZXYoKSAqLworCQlyZXQgPSBzb2Z0aW5nX3N0YXJ0c3RvcChuZGV2LCAxKTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIENBTl9NT0RFX1NUT1A6CisJY2FzZSBDQU5fTU9ERV9TTEVFUDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNvZnRpbmcgZGV2aWNlIG1hbmFnZW1lbnQgaGVscGVycworICovCitpbnQgc29mdGluZ19lbmFibGVfaXJxKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQgZW5hYmxlKQoreworCWludCByZXQ7CisKKwlpZiAoIWNhcmQtPmlycS5ucikgeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGNhcmQtPmlycS5yZXF1ZXN0ZWQgJiYgIWVuYWJsZSkgeworCQlmcmVlX2lycShjYXJkLT5pcnEubnIsIGNhcmQpOworCQljYXJkLT5pcnEucmVxdWVzdGVkID0gMDsKKwl9IGVsc2UgaWYgKCFjYXJkLT5pcnEucmVxdWVzdGVkICYmIGVuYWJsZSkgeworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjYXJkLT5pcnEubnIsCisJCQkJKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPj0gMikgPworCQkJCQlzb2Z0aW5nX2lycV92MiA6IHNvZnRpbmdfaXJxX3YxLAorCQkJCXNvZnRpbmdfaXJxX3RocmVhZCwgSVJRRl9TSEFSRUQsCisJCQkJZGV2X25hbWUoJmNhcmQtPnBkZXYtPmRldiksIGNhcmQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwKKwkJCQkJInJlcXVlc3RfdGhyZWFkZWRfaXJxKCV1KSBmYWlsZWRcbiIsCisJCQkJCWNhcmQtPmlycS5ucik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWNhcmQtPmlycS5yZXF1ZXN0ZWQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29mdGluZ19jYXJkX3NodXRkb3duKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWludCBmd191cCA9IDA7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYXJkLT5mdy5sb2NrKSkKKwkJLyogcmV0dXJuIC1FUkVTVEFSVFNZUyAqLzsKKwlmd191cCA9IGNhcmQtPmZ3LnVwOworCWNhcmQtPmZ3LnVwID0gMDsKKworCWlmIChjYXJkLT5pcnEucmVxdWVzdGVkICYmIGNhcmQtPmlycS5ucikgeworCQlmcmVlX2lycShjYXJkLT5pcnEubnIsIGNhcmQpOworCQljYXJkLT5pcnEucmVxdWVzdGVkID0gMDsKKwl9CisJaWYgKGZ3X3VwKSB7CisJCWlmIChjYXJkLT5wZGF0LT5lbmFibGVfaXJxKQorCQkJY2FyZC0+cGRhdC0+ZW5hYmxlX2lycShjYXJkLT5wZGV2LCAwKTsKKwkJc29mdGluZ19zZXRfcmVzZXRfZHByYW0oY2FyZCk7CisJCWlmIChjYXJkLT5wZGF0LT5yZXNldCkKKwkJCWNhcmQtPnBkYXQtPnJlc2V0KGNhcmQtPnBkZXYsIDEpOworCX0KKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBzb2Z0aW5nX2NhcmRfYm9vdChzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpbnQgcmV0LCBqOworCXN0YXRpYyBjb25zdCB1aW50OF90IHN0cmVhbVtdID0geworCQkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCB9OworCXVuc2lnbmVkIGNoYXIgYmFja1tzaXplb2Yoc3RyZWFtKV07CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYXJkLT5mdy5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAoY2FyZC0+ZncudXApIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHJlc2V0IGJvYXJkICovCisJaWYgKGNhcmQtPnBkYXQtPmVuYWJsZV9pcnEpCisJCWNhcmQtPnBkYXQtPmVuYWJsZV9pcnEoY2FyZC0+cGRldiwgMSk7CisJLyogYm9vdCBjYXJkICovCisJc29mdGluZ19zZXRfcmVzZXRfZHByYW0oY2FyZCk7CisJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQljYXJkLT5wZGF0LT5yZXNldChjYXJkLT5wZGV2LCAxKTsKKwlmb3IgKGogPSAwOyAoaiArIHNpemVvZihzdHJlYW0pKSA8IGNhcmQtPmRwcmFtX3NpemU7CisJCQlqICs9IHNpemVvZihzdHJlYW0pKSB7CisKKwkJbWVtY3B5X3RvaW8oJmNhcmQtPmRwcmFtW2pdLCBzdHJlYW0sIHNpemVvZihzdHJlYW0pKTsKKwkJLyogZmx1c2ggSU8gY2FjaGUgKi8KKwkJbWIoKTsKKwkJbWVtY3B5X2Zyb21pbyhiYWNrLCAmY2FyZC0+ZHByYW1bal0sIHNpemVvZihzdHJlYW0pKTsKKworCQlpZiAoIW1lbWNtcChiYWNrLCBzdHJlYW0sIHNpemVvZihzdHJlYW0pKSkKKwkJCWNvbnRpbnVlOworCQkvKiBtZW1vcnkgaXMgbm90IGVxdWFsICovCisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZHByYW0gZmFpbGVkIGF0IDB4JTA0eFxuIiwgaik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwl3bWIoKTsKKwkvKiBsb2FkIGJvb3QgZmlybXdhcmUgKi8KKwlyZXQgPSBzb2Z0aW5nX2xvYWRfZncoY2FyZC0+cGRhdC0+Ym9vdC5mdywgY2FyZCwgY2FyZC0+ZHByYW0sCisJCQkJY2FyZC0+ZHByYW1fc2l6ZSwKKwkJCQljYXJkLT5wZGF0LT5ib290Lm9mZnMgLSBjYXJkLT5wZGF0LT5ib290LmFkZHIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBsb2FkIGxvYWRlciBmaXJtd2FyZSAqLworCXJldCA9IHNvZnRpbmdfbG9hZF9mdyhjYXJkLT5wZGF0LT5sb2FkLmZ3LCBjYXJkLCBjYXJkLT5kcHJhbSwKKwkJCQljYXJkLT5kcHJhbV9zaXplLAorCQkJCWNhcmQtPnBkYXQtPmxvYWQub2ZmcyAtIGNhcmQtPnBkYXQtPmxvYWQuYWRkcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQljYXJkLT5wZGF0LT5yZXNldChjYXJkLT5wZGV2LCAwKTsKKwlzb2Z0aW5nX2Nscl9yZXNldF9kcHJhbShjYXJkKTsKKwlyZXQgPSBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChjYXJkLCAwLCAiY2FyZCBib290Iik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCXJldCA9IHNvZnRpbmdfbG9hZF9hcHBfZncoY2FyZC0+cGRhdC0+YXBwLmZ3LCBjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBzb2Z0aW5nX2NoaXBfcG93ZXJvbihjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwljYXJkLT5mdy51cCA9IDE7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZDoKKwljYXJkLT5mdy51cCA9IDA7CisJaWYgKGNhcmQtPnBkYXQtPmVuYWJsZV9pcnEpCisJCWNhcmQtPnBkYXQtPmVuYWJsZV9pcnEoY2FyZC0+cGRldiwgMCk7CisJc29mdGluZ19zZXRfcmVzZXRfZHByYW0oY2FyZCk7CisJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQljYXJkLT5wZGF0LT5yZXNldChjYXJkLT5wZGV2LCAxKTsKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBuZXRkZXYgc3lzZnMKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19jaGFubmVsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2MnNvZnRpbmcobmRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgcHJpdi0+aW5kZXgpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2NoaXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBwcml2LT5jaGlwKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19vdXRwdXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAyeFxuIiwgcHJpdi0+b3V0cHV0KTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfb3V0cHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHByaXYtPmNhcmQ7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJdmFsICY9IDB4RkY7CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhcmQtPmZ3LmxvY2spOworCWlmIChyZXQpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcHJpdi0+b3V0cHV0ID0gdmFsOworCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3QgREVWSUNFX0FUVFIoY2hhbm5lbCwgU19JUlVHTywgc2hvd19jaGFubmVsLCBOVUxMKTsKK3N0YXRpYyBjb25zdCBERVZJQ0VfQVRUUihjaGlwLCBTX0lSVUdPLCBzaG93X2NoaXAsIE5VTEwpOworc3RhdGljIGNvbnN0IERFVklDRV9BVFRSKG91dHB1dCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfb3V0cHV0LCBzdG9yZV9vdXRwdXQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3QgbmV0ZGV2X3N5c2ZzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2NoYW5uZWwuYXR0ciwKKwkmZGV2X2F0dHJfY2hpcC5hdHRyLAorCSZkZXZfYXR0cl9vdXRwdXQuYXR0ciwKKwlOVUxMLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG5ldGRldl9zeXNmc19ncm91cCA9IHsKKwkubmFtZSA9IE5VTEwsCisJLmF0dHJzID0gKHN0cnVjdCBhdHRyaWJ1dGUgKiopbmV0ZGV2X3N5c2ZzX2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzb2Z0aW5nX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gc29mdGluZ19uZXRkZXZfb3BlbiwKKwkubmRvX3N0b3AgPSBzb2Z0aW5nX25ldGRldl9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAk9IHNvZnRpbmdfbmV0ZGV2X3N0YXJ0X3htaXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3Qgc29mdGluZ19idHJfY29uc3QgPSB7CisJLm5hbWUgPSAic29mdGluZyIsCisJLnRzZWcxX21pbiA9IDEsCisJLnRzZWcxX21heCA9IDE2LAorCS50c2VnMl9taW4gPSAxLAorCS50c2VnMl9tYXggPSA4LAorCS5zandfbWF4ID0gNCwgLyogb3ZlcnJ1bGVkICovCisJLmJycF9taW4gPSAxLAorCS5icnBfbWF4ID0gMzIsIC8qIG92ZXJydWxlZCAqLworCS5icnBfaW5jID0gMSwKK307CisKKworc3RhdGljIF9fZGV2aW5pdCBzdHJ1Y3QgbmV0X2RldmljZSAqc29mdGluZ19uZXRkZXZfY3JlYXRlKHN0cnVjdCBzb2Z0aW5nICpjYXJkLAorCQl1aW50MTZfdCBjaGlwX2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdjsKKworCW5ldGRldiA9IGFsbG9jX2NhbmRldihzaXplb2YoKnByaXYpLCBUWF9FQ0hPX1NLQl9NQVgpOworCWlmICghbmV0ZGV2KSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiYWxsb2NfY2FuZGV2IGZhaWxlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlwcml2LT5uZXRkZXYgPSBuZXRkZXY7CisJcHJpdi0+Y2FyZCA9IGNhcmQ7CisJbWVtY3B5KCZwcml2LT5idHJfY29uc3QsICZzb2Z0aW5nX2J0cl9jb25zdCwgc2l6ZW9mKHByaXYtPmJ0cl9jb25zdCkpOworCXByaXYtPmJ0cl9jb25zdC5icnBfbWF4ID0gY2FyZC0+cGRhdC0+bWF4X2JycDsKKwlwcml2LT5idHJfY29uc3Quc2p3X21heCA9IGNhcmQtPnBkYXQtPm1heF9zanc7CisJcHJpdi0+Y2FuLmJpdHRpbWluZ19jb25zdCA9ICZwcml2LT5idHJfY29uc3Q7CisJcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSA4MDAwMDAwOworCXByaXYtPmNoaXAgPSBjaGlwX2lkOworCXByaXYtPm91dHB1dCA9IHNvZnRpbmdfZGVmYXVsdF9vdXRwdXQobmV0ZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZjYXJkLT5wZGV2LT5kZXYpOworCisJbmV0ZGV2LT5mbGFncyB8PSBJRkZfRUNITzsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmc29mdGluZ19uZXRkZXZfb3BzOworCXByaXYtPmNhbi5kb19zZXRfbW9kZSA9IHNvZnRpbmdfY2FuZGV2X3NldF9tb2RlOworCXByaXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTOworCisJcmV0dXJuIG5ldGRldjsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ19uZXRkZXZfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgcmV0OworCisJbmV0ZGV2LT5zeXNmc19ncm91cHNbMF0gPSAmbmV0ZGV2X3N5c2ZzX2dyb3VwOworCXJldCA9IHJlZ2lzdGVyX2NhbmRldihuZXRkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2FsZXJ0KCZuZXRkZXYtPmRldiwgInJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2Z0aW5nX25ldGRldl9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJdW5yZWdpc3Rlcl9jYW5kZXYobmV0ZGV2KTsKKwlmcmVlX2NhbmRldihuZXRkZXYpOworfQorCisvKgorICogc3lzZnMgZm9yIFBsYXRmb3JtIGRldmljZQorICovCisjZGVmaW5lIERFVl9BVFRSX1JPKG5hbWUsIG1lbWJlcikgXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGNhcmQtPm1lbWJlcik7IFwKK30gXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIDA0NDQsIHNob3dfIyNuYW1lLCBOVUxMKQorCisjZGVmaW5lIERFVl9BVFRSX1JPX1NUUihuYW1lLCBtZW1iZXIpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCit7IFwKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsgXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjYXJkLT5tZW1iZXIpOyBcCit9IFwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCAwNDQ0LCBzaG93XyMjbmFtZSwgTlVMTCkKKworREVWX0FUVFJfUk8oc2VyaWFsLCBpZC5zZXJpYWwpOworREVWX0FUVFJfUk9fU1RSKGZpcm13YXJlLCBwZGF0LT5hcHAuZncpOworREVWX0FUVFJfUk8oZmlybXdhcmVfdmVyc2lvbiwgaWQuZndfdmVyc2lvbik7CitERVZfQVRUUl9ST19TVFIoaGFyZHdhcmUsIHBkYXQtPm5hbWUpOworREVWX0FUVFJfUk8oaGFyZHdhcmVfdmVyc2lvbiwgaWQuaHdfdmVyc2lvbik7CitERVZfQVRUUl9STyhsaWNlbnNlLCBpZC5saWNlbnNlKTsKK0RFVl9BVFRSX1JPKGZyZXF1ZW5jeSwgaWQuZnJlcSk7CitERVZfQVRUUl9STyh0eHBlbmRpbmcsIHR4LnBlbmRpbmcpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc29mdGluZ19wZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3NlcmlhbC5hdHRyLAorCSZkZXZfYXR0cl9maXJtd2FyZS5hdHRyLAorCSZkZXZfYXR0cl9maXJtd2FyZV92ZXJzaW9uLmF0dHIsCisJJmRldl9hdHRyX2hhcmR3YXJlLmF0dHIsCisJJmRldl9hdHRyX2hhcmR3YXJlX3ZlcnNpb24uYXR0ciwKKwkmZGV2X2F0dHJfbGljZW5zZS5hdHRyLAorCSZkZXZfYXR0cl9mcmVxdWVuY3kuYXR0ciwKKwkmZGV2X2F0dHJfdHhwZW5kaW5nLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNvZnRpbmdfcGRldl9ncm91cCA9IHsKKwkubmFtZSA9IE5VTEwsCisJLmF0dHJzID0gc29mdGluZ19wZGV2X2F0dHJzLAorfTsKKworLyoKKyAqIHBsYXRmb3JtIGRyaXZlcgorICovCitzdGF0aWMgX19kZXZleGl0IGludCBzb2Z0aW5nX3BkZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgajsKKworCS8qIGZpcnN0LCBkaXNhYmxlIGNhcmQqLworCXNvZnRpbmdfY2FyZF9zaHV0ZG93bihjYXJkKTsKKworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQlpZiAoIWNhcmQtPm5ldFtqXSkKKwkJCWNvbnRpbnVlOworCQlzb2Z0aW5nX25ldGRldl9jbGVhbnVwKGNhcmQtPm5ldFtqXSk7CisJCWNhcmQtPm5ldFtqXSA9IE5VTEw7CisJfQorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzb2Z0aW5nX3BkZXZfZ3JvdXApOworCisJaW91bm1hcChjYXJkLT5kcHJhbSk7CisJa2ZyZWUoY2FyZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHNvZnRpbmdfcGRldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKnBkYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJc3RydWN0IHJlc291cmNlICpwcmVzOworCWludCByZXQ7CisJaW50IGo7CisKKwlpZiAoIXBkYXQpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHBkYXQtPm5idXMgPiBBUlJBWV9TSVpFKGNhcmQtPm5ldCkpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIiV1IG5ldHM/P1xuIiwgcGRhdC0+bmJ1cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhcmQgPSBremFsbG9jKHNpemVvZigqY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2FyZC0+cGRhdCA9IHBkYXQ7CisJY2FyZC0+cGRldiA9IHBkZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisJbXV0ZXhfaW5pdCgmY2FyZC0+ZncubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnNwaW4pOworCisJcmV0ID0gLUVJTlZBTDsKKwlwcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXByZXMpCisJCWdvdG8gcGxhdGZvcm1fcmVzb3VyY2VfZmFpbGVkOzsKKwljYXJkLT5kcHJhbV9waHlzID0gcHJlcy0+c3RhcnQ7CisJY2FyZC0+ZHByYW1fc2l6ZSA9IHByZXMtPmVuZCAtIHByZXMtPnN0YXJ0ICsgMTsKKwljYXJkLT5kcHJhbSA9IGlvcmVtYXBfbm9jYWNoZShjYXJkLT5kcHJhbV9waHlzLCBjYXJkLT5kcHJhbV9zaXplKTsKKwlpZiAoIWNhcmQtPmRwcmFtKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZHByYW0gaW9yZW1hcCBmYWlsZWRcbiIpOworCQlnb3RvIGlvcmVtYXBfZmFpbGVkOworCX0KKworCXByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChwcmVzKQorCQljYXJkLT5pcnEubnIgPSBwcmVzLT5zdGFydDsKKworCS8qIHJlc2V0IGNhcmQgKi8KKwlyZXQgPSBzb2Z0aW5nX2NhcmRfYm9vdChjYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfYWxlcnQoJnBkZXYtPmRldiwgImZhaWxlZCB0byBib290XG4iKTsKKwkJZ290byBib290X2ZhaWxlZDsKKwl9CisKKwkvKiBvbmx5IG5vdywgdGhlIGNoaXAncyBhcmUga25vd24gKi8KKwljYXJkLT5pZC5mcmVxID0gY2FyZC0+cGRhdC0+ZnJlcTsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzb2Z0aW5nX3BkZXZfZ3JvdXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAic3lzZnMgZmFpbGVkXG4iKTsKKwkJZ290byBzeXNmc19mYWlsZWQ7CisJfQorCisJcmV0ID0gLUVOT01FTTsKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJY2FyZC0+bmV0W2pdID0gbmV0ZGV2ID0KKwkJCXNvZnRpbmdfbmV0ZGV2X2NyZWF0ZShjYXJkLCBjYXJkLT5pZC5jaGlwW2pdKTsKKwkJaWYgKCFuZXRkZXYpIHsKKwkJCWRldl9hbGVydCgmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1ha2UgY2FuWyVpXSIsIGopOworCQkJZ290byBuZXRkZXZfZmFpbGVkOworCQl9CisJCXByaXYgPSBuZXRkZXZfcHJpdihjYXJkLT5uZXRbal0pOworCQlwcml2LT5pbmRleCA9IGo7CisJCXJldCA9IHNvZnRpbmdfbmV0ZGV2X3JlZ2lzdGVyKG5ldGRldik7CisJCWlmIChyZXQpIHsKKwkJCWZyZWVfY2FuZGV2KG5ldGRldik7CisJCQljYXJkLT5uZXRbal0gPSBOVUxMOworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FuWyVpXVxuIiwgaik7CisJCQlnb3RvIG5ldGRldl9mYWlsZWQ7CisJCX0KKwl9CisJZGV2X2luZm8oJmNhcmQtPnBkZXYtPmRldiwgIiVzIHJlYWR5LlxuIiwgY2FyZC0+cGRhdC0+bmFtZSk7CisJcmV0dXJuIDA7CisKK25ldGRldl9mYWlsZWQ6CisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCWlmICghY2FyZC0+bmV0W2pdKQorCQkJY29udGludWU7CisJCXNvZnRpbmdfbmV0ZGV2X2NsZWFudXAoY2FyZC0+bmV0W2pdKTsKKwl9CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNvZnRpbmdfcGRldl9ncm91cCk7CitzeXNmc19mYWlsZWQ6CisJc29mdGluZ19jYXJkX3NodXRkb3duKGNhcmQpOworYm9vdF9mYWlsZWQ6CisJaW91bm1hcChjYXJkLT5kcHJhbSk7Citpb3JlbWFwX2ZhaWxlZDoKK3BsYXRmb3JtX3Jlc291cmNlX2ZhaWxlZDoKKwlrZnJlZShjYXJkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzb2Z0aW5nX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzb2Z0aW5nIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBzb2Z0aW5nX3BkZXZfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNvZnRpbmdfcGRldl9yZW1vdmUpLAorfTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzb2Z0aW5nIik7CisKK3N0YXRpYyBpbnQgX19pbml0IHNvZnRpbmdfc3RhcnQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzb2Z0aW5nX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzb2Z0aW5nX3N0b3Aodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc29mdGluZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzb2Z0aW5nX3N0YXJ0KTsKK21vZHVsZV9leGl0KHNvZnRpbmdfc3RvcCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU29mdGluZyBEUFJBTSBDQU4gZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJLdXJ0IFZhbiBEaWpjayA8a3VydC52YW4uZGlqY2tAZWlhLmJlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19wbGF0Zm9ybS5oIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYmY2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX3BsYXRmb3JtLmgKQEAgLTAsMCArMSw0MCBAQAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpZm5kZWYgX1NPRlRJTkdfREVWSUNFX0hfCisjZGVmaW5lIF9TT0ZUSU5HX0RFVklDRV9IXworCisvKiBzb2Z0aW5nIGZpcm13YXJlIGRpcmVjdG9yeSBwcmVmaXggKi8KKyNkZWZpbmUgZndfZGlyICJzb2Z0aW5nLTQuNi8iCisKK3N0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBtYW5mOworCXVuc2lnbmVkIGludCBwcm9kOworCS8qCisJICogZ2VuZXJhdGlvbgorCSAqIDFzdCB3aXRoIE5FQyBvciBTSkExMDAwCisJICogOGJpdCwgZXhjbHVzaXZlIGludGVycnVwdCwgLi4uCisJICogMm5kIG9ubHkgU0pBMTAwMAorCSAqIDE2Yml0LCBzaGFyZWQgaW50ZXJydXB0CisJICovCisJaW50IGdlbmVyYXRpb247CisJaW50IG5idXM7IC8qICMgYnVzc2VzIG9uIGRldmljZSAqLworCXVuc2lnbmVkIGludCBmcmVxOyAvKiBvcGVyYXRpbmcgZnJlcXVlbmN5IGluIEh6ICovCisJdW5zaWduZWQgaW50IG1heF9icnA7CisJdW5zaWduZWQgaW50IG1heF9zanc7CisJdW5zaWduZWQgbG9uZyBkcHJhbV9zaXplOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCWNvbnN0IGNoYXIgKmZ3OworCX0gYm9vdCwgbG9hZCwgYXBwOworCS8qCisJICogcmVzZXQoKSBmdW5jdGlvbgorCSAqIGJyaW5nIHBkZXYgaW4gb3Igb3V0IG9mIHJlc2V0LCBkZXBlbmRpbmcgb24gdmFsdWUKKwkgKi8KKwlpbnQgKCpyZXNldCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHZhbHVlKTsKKwlpbnQgKCplbmFibGVfaXJxKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jbmljLmMgYi9kcml2ZXJzL25ldC9jbmljLmMKaW5kZXggMjYzYTI5NC4uMzAyYmU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NuaWMuYwpAQCAtNjk5LDEzICs2OTksMTMgQEAKIHN0YXRpYyB2b2lkIGNuaWNfc2V0dXBfcGFnZV90Ymwoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBjbmljX2RtYSAqZG1hKQogewogCWludCBpOwotCXUzMiAqcGFnZV90YWJsZSA9IGRtYS0+cGd0Ymw7CisJX19sZTMyICpwYWdlX3RhYmxlID0gKF9fbGUzMiAqKSBkbWEtPnBndGJsOwogCiAJZm9yIChpID0gMDsgaSA8IGRtYS0+bnVtX3BhZ2VzOyBpKyspIHsKIAkJLyogRWFjaCBlbnRyeSBuZWVkcyB0byBiZSBpbiBiaWcgZW5kaWFuIGZvcm1hdC4gKi8KLQkJKnBhZ2VfdGFibGUgPSAodTMyKSAoKHU2NCkgZG1hLT5wZ19tYXBfYXJyW2ldID4+IDMyKTsKKwkJKnBhZ2VfdGFibGUgPSBjcHVfdG9fbGUzMigodTY0KSBkbWEtPnBnX21hcF9hcnJbaV0gPj4gMzIpOwogCQlwYWdlX3RhYmxlKys7Ci0JCSpwYWdlX3RhYmxlID0gKHUzMikgZG1hLT5wZ19tYXBfYXJyW2ldOworCQkqcGFnZV90YWJsZSA9IGNwdV90b19sZTMyKGRtYS0+cGdfbWFwX2FycltpXSAmIDB4ZmZmZmZmZmYpOwogCQlwYWdlX3RhYmxlKys7CiAJfQogfQpAQCAtNzEzLDEzICs3MTMsMTMgQEAKIHN0YXRpYyB2b2lkIGNuaWNfc2V0dXBfcGFnZV90YmxfbGUoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBjbmljX2RtYSAqZG1hKQogewogCWludCBpOwotCXUzMiAqcGFnZV90YWJsZSA9IGRtYS0+cGd0Ymw7CisJX19sZTMyICpwYWdlX3RhYmxlID0gKF9fbGUzMiAqKSBkbWEtPnBndGJsOwogCiAJZm9yIChpID0gMDsgaSA8IGRtYS0+bnVtX3BhZ2VzOyBpKyspIHsKIAkJLyogRWFjaCBlbnRyeSBuZWVkcyB0byBiZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdC4gKi8KLQkJKnBhZ2VfdGFibGUgPSBkbWEtPnBnX21hcF9hcnJbaV0gJiAweGZmZmZmZmZmOworCQkqcGFnZV90YWJsZSA9IGNwdV90b19sZTMyKGRtYS0+cGdfbWFwX2FycltpXSAmIDB4ZmZmZmZmZmYpOwogCQlwYWdlX3RhYmxlKys7Ci0JCSpwYWdlX3RhYmxlID0gKHUzMikgKCh1NjQpIGRtYS0+cGdfbWFwX2FycltpXSA+PiAzMik7CisJCSpwYWdlX3RhYmxlID0gY3B1X3RvX2xlMzIoKHU2NCkgZG1hLT5wZ19tYXBfYXJyW2ldID4+IDMyKTsKIAkJcGFnZV90YWJsZSsrOwogCX0KIH0KQEAgLTI3NjAsNiArMjc2MCw4IEBACiAJdTMyIHN0YXR1c19pZHggPSAodTE2KSAqY3AtPmtjcTEuc3RhdHVzX2lkeF9wdHI7CiAJaW50IGtjcWVfY250OwogCisJLyogc3RhdHVzIGJsb2NrIGluZGV4IG11c3QgYmUgcmVhZCBiZWZvcmUgcmVhZGluZyBvdGhlciBmaWVsZHMgKi8KKwlybWIoKTsKIAljcC0+a3dxX2Nvbl9pZHggPSAqY3AtPmt3cV9jb25faWR4X3B0cjsKIAogCXdoaWxlICgoa2NxZV9jbnQgPSBjbmljX2dldF9rY3FlcyhkZXYsICZjcC0+a2NxMSkpKSB7CkBAIC0yNzcwLDYgKzI3NzIsOCBAQAogCQliYXJyaWVyKCk7CiAJCWlmIChzdGF0dXNfaWR4ICE9ICpjcC0+a2NxMS5zdGF0dXNfaWR4X3B0cikgewogCQkJc3RhdHVzX2lkeCA9ICh1MTYpICpjcC0+a2NxMS5zdGF0dXNfaWR4X3B0cjsKKwkJCS8qIHN0YXR1cyBibG9jayBpbmRleCBtdXN0IGJlIHJlYWQgZmlyc3QgKi8KKwkJCXJtYigpOwogCQkJY3AtPmt3cV9jb25faWR4ID0gKmNwLT5rd3FfY29uX2lkeF9wdHI7CiAJCX0gZWxzZQogCQkJYnJlYWs7CkBAIC0yODg4LDYgKzI4OTIsOCBAQAogCXUzMiBsYXN0X3N0YXR1cyA9ICppbmZvLT5zdGF0dXNfaWR4X3B0cjsKIAlpbnQga2NxZV9jbnQ7CiAKKwkvKiBzdGF0dXMgYmxvY2sgaW5kZXggbXVzdCBiZSByZWFkIGJlZm9yZSByZWFkaW5nIHRoZSBLQ1EgKi8KKwlybWIoKTsKIAl3aGlsZSAoKGtjcWVfY250ID0gY25pY19nZXRfa2NxZXMoZGV2LCBpbmZvKSkpIHsKIAogCQlzZXJ2aWNlX2tjcWVzKGRldiwga2NxZV9jbnQpOwpAQCAtMjg5OCw2ICsyOTA0LDggQEAKIAkJCWJyZWFrOwogCiAJCWxhc3Rfc3RhdHVzID0gKmluZm8tPnN0YXR1c19pZHhfcHRyOworCQkvKiBzdGF0dXMgYmxvY2sgaW5kZXggbXVzdCBiZSByZWFkIGJlZm9yZSByZWFkaW5nIHRoZSBLQ1EgKi8KKwkJcm1iKCk7CiAJfQogCXJldHVybiBsYXN0X3N0YXR1czsKIH0KQEAgLTI5MDYsMjYgKzI5MTQsMzUgQEAKIHsKIAlzdHJ1Y3QgY25pY19kZXYgKmRldiA9IChzdHJ1Y3QgY25pY19kZXYgKikgZGF0YTsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQl1MzIgc3RhdHVzX2lkeDsKKwl1MzIgc3RhdHVzX2lkeCwgbmV3X3N0YXR1c19pZHg7CiAKIAlpZiAodW5saWtlbHkoIXRlc3RfYml0KENOSUNfRl9DTklDX1VQLCAmZGV2LT5mbGFncykpKQogCQlyZXR1cm47CiAKLQlzdGF0dXNfaWR4ID0gY25pY19zZXJ2aWNlX2JueDJ4X2tjcShkZXYsICZjcC0+a2NxMSk7CisJd2hpbGUgKDEpIHsKKwkJc3RhdHVzX2lkeCA9IGNuaWNfc2VydmljZV9ibngyeF9rY3EoZGV2LCAmY3AtPmtjcTEpOwogCi0JQ05JQ19XUjE2KGRldiwgY3AtPmtjcTEuaW9fYWRkciwgY3AtPmtjcTEuc3dfcHJvZF9pZHggKyBNQVhfS0NRX0lEWCk7CisJCUNOSUNfV1IxNihkZXYsIGNwLT5rY3ExLmlvX2FkZHIsCisJCQkgIGNwLT5rY3ExLnN3X3Byb2RfaWR4ICsgTUFYX0tDUV9JRFgpOwogCi0JaWYgKEJOWDJYX0NISVBfSVNfRTIoY3AtPmNoaXBfaWQpKSB7Ci0JCXN0YXR1c19pZHggPSBjbmljX3NlcnZpY2VfYm54Mnhfa2NxKGRldiwgJmNwLT5rY3EyKTsKKwkJaWYgKCFCTlgyWF9DSElQX0lTX0UyKGNwLT5jaGlwX2lkKSkgeworCQkJY25pY19hY2tfYm54MnhfaW50KGRldiwgY3AtPmJueDJ4X2lndV9zYl9pZCwgVVNUT1JNX0lELAorCQkJCQkgICBzdGF0dXNfaWR4LCBJR1VfSU5UX0VOQUJMRSwgMSk7CisJCQlicmVhazsKKwkJfQorCisJCW5ld19zdGF0dXNfaWR4ID0gY25pY19zZXJ2aWNlX2JueDJ4X2tjcShkZXYsICZjcC0+a2NxMik7CisKKwkJaWYgKG5ld19zdGF0dXNfaWR4ICE9IHN0YXR1c19pZHgpCisJCQljb250aW51ZTsKIAogCQlDTklDX1dSMTYoZGV2LCBjcC0+a2NxMi5pb19hZGRyLCBjcC0+a2NxMi5zd19wcm9kX2lkeCArCiAJCQkgIE1BWF9LQ1FfSURYKTsKIAogCQljbmljX2Fja19pZ3Vfc2IoZGV2LCBjcC0+Ym54MnhfaWd1X3NiX2lkLCBJR1VfU0VHX0FDQ0VTU19ERUYsCiAJCQkJc3RhdHVzX2lkeCwgSUdVX0lOVF9FTkFCTEUsIDEpOwotCX0gZWxzZSB7Ci0JCWNuaWNfYWNrX2JueDJ4X2ludChkZXYsIGNwLT5ibngyeF9pZ3Vfc2JfaWQsIFVTVE9STV9JRCwKLQkJCQkgICBzdGF0dXNfaWR4LCBJR1VfSU5UX0VOQUJMRSwgMSk7CisKKwkJYnJlYWs7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMKaW5kZXggMDU5YzFlZS4uZWMzNWQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYwpAQCAtMjcxMCw2ICsyNzEwLDggQEAKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKIAorCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIEZVTExfSU5JVF9ET05FKSkgewogCQllcnIgPSBjeGdiX3VwKGFkYXB0ZXIpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTM2NjEsNyArMzY2Myw2IEBACiAJCXBpLT54YWN0X2FkZHJfZmlsdCA9IC0xOwogCQlwaS0+cnhfb2ZmbG9hZCA9IFJYX0NTTzsKIAkJcGktPnBvcnRfaWQgPSBpOwotCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQluZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKIAogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBUU09fRkxBR1M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYwppbmRleCA1NjE2NmFlLi42YWFkNjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKQEAgLTIwNDAsNyArMjA0MCw3IEBACiB7CiAJaW50IGk7CiAKLQlCVUdfT04oYWRhcHRlci0+ZGVidWdmc19yb290ID09IE5VTEwpOworCUJVR19PTihJU19FUlJfT1JfTlVMTChhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpKTsKIAogCS8qCiAJICogRGVidWdmcyBzdXBwb3J0IGlzIGJlc3QgZWZmb3J0LgpAQCAtMjA2MSw3ICsyMDYxLDcgQEAKICAqLwogc3RhdGljIHZvaWQgY2xlYW51cF9kZWJ1Z2ZzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCUJVR19PTihhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QgPT0gTlVMTCk7CisJQlVHX09OKElTX0VSUl9PUl9OVUxMKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkpOwogCiAJLyoKIAkgKiBVbmxpa2Ugb3VyIHNpc3RlciByb3V0aW5lIGNsZWFudXBfcHJvYygpLCB3ZSBkb24ndCBuZWVkIHRvIHJlbW92ZQpAQCAtMjQ4OSwxNyArMjQ4OSw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAogCS8qCi0JICogVmV0IG91ciBtb2R1bGUgcGFyYW1ldGVycy4KLQkgKi8KLQlpZiAobXNpICE9IE1TSV9NU0lYICYmIG1zaSAhPSBNU0lfTVNJKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImJhZCBtb2R1bGUgcGFyYW1ldGVyIG1zaT0lZDsgbXVzdCBiZSAlZCIKLQkJCSIgKE1TSS1YIG9yIE1TSSkgb3IgJWQgKE1TSSlcbiIsIG1zaSwgTVNJX01TSVgsCi0JCQlNU0lfTVNJKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfb3V0OwotCX0KLQotCS8qCiAJICogUHJpbnQgb3VyIGRyaXZlciBiYW5uZXIgdGhlIGZpcnN0IHRpbWUgd2UncmUgY2FsbGVkIHRvIGluaXRpYWxpemUgYQogCSAqIGRldmljZS4KIAkgKi8KQEAgLTI3MTEsMTEgKzI3MDAsMTEgQEAKIAkvKgogCSAqIFNldCB1cCBvdXIgZGVidWdmcyBlbnRyaWVzLgogCSAqLwotCWlmIChjeGdiNHZmX2RlYnVnZnNfcm9vdCkgeworCWlmICghSVNfRVJSX09SX05VTEwoY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpKSB7CiAJCWFkYXB0ZXItPmRlYnVnZnNfcm9vdCA9CiAJCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIocGNpX25hbWUocGRldiksCiAJCQkJCSAgIGN4Z2I0dmZfZGVidWdmc19yb290KTsKLQkJaWYgKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCA9PSBOVUxMKQorCQlpZiAoSVNfRVJSX09SX05VTEwoYWRhcHRlci0+ZGVidWdmc19yb290KSkKIAkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMiCiAJCQkJICIgZGlyZWN0b3J5Iik7CiAJCWVsc2UKQEAgLTI3NzAsNyArMjc1OSw3IEBACiAJICovCiAKIGVycl9mcmVlX2RlYnVnZnM6Ci0JaWYgKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkgeworCWlmICghSVNfRVJSX09SX05VTEwoYWRhcHRlci0+ZGVidWdmc19yb290KSkgewogCQljbGVhbnVwX2RlYnVnZnMoYWRhcHRlcik7CiAJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpOwogCX0KQEAgLTI4MDIsNyArMjc5MSw2IEBACiBlcnJfZGlzYWJsZV9kZXZpY2U6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCi1lcnJfb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI4NDAsNyArMjgyOCw3IEBACiAJCS8qCiAJCSAqIFRlYXIgZG93biBvdXIgZGVidWdmcyBlbnRyaWVzLgogCQkgKi8KLQkJaWYgKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkgeworCQlpZiAoIUlTX0VSUl9PUl9OVUxMKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkpIHsKIAkJCWNsZWFudXBfZGVidWdmcyhhZGFwdGVyKTsKIAkJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpOwogCQl9CkBAIC0yODc0LDYgKzI4NjIsNDYgQEAKIH0KIAogLyoKKyAqICJTaHV0ZG93biIgcXVpZXNjZSB0aGUgZGV2aWNlLCBzdG9wcGluZyBJbmdyZXNzIFBhY2tldCBhbmQgSW50ZXJydXB0CisgKiBkZWxpdmVyeS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IGN4Z2I0dmZfcGNpX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCWludCBwaWR4OworCisJYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWFkYXB0ZXIpCisJCXJldHVybjsKKworCS8qCisJICogRGlzYWJsZSBhbGwgVmlydHVhbCBJbnRlcmZhY2VzLiAgVGhpcyB3aWxsIHNodXQgZG93biB0aGUKKwkgKiBkZWxpdmVyeSBvZiBhbGwgaW5ncmVzcyBwYWNrZXRzIGludG8gdGhlIGNoaXAgZm9yIHRoZXNlCisJICogVmlydHVhbCBJbnRlcmZhY2VzLgorCSAqLworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgcGlkeCkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaTsKKworCQlpZiAoIXRlc3RfYml0KHBpZHgsICZhZGFwdGVyLT5yZWdpc3RlcmVkX2RldmljZV9tYXApKQorCQkJY29udGludWU7CisKKwkJbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFtwaWR4XTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKworCQlwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCXQ0dmZfZW5hYmxlX3ZpKGFkYXB0ZXIsIHBpLT52aWlkLCBmYWxzZSwgZmFsc2UpOworCX0KKworCS8qCisJICogRnJlZSB1cCBhbGwgUXVldWVzIHdoaWNoIHdpbGwgcHJldmVudCBmdXJ0aGVyIERNQSBhbmQKKwkgKiBJbnRlcnJ1cHRzIGFsbG93aW5nIHZhcmlvdXMgaW50ZXJuYWwgcGF0aHdheXMgdG8gZHJhaW4uCisJICovCisJdDR2Zl9mcmVlX3NnZV9yZXNvdXJjZXMoYWRhcHRlcik7Cit9CisKKy8qCiAgKiBQQ0kgRGV2aWNlIHJlZ2lzdHJhdGlvbiBkYXRhIHN0cnVjdHVyZXMuCiAgKi8KICNkZWZpbmUgQ0hfREVWSUNFKGRldmlkLCBpZHgpIFwKQEAgLTI5MDYsNiArMjkzNCw3IEBACiAJLmlkX3RhYmxlCT0gY3hnYjR2Zl9wY2lfdGJsLAogCS5wcm9iZQkJPSBjeGdiNHZmX3BjaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGN4Z2I0dmZfcGNpX3JlbW92ZSksCisJLnNodXRkb3duCT0gX19kZXZleGl0X3AoY3hnYjR2Zl9wY2lfc2h1dGRvd24pLAogfTsKIAogLyoKQEAgLTI5MTUsMTQgKzI5NDQsMjUgQEAKIHsKIAlpbnQgcmV0OwogCisJLyoKKwkgKiBWZXQgb3VyIG1vZHVsZSBwYXJhbWV0ZXJzLgorCSAqLworCWlmIChtc2kgIT0gTVNJX01TSVggJiYgbXNpICE9IE1TSV9NU0kpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogYmFkIG1vZHVsZSBwYXJhbWV0ZXIgbXNpPSVkOyBtdXN0IGJlICVkIgorCQkgICAgICAgIiAoTVNJLVggb3IgTVNJKSBvciAlZCAoTVNJKVxuIiwKKwkJICAgICAgIG1zaSwgTVNJX01TSVgsIE1TSV9NU0kpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiBEZWJ1Z2ZzIHN1cHBvcnQgaXMgb3B0aW9uYWwsIGp1c3Qgd2FybiBpZiB0aGlzIGZhaWxzICovCiAJY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoS0JVSUxEX01PRE5BTUUsIE5VTEwpOwotCWlmICghY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpCisJaWYgKElTX0VSUl9PUl9OVUxMKGN4Z2I0dmZfZGVidWdmc19yb290KSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBLQlVJTERfTU9ETkFNRSAiOiBjb3VsZCBub3QgY3JlYXRlIgogCQkgICAgICAgIiBkZWJ1Z2ZzIGVudHJ5LCBjb250aW51aW5nXG4iKTsKIAogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmN4Z2I0dmZfZHJpdmVyKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCAmJiAhSVNfRVJSX09SX05VTEwoY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpKQogCQlkZWJ1Z2ZzX3JlbW92ZShjeGdiNHZmX2RlYnVnZnNfcm9vdCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9ody5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKaW5kZXggMGY1MWM4MC4uMTkyZGIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCWRlbGF5X2lkeCA9IDA7CiAJbXMgPSBkZWxheVswXTsKIAotCWZvciAoaSA9IDA7IGkgPCA1MDA7IGkgKz0gbXMpIHsKKwlmb3IgKGkgPSAwOyBpIDwgRldfQ01EX01BWF9USU1FT1VUOyBpICs9IG1zKSB7CiAJCWlmIChzbGVlcF9vaykgewogCQkJbXMgPSBkZWxheVtkZWxheV9pZHhdOwogCQkJaWYgKGRlbGF5X2lkeCA8IEFSUkFZX1NJWkUoZGVsYXkpIC0gMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKaW5kZXggMmE2MjhkMS4uNzAxOGJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKQEAgLTEwMDgsNyArMTAwOCw3IEBACiAJaW50CQkJcmV0OwogCiAJLyogZnJlZSBhbmQgYmFpbCBpZiB3ZSBhcmUgc2h1dHRpbmcgZG93biAqLwotCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhuZGV2KSkpIHsKKwlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcobmRldikgfHwgIW5ldGlmX2NhcnJpZXJfb2sobmRldikpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCAxYjQ4YjY4Li44YjAwODRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTEwOTQsNyArMTA5NCw3IEBACiAJCQkJfQogCQkJfQogCQkJLyogQ2hhbmdlIGJ1ZmZlciBvd25lcnNoaXAgZm9yIHRoaXMgbGFzdCBmcmFtZSwgYmFjayB0byB0aGUgYWRhcHRlciAqLwotCQkJZm9yICg7IGxwLT5yeF9vbGQgIT0gZW50cnk7IGxwLT5yeF9vbGQgPSAoKytscC0+cnhfb2xkKSAmIGxwLT5yeFJpbmdNYXNrKSB7CisJCQlmb3IgKDsgbHAtPnJ4X29sZCAhPSBlbnRyeTsgbHAtPnJ4X29sZCA9IChscC0+cnhfb2xkICsgMSkgJiBscC0+cnhSaW5nTWFzaykgewogCQkJCXdyaXRlbChyZWFkbCgmbHAtPnJ4X3JpbmdbbHAtPnJ4X29sZF0uYmFzZSkgfCBSX09XTiwgJmxwLT5yeF9yaW5nW2xwLT5yeF9vbGRdLmJhc2UpOwogCQkJfQogCQkJd3JpdGVsKHJlYWRsKCZscC0+cnhfcmluZ1tlbnRyeV0uYmFzZSkgfCBSX09XTiwgJmxwLT5yeF9yaW5nW2VudHJ5XS5iYXNlKTsKQEAgLTExMDMsNyArMTEwMyw3IEBACiAJCS8qCiAJCSAgICoqIFVwZGF0ZSBlbnRyeSBpbmZvcm1hdGlvbgogCQkgKi8KLQkJbHAtPnJ4X25ldyA9ICgrK2xwLT5yeF9uZXcpICYgbHAtPnJ4UmluZ01hc2s7CisJCWxwLT5yeF9uZXcgPSAobHAtPnJ4X25ldyArIDEpICYgbHAtPnJ4UmluZ01hc2s7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTQ4LDcgKzExNDgsNyBAQAogCQl9CiAKIAkJLyogVXBkYXRlIGFsbCB0aGUgcG9pbnRlcnMgKi8KLQkJbHAtPnR4X29sZCA9ICgrK2xwLT50eF9vbGQpICYgbHAtPnR4UmluZ01hc2s7CisJCWxwLT50eF9vbGQgPSAobHAtPnR4X29sZCArIDEpICYgbHAtPnR4UmluZ01hc2s7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbDJrLmMgYi9kcml2ZXJzL25ldC9kbDJrLmMKaW5kZXggZTFhODIxNi4uYzA1ZGI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGwyay5jCisrKyBiL2RyaXZlcnMvbmV0L2RsMmsuYwpAQCAtMTc1Myw4ICsxNzUzLDYgQEAKIAogCS8qIEZyZWUgYWxsIHRoZSBza2J1ZmZzIGluIHRoZSBxdWV1ZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKLQkJbnAtPnJ4X3JpbmdbaV0uc3RhdHVzID0gMDsKLQkJbnAtPnJ4X3JpbmdbaV0uZnJhZ2luZm8gPSAwOwogCQlza2IgPSBucC0+cnhfc2tidWZmW2ldOwogCQlpZiAoc2tiKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5wZGV2LApAQCAtMTc2Myw2ICsxNzYxLDggQEAKIAkJCWRldl9rZnJlZV9za2IgKHNrYik7CiAJCQlucC0+cnhfc2tidWZmW2ldID0gTlVMTDsKIAkJfQorCQlucC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOworCQlucC0+cnhfcmluZ1tpXS5mcmFnaW5mbyA9IDA7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewogCQlza2IgPSBucC0+dHhfc2tidWZmW2ldOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCAyZDRjNGZjLi40NjFkZDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtODAyLDEwICs4MDIsNyBAQAogCS8qIENoZWNrc3VtIG1vZGUgKi8KIAlkbTkwMDBfc2V0X3J4X2NzdW1fdW5sb2NrZWQoZGV2LCBkYi0+cnhfY3N1bSk7CiAKLQkvKiBHUElPMCBvbiBwcmUtYWN0aXZhdGUgUEhZICovCi0JaW93KGRiLCBETTkwMDBfR1BSLCAwKTsJLyogUkVHXzFGIGJpdDAgYWN0aXZhdGUgcGh5eGNlciAqLwogCWlvdyhkYiwgRE05MDAwX0dQQ1IsIEdQQ1JfR0VQX0NOVEwpOwkvKiBMZXQgR1BJTzAgb3V0cHV0ICovCi0JaW93KGRiLCBETTkwMDBfR1BSLCAwKTsJLyogRW5hYmxlIFBIWSAqLwogCiAJbmNyID0gKGRiLT5mbGFncyAmIERNOTAwMF9QTEFURl9FWFRfUEhZKSA/IE5DUl9FWFRfUEhZIDogMDsKIApAQCAtODUyLDggKzg0OSw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFNhdmUgcHJldmlvdXMgcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXJlZ19zYXZlID0gcmVhZGIoZGItPmlvX2FkZHIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOworCXJlZ19zYXZlID0gcmVhZGIoZGItPmlvX2FkZHIpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCWRtOTAwMF9yZXNldChkYik7CkBAIC0xMTk0LDYgKzExOTEsMTAgQEAKIAlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGRtOTAwMF9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtPm5hbWUsIGRldikpCiAJCXJldHVybiAtRUFHQUlOOwogCisJLyogR1BJTzAgb24gcHJlLWFjdGl2YXRlIFBIWSwgUmVnIDFGIGlzIG5vdCBzZXQgYnkgcmVzZXQgKi8KKwlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBSRUdfMUYgYml0MCBhY3RpdmF0ZSBwaHl4Y2VyICovCisJbWRlbGF5KDEpOyAvKiBkZWxheSBuZWVkcyBieSBETTkwMDBCICovCisKIAkvKiBJbml0aWFsaXplIERNOTAwMCBib2FyZCAqLwogCWRtOTAwMF9yZXNldChkYik7CiAJZG05MDAwX2luaXRfZG05MDAwKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbmV0LmMgYi9kcml2ZXJzL25ldC9kbmV0LmMKaW5kZXggOWQ4YTIwYi4uODMxOGVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2RuZXQuYwpAQCAtMzM3LDggKzMzNyw2IEBACiAJZm9yIChpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgaSsrKQogCQlicC0+bWlpX2J1cy0+aXJxW2ldID0gUEhZX1BPTEw7CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShicC0+ZGV2LCBicC0+bWlpX2J1cyk7Ci0KIAlpZiAobWRpb2J1c19yZWdpc3RlcihicC0+bWlpX2J1cykpIHsKIAkJZXJyID0gLUVOWElPOwogCQlnb3RvIGVycl9vdXRfZnJlZV9tZGlvX2lycTsKQEAgLTg2Myw2ICs4NjEsNyBAQAogCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlicC0+ZGV2ID0gZGV2OwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmJwLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCmluZGV4IGFlZDIyM2IuLjc1MDFkOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAJY2FzZSBNODhFMTAwMF9JX1BIWV9JRDoKIAljYXNlIE04OEUxMDExX0lfUEhZX0lEOgogCWNhc2UgTTg4RTExMTFfSV9QSFlfSUQ6CisJY2FzZSBNODhFMTExOF9FX1BIWV9JRDoKIAkJaHctPnBoeV90eXBlID0gZTEwMDBfcGh5X204ODsKIAkJYnJlYWs7CiAJY2FzZSBJR1AwMUUxMDAwX0lfUEhZX0lEOgpAQCAtMzIyMiw3ICszMjIzLDggQEAKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF9jZTQxMDA6CiAJCWlmICgoaHctPnBoeV9pZCA9PSBSVEw4MjExQl9QSFlfSUQpIHx8Ci0JCSAgICAoaHctPnBoeV9pZCA9PSBSVEw4MjAxTl9QSFlfSUQpKQorCQkgICAgKGh3LT5waHlfaWQgPT0gUlRMODIwMU5fUEhZX0lEKSB8fAorCQkgICAgKGh3LT5waHlfaWQgPT0gTTg4RTExMThfRV9QSFlfSUQpKQogCQkJbWF0Y2ggPSB0cnVlOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTQxOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKaW5kZXggMTk2ZWVkYS4uYzcwYjIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCkBAIC0yOTE3LDYgKzI5MTcsNyBAQAogI2RlZmluZSBNODhFMTAwMF8xNF9QSFlfSUQgTTg4RTEwMDBfRV9QSFlfSUQKICNkZWZpbmUgTTg4RTEwMTFfSV9SRVZfNCAgIDB4MDQKICNkZWZpbmUgTTg4RTExMTFfSV9QSFlfSUQgIDB4MDE0MTBDQzAKKyNkZWZpbmUgTTg4RTExMThfRV9QSFlfSUQgIDB4MDE0MTBFNDAKICNkZWZpbmUgTDFMWFQ5NzFBX1BIWV9JRCAgIDB4MDAxMzc4RTAKIAogI2RlZmluZSBSVEw4MjExQl9QSFlfSUQgICAgMHgwMDFDQzkxMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmgKaW5kZXggNTVjMTcxMS4uMzNlN2M0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaApAQCAtNDIsNyArNDIsOCBAQAogI2RlZmluZSBHQkVfQ09ORklHX1JBTV9CQVNFIFwKIAkoKHVuc2lnbmVkIGludCkoQ09ORklHX1JBTV9CQVNFICsgR0JFX0NPTkZJR19PRkZTRVQpKQogCi0jZGVmaW5lIEdCRV9DT05GSUdfQkFTRV9WSVJUICAgIHBoeXNfdG9fdmlydChHQkVfQ09ORklHX1JBTV9CQVNFKQorI2RlZmluZSBHQkVfQ09ORklHX0JBU0VfVklSVCBcCisJKCh2b2lkIF9faW9tZW0gKilwaHlzX3RvX3ZpcnQoR0JFX0NPTkZJR19SQU1fQkFTRSkpCiAKICNkZWZpbmUgR0JFX0NPTkZJR19GTEFTSF9XUklURShiYXNlLCBvZmZzZXQsIGNvdW50LCBkYXRhKSBcCiAJKGlvd3JpdGUxNl9yZXAoYmFzZSArIG9mZnNldCwgZGF0YSwgY291bnQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDFjMThmMjYuLjJlNTAyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTkzNyw2ICs5MzcsOSBAQAogCXUxNiBwaHlfc3RhdHVzLCBwaHlfMTAwMHRfc3RhdHVzLCBwaHlfZXh0X3N0YXR1czsKIAl1MTYgcGNpX3N0YXR1czsKIAorCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCWUxZV9ycGh5KGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CiAJZTFlX3JwaHkoaHcsIFBIWV8xMDAwVF9TVEFUVVMsICZwaHlfMTAwMHRfc3RhdHVzKTsKIAllMWVfcnBoeShodywgUEhZX0VYVF9TVEFUVVMsICZwaHlfZXh0X3N0YXR1cyk7CkBAIC0xNTA2LDYgKzE1MDksOSBAQAogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJCXN0cnVjdCBlMTAwMF9hZGFwdGVyLCBkb3duc2hpZnRfdGFzayk7CiAKKwlpZiAodGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKIAllMTAwMGVfZ2lnX2Rvd25zaGlmdF93b3JrYXJvdW5kX2ljaDhsYW4oJmFkYXB0ZXItPmh3KTsKIH0KIApAQCAtMzMzOCw2ICszMzQ0LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGUxMDAwZV9mbHVzaF9kZXNjcmlwdG9ycyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfRE1BX0JVUlNUKSkKKwkJcmV0dXJuOworCisJLyogZmx1c2ggcGVuZGluZyBkZXNjcmlwdG9yIHdyaXRlYmFja3MgdG8gbWVtb3J5ICovCisJZXczMihUSURWLCBhZGFwdGVyLT50eF9pbnRfZGVsYXkgfCBFMTAwMF9USURWX0ZQRCk7CisJZXczMihSRFRSLCBhZGFwdGVyLT5yeF9pbnRfZGVsYXkgfCBFMTAwMF9SRFRSX0ZQRCk7CisKKwkvKiBleGVjdXRlIHRoZSB3cml0ZXMgaW1tZWRpYXRlbHkgKi8KKwllMWVfZmx1c2goKTsKK30KKwogdm9pZCBlMTAwMGVfZG93bihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwpAQCAtMzM3Nyw2ICszMzk4LDkgQEAKIAogCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShhZGFwdGVyLT5wZGV2KSkKIAkJZTEwMDBlX3Jlc2V0KGFkYXB0ZXIpOworCisJZTEwMDBlX2ZsdXNoX2Rlc2NyaXB0b3JzKGFkYXB0ZXIpOworCiAJZTEwMDBfY2xlYW5fdHhfcmluZyhhZGFwdGVyKTsKIAllMTAwMF9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIpOwogCkBAIC0zNzY1LDYgKzM3ODksMTAgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciwgdXBkYXRlX3BoeV90YXNrKTsKKworCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCWUxMDAwX2dldF9waHlfaW5mbygmYWRhcHRlci0+aHcpOwogfQogCkBAIC0zNzc1LDYgKzM4MDMsMTAgQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3VwZGF0ZV9waHlfaW5mbyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKikgZGF0YTsKKworCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnVwZGF0ZV9waHlfdGFzayk7CiB9CiAKQEAgLTQxNDksNiArNDE4MSw5IEBACiAJdTMyIGxpbmssIHRjdGw7CiAJaW50IHR4X3BlbmRpbmcgPSAwOwogCisJaWYgKHRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOworCiAJbGluayA9IGUxMDAwZV9oYXNfbGluayhhZGFwdGVyKTsKIAlpZiAoKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgJiYgbGluaykgewogCQkvKiBDYW5jZWwgc2NoZWR1bGVkIHN1c3BlbmQgcmVxdWVzdHMuICovCkBAIC00MzA5LDcgKzQzNDQsNiBAQAogCQkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCiAJCQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgogCQkJICovCi0JCQlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7CiAJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIAkJCS8qIHJldHVybiBpbW1lZGlhdGVseSBzaW5jZSByZXNldCBpcyBpbW1pbmVudCAqLwogCQkJcmV0dXJuOwpAQCAtNDMzOCwxOSArNDM3MiwxMiBAQAogCWVsc2UKIAkJZXczMihJQ1MsIEUxMDAwX0lDU19SWERNVDApOwogCisJLyogZmx1c2ggcGVuZGluZyBkZXNjcmlwdG9ycyB0byBtZW1vcnkgYmVmb3JlIGRldGVjdGluZyBUeCBoYW5nICovCisJZTEwMDBlX2ZsdXNoX2Rlc2NyaXB0b3JzKGFkYXB0ZXIpOworCiAJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciBldmVyeSB3YXRjaGRvZyBwZXJpb2QgKi8KIAlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IDE7CiAKLQkvKiBmbHVzaCBwYXJ0aWFsIGRlc2NyaXB0b3JzIHRvIG1lbW9yeSBiZWZvcmUgZGV0ZWN0aW5nIFR4IGhhbmcgKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfRE1BX0JVUlNUKSB7Ci0JCWV3MzIoVElEViwgYWRhcHRlci0+dHhfaW50X2RlbGF5IHwgRTEwMDBfVElEVl9GUEQpOwotCQlldzMyKFJEVFIsIGFkYXB0ZXItPnJ4X2ludF9kZWxheSB8IEUxMDAwX1JEVFJfRlBEKTsKLQkJLyoKLQkJICogbm8gbmVlZCB0byBmbHVzaCB0aGUgd3JpdGVzIGJlY2F1c2UgdGhlIHRpbWVvdXQgY29kZSBkb2VzCi0JCSAqIGFuIGVyMzIgZmlyc3QgdGhpbmcKLQkJICovCi0JfQotCiAJLyoKIAkgKiBXaXRoIDgyNTcxIGNvbnRyb2xsZXJzLCBMQUEgbWF5IGJlIG92ZXJ3cml0dGVuIGR1ZSB0byBjb250cm9sbGVyCiAJICogcmVzZXQgZnJvbSB0aGUgb3RoZXIgcG9ydC4gU2V0IHRoZSBhcHByb3ByaWF0ZSBMQUEgaW4gUkFSWzBdCkBAIC00ODg4LDYgKzQ5MTUsMTAgQEAKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcjsKIAlhZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlMTAwMF9hZGFwdGVyLCByZXNldF90YXNrKTsKIAorCS8qIGRvbid0IHJ1biB0aGUgdGFzayBpZiBhbHJlYWR5IGRvd24gKi8KKwlpZiAodGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKIAlpZiAoISgoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX1JYX05FRURTX1JFU1RBUlQpICYmCiAJICAgICAgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19SWF9SRVNUQVJUX05PVykpKSB7CiAJCWUxMDAwZV9kdW1wKGFkYXB0ZXIpOwpAQCAtNTkzNiw3ICs1OTY3LDggQEAKIAkJLyogQVBNRSBiaXQgaW4gRUVQUk9NIGlzIG1hcHBlZCB0byBXVUMuQVBNRSAqLwogCQllZXByb21fZGF0YSA9IGVyMzIoV1VDKTsKIAkJZWVwcm9tX2FwbWVfbWFzayA9IEUxMDAwX1dVQ19BUE1FOwotCQlpZiAoZWVwcm9tX2RhdGEgJiBFMTAwMF9XVUNfUEhZX1dBS0UpCisJCWlmICgoaHctPm1hYy50eXBlID4gZTEwMDBfaWNoMTBsYW4pICYmCisJCSAgICAoZWVwcm9tX2RhdGEgJiBFMTAwMF9XVUNfUEhZX1dBS0UpKQogCQkJYWRhcHRlci0+ZmxhZ3MyIHw9IEZMQUcyX0hBU19QSFlfV0FLRVVQOwogCX0gZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0FQTUVfSU5fQ1RSTDMpIHsKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19BUE1FX0NIRUNLX1BPUlRfQiAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKaW5kZXggMTEyYzVhYS4uOTA3YjA1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYworKysgYi9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCkBAIC04MTIsNyArODEyLDcgQEAKIAlpZiAobmV0aWZfbXNnX2h3KHByaXYpKQogCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiByZWFkaW5nIFRTViBhdCBhZGRyOjB4JTA0eFxuIiwKIAkJCSBlbmRwdHIgKyAxKTsKLQllbmMyOGo2MF9tZW1fcmVhZChwcml2LCBlbmRwdHIgKyAxLCBzaXplb2YodHN2KSwgdHN2KTsKKwllbmMyOGo2MF9tZW1fcmVhZChwcml2LCBlbmRwdHIgKyAxLCBUU1ZfU0laRSwgdHN2KTsKIH0KIAogc3RhdGljIHZvaWQgZW5jMjhqNjBfZHVtcF90c3Yoc3RydWN0IGVuYzI4ajYwX25ldCAqcHJpdiwgY29uc3QgY2hhciAqbXNnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjLmMgYi9kcml2ZXJzL25ldC9mZWMuYwppbmRleCAyYTcxMzczLi5jZDAyODJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWMuYworKysgYi9kcml2ZXJzL25ldC9mZWMuYwpAQCAtNzQsNyArNzQsOCBAQAogCX0sIHsKIAkJLm5hbWUgPSAiaW14MjgtZmVjIiwKIAkJLmRyaXZlcl9kYXRhID0gRkVDX1FVSVJLX0VORVRfTUFDIHwgRkVDX1FVSVJLX1NXQVBfRlJBTUUsCi0JfQorCX0sCisJeyB9CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBtYWNhZGRyW0VUSF9BTEVOXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggYWYwOTI5Ni4uOWMwYjFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTU2NDUsNiArNTY0NSw4IEBACiAJCWdvdG8gb3V0X2Vycm9yOwogCX0KIAorCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKIAlkZXZfaW5mbygmcGNpX2Rldi0+ZGV2LCAiaWZuYW1lICVzLCBQSFkgT1VJIDB4JXggQCAlZCwgYWRkciAlcE1cbiIsCiAJCSBkZXYtPm5hbWUsIG5wLT5waHlfb3VpLCBucC0+cGh5YWRkciwgZGV2LT5kZXZfYWRkcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL3ZmLmMgYi9kcml2ZXJzL25ldC9pZ2J2Zi92Zi5jCmluZGV4IDc0NDg2YTguLmFmMzgyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYnZmL3ZmLmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvdmYuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAgKiAgVGhlIHBhcmFtZXRlciByYXJfY291bnQgd2lsbCB1c3VhbGx5IGJlIGh3LT5tYWMucmFyX2VudHJ5X2NvdW50CiAgKiAgdW5sZXNzIHRoZXJlIGFyZSB3b3JrYXJvdW5kcyB0aGF0IGNoYW5nZSB0aGlzLgogICoqLwotdm9pZCBlMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0X3ZmKHN0cnVjdCBlMTAwMF9odyAqaHcsCitzdGF0aWMgdm9pZCBlMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0X3ZmKHN0cnVjdCBlMTAwMF9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHJhcl91c2VkX2NvdW50LCB1MzIgcmFyX2NvdW50KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwppbmRleCBkNWVkZTJkLi5lYmJkYTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwpAQCAtMTM3MCw2ICsxMzcwLDkgQEAKIAkJaHdfZGJnKGh3LCAiIE5ldyBNQUMgQWRkciA9JXBNXG4iLCBody0+bWFjLmFkZHIpOwogCiAJCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgMCwgSVhHQkVfUkFIX0FWKTsKKworCQkvKiAgY2xlYXIgVk1EcSBwb29sL3F1ZXVlIHNlbGVjdGlvbiBmb3IgUkFSIDAgKi8KKwkJaHctPm1hYy5vcHMuY2xlYXJfdm1kcShodywgMCwgSVhHQkVfQ0xFQVJfVk1EUV9BTEwpOwogCX0KIAlody0+YWRkcl9jdHJsLm92ZXJmbG93X3Byb21pc2MgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKaW5kZXggNjM0MmQ0OC4uYzU0YTg4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtMTU5LDEzICsxNTksMTMgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXVuc2lnbmVkIGludCBpLCBqLCBkbWFjb3VudDsKIAl1bnNpZ25lZCBpbnQgbGVuOwotCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnVmZmxlbiA9IDQwOTY7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBidWZmbGVuID0gSVhHQkVfRkNCVUZGX01JTjsKIAl1bnNpZ25lZCBpbnQgZmlyc3RvZmYgPSAwOwogCXVuc2lnbmVkIGludCBsYXN0c2l6ZTsKIAl1bnNpZ25lZCBpbnQgdGhpc29mZiA9IDA7CiAJdW5zaWduZWQgaW50IHRoaXNsZW4gPSAwOwogCXUzMiBmY2J1ZmYsIGZjZG1hcncsIGZjZmx0cnc7Ci0JZG1hX2FkZHJfdCBhZGRyOworCWRtYV9hZGRyX3QgYWRkciA9IDA7CiAKIAlpZiAoIW5ldGRldiB8fCAhc2dsKQogCQlyZXR1cm4gMDsKQEAgLTI1NCw2ICsyNTQsMjQgQEAKIAkvKiBvbmx5IHRoZSBsYXN0IGJ1ZmZlciBtYXkgaGF2ZSBub24tZnVsbCBidWZmbGVuICovCiAJbGFzdHNpemUgPSB0aGlzb2ZmICsgdGhpc2xlbjsKIAorCS8qCisJICogbGFzdHNpemUgY2FuIG5vdCBiZSBidWZmZXIgbGVuLgorCSAqIElmIGl0IGlzIHRoZW4gYWRkaW5nIGFub3RoZXIgYnVmZmVyIHdpdGggbGFzdHNpemUgPSAxLgorCSAqLworCWlmIChsYXN0c2l6ZSA9PSBidWZmbGVuKSB7CisJCWlmIChqID49IElYR0JFX0JVRkZDTlRfTUFYKSB7CisJCQllX2VycihkcnYsICJ4aWQ9JXg6JWQsJWQsJWQ6YWRkcj0lbGx4ICIKKwkJCQkibm90IGVub3VnaCB1c2VyIGJ1ZmZlcnMuIFdlIG5lZWQgYW4gZXh0cmEgIgorCQkJCSJidWZmZXIgYmVjYXVzZSBsYXN0c2l6ZSBpcyBidWZmbGVuLlxuIiwKKwkJCQl4aWQsIGksIGosIGRtYWNvdW50LCAodTY0KWFkZHIpOworCQkJZ290byBvdXRfbm9kZHBfZnJlZTsKKwkJfQorCisJCWRkcC0+dWRsW2pdID0gKHU2NCkoZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlcl9kbWEpOworCQlqKys7CisJCWxhc3RzaXplID0gMTsKKwl9CisKIAlmY2J1ZmYgPSAoSVhHQkVfRkNCVUZGXzRLQiA8PCBJWEdCRV9GQ0JVRkZfQlVGRlNJWkVfU0hJRlQpOwogCWZjYnVmZiB8PSAoKGogJiAweGZmKSA8PCBJWEdCRV9GQ0JVRkZfQlVGRkNOVF9TSElGVCk7CiAJZmNidWZmIHw9IChmaXJzdG9mZiA8PCBJWEdCRV9GQ0JVRkZfT0ZGU0VUX1NISUZUKTsKQEAgLTUzMiw2ICs1NTAsMjQgQEAKIAkJCWVfZXJyKGRydiwgImZhaWxlZCB0byBhbGxvY2F0ZWQgRkNvRSBERFAgcG9vbFxuIik7CiAKIAkJc3Bpbl9sb2NrX2luaXQoJmZjb2UtPmxvY2spOworCisJCS8qIEV4dHJhIGJ1ZmZlciB0byBiZSBzaGFyZWQgYnkgYWxsIEREUHMgZm9yIEhXIHdvcmsgYXJvdW5kICovCisJCWZjb2UtPmV4dHJhX2RkcF9idWZmZXIgPSBrbWFsbG9jKElYR0JFX0ZDQlVGRl9NSU4sIEdGUF9BVE9NSUMpOworCQlpZiAoZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlciA9PSBOVUxMKSB7CisJCQllX2VycihkcnYsICJmYWlsZWQgdG8gYWxsb2NhdGVkIGV4dHJhIEREUCBidWZmZXJcbiIpOworCQkJZ290byBvdXRfZXh0cmFfZGRwX2J1ZmZlcl9hbGxvYzsKKwkJfQorCisJCWZjb2UtPmV4dHJhX2RkcF9idWZmZXJfZG1hID0KKwkJCWRtYV9tYXBfc2luZ2xlKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJICAgICAgIGZjb2UtPmV4dHJhX2RkcF9idWZmZXIsCisJCQkJICAgICAgIElYR0JFX0ZDQlVGRl9NSU4sCisJCQkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSAgICAgIGZjb2UtPmV4dHJhX2RkcF9idWZmZXJfZG1hKSkgeworCQkJZV9lcnIoZHJ2LCAiZmFpbGVkIHRvIG1hcCBleHRyYSBERFAgYnVmZmVyXG4iKTsKKwkJCWdvdG8gb3V0X2V4dHJhX2RkcF9idWZmZXJfZG1hOworCQl9CiAJfQogCiAJLyogRW5hYmxlIEwyIGV0aCB0eXBlIGZpbHRlciBmb3IgRkNvRSAqLwpAQCAtNTgxLDYgKzYxNywxNCBAQAogCQl9CiAJfQogI2VuZGlmCisKKwlyZXR1cm47CisKK291dF9leHRyYV9kZHBfYnVmZmVyX2RtYToKKwlrZnJlZShmY29lLT5leHRyYV9kZHBfYnVmZmVyKTsKK291dF9leHRyYV9kZHBfYnVmZmVyX2FsbG9jOgorCXBjaV9wb29sX2Rlc3Ryb3koZmNvZS0+cG9vbCk7CisJZmNvZS0+cG9vbCA9IE5VTEw7CiB9CiAKIC8qKgpAQCAtNjAwLDYgKzY0NCwxMSBAQAogCWlmIChmY29lLT5wb29sKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9GQ09FX0REUF9NQVg7IGkrKykKIAkJCWl4Z2JlX2Zjb2VfZGRwX3B1dChhZGFwdGVyLT5uZXRkZXYsIGkpOworCQlkbWFfdW5tYXBfc2luZ2xlKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJIGZjb2UtPmV4dHJhX2RkcF9idWZmZXJfZG1hLAorCQkJCSBJWEdCRV9GQ0JVRkZfTUlOLAorCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQlrZnJlZShmY29lLT5leHRyYV9kZHBfYnVmZmVyKTsKIAkJcGNpX3Bvb2xfZGVzdHJveShmY29lLT5wb29sKTsKIAkJZmNvZS0+cG9vbCA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5oCmluZGV4IDRiYzJjNTUuLjY1Y2M4ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmgKQEAgLTcwLDYgKzcwLDggQEAKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IHBjaV9wb29sICpwb29sOwogCXN0cnVjdCBpeGdiZV9mY29lX2RkcCBkZHBbSVhHQkVfRkNPRV9ERFBfTUFYXTsKKwl1bnNpZ25lZCBjaGFyICpleHRyYV9kZHBfYnVmZmVyOworCWRtYV9hZGRyX3QgZXh0cmFfZGRwX2J1ZmZlcl9kbWE7CiB9OwogCiAjZW5kaWYgLyogX0lYR0JFX0ZDT0VfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDYwMjA3OGIuLjMwZjljY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl9zdHJpbmdbXSA9CiAJCQkgICAgICAiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjMuMC4xMi1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjMuMi45LWsyIgogY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY2hhciBpeGdiZV9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCkBAIC0zMTc2LDkgKzMxNzYsMTYgQEAKIAl1MzIgbWhhZGQsIGhscmVnMDsKIAogCS8qIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBwYWNrZXQgc3BsaXQgbW9kZSBvciBub3QgKi8KKwkvKiBPbiBieSBkZWZhdWx0ICovCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOworCiAJLyogRG8gbm90IHVzZSBwYWNrZXQgc3BsaXQgaWYgd2UncmUgaW4gU1ItSU9WIE1vZGUgKi8KLQlpZiAoIWFkYXB0ZXItPm51bV92ZnMpCi0JCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKwlpZiAoYWRhcHRlci0+bnVtX3ZmcykKKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKworCS8qIERpc2FibGUgcGFja2V0IHNwbGl0IGR1ZSB0byA4MjU5OSBlcnJhdHVtICM0NSAqLworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CiAKIAkvKiBTZXQgdGhlIFJYIGJ1ZmZlciBsZW5ndGggYWNjb3JkaW5nIHRvIHRoZSBtb2RlICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CkBAIC0zNzIxLDcgKzM3MjgsOCBAQAogCQkJICogV2UgbmVlZCB0byB0cnkgYW5kIGZvcmNlIGFuIGF1dG9uZWdvdGlhdGlvbgogCQkJICogc2Vzc2lvbiwgdGhlbiBicmluZyB1cCBsaW5rLgogCQkJICovCi0JCQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOworCQkJaWYgKGh3LT5tYWMub3BzLnNldHVwX3NmcCkKKwkJCQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOwogCQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spKQogCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CiAJCX0gZWxzZSB7CkBAIC00ODYzLDE2ICs0ODcxLDEzIEBACiB7CiAJaW50IHFfaWR4LCBudW1fcV92ZWN0b3JzOwogCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3I7Ci0JaW50IG5hcGlfdmVjdG9yczsKIAlpbnQgKCpwb2xsKShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KTsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CiAJCW51bV9xX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKLQkJbmFwaV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKIAkJcG9sbCA9ICZpeGdiZV9jbGVhbl9yeHR4X21hbnk7CiAJfSBlbHNlIHsKIAkJbnVtX3FfdmVjdG9ycyA9IDE7Ci0JCW5hcGlfdmVjdG9ycyA9IDE7CiAJCXBvbGwgPSAmaXhnYmVfcG9sbDsKIAl9CiAKQEAgLTU5NjQsNyArNTk2OSw4IEBACiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGFkYXB0ZXItPm5ldGRldik7CiAJCXJldHVybjsKIAl9Ci0JaHctPm1hYy5vcHMuc2V0dXBfc2ZwKGh3KTsKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfc2ZwKQorCQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOwogCiAJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spKQogCQkvKiBUaGlzIHdpbGwgYWxzbyB3b3JrIGZvciBEQSBUd2luYXggY29ubmVjdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jCmluZGV4IDQ3YjE1NzMuLjE4N2IzYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwpAQCAtMTEwLDEyICsxMTAsMTAgQEAKIAlyZXR1cm4gYWRhcHRlci0+aHcubWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIHZpZCwgdmYsIChib29sKWFkZCk7CiB9CiAKLQogc3RhdGljIHZvaWQgaXhnYmVfc2V0X3Ztb2xyKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2ZiwgYm9vbCBhdXBlKQogewogCXUzMiB2bW9sciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTU9MUih2ZikpOwogCXZtb2xyIHw9IChJWEdCRV9WTU9MUl9ST01QRSB8Ci0JCSAgSVhHQkVfVk1PTFJfUk9QRSB8CiAJCSAgSVhHQkVfVk1PTFJfQkFNKTsKIAlpZiAoYXVwZSkKIAkJdm1vbHIgfD0gSVhHQkVfVk1PTFJfQVVQRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYwppbmRleCAzYTg5MjM5Li5mMjUxOGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jCkBAIC0xMzMsMTcgKzEzMywxNyBAQAogCX0KIAogCWN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTCk7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMLCAoY3RybCB8IElYR0JFX0NUUkxfUlNUKSk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMLCAoY3RybCB8IHJlc2V0X2JpdCkpOwogCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKIAogCS8qIFBvbGwgZm9yIHJlc2V0IGJpdCB0byBzZWxmLWNsZWFyIGluZGljYXRpbmcgcmVzZXQgaXMgY29tcGxldGUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQl1ZGVsYXkoMSk7CiAJCWN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTCk7Ci0JCWlmICghKGN0cmwgJiBJWEdCRV9DVFJMX1JTVCkpCisJCWlmICghKGN0cmwgJiByZXNldF9iaXQpKQogCQkJYnJlYWs7CiAJfQotCWlmIChjdHJsICYgSVhHQkVfQ1RSTF9SU1QpIHsKKwlpZiAoY3RybCAmIHJlc2V0X2JpdCkgewogCQlzdGF0dXMgPSBJWEdCRV9FUlJfUkVTRVRfRkFJTEVEOwogCQlod19kYmcoaHcsICJSZXNldCBwb2xsaW5nIGZhaWxlZCB0byBjb21wbGV0ZS5cbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCBmNjllNzNlLi43OWNjYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCiAJCWJwLT5taWlfYnVzLT5pcnFbaV0gPSBQSFlfUE9MTDsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGJwLT5kZXYsIGJwLT5taWlfYnVzKTsKKwlkZXZfc2V0X2RydmRhdGEoJmJwLT5kZXYtPmRldiwgYnAtPm1paV9idXMpOwogCiAJaWYgKG1kaW9idXNfcmVnaXN0ZXIoYnAtPm1paV9idXMpKQogCQlnb3RvIGVycl9vdXRfZnJlZV9tZGlvX2lycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKaW5kZXggNGZmZGMxOC4uMjc2NWEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKQEAgLTEyODYsNiArMTI4NiwyMSBAQAogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2NCkgfSwgLyogTVQyNjQ2OCBDb25uZWN0WCBFTiAxMEdpZ0UgUENJZSBnZW4yKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NDYpIH0sIC8qIE1UMjY0MzggQ29ubmVjdFggRU4gNDBHaWdFIFBDSWUgZ2VuMiA1R1QvcyAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2ZSkgfSwgLyogTVQyNjQ3OCBDb25uZWN0WDIgNDBHaWdFIFBDSWUgZ2VuMiAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwMikgfSwgLyogTVQyNTQwMCBGYW1pbHkgW0Nvbm5lY3RYLTIgVmlydHVhbCBGdW5jdGlvbl0gKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDMpIH0sIC8qIE1UMjc1MDAgRmFtaWx5IFtDb25uZWN0WC0zXSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwNCkgfSwgLyogTVQyNzUwMCBGYW1pbHkgW0Nvbm5lY3RYLTMgVmlydHVhbCBGdW5jdGlvbl0gKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDUpIH0sIC8qIE1UMjc1MTAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA2KSB9LCAvKiBNVDI3NTExIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwNykgfSwgLyogTVQyNzUyMCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDgpIH0sIC8qIE1UMjc1MjEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA5KSB9LCAvKiBNVDI3NTMwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwYSkgfSwgLyogTVQyNzUzMSBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGIpIH0sIC8qIE1UMjc1NDAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBjKSB9LCAvKiBNVDI3NTQxIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwZCkgfSwgLyogTVQyNzU1MCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGUpIH0sIC8qIE1UMjc1NTEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBmKSB9LCAvKiBNVDI3NTYwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAxMCkgfSwgLyogTVQyNzU2MSBGYW1pbHkgKi8KIAl7IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pdS5jIGIvZHJpdmVycy9uZXQvbml1LmMKaW5kZXggMjU0MTMyMS4uOWZiNTlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbml1LmMKQEAgLTQ0ODksNiArNDQ4OSw5IEBACiB7CiAJc3RydWN0IG5pdV9wYXJlbnQgKnBhcmVudCA9IG5wLT5wYXJlbnQ7CiAJaW50IGZpcnN0X3J4X2NoYW5uZWwsIGZpcnN0X3R4X2NoYW5uZWw7CisJaW50IG51bV9yeF9yaW5ncywgbnVtX3R4X3JpbmdzOworCXN0cnVjdCByeF9yaW5nX2luZm8gKnJ4X3JpbmdzOworCXN0cnVjdCB0eF9yaW5nX2luZm8gKnR4X3JpbmdzOwogCWludCBpLCBwb3J0LCBlcnI7CiAKIAlwb3J0ID0gbnAtPnBvcnQ7CkBAIC00NDk4LDE4ICs0NTAxLDIxIEBACiAJCWZpcnN0X3R4X2NoYW5uZWwgKz0gcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbaV07CiAJfQogCi0JbnAtPm51bV9yeF9yaW5ncyA9IHBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W3BvcnRdOwotCW5wLT5udW1fdHhfcmluZ3MgPSBwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKKwludW1fcnhfcmluZ3MgPSBwYXJlbnQtPnJ4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKKwludW1fdHhfcmluZ3MgPSBwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKIAotCW5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMobnAtPmRldiwgbnAtPm51bV9yeF9yaW5ncyk7Ci0JbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhucC0+ZGV2LCBucC0+bnVtX3R4X3JpbmdzKTsKLQotCW5wLT5yeF9yaW5ncyA9IGtjYWxsb2MobnAtPm51bV9yeF9yaW5ncywgc2l6ZW9mKHN0cnVjdCByeF9yaW5nX2luZm8pLAotCQkJICAgICAgIEdGUF9LRVJORUwpOworCXJ4X3JpbmdzID0ga2NhbGxvYyhudW1fcnhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgcnhfcmluZ19pbmZvKSwKKwkJCSAgIEdGUF9LRVJORUwpOwogCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFucC0+cnhfcmluZ3MpCisJaWYgKCFyeF9yaW5ncykKIAkJZ290byBvdXRfZXJyOwogCisJbnAtPm51bV9yeF9yaW5ncyA9IG51bV9yeF9yaW5nczsKKwlzbXBfd21iKCk7CisJbnAtPnJ4X3JpbmdzID0gcnhfcmluZ3M7CisKKwluZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKG5wLT5kZXYsIG51bV9yeF9yaW5ncyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPm51bV9yeF9yaW5nczsgaSsrKSB7CiAJCXN0cnVjdCByeF9yaW5nX2luZm8gKnJwID0gJm5wLT5yeF9yaW5nc1tpXTsKIApAQCAtNDUzOCwxMiArNDU0NCwxOCBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlucC0+dHhfcmluZ3MgPSBrY2FsbG9jKG5wLT5udW1fdHhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgdHhfcmluZ19pbmZvKSwKLQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwl0eF9yaW5ncyA9IGtjYWxsb2MobnVtX3R4X3JpbmdzLCBzaXplb2Yoc3RydWN0IHR4X3JpbmdfaW5mbyksCisJCQkgICBHRlBfS0VSTkVMKTsKIAllcnIgPSAtRU5PTUVNOwotCWlmICghbnAtPnR4X3JpbmdzKQorCWlmICghdHhfcmluZ3MpCiAJCWdvdG8gb3V0X2VycjsKIAorCW5wLT5udW1fdHhfcmluZ3MgPSBudW1fdHhfcmluZ3M7CisJc21wX3dtYigpOworCW5wLT50eF9yaW5ncyA9IHR4X3JpbmdzOworCisJbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhucC0+ZGV2LCBudW1fdHhfcmluZ3MpOworCiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fdHhfcmluZ3M7IGkrKykgewogCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCA9ICZucC0+dHhfcmluZ3NbaV07CiAKQEAgLTYyNDYsMTEgKzYyNTgsMTcgQEAKIHN0YXRpYyB2b2lkIG5pdV9nZXRfcnhfc3RhdHMoc3RydWN0IG5pdSAqbnApCiB7CiAJdW5zaWduZWQgbG9uZyBwa3RzLCBkcm9wcGVkLCBlcnJvcnMsIGJ5dGVzOworCXN0cnVjdCByeF9yaW5nX2luZm8gKnJ4X3JpbmdzOwogCWludCBpOwogCiAJcGt0cyA9IGRyb3BwZWQgPSBlcnJvcnMgPSBieXRlcyA9IDA7CisKKwlyeF9yaW5ncyA9IEFDQ0VTU19PTkNFKG5wLT5yeF9yaW5ncyk7CisJaWYgKCFyeF9yaW5ncykKKwkJZ290byBub19yaW5nczsKKwogCWZvciAoaSA9IDA7IGkgPCBucC0+bnVtX3J4X3JpbmdzOyBpKyspIHsKLQkJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnAgPSAmbnAtPnJ4X3JpbmdzW2ldOworCQlzdHJ1Y3QgcnhfcmluZ19pbmZvICpycCA9ICZyeF9yaW5nc1tpXTsKIAogCQluaXVfc3luY19yeF9kaXNjYXJkX3N0YXRzKG5wLCBycCwgMCk7CiAKQEAgLTYyNTksNiArNjI3Nyw4IEBACiAJCWRyb3BwZWQgKz0gcnAtPnJ4X2Ryb3BwZWQ7CiAJCWVycm9ycyArPSBycC0+cnhfZXJyb3JzOwogCX0KKworbm9fcmluZ3M6CiAJbnAtPmRldi0+c3RhdHMucnhfcGFja2V0cyA9IHBrdHM7CiAJbnAtPmRldi0+c3RhdHMucnhfYnl0ZXMgPSBieXRlczsKIAlucC0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkID0gZHJvcHBlZDsKQEAgLTYyNjgsMTYgKzYyODgsMjQgQEAKIHN0YXRpYyB2b2lkIG5pdV9nZXRfdHhfc3RhdHMoc3RydWN0IG5pdSAqbnApCiB7CiAJdW5zaWduZWQgbG9uZyBwa3RzLCBlcnJvcnMsIGJ5dGVzOworCXN0cnVjdCB0eF9yaW5nX2luZm8gKnR4X3JpbmdzOwogCWludCBpOwogCiAJcGt0cyA9IGVycm9ycyA9IGJ5dGVzID0gMDsKKworCXR4X3JpbmdzID0gQUNDRVNTX09OQ0UobnAtPnR4X3JpbmdzKTsKKwlpZiAoIXR4X3JpbmdzKQorCQlnb3RvIG5vX3JpbmdzOworCiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fdHhfcmluZ3M7IGkrKykgewotCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCA9ICZucC0+dHhfcmluZ3NbaV07CisJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJwID0gJnR4X3JpbmdzW2ldOwogCiAJCXBrdHMgKz0gcnAtPnR4X3BhY2tldHM7CiAJCWJ5dGVzICs9IHJwLT50eF9ieXRlczsKIAkJZXJyb3JzICs9IHJwLT50eF9lcnJvcnM7CiAJfQorCitub19yaW5nczoKIAlucC0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzID0gcGt0czsKIAlucC0+ZGV2LT5zdGF0cy50eF9ieXRlcyA9IGJ5dGVzOwogCW5wLT5kZXYtPnN0YXRzLnR4X2Vycm9ycyA9IGVycm9yczsKQEAgLTYyODcsOSArNjMxNSwxMCBAQAogewogCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCW5pdV9nZXRfcnhfc3RhdHMobnApOwotCW5pdV9nZXRfdHhfc3RhdHMobnApOwotCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQluaXVfZ2V0X3J4X3N0YXRzKG5wKTsKKwkJbml1X2dldF90eF9zdGF0cyhucCk7CisJfQogCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlLmggYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaAppbmRleCBhMGMyNmE5Li5lMWUzM2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaAorKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaApAQCAtNzMsNyArNzMsNyBAQAogCXN0cnVjdCBwY2hfZ2JlX3JlZ3NfbWFjX2FkciBtYWNfYWRyWzE2XTsKIAl1MzIgQUREUl9NQVNLOwogCXUzMiBNSUlNOwotCXUzMiByZXNlcnZlMjsKKwl1MzIgTUFDX0FERFJfTE9BRDsKIAl1MzIgUkdNSUlfU1Q7CiAJdTMyIFJHTUlJX0NUUkw7CiAJdTMyIHJlc2VydmUzWzNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKaW5kZXggZDczNTUzMC4uYjk5ZTkwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFBDSF9HQkVfU0hPUlRfUEtUCQk2NAogI2RlZmluZSBEU0NfSU5JVDE2CQkJMHhDMDAwCiAjZGVmaW5lIFBDSF9HQkVfRE1BX0FMSUdOCQkwCisjZGVmaW5lIFBDSF9HQkVfRE1BX1BBRERJTkcJCTIKICNkZWZpbmUgUENIX0dCRV9XQVRDSERPR19QRVJJT0QJCSgxICogSFopCS8qIHdhdGNoZG9nIHRpbWUgKi8KICNkZWZpbmUgUENIX0dCRV9DT1BZQlJFQUtfREVGQVVMVAkyNTYKICNkZWZpbmUgUENIX0dCRV9QQ0lfQkFSCQkJMQpAQCAtODgsNiArODksMTIgQEAKIHN0YXRpYyBpbnQgcGNoX2diZV9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGFkZHIsIGludCByZWcpOwogc3RhdGljIHZvaWQgcGNoX2diZV9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBhZGRyLCBpbnQgcmVnLAogCQkJICAgICAgIGludCBkYXRhKTsKKworaW5saW5lIHZvaWQgcGNoX2diZV9tYWNfbG9hZF9tYWNfYWRkcihzdHJ1Y3QgcGNoX2diZV9odyAqaHcpCit7CisJaW93cml0ZTMyKDB4MDEsICZody0+cmVnLT5NQUNfQUREUl9MT0FEKTsKK30KKwogLyoqCiAgKiBwY2hfZ2JlX21hY19yZWFkX21hY19hZGRyIC0gUmVhZCBNQUMgYWRkcmVzcwogICogQGh3OgkgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKQEAgLTUxOSw3ICs1MjYsOSBAQAogCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyLCByZXNldF90YXNrKTsKIAorCXJ0bmxfbG9jaygpOwogCXBjaF9nYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKKwlydG5sX3VubG9jaygpOwogfQogCiAvKioKQEAgLTUyOCwxNCArNTM3LDggQEAKICAqLwogdm9pZCBwY2hfZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCi0JcnRubF9sb2NrKCk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlwY2hfZ2JlX2Rvd24oYWRhcHRlcik7Ci0JCXBjaF9nYmVfdXAoYWRhcHRlcik7Ci0JfQotCXJ0bmxfdW5sb2NrKCk7CisJcGNoX2diZV9kb3duKGFkYXB0ZXIpOworCXBjaF9nYmVfdXAoYWRhcHRlcik7CiB9CiAKIC8qKgpAQCAtMTM2OSwxNiArMTM3MiwxMyBAQAogCXN0cnVjdCBwY2hfZ2JlX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJc3RydWN0IHBjaF9nYmVfcnhfZGVzYyAqcnhfZGVzYzsKIAl1MzIgbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgdG1wX3BhY2tldFtFVEhfSExFTl07CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IGNsZWFuZWRfY291bnQgPSAwOwogCWJvb2wgY2xlYW5lZCA9IGZhbHNlOwotCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5ld19za2I7CiAJdTggZG1hX3N0YXR1czsKIAl1MTYgZ2JlY19zdGF0dXM7CiAJdTMyIHRjcF9pcF9zdGF0dXM7Ci0JdTggc2tiX2NvcHlfZmxhZyA9IDA7Ci0JdTggc2tiX3BhZGRpbmdfZmxhZyA9IDA7CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKIApAQCAtMTQyMiw1NSArMTQyMiw3MCBAQAogCQkJcHJfZXJyKCJSZWNlaXZlIENSQyBFcnJvclxuIik7CiAJCX0gZWxzZSB7CiAJCQkvKiBnZXQgcmVjZWl2ZSBsZW5ndGggKi8KLQkJCS8qIGxlbmd0aCBjb252ZXJ0Wy0zXSwgcGFkZGluZ1stMl0gKi8KLQkJCWxlbmd0aCA9IChyeF9kZXNjLT5yeF93b3Jkc19lb2IpIC0gMyAtIDI7CisJCQkvKiBsZW5ndGggY29udmVydFstM10gKi8KKwkJCWxlbmd0aCA9IChyeF9kZXNjLT5yeF93b3Jkc19lb2IpIC0gMzsKIAogCQkJLyogRGVjaWRlIHRoZSBkYXRhIGNvbnZlcnNpb24gbWV0aG9kICovCiAJCQlpZiAoIWFkYXB0ZXItPnJ4X2NzdW0pIHsKIAkJCQkvKiBbSGVhZGVyOjE0XVtwYXlsb2FkXSAqLwotCQkJCXNrYl9wYWRkaW5nX2ZsYWcgPSAwOwotCQkJCXNrYl9jb3B5X2ZsYWcgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBbSGVhZGVyOjE0XVtwYWRkaW5nOjJdW3BheWxvYWRdICovCi0JCQkJc2tiX3BhZGRpbmdfZmxhZyA9IDE7Ci0JCQkJaWYgKGxlbmd0aCA8IGNvcHlicmVhaykKLQkJCQkJc2tiX2NvcHlfZmxhZyA9IDE7Ci0JCQkJZWxzZQotCQkJCQlza2JfY29weV9mbGFnID0gMDsKLQkJCX0KLQotCQkJLyogRGF0YSBjb252ZXJzaW9uICovCi0JCQlpZiAoc2tiX2NvcHlfZmxhZykgewkvKiByZWN5Y2xlICBza2IgKi8KLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKLQkJCQluZXdfc2tiID0KLQkJCQkgICAgbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsCi0JCQkJCQkgICAgIGxlbmd0aCArIE5FVF9JUF9BTElHTik7Ci0JCQkJaWYgKG5ld19za2IpIHsKLQkJCQkJaWYgKCFza2JfcGFkZGluZ19mbGFnKSB7Ci0JCQkJCQlza2JfcmVzZXJ2ZShuZXdfc2tiLAotCQkJCQkJCQlORVRfSVBfQUxJR04pOworCQkJCWlmIChORVRfSVBfQUxJR04pIHsKKwkJCQkJLyogQmVjYXVzZSBhbGlnbm1lbnQgZGlmZmVycywKKwkJCQkJICogdGhlIG5ld19za2IgaXMgbmV3bHkgYWxsb2NhdGVkLAorCQkJCQkgKiBhbmQgZGF0YSBpcyBjb3BpZWQgdG8gbmV3X3NrYi4qLworCQkJCQluZXdfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsCisJCQkJCQkJIGxlbmd0aCArIE5FVF9JUF9BTElHTik7CisJCQkJCWlmICghbmV3X3NrYikgeworCQkJCQkJLyogZG9ycm9wIGVycm9yICovCisJCQkJCQlwcl9lcnIoIk5ldyBza2IgYWxsb2NhdGlvbiAiCisJCQkJCQkJIkVycm9yXG4iKTsKKwkJCQkJCWdvdG8gZG9ycm9wOwogCQkJCQl9CisJCQkJCXNrYl9yZXNlcnZlKG5ld19za2IsIE5FVF9JUF9BTElHTik7CiAJCQkJCW1lbWNweShuZXdfc2tiLT5kYXRhLCBza2ItPmRhdGEsCi0JCQkJCQlsZW5ndGgpOwotCQkJCQkvKiBzYXZlIHRoZSBza2IKLQkJCQkJICogaW4gYnVmZmVyX2luZm8gYXMgZ29vZCAqLworCQkJCQkgICAgICAgbGVuZ3RoKTsKIAkJCQkJc2tiID0gbmV3X3NrYjsKLQkJCQl9IGVsc2UgaWYgKCFza2JfcGFkZGluZ19mbGFnKSB7Ci0JCQkJCS8qIGRvcnJvcCBlcnJvciAqLwotCQkJCQlwcl9lcnIoIk5ldyBza2IgYWxsb2NhdGlvbiBFcnJvclxuIik7Ci0JCQkJCWdvdG8gZG9ycm9wOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIERNQSBidWZmZXIgaXMgdXNlZCBhcyBTS0IgYXMgaXQgaXMuKi8KKwkJCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJCQkvKiBbSGVhZGVyOjE0XVtwYWRkaW5nOjJdW3BheWxvYWRdICovCisJCQkJLyogVGhlIGxlbmd0aCBpbmNsdWRlcyBwYWRkaW5nIGxlbmd0aCAqLworCQkJCWxlbmd0aCA9IGxlbmd0aCAtIFBDSF9HQkVfRE1BX1BBRERJTkc7CisJCQkJaWYgKChsZW5ndGggPCBjb3B5YnJlYWspIHx8CisJCQkJICAgIChORVRfSVBfQUxJR04gIT0gUENIX0dCRV9ETUFfUEFERElORykpIHsKKwkJCQkJLyogQmVjYXVzZSBhbGlnbm1lbnQgZGlmZmVycywKKwkJCQkJICogdGhlIG5ld19za2IgaXMgbmV3bHkgYWxsb2NhdGVkLAorCQkJCQkgKiBhbmQgZGF0YSBpcyBjb3BpZWQgdG8gbmV3X3NrYi4KKwkJCQkJICogUGFkZGluZyBkYXRhIGlzIGRlbGV0ZWQKKwkJCQkJICogYXQgdGhlIHRpbWUgb2YgYSBjb3B5LiovCisJCQkJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwKKwkJCQkJCQkgbGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKKwkJCQkJaWYgKCFuZXdfc2tiKSB7CisJCQkJCQkvKiBkb3Jyb3AgZXJyb3IgKi8KKwkJCQkJCXByX2VycigiTmV3IHNrYiBhbGxvY2F0aW9uICIKKwkJCQkJCQkiRXJyb3JcbiIpOworCQkJCQkJZ290byBkb3Jyb3A7CisJCQkJCX0KKwkJCQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgTkVUX0lQX0FMSUdOKTsKKwkJCQkJbWVtY3B5KG5ld19za2ItPmRhdGEsIHNrYi0+ZGF0YSwKKwkJCQkJICAgICAgIEVUSF9ITEVOKTsKKwkJCQkJbWVtY3B5KCZuZXdfc2tiLT5kYXRhW0VUSF9ITEVOXSwKKwkJCQkJICAgICAgICZza2ItPmRhdGFbRVRIX0hMRU4gKworCQkJCQkgICAgICAgUENIX0dCRV9ETUFfUEFERElOR10sCisJCQkJCSAgICAgICBsZW5ndGggLSBFVEhfSExFTik7CisJCQkJCXNrYiA9IG5ld19za2I7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogUGFkZGluZyBkYXRhIGlzIGRlbGV0ZWQKKwkJCQkJICogYnkgbW92aW5nIGhlYWRlciBkYXRhLiovCisJCQkJCW1lbW1vdmUoJnNrYi0+ZGF0YVtQQ0hfR0JFX0RNQV9QQURESU5HXSwKKwkJCQkJCSZza2ItPmRhdGFbMF0sIEVUSF9ITEVOKTsKKwkJCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCQkJCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJCQl9CiAJCQl9Ci0JCQlpZiAoc2tiX3BhZGRpbmdfZmxhZykgewotCQkJCW1lbWNweSgmdG1wX3BhY2tldFswXSwgJnNrYi0+ZGF0YVswXSwgRVRIX0hMRU4pOwotCQkJCW1lbWNweSgmc2tiLT5kYXRhW05FVF9JUF9BTElHTl0sICZ0bXBfcGFja2V0WzBdLAotCQkJCQlFVEhfSExFTik7Ci0JCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwotCi0JCQl9Ci0KKwkJCS8qIFRoZSBsZW5ndGggaW5jbHVkZXMgRkNTIGxlbmd0aCAqLworCQkJbGVuZ3RoID0gbGVuZ3RoIC0gRVRIX0ZDU19MRU47CiAJCQkvKiB1cGRhdGUgc3RhdHVzIG9mIGRyaXZlciAqLwogCQkJYWRhcHRlci0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOwogCQkJYWRhcHRlci0+c3RhdHMucnhfcGFja2V0cysrOwpAQCAtMjI0Nyw3ICsyMjYyLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCiAJcGNoX2diZV9oYWxfcGh5X2h3X3Jlc2V0KCZhZGFwdGVyLT5odyk7CkBAIC0yMzIyLDYgKzIzMzcsNyBAQAogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfR1JPOwogCXBjaF9nYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAKKwlwY2hfZ2JlX21hY19sb2FkX21hY19hZGRyKCZhZGFwdGVyLT5odyk7CiAJcGNoX2diZV9tYWNfcmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKIAogCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCAxZjQyZjZhLi5kM2NiNzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtMTQ4OCwxMiArMTQ4OCwxMCBAQAogICAgIAogCS8qIAogCSAqIFdhaXQgYSBmdWxsIFR4IHRpbWUgKDEuMm1zKSArIHNvbWUgZ3VhcmQgdGltZSwgTlMgc2F5cyAxLjZtcyB0b3RhbC4KLQkgKiBFYXJseSBkYXRhc2hlZXRzIHNhaWQgdG8gcG9sbCB0aGUgcmVzZXQgYml0LCBidXQgbm93IHRoZXkgc2F5IHRoYXQKLQkgKiBpdCAiaXMgbm90IGEgcmVsaWFibGUgaW5kaWNhdG9yIGFuZCBzdWJzZXF1ZW50bHkgc2hvdWxkIGJlIGlnbm9yZWQuIgotCSAqIFdlIHdhaXQgYXQgbGVhc3QgMTBtcy4KKwkgKiBXZSB3YWl0IGF0IGxlYXN0IDJtcy4KIAkgKi8KIAotCW1kZWxheSgxMCk7CisJbWRlbGF5KDIpOwogCiAJLyoKIAkgKiBSZXNldCBSQkNSWzAxXSBiYWNrIHRvIHplcm8gYXMgcGVyIG1hZ2ljIGluY2FudGF0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKaW5kZXggOTIyNmNkYS4uNTMwYWI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCkBAIC02OTEsNiArNjkxLDcgQEAKIAlQQ01DSUFfUEZDX0RFVklDRV9NQU5GX0NBUkQoMCwgMHgwMTA1LCAweDBlMGEpLAogCVBDTUNJQV9QRkNfREVWSUNFX01BTkZfQ0FSRCgwLCAweDAwMzIsIDB4MGUwMSksCiAJUENNQ0lBX1BGQ19ERVZJQ0VfTUFORl9DQVJEKDAsIDB4MDAzMiwgMHgwYTA1KSwKKwlQQ01DSUFfUEZDX0RFVklDRV9NQU5GX0NBUkQoMCwgMHgwMDMyLCAweDBiMDUpLAogCVBDTUNJQV9QRkNfREVWSUNFX01BTkZfQ0FSRCgwLCAweDAwMzIsIDB4MTEwMSksCiAJUENNQ0lBX0RFVklDRV9OVUxMLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IGJkZTdkNjEuLjdmZmRiODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLWFzcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTYxNyw4ICs2MTgsOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcnRsODE2OF9vb2Jfbm90aWZ5KHZvaWQgX19pb21lbSAqaW9hZGRyLCB1OCBjbWQpCitzdGF0aWMgdm9pZCBydGw4MTY4X29vYl9ub3RpZnkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHU4IGNtZCkKIHsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAJaW50IGk7CiAKIAlSVExfVzgoRVJJRFIsIGNtZCk7CkBAIC02MzAsNyArNjMyLDcgQEAKIAkJCWJyZWFrOwogCX0KIAotCW9jcF93cml0ZShpb2FkZHIsIDB4MSwgMHgzMCwgMHgwMDAwMDAwMSk7CisJb2NwX3dyaXRlKHRwLCAweDEsIDB4MzAsIDB4MDAwMDAwMDEpOwogfQogCiAjZGVmaW5lIE9PQl9DTURfUkVTRVQJCTB4MDAKQEAgLTk3Myw3ICs5NzUsOCBAQAogCQlpZiAocG0pCiAJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmdHAtPnBjaV9kZXYtPmRldik7CiAJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQkJbmV0aWZfaW5mbyh0cCwgaWZ1cCwgZGV2LCAibGluayB1cFxuIik7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQluZXRpZl9pbmZvKHRwLCBpZnVwLCBkZXYsICJsaW5rIHVwXG4iKTsKIAl9IGVsc2UgewogCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCQluZXRpZl9pbmZvKHRwLCBpZmRvd24sIGRldiwgImxpbmsgZG93blxuIik7CkBAIC0yODY3LDggKzI4NzAsMTEgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAKLQlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpCisJaWYgKCgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpIHx8CisJICAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjgpKSAmJgorCSAgICAob2NwX3JlYWQodHAsIDB4MGYsIDB4MDAxMCkgJiAweDAwMDA4MDAwKSkgewogCQlyZXR1cm47CisJfQogCiAJaWYgKCgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjMpIHx8CiAJICAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjQpKSAmJgpAQCAtMjg5MCw2ICsyODk2LDggQEAKIAlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yODoKIAkJUlRMX1c4KFBNQ0gsIFJUTF9SOChQTUNIKSAmIH4weDgwKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjg5OSwxMiArMjkwNywxNyBAQAogewogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAotCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNykKKwlpZiAoKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNykgfHwKKwkgICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkpICYmCisJICAgIChvY3BfcmVhZCh0cCwgMHgwZiwgMHgwMDEwKSAmIDB4MDAwMDgwMDApKSB7CiAJCXJldHVybjsKKwl9CiAKIAlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yODoKIAkJUlRMX1c4KFBNQ0gsIFJUTF9SOChQTUNIKSB8IDB4ODApOwogCQlicmVhazsKIAl9CkBAIC0zMDA4LDYgKzMwMjEsMTEgQEAKIAltaWktPnJlZ19udW1fbWFzayA9IDB4MWY7CiAJbWlpLT5zdXBwb3J0c19nbWlpID0gISEoY2ZnLT5mZWF0dXJlcyAmIFJUTF9GRUFUVVJFX0dNSUkpOwogCisJLyogZGlzYWJsZSBBU1BNIGNvbXBsZXRlbHkgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZworCSAqIHByb2JsZW1zIGFzIHdlbGwgYXMgZnVsbCBzeXN0ZW0gaGFuZ3MgZm9yIHNvbWUgUENJZSBkZXZpY2VzIHVzZXJzICovCisJcGNpX2Rpc2FibGVfbGlua19zdGF0ZShwZGV2LCBQQ0lFX0xJTktfU1RBVEVfTDBTIHwgUENJRV9MSU5LX1NUQVRFX0wxIHwKKwkJCQkgICAgIFBDSUVfTElOS19TVEFURV9DTEtQTSk7CisKIAkvKiBlbmFibGUgZGV2aWNlIChpbmNsLiBQQ0kgUE0gd2FrZXVwIGFuZCBob3RwbHVnIHNldHVwKSAqLwogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjIDwgMCkgewpAQCAtMzA0MSw3ICszMDU5LDcgQEAKIAkJZ290byBlcnJfb3V0X213aV8yOwogCX0KIAotCXRwLT5jcF9jbWQgPSBQQ0lNdWxSVyB8IFJ4Q2hrU3VtOworCXRwLT5jcF9jbWQgPSBSeENoa1N1bTsKIAogCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYKIAkgICAgIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgJiYgdXNlX2RhYykgewpAQCAtMzE4OSw2ICszMjA3LDggQEAKIAlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKIAkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOwogCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwogb3V0OgogCXJldHVybiByYzsKIApAQCAtMzMxNSw3ICszMzM1LDggQEAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soaW9hZGRyKTsKIAotCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNyB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkgewogCQl3aGlsZSAoUlRMX1I4KFR4UG9sbCkgJiBOUFEpCiAJCQl1ZGVsYXkoMjApOwogCkBAIC0zNzU3LDcgKzM3NzgsOCBAQAogCVJUTF9XMTYoSW50ck1pdGlnYXRlLCAweDUxNTEpOwogCiAJLyogV29yayBhcm91bmQgZm9yIFJ4RklGTyBvdmVyZmxvdy4gKi8KLQlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTEpIHsKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTEgfHwKKwkgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjIpIHsKIAkJdHAtPmludHJfZXZlbnQgfD0gUnhGSUZPT3ZlciB8IFBDU1RpbWVvdXQ7CiAJCXRwLT5pbnRyX2V2ZW50ICY9IH5SeE92ZXJmbG93OwogCX0KQEAgLTM4NDMsOCArMzg2NSw3IEBACiAJQ3hwbF9kYmdfc2VsIHwgXAogCUFTRiB8IFwKIAlQa3RDbnRyRGlzYWJsZSB8IFwKLQlQQ0lEQUMgfCBcCi0JUENJTXVsUlcpCisJTWFjX2RiZ29fc2VsKQogCiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEwMmVfMSh2b2lkIF9faW9tZW0gKmlvYWRkciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0zODc0LDggKzM4OTUsNiBAQAogCWlmICgoY2ZnMSAmIExFRFMwKSAmJiAoY2ZnMSAmIExFRFMxKSkKIAkJUlRMX1c4KENvbmZpZzEsIGNmZzEgJiB+TEVEUzApOwogCi0JUlRMX1cxNihDUGx1c0NtZCwgUlRMX1IxNihDUGx1c0NtZCkgJiB+UjgxMFhfQ1BDTURfUVVJUktfTUFTSyk7Ci0KIAlydGxfZXBoeV9pbml0KGlvYWRkciwgZV9pbmZvXzgxMDJlXzEsIEFSUkFZX1NJWkUoZV9pbmZvXzgxMDJlXzEpKTsKIH0KIApAQCAtMzg4Nyw4ICszOTA2LDYgQEAKIAogCVJUTF9XOChDb25maWcxLCBNRU1NQVAgfCBJT01BUCB8IFZQRCB8IFBNRW5hYmxlKTsKIAlSVExfVzgoQ29uZmlnMywgUlRMX1I4KENvbmZpZzMpICYgfkJlYWNvbl9lbik7Ci0KLQlSVExfVzE2KENQbHVzQ21kLCBSVExfUjE2KENQbHVzQ21kKSAmIH5SODEwWF9DUENNRF9RVUlSS19NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMDJlXzModm9pZCBfX2lvbWVtICppb2FkZHIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMzkxNCw2ICszOTMxLDggQEAKIAkJfQogCX0KIAorCVJUTF9XOChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisKIAlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wNzoKIAkJcnRsX2h3X3N0YXJ0XzgxMDJlXzEoaW9hZGRyLCBwZGV2KTsKQEAgLTM5MjgsMTQgKzM5NDcsMTMgQEAKIAkJYnJlYWs7CiAJfQogCi0JUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKIAogCVJUTF9XOChNYXhUeFBhY2tldFNpemUsIFR4UGFja2V0TWF4KTsKIAogCXJ0bF9zZXRfcnhfbWF4X3NpemUoaW9hZGRyLCByeF9idWZfc3opOwogCi0JdHAtPmNwX2NtZCB8PSBydGxfcndfY3BsdXNjbWQoaW9hZGRyKSB8IFBDSU11bFJXOwotCisJdHAtPmNwX2NtZCAmPSB+UjgxMFhfQ1BDTURfUVVJUktfTUFTSzsKIAlSVExfVzE2KENQbHVzQ21kLCB0cC0+Y3BfY21kKTsKIAogCVJUTF9XMTYoSW50ck1pdGlnYXRlLCAweDAwMDApOwpAQCAtMzk0NSwxNCArMzk2MywxMCBAQAogCVJUTF9XOChDaGlwQ21kLCBDbWRUeEVuYiB8IENtZFJ4RW5iKTsKIAlydGxfc2V0X3J4X3R4X2NvbmZpZ19yZWdpc3RlcnModHApOwogCi0JUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfTG9jayk7Ci0KIAlSVExfUjgoSW50ck1hc2spOwogCiAJcnRsX3NldF9yeF9tb2RlKGRldik7CiAKLQlSVExfVzgoQ2hpcENtZCwgQ21kVHhFbmIgfCBDbWRSeEVuYik7Ci0KIAlSVExfVzE2KE11bHRpSW50ciwgUlRMX1IxNihNdWx0aUludHIpICYgMHhmMDAwKTsKIAogCVJUTF9XMTYoSW50ck1hc2ssIHRwLT5pbnRyX2V2ZW50KTsKQEAgLTQ2MzksMTIgKzQ2NTMsMzMgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyogV29yayBhcm91bmQgZm9yIHJ4IGZpZm8gb3ZlcmZsb3cgKi8KLQkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIFJ4RklGT092ZXIpICYmCi0JCSh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xMSkpIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCXJ0bDgxNjlfdHhfdGltZW91dChkZXYpOwotCQkJYnJlYWs7CisJCWlmICh1bmxpa2VseShzdGF0dXMgJiBSeEZJRk9PdmVyKSkgeworCQkJc3dpdGNoICh0cC0+bWFjX3ZlcnNpb24pIHsKKwkJCS8qIFdvcmsgYXJvdW5kIGZvciByeCBmaWZvIG92ZXJmbG93ICovCisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTE6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjI6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJCXJ0bDgxNjlfdHhfdGltZW91dChkZXYpOworCQkJCWdvdG8gZG9uZTsKKwkJCS8qIFRlc3RlcnMgbmVlZGVkLiAqLworCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE3OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE5OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIwOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIxOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIzOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI0OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgorCQkJLyogRXhwZXJpbWVudGFsIHNjaWVuY2UuIFBrdGdlbiBwcm9vZi4gKi8KKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xMjoKKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKKwkJCQlpZiAoc3RhdHVzID09IFJ4RklGT092ZXIpCisJCQkJCWdvdG8gZG9uZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCQlpZiAodW5saWtlbHkoc3RhdHVzICYgU1lTRXJyKSkgewpAQCAtNDY4MCw3ICs0NzE1LDcgQEAKIAkJCShzdGF0dXMgJiBSeEZJRk9PdmVyKSA/IChzdGF0dXMgfCBSeE92ZXJmbG93KSA6IHN0YXR1cyk7CiAJCXN0YXR1cyA9IFJUTF9SMTYoSW50clN0YXR1cyk7CiAJfQotCitkb25lOgogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCAwZThiYjE5Li5jYTg4NmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTU2OSw5ICs1NjksMTQgQEAKIAkJCQkgIHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7Ci0Jc3RydWN0IGVmeF9zZWxmX3Rlc3RzIGVmeF90ZXN0czsKKwlzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKmVmeF90ZXN0czsKIAlpbnQgYWxyZWFkeV91cDsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVOT01FTTsKKworCWVmeF90ZXN0cyA9IGt6YWxsb2Moc2l6ZW9mKCplZnhfdGVzdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVmeF90ZXN0cykKKwkJZ290byBmYWlsOworCiAKIAlBU1NFUlRfUlROTCgpOwogCWlmIChlZngtPnN0YXRlICE9IFNUQVRFX1JVTk5JTkcpIHsKQEAgLTU4OSwxMyArNTk0LDExIEBACiAJCWlmIChyYykgewogCQkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCiAJCQkJICAiZmFpbGVkIG9wZW5pbmcgZGV2aWNlLlxuIik7Ci0JCQlnb3RvIGZhaWwyOworCQkJZ290byBmYWlsMTsKIAkJfQogCX0KIAotCW1lbXNldCgmZWZ4X3Rlc3RzLCAwLCBzaXplb2YoZWZ4X3Rlc3RzKSk7Ci0KLQlyYyA9IGVmeF9zZWxmdGVzdChlZngsICZlZnhfdGVzdHMsIHRlc3QtPmZsYWdzKTsKKwlyYyA9IGVmeF9zZWxmdGVzdChlZngsIGVmeF90ZXN0cywgdGVzdC0+ZmxhZ3MpOwogCiAJaWYgKCFhbHJlYWR5X3VwKQogCQlkZXZfY2xvc2UoZWZ4LT5uZXRfZGV2KTsKQEAgLTYwNCwxMCArNjA3LDExIEBACiAJCSAgIHJjID09IDAgPyAicGFzc2VkIiA6ICJmYWlsZWQiLAogCQkgICAodGVzdC0+ZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSA/ICJvZmYiIDogIm9uIik7CiAKLSBmYWlsMjoKLSBmYWlsMToKK2ZhaWwxOgogCS8qIEZpbGwgZXRodG9vbCByZXN1bHRzIHN0cnVjdHVyZXMgKi8KLQllZnhfZXRodG9vbF9maWxsX3NlbGZfdGVzdHMoZWZ4LCAmZWZ4X3Rlc3RzLCBOVUxMLCBkYXRhKTsKKwllZnhfZXRodG9vbF9maWxsX3NlbGZfdGVzdHMoZWZ4LCBlZnhfdGVzdHMsIE5VTEwsIGRhdGEpOworCWtmcmVlKGVmeF90ZXN0cyk7CitmYWlsOgogCWlmIChyYykKIAkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCA1OTc2ZDFkLi42NDBlMzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtMTc3Nyw2ICsxNzc3LDcgQEAKIAkJCQkJICAgICAgImN1cl9yeDolNC40ZCwgZGlydHlfcng6JTQuNGRcbiIsCiAJCQkJCSAgICAgIG5ldF9kZXYtPm5hbWUsIHNpc19wcml2LT5jdXJfcngsCiAJCQkJCSAgICAgIHNpc19wcml2LT5kaXJ0eV9yeCk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJCWJyZWFrOwogCQkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggNDJkYWY5OC4uMzViMjhmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtMzg1Niw5ICszODU2LDYgQEAKIAltZW1jcHlfZnJvbWlvKGRldi0+ZGV2X2FkZHIsIGh3LT5yZWdzICsgQjJfTUFDXzEgKyBwb3J0KjgsIEVUSF9BTEVOKTsKIAltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCi0JLyogZGV2aWNlIGlzIG9mZiB1bnRpbCBsaW5rIGRldGVjdGlvbiAqLwotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0KIAlyZXR1cm4gZGV2OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IDM0YTBhZjMuLjBlNWYwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0xNTYwLDggKzE1NjAsMTAgQEAKIAogCXByaXYtPmh3ID0gZGV2aWNlOwogCi0JaWYgKGRldmljZV9jYW5fd2FrZXVwKHByaXYtPmRldmljZSkpCisJaWYgKGRldmljZV9jYW5fd2FrZXVwKHByaXYtPmRldmljZSkpIHsKIAkJcHJpdi0+d29sb3B0cyA9IFdBS0VfTUFHSUM7IC8qIE1hZ2ljIEZyYW1lIGFzIGRlZmF1bHQgKi8KKwkJZW5hYmxlX2lycV93YWtlKGRldi0+aXJxKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggNzg0MWE4Zi4uMDZjMGU1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02MCwxMiArNjAsNiBAQAogI2RlZmluZSBCQVJfMAkwCiAjZGVmaW5lIEJBUl8yCTIKIAotI2lmIGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpIHx8IGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQotI2RlZmluZSBURzNfVkxBTl9UQUdfVVNFRCAxCi0jZWxzZQotI2RlZmluZSBURzNfVkxBTl9UQUdfVVNFRCAwCi0jZW5kaWYKLQogI2luY2x1ZGUgInRnMy5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInRnMyIKQEAgLTEzNCw5ICsxMjgsNiBAQAogCQkJCSBURzNfVFhfUklOR19TSVpFKQogI2RlZmluZSBORVhUX1RYKE4pCQkoKChOKSArIDEpICYgKFRHM19UWF9SSU5HX1NJWkUgLSAxKSkKIAotI2RlZmluZSBURzNfUlhfRE1BX0FMSUdOCQkxNgotI2RlZmluZSBURzNfUlhfSEVBRFJPT00JCQlBTElHTihWTEFOX0hMRU4sIFRHM19SWF9ETUFfQUxJR04pCi0KICNkZWZpbmUgVEczX0RNQV9CWVRFX0VOQUIJCTY0CiAKICNkZWZpbmUgVEczX1JYX1NURF9ETUFfU1oJCTE1MzYKQEAgLTQ3MjIsOCArNDcxMyw2IEBACiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJCXUzMiBvcGFxdWVfa2V5LCBkZXNjX2lkeCwgKnBvc3RfcHRyOwotCQlib29sIGh3X3ZsYW4gX19tYXliZV91bnVzZWQgPSBmYWxzZTsKLQkJdTE2IHZ0YWcgX19tYXliZV91bnVzZWQgPSAwOwogCiAJCWRlc2NfaWR4ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9JTkRFWF9NQVNLOwogCQlvcGFxdWVfa2V5ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9SSU5HX01BU0s7CkBAIC00NzgyLDEyICs0NzcxLDEyIEBACiAJCQl0ZzNfcmVjeWNsZV9yeCh0bmFwaSwgdHByLCBvcGFxdWVfa2V5LAogCQkJCSAgICAgICBkZXNjX2lkeCwgKnBvc3RfcHRyKTsKIAotCQkJY29weV9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHRwLT5kZXYsIGxlbiArIFZMQU5fSExFTiArCisJCQljb3B5X3NrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgbGVuICsKIAkJCQkJCSAgICBURzNfUkFXX0lQX0FMSUdOKTsKIAkJCWlmIChjb3B5X3NrYiA9PSBOVUxMKQogCQkJCWdvdG8gZHJvcF9pdF9ub19yZWN5Y2xlOwogCi0JCQlza2JfcmVzZXJ2ZShjb3B5X3NrYiwgVEczX1JBV19JUF9BTElHTiArIFZMQU5fSExFTik7CisJCQlza2JfcmVzZXJ2ZShjb3B5X3NrYiwgVEczX1JBV19JUF9BTElHTik7CiAJCQlza2JfcHV0KGNvcHlfc2tiLCBsZW4pOwogCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHRwLT5wZGV2LCBkbWFfYWRkciwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIGNvcHlfc2tiLT5kYXRhLCBsZW4pOwpAQCAtNDgxNCwzMCArNDgwMywxMSBAQAogCQl9CiAKIAkJaWYgKGRlc2MtPnR5cGVfZmxhZ3MgJiBSWERfRkxBR19WTEFOICYmCi0JCSAgICAhKHRwLT5yeF9tb2RlICYgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHKSkgewotCQkJdnRhZyA9IGRlc2MtPmVycl92bGFuICYgUlhEX1ZMQU5fTUFTSzsKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotCQkJaWYgKHRwLT52bGdycCkKLQkJCQlod192bGFuID0gdHJ1ZTsKLQkJCWVsc2UKLSNlbmRpZgotCQkJewotCQkJCXN0cnVjdCB2bGFuX2V0aGhkciAqdmUgPSAoc3RydWN0IHZsYW5fZXRoaGRyICopCi0JCQkJCQkgICAgX19za2JfcHVzaChza2IsIFZMQU5fSExFTik7CisJCSAgICAhKHRwLT5yeF9tb2RlICYgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHKSkKKwkJCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLAorCQkJCQkgICAgICAgZGVzYy0+ZXJyX3ZsYW4gJiBSWERfVkxBTl9NQVNLKTsKIAotCQkJCW1lbW1vdmUodmUsIHNrYi0+ZGF0YSArIFZMQU5fSExFTiwKLQkJCQkJRVRIX0FMRU4gKiAyKTsKLQkJCQl2ZS0+aF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpOwotCQkJCXZlLT5oX3ZsYW5fVENJID0gaHRvbnModnRhZyk7Ci0JCQl9Ci0JCX0KLQotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JCWlmIChod192bGFuKQotCQkJdmxhbl9ncm9fcmVjZWl2ZSgmdG5hcGktPm5hcGksIHRwLT52bGdycCwgdnRhZywgc2tiKTsKLQkJZWxzZQotI2VuZGlmCi0JCQluYXBpX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgc2tiKTsKKwkJbmFwaV9ncm9fcmVjZWl2ZSgmdG5hcGktPm5hcGksIHNrYik7CiAKIAkJcmVjZWl2ZWQrKzsKIAkJYnVkZ2V0LS07CkBAIC01NzQwLDExICs1NzEwLDkgQEAKIAkJYmFzZV9mbGFncyB8PSBUWERfRkxBR19UQ1BVRFBfQ1NVTTsKIAl9CiAKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAogCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCiAJCWJhc2VfZmxhZ3MgfD0gKFRYRF9GTEFHX1ZMQU4gfAogCQkJICAgICAgICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCAxNikpOwotI2VuZGlmCiAKIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCkBAIC01OTg2LDExICs1OTU0LDEwIEBACiAJCQl9CiAJCX0KIAl9Ci0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKKwogCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCiAJCWJhc2VfZmxhZ3MgfD0gKFRYRF9GTEFHX1ZMQU4gfAogCQkJICAgICAgICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCAxNikpOwotI2VuZGlmCiAKIAlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRykgJiYKIAkgICAgIW1zcyAmJiBza2ItPmxlbiA+IFZMQU5fRVRIX0ZSQU1FX0xFTikKQEAgLTk1MzIsMTcgKzk0OTksMTAgQEAKIAlyeF9tb2RlID0gdHAtPnJ4X21vZGUgJiB+KFJYX01PREVfUFJPTUlTQyB8CiAJCQkJICBSWF9NT0RFX0tFRVBfVkxBTl9UQUcpOwogCisjaWYgIWRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpICYmICFkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKIAkvKiBXaGVuIEFTRiBpcyBpbiB1c2UsIHdlIGFsd2F5cyBrZWVwIHRoZSBSWF9NT0RFX0tFRVBfVkxBTl9UQUcKIAkgKiBmbGFnIGNsZWFyLgogCSAqLwotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JaWYgKCF0cC0+dmxncnAgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCi0JCXJ4X21vZGUgfD0gUlhfTU9ERV9LRUVQX1ZMQU5fVEFHOwotI2Vsc2UKLQkvKiBCeSBkZWZpbml0aW9uLCBWTEFOIGlzIGRpc2FibGVkIGFsd2F5cyBpbiB0aGlzCi0JICogY2FzZS4KLQkgKi8KIAlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCiAJCXJ4X21vZGUgfD0gUlhfTU9ERV9LRUVQX1ZMQU5fVEFHOwogI2VuZGlmCkBAIC0xMTE5OCw3ICsxMTE1OCw5IEBACiAJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQogCQkJYnJlYWs7CQkJLyogV2UgaGF2ZSBubyBQSFkgKi8KIAotCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKQorCQlpZiAoKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikgfHwKKwkJICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpICYmCisJCSAgICAgIW5ldGlmX3J1bm5pbmcoZGV2KSkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKQEAgLTExMjE0LDcgKzExMTc2LDkgQEAKIAkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpCiAJCQlicmVhazsJCQkvKiBXZSBoYXZlIG5vIFBIWSAqLwogCi0JCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpCisJCWlmICgodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKSB8fAorCQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgJiYKKwkJICAgICAhbmV0aWZfcnVubmluZyhkZXYpKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwpAQCAtMTEyMzAsMzEgKzExMTk0LDYgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotc3RhdGljIHZvaWQgdGczX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKLXsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQl0cC0+dmxncnAgPSBncnA7Ci0JCXJldHVybjsKLQl9Ci0KLQl0ZzNfbmV0aWZfc3RvcCh0cCk7Ci0KLQl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKLQotCXRwLT52bGdycCA9IGdycDsKLQotCS8qIFVwZGF0ZSBSWF9NT0RFX0tFRVBfVkxBTl9UQUcgYml0IGluIFJYX01PREUgcmVnaXN0ZXIuICovCi0JX190ZzNfc2V0X3J4X21vZGUoZGV2KTsKLQotCXRnM19uZXRpZl9zdGFydCh0cCk7Ci0KLQl0ZzNfZnVsbF91bmxvY2sodHApOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgdGczX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTMwNjYsOSArMTMwMDUsNyBAQAogCiBzdGF0aWMgdm9pZCBpbmxpbmUgdmxhbl9mZWF0dXJlc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAogCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBmbGFnczsKLSNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHUzMiB0ZzNfcnhfcmV0X3Jpbmdfc2l6ZShzdHJ1Y3QgdGczICp0cCkKQEAgLTEzODYxLDExICsxMzc5OCwxMSBAQAogCWVsc2UKIAkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfUE9MTF9TRVJERVM7CiAKLQl0cC0+cnhfb2Zmc2V0ID0gTkVUX0lQX0FMSUdOICsgVEczX1JYX0hFQURST09NOworCXRwLT5yeF9vZmZzZXQgPSBORVRfSVBfQUxJR047CiAJdHAtPnJ4X2NvcHlfdGhyZXNoID0gVEczX1JYX0NPUFlfVEhSRVNIT0xEOwogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSAmJgogCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgIT0gMCkgewotCQl0cC0+cnhfb2Zmc2V0IC09IE5FVF9JUF9BTElHTjsKKwkJdHAtPnJ4X29mZnNldCA9IDA7CiAjaWZuZGVmIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCiAJCXRwLT5yeF9jb3B5X3RocmVzaCA9IH4odTE2KTA7CiAjZW5kaWYKQEAgLTE0NjI5LDkgKzE0NTY2LDYgQEAKIAkubmRvX2RvX2lvY3RsCQk9IHRnM19pb2N0bCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gdGczX3R4X3RpbWVvdXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHRnM19jaGFuZ2VfbXR1LAotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gdGczX3ZsYW5fcnhfcmVnaXN0ZXIsCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gdGczX3BvbGxfY29udHJvbGxlciwKICNlbmRpZgpAQCAtMTQ2NDgsOSArMTQ1ODIsNiBAQAogCS5uZG9fZG9faW9jdGwJCT0gdGczX2lvY3RsLAogCS5uZG9fdHhfdGltZW91dAkJPSB0ZzNfdHhfdGltZW91dCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gdGczX2NoYW5nZV9tdHUsCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSB0ZzNfdmxhbl9yeF9yZWdpc3RlciwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB0ZzNfcG9sbF9jb250cm9sbGVyLAogI2VuZGlmCkBAIC0xNDcwMCw5ICsxNDYzMSw3IEBACiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLSNlbmRpZgogCiAJdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXRwLT5wZGV2ID0gcGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggZDYyYzhkOS4uZjUyODI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTI4MDgsOSArMjgwOCw2IEBACiAJdTMyCQkJCXJ4X3N0ZF9tYXhfcG9zdDsKIAl1MzIJCQkJcnhfb2Zmc2V0OwogCXUzMgkJCQlyeF9wa3RfbWFwX3N6OwotI2lmIFRHM19WTEFOX1RBR19VU0VECi0Jc3RydWN0IHZsYW5fZ3JvdXAJCSp2bGdycDsKLSNlbmRpZgogCiAKIAkvKiBiZWdpbiAiZXZlcnl0aGluZyBlbHNlIiBjYWNoZWxpbmUocykgc2VjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKaW5kZXggMDRlOGNlMS4uNzExMzE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGNkY19uY20uYwogICoKLSAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gMjAxMAorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiAyMDEwLTIwMTEKICAqIENvbnRhY3Q6IEFsZXhleSBPcmlzaGtvIDxhbGV4ZXkub3Jpc2hrb0BzdGVyaWNzc29uLmNvbT4KICAqIE9yaWdpbmFsIGF1dGhvcjogSGFucyBQZXR0ZXIgU2VsYXNreSA8aGFucy5wZXR0ZXIuc2VsYXNreUBzdGVyaWNzc29uLmNvbT4KICAqCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL3VzYm5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jZGMuaD4KIAotI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJCQkiMTctSmFuLTIwMTEiCisjZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSI3LUZlYi0yMDExIgogCiAvKiBDREMgTkNNIHN1YmNsYXNzIDMuMi4xICovCiAjZGVmaW5lIFVTQl9DRENfTkNNX05EUDE2X0xFTkdUSF9NSU4JCTB4MTAKQEAgLTc3LDYgKzc3LDkgQEAKICAqLwogI2RlZmluZQlDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYCQkzMgogCisvKiBNYXhpbXVtIGFtb3VudCBvZiBJTiBkYXRhZ3JhbXMgaW4gTlRCICovCisjZGVmaW5lCUNEQ19OQ01fRFBUX0RBVEFHUkFNU19JTl9NQVgJCTAgLyogdW5saW1pdGVkICovCisKIC8qIFJlc3RhcnQgdGhlIHRpbWVyLCBpZiBhbW91bnQgb2YgZGF0YWdyYW1zIGlzIGxlc3MgdGhhbiBnaXZlbiB2YWx1ZSAqLwogI2RlZmluZQlDRENfTkNNX1JFU1RBUlRfVElNRVJfREFUQUdSQU1fQ05UCTMKIApAQCAtODUsMTEgKzg4LDYgQEAKIAkoc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9udGgxNikgKyBzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX25kcDE2KSArIFwKIAkoQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWCArIDEpICogc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9kcGUxNikpCiAKLXN0cnVjdCBjb25uZWN0aW9uX3NwZWVkX2NoYW5nZSB7Ci0JX19sZTMyCVVTQml0UmF0ZTsgLyogaG9sZHMgM0dQUCBkb3dubGluayB2YWx1ZSwgYml0cyBwZXIgc2Vjb25kICovCi0JX19sZTMyCURTQml0UmF0ZTsgLyogaG9sZHMgM0dQUCB1cGxpbmsgdmFsdWUsIGJpdHMgcGVyIHNlY29uZCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCBjZGNfbmNtX2RhdGEgewogCXN0cnVjdCB1c2JfY2RjX25jbV9udGgxNiBudGgxNjsKIAlzdHJ1Y3QgdXNiX2NkY19uY21fbmRwMTYgbmRwMTY7CkBAIC0xOTgsMTAgKzE5NiwxMCBAQAogewogCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiByZXE7CiAJdTMyIHZhbDsKLQlfX2xlMTYgbWF4X2RhdGFncmFtX3NpemU7CiAJdTggZmxhZ3M7CiAJdTggaWZhY2Vfbm87CiAJaW50IGVycjsKKwl1MTYgbnRiX2ZtdF9zdXBwb3J0ZWQ7CiAKIAlpZmFjZV9ubyA9IGN0eC0+Y29udHJvbC0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKIApAQCAtMjIzLDYgKzIyMSw5IEBACiAJY3R4LT50eF9yZW1haW5kZXIgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLndOZHBPdXRQYXlsb2FkUmVtYWluZGVyKTsKIAljdHgtPnR4X21vZHVsdXMgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLndOZHBPdXREaXZpc29yKTsKIAljdHgtPnR4X25kcF9tb2R1bHVzID0gbGUxNl90b19jcHUoY3R4LT5uY21fcGFybS53TmRwT3V0QWxpZ25tZW50KTsKKwkvKiBkZXZpY2VzIHByaW9yIHRvIE5DTSBFcnJhdGEgc2hhbGwgc2V0IHRoaXMgZmllbGQgdG8gemVybyAqLworCWN0eC0+dHhfbWF4X2RhdGFncmFtcyA9IGxlMTZfdG9fY3B1KGN0eC0+bmNtX3Bhcm0ud050Yk91dE1heERhdGFncmFtcyk7CisJbnRiX2ZtdF9zdXBwb3J0ZWQgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLmJtTnRiRm9ybWF0c1N1cHBvcnRlZCk7CiAKIAlpZiAoY3R4LT5mdW5jX2Rlc2MgIT0gTlVMTCkKIAkJZmxhZ3MgPSBjdHgtPmZ1bmNfZGVzYy0+Ym1OZXR3b3JrQ2FwYWJpbGl0aWVzOwpAQCAtMjMxLDIyICsyMzIsNTggQEAKIAogCXByX2RlYnVnKCJkd050YkluTWF4U2l6ZT0ldSBkd050Yk91dE1heFNpemU9JXUgIgogCQkgIndOZHBPdXRQYXlsb2FkUmVtYWluZGVyPSV1IHdOZHBPdXREaXZpc29yPSV1ICIKLQkJICJ3TmRwT3V0QWxpZ25tZW50PSV1IGZsYWdzPTB4JXhcbiIsCisJCSAid05kcE91dEFsaWdubWVudD0ldSB3TnRiT3V0TWF4RGF0YWdyYW1zPSV1IGZsYWdzPTB4JXhcbiIsCiAJCSBjdHgtPnJ4X21heCwgY3R4LT50eF9tYXgsIGN0eC0+dHhfcmVtYWluZGVyLCBjdHgtPnR4X21vZHVsdXMsCi0JCSBjdHgtPnR4X25kcF9tb2R1bHVzLCBmbGFncyk7CisJCSBjdHgtPnR4X25kcF9tb2R1bHVzLCBjdHgtPnR4X21heF9kYXRhZ3JhbXMsIGZsYWdzKTsKIAotCS8qIG1heCBjb3VudCBvZiB0eCBkYXRhZ3JhbXMgd2l0aG91dCB0ZXJtaW5hdGluZyBOVUxMIGVudHJ5ICovCi0JY3R4LT50eF9tYXhfZGF0YWdyYW1zID0gQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWDsKKwkvKiBtYXggY291bnQgb2YgdHggZGF0YWdyYW1zICovCisJaWYgKChjdHgtPnR4X21heF9kYXRhZ3JhbXMgPT0gMCkgfHwKKwkJCShjdHgtPnR4X21heF9kYXRhZ3JhbXMgPiBDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYKSkKKwkJY3R4LT50eF9tYXhfZGF0YWdyYW1zID0gQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWDsKIAogCS8qIHZlcmlmeSBtYXhpbXVtIHNpemUgb2YgcmVjZWl2ZWQgTlRCIGluIGJ5dGVzICovCi0JaWYgKChjdHgtPnJ4X21heCA8Ci0JICAgIChDRENfTkNNX01JTl9IRFJfU0laRSArIENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpKSB8fAotCSAgICAoY3R4LT5yeF9tYXggPiBDRENfTkNNX05UQl9NQVhfU0laRV9SWCkpIHsKKwlpZiAoY3R4LT5yeF9tYXggPCBVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkUpIHsKKwkJcHJfZGVidWcoIlVzaW5nIG1pbiByZWNlaXZlIGxlbmd0aD0lZFxuIiwKKwkJCQkJCVVTQl9DRENfTkNNX05UQl9NSU5fSU5fU0laRSk7CisJCWN0eC0+cnhfbWF4ID0gVVNCX0NEQ19OQ01fTlRCX01JTl9JTl9TSVpFOworCX0KKworCWlmIChjdHgtPnJ4X21heCA+IENEQ19OQ01fTlRCX01BWF9TSVpFX1JYKSB7CiAJCXByX2RlYnVnKCJVc2luZyBkZWZhdWx0IG1heGltdW0gcmVjZWl2ZSBsZW5ndGg9JWRcbiIsCiAJCQkJCQlDRENfTkNNX05UQl9NQVhfU0laRV9SWCk7CiAJCWN0eC0+cnhfbWF4ID0gQ0RDX05DTV9OVEJfTUFYX1NJWkVfUlg7CiAJfQogCisJLyogaW5mb3JtIGRldmljZSBhYm91dCBOVEIgaW5wdXQgc2l6ZSBjaGFuZ2VzICovCisJaWYgKGN0eC0+cnhfbWF4ICE9IGxlMzJfdG9fY3B1KGN0eC0+bmNtX3Bhcm0uZHdOdGJJbk1heFNpemUpKSB7CisJCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8CisJCQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19TRVRfTlRCX0lOUFVUX1NJWkU7CisJCXJlcS53VmFsdWUgPSAwOworCQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOworCisJCWlmIChmbGFncyAmIFVTQl9DRENfTkNNX05DQVBfTlRCX0lOUFVUX1NJWkUpIHsKKwkJCXN0cnVjdCB1c2JfY2RjX25jbV9uZHBfaW5wdXRfc2l6ZSBuZHBfaW5fc3o7CisKKwkJCXJlcS53TGVuZ3RoID0gODsKKwkJCW5kcF9pbl9zei5kd050YkluTWF4U2l6ZSA9IGNwdV90b19sZTMyKGN0eC0+cnhfbWF4KTsKKwkJCW5kcF9pbl9zei53TnRiSW5NYXhEYXRhZ3JhbXMgPQorCQkJCQljcHVfdG9fbGUxNihDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYKTsKKwkJCW5kcF9pbl9zei53UmVzZXJ2ZWQgPSAwOworCQkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgJm5kcF9pbl9zeiwgMCwgTlVMTCwKKwkJCQkJCQkJCTEwMDApOworCQl9IGVsc2UgeworCQkJX19sZTMyIGR3TnRiSW5NYXhTaXplID0gY3B1X3RvX2xlMzIoY3R4LT5yeF9tYXgpOworCisJCQlyZXEud0xlbmd0aCA9IDQ7CisJCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmZHdOdGJJbk1heFNpemUsIDAsCisJCQkJCQkJCU5VTEwsIDEwMDApOworCQl9CisKKwkJaWYgKGVycikKKwkJCXByX2RlYnVnKCJTZXR0aW5nIE5UQiBJbnB1dCBTaXplIGZhaWxlZFxuIik7CisJfQorCiAJLyogdmVyaWZ5IG1heGltdW0gc2l6ZSBvZiB0cmFuc21pdHRlZCBOVEIgaW4gYnl0ZXMgKi8KIAlpZiAoKGN0eC0+dHhfbWF4IDwKIAkgICAgKENEQ19OQ01fTUlOX0hEUl9TSVpFICsgQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSkpIHx8CkBAIC0yOTcsNDcgKzMzNCw4NCBAQAogCS8qIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiAqLwogCiAJLyogc2V0IENSQyBNb2RlICovCi0JcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9DUkNfTU9ERTsKLQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRCk7Ci0JcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKLQlyZXEud0xlbmd0aCA9IDA7CisJaWYgKGZsYWdzICYgVVNCX0NEQ19OQ01fTkNBUF9DUkNfTU9ERSkgeworCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfU0VUX0NSQ19NT0RFOworCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRCk7CisJCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7CisJCXJlcS53TGVuZ3RoID0gMDsKIAotCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsIE5VTEwsIDAsIE5VTEwsIDEwMDApOwotCWlmIChlcnIpCi0JCXByX2RlYnVnKCJTZXR0aW5nIENSQyBtb2RlIG9mZiBmYWlsZWRcbiIpOworCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCBOVUxMLCAwLCBOVUxMLCAxMDAwKTsKKwkJaWYgKGVycikKKwkJCXByX2RlYnVnKCJTZXR0aW5nIENSQyBtb2RlIG9mZiBmYWlsZWRcbiIpOworCX0KIAotCS8qIHNldCBOVEIgZm9ybWF0ICovCi0JcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9OVEJfRk9STUFUOwotCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNihVU0JfQ0RDX05DTV9OVEIxNl9GT1JNQVQpOwotCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7Ci0JcmVxLndMZW5ndGggPSAwOworCS8qIHNldCBOVEIgZm9ybWF0LCBpZiBib3RoIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLworCWlmIChudGJfZm10X3N1cHBvcnRlZCAmIFVTQl9DRENfTkNNX05USDMyX1NJR04pIHsKKwkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwKKwkJCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFOworCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9OVEJfRk9STUFUOworCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fTlRCMTZfRk9STUFUKTsKKwkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKwkJcmVxLndMZW5ndGggPSAwOwogCi0JZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgTlVMTCwgMCwgTlVMTCwgMTAwMCk7Ci0JaWYgKGVycikKLQkJcHJfZGVidWcoIlNldHRpbmcgTlRCIGZvcm1hdCB0byAxNi1iaXQgZmFpbGVkXG4iKTsKKwkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgTlVMTCwgMCwgTlVMTCwgMTAwMCk7CisJCWlmIChlcnIpCisJCQlwcl9kZWJ1ZygiU2V0dGluZyBOVEIgZm9ybWF0IHRvIDE2LWJpdCBmYWlsZWRcbiIpOworCX0KKworCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOwogCiAJLyogc2V0IE1heCBEYXRhZ3JhbSBTaXplIChNVFUpICovCi0JcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFOwotCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfR0VUX01BWF9EQVRBR1JBTV9TSVpFOwotCXJlcS53VmFsdWUgPSAwOwotCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7Ci0JcmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNigyKTsKKwlpZiAoZmxhZ3MgJiBVU0JfQ0RDX05DTV9OQ0FQX01BWF9EQVRBR1JBTV9TSVpFKSB7CisJCV9fbGUxNiBtYXhfZGF0YWdyYW1fc2l6ZTsKKwkJdTE2IGV0aF9tYXhfc3ogPSBsZTE2X3RvX2NwdShjdHgtPmV0aGVyX2Rlc2MtPndNYXhTZWdtZW50U2l6ZSk7CiAKLQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmbWF4X2RhdGFncmFtX3NpemUsIDAsIE5VTEwsIDEwMDApOwotCWlmIChlcnIpIHsKLQkJcHJfZGVidWcoIiBHRVRfTUFYX0RBVEFHUkFNX1NJWkUgZmFpbGVkLCB1c2luZyBzaXplPSV1XG4iLAotCQkJIENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpOwotCQkvKiB1c2UgZGVmYXVsdCAqLwotCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRTsKLQl9IGVsc2UgewotCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gbGUxNl90b19jcHUobWF4X2RhdGFncmFtX3NpemUpOworCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiB8CisJCQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19HRVRfTUFYX0RBVEFHUkFNX1NJWkU7CisJCXJlcS53VmFsdWUgPSAwOworCQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOworCQlyZXEud0xlbmd0aCA9IGNwdV90b19sZTE2KDIpOwogCi0JCWlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplIDwgQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSkKLQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOwotCQllbHNlIGlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplID4gQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkKLQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFOworCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmbWF4X2RhdGFncmFtX3NpemUsIDAsIE5VTEwsCisJCQkJCQkJCQkxMDAwKTsKKwkJaWYgKGVycikgeworCQkJcHJfZGVidWcoIkdFVF9NQVhfREFUQUdSQU1fU0laRSBmYWlsZWQsIHVzZSBzaXplPSV1XG4iLAorCQkJCQkJQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSk7CisJCX0gZWxzZSB7CisJCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gbGUxNl90b19jcHUobWF4X2RhdGFncmFtX3NpemUpOworCQkJLyogQ2hlY2sgRXRoIGRlc2NyaXB0b3IgdmFsdWUgKi8KKwkJCWlmIChldGhfbWF4X3N6IDwgQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkgeworCQkJCWlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplID4gZXRoX21heF9zeikKKwkJCQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IGV0aF9tYXhfc3o7CisJCQl9IGVsc2UgeworCQkJCWlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplID4KKwkJCQkJCUNEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkUpCisJCQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPQorCQkJCQkJQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRTsKKwkJCX0KKworCQkJaWYgKGN0eC0+bWF4X2RhdGFncmFtX3NpemUgPCBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKQorCQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPQorCQkJCQlDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOworCisJCQkvKiBpZiB2YWx1ZSBjaGFuZ2VkLCB1cGRhdGUgZGV2aWNlICovCisJCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9NQVhfREFUQUdSQU1fU0laRTsKKwkJCXJlcS53VmFsdWUgPSAwOworCQkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKwkJCXJlcS53TGVuZ3RoID0gMjsKKwkJCW1heF9kYXRhZ3JhbV9zaXplID0gY3B1X3RvX2xlMTYoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSk7CisKKwkJCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsICZtYXhfZGF0YWdyYW1fc2l6ZSwKKwkJCQkJCQkJMCwgTlVMTCwgMTAwMCk7CisJCQlpZiAoZXJyKQorCQkJCXByX2RlYnVnKCJTRVRfTUFYX0RBVEFHUkFNX1NJWkUgZmFpbGVkXG4iKTsKKwkJfQorCiAJfQogCiAJaWYgKGN0eC0+bmV0ZGV2LT5tdHUgIT0gKGN0eC0+bWF4X2RhdGFncmFtX3NpemUgLSBFVEhfSExFTikpCkBAIC00NjYsMTkgKzU0MCwxMyBAQAogCiAJCQljdHgtPmV0aGVyX2Rlc2MgPQogCQkJCQkoY29uc3Qgc3RydWN0IHVzYl9jZGNfZXRoZXJfZGVzYyAqKWJ1ZjsKLQogCQkJZGV2LT5oYXJkX210dSA9CiAJCQkJbGUxNl90b19jcHUoY3R4LT5ldGhlcl9kZXNjLT53TWF4U2VnbWVudFNpemUpOwogCi0JCQlpZiAoZGV2LT5oYXJkX210dSA8Ci0JCQkgICAgKENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUgLSBFVEhfSExFTikpCi0JCQkJZGV2LT5oYXJkX210dSA9Ci0JCQkJCUNEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUgLSBFVEhfSExFTjsKLQotCQkJZWxzZSBpZiAoZGV2LT5oYXJkX210dSA+Ci0JCQkJIChDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFIC0gRVRIX0hMRU4pKQotCQkJCWRldi0+aGFyZF9tdHUgPQotCQkJCQlDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFIC0gRVRIX0hMRU47CisJCQlpZiAoZGV2LT5oYXJkX210dSA8IENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpCisJCQkJZGV2LT5oYXJkX210dSA9CUNEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkU7CisJCQllbHNlIGlmIChkZXYtPmhhcmRfbXR1ID4gQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkKKwkJCQlkZXYtPmhhcmRfbXR1ID0JQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVVNCX0NEQ19OQ01fVFlQRToKQEAgLTYyOCwxMyArNjk2LDEzIEBACiAJdTMyIG9mZnNldDsKIAl1MzIgbGFzdF9vZmZzZXQ7CiAJdTE2IG4gPSAwOwotCXU4IHRpbWVvdXQgPSAwOworCXU4IHJlYWR5MnNlbmQgPSAwOwogCiAJLyogaWYgdGhlcmUgaXMgYSByZW1haW5pbmcgc2tiLCBpdCBnZXRzIHByaW9yaXR5ICovCiAJaWYgKHNrYiAhPSBOVUxMKQogCQlzd2FwKHNrYiwgY3R4LT50eF9yZW1fc2tiKTsKIAllbHNlCi0JCXRpbWVvdXQgPSAxOworCQlyZWFkeTJzZW5kID0gMTsKIAogCS8qCiAJICogKy0tLS0tLS0tLS0tLS0tLS0rCkBAIC02ODIsOSArNzUwLDEwIEBACiAKIAlmb3IgKDsgbiA8IGN0eC0+dHhfbWF4X2RhdGFncmFtczsgbisrKSB7CiAJCS8qIGNoZWNrIGlmIGVuZCBvZiB0cmFuc21pdCBidWZmZXIgaXMgcmVhY2hlZCAqLwotCQlpZiAob2Zmc2V0ID49IGN0eC0+dHhfbWF4KQorCQlpZiAob2Zmc2V0ID49IGN0eC0+dHhfbWF4KSB7CisJCQlyZWFkeTJzZW5kID0gMTsKIAkJCWJyZWFrOwotCisJCX0KIAkJLyogY29tcHV0ZSBtYXhpbXVtIGJ1ZmZlciBzaXplICovCiAJCXJlbSA9IGN0eC0+dHhfbWF4IC0gb2Zmc2V0OwogCkBAIC03MTEsOSArNzgwLDcgQEAKIAkJCQl9CiAJCQkJY3R4LT50eF9yZW1fc2tiID0gc2tiOwogCQkJCXNrYiA9IE5VTEw7Ci0KLQkJCQkvKiBsb29wIG9uZSBtb3JlIHRpbWUgKi8KLQkJCQl0aW1lb3V0ID0gMTsKKwkJCQlyZWFkeTJzZW5kID0gMTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC03NTYsNyArODIzLDcgQEAKIAkJY3R4LT50eF9jdXJyX2xhc3Rfb2Zmc2V0ID0gbGFzdF9vZmZzZXQ7CiAJCWdvdG8gZXhpdF9ub19za2I7CiAKLQl9IGVsc2UgaWYgKChuIDwgY3R4LT50eF9tYXhfZGF0YWdyYW1zKSAmJiAodGltZW91dCA9PSAwKSkgeworCX0gZWxzZSBpZiAoKG4gPCBjdHgtPnR4X21heF9kYXRhZ3JhbXMpICYmIChyZWFkeTJzZW5kID09IDApKSB7CiAJCS8qIHdhaXQgZm9yIG1vcmUgZnJhbWVzICovCiAJCS8qIHB1c2ggdmFyaWFibGVzICovCiAJCWN0eC0+dHhfY3Vycl9za2IgPSBza2Jfb3V0OwpAQCAtODEzLDcgKzg4MCw3IEBACiAJCQkJCWNwdV90b19sZTE2KHNpemVvZihjdHgtPnR4X25jbS5udGgxNikpOwogCWN0eC0+dHhfbmNtLm50aDE2LndTZXF1ZW5jZSA9IGNwdV90b19sZTE2KGN0eC0+dHhfc2VxKTsKIAljdHgtPnR4X25jbS5udGgxNi53QmxvY2tMZW5ndGggPSBjcHVfdG9fbGUxNihsYXN0X29mZnNldCk7Ci0JY3R4LT50eF9uY20ubnRoMTYud0ZwSW5kZXggPSBBTElHTihzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX250aDE2KSwKKwljdHgtPnR4X25jbS5udGgxNi53TmRwSW5kZXggPSBBTElHTihzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX250aDE2KSwKIAkJCQkJCQljdHgtPnR4X25kcF9tb2R1bHVzKTsKIAogCW1lbWNweShza2Jfb3V0LT5kYXRhLCAmKGN0eC0+dHhfbmNtLm50aDE2KSwgc2l6ZW9mKGN0eC0+dHhfbmNtLm50aDE2KSk7CkBAIC04MjUsMTMgKzg5MiwxMyBAQAogCXJlbSA9IHNpemVvZihjdHgtPnR4X25jbS5uZHAxNikgKyAoKGN0eC0+dHhfY3Vycl9mcmFtZV9udW0gKyAxKSAqCiAJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYpKTsKIAljdHgtPnR4X25jbS5uZHAxNi53TGVuZ3RoID0gY3B1X3RvX2xlMTYocmVtKTsKLQljdHgtPnR4X25jbS5uZHAxNi53TmV4dEZwSW5kZXggPSAwOyAvKiByZXNlcnZlZCAqLworCWN0eC0+dHhfbmNtLm5kcDE2LndOZXh0TmRwSW5kZXggPSAwOyAvKiByZXNlcnZlZCAqLwogCi0JbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGN0eC0+dHhfbmNtLm50aDE2LndGcEluZGV4LAorCW1lbWNweSgoKHU4ICopc2tiX291dC0+ZGF0YSkgKyBjdHgtPnR4X25jbS5udGgxNi53TmRwSW5kZXgsCiAJCQkJCQkmKGN0eC0+dHhfbmNtLm5kcDE2KSwKIAkJCQkJCXNpemVvZihjdHgtPnR4X25jbS5uZHAxNikpOwogCi0JbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGN0eC0+dHhfbmNtLm50aDE2LndGcEluZGV4ICsKKwltZW1jcHkoKCh1OCAqKXNrYl9vdXQtPmRhdGEpICsgY3R4LT50eF9uY20ubnRoMTYud05kcEluZGV4ICsKIAkJCQkJc2l6ZW9mKGN0eC0+dHhfbmNtLm5kcDE2KSwKIAkJCQkJJihjdHgtPnR4X25jbS5kcGUxNiksCiAJCQkJCShjdHgtPnR4X2N1cnJfZnJhbWVfbnVtICsgMSkgKgpAQCAtOTYxLDcgKzEwMjgsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCXRlbXAgPSBsZTE2X3RvX2NwdShjdHgtPnJ4X25jbS5udGgxNi53RnBJbmRleCk7CisJdGVtcCA9IGxlMTZfdG9fY3B1KGN0eC0+cnhfbmNtLm50aDE2LndOZHBJbmRleCk7CiAJaWYgKCh0ZW1wICsgc2l6ZW9mKGN0eC0+cnhfbmNtLm5kcDE2KSkgPiBhY3RsZW4pIHsKIAkJcHJfZGVidWcoImludmFsaWQgRFBUMTYgaW5kZXhcbiIpOwogCQlnb3RvIGVycm9yOwpAQCAtMTA0OCwxMCArMTExNSwxMCBAQAogCiBzdGF0aWMgdm9pZAogY2RjX25jbV9zcGVlZF9jaGFuZ2Uoc3RydWN0IGNkY19uY21fY3R4ICpjdHgsCi0JCSAgICAgc3RydWN0IGNvbm5lY3Rpb25fc3BlZWRfY2hhbmdlICpkYXRhKQorCQkgICAgIHN0cnVjdCB1c2JfY2RjX3NwZWVkX2NoYW5nZSAqZGF0YSkKIHsKLQl1aW50MzJfdCByeF9zcGVlZCA9IGxlMzJfdG9fY3B1KGRhdGEtPlVTQml0UmF0ZSk7Ci0JdWludDMyX3QgdHhfc3BlZWQgPSBsZTMyX3RvX2NwdShkYXRhLT5EU0JpdFJhdGUpOworCXVpbnQzMl90IHJ4X3NwZWVkID0gbGUzMl90b19jcHUoZGF0YS0+RExCaXRSUmF0ZSk7CisJdWludDMyX3QgdHhfc3BlZWQgPSBsZTMyX3RvX2NwdShkYXRhLT5VTEJpdFJhdGUpOwogCiAJLyoKIAkgKiBDdXJyZW50bHkgdGhlIFVTQi1ORVQgQVBJIGRvZXMgbm90IHN1cHBvcnQgcmVwb3J0aW5nIHRoZSBhY3R1YWwKQEAgLTEwOTIsNyArMTE1OSw3IEBACiAJLyogdGVzdCBmb3Igc3BsaXQgZGF0YSBpbiA4LWJ5dGUgY2h1bmtzICovCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChFVkVOVF9TVFNfU1BMSVQsICZkZXYtPmZsYWdzKSkgewogCQljZGNfbmNtX3NwZWVkX2NoYW5nZShjdHgsCi0JCSAgICAgIChzdHJ1Y3QgY29ubmVjdGlvbl9zcGVlZF9jaGFuZ2UgKil1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCSAgICAgIChzdHJ1Y3QgdXNiX2NkY19zcGVlZF9jaGFuZ2UgKil1cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExMjAsMTIgKzExODcsMTIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFVTQl9DRENfTk9USUZZX1NQRUVEX0NIQU5HRToKLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8Ci0JCSAgICAoc2l6ZW9mKCpldmVudCkgKyBzaXplb2Yoc3RydWN0IGNvbm5lY3Rpb25fc3BlZWRfY2hhbmdlKSkpCisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCAoc2l6ZW9mKCpldmVudCkgKworCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9jZGNfc3BlZWRfY2hhbmdlKSkpCiAJCQlzZXRfYml0KEVWRU5UX1NUU19TUExJVCwgJmRldi0+ZmxhZ3MpOwogCQllbHNlCiAJCQljZGNfbmNtX3NwZWVkX2NoYW5nZShjdHgsCi0JCQkJKHN0cnVjdCBjb25uZWN0aW9uX3NwZWVkX2NoYW5nZSAqKSAmZXZlbnRbMV0pOworCQkJCShzdHJ1Y3QgdXNiX2NkY19zcGVlZF9jaGFuZ2UgKikgJmV2ZW50WzFdKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmluZGV4IDAyYjYyMmUuLjUwMDJmNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKQEAgLTY1MSw2ICs2NTEsMTAgQEAKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCiAJIH0sCiAJeworCSBVU0JfREVWSUNFKDB4MGZlNiwgMHg5NzAwKSwJLyogRE05NjAxIFVTQiB0byBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgKi8KKwkgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmRtOTYwMV9pbmZvLAorCSB9LAorCXsKIAkgVVNCX0RFVklDRSgweDBhNDYsIDB4OTAwMCksCS8qIERNOTAwMEUgKi8KIAkgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmRtOTYwMV9pbmZvLAogCSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCmluZGV4IGJlZDhmY2UuLjZkODM4MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYworKysgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKQEAgLTI2MjgsMTUgKzI2MjgsMTUgQEAKIAogc3RhdGljIHZvaWQgaHNvX2ZyZWVfdGlvbWdldChzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKQogewotCXN0cnVjdCBoc29fdGlvY21nZXQgKnRpb2NtZ2V0ID0gc2VyaWFsLT50aW9jbWdldDsKKwlzdHJ1Y3QgaHNvX3Rpb2NtZ2V0ICp0aW9jbWdldDsKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuOworCXRpb2NtZ2V0ID0gc2VyaWFsLT50aW9jbWdldDsKIAlpZiAodGlvY21nZXQpIHsKLQkJaWYgKHRpb2NtZ2V0LT51cmIpIHsKLQkJCXVzYl9mcmVlX3VyYih0aW9jbWdldC0+dXJiKTsKLQkJCXRpb2NtZ2V0LT51cmIgPSBOVUxMOwotCQl9CisJCXVzYl9mcmVlX3VyYih0aW9jbWdldC0+dXJiKTsKKwkJdGlvY21nZXQtPnVyYiA9IE5VTEw7CiAJCXNlcmlhbC0+dGlvY21nZXQgPSBOVUxMOwogCQlrZnJlZSh0aW9jbWdldCk7Ci0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwppbmRleCA1ZTk4NjQzLi43ZGM4NDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCkBAIC00MDYsNiArNDA2LDcgQEAKIAogCWlmIChmdy0+c2l6ZSA+IEtBV0VUSF9GSVJNV0FSRV9CVUZfU0laRSkgewogCQllcnIoIkZpcm13YXJlIHRvbyBiaWc6ICV6dSIsIGZ3LT5zaXplKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAlkYXRhX2xlbiA9IGZ3LT5zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGVkOWE0MTYuLjk1YzQxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYworKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTkzMSw4ICs5MzEsMTAgQEAKIAkJaWYgKHVyYiAhPSBOVUxMKSB7CiAJCQljbGVhcl9iaXQgKEVWRU5UX1JYX01FTU9SWSwgJmRldi0+ZmxhZ3MpOwogCQkJc3RhdHVzID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRldi0+aW50Zik7Ci0JCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCQkJZ290byBmYWlsX2xvd21lbTsKKwkJCX0KIAkJCWlmIChyeF9zdWJtaXQgKGRldiwgdXJiLCBHRlBfS0VSTkVMKSA9PSAtRU5PTElOSykKIAkJCQlyZXNjaGVkID0gMDsKIAkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IDkwYTIzZTQuLjgyZGJhNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTQ0Niw2ICs0NDYsMjAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHZpcnRuZXRfbmFwaV9lbmFibGUoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkpCit7CisJbmFwaV9lbmFibGUoJnZpLT5uYXBpKTsKKworCS8qIElmIGFsbCBidWZmZXJzIHdlcmUgZmlsbGVkIGJ5IG90aGVyIHNpZGUgYmVmb3JlIHdlIG5hcGlfZW5hYmxlZCwgd2UKKwkgKiB3b24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQsIHNvIHByb2Nlc3MgYW55IG91dHN0YW5kaW5nIHBhY2tldHMKKwkgKiBub3cuICB2aXJ0bmV0X3BvbGwgd2FudHMgcmUtZW5hYmxlIHRoZSBxdWV1ZSwgc28gd2UgZGlzYWJsZSBoZXJlLgorCSAqIFdlIHN5bmNocm9uaXplIGFnYWluc3QgaW50ZXJydXB0cyB2aWEgTkFQSV9TVEFURV9TQ0hFRCAqLworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnZpLT5uYXBpKSkgeworCQl2aXJ0cXVldWVfZGlzYWJsZV9jYih2aS0+cnZxKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCByZWZpbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmk7CkBAIC00NTQsNyArNDY4LDcgQEAKIAl2aSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdmlydG5ldF9pbmZvLCByZWZpbGwud29yayk7CiAJbmFwaV9kaXNhYmxlKCZ2aS0+bmFwaSk7CiAJc3RpbGxfZW1wdHkgPSAhdHJ5X2ZpbGxfcmVjdih2aSwgR0ZQX0tFUk5FTCk7Ci0JbmFwaV9lbmFibGUoJnZpLT5uYXBpKTsKKwl2aXJ0bmV0X25hcGlfZW5hYmxlKHZpKTsKIAogCS8qIEluIHRoZW9yeSwgdGhpcyBjYW4gaGFwcGVuOiBpZiB3ZSBkb24ndCBnZXQgYW55IGJ1ZmZlcnMgaW4KIAkgKiB3ZSB3aWxsICpuZXZlciogdHJ5IHRvIGZpbGwgYWdhaW4uICovCkBAIC02MzgsMTYgKzY1Miw3IEBACiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JbmFwaV9lbmFibGUoJnZpLT5uYXBpKTsKLQotCS8qIElmIGFsbCBidWZmZXJzIHdlcmUgZmlsbGVkIGJ5IG90aGVyIHNpZGUgYmVmb3JlIHdlIG5hcGlfZW5hYmxlZCwgd2UKLQkgKiB3b24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQsIHNvIHByb2Nlc3MgYW55IG91dHN0YW5kaW5nIHBhY2tldHMKLQkgKiBub3cuICB2aXJ0bmV0X3BvbGwgd2FudHMgcmUtZW5hYmxlIHRoZSBxdWV1ZSwgc28gd2UgZGlzYWJsZSBoZXJlLgotCSAqIFdlIHN5bmNocm9uaXplIGFnYWluc3QgaW50ZXJydXB0cyB2aWEgTkFQSV9TVEFURV9TQ0hFRCAqLwotCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnZpLT5uYXBpKSkgewotCQl2aXJ0cXVldWVfZGlzYWJsZV9jYih2aS0+cnZxKTsKLQkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7Ci0JfQorCXZpcnRuZXRfbmFwaV9lbmFibGUodmkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKaW5kZXggMDFjMDVmNS4uMjI4ZDRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwpAQCAtMzY5MCw3ICszNjkwLDcgQEAKIAlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCiAJCWdvdG8gZXhpdDsKIAotCWlmICgocnRzX3RhYmxlICE9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSkgfHwKKwlpZiAoKHJ0c190YWJsZSAhPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEpICYmCiAJICAgIChydHNfdGFibGUgIT0KIAkgICAgIFZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQpKQogCQkqZGF0YTEgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jCmluZGV4IDAwNjRiZTcuLjIxMDkxYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZG1hLmMKQEAgLTgzOCw5ICs4MzgsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBxbWF4OyBpKyspIHsKIAkJZXJyID0gYXRoNWtfaHdfc3RvcF90eF9kbWEoYWgsIGkpOwogCQkvKiAtRUlOVkFMIC0+IHF1ZXVlIGluYWN0aXZlICovCi0JCWlmIChlcnIgIT0gLUVJTlZBTCkKKwkJaWYgKGVyciAmJiBlcnIgIT0gLUVJTlZBTCkKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYwppbmRleCBlNWYyYjk2Li5hNzAyODE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCkBAIC04Niw3ICs4Niw3IEBACiAJaWYgKCFhaC0+YWhfYndtb2RlKSB7CiAJCWR1ciA9IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKHNjLT5odywKIAkJCQkJCU5VTEwsIGxlbiwgcmF0ZSk7Ci0JCXJldHVybiBkdXI7CisJCXJldHVybiBsZTE2X3RvX2NwdShkdXIpOwogCX0KIAogCWJpdHJhdGUgPSByYXRlLT5iaXRyYXRlOwpAQCAtMjY1LDggKzI2NSw2IEBACiAJCSAqIHdoYXQgcmF0ZSB3ZSBzaG91bGQgY2hvb3NlIHRvIFRYIEFDS3MuICovCiAJCXR4X3RpbWUgPSBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oYWgsIDEwLCByYXRlKTsKIAotCQl0eF90aW1lID0gbGUxNl90b19jcHUodHhfdGltZSk7Ci0KIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0eF90aW1lLCByZWcpOwogCiAJCWlmICghKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jCmluZGV4IDc4YzI2ZmQuLjYyY2UyZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMKQEAgLTI4Miw2ICsyODIsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFdhaXQgZm9yIHN5bnRoIHRvIHNldHRsZQorICovCitzdGF0aWMgdm9pZCBhdGg1a19od193YWl0X2Zvcl9zeW50aChzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCS8qCisJICogT24gNTIxMSsgcmVhZCBhY3RpdmF0aW9uIC0+IHJ4IGRlbGF5CisJICogYW5kIHVzZSBpdCAoMTAwbnMgc3RlcHMpLgorCSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCQl1MzIgZGVsYXk7CisJCWRlbGF5ID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1JYX0RFTEFZKSAmCisJCQlBUjVLX1BIWV9SWF9ERUxBWV9NOworCQlkZWxheSA9IChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKSA/CisJCQkoKGRlbGF5IDw8IDIpIC8gMjIpIDogKGRlbGF5IC8gMTApOworCQlpZiAoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV8xME1IWikKKwkJCWRlbGF5ID0gZGVsYXkgPDwgMTsKKwkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfNU1IWikKKwkJCWRlbGF5ID0gZGVsYXkgPDwgMjsKKwkJLyogWFhYOiAvMiBvbiB0dXJibyA/IExldCdzIGJlIHNhZmUKKwkJICogZm9yIG5vdyAqLworCQl1ZGVsYXkoMTAwICsgZGVsYXkpOworCX0gZWxzZSB7CisJCW1kZWxheSgxKTsKKwl9Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKipcCiAqIFJGIEdhaW4gb3B0aW1pemF0aW9uICoKQEAgLTEyNTMsNiArMTI4MSw3IEBACiAJY2FzZSBBUjVLX1JGNTExMToKIAkJcmV0ID0gYXRoNWtfaHdfcmY1MTExX2NoYW5uZWwoYWgsIGNoYW5uZWwpOwogCQlicmVhazsKKwljYXNlIEFSNUtfUkYyMzE3OgogCWNhc2UgQVI1S19SRjI0MjU6CiAJCXJldCA9IGF0aDVrX2h3X3JmMjQyNV9jaGFubmVsKGFoLCBjaGFubmVsKTsKIAkJYnJlYWs7CkBAIC0zMjM3LDYgKzMyNjYsMTMgQEAKIAkJLyogRmFpbGVkICovCiAJCWlmIChpID49IDEwMCkKIAkJCXJldHVybiAtRUlPOworCisJCS8qIFNldCBjaGFubmVsIGFuZCB3YWl0IGZvciBzeW50aCAqLworCQlyZXQgPSBhdGg1a19od19jaGFubmVsKGFoLCBjaGFubmVsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJYXRoNWtfaHdfd2FpdF9mb3Jfc3ludGgoYWgsIGNoYW5uZWwpOwogCX0KIAogCS8qCkBAIC0zMjUxLDEzICszMjg3LDUzIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIFdyaXRlIE9GRE0gdGltaW5ncyBvbiA1MjEyKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKKwkJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKKworCQlyZXQgPSBhdGg1a19od193cml0ZV9vZmRtX3RpbWluZ3MoYWgsIGNoYW5uZWwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBTcHVyIGluZm8gaXMgYXZhaWxhYmxlIG9ubHkgZnJvbSBFRVBST00gdmVyc2lvbnMKKwkJICogZ3JlYXRlciB0aGFuIDUuMywgYnV0IHRoZSBFRVBST00gcm91dGluZXMgd2lsbCB1c2UKKwkJICogc3RhdGljIHZhbHVlcyBmb3Igb2xkZXIgdmVyc2lvbnMgKi8KKwkJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVI1NDI0KQorCQkJYXRoNWtfaHdfc2V0X3NwdXJfbWl0aWdhdGlvbl9maWx0ZXIoYWgsCisJCQkJCQkJICAgIGNoYW5uZWwpOworCX0KKworCS8qIElmIHdlIHVzZWQgZmFzdCBjaGFubmVsIHN3aXRjaGluZworCSAqIHdlIGFyZSBkb25lLCByZWxlYXNlIFJGIGJ1cyBhbmQKKwkgKiBmaXJlIHVwIE5GIGNhbGlicmF0aW9uLgorCSAqCisJICogTm90ZTogT25seSBORiBjYWxpYnJhdGlvbiBkdWUgdG8KKwkgKiBjaGFubmVsIGNoYW5nZSwgbm90IEFHQyBjYWxpYnJhdGlvbgorCSAqIHNpbmNlIEFHQyBpcyBzdGlsbCBydW5uaW5nICEKKwkgKi8KKwlpZiAoZmFzdCkgeworCQkvKgorCQkgKiBSZWxlYXNlIFJGIEJ1cyBncmFudAorCQkgKi8KKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9SRkJVU19SRVEsCisJCQkJICAgIEFSNUtfUEhZX1JGQlVTX1JFUV9SRVFVRVNUKTsKKworCQkvKgorCQkgKiBTdGFydCBORiBjYWxpYnJhdGlvbgorCQkgKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0FHQ0NUTCwKKwkJCQkJQVI1S19QSFlfQUdDQ1RMX05GKTsKKworCQlyZXR1cm4gcmV0OworCX0KKwogCS8qCiAJICogRm9yIDUyMTAgd2UgZG8gYWxsIGluaXRpYWxpemF0aW9uIHVzaW5nCiAJICogaW5pdHZhbHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gbW9kaWZ5CiAJICogYW55IHNldHRpbmdzICg1MjEwIGFsc28gb25seSBzdXBwb3J0cwogCSAqIGEvYXR1cmJvIG1vZGVzKQogCSAqLwotCWlmICgoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApICYmICFmYXN0KSB7CisJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CiAKIAkJLyoKIAkJICogV3JpdGUgaW5pdGlhbCBSRiBnYWluIHNldHRpbmdzCkBAIC0zMjc2LDIyICszMzUyLDYgQEAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJLyogV3JpdGUgT0ZETSB0aW1pbmdzIG9uIDUyMTIqLwotCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKLQkJCWNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKSB7Ci0KLQkJCXJldCA9IGF0aDVrX2h3X3dyaXRlX29mZG1fdGltaW5ncyhhaCwgY2hhbm5lbCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0KLQkJCS8qIFNwdXIgaW5mbyBpcyBhdmFpbGFibGUgb25seSBmcm9tIEVFUFJPTSB2ZXJzaW9ucwotCQkJICogZ3JlYXRlciB0aGFuIDUuMywgYnV0IHRoZSBFRVBST00gcm91dGluZXMgd2lsbCB1c2UKLQkJCSAqIHN0YXRpYyB2YWx1ZXMgZm9yIG9sZGVyIHZlcnNpb25zICovCi0JCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjU0MjQpCi0JCQkJYXRoNWtfaHdfc2V0X3NwdXJfbWl0aWdhdGlvbl9maWx0ZXIoYWgsCi0JCQkJCQkJCSAgICBjaGFubmVsKTsKLQkJfQotCiAJCS8qRW5hYmxlL2Rpc2FibGUgODAyLjExYiBtb2RlIG9uIDUxMTEKIAkJKGVuYWJsZSAyMTExIGZyZXF1ZW5jeSBjb252ZXJ0ZXIgKyBDQ0spKi8KIAkJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkgewpAQCAtMzMyMiw0NyArMzM4MiwyMCBAQAogCSAqLwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQUNUX0VOQUJMRSwgQVI1S19QSFlfQUNUKTsKIAotCS8qCi0JICogT24gNTIxMSsgcmVhZCBhY3RpdmF0aW9uIC0+IHJ4IGRlbGF5Ci0JICogYW5kIHVzZSBpdC4KLQkgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJdTMyIGRlbGF5OwotCQlkZWxheSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9SWF9ERUxBWSkgJgotCQkJQVI1S19QSFlfUlhfREVMQVlfTTsKLQkJZGVsYXkgPSAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgPwotCQkJKChkZWxheSA8PCAyKSAvIDIyKSA6IChkZWxheSAvIDEwKTsKLQkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfMTBNSFopCi0JCQlkZWxheSA9IGRlbGF5IDw8IDE7Ci0JCWlmIChhaC0+YWhfYndtb2RlID09IEFSNUtfQldNT0RFXzVNSFopCi0JCQlkZWxheSA9IGRlbGF5IDw8IDI7Ci0JCS8qIFhYWDogLzIgb24gdHVyYm8gPyBMZXQncyBiZSBzYWZlCi0JCSAqIGZvciBub3cgKi8KLQkJdWRlbGF5KDEwMCArIGRlbGF5KTsKLQl9IGVsc2UgewotCQltZGVsYXkoMSk7Ci0JfQorCWF0aDVrX2h3X3dhaXRfZm9yX3N5bnRoKGFoLCBjaGFubmVsKTsKIAotCWlmIChmYXN0KQotCQkvKgotCQkgKiBSZWxlYXNlIFJGIEJ1cyBncmFudAotCQkgKi8KLQkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9SRkJVU19SRVEsCi0JCQkJICAgIEFSNUtfUEhZX1JGQlVTX1JFUV9SRVFVRVNUKTsKLQllbHNlIHsKLQkJLyoKLQkJICogUGVyZm9ybSBBREMgdGVzdCB0byBzZWUgaWYgYmFzZWJhbmQgaXMgcmVhZHkKLQkJICogU2V0IHR4IGhvbGQgYW5kIGNoZWNrIGFkYyB0ZXN0IHJlZ2lzdGVyCi0JCSAqLwotCQlwaHlfdHN0MSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UU1QxKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9UU1QxX1RYSE9MRCwgQVI1S19QSFlfVFNUMSk7Ci0JCWZvciAoaSA9IDA7IGkgPD0gMjA7IGkrKykgewotCQkJaWYgKCEoYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX0FEQ19URVNUKSAmIDB4MTApKQotCQkJCWJyZWFrOwotCQkJdWRlbGF5KDIwMCk7Ci0JCX0KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBwaHlfdHN0MSwgQVI1S19QSFlfVFNUMSk7CisJLyoKKwkgKiBQZXJmb3JtIEFEQyB0ZXN0IHRvIHNlZSBpZiBiYXNlYmFuZCBpcyByZWFkeQorCSAqIFNldCB0eCBob2xkIGFuZCBjaGVjayBhZGMgdGVzdCByZWdpc3RlcgorCSAqLworCXBoeV90c3QxID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1RTVDEpOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfVFNUMV9UWEhPTEQsIEFSNUtfUEhZX1RTVDEpOworCWZvciAoaSA9IDA7IGkgPD0gMjA7IGkrKykgeworCQlpZiAoIShhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfQURDX1RFU1QpICYgMHgxMCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDIwMCk7CiAJfQorCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcGh5X3RzdDEsIEFSNUtfUEhZX1RTVDEpOwogCiAJLyoKIAkgKiBTdGFydCBhdXRvbWF0aWMgZ2FpbiBjb250cm9sIGNhbGlicmF0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMKaW5kZXggZjhhNzc3MS4uZjQ0Yzg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYwpAQCAtNDI2LDkgKzQyNiw4IEBACiAJCX0KIAogCQkvKiBXQVIgZm9yIEFTUE0gc3lzdGVtIGhhbmcgKi8KLQkJaWYgKEFSX1NSRVZfOTI4MChhaCkgfHwgQVJfU1JFVl85Mjg1KGFoKSB8fCBBUl9TUkVWXzkyODcoYWgpKSB7CisJCWlmIChBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI4NyhhaCkpCiAJCQl2YWwgfD0gKEFSX1dBX0JJVDYgfCBBUl9XQV9CSVQ3KTsKLQkJfQogCiAJCWlmIChBUl9TUkVWXzkyODVFXzIwKGFoKSkKIAkJCXZhbCB8PSBBUl9XQV9CSVQyMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKaW5kZXggMzY4MWNhZjUuLjFhN2ZhNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9xb3NfcGFyYW1zLmg+CiAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgpAQCAtNTcsOCArNTYsNiBAQAogCiAjZGVmaW5lIEFfTUFYKGEsIGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCiAKLSNkZWZpbmUgQVRIOUtfUE1fUU9TX0RFRkFVTFRfVkFMVUUJNTUKLQogI2RlZmluZSBUU0ZfVE9fVFUoX2gsX2wpIFwKIAkoKCgodTMyKShfaCkpIDw8IDIyKSB8ICgoKHUzMikoX2wpKSA+PiAxMCkpCiAKQEAgLTIxOCw2ICsyMTUsNyBAQAogc3RydWN0IGF0aF9idWZfc3RhdGUgewogCXU4IGJmX3R5cGU7CiAJdTggYmZzX3BhcHJkOworCXVuc2lnbmVkIGxvbmcgYmZzX3BhcHJkX3RpbWVzdGFtcDsKIAllbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgYmZzX2Z0eXBlOwogfTsKIApAQCAtNTkzLDcgKzU5MSw2IEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHBhcHJkX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGh3X2NoZWNrX3dvcms7CiAJc3RydWN0IGNvbXBsZXRpb24gcGFwcmRfY29tcGxldGU7Ci0JYm9vbCBwYXByZF9wZW5kaW5nOwogCiAJdTMyIGludHJzdGF0dXM7CiAJdTMyIHNjX2ZsYWdzOyAvKiBTQ19PUF8qICovCkBAIC02MzMsOCArNjMwLDYgQEAKIAlzdHJ1Y3QgYXRoX2Rlc2NkbWEgdHhzZG1hOwogCiAJc3RydWN0IGF0aF9hbnRfY29tYiBhbnRfY29tYjsKLQotCXN0cnVjdCBwbV9xb3NfcmVxdWVzdF9saXN0IHBtX3Fvc19yZXE7CiB9OwogCiBzdHJ1Y3QgYXRoX3dpcGh5IHsKQEAgLTY2Niw3ICs2NjEsNiBAQAogZXh0ZXJuIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDlrX29wczsKIGV4dGVybiBpbnQgYXRoOWtfbW9kcGFyYW1fbm9od2NyeXB0OwogZXh0ZXJuIGludCBsZWRfYmxpbms7Ci1leHRlcm4gaW50IGF0aDlrX3BtX3Fvc192YWx1ZTsKIGV4dGVybiBib29sIGlzX2F0aDlrX3VubG9hZGVkOwogCiBpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYwppbmRleCA1YWIzMDg0Li4wN2IxNjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMKQEAgLTIxOSw4ICsyMTksOSBAQAogCXN0cnVjdCB0eF9idWYgKnR4X2J1ZiA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBOVUxMOwogCWludCByZXQgPSAwLCBpOwotCXUxNiAqaGRyLCB0eF9za2JfY250ID0gMDsKKwl1MTYgdHhfc2tiX2NudCA9IDA7CiAJdTggKmJ1ZjsKKwlfX2xlMTYgKmhkcjsKIAogCWlmIChoaWZfZGV2LT50eC50eF9za2JfY250ID09IDApCiAJCXJldHVybiAwOwpAQCAtMjQ1LDkgKzI0Niw5IEBACiAKIAkJYnVmID0gdHhfYnVmLT5idWY7CiAJCWJ1ZiArPSB0eF9idWYtPm9mZnNldDsKLQkJaGRyID0gKHUxNiAqKWJ1ZjsKLQkJKmhkcisrID0gbnNrYi0+bGVuOwotCQkqaGRyKysgPSBBVEhfVVNCX1RYX1NUUkVBTV9NT0RFX1RBRzsKKwkJaGRyID0gKF9fbGUxNiAqKWJ1ZjsKKwkJKmhkcisrID0gY3B1X3RvX2xlMTYobnNrYi0+bGVuKTsKKwkJKmhkcisrID0gY3B1X3RvX2xlMTYoQVRIX1VTQl9UWF9TVFJFQU1fTU9ERV9UQUcpOwogCQlidWYgKz0gNDsKIAkJbWVtY3B5KGJ1ZiwgbnNrYi0+ZGF0YSwgbnNrYi0+bGVuKTsKIAkJdHhfYnVmLT5sZW4gPSBuc2tiLT5sZW4gKyA0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCmluZGV4IDM4NDMzZjkuLjAzNTJmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKQEAgLTE0Miw5ICsxNDIsNiBAQAogewogCWF0aDlrX2h0Y19leGl0X2RlYnVnKHByaXYtPmFoKTsKIAlhdGg5a19od19kZWluaXQocHJpdi0+YWgpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+c3diYV90YXNrbGV0KTsKLQl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+dHhfdGFza2xldCk7CiAJa2ZyZWUocHJpdi0+YWgpOwogCXByaXYtPmFoID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYwppbmRleCBmNGQ1NzZiLi42YmI1OTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jCkBAIC0xMDI1LDEyICsxMDI1LDYgQEAKIAlpbnQgcmV0ID0gMDsKIAl1OCBjbWRfcnNwOwogCi0JLyogQ2FuY2VsIGFsbCB0aGUgcnVubmluZyB0aW1lcnMvd29yayAuLiAqLwotCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZhdGFsX3dvcmspOwotCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBzX3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXRoOWtfbGVkX2JsaW5rX3dvcmspOwotCWF0aDlrX2xlZF9zdG9wX2JyaWdodG5lc3MocHJpdik7Ci0KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9JTlZBTElEKSB7CkBAIC0xMDQ0LDggKzEwMzgsMjMgQEAKIAlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOwogCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOwogCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7CisKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnN3YmFfdGFza2xldCk7CisJdGFza2xldF9raWxsKCZwcml2LT5yeF90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnR4X3Rhc2tsZXQpOworCiAJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT50eF9xdWV1ZSk7CiAKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCS8qIENhbmNlbCBhbGwgdGhlIHJ1bm5pbmcgdGltZXJzL3dvcmsgLi4gKi8KKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5mYXRhbF93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5wc193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrKTsKKwlhdGg5a19sZWRfc3RvcF9icmlnaHRuZXNzKHByaXYpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCiAJLyogUmVtb3ZlIG1vbml0b3IgaW50ZXJmYWNlIGhlcmUgKi8KIAlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CiAJCWlmIChhdGg5a19odGNfcmVtb3ZlX21vbml0b3JfaW50ZXJmYWNlKHByaXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCAxYWZiOGJiLi45ZjAxZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMzY5LDYgKzM2OSw5IEBACiAJZWxzZQogCQlhaC0+Y29uZmlnLmh0X2VuYWJsZSA9IDA7CiAKKwkvKiBQQVBSRCBuZWVkcyBzb21lIG1vcmUgd29yayB0byBiZSBlbmFibGVkICovCisJYWgtPmNvbmZpZy5wYXByZF9kaXNhYmxlID0gMTsKKwogCWFoLT5jb25maWcucnhfaW50cl9taXRpZ2F0aW9uID0gdHJ1ZTsKIAlhaC0+Y29uZmlnLnBjaWVTZXJEZXNXcml0ZSA9IHRydWU7CiAKQEAgLTE5MzMsNyArMTkzNiw4IEBACiAJCXBDYXAtPnJ4X3N0YXR1c19sZW4gPSBzaXplb2Yoc3RydWN0IGFyOTAwM19yeHMpOwogCQlwQ2FwLT50eF9kZXNjX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXI5MDAzX3R4Yyk7CiAJCXBDYXAtPnR4c19sZW4gPSBzaXplb2Yoc3RydWN0IGFyOTAwM190eHMpOwotCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9QQVBSRCkpCisJCWlmICghYWgtPmNvbmZpZy5wYXByZF9kaXNhYmxlICYmCisJCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1BBUFJEKSkKIAkJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX1BBUFJEOwogCX0gZWxzZSB7CiAJCXBDYXAtPnR4X2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCmluZGV4IDVhM2RmZWMuLmVhOWZkZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCkBAIC0yMjUsNiArMjI1LDcgQEAKIAl1MzIgcGNpZV93YWVuOwogCXU4IGFuYWxvZ19zaGlmdHJlZzsKIAl1OCBodF9lbmFibGU7CisJdTggcGFwcmRfZGlzYWJsZTsKIAl1MzIgb2ZkbV90cmlnX2xvdzsKIAl1MzIgb2ZkbV90cmlnX2hpZ2g7CiAJdTMyIGNja190cmlnX2hpZ2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwppbmRleCA3NjdkOGI4Li5hMDMzZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKQEAgLTQxLDEwICs0MSw2IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoYnRjb2V4X2VuYWJsZSwgYXRoOWtfYnRjb2V4X2VuYWJsZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYnRjb2V4X2VuYWJsZSwgIkVuYWJsZSB3aWZpLUJUIGNvZXhpc3RlbmNlIik7CiAKLWludCBhdGg5a19wbV9xb3NfdmFsdWUgPSBBVEg5S19QTV9RT1NfREVGQVVMVF9WQUxVRTsKLW1vZHVsZV9wYXJhbV9uYW1lZChwbXFvcywgYXRoOWtfcG1fcW9zX3ZhbHVlLCBpbnQsIFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBtcW9zLCAiVXNlciBzcGVjaWZpZWQgUE0tUU9TIHZhbHVlIik7Ci0KIGJvb2wgaXNfYXRoOWtfdW5sb2FkZWQ7CiAvKiBXZSB1c2UgdGhlIGh3X3ZhbHVlIGFzIGFuIGluZGV4IGludG8gb3VyIHByaXZhdGUgY2hhbm5lbCBzdHJ1Y3R1cmUgKi8KIApAQCAtNTk4LDggKzU5NCw2IEBACiBlcnJfcXVldWVzOgogCWF0aDlrX2h3X2RlaW5pdChhaCk7CiBlcnJfaHc6Ci0JdGFza2xldF9raWxsKCZzYy0+aW50cl90cSk7Ci0JdGFza2xldF9raWxsKCZzYy0+YmNvbl90YXNrbGV0KTsKIAogCWtmcmVlKGFoKTsKIAlzYy0+c2NfYWggPSBOVUxMOwpAQCAtNzY0LDkgKzc1OCw2IEBACiAJYXRoX2luaXRfbGVkcyhzYyk7CiAJYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKIAotCXBtX3Fvc19hZGRfcmVxdWVzdCgmc2MtPnBtX3Fvc19yZXEsIFBNX1FPU19DUFVfRE1BX0xBVEVOQ1ksCi0JCQkgICBQTV9RT1NfREVGQVVMVF9WQUxVRSk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyb3Jfd29ybGQ6CkBAIC04MDcsOSArNzk4LDYgQEAKIAogCWF0aDlrX2h3X2RlaW5pdChzYy0+c2NfYWgpOwogCi0JdGFza2xldF9raWxsKCZzYy0+aW50cl90cSk7Ci0JdGFza2xldF9raWxsKCZzYy0+YmNvbl90YXNrbGV0KTsKLQogCWtmcmVlKHNjLT5zY19haCk7CiAJc2MtPnNjX2FoID0gTlVMTDsKIH0KQEAgLTgyNCw2ICs4MTIsOCBAQAogCXdpcGh5X3Jma2lsbF9zdG9wX3BvbGxpbmcoc2MtPmh3LT53aXBoeSk7CiAJYXRoX2RlaW5pdF9sZWRzKHNjKTsKIAorCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOworCiAJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKIAkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5zZWNfd2lwaHlbaV07CiAJCWlmIChhcGh5ID09IE5VTEwpCkBAIC04MzQsNyArODI0LDYgQEAKIAl9CiAKIAlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhodyk7Ci0JcG1fcW9zX3JlbW92ZV9yZXF1ZXN0KCZzYy0+cG1fcW9zX3JlcSk7CiAJYXRoX3J4X2NsZWFudXAoc2MpOwogCWF0aF90eF9jbGVhbnVwKHNjKTsKIAlhdGg5a19kZWluaXRfc29mdGMoc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCmluZGV4IDE4MDE3MGQuLjI5MTViMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKQEAgLTg4NSw3ICs4ODUsNyBAQAogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCiAJaWYgKCEoaW50cyAmIEFUSDlLX0lOVF9HTE9CQUwpKQotCQlhdGg5a19od19lbmFibGVfaW50ZXJydXB0cyhhaCk7CisJCWF0aDlrX2h3X2Rpc2FibGVfaW50ZXJydXB0cyhhaCk7CiAKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsICIweCV4ID0+IDB4JXhcbiIsIG9tYXNrLCBpbnRzKTsKIApAQCAtOTYzLDcgKzk2Myw4IEBACiAJCQlSRUdfQ0xSX0JJVChhaCwgQVJfSU1SX1M1LCBBUl9JTVJfUzVfVElNX1RJTUVSKTsKIAl9CiAKLQlhdGg5a19od19lbmFibGVfaW50ZXJydXB0cyhhaCk7CisJaWYgKGludHMgJiBBVEg5S19JTlRfR0xPQkFMKQorCQlhdGg5a19od19lbmFibGVfaW50ZXJydXB0cyhhaCk7CiAKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwppbmRleCBmOTBhNmNhLi5hMDlkMTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKQEAgLTMyNSw2ICszMjUsOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgdHhjdGw7CiAJaW50IHRpbWVfbGVmdDsKIApAQCAtMzQwLDE0ICszNDIsMTYgQEAKIAl0eF9pbmZvLT5jb250cm9sLnJhdGVzWzFdLmlkeCA9IC0xOwogCiAJaW5pdF9jb21wbGV0aW9uKCZzYy0+cGFwcmRfY29tcGxldGUpOwotCXNjLT5wYXByZF9wZW5kaW5nID0gdHJ1ZTsKIAl0eGN0bC5wYXByZCA9IEJJVChjaGFpbik7Ci0JaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApCisKKwlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19YTUlULCAiUEFQUkQgVFggZmFpbGVkXG4iKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc2MtPnBhcHJkX2NvbXBsZXRlLAogCQkJbXNlY3NfdG9famlmZmllcyhBVEhfUEFQUkRfVElNRU9VVCkpOwotCXNjLT5wYXByZF9wZW5kaW5nID0gZmFsc2U7CiAKIAlpZiAoIXRpbWVfbGVmdCkKIAkJYXRoX2RiZyhhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19DQUxJQlJBVEUsCkBAIC01OTIsMTQgKzU5NiwxMiBAQAogCXUzMiBzdGF0dXMgPSBzYy0+aW50cnN0YXR1czsKIAl1MzIgcnhtYXNrOwogCi0JYXRoOWtfcHNfd2FrZXVwKHNjKTsKLQogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRkFUQUwpIHsKIAkJYXRoX3Jlc2V0KHNjLCB0cnVlKTsKLQkJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJCXJldHVybjsKIAl9CiAKKwlhdGg5a19wc193YWtldXAoc2MpOwogCXNwaW5fbG9jaygmc2MtPnNjX3BjdV9sb2NrKTsKIAogCWlmICghYXRoOWtfaHdfY2hlY2tfYWxpdmUoYWgpKQpAQCAtOTU1LDggKzk1Nyw2IEBACiAKIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKLQotCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9GVUxMX1NMRUVQKTsKIH0KIAogaW50IGF0aF9yZXNldChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKQEAgLTk2OSw2ICs5NjksNyBAQAogCS8qIFN0b3AgQU5JICovCiAJZGVsX3RpbWVyX3N5bmMoJmNvbW1vbi0+YW5pLnRpbWVyKTsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOwogCiAJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKQEAgLTEwMTUsNiArMTAxNiw3IEBACiAKIAkvKiBTdGFydCBBTkkgKi8KIAlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTExNzEsMTIgKzExNzMsNiBAQAogCQkJYXRoOWtfYnRjb2V4X3RpbWVyX3Jlc3VtZShzYyk7CiAJfQogCi0JLyogVXNlciBoYXMgdGhlIG9wdGlvbiB0byBwcm92aWRlIHBtLXFvcyB2YWx1ZSBhcyBhIG1vZHVsZQotCSAqIHBhcmFtZXRlciByYXRoZXIgdGhhbiB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZgotCSAqICdBVEg5S19QTV9RT1NfREVGQVVMVF9WQUxVRScuCi0JICovCi0JcG1fcW9zX3VwZGF0ZV9yZXF1ZXN0KCZzYy0+cG1fcW9zX3JlcSwgYXRoOWtfcG1fcW9zX3ZhbHVlKTsKLQogCWlmIChhaC0+Y2Fwcy5wY2llX2xjcl9leHRzeW5jX2VuICYmIGNvbW1vbi0+YnVzX29wcy0+ZXh0bl9zeW5jaF9lbikKIAkJY29tbW9uLT5idXNfb3BzLT5leHRuX3N5bmNoX2VuKGNvbW1vbik7CiAKQEAgLTEzMDksNiArMTMwNSw5IEBACiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAKKwkvKiBwcmV2ZW50IHRhc2tsZXRzIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIG9uY2Ugd2UgZGlzYWJsZSB0aGVtICovCisJYWgtPmltYXNrICY9IH5BVEg5S19JTlRfR0xPQkFMOworCiAJLyogbWFrZSBzdXJlIGgvdyB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0CiAJICogYmVmb3JlIHNldHRpbmcgdGhlIGludmFsaWQgZmxhZy4gKi8KIAlhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoYWgpOwpAQCAtMTMyNiw2ICsxMzI1LDEyIEBACiAKIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAorCS8qIHdlIGNhbiBub3cgc3luYyBpcnEgYW5kIGtpbGwgYW55IHJ1bm5pbmcgdGFza2xldHMsIHNpbmNlIHdlIGFscmVhZHkKKwkgKiBkaXNhYmxlZCBpbnRlcnJ1cHRzIGFuZCBub3QgaG9sZGluZyBhIHNwaW4gbG9jayAqLworCXN5bmNocm9uaXplX2lycShzYy0+aXJxKTsKKwl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKKwl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOworCiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAKIAlzYy0+cHNfaWRsZSA9IHRydWU7CkBAIC0xMzM0LDggKzEzMzksNiBAQAogCiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0lOVkFMSUQ7CiAKLQlwbV9xb3NfdXBkYXRlX3JlcXVlc3QoJnNjLT5wbV9xb3NfcmVxLCBQTV9RT1NfREVGQVVMVF9WQUxVRSk7Ci0KIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJEcml2ZXIgaGFsdFxuIik7CkBAIC0xNzAxLDcgKzE3MDQsOSBAQAogc2tpcF9jaGFuX2NoYW5nZToKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikgewogCQlzYy0+Y29uZmlnLnR4cG93bGltaXQgPSAyICogY29uZi0+cG93ZXJfbGV2ZWw7CisJCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJCWF0aF91cGRhdGVfdHhwb3coc2MpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAl9CiAKIAlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCmluZGV4IDMzMmQxZmUuLjA3Yjc4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwpAQCAtMTcyNSw2ICsxNzI1LDkgQEAKIAkJCWFyOTAwM19od19zZXRfcGFwcmRfdHhkZXNjKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsCiAJCQkJCQkgICBiZi0+YmZfc3RhdGUuYmZzX3BhcHJkKTsKIAorCQlpZiAodHhjdGwtPnBhcHJkKQorCQkJYmYtPmJmX3N0YXRlLmJmc19wYXByZF90aW1lc3RhbXAgPSBqaWZmaWVzOworCiAJCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhjdGwtPnR4cSwgdGlkLCAmYmZfaGVhZCk7CiAJfQogCkBAIC0xODg2LDcgKzE4ODksOSBAQAogCWJmLT5iZl9idWZfYWRkciA9IDA7CiAKIAlpZiAoYmYtPmJmX3N0YXRlLmJmc19wYXByZCkgewotCQlpZiAoIXNjLT5wYXByZF9wZW5kaW5nKQorCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQkJCWJmLT5iZl9zdGF0ZS5iZnNfcGFwcmRfdGltZXN0YW1wICsKKwkJCQltc2Vjc190b19qaWZmaWVzKEFUSF9QQVBSRF9USU1FT1VUKSkpCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQllbHNlCiAJCQljb21wbGV0ZSgmc2MtPnBhcHJkX2NvbXBsZXRlKTsKQEAgLTIxMTMsOSArMjExOCw3IEBACiAJaWYgKG5lZWRyZXNldCkgewogCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX1JFU0VULAogCQkJInR4IGh1bmcsIHJlc2V0dGluZyB0aGUgY2hpcFxuIik7Ci0JCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJCWF0aF9yZXNldChzYywgdHJ1ZSk7Ci0JCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCX0KIAogCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCmluZGV4IDkzOWEwZTkuLjg0ODY2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCkBAIC01NjQsNyArNTY0LDcgQEAKIAljYW0gPSBpZWVlODAyMTFfY2hlY2tfdGltKHRpbV9pZSwgdGltX2xlbiwgYXItPmNvbW1vbi5jdXJhaWQpOwogCiAJLyogMi4gTWF5YmUgdGhlIEFQIHdhbnRzIHRvIHNlbmQgbXVsdGljYXN0L2Jyb2FkY2FzdCBkYXRhPyAqLwotCWNhbSA9ICEhKHRpbV9pZS0+Yml0bWFwX2N0cmwgJiAweDAxKTsKKwljYW0gfD0gISEodGltX2llLT5iaXRtYXBfY3RybCAmIDB4MDEpOwogCiAJaWYgKCFjYW0pIHsKIAkJLyogYmFjayB0byBsb3ctcG93ZXIgbGFuZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC91c2IuYwppbmRleCA1Mzc3MzJlLi5mODJjNDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3VzYi5jCkBAIC0xMTgsNiArMTE4LDggQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNTdjLCAweDg0MDIpIH0sCiAJLyogUXdlc3QvQWN0aW9udGVjIDgwMkFJTiBXaXJlbGVzcyBOIFVTQiBOZXR3b3JrIEFkYXB0ZXIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNjY4LCAweDEyMDApIH0sCisJLyogQWlybGl2ZSBYLlVTQiBhL2IvZy9uICovCisJeyBVU0JfREVWSUNFKDB4MWI3NSwgMHg5MTcwKSB9LAogCiAJLyogdGVybWluYXRlICovCiAJe30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwppbmRleCBhOWI4NTJiLi4zOWI2ZjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC00MDIsNzIgKzQwMiw2IEBACiB9CiAjZW5kaWYKIAotLyoqCi0gKiBpd2wzOTQ1X2dvb2RfcGxjcF9oZWFsdGggLSBjaGVja3MgZm9yIHBsY3AgZXJyb3IuCi0gKgotICogV2hlbiB0aGUgcGxjcCBlcnJvciBpcyBleGNlZWRpbmcgdGhlIHRocmVzaG9sZHMsIHJlc2V0IHRoZSByYWRpbwotICogdG8gaW1wcm92ZSB0aGUgdGhyb3VnaHB1dC4KLSAqLwotc3RhdGljIGJvb2wgaXdsMzk0NV9nb29kX3BsY3BfaGVhbHRoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0KQotewotCWJvb2wgcmMgPSB0cnVlOwotCXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MgY3VycmVudF9zdGF0OwotCWludCBjb21iaW5lZF9wbGNwX2RlbHRhOwotCXVuc2lnbmVkIGludCBwbGNwX21zZWM7Ci0JdW5zaWduZWQgbG9uZyBwbGNwX3JlY2VpdmVkX2ppZmZpZXM7Ci0KLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+cGxjcF9kZWx0YV90aHJlc2hvbGQgPT0KLQkgICAgSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfRElTQUJMRSkgewotCQlJV0xfREVCVUdfUkFESU8ocHJpdiwgInBsY3BfZXJyIGNoZWNrIGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQltZW1jcHkoJmN1cnJlbnRfc3RhdCwgcGt0LT51LnJhdywgc2l6ZW9mKHN0cnVjdAotCQkJaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzKSk7Ci0JLyoKLQkgKiBjaGVjayBmb3IgcGxjcF9lcnIgYW5kIHRyaWdnZXIgcmFkaW8gcmVzZXQgaWYgaXQgZXhjZWVkcwotCSAqIHRoZSBwbGNwIGVycm9yIHRocmVzaG9sZCBwbGNwX2RlbHRhLgotCSAqLwotCXBsY3BfcmVjZWl2ZWRfamlmZmllcyA9IGppZmZpZXM7Ci0JcGxjcF9tc2VjID0gamlmZmllc190b19tc2VjcygobG9uZykgcGxjcF9yZWNlaXZlZF9qaWZmaWVzIC0KLQkJCQkJKGxvbmcpIHByaXYtPnBsY3BfamlmZmllcyk7Ci0JcHJpdi0+cGxjcF9qaWZmaWVzID0gcGxjcF9yZWNlaXZlZF9qaWZmaWVzOwotCS8qCi0JICogY2hlY2sgdG8gbWFrZSBzdXJlIHBsY3BfbXNlYyBpcyBub3QgMCB0byBwcmV2ZW50IGRpdmlzaW9uCi0JICogYnkgemVyby4KLQkgKi8KLQlpZiAocGxjcF9tc2VjKSB7Ci0JCWNvbWJpbmVkX3BsY3BfZGVsdGEgPQotCQkJKGxlMzJfdG9fY3B1KGN1cnJlbnRfc3RhdC5yeC5vZmRtLnBsY3BfZXJyKSAtCi0JCQlsZTMyX3RvX2NwdShwcml2LT5fMzk0NS5zdGF0aXN0aWNzLnJ4Lm9mZG0ucGxjcF9lcnIpKTsKLQotCQlpZiAoKGNvbWJpbmVkX3BsY3BfZGVsdGEgPiAwKSAmJgotCQkJKChjb21iaW5lZF9wbGNwX2RlbHRhICogMTAwKSAvIHBsY3BfbXNlYykgPgotCQkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+cGxjcF9kZWx0YV90aHJlc2hvbGQpIHsKLQkJCS8qCi0JCQkgKiBpZiBwbGNwX2VyciBleGNlZWQgdGhlIHRocmVzaG9sZCwgdGhlIGZvbGxvd2luZwotCQkJICogZGF0YSBpcyBwcmludGVkIGluIGNzdiBmb3JtYXQ6Ci0JCQkgKiAgICBUZXh0OiBwbGNwX2VyciBleGNlZWRlZCAlZCwKLQkJCSAqICAgIFJlY2VpdmVkIG9mZG0ucGxjcF9lcnIsCi0JCQkgKiAgICBDdXJyZW50IG9mZG0ucGxjcF9lcnIsCi0JCQkgKiAgICBjb21iaW5lZF9wbGNwX2RlbHRhLAotCQkJICogICAgcGxjcF9tc2VjCi0JCQkgKi8KLQkJCUlXTF9ERUJVR19SQURJTyhwcml2LCAicGxjcF9lcnIgZXhjZWVkZWQgJXUsICIKLQkJCQkiJXUsICVkLCAldSBtU2Vjc1xuIiwKLQkJCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5wbGNwX2RlbHRhX3RocmVzaG9sZCwKLQkJCQlsZTMyX3RvX2NwdShjdXJyZW50X3N0YXQucngub2ZkbS5wbGNwX2VyciksCi0JCQkJY29tYmluZWRfcGxjcF9kZWx0YSwgcGxjcF9tc2VjKTsKLQkJCS8qCi0JCQkgKiBSZXNldCB0aGUgUkYgcmFkaW8gZHVlIHRvIHRoZSBoaWdoIHBsY3AKLQkJCSAqIGVycm9yIHJhdGUKLQkJCSAqLwotCQkJcmMgPSBmYWxzZTsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KIHZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CkBAIC0yNzM0LDcgKzI2NjgsNiBAQAogCS5pc3Jfb3BzID0gewogCQkuaXNyID0gaXdsX2lzcl9sZWdhY3ksCiAJfSwKLQkuY2hlY2tfcGxjcF9oZWFsdGggPSBpd2wzOTQ1X2dvb2RfcGxjcF9oZWFsdGgsCiAKIAkuZGVidWdmc19vcHMgPSB7CiAJCS5yeF9zdGF0c19yZWFkID0gaXdsMzk0NV91Y29kZV9yeF9zdGF0c19yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IDNmMWU1ZjEuLjkxYTlmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTI2MjQsNiArMjYyNCw3IEBACiAJLmZ3X25hbWVfcHJlID0gSVdMNDk2NV9GV19QUkUsCiAJLnVjb2RlX2FwaV9tYXggPSBJV0w0OTY1X1VDT0RFX0FQSV9NQVgsCiAJLnVjb2RlX2FwaV9taW4gPSBJV0w0OTY1X1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAogCS52YWxpZF90eF9hbnQgPSBBTlRfQUIsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNDk2NV9FRVBST01fVkVSU0lPTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCA3OWFiMGE2Li41MzdmYjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC01MSw3ICs1MSw3IEBACiAjaW5jbHVkZSAiaXdsLWFnbi1kZWJ1Z2ZzLmgiCiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCi0jZGVmaW5lIElXTDUwMDBfVUNPREVfQVBJX01BWCAyCisjZGVmaW5lIElXTDUwMDBfVUNPREVfQVBJX01BWCA1CiAjZGVmaW5lIElXTDUxNTBfVUNPREVfQVBJX01BWCAyCiAKIC8qIExvd2VzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwppbmRleCBhZjUwNWJjLi5lZjM2YWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCkBAIC02ODEsNiArNjgxLDggQEAKIAkuZndfbmFtZV9wcmUgPSBJV0w2MDUwX0ZXX1BSRSwJCQkJXAogCS51Y29kZV9hcGlfbWF4ID0gSVdMNjA1MF9VQ09ERV9BUElfTUFYLAkJCVwKIAkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwJCQlcCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwJCS8qIC5jZmcgb3ZlcndyaXRlICovCVwKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAkJLyogLmNmZyBvdmVyd3JpdGUgKi8JXAogCS5vcHMgPSAmaXdsNjA1MF9vcHMsCQkJCQlcCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNjA1MF9FRVBST01fVkVSU0lPTiwJCVwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDUwX1RYX1BPV0VSX1ZFUlNJT04sCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYwppbmRleCAxNGNlYjRkLi4yN2I1YTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jCkBAIC0xNTIsMTEgKzE1MiwxNCBAQAogCiAJZWVwcm9tX3NrdSA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fU0tVX0NBUCk7CiAKLQlwcml2LT5jZmctPnNrdSA9ICgoZWVwcm9tX3NrdSAmIEVFUFJPTV9TS1VfQ0FQX0JBTkRfU0VMRUNUSU9OKSA+PgorCWlmICghcHJpdi0+Y2ZnLT5za3UpIHsKKwkJLyogbm90IHVzaW5nIHNrdSBvdmVyd3JpdGUgKi8KKwkJcHJpdi0+Y2ZnLT5za3UgPQorCQkJKChlZXByb21fc2t1ICYgRUVQUk9NX1NLVV9DQVBfQkFORF9TRUxFQ1RJT04pID4+CiAJCQlFRVBST01fU0tVX0NBUF9CQU5EX1BPUyk7Ci0JaWYgKGVlcHJvbV9za3UgJiBFRVBST01fU0tVX0NBUF8xMU5fRU5BQkxFKQotCQlwcml2LT5jZmctPnNrdSB8PSBJV0xfU0tVX047Ci0KKwkJaWYgKGVlcHJvbV9za3UgJiBFRVBST01fU0tVX0NBUF8xMU5fRU5BQkxFKQorCQkJcHJpdi0+Y2ZnLT5za3UgfD0gSVdMX1NLVV9OOworCX0KIAlpZiAoIXByaXYtPmNmZy0+c2t1KSB7CiAJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZGV2aWNlIHNrdVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAzNjMzNWIxLi5jMWNmZDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMTE1Nyw2ICsxMTU3LDkgQEAKIAkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKIAkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCS8qIFJlLWVuYWJsZSBSRl9LSUxMIGlmIGl0IG9jY3VycmVkICovCisJZWxzZSBpZiAoaGFuZGxlZCAmIENTUl9JTlRfQklUX1JGX0tJTEwpCisJCWl3bF9lbmFibGVfcmZraWxsX2ludChwcml2KTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiAoSVdMX0RMX0lTUikpIHsKQEAgLTEzNzEsNiArMTM3NCw5IEBACiAJLyogb25seSBSZS1lbmFibGUgaWYgZGlzYWJsZWQgYnkgaXJxICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCiAJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwkvKiBSZS1lbmFibGUgUkZfS0lMTCBpZiBpdCBvY2N1cnJlZCAqLworCWVsc2UgaWYgKGhhbmRsZWQgJiBDU1JfSU5UX0JJVF9SRl9LSUxMKQorCQlpd2xfZW5hYmxlX3Jma2lsbF9pbnQocHJpdik7CiB9CiAKIC8qIHRoZSB0aHJlc2hvbGQgcmF0aW8gb2YgYWN0dWFsX2Fja19jbnQgdG8gZXhwZWN0ZWRfYWNrX2NudCBpbiBwZXJjZW50ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKaW5kZXggMWVhY2JhNC4uMDQ5NGQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwpAQCAtMTk5LDYgKzE5OSw3IEBACiAJd2hpbGUgKGkgIT0gaWR4KSB7CiAJCXUxNiBsZW47CiAJCXN0cnVjdCBza19idWZmICpza2I7CisJCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJCWRlc2MgPSAmcmluZ1tpXTsKIAkJbGVuID0gbGUxNl90b19jcHUoZGVzYy0+bGVuKTsKIAkJc2tiID0gcnhfYnVmW2ldOwpAQCAtMjE2LDE3ICsyMTcsMjAgQEAKIAogCQkJbGVuID0gcHJpdi0+Y29tbW9uLnJ4X210dTsKIAkJfQorCQlkbWFfYWRkciA9IGxlMzJfdG9fY3B1KGRlc2MtPmhvc3RfYWRkcik7CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wZGV2LCBkbWFfYWRkciwKKwkJCXByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJc2tiX3B1dChza2IsIGxlbik7CiAKIAkJaWYgKHA1NF9yeChkZXYsIHNrYikpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwKLQkJCQkJIGxlMzJfdG9fY3B1KGRlc2MtPmhvc3RfYWRkciksCi0JCQkJCSBwcml2LT5jb21tb24ucnhfbXR1ICsgMzIsCi0JCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBkbWFfYWRkciwKKwkJCQlwcml2LT5jb21tb24ucnhfbXR1ICsgMzIsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlyeF9idWZbaV0gPSBOVUxMOwotCQkJZGVzYy0+aG9zdF9hZGRyID0gMDsKKwkJCWRlc2MtPmhvc3RfYWRkciA9IGNwdV90b19sZTMyKDApOwogCQl9IGVsc2UgewogCQkJc2tiX3RyaW0oc2tiLCAwKTsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShwcml2LT5wZGV2LCBkbWFfYWRkciwKKwkJCQlwcml2LT5jb21tb24ucnhfbXR1ICsgMzIsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXNjLT5sZW4gPSBjcHVfdG9fbGUxNihwcml2LT5jb21tb24ucnhfbXR1ICsgMzIpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwppbmRleCAyMTcxM2E3Li45YjM0NGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCkBAIC05OCw2ICs5OCw3IEBACiAJe1VTQl9ERVZJQ0UoMHgxNDEzLCAweDU0MDApfSwgICAvKiBUZWxzZXkgODAyLjExZyBVU0IyLjAgQWRhcHRlciAqLwogCXtVU0JfREVWSUNFKDB4MTQzNSwgMHgwNDI3KX0sCS8qIEludmVudGVsIFVSMDU0RyAqLwogCXtVU0JfREVWSUNFKDB4MTY2OCwgMHgxMDUwKX0sCS8qIEFjdGlvbnRlYyA4MDJVSUctMSAqLworCXtVU0JfREVWSUNFKDB4MTc0MCwgMHgxMDAwKX0sCS8qIFNlbmFvIE5VQi0zNTAgKi8KIAl7VVNCX0RFVklDRSgweDIwMDEsIDB4MzcwNCl9LAkvKiBETGluayBEV0wtRzEyMiByZXYgQTIgKi8KIAl7VVNCX0RFVklDRSgweDIwMDEsIDB4MzcwNSl9LAkvKiBELUxpbmsgRFdMLUcxMjAgcmV2IEMxICovCiAJe1VTQl9ERVZJQ0UoMHg0MTNjLCAweDU1MTMpfSwJLyogRGVsbCBXTEEzMzEwIFVTQiBXaXJlbGVzcyBBZGFwdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKaW5kZXggODQ4Y2MyYy4uNTE4NTQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwpAQCAtMjU5Nyw2ICsyNTk3LDkgQEAKIAlfX2xlMzIgbW9kZTsKIAlpbnQgcmV0OwogCisJaWYgKHByaXYtPmRldmljZV90eXBlICE9IFJORElTX0JDTTQzMjBCKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCiAJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6ICVzLCAlZFxuIiwgX19mdW5jX18sCiAJCQkJZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCiAJCQkJdGltZW91dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKaW5kZXggYWE5Nzk3MS4uM2IzZjFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYwpAQCAtNjUyLDYgKzY1MiwxMiBAQAogCQkgKi8KIAkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEOwogCisJCS8qCisJCSAqIFRoZSBoYXJkd2FyZSBoYXMgYWxyZWFkeSBjaGVja2VkIHRoZSBNaWNoYWVsIE1pYyBhbmQgaGFzCisJCSAqIHN0cmlwcGVkIGl0IGZyb20gdGhlIGZyYW1lLiBTaWduYWwgdGhpcyB0byBtYWM4MDIxMS4KKwkJICovCisJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19NTUlDX1NUUklQUEVEOworCiAJCWlmIChyeGRlc2MtPmNpcGhlcl9zdGF0dXMgPT0gUlhfQ1JZUFRPX1NVQ0NFU1MpCiAJCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfREVDUllQVEVEOwogCQllbHNlIGlmIChyeGRlc2MtPmNpcGhlcl9zdGF0dXMgPT0gUlhfQ1JZUFRPX0ZBSUxfTUlDKQpAQCAtMTA2NSw2ICsxMDcxLDggQEAKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMzOTApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUlQyODAwUENJX1JUMzVYWAorCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcxMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MjIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDYwKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA2MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDM1NjIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggYjk3YTRhNS4uMTk3YTM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtNDg2LDYgKzQ4NiwxMiBAQAogCQkgKi8KIAkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEOwogCisJCS8qCisJCSAqIFRoZSBoYXJkd2FyZSBoYXMgYWxyZWFkeSBjaGVja2VkIHRoZSBNaWNoYWVsIE1pYyBhbmQgaGFzCisJCSAqIHN0cmlwcGVkIGl0IGZyb20gdGhlIGZyYW1lLiBTaWduYWwgdGhpcyB0byBtYWM4MDIxMS4KKwkJICovCisJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19NTUlDX1NUUklQUEVEOworCiAJCWlmIChyeGRlc2MtPmNpcGhlcl9zdGF0dXMgPT0gUlhfQ1JZUFRPX1NVQ0NFU1MpCiAJCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfREVDUllQVEVEOwogCQllbHNlIGlmIChyeGRlc2MtPmNpcGhlcl9zdGF0dXMgPT0gUlhfQ1JZUFRPX0ZBSUxfTUlDKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKaW5kZXggMGI0ZTg1OS4uMDI5YmUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCkBAIC0yNDQ2LDYgKzI0NDYsNyBAQAogCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkzZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyNTczKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI2NzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA4MTIsIDB4MzEwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogUWNvbSAqLwogCXsgVVNCX0RFVklDRSgweDE4ZTgsIDB4NjE5NiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MjI5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYwppbmRleCBiODQzM2YzLi42Mjg3NmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCkBAIC03MjYsOSArNzI2LDkgQEAKIH0KIAogc3RhdGljIHZvaWQgZWZ1c2Vfd3JpdGVfZGF0YV9jYXNlMShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2ICplZnVzZV9hZGRyLAotCQkJCXU4IGVmdXNlX2RhdGEsIHU4IG9mZnNldCwgaW50ICpiY29udGludWFsLAotCQkJCXU4ICp3cml0ZV9zdGF0ZSwgc3RydWN0IHBncGt0X3N0cnVjdCB0YXJnZXRfcGt0LAotCQkJCWludCAqcmVwZWF0X3RpbWVzLCBpbnQgKmJyZXN1bHQsIHU4IHdvcmRfZW4pCisJCQl1OCBlZnVzZV9kYXRhLCB1OCBvZmZzZXQsIGludCAqYmNvbnRpbnVhbCwKKwkJCXU4ICp3cml0ZV9zdGF0ZSwgc3RydWN0IHBncGt0X3N0cnVjdCAqdGFyZ2V0X3BrdCwKKwkJCWludCAqcmVwZWF0X3RpbWVzLCBpbnQgKmJyZXN1bHQsIHU4IHdvcmRfZW4pCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBwZ3BrdF9zdHJ1Y3QgdG1wX3BrdDsKQEAgLTc0NCw4ICs3NDQsOCBAQAogCXRtcF9wa3Qud29yZF9lbiA9IHRtcF9oZWFkZXIgJiAweDBGOwogCXRtcF93b3JkX2NudHMgPSBlZnVzZV9jYWxjdWxhdGVfd29yZF9jbnRzKHRtcF9wa3Qud29yZF9lbik7CiAKLQlpZiAodG1wX3BrdC5vZmZzZXQgIT0gdGFyZ2V0X3BrdC5vZmZzZXQpIHsKLQkJZWZ1c2VfYWRkciA9IGVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKKwlpZiAodG1wX3BrdC5vZmZzZXQgIT0gdGFyZ2V0X3BrdC0+b2Zmc2V0KSB7CisJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKIAkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCX0gZWxzZSB7CiAJCWZvciAodG1waW5kZXggPSAwOyB0bXBpbmRleCA8ICh0bXBfd29yZF9jbnRzICogMik7IHRtcGluZGV4KyspIHsKQEAgLTc1NiwyMyArNzU2LDIzIEBACiAJCX0KIAogCQlpZiAoYmRhdGFlbXB0eSA9PSBmYWxzZSkgewotCQkJZWZ1c2VfYWRkciA9IGVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKKwkJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKIAkJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJfSBlbHNlIHsKIAkJCW1hdGNoX3dvcmRfZW4gPSAweDBGOwotCQkJaWYgKCEoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgwKSkgfAorCQkJaWYgKCEoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMCkpIHwKIAkJCSAgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgwKSkpKQogCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMCkpOwogCi0JCQlpZiAoISgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDEpKSB8CisJCQlpZiAoISgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgxKSkgfAogCQkJICAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDEpKSkpCiAJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgxKSk7CiAKLQkJCWlmICghKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMikpIHwKKwkJCWlmICghKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDIpKSB8CiAJCQkgICAgICh0bXBfcGt0LndvcmRfZW4gJiBCSVQoMikpKSkKIAkJCQltYXRjaF93b3JkX2VuICY9ICh+QklUKDIpKTsKIAotCQkJaWYgKCEoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgzKSkgfAorCQkJaWYgKCEoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMykpIHwKIAkJCSAgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgzKSkpKQogCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMykpOwogCkBAIC03ODAsNyArNzgwLDcgQEAKIAkJCQliYWR3b3JkZW4gPSBlZnVzZV93b3JkX2VuYWJsZV9kYXRhX3dyaXRlKAogCQkJCQkJCSAgICBodywgKmVmdXNlX2FkZHIgKyAxLAogCQkJCQkJCSAgICB0bXBfcGt0LndvcmRfZW4sCi0JCQkJCQkJICAgIHRhcmdldF9wa3QuZGF0YSk7CisJCQkJCQkJICAgIHRhcmdldF9wa3QtPmRhdGEpOwogCiAJCQkJaWYgKDB4MEYgIT0gKGJhZHdvcmRlbiAmIDB4MEYpKSB7CiAJCQkJCXU4IHJlb3JnX29mZnNldCA9IG9mZnNldDsKQEAgLTc5MSwyNiArNzkxLDI2IEBACiAJCQkJfQogCiAJCQkJdG1wX3dvcmRfZW4gPSAweDBGOwotCQkJCWlmICgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDApKSBeCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDApKSBeCiAJCQkJICAgIChtYXRjaF93b3JkX2VuICYgQklUKDApKSkKIAkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMCkpOwogCi0JCQkJaWYgKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMSkpIF4KKwkJCQlpZiAoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMSkpIF4KIAkJCQkgICAgKG1hdGNoX3dvcmRfZW4gJiBCSVQoMSkpKQogCQkJCQl0bXBfd29yZF9lbiAmPSAofkJJVCgxKSk7CiAKLQkJCQlpZiAoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgyKSkgXgorCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgyKSkgXgogCQkJCQkobWF0Y2hfd29yZF9lbiAmIEJJVCgyKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDIpKTsKIAotCQkJCWlmICgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDMpKSBeCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDMpKSBeCiAJCQkJICAgIChtYXRjaF93b3JkX2VuICYgQklUKDMpKSkKIAkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMykpOwogCiAJCQkJaWYgKCh0bXBfd29yZF9lbiAmIDB4MEYpICE9IDB4MEYpIHsKIAkJCQkJKmVmdXNlX2FkZHIgPSBlZnVzZV9nZXRfY3VycmVudF9zaXplKGh3KTsKLQkJCQkJdGFyZ2V0X3BrdC5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQkJCXRhcmdldF9wa3Qud29yZF9lbiA9IHRtcF93b3JkX2VuOworCQkJCQl0YXJnZXRfcGt0LT5vZmZzZXQgPSBvZmZzZXQ7CisJCQkJCXRhcmdldF9wa3QtPndvcmRfZW4gPSB0bXBfd29yZF9lbjsKIAkJCQl9IGVsc2UKIAkJCQkJKmJjb250aW51YWwgPSBmYWxzZTsKIAkJCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CkBAIC04MjEsOCArODIxLDggQEAKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCSplZnVzZV9hZGRyICs9ICgyICogdG1wX3dvcmRfY250cykgKyAxOwotCQkJCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OwotCQkJCXRhcmdldF9wa3Qud29yZF9lbiA9IHdvcmRfZW47CisJCQkJdGFyZ2V0X3BrdC0+b2Zmc2V0ID0gb2Zmc2V0OworCQkJCXRhcmdldF9wa3QtPndvcmRfZW4gPSB3b3JkX2VuOwogCQkJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJCX0KIAkJfQpAQCAtOTM4LDcgKzkzOCw3IEBACiAJCQkJZWZ1c2Vfd3JpdGVfZGF0YV9jYXNlMShodywgJmVmdXNlX2FkZHIsCiAJCQkJCQkgICAgICAgZWZ1c2VfZGF0YSwgb2Zmc2V0LAogCQkJCQkJICAgICAgICZiY29udGludWFsLAotCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwgdGFyZ2V0X3BrdCwKKwkJCQkJCSAgICAgICAmd3JpdGVfc3RhdGUsICZ0YXJnZXRfcGt0LAogCQkJCQkJICAgICAgICZyZXBlYXRfdGltZXMsICZicmVzdWx0LAogCQkJCQkJICAgICAgIHdvcmRfZW4pOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKaW5kZXggMGZhMzZhYS4uMTc1OGQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCkBAIC02MTksNiArNjE5LDEzIEBACiAJCQkJCXN0cnVjdCBza19idWZmICp1c2tiID0gTlVMTDsKIAkJCQkJdTggKnBkYXRhOwogCQkJCQl1c2tiID0gZGV2X2FsbG9jX3NrYihza2ItPmxlbiArIDEyOCk7CisJCQkJCWlmICghdXNrYikgeworCQkJCQkJUlRfVFJBQ0UocnRscHJpdiwKKwkJCQkJCQkoQ09NUF9JTlRSIHwgQ09NUF9SRUNWKSwKKwkJCQkJCQlEQkdfRU1FUkcsCisJCQkJCQkJKCJjYW4ndCBhbGxvYyByeCBza2JcbiIpKTsKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCQkJfQogCQkJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHVza2IpLAogCQkJCQkJCSZyeF9zdGF0dXMsCiAJCQkJCQkJc2l6ZW9mKHJ4X3N0YXR1cykpOwpAQCAtNjQxLDcgKzY0OCw3IEBACiAJCQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihydGxwY2ktPnJ4YnVmZmVyc2l6ZSk7CiAJCQlpZiAodW5saWtlbHkoIW5ld19za2IpKSB7CiAJCQkJUlRfVFJBQ0UocnRscHJpdiwgKENPTVBfSU5UUiB8IENPTVBfUkVDViksCi0JCQkJCSBEQkdfRE1FU0csCisJCQkJCSBEQkdfRU1FUkcsCiAJCQkJCSAoImNhbid0IGFsbG9jIHNrYiBmb3IgcnhcbiIpKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CkBAIC0xMDY2LDkgKzEwNzMsOSBAQAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9CiAJCQkgICAgZGV2X2FsbG9jX3NrYihydGxwY2ktPnJ4YnVmZmVyc2l6ZSk7CiAJCQl1MzIgYnVmZmVyYWRkcmVzczsKLQkJCWVudHJ5ID0gJnJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLmRlc2NbaV07CiAJCQlpZiAoIXNrYikKIAkJCQlyZXR1cm4gMDsKKwkJCWVudHJ5ID0gJnJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLmRlc2NbaV07CiAKIAkJCS8qc2tiLT5kZXYgPSBkZXY7ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvbWFpbi5jCmluZGV4IDAxMmUxYTQuLjQwMzcyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYwpAQCAtMTAzOSw2ICsxMDM5LDkgQEAKIAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OKSB7CiAJCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOworCQlpZiAoIWJlYWNvbikKKwkJCWdvdG8gb3V0X3NsZWVwOworCiAJCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfQkVBQ09OLCBiZWFjb24tPmRhdGEsCiAJCQkJCSAgICAgIGJlYWNvbi0+bGVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCmluZGV4IDQ2NzE0OTEwLi43MTQ1ZWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCkBAIC0xMTAsOSArMTEwLDggQEAKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwogCiAJc3BpX3N5bmMod2xfdG9fc3BpKHdsKSwgJm0pOwotCWtmcmVlKGNtZCk7Ci0KIAl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGkgcmVzZXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7CisJa2ZyZWUoY21kKTsKIH0KIAogc3RhdGljIHZvaWQgd2wxMjcxX3NwaV9pbml0KHN0cnVjdCB3bDEyNzEgKndsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCA1NDZkZTU3Li5kYTFmMTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtMTIwLDYgKzEyMCw5IEBACiAJdW5zaWduZWQgbG9uZyByeF9wZm5fYXJyYXlbTkVUX1JYX1JJTkdfU0laRV07CiAJc3RydWN0IG11bHRpY2FsbF9lbnRyeSByeF9tY2xbTkVUX1JYX1JJTkdfU0laRSsxXTsKIAlzdHJ1Y3QgbW11X3VwZGF0ZSByeF9tbXVbTkVUX1JYX1JJTkdfU0laRV07CisKKwkvKiBTdGF0aXN0aWNzICovCisJaW50IHJ4X2dzb19jaGVja3N1bV9maXh1cDsKIH07CiAKIHN0cnVjdCBuZXRmcm9udF9yeF9pbmZvIHsKQEAgLTc3MCwxMSArNzczLDI5IEBACiAJcmV0dXJuIGNvbnM7CiB9CiAKLXN0YXRpYyBpbnQgc2tiX2NoZWNrc3VtX3NldHVwKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGNoZWNrc3VtX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJdW5zaWduZWQgY2hhciAqdGg7CiAJaW50IGVyciA9IC1FUFJPVE87CisJaW50IHJlY2FsY3VsYXRlX3BhcnRpYWxfY3N1bSA9IDA7CisKKwkvKgorCSAqIEEgR1NPIFNLQiBtdXN0IGJlIENIRUNLU1VNX1BBUlRJQUwuIEhvd2V2ZXIgc29tZSBidWdneQorCSAqIHBlZXJzIGNhbiBmYWlsIHRvIHNldCBORVRSWEZfY3N1bV9ibGFuayB3aGVuIHNlbmRpbmcgYSBHU08KKwkgKiBmcmFtZS4gSW4gdGhpcyBjYXNlIGZvcmNlIHRoZSBTS0IgdG8gQ0hFQ0tTVU1fUEFSVElBTCBhbmQKKwkgKiByZWNhbGN1bGF0ZSB0aGUgcGFydGlhbCBjaGVja3N1bS4KKwkgKi8KKwlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCAmJiBza2JfaXNfZ3NvKHNrYikpIHsKKwkJc3RydWN0IG5ldGZyb250X2luZm8gKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJbnAtPnJ4X2dzb19jaGVja3N1bV9maXh1cCsrOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7CisJCXJlY2FsY3VsYXRlX3BhcnRpYWxfY3N1bSA9IDE7CisJfQorCisJLyogQSBub24tQ0hFQ0tTVU1fUEFSVElBTCBTS0IgZG9lcyBub3QgcmVxdWlyZSBzZXR1cC4gKi8KKwlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkKKwkJcmV0dXJuIDA7CiAKIAlpZiAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUCkpCiAJCWdvdG8gb3V0OwpAQCAtNzg4LDkgKzgwOSwyMyBAQAogCXN3aXRjaCAoaXBoLT5wcm90b2NvbCkgewogCWNhc2UgSVBQUk9UT19UQ1A6CiAJCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7CisKKwkJaWYgKHJlY2FsY3VsYXRlX3BhcnRpYWxfY3N1bSkgeworCQkJc3RydWN0IHRjcGhkciAqdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopdGg7CisJCQl0Y3BoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJCQkJCSBza2ItPmxlbiAtIGlwaC0+aWhsKjQsCisJCQkJCQkJIElQUFJPVE9fVENQLCAwKTsKKwkJfQogCQlicmVhazsKIAljYXNlIElQUFJPVE9fVURQOgogCQlza2ItPmNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOworCisJCWlmIChyZWNhbGN1bGF0ZV9wYXJ0aWFsX2NzdW0pIHsKKwkJCXN0cnVjdCB1ZHBoZHIgKnVkcGggPSAoc3RydWN0IHVkcGhkciAqKXRoOworCQkJdWRwaC0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwKKwkJCQkJCQkgc2tiLT5sZW4gLSBpcGgtPmlobCo0LAorCQkJCQkJCSBJUFBST1RPX1VEUCwgMCk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKQEAgLTgyOSwxMyArODY0LDExIEBACiAJCS8qIEV0aGVybmV0IHdvcms6IERlbGF5ZWQgdG8gaGVyZSBhcyBpdCBwZWVrcyB0aGUgaGVhZGVyLiAqLwogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCi0JCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCQlpZiAoc2tiX2NoZWNrc3VtX3NldHVwKHNrYikpIHsKLQkJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCQlwYWNrZXRzX2Ryb3BwZWQrKzsKLQkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWNvbnRpbnVlOwotCQkJfQorCQlpZiAoY2hlY2tzdW1fc2V0dXAoZGV2LCBza2IpKSB7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCXBhY2tldHNfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWNvbnRpbnVlOwogCQl9CiAKIAkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0xNjMyLDEyICsxNjY1LDU5IEBACiAJfQogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHhlbm5ldF9zdGF0IHsKKwljaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTsKKwl1MTYgb2Zmc2V0OworfSB4ZW5uZXRfc3RhdHNbXSA9IHsKKwl7CisJCSJyeF9nc29fY2hlY2tzdW1fZml4dXAiLAorCQlvZmZzZXRvZihzdHJ1Y3QgbmV0ZnJvbnRfaW5mbywgcnhfZ3NvX2NoZWNrc3VtX2ZpeHVwKQorCX0sCit9OworCitzdGF0aWMgaW50IHhlbm5ldF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RyaW5nX3NldCkKK3sKKwlzd2l0Y2ggKHN0cmluZ19zZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJcmV0dXJuIEFSUkFZX1NJWkUoeGVubmV0X3N0YXRzKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHhlbm5ldF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKiBkYXRhKQoreworCXZvaWQgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhlbm5ldF9zdGF0cyk7IGkrKykKKwkJZGF0YVtpXSA9ICooaW50ICopKG5wICsgeGVubmV0X3N0YXRzW2ldLm9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbm5ldF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGRhdGEpCit7CisJaW50IGk7CisKKwlzd2l0Y2ggKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4ZW5uZXRfc3RhdHMpOyBpKyspCisJCQltZW1jcHkoZGF0YSArIGkgKiBFVEhfR1NUUklOR19MRU4sCisJCQkgICAgICAgeGVubmV0X3N0YXRzW2ldLm5hbWUsIEVUSF9HU1RSSU5HX0xFTik7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB4ZW5uZXRfZXRodG9vbF9vcHMgPQogewogCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCiAJLnNldF9zZyA9IHhlbm5ldF9zZXRfc2csCiAJLnNldF90c28gPSB4ZW5uZXRfc2V0X3RzbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorCisJLmdldF9zc2V0X2NvdW50ID0geGVubmV0X2dldF9zc2V0X2NvdW50LAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IHhlbm5ldF9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X3N0cmluZ3MgPSB4ZW5uZXRfZ2V0X3N0cmluZ3MsCiB9OwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9LY29uZmlnIGIvZHJpdmVycy9uZmMvS2NvbmZpZwppbmRleCBmZmVkZmQ0Li5lYTE1ODAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmZjL0tjb25maWcKQEAgLTMsNyArMyw3IEBACiAjCiAKIG1lbnVjb25maWcgTkZDX0RFVklDRVMKLQlib29sICJORkMgZGV2aWNlcyIKKwlib29sICJOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlcyIKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBZb3UnbGwgaGF2ZSB0byBzYXkgWSBpZiB5b3VyIGNvbXB1dGVyIGNvbnRhaW5zIGFuIE5GQyBkZXZpY2UgdGhhdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvcG41NDQuYyBiL2RyaXZlcnMvbmZjL3BuNTQ0LmMKaW5kZXggYmFlNjQ3Mi4uNzI0ZjY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvcG41NDQuYworKysgYi9kcml2ZXJzL25mYy9wbjU0NC5jCkBAIC02MCw3ICs2MCw3IEBACiBzdHJ1Y3QgcG41NDRfaW5mbyB7CiAJc3RydWN0IG1pc2NkZXZpY2UgbWlzY2RldjsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2RldjsKLQlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSByZWdzWzJdOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHJlZ3NbM107CiAKIAllbnVtIHBuNTQ0X3N0YXRlIHN0YXRlOwogCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfd2FpdDsKQEAgLTc0LDYgKzc0LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgcmVnX3ZkZF9pb1tdCT0gIlZkZF9JTyI7CiBzdGF0aWMgY29uc3QgY2hhciByZWdfdmJhdFtdCT0gIlZCYXQiOworc3RhdGljIGNvbnN0IGNoYXIgcmVnX3ZzaW1bXQk9ICJWU2ltIjsKIAogLyogc3lzZnMgaW50ZXJmYWNlICovCiBzdGF0aWMgc3NpemVfdCBwbjU0NF90ZXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTc0MCw2ICs3NDEsNyBAQAogCiAJaW5mby0+cmVnc1swXS5zdXBwbHkgPSByZWdfdmRkX2lvOwogCWluZm8tPnJlZ3NbMV0uc3VwcGx5ID0gcmVnX3ZiYXQ7CisJaW5mby0+cmVnc1syXS5zdXBwbHkgPSByZWdfdnNpbTsKIAlyID0gcmVndWxhdG9yX2J1bGtfZ2V0KCZjbGllbnQtPmRldiwgQVJSQVlfU0laRShpbmZvLT5yZWdzKSwKIAkJCQkgaW5mby0+cmVncyk7CiAJaWYgKHIgPCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wZHQuYyBiL2RyaXZlcnMvb2YvcGR0LmMKaW5kZXggMjgyOTVkMC4uNGQ4N2I1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9wZHQuYworKysgYi9kcml2ZXJzL29mL3BkdC5jCkBAIC0zNiwxOSArMzYsNTUgQEAKIAkocCktPnVuaXF1ZV9pZCA9IG9mX3BkdF91bmlxdWVfaWQrKzsgXAogfSB3aGlsZSAoMCkKIAotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpvZl9wZHRfbm9kZV9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCitzdGF0aWMgY2hhciAqIF9faW5pdCBvZl9wZHRfYnVpbGRfZnVsbF9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCiB7Ci0JcmV0dXJuIGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lOworCWludCBsZW4sIG91cmxlbiwgcGxlbjsKKwljaGFyICpuOworCisJZHAtPnBhdGhfY29tcG9uZW50X25hbWUgPSBidWlsZF9wYXRoX2NvbXBvbmVudChkcCk7CisKKwlwbGVuID0gc3RybGVuKGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7CisJb3VybGVuID0gc3RybGVuKGRwLT5wYXRoX2NvbXBvbmVudF9uYW1lKTsKKwlsZW4gPSBvdXJsZW4gKyBwbGVuICsgMjsKKworCW4gPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbik7CisJc3RyY3B5KG4sIGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7CisJaWYgKCFvZl9ub2RlX2lzX3Jvb3QoZHAtPnBhcmVudCkpIHsKKwkJc3RyY3B5KG4gKyBwbGVuLCAiLyIpOworCQlwbGVuKys7CisJfQorCXN0cmNweShuICsgcGxlbiwgZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOworCisJcmV0dXJuIG47CiB9CiAKLSNlbHNlCisjZWxzZSAvKiBDT05GSUdfU1BBUkMgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIG9mX3BkdF9pbmNyX3VuaXF1ZV9pZCh2b2lkICpwKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpcnFfdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKSB7IH0KIAotc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpvZl9wZHRfbm9kZV9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCitzdGF0aWMgY2hhciAqIF9faW5pdCBvZl9wZHRfYnVpbGRfZnVsbF9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCiB7Ci0JcmV0dXJuIGRwLT5uYW1lOworCXN0YXRpYyBpbnQgZmFpbHNhZmVfaWQgPSAwOyAvKiBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgbmFtZXMgb24gZmFpbHVyZSAqLworCWNoYXIgKmJ1ZjsKKwlpbnQgbGVuOworCisJaWYgKG9mX3BkdF9wcm9tX29wcy0+cGtnMnBhdGgoZHAtPnBoYW5kbGUsIE5VTEwsIDAsICZsZW4pKQorCQlnb3RvIGZhaWxzYWZlOworCisJYnVmID0gcHJvbV9lYXJseV9hbGxvYyhsZW4gKyAxKTsKKwlpZiAob2ZfcGR0X3Byb21fb3BzLT5wa2cycGF0aChkcC0+cGhhbmRsZSwgYnVmLCBsZW4sICZsZW4pKQorCQlnb3RvIGZhaWxzYWZlOworCXJldHVybiBidWY7CisKKyBmYWlsc2FmZToKKwlidWYgPSBwcm9tX2Vhcmx5X2FsbG9jKHN0cmxlbihkcC0+cGFyZW50LT5mdWxsX25hbWUpICsKKwkJCSAgICAgICBzdHJsZW4oZHAtPm5hbWUpICsgMTYpOworCXNwcmludGYoYnVmLCAiJXMvJXNAdW5rbm93biVpIiwKKwkJb2Zfbm9kZV9pc19yb290KGRwLT5wYXJlbnQpID8gIiIgOiBkcC0+cGFyZW50LT5mdWxsX25hbWUsCisJCWRwLT5uYW1lLCBmYWlsc2FmZV9pZCsrKTsKKwlwcl9lcnIoIiVzOiBwa2cycGF0aCBmYWlsZWQ7IGFzc2lnbmluZyAlc1xuIiwgX19mdW5jX18sIGJ1Zik7CisJcmV0dXJuIGJ1ZjsKIH0KIAogI2VuZGlmIC8qICFDT05GSUdfU1BBUkMgKi8KQEAgLTEzMiw0NyArMTY4LDYgQEAKIAlyZXR1cm4gYnVmOwogfQogCi1zdGF0aWMgY2hhciAqIF9faW5pdCBvZl9wZHRfdHJ5X3BrZzJwYXRoKHBoYW5kbGUgbm9kZSkKLXsKLQljaGFyICpyZXMsICpidWYgPSBOVUxMOwotCWludCBsZW47Ci0KLQlpZiAoIW9mX3BkdF9wcm9tX29wcy0+cGtnMnBhdGgpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKG9mX3BkdF9wcm9tX29wcy0+cGtnMnBhdGgobm9kZSwgYnVmLCAwLCAmbGVuKSkKLQkJcmV0dXJuIE5VTEw7Ci0JYnVmID0gcHJvbV9lYXJseV9hbGxvYyhsZW4gKyAxKTsKLQlpZiAob2ZfcGR0X3Byb21fb3BzLT5wa2cycGF0aChub2RlLCBidWYsIGxlbiwgJmxlbikpIHsKLQkJcHJfZXJyKCIlczogcGFja2FnZS10by1wYXRoIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXMgPSBzdHJyY2hyKGJ1ZiwgJy8nKTsKLQlpZiAoIXJlcykgewotCQlwcl9lcnIoIiVzOiBjb3VsZG4ndCBmaW5kIC8gaW4gJXNcbiIsIF9fZnVuY19fLCBidWYpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIHJlcysxOwotfQotCi0vKgotICogV2hlbiBmZXRjaGluZyB0aGUgbm9kZSdzIG5hbWUsIGZpcnN0IHRyeSB1c2luZyBwYWNrYWdlLXRvLXBhdGg7IGlmCi0gKiB0aGF0IGZhaWxzIChlaXRoZXIgYmVjYXVzZSB0aGUgYXJjaCBoYXNuJ3Qgc3VwcGxpZWQgYSBQUk9NIGNhbGxiYWNrLAotICogb3Igc29tZSBvdGhlciByYW5kb20gZmFpbHVyZSksIGZhbGwgYmFjayB0byBqdXN0IGxvb2tpbmcgYXQgdGhlIG5vZGUncwotICogJ25hbWUnIHByb3BlcnR5LgotICovCi1zdGF0aWMgY2hhciAqIF9faW5pdCBvZl9wZHRfYnVpbGRfbmFtZShwaGFuZGxlIG5vZGUpCi17Ci0JY2hhciAqYnVmOwotCi0JYnVmID0gb2ZfcGR0X3RyeV9wa2cycGF0aChub2RlKTsKLQlpZiAoIWJ1ZikKLQkJYnVmID0gb2ZfcGR0X2dldF9vbmVfcHJvcGVydHkobm9kZSwgIm5hbWUiKTsKLQotCXJldHVybiBidWY7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2luaXQgb2ZfcGR0X2NyZWF0ZV9ub2RlKHBoYW5kbGUgbm9kZSwKIAkJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCkKIHsKQEAgLTE4Nyw3ICsxODIsNyBAQAogCiAJa3JlZl9pbml0KCZkcC0+a3JlZik7CiAKLQlkcC0+bmFtZSA9IG9mX3BkdF9idWlsZF9uYW1lKG5vZGUpOworCWRwLT5uYW1lID0gb2ZfcGR0X2dldF9vbmVfcHJvcGVydHkobm9kZSwgIm5hbWUiKTsKIAlkcC0+dHlwZSA9IG9mX3BkdF9nZXRfb25lX3Byb3BlcnR5KG5vZGUsICJkZXZpY2VfdHlwZSIpOwogCWRwLT5waGFuZGxlID0gbm9kZTsKIApAQCAtMTk4LDI2ICsxOTMsNiBAQAogCXJldHVybiBkcDsKIH0KIAotc3RhdGljIGNoYXIgKiBfX2luaXQgb2ZfcGR0X2J1aWxkX2Z1bGxfbmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQotewotCWludCBsZW4sIG91cmxlbiwgcGxlbjsKLQljaGFyICpuOwotCi0JcGxlbiA9IHN0cmxlbihkcC0+cGFyZW50LT5mdWxsX25hbWUpOwotCW91cmxlbiA9IHN0cmxlbihvZl9wZHRfbm9kZV9uYW1lKGRwKSk7Ci0JbGVuID0gb3VybGVuICsgcGxlbiArIDI7Ci0KLQluID0gcHJvbV9lYXJseV9hbGxvYyhsZW4pOwotCXN0cmNweShuLCBkcC0+cGFyZW50LT5mdWxsX25hbWUpOwotCWlmICghb2Zfbm9kZV9pc19yb290KGRwLT5wYXJlbnQpKSB7Ci0JCXN0cmNweShuICsgcGxlbiwgIi8iKTsKLQkJcGxlbisrOwotCX0KLQlzdHJjcHkobiArIHBsZW4sIG9mX3BkdF9ub2RlX25hbWUoZHApKTsKLQotCXJldHVybiBuOwotfQotCiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogX19pbml0IG9mX3BkdF9idWlsZF90cmVlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LAogCQkJCQkJICAgcGhhbmRsZSBub2RlLAogCQkJCQkJICAgc3RydWN0IGRldmljZV9ub2RlICoqKm5leHRwKQpAQCAtMjQwLDkgKzIxNSw2IEBACiAJCSooKm5leHRwKSA9IGRwOwogCQkqbmV4dHAgPSAmZHAtPmFsbG5leHQ7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUEFSQykKLQkJZHAtPnBhdGhfY29tcG9uZW50X25hbWUgPSBidWlsZF9wYXRoX2NvbXBvbmVudChkcCk7Ci0jZW5kaWYKIAkJZHAtPmZ1bGxfbmFtZSA9IG9mX3BkdF9idWlsZF9mdWxsX25hbWUoZHApOwogCiAJCWRwLT5jaGlsZCA9IG9mX3BkdF9idWlsZF90cmVlKGRwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCA4ZWNhYWM5Li5lYTI1ZTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJwY2kuaCIKQEAgLTM2OCw3ICszNjksNyBAQAogCXU4ICpkYXRhID0gKHU4KikgYnVmOwogCiAJLyogU2V2ZXJhbCBjaGlwcyBsb2NrIHVwIHRyeWluZyB0byByZWFkIHVuZGVmaW5lZCBjb25maWcgc3BhY2UgKi8KLQlpZiAoY2FwX3JhaXNlZChmaWxwLT5mX2NyZWQtPmNhcF9lZmZlY3RpdmUsIENBUF9TWVNfQURNSU4pKSB7CisJaWYgKHNlY3VyaXR5X2NhcGFibGUoZmlscC0+Zl9jcmVkLCBDQVBfU1lTX0FETUlOKSA9PSAwKSB7CiAJCXNpemUgPSBkZXYtPmNmZ19zaXplOwogCX0gZWxzZSBpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykgewogCQlzaXplID0gMTI4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCAwYmRkYTViMy4uNDJmYmYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKQEAgLTUxOCw2ICs1MTgsOCBAQAogCQlmbGFncyB8PSBDT05GX0VOQUJMRV9JT0NBUkQ7CiAJaWYgKGZsYWdzICYgQ09ORl9FTkFCTEVfSU9DQVJEKQogCQlzLT5zb2NrZXQuZmxhZ3MgfD0gU1NfSU9DQVJEOworCWlmIChmbGFncyAmIENPTkZfRU5BQkxFX1pWQ0FSRCkKKwkJcy0+c29ja2V0LmZsYWdzIHw9IFNTX1pWQ0FSRCB8IFNTX0lPQ0FSRDsKIAlpZiAoZmxhZ3MgJiBDT05GX0VOQUJMRV9TUEtSKSB7CiAJCXMtPnNvY2tldC5mbGFncyB8PSBTU19TUEtSX0VOQTsKIAkJc3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCAzNzU1ZTdjLi4yYzU0MDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit2b2lkIHB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuaCBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmgKaW5kZXggYmI2MmVhOC4uYjYwOWI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5oCkBAIC0xLDMgKzEsNCBAQAogaW50IHB4YTJ4eF9kcnZfcGNtY2lhX2FkZF9vbmUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpOwogdm9pZCBweGEyeHhfZHJ2X3BjbWNpYV9vcHMoc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcyk7Cit2b2lkIHB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY29saWJyaS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NvbGlicmkuYwppbmRleCBjM2Y3MjE5Li5hNTIwMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY29saWJyaS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jb2xpYnJpLmMKQEAgLTE4MSw2ICsxODEsOSBAQAogewogCWludCByZXQ7CiAKKwlpZiAoIW1hY2hpbmVfaXNfY29saWJyaSgpICYmICFtYWNoaW5lX2lzX2NvbGlicmkzMjAoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAljb2xpYnJpX3BjbWNpYV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInB4YTJ4eC1wY21jaWEiLCAtMSk7CiAJaWYgKCFjb2xpYnJpX3BjbWNpYV9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKaW5kZXggYjlmOGM4Zi4uMjVhZmU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCkBAIC0yMjYsNiArMjI2LDcgQEAKIAkJbHViYm9ja19zZXRfbWlzY193cigoMSA8PCAxNSkgfCAoMSA8PCAxNCksIDApOwogCiAJCXB4YTJ4eF9kcnZfcGNtY2lhX29wcygmbHViYm9ja19wY21jaWFfb3BzKTsKKwkJcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKCZzYWRldi0+ZGV2KTsKIAkJcmV0ID0gc2ExMTExX3BjbWNpYV9hZGQoc2FkZXYsICZsdWJib2NrX3BjbWNpYV9vcHMsCiAJCQkJcHhhMnh4X2Rydl9wY21jaWFfYWRkX29uZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggZDE2M2JjMi4uYTU5YWY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC0yMjcsNyArMjI3LDcgQEAKIGNvbmZpZyBJREVBUEFEX0xBUFRPUAogCXRyaXN0YXRlICJMZW5vdm8gSWRlYVBhZCBMYXB0b3AgRXh0cmFzIgogCWRlcGVuZHMgb24gQUNQSQotCWRlcGVuZHMgb24gUkZLSUxMCisJZGVwZW5kcyBvbiBSRktJTEwgJiYgSU5QVVQKIAlzZWxlY3QgSU5QVVRfU1BBUlNFS01BUAogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSByZmtpbGwgc3dpdGNoZXMgb24gTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwppbmRleCBjNWM0YjhjLi4zOGIzNGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKQEAgLTg0LDcgKzg0LDcgQEAKICAqLwogI2RlZmluZSBBTVcwX0dVSUQxCQkiNjdDMzM3MUQtOTVBMy00QzM3LUJCNjEtREQ0N0I0OTFEQUFCIgogI2RlZmluZSBBTVcwX0dVSUQyCQkiNDMxRjE2RUQtMEMyQi00NDRDLUIyNjctMjdERUIxNDBDRjlDIgotI2RlZmluZSBXTUlEX0dVSUQxCQkiNkFGNEYyNTgtQjQwMS00MmZkLUJFOTEtM0Q0QUMyRDdDMEQzIgorI2RlZmluZSBXTUlEX0dVSUQxCQkiNkFGNEYyNTgtQjQwMS00MkZELUJFOTEtM0Q0QUMyRDdDMEQzIgogI2RlZmluZSBXTUlEX0dVSUQyCQkiOTU3NjRFMDktRkI1Ni00ZTgzLUIzMUEtMzc3NjFGNjA5OTRBIgogI2RlZmluZSBXTUlEX0dVSUQzCQkiNjFFRjY5RUEtODY1Qy00QkMzLUE1MDItQTBERUJBMENCNTMxIgogCkBAIC0xMjgwLDcgKzEyODAsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIERFVklDRV9BVFRSKHRocmVlZywgU19JV1VHTyB8IFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2Jvb2xfdGhyZWVnLAorc3RhdGljIERFVklDRV9BVFRSKHRocmVlZywgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYm9vbF90aHJlZWcsCiAJc2V0X2Jvb2xfdGhyZWVnKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKaW5kZXggNDYzM2ZkOC4uZmU0OTU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKQEAgLTEwODEsMTQgKzEwODEsOCBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKIAltb2RlX3QgbW9kZTsKIAotCS8qCi0JICogSWYgcGFyYW1ldGVyIHVpZCBvciBnaWQgaXMgbm90IGNoYW5nZWQsIGtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IKLQkgKiBvdXIgcHJvYyBlbnRyaWVzICgtcnctcnctcnctKSBlbHNlLCBpdCBtZWFucyB3ZSBjYXJlIGFib3V0IHNlY3VyaXR5LAotCSAqIGFuZCB0aGVuIHNldCB0byAtcnctcnctLS0tCi0JICovCi0KIAlpZiAoKGFzdXNfdWlkID09IDApICYmIChhc3VzX2dpZCA9PSAwKSkgewotCQltb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVUdPOworCQltb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUDsKIAl9IGVsc2UgewogCQltb2RlID0gU19JRlJFRyB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JV1VTUiB8IFNfSVdHUlA7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgYXN1c191aWQgYW5kIGFzdXNfZ2lkIHBhcmFtZXRlcnMgYXJlICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCmluZGV4IDM0NjU3ZjkuLmFkMjRlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwpAQCAtMjkwLDkgKzI5MCwxMiBAQAogCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKIAogCS8qIElmIHRoZSBoYXJkd2FyZSBzd2l0Y2ggY29udHJvbHMgdGhpcyByYWRpbywgYW5kIHRoZSBoYXJkd2FyZQotCSAgIHN3aXRjaCBpcyBkaXNhYmxlZCwgZG9uJ3QgYWxsb3cgY2hhbmdpbmcgdGhlIHNvZnR3YXJlIHN0YXRlICovCisJICAgc3dpdGNoIGlzIGRpc2FibGVkLCBkb24ndCBhbGxvdyBjaGFuZ2luZyB0aGUgc29mdHdhcmUgc3RhdGUuCisJICAgSWYgdGhlIGhhcmR3YXJlIHN3aXRjaCBpcyByZXBvcnRlZCBhcyBub3Qgc3VwcG9ydGVkLCBhbHdheXMKKwkgICBmaXJlIHRoZSBTTUkgdG8gdG9nZ2xlIHRoZSBraWxsc3dpdGNoLiAqLwogCWlmICgoaHdzd2l0Y2hfc3RhdGUgJiBCSVQoaHdzd2l0Y2hfYml0KSkgJiYKLQkgICAgIShidWZmZXItPm91dHB1dFsxXSAmIEJJVCgxNikpKSB7CisJICAgICEoYnVmZmVyLT5vdXRwdXRbMV0gJiBCSVQoMTYpKSAmJgorCSAgICAoYnVmZmVyLT5vdXRwdXRbMV0gJiBCSVQoMCkpKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM5OCw2ICs0MDEsMjMgQEAKIAogc3RhdGljIHZvaWQgZGVsbF91cGRhdGVfcmZraWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKIHsKKwlpbnQgc3RhdHVzOworCisJZ2V0X2J1ZmZlcigpOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKKwlzdGF0dXMgPSBidWZmZXItPm91dHB1dFsxXTsKKwlyZWxlYXNlX2J1ZmZlcigpOworCisJLyogaWYgaGFyZHdhcmUgcmZraWxsIGlzIG5vdCBzdXBwb3J0ZWQsIHNldCBpdCBleHBsaWNpdGx5ICovCisJaWYgKCEoc3RhdHVzICYgQklUKDApKSkgeworCQlpZiAod2lmaV9yZmtpbGwpCisJCQlkZWxsX3Jma2lsbF9zZXQoKHZvaWQgKikxLCAhKChzdGF0dXMgJiBCSVQoMTcpKSA+PiAxNykpOworCQlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKKwkJCWRlbGxfcmZraWxsX3NldCgodm9pZCAqKTIsICEoKHN0YXR1cyAmIEJJVCgxOCkpID4+IDE4KSk7CisJCWlmICh3d2FuX3Jma2lsbCkKKwkJCWRlbGxfcmZraWxsX3NldCgodm9pZCAqKTMsICEoKHN0YXR1cyAmIEJJVCgxOSkpID4+IDE5KSk7CisJfQorCiAJaWYgKHdpZmlfcmZraWxsKQogCQlkZWxsX3Jma2lsbF9xdWVyeSh3aWZpX3Jma2lsbCwgKHZvaWQgKikxKTsKIAlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3BtaWNfZ3Bpby5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKaW5kZXggOTMwZTYyNy4uNjE0MzNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKQEAgLTYwLDY5ICs2MCwyMCBAQAogI2RlZmluZSBHUE9TV19ET1UgMHgwOAogI2RlZmluZSBHUE9TV19SRFJWIDB4MzAKIAorI2RlZmluZSBHUElPX1VQREFURV9UWVBFCTB4ODAwMDAwMDAKIAogI2RlZmluZSBOVU1fR1BJTyAyNAogCi1zdHJ1Y3QgcG1pY19ncGlvX2lycSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXUzMiB0cmlnZ2VyW05VTV9HUElPXTsKLQl1MzIgZGlydHk7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci19OwotCi0KIHN0cnVjdCBwbWljX2dwaW8geworCXN0cnVjdCBtdXRleAkJYnVzbG9jazsKIAlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7Ci0Jc3RydWN0IHBtaWNfZ3Bpb19pcnEJaXJxdHlwZXM7CiAJdm9pZAkJCSpncGlvaW50cjsKIAlpbnQJCQlpcnE7CiAJdW5zaWduZWQJCWlycV9iYXNlOworCXVuc2lnbmVkIGludAkJdXBkYXRlX3R5cGU7CisJdTMyCQkJdHJpZ2dlcl90eXBlOwogfTsKIAotc3RhdGljIHZvaWQgcG1pY19wcm9ncmFtX2lycXR5cGUoaW50IGdwaW8sIGludCB0eXBlKQotewotCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCi0JCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgyMCwgMHgyMCk7Ci0JZWxzZQotCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIGdwaW8sIDB4MDAsIDB4MjApOwotCi0JaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCi0JCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgxMCwgMHgxMCk7Ci0JZWxzZQotCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIGdwaW8sIDB4MDAsIDB4MTApOwotfTsKLQotc3RhdGljIHZvaWQgcG1pY19pcnF0eXBlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBwbWljX2dwaW9faXJxICp0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwbWljX2dwaW9faXJxLCB3b3JrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCXUxNiB0eXBlOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkvKiBBcyB3ZSBkcm9wIHRoZSBsb2NrLCB3ZSBtYXkgbmVlZCBtdWx0aXBsZSBzY2FucyBpZiB3ZSByYWNlIHRoZQotCSAgIHBtaWNfaXJxX3R5cGUgZnVuY3Rpb24gKi8KLQl3aGlsZSAodC0+ZGlydHkpIHsKLQkJLyoKLQkJICoJRm9yIGVhY2ggcGluIHRoYXQgaGFzIHRoZSBkaXJ0eSBiaXQgc2V0IHNlbmQgYW4gSVBDCi0JCSAqCW1lc3NhZ2UgdG8gY29uZmlndXJlIHRoZSBoYXJkd2FyZSB2aWEgdGhlIFBNSUMKLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fR1BJTzsgaSsrKSB7Ci0JCQlpZiAoISh0LT5kaXJ0eSAmICgxIDw8IGkpKSkKLQkJCQljb250aW51ZTsKLQkJCXQtPmRpcnR5ICY9IH4oMSA8PCBpKTsKLQkJCS8qIFdlIGNhbid0IHRydXN0IHRoZSBhcnJheSBlbnRyeSBvciBkaXJ0eQotCQkJICAgb25jZSB0aGUgbG9jayBpcyBkcm9wcGVkICovCi0JCQl0eXBlID0gdC0+dHJpZ2dlcltpXTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkJCXBtaWNfcHJvZ3JhbV9pcnF0eXBlKGksIHR5cGUpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0LT5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyBpbnQgcG1pY19ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJaWYgKG9mZnNldCA+IDgpIHsKQEAgLTE5MCwyNSArMTQxLDI0IEBACiAJCQkxIDw8IChvZmZzZXQgLSAxNikpOwogfQogCi1zdGF0aWMgaW50IHBtaWNfaXJxX3R5cGUodW5zaWduZWQgaXJxLCB1bnNpZ25lZCB0eXBlKQorLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gZ2VuaXJxIHdpdGggcGctPmJ1c2xvY2sgbG9ja2VkIGFuZAorICogaXJxX2Rlc2MtPmxvY2sgaGVsZC4gV2UgY2FuIG5vdCBhY2Nlc3MgdGhlIHNjdSBidXMgaGVyZSwgc28gd2UKKyAqIHN0b3JlIHRoZSBjaGFuZ2UgYW5kIHVwZGF0ZSBpbiB0aGUgYnVzX3N5bmNfdW5sb2NrKCkgZnVuY3Rpb24gYmVsb3cKKyAqLworc3RhdGljIGludCBwbWljX2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdW5zaWduZWQgdHlwZSkKIHsKLQlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JdTMyIGdwaW8gPSBpcnEgLSBwZy0+aXJxX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXUzMiBncGlvID0gZGF0YS0+aXJxIC0gcGctPmlycV9iYXNlOwogCiAJaWYgKGdwaW8gPj0gcGctPmNoaXAubmdwaW8pCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBnLT5pcnF0eXBlcy5sb2NrLCBmbGFncyk7Ci0JcGctPmlycXR5cGVzLnRyaWdnZXJbZ3Bpb10gPSB0eXBlOwotCXBnLT5pcnF0eXBlcy5kaXJ0eSB8PSAgKDEgPDwgZ3Bpbyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGctPmlycXR5cGVzLmxvY2ssIGZsYWdzKTsKLQlzY2hlZHVsZV93b3JrKCZwZy0+aXJxdHlwZXMud29yayk7CisJcGctPnRyaWdnZXJfdHlwZSA9IHR5cGU7CisJcGctPnVwZGF0ZV90eXBlID0gZ3BpbyB8IEdQSU9fVVBEQVRFX1RZUEU7CiAJcmV0dXJuIDA7CiB9CiAKLQotCiBzdGF0aWMgaW50IHBtaWNfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewogCXN0cnVjdCBwbWljX2dwaW8gKnBnID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbWljX2dwaW8sIGNoaXApOwpAQCAtMjE3LDM4ICsxNjcsMzIgQEAKIH0KIAogLyogdGhlIGdwaW9pbnRyIHJlZ2lzdGVyIGlzIHJlYWQtY2xlYXIsIHNvIGp1c3QgZG8gbm90aGluZy4gKi8KLXN0YXRpYyB2b2lkIHBtaWNfaXJxX3VubWFzayh1bnNpZ25lZCBpcnEpCi17Ci19Oworc3RhdGljIHZvaWQgcG1pY19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkgeyB9CiAKLXN0YXRpYyB2b2lkIHBtaWNfaXJxX21hc2sodW5zaWduZWQgaXJxKQotewotfTsKK3N0YXRpYyB2b2lkIHBtaWNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKSB7IH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwbWljX2lycWNoaXAgPSB7CiAJLm5hbWUJCT0gIlBNSUMtR1BJTyIsCi0JLm1hc2sJCT0gcG1pY19pcnFfbWFzaywKLQkudW5tYXNrCQk9IHBtaWNfaXJxX3VubWFzaywKLQkuc2V0X3R5cGUJPSBwbWljX2lycV90eXBlLAorCS5pcnFfbWFzawk9IHBtaWNfaXJxX21hc2ssCisJLmlycV91bm1hc2sJPSBwbWljX2lycV91bm1hc2ssCisJLmlycV9zZXRfdHlwZQk9IHBtaWNfaXJxX3R5cGUsCiB9OwogCi1zdGF0aWMgdm9pZCBwbWljX2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIGlycXJldHVybl90IHBtaWNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IChzdHJ1Y3QgcG1pY19ncGlvICopZ2V0X2lycV9kYXRhKGlycSk7CisJc3RydWN0IHBtaWNfZ3BpbyAqcGcgPSBkYXRhOwogCXU4IGludHN0cyA9ICooKHU4ICopcGctPmdwaW9pbnRyICsgNCk7CiAJaW50IGdwaW87CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CiAKIAlmb3IgKGdwaW8gPSAwOyBncGlvIDwgODsgZ3BpbysrKSB7CiAJCWlmIChpbnRzdHMgJiAoMSA8PCBncGlvKSkgewogCQkJcHJfZGVidWcoInBtaWMgcGluICVkIHRyaWdnZXJlZFxuIiwgZ3Bpbyk7CiAJCQlnZW5lcmljX2hhbmRsZV9pcnEocGctPmlycV9iYXNlICsgZ3Bpbyk7CisJCQlyZXQgPSBJUlFfSEFORExFRDsKIAkJfQogCX0KLQotCWlmIChkZXNjLT5jaGlwLT5pcnFfZW9pKQotCQlkZXNjLT5jaGlwLT5pcnFfZW9pKGlycV9nZXRfaXJxX2RhdGEoaXJxKSk7Ci0JZWxzZQotCQlkZXZfd2FybihwZy0+Y2hpcC5kZXYsICJtaXNzaW5nIEVPSSBoYW5kbGVyIGZvciBpcnEgJWRcbiIsIGlycSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgcGxhdGZvcm1fcG1pY19ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0yOTcsOCArMjQxLDcgQEAKIAlwZy0+Y2hpcC5jYW5fc2xlZXAgPSAxOwogCXBnLT5jaGlwLmRldiA9IGRldjsKIAotCUlOSVRfV09SSygmcGctPmlycXR5cGVzLndvcmssIHBtaWNfaXJxdHlwZV93b3JrKTsKLQlzcGluX2xvY2tfaW5pdCgmcGctPmlycXR5cGVzLmxvY2spOworCW11dGV4X2luaXQoJnBnLT5idXNsb2NrKTsKIAogCXBnLT5jaGlwLmRldiA9IGRldjsKIAlyZXR2YWwgPSBncGlvY2hpcF9hZGQoJnBnLT5jaGlwKTsKQEAgLTMwNiw4ICsyNDksMTMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuIG5vdCBhZGQgcG1pYyBncGlvIGNoaXAuXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyOwogCX0KLQlzZXRfaXJxX2RhdGEocGctPmlycSwgcGcpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHBnLT5pcnEsIHBtaWNfaXJxX2hhbmRsZXIpOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEocGctPmlycSwgcG1pY19pcnFfaGFuZGxlciwgMCwgInBtaWMiLCBwZyk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbWljOiBJbnRlcnJ1cHQgcmVxdWVzdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGkgKyBwZy0+aXJxX2Jhc2UsICZwbWljX2lycWNoaXAsCiAJCQkJCWhhbmRsZV9zaW1wbGVfaXJxLCAiZGVtdXgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYwppbmRleCBmMzc0YzU5Li5hOTFkNTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwYy5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2ZpLmg+CiAjaW5jbHVkZSA8YXNtL21yc3QuaD4KICNpbmNsdWRlIDxhc20vaW50ZWxfc2N1X2lwYy5oPgotI2luY2x1ZGUgPGFzbS9tcnN0Lmg+CiAKIC8qIElQQyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSB0eXBlcyAqLwogI2RlZmluZSBJUENNU0dfV0FUQ0hET0dfVElNRVIgMHhGOCAvKiBTZXQgS2VybmVsIFdhdGNoZG9nIFRocmVzaG9sZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCmluZGV4IDFmZTBmMWYuLjg2NWVmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7IFwKIAlyZXR1cm4gY291bnQ7IFwKIH0gXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTyB8IFNfSVdVU1IsIFwKK3N0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKIAlzaG93X2Jvb2xfIyN2YWx1ZSwgc2V0X2Jvb2xfIyN2YWx1ZSk7CiAKIHNob3dfc2V0X2Jvb2wod2lyZWxlc3MsIFRDMTEwMF9JTlNUQU5DRV9XSVJFTEVTUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZGQ1OTk1OC4uZWI5OTIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMjI3NSwxNiArMjI3NSwxMiBAQAogCWlmIChrZXljb2RlICE9IEtFWV9SRVNFUlZFRCkgewogCQltdXRleF9sb2NrKCZ0cGFjcGlfaW5wdXRkZXZfc2VuZF9tdXRleCk7CiAKKwkJaW5wdXRfZXZlbnQodHBhY3BpX2lucHV0ZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBzY2FuY29kZSk7CiAJCWlucHV0X3JlcG9ydF9rZXkodHBhY3BpX2lucHV0ZGV2LCBrZXljb2RlLCAxKTsKLQkJaWYgKGtleWNvZGUgPT0gS0VZX1VOS05PV04pCi0JCQlpbnB1dF9ldmVudCh0cGFjcGlfaW5wdXRkZXYsIEVWX01TQywgTVNDX1NDQU4sCi0JCQkJICAgIHNjYW5jb2RlKTsKIAkJaW5wdXRfc3luYyh0cGFjcGlfaW5wdXRkZXYpOwogCisJCWlucHV0X2V2ZW50KHRwYWNwaV9pbnB1dGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgc2NhbmNvZGUpOwogCQlpbnB1dF9yZXBvcnRfa2V5KHRwYWNwaV9pbnB1dGRldiwga2V5Y29kZSwgMCk7Ci0JCWlmIChrZXljb2RlID09IEtFWV9VTktOT1dOKQotCQkJaW5wdXRfZXZlbnQodHBhY3BpX2lucHV0ZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLAotCQkJCSAgICBzY2FuY29kZSk7CiAJCWlucHV0X3N5bmModHBhY3BpX2lucHV0ZGV2KTsKIAogCQltdXRleF91bmxvY2soJnRwYWNwaV9pbnB1dGRldl9zZW5kX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvS2NvbmZpZyBiL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvS2NvbmZpZwppbmRleCBmM2E3M2RkLi5lNGM0ZjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL0tjb25maWcKKysrIGIvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogCiBjb25maWcgUFBTX0dFTkVSQVRPUl9QQVJQT1JUCiAJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQgUFBTIHNpZ25hbCBnZW5lcmF0b3IiCi0JZGVwZW5kcyBvbiBQQVJQT1JUCisJZGVwZW5kcyBvbiBQQVJQT1JUICYmIEJST0tFTgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBhIFBQUyBzaWduYWwgZ2VuZXJhdG9yIHdoaWNoCiAJICB1dGlsaXplcyBTVFJPQkUgcGluIG9mIGEgcGFyYWxsZWwgcG9ydCB0byBzZW5kIFBQUyBzaWduYWxzLiBJdCB1c2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9rYXBpLmMgYi9kcml2ZXJzL3Bwcy9rYXBpLmMKaW5kZXggY2JhMWI0My4uYTRlOGViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMva2FwaS5jCisrKyBiL2RyaXZlcnMvcHBzL2thcGkuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY2FwdHVyZWQgPSAwOwotCXN0cnVjdCBwcHNfa3RpbWUgdHNfcmVhbDsKKwlzdHJ1Y3QgcHBzX2t0aW1lIHRzX3JlYWwgPSB7IC5zZWMgPSAwLCAubnNlYyA9IDAsIC5mbGFncyA9IDAgfTsKIAogCS8qIGNoZWNrIGV2ZW50IHR5cGUgKi8KIAlCVUdfT04oKGV2ZW50ICYgKFBQU19DQVBUVVJFQVNTRVJUIHwgUFBTX0NBUFRVUkVDTEVBUikpID09IDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zeXNmcy5jIGIvZHJpdmVycy9yYXBpZGlvL3Jpby1zeXNmcy5jCmluZGV4IDc2YjQxODUuLjEyNjlmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8tc3lzZnMuYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMKQEAgLTc3LDkgKzc3LDkgQEAKIAogCS8qIFNldmVyYWwgY2hpcHMgbG9jayB1cCB0cnlpbmcgdG8gcmVhZCB1bmRlZmluZWQgY29uZmlnIHNwYWNlICovCiAJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXNpemUgPSAweDIwMDAwMDsKKwkJc2l6ZSA9IFJJT19NQUlOVF9TUEFDRV9TWjsKIAotCWlmIChvZmYgPiBzaXplKQorCWlmIChvZmYgPj0gc2l6ZSkKIAkJcmV0dXJuIDA7CiAJaWYgKG9mZiArIGNvdW50ID4gc2l6ZSkgewogCQlzaXplIC09IG9mZjsKQEAgLTE0NywxMCArMTQ3LDEwIEBACiAJbG9mZl90IGluaXRfb2ZmID0gb2ZmOwogCXU4ICpkYXRhID0gKHU4ICopIGJ1ZjsKIAotCWlmIChvZmYgPiAweDIwMDAwMCkKKwlpZiAob2ZmID49IFJJT19NQUlOVF9TUEFDRV9TWikKIAkJcmV0dXJuIDA7Ci0JaWYgKG9mZiArIGNvdW50ID4gMHgyMDAwMDApIHsKLQkJc2l6ZSA9IDB4MjAwMDAwIC0gb2ZmOworCWlmIChvZmYgKyBjb3VudCA+IFJJT19NQUlOVF9TUEFDRV9TWikgeworCQlzaXplID0gUklPX01BSU5UX1NQQUNFX1NaIC0gb2ZmOwogCQljb3VudCA9IHNpemU7CiAJfQogCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkJIC5uYW1lID0gImNvbmZpZyIsCiAJCSAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAogCQkgfSwKLQkuc2l6ZSA9IDB4MjAwMDAwLAorCS5zaXplID0gUklPX01BSU5UX1NQQUNFX1NaLAogCS5yZWFkID0gcmlvX3JlYWRfY29uZmlnLAogCS53cml0ZSA9IHJpb193cml0ZV9jb25maWcsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5jCmluZGV4IGY1M2QzMWIuLjJiYjVkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzeHh4LXJlZ3VsYXRvci1jb3JlLmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCiAJZGV2X2RiZyhyZGV2X2dldF9kZXYocmRldiksICIlcyBpZDogJWQgdmFsOiAlZFxuIiwgX19mdW5jX18sIGlkLCB2YWwpOwogCi0JQlVHX09OKHZhbCA8IDAgfHwgdmFsID4gbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS5kZXNjLm5fdm9sdGFnZXMpOworCUJVR19PTih2YWwgPiBtYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLmRlc2Mubl92b2x0YWdlcyk7CiAKIAlyZXR1cm4gbWMxM3h4eF9yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1t2YWxdOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMKaW5kZXggOGIwZDJjNC4uMDZkZjg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jCkBAIC0xMjAsNiArMTIwLDcgQEAKIAkJcmV0dXJuIFJFR1VMQVRPUl9NT0RFX0lETEU7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggY2RkOTcxOS4uNDk0MWNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC05Nyw2ICs5NywxOCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCitjb25maWcgUlRDX0lOVEZfREVWX1VJRV9FTVVMCisJYm9vbCAiUlRDIFVJRSBlbXVsYXRpb24gb24gZGV2IGludGVyZmFjZSIKKwlkZXBlbmRzIG9uIFJUQ19JTlRGX0RFVgorCWhlbHAKKwkgIFByb3ZpZGVzIGFuIGVtdWxhdGlvbiBmb3IgUlRDX1VJRSBpZiB0aGUgdW5kZXJseWluZyBydGMgY2hpcAorCSAgZHJpdmVyIGRvZXMgbm90IGV4cG9zZSBSVENfVUlFIGlvY3Rscy4gVGhvc2UgcmVxdWVzdHMgZ2VuZXJhdGUKKwkgIG9uY2UtcGVyLXNlY29uZCB1cGRhdGUgaW50ZXJydXB0cywgdXNlZCBmb3Igc3luY2hyb25pemF0aW9uLgorCisJICBUaGUgZW11bGF0aW9uIGNvZGUgd2lsbCByZWFkIHRoZSB0aW1lIGZyb20gdGhlIGhhcmR3YXJlCisJICBjbG9jayBzZXZlcmFsIHRpbWVzIHBlciBzZWNvbmQsIHBsZWFzZSBlbmFibGUgdGhpcyBvcHRpb24KKwkgIG9ubHkgaWYgeW91IGtub3cgdGhhdCB5b3UgcmVhbGx5IG5lZWQgaXQuCisKIGNvbmZpZyBSVENfRFJWX1RFU1QKIAl0cmlzdGF0ZSAiVGVzdCBkcml2ZXIvZGV2aWNlIgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2NsYXNzLmMgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCmluZGV4IDk1ODNjYmMuLmM0MDRiNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2NsYXNzLmMKKysrIGIvZHJpdmVycy9ydGMvY2xhc3MuYwpAQCAtMTQzLDYgKzE0Myw3IEBACiAJcnRjLT5pZCA9IGlkOwogCXJ0Yy0+b3BzID0gb3BzOwogCXJ0Yy0+b3duZXIgPSBvd25lcjsKKwlydGMtPmlycV9mcmVxID0gMTsKIAlydGMtPm1heF91c2VyX2ZyZXEgPSA2NDsKIAlydGMtPmRldi5wYXJlbnQgPSBkZXY7CiAJcnRjLT5kZXYuY2xhc3MgPSBydGNfY2xhc3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCmluZGV4IDkyNTAwNmQuLmNiMmYwNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCkBAIC0yMDksOSArMjA5LDggQEAKIAl9CiAKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKCFydGMtPm9wcykKKwkJLyogbm90aGluZyAqLzsKKwllbHNlIGlmICghcnRjLT5vcHMpCiAJCWVyciA9IC1FTk9ERVY7CiAJZWxzZSBpZiAoIXJ0Yy0+b3BzLT5hbGFybV9pcnFfZW5hYmxlKQogCQllcnIgPSAtRUlOVkFMOwpAQCAtMjI5LDYgKzIyOCwxMiBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKyNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMCisJaWYgKGVuYWJsZWQgPT0gMCAmJiBydGMtPnVpZV9pcnFfYWN0aXZlKSB7CisJCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CisJCXJldHVybiBydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwocnRjLCAwKTsKKwl9CisjZW5kaWYKIAkvKiBtYWtlIHN1cmUgd2UncmUgY2hhbmdpbmcgc3RhdGUgKi8KIAlpZiAocnRjLT51aWVfcnRjdGltZXIuZW5hYmxlZCA9PSBlbmFibGVkKQogCQlnb3RvIG91dDsKQEAgLTI0OCw2ICsyNTMsMTYgQEAKIAogb3V0OgogCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CisjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAorCS8qCisJICogRW5hYmxlIGVtdWxhdGlvbiBpZiB0aGUgZHJpdmVyIGRpZCBub3QgcHJvdmlkZQorCSAqIHRoZSB1cGRhdGVfaXJxX2VuYWJsZSBmdW5jdGlvbiBwb2ludGVyIG9yIGlmIHJldHVybmVkCisJICogLUVJTlZBTCB0byBzaWduYWwgdGhhdCBpdCBoYXMgYmVlbiBjb25maWd1cmVkIHdpdGhvdXQKKwkgKiBpbnRlcnJ1cHRzIG9yIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC4KKwkgKi8KKwlpZiAoZXJyID09IC1FSU5WQUwpCisJCWVyciA9IHJ0Y19kZXZfdXBkYXRlX2lycV9lbmFibGVfZW11bChydGMsIGVuYWJsZWQpOworI2VuZGlmCiAJcmV0dXJuIGVycjsKIAogfQpAQCAtMjYzLDcgKzI3OCw3IEBACiAgKgogICogVHJpZ2dlcnMgdGhlIHJlZ2lzdGVyZWQgaXJxX3Rhc2sgZnVuY3Rpb24gY2FsbGJhY2suCiAgKi8KLXN0YXRpYyB2b2lkIHJ0Y19oYW5kbGVfbGVnYWN5X2lycShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBpbnQgbnVtLCBpbnQgbW9kZSkKK3ZvaWQgcnRjX2hhbmRsZV9sZWdhY3lfaXJxKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIGludCBudW0sIGludCBtb2RlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQ2NCw2ICs0NzksOSBAQAogCWludCBlcnIgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoZnJlcSA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZydGMtPmlycV90YXNrX2xvY2ssIGZsYWdzKTsKIAlpZiAocnRjLT5pcnFfdGFzayAhPSBOVUxMICYmIHRhc2sgPT0gTlVMTCkKIAkJZXJyID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0MzJhcDcwMHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDMyYXA3MDB4LmMKaW5kZXggYjI3NTJiNi4uZTcyNWQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0MzJhcDcwMHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQzMmFwNzAweC5jCkBAIC0xMzQsMzYgKzEzNCwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYXQzMl9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGF0MzJfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgcnRjX2F0MzJhcDcwMHggKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycSgmcnRjLT5sb2NrKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09OOgorCWlmKGVuYWJsZWQpIHsKIAkJaWYgKHJ0Y19yZWFkbChydGMsIFZBTCkgPiBydGMtPmFsYXJtX3RpbWUpIHsKIAkJCXJldCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKKwkJCWdvdG8gb3V0OwogCQl9CiAJCXJ0Y193cml0ZWwocnRjLCBDVFJMLCBydGNfcmVhZGwocnRjLCBDVFJMKQogCQkJCXwgUlRDX0JJVChDVFJMX1RPUEVOKSk7CiAJCXJ0Y193cml0ZWwocnRjLCBJQ1IsIFJUQ19CSVQoSUNSX1RPUEkpKTsKIAkJcnRjX3dyaXRlbChydGMsIElFUiwgUlRDX0JJVChJRVJfVE9QSSkpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT0ZGOgorCX0gZWxzZSB7CiAJCXJ0Y193cml0ZWwocnRjLCBDVFJMLCBydGNfcmVhZGwocnRjLCBDVFJMKQogCQkJCSYgflJUQ19CSVQoQ1RSTF9UT1BFTikpOwogCQlydGNfd3JpdGVsKHJ0YywgSURSLCBSVENfQklUKElEUl9UT1BJKSk7CiAJCXJ0Y193cml0ZWwocnRjLCBJQ1IsIFJUQ19CSVQoSUNSX1RPUEkpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVOT0lPQ1RMQ01EOwotCQlicmVhazsKIAl9Ci0KK291dDoKIAlzcGluX3VubG9ja19pcnEoJnJ0Yy0+bG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTk1LDExICsxODgsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGF0MzJfcnRjX29wcyA9IHsKLQkuaW9jdGwJCT0gYXQzMl9ydGNfaW9jdGwsCiAJLnJlYWRfdGltZQk9IGF0MzJfcnRjX3JlYWR0aW1lLAogCS5zZXRfdGltZQk9IGF0MzJfcnRjX3NldHRpbWUsCiAJLnJlYWRfYWxhcm0JPSBhdDMyX3J0Y19yZWFkYWxhcm0sCiAJLnNldF9hbGFybQk9IGF0MzJfcnRjX3NldGFsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gYXQzMl9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGF0MzJfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwppbmRleCBiYzhiYmNhLi4yNmQxY2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKQEAgLTE5NSwxMyArMTk1LDYgQEAKIAogCS8qIGltcG9ydGFudDogIHNjcnViIG9sZCBzdGF0dXMgYmVmb3JlIGVuYWJsaW5nIElSUXMgKi8KIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6CS8qIGFsYXJtIG9mZiAqLwotCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRFIsIEFUOTFfUlRDX0FMQVJNKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgkvKiBhbGFybSBvbiAqLwotCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19TQ0NSLCBBVDkxX1JUQ19BTEFSTSk7Ci0JCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lFUiwgQVQ5MV9SVENfQUxBUk0pOwotCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT0ZGOgkvKiB1cGRhdGUgb2ZmICovCiAJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lEUiwgQVQ5MV9SVENfU0VDRVYpOwogCQlicmVhazsKQEAgLTIxNyw2ICsyMTAsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGF0OTFfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlwcl9kZWJ1ZygiJXMoKTogY21kPSUwOHhcbiIsIF9fZnVuY19fLCBlbmFibGVkKTsKKworCWlmIChlbmFibGVkKSB7CisJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX1NDQ1IsIEFUOTFfUlRDX0FMQVJNKTsKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSUVSLCBBVDkxX1JUQ19BTEFSTSk7CisJfSBlbHNlCisJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lEUiwgQVQ5MV9SVENfQUxBUk0pOworCisJcmV0dXJuIDA7Cit9CiAvKgogICogUHJvdmlkZSBhZGRpdGlvbmFsIFJUQyBpbmZvcm1hdGlvbiBpbiAvcHJvYy9kcml2ZXIvcnRjCiAgKi8KQEAgLTI3MCw2ICsyNzUsNyBAQAogCS5yZWFkX2FsYXJtCT0gYXQ5MV9ydGNfcmVhZGFsYXJtLAogCS5zZXRfYWxhcm0JPSBhdDkxX3J0Y19zZXRhbGFybSwKIAkucHJvYwkJPSBhdDkxX3J0Y19wcm9jLAorCS5hbGFybV9pcnFfZW5hYmxlID0gYXQ5MV9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCmluZGV4IGY2NzdlMDcuLjU0NjljNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jCkBAIC0yMjksMTIgKzIyOSw2IEBACiAJZGV2X2RiZyhkZXYsICJpb2N0bDogY21kPSUwOHgsIGFyZz0lMDhseCwgbXIgJTA4eFxuIiwgY21kLCBhcmcsIG1yKTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoJCS8qIGFsYXJtIG9mZiAqLwotCQlydHRfd3JpdGVsKHJ0YywgTVIsIG1yICYgfkFUOTFfUlRUX0FMTUlFTik7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoJCS8qIGFsYXJtIG9uICovCi0JCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgfCBBVDkxX1JUVF9BTE1JRU4pOwotCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT0ZGOgkJLyogdXBkYXRlIG9mZiAqLwogCQlydHRfd3JpdGVsKHJ0YywgTVIsIG1yICYgfkFUOTFfUlRUX1JUVElOQ0lFTik7CiAJCWJyZWFrOwpAQCAtMjQ5LDYgKzI0MywxOSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXQ5MV9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXN0cnVjdCBzYW05X3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTMyIG1yID0gcnR0X3JlYWRsKHJ0YywgTVIpOworCisJZGV2X2RiZyhkZXYsICJhbGFybV9pcnFfZW5hYmxlOiBlbmFibGVkPSUwOHgsIG1yICUwOHhcbiIsIGVuYWJsZWQsIG1yKTsKKwlpZiAoZW5hYmxlZCkKKwkJcnR0X3dyaXRlbChydGMsIE1SLCBtciB8IEFUOTFfUlRUX0FMTUlFTik7CisJZWxzZQorCQlydHRfd3JpdGVsKHJ0YywgTVIsIG1yICYgfkFUOTFfUlRUX0FMTUlFTik7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBQcm92aWRlIGFkZGl0aW9uYWwgUlRDIGluZm9ybWF0aW9uIGluIC9wcm9jL2RyaXZlci9ydGMKICAqLwpAQCAtMzAyLDYgKzMwOSw3IEBACiAJLnJlYWRfYWxhcm0JPSBhdDkxX3J0Y19yZWFkYWxhcm0sCiAJLnNldF9hbGFybQk9IGF0OTFfcnRjX3NldGFsYXJtLAogCS5wcm9jCQk9IGF0OTFfcnRjX3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jCmluZGV4IGI0YjYwODcuLjE3OTcxZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWJmaW4uYwpAQCAtMjU5LDE1ICsyNTksNiBAQAogCQliZmluX3J0Y19pbnRfY2xlYXIoflJUQ19JU1RBVF9TRUMpOwogCQlicmVhazsKIAotCWNhc2UgUlRDX0FJRV9PTjoKLQkJZGV2X2RiZ19zdGFtcChkZXYpOwotCQliZmluX3J0Y19pbnRfc2V0X2FsYXJtKHJ0Yyk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCWRldl9kYmdfc3RhbXAoZGV2KTsKLQkJYmZpbl9ydGNfaW50X2NsZWFyKH4oUlRDX0lTVEFUX0FMQVJNIHwgUlRDX0lTVEFUX0FMQVJNX0RBWSkpOwotCQlicmVhazsKLQogCWRlZmF1bHQ6CiAJCWRldl9kYmdfc3RhbXAoZGV2KTsKIAkJcmV0ID0gLUVOT0lPQ1RMQ01EOwpAQCAtMjc2LDYgKzI2NywxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYmZpbl9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXN0cnVjdCBiZmluX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkZXZfZGJnX3N0YW1wKGRldik7CisJaWYgKGVuYWJsZWQpCisJCWJmaW5fcnRjX2ludF9zZXRfYWxhcm0ocnRjKTsKKwllbHNlCisJCWJmaW5fcnRjX2ludF9jbGVhcih+KFJUQ19JU1RBVF9BTEFSTSB8IFJUQ19JU1RBVF9BTEFSTV9EQVkpKTsKK30KKwogc3RhdGljIGludCBiZmluX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXN0cnVjdCBiZmluX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC0zNjIsNiArMzY0LDcgQEAKIAkucmVhZF9hbGFybSAgICA9IGJmaW5fcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybSAgICAgPSBiZmluX3J0Y19zZXRfYWxhcm0sCiAJLnByb2MgICAgICAgICAgPSBiZmluX3J0Y19wcm9jLAorCS5hbGFybV9pcnFfZW5hYmxlID0gYmZpbl9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJmaW5fcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKaW5kZXggMjEyYjE2ZS4uZDBlMDZlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRldi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwpAQCAtNDYsNiArNDYsMTA1IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwKKy8qCisgKiBSb3V0aW5lIHRvIHBvbGwgUlRDIHNlY29uZHMgZmllbGQgZm9yIGNoYW5nZSBhcyBvZnRlbiBhcyBwb3NzaWJsZSwKKyAqIGFmdGVyIGZpcnN0IFJUQ19VSUUgdXNlIHRpbWVyIHRvIHJlZHVjZSBwb2xsaW5nCisgKi8KK3N0YXRpYyB2b2lkIHJ0Y191aWVfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnRjX2RldmljZSwgdWllX3Rhc2spOworCXN0cnVjdCBydGNfdGltZSB0bTsKKwlpbnQgbnVtID0gMDsKKwlpbnQgZXJyOworCisJZXJyID0gcnRjX3JlYWRfdGltZShydGMsICZ0bSk7CisKKwlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwlpZiAocnRjLT5zdG9wX3VpZV9wb2xsaW5nIHx8IGVycikgeworCQlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDA7CisJfSBlbHNlIGlmIChydGMtPm9sZHNlY3MgIT0gdG0udG1fc2VjKSB7CisJCW51bSA9ICh0bS50bV9zZWMgKyA2MCAtIHJ0Yy0+b2xkc2VjcykgJSA2MDsKKwkJcnRjLT5vbGRzZWNzID0gdG0udG1fc2VjOworCQlydGMtPnVpZV90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaIC0gKEhaLzEwKTsKKwkJcnRjLT51aWVfdGltZXJfYWN0aXZlID0gMTsKKwkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAwOworCQlhZGRfdGltZXIoJnJ0Yy0+dWllX3RpbWVyKTsKKwl9IGVsc2UgaWYgKHNjaGVkdWxlX3dvcmsoJnJ0Yy0+dWllX3Rhc2spID09IDApIHsKKwkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCWlmIChudW0pCisJCXJ0Y19oYW5kbGVfbGVnYWN5X2lycShydGMsIG51bSwgUlRDX1VGKTsKK30KK3N0YXRpYyB2b2lkIHJ0Y191aWVfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSAoc3RydWN0IHJ0Y19kZXZpY2UgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjLT5pcnFfbG9jaywgZmxhZ3MpOworCXJ0Yy0+dWllX3RpbWVyX2FjdGl2ZSA9IDA7CisJcnRjLT51aWVfdGFza19hY3RpdmUgPSAxOworCWlmICgoc2NoZWR1bGVfd29yaygmcnRjLT51aWVfdGFzaykgPT0gMCkpCisJCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGMtPmlycV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgY2xlYXJfdWllKHN0cnVjdCBydGNfZGV2aWNlICpydGMpCit7CisJc3Bpbl9sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJaWYgKHJ0Yy0+dWllX2lycV9hY3RpdmUpIHsKKwkJcnRjLT5zdG9wX3VpZV9wb2xsaW5nID0gMTsKKwkJaWYgKHJ0Yy0+dWllX3RpbWVyX2FjdGl2ZSkgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwkJCWRlbF90aW1lcl9zeW5jKCZydGMtPnVpZV90aW1lcik7CisJCQlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwkJCXJ0Yy0+dWllX3RpbWVyX2FjdGl2ZSA9IDA7CisJCX0KKwkJaWYgKHJ0Yy0+dWllX3Rhc2tfYWN0aXZlKSB7CisJCQlzcGluX3VubG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCQl9CisJCXJ0Yy0+dWllX2lycV9hY3RpdmUgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF91aWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKK3sKKwlzdHJ1Y3QgcnRjX3RpbWUgdG07CisJaW50IGVycjsKKworCWVyciA9IHJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJc3Bpbl9sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJaWYgKCFydGMtPnVpZV9pcnFfYWN0aXZlKSB7CisJCXJ0Yy0+dWllX2lycV9hY3RpdmUgPSAxOworCQlydGMtPnN0b3BfdWllX3BvbGxpbmcgPSAwOworCQlydGMtPm9sZHNlY3MgPSB0bS50bV9zZWM7CisJCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMTsKKwkJaWYgKHNjaGVkdWxlX3dvcmsoJnJ0Yy0+dWllX3Rhc2spID09IDApCisJCQlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDA7CisJfQorCXJ0Yy0+aXJxX2RhdGEgPSAwOworCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJaWYgKGVuYWJsZWQpCisJCXJldHVybiBzZXRfdWllKHJ0Yyk7CisJZWxzZQorCQlyZXR1cm4gY2xlYXJfdWllKHJ0Yyk7Cit9CitFWFBPUlRfU1lNQk9MKHJ0Y19kZXZfdXBkYXRlX2lycV9lbmFibGVfZW11bCk7CisKKyNlbmRpZiAvKiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMICovCiAKIHN0YXRpYyBzc2l6ZV90CiBydGNfZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpAQCAtMTU0LDE5ICsyNTMsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZG9uZTsKIAotCS8qIHRyeSB0aGUgZHJpdmVyJ3MgaW9jdGwgaW50ZXJmYWNlICovCi0JaWYgKG9wcy0+aW9jdGwpIHsKLQkJZXJyID0gb3BzLT5pb2N0bChydGMtPmRldi5wYXJlbnQsIGNtZCwgYXJnKTsKLQkJaWYgKGVyciAhPSAtRU5PSU9DVExDTUQpIHsKLQkJCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JLyogaWYgdGhlIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlIHRoZSBpb2N0bCBpbnRlcmZhY2UKLQkgKiBvciBpZiB0aGF0IHBhcnRpY3VsYXIgaW9jdGwgd2FzIG5vdCBpbXBsZW1lbnRlZAotCSAqICgtRU5PSU9DVExDTUQpLCB3ZSB3aWxsIHRyeSB0byBlbXVsYXRlIGhlcmUuCi0JICoKKwkvKgogCSAqIERyaXZlcnMgKlNIT1VMRCBOT1QqIHByb3ZpZGUgaW9jdGwgaW1wbGVtZW50YXRpb25zCiAJICogZm9yIHRoZXNlIHJlcXVlc3RzLiAgSW5zdGVhZCwgcHJvdmlkZSBtZXRob2RzIHRvCiAJICogc3VwcG9ydCB0aGUgZm9sbG93aW5nIGNvZGUsIHNvIHRoYXQgdGhlIFJUQydzIG1haW4KQEAgLTMyOSw3ICs0MTYsMTIgQEAKIAkJcmV0dXJuIGVycjsKIAogCWRlZmF1bHQ6Ci0JCWVyciA9IC1FTk9UVFk7CisJCS8qIEZpbmFsbHkgdHJ5IHRoZSBkcml2ZXIncyBpb2N0bCBpbnRlcmZhY2UgKi8KKwkJaWYgKG9wcy0+aW9jdGwpIHsKKwkJCWVyciA9IG9wcy0+aW9jdGwocnRjLT5kZXYucGFyZW50LCBjbWQsIGFyZyk7CisJCQlpZiAoZXJyID09IC1FTk9JT0NUTENNRCkKKwkJCQllcnIgPSAtRU5PVFRZOworCQl9CiAJCWJyZWFrOwogCX0KIApAQCAtMzk0LDYgKzQ4NiwxMSBAQAogCiAJcnRjLT5kZXYuZGV2dCA9IE1LREVWKE1BSk9SKHJ0Y19kZXZ0KSwgcnRjLT5pZCk7CiAKKyNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMCisJSU5JVF9XT1JLKCZydGMtPnVpZV90YXNrLCBydGNfdWllX3Rhc2spOworCXNldHVwX3RpbWVyKCZydGMtPnVpZV90aW1lciwgcnRjX3VpZV90aW1lciwgKHVuc2lnbmVkIGxvbmcpcnRjKTsKKyNlbmRpZgorCiAJY2Rldl9pbml0KCZydGMtPmNoYXJfZGV2LCAmcnRjX2Rldl9mb3BzKTsKIAlydGMtPmNoYXJfZGV2Lm93bmVyID0gcnRjLT5vd25lcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYwppbmRleCBiZjQzMGY5Li42MGNlNjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCkBAIC00MCw2ICs0MCwyNiBAQAogCV9fcmF3X3dyaXRlbChkYXRhLCAmcHJpdi0+cnRjcmVnc1tyZWddKTsKIH0KIAorCitzdGF0aWMgaW50IGRzMTI4Nl9hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IGRzMTI4Nl9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKworCS8qIEFsbG93IG9yIG1hc2sgYWxhcm0gaW50ZXJydXB0cyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJdmFsID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOworCWlmIChlbmFibGVkKQorCQl2YWwgJj0gIH5SVENfVERNOworCWVsc2UKKwkJdmFsIHw9ICBSVENfVERNOworCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgdmFsLCBSVENfQ01EKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVYKIAogc3RhdGljIGludCBkczEyODZfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKQEAgLTQ5LDIyICs2OSw2IEBACiAJdW5zaWduZWQgY2hhciB2YWw7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCS8qIE1hc2sgYWxhcm0gaW50LiBlbmFiLiBiaXQJKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJdmFsID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOwotCQl2YWwgfD0gIFJUQ19URE07Ci0JCWRzMTI4Nl9ydGNfd3JpdGUocHJpdiwgdmFsLCBSVENfQ01EKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046Ci0JCS8qIEFsbG93IGFsYXJtIGludGVycnVwdHMuCSovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCXZhbCA9IGRzMTI4Nl9ydGNfcmVhZChwcml2LCBSVENfQ01EKTsKLQkJdmFsICY9ICB+UlRDX1RETTsKLQkJZHMxMjg2X3J0Y193cml0ZShwcml2LCB2YWwsIFJUQ19DTUQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwogCWNhc2UgUlRDX1dJRV9PRkY6CiAJCS8qIE1hc2sgd2F0Y2hkb2cgaW50LiBlbmFiLiBiaXQJKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTMxNiwxMiArMzIwLDEzIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczEyODZfb3BzID0gewotCS5pb2N0bCAgIAk9IGRzMTI4Nl9pb2N0bCwKLQkucHJvYyAgIAk9IGRzMTI4Nl9wcm9jLAorCS5pb2N0bAkJPSBkczEyODZfaW9jdGwsCisJLnByb2MJCT0gZHMxMjg2X3Byb2MsCiAJLnJlYWRfdGltZQk9IGRzMTI4Nl9yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gZHMxMjg2X3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gZHMxMjg2X3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IGRzMTI4Nl9zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBkczEyODZfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGRzMTI4Nl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCmluZGV4IDA3N2FmMWQuLjU3ZmJjYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKQEAgLTEzOSw0OSArMTM5LDMyIEBACiAgKiBJbnRlcmZhY2UgdG8gUlRDIGZyYW1ld29yawogICovCiAKLSNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWCi0KLS8qCi0gKiBDb250ZXh0OiBjYWxsZXIgaG9sZHMgcnRjLT5vcHNfbG9jayAodG8gcHJvdGVjdCBkczEzMDUtPmN0cmwpCi0gKi8KLXN0YXRpYyBpbnQgZHMxMzA1X2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgZHMxMzA1X2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgZHMxMzA1CSpkczEzMDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1OAkJYnVmWzJdOwotCWludAkJc3RhdHVzID0gLUVOT0lPQ1RMQ01EOworCWxvbmcJCWVyciA9IC1FSU5WQUw7CiAKIAlidWZbMF0gPSBEUzEzMDVfV1JJVEUgfCBEUzEzMDVfQ09OVFJPTDsKIAlidWZbMV0gPSBkczEzMDUtPmN0cmxbMF07CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXN0YXR1cyA9IDA7Ci0JCWlmICghKGJ1ZlsxXSAmIERTMTMwNV9BRUkwKSkKLQkJCWdvdG8gZG9uZTsKLQkJYnVmWzFdICY9IH5EUzEzMDVfQUVJMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFJUQ19BSUVfT046Ci0JCXN0YXR1cyA9IDA7CisJaWYgKGVuYWJsZWQpIHsKIAkJaWYgKGRzMTMwNS0+Y3RybFswXSAmIERTMTMwNV9BRUkwKQogCQkJZ290byBkb25lOwogCQlidWZbMV0gfD0gRFMxMzA1X0FFSTA7Ci0JCWJyZWFrOworCX0gZWxzZSB7CisJCWlmICghKGJ1ZlsxXSAmIERTMTMwNV9BRUkwKSkKKwkJCWdvdG8gZG9uZTsKKwkJYnVmWzFdICY9IH5EUzEzMDVfQUVJMDsKIAl9Ci0JaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQoZHMxMzA1LT5zcGksIGJ1Ziwgc2l6ZW9mIGJ1ZiwKLQkJCQlOVUxMLCAwKTsKLQkJaWYgKHN0YXR1cyA+PSAwKQotCQkJZHMxMzA1LT5jdHJsWzBdID0gYnVmWzFdOwotCX0KLQorCWVyciA9IHNwaV93cml0ZV90aGVuX3JlYWQoZHMxMzA1LT5zcGksIGJ1Ziwgc2l6ZW9mIGJ1ZiwgTlVMTCwgMCk7CisJaWYgKGVyciA+PSAwKQorCQlkczEzMDUtPmN0cmxbMF0gPSBidWZbMV07CiBkb25lOgotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIGVycjsKKwogfQogCi0jZWxzZQotI2RlZmluZSBkczEzMDVfaW9jdGwJTlVMTAotI2VuZGlmCiAKIC8qCiAgKiBHZXQvc2V0IG9mIGRhdGUgYW5kIHRpbWUgaXMgcHJldHR5IG5vcm1hbC4KQEAgLTQ2MCwxMiArNDQzLDEyIEBACiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMTMwNV9vcHMgPSB7Ci0JLmlvY3RsCQk9IGRzMTMwNV9pb2N0bCwKIAkucmVhZF90aW1lCT0gZHMxMzA1X2dldF90aW1lLAogCS5zZXRfdGltZQk9IGRzMTMwNV9zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IGRzMTMwNV9nZXRfYWxhcm0sCiAJLnNldF9hbGFybQk9IGRzMTMwNV9zZXRfYWxhcm0sCiAJLnByb2MJCT0gZHMxMzA1X3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBkczEzMDVfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyB2b2lkIGRzMTMwNV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYwppbmRleCAwZDU1OWI2Li40NzI0YmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCkBAIC00OTUsNTAgKzQ5NSwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRzMTMwN19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBkczEzMDdfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGRzMTMwNwkJKmRzMTMwNyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludAkJCXJldDsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKLQkJCXJldHVybiAtRU5PVFRZOworCWlmICghdGVzdF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncykpCisJCXJldHVybiAtRU5PVFRZOwogCi0JCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX0NPTlRST0wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCisJaWYgKGVuYWJsZWQpCisJCXJldCB8PSBEUzEzMzdfQklUX0ExSUU7CisJZWxzZQogCQlyZXQgJj0gfkRTMTMzN19CSVRfQTFJRTsKIAotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCURTMTMzN19SRUdfQ09OVFJPTCwgcmV0KTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCWJyZWFrOwotCi0JY2FzZSBSVENfQUlFX09OOgotCQlpZiAoIXRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQotCQkJcmV0dXJuIC1FTk9UVFk7Ci0KLQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXJldCB8PSBEUzEzMzdfQklUX0ExSUU7Ci0KLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlEUzEzMzdfUkVHX0NPTlRST0wsIHJldCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQorCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX0NPTlRST0wsIHJldCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU0OCw3ICs1MjUsNyBAQAogCS5zZXRfdGltZQk9IGRzMTMwN19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IGRzMTMzN19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBkczEzMzdfc2V0X2FsYXJtLAotCS5pb2N0bAkJPSBkczEzMDdfaW9jdGwsCisJLmFsYXJtX2lycV9lbmFibGUgPSBkczEzMDdfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKaW5kZXggNDdmYjYzNS4uZDgzNGE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwpAQCAtMzA3LDQyICszMDcsMjUgQEAKIAltdXRleF91bmxvY2soJmRzMTM3NC0+bXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IGRzMTM3NF9pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBkczEzNzRfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGRzMTM3NCAqZHMxMzc0ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IHJldCA9IC1FTk9JT0NUTENNRDsKKwlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmZHMxMzc0LT5tdXRleCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTM3NF9SRUdfQ1IpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTM3NF9SRUdfQ1IpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAotCQlyZXQgJj0gfkRTMTM3NF9SRUdfQ1JfV0FDRTsKLQotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUiwgcmV0KTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQotCQlicmVhazsKLQotCWNhc2UgUlRDX0FJRV9PTjoKLQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0KKwlpZiAoZW5hYmxlZCkgewogCQlyZXQgfD0gRFMxMzc0X1JFR19DUl9XQUNFIHwgRFMxMzc0X1JFR19DUl9BSUU7CiAJCXJldCAmPSB+RFMxMzc0X1JFR19DUl9XREFMTTsKLQotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUiwgcmV0KTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQotCQlicmVhazsKKwl9IGVsc2UgeworCQlyZXQgJj0gfkRTMTM3NF9SRUdfQ1JfV0FDRTsKIAl9CisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMTM3NF9SRUdfQ1IsIHJldCk7CiAKIG91dDoKIAltdXRleF91bmxvY2soJmRzMTM3NC0+bXV0ZXgpOwpAQCAtMzU0LDcgKzMzNyw3IEBACiAJLnNldF90aW1lID0gZHMxMzc0X3NldF90aW1lLAogCS5yZWFkX2FsYXJtID0gZHMxMzc0X3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybSA9IGRzMTM3NF9zZXRfYWxhcm0sCi0JLmlvY3RsID0gZHMxMzc0X2lvY3RsLAorCS5hbGFybV9pcnFfZW5hYmxlID0gZHMxMzc0X2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IGRzMTM3NF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMzIzMi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMzIzMi5jCmluZGV4IDIzYTllZTEuLjk1MDczNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMzMjMyLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogUlRDIGNsaWVudC9kcml2ZXIgZm9yIHRoZSBNYXhpbS9EYWxsYXMgRFMzMjMyIFJlYWwtVGltZSBDbG9jayBvdmVyIEkyQwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCiAgKiBBdXRob3I6IEphY2sgTGFuIDxqYWNrLmxhbkBmcmVlc2NhbGUuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTQxLDkgKzE0MSwxMSBAQAogCQl0aW1lLT50bV9ob3VyID0gYmNkMmJpbihob3VyKTsKIAl9CiAKLQl0aW1lLT50bV93ZGF5ID0gYmNkMmJpbih3ZWVrKTsKKwkvKiBEYXkgb2YgdGhlIHdlZWsgaW4gbGludXggcmFuZ2UgaXMgMH42IHdoaWxlIDF+NyBpbiBSVEMgY2hpcCAqLworCXRpbWUtPnRtX3dkYXkgPSBiY2QyYmluKHdlZWspIC0gMTsKIAl0aW1lLT50bV9tZGF5ID0gYmNkMmJpbihkYXkpOwotCXRpbWUtPnRtX21vbiA9IGJjZDJiaW4obW9udGggJiAweDdGKTsKKwkvKiBsaW51eCB0bV9tb24gcmFuZ2U6MH4xMSwgd2hpbGUgbW9udGggcmFuZ2UgaXMgMX4xMiBpbiBSVEMgY2hpcCAqLworCXRpbWUtPnRtX21vbiA9IGJjZDJiaW4obW9udGggJiAweDdGKSAtIDE7CiAJaWYgKGNlbnR1cnkpCiAJCWFkZF9jZW50dXJ5ID0gMTAwOwogCkBAIC0xNjIsOSArMTY0LDExIEBACiAJYnVmWzBdID0gYmluMmJjZCh0aW1lLT50bV9zZWMpOwogCWJ1ZlsxXSA9IGJpbjJiY2QodGltZS0+dG1fbWluKTsKIAlidWZbMl0gPSBiaW4yYmNkKHRpbWUtPnRtX2hvdXIpOwotCWJ1ZlszXSA9IGJpbjJiY2QodGltZS0+dG1fd2RheSk7IC8qIERheSBvZiB0aGUgd2VlayAqLworCS8qIERheSBvZiB0aGUgd2VlayBpbiBsaW51eCByYW5nZSBpcyAwfjYgd2hpbGUgMX43IGluIFJUQyBjaGlwICovCisJYnVmWzNdID0gYmluMmJjZCh0aW1lLT50bV93ZGF5ICsgMSk7CiAJYnVmWzRdID0gYmluMmJjZCh0aW1lLT50bV9tZGF5KTsgLyogRGF0ZSAqLwotCWJ1Zls1XSA9IGJpbjJiY2QodGltZS0+dG1fbW9uKTsKKwkvKiBsaW51eCB0bV9tb24gcmFuZ2U6MH4xMSwgd2hpbGUgbW9udGggcmFuZ2UgaXMgMX4xMiBpbiBSVEMgY2hpcCAqLworCWJ1Zls1XSA9IGJpbjJiY2QodGltZS0+dG1fbW9uICsgMSk7CiAJaWYgKHRpbWUtPnRtX3llYXIgPj0gMTAwKSB7CiAJCWJ1Zls1XSB8PSAweDgwOwogCQlidWZbNl0gPSBiaW4yYmNkKHRpbWUtPnRtX3llYXIgLSAxMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCmluZGV4IDVhOGRhYTMuLjY5ZmU2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKQEAgLTIxMyw0MSArMjEzLDI3IEBACiAJcmV0dXJuIG00MXQ4MF9zZXRfZGF0ZXRpbWUodG9faTJjX2NsaWVudChkZXYpLCB0bSk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9ERVYpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX0RFVl9NT0RVTEUpCi1zdGF0aWMgaW50Ci1tNDF0ODBfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IG00MXQ4MF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJaW50IHJjOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCWNhc2UgUlRDX0FJRV9PTjoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0KIAlyYyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfQUxBUk1fTU9OKTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIGVycjsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXJjICY9IH5NNDFUODBfQUxNT05fQUZFOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CisKKwlpZiAoZW5hYmxlZCkKIAkJcmMgfD0gTTQxVDgwX0FMTU9OX0FGRTsKLQkJYnJlYWs7Ci0JfQorCWVsc2UKKwkJcmMgJj0gfk00MVQ4MF9BTE1PTl9BRkU7CisKIAlpZiAoaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfQUxBUk1fTU9OLCByYykgPCAwKQogCQlnb3RvIGVycjsKKwogCXJldHVybiAwOwogZXJyOgogCXJldHVybiAtRUlPOwogfQotI2Vsc2UKLSNkZWZpbmUJbTQxdDgwX3J0Y19pb2N0bCBOVUxMCi0jZW5kaWYKIAogc3RhdGljIGludCBtNDF0ODBfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICp0KQogewpAQCAtMzc0LDcgKzM2MCw3IEBACiAJLnJlYWRfYWxhcm0gPSBtNDF0ODBfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybSA9IG00MXQ4MF9ydGNfc2V0X2FsYXJtLAogCS5wcm9jID0gbTQxdDgwX3J0Y19wcm9jLAotCS5pb2N0bCA9IG00MXQ4MF9ydGNfaW9jdGwsCisJLmFsYXJtX2lycV9lbmFibGUgPSBtNDF0ODBfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfU1lTRlMpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1NZU0ZTX01PRFVMRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYwppbmRleCBhOTlhMGI1Li4zOTc4ZjRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCkBAIC0yNjMsMzAgKzI2MywyMSBAQAogLyoKICAqIEhhbmRsZSBjb21tYW5kcyBmcm9tIHVzZXItc3BhY2UKICAqLwotc3RhdGljIGludCBtNDh0NTlfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCXVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBtNDh0NTlfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG00OHQ1OV9wbGF0X2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG00OHQ1OV9wcml2YXRlICptNDh0NTkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm00OHQ1OS0+bG9jaywgZmxhZ3MpOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoJLyogYWxhcm0gaW50ZXJydXB0IG9mZiAqLwotCQlNNDhUNTlfV1JJVEUoMHgwMCwgTTQ4VDU5X0lOVFIpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CS8qIGFsYXJtIGludGVycnVwdCBvbiAqLworCWlmIChlbmFibGVkKQogCQlNNDhUNTlfV1JJVEUoTTQ4VDU5X0lOVFJfQUZFLCBNNDhUNTlfSU5UUik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9JT0NUTENNRDsKLQkJYnJlYWs7Ci0JfQorCWVsc2UKKwkJTTQ4VDU5X1dSSVRFKDB4MDAsIE00OFQ1OV9JTlRSKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtNDh0NTktPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbTQ4dDU5X3J0Y19wcm9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNlcV9maWxlICpzZXEpCkBAIC0zMzAsMTIgKzMyMSwxMiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbTQ4dDU5X3J0Y19vcHMgPSB7Ci0JLmlvY3RsCQk9IG00OHQ1OV9ydGNfaW9jdGwsCiAJLnJlYWRfdGltZQk9IG00OHQ1OV9ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IG00OHQ1OV9ydGNfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBtNDh0NTlfcnRjX3JlYWRhbGFybSwKIAkuc2V0X2FsYXJtCT0gbTQ4dDU5X3J0Y19zZXRhbGFybSwKIAkucHJvYwkJPSBtNDh0NTlfcnRjX3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBtNDh0NTlfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbTQ4dDAyX3J0Y19vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXJzdC5jIGIvZHJpdmVycy9ydGMvcnRjLW1yc3QuYwppbmRleCBiY2QwY2Y2Li4xZGI2MmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbXJzdC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMKQEAgLTI1NSw0MiArMjU1LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9ERVYpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX0RFVl9NT0RVTEUpCi0KIC8qIEN1cnJlbnRseSwgdGhlIHZSVEMgZG9lc24ndCBzdXBwb3J0IFVJRSBPTi9PRkYgKi8KLXN0YXRpYyBpbnQKLW1yc3RfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IG1yc3RfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgbXJzdF9ydGMJKm1yc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCWNhc2UgUlRDX0FJRV9PTjoKLQkJaWYgKCFtcnN0LT5pcnEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogUElFIE9OL09GRiBpcyBoYW5kbGVkIGJ5IG1yc3RfaXJxX3NldF9zdGF0ZSgpICovCi0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkvKiBhbGFybSBvZmYgKi8KLQkJbXJzdF9pcnFfZGlzYWJsZShtcnN0LCBSVENfQUlFKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgkvKiBhbGFybSBvbiAqLworCWlmIChlbmFibGVkKQogCQltcnN0X2lycV9lbmFibGUobXJzdCwgUlRDX0FJRSk7Ci0JCWJyZWFrOwotCX0KKwllbHNlCisJCW1yc3RfaXJxX2Rpc2FibGUobXJzdCwgUlRDX0FJRSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAotI2Vsc2UKLSNkZWZpbmUJbXJzdF9ydGNfaW9jdGwJTlVMTAotI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9QUk9DKSB8fCBkZWZpbmVkKENPTkZJR19SVENfSU5URl9QUk9DX01PRFVMRSkKIApAQCAtMzE3LDEzICsyOTYsMTMgQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbXJzdF9ydGNfb3BzID0gewotCS5pb2N0bAkJPSBtcnN0X3J0Y19pb2N0bCwKIAkucmVhZF90aW1lCT0gbXJzdF9yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gbXJzdF9zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IG1yc3RfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gbXJzdF9zZXRfYWxhcm0sCiAJLnByb2MJCT0gbXJzdF9wcm9jZnMsCiAJLmlycV9zZXRfc3RhdGUJPSBtcnN0X2lycV9zZXRfc3RhdGUsCisJLmFsYXJtX2lycV9lbmFibGUgPSBtcnN0X3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIHN0cnVjdCBtcnN0X3J0YwltcnN0X3J0YzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tc202MjQyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbXNtNjI0Mi5jCmluZGV4IGIyZmZmMGMuLjY3ODIwNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tc202MjQyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYwpAQCAtODIsNyArODIsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIG1zbTYyNDJfd3JpdGUoc3RydWN0IG1zbTYyNDJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHZhbCwKIAkJCQl1bnNpZ25lZCBpbnQgcmVnKQogewotCXJldHVybiBfX3Jhd193cml0ZWwodmFsLCAmcHJpdi0+cmVnc1tyZWddKTsKKwlfX3Jhd193cml0ZWwodmFsLCAmcHJpdi0+cmVnc1tyZWddKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG1zbTYyNDJfc2V0KHN0cnVjdCBtc202MjQyX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCB2YWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCmluZGV4IGJjY2E0NzIuLjYwNjI3YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCkBAIC0xNjksMjUgKzE2OSwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG12X3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCi0JCQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbXZfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJ0Y19wbGF0X2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBwZGF0YS0+aW9hZGRyOwogCiAJaWYgKHBkYXRhLT5pcnEgPCAwKQotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOyAvKiBmYWxsIGJhY2sgaW50byBydGMtZGV2J3MgZW11bGF0aW9uICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQl3cml0ZWwoMCwgaW9hZGRyICsgUlRDX0FMQVJNX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZTKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgorCQlyZXR1cm4gLUVJTlZBTDsgLyogZmFsbCBiYWNrIGludG8gcnRjLWRldidzIGVtdWxhdGlvbiAqLworCisJaWYgKGVuYWJsZWQpCiAJCXdyaXRlbCgxLCBpb2FkZHIgKyBSVENfQUxBUk1fSU5URVJSVVBUX01BU0tfUkVHX09GRlMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KKwllbHNlCisJCXdyaXRlbCgwLCBpb2FkZHIgKyBSVENfQUxBUk1fSU5URVJSVVBUX01BU0tfUkVHX09GRlMpOwogCXJldHVybiAwOwogfQogCkBAIC0yMTYsNyArMjEwLDcgQEAKIAkuc2V0X3RpbWUJPSBtdl9ydGNfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBtdl9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gbXZfcnRjX3NldF9hbGFybSwKLQkuaW9jdGwJCT0gbXZfcnRjX2lvY3RsLAorCS5hbGFybV9pcnFfZW5hYmxlID0gbXZfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtdl9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCmluZGV4IGU3MmI1MjMuLmI0ZGJmM2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTE0Myw4ICsxNDMsNiBAQAogCXU4IHJlZzsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQljYXNlIFJUQ19BSUVfT046CiAJY2FzZSBSVENfVUlFX09GRjoKIAljYXNlIFJUQ19VSUVfT046CiAJCWJyZWFrOwpAQCAtMTU2LDEzICsxNTQsNiBAQAogCXJ0Y193YWl0X25vdF9idXN5KCk7CiAJcmVnID0gcnRjX3JlYWQoT01BUF9SVENfSU5URVJSVVBUU19SRUcpOwogCXN3aXRjaCAoY21kKSB7Ci0JLyogQUlFID0gQWxhcm0gSW50ZXJydXB0IEVuYWJsZSAqLwotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXJlZyAmPSB+T01BUF9SVENfSU5URVJSVVBUU19JVF9BTEFSTTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgotCQlyZWcgfD0gT01BUF9SVENfSU5URVJSVVBUU19JVF9BTEFSTTsKLQkJYnJlYWs7CiAJLyogVUlFID0gVXBkYXRlIEludGVycnVwdCBFbmFibGUgKDEvc2Vjb25kKSAqLwogCWNhc2UgUlRDX1VJRV9PRkY6CiAJCXJlZyAmPSB+T01BUF9SVENfSU5URVJSVVBUU19JVF9USU1FUjsKQEAgLTE4Miw2ICsxNzMsMjQgQEAKICNkZWZpbmUJb21hcF9ydGNfaW9jdGwJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBpbnQgb21hcF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXU4IHJlZzsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJcnRjX3dhaXRfbm90X2J1c3koKTsKKwlyZWcgPSBydGNfcmVhZChPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJaWYgKGVuYWJsZWQpCisJCXJlZyB8PSBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOworCWVsc2UKKwkJcmVnICY9IH5PTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOworCXJ0Y193YWl0X25vdF9idXN5KCk7CisJcnRjX3dyaXRlKHJlZywgT01BUF9SVENfSU5URVJSVVBUU19SRUcpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCXJldHVybiAwOworfQorCiAvKiB0aGlzIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCAiZG9uJ3QgY2FyZSIgYWxhcm0gZmllbGRzICovCiBzdGF0aWMgaW50IHRtMmJjZChzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewpAQCAtMzA5LDYgKzMxOCw3IEBACiAJLnNldF90aW1lCT0gb21hcF9ydGNfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBvbWFwX3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBvbWFwX3J0Y19zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBvbWFwX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBvbWFwX3J0Y19hbGFybTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCmluZGV4IGMwODZmYzMuLjI0MmJiZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXByb2MuYwpAQCAtODEsMTIgKzgxLDE2IEBACiAKIHN0YXRpYyBpbnQgcnRjX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlpbnQgcmV0OwogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBQREUoaW5vZGUpLT5kYXRhOwogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ0Y19wcm9jX3Nob3csIHJ0Yyk7CisJcmV0ID0gc2luZ2xlX29wZW4oZmlsZSwgcnRjX3Byb2Nfc2hvdywgcnRjKTsKKwlpZiAocmV0KQorCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHJ0Y19wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMKaW5kZXggMzZlYjY2MS4uNjk0ZGEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYwpAQCAtNzYsNyArNzYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHJwNWMwMV93cml0ZShzdHJ1Y3QgcnA1YzAxX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCB2YWwsCiAJCQkJdW5zaWduZWQgaW50IHJlZykKIHsKLQlyZXR1cm4gX19yYXdfd3JpdGVsKHZhbCwgJnByaXYtPnJlZ3NbcmVnXSk7CisJX19yYXdfd3JpdGVsKHZhbCwgJnByaXYtPnJlZ3NbcmVnXSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJwNWMwMV9sb2NrKHN0cnVjdCBycDVjMDFfcHJpdiAqcHJpdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCmluZGV4IGRkMTRlMjAuLjZhYWExNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYwpAQCAtMjk5LDE0ICsyOTksNiBAQAogCQlpZiAocnM1Yy0+dHlwZSA9PSBydGNfcnM1YzM3MmEKIAkJCQkmJiAoYnVmICYgUlM1QzM3MkFfQ1RSTDFfU0wxKSkKIAkJCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQljYXNlIFJUQ19BSUVfT046Ci0JCS8qIHRoZXNlIGlycSBtYW5hZ2VtZW50IGNhbGxzIG9ubHkgbWFrZSBzZW5zZSBmb3IgY2hpcHMKLQkJICogd2hpY2ggYXJlIHdpcmVkIHVwIHRvIGFuIElSUS4KLQkJICovCi0JCWlmICghcnM1Yy0+aGFzX2lycSkKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQpAQCAtMzE3LDEyICszMDksNiBAQAogCiAJYWRkciA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7CiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkvKiBhbGFybSBvZmYgKi8KLQkJYnVmICY9IH5SUzVDX0NUUkwxX0FBTEU7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoJLyogYWxhcm0gb24gKi8KLQkJYnVmIHw9IFJTNUNfQ1RSTDFfQUFMRTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09GRjoJLyogdXBkYXRlIG9mZiAqLwogCQlidWYgJj0gflJTNUNfQ1RSTDFfQ1RfTUFTSzsKIAkJYnJlYWs7CkBAIC0zNDcsNiArMzMzLDM5IEBACiAjZW5kaWYKIAogCitzdGF0aWMgaW50IHJzNWNfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCByczVjMzcyCQkqcnM1YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGNoYXIJCWJ1ZjsKKwlpbnQJCQlzdGF0dXMsIGFkZHI7CisKKwlidWYgPSByczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXTsKKworCWlmICghcnM1Yy0+aGFzX2lycSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSByczVjX2dldF9yZWdzKHJzNWMpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJYWRkciA9IFJTNUNfQUREUihSUzVDX1JFR19DVFJMMSk7CisJaWYgKGVuYWJsZWQpCisJCWJ1ZiB8PSBSUzVDX0NUUkwxX0FBTEU7CisJZWxzZQorCQlidWYgJj0gflJTNUNfQ1RSTDFfQUFMRTsKKworCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgYWRkciwgYnVmKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbid0IHVwZGF0ZSBhbGFybVxuIiwKKwkJCXJzNWMtPnJ0Yy0+bmFtZSk7CisJCXN0YXR1cyA9IC1FSU87CisJfSBlbHNlCisJCXJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdID0gYnVmOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCiAvKiBOT1RFOiAgU2luY2UgUlRDX1dLQUxNX3tSRCxTRVR9IHdlcmUgb3JpZ2luYWxseSBkZWZpbmVkIGZvciBFRkksCiAgKiB3aGljaCBvbmx5IGV4cG9zZXMgYSBwb2xsZWQgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlOyBhbmQgc2luY2UKICAqIHRoZXNlIGNhbGxzIG1hcCBkaXJlY3RseSB0byB0aG9zZSBFRkkgcmVxdWVzdHM7IHdlIGRvbid0IGRlbWFuZApAQCAtNDY2LDYgKzQ4NSw3IEBACiAJLnNldF90aW1lCT0gcnM1YzM3Ml9ydGNfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSByczVjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IHJzNWNfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gcnM1Y19ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9TWVNGUykgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfU1lTRlNfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jIGIvZHJpdmVycy9ydGMvcnRjLXMzYy5jCmluZGV4IGNmOTUzZWMuLmI4MGZhMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKQEAgLTc3LDE4ICs3NywyMCBAQAogfQogCiAvKiBVcGRhdGUgY29udHJvbCByZWdpc3RlcnMgKi8KLXN0YXRpYyB2b2lkIHMzY19ydGNfc2V0YWllKGludCB0bykKK3N0YXRpYyBpbnQgczNjX3J0Y19zZXRhaWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCi0JcHJfZGVidWcoIiVzOiBhaWU9JWRcbiIsIF9fZnVuY19fLCB0byk7CisJcHJfZGVidWcoIiVzOiBhaWU9JWRcbiIsIF9fZnVuY19fLCBlbmFibGVkKTsKIAogCXRtcCA9IHJlYWRiKHMzY19ydGNfYmFzZSArIFMzQzI0MTBfUlRDQUxNKSAmIH5TM0MyNDEwX1JUQ0FMTV9BTE1FTjsKIAotCWlmICh0bykKKwlpZiAoZW5hYmxlZCkKIAkJdG1wIHw9IFMzQzI0MTBfUlRDQUxNX0FMTUVOOwogCiAJd3JpdGViKHRtcCwgczNjX3J0Y19iYXNlICsgUzNDMjQxMF9SVENBTE0pOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgczNjX3J0Y19zZXRwaWUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZW5hYmxlZCkKQEAgLTMwOCw3ICszMTAsNyBAQAogCiAJd3JpdGViKGFscm1fZW4sIGJhc2UgKyBTM0MyNDEwX1JUQ0FMTSk7CiAKLQlzM2NfcnRjX3NldGFpZShhbHJtLT5lbmFibGVkKTsKKwlzM2NfcnRjX3NldGFpZShkZXYsIGFscm0tPmVuYWJsZWQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDAsNyArNDQyLDcgQEAKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIAogCXMzY19ydGNfc2V0cGllKCZkZXYtPmRldiwgMCk7Ci0JczNjX3J0Y19zZXRhaWUoMCk7CisJczNjX3J0Y19zZXRhaWUoJmRldi0+ZGV2LCAwKTsKIAogCWNsa19kaXNhYmxlKHJ0Y19jbGspOwogCWNsa19wdXQocnRjX2Nsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKaW5kZXggODhlYTUyYi4uNWRmZTVmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwpAQCAtMzE0LDE2ICszMTQsNiBAQAogCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXNwaW5fbG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7Ci0JCVJUU1IgJj0gflJUU1JfQUxFOwotCQlzcGluX3VubG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7Ci0JCXJldHVybiAwOwotCWNhc2UgUlRDX0FJRV9PTjoKLQkJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKLQkJUlRTUiB8PSBSVFNSX0FMRTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOwotCQlyZXR1cm4gMDsKIAljYXNlIFJUQ19VSUVfT0ZGOgogCQlzcGluX2xvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOwogCQlSVFNSICY9IH5SVFNSX0haRTsKQEAgLTMzOCw2ICszMjgsMTcgQEAKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCitzdGF0aWMgaW50IHNhMTEwMF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXNwaW5fbG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7CisJaWYgKGVuYWJsZWQpCisJCVJUU1IgfD0gUlRTUl9BTEU7CisJZWxzZQorCQlSVFNSICY9IH5SVFNSX0FMRTsKKwlzcGluX3VubG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2ExMTAwX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXJ0Y190aW1lX3RvX3RtKFJDTlIsIHRtKTsKQEAgLTQxMCw2ICs0MTEsNyBAQAogCS5wcm9jID0gc2ExMTAwX3J0Y19wcm9jLAogCS5pcnFfc2V0X2ZyZXEgPSBzYTExMDBfaXJxX3NldF9mcmVxLAogCS5pcnFfc2V0X3N0YXRlID0gc2ExMTAwX2lycV9zZXRfc3RhdGUsCisJLmFsYXJtX2lycV9lbmFibGUgPSBzYTExMDBfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IHNhMTEwMF9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKaW5kZXggMDZlNDFlZC4uOTMzMTRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNoLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKQEAgLTM1MCwxMCArMzUwLDYgQEAKIAl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQljYXNlIFJUQ19BSUVfT046Ci0JCXNoX3J0Y19zZXRhaWUoZGV2LCBjbWQgPT0gUlRDX0FJRV9PTik7Ci0JCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CiAJCXJ0Yy0+cGVyaW9kaWNfZnJlcSAmPSB+UEZfT1hTOwogCQlzaF9ydGNfc2V0Y2llKGRldiwgMCk7CkBAIC0zNjksNiArMzY1LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBzaF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXNoX3J0Y19zZXRhaWUoZGV2LCBlbmFibGVkKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzaF9ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CkBAIC02MDQsNiArNjA2LDcgQEAKIAkuaXJxX3NldF9zdGF0ZQk9IHNoX3J0Y19pcnFfc2V0X3N0YXRlLAogCS5pcnFfc2V0X2ZyZXEJPSBzaF9ydGNfaXJxX3NldF9mcmVxLAogCS5wcm9jCQk9IHNoX3J0Y19wcm9jLAorCS5hbGFybV9pcnFfZW5hYmxlID0gc2hfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCmluZGV4IDUxNzI1ZjcuLmE4MmQ2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXRlc3QuYwpAQCAtNTAsMjQgKzUwLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0ZXN0X3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCi0JdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHRlc3RfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQogewotCS8qIFdlIGRvIHN1cHBvcnQgaW50ZXJydXB0cywgdGhleSdyZSBnZW5lcmF0ZWQKLQkgKiB1c2luZyB0aGUgc3lzZnMgaW50ZXJmYWNlLgotCSAqLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfUElFX09OOgotCWNhc2UgUlRDX1BJRV9PRkY6Ci0JY2FzZSBSVENfVUlFX09OOgotCWNhc2UgUlRDX1VJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXJldHVybiAwOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyB0ZXN0X3J0Y19vcHMgPSB7CkBAIC03Niw3ICs2MSw3IEBACiAJLnJlYWRfYWxhcm0gPSB0ZXN0X3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0gPSB0ZXN0X3J0Y19zZXRfYWxhcm0sCiAJLnNldF9tbXNzID0gdGVzdF9ydGNfc2V0X21tc3MsCi0JLmlvY3RsID0gdGVzdF9ydGNfaW9jdGwsCisJLmFsYXJtX2lycV9lbmFibGUgPSB0ZXN0X3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIHNzaXplX3QgdGVzdF9pcnFfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKaW5kZXggYzMyNDQyNC4uNzY5MTkwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpAQCAtMjQwLDI2ICsyNDAsNiBAQAogc3RhdGljIGludCB2cjQxeHhfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT046Ci0JCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCQlpZiAoIWFsYXJtX2VuYWJsZWQpIHsKLQkJCWVuYWJsZV9pcnEoYWllX2lycSk7Ci0JCQlhbGFybV9lbmFibGVkID0gMTsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7Ci0KLQkJaWYgKGFsYXJtX2VuYWJsZWQpIHsKLQkJCWRpc2FibGVfaXJxKGFpZV9pcnEpOwotCQkJYWxhcm1fZW5hYmxlZCA9IDA7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfRVBPQ0hfUkVBRDoKIAkJcmV0dXJuIHB1dF91c2VyKGVwb2NoLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilhcmcpOwogCWNhc2UgUlRDX0VQT0NIX1NFVDoKQEAgLTI3NSw2ICsyNTUsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2cjQxeHhfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzcGluX2xvY2tfaXJxKCZydGNfbG9jayk7CisJaWYgKGVuYWJsZWQpIHsKKwkJaWYgKCFhbGFybV9lbmFibGVkKSB7CisJCQllbmFibGVfaXJxKGFpZV9pcnEpOworCQkJYWxhcm1fZW5hYmxlZCA9IDE7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYWxhcm1fZW5hYmxlZCkgeworCQkJZGlzYWJsZV9pcnEoYWllX2lycSk7CisJCQlhbGFybV9lbmFibGVkID0gMDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEoJnJ0Y19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlycXJldHVybl90IGVsYXBzZWR0aW1lX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopZGV2X2lkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKaW5kZXggNDE1NTgwNS4uMmI3NzFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCkBAIC0zMTksNiArMzE5LDkgQEAKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKIAlsY3UgPSBwcml2YXRlLT5sY3U7CisJLyogbm90aGluZyB0byBkbyBpZiBhbHJlYWR5IGRpc2Nvbm5lY3RlZCAqLworCWlmICghbGN1KQorCQlyZXR1cm47CiAJZGV2aWNlLT5kaXNjaXBsaW5lLT5nZXRfdWlkKGRldmljZSwgJnVpZCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxjdS0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsX2luaXQoJmRldmljZS0+YWxpYXNfbGlzdCk7CkBAIC02ODAsNiArNjgzLDkgQEAKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICopIGRldmljZS0+cHJpdmF0ZTsKIAlsY3UgPSBwcml2YXRlLT5sY3U7CisJLyogbm90aGluZyB0byBkbyBpZiBhbHJlYWR5IHJlbW92ZWQgKi8KKwlpZiAoIWxjdSkKKwkJcmV0dXJuIDA7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxjdS0+bG9jaywgZmxhZ3MpOwogCV9yZW1vdmVfZGV2aWNlX2Zyb21fbGN1KGxjdSwgZGV2aWNlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY3UtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCAzMTg2NzJkLi5hOWZlMjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC03Miw3ICs3Miw3IEBACiBzdGF0aWMgc3RydWN0IGNjd19kZXZpY2VfaWQgZGFzZF9lY2tkX2lkc1tdID0gewogCXsgQ0NXX0RFVklDRV9ERVZUWVBFICgweDM5OTAsIDAsIDB4MzM5MCwgMCksIC5kcml2ZXJfaW5mbyA9IDB4MX0sCiAJeyBDQ1dfREVWSUNFX0RFVlRZUEUgKDB4MjEwNSwgMCwgMHgzMzkwLCAwKSwgLmRyaXZlcl9pbmZvID0gMHgyfSwKLQl7IENDV19ERVZJQ0VfREVWVFlQRSAoMHgzODgwLCAwLCAweDMzOTAsIDApLCAuZHJpdmVyX2luZm8gPSAweDN9LAorCXsgQ0NXX0RFVklDRV9ERVZUWVBFICgweDM4ODAsIDAsIDB4MzM4MCwgMCksIC5kcml2ZXJfaW5mbyA9IDB4M30sCiAJeyBDQ1dfREVWSUNFX0RFVlRZUEUgKDB4Mzk5MCwgMCwgMHgzMzgwLCAwKSwgLmRyaXZlcl9pbmZvID0gMHg0fSwKIAl7IENDV19ERVZJQ0VfREVWVFlQRSAoMHgyMTA1LCAwLCAweDMzODAsIDApLCAuZHJpdmVyX2luZm8gPSAweDV9LAogCXsgQ0NXX0RFVklDRV9ERVZUWVBFICgweDkzNDMsIDAsIDB4OTM0NSwgMCksIC5kcml2ZXJfaW5mbyA9IDB4Nn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYyBiL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCmluZGV4IGM4ODFhMTQuLjFmNmE0ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCkBAIC02Miw4ICs2Miw4IEBACiAvKgogICogUGFyYW1ldGVyIHBhcnNpbmcgZnVuY3Rpb25zLgogICovCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgZGV2cyA9IFhQUkFNX0RFVlM7Ci1zdGF0aWMgY2hhciBfX2luaXRkYXRhICpzaXplc1tYUFJBTV9NQVhfREVWU107CitzdGF0aWMgaW50IGRldnMgPSBYUFJBTV9ERVZTOworc3RhdGljIGNoYXIgKnNpemVzW1hQUkFNX01BWF9ERVZTXTsKIAogbW9kdWxlX3BhcmFtKGRldnMsIGludCwgMCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoc2l6ZXMsIGNoYXJwLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5jCmluZGV4IDhjZDU4ZTQuLjVhZDQ0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYwpAQCAtNDYwLDcgKzQ2MCw4IEBACiAJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl2b2lkIF9fdXNlciAqYXJncDsKLQlpbnQgY3QsIHBlcm07CisJdW5zaWduZWQgaW50IGN0OworCWludCBwZXJtOwogCiAJYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCmluZGV4IDdhMjQyZjAuLjI2N2I1NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaAorKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKQEAgLTI4MCw2ICsyODAsMTQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFwZV9kb19pb19hc3luY19mcmVlKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXJlcXVlc3QtPmNhbGxiYWNrID0gKHZvaWQgKikgdGFwZV9mcmVlX3JlcXVlc3Q7CisJcmVxdWVzdC0+Y2FsbGJhY2tfZGF0YSA9IE5VTEw7CisJdGFwZV9kb19pb19hc3luYyhkZXZpY2UsIHJlcXVlc3QpOworfQorCiBleHRlcm4gaW50IHRhcGVfb3Blcl9oYW5kbGVyKGludCBpcnEsIGludCBzdGF0dXMpOwogZXh0ZXJuIHZvaWQgdGFwZV9ub3Blcl9oYW5kbGVyKGludCBpcnEsIGludCBzdGF0dXMpOwogZXh0ZXJuIGludCB0YXBlX29wZW4oc3RydWN0IHRhcGVfZGV2aWNlICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYwppbmRleCBjMTdmMzViLi5jMjY1MTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYwpAQCAtNTMsMjMgKzUzLDExIEBACiAgKiBNZWRpdW0gc2Vuc2UgZm9yIDM0eHggdGFwZXMuIFRoZXJlIGlzIG5vICdyZWFsJyBtZWRpdW0gc2Vuc2UgY2FsbC4KICAqIFNvIHdlIGp1c3QgZG8gYSBub3JtYWwgc2Vuc2UuCiAgKi8KLXN0YXRpYyBpbnQKLXRhcGVfMzR4eF9tZWRpdW1fc2Vuc2Uoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCBfX3RhcGVfMzR4eF9tZWRpdW1fc2Vuc2Uoc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLQlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OwotCXVuc2lnbmVkIGNoYXIgICAgICAgKnNlbnNlOwotCWludCAgICAgICAgICAgICAgICAgIHJjOworCXN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlID0gcmVxdWVzdC0+ZGV2aWNlOworCXVuc2lnbmVkIGNoYXIgKnNlbnNlOwogCi0JcmVxdWVzdCA9IHRhcGVfYWxsb2NfcmVxdWVzdCgxLCAzMik7Ci0JaWYgKElTX0VSUihyZXF1ZXN0KSkgewotCQlEQkZfRVhDRVBUSU9OKDYsICJNU0VOIGZhaWxcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihyZXF1ZXN0KTsKLQl9Ci0KLQlyZXF1ZXN0LT5vcCA9IFRPX01TRU47Ci0JdGFwZV9jY3dfZW5kKHJlcXVlc3QtPmNwYWRkciwgU0VOU0UsIDMyLCByZXF1ZXN0LT5jcGRhdGEpOwotCi0JcmMgPSB0YXBlX2RvX2lvX2ludGVycnVwdGlibGUoZGV2aWNlLCByZXF1ZXN0KTsKIAlpZiAocmVxdWVzdC0+cmMgPT0gMCkgewogCQlzZW5zZSA9IHJlcXVlc3QtPmNwZGF0YTsKIApAQCAtODgsMTUgKzc2LDQ3IEBACiAJCQlkZXZpY2UtPnRhcGVfZ2VuZXJpY19zdGF0dXMgfD0gR01UX1dSX1BST1QofjApOwogCQllbHNlCiAJCQlkZXZpY2UtPnRhcGVfZ2VuZXJpY19zdGF0dXMgJj0gfkdNVF9XUl9QUk9UKH4wKTsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlEQkZfRVZFTlQoNCwgInRhcGVfMzR4eDogbWVkaXVtIHNlbnNlIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAogCQkJcmVxdWVzdC0+cmMpOwotCX0KIAl0YXBlX2ZyZWVfcmVxdWVzdChyZXF1ZXN0KTsKK30KIAorc3RhdGljIGludCB0YXBlXzM0eHhfbWVkaXVtX3NlbnNlKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CisJaW50IHJjOworCisJcmVxdWVzdCA9IHRhcGVfYWxsb2NfcmVxdWVzdCgxLCAzMik7CisJaWYgKElTX0VSUihyZXF1ZXN0KSkgeworCQlEQkZfRVhDRVBUSU9OKDYsICJNU0VOIGZhaWxcbiIpOworCQlyZXR1cm4gUFRSX0VSUihyZXF1ZXN0KTsKKwl9CisKKwlyZXF1ZXN0LT5vcCA9IFRPX01TRU47CisJdGFwZV9jY3dfZW5kKHJlcXVlc3QtPmNwYWRkciwgU0VOU0UsIDMyLCByZXF1ZXN0LT5jcGRhdGEpOworCXJjID0gdGFwZV9kb19pb19pbnRlcnJ1cHRpYmxlKGRldmljZSwgcmVxdWVzdCk7CisJX190YXBlXzM0eHhfbWVkaXVtX3NlbnNlKHJlcXVlc3QpOwogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHZvaWQgdGFwZV8zNHh4X21lZGl1bV9zZW5zZV9hc3luYyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IHRhcGVfYWxsb2NfcmVxdWVzdCgxLCAzMik7CisJaWYgKElTX0VSUihyZXF1ZXN0KSkgeworCQlEQkZfRVhDRVBUSU9OKDYsICJNU0VOIGZhaWxcbiIpOworCQlyZXR1cm47CisJfQorCisJcmVxdWVzdC0+b3AgPSBUT19NU0VOOworCXRhcGVfY2N3X2VuZChyZXF1ZXN0LT5jcGFkZHIsIFNFTlNFLCAzMiwgcmVxdWVzdC0+Y3BkYXRhKTsKKwlyZXF1ZXN0LT5jYWxsYmFjayA9ICh2b2lkICopIF9fdGFwZV8zNHh4X21lZGl1bV9zZW5zZTsKKwlyZXF1ZXN0LT5jYWxsYmFja19kYXRhID0gTlVMTDsKKwl0YXBlX2RvX2lvX2FzeW5jKGRldmljZSwgcmVxdWVzdCk7Cit9CisKIHN0cnVjdCB0YXBlXzM0eHhfd29yayB7CiAJc3RydWN0IHRhcGVfZGV2aWNlCSpkZXZpY2U7CiAJZW51bSB0YXBlX29wCQkgb3A7CkBAIC0xMDksNiArMTI5LDkgQEAKICAqIGlzIGluc2VydGVkIGJ1dCBjYW5ub3QgY2FsbCB0YXBlX2RvX2lvKiBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LgogICogTWF5YmUgdGhhdCdzIHVzZWZ1bCBmb3Igb3RoZXIgYWN0aW9ucyB3ZSB3YW50IHRvIHN0YXJ0IGZyb20gdGhlCiAgKiBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqIE5vdGU6IHRoZSB3b3JrIGhhbmRsZXIgaXMgY2FsbGVkIGJ5IHRoZSBzeXN0ZW0gd29yayBxdWV1ZS4gVGhlIHRhcGUKKyAqIGNvbW1hbmRzIHN0YXJ0ZWQgYnkgdGhlIGhhbmRsZXIgbmVlZCB0byBiZSBhc3luY2hyb3Vub3VzLCBvdGhlcndpc2UKKyAqIGEgZGVhZGxvY2sgY2FuIG9jY3VyIGUuZy4gaW4gY2FzZSBvZiBhIGRlZmVycmVkIGNjPTEgKHNlZSBfX3RhcGVfZG9faXJxKS4KICAqLwogc3RhdGljIHZvaWQKIHRhcGVfMzR4eF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMTE5LDcgKzE0Miw3IEBACiAKIAlzd2l0Y2gocC0+b3ApIHsKIAkJY2FzZSBUT19NU0VOOgotCQkJdGFwZV8zNHh4X21lZGl1bV9zZW5zZShkZXZpY2UpOworCQkJdGFwZV8zNHh4X21lZGl1bV9zZW5zZV9hc3luYyhkZXZpY2UpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEQkZfRVZFTlQoMywgIlQzNFhYOiBpbnRlcm5hbCBlcnJvcjogdW5rbm93biB3b3JrXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKaW5kZXggZmJlMzYxZi4uZGUyZTk5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKQEAgLTMyOSwxNyArMzI5LDE3IEBACiAvKgogICogRW5hYmxlIGVuY3J5cHRpb24KICAqLwotc3RhdGljIGludCB0YXBlXzM1OTJfZW5hYmxlX2NyeXB0KHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQorc3RhdGljIHN0cnVjdCB0YXBlX3JlcXVlc3QgKl9fdGFwZV8zNTkyX2VuYWJsZV9jcnlwdChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OwogCWNoYXIgKmRhdGE7CiAKIAlEQkZfRVZFTlQoNiwgInRhcGVfMzU5Ml9lbmFibGVfY3J5cHRcbiIpOwogCWlmICghY3J5cHRfc3VwcG9ydGVkKGRldmljZSkpCi0JCXJldHVybiAtRU5PU1lTOworCQlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKIAlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDIsIDcyKTsKIAlpZiAoSVNfRVJSKHJlcXVlc3QpKQotCQlyZXR1cm4gUFRSX0VSUihyZXF1ZXN0KTsKKwkJcmV0dXJuIHJlcXVlc3Q7CiAJZGF0YSA9IHJlcXVlc3QtPmNwZGF0YTsKIAltZW1zZXQoZGF0YSwwLDcyKTsKIApAQCAtMzU0LDIzICszNTQsNDIgQEAKIAlyZXF1ZXN0LT5vcCA9IFRPX0NSWVBUX09OOwogCXRhcGVfY2N3X2NjKHJlcXVlc3QtPmNwYWRkciwgTU9ERV9TRVRfQ0IsIDM2LCBkYXRhKTsKIAl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyICsgMSwgTU9ERV9TRVRfQ0IsIDM2LCBkYXRhICsgMzYpOworCXJldHVybiByZXF1ZXN0OworfQorCitzdGF0aWMgaW50IHRhcGVfMzU5Ml9lbmFibGVfY3J5cHQoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKKworCXJlcXVlc3QgPSBfX3RhcGVfMzU5Ml9lbmFibGVfY3J5cHQoZGV2aWNlKTsKKwlpZiAoSVNfRVJSKHJlcXVlc3QpKQorCQlyZXR1cm4gUFRSX0VSUihyZXF1ZXN0KTsKIAlyZXR1cm4gdGFwZV9kb19pb19mcmVlKGRldmljZSwgcmVxdWVzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRhcGVfMzU5Ml9lbmFibGVfY3J5cHRfYXN5bmMoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKKworCXJlcXVlc3QgPSBfX3RhcGVfMzU5Ml9lbmFibGVfY3J5cHQoZGV2aWNlKTsKKwlpZiAoIUlTX0VSUihyZXF1ZXN0KSkKKwkJdGFwZV9kb19pb19hc3luY19mcmVlKGRldmljZSwgcmVxdWVzdCk7Cit9CisKIC8qCiAgKiBEaXNhYmxlIGVuY3J5cHRpb24KICAqLwotc3RhdGljIGludCB0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpfX3RhcGVfMzU5Ml9kaXNhYmxlX2NyeXB0KHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CiAJY2hhciAqZGF0YTsKIAogCURCRl9FVkVOVCg2LCAidGFwZV8zNTkyX2Rpc2FibGVfY3J5cHRcbiIpOwogCWlmICghY3J5cHRfc3VwcG9ydGVkKGRldmljZSkpCi0JCXJldHVybiAtRU5PU1lTOworCQlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKIAlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDIsIDcyKTsKIAlpZiAoSVNfRVJSKHJlcXVlc3QpKQotCQlyZXR1cm4gUFRSX0VSUihyZXF1ZXN0KTsKKwkJcmV0dXJuIHJlcXVlc3Q7CiAJZGF0YSA9IHJlcXVlc3QtPmNwZGF0YTsKIAltZW1zZXQoZGF0YSwwLDcyKTsKIApAQCAtMzgzLDkgKzQwMiwyOCBAQAogCXRhcGVfY2N3X2NjKHJlcXVlc3QtPmNwYWRkciwgTU9ERV9TRVRfQ0IsIDM2LCBkYXRhKTsKIAl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyICsgMSwgTU9ERV9TRVRfQ0IsIDM2LCBkYXRhICsgMzYpOwogCisJcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3N0YXRpYyBpbnQgdGFwZV8zNTkyX2Rpc2FibGVfY3J5cHQoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKKworCXJlcXVlc3QgPSBfX3RhcGVfMzU5Ml9kaXNhYmxlX2NyeXB0KGRldmljZSk7CisJaWYgKElTX0VSUihyZXF1ZXN0KSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxdWVzdCk7CiAJcmV0dXJuIHRhcGVfZG9faW9fZnJlZShkZXZpY2UsIHJlcXVlc3QpOwogfQogCitzdGF0aWMgdm9pZCB0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdF9hc3luYyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IF9fdGFwZV8zNTkyX2Rpc2FibGVfY3J5cHQoZGV2aWNlKTsKKwlpZiAoIUlTX0VSUihyZXF1ZXN0KSkKKwkJdGFwZV9kb19pb19hc3luY19mcmVlKGRldmljZSwgcmVxdWVzdCk7Cit9CisKIC8qCiAgKiBJT0NUTDogU2V0IGVuY3J5cHRpb24gc3RhdHVzCiAgKi8KQEAgLTQ1Nyw4ICs0OTUsNyBAQAogLyoKICAqIFNFTlNFIE1lZGl1bTogR2V0IFNlbnNlIGRhdGEgYWJvdXQgbWVkaXVtIHN0YXRlCiAgKi8KLXN0YXRpYyBpbnQKLXRhcGVfMzU5MF9zZW5zZV9tZWRpdW0oc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHRhcGVfMzU5MF9zZW5zZV9tZWRpdW0oc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKIApAQCAtNDcwLDYgKzUwNywxOCBAQAogCXJldHVybiB0YXBlX2RvX2lvX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKIH0KIAorc3RhdGljIHZvaWQgdGFwZV8zNTkwX3NlbnNlX21lZGl1bV9hc3luYyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IHRhcGVfYWxsb2NfcmVxdWVzdCgxLCAxMjgpOworCWlmIChJU19FUlIocmVxdWVzdCkpCisJCXJldHVybjsKKwlyZXF1ZXN0LT5vcCA9IFRPX01TRU47CisJdGFwZV9jY3dfZW5kKHJlcXVlc3QtPmNwYWRkciwgTUVESVVNX1NFTlNFLCAxMjgsIHJlcXVlc3QtPmNwZGF0YSk7CisJdGFwZV9kb19pb19hc3luY19mcmVlKGRldmljZSwgcmVxdWVzdCk7Cit9CisKIC8qCiAgKiBNVFRFTEw6IFRlbGwgYmxvY2suIFJldHVybiB0aGUgbnVtYmVyIG9mIGJsb2NrIHJlbGF0aXZlIHRvIGN1cnJlbnQgZmlsZS4KICAqLwpAQCAtNTQ2LDE1ICs1OTUsMTQgQEAKICAqIDIuIFRoZSBhdHRlbnRpb24gbXNnIGlzIHdyaXR0ZW4gdG8gdGhlICJyZWFkIHN1YnN5c3RlbSBkYXRhIiBidWZmZXIuCiAgKiBJbiB0aGlzIGNhc2Ugd2UgcHJvYmFibHkgc2hvdWxkIHByaW50IGl0IHRvIHRoZSBjb25zb2xlLgogICovCi1zdGF0aWMgaW50Ci10YXBlXzM1OTBfcmVhZF9hdHRtc2coc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgdm9pZCB0YXBlXzM1OTBfcmVhZF9hdHRtc2dfYXN5bmMoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKIAljaGFyICpidWY7CiAKIAlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDMsIDQwOTYpOwogCWlmIChJU19FUlIocmVxdWVzdCkpCi0JCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOworCQlyZXR1cm47CiAJcmVxdWVzdC0+b3AgPSBUT19SRUFEX0FUVE1TRzsKIAlidWYgPSByZXF1ZXN0LT5jcGRhdGE7CiAJYnVmWzBdID0gUFJFUF9SRF9TU19EQVRBOwpAQCAtNTYyLDEyICs2MTAsMTUgQEAKIAl0YXBlX2Njd19jYyhyZXF1ZXN0LT5jcGFkZHIsIFBFUkZPUk1fU1NfRlVOQywgMTIsIGJ1Zik7CiAJdGFwZV9jY3dfY2MocmVxdWVzdC0+Y3BhZGRyICsgMSwgUkVBRF9TU19EQVRBLCA0MDk2IC0gMTIsIGJ1ZiArIDEyKTsKIAl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyICsgMiwgTk9QLCAwLCBOVUxMKTsKLQlyZXR1cm4gdGFwZV9kb19pb19mcmVlKGRldmljZSwgcmVxdWVzdCk7CisJdGFwZV9kb19pb19hc3luY19mcmVlKGRldmljZSwgcmVxdWVzdCk7CiB9CiAKIC8qCiAgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gc2NoZWR1bGUgZm9sbG93LXVwIGFjdGlvbnMgZnJvbSB3aXRoaW4gYW4KICAqIGludGVycnVwdCBjb250ZXh0IChsaWtlIHVuc29saWNpdGVkIGludGVycnVwdHMpLgorICogTm90ZTogdGhlIHdvcmsgaGFuZGxlciBpcyBjYWxsZWQgYnkgdGhlIHN5c3RlbSB3b3JrIHF1ZXVlLiBUaGUgdGFwZQorICogY29tbWFuZHMgc3RhcnRlZCBieSB0aGUgaGFuZGxlciBuZWVkIHRvIGJlIGFzeW5jaHJvdW5vdXMsIG90aGVyd2lzZQorICogYSBkZWFkbG9jayBjYW4gb2NjdXIgZS5nLiBpbiBjYXNlIG9mIGEgZGVmZXJyZWQgY2M9MSAoc2VlIF9fdGFwZV9kb19pcnEpLgogICovCiBzdHJ1Y3Qgd29ya19oYW5kbGVyX2RhdGEgewogCXN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlOwpAQCAtNTgzLDE2ICs2MzQsMTYgQEAKIAogCXN3aXRjaCAocC0+b3ApIHsKIAljYXNlIFRPX01TRU46Ci0JCXRhcGVfMzU5MF9zZW5zZV9tZWRpdW0ocC0+ZGV2aWNlKTsKKwkJdGFwZV8zNTkwX3NlbnNlX21lZGl1bV9hc3luYyhwLT5kZXZpY2UpOwogCQlicmVhazsKIAljYXNlIFRPX1JFQURfQVRUTVNHOgotCQl0YXBlXzM1OTBfcmVhZF9hdHRtc2cocC0+ZGV2aWNlKTsKKwkJdGFwZV8zNTkwX3JlYWRfYXR0bXNnX2FzeW5jKHAtPmRldmljZSk7CiAJCWJyZWFrOwogCWNhc2UgVE9fQ1JZUFRfT046Ci0JCXRhcGVfMzU5Ml9lbmFibGVfY3J5cHQocC0+ZGV2aWNlKTsKKwkJdGFwZV8zNTkyX2VuYWJsZV9jcnlwdF9hc3luYyhwLT5kZXZpY2UpOwogCQlicmVhazsKIAljYXNlIFRPX0NSWVBUX09GRjoKLQkJdGFwZV8zNTkyX2Rpc2FibGVfY3J5cHQocC0+ZGV2aWNlKTsKKwkJdGFwZV8zNTkyX2Rpc2FibGVfY3J5cHRfYXN5bmMocC0+ZGV2aWNlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJREJGX0VWRU5UKDMsICJUMzU5MDogd29yayBoYW5kbGVyIHVuZGVmaW5lZCBmb3IgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggZTlmZmYyYi4uNTY0MGM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC00NzYsNyArNDc2LDcgQEAKIHN0YXRpYyBpbnQgZ2V0X2luYm91bmRfYnVmZmVyX2Zyb250aWVyKHN0cnVjdCBxZGlvX3EgKnEpCiB7CiAJaW50IGNvdW50LCBzdG9wOwotCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdGF0ZSA9IDA7CiAKIAkvKgogCSAqIERvbid0IGNoZWNrIDEyOCBidWZmZXJzLCBhcyBvdGhlcndpc2UgcWRpb19pbmJvdW5kX3FfbW92ZWQKQEAgLTY0Myw3ICs2NDMsNyBAQAogc3RhdGljIGludCBnZXRfb3V0Ym91bmRfYnVmZmVyX2Zyb250aWVyKHN0cnVjdCBxZGlvX3EgKnEpCiB7CiAJaW50IGNvdW50LCBzdG9wOwotCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdGF0ZSA9IDA7CiAKIAlpZiAobmVlZF9zaWdhX3N5bmMocSkpCiAJCWlmICgoKHF1ZXVlX3R5cGUocSkgIT0gUURJT19JUURJT19RRk1UKSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCA2NWViZWUwLi5iNmE2MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtNTY1LDcgKzU2NSw3IEBACiAJc3RydWN0IGl1Y3ZfZXZlbnQgZXY7CiAJaW50IHJjOwogCi0JaWYgKG1lbWNtcChpdWN2TWFnaWMsIGlwdXNlciwgc2l6ZW9mKGlwdXNlcikpKQorCWlmIChtZW1jbXAoaXVjdk1hZ2ljLCBpcHVzZXIsIDE2KSkKIAkJLyogaXB1c2VyIG11c3QgbWF0Y2ggaXVjdk1hZ2ljLiAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAlyYyA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggMjlmODQ4Yi4uMDE5YWU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtOTg4LDE2ICs5ODgsMzAgQEAKIAljaHBfZHNjID0gKHN0cnVjdCBjaGFubmVsUGF0aF9kc2MgKiljY3dfZGV2aWNlX2dldF9jaHBfZGVzYyhjY3dkZXYsIDApOwogCWlmIChjaHBfZHNjICE9IE5VTEwpIHsKIAkJLyogQ0hQUCBmaWVsZCBiaXQgNiA9PSAxIC0+IHNpbmdsZSBxdWV1ZSAqLwotCQlpZiAoKGNocF9kc2MtPmNocHAgJiAweDAyKSA9PSAweDAyKQorCQlpZiAoKGNocF9kc2MtPmNocHAgJiAweDAyKSA9PSAweDAyKSB7CisJCQlpZiAoKGF0b21pY19yZWFkKCZjYXJkLT5xZGlvLnN0YXRlKSAhPQorCQkJCVFFVEhfUURJT19VTklOSVRJQUxJWkVEKSAmJgorCQkJICAgIChjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPT0gNCkpCisJCQkJLyogY2hhbmdlIGZyb20gNCB0byAxIG91dGJvdW5kIHF1ZXVlcyAqLworCQkJCXFldGhfZnJlZV9xZGlvX2J1ZmZlcnMoY2FyZCk7CiAJCQljYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPSAxOworCQkJaWYgKGNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgIT0gMCkKKwkJCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAorCQkJCQkiUHJpb3JpdHkgUXVldWVpbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCQljYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICgoYXRvbWljX3JlYWQoJmNhcmQtPnFkaW8uc3RhdGUpICE9CisJCQkJUUVUSF9RRElPX1VOSU5JVElBTElaRUQpICYmCisJCQkgICAgKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9PSAxKSkgeworCQkJCS8qIGNoYW5nZSBmcm9tIDEgdG8gNCBvdXRib3VuZCBxdWV1ZXMgKi8KKwkJCQlxZXRoX2ZyZWVfcWRpb19idWZmZXJzKGNhcmQpOworCQkJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAyOworCQkJfQorCQkJY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID0gNDsKKwkJfQogCQljYXJkLT5pbmZvLmZ1bmNfbGV2ZWwgPSAweDQxMDAgKyBjaHBfZHNjLT5kZXNjOwogCQlrZnJlZShjaHBfZHNjKTsKIAl9Ci0JaWYgKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9PSAxKSB7Ci0JCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAwOwotCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAotCQkJIlByaW9yaXR5IFF1ZXVlaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotCX0KIAlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIm5yOiV4IiwgY2FyZC0+cWRpby5ub19vdXRfcXVldWVzKTsKIAlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgImx2bDolMDJ4IiwgY2FyZC0+aW5mby5mdW5jX2xldmVsKTsKIAlyZXR1cm47CkBAIC0xODMyLDMzICsxODQ2LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHFldGhfZ2V0X21heF9tdHVfZm9yX2NhcmQoaW50IGNhcmR0eXBlKQotewotCXN3aXRjaCAoY2FyZHR5cGUpIHsKLQotCWNhc2UgUUVUSF9DQVJEX1RZUEVfVU5LTk9XTjoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TRDoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTjoKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTToKLQljYXNlIFFFVEhfQ0FSRF9UWVBFX09TWDoKLQkJcmV0dXJuIDYxNDQwOwotCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCQlyZXR1cm4gNTczNDQ7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDE1MDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludCBxZXRoX2dldF9tdHVfb3V0X29mX21wYyhpbnQgY2FyZHR5cGUpCi17Ci0Jc3dpdGNoIChjYXJkdHlwZSkgewotCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgotCQlyZXR1cm4gMTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHFldGhfZ2V0X210dV9vdXRvZl9mcmFtZXNpemUoaW50IGZyYW1lc2l6ZSkKIHsKIAlzd2l0Y2ggKGZyYW1lc2l6ZSkgewpAQCAtMTg4MSwxMCArMTg2OCw5IEBACiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU0Q6CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU006CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU1g6Ci0JCXJldHVybiAoKG10dSA+PSA1NzYpICYmIChtdHUgPD0gNjE0NDApKTsKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX0lRRDoKIAkJcmV0dXJuICgobXR1ID49IDU3NikgJiYKLQkJCShtdHUgPD0gY2FyZC0+aW5mby5tYXhfbXR1ICsgNDA5NiAtIDMyKSk7CisJCQkobXR1IDw9IGNhcmQtPmluZm8ubWF4X210dSkpOwogCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgogCWNhc2UgUUVUSF9DQVJEX1RZUEVfVU5LTk9XTjoKIAlkZWZhdWx0OgpAQCAtMTkwNyw3ICsxODkzLDcgQEAKIAltZW1jcHkoJmNhcmQtPnRva2VuLnVscF9maWx0ZXJfciwKIAkgICAgICAgUUVUSF9VTFBfRU5BQkxFX1JFU1BfRklMVEVSX1RPS0VOKGlvYi0+ZGF0YSksCiAJICAgICAgIFFFVEhfTVBDX1RPS0VOX0xFTkdUSCk7Ci0JaWYgKHFldGhfZ2V0X210dV9vdXRfb2ZfbXBjKGNhcmQtPmluZm8udHlwZSkpIHsKKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgewogCQltZW1jcHkoJmZyYW1lc2l6ZSwgUUVUSF9VTFBfRU5BQkxFX1JFU1BfTUFYX01UVShpb2ItPmRhdGEpLCAyKTsKIAkJbXR1ID0gcWV0aF9nZXRfbXR1X291dG9mX2ZyYW1lc2l6ZShmcmFtZXNpemUpOwogCQlpZiAoIW10dSkgewpAQCAtMTkxNSwxMiArMTkwMSwyMSBAQAogCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIgIHJjJWQiLCBpb2ItPnJjKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhcmQtPmluZm8ubWF4X210dSA9IG10dTsKKwkJaWYgKGNhcmQtPmluZm8uaW5pdGlhbF9tdHUgJiYgKGNhcmQtPmluZm8uaW5pdGlhbF9tdHUgIT0gbXR1KSkgeworCQkJLyogZnJhbWUgc2l6ZSBoYXMgY2hhbmdlZCAqLworCQkJaWYgKGNhcmQtPmRldiAmJgorCQkJICAgICgoY2FyZC0+ZGV2LT5tdHUgPT0gY2FyZC0+aW5mby5pbml0aWFsX210dSkgfHwKKwkJCSAgICAgKGNhcmQtPmRldi0+bXR1ID4gbXR1KSkpCisJCQkJY2FyZC0+ZGV2LT5tdHUgPSBtdHU7CisJCQlxZXRoX2ZyZWVfcWRpb19idWZmZXJzKGNhcmQpOworCQl9CiAJCWNhcmQtPmluZm8uaW5pdGlhbF9tdHUgPSBtdHU7CisJCWNhcmQtPmluZm8ubWF4X210dSA9IG10dTsKIAkJY2FyZC0+cWRpby5pbl9idWZfc2l6ZSA9IG10dSArIDIgKiBQQUdFX1NJWkU7CiAJfSBlbHNlIHsKIAkJY2FyZC0+aW5mby5pbml0aWFsX210dSA9IHFldGhfZ2V0X2luaXRpYWxfbXR1X2Zvcl9jYXJkKGNhcmQpOwotCQljYXJkLT5pbmZvLm1heF9tdHUgPSBxZXRoX2dldF9tYXhfbXR1X2Zvcl9jYXJkKGNhcmQtPmluZm8udHlwZSk7CisJCWNhcmQtPmluZm8ubWF4X210dSA9ICooX191MTYgKilRRVRIX1VMUF9FTkFCTEVfUkVTUF9NQVhfTVRVKAorCQkJaW9iLT5kYXRhKTsKIAkJY2FyZC0+cWRpby5pbl9idWZfc2l6ZSA9IFFFVEhfSU5fQlVGX1NJWkVfREVGQVVMVDsKIAl9CiAKQEAgLTM3NzUsNiArMzc3MCw0NyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgcWV0aF9kZXRlcm1pbmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJaW50IHJjOworCWludCBsZW5ndGg7CisJY2hhciAqcHJjZDsKKwlzdHJ1Y3QgY2N3X2RldmljZSAqZGRldjsKKwlpbnQgZGRldl9vZmZsaW5lID0gMDsKKworCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJkZXRjYXBhYiIpOworCWRkZXYgPSBDQVJEX0RERVYoY2FyZCk7CisJaWYgKCFkZGV2LT5vbmxpbmUpIHsKKwkJZGRldl9vZmZsaW5lID0gMTsKKwkJcmMgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoZGRldik7CisJCWlmIChyYykgeworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIzZXJyJWQiLCByYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJjID0gcWV0aF9yZWFkX2NvbmZfZGF0YShjYXJkLCAodm9pZCAqKikgJnByY2QsICZsZW5ndGgpOworCWlmIChyYykgeworCQlRRVRIX0RCRl9NRVNTQUdFKDIsICIlcyBxZXRoX3JlYWRfY29uZl9kYXRhIHJldHVybmVkICVpXG4iLAorCQkJZGV2X25hbWUoJmNhcmQtPmdkZXYtPmRldiksIHJjKTsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJWQiLCByYyk7CisJCWdvdG8gb3V0X29mZmxpbmU7CisJfQorCXFldGhfY29uZmlndXJlX3VuaXRhZGRyKGNhcmQsIHByY2QpOworCXFldGhfY29uZmlndXJlX2Jsa3RfZGVmYXVsdChjYXJkLCBwcmNkKTsKKwlrZnJlZShwcmNkKTsKKworCXJjID0gcWRpb19nZXRfc3NxZF9kZXNjKGRkZXYsICZjYXJkLT5zc3FkKTsKKwlpZiAocmMpCisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNmVyciVkIiwgcmMpOworCitvdXRfb2ZmbGluZToKKwlpZiAoZGRldl9vZmZsaW5lID09IDEpCisJCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoZGRldik7CitvdXQ6CisJcmV0dXJuOworfQorCiBzdGF0aWMgaW50IHFldGhfcWRpb19lc3RhYmxpc2goc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgcWRpb19pbml0aWFsaXplIGluaXRfZGF0YTsKQEAgLTM5MDUsNiArMzk0MSw3IEBACiAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiaHJkc2V0dXAiKTsKIAlhdG9taWNfc2V0KCZjYXJkLT5mb3JjZV9hbGxvY19za2IsIDApOworCXFldGhfZ2V0X2NoYW5uZWxfcGF0aF9kZXNjKGNhcmQpOwogcmV0cnk6CiAJaWYgKHJldHJpZXMpCiAJCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIFJldHJ5aW5nIHRvIGRvIElEWCBhY3RpdmF0ZXMuXG4iLApAQCAtMzkzMyw2ICszOTcwLDcgQEAKIAkJZWxzZQogCQkJZ290byByZXRyeTsKIAl9CisJcWV0aF9kZXRlcm1pbmVfY2FwYWJpbGl0aWVzKGNhcmQpOwogCXFldGhfaW5pdF90b2tlbnMoY2FyZCk7CiAJcWV0aF9pbml0X2Z1bmNfbGV2ZWwoY2FyZCk7CiAJcmMgPSBxZXRoX2lkeF9hY3RpdmF0ZV9jaGFubmVsKCZjYXJkLT5yZWFkLCBxZXRoX2lkeF9yZWFkX2NiKTsKQEAgLTQyMDIsNDEgKzQyNDAsNiBAQAogCWNhcmQtPmRpc2NpcGxpbmUuY2N3Z2RyaXZlciA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHFldGhfZGV0ZXJtaW5lX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQotewotCWludCByYzsKLQlpbnQgbGVuZ3RoOwotCWNoYXIgKnByY2Q7Ci0KLQlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZGV0Y2FwYWIiKTsKLQlyYyA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShDQVJEX0RERVYoY2FyZCkpOwotCWlmIChyYykgewotCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjNlcnIlZCIsIHJjKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0KLQlyYyA9IHFldGhfcmVhZF9jb25mX2RhdGEoY2FyZCwgKHZvaWQgKiopICZwcmNkLCAmbGVuZ3RoKTsKLQlpZiAocmMpIHsKLQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgcWV0aF9yZWFkX2NvbmZfZGF0YSByZXR1cm5lZCAlaVxuIiwKLQkJCWRldl9uYW1lKCZjYXJkLT5nZGV2LT5kZXYpLCByYyk7Ci0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOwotCQlnb3RvIG91dF9vZmZsaW5lOwotCX0KLQlxZXRoX2NvbmZpZ3VyZV91bml0YWRkcihjYXJkLCBwcmNkKTsKLQlxZXRoX2NvbmZpZ3VyZV9ibGt0X2RlZmF1bHQoY2FyZCwgcHJjZCk7Ci0Ja2ZyZWUocHJjZCk7Ci0KLQlyYyA9IHFkaW9fZ2V0X3NzcWRfZGVzYyhDQVJEX0RERVYoY2FyZCksICZjYXJkLT5zc3FkKTsKLQlpZiAocmMpCi0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNmVyciVkIiwgcmMpOwotCi1vdXRfb2ZmbGluZToKLQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKENBUkRfRERFVihjYXJkKSk7Ci1vdXQ6Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgaW50IHFldGhfY29yZV9wcm9iZV9kZXZpY2Uoc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldikKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKaW5kZXggMmFjOGY2YS4uYWRhMGZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCkBAIC01NzMsMTMgKzU3MywxMyBAQAogCQljYXNlIElQQV9SQ19MMl9EVVBfTEFZRVIzX01BQzoKIAkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCQkJIk1BQyBhZGRyZXNzICVwTSBhbHJlYWR5IGV4aXN0c1xuIiwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyKTsKKwkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7CiAJCQlicmVhazsKIAkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0hZUDoKIAkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0FEUDoKIAkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCiAJCQkJIk1BQyBhZGRyZXNzICVwTSBpcyBub3QgYXV0aG9yaXplZFxuIiwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyKTsKKwkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCmluZGV4IDY1ZTFjZjEuLjIwN2I3ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKQEAgLTYwLDcgKzYwLDcgQEAKIHN0YXRpYyBpbnQgc21zZ19wYXRoX3BlbmRpbmcoc3RydWN0IGl1Y3ZfcGF0aCAqcGF0aCwgdTggaXB2bWlkWzhdLAogCQkJICAgICB1OCBpcHVzZXJbMTZdKQogewotCWlmIChzdHJuY21wKGlwdm1pZCwgIipNU0cgICAgIiwgc2l6ZW9mKGlwdm1pZCkpICE9IDApCisJaWYgKHN0cm5jbXAoaXB2bWlkLCAiKk1TRyAgICAiLCA4KSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKiBQYXRoIHBlbmRpbmcgZnJvbSAqTVNHLiAqLwogCXJldHVybiBpdWN2X3BhdGhfYWNjZXB0KHBhdGgsICZzbXNnX2hhbmRsZXIsICJTTVNHSVVDViAgICAgICAgIiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zci5oIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3IuaAppbmRleCA0NzVjMzFhLi43N2IyNmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zci5oCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmgKQEAgLTIsNyArMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKiAgICAgICAgTy5TICAgOiBMaW51eAogKiogICBGSUxFIE5BTUUgIDogYXJjbXNyLmgKLSoqICAgICAgICBCWSAgICA6IEVyaWNoIENoZW4KKyoqICAgICAgICBCWSAgICA6IE5pY2sgQ2hlbmcKICoqICAgRGVzY3JpcHRpb246IFNDU0kgUkFJRCBEZXZpY2UgRHJpdmVyIGZvcgogKiogICAgICAgICAgICAgICAgQVJFQ0EgUkFJRCBIb3N0IGFkYXB0ZXIKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ2LDggKzQ2LDEyIEBACiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZTsKIC8qVGhlIGxpbWl0IG9mIG91dHN0YW5kaW5nIHNjc2kgY29tbWFuZCB0aGF0IGZpcm13YXJlIGNhbiBoYW5kbGUqLwogI2RlZmluZSBBUkNNU1JfTUFYX09VVFNUQU5ESU5HX0NNRAkJCQkJCTI1NgotI2RlZmluZSBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNCQkJCQkJCTMyMAotI2RlZmluZSBBUkNNU1JfRFJJVkVSX1ZFUlNJT04JCSAgICAgIkRyaXZlciBWZXJzaW9uIDEuMjAuMDAuMTUgMjAxMC8wMi8wMiIKKyNpZmRlZiBDT05GSUdfWEVOCisJI2RlZmluZSBBUkNNU1JfTUFYX0ZSRUVDQ0JfTlVNCTE2MAorI2Vsc2UKKwkjZGVmaW5lIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0JMzIwCisjZW5kaWYKKyNkZWZpbmUgQVJDTVNSX0RSSVZFUl9WRVJTSU9OCQkgICAgICJEcml2ZXIgVmVyc2lvbiAxLjIwLjAwLjE1IDIwMTAvMDgvMDUiCiAjZGVmaW5lIEFSQ01TUl9TQ1NJX0lOSVRJQVRPUl9JRAkJCQkJCTI1NQogI2RlZmluZSBBUkNNU1JfTUFYX1hGRVJfU0VDVE9SUwkJCQkJCQk1MTIKICNkZWZpbmUgQVJDTVNSX01BWF9YRkVSX1NFQ1RPUlNfQgkJCQkJCTQwOTYKQEAgLTYwLDcgKzY0LDYgQEAKICNkZWZpbmUgQVJDTVNSX01BWF9IQkJfUE9TVFFVRVVFCQkJCQkJMjY0CiAjZGVmaW5lIEFSQ01TUl9NQVhfWEZFUl9MRU4JCQkJCQkJMHgyNjAwMCAvKiAxNTJLICovCiAjZGVmaW5lIEFSQ01TUl9DREJfU0dfUEFHRV9MRU5HVEgJCQkJCQkyNTYgCi0jZGVmaW5lIFNDU0lfQ01EX0FSRUNBX1NQRUNJRklDCQkJCQkJMHhFMQogI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0FSRUNBXzE4ODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUkVDQV8xODgwIDB4MTg4MAogICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCmluZGV4IGE0ZTA0YzUuLmFjZGFlMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKQEAgLTIsNyArMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKiAgICAgICAgTy5TICAgOiBMaW51eAogKiogICBGSUxFIE5BTUUgIDogYXJjbXNyX2F0dHIuYwotKiogICAgICAgIEJZICAgIDogRXJpY2ggQ2hlbgorKiogICAgICAgIEJZICAgIDogTmljayBDaGVuZwogKiogICBEZXNjcmlwdGlvbjogYXR0cmlidXRlcyBleHBvcnRlZCB0byBzeXNmcyBhbmQgZGV2aWNlIGhvc3QKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDUsIEFyZWNhIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gQWxsIHJpZ2h0cyByZXNlcnZlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfaGJhLmMgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYwppbmRleCAxY2FkY2Q2Li45ODRiZDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYworKysgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYwpAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqICAgICAgICBPLlMgICA6IExpbnV4CiAqKiAgIEZJTEUgTkFNRSAgOiBhcmNtc3JfaGJhLmMKLSoqICAgICAgICBCWSAgICA6IEVyaWNoIENoZW4KKyoqICAgICAgICBCWSAgICA6IE5pY2sgQ2hlbmcKICoqICAgRGVzY3JpcHRpb246IFNDU0kgUkFJRCBEZXZpY2UgRHJpdmVyIGZvcgogKiogICAgICAgICAgICAgICAgQVJFQ0EgUkFJRCBIb3N0IGFkYXB0ZXIKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc2LDcgKzc2LDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIE1PRFVMRV9WRVJTSU9OKEFSQ01TUl9EUklWRVJfVkVSU0lPTik7CiBzdGF0aWMgaW50IHNsZWVwdGltZSA9IDEwOwotc3RhdGljIGludCByZXRyeWNvdW50ID0gMzA7CitzdGF0aWMgaW50IHJldHJ5Y291bnQgPSAxMjsKIHdhaXRfcXVldWVfaGVhZF90IHdhaXRfcTsKIHN0YXRpYyBpbnQgYXJjbXNyX2lvcF9tZXNzYWdlX3hmZXIoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwKIAkJCQkJc3RydWN0IHNjc2lfY21uZCAqY21kKTsKQEAgLTE4Nyw3ICsxODcsNiBAQAogCQlpZiAoaXNsZWVwID4gMCkgewogCQkJbXNsZWVwKGlzbGVlcCoxMDAwKTsKIAkJfQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIndha2UtdXBcbiIpOwogCQlyZXR1cm4gMDsKIH0KIApAQCAtOTIxLDcgKzkyMCw2IEBACiB9CiAKIHN0YXRpYyB2b2lkIGFyY21zcl9kcmFpbl9kb25lcXVldWUoc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiwgc3RydWN0IENvbW1hbmRDb250cm9sQmxvY2sgKnBDQ0IsIGJvb2wgZXJyb3IpCi0KIHsKIAlpbnQgaWQsIGx1bjsKIAlpZiAoKHBDQ0ItPmFjYiAhPSBhY2IpIHx8IChwQ0NCLT5zdGFydGRvbmUgIT0gQVJDTVNSX0NDQl9TVEFSVCkpIHsKQEAgLTk0OCw3ICs5NDYsNyBAQAogCQkJCSwgcENDQi0+c3RhcnRkb25lCiAJCQkJLCBhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSk7CiAJCSAgcmV0dXJuOwotCQl9CisJfQogCWFyY21zcl9yZXBvcnRfY2NiX3N0YXRlKGFjYiwgcENDQiwgZXJyb3IpOwogfQogCkBAIC05ODEsNyArOTc5LDcgQEAKIAljYXNlIEFDQl9BREFQVEVSX1RZUEVfQjogewogCQlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiAqcmVnID0gYWNiLT5wbXVCOwogCQkvKmNsZWFyIGFsbCBvdXRib3VuZCBwb3N0ZWQgUSovCi0JCXdyaXRlbChBUkNNU1JfRE9PUkJFTExfSU5UX0NMRUFSX1BBVFRFUk4sICZyZWctPmlvcDJkcnZfZG9vcmJlbGwpOyAvKiBjbGVhciBkb29yYmVsbCBpbnRlcnJ1cHQgKi8KKwkJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsKTsgLyogY2xlYXIgZG9vcmJlbGwgaW50ZXJydXB0ICovCiAJCWZvciAoaSA9IDA7IGkgPCBBUkNNU1JfTUFYX0hCQl9QT1NUUVVFVUU7IGkrKykgewogCQkJaWYgKChmbGFnX2NjYiA9IHJlYWRsKCZyZWctPmRvbmVfcWJ1ZmZlcltpXSkpICE9IDApIHsKIAkJCQl3cml0ZWwoMCwgJnJlZy0+ZG9uZV9xYnVmZmVyW2ldKTsKQEAgLTE1MTEsNyArMTUwOSw2IEBACiAJCWFyY21zcl9kcmFpbl9kb25lcXVldWUoYWNiLCBwQ0NCLCBlcnJvcik7CiAJfQogfQotCiBzdGF0aWMgdm9pZCBhcmNtc3JfaGJiX3Bvc3RxdWV1ZV9pc3Ioc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYikKIHsKIAl1aW50MzJfdCBpbmRleDsKQEAgLTIxMDYsMTAgKzIxMDMsNiBAQAogCWlmIChhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSA+PQogCQkJQVJDTVNSX01BWF9PVVRTVEFORElOR19DTUQpCiAJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwotCWlmICgoc2NzaWNtZCA9PSBTQ1NJX0NNRF9BUkVDQV9TUEVDSUZJQykpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJSZWNlaXZlaW5nIFNDU0lfQ01EX0FSRUNBX1NQRUNJRklDIGNvbW1hbmQuLlxuIik7Ci0JCXJldHVybiAwOwotCX0KIAljY2IgPSBhcmNtc3JfZ2V0X2ZyZWVjY2IoYWNiKTsKIAlpZiAoIWNjYikKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CkBAIC0yMzkzLDYgKzIzODYsNyBAQAogCWludCBpbmRleCwgcnRuOwogCWJvb2wgZXJyb3I7CiAJcG9sbGluZ19oYmJfY2NiX3JldHJ5OgorCiAJcG9sbF9jb3VudCsrOwogCS8qIGNsZWFyIGRvb3JiZWxsIGludGVycnVwdCAqLwogCXdyaXRlbChBUkNNU1JfRE9PUkJFTExfSU5UX0NMRUFSX1BBVFRFUk4sIHJlZy0+aW9wMmRydl9kb29yYmVsbCk7CkBAIC0yNjYzLDYgKzI2NTcsNyBAQAogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9BIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QTsKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQlVTX1JFU0VUKSAhPSAwICkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0FCT1JUKSAhPSAwICkpeworCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewogCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CkBAIC0yNjcwLDggKzI2NjUsMTAgQEAKIAkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CiAJCX0KIAkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pKTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkgeworCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJcmV0dXJuOworCQl9CiAJCXdyaXRlbChBUkNNU1JfSU5CT1VORF9NRVNHMF9HRVRfQ09ORklHLCAmcmVnLT5pbmJvdW5kX21zZ2FkZHIwKTsKIAkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCX0KQEAgLTI2ODIsMTUgKzI2NzksMTggQEAKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQiBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUI7CiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0JVU19SRVNFVCkgIT0gMCApIHx8ICgoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9BQk9SVCkgIT0gMCApKXsKKwkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKIAkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwogCQlpZiAoYXRvbWljX3JlYWQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSkgPT0gYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSkgewotCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sMTYpOworCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJfQogCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikpOwotCQlpZihhdG9taWNfZGVjX2FuZF90ZXN0KCZhY2ItPnJxX21hcF90b2tlbikpCisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhY2ItPnJxX21hcF90b2tlbikpIHsKKwkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAkJCXJldHVybjsKKwkJfQogCQl3cml0ZWwoQVJDTVNSX01FU1NBR0VfR0VUX0NPTkZJRywgcmVnLT5kcnYyaW9wX2Rvb3JiZWxsKTsKIAkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCX0KQEAgLTI3MDEsNiArMjcwMSw3IEBACiB7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0MgX19pb21lbSAqcmVnID0gYWNiLT5wbXVDOwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHx8ICgoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9CVVNfUkVTRVQpICE9IDApIHx8ICgoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9BQk9SVCkgIT0gMCkpIHsKKwkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKIAkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwpAQCAtMjcwOCw4ICsyNzA5LDEwIEBACiAJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwogCQl9CiAJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSk7Ci0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhY2ItPnJxX21hcF90b2tlbikpCisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhY2ItPnJxX21hcF90b2tlbikpIHsKKwkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAkJCXJldHVybjsKKwkJfQogCQl3cml0ZWwoQVJDTVNSX0lOQk9VTkRfTUVTRzBfR0VUX0NPTkZJRywgJnJlZy0+aW5ib3VuZF9tc2dhZGRyMCk7CiAJCXdyaXRlbChBUkNNU1JfSEJDTVVfRFJWMklPUF9NRVNTQUdFX0NNRF9ET05FLCAmcmVnLT5pbmJvdW5kX2Rvb3JiZWxsKTsKIAkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwpAQCAtMjg5Nyw2ICsyOTAwLDggQEAKIAl1aW50MzJfdCBpbnRtYXNrX29yZzsKIAl1aW50OF90IHJ0bnZhbCA9IDB4MDA7CiAJaW50IGkgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoYXRvbWljX3JlYWQoJmFjYi0+Y2Nib3V0c3RhbmRpbmdjb3VudCkgIT0gMCkgewogCQkvKiBkaXNhYmxlIGFsbCBvdXRib3VuZCBpbnRlcnJ1cHQgKi8KIAkJaW50bWFza19vcmcgPSBhcmNtc3JfZGlzYWJsZV9vdXRib3VuZF9pbnRzKGFjYik7CkBAIC0yOTA3LDcgKzI5MTIsMTIgQEAKIAkJZm9yIChpID0gMDsgaSA8IEFSQ01TUl9NQVhfRlJFRUNDQl9OVU07IGkrKykgewogCQkJY2NiID0gYWNiLT5wY2NiX3Bvb2xbaV07CiAJCQlpZiAoY2NiLT5zdGFydGRvbmUgPT0gQVJDTVNSX0NDQl9TVEFSVCkgewotCQkJCWFyY21zcl9jY2JfY29tcGxldGUoY2NiKTsKKwkJCQlzY3NpX2RtYV91bm1hcChjY2ItPnBjbWQpOworCQkJCWNjYi0+c3RhcnRkb25lID0gQVJDTVNSX0NDQl9ET05FOworCQkJCWNjYi0+Y2NiX2ZsYWdzID0gMDsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWNiLT5jY2JsaXN0X2xvY2ssIGZsYWdzKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZjY2ItPmxpc3QsICZhY2ItPmNjYl9mcmVlX2xpc3QpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjYi0+Y2NibGlzdF9sb2NrLCBmbGFncyk7CiAJCQl9CiAJCX0KIAkJYXRvbWljX3NldCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50LCAwKTsKQEAgLTI5MjAsOCArMjkzMCw3IEBACiAKIHN0YXRpYyBpbnQgYXJjbXNyX2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCiB7Ci0Jc3RydWN0IEFkYXB0ZXJDb250cm9sQmxvY2sgKmFjYiA9Ci0JCShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqKWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiOwogCXVpbnQzMl90IGludG1hc2tfb3JnLCBvdXRib3VuZF9kb29yYmVsbDsKIAlpbnQgcmV0cnlfY291bnQgPSAwOwogCWludCBydG4gPSBGQUlMRUQ7CkBAIC0yOTcxLDMxICsyOTgwLDE2IEBACiAJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKIAkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCQlhZGRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7CisJCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7CiAJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zcjogc2NzaSAgYnVzIHJlc2V0IGVoIHJldHVybnMgd2l0aCBzdWNjZXNzXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKLQkJCQlpZiAoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwotCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJCWluaXRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7Ci0JCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopOwotCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhY2I7Ci0JCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOwotCQkJCQlhZGRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7Ci0JCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopKTsKLQkJCQl9CisJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKKwkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKKwkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CisJCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYqSFopKTsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJfQogCQkJYnJlYWs7CkBAIC0zMDA3LDIxICszMDAxLDEwIEBACiAJCQkJcnRuID0gRkFJTEVEOwogCQkJfSBlbHNlIHsKIAkJCQlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfQlVTX1JFU0VUOwotCQkJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7Ci0JCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWik7Ci0JCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmZ1bmN0aW9uID0gJmFyY21zcl9yZXF1ZXN0X2RldmljZV9tYXA7Ci0JCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwotCQkJCX0KKwkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOworCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMzA2NywzMSArMzA1MCwxNiBAQAogCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CiAJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CiAJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCWluaXRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7Ci0JCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCQlhZGRfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lcik7CisJCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7CiAJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCQlwcmludGsoS0VSTl9FUlIgImFyY21zcjogc2NzaSBidXMgcmVzZXQgZWggcmV0dXJucyB3aXRoIHN1Y2Nlc3NcbiIpOwogCQkJfSBlbHNlIHsKIAkJCQlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfQlVTX1JFU0VUOwotCQkJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7Ci0JCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWik7Ci0JCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmZ1bmN0aW9uID0gJmFyY21zcl9yZXF1ZXN0X2RldmljZV9tYXA7Ci0JCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwotCQkJCX0KKwkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOworCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwogCQkJCXJ0biA9IFNVQ0NFU1M7CiAJCQl9CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKaW5kZXggNTgxNWNiZS4uOWE3YWFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKQEAgLTY0Niw2ICs2NDYsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWxpc3Rfc3BsaWNlX2luaXQoJnNob3N0LT5laF9jbWRfcSwgJmVoX3dvcmtfcSk7CisJc2hvc3QtPmhvc3RfZWhfc2NoZWR1bGVkID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCVNBU19EUFJJTlRLKCJFbnRlciAlc1xuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwppbmRleCBiMmE4MTcwLi45ZWFkMDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwpAQCAtMjE3Niw5ICsyMTc2LDkgQEAKIAkJLyogYWRqdXN0IGhiYV9xdWV1ZV9kZXB0aCwgcmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCwKIAkJICogYW5kIHF1ZXVlX3NpemUKIAkJICovCi0JCWlvYy0+aGJhX3F1ZXVlX2RlcHRoIC09IHF1ZXVlX2RpZmY7Ci0JCWlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCAtPSBxdWV1ZV9kaWZmOwotCQlxdWV1ZV9zaXplIC09IHF1ZXVlX2RpZmY7CisJCWlvYy0+aGJhX3F1ZXVlX2RlcHRoIC09IChxdWV1ZV9kaWZmIC8gMik7CisJCWlvYy0+cmVwbHlfZnJlZV9xdWV1ZV9kZXB0aCAtPSAocXVldWVfZGlmZiAvIDIpOworCQlxdWV1ZV9zaXplID0gZmFjdHMtPk1heFJlcGx5RGVzY3JpcHRvclBvc3RRdWV1ZURlcHRoOwogCX0KIAlpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGggPSBxdWV1ZV9zaXplOwogCkBAIC0zOTQxLDYgKzM5NDEsOCBAQAogc3RhdGljIHZvaWQKIF9iYXNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpCiB7CisJbXB0MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyKGlvYywgcmVzZXRfcGhhc2UpOworCW1wdDJzYXNfY3RsX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7CiAJc3dpdGNoIChyZXNldF9waGFzZSkgewogCWNhc2UgTVBUMl9JT0NfUFJFX1JFU0VUOgogCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6ICIKQEAgLTM5NzEsOCArMzk3Myw2IEBACiAJCSAgICAiTVBUMl9JT0NfRE9ORV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCQlicmVhazsKIAl9Ci0JbXB0MnNhc19zY3NpaF9yZXNldF9oYW5kbGVyKGlvYywgcmVzZXRfcGhhc2UpOwotCW1wdDJzYXNfY3RsX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7CiB9CiAKIC8qKgpAQCAtNDAyNiw2ICs0MDI2LDcgQEAKIHsKIAlpbnQgcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IHBlX2NvbXBsZXRlID0gaW9jLT53YWl0X2Zvcl9wb3J0X2VuYWJsZV90b19jb21wbGV0ZTsKIAogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogZW50ZXJcbiIsIGlvYy0+bmFtZSwKIAkgICAgX19mdW5jX18pKTsKQEAgLTQwNjgsNiArNDA2OSwxNCBAQAogCWlmIChyKQogCQlnb3RvIG91dDsKIAlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfQUZURVJfUkVTRVQpOworCisJLyogSWYgdGhpcyBoYXJkIHJlc2V0IGlzIGNhbGxlZCB3aGlsZSBwb3J0IGVuYWJsZSBpcyBhY3RpdmUsIHRoZW4KKwkgKiB0aGVyZSBpcyBubyByZWFzb24gdG8gY2FsbCBtYWtlX2lvY19vcGVyYXRpb25hbAorCSAqLworCWlmIChwZV9jb21wbGV0ZSkgeworCQlyID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQogCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIHNsZWVwX2ZsYWcpOwogCWlmICghcikKIAkJX2Jhc2VfcmVzZXRfaGFuZGxlcihpb2MsIE1QVDJfSU9DX0RPTkVfUkVTRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IGVkYTM0N2MuLjVkZWQzZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTgxOSw3ICs4MTksNyBAQAogfQogCiAvKioKLSAqIG1wdHNjc2loX2dldF9zY3NpX2xvb2t1cCAtIHJldHVybnMgc2NtZCBlbnRyeQorICogX3Njc2loX3Njc2lfbG9va3VwX2dldCAtIHJldHVybnMgc2NtZCBlbnRyeQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAogICoKQEAgLTgzMiw2ICs4MzIsMjggQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyIC0gcmV0dXJucyBzY21kIGVudHJ5CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKgorICogUmV0dXJucyB0aGUgc21pZCBzdG9yZWQgc2NtZCBwb2ludGVyLgorICogVGhlbiB3aWxsIGRlcmVmcmVuY2UgdGhlIHN0b3JlZCBzY21kIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNjc2lfY21uZCAqCitfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXNjbWQgPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOworCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHNjbWQ7Cit9CisKKy8qKgogICogX3Njc2loX3Njc2lfbG9va3VwX2ZpbmRfYnlfc2NtZCAtIHNjbWQgbG9va3VwCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CkBAIC0yOTgxLDkgKzMwMDMsNiBAQAogCXUxNiBoYW5kbGU7CiAKIAlmb3IgKGkgPSAwIDsgaSA8IGV2ZW50X2RhdGEtPk51bUVudHJpZXM7IGkrKykgewotCQlpZiAoZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCi0JCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWVNUQVRVU19WQUNBTlQpCi0JCQljb250aW51ZTsKIAkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UEhZW2ldLkF0dGFjaGVkRGV2SGFuZGxlKTsKIAkJaWYgKCFoYW5kbGUpCiAJCQljb250aW51ZTsKQEAgLTMyMTAsNyArMzIyOSw3IEBACiAJdTE2IGNvdW50ID0gMDsKIAogCWZvciAoc21pZCA9IDE7IHNtaWQgPD0gaW9jLT5zY3NpaW9fZGVwdGg7IHNtaWQrKykgewotCQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOworCQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldF9jbGVhcihpb2MsIHNtaWQpOwogCQlpZiAoIXNjbWQpCiAJCQljb250aW51ZTsKIAkJY291bnQrKzsKQEAgLTM4MDQsNyArMzgyMyw3IEBACiAJdTMyIHJlc3BvbnNlX2NvZGUgPSAwOwogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7Ci0Jc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKKwlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldF9jbGVhcihpb2MsIHNtaWQpOwogCWlmIChzY21kID09IE5VTEwpCiAJCXJldHVybiAxOwogCkBAIC01MDA1LDYgKzUwMjQsMTIgQEAKIAkJICAgICBldmVudF9kYXRhKTsKICNlbmRpZgogCisJLyogSW4gTVBJIFJldmlzaW9uIEsgKDB4QyksIHRoZSBpbnRlcm5hbCBkZXZpY2UgcmVzZXQgY29tcGxldGUgd2FzCisJICogaW1wbGVtZW50ZWQsIHNvIGF2b2lkIHNldHRpbmcgdG1fYnVzeSBmbGFnIGZvciBvbGRlciBmaXJtd2FyZS4KKwkgKi8KKwlpZiAoKGlvYy0+ZmFjdHMuSGVhZGVyVmVyc2lvbiA+PiA4KSA8IDB4QykKKwkJcmV0dXJuOworCiAJaWYgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgIT0KIAkgICAgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfSU5URVJOQUxfREVWSUNFX1JFU0VUICYmCiAJICAgZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPQpAQCAtNTA5OSw2ICs1MTI0LDcgQEAKICAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJdTE2IHNtaWQsIGhhbmRsZTsKIAl1MzIgbHVuOwogCXN0cnVjdCBNUFQyU0FTX0RFVklDRSAqc2FzX2RldmljZV9wcml2X2RhdGE7CkBAIC01MTA5LDEyICs1MTM1LDE3IEBACiAJTXBpMkV2ZW50RGF0YVNhc0Jyb2FkY2FzdFByaW1pdGl2ZV90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAjZW5kaWYKIAl1MTYgaW9jX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByOworCiAJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJicm9hZGNhc3QgcHJpbWF0aXZlOiAiCiAJICAgICJwaHkgbnVtYmVyKCVkKSwgd2lkdGgoJWQpXG4iLCBpb2MtPm5hbWUsIGV2ZW50X2RhdGEtPlBoeU51bSwKIAkgICAgZXZlbnRfZGF0YS0+UG9ydFdpZHRoKSk7CiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWlvYy0+YnJvYWRjYXN0X2Flbl9idXN5ID0gMDsKIAl0ZXJtaW5hdGlvbl9jb3VudCA9IDA7CiAJcXVlcnlfY291bnQgPSAwOwogCW1waV9yZXBseSA9IGlvYy0+dG1fY21kcy5yZXBseTsKQEAgLTUxMjIsNyArNTE1Myw4IEBACiAJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CiAJCWlmICghc2NtZCkKIAkJCWNvbnRpbnVlOwotCQlzYXNfZGV2aWNlX3ByaXZfZGF0YSA9IHNjbWQtPmRldmljZS0+aG9zdGRhdGE7CisJCXNkZXYgPSBzY21kLT5kZXZpY2U7CisJCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2Rldi0+aG9zdGRhdGE7CiAJCWlmICghc2FzX2RldmljZV9wcml2X2RhdGEgfHwgIXNhc19kZXZpY2VfcHJpdl9kYXRhLT5zYXNfdGFyZ2V0KQogCQkJY29udGludWU7CiAJCSAvKiBza2lwIGhpZGRlbiByYWlkIGNvbXBvbmVudHMgKi8KQEAgLTUxMzgsNiArNTE3MCw3IEBACiAJCWx1biA9IHNhc19kZXZpY2VfcHJpdl9kYXRhLT5sdW47CiAJCXF1ZXJ5X2NvdW50Kys7CiAKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJCW1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLCBoYW5kbGUsIDAsIDAsIGx1biwKIAkJICAgIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FVRVJZX1RBU0ssIHNtaWQsIDMwLCBOVUxMKTsKIAkJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwpAQCAtNTE0NywxNCArNTE4MCwyMCBAQAogCQkgICAgKG1waV9yZXBseS0+UmVzcG9uc2VDb2RlID09CiAJCSAgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX1RNX1NVQ0NFRURFRCB8fAogCQkgICAgIG1waV9yZXBseS0+UmVzcG9uc2VDb2RlID09Ci0JCSAgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lPX1FVRVVFRF9PTl9JT0MpKQorCQkgICAgIE1QSTJfU0NTSVRBU0tNR01UX1JTUF9JT19RVUVVRURfT05fSU9DKSkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCQkJY29udGludWU7Ci0KLQkJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGhhbmRsZSwgMCwgMCwgbHVuLAotCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJSVF9UQVNLX1NFVCwgMCwgMzAsIE5VTEwpOworCQl9CisJCXIgPSBtcHQyc2FzX3Njc2loX2lzc3VlX3RtKGlvYywgaGFuZGxlLCBzZGV2LT5jaGFubmVsLCBzZGV2LT5pZCwKKwkJICAgIHNkZXYtPmx1biwgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfQUJPUlRfVEFTSywgc21pZCwgMzAsCisJCSAgICBzY21kKTsKKwkJaWYgKHIgPT0gRkFJTEVEKQorCQkJc2Rldl9wcmludGsoS0VSTl9XQVJOSU5HLCBzZGV2LCAidGFzayBhYm9ydDogRkFJTEVEICIKKwkJCSAgICAic2NtZCglcClcbiIsIHNjbWQpOwogCQl0ZXJtaW5hdGlvbl9jb3VudCArPSBsZTMyX3RvX2NwdShtcGlfcmVwbHktPlRlcm1pbmF0aW9uQ291bnQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJfQotCWlvYy0+YnJvYWRjYXN0X2Flbl9idXN5ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAogCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UCiAJICAgICIlcyAtIGV4aXQsIHF1ZXJ5X2NvdW50ID0gJWQgdGVybWluYXRpb25fY291bnQgPSAlZFxuIiwKQEAgLTY2MjYsNiArNjY2NSw3IEBACiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHdxKTsKIAogCS8qIHJlbGVhc2UgYWxsIHRoZSB2b2x1bWVzICovCisJX3Njc2loX2lyX3NodXRkb3duKGlvYyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJhaWRfZGV2aWNlLCBuZXh0LCAmaW9jLT5yYWlkX2RldmljZV9saXN0LAogCSAgICBsaXN0KSB7CiAJCWlmIChyYWlkX2RldmljZS0+c3RhcmdldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKaW5kZXggNDQ1NzhiNS4uZDNlNThkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCkBAIC0xNTYxLDYgKzE1NjEsNyBAQAogewogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBycG9ydF90b19zaG9zdChycG9ydCk7CiAJZmNfcG9ydF90ICpmY3BvcnQgPSAqKGZjX3BvcnRfdCAqKilycG9ydC0+ZGRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFmY3BvcnQpCiAJCXJldHVybjsKQEAgLTE1NzMsMTAgKzE1NzQsMTAgQEAKIAkgKiBUcmFuc3BvcnQgaGFzIGVmZmVjdGl2ZWx5ICdkZWxldGVkJyB0aGUgcnBvcnQsIGNsZWFyCiAJICogYWxsIGxvY2FsIHJlZmVyZW5jZXMuCiAJICovCi0Jc3Bpbl9sb2NrX2lycShob3N0LT5ob3N0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWZjcG9ydC0+cnBvcnQgPSBmY3BvcnQtPmRycG9ydCA9IE5VTEw7CiAJKigoZmNfcG9ydF90ICoqKXJwb3J0LT5kZF9kYXRhKSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCWlmICh0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmZmNwb3J0LT52aGEtPmRwY19mbGFncykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IGY5NDhlMWEuLmQ5NDc5YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtMjUwNSwxMSArMjUwNSwxMiBAQAogewogCWZjX3BvcnRfdCAqZmNwb3J0ID0gZGF0YTsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlycG9ydCA9IGZjcG9ydC0+ZHJwb3J0ID8gZmNwb3J0LT5kcnBvcnQ6IGZjcG9ydC0+cnBvcnQ7CiAJZmNwb3J0LT5kcnBvcnQgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycShmY3BvcnQtPnZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAlpZiAocnBvcnQpCiAJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShycG9ydCk7CiB9CkBAIC0yODc5LDYgKzI4ODAsNyBAQAogCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBycG9ydF9pZHM7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcWxhMngwMF9ycG9ydF9kZWwoZmNwb3J0KTsKIApAQCAtMjg5Myw5ICsyODk1LDkgQEAKIAkJICAgICJVbmFibGUgdG8gYWxsb2NhdGUgZmMgcmVtb3RlIHBvcnQhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlzcGluX2xvY2tfaXJxKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkqKChmY19wb3J0X3QgKiopcnBvcnQtPmRkX2RhdGEpID0gZmNwb3J0OwotCXNwaW5fdW5sb2NrX2lycShmY3BvcnQtPnZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCXJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IGZjcG9ydC0+c3VwcG9ydGVkX2NsYXNzZXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9vcy5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKaW5kZXggYzE5NGMyMy4uZjI3NzI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMKQEAgLTU2Miw3ICs1NjIsNiBAQAogCX0KIAlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpICE9IEZDU19PTkxJTkUpIHsKIAkJaWYgKGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfREVWSUNFX0RFQUQgfHwKLQkJCWF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSA9PSBGQ1NfREVWSUNFX0xPU1QgfHwKIAkJCWF0b21pY19yZWFkKCZiYXNlX3ZoYS0+bG9vcF9zdGF0ZSkgPT0gTE9PUF9ERUFEKSB7CiAJCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQkJZ290byBxYzI0X2ZhaWxfY29tbWFuZDsKQEAgLTI1MTMsNiArMjUxMiw3IEBACiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKIAlzY3NpX3FsYV9ob3N0X3QgKmJhc2VfdmhhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWZjcG9ydC0+cnBvcnQpCiAJCXJldHVybjsKQEAgLTI1MjAsOSArMjUyMCw5IEBACiAJcnBvcnQgPSBmY3BvcnQtPnJwb3J0OwogCWlmIChkZWZlcikgewogCQliYXNlX3ZoYSA9IHBjaV9nZXRfZHJ2ZGF0YSh2aGEtPmh3LT5wZGV2KTsKLQkJc3Bpbl9sb2NrX2lycSh2aGEtPmhvc3QtPmhvc3RfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKHZoYS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCWZjcG9ydC0+ZHJwb3J0ID0gcnBvcnQ7Ci0JCXNwaW5fdW5sb2NrX2lycSh2aGEtPmhvc3QtPmhvc3RfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodmhhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJc2V0X2JpdChGQ1BPUlRfVVBEQVRFX05FRURFRCwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwogCQlxbGEyeHh4X3dha2VfZHBjKGJhc2VfdmhhKTsKIAl9IGVsc2UKQEAgLTMyODIsMTAgKzMyODIsMTAgQEAKIAogCXNldF91c2VyX25pY2UoY3VycmVudCwgLTIwKTsKIAorCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJREVCVUczKHByaW50aygicWxhMngwMDogRFBDIGhhbmRsZXIgc2xlZXBpbmdcbiIpKTsKIAotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlzY2hlZHVsZSgpOwogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKQEAgLTM0NTQsNyArMzQ1NCw5IEBACiAJCXFsYTJ4MDBfZG9fZHBjX2FsbF92cHMoYmFzZV92aGEpOwogCiAJCWhhLT5kcGNfYWN0aXZlID0gMDsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl9IC8qIEVuZCBvZiB3aGlsZSgxKSAqLworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAogCURFQlVHKHByaW50aygic2NzaSglbGQpOiBEUEMgaGFuZGxlciBleGl0aW5nXG4iLCBiYXNlX3ZoYS0+aG9zdF9ubykpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwppbmRleCA3YjMxMDkzLi5hNmIyZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKQEAgLTE2NzEsNyArMTY3MSw3IEBACiAJCQkgICAgdW5zaWduZWQgbG9uZyBsb25nIGxiYSwgdW5zaWduZWQgaW50IG51bSwgaW50IHdyaXRlKQogewogCWludCByZXQ7Ci0JdW5zaWduZWQgaW50IGJsb2NrLCByZXN0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYmxvY2ssIHJlc3QgPSAwOwogCWludCAoKmZ1bmMpKHN0cnVjdCBzY3NpX2NtbmQgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOwogCiAJZnVuYyA9IHdyaXRlID8gZmV0Y2hfdG9fZGV2X2J1ZmZlciA6IGZpbGxfZnJvbV9kZXZfYnVmZmVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCA5MDQ1YzUyLi5mYjJiYjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJCQkJCSZzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9mbGFncyk7CiAJCWlmIChmbGFnc2V0KQogCQkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19SRUVOVEVSLCBzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKLQkJX19ibGtfcnVuX3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUpOworCQlfX2Jsa19ydW5fcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZmFsc2UpOwogCQlpZiAoZmxhZ3NldCkKIAkJCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19SRUVOVEVSLCBzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKIAkJc3Bpbl91bmxvY2soc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDk5OGMwMWIuLjVjM2NjZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC0zODI5LDcgKzM4MjksNyBAQAogCQkgICF0ZXN0X2JpdChRVUVVRV9GTEFHX1JFRU5URVIsICZycG9ydC0+cnFzdF9xLT5xdWV1ZV9mbGFncyk7CiAJaWYgKGZsYWdzZXQpCiAJCXF1ZXVlX2ZsYWdfc2V0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgcnBvcnQtPnJxc3RfcSk7Ci0JX19ibGtfcnVuX3F1ZXVlKHJwb3J0LT5ycXN0X3EpOworCV9fYmxrX3J1bl9xdWV1ZShycG9ydC0+cnFzdF9xLCBmYWxzZSk7CiAJaWYgKGZsYWdzZXQpCiAJCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19SRUVOVEVSLCBycG9ydC0+cnFzdF9xKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHJwb3J0LT5ycXN0X3EtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGlfcGNpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpX3BjaS5jCmluZGV4IDM1MWQ4YTM3NS4uMTk3NTJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaV9wY2kuYworKysgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpX3BjaS5jCkBAIC03LDEwICs3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvcHhhMnh4X3NwaS5oPgogCi1zdHJ1Y3QgYXdlc29tZV9zdHJ1Y3Qgeworc3RydWN0IGNlNDEwMF9pbmZvIHsKIAlzdHJ1Y3Qgc3NwX2RldmljZSBzc3A7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGlfcGRldjsKLQlzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgc3BpX3BkYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNwaV9wZGV2OwogfTsKIAogc3RhdGljIERFRklORV9NVVRFWChzc3BfbG9jayk7CkBAIC01MSwyMyArNTAsMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHB4YV9zc3BfZnJlZSk7CiAKLXN0YXRpYyB2b2lkIHBsYXRfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBhd2Vzb21lX3N0cnVjdCAqYXMgPSBjb250YWluZXJfb2YoZGV2LAotCQkJc3RydWN0IGF3ZXNvbWVfc3RydWN0LCBzcGlfcGRldi5kZXYpOwotCi0Jb2ZfZGV2aWNlX25vZGVfcHV0KCZhcy0+c3BpX3BkZXYuZGV2KTsKLX0KLQogc3RhdGljIGludCBfX2RldmluaXQgY2U0MTAwX3NwaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWludCByZXQ7CiAJcmVzb3VyY2Vfc2l6ZV90IHBoeXNfYmVnOwogCXJlc291cmNlX3NpemVfdCBwaHlzX2xlbjsKLQlzdHJ1Y3QgYXdlc29tZV9zdHJ1Y3QgKnNwaV9pbmZvOworCXN0cnVjdCBjZTQxMDBfaW5mbyAqc3BpX2luZm87CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgKnNwaV9wZGF0YTsKKwlzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgc3BpX3BkYXRhOwogCXN0cnVjdCBzc3BfZGV2aWNlICpzc3A7CiAKIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwpAQCAtODQsMzMgKzc1LDMwIEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicHhhMnh4LXNwaSIsIGRldi0+ZGV2Zm4pOwogCXNwaV9pbmZvID0ga3phbGxvYyhzaXplb2YoKnNwaV9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcGlfaW5mbykgeworCWlmICghcGRldiB8fCAhc3BpX2luZm8gKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2t6OworCQlnb3RvIGVycl9ub21lbTsKIAl9Ci0Jc3NwID0gJnNwaV9pbmZvLT5zc3A7Ci0JcGRldiA9ICZzcGlfaW5mby0+c3BpX3BkZXY7Ci0Jc3BpX3BkYXRhID0gICZzcGlfaW5mby0+c3BpX3BkYXRhOworCW1lbXNldCgmc3BpX3BkYXRhLCAwLCBzaXplb2Yoc3BpX3BkYXRhKSk7CisJc3BpX3BkYXRhLm51bV9jaGlwc2VsZWN0ID0gZGV2LT5kZXZmbjsKIAotCXBkZXYtPm5hbWUgPSAicHhhMnh4LXNwaSI7Ci0JcGRldi0+aWQgPSBkZXYtPmRldmZuOworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCAmc3BpX3BkYXRhLCBzaXplb2Yoc3BpX3BkYXRhKSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfbm9tZW07CisKIAlwZGV2LT5kZXYucGFyZW50ID0gJmRldi0+ZGV2OwotCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gJnNwaV9pbmZvLT5zcGlfcGRhdGE7Ci0KICNpZmRlZiBDT05GSUdfT0YKIAlwZGV2LT5kZXYub2Zfbm9kZSA9IGRldi0+ZGV2Lm9mX25vZGU7CiAjZW5kaWYKLQlwZGV2LT5kZXYucmVsZWFzZSA9IHBsYXRfZGV2X3JlbGVhc2U7Ci0KLQlzcGlfcGRhdGEtPm51bV9jaGlwc2VsZWN0ID0gZGV2LT5kZXZmbjsKLQorCXNzcCA9ICZzcGlfaW5mby0+c3NwOwogCXNzcC0+cGh5c19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CiAJc3NwLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHBoeXNfYmVnLCBwaHlzX2xlbik7CiAJaWYgKCFzc3AtPm1taW9fYmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCgpIHJlZ2lzdGVyc1xuIik7CiAJCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyX3JlbWFwOworCQlnb3RvIGVycl9ub21lbTsKIAl9CiAJc3NwLT5pcnEgPSBkZXYtPmlycTsKIAlzc3AtPnBvcnRfaWQgPSBwZGV2LT5pZDsKQEAgLTEyMiw3ICsxMTAsNyBAQAogCiAJcGNpX3NldF9kcnZkYXRhKGRldiwgc3BpX2luZm8pOwogCi0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfZGV2X2FkZDsKIApAQCAtMTM1LDI3ICsxMjMsMjEgQEAKIAltdXRleF91bmxvY2soJnNzcF9sb2NrKTsKIAlpb3VubWFwKHNzcC0+bW1pb19iYXNlKTsKIAotZXJyX3JlbWFwOgotCWtmcmVlKHNwaV9pbmZvKTsKLQotZXJyX2t6OgorZXJyX25vbWVtOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihwaHlzX2JlZywgcGh5c19sZW4pOwotCisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwlrZnJlZShzcGlfaW5mbyk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGNlNDEwMF9zcGlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IGF3ZXNvbWVfc3RydWN0ICpzcGlfaW5mbzsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBjZTQxMDBfaW5mbyAqc3BpX2luZm87CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcDsKIAogCXNwaV9pbmZvID0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0KIAlzc3AgPSAmc3BpX2luZm8tPnNzcDsKLQlwZGV2ID0gJnNwaV9pbmZvLT5zcGlfcGRldjsKLQotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNwaV9pbmZvLT5zcGlfcGRldik7CiAKIAlpb3VubWFwKHNzcC0+bW1pb19iYXNlKTsKIAlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCksCkBAIC0xNzEsNyArMTUzLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNlNDEwMF9zcGlfZGV2aWNlc1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyZTZhKSB9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYyBiL2RyaXZlcnMvc3BpL3NwaV9zaF9tc2lvZi5jCmluZGV4IDU2ZjYwYzguLjJjNjY1ZmNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKQEAgLTUwOSw5ICs1MDksMTEgQEAKIAlieXRlc19kb25lID0gMDsKIAogCXdoaWxlIChieXRlc19kb25lIDwgdC0+bGVuKSB7CisJCXZvaWQgKnJ4X2J1ZiA9IHQtPnJ4X2J1ZiA/IHQtPnJ4X2J1ZiArIGJ5dGVzX2RvbmUgOiBOVUxMOworCQljb25zdCB2b2lkICp0eF9idWYgPSB0LT50eF9idWYgPyB0LT50eF9idWYgKyBieXRlc19kb25lIDogTlVMTDsKIAkJbiA9IHNoX21zaW9mX3NwaV90eHJ4X29uY2UocCwgdHhfZmlmbywgcnhfZmlmbywKLQkJCQkJICAgdC0+dHhfYnVmICsgYnl0ZXNfZG9uZSwKLQkJCQkJICAgdC0+cnhfYnVmICsgYnl0ZXNfZG9uZSwKKwkJCQkJICAgdHhfYnVmLAorCQkJCQkgICByeF9idWYsCiAJCQkJCSAgIHdvcmRzLCBiaXRzKTsKIAkJaWYgKG4gPCAwKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY21jaWEuYyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCmluZGV4IGM3MzQ1ZGIuLmY4NTMzNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCkBAIC03MzMsNyArNzMzLDcgQEAKIAogCS8qIEZldGNoIHRoZSB2ZW5kb3Igc3BlY2lmaWMgdHVwbGVzLiAqLwogCXJlcyA9IHBjbWNpYV9sb29wX3R1cGxlKGJ1cy0+aG9zdF9wY21jaWEsIFNTQl9QQ01DSUFfQ0lTLAotCQkJCXNzYl9wY21jaWFfZG9fZ2V0X2ludmFyaWFudHMsIHNwcm9tKTsKKwkJCQlzc2JfcGNtY2lhX2RvX2dldF9pbnZhcmlhbnRzLCBpdik7CiAJaWYgKChyZXMgPT0gMCkgfHwgKHJlcyA9PSAtRU5PU1BDKSkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc2NvbmZpZy5jCmluZGV4IDBlMjk4ZGIuLjI5YjhhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNjb25maWcuYwpAQCAtMzYwLDggKzM2MCw4IEBACiAgICAgICAgIAlzdGF0dXMgPSAxOwogICAgICAgICAJZ290byBjb21wbGV0ZTsKICAgICAJfQotICAgICAgICBsZW4gPSAoZmlybXdhcmUtPnNpemUgPiBNQVhfQkRBRERSX0ZPUk1BVF9MRU5HVEgpPyBNQVhfQkRBRERSX0ZPUk1BVF9MRU5HVEg6IGZpcm13YXJlLT5zaXplOwotCW1lbWNweShjb25maWdfYmRhZGRyLCBmaXJtd2FyZS0+ZGF0YSxsZW4pOworCWxlbiA9IG1pbihmaXJtd2FyZS0+c2l6ZSwgTUFYX0JEQUREUl9GT1JNQVRfTEVOR1RIIC0gMSk7CisJbWVtY3B5KGNvbmZpZ19iZGFkZHIsIGZpcm13YXJlLT5kYXRhLCBsZW4pOwogCWNvbmZpZ19iZGFkZHJbbGVuXSA9ICdcMCc7CiAJd3JpdGVfYmRhZGRyKGhkZXYsY29uZmlnX2JkYWRkcixCREFERFJfVFlQRV9TVFJJTkcpOwogICAgICAgIAlBX1JFTEVBU0VfRklSTVdBUkUoZmlybXdhcmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xfbWFjODAyMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsX21hYzgwMjExLmMKaW5kZXggYmRkNjI5ZC4uY2Q4MzkyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xfbWFjODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bF9tYWM4MDIxMS5jCkBAIC0yMDksMTEgKzIwOSw4IEBACiAJc3RydWN0IHdsX2luZm8gKndsID0gaHctPnByaXY7CiAJQVNTRVJUKHdsKTsKIAlXTF9MT0NLKHdsKTsKLQl3bF9kb3duKHdsKTsKIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOwogCVdMX1VOTE9DSyh3bCk7Ci0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI0Niw3ICsyNDMsMTQgQEAKIHN0YXRpYyB2b2lkCiB3bF9vcHNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlyZXR1cm47CisJc3RydWN0IHdsX2luZm8gKndsOworCisJd2wgPSBIV19UT19XTChodyk7CisKKwkvKiBwdXQgZHJpdmVyIGluIGRvd24gc3RhdGUgKi8KKwlXTF9MT0NLKHdsKTsKKwl3bF9kb3duKHdsKTsKKwlXTF9VTkxPQ0sod2wpOwogfQogCiBzdGF0aWMgaW50CkBAIC0yNTksOSArMjYzLDcgQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE5MODAyMTFfQ0hBTl9IVDIwOgogCWNhc2UgTkw4MDIxMV9DSEFOX05PX0hUOgotCQlXTF9MT0NLKHdsKTsKIAkJZXJyID0gd2xjX3NldCh3bC0+d2xjLCBXTENfU0VUX0NIQU5ORUwsIGNoYW4tPmh3X3ZhbHVlKTsKLQkJV0xfVU5MT0NLKHdsKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOgogCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBQTFVTOgpAQCAtMjgxLDYgKzI4Myw3IEBACiAJaW50IGVyciA9IDA7CiAJaW50IG5ld19pbnQ7CiAKKwlXTF9MT0NLKHdsKTsKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUwpIHsKIAkJV0xfTk9ORSgiJXM6IFNldHRpbmcgbGlzdGVuIGludGVydmFsIHRvICVkXG4iLAogCQkJX19mdW5jX18sIGNvbmYtPmxpc3Rlbl9pbnRlcnZhbCk7CkBAIC0zMzcsNiArMzQwLDcgQEAKIAl9CiAKICBjb25maWdfb3V0OgorCVdMX1VOTE9DSyh3bCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDU1LDEzICs0NTksMjEgQEAKIAogc3RhdGljIHZvaWQgd2xfb3BzX3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CisJc3RydWN0IHdsX2luZm8gKndsID0gaHctPnByaXY7CiAJV0xfTk9ORSgiU2NhbiBTdGFydFxuIik7CisJV0xfTE9DSyh3bCk7CisJd2xjX3NjYW5fc3RhcnQod2wtPndsYyk7CisJV0xfVU5MT0NLKHdsKTsKIAlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIHdsX29wc19zd19zY2FuX2NvbXBsZXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogeworCXN0cnVjdCB3bF9pbmZvICp3bCA9IGh3LT5wcml2OwogCVdMX05PTkUoIlNjYW4gQ29tcGxldGVcbiIpOworCVdMX0xPQ0sod2wpOworCXdsY19zY2FuX3N0b3Aod2wtPndsYyk7CisJV0xfVU5MT0NLKHdsKTsKIAlyZXR1cm47CiB9CiAKQEAgLTc3OSw3ICs3OTEsNyBAQAogCXdsX2ZvdW5kKys7CiAJcmV0dXJuIHdsOwogCi0gZmFpbDoKK2ZhaWw6CiAJd2xfZnJlZSh3bCk7CiBmYWlsMToKIAlyZXR1cm4gTlVMTDsKQEAgLTEwOTAsNyArMTEwMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBMSU5VWFNUQV9QUwogc3RhdGljIGludCB3bF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHdsX2luZm8gKndsOwpAQCAtMTEwNSwxMSArMTExNiwxMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwkvKiBvbmx5IG5lZWQgdG8gZmxhZyBodyBpcyBkb3duIGZvciBwcm9wZXIgcmVzdW1lICovCiAJV0xfTE9DSyh3bCk7Ci0Jd2xfZG93bih3bCk7CiAJd2wtPnB1Yi0+aHdfdXAgPSBmYWxzZTsKIAlXTF9VTkxPQ0sod2wpOwotCXBjaV9zYXZlX3N0YXRlKHBkZXYsIHdsLT5wY2lfcHNzdGF0ZSk7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcmV0dXJuIHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIH0KQEAgLTExMzMsNyArMTE0NSw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYsIHdsLT5wY2lfcHNzdGF0ZSk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyKQpAQCAtMTE0NSwxMyArMTE1NywxMiBAQAogCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKIAotCVdMX0xPQ0sod2wpOwotCWVyciA9IHdsX3VwKHdsKTsKLQlXTF9VTkxPQ0sod2wpOwotCisJLyoKKwkqICBkb25lLiBkcml2ZXIgd2lsbCBiZSBwdXQgaW4gdXAgc3RhdGUKKwkqICBpbiB3bF9vcHNfYWRkX2ludGVyZmFjZSgpIGNhbGwuCisJKi8KIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCQkJCS8qIExJTlVYU1RBX1BTICovCiAKIHN0YXRpYyB2b2lkIHdsX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTExODQsMTQgKzExOTUsMTIgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHdsX3BjaV9kcml2ZXIgPSB7Ci0gLm5hbWUgID0gImJyY204MDIxMSIsCi0gLnByb2JlID0gd2xfcGNpX3Byb2JlLAotI2lmZGVmIExJTlVYU1RBX1BTCi0gLnN1c3BlbmQgPSB3bF9zdXNwZW5kLAotIC5yZXN1bWUgID0gd2xfcmVzdW1lLAotI2VuZGlmCQkJCS8qIExJTlVYU1RBX1BTICovCi0gLnJlbW92ZSAgID0gX19kZXZleGl0X3Aod2xfcmVtb3ZlKSwKLSAuaWRfdGFibGUgPSB3bF9pZF90YWJsZSwKKwkubmFtZSA9ICJicmNtODAyMTEiLAorCS5wcm9iZSA9IHdsX3BjaV9wcm9iZSwKKwkuc3VzcGVuZCA9IHdsX3N1c3BlbmQsCisJLnJlc3VtZSA9IHdsX3Jlc3VtZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aod2xfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSB3bF9pZF90YWJsZSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX21hYzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYwppbmRleCAxZDVkMDFhLi5lMzdlODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYwpAQCAtNTEyNiw3ICs1MTI2LDYgQEAKIAlmaWZvID0gcHJpbzJmaWZvW3ByaW9dOwogCiAJQVNTRVJUKCh1aW50KSBza2JfaGVhZHJvb20oc2R1KSA+PSBUWE9GRik7Ci0JQVNTRVJUKCEoc2R1LT5jbG9uZWQpKTsKIAlBU1NFUlQoIShzZHUtPm5leHQpKTsKIAlBU1NFUlQoIShzZHUtPnByZXYpKTsKIAlBU1NFUlQoZmlmbyA8IE5GSUZPKTsKQEAgLTg0NjIsMyArODQ2MSwxNiBAQAogCiAJa2ZyZWUocWkpOwogfQorCisvKgorICogRmxhZyAnc2NhbiBpbiBwcm9ncmVzcycgdG8gd2l0aG9sZCBkeW5hbWljIHBoeSBjYWxpYnJhdGlvbgorICovCit2b2lkIHdsY19zY2FuX3N0YXJ0KHN0cnVjdCB3bGNfaW5mbyAqd2xjKQoreworCXdsY19waHlfaG9sZF91cGQod2xjLT5iYW5kLT5waSwgUEhZX0hPTERfRk9SX1NDQU4sIHRydWUpOworfQorCit2b2lkIHdsY19zY2FuX3N0b3Aoc3RydWN0IHdsY19pbmZvICp3bGMpCit7CisJd2xjX3BoeV9ob2xkX3VwZCh3bGMtPmJhbmQtPnBpLCBQSFlfSE9MRF9GT1JfU0NBTiwgZmFsc2UpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX3B1Yi5oIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX3B1Yi5oCmluZGV4IDE0NmE2OTAuLmFmZjQxMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19wdWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfcHViLmgKQEAgLTU3MCw2ICs1NzAsOCBAQAogZXh0ZXJuIHUxNiB3bGNfcmF0ZV9zaG1fb2Zmc2V0KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCB1OCByYXRlKTsKIGV4dGVybiB1MzIgd2xjX2dldF9yc3BlY19oaXN0b3J5KHN0cnVjdCB3bGNfYnNzY2ZnICpjZmcpOwogZXh0ZXJuIHUzMiB3bGNfZ2V0X2N1cnJlbnRfaGlnaGVzdF9yYXRlKHN0cnVjdCB3bGNfYnNzY2ZnICpjZmcpOworZXh0ZXJuIHZvaWQgd2xjX3NjYW5fc3RhcnQoc3RydWN0IHdsY19pbmZvICp3bGMpOworZXh0ZXJuIHZvaWQgd2xjX3NjYW5fc3RvcChzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHdsY19pb3Zhcl9nZXR1aW50KHN0cnVjdCB3bGNfaW5mbyAqd2xjLCBjb25zdCBjaGFyICpuYW1lLAogCQkJCSAgICB1aW50ICphcmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKaW5kZXggYWFkNDczMi4uMTUwMmQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwpAQCAtNDM5LDYgKzQzOSw3IEBACiBjb25maWcgQ09NRURJX05JX0FUTUlPCiAJdHJpc3RhdGUgIk5JIEFULU1JTyBFIHNlcmllcyBJU0EtUE5QIGNhcmQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIElTQVBOUCAmJiBDT01FRElfTklfVElPICYmIENPTUVESV9OSV9DT01NT04KKwlzZWxlY3QgQ09NRURJXzgyNTUKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtTUlPIEUgc2VyaWVzIGNhcmRzCkBAIC0xMDQwLDYgKzEwNDEsOCBAQAogY29uZmlnIENPTUVESV9OSV9QQ0lNSU8KIAl0cmlzdGF0ZSAiTkkgUENJLU1JTy1FIHNlcmllcyBhbmQgTSBzZXJpZXMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENPTUVESV9OSV9USU8gJiYgQ09NRURJX05JX0NPTU1PTgorCXNlbGVjdCBDT01FRElfODI1NQorCXNlbGVjdCBDT01FRElfRkMKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLU1JTy1FIHNlcmllcyBhbmQgTSBzZXJpZXMKQEAgLTExNjQsNiArMTE2Nyw3IEBACiBjb25maWcgQ09NRURJX05JX01JT19DUwogCXRyaXN0YXRlICJOSSBEQVFDYXJkIEUgc2VyaWVzIFBDTUNJQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ09NRURJX05JX1RJTyAmJiBDT01FRElfTklfQ09NTU9OCisJc2VsZWN0IENPTUVESV84MjU1CiAJc2VsZWN0IENPTUVESV9GQwogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KQEAgLTEyNjgsNyArMTI3Miw2IEBACiBjb25maWcgQ09NRURJX05JX1RJTwogCXRyaXN0YXRlICJOSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ09NRURJX01JVEUKLQlzZWxlY3QgQ09NRURJXzgyNTUKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXJzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKaW5kZXggY2QyNWIyNC4uZmQyNzRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCkBAIC02MSw4ICs2MSw2IEBACiAjZGVmaW5lIFBDSV9EQVFfU0laRQkJNDA5NgogI2RlZmluZSBQQ0lfREFRX1NJWkVfNjYwWCAgICAgICA4MTkyCiAKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQogc3RydWN0IG1pdGVfc3RydWN0ICptaXRlX2RldmljZXM7CiBFWFBPUlRfU1lNQk9MKG1pdGVfZGV2aWNlcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCmluZGV4IDE0ZTcxNmUuLjU0NzQxYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYwpAQCAtNTI3LDMgKzUyNyw3IEBACiAKIG1vZHVsZV9pbml0KGRyaXZlcl9uaTY1MjdfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoZHJpdmVyX25pNjUyN19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCmluZGV4IDhiOGUyYWEuLjQwM2ZjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYwpAQCAtODcxLDMgKzg3MSw3IEBACiAKIG1vZHVsZV9pbml0KGRyaXZlcl9uaV82NXh4X2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGRyaXZlcl9uaV82NXh4X2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKaW5kZXggNjYxMmIwOC4uY2EyYWVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCkBAIC0xNDIxLDMgKzE0MjEsNyBAQAogCX07CiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCmluZGV4IGU5ZjAzNGUuLmQ4ZDkxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYwpAQCAtMzg0LDMgKzM4NCw3IEBACiAJbWl0ZV9saXN0X2RldmljZXMoKTsKIAlyZXR1cm4gLUVJTzsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwppbmRleCA0ZDE4NjhkLi4wNzI4YzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwpAQCAtNTc1LDcgKzU3NSw4IEBACiAJLyogZ3JhYiBvdXIgSVJRICovCiAJaWYgKGlycSkgewogCQlpc3JfZmxhZ3MgPSAwOwotCQlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IHBjaV9idXN0eXBlKQorCQlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IHBjaV9idXN0eXBlCisJCSAgICB8fCB0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gcGNtY2lhX2J1c3R5cGUpCiAJCQlpc3JfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAJCWlmIChyZXF1ZXN0X2lycShpcnEsIGxhYnBjX2ludGVycnVwdCwgaXNyX2ZsYWdzLAogCQkJCWRyaXZlcl9sYWJwYy5kcml2ZXJfbmFtZSwgZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCmluZGV4IDg0YTE1YzMuLjAwNWQyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKQEAgLTEzNTQsMyArMTM1NCw3IEBACiAKIG1vZHVsZV9pbml0KGRyaXZlcl9wY2lkaW9faW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoZHJpdmVyX3BjaWRpb19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwppbmRleCAyM2EzODEyLi45MTQ4YWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCkBAIC0xODUzLDMgKzE4NTMsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCmluZGV4IGIzZDA1ZmMuLjRmYjgwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwpAQCAtMzY4LDYgKzM2OCw3IEBACiAJCWJsa2Rldi0+Z2QtPmZpcnN0X21pbm9yID0gMDsKIAlibGtkZXYtPmdkLT5mb3BzID0gJmJsb2NrX29wczsKIAlibGtkZXYtPmdkLT5wcml2YXRlX2RhdGEgPSBibGtkZXY7CisJYmxrZGV2LT5nZC0+ZHJpdmVyZnNfZGV2ID0gJihibGtkZXYtPmRldmljZV9jdHgtPmRldmljZSk7CiAJc3ByaW50ZihibGtkZXYtPmdkLT5kaXNrX25hbWUsICJoZCVjIiwgJ2EnICsgZGV2bnVtKTsKIAogCWJsa3ZzY19kb19pbnF1aXJ5KGJsa2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMKaW5kZXggZGY5Y2QxMy4uMGVkYmU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAKIAkvKiBBU1NFUlQoZGV2aWNlKTsgKi8KIAogCXBhY2tldCA9IGt6YWxsb2MoTkVUVlNDX1BBQ0tFVF9TSVpFICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpLAotCQkJIEdGUF9LRVJORUwpOworCQkJIEdGUF9BVE9NSUMpOwogCWlmICghcGFja2V0KQogCQlyZXR1cm47CiAJYnVmZmVyID0gcGFja2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKaW5kZXggMDE0N2I0MC4uYjQxYzk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCkBAIC0yMzYsNiArMjM2LDcgQEAKIAlpZiAoc3RhdHVzID09IDEpIHsKIAkJbmV0aWZfY2Fycmllcl9vbihuZXQpOwogCQluZXRpZl93YWtlX3F1ZXVlKG5ldCk7CisJCW5ldGlmX25vdGlmeV9wZWVycyhuZXQpOwogCX0gZWxzZSB7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7CiAJCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKQEAgLTM1OCw3ICszNTksNiBAQAogCiAJLyogU2V0IGluaXRpYWwgc3RhdGUgKi8KIAluZXRpZl9jYXJyaWVyX29mZihuZXQpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKIAogCW5ldF9kZXZpY2VfY3R4ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAluZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eCA9IGRldmljZV9jdHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X2NvcmUuYwppbmRleCBkZWI2OGM4Li5iOGI1NGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9jb3JlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KIAl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPmludF92cmVmX212ICogMTAwMCkgPj4gc3QtPmNoaXBfaW5mby0+Yml0czsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwogfQogc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3NDc2X3Nob3dfc2NhbGUsIE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X2NvcmUuYwppbmRleCA2ODU5MDg5Li41ZDg1ZWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19jb3JlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KIAl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPmludF92cmVmX212ICogMTAwMCkgPj4gc3QtPmNoaXBfaW5mby0+Yml0czsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiVkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAzZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOwogfQogc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3ODg3X3Nob3dfc2NhbGUsIE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYwppbmRleCA2MzA5ZDUyLi44OWNjZjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMKQEAgLTQzMiw3ICs0MzIsNyBAQAogCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwogCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CiB9CiAKIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW5fc2NhbGUsIFNfSVJVR08sIGFkNzk5eF9zaG93X3NjYWxlLCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL2FkNTQ0Ni5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMKaW5kZXggZTMzODdjZC4uMGY4N2VjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMKQEAgLTg3LDcgKzg3LDcgQEAKIAkvKiBDb3JyZXNwb25kcyB0byBWcmVmIC8gMl4oYml0cykgKi8KIAl1bnNpZ25lZCBpbnQgc2NhbGVfdXYgPSAoc3QtPnZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CiB9CiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKG91dF9zY2FsZSwgU19JUlVHTywgYWQ1NDQ2X3Nob3dfc2NhbGUsIE5VTEwsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YyX2NvbnRyb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCmluZGV4IGUzOGU4OWQuLmUyZjZkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jCkBAIC04NzQsNyArODc0LDEwIEBACiAJCXNjX2FjY2Vzc1szXS5yZWdfYWRkciA9IDB4MTA5OwogCQlzY19hY2Nlc3NbM10ubWFzayA9IE1BU0s2OwogCQlzY19hY2Nlc3NbM10udmFsdWUgPSAweDAwOwotCQludW1fdmFsID0gNDsKKwkJc2NfYWNjZXNzWzRdLnJlZ19hZGRyID0gMHgxMDQ7CisJCXNjX2FjY2Vzc1s0XS52YWx1ZSA9IDB4M0M7CisJCXNjX2FjY2Vzc1s0XS5tYXNrID0gMHhmZjsKKwkJbnVtX3ZhbCA9IDU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY196aWxvZy5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY196aWxvZy5jCmluZGV4IDNmZTVmNDEuLjBhYWQwZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfemlsb2cuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMKQEAgLTQ5NSw3ICs0OTUsNyBAQAogLyogc2VuZCBib290IGRhdGEgdG8gdGhlIElSIFRYIGRldmljZSAqLwogc3RhdGljIGludCBzZW5kX2Jvb3RfZGF0YShzdHJ1Y3QgSVJfdHggKnR4KQogewotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAl1bnNpZ25lZCBjaGFyIGJ1Zls0XTsKIAogCS8qIHNlbmQgdGhlIGJvb3QgYmxvY2sgKi8KQEAgLTUwMyw3ICs1MDMsNyBAQAogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIGtpY2sgaXQgb2ZmPyAqLworCS8qIEhpdCB0aGUgZ28gYnV0dG9uIHRvIGFjdGl2YXRlIHRoZSBuZXcgYm9vdCBkYXRhICovCiAJYnVmWzBdID0gMHgwMDsKIAlidWZbMV0gPSAweDIwOwogCXJldCA9IGkyY19tYXN0ZXJfc2VuZCh0eC0+YywgYnVmLCAyKTsKQEAgLTUxMSw3ICs1MTEsMTkgQEAKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwogCX0KLQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMSk7CisKKwkvKgorCSAqIFdhaXQgZm9yIHppbG9nIHRvIHNldHRsZSBhZnRlciBoaXR0aW5nIGdvIHBvc3QgYm9vdCBibG9jayB1cGxvYWQuCisJICogV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgSEQtUFZSIGFuZCBIVlItMTk1MCBib3RoIHJldHVybiBhbiAtRUlPCisJICogdXBvbiBhdHRlbXB0aW5nIHRvIGdldCBmaXJtd2FyZSByZXZpc2lvbiwgYW5kIHR4IHByb2JlIHRodXMgZmFpbHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIDEpOworCQlpZiAocmV0ID09IDEpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwMCk7CisJfQorCiAJaWYgKHJldCAhPSAxKSB7CiAJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKQEAgLTUyMyw4ICs1MzUsOCBAQAogCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9yZWN2IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKGJ1ZlswXSAhPSAweDgwKSB7Ci0JCXppbG9nX2Vycm9yKCJ1bmV4cGVjdGVkIElSIFRYIHJlc3BvbnNlOiAlMDJ4XG4iLCBidWZbMF0pOworCWlmICgoYnVmWzBdICE9IDB4ODApICYmIChidWZbMF0gIT0gMHhhMCkpIHsKKwkJemlsb2dfZXJyb3IoInVuZXhwZWN0ZWQgSVIgVFggaW5pdCByZXNwb25zZTogJTAyeFxuIiwgYnVmWzBdKTsKIAkJcmV0dXJuIDA7CiAJfQogCXppbG9nX25vdGlmeSgiWmlsb2cvSGF1cHBhdWdlIElSIGJsYXN0ZXIgZmlybXdhcmUgdmVyc2lvbiAiCkBAIC04MjcsNyArODM5LDE1IEBACiAJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKIAl9Ci0JcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIDEpOworCisJLyogR2l2ZSB0aGUgejggYSBtb21lbnQgdG8gcHJvY2VzcyBkYXRhIGJsb2NrICovCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIDEpOworCQlpZiAocmV0ID09IDEpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwMCk7CisJfQorCiAJaWYgKHJldCAhPSAxKSB7CiAJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYwppbmRleCA3MDE1NjFkLi4yMzZkZDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCkBAIC00ODQsOCArNDg0LDYgQEAKIAluZXRfZGV2LT5tbF9wcml2ID0gKHZvaWQgKilwQWQ7CiAJcEFkLT5uZXRfZGV2ID0gbmV0X2RldjsKIAotCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7Ci0KIAlyZXR1cm4gbmV0X2RldjsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMKaW5kZXggZWU2OGQ1MS4uMzIyYmY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAl7VVNCX0RFVklDRSgweDA0MTEsIDB4MDE2Zil9LAkvKiBNZWxDby4sSW5jLiBXTEktVUMtRzMwMU4gKi8KIAl7VVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MCl9LAkvKiBMaW5rc3lzIFdVU0IxMDAgKi8KIAl7VVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MSl9LAkvKiBMaW5rc3lzIFdVU0I2MDBOICovCisJe1VTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzgpfSwJLyogTGlua3N5cyBXVVNCMTAwdjIgKi8KIAl7VVNCX0RFVklDRSgweDA0MTEsIDB4MDBlOCl9LAkvKiBCdWZmYWxvIFdMSS1VQy1HMzAwTiAqLwogCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg4MTVjKX0sCS8qIEJlbGtpbiBGNUQ4MDUzICovCiAJe1VTQl9ERVZJQ0UoMHgxMDBELCAweDkwMzEpfSwJLyogTW90b3JvbGEgMjc3MCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaGFsX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2hhbF9pbml0LmMKaW5kZXggMzIwODhhNi4uODRiZTM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaGFsX2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9oYWxfaW5pdC5jCkBAIC0xMjgsMTIgKzEyOCwxMyBAQAogCXU4ICpwdG1wY2hhciA9IE5VTEwsICpwcGF5bG9hZCwgKnB0cjsKIAlzdHJ1Y3QgdHhfZGVzYyAqcHR4X2Rlc2M7CiAJdTMyIHR4ZHNjcF9zeiA9IHNpemVvZihzdHJ1Y3QgdHhfZGVzYyk7CisJdTggcmV0ID0gX0ZBSUw7CiAKIAl1bGZpbGVsZW5ndGggPSBydGw4NzF4X29wZW5fZncocGFkYXB0ZXIsICZwaGZ3ZmlsZV9oZGwsICZwbWFwcGVkZncpOwogCWlmIChwbWFwcGVkZncgJiYgKHVsZmlsZWxlbmd0aCA+IDApKSB7CiAJCXVwZGF0ZV9md2hkcigmZndoZHIsIHBtYXBwZWRmdyk7CiAJCWlmIChjaGtfZndoZHIoJmZ3aGRyLCB1bGZpbGVsZW5ndGgpID09IF9GQUlMKQotCQkJZ290byBleGl0X2ZhaWw7CisJCQlnb3RvIGZpcm13YXJlX3JlbDsKIAkJZmlsbF9md3ByaXYocGFkYXB0ZXIsICZmd2hkci5md3ByaXYpOwogCQkvKiBmaXJtd2FyZSBjaGVjayBvayAqLwogCQltYXhsZW4gPSAoZndoZHIuaW1nX0lNRU1fc2l6ZSA+IGZ3aGRyLmltZ19TUkFNX3NpemUpID8KQEAgLTE0MSw3ICsxNDIsNyBAQAogCQltYXhsZW4gKz0gdHhkc2NwX3N6OwogCQlwdG1wY2hhciA9IF9tYWxsb2MobWF4bGVuICsgRldCVUZGX0FMSUdOX1NaKTsKIAkJaWYgKHB0bXBjaGFyID09IE5VTEwpCi0JCQlyZXR1cm4gX0ZBSUw7CisJCQlnb3RvIGZpcm13YXJlX3JlbDsKIAogCQlwdHhfZGVzYyA9IChzdHJ1Y3QgdHhfZGVzYyAqKShwdG1wY2hhciArIEZXQlVGRl9BTElHTl9TWiAtCiAJCQkgICAgKChhZGRyX3QpKHB0bXBjaGFyKSAmIChGV0JVRkZfQUxJR05fU1ogLSAxKSkpOwpAQCAtMjczLDExICsyNzQsMTMgQEAKIAkJCWdvdG8gZXhpdF9mYWlsOwogCX0gZWxzZQogCQlnb3RvIGV4aXRfZmFpbDsKLQlyZXR1cm4gX1NVQ0NFU1M7CisJcmV0ID0gX1NVQ0NFU1M7CiAKIGV4aXRfZmFpbDoKIAlrZnJlZShwdG1wY2hhcik7Ci0JcmV0dXJuIF9GQUlMOworZmlybXdhcmVfcmVsOgorCXJlbGVhc2VfZmlybXdhcmUoKHN0cnVjdCBmaXJtd2FyZSAqKXBoZndmaWxlX2hkbCk7CisJcmV0dXJuIHJldDsKIH0KIAogdWludCBydGw4NzEyX2hhbF9pbml0KHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaW50Zi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvdXNiX2ludGYuYwppbmRleCBhNjkyZWU4Li4yMWNlMmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaW50Zi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9pbnRmLmMKQEAgLTQ3LDU0ICs0NywxMjMgQEAKIHN0YXRpYyB2b2lkIHI4NzF4dV9kZXZfcmVtb3ZlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICpwdXNiX2ludGYpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnRsODcxeF91c2JfaWRfdGJsW10gPSB7Ci0JLyo5MlNVCi0JICogUmVhbHRlayAqLwotCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTcxKX0sCi0Je1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzIpfSwKKworLyogUlRMODE4OFNVICovCisJLyogUmVhbHRlayAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg4MTcxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzMpfSwKLQl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE3NCl9LAogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4NzEyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDg3MTMpfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4QzUxMil9LAotCS8qIEFib2NvbSAgKi8KKwkvKiBBYm9jb20gKi8KIAl7VVNCX0RFVklDRSgweDA3QjgsIDB4ODE4OCl9LAotCS8qIENvcmVnYSAqLwotCXtVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQ3KX0sCi0JLyogRGxpbmsgKi8KLQl7VVNCX0RFVklDRSgweDA3ZDEsIDB4MzMwMyl9LAotCXtVU0JfREVWSUNFKDB4MDdkMSwgMHgzMzAyKX0sCi0Je1VTQl9ERVZJQ0UoMHgwN2QxLCAweDMzMDApfSwKLQkvKiBEbGluayBmb3IgU2t5d29ydGggKi8KLQl7VVNCX0RFVklDRSgweDE0YjIsIDB4MzMwMCl9LAotCXtVU0JfREVWSUNFKDB4MTRiMiwgMHgzMzAxKX0sCi0Je1VTQl9ERVZJQ0UoMHgxNGIyLCAweDMzMDIpfSwKLQkvKiBFbkdlbml1cyAqLwotCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NjAzKX0sCi0Je1VTQl9ERVZJQ0UoMHgxNzQwLCAweDk2MDUpfSwKKwkvKiBBU1VTICovCisJe1VTQl9ERVZJQ0UoMHgwQjA1LCAweDE3ODYpfSwKKwl7VVNCX0RFVklDRSgweDBCMDUsIDB4MTc5MSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJLyogQmVsa2luICovCi0Je1VTQl9ERVZJQ0UoMHgwNTBkLCAweDgxNUYpfSwKLQl7VVNCX0RFVklDRSgweDA1MGQsIDB4OTQ1QSl9LAotCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg4NDVBKX0sCi0JLyogR3VpbGxlbW90ICovCi0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMzEpfSwKKwl7VVNCX0RFVklDRSgweDA1MEQsIDB4OTQ1QSl9LAorCS8qIENvcmVnYSAqLworCXtVU0JfREVWSUNFKDB4MDdBQSwgMHgwMDQ3KX0sCisJLyogRC1MaW5rICovCisJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDMzMDYpfSwKKwl7VVNCX0RFVklDRSgweDA3RDEsIDB4MzMwNil9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJLyogRWRpbWF4ICovCiAJe1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTEpfSwKLQl7VVNCX0RFVklDRSgweDczOTIsIDB4NzYxMil9LAotCXtVU0JfREVWSUNFKDB4NzM5MiwgMHg3NjIyKX0sCisJLyogRW5HZW5pdXMgKi8KKwl7VVNCX0RFVklDRSgweDE3NDAsIDB4OTYwMyl9LAorCS8qIEhhd2tpbmcgKi8KKwl7VVNCX0RFVklDRSgweDBFNjYsIDB4MDAxNil9LAorCS8qIEhlcmN1bGVzICovCisJe1VTQl9ERVZJQ0UoMHgwNkY4LCAweEUwMzQpfSwKKwl7VVNCX0RFVklDRSgweDA2RjgsIDB4RTAzMil9LAorCS8qIExvZ2l0ZWMgKi8KKwl7VVNCX0RFVklDRSgweDA3ODksIDB4MDE2Nyl9LAorCS8qIFBDSSAqLworCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhBQjI4KX0sCisJe1VTQl9ERVZJQ0UoMHgyMDE5LCAweEVEMTYpfSwKIAkvKiBTaXRlY29tICovCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNTcpfSwKIAl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0NSl9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDU5KX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0Qil9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDYzKX0sCisJLyogU3dlZXggKi8KKwl7VVNCX0RFVklDRSgweDE3N0YsIDB4MDE1NCl9LAorCS8qIFRoaW5rd2FyZSAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg1MDc3KX0sCisJLyogVG9zaGliYSAqLworCXtVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzUyKX0sCisJLyogLSAqLworCXtVU0JfREVWSUNFKDB4MjBGNCwgMHg2NDZCKX0sCisJe1VTQl9ERVZJQ0UoMHgwODNBLCAweEM1MTIpfSwKKworLyogUlRMODE5MVNVICovCisJLyogUmVhbHRlayAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg4MTcyKX0sCisJLyogQW1pZ28gKi8KKwl7VVNCX0RFVklDRSgweDBFQjAsIDB4OTA2MSl9LAorCS8qIEFTVVMvRUtCICovCisJe1VTQl9ERVZJQ0UoMHgwQkRBLCAweDgxNzIpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMyMyl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzExKX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzM0Mil9LAorCS8qIEFTVVMvRUtCTGVub3ZvICovCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMzMpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzNCl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzM1KX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzNil9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCisJLyogQVNVUy9NZWRpYSBCT1ggKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMwOSl9LAorCS8qIEJlbGtpbiAqLworCXtVU0JfREVWSUNFKDB4MDUwRCwgMHg4MTVGKX0sCisJLyogRC1MaW5rICovCisJe1VTQl9ERVZJQ0UoMHgwN0QxLCAweDMzMDIpfSwKKwl7VVNCX0RFVklDRSgweDA3RDEsIDB4MzMwMCl9LAorCXtVU0JfREVWSUNFKDB4MDdEMSwgMHgzMzAzKX0sCisJLyogRWRpbWF4ICovCisJe1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTIpfSwKKwkvKiBFbkdlbml1cyAqLworCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NjA1KX0sCisJLyogR3VpbGxlbW90ICovCisJe1VTQl9ERVZJQ0UoMHgwNkY4LCAweEUwMzEpfSwKIAkvKiBIYXdraW5nICovCiAJe1VTQl9ERVZJQ0UoMHgwRTY2LCAweDAwMTUpfSwKLQl7VVNCX0RFVklDRSgweDBFNjYsIDB4MDAxNil9LAotCXtVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzg2KX0sCi0Je1VTQl9ERVZJQ0UoMHgwYjA1LCAweDE3OTEpfSwgICAgLyogMTFuIG1vZGUgZGlzYWJsZSAqLwotCisJLyogTWVkaWFvICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMDYpfSwKLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMwOSl9LAorCS8qIFBDSSAqLworCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhFRDE4KX0sCisJe1VTQl9ERVZJQ0UoMHgyMDE5LCAweDQ5MDEpfSwKKwkvKiBTaXRlY29tICovCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNTgpfSwKKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0OSl9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDRDKX0sCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNjQpfSwKKwkvKiBTa3l3b3J0aCAqLworCXtVU0JfREVWSUNFKDB4MTRiMiwgMHgzMzAwKX0sCisJe1VTQl9ERVZJQ0UoMHgxNGIyLCAweDMzMDEpfSwKKwl7VVNCX0RFVklDRSgweDE0QjIsIDB4MzMwMil9LAorCS8qIC0gKi8KKwl7VVNCX0RFVklDRSgweDA0RjIsIDB4QUZGMil9LAorCXtVU0JfREVWSUNFKDB4MDRGMiwgMHhBRkY1KX0sCisJe1VTQl9ERVZJQ0UoMHgwNEYyLCAweEFGRjYpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzOSl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzQwKX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzM0MSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMTApfSwKLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMxMSl9LCAgICAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMjUpfSwKLQl7VVNCX0RFVklDRSgweDA4M0EsIDB4QzUxMil9LAorCisvKiBSVEw4MTkyU1UgKi8KKwkvKiBSZWFsdGVrICovCisJe1VTQl9ERVZJQ0UoMHgwQkRBLCAweDgxNzQpfSwKKwl7VVNCX0RFVklDRSgweDBCREEsIDB4ODE3NCl9LAorCS8qIEJlbGtpbiAqLworCXtVU0JfREVWSUNFKDB4MDUwRCwgMHg4NDVBKX0sCisJLyogQ29yZWdhICovCisJe1VTQl9ERVZJQ0UoMHgwN0FBLCAweDAwNTEpfSwKKwkvKiBFZGltYXggKi8KKwl7VVNCX0RFVklDRSgweDczOTIsIDB4NzYyMil9LAorCS8qIE5FQyAqLworCXtVU0JfREVWSUNFKDB4MDQwOSwgMHgwMkI2KX0sCiAJe30KIH07CiAKQEAgLTEwMyw4ICsxNzIsMjAgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3BlY2lmaWNfZGV2aWNlX2lkIHNwZWNpZmljX2RldmljZV9pZF90YmxbXSA9IHsKIAl7LmlkVmVuZG9yID0gMHgwYjA1LCAuaWRQcm9kdWN0ID0gMHgxNzkxLAogCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MGRmNiwgLmlkUHJvZHVjdCA9IDB4MDA1OSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDEzZDMsIC5pZFByb2R1Y3QgPSAweDMzMDYsCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKIAl7LmlkVmVuZG9yID0gMHgxM0QzLCAuaWRQcm9kdWN0ID0gMHgzMzExLAogCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MTNkMywgLmlkUHJvZHVjdCA9IDB4MzMzNSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDEzZDMsIC5pZFByb2R1Y3QgPSAweDMzMzYsCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKKwl7LmlkVmVuZG9yID0gMHgxM2QzLCAuaWRQcm9kdWN0ID0gMHgzMzQwLAorCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MTNkMywgLmlkUHJvZHVjdCA9IDB4MzM0MSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9rb2JqZWN0cy5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva29iamVjdHMuYwppbmRleCA0MDhiYjliLi4wN2E3ZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9rb2JqZWN0cy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tvYmplY3RzLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsZW4gPSBzdHJsZW4oYnVmKTsKLQlpZiAobGVuID4gMCB8fCBsZW4gPCAzKSB7CisJaWYgKGxlbiA+IDAgJiYgbGVuIDwgMykgewogCQljaCA9IGJ1ZlswXTsKIAkJaWYgKGNoID09ICdcbicpCiAJCQljaCA9ICcwJzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGVfcm1pNC9zeW5hcHRpY3NfaTJjX3JtaTQuYyBiL2RyaXZlcnMvc3RhZ2luZy9zdGVfcm1pNC9zeW5hcHRpY3NfaTJjX3JtaTQuYwppbmRleCBlOGYwNDdlLi44MDE4M2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RlX3JtaTQvc3luYXB0aWNzX2kyY19ybWk0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jCkBAIC05ODYsMTIgKzk4Niw2IEBACiAJaW5wdXRfc2V0X2Fic19wYXJhbXMocm1pNF9kYXRhLT5pbnB1dF9kZXYsIEFCU19NVF9UT1VDSF9NQUpPUiwgMCwKIAkJCQkJCU1BWF9UT1VDSF9NQUpPUiwgMCwgMCk7CiAKLQlyZXR2YWwgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uocm1pNF9kYXRhLT5pbnB1dF9kZXYpOwotCWlmIChyZXR2YWwpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczppbnB1dCByZWdpc3RlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJfaW5wdXRfcmVnaXN0ZXI7Ci0JfQotCiAJLyogQ2xlYXIgaW50ZXJydXB0cyAqLwogCXN5bmFwdGljc19ybWk0X2kyY19ibG9ja19yZWFkKHJtaTRfZGF0YSwKIAkJCXJtaTRfZGF0YS0+Zm4wMV9kYXRhX2Jhc2VfYWRkciArIDEsIGludHJfc3RhdHVzLApAQCAtMTAwMywxNSArOTk3LDIwIEBACiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOlVuYWJsZSB0byBnZXQgYXR0biBpcnEgJWRcbiIsCiAJCQkJX19mdW5jX18sIHBsYXRmb3JtZGF0YS0+aXJxX251bWJlcik7Ci0JCWdvdG8gZXJyX3JlcXVlc3RfaXJxOworCQlnb3RvIGVycl91bnNldF9jbGllbnRkYXRhOworCX0KKworCXJldHZhbCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShybWk0X2RhdGEtPmlucHV0X2Rldik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOmlucHV0IHJlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9mcmVlX2lycTsKIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwogCi1lcnJfcmVxdWVzdF9pcnE6CitlcnJfZnJlZV9pcnE6CiAJZnJlZV9pcnEocGxhdGZvcm1kYXRhLT5pcnFfbnVtYmVyLCBybWk0X2RhdGEpOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHJtaTRfZGF0YS0+aW5wdXRfZGV2KTsKLWVycl9pbnB1dF9yZWdpc3RlcjoKK2Vycl91bnNldF9jbGllbnRkYXRhOgogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwogZXJyX3F1ZXJ5X2RldjoKIAlpZiAocGxhdGZvcm1kYXRhLT5yZWd1bGF0b3JfZW4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9pb19zbS5jCmluZGV4IDU3MTg2NDUuLjI3ZTBhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYwpAQCAtOTQ5LDcgKzk0OSw3IEBACiAgKiAgICAgIENhbGxzIHRoZSBCcmlkZ2UncyBDSE5MX0lTUiB0byBkZXRlcm1pbmUgaWYgdGhpcyBpbnRlcnJ1cHQgaXMgb3VycywgdGhlbgogICogICAgICBzY2hlZHVsZXMgYSBEUEMgdG8gZGlzcGF0Y2ggSS9PLgogICovCi12b2lkIGlvX21ib3hfbXNnKHUzMiBtc2cpCitpbnQgaW9fbWJveF9tc2coc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGxlbiwgdm9pZCAqbXNnKQogewogCXN0cnVjdCBpb19tZ3IgKnBpb19tZ3I7CiAJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmo7CkBAIC05NTksOSArOTU5LDkgQEAKIAlkZXZfZ2V0X2lvX21ncihkZXZfb2JqLCAmcGlvX21ncik7CiAKIAlpZiAoIXBpb19tZ3IpCi0JCXJldHVybjsKKwkJcmV0dXJuIE5PVElGWV9CQUQ7CiAKLQlwaW9fbWdyLT5pbnRyX3ZhbCA9ICh1MTYpbXNnOworCXBpb19tZ3ItPmludHJfdmFsID0gKHUxNikoKHUzMiltc2cpOwogCWlmIChwaW9fbWdyLT5pbnRyX3ZhbCAmIE1CWF9QTV9DTEFTUykKIAkJaW9fZGlzcGF0Y2hfcG0ocGlvX21ncik7CiAKQEAgLTk3Myw3ICs5NzMsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW9fbWdyLT5kcGNfbG9jaywgZmxhZ3MpOwogCQl0YXNrbGV0X3NjaGVkdWxlKCZwaW9fbWdyLT5kcGNfdGFza2xldCk7CiAJfQotCXJldHVybjsKKwlyZXR1cm4gTk9USUZZX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jCmluZGV4IGEzYjBhMTguLmEzZjY5ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcDM0MzAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwLmMKQEAgLTIyMyw2ICsyMjMsMTAgQEAKIAlicmlkZ2VfbXNnX3NldF9xdWV1ZV9pZCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZHNwX21ib3hfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBpb19tYm94X21zZywKK307CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9hbGwoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQpCiB7CiAJaWYgKGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX0RTUF9ISUJFUk5BVElPTiB8fApAQCAtNTUzLDcgKzU1Nyw3IEBACiAJCSAqIEVuYWJsZSBNYWlsYm94IGV2ZW50cyBhbmQgYWxzbyBkcmFpbiBhbnkgcGVuZGluZwogCQkgKiBzdGFsZSBtZXNzYWdlcy4KIAkJICovCi0JCWRldl9jb250ZXh0LT5tYm94ID0gb21hcF9tYm94X2dldCgiZHNwIik7CisJCWRldl9jb250ZXh0LT5tYm94ID0gb21hcF9tYm94X2dldCgiZHNwIiwgJmRzcF9tYm94X25vdGlmaWVyKTsKIAkJaWYgKElTX0VSUihkZXZfY29udGV4dC0+bWJveCkpIHsKIAkJCWRldl9jb250ZXh0LT5tYm94ID0gTlVMTDsKIAkJCXByX2VycigiJXM6IEZhaWxlZCB0byBnZXQgZHNwIG1haWxib3ggaGFuZGxlXG4iLApAQCAtNTYzLDggKzU2Nyw2IEBACiAKIAl9CiAJaWYgKCFzdGF0dXMpIHsKLQkJZGV2X2NvbnRleHQtPm1ib3gtPnJ4cS0+Y2FsbGJhY2sgPSAoaW50ICgqKSh2b2lkICopKWlvX21ib3hfbXNnOwotCiAvKlBNX0lWQTJHUlBTRUxfUEVSID0gMHhDMDsqLwogCQl0ZW1wID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOwogCQl0ZW1wID0gKHRlbXAgJiAweEZGRkZGRjMwKSB8IDB4QzA7CkBAIC02ODUsNyArNjg3LDcgQEAKIAkvKiBEaXNhYmxlIHRoZSBtYWlsYm94IGludGVycnVwdHMgKi8KIAlpZiAoZGV2X2NvbnRleHQtPm1ib3gpIHsKIAkJb21hcF9tYm94X2Rpc2FibGVfaXJxKGRldl9jb250ZXh0LT5tYm94LCBJUlFfUlgpOwotCQlvbWFwX21ib3hfcHV0KGRldl9jb250ZXh0LT5tYm94KTsKKwkJb21hcF9tYm94X3B1dChkZXZfY29udGV4dC0+bWJveCwgJmRzcF9tYm94X25vdGlmaWVyKTsKIAkJZGV2X2NvbnRleHQtPm1ib3ggPSBOVUxMOwogCX0KIAkvKiBSZXNldCBJVkEyIGNsb2NrcyovCkBAIC03ODYsMTAgKzc4OCw3IEBACiAKIAlwdF9hdHRycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZ190YWJsZV9hdHRycyksIEdGUF9LRVJORUwpOwogCWlmIChwdF9hdHRycyAhPSBOVUxMKSB7Ci0JCS8qIEFzc3VtaW5nIHRoYXQgd2UgdXNlIG9ubHkgRFNQJ3MgbWVtb3J5IG1hcAotCQkgKiB1bnRpbCAweDQwMDA6MDAwMCAsIHdlIHdvdWxkIG5lZWQgb25seSAxMDI0Ci0JCSAqIEwxIGVudGllcyBpLmUgTDEgc2l6ZSA9IDRLICovCi0JCXB0X2F0dHJzLT5sMV9zaXplID0gMHgxMDAwOworCQlwdF9hdHRycy0+bDFfc2l6ZSA9IFNaXzE2SzsgLyogNDA5NiBlbnRyaWVzIG9mIDMyIGJpdHMgKi8KIAkJYWxpZ25fc2l6ZSA9IHB0X2F0dHJzLT5sMV9zaXplOwogCQkvKiBBbGlnbiBzaXplcyBhcmUgZXhwZWN0ZWQgdG8gYmUgcG93ZXIgb2YgMiAqLwogCQkvKiB3ZSBsaWtlIHRvIGdldCBhbGlnbmVkIG9uIEwxIHRhYmxlIHNpemUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9pb19zbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmgKaW5kZXggMThhZWM1NS4uODI0MmM3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmgKQEAgLTcyLDIyICs3MiwxNyBAQAogLyoKICAqICA9PT09PT09PSBpb19tYm94X21zZyA9PT09PT09PQogICogIFB1cnBvc2U6Ci0gKiAgICAgIE1haW4gaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBzaGFyZWQgbWVtb3J5IEJyaWRnZSBjaGFubmVsIG1hbmFnZXIuCi0gKiAgICAgIENhbGxzIHRoZSBCcmlkZ2UncyBjaG5sc21faXNyIHRvIGRldGVybWluZSBpZiB0aGlzIGludGVycnVwdCBpcyBvdXJzLAotICogICAgICB0aGVuIHNjaGVkdWxlcyBhIERQQyB0byBkaXNwYXRjaCBJL08uCisgKglNYWluIG1lc3NhZ2UgaGFuZGxlciBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgQnJpZGdlIGNoYW5uZWwgbWFuYWdlci4KKyAqCURldGVybWluZSBpZiB0aGlzIG1lc3NhZ2UgaXMgb3VycywgdGhlbiBzY2hlZHVsZXMgYSBEUEMgdG8KKyAqCWRpc3BhdGNoIEkvTy4KICAqICBQYXJhbWV0ZXJzOgotICogICAgICByZWZfZGF0YTogICBQb2ludGVyIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIgb2JqZWN0IGZvciB0aGlzIGJvYXJkLgotICogICAgICAgICAgICAgICAgICBTZXQgaW4gYW4gaW5pdGlhbCBjYWxsIHRvIElTUl9JbnN0YWxsKCkuCisgKglzZWxmOglQb2ludGVyIHRvIGl0cyBvd24gbm90aWZpZXJfYmxvY2sgc3RydWN0LgorICoJbGVuOglMZW5ndGggb2YgbWVzc2FnZS4KKyAqCW1zZzoJTWVzc2FnZSBjb2RlIHJlY2VpdmVkLgogICogIFJldHVybnM6Ci0gKiAgICAgIFRSVUUgaWYgaW50ZXJydXB0IGhhbmRsZWQ7IEZBTFNFIG90aGVyd2lzZS4KLSAqICBSZXF1aXJlczoKLSAqICAgICAgTXVzdCBiZSBpbiBsb2NrZWQgbWVtb3J5IGlmIGV4ZWN1dGluZyBpbiBrZXJuZWwgbW9kZS4KLSAqICAgICAgTXVzdCBvbmx5IGNhbGwgZnVuY3Rpb25zIHdoaWNoIGFyZSBpbiBsb2NrZWQgbWVtb3J5IGlmIEtlcm5lbCBtb2RlLgotICogICAgICBNdXN0IG9ubHkgY2FsbCBhc3luY2hyb25vdXMgc2VydmljZXMuCi0gKiAgICAgIEludGVycnVwdHMgYXJlIGRpc2FibGVkIGFuZCBFT0kgZm9yIHRoaXMgaW50ZXJydXB0IGhhcyBiZWVuIHNlbnQuCi0gKiAgRW5zdXJlczoKKyAqCU5PVElGWV9PSyBpZiBoYW5kbGVkOyBOT1RJRllfQkFEIG90aGVyd2lzZS4KICAqLwotdm9pZCBpb19tYm94X21zZyh1MzIgbXNnKTsKK2ludCBpb19tYm94X21zZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgbGVuLCB2b2lkICptc2cpOwogCiAvKgogICogID09PT09PT09IGlvX3JlcXVlc3RfY2hubCA9PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmgKaW5kZXggMzBkYmZiNi4uZDczMjY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCkBAIC0zMiw2ICszMiw3IEBACiAKIHN0cnVjdCBzdHViX2RldmljZSB7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKIAlzdHJ1Y3QgdXNiaXBfZGV2aWNlIHVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYwppbmRleCBiMTg2YjVmLi5hN2NlNTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYwpAQCAtMjU4LDEwICsyNTgsMTEgQEAKIHN0YXRpYyB2b2lkIHN0dWJfZGV2aWNlX3Jlc2V0KHN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkKQogewogCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IGNvbnRhaW5lcl9vZih1ZCwgc3RydWN0IHN0dWJfZGV2aWNlLCB1ZCk7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHNkZXYtPmludGVyZmFjZSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZGV2LT51ZGV2OwogCWludCByZXQ7CiAKIAl1c2JpcF91ZGJnKCJkZXZpY2UgcmVzZXQiKTsKKwogCXJldCA9IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQodWRldiwgc2Rldi0+aW50ZXJmYWNlKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJsb2NrIGZvciByZXNldFxuIik7CkBAIC0zMDksNyArMzEwLDggQEAKICAqCiAgKiBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgbmV3IHN0dWJfZGV2aWNlIHN0cnVjdC4KICAqLwotc3RhdGljIHN0cnVjdCBzdHViX2RldmljZSAqc3R1Yl9kZXZpY2VfYWxsb2Moc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3N0YXRpYyBzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnN0dWJfZGV2aWNlX2FsbG9jKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCQkgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCiB7CiAJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2OwogCWludCBidXNudW0gPSBpbnRlcmZhY2VfdG9fYnVzbnVtKGludGVyZmFjZSk7CkBAIC0zMjQsNyArMzI2LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc2Rldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCXNkZXYtPmludGVyZmFjZSA9IHVzYl9nZXRfaW50ZihpbnRlcmZhY2UpOworCXNkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKIAogCS8qCiAJICogZGV2aWQgaXMgZGVmaW5lZCB3aXRoIGRldm51bSB3aGVuIHRoaXMgZHJpdmVyIGlzIGZpcnN0IGFsbG9jYXRlZC4KQEAgLTQ1MCwxMSArNDUzLDEyIEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKKwkJdXNiX2dldF9pbnRmKGludGVyZmFjZSk7CiAJCXJldHVybiAwOwogCX0KIAogCS8qIG9rLiB0aGlzIGlzIG15IGRldmljZS4gKi8KLQlzZGV2ID0gc3R1Yl9kZXZpY2VfYWxsb2MoaW50ZXJmYWNlKTsKKwlzZGV2ID0gc3R1Yl9kZXZpY2VfYWxsb2ModWRldiwgaW50ZXJmYWNlKTsKIAlpZiAoIXNkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC00NzYsNiArNDgwLDggQEAKIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJjcmVhdGUgc3lzZnMgZmlsZXMgZm9yICVzXG4iLAogCQkJdWRldl9idXNpZCk7CiAJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwkJdXNiX3B1dF9pbnRmKGludGVyZmFjZSk7CisKIAkJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50ID0gMDsKIAogCQlidXNpZF9wcml2LT5zZGV2ID0gTlVMTDsKQEAgLTU0NSw2ICs1NTEsNyBAQAogCWlmIChidXNpZF9wcml2LT5pbnRlcmZfY291bnQgPiAxKSB7CiAJCWJ1c2lkX3ByaXYtPmludGVyZl9jb3VudC0tOwogCQlzaHV0ZG93bl9idXNpZChidXNpZF9wcml2KTsKKwkJdXNiX3B1dF9pbnRmKGludGVyZmFjZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTU1NCw2ICs1NjEsOSBAQAogCS8qIDEuIHNodXRkb3duIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gKi8KIAlzaHV0ZG93bl9idXNpZChidXNpZF9wcml2KTsKIAorCXVzYl9wdXRfZGV2KHNkZXYtPnVkZXYpOworCXVzYl9wdXRfaW50ZihpbnRlcmZhY2UpOworCiAJLyogMy4gZnJlZSBzZGV2ICovCiAJYnVzaWRfcHJpdi0+c2RldiA9IE5VTEw7CiAJc3R1Yl9kZXZpY2VfZnJlZShzZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCmluZGV4IDNkZTZmZDIuLmFlNmFjODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAKIHN0YXRpYyBpbnQgZ2V0X3BpcGUoc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2LCBpbnQgZXBudW0sIGludCBkaXIpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHNkZXYtPmludGVyZmFjZSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZGV2LT51ZGV2OwogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQgPSBOVUxMOwogCkBAIC00ODQsNyArNDg0LDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzdHViX3ByaXYgKnByaXY7CiAJc3RydWN0IHVzYmlwX2RldmljZSAqdWQgPSAmc2Rldi0+dWQ7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHNkZXYtPmludGVyZmFjZSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZGV2LT51ZGV2OwogCWludCBwaXBlID0gZ2V0X3BpcGUoc2RldiwgcGR1LT5iYXNlLmVwLCBwZHUtPmJhc2UuZGlyZWN0aW9uKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaAppbmRleCA0MWExZmU1Li5hZmMzYjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmgKQEAgLTEwMCw5ICsxMDAsNiBAQAogCSAqIEJ1dCwgdGhlIGluZGV4IG9mIHRoaXMgYXJyYXkgYmVnaW5zIGZyb20gMC4KIAkgKi8KIAlzdHJ1Y3QgdmhjaV9kZXZpY2UgdmRldltWSENJX05QT1JUU107Ci0KLQkvKiB2aGNpX2RldmljZSB3aGljaCBoYXMgbm90IGJlZW4gYXNzaWdlZCBpdHMgYWRkcmVzcyB5ZXQgKi8KLQlpbnQgcGVuZGluZ19wb3J0OwogfTsKIAogCkBAIC0xMTksNiArMTE2LDkgQEAKIHZvaWQgdmhjaV9yeF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCk7CiB2b2lkIHZoY2lfdHhfbG9vcChzdHJ1Y3QgdXNiaXBfdGFzayAqdXQpOwogCitzdHJ1Y3QgdXJiICpwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAorCQkJCQkgICAgX191MzIgc2VxbnVtKTsKKwogI2RlZmluZSBoYXJkd2FyZQkJKCZ0aGVfY29udHJvbGxlci0+cGRldi5kZXYpCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZoY2lfZGV2aWNlICpwb3J0X3RvX3ZkZXYoX191MzIgcG9ydCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKaW5kZXggMDhiZDI2YS4uYTM1ZmU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKQEAgLTEzOCw4ICsxMzgsNiBAQAogCSAqIHRoZV9jb250cm9sbGVyLT52ZGV2W3JocG9ydF0udWQuc3RhdHVzID0gVkRFVl9DT05ORUNUOwogCSAqIHNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+dmRldltyaHBvcnRdLnVkLmxvY2spOyAqLwogCi0JdGhlX2NvbnRyb2xsZXItPnBlbmRpbmdfcG9ydCA9IHJocG9ydDsKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CiAKIAl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSk7CkBAIC01NTksNiArNTU3LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdXJiLT5kZXYtPmRldjsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldjsKIAogCXVzYmlwX2RiZ192aGNpX2hjKCJlbnRlciwgdXNiX2hjZCAlcCB1cmIgJXAgbWVtX2ZsYWdzICVkXG4iLAogCQkgICAgaGNkLCB1cmIsIG1lbV9mbGFncyk7CkBAIC01NzQsNiArNTczLDE4IEBACiAJCXJldHVybiB1cmItPnN0YXR1czsKIAl9CiAKKwl2ZGV2ID0gcG9ydF90b192ZGV2KHVyYi0+ZGV2LT5wb3J0bnVtLTEpOworCisJLyogcmVmdXNlIGVucXVldWUgZm9yIGRlYWQgY29ubmVjdGlvbiAqLworCXNwaW5fbG9jaygmdmRldi0+dWQubG9jayk7CisJaWYgKHZkZXYtPnVkLnN0YXR1cyA9PSBWREVWX1NUX05VTEwgfHwgdmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfRVJST1IpIHsKKwkJdXNiaXBfdWVycigiZW5xdWV1ZSBmb3IgaW5hY3RpdmUgcG9ydCAlZFxuIiwgdmRldi0+cmhwb3J0KTsKKwkJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aGVfY29udHJvbGxlci0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJc3Bpbl91bmxvY2soJnZkZXYtPnVkLmxvY2spOworCiAJcmV0ID0gdXNiX2hjZF9saW5rX3VyYl90b19lcChoY2QsIHVyYik7CiAJaWYgKHJldCkKIAkJZ290byBub19uZWVkX3VubGluazsKQEAgLTU5Miw4ICs2MDMsNiBAQAogCQlfX3U4IHR5cGUgPSB1c2JfcGlwZXR5cGUodXJiLT5waXBlKTsKIAkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybHJlcSA9CiAJCQkJKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7Ci0JCXN0cnVjdCB2aGNpX2RldmljZSAqdmRldiA9Ci0JCQkJcG9ydF90b192ZGV2KHRoZV9jb250cm9sbGVyLT5wZW5kaW5nX3BvcnQpOwogCiAJCWlmICh0eXBlICE9IFBJUEVfQ09OVFJPTCB8fCAhY3RybHJlcSkgewogCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIHJlcXVlc3QgdG8gZGV2bnVtIDBcbiIpOwpAQCAtNjA3LDcgKzYxNiw5IEBACiAJCQlkZXZfaW5mbyhkZXYsICJTZXRBZGRyZXNzIFJlcXVlc3QgKCVkKSB0byBwb3J0ICVkXG4iLAogCQkJCSBjdHJscmVxLT53VmFsdWUsIHZkZXYtPnJocG9ydCk7CiAKLQkJCXZkZXYtPnVkZXYgPSB1cmItPmRldjsKKwkJCWlmICh2ZGV2LT51ZGV2KQorCQkJCXVzYl9wdXRfZGV2KHZkZXYtPnVkZXYpOworCQkJdmRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVyYi0+ZGV2KTsKIAogCQkJc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKIAkJCXZkZXYtPnVkLnN0YXR1cyA9IFZERVZfU1RfVVNFRDsKQEAgLTYyNyw4ICs2MzgsOSBAQAogCQkJCQkJIkdldF9EZXNjcmlwdG9yIHRvIGRldmljZSAwICIKIAkJCQkJCSIoZ2V0IG1heCBwaXBlIHNpemUpXG4iKTsKIAotCQkJLyogRklYTUU6IHJlZmVyZW5jZSBjb3VudD8gKHVzYl9nZXRfZGV2KCkpICovCi0JCQl2ZGV2LT51ZGV2ID0gdXJiLT5kZXY7CisJCQlpZiAodmRldi0+dWRldikKKwkJCQl1c2JfcHV0X2Rldih2ZGV2LT51ZGV2KTsKKwkJCXZkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1cmItPmRldik7CiAJCQlnb3RvIG91dDsKIAogCQlkZWZhdWx0OgpAQCAtODA1LDcgKzgxNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHZvaWQgdmhjaV9kZXZpY2VfdW5saW5rX2NsZWFudXAoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2KQogewogCXN0cnVjdCB2aGNpX3VubGluayAqdW5saW5rLCAqdG1wOwpAQCAtODEzLDExICs4MjQsMzQgQEAKIAlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZ2ZGV2LT51bmxpbmtfdHgsIGxpc3QpIHsKKwkJdXNiaXBfdWluZm8oInVubGluayBjbGVhbnVwIHR4ICVsdVxuIiwgdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKIAkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CiAJCWtmcmVlKHVubGluayk7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVubGluaywgdG1wLCAmdmRldi0+dW5saW5rX3J4LCBsaXN0KSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKworCQkvKiBnaXZlIGJhY2sgVVJCIG9mIHVuYW5zd2VyZWQgdW5saW5rIHJlcXVlc3QgKi8KKwkJdXNiaXBfdWluZm8oInVubGluayBjbGVhbnVwIHJ4ICVsdVxuIiwgdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKworCQl1cmIgPSBwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYodmRldiwgdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKwkJaWYgKCF1cmIpIHsKKwkJCXVzYmlwX3VpbmZvKCJ0aGUgdXJiIChzZXFudW0gJWx1KSB3YXMgYWxyZWFkeSBnaXZlbiBiYWNrXG4iLAorCQkJCQkJCXVubGluay0+dW5saW5rX3NlcW51bSk7CisJCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKKwkJCWtmcmVlKHVubGluayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXVyYi0+c3RhdHVzID0gLUVOT0RFVjsKKworCQlzcGluX2xvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKKwkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIpOworCQlzcGluX3VubG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHZoY2lfdG9faGNkKHRoZV9jb250cm9sbGVyKSwgdXJiLCB1cmItPnN0YXR1cyk7CisKIAkJbGlzdF9kZWwoJnVubGluay0+bGlzdCk7CiAJCWtmcmVlKHVubGluayk7CiAJfQpAQCAtODg3LDYgKzkyMSwxMCBAQAogCXZkZXYtPnNwZWVkICA9IDA7CiAJdmRldi0+ZGV2aWQgID0gMDsKIAorCWlmICh2ZGV2LT51ZGV2KQorCQl1c2JfcHV0X2Rldih2ZGV2LT51ZGV2KTsKKwl2ZGV2LT51ZGV2ID0gTlVMTDsKKwogCXVkLT50Y3Bfc29ja2V0ID0gTlVMTDsKIAogCXVkLT5zdGF0dXMgPSBWREVWX1NUX05VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYwppbmRleCA4MTQ3ZDcyLi5iZjY5OTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKQEAgLTIzLDE2ICsyMywxNCBAQAogI2luY2x1ZGUgInZoY2kuaCIKIAogCi0vKiBnZXQgVVJCIGZyb20gdHJhbnNtaXR0ZWQgdXJiIHF1ZXVlICovCi1zdGF0aWMgc3RydWN0IHVyYiAqcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldiwKKy8qIGdldCBVUkIgZnJvbSB0cmFuc21pdHRlZCB1cmIgcXVldWUuIGNhbGxlciBtdXN0IGhvbGQgdmRldi0+cHJpdl9sb2NrICovCitzdHJ1Y3QgdXJiICpwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAogCQkJCQkgICAgX191MzIgc2VxbnVtKQogewogCXN0cnVjdCB2aGNpX3ByaXYgKnByaXYsICp0bXA7CiAJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXYsIHRtcCwgJnZkZXYtPnByaXZfcngsIGxpc3QpIHsKIAkJaWYgKHByaXYtPnNlcW51bSA9PSBzZXFudW0pIHsKIAkJCXVyYiA9IHByaXYtPnVyYjsKQEAgLTYzLDggKzYxLDYgQEAKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOwotCiAJcmV0dXJuIHVyYjsKIH0KIApAQCAtNzQsOSArNzAsMTEgQEAKIAlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZ2ZGV2LT51ZDsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAKKwlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7CiAKIAl1cmIgPSBwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYodmRldiwgcGR1LT5iYXNlLnNlcW51bSk7CiAKKwlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKIAogCWlmICghdXJiKSB7CiAJCXVzYmlwX3VlcnIoImNhbm5vdCBmaW5kIGEgdXJiIG9mIHNlcW51bSAldVxuIiwKQEAgLTE2MSw3ICsxNTksMTIgQEAKIAkJcmV0dXJuOwogCX0KIAorCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKwogCXVyYiA9IHBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdih2ZGV2LCB1bmxpbmstPnVubGlua19zZXFudW0pOworCisJc3Bpbl91bmxvY2soJnZkZXYtPnByaXZfbG9jayk7CisKIAlpZiAoIXVyYikgewogCQkvKgogCQkgKiBJIGdldCB0aGUgcmVzdWx0IG9mIGEgdW5saW5rIHJlcXVlc3QuIEJ1dCwgaXQgc2VlbXMgdGhhdCBJCkBAIC0xOTAsNiArMTkzLDE5IEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgaW50IHZoY2lfcHJpdl90eF9lbXB0eShzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCit7CisJaW50IGVtcHR5ID0gMDsKKworCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCWVtcHR5ID0gbGlzdF9lbXB0eSgmdmRldi0+cHJpdl9yeCk7CisKKwlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKworCXJldHVybiBlbXB0eTsKK30KKwogLyogcmVjdiBhIHBkdSAqLwogc3RhdGljIHZvaWQgdmhjaV9yeF9wZHUoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCiB7CkBAIC0yMDIsMTEgKzIxOCwyOSBAQAogCiAJbWVtc2V0KCZwZHUsIDAsIHNpemVvZihwZHUpKTsKIAotCiAJLyogMS4gcmVjZWl2ZSBhIHBkdSBoZWFkZXIgKi8KIAlyZXQgPSB1c2JpcF94bWl0KDAsIHVkLT50Y3Bfc29ja2V0LCAoY2hhciAqKSAmcGR1LCBzaXplb2YocGR1KSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUNPTk5SRVNFVCkKKwkJCXVzYmlwX3VpbmZvKCJjb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXJcbiIpOworCQllbHNlIGlmIChyZXQgPT0gLUVBR0FJTikgeworCQkJLyogaWdub3JlIGlmIGNvbm5lY3Rpb24gd2FzIGlkbGUgKi8KKwkJCWlmICh2aGNpX3ByaXZfdHhfZW1wdHkodmRldikpCisJCQkJcmV0dXJuOworCQkJdXNiaXBfdWluZm8oImNvbm5lY3Rpb24gdGltZWQgb3V0IHdpdGggcGVuZGluZyB1cmJzXG4iKTsKKwkJfSBlbHNlIGlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKQorCQkJdXNiaXBfdWluZm8oInhtaXQgZmFpbGVkICVkXG4iLCByZXQpOworCisJCXVzYmlwX2V2ZW50X2FkZCh1ZCwgVkRFVl9FVkVOVF9FUlJPUl9UQ1ApOworCQlyZXR1cm47CisJfQorCWlmIChyZXQgPT0gMCkgeworCQl1c2JpcF91aW5mbygiY29ubmVjdGlvbiBjbG9zZWQiKTsKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0RPV04pOworCQlyZXR1cm47CisJfQogCWlmIChyZXQgIT0gc2l6ZW9mKHBkdSkpIHsKLQkJdXNiaXBfdWVycigicmVjZWl2aW5nIHBkdSBmYWlsZWQhIHNpemUgaXMgJWQsIHNob3VsZCBiZSAlZFxuIiwKKwkJdXNiaXBfdWVycigicmVjZWl2ZWQgcGR1IHNpemUgaXMgJWQsIHNob3VsZCBiZSAlZFxuIiwKIAkJCQkJcmV0LCAodW5zaWduZWQgaW50KXNpemVvZihwZHUpKTsKIAkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy9Nb2R1bGUuc3ltdmVycyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy9Nb2R1bGUuc3ltdmVycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvTW9kdWxlLnN5bXZlcnMKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKaW5kZXggNzAxNmZkZC4uZTE5YjkzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCkBAIC0zOTU0LDggKzM5NTQsOCBAQAogdW5zaWduZWQgY2hhciBYR0lfSXNMQ0REdWFsTGluayhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKLQlpZiAoKCgocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvTENEKSB8IFNldENSVDJUb0xDREEpKQotCQkJJiYgKHBWQkluZm8tPkxDREluZm8gJiBTZXRMQ0REdWFsTGluaykpIC8qIHNoYW1wb28wMTI5ICovCisJaWYgKChwVkJJbmZvLT5WQkluZm8gJiAoU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvTENEQSkpICYmCisJCQkocFZCSW5mby0+TENESW5mbyAmIFNldExDRER1YWxMaW5rKSkgLyogc2hhbXBvbzAxMjkgKi8KIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKQEAgLTg3NzMsNyArODc3Myw3IEBACiAKIAlpZiAocFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMCkgewogCQlDUlQySW5kZXggPSBDUlQySW5kZXggPj4gNjsgLyogIGZvciBMQ0QgKi8KLQkJaWYgKCgocFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvTENEKSB8IFNldENSVDJUb0xDREEpKSB7IC8qMzAxYiovCisJCWlmIChwVkJJbmZvLT5WQkluZm8gJiAoU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvTENEQSkpIHsgLyozMDFiKi8KIAkJCWlmIChwVkJJbmZvLT5MQ0RSZXNJbmZvICE9IFBhbmVsMTAyNHg3NjgpCiAJCQkJVkNMS0luZGV4ID0gTENEWGxhdDJWQ0xLW0NSVDJJbmRleF07CiAJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuYwppbmRleCA1NDE1NzEyLi40YmQ4Y2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmMKQEAgLTIyNyw2ICsyMjcsNyBAQAogCiAJCWlmICh6cmFtX3Rlc3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9aRVJPKSkgewogCQkJaGFuZGxlX3plcm9fcGFnZShwYWdlKTsKKwkJCWluZGV4Kys7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0yMzUsMTIgKzIzNiwxNCBAQAogCQkJcHJfZGVidWcoIlJlYWQgYmVmb3JlIHdyaXRlOiBzZWN0b3I9JWx1LCBzaXplPSV1IiwKIAkJCQkodWxvbmcpKGJpby0+Ymlfc2VjdG9yKSwgYmlvLT5iaV9zaXplKTsKIAkJCS8qIERvIG5vdGhpbmcgKi8KKwkJCWluZGV4Kys7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIFBhZ2UgaXMgc3RvcmVkIHVuY29tcHJlc3NlZCBzaW5jZSBpdCdzIGluY29tcHJlc3NpYmxlICovCiAJCWlmICh1bmxpa2VseSh6cmFtX3Rlc3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9VTkNPTVBSRVNTRUQpKSkgewogCQkJaGFuZGxlX3VuY29tcHJlc3NlZF9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTsKKwkJCWluZGV4Kys7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0zMjAsNiArMzIzLDcgQEAKIAkJCW11dGV4X3VubG9jaygmenJhbS0+bG9jayk7CiAJCQl6cmFtX3N0YXRfaW5jKCZ6cmFtLT5zdGF0cy5wYWdlc196ZXJvKTsKIAkJCXpyYW1fc2V0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fWkVSTyk7CisJCQlpbmRleCsrOwogCQkJY29udGludWU7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3RhcmdldC9NYWtlZmlsZQppbmRleCA1Y2ZkNzA4Li45NzNiYjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3RhcmdldC9NYWtlZmlsZQpAQCAtMTMsOCArMTMsNyBAQAogCQkJCSAgIHRhcmdldF9jb3JlX3RyYW5zcG9ydC5vIFwKIAkJCQkgICB0YXJnZXRfY29yZV9jZGIubyBcCiAJCQkJICAgdGFyZ2V0X2NvcmVfdWEubyBcCi0JCQkJICAgdGFyZ2V0X2NvcmVfcmQubyBcCi0JCQkJICAgdGFyZ2V0X2NvcmVfbWliLm8KKwkJCQkgICB0YXJnZXRfY29yZV9yZC5vCiAKIG9iai0kKENPTkZJR19UQVJHRVRfQ09SRSkJKz0gdGFyZ2V0X2NvcmVfbW9kLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmMKaW5kZXggMjc2NDUxMC4uY2FmOGRjMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2NvbmZpZ2ZzLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYwpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAKICNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgogI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuaD4KQEAgLTE5NzEsMTMgKzE5NzAsMzUgQEAKIHsKIAlzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2RldiAqc2VfZGV2ID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKIAkJCQlzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2Rldiwgc2VfZGV2X2dyb3VwKTsKLQlzdHJ1Y3QgY29uZmlnX2dyb3VwICpkZXZfY2c7CisJc3RydWN0IHNlX2hiYSAqaGJhID0gaXRlbV90b19oYmEoJnNlX2Rldi0+c2VfZGV2X2hiYS0+aGJhX2dyb3VwLmNnX2l0ZW0pOworCXN0cnVjdCBzZV9zdWJzeXN0ZW1fYXBpICp0ID0gaGJhLT50cmFuc3BvcnQ7CisJc3RydWN0IGNvbmZpZ19ncm91cCAqZGV2X2NnID0gJnNlX2Rldi0+c2VfZGV2X2dyb3VwOwogCi0JaWYgKCEoc2VfZGV2KSkKLQkJcmV0dXJuOwotCi0JZGV2X2NnID0gJnNlX2Rldi0+c2VfZGV2X2dyb3VwOwogCWtmcmVlKGRldl9jZy0+ZGVmYXVsdF9ncm91cHMpOworCS8qCisJICogVGhpcyBwb2ludGVyIHdpbGwgc2V0IHdoZW4gdGhlIHN0b3JhZ2UgaXMgZW5hYmxlZCB3aXRoOgorCSAqYGVjaG8gMSA+ICRDT05GSUdGUy9jb3JlLyRIQkEvJERFVi9kZXZfZW5hYmxlYAorCSAqLworCWlmIChzZV9kZXYtPnNlX2Rldl9wdHIpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IENhbGxpbmcgc2VfZnJlZV8iCisJCQkidmlydHVhbF9kZXZpY2UoKSBmb3Igc2VfZGV2X3B0cjogJXBcbiIsCisJCQlzZV9kZXYtPnNlX2Rldl9wdHIpOworCisJCXNlX2ZyZWVfdmlydHVhbF9kZXZpY2Uoc2VfZGV2LT5zZV9kZXZfcHRyLCBoYmEpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFJlbGVhc2Ugc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYtPnNlX2Rldl9zdV9wdHIuLgorCQkgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IENhbGxpbmcgdC0+ZnJlZV8iCisJCQkiZGV2aWNlKCkgZm9yIHNlX2Rldl9zdV9wdHI6ICVwXG4iLAorCQkJc2VfZGV2LT5zZV9kZXZfc3VfcHRyKTsKKworCQl0LT5mcmVlX2RldmljZShzZV9kZXYtPnNlX2Rldl9zdV9wdHIpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIlRhcmdldF9Db3JlX0NvbmZpZ0ZTOiBEZWFsbG9jYXRpbmcgc2Vfc3Vic3lzdGVtIgorCQkJIl9kZXZfdDogJXBcbiIsIHNlX2Rldik7CisJa2ZyZWUoc2VfZGV2KTsKIH0KIAogc3RhdGljIHNzaXplX3QgdGFyZ2V0X2NvcmVfZGV2X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLApAQCAtMjE0MCw3ICsyMTYxLDE2IEBACiAJTlVMTCwKIH07CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9jb3JlX2FsdWFfbHVfZ3BfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHQxMF9hbHVhX2x1X2dwICpsdV9ncCA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCisJCQlzdHJ1Y3QgdDEwX2FsdWFfbHVfZ3AsIGx1X2dwX2dyb3VwKTsKKworCWNvcmVfYWx1YV9mcmVlX2x1X2dwKGx1X2dwKTsKK30KKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9yZWxlYXNlLAogCS5zaG93X2F0dHJpYnV0ZQkJPSB0YXJnZXRfY29yZV9hbHVhX2x1X2dwX2F0dHJfc2hvdywKIAkuc3RvcmVfYXR0cmlidXRlCT0gdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9hdHRyX3N0b3JlLAogfTsKQEAgLTIxOTEsOSArMjIyMSwxMSBAQAogCXByaW50ayhLRVJOX0lORk8gIlRhcmdldF9Db3JlX0NvbmZpZ0ZTOiBSZWxlYXNpbmcgQUxVQSBMb2dpY2FsIFVuaXQiCiAJCSIgR3JvdXA6IGNvcmUvYWx1YS9sdV9ncHMvJXMsIElEOiAlaHVcbiIsCiAJCWNvbmZpZ19pdGVtX25hbWUoaXRlbSksIGx1X2dwLT5sdV9ncF9pZCk7Ci0KKwkvKgorCSAqIGNvcmVfYWx1YV9mcmVlX2x1X2dwKCkgaXMgY2FsbGVkIGZyb20gdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9vcHMtPnJlbGVhc2UoKQorCSAqIC0+IHRhcmdldF9jb3JlX2FsdWFfbHVfZ3BfcmVsZWFzZSgpCisJICovCiAJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCWNvcmVfYWx1YV9mcmVlX2x1X2dwKGx1X2dwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9jb3JlX2FsdWFfbHVfZ3BzX2dyb3VwX29wcyA9IHsKQEAgLTI1NDksNyArMjU4MSwxNiBAQAogCU5VTEwsCiB9OwogCitzdGF0aWMgdm9pZCB0YXJnZXRfY29yZV9hbHVhX3RnX3B0X2dwX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXN0cnVjdCB0MTBfYWx1YV90Z19wdF9ncCAqdGdfcHRfZ3AgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAorCQkJc3RydWN0IHQxMF9hbHVhX3RnX3B0X2dwLCB0Z19wdF9ncF9ncm91cCk7CisKKwljb3JlX2FsdWFfZnJlZV90Z19wdF9ncCh0Z19wdF9ncCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3Bfb3BzID0geworCS5yZWxlYXNlCQk9IHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3BfcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJCT0gdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9hdHRyX3Nob3csCiAJLnN0b3JlX2F0dHJpYnV0ZQk9IHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3BfYXR0cl9zdG9yZSwKIH07CkBAIC0yNjAyLDkgKzI2NDMsMTEgQEAKIAlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogUmVsZWFzaW5nIEFMVUEgVGFyZ2V0IFBvcnQiCiAJCSIgR3JvdXA6IGFsdWEvdGdfcHRfZ3BzLyVzLCBJRDogJWh1XG4iLAogCQljb25maWdfaXRlbV9uYW1lKGl0ZW0pLCB0Z19wdF9ncC0+dGdfcHRfZ3BfaWQpOwotCisJLyoKKwkgKiBjb3JlX2FsdWFfZnJlZV90Z19wdF9ncCgpIGlzIGNhbGxlZCBmcm9tIHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3Bfb3BzLT5yZWxlYXNlKCkKKwkgKiAtPiB0YXJnZXRfY29yZV9hbHVhX3RnX3B0X2dwX3JlbGVhc2UoKS4KKwkgKi8KIAljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JY29yZV9hbHVhX2ZyZWVfdGdfcHRfZ3AodGdfcHRfZ3ApOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncHNfZ3JvdXBfb3BzID0gewpAQCAtMjc3MSwxMyArMjgxNCwxMSBAQAogCXN0cnVjdCBzZV9zdWJzeXN0ZW1fYXBpICp0OwogCXN0cnVjdCBjb25maWdfaXRlbSAqZGZfaXRlbTsKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpkZXZfY2csICp0Z19wdF9ncF9jZzsKLQlpbnQgaSwgcmV0OworCWludCBpOwogCiAJaGJhID0gaXRlbV90b19oYmEoJnNlX2Rldi0+c2VfZGV2X2hiYS0+aGJhX2dyb3VwLmNnX2l0ZW0pOwogCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaGJhLT5oYmFfYWNjZXNzX211dGV4KSkKLQkJZ290byBvdXQ7Ci0KKwltdXRleF9sb2NrKCZoYmEtPmhiYV9hY2Nlc3NfbXV0ZXgpOwogCXQgPSBoYmEtPnRyYW5zcG9ydDsKIAogCXNwaW5fbG9jaygmc2VfZ2xvYmFsLT5nX2RldmljZV9sb2NrKTsKQEAgLTI3OTEsNyArMjgzMiwxMCBAQAogCQljb25maWdfaXRlbV9wdXQoZGZfaXRlbSk7CiAJfQogCWtmcmVlKHRnX3B0X2dwX2NnLT5kZWZhdWx0X2dyb3Vwcyk7Ci0JY29yZV9hbHVhX2ZyZWVfdGdfcHRfZ3AoVDEwX0FMVUEoc2VfZGV2KS0+ZGVmYXVsdF90Z19wdF9ncCk7CisJLyoKKwkgKiBjb3JlX2FsdWFfZnJlZV90Z19wdF9ncCgpIGlzIGNhbGxlZCBmcm9tIC0+ZGVmYXVsdF90Z19wdF9ncAorCSAqIGRpcmVjdGx5IGZyb20gdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9yZWxlYXNlKCkuCisJICovCiAJVDEwX0FMVUEoc2VfZGV2KS0+ZGVmYXVsdF90Z19wdF9ncCA9IE5VTEw7CiAKIAlkZXZfY2cgPSAmc2VfZGV2LT5zZV9kZXZfZ3JvdXA7CkBAIC0yODAwLDM4ICsyODQ0LDEyIEBACiAJCWRldl9jZy0+ZGVmYXVsdF9ncm91cHNbaV0gPSBOVUxMOwogCQljb25maWdfaXRlbV9wdXQoZGZfaXRlbSk7CiAJfQotCi0JY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCS8qCi0JICogVGhpcyBwb2ludGVyIHdpbGwgc2V0IHdoZW4gdGhlIHN0b3JhZ2UgaXMgZW5hYmxlZCB3aXRoOgotCSAqIGBlY2hvIDEgPiAkQ09ORklHRlMvY29yZS8kSEJBLyRERVYvZGV2X2VuYWJsZWAKKwkgKiBUaGUgcmVsZWFzaW5nIG9mIHNlX2RldiBhbmQgYXNzb2NpYXRlZCBzZV9kZXYtPnNlX2Rldl9wdHIgaXMgZG9uZQorCSAqIGZyb20gdGFyZ2V0X2NvcmVfZGV2X2l0ZW1fb3BzLT5yZWxlYXNlKCkgLT50YXJnZXRfY29yZV9kZXZfcmVsZWFzZSgpLgogCSAqLwotCWlmIChzZV9kZXYtPnNlX2Rldl9wdHIpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IENhbGxpbmcgc2VfZnJlZV8iCi0JCQkidmlydHVhbF9kZXZpY2UoKSBmb3Igc2VfZGV2X3B0cjogJXBcbiIsCi0JCQkJc2VfZGV2LT5zZV9kZXZfcHRyKTsKLQotCQlyZXQgPSBzZV9mcmVlX3ZpcnR1YWxfZGV2aWNlKHNlX2Rldi0+c2VfZGV2X3B0ciwgaGJhKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGhiYV9vdXQ7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogUmVsZWFzZSBzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2Rldi0+c2VfZGV2X3N1X3B0ci4uCi0JCSAqLwotCQlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogQ2FsbGluZyB0LT5mcmVlXyIKLQkJCSJkZXZpY2UoKSBmb3Igc2VfZGV2X3N1X3B0cjogJXBcbiIsCi0JCQlzZV9kZXYtPnNlX2Rldl9zdV9wdHIpOwotCi0JCXQtPmZyZWVfZGV2aWNlKHNlX2Rldi0+c2VfZGV2X3N1X3B0cik7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IERlYWxsb2NhdGluZyBzZV9zdWJzeXN0ZW0iCi0JCSJfZGV2X3Q6ICVwXG4iLCBzZV9kZXYpOwotCi1oYmFfb3V0OgorCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKIAltdXRleF91bmxvY2soJmhiYS0+aGJhX2FjY2Vzc19tdXRleCk7Ci1vdXQ6Ci0Ja2ZyZWUoc2VfZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9jb3JlX2hiYV9ncm91cF9vcHMgPSB7CkBAIC0yOTE0LDYgKzI5MzIsMTMgQEAKIAogQ09ORklHRlNfRUFUVFJfT1BTKHRhcmdldF9jb3JlX2hiYSwgc2VfaGJhLCBoYmFfZ3JvdXApOwogCitzdGF0aWMgdm9pZCB0YXJnZXRfY29yZV9oYmFfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX2hiYSAqaGJhID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCQlzdHJ1Y3Qgc2VfaGJhLCBoYmFfZ3JvdXApOworCWNvcmVfZGVsZXRlX2hiYShoYmEpOworfQorCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqdGFyZ2V0X2NvcmVfaGJhX2F0dHJzW10gPSB7CiAJJnRhcmdldF9jb3JlX2hiYV9oYmFfaW5mby5hdHRyLAogCSZ0YXJnZXRfY29yZV9oYmFfaGJhX21vZGUuYXR0ciwKQEAgLTI5MjEsNiArMjk0Niw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyB0YXJnZXRfY29yZV9oYmFfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2NvcmVfaGJhX3JlbGVhc2UsCiAJLnNob3dfYXR0cmlidXRlCQk9IHRhcmdldF9jb3JlX2hiYV9hdHRyX3Nob3csCiAJLnN0b3JlX2F0dHJpYnV0ZQk9IHRhcmdldF9jb3JlX2hiYV9hdHRyX3N0b3JlLAogfTsKQEAgLTI5OTcsMTAgKzMwMjMsMTEgQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7Ci0Jc3RydWN0IHNlX2hiYSAqaGJhID0gaXRlbV90b19oYmEoaXRlbSk7Ci0KKwkvKgorCSAqIGNvcmVfZGVsZXRlX2hiYSgpIGlzIGNhbGxlZCBmcm9tIHRhcmdldF9jb3JlX2hiYV9pdGVtX29wcy0+cmVsZWFzZSgpCisJICogLT4gdGFyZ2V0X2NvcmVfaGJhX3JlbGVhc2UoKQorCSAqLwogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQljb3JlX2RlbGV0ZV9oYmEoaGJhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9jb3JlX2dyb3VwX29wcyA9IHsKQEAgLTMwMjIsNyArMzA0OSw2IEBACiAJc3RydWN0IGNvbmZpZ19ncm91cCAqdGFyZ2V0X2NnLCAqaGJhX2NnID0gTlVMTCwgKmFsdWFfY2cgPSBOVUxMOwogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmx1X2dwX2NnID0gTlVMTDsKIAlzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXM7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX3RhcmdldF9wcm9jID0gTlVMTDsKIAlzdHJ1Y3QgdDEwX2FsdWFfbHVfZ3AgKmx1X2dwOwogCWludCByZXQ7CiAKQEAgLTMxMjgsMjEgKzMxNTQsMTAgQEAKIAlpZiAoY29yZV9kZXZfc2V0dXBfdmlydHVhbF9sdW4wKCkgPCAwKQogCQlnb3RvIG91dDsKIAotCXNjc2lfdGFyZ2V0X3Byb2MgPSBwcm9jX21rZGlyKCJzY3NpX3RhcmdldCIsIDApOwotCWlmICghKHNjc2lfdGFyZ2V0X3Byb2MpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicHJvY19ta2RpcihzY3NpX3RhcmdldCwgMCkgZmFpbGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IGluaXRfc2NzaV90YXJnZXRfbWliKCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCiAJcmV0dXJuIDA7CiAKIG91dDoKIAljb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdWJzeXMpOwotCWlmIChzY3NpX3RhcmdldF9wcm9jKQotCQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQiLCAwKTsKIAljb3JlX2Rldl9yZWxlYXNlX3ZpcnR1YWxfbHVuMCgpOwogCXJkX21vZHVsZV9leGl0KCk7CiBvdXRfZ2xvYmFsOgpAQCAtMzE3OCw4ICszMTkzLDcgQEAKIAkJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCX0KIAlrZnJlZShsdV9ncF9jZy0+ZGVmYXVsdF9ncm91cHMpOwotCWNvcmVfYWx1YV9mcmVlX2x1X2dwKHNlX2dsb2JhbC0+ZGVmYXVsdF9sdV9ncCk7Ci0Jc2VfZ2xvYmFsLT5kZWZhdWx0X2x1X2dwID0gTlVMTDsKKwlsdV9ncF9jZy0+ZGVmYXVsdF9ncm91cHMgPSBOVUxMOwogCiAJYWx1YV9jZyA9ICZzZV9nbG9iYWwtPmFsdWFfZ3JvdXA7CiAJZm9yIChpID0gMDsgYWx1YV9jZy0+ZGVmYXVsdF9ncm91cHNbaV07IGkrKykgewpAQCAtMzE4OCw2ICszMjAyLDcgQEAKIAkJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCX0KIAlrZnJlZShhbHVhX2NnLT5kZWZhdWx0X2dyb3Vwcyk7CisJYWx1YV9jZy0+ZGVmYXVsdF9ncm91cHMgPSBOVUxMOwogCiAJaGJhX2NnID0gJnNlX2dsb2JhbC0+dGFyZ2V0X2NvcmVfaGJhZ3JvdXA7CiAJZm9yIChpID0gMDsgaGJhX2NnLT5kZWZhdWx0X2dyb3Vwc1tpXTsgaSsrKSB7CkBAIC0zMTk2LDIwICszMjExLDIwIEBACiAJCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKIAl9CiAJa2ZyZWUoaGJhX2NnLT5kZWZhdWx0X2dyb3Vwcyk7Ci0KLQlmb3IgKGkgPSAwOyBzdWJzeXMtPnN1X2dyb3VwLmRlZmF1bHRfZ3JvdXBzW2ldOyBpKyspIHsKLQkJaXRlbSA9ICZzdWJzeXMtPnN1X2dyb3VwLmRlZmF1bHRfZ3JvdXBzW2ldLT5jZ19pdGVtOwotCQlzdWJzeXMtPnN1X2dyb3VwLmRlZmF1bHRfZ3JvdXBzW2ldID0gTlVMTDsKLQkJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCX0KKwloYmFfY2ctPmRlZmF1bHRfZ3JvdXBzID0gTlVMTDsKKwkvKgorCSAqIFdlIGV4cGVjdCBzdWJzeXMtPnN1X2dyb3VwLmRlZmF1bHRfZ3JvdXBzIHRvIGJlIHJlbGVhc2VkCisJICogYnkgY29uZmlnZnMgc3Vic3lzdGVtIHByb3ZpZGVyIGxvZ2ljLi4KKwkgKi8KKwljb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdWJzeXMpOwogCWtmcmVlKHN1YnN5cy0+c3VfZ3JvdXAuZGVmYXVsdF9ncm91cHMpOwogCi0JY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3Vic3lzKTsKKwljb3JlX2FsdWFfZnJlZV9sdV9ncChzZV9nbG9iYWwtPmRlZmF1bHRfbHVfZ3ApOworCXNlX2dsb2JhbC0+ZGVmYXVsdF9sdV9ncCA9IE5VTEw7CisKIAlwcmludGsoS0VSTl9JTkZPICJUQVJHRVRfQ09SRVswXTogUmVsZWFzZWQgQ29uZmlnRlMgRmFicmljIgogCQkJIiBJbmZyYXN0cnVjdHVyZVxuIik7CiAKLQlyZW1vdmVfc2NzaV90YXJnZXRfbWliKCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0IiwgMCk7CiAJY29yZV9kZXZfcmVsZWFzZV92aXJ0dWFsX2x1bjAoKTsKIAlyZF9tb2R1bGVfZXhpdCgpOwogCXJlbGVhc2Vfc2VfZ2xvYmFsKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9kZXZpY2UuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCmluZGV4IDMxN2NlNTguLjVkYTA1MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jCkBAIC0zNzMsMTEgKzM3MywxMSBAQAogCQkvKgogCQkgKiBkZXZlLT5zZV9sdW5fYWNsIHdpbGwgYmUgTlVMTCBmb3IgZGVtby1tb2RlIGNyZWF0ZWQgTFVOcwogCQkgKiB0aGF0IGhhdmUgbm90IGJlZW4gZXhwbGljdGx5IGNvbmNlcnRlZCB0byBNYXBwZWRMVU5zIC0+Ci0JCSAqIHN0cnVjdCBzZV9sdW5fYWNsLgorCQkgKiBzdHJ1Y3Qgc2VfbHVuX2FjbCwgYnV0IHdlIHJlbW92ZSBkZXZlLT5hbHVhX3BvcnRfbGlzdCBmcm9tCisJCSAqIHBvcnQtPnNlcF9hbHVhX2xpc3QuIFRoaXMgYWxzbyBtZWFucyB0aGF0IGFjdGl2ZSBVQXMgYW5kCisJCSAqIE5vZGVBQ0wgY29udGV4dCBzcGVjaWZpYyBQUiBtZXRhZGF0YSBmb3IgZGVtby1tb2RlCisJCSAqIE1hcHBlZExVTiAqZGV2ZSB3aWxsIGJlIHJlbGVhc2VkIGJlbG93Li4KIAkJICovCi0JCWlmICghKGRldmUtPnNlX2x1bl9hY2wpKQotCQkJcmV0dXJuIDA7Ci0KIAkJc3Bpbl9sb2NrX2JoKCZwb3J0LT5zZXBfYWx1YV9sb2NrKTsKIAkJbGlzdF9kZWwoJmRldmUtPmFsdWFfcG9ydF9saXN0KTsKIAkJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPnNlcF9hbHVhX2xvY2spOwpAQCAtMzk1LDEyICszOTUsMTQgQEAKIAkJCQlwcmludGsoS0VSTl9FUlIgInN0cnVjdCBzZV9kZXZfZW50cnktPnNlX2x1bl9hY2wiCiAJCQkJCSIgYWxyZWFkeSBzZXQgZm9yIGRlbW8gbW9kZSAtPiBleHBsaWN0IgogCQkJCQkiIExVTiBBQ0wgdHJhbnNpdGlvblxuIik7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZuYWNsLT5kZXZpY2VfbGlzdF9sb2NrKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlpZiAoZGV2ZS0+c2VfbHVuICE9IGx1bikgewogCQkJCXByaW50ayhLRVJOX0VSUiAic3RydWN0IHNlX2Rldl9lbnRyeS0+c2VfbHVuIGRvZXMiCiAJCQkJCSIgbWF0Y2ggcGFzc2VkIHN0cnVjdCBzZV9sdW4gZm9yIGRlbW8gbW9kZSIKIAkJCQkJIiAtPiBleHBsaWN0IExVTiBBQ0wgdHJhbnNpdGlvblxuIik7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZuYWNsLT5kZXZpY2VfbGlzdF9sb2NrKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlkZXZlLT5zZV9sdW5fYWNsID0gbHVuX2FjbDsKQEAgLTg2NSw5ICs4NjcsNiBAQAogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZoYmEtPmRldmljZV9sb2NrKTsKLQotCXdoaWxlIChhdG9taWNfcmVhZCgmaGJhLT5kZXZfbWliX2FjY2Vzc19jb3VudCkpCi0JCWNwdV9yZWxheCgpOwogfQogCiBpbnQgc2VfZGV2X2NoZWNrX29ubGluZShzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9mYWJyaWNfY29uZmlnZnMuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19jb25maWdmcy5jCmluZGV4IDMyYjE0OGQuLmI2NWQxYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19jb25maWdmcy5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19jb25maWdmcy5jCkBAIC0yMTQsMTIgKzIxNCwyMiBAQAogCiBDT05GSUdGU19FQVRUUl9PUFModGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW4sIHNlX2x1bl9hY2wsIHNlX2x1bl9ncm91cCk7CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXN0cnVjdCBzZV9sdW5fYWNsICpsYWNsID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCQlzdHJ1Y3Qgc2VfbHVuX2FjbCwgc2VfbHVuX2dyb3VwKTsKKwlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBsYWNsLT5zZV9sdW5fbmFjbC0+c2VfdHBnOworCisJY29yZV9kZXZfZnJlZV9pbml0aWF0b3Jfbm9kZV9sdW5fYWNsKHNlX3RwZywgbGFjbCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp0YXJnZXRfZmFicmljX21hcHBlZGx1bl9hdHRyc1tdID0gewogCSZ0YXJnZXRfZmFicmljX21hcHBlZGx1bl93cml0ZV9wcm90ZWN0LmF0dHIsCiAJTlVMTCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX2l0ZW1fb3BzID0geworCS5yZWxlYXNlCQk9IHRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX3JlbGVhc2UsCiAJLnNob3dfYXR0cmlidXRlCQk9IHRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX2F0dHJfc2hvdywKIAkuc3RvcmVfYXR0cmlidXRlCT0gdGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW5fYXR0cl9zdG9yZSwKIAkuYWxsb3dfbGluawkJPSB0YXJnZXRfZmFicmljX21hcHBlZGx1bl9saW5rLApAQCAtMzM3LDE1ICszNDcsMjEgQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7Ci0Jc3RydWN0IHNlX2x1bl9hY2wgKmxhY2wgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAotCQkJc3RydWN0IHNlX2x1bl9hY2wsIHNlX2x1bl9ncm91cCk7Ci0Jc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gbGFjbC0+c2VfbHVuX25hY2wtPnNlX3RwZzsKLQogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQljb3JlX2Rldl9mcmVlX2luaXRpYXRvcl9ub2RlX2x1bl9hY2woc2VfdHBnLCBsYWNsKTsKK30KKworc3RhdGljIHZvaWQgdGFyZ2V0X2ZhYnJpY19uYWNsX2Jhc2VfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCXN0cnVjdCBzZV9ub2RlX2FjbCwgYWNsX2dyb3VwKTsKKwlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBzZV9uYWNsLT5zZV90cGc7CisJc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKnRmID0gc2VfdHBnLT5zZV90cGdfd3duLT53d25fdGY7CisKKwl0Zi0+dGZfb3BzLmZhYnJpY19kcm9wX25vZGVhY2woc2VfbmFjbCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfbmFjbF9iYXNlX2l0ZW1fb3BzID0geworCS5yZWxlYXNlCQk9IHRhcmdldF9mYWJyaWNfbmFjbF9iYXNlX3JlbGVhc2UsCiAJLnNob3dfYXR0cmlidXRlCQk9IHRhcmdldF9mYWJyaWNfbmFjbF9iYXNlX2F0dHJfc2hvdywKIAkuc3RvcmVfYXR0cmlidXRlCT0gdGFyZ2V0X2ZhYnJpY19uYWNsX2Jhc2VfYXR0cl9zdG9yZSwKIH07CkBAIC00MDQsOSArNDIwLDYgQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7Ci0Jc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gY29udGFpbmVyX29mKGdyb3VwLAotCQkJc3RydWN0IHNlX3BvcnRhbF9ncm91cCwgdHBnX2FjbF9ncm91cCk7Ci0Jc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKnRmID0gc2VfdHBnLT5zZV90cGdfd3duLT53d25fdGY7CiAJc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKIAkJCXN0cnVjdCBzZV9ub2RlX2FjbCwgYWNsX2dyb3VwKTsKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKmRmX2l0ZW07CkBAIC00MTksOSArNDMyLDEwIEBACiAJCW5hY2xfY2ctPmRlZmF1bHRfZ3JvdXBzW2ldID0gTlVMTDsKIAkJY29uZmlnX2l0ZW1fcHV0KGRmX2l0ZW0pOwogCX0KLQorCS8qCisJICogc3RydWN0IHNlX25vZGVfYWNsIGZyZWUgaXMgZG9uZSBpbiB0YXJnZXRfZmFicmljX25hY2xfYmFzZV9yZWxlYXNlKCkKKwkgKi8KIAljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JdGYtPnRmX29wcy5mYWJyaWNfZHJvcF9ub2RlYWNsKHNlX25hY2wpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY19uYWNsX2dyb3VwX29wcyA9IHsKQEAgLTQzNyw3ICs0NTEsMTggQEAKIAogQ09ORklHRlNfRUFUVFJfT1BTKHRhcmdldF9mYWJyaWNfbnBfYmFzZSwgc2VfdHBnX25wLCB0cGdfbnBfZ3JvdXApOwogCitzdGF0aWMgdm9pZCB0YXJnZXRfZmFicmljX25wX2Jhc2VfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX3RwZ19ucCAqc2VfdHBnX25wID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCQlzdHJ1Y3Qgc2VfdHBnX25wLCB0cGdfbnBfZ3JvdXApOworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IHNlX3RwZ19ucC0+dHBnX25wX3BhcmVudDsKKwlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSBzZV90cGctPnNlX3RwZ193d24tPnd3bl90ZjsKKworCXRmLT50Zl9vcHMuZmFicmljX2Ryb3BfbnAoc2VfdHBnX25wKTsKK30KKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY19ucF9iYXNlX2l0ZW1fb3BzID0geworCS5yZWxlYXNlCQk9IHRhcmdldF9mYWJyaWNfbnBfYmFzZV9yZWxlYXNlLAogCS5zaG93X2F0dHJpYnV0ZQkJPSB0YXJnZXRfZmFicmljX25wX2Jhc2VfYXR0cl9zaG93LAogCS5zdG9yZV9hdHRyaWJ1dGUJPSB0YXJnZXRfZmFicmljX25wX2Jhc2VfYXR0cl9zdG9yZSwKIH07CkBAIC00NjYsNiArNDkxLDcgQEAKIAlpZiAoIShzZV90cGdfbnApIHx8IElTX0VSUihzZV90cGdfbnApKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAorCXNlX3RwZ19ucC0+dHBnX25wX3BhcmVudCA9IHNlX3RwZzsKIAljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoJnNlX3RwZ19ucC0+dHBnX25wX2dyb3VwLCBuYW1lLAogCQkJJlRGX0NJVF9UTVBMKHRmKS0+dGZjX3RwZ19ucF9iYXNlX2NpdCk7CiAKQEAgLTQ3NiwxNCArNTAyLDEwIEBACiAJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCiAJc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewotCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IGNvbnRhaW5lcl9vZihncm91cCwKLQkJCQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwLCB0cGdfbnBfZ3JvdXApOwotCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiA9IHNlX3RwZy0+c2VfdHBnX3d3bi0+d3duX3RmOwotCXN0cnVjdCBzZV90cGdfbnAgKnNlX3RwZ19ucCA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCi0JCQkJc3RydWN0IHNlX3RwZ19ucCwgdHBnX25wX2dyb3VwKTsKLQorCS8qCisJICogc3RydWN0IHNlX3RwZ19ucCBpcyByZWxlYXNlZCB2aWEgdGFyZ2V0X2ZhYnJpY19ucF9iYXNlX3JlbGVhc2UoKQorCSAqLwogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQl0Zi0+dGZfb3BzLmZhYnJpY19kcm9wX25wKHNlX3RwZ19ucCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB0YXJnZXRfZmFicmljX25wX2dyb3VwX29wcyA9IHsKQEAgLTgxNCw3ICs4MzYsMTggQEAKICAqLwogQ09ORklHRlNfRUFUVFJfT1BTKHRhcmdldF9mYWJyaWNfdHBnLCBzZV9wb3J0YWxfZ3JvdXAsIHRwZ19ncm91cCk7CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9mYWJyaWNfdHBnX3JlbGVhc2Uoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCisJCQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwLCB0cGdfZ3JvdXApOworCXN0cnVjdCBzZV93d24gKnd3biA9IHNlX3RwZy0+c2VfdHBnX3d3bjsKKwlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSB3d24tPnd3bl90ZjsKKworCXRmLT50Zl9vcHMuZmFicmljX2Ryb3BfdHBnKHNlX3RwZyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfdHBnX2Jhc2VfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2ZhYnJpY190cGdfcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJCT0gdGFyZ2V0X2ZhYnJpY190cGdfYXR0cl9zaG93LAogCS5zdG9yZV9hdHRyaWJ1dGUJPSB0YXJnZXRfZmFicmljX3RwZ19hdHRyX3N0b3JlLAogfTsKQEAgLTg3Miw4ICs5MDUsNiBAQAogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQlzdHJ1Y3Qgc2Vfd3duICp3d24gPSBjb250YWluZXJfb2YoZ3JvdXAsIHN0cnVjdCBzZV93d24sIHd3bl9ncm91cCk7Ci0Jc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKnRmID0gd3duLT53d25fdGY7CiAJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKIAkJCQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwLCB0cGdfZ3JvdXApOwogCXN0cnVjdCBjb25maWdfZ3JvdXAgKnRwZ19jZyA9ICZzZV90cGctPnRwZ19ncm91cDsKQEAgLTg5MCwxNSArOTIxLDI4IEBACiAJfQogCiAJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCXRmLT50Zl9vcHMuZmFicmljX2Ryb3BfdHBnKHNlX3RwZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9mYWJyaWNfcmVsZWFzZV93d24oc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQoreworCXN0cnVjdCBzZV93d24gKnd3biA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCisJCQkJc3RydWN0IHNlX3d3biwgd3duX2dyb3VwKTsKKwlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSB3d24tPnd3bl90ZjsKKworCXRmLT50Zl9vcHMuZmFicmljX2Ryb3Bfd3duKHd3bik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfdHBnX2l0ZW1fb3BzID0geworCS5yZWxlYXNlCT0gdGFyZ2V0X2ZhYnJpY19yZWxlYXNlX3d3biwKK307CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB0YXJnZXRfZmFicmljX3RwZ19ncm91cF9vcHMgPSB7CiAJLm1ha2VfZ3JvdXAJPSB0YXJnZXRfZmFicmljX21ha2VfdHBnLAogCS5kcm9wX2l0ZW0JPSB0YXJnZXRfZmFicmljX2Ryb3BfdHBnLAogfTsKIAotVEZfQ0lUX1NFVFVQKHRwZywgTlVMTCwgJnRhcmdldF9mYWJyaWNfdHBnX2dyb3VwX29wcywgTlVMTCk7CitURl9DSVRfU0VUVVAodHBnLCAmdGFyZ2V0X2ZhYnJpY190cGdfaXRlbV9vcHMsICZ0YXJnZXRfZmFicmljX3RwZ19ncm91cF9vcHMsCisJCU5VTEwpOwogCiAvKiBFbmQgb2YgdGZjX3RwZ19jaXQgKi8KIApAQCAtOTMyLDEzICs5NzYsNyBAQAogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSBjb250YWluZXJfb2YoZ3JvdXAsCi0JCQkJc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMsIHRmX2dyb3VwKTsKLQlzdHJ1Y3Qgc2Vfd3duICp3d24gPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAotCQkJCXN0cnVjdCBzZV93d24sIHd3bl9ncm91cCk7Ci0KIAljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JdGYtPnRmX29wcy5mYWJyaWNfZHJvcF93d24od3duKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfd3duX2dyb3VwX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2libG9jay5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMKaW5kZXggYzZlMGQ3NS4uNjdmMGMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiAJYmQgPSBibGtkZXZfZ2V0X2J5X3BhdGgoaWJfZGV2LT5pYmRfdWRldl9wYXRoLAogCQkJCUZNT0RFX1dSSVRFfEZNT0RFX1JFQUR8Rk1PREVfRVhDTCwgaWJfZGV2KTsKLQlpZiAoIShiZCkpCisJaWYgKElTX0VSUihiZCkpCiAJCWdvdG8gZmFpbGVkOwogCS8qCiAJICogU2V0dXAgdGhlIGxvY2FsIHNjb3BlIHF1ZXVlX2xpbWl0cyBmcm9tIHN0cnVjdCByZXF1ZXN0X3F1ZXVlLT5saW1pdHMKQEAgLTIyMCw4ICsyMjAsMTAgQEAKIHsKIAlzdHJ1Y3QgaWJsb2NrX2RldiAqaWJfZGV2ID0gcDsKIAotCWJsa2Rldl9wdXQoaWJfZGV2LT5pYmRfYmQsIEZNT0RFX1dSSVRFfEZNT0RFX1JFQUR8Rk1PREVfRVhDTCk7Ci0JYmlvc2V0X2ZyZWUoaWJfZGV2LT5pYmRfYmlvX3NldCk7CisJaWYgKGliX2Rldi0+aWJkX2JkICE9IE5VTEwpCisJCWJsa2Rldl9wdXQoaWJfZGV2LT5pYmRfYmQsIEZNT0RFX1dSSVRFfEZNT0RFX1JFQUR8Rk1PREVfRVhDTCk7CisJaWYgKGliX2Rldi0+aWJkX2Jpb19zZXQgIT0gTlVMTCkKKwkJYmlvc2V0X2ZyZWUoaWJfZGV2LT5pYmRfYmlvX3NldCk7CiAJa2ZyZWUoaWJfZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfbWliLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVhNDhhYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEZpbGVuYW1lOiAgdGFyZ2V0X2NvcmVfbWliLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBTQkUsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBSaXNpbmcgVGlkZSBTeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMCBMaW51eC1pU0NTSS5vcmcKLSAqCi0gKiBOaWNob2xhcyBBLiBCZWxsaW5nZXIgPG5hYkBsaW51eC1pc2NzaS5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgotCi0jaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaD4KLSNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19vcHMuaD4KLSNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuaD4KLQotI2luY2x1ZGUgInRhcmdldF9jb3JlX2hiYS5oIgotI2luY2x1ZGUgInRhcmdldF9jb3JlX21pYi5oIgotCi0vKiBTQ1NJIG1pYiB0YWJsZSBpbmRleCAqLwotc3RhdGljIHN0cnVjdCBzY3NpX2luZGV4X3RhYmxlIHNjc2lfaW5kZXhfdGFibGU7Ci0KLSNpZm5kZWYgSU5JVElBTF9KSUZGSUVTCi0jZGVmaW5lIElOSVRJQUxfSklGRklFUyAoKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGludCkgKC0zMDAqSFopKQotI2VuZGlmCi0KLS8qIFNDU0kgSW5zdGFuY2UgVGFibGUgKi8KLSNkZWZpbmUgU0NTSV9JTlNUX1NXX0lOREVYCQkxCi0jZGVmaW5lIFNDU0lfVFJBTlNQT1JUX0lOREVYCQkxCi0KLSNkZWZpbmUgTk9ORQkJIk5vbmUiCi0jZGVmaW5lIElTUFJJTlQoYSkgICAoKGEgPj0gJyAnKSAmJiAoYSA8PSAnficpKQotCi1zdGF0aWMgaW5saW5lIGludCBsaXN0X2lzX2ZpcnN0KGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCi0JCQkJY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlyZXR1cm4gbGlzdC0+cHJldiA9PSBoZWFkOwotfQotCi1zdGF0aWMgdm9pZCAqbG9jYXRlX2hiYV9zdGFydCgKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQlsb2ZmX3QgKnBvcykKLXsKLQlzcGluX2xvY2soJnNlX2dsb2JhbC0+Z19kZXZpY2VfbG9jayk7Ci0JcmV0dXJuIHNlcV9saXN0X3N0YXJ0KCZzZV9nbG9iYWwtPmdfc2VfZGV2X2xpc3QsICpwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqbG9jYXRlX2hiYV9uZXh0KAotCXN0cnVjdCBzZXFfZmlsZSAqc2VxLAotCXZvaWQgKnYsCi0JbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIHNlcV9saXN0X25leHQodiwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgbG9jYXRlX2hiYV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXNwaW5fdW5sb2NrKCZzZV9nbG9iYWwtPmdfZGV2aWNlX2xvY2spOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU0NTSSBNSUIgVGFibGVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNDU0kgSW5zdGFuY2UgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfaW5zdF9zZXFfc3RhcnQoCi0Jc3RydWN0IHNlcV9maWxlICpzZXEsCi0JbG9mZl90ICpwb3MpCi17Ci0Jc3Bpbl9sb2NrKCZzZV9nbG9iYWwtPmhiYV9sb2NrKTsKLQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlX2dsb2JhbC0+Z19oYmFfbGlzdCwgKnBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX2luc3Rfc2VxX25leHQoCi0Jc3RydWN0IHNlcV9maWxlICpzZXEsCi0Jdm9pZCAqdiwKLQlsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmc2VfZ2xvYmFsLT5nX2hiYV9saXN0LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX2luc3Rfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3Bpbl91bmxvY2soJnNlX2dsb2JhbC0+aGJhX2xvY2spOwotfQotCi1zdGF0aWMgaW50IHNjc2lfaW5zdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmEgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9oYmEsIGhiYV9saXN0KTsKLQotCWlmIChsaXN0X2lzX2ZpcnN0KCZoYmEtPmhiYV9saXN0LCAmc2VfZ2xvYmFsLT5nX2hiYV9saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBzd19pbmR4XG4iKTsKLQotCXNlcV9wcmludGYoc2VxLCAiJXUgJXVcbiIsIGhiYS0+aGJhX2luZGV4LCBTQ1NJX0lOU1RfU1dfSU5ERVgpOwotCXNlcV9wcmludGYoc2VxLCAicGx1Z2luOiAlcyB2ZXJzaW9uOiAlc1xuIiwKLQkJCWhiYS0+dHJhbnNwb3J0LT5uYW1lLCBUQVJHRVRfQ09SRV9WRVJTSU9OKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfaW5zdF9zZXFfb3BzID0gewotCS5zdGFydAk9IHNjc2lfaW5zdF9zZXFfc3RhcnQsCi0JLm5leHQJPSBzY3NpX2luc3Rfc2VxX25leHQsCi0JLnN0b3AJPSBzY3NpX2luc3Rfc2VxX3N0b3AsCi0JLnNob3cJPSBzY3NpX2luc3Rfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV9pbnN0X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9pbnN0X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX2luc3Rfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfaW5zdF9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgRGV2aWNlIFRhYmxlCi0gKi8KLXN0YXRpYyB2b2lkICpzY3NpX2Rldl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX3N0YXJ0KHNlcSwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfZGV2X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9uZXh0KHNlcSwgdiwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV9kZXZfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbG9jYXRlX2hiYV9zdG9wKHNlcSwgdik7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV9kZXZfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNlX2hiYSAqaGJhOwotCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2ICpzZV9kZXYgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LAotCQkJCQkJZ19zZV9kZXZfbGlzdCk7Ci0Jc3RydWN0IHNlX2RldmljZSAqZGV2ID0gc2VfZGV2LT5zZV9kZXZfcHRyOwotCWNoYXIgc3RyWzI4XTsKLQlpbnQgazsKLQotCWlmIChsaXN0X2lzX2ZpcnN0KCZzZV9kZXYtPmdfc2VfZGV2X2xpc3QsICZzZV9nbG9iYWwtPmdfc2VfZGV2X2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IGluZHggcm9sZSBwb3J0c1xuIik7Ci0KLQlpZiAoIShkZXYpKQotCQlyZXR1cm4gMDsKLQotCWhiYSA9IGRldi0+c2VfaGJhOwotCWlmICghKGhiYSkpIHsKLQkJLyogTG9nIGVycm9yID8gKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2VxX3ByaW50ZihzZXEsICIldSAldSAlcyAldVxuIiwgaGJhLT5oYmFfaW5kZXgsCi0JCSAgIGRldi0+ZGV2X2luZGV4LCAiVGFyZ2V0IiwgZGV2LT5kZXZfcG9ydF9jb3VudCk7Ci0KLQltZW1jcHkoJnN0clswXSwgKHZvaWQgKilERVZfVDEwX1dXTihkZXYpLCAyOCk7Ci0KLQkvKiB2ZW5kb3IgKi8KLQlmb3IgKGsgPSAwOyBrIDwgODsgaysrKQotCQlzdHJba10gPSBJU1BSSU5UKERFVl9UMTBfV1dOKGRldiktPnZlbmRvcltrXSkgPwotCQkJCURFVl9UMTBfV1dOKGRldiktPnZlbmRvcltrXSA6IDB4MjA7Ci0Jc3RyW2tdID0gMHgyMDsKLQotCS8qIG1vZGVsICovCi0JZm9yIChrID0gMDsgayA8IDE2OyBrKyspCi0JCXN0cltrKzldID0gSVNQUklOVChERVZfVDEwX1dXTihkZXYpLT5tb2RlbFtrXSkgPwotCQkJCURFVl9UMTBfV1dOKGRldiktPm1vZGVsW2tdIDogMHgyMDsKLQlzdHJbayArIDldID0gMDsKLQotCXNlcV9wcmludGYoc2VxLCAiZGV2X2FsaWFzOiAlc1xuIiwgc3RyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfZGV2X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IHNjc2lfZGV2X3NlcV9zdGFydCwKLQkubmV4dCAgID0gc2NzaV9kZXZfc2VxX25leHQsCi0JLnN0b3AgICA9IHNjc2lfZGV2X3NlcV9zdG9wLAotCS5zaG93ICAgPSBzY3NpX2Rldl9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX2Rldl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjc2lfZGV2X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX2Rldl9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV9kZXZfc2VxX29wZW4sCi0JLnJlYWQJID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qCi0gKiBTQ1NJIFBvcnQgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfcG9ydF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX3N0YXJ0KHNlcSwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfcG9ydF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfbmV4dChzZXEsIHYsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfcG9ydF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotc3RhdGljIGludCBzY3NpX3BvcnRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNlX2hiYSAqaGJhOwotCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2ICpzZV9kZXYgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LAotCQkJCQkJZ19zZV9kZXZfbGlzdCk7Ci0Jc3RydWN0IHNlX2RldmljZSAqZGV2ID0gc2VfZGV2LT5zZV9kZXZfcHRyOwotCXN0cnVjdCBzZV9wb3J0ICpzZXAsICpzZXBfdG1wOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX2Rldi0+Z19zZV9kZXZfbGlzdCwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgZGV2aWNlIGluZHggcm9sZSBidXN5X2NvdW50XG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBGSVhNRTogc2NzaVBvcnRCdXN5U3RhdHVzZXMgY291bnQgKi8KLQlzcGluX2xvY2soJmRldi0+c2VfcG9ydF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2VwLCBzZXBfdG1wLCAmZGV2LT5kZXZfc2VwX2xpc3QsIHNlcF9saXN0KSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiJXUgJXUgJXUgJXMldSAldVxuIiwgaGJhLT5oYmFfaW5kZXgsCi0JCQlkZXYtPmRldl9pbmRleCwgc2VwLT5zZXBfaW5kZXgsICJEZXZpY2UiLAotCQkJZGV2LT5kZXZfaW5kZXgsIDApOwotCX0KLQlzcGluX3VubG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9wb3J0X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IHNjc2lfcG9ydF9zZXFfc3RhcnQsCi0JLm5leHQgICA9IHNjc2lfcG9ydF9zZXFfbmV4dCwKLQkuc3RvcCAgID0gc2NzaV9wb3J0X3NlcV9zdG9wLAotCS5zaG93ICAgPSBzY3NpX3BvcnRfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV9wb3J0X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9wb3J0X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX3BvcnRfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfcG9ydF9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgVHJhbnNwb3J0IFRhYmxlCi0gKi8KLXN0YXRpYyB2b2lkICpzY3NpX3RyYW5zcG9ydF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX3N0YXJ0KHNlcSwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfdHJhbnNwb3J0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9uZXh0KHNlcSwgdiwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV90cmFuc3BvcnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbG9jYXRlX2hiYV9zdG9wKHNlcSwgdik7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV90cmFuc3BvcnRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNlX2hiYSAqaGJhOwotCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2ICpzZV9kZXYgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LAotCQkJCQkJZ19zZV9kZXZfbGlzdCk7Ci0Jc3RydWN0IHNlX2RldmljZSAqZGV2ID0gc2VfZGV2LT5zZV9kZXZfcHRyOwotCXN0cnVjdCBzZV9wb3J0ICpzZSwgKnNlX3RtcDsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICp0cGc7Ci0Jc3RydWN0IHQxMF93d24gKnd3bjsKLQljaGFyIGJ1Zls2NF07Ci0KLQlpZiAobGlzdF9pc19maXJzdCgmc2VfZGV2LT5nX3NlX2Rldl9saXN0LCAmc2VfZ2xvYmFsLT5nX3NlX2Rldl9saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBkZXZpY2UgaW5keCBkZXZfbmFtZVxuIik7Ci0KLQlpZiAoIShkZXYpKQotCQlyZXR1cm4gMDsKLQotCWhiYSA9IGRldi0+c2VfaGJhOwotCWlmICghKGhiYSkpIHsKLQkJLyogTG9nIGVycm9yID8gKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0Jd3duID0gREVWX1QxMF9XV04oZGV2KTsKLQotCXNwaW5fbG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZSwgc2VfdG1wLCAmZGV2LT5kZXZfc2VwX2xpc3QsIHNlcF9saXN0KSB7Ci0JCXRwZyA9IHNlLT5zZXBfdHBnOwotCQlzcHJpbnRmKGJ1ZiwgInNjc2lUcmFuc3BvcnQlcyIsCi0JCQkJVFBHX1RGTyh0cGcpLT5nZXRfZmFicmljX25hbWUoKSk7Ci0KLQkJc2VxX3ByaW50ZihzZXEsICIldSAlcyAldSAlcyslc1xuIiwKLQkJCWhiYS0+aGJhX2luZGV4LCAvKiBzY3NpVHJhbnNwb3J0SW5kZXggKi8KLQkJCWJ1ZiwgIC8qIHNjc2lUcmFuc3BvcnRUeXBlICovCi0JCQkoVFBHX1RGTyh0cGcpLT50cGdfZ2V0X2luc3RfaW5kZXggIT0gTlVMTCkgPwotCQkJVFBHX1RGTyh0cGcpLT50cGdfZ2V0X2luc3RfaW5kZXgodHBnKSA6Ci0JCQkwLAotCQkJVFBHX1RGTyh0cGcpLT50cGdfZ2V0X3d3bih0cGcpLAotCQkJKHN0cmxlbih3d24tPnVuaXRfc2VyaWFsKSkgPwotCQkJLyogc2NzaVRyYW5zcG9ydERldk5hbWUgKi8KLQkJCXd3bi0+dW5pdF9zZXJpYWwgOiB3d24tPnZlbmRvcik7Ci0JfQotCXNwaW5fdW5sb2NrKCZkZXYtPnNlX3BvcnRfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY3NpX3RyYW5zcG9ydF9zZXFfb3BzID0gewotCS5zdGFydCAgPSBzY3NpX3RyYW5zcG9ydF9zZXFfc3RhcnQsCi0JLm5leHQgICA9IHNjc2lfdHJhbnNwb3J0X3NlcV9uZXh0LAotCS5zdG9wICAgPSBzY3NpX3RyYW5zcG9ydF9zZXFfc3RvcCwKLQkuc2hvdyAgID0gc2NzaV90cmFuc3BvcnRfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV90cmFuc3BvcnRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX3RyYW5zcG9ydF9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV90cmFuc3BvcnRfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfdHJhbnNwb3J0X3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBUYXJnZXQgRGV2aWNlIFRhYmxlCi0gKi8KLXN0YXRpYyB2b2lkICpzY3NpX3RndF9kZXZfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9zdGFydChzZXEsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX3RndF9kZXZfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX25leHQoc2VxLCB2LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX3RndF9kZXZfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbG9jYXRlX2hiYV9zdG9wKHNlcSwgdik7Ci19Ci0KLQotI2RlZmluZSBMVV9DT1VOVAkxICAvKiBmb3Igbm93ICovCi1zdGF0aWMgaW50IHNjc2lfdGd0X2Rldl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0JaW50IG5vbl9hY2Nlc3NpYmxlX2x1cyA9IDA7Ci0JY2hhciBzdGF0dXNbMTZdOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX2Rldi0+Z19zZV9kZXZfbGlzdCwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgaW5keCBudW1fTFVzIHN0YXR1cyBub25fYWNjZXNzX0xVcyIKLQkJCSIgcmVzZXRzXG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzd2l0Y2ggKGRldi0+ZGV2X3N0YXR1cykgewotCWNhc2UgVFJBTlNQT1JUX0RFVklDRV9BQ1RJVkFURUQ6Ci0JCXN0cmNweShzdGF0dXMsICJhY3RpdmF0ZWQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBUUkFOU1BPUlRfREVWSUNFX0RFQUNUSVZBVEVEOgotCQlzdHJjcHkoc3RhdHVzLCAiZGVhY3RpdmF0ZWQiKTsKLQkJbm9uX2FjY2Vzc2libGVfbHVzID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBUUkFOU1BPUlRfREVWSUNFX1NIVVRET1dOOgotCQlzdHJjcHkoc3RhdHVzLCAic2h1dGRvd24iKTsKLQkJbm9uX2FjY2Vzc2libGVfbHVzID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBUUkFOU1BPUlRfREVWSUNFX09GRkxJTkVfQUNUSVZBVEVEOgotCWNhc2UgVFJBTlNQT1JUX0RFVklDRV9PRkZMSU5FX0RFQUNUSVZBVEVEOgotCQlzdHJjcHkoc3RhdHVzLCAib2ZmbGluZSIpOwotCQlub25fYWNjZXNzaWJsZV9sdXMgPSAxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzcHJpbnRmKHN0YXR1cywgInVua25vd24oJWQpIiwgZGV2LT5kZXZfc3RhdHVzKTsKLQkJbm9uX2FjY2Vzc2libGVfbHVzID0gMTsKLQl9Ci0KLQlzZXFfcHJpbnRmKHNlcSwgIiV1ICV1ICV1ICVzICV1ICV1XG4iLAotCQkgICBoYmEtPmhiYV9pbmRleCwgZGV2LT5kZXZfaW5kZXgsIExVX0NPVU5ULAotCQkgICBzdGF0dXMsIG5vbl9hY2Nlc3NpYmxlX2x1cywgZGV2LT5udW1fcmVzZXRzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfdGd0X2Rldl9zZXFfb3BzID0gewotCS5zdGFydCAgPSBzY3NpX3RndF9kZXZfc2VxX3N0YXJ0LAotCS5uZXh0ICAgPSBzY3NpX3RndF9kZXZfc2VxX25leHQsCi0JLnN0b3AgICA9IHNjc2lfdGd0X2Rldl9zZXFfc3RvcCwKLQkuc2hvdyAgID0gc2NzaV90Z3RfZGV2X3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNjc2lfdGd0X2Rldl9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjc2lfdGd0X2Rldl9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV90Z3RfZGV2X3NlcV9mb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBzY3NpX3RndF9kZXZfc2VxX29wZW4sCi0JLnJlYWQJID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qCi0gKiBTQ1NJIFRhcmdldCBQb3J0IFRhYmxlCi0gKi8KLXN0YXRpYyB2b2lkICpzY3NpX3RndF9wb3J0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfc3RhcnQoc2VxLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqc2NzaV90Z3RfcG9ydF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfbmV4dChzZXEsIHYsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfdGd0X3BvcnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JbG9jYXRlX2hiYV9zdG9wKHNlcSwgdik7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV90Z3RfcG9ydF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0Jc3RydWN0IHNlX3BvcnQgKnNlcCwgKnNlcF90bXA7Ci0Jc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqdHBnOwotCXUzMiByeF9tYnl0ZXMsIHR4X21ieXRlczsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbnVtX2NtZHM7Ci0JY2hhciBidWZbNjRdOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX2Rldi0+Z19zZV9kZXZfbGlzdCwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgZGV2aWNlIGluZHggbmFtZSBwb3J0X2luZGV4IGluX2NtZHMiCi0JCQkiIHdyaXRlX21ieXRlcyByZWFkX21ieXRlcyBoc19pbl9jbWRzXG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzcGluX2xvY2soJmRldi0+c2VfcG9ydF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2VwLCBzZXBfdG1wLCAmZGV2LT5kZXZfc2VwX2xpc3QsIHNlcF9saXN0KSB7Ci0JCXRwZyA9IHNlcC0+c2VwX3RwZzsKLQkJc3ByaW50ZihidWYsICIlc1BvcnQjIiwKLQkJCVRQR19URk8odHBnKS0+Z2V0X2ZhYnJpY19uYW1lKCkpOwotCi0JCXNlcV9wcmludGYoc2VxLCAiJXUgJXUgJXUgJXMlZCAlcyVzJWQgIiwKLQkJICAgICBoYmEtPmhiYV9pbmRleCwKLQkJICAgICBkZXYtPmRldl9pbmRleCwKLQkJICAgICBzZXAtPnNlcF9pbmRleCwKLQkJICAgICBidWYsIHNlcC0+c2VwX2luZGV4LAotCQkgICAgIFRQR19URk8odHBnKS0+dHBnX2dldF93d24odHBnKSwgIit0KyIsCi0JCSAgICAgVFBHX1RGTyh0cGcpLT50cGdfZ2V0X3RhZyh0cGcpKTsKLQotCQlzcGluX2xvY2soJnNlcC0+c2VwX2x1bi0+bHVuX3NlcF9sb2NrKTsKLQkJbnVtX2NtZHMgPSBzZXAtPnNlcF9zdGF0cy5jbWRfcGR1czsKLQkJcnhfbWJ5dGVzID0gKHNlcC0+c2VwX3N0YXRzLnJ4X2RhdGFfb2N0ZXRzID4+IDIwKTsKLQkJdHhfbWJ5dGVzID0gKHNlcC0+c2VwX3N0YXRzLnR4X2RhdGFfb2N0ZXRzID4+IDIwKTsKLQkJc3Bpbl91bmxvY2soJnNlcC0+c2VwX2x1bi0+bHVuX3NlcF9sb2NrKTsKLQotCQlzZXFfcHJpbnRmKHNlcSwgIiVsbHUgJXUgJXUgJXVcbiIsIG51bV9jbWRzLAotCQkJcnhfbWJ5dGVzLCB0eF9tYnl0ZXMsIDApOwotCX0KLQlzcGluX3VubG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV90Z3RfcG9ydF9zZXFfb3BzID0gewotCS5zdGFydCAgPSBzY3NpX3RndF9wb3J0X3NlcV9zdGFydCwKLQkubmV4dCAgID0gc2NzaV90Z3RfcG9ydF9zZXFfbmV4dCwKLQkuc3RvcCAgID0gc2NzaV90Z3RfcG9ydF9zZXFfc3RvcCwKLQkuc2hvdyAgID0gc2NzaV90Z3RfcG9ydF9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX3RndF9wb3J0X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV90Z3RfcG9ydF9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV90Z3RfcG9ydF9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV90Z3RfcG9ydF9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgQXV0aG9yaXplZCBJbml0aWF0b3IgVGFibGU6Ci0gKiBJdCBjb250YWlucyB0aGUgU0NTSSBJbml0aWF0b3JzIGF1dGhvcml6ZWQgdG8gYmUgYXR0YWNoZWQgdG8gb25lIG9mIHRoZQotICogbG9jYWwgVGFyZ2V0IHBvcnRzLgotICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgYWN0aXZlIFRQR3MgYW5kIGV4dHJhY3RzIHRoZSBpbmZvIGZyb20gdGhlIEFDTHMKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfYXV0aF9pbnRyX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0Jc3Bpbl9sb2NrX2JoKCZzZV9nbG9iYWwtPnNlX3RwZ19sb2NrKTsKLQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlX2dsb2JhbC0+Z19zZV90cGdfbGlzdCwgKnBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX2F1dGhfaW50cl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwKLQkJCQkJIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZzZV9nbG9iYWwtPmdfc2VfdHBnX2xpc3QsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfYXV0aF9pbnRyX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXNwaW5fdW5sb2NrX2JoKCZzZV9nbG9iYWwtPnNlX3RwZ19sb2NrKTsKLX0KLQotc3RhdGljIGludCBzY3NpX2F1dGhfaW50cl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAsCi0JCQkJCQlzZV90cGdfbGlzdCk7Ci0Jc3RydWN0IHNlX2Rldl9lbnRyeSAqZGV2ZTsKLQlzdHJ1Y3Qgc2VfbHVuICpsdW47Ci0Jc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsOwotCWludCBqOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX3RwZy0+c2VfdHBnX2xpc3QsCi0JCQkgICZzZV9nbG9iYWwtPmdfc2VfdHBnX2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IGRldiBwb3J0IGluZHggZGV2X29yX3BvcnQgaW50cl9uYW1lICIKLQkJCSAibWFwX2luZHggYXR0X2NvdW50IG51bV9jbWRzIHJlYWRfbWJ5dGVzICIKLQkJCSAid3JpdGVfbWJ5dGVzIGhzX251bV9jbWRzIGNyZWF0aW9uX3RpbWUgcm93X3N0YXR1c1xuIik7Ci0KLQlpZiAoIShzZV90cGcpKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9jaygmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlX25hY2wsICZzZV90cGctPmFjbF9ub2RlX2xpc3QsIGFjbF9saXN0KSB7Ci0KLQkJYXRvbWljX2luYygmc2VfbmFjbC0+bWliX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwotCQlzcGluX3VubG9jaygmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKLQotCQlzcGluX2xvY2tfaXJxKCZzZV9uYWNsLT5kZXZpY2VfbGlzdF9sb2NrKTsKLQkJZm9yIChqID0gMDsgaiA8IFRSQU5TUE9SVF9NQVhfTFVOU19QRVJfVFBHOyBqKyspIHsKLQkJCWRldmUgPSAmc2VfbmFjbC0+ZGV2aWNlX2xpc3Rbal07Ci0JCQlpZiAoIShkZXZlLT5sdW5fZmxhZ3MgJgotCQkJCQlUUkFOU1BPUlRfTFVORkxBR1NfSU5JVElBVE9SX0FDQ0VTUykgfHwKLQkJCSAgICAoIWRldmUtPnNlX2x1bikpCi0JCQkJY29udGludWU7Ci0JCQlsdW4gPSBkZXZlLT5zZV9sdW47Ci0JCQlpZiAoIWx1bi0+bHVuX3NlX2RldikKLQkJCQljb250aW51ZTsKLQotCQkJc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAldSAldSAlcyAldSAldSAldSAldSAldSAldSIKLQkJCQkJIiAldSAlc1xuIiwKLQkJCQkvKiBzY3NpSW5zdEluZGV4ICovCi0JCQkJKFRQR19URk8oc2VfdHBnKS0+dHBnX2dldF9pbnN0X2luZGV4ICE9IE5VTEwpID8KLQkJCQlUUEdfVEZPKHNlX3RwZyktPnRwZ19nZXRfaW5zdF9pbmRleChzZV90cGcpIDoKLQkJCQkwLAotCQkJCS8qIHNjc2lEZXZpY2VJbmRleCAqLwotCQkJCWx1bi0+bHVuX3NlX2Rldi0+ZGV2X2luZGV4LAotCQkJCS8qIHNjc2lBdXRoSW50clRndFBvcnRJbmRleCAqLwotCQkJCVRQR19URk8oc2VfdHBnKS0+dHBnX2dldF90YWcoc2VfdHBnKSwKLQkJCQkvKiBzY3NpQXV0aEludHJJbmRleCAqLwotCQkJCXNlX25hY2wtPmFjbF9pbmRleCwKLQkJCQkvKiBzY3NpQXV0aEludHJEZXZPclBvcnQgKi8KLQkJCQkxLAotCQkJCS8qIHNjc2lBdXRoSW50ck5hbWUgKi8KLQkJCQlzZV9uYWNsLT5pbml0aWF0b3JuYW1lWzBdID8KLQkJCQkJc2VfbmFjbC0+aW5pdGlhdG9ybmFtZSA6IE5PTkUsCi0JCQkJLyogRklYTUU6IHNjc2lBdXRoSW50ckx1bk1hcEluZGV4ICovCi0JCQkJMCwKLQkJCQkvKiBzY3NpQXV0aEludHJBdHRhY2hlZFRpbWVzICovCi0JCQkJZGV2ZS0+YXR0YWNoX2NvdW50LAotCQkJCS8qIHNjc2lBdXRoSW50ck91dENvbW1hbmRzICovCi0JCQkJZGV2ZS0+dG90YWxfY21kcywKLQkJCQkvKiBzY3NpQXV0aEludHJSZWFkTWVnYUJ5dGVzICovCi0JCQkJKHUzMikoZGV2ZS0+cmVhZF9ieXRlcyA+PiAyMCksCi0JCQkJLyogc2NzaUF1dGhJbnRyV3JpdHRlbk1lZ2FCeXRlcyAqLwotCQkJCSh1MzIpKGRldmUtPndyaXRlX2J5dGVzID4+IDIwKSwKLQkJCQkvKiBGSVhNRTogc2NzaUF1dGhJbnRySFNPdXRDb21tYW5kcyAqLwotCQkJCTAsCi0JCQkJLyogc2NzaUF1dGhJbnRyTGFzdENyZWF0aW9uICovCi0JCQkJKHUzMikoKCh1MzIpZGV2ZS0+Y3JlYXRpb25fdGltZSAtCi0JCQkJCSAgICBJTklUSUFMX0pJRkZJRVMpICogMTAwIC8gSFopLAotCQkJCS8qIEZJWE1FOiBzY3NpQXV0aEludHJSb3dTdGF0dXMgKi8KLQkJCQkiUmVhZHkiKTsKLQkJfQotCQlzcGluX3VubG9ja19pcnEoJnNlX25hY2wtPmRldmljZV9saXN0X2xvY2spOwotCi0JCXNwaW5fbG9jaygmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKLQkJYXRvbWljX2RlYygmc2VfbmFjbC0+bWliX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOwotCX0KLQlzcGluX3VubG9jaygmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfYXV0aF9pbnRyX3NlcV9vcHMgPSB7Ci0JLnN0YXJ0CT0gc2NzaV9hdXRoX2ludHJfc2VxX3N0YXJ0LAotCS5uZXh0CT0gc2NzaV9hdXRoX2ludHJfc2VxX25leHQsCi0JLnN0b3AJPSBzY3NpX2F1dGhfaW50cl9zZXFfc3RvcCwKLQkuc2hvdwk9IHNjc2lfYXV0aF9pbnRyX3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNjc2lfYXV0aF9pbnRyX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9hdXRoX2ludHJfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfYXV0aF9pbnRyX3NlcV9mb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBzY3NpX2F1dGhfaW50cl9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgQXR0YWNoZWQgSW5pdGlhdG9yIFBvcnQgVGFibGU6Ci0gKiBJdCBsaXN0cyB0aGUgU0NTSSBJbml0aWF0b3JzIGF0dGFjaGVkIHRvIG9uZSBvZiB0aGUgbG9jYWwgVGFyZ2V0IHBvcnRzLgotICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgYWN0aXZlIFRQR3MgYW5kIHVzZSBhY3RpdmUgc2Vzc2lvbnMgZnJvbSBlYWNoIFRQRwotICogdG8gbGlzdCB0aGUgaW5mbyBmbyB0aGlzIHRhYmxlLgotICovCi1zdGF0aWMgdm9pZCAqc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0Jc3Bpbl9sb2NrX2JoKCZzZV9nbG9iYWwtPnNlX3RwZ19sb2NrKTsKLQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlX2dsb2JhbC0+Z19zZV90cGdfbGlzdCwgKnBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsCi0JCQkJCSBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmc2VfZ2xvYmFsLT5nX3NlX3RwZ19saXN0LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3Bpbl91bmxvY2tfYmgoJnNlX2dsb2JhbC0+c2VfdHBnX2xvY2spOwotfQotCi1zdGF0aWMgaW50IHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAsCi0JCQkJCQlzZV90cGdfbGlzdCk7Ci0Jc3RydWN0IHNlX2Rldl9lbnRyeSAqZGV2ZTsKLQlzdHJ1Y3Qgc2VfbHVuICpsdW47Ci0Jc3RydWN0IHNlX25vZGVfYWNsICpzZV9uYWNsOwotCXN0cnVjdCBzZV9zZXNzaW9uICpzZV9zZXNzOwotCXVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKLQlpbnQgajsKLQotCWlmIChsaXN0X2lzX2ZpcnN0KCZzZV90cGctPnNlX3RwZ19saXN0LAotCQkJICAmc2VfZ2xvYmFsLT5nX3NlX3RwZ19saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBkZXYgcG9ydCBpbmR4IHBvcnRfYXV0aF9pbmR4IHBvcnRfbmFtZSIKLQkJCSIgcG9ydF9pZGVudFxuIik7Ci0KLQlpZiAoIShzZV90cGcpKQotCQlyZXR1cm4gMDsKLQotCXNwaW5fbG9jaygmc2VfdHBnLT5zZXNzaW9uX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2Vfc2VzcywgJnNlX3RwZy0+dHBnX3Nlc3NfbGlzdCwgc2Vzc19saXN0KSB7Ci0JCWlmICgoVFBHX1RGTyhzZV90cGcpLT5zZXNzX2xvZ2dlZF9pbihzZV9zZXNzKSkgfHwKLQkJICAgICghc2Vfc2Vzcy0+c2Vfbm9kZV9hY2wpIHx8Ci0JCSAgICAoIXNlX3Nlc3MtPnNlX25vZGVfYWNsLT5kZXZpY2VfbGlzdCkpCi0JCQljb250aW51ZTsKLQotCQlhdG9taWNfaW5jKCZzZV9zZXNzLT5taWJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7Ci0JCXNlX25hY2wgPSBzZV9zZXNzLT5zZV9ub2RlX2FjbDsKLQkJYXRvbWljX2luYygmc2VfbmFjbC0+bWliX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwotCQlzcGluX3VubG9jaygmc2VfdHBnLT5zZXNzaW9uX2xvY2spOwotCi0JCXNwaW5fbG9ja19pcnEoJnNlX25hY2wtPmRldmljZV9saXN0X2xvY2spOwotCQlmb3IgKGogPSAwOyBqIDwgVFJBTlNQT1JUX01BWF9MVU5TX1BFUl9UUEc7IGorKykgewotCQkJZGV2ZSA9ICZzZV9uYWNsLT5kZXZpY2VfbGlzdFtqXTsKLQkJCWlmICghKGRldmUtPmx1bl9mbGFncyAmCi0JCQkJCVRSQU5TUE9SVF9MVU5GTEFHU19JTklUSUFUT1JfQUNDRVNTKSB8fAotCQkJICAgKCFkZXZlLT5zZV9sdW4pKQotCQkJCWNvbnRpbnVlOwotCi0JCQlsdW4gPSBkZXZlLT5zZV9sdW47Ci0JCQlpZiAoIWx1bi0+bHVuX3NlX2RldikKLQkJCQljb250aW51ZTsKLQotCQkJbWVtc2V0KGJ1ZiwgMCwgNjQpOwotCQkJaWYgKFRQR19URk8oc2VfdHBnKS0+c2Vzc19nZXRfaW5pdGlhdG9yX3NpZCAhPSBOVUxMKQotCQkJCVRQR19URk8oc2VfdHBnKS0+c2Vzc19nZXRfaW5pdGlhdG9yX3NpZCgKLQkJCQkJc2Vfc2VzcywgKHVuc2lnbmVkIGNoYXIgKikmYnVmWzBdLCA2NCk7Ci0KLQkJCXNlcV9wcmludGYoc2VxLCAiJXUgJXUgJXUgJXUgJXUgJXMraSslc1xuIiwKLQkJCQkvKiBzY3NpSW5zdEluZGV4ICovCi0JCQkJKFRQR19URk8oc2VfdHBnKS0+dHBnX2dldF9pbnN0X2luZGV4ICE9IE5VTEwpID8KLQkJCQlUUEdfVEZPKHNlX3RwZyktPnRwZ19nZXRfaW5zdF9pbmRleChzZV90cGcpIDoKLQkJCQkwLAotCQkJCS8qIHNjc2lEZXZpY2VJbmRleCAqLwotCQkJCWx1bi0+bHVuX3NlX2Rldi0+ZGV2X2luZGV4LAotCQkJCS8qIHNjc2lQb3J0SW5kZXggKi8KLQkJCQlUUEdfVEZPKHNlX3RwZyktPnRwZ19nZXRfdGFnKHNlX3RwZyksCi0JCQkJLyogc2NzaUF0dEludHJQb3J0SW5kZXggKi8KLQkJCQkoVFBHX1RGTyhzZV90cGcpLT5zZXNzX2dldF9pbmRleCAhPSBOVUxMKSA/Ci0JCQkJVFBHX1RGTyhzZV90cGcpLT5zZXNzX2dldF9pbmRleChzZV9zZXNzKSA6Ci0JCQkJMCwKLQkJCQkvKiBzY3NpQXR0SW50clBvcnRBdXRoSW50cklkeCAqLwotCQkJCXNlX25hY2wtPmFjbF9pbmRleCwKLQkJCQkvKiBzY3NpQXR0SW50clBvcnROYW1lICovCi0JCQkJc2VfbmFjbC0+aW5pdGlhdG9ybmFtZVswXSA/Ci0JCQkJCXNlX25hY2wtPmluaXRpYXRvcm5hbWUgOiBOT05FLAotCQkJCS8qIHNjc2lBdHRJbnRyUG9ydElkZW50aWZpZXIgKi8KLQkJCQlidWYpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2VfbmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7Ci0KLQkJc3Bpbl9sb2NrKCZzZV90cGctPnNlc3Npb25fbG9jayk7Ci0JCWF0b21pY19kZWMoJnNlX25hY2wtPm1pYl9yZWZfY291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKTsKLQkJYXRvbWljX2RlYygmc2Vfc2Vzcy0+bWliX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOwotCX0KLQlzcGluX3VubG9jaygmc2VfdHBnLT5zZXNzaW9uX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0CT0gc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zdGFydCwKLQkubmV4dAk9IHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfbmV4dCwKLQkuc3RvcAk9IHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfc3RvcCwKLQkuc2hvdwk9IHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBMb2dpY2FsIFVuaXQgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfbHVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9zdGFydChzZXEsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX2x1X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9uZXh0KHNlcSwgdiwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV9sdV9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotI2RlZmluZSBTQ1NJX0xVX0lOREVYCQkxCi1zdGF0aWMgaW50IHNjc2lfbHVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNlX2hiYSAqaGJhOwotCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2ICpzZV9kZXYgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LAotCQkJCQkJZ19zZV9kZXZfbGlzdCk7Ci0Jc3RydWN0IHNlX2RldmljZSAqZGV2ID0gc2VfZGV2LT5zZV9kZXZfcHRyOwotCWludCBqOwotCWNoYXIgc3RyWzI4XTsKLQotCWlmIChsaXN0X2lzX2ZpcnN0KCZzZV9kZXYtPmdfc2VfZGV2X2xpc3QsICZzZV9nbG9iYWwtPmdfc2VfZGV2X2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IGRldiBpbmR4IExVTiBsdV9uYW1lIHZlbmQgcHJvZCByZXYiCi0JCSIgZGV2X3R5cGUgc3RhdHVzIHN0YXRlLWJpdCBudW1fY21kcyByZWFkX21ieXRlcyIKLQkJIiB3cml0ZV9tYnl0ZXMgcmVzZXRzIGZ1bGxfc3RhdCBoc19udW1fY21kcyBjcmVhdGlvbl90aW1lXG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBGaXggTFUgc3RhdGUsIGlmIHdlIGNhbiByZWFkIGl0IGZyb20gdGhlIGRldmljZSAqLwotCXNlcV9wcmludGYoc2VxLCAiJXUgJXUgJXUgJWxsdSAlcyIsIGhiYS0+aGJhX2luZGV4LAotCQkJZGV2LT5kZXZfaW5kZXgsIFNDU0lfTFVfSU5ERVgsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKTAsIC8qIEZJWE1FOiBzY3NpTHVEZWZhdWx0THVuICovCi0JCQkoc3RybGVuKERFVl9UMTBfV1dOKGRldiktPnVuaXRfc2VyaWFsKSkgPwotCQkJLyogc2NzaUx1V3duTmFtZSAqLwotCQkJKGNoYXIgKikmREVWX1QxMF9XV04oZGV2KS0+dW5pdF9zZXJpYWxbMF0gOgotCQkJIk5vbmUiKTsKLQotCW1lbWNweSgmc3RyWzBdLCAodm9pZCAqKURFVl9UMTBfV1dOKGRldiksIDI4KTsKLQkvKiBzY3NpTHVWZW5kb3JJZCAqLwotCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCi0JCXN0cltqXSA9IElTUFJJTlQoREVWX1QxMF9XV04oZGV2KS0+dmVuZG9yW2pdKSA/Ci0JCQlERVZfVDEwX1dXTihkZXYpLT52ZW5kb3Jbal0gOiAweDIwOwotCXN0cls4XSA9IDA7Ci0Jc2VxX3ByaW50ZihzZXEsICIgJXMiLCBzdHIpOwotCi0JLyogc2NzaUx1UHJvZHVjdElkICovCi0JZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCi0JCXN0cltqXSA9IElTUFJJTlQoREVWX1QxMF9XV04oZGV2KS0+bW9kZWxbal0pID8KLQkJCURFVl9UMTBfV1dOKGRldiktPm1vZGVsW2pdIDogMHgyMDsKLQlzdHJbMTZdID0gMDsKLQlzZXFfcHJpbnRmKHNlcSwgIiAlcyIsIHN0cik7Ci0KLQkvKiBzY3NpTHVSZXZpc2lvbklkICovCi0JZm9yIChqID0gMDsgaiA8IDQ7IGorKykKLQkJc3RyW2pdID0gSVNQUklOVChERVZfVDEwX1dXTihkZXYpLT5yZXZpc2lvbltqXSkgPwotCQkJREVWX1QxMF9XV04oZGV2KS0+cmV2aXNpb25bal0gOiAweDIwOwotCXN0cls0XSA9IDA7Ci0Jc2VxX3ByaW50ZihzZXEsICIgJXMiLCBzdHIpOwotCi0Jc2VxX3ByaW50ZihzZXEsICIgJXUgJXMgJXMgJWxsdSAldSAldSAldSAldSAldSAldVxuIiwKLQkJLyogc2NzaUx1UGVyaXBoZXJhbFR5cGUgKi8KLQkJICAgVFJBTlNQT1JUKGRldiktPmdldF9kZXZpY2VfdHlwZShkZXYpLAotCQkgICAoZGV2LT5kZXZfc3RhdHVzID09IFRSQU5TUE9SVF9ERVZJQ0VfQUNUSVZBVEVEKSA/Ci0JCSJhdmFpbGFibGUiIDogIm5vdGF2YWlsYWJsZSIsIC8qIHNjc2lMdVN0YXR1cyAqLwotCQkiZXhwb3NlZCIsIAkvKiBzY3NpTHVTdGF0ZSAqLwotCQkodW5zaWduZWQgbG9uZyBsb25nKWRldi0+bnVtX2NtZHMsCi0JCS8qIHNjc2lMdVJlYWRNZWdhQnl0ZXMgKi8KLQkJKHUzMikoZGV2LT5yZWFkX2J5dGVzID4+IDIwKSwKLQkJLyogc2NzaUx1V3JpdHRlbk1lZ2FCeXRlcyAqLwotCQkodTMyKShkZXYtPndyaXRlX2J5dGVzID4+IDIwKSwKLQkJZGV2LT5udW1fcmVzZXRzLCAvKiBzY3NpTHVJblJlc2V0cyAqLwotCQkwLCAvKiBzY3NpTHVPdXRUYXNrU2V0RnVsbFN0YXR1cyAqLwotCQkwLCAvKiBzY3NpTHVIU0luQ29tbWFuZHMgKi8KLQkJKHUzMikoKCh1MzIpZGV2LT5jcmVhdGlvbl90aW1lIC0gSU5JVElBTF9KSUZGSUVTKSAqCi0JCQkJCQkJMTAwIC8gSFopKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfbHVfc2VxX29wcyA9IHsKLQkuc3RhcnQgID0gc2NzaV9sdV9zZXFfc3RhcnQsCi0JLm5leHQgICA9IHNjc2lfbHVfc2VxX25leHQsCi0JLnN0b3AgICA9IHNjc2lfbHVfc2VxX3N0b3AsCi0JLnNob3cgICA9IHNjc2lfbHVfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV9sdV9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjc2lfbHVfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfbHVfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfbHVfc2VxX29wZW4sCi0JLnJlYWQJID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogUmVtb3ZlIHByb2MgZnMgZW50cmllcwotICovCi12b2lkIHJlbW92ZV9zY3NpX3RhcmdldF9taWIodm9pZCkKLXsKLQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfaW5zdCIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9kZXYiLCBOVUxMKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfcG9ydCIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV90cmFuc3BvcnQiLCBOVUxMKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfdGd0X2RldiIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV90Z3RfcG9ydCIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9hdXRoX2ludHIiLCBOVUxMKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfYXR0X2ludHJfcG9ydCIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9sdSIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIiLCBOVUxMKTsKLX0KLQotLyoKLSAqIENyZWF0ZSBwcm9jIGZzIGVudHJpZXMgZm9yIHRoZSBtaWIgdGFibGVzCi0gKi8KLWludCBpbml0X3Njc2lfdGFyZ2V0X21pYih2b2lkKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyX2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV9pbnN0X2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV9kZXZfZW50cnk7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX3BvcnRfZW50cnk7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX3RyYW5zcG9ydF9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfdGd0X2Rldl9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfdGd0X3BvcnRfZW50cnk7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX2F1dGhfaW50cl9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfYXR0X2ludHJfcG9ydF9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfbHVfZW50cnk7Ci0KLQlkaXJfZW50cnkgPSBwcm9jX21rZGlyKCJzY3NpX3RhcmdldC9taWIiLCBOVUxMKTsKLQlpZiAoIShkaXJfZW50cnkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicHJvY19ta2RpcigpIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0Jc2NzaV9pbnN0X2VudHJ5ID0KLQkJY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2luc3QiLCAwLCBOVUxMKTsKLQlpZiAoc2NzaV9pbnN0X2VudHJ5KQotCQlzY3NpX2luc3RfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX2luc3Rfc2VxX2ZvcHM7Ci0JZWxzZQotCQlnb3RvIGVycm9yOwotCi0Jc2NzaV9kZXZfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfZGV2IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfZGV2X2VudHJ5KQotCQlzY3NpX2Rldl9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfZGV2X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfcG9ydF9lbnRyeSA9Ci0JCWNyZWF0ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9wb3J0IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfcG9ydF9lbnRyeSkKLQkJc2NzaV9wb3J0X2VudHJ5LT5wcm9jX2ZvcHMgPSAmc2NzaV9wb3J0X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfdHJhbnNwb3J0X2VudHJ5ID0KLQkJY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX3RyYW5zcG9ydCIsIDAsIE5VTEwpOwotCWlmIChzY3NpX3RyYW5zcG9ydF9lbnRyeSkKLQkJc2NzaV90cmFuc3BvcnRfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX3RyYW5zcG9ydF9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlzY3NpX3RndF9kZXZfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfdGd0X2RldiIsIDAsIE5VTEwpOwotCWlmIChzY3NpX3RndF9kZXZfZW50cnkpCi0JCXNjc2lfdGd0X2Rldl9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfdGd0X2Rldl9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlzY3NpX3RndF9wb3J0X2VudHJ5ID0KLQkJY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX3RndF9wb3J0IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfdGd0X3BvcnRfZW50cnkpCi0JCXNjc2lfdGd0X3BvcnRfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX3RndF9wb3J0X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfYXV0aF9pbnRyX2VudHJ5ID0KLQkJY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2F1dGhfaW50ciIsIDAsIE5VTEwpOwotCWlmIChzY3NpX2F1dGhfaW50cl9lbnRyeSkKLQkJc2NzaV9hdXRoX2ludHJfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX2F1dGhfaW50cl9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlzY3NpX2F0dF9pbnRyX3BvcnRfZW50cnkgPQotCSAgICAgIGNyZWF0ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9hdHRfaW50cl9wb3J0IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfYXR0X2ludHJfcG9ydF9lbnRyeSkKLQkJc2NzaV9hdHRfaW50cl9wb3J0X2VudHJ5LT5wcm9jX2ZvcHMgPQotCQkJCSZzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX2ZvcHM7Ci0JZWxzZQotCQlnb3RvIGVycm9yOwotCi0Jc2NzaV9sdV9lbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9sdSIsIDAsIE5VTEwpOwotCWlmIChzY3NpX2x1X2VudHJ5KQotCQlzY3NpX2x1X2VudHJ5LT5wcm9jX2ZvcHMgPSAmc2NzaV9sdV9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JcHJpbnRrKEtFUk5fRVJSICJjcmVhdGVfcHJvY19lbnRyeSgpIGZhaWxlZC5cbiIpOwotCXJlbW92ZV9zY3NpX3RhcmdldF9taWIoKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBpbmRleCB0YWJsZSBmb3IgYWxsb2NhdGluZyB1bmlxdWUgcm93IGluZGV4ZXMgdG8gdmFyaW91cyBtaWIKLSAqIHRhYmxlcwotICovCi12b2lkIGluaXRfc2NzaV9pbmRleF90YWJsZSh2b2lkKQotewotCW1lbXNldCgmc2NzaV9pbmRleF90YWJsZSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3NpX2luZGV4X3RhYmxlKSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNjc2lfaW5kZXhfdGFibGUubG9jayk7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhIG5ldyByb3cgaW5kZXggZm9yIHRoZSBlbnRyeSB0eXBlIHNwZWNpZmllZAotICovCi11MzIgc2NzaV9nZXRfbmV3X2luZGV4KHNjc2lfaW5kZXhfdCB0eXBlKQotewotCXUzMiBuZXdfaW5kZXg7Ci0KLQlpZiAoKHR5cGUgPCAwKSB8fCAodHlwZSA+PSBTQ1NJX0lOREVYX1RZUEVfTUFYKSkgewotCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgaW5kZXggdHlwZSAlZFxuIiwgdHlwZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlzcGluX2xvY2soJnNjc2lfaW5kZXhfdGFibGUubG9jayk7Ci0JbmV3X2luZGV4ID0gKytzY3NpX2luZGV4X3RhYmxlLnNjc2lfbWliX2luZGV4W3R5cGVdOwotCWlmIChuZXdfaW5kZXggPT0gMCkKLQkJbmV3X2luZGV4ID0gKytzY3NpX2luZGV4X3RhYmxlLnNjc2lfbWliX2luZGV4W3R5cGVdOwotCXNwaW5fdW5sb2NrKCZzY3NpX2luZGV4X3RhYmxlLmxvY2spOwotCi0JcmV0dXJuIG5ld19pbmRleDsKLX0KLUVYUE9SVF9TWU1CT0woc2NzaV9nZXRfbmV3X2luZGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX21pYi5oIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfbWliLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NzIwNDYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfbWliLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jaWZuZGVmIFRBUkdFVF9DT1JFX01JQl9ICi0jZGVmaW5lIFRBUkdFVF9DT1JFX01JQl9ICi0KLXR5cGVkZWYgZW51bSB7Ci0JU0NTSV9JTlNUX0lOREVYLAotCVNDU0lfREVWSUNFX0lOREVYLAotCVNDU0lfQVVUSF9JTlRSX0lOREVYLAotCVNDU0lfSU5ERVhfVFlQRV9NQVgKLX0gc2NzaV9pbmRleF90OwotCi1zdHJ1Y3Qgc2NzaV9pbmRleF90YWJsZSB7Ci0Jc3BpbmxvY2tfdAlsb2NrOwotCXUzMiAJCXNjc2lfbWliX2luZGV4W1NDU0lfSU5ERVhfVFlQRV9NQVhdOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Ci0KLS8qIFNDU0kgUG9ydCBzdGF0cyAqLwotc3RydWN0IHNjc2lfcG9ydF9zdGF0cyB7Ci0JdTY0CWNtZF9wZHVzOwotCXU2NAl0eF9kYXRhX29jdGV0czsKLQl1NjQJcnhfZGF0YV9vY3RldHM7Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKLQotZXh0ZXJuIGludCBpbml0X3Njc2lfdGFyZ2V0X21pYih2b2lkKTsKLWV4dGVybiB2b2lkIHJlbW92ZV9zY3NpX3RhcmdldF9taWIodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X3Njc2lfaW5kZXhfdGFibGUodm9pZCk7Ci1leHRlcm4gdTMyIHNjc2lfZ2V0X25ld19pbmRleChzY3NpX2luZGV4X3QpOwotCi0jZW5kaWYgICAvKioqIFRBUkdFVF9DT1JFX01JQl9IICoqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3BzY3NpLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wc2NzaS5jCmluZGV4IDc0MmQyNDYuLmYyYTA4NDc3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHNjc2kuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wc2NzaS5jCkBAIC00NjIsOCArNDYyLDggQEAKIAkgKi8KIAliZCA9IGJsa2Rldl9nZXRfYnlfcGF0aChzZV9kZXYtPnNlX2Rldl91ZGV2X3BhdGgsCiAJCQkJRk1PREVfV1JJVEV8Rk1PREVfUkVBRHxGTU9ERV9FWENMLCBwZHYpOwotCWlmICghKGJkKSkgewotCQlwcmludGsoInBTQ1NJOiBibGtkZXZfZ2V0X2J5X3BhdGgoKSBmYWlsZWRcbiIpOworCWlmIChJU19FUlIoYmQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAicFNDU0k6IGJsa2Rldl9nZXRfYnlfcGF0aCgpIGZhaWxlZFxuIik7CiAJCXNjc2lfZGV2aWNlX3B1dChzZCk7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RwZy5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmMKaW5kZXggYWJmYTgxYS4uYzI2ZjY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmMKQEAgLTI3NSw3ICsyNzUsNiBAQAogCXNwaW5fbG9ja19pbml0KCZhY2wtPmRldmljZV9saXN0X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhY2wtPm5hY2xfc2Vzc19sb2NrKTsKIAlhdG9taWNfc2V0KCZhY2wtPmFjbF9wcl9yZWZfY291bnQsIDApOwotCWF0b21pY19zZXQoJmFjbC0+bWliX3JlZl9jb3VudCwgMCk7CiAJYWNsLT5xdWV1ZV9kZXB0aCA9IFRQR19URk8odHBnKS0+dHBnX2dldF9kZWZhdWx0X2RlcHRoKHRwZyk7CiAJc25wcmludGYoYWNsLT5pbml0aWF0b3JuYW1lLCBUUkFOU1BPUlRfSVFOX0xFTiwgIiVzIiwgaW5pdGlhdG9ybmFtZSk7CiAJYWNsLT5zZV90cGcgPSB0cGc7CkBAIC0zMTgsMTIgKzMxNyw2IEBACiAJCWNwdV9yZWxheCgpOwogfQogCi12b2lkIGNvcmVfdHBnX3dhaXRfZm9yX21pYl9yZWYoc3RydWN0IHNlX25vZGVfYWNsICpuYWNsKQotewotCXdoaWxlIChhdG9taWNfcmVhZCgmbmFjbC0+bWliX3JlZl9jb3VudCkgIT0gMCkKLQkJY3B1X3JlbGF4KCk7Ci19Ci0KIHZvaWQgY29yZV90cGdfY2xlYXJfb2JqZWN0X2x1bnMoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqdHBnKQogewogCWludCBpLCByZXQ7CkBAIC00ODAsNyArNDczLDYgQEAKIAlzcGluX3VubG9ja19iaCgmdHBnLT5zZXNzaW9uX2xvY2spOwogCiAJY29yZV90cGdfd2FpdF9mb3JfbmFjbF9wcl9yZWYoYWNsKTsKLQljb3JlX3RwZ193YWl0X2Zvcl9taWJfcmVmKGFjbCk7CiAJY29yZV9jbGVhcl9pbml0aWF0b3Jfbm9kZV9mcm9tX3RwZyhhY2wsIHRwZyk7CiAJY29yZV9mcmVlX2RldmljZV9saXN0X2Zvcl9ub2RlKGFjbCwgdHBnKTsKIApAQCAtNzAxLDYgKzY5Myw4IEBACiAKIGludCBjb3JlX3RwZ19kZXJlZ2lzdGVyKHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZykKIHsKKwlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKm5hY2wsICpuYWNsX3RtcDsKKwogCXByaW50ayhLRVJOX0lORk8gIlRBUkdFVF9DT1JFWyVzXTogRGVhbGxvY2F0aW5nICVzIHN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAiCiAJCSIgZm9yIGVuZHBvaW50OiAlcyBQb3J0YWwgVGFnICV1XG4iLAogCQkoc2VfdHBnLT5zZV90cGdfdHlwZSA9PSBUUkFOU1BPUlRfVFBHX1RZUEVfTk9STUFMKSA/CkBAIC03MTQsNiArNzA4LDI1IEBACiAKIAl3aGlsZSAoYXRvbWljX3JlYWQoJnNlX3RwZy0+dHBnX3ByX3JlZl9jb3VudCkgIT0gMCkKIAkJY3B1X3JlbGF4KCk7CisJLyoKKwkgKiBSZWxlYXNlIGFueSByZW1haW5pbmcgZGVtby1tb2RlIGdlbmVyYXRlZCBzZV9ub2RlX2FjbCB0aGF0IGhhdmUKKwkgKiBub3QgYmVlbiByZWxlYXNlZCBiZWNhdXNlIG9mIFRGTy0+dHBnX2NoZWNrX2RlbW9fbW9kZV9jYWNoZSgpID09IDEKKwkgKiBpbiB0cmFuc3BvcnRfZGVyZWdpc3Rlcl9zZXNzaW9uKCkuCisJICovCisJc3Bpbl9sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuYWNsLCBuYWNsX3RtcCwgJnNlX3RwZy0+YWNsX25vZGVfbGlzdCwKKwkJCWFjbF9saXN0KSB7CisJCWxpc3RfZGVsKCZuYWNsLT5hY2xfbGlzdCk7CisJCXNlX3RwZy0+bnVtX25vZGVfYWNscy0tOworCQlzcGluX3VubG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKKworCQljb3JlX3RwZ193YWl0X2Zvcl9uYWNsX3ByX3JlZihuYWNsKTsKKwkJY29yZV9mcmVlX2RldmljZV9saXN0X2Zvcl9ub2RlKG5hY2wsIHNlX3RwZyk7CisJCVRQR19URk8oc2VfdHBnKS0+dHBnX3JlbGVhc2VfZmFicmljX2FjbChzZV90cGcsIG5hY2wpOworCisJCXNwaW5fbG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CiAKIAlpZiAoc2VfdHBnLT5zZV90cGdfdHlwZSA9PSBUUkFOU1BPUlRfVFBHX1RZUEVfTk9STUFMKQogCQljb3JlX3RwZ19yZWxlYXNlX3ZpcnR1YWxfbHVuMChzZV90cGcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYwppbmRleCAyOGI2MjkyZmYuLjIzNmUyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCkBAIC0zNzksNiArMzc5LDQwIEBACiAJc2VfZ2xvYmFsID0gTlVMTDsKIH0KIAorLyogU0NTSSBzdGF0aXN0aWNzIHRhYmxlIGluZGV4ICovCitzdGF0aWMgc3RydWN0IHNjc2lfaW5kZXhfdGFibGUgc2NzaV9pbmRleF90YWJsZTsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGluZGV4IHRhYmxlIGZvciBhbGxvY2F0aW5nIHVuaXF1ZSByb3cgaW5kZXhlcyB0byB2YXJpb3VzIG1pYgorICogdGFibGVzLgorICovCit2b2lkIGluaXRfc2NzaV9pbmRleF90YWJsZSh2b2lkKQoreworCW1lbXNldCgmc2NzaV9pbmRleF90YWJsZSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3NpX2luZGV4X3RhYmxlKSk7CisJc3Bpbl9sb2NrX2luaXQoJnNjc2lfaW5kZXhfdGFibGUubG9jayk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyByb3cgaW5kZXggZm9yIHRoZSBlbnRyeSB0eXBlIHNwZWNpZmllZAorICovCit1MzIgc2NzaV9nZXRfbmV3X2luZGV4KHNjc2lfaW5kZXhfdCB0eXBlKQoreworCXUzMiBuZXdfaW5kZXg7CisKKwlpZiAoKHR5cGUgPCAwKSB8fCAodHlwZSA+PSBTQ1NJX0lOREVYX1RZUEVfTUFYKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgaW5kZXggdHlwZSAlZFxuIiwgdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9jaygmc2NzaV9pbmRleF90YWJsZS5sb2NrKTsKKwluZXdfaW5kZXggPSArK3Njc2lfaW5kZXhfdGFibGUuc2NzaV9taWJfaW5kZXhbdHlwZV07CisJaWYgKG5ld19pbmRleCA9PSAwKQorCQluZXdfaW5kZXggPSArK3Njc2lfaW5kZXhfdGFibGUuc2NzaV9taWJfaW5kZXhbdHlwZV07CisJc3Bpbl91bmxvY2soJnNjc2lfaW5kZXhfdGFibGUubG9jayk7CisKKwlyZXR1cm4gbmV3X2luZGV4OworfQorCiB2b2lkIHRyYW5zcG9ydF9pbml0X3F1ZXVlX29iaihzdHJ1Y3Qgc2VfcXVldWVfb2JqICpxb2JqKQogewogCWF0b21pY19zZXQoJnFvYmotPnF1ZXVlX2NudCwgMCk7CkBAIC00MzcsNyArNDcxLDYgQEAKIAl9CiAJSU5JVF9MSVNUX0hFQUQoJnNlX3Nlc3MtPnNlc3NfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnNlX3Nlc3MtPnNlc3NfYWNsX2xpc3QpOwotCWF0b21pY19zZXQoJnNlX3Nlc3MtPm1pYl9yZWZfY291bnQsIDApOwogCiAJcmV0dXJuIHNlX3Nlc3M7CiB9CkBAIC01NDYsMTIgKzU3OSw2IEBACiAJCXRyYW5zcG9ydF9mcmVlX3Nlc3Npb24oc2Vfc2Vzcyk7CiAJCXJldHVybjsKIAl9Ci0JLyoKLQkgKiBXYWl0IGZvciBwb3NzaWJsZSByZWZlcmVuY2UgaW4gZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfbWliLmM6Ci0JICogc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zaG93KCkKLQkgKi8KLQl3aGlsZSAoYXRvbWljX3JlYWQoJnNlX3Nlc3MtPm1pYl9yZWZfY291bnQpICE9IDApCi0JCWNwdV9yZWxheCgpOwogCiAJc3Bpbl9sb2NrX2JoKCZzZV90cGctPnNlc3Npb25fbG9jayk7CiAJbGlzdF9kZWwoJnNlX3Nlc3MtPnNlc3NfbGlzdCk7CkBAIC01NzQsNyArNjAxLDYgQEAKIAkJCQlzcGluX3VubG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAogCQkJCWNvcmVfdHBnX3dhaXRfZm9yX25hY2xfcHJfcmVmKHNlX25hY2wpOwotCQkJCWNvcmVfdHBnX3dhaXRfZm9yX21pYl9yZWYoc2VfbmFjbCk7CiAJCQkJY29yZV9mcmVlX2RldmljZV9saXN0X2Zvcl9ub2RlKHNlX25hY2wsIHNlX3RwZyk7CiAJCQkJVFBHX1RGTyhzZV90cGcpLT50cGdfcmVsZWFzZV9mYWJyaWNfYWNsKHNlX3RwZywKIAkJCQkJCXNlX25hY2wpOwpAQCAtNDgyNyw2ICs0ODUzLDggQEAKIAogCQlyZXR1cm4gcmV0OwogCX0KKworCUJVR19PTihsaXN0X2VtcHR5KHNlX21lbV9saXN0KSk7CiAJLyoKIAkgKiBUaGlzIGlzIHRoZSBub3JtYWwgcGF0aCBmb3IgYWxsIG5vcm1hbCBub24gQklESSBhbmQgQklESS1DT01NQU5ECiAJICogV1JJVEUgcGF5bG9hZHMuLiAgSWYgd2UgbmVlZCB0byBkbyBCSURJIFJFQUQgcGFzc3Rocm91Z2ggZm9yCkBAIC01MDA4LDcgKzUwMzYsOSBAQAogCQlzdHJ1Y3Qgc2VfbWVtICpzZV9tZW0gPSBOVUxMLCAqc2VfbWVtX2xvdXQgPSBOVUxMOwogCQl1MzIgc2VfbWVtX2NudCA9IDAsIHRhc2tfb2Zmc2V0ID0gMDsKIAotCQlCVUdfT04obGlzdF9lbXB0eShjbWQtPnRfdGFzay0+dF9tZW1fbGlzdCkpOworCQlpZiAoIWxpc3RfZW1wdHkoVF9UQVNLKGNtZCktPnRfbWVtX2xpc3QpKQorCQkJc2VfbWVtID0gbGlzdF9lbnRyeShUX1RBU0soY21kKS0+dF9tZW1fbGlzdC0+bmV4dCwKKwkJCQkJc3RydWN0IHNlX21lbSwgc2VfbGlzdCk7CiAKIAkJcmV0ID0gdHJhbnNwb3J0X2RvX3NlX21lbV9tYXAoZGV2LCB0YXNrLAogCQkJCWNtZC0+dF90YXNrLT50X21lbV9saXN0LCBOVUxMLCBzZV9tZW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvS2NvbmZpZyBiL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnCmluZGV4IGY3YTVkYmEuLmJmN2M2ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnCkBAIC00LDcgKzQsNiBAQAogCiBtZW51Y29uZmlnIFRIRVJNQUwKIAl0cmlzdGF0ZSAiR2VuZXJpYyBUaGVybWFsIHN5c2ZzIGRyaXZlciIKLQlkZXBlbmRzIG9uIE5FVAogCWhlbHAKIAkgIEdlbmVyaWMgVGhlcm1hbCBTeXNmcyBkcml2ZXIgb2ZmZXJzIGEgZ2VuZXJpYyBtZWNoYW5pc20gZm9yCiAJICB0aGVybWFsIG1hbmFnZW1lbnQuIFVzdWFsbHkgaXQncyBtYWRlIHVwIG9mIG9uZSBvciBtb3JlIHRoZXJtYWwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX3N5cy5jIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKaW5kZXggN2QwZTYzYy4uNzEzYjdlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKQEAgLTYyLDIwICs2Miw2IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGhlcm1hbF9ldmVudF9zZXFudW07CiAKLXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgdGhlcm1hbF9ldmVudF9nZW5sX2ZhbWlseSA9IHsKLQkuaWQgPSBHRU5MX0lEX0dFTkVSQVRFLAotCS5uYW1lID0gVEhFUk1BTF9HRU5MX0ZBTUlMWV9OQU1FLAotCS52ZXJzaW9uID0gVEhFUk1BTF9HRU5MX1ZFUlNJT04sCi0JLm1heGF0dHIgPSBUSEVSTUFMX0dFTkxfQVRUUl9NQVgsCi19OwotCi1zdGF0aWMgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIHRoZXJtYWxfZXZlbnRfbWNncnAgPSB7Ci0JLm5hbWUgPSBUSEVSTUFMX0dFTkxfTUNBU1RfR1JPVVBfTkFNRSwKLX07Ci0KLXN0YXRpYyBpbnQgZ2VuZXRsaW5rX2luaXQodm9pZCk7Ci1zdGF0aWMgdm9pZCBnZW5ldGxpbmtfZXhpdCh2b2lkKTsKLQogc3RhdGljIGludCBnZXRfaWRyKHN0cnVjdCBpZHIgKmlkciwgc3RydWN0IG11dGV4ICpsb2NrLCBpbnQgKmlkKQogewogCWludCBlcnI7CkBAIC0xMjI1LDYgKzEyMTEsMTggQEAKIAogRVhQT1JUX1NZTUJPTCh0aGVybWFsX3pvbmVfZGV2aWNlX3VucmVnaXN0ZXIpOwogCisjaWZkZWYgQ09ORklHX05FVAorc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSB0aGVybWFsX2V2ZW50X2dlbmxfZmFtaWx5ID0geworCS5pZCA9IEdFTkxfSURfR0VORVJBVEUsCisJLm5hbWUgPSBUSEVSTUFMX0dFTkxfRkFNSUxZX05BTUUsCisJLnZlcnNpb24gPSBUSEVSTUFMX0dFTkxfVkVSU0lPTiwKKwkubWF4YXR0ciA9IFRIRVJNQUxfR0VOTF9BVFRSX01BWCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgdGhlcm1hbF9ldmVudF9tY2dycCA9IHsKKwkubmFtZSA9IFRIRVJNQUxfR0VOTF9NQ0FTVF9HUk9VUF9OQU1FLAorfTsKKwogaW50IGdlbmVyYXRlX25ldGxpbmtfZXZlbnQodTMyIG9yaWcsIGVudW0gZXZlbnRzIGV2ZW50KQogewogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMzAxLDYgKzEyOTksMTUgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgdm9pZCBnZW5ldGxpbmtfZXhpdCh2b2lkKQoreworCWdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoJnRoZXJtYWxfZXZlbnRfZ2VubF9mYW1pbHkpOworfQorI2Vsc2UgLyogIUNPTkZJR19ORVQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdlbmV0bGlua19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5ldGxpbmtfZXhpdCh2b2lkKSB7fQorI2VuZGlmIC8qICFDT05GSUdfTkVUICovCisKIHN0YXRpYyBpbnQgX19pbml0IHRoZXJtYWxfaW5pdCh2b2lkKQogewogCWludCByZXN1bHQgPSAwOwpAQCAtMTMxNiwxMSArMTMyMyw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgZ2VuZXRsaW5rX2V4aXQodm9pZCkKLXsKLQlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZ0aGVybWFsX2V2ZW50X2dlbmxfZmFtaWx5KTsKLX0KLQogc3RhdGljIHZvaWQgX19leGl0IHRoZXJtYWxfZXhpdCh2b2lkKQogewogCWNsYXNzX3VucmVnaXN0ZXIoJnRoZXJtYWxfY2xhc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvaHZjL01ha2VmaWxlIGIvZHJpdmVycy90dHkvaHZjL01ha2VmaWxlCmluZGV4IGU2YmVkNWYuLmQ3OWU3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L2h2Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3R0eS9odmMvTWFrZWZpbGUKQEAgLTEwLDQgKzEwLDMgQEAKIG9iai0kKENPTkZJR19IVkNfSVVDVikJCSs9IGh2Y19pdWN2Lm8KIG9iai0kKENPTkZJR19IVkNfVURCRykJCSs9IGh2Y191ZGJnLm8KIG9iai0kKENPTkZJR19IVkNTKQkJKz0gaHZjcy5vCi1vYmotJChDT05GSUdfVklSVElPX0NPTlNPTEUpCSs9IHZpcnRpb19jb25zb2xlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25fZ3NtLmMgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCmluZGV4IDQ0Yjg0MTIuLmFhMmU1ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fZ3NtLmMKKysrIGIvZHJpdmVycy90dHkvbl9nc20uYwpAQCAtMjQxNCw2ICsyNDE0LDcgQEAKIAogCWdzbS0+aW5pdGlhdG9yID0gYy0+aW5pdGlhdG9yOwogCWdzbS0+bXJ1ID0gYy0+bXJ1OworCWdzbS0+bXR1ID0gYy0+bXR1OwogCWdzbS0+ZW5jb2RpbmcgPSBjLT5lbmNhcHN1bGF0aW9uOwogCWdzbS0+YWRhcHRpb24gPSBjLT5hZGFwdGlvbjsKIAlnc20tPm4yID0gYy0+bjI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9uX2hkbGMuYyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCmluZGV4IDQ3ZDMyMjguLjUyZmMwYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25faGRsYy5jCisrKyBiL2RyaXZlcnMvdHR5L25faGRsYy5jCkBAIC01ODEsOCArNTgxLDkgQEAKIAkJCSAgIF9fdTggX191c2VyICpidWYsIHNpemVfdCBucikKIHsKIAlzdHJ1Y3Qgbl9oZGxjICpuX2hkbGMgPSB0dHkybl9oZGxjKHR0eSk7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgbl9oZGxjX2J1ZiAqcmJ1ZjsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAogCWlmIChkZWJ1Z2xldmVsID49IERFQlVHX0xFVkVMX0lORk8pCQogCQlwcmludGsoIiVzKCVkKW5faGRsY190dHlfcmVhZCgpIGNhbGxlZFxuIixfX0ZJTEVfXyxfX0xJTkVfXyk7CkBAIC01OTgsNTcgKzU5OSw1NSBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQl0dHlfbG9jaygpOworCWFkZF93YWl0X3F1ZXVlKCZ0dHktPnJlYWRfd2FpdCwgJndhaXQpOwogCiAJZm9yICg7OykgewogCQlpZiAodGVzdF9iaXQoVFRZX09USEVSX0NMT1NFRCwgJnR0eS0+ZmxhZ3MpKSB7Ci0JCQl0dHlfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gLUVJTzsKKwkJCXJldCA9IC1FSU87CisJCQlicmVhazsKIAkJfQorCQlpZiAodHR5X2h1bmdfdXBfcChmaWxlKSkKKwkJCWJyZWFrOwogCi0JCW5faGRsYyA9IHR0eTJuX2hkbGMgKHR0eSk7Ci0JCWlmICghbl9oZGxjIHx8IG5faGRsYy0+bWFnaWMgIT0gSERMQ19NQUdJQyB8fAotCQkJIHR0eSAhPSBuX2hkbGMtPnR0eSkgewotCQkJdHR5X3VubG9jaygpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCQlyYnVmID0gbl9oZGxjX2J1Zl9nZXQoJm5faGRsYy0+cnhfYnVmX2xpc3QpOwotCQlpZiAocmJ1ZikKKwkJaWYgKHJidWYpIHsKKwkJCWlmIChyYnVmLT5jb3VudCA+IG5yKSB7CisJCQkJLyogdG9vIGxhcmdlIGZvciBjYWxsZXIncyBidWZmZXIgKi8KKwkJCQlyZXQgPSAtRU9WRVJGTE9XOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+YnVmLCByYnVmLT5jb3VudCkpCisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZWxzZQorCQkJCQlyZXQgPSByYnVmLT5jb3VudDsKKwkJCX0KKworCQkJaWYgKG5faGRsYy0+cnhfZnJlZV9idWZfbGlzdC5jb3VudCA+CisJCQkgICAgREVGQVVMVF9SWF9CVUZfQ09VTlQpCisJCQkJa2ZyZWUocmJ1Zik7CisJCQllbHNlCisJCQkJbl9oZGxjX2J1Zl9wdXQoJm5faGRsYy0+cnhfZnJlZV9idWZfbGlzdCwgcmJ1Zik7CiAJCQlicmVhazsKKwkJfQogCQkJCiAJCS8qIG5vIGRhdGEgKi8KIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQl0dHlfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKKwkJCXJldCA9IC1FQUdBSU47CisJCQlicmVhazsKIAkJfQotCQkJCi0JCWludGVycnVwdGlibGVfc2xlZXBfb24gKCZ0dHktPnJlYWRfd2FpdCk7CisKKwkJc2NoZWR1bGUoKTsKKwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXR0eV91bmxvY2soKTsKLQkJCXJldHVybiAtRUlOVFI7CisJCQlyZXQgPSAtRUlOVFI7CisJCQlicmVhazsKIAkJfQogCX0KLQkJCi0JaWYgKHJidWYtPmNvdW50ID4gbnIpCi0JCS8qIGZyYW1lIHRvbyBsYXJnZSBmb3IgY2FsbGVyJ3MgYnVmZmVyIChkaXNjYXJkIGZyYW1lKSAqLwotCQlyZXQgPSAtRU9WRVJGTE9XOwotCWVsc2UgewotCQkvKiBDb3B5IHRoZSBkYXRhIHRvIHRoZSBjYWxsZXIncyBidWZmZXIgKi8KLQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIHJidWYtPmJ1ZiwgcmJ1Zi0+Y291bnQpKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJZWxzZQotCQkJcmV0ID0gcmJ1Zi0+Y291bnQ7Ci0JfQotCQotCS8qIHJldHVybiBIRExDIGJ1ZmZlciB0byBmcmVlIGxpc3QgdW5sZXNzIHRoZSBmcmVlIGxpc3QgKi8KLQkvKiBjb3VudCBoYXMgZXhjZWVkZWQgdGhlIGRlZmF1bHQgdmFsdWUsIGluIHdoaWNoIGNhc2UgdGhlICovCi0JLyogYnVmZmVyIGlzIGZyZWVkIGJhY2sgdG8gdGhlIE9TIHRvIGNvbnNlcnZlIG1lbW9yeSAqLwotCWlmIChuX2hkbGMtPnJ4X2ZyZWVfYnVmX2xpc3QuY291bnQgPiBERUZBVUxUX1JYX0JVRl9DT1VOVCkKLQkJa2ZyZWUocmJ1Zik7Ci0JZWxzZQkKLQkJbl9oZGxjX2J1Zl9wdXQoJm5faGRsYy0+cnhfZnJlZV9idWZfbGlzdCxyYnVmKTsKLQl0dHlfdW5sb2NrKCk7CisKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT5yZWFkX3dhaXQsICZ3YWl0KTsKKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKIAlyZXR1cm4gcmV0OwogCQogfQkvKiBlbmQgb2Ygbl9oZGxjX3R0eV9yZWFkKCkgKi8KQEAgLTY5MSwxNCArNjkwLDE1IEBACiAJCWNvdW50ID0gbWF4ZnJhbWU7CiAJfQogCQotCXR0eV9sb2NrKCk7Ci0KIAlhZGRfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCWZvciAoOzspIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkKLQkvKiBBbGxvY2F0ZSB0cmFuc21pdCBidWZmZXIgKi8KLQkvKiBzbGVlcCB1bnRpbCB0cmFuc21pdCBidWZmZXIgYXZhaWxhYmxlICovCQkKLQl3aGlsZSAoISh0YnVmID0gbl9oZGxjX2J1Zl9nZXQoJm5faGRsYy0+dHhfZnJlZV9idWZfbGlzdCkpKSB7CisJCXRidWYgPSBuX2hkbGNfYnVmX2dldCgmbl9oZGxjLT50eF9mcmVlX2J1Zl9saXN0KTsKKwkJaWYgKHRidWYpCisJCQlicmVhazsKKwogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKIAkJCWVycm9yID0gLUVBR0FJTjsKIAkJCWJyZWFrOwpAQCAtNzE5LDcgKzcxOSw3IEBACiAJCX0KIAl9CiAKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CiAKIAlpZiAoIWVycm9yKSB7CQkKQEAgLTczMSw3ICs3MzEsNyBAQAogCQluX2hkbGNfYnVmX3B1dCgmbl9oZGxjLT50eF9idWZfbGlzdCx0YnVmKTsKIAkJbl9oZGxjX3NlbmRfZnJhbWVzKG5faGRsYyx0dHkpOwogCX0KLQl0dHlfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyb3I7CiAJCiB9CS8qIGVuZCBvZiBuX2hkbGNfdHR5X3dyaXRlKCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC82ODMyOHNlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzI4c2VyaWFsLmMKaW5kZXggYmUwZWJjZS4uZGUwMTYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzY4MzI4c2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzI4c2VyaWFsLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiBzdGF0aWMgdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCBtNjhrX3NlcmlhbCAqaW5mbywgdW5zaWduZWQgc2hvcnQgcngpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnBvcnQudHR5OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBpbmZvLT50dHk7CiAJbTY4MzI4X3VhcnQgKnVhcnQgPSAmdWFydF9hZGRyW2luZm8tPmxpbmVdOwogCXVuc2lnbmVkIGNoYXIgY2gsIGZsYWc7CiAKQEAgLTMyOSw3ICszMjksNyBAQAogCQlnb3RvIGNsZWFyX2FuZF9yZXR1cm47CiAJfQogCi0JaWYoKGluZm8tPnhtaXRfY250IDw9IDApIHx8IGluZm8tPnBvcnQudHR5LT5zdG9wcGVkKSB7CisJaWYoKGluZm8tPnhtaXRfY250IDw9IDApIHx8IGluZm8tPnR0eS0+c3RvcHBlZCkgewogCQkvKiBUaGF0J3MgcGVjdWxpYXIuLi4gVFggaW50cyBvZmYgKi8KIAkJdWFydC0+dXN0Y250ICY9IH5VU1RDTlRfVFhfSU5UUl9NQVNLOwogCQlnb3RvIGNsZWFyX2FuZF9yZXR1cm47CkBAIC0zODMsNyArMzgzLDcgQEAKIAlzdHJ1Y3QgbTY4a19zZXJpYWwJKmluZm8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG02OGtfc2VyaWFsLCB0cXVldWUpOwogCXN0cnVjdCB0dHlfc3RydWN0CSp0dHk7CiAJCi0JdHR5ID0gaW5mby0+cG9ydC50dHk7CisJdHR5ID0gaW5mby0+dHR5OwogCWlmICghdHR5KQogCQlyZXR1cm47CiAjaWYgMApAQCAtNDA3LDcgKzQwNyw3IEBACiAJc3RydWN0IG02OGtfc2VyaWFsCSppbmZvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtNjhrX3NlcmlhbCwgdHF1ZXVlX2hhbmd1cCk7CiAJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKIAkKLQl0dHkgPSBpbmZvLT5wb3J0LnR0eTsKKwl0dHkgPSBpbmZvLT50dHk7CiAJaWYgKCF0dHkpCiAJCXJldHVybjsKIApAQCAtNDUxLDggKzQ1MSw4IEBACiAJdWFydC0+dXN0Y250ID0gVVNUQ05UX1VFTiB8IFVTVENOVF9SWEVOIHwgVVNUQ05UX1JYX0lOVFJfTUFTSzsKICNlbmRpZgogCi0JaWYgKGluZm8tPnBvcnQudHR5KQotCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+dHR5KQorCQljbGVhcl9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+dHR5LT5mbGFncyk7CiAJaW5mby0+eG1pdF9jbnQgPSBpbmZvLT54bWl0X2hlYWQgPSBpbmZvLT54bWl0X3RhaWwgPSAwOwogCiAJLyoKQEAgLTQ4Niw4ICs0ODYsOCBAQAogCQlpbmZvLT54bWl0X2J1ZiA9IDA7CiAJfQogCi0JaWYgKGluZm8tPnBvcnQudHR5KQotCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnBvcnQudHR5LT5mbGFncyk7CisJaWYgKGluZm8tPnR0eSkKKwkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKIAkKIAlpbmZvLT5mbGFncyAmPSB+U19JTklUSUFMSVpFRDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC01NTMsOSArNTUzLDkgQEAKIAl1bnNpZ25lZCBjZmxhZzsKIAlpbnQJaTsKIAotCWlmICghaW5mby0+cG9ydC50dHkgfHwgIWluZm8tPnBvcnQudHR5LT50ZXJtaW9zKQorCWlmICghaW5mby0+dHR5IHx8ICFpbmZvLT50dHktPnRlcm1pb3MpCiAJCXJldHVybjsKLQljZmxhZyA9IGluZm8tPnBvcnQudHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWNmbGFnID0gaW5mby0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCWlmICghKHBvcnQgPSBpbmZvLT5wb3J0KSkKIAkJcmV0dXJuOwogCkBAIC05NzAsNyArOTcwLDYgQEAKIHN0YXRpYyBpbnQgcnNfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0JaW50IGVycm9yOwogCXN0cnVjdCBtNjhrX3NlcmlhbCAqIGluZm8gPSAoc3RydWN0IG02OGtfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcmV0dmFsOwogCkBAIC0xMTA0LDcgKzExMDMsNyBAQAogCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCXR0eS0+Y2xvc2luZyA9IDA7CiAJaW5mby0+ZXZlbnQgPSAwOwotCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKKwlpbmZvLT50dHkgPSBOVUxMOwogI3dhcm5pbmcgIlRoaXMgaXMgbm90IGFuZCBoYXMgbmV2ZXIgYmVlbiB2YWxpZCBzbyBmaXggaXQiCQogI2lmIDAKIAlpZiAodHR5LT5sZGlzYy5udW0gIT0gbGRpc2NzW05fVFRZXS5udW0pIHsKQEAgLTExNDIsNyArMTE0MSw3IEBACiAJaW5mby0+ZXZlbnQgPSAwOwogCWluZm8tPmNvdW50ID0gMDsKIAlpbmZvLT5mbGFncyAmPSB+U19OT1JNQUxfQUNUSVZFOwotCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKKwlpbmZvLT50dHkgPSBOVUxMOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKIH0KIApAQCAtMTI2MSw3ICsxMjYwLDcgQEAKIAogCWluZm8tPmNvdW50Kys7CiAJdHR5LT5kcml2ZXJfZGF0YSA9IGluZm87Ci0JaW5mby0+cG9ydC50dHkgPSB0dHk7CisJaW5mby0+dHR5ID0gdHR5OwogCiAJLyoKIAkgKiBTdGFydCB1cCBzZXJpYWwgcG9ydApAQCAtMTMzOCw3ICsxMzM3LDcgQEAKIAkgICAgaW5mbyA9ICZtNjhrX3NvZnRbaV07CiAJICAgIGluZm8tPm1hZ2ljID0gU0VSSUFMX01BR0lDOwogCSAgICBpbmZvLT5wb3J0ID0gKGludCkgJnVhcnRfYWRkcltpXTsKLQkgICAgaW5mby0+cG9ydC50dHkgPSBOVUxMOworCSAgICBpbmZvLT50dHkgPSBOVUxMOwogCSAgICBpbmZvLT5pcnEgPSB1YXJ0X2lycXNbaV07CiAJICAgIGluZm8tPmN1c3RvbV9kaXZpc29yID0gMTY7CiAJICAgIGluZm8tPmNsb3NlX2RlbGF5ID0gNTA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvNjgzNjBzZXJpYWwuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC82ODM2MHNlcmlhbC5jCmluZGV4IDg4YjEzMzUuLmJjMjFlZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC82ODM2MHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC82ODM2MHNlcmlhbC5jCkBAIC0yNDI4LDYgKzI0MjgsNyBAQAogCS8qIC5yZWFkX3Byb2MgPSByc18zNjBfcmVhZF9wcm9jLCAqLwogCS50aW9jbWdldCA9IHJzXzM2MF90aW9jbWdldCwKIAkudGlvY21zZXQgPSByc18zNjBfdGlvY21zZXQsCisJLmdldF9pY291bnQgPSByc18zNjBfZ2V0X2ljb3VudCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJzXzM2MF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwppbmRleCBiMjVlNmU0Li4zOTc1ZGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKQEAgLTIzNiw3ICsyMzYsOCBAQAogCQkuZmlmb19zaXplCT0gMTI4LAogCQkudHhfbG9hZHN6CT0gMTI4LAogCQkuZmNyCQk9IFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwgVUFSVF9GQ1JfUl9UUklHXzEwLAotCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX0VGUiB8IFVBUlRfQ0FQX1NMRUVQLAorCQkvKiBVQVJUX0NBUF9FRlIgYnJlYWtzIGJpbGxpb25vbiBDRiBibHVldG9vdGggY2FyZC4gKi8KKwkJLmZsYWdzCQk9IFVBUlRfQ0FQX0ZJRk8gfCBVQVJUX0NBUF9TTEVFUCwKIAl9LAogCVtQT1JUXzE2NjU0XSA9IHsKIAkJLm5hbWUJCT0gIlNUMTY2NTQiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwppbmRleCBiMTY4MmQ3Li4yYjgzMzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZwpAQCAtMTUxOCw2ICsxNTE4LDcgQEAKIGNvbmZpZyBTRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUCiAJdHJpc3RhdGUgIkdSTElCIEFQQlVBUlQgc2VyaWFsIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBTRVJJQUxfQ09SRQogCS0tLWhlbHAtLS0KIAlBZGQgc3VwcG9ydCBmb3IgdGhlIEdSTElCIEFQQlVBUlQgc2VyaWFsIHBvcnQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9iZmluXzV4eC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fNXh4LmMKaW5kZXggZTM4MWI4OS4uOWIxZmYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fNXh4LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fNXh4LmMKQEAgLTM3MCwxMCArMzcwLDggQEAKIHsKIAlzdHJ1Y3QgYmZpbl9zZXJpYWxfcG9ydCAqdWFydCA9IGRldl9pZDsKIAotCXNwaW5fbG9jaygmdWFydC0+cG9ydC5sb2NrKTsKIAl3aGlsZSAoVUFSVF9HRVRfTFNSKHVhcnQpICYgRFIpCiAJCWJmaW5fc2VyaWFsX3J4X2NoYXJzKHVhcnQpOwotCXNwaW5fdW5sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDkwLDkgKzQ4OCw4IEBACiB7CiAJaW50IHhfcG9zLCBwb3M7CiAKLQlkbWFfZGlzYWJsZV9pcnEodWFydC0+dHhfZG1hX2NoYW5uZWwpOwotCWRtYV9kaXNhYmxlX2lycSh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7Ci0Jc3Bpbl9sb2NrX2JoKCZ1YXJ0LT5wb3J0LmxvY2spOworCWRtYV9kaXNhYmxlX2lycV9ub3N5bmModWFydC0+cnhfZG1hX2NoYW5uZWwpOworCXNwaW5fbG9ja19iaCgmdWFydC0+cnhfbG9jayk7CiAKIAkvKiAyRCBETUEgUlggYnVmZmVyIHJpbmcgaXMgdXNlZC4gQmVjYXVzZSBjdXJyX3lfY291bnQgYW5kCiAJICogY3Vycl94X2NvdW50IGNhbid0IGJlIHJlYWQgYXMgYW4gYXRvbWljIG9wZXJhdGlvbiwKQEAgLTUyMyw4ICs1MjAsNyBAQAogCQl1YXJ0LT5yeF9kbWFfYnVmLnRhaWwgPSB1YXJ0LT5yeF9kbWFfYnVmLmhlYWQ7CiAJfQogCi0Jc3Bpbl91bmxvY2tfYmgoJnVhcnQtPnBvcnQubG9jayk7Ci0JZG1hX2VuYWJsZV9pcnEodWFydC0+dHhfZG1hX2NoYW5uZWwpOworCXNwaW5fdW5sb2NrX2JoKCZ1YXJ0LT5yeF9sb2NrKTsKIAlkbWFfZW5hYmxlX2lycSh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CiAKIAltb2RfdGltZXIoJih1YXJ0LT5yeF9kbWFfdGltZXIpLCBqaWZmaWVzICsgRE1BX1JYX0ZMVVNIX0pJRkZJRVMpOwpAQCAtNTcxLDcgKzU2Nyw3IEBACiAJdW5zaWduZWQgc2hvcnQgaXJxc3RhdDsKIAlpbnQgeF9wb3MsIHBvczsKIAotCXNwaW5fbG9jaygmdWFydC0+cG9ydC5sb2NrKTsKKwlzcGluX2xvY2soJnVhcnQtPnJ4X2xvY2spOwogCWlycXN0YXQgPSBnZXRfZG1hX2N1cnJfaXJxc3RhdCh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CiAJY2xlYXJfZG1hX2lycXN0YXQodWFydC0+cnhfZG1hX2NoYW5uZWwpOwogCkBAIC01ODksNyArNTg1LDcgQEAKIAkJdWFydC0+cnhfZG1hX2J1Zi50YWlsID0gdWFydC0+cnhfZG1hX2J1Zi5oZWFkOwogCX0KIAotCXNwaW5fdW5sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOworCXNwaW5fdW5sb2NrKCZ1YXJ0LT5yeF9sb2NrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEzMzIsNiArMTMyOCw3IEBACiAJCX0KIAogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9ETUEKKwkJc3Bpbl9sb2NrX2luaXQoJnVhcnQtPnJ4X2xvY2spOwogCQl1YXJ0LT50eF9kb25lCSAgICA9IDE7CiAJCXVhcnQtPnR4X2NvdW50CSAgICA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTAwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwMC5jCmluZGV4IGJlYjFhZmEyLi43Yjk1MWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwMC5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTAwLmMKQEAgLTYwMSw3ICs2MDEsNyBAQAogCXMtPnJ0cyA9IDA7CiAKIAlzcHJpbnRmKGIsICJtYXgzMTAwLSVkIiwgcy0+bWlub3IpOwotCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZShiKTsKKwlzLT53b3JrcXVldWUgPSBjcmVhdGVfZnJlZXphYmxlX3dvcmtxdWV1ZShiKTsKIAlpZiAoIXMtPndvcmtxdWV1ZSkgewogCQlkZXZfd2Fybigmcy0+c3BpLT5kZXYsICJjYW5ub3QgY3JlYXRlIHdvcmtxdWV1ZVxuIik7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwNy5jIGIvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDcuYwppbmRleCA5MTA4NzBlLi43NTBiNGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwNy5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmMKQEAgLTgzMyw3ICs4MzMsNyBAQAogCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnMgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IG1heDMxMDdfcG9ydCwgcG9ydCk7CiAKIAkvKiBJbml0aWFsaXplIHdvcmsgcXVldWUgKi8KLQlzLT53b3JrcXVldWUgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoIm1heDMxMDciKTsKKwlzLT53b3JrcXVldWUgPSBjcmVhdGVfZnJlZXphYmxlX3dvcmtxdWV1ZSgibWF4MzEwNyIpOwogCWlmICghcy0+d29ya3F1ZXVlKSB7CiAJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiV29ya3F1ZXVlIGNyZWF0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NzLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NzLmMKaW5kZXggOTM3NjBiMi4uMWVmNGRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jcy5jCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY3MuYwpAQCAtNzEyLDYgKzcxMiw3IEBACiAJUENNQ0lBX1BGQ19ERVZJQ0VfUFJPRF9JRDEyKDEsICJYaXJjb20iLCAiQ3JlZGl0Q2FyZCBFdGhlcm5ldCtNb2RlbSBJSSIsIDB4MmUzZWU4NDUsIDB4ZWNhNDAxYmYpLAogCVBDTUNJQV9QRkNfREVWSUNFX01BTkZfQ0FSRCgxLCAweDAwMzIsIDB4MGUwMSksCiAJUENNQ0lBX1BGQ19ERVZJQ0VfTUFORl9DQVJEKDEsIDB4MDAzMiwgMHgwYTA1KSwKKwlQQ01DSUFfUEZDX0RFVklDRV9NQU5GX0NBUkQoMSwgMHgwMDMyLCAweDBiMDUpLAogCVBDTUNJQV9QRkNfREVWSUNFX01BTkZfQ0FSRCgxLCAweDAwMzIsIDB4MTEwMSksCiAJUENNQ0lBX01GQ19ERVZJQ0VfTUFORl9DQVJEKDAsIDB4MDEwNCwgMHgwMDcwKSwKIAlQQ01DSUFfTUZDX0RFVklDRV9NQU5GX0NBUkQoMSwgMHgwMTAxLCAweDA1NjIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc3lzcnEuYyBiL2RyaXZlcnMvdHR5L3N5c3JxLmMKaW5kZXggOGUwZGQyNS4uODFmMTM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc3lzcnEuYworKysgYi9kcml2ZXJzL3R0eS9zeXNycS5jCkBAIC01NzEsNiArNTcxLDcgQEAKIAl1bnNpZ25lZCBpbnQgYWx0X3VzZTsKIAlib29sIGFjdGl2ZTsKIAlib29sIG5lZWRfcmVpbmplY3Q7CisJYm9vbCByZWluamVjdGluZzsKIH07CiAKIHN0YXRpYyB2b2lkIHN5c3JxX3JlaW5qZWN0X2FsdF9zeXNycShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC01ODEsNiArNTgyLDEwIEBACiAJdW5zaWduZWQgaW50IGFsdF9jb2RlID0gc3lzcnEtPmFsdF91c2U7CiAKIAlpZiAoc3lzcnEtPm5lZWRfcmVpbmplY3QpIHsKKwkJLyogd2UgZG8gbm90IHdhbnQgdGhlIGFzc2lnbm1lbnQgdG8gYmUgcmVvcmRlcmVkICovCisJCXN5c3JxLT5yZWluamVjdGluZyA9IHRydWU7CisJCW1iKCk7CisKIAkJLyogU2ltdWxhdGUgcHJlc3MgYW5kIHJlbGVhc2Ugb2YgQWx0ICsgU3lzUnEgKi8KIAkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfS0VZLCBhbHRfY29kZSwgMSk7CiAJCWlucHV0X2luamVjdF9ldmVudChoYW5kbGUsIEVWX0tFWSwgS0VZX1NZU1JRLCAxKTsKQEAgLTU4OSw2ICs1OTQsOSBAQAogCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9LRVksIEtFWV9TWVNSUSwgMCk7CiAJCWlucHV0X2luamVjdF9ldmVudChoYW5kbGUsIEVWX0tFWSwgYWx0X2NvZGUsIDApOwogCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9TWU4sIFNZTl9SRVBPUlQsIDEpOworCisJCW1iKCk7CisJCXN5c3JxLT5yZWluamVjdGluZyA9IGZhbHNlOwogCX0KIH0KIApAQCAtNTk5LDYgKzYwNywxMyBAQAogCWJvb2wgd2FzX2FjdGl2ZSA9IHN5c3JxLT5hY3RpdmU7CiAJYm9vbCBzdXBwcmVzczsKIAorCS8qCisJICogRG8gbm90IGZpbHRlciBhbnl0aGluZyBpZiB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcmUtaW5qZWN0aW5nCisJICogQWx0K1N5c1JxIGNvbWJpbmF0aW9uLgorCSAqLworCWlmIChzeXNycS0+cmVpbmplY3RpbmcpCisJCXJldHVybiBmYWxzZTsKKwogCXN3aXRjaCAodHlwZSkgewogCiAJY2FzZSBFVl9TWU46CkBAIC02MjksNyArNjQ0LDcgQEAKIAkJCQlzeXNycS0+YWx0X3VzZSA9IHN5c3JxLT5hbHQ7CiAJCQkJLyoKIAkJCQkgKiBJZiBub3RoaW5nIGVsc2Ugd2lsbCBiZSBwcmVzc2VkIHdlJ2xsIG5lZWQKLQkJCQkgKiB0byAqIHJlLWluamVjdCBBbHQtU3lzUnEga2V5c3Jva2UuCisJCQkJICogdG8gcmUtaW5qZWN0IEFsdC1TeXNScSBrZXlzcm9rZS4KIAkJCQkgKi8KIAkJCQlzeXNycS0+bmVlZF9yZWluamVjdCA9IHRydWU7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS90dHlfaW8uYyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jCmluZGV4IDYxNThlYWUuLjAwNjVkYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9pby5jCisrKyBiL2RyaXZlcnMvdHR5L3R0eV9pby5jCkBAIC0zMjU3LDcgKzMyNTcsNyBAQAogCXNzaXplX3QgY291bnQgPSAwOwogCiAJY29uc29sZV9sb2NrKCk7Ci0JZm9yIChjID0gY29uc29sZV9kcml2ZXJzOyBjOyBjID0gYy0+bmV4dCkgeworCWZvcl9lYWNoX2NvbnNvbGUoYykgewogCQlpZiAoIWMtPmRldmljZSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIWMtPndyaXRlKQpAQCAtMzMwNiw3ICszMzA2LDcgQEAKIAlpZiAoSVNfRVJSKGNvbnNkZXYpKQogCQljb25zZGV2ID0gTlVMTDsKIAllbHNlCi0JCWRldmljZV9jcmVhdGVfZmlsZShjb25zZGV2LCAmZGV2X2F0dHJfYWN0aXZlKTsKKwkJV0FSTl9PTihkZXZpY2VfY3JlYXRlX2ZpbGUoY29uc2RldiwgJmRldl9hdHRyX2FjdGl2ZSkgPCAwKTsKIAogI2lmZGVmIENPTkZJR19WVAogCXZ0eV9pbml0KCZjb25zb2xlX2ZvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvdnQuYyBiL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKaW5kZXggYjIzMGJkMy4uMTQ3ZWRlMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3Z0L3Z0LmMKKysrIGIvZHJpdmVycy90dHkvdnQvdnQuYwpAQCAtMjk5NCw3ICsyOTk0LDcgQEAKIAlpZiAoSVNfRVJSKHR0eTBkZXYpKQogCQl0dHkwZGV2ID0gTlVMTDsKIAllbHNlCi0JCWRldmljZV9jcmVhdGVfZmlsZSh0dHkwZGV2LCAmZGV2X2F0dHJfYWN0aXZlKTsKKwkJV0FSTl9PTihkZXZpY2VfY3JlYXRlX2ZpbGUodHR5MGRldiwgJmRldl9hdHRyX2FjdGl2ZSkgPCAwKTsKIAogCXZjc19pbml0KCk7CiAKQEAgLTM1NDUsNyArMzU0NSw3IEBACiAKIAkJLyogYWxyZWFkeSByZWdpc3RlcmVkICovCiAJCWlmIChjb25fZHJpdmVyLT5jb24gPT0gY3N3KQotCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCXJldHZhbCA9IC1FQlVTWTsKIAl9CiAKIAlpZiAocmV0dmFsKQpAQCAtMzY1Niw3ICszNjU2LDEyIEBACiAJaW50IGVycjsKIAogCWVyciA9IHJlZ2lzdGVyX2Nvbl9kcml2ZXIoY3N3LCBmaXJzdCwgbGFzdCk7Ci0KKwkvKiBpZiB3ZSBnZXQgYW4gYnVzeSBlcnJvciB3ZSBzdGlsbCB3YW50IHRvIGJpbmQgdGhlIGNvbnNvbGUgZHJpdmVyCisJICogYW5kIHJldHVybiBzdWNjZXNzLCBhcyB3ZSBtYXkgaGF2ZSB1bmJvdW5kIHRoZSBjb25zb2xlIGRyaXZlcgorCcKgKiBidXQgbm90IHVucmVnaXN0ZXJlZCBpdC4KKwkqLworCWlmIChlcnIgPT0gLUVCVVNZKQorCQllcnIgPSAwOwogCWlmICghZXJyKQogCQliaW5kX2Nvbl9kcml2ZXIoY3N3LCBmaXJzdCwgbGFzdCwgZGVmbHQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggZDZlZGU5OC4uNGFiNDlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMTYwNyw2ICsxNjA3LDcgQEAKIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMTU0KSwgfSwgLyogTm9raWEgNTgwMCBYcHJlc3NNdXNpYyAqLwogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDA0Y2UpLCB9LCAvKiBOb2tpYSBFOTAgKi8KIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMWQ0KSwgfSwgLyogTm9raWEgRTU1ICovCisJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDMwMiksIH0sIC8qIE5va2lhIE44ICovCiAJeyBTQU1TVU5HX1BDU1VJVEVfQUNNX0lORk8oMHg2NjUxKSwgfSwgLyogU2Ftc3VuZyBHVGk4NTEwIChJTk5PVjgpICovCiAKIAkvKiBOT1RFOiBub24tTm9raWEgQ09NTS9BQ00vMHhmZiBpcyBsaWtlbHkgTVNGVCBSTkRJUy4uLiBOT1QgYSBtb2RlbSEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYwppbmRleCA2ZWU0NDUxLi40NzA4NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCkBAIC0zNDIsNyArMzQyLDcgQEAKIAkJZ290byBvdXRucDsKIAl9CiAKLQlpZiAoIWZpbGUtPmZfZmxhZ3MgJiYgT19OT05CTE9DSykKKwlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCiAJCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGVzYy0+d2FpdCwgIXRlc3RfYml0KFdETV9JTl9VU0UsCiAJCQkJCQkJCSZkZXNjLT5mbGFncykpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwppbmRleCA5ZGEyNTA1Li5kZjUwMmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCkBAIC0xOTIsMTIgKzE5MiwxMiBAQAogCWVwX2Rldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAllcF9kZXYtPmRldi5yZWxlYXNlID0gZXBfZGV2aWNlX3JlbGVhc2U7CiAJZGV2X3NldF9uYW1lKCZlcF9kZXYtPmRldiwgImVwXyUwMngiLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKLQlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJmVwX2Rldi0+ZGV2KTsKIAogCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmZXBfZGV2LT5kZXYpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CiAKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJmVwX2Rldi0+ZGV2KTsKIAllbmRwb2ludC0+ZXBfZGV2ID0gZXBfZGV2OwogCXJldHVybiByZXR2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKaW5kZXggYjU1ZDQ2MC4uZjcxZThlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKQEAgLTQwNSw3ICs0MDUsMTIgQEAKIAkJCXJldHVybiByZXR2YWw7CiAJfQogCi0Jc3luY2hyb25pemVfaXJxKHBjaV9kZXYtPmlycSk7CisJLyogSWYgTVNJLVggaXMgZW5hYmxlZCwgdGhlIGRyaXZlciB3aWxsIGhhdmUgc3luY2hyb25pemVkIGFsbCB2ZWN0b3JzCisJICogaW4gcGNpX3N1c3BlbmQoKS4gSWYgTVNJIG9yIGxlZ2FjeSBQQ0kgaXMgZW5hYmxlZCwgdGhhdCB3aWxsIGJlCisJICogc3luY2hyb25pemVkIGhlcmUuCisJICovCisJaWYgKCFoY2QtPm1zaXhfZW5hYmxlZCkKKwkJc3luY2hyb25pemVfaXJxKHBjaV9kZXYtPmlycSk7CiAKIAkvKiBEb3duc3RyZWFtIHBvcnRzIGZyb20gdGhpcyByb290IGh1YiBzaG91bGQgYWxyZWFkeSBiZSBxdWllc2NlZCwgc28KIAkgKiB0aGVyZSB3aWxsIGJlIG5vIERNQSBhY3Rpdml0eS4gIE5vdyB3ZSBjYW4gc2h1dCBkb3duIHRoZSB1cHN0cmVhbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggNmE5NTAxNy4uZTkzNWY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0xOTU1LDcgKzE5NTUsNiBAQAogCiAJZGV2X2RiZygmcmhkZXYtPmRldiwgInVzYiAlcyVzXG4iLAogCQkJKG1zZy5ldmVudCAmIFBNX0VWRU5UX0FVVE8gPyAiYXV0by0iIDogIiIpLCAicmVzdW1lIik7Ci0JY2xlYXJfYml0KEhDRF9GTEFHX1dBS0VVUF9QRU5ESU5HLCAmaGNkLT5mbGFncyk7CiAJaWYgKCFoY2QtPmRyaXZlci0+YnVzX3Jlc3VtZSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfUlVOTklORykKQEAgLTE5NjMsNiArMTk2Miw3IEBACiAKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfUkVTVU1JTkc7CiAJc3RhdHVzID0gaGNkLT5kcml2ZXItPmJ1c19yZXN1bWUoaGNkKTsKKwljbGVhcl9iaXQoSENEX0ZMQUdfV0FLRVVQX1BFTkRJTkcsICZoY2QtPmZsYWdzKTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KIAkJbXNsZWVwKDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IGI5OGVmYWUuLjBmMjk5YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtNjc2LDYgKzY3Niw4IEBACiBzdGF0aWMgdm9pZCBodWJfYWN0aXZhdGUoc3RydWN0IHVzYl9odWIgKmh1YiwgZW51bSBodWJfYWN0aXZhdGlvbl90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlpbnQgcmV0OwogCWludCBwb3J0MTsKIAlpbnQgc3RhdHVzOwogCWJvb2wgbmVlZF9kZWJvdW5jZV9kZWxheSA9IGZhbHNlOwpAQCAtNzE0LDYgKzcxNiwyNSBAQAogCQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZSgKIAkJCQkJdG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpKTsKIAkJCXJldHVybjsJCS8qIENvbnRpbnVlcyBhdCBpbml0MjogYmVsb3cgKi8KKwkJfSBlbHNlIGlmICh0eXBlID09IEhVQl9SRVNFVF9SRVNVTUUpIHsKKwkJCS8qIFRoZSBpbnRlcm5hbCBob3N0IGNvbnRyb2xsZXIgc3RhdGUgZm9yIHRoZSBodWIgZGV2aWNlCisJCQkgKiBtYXkgYmUgZ29uZSBhZnRlciBhIGhvc3QgcG93ZXIgbG9zcyBvbiBzeXN0ZW0gcmVzdW1lLgorCQkJICogVXBkYXRlIHRoZSBkZXZpY2UncyBpbmZvIHNvIHRoZSBIVyBrbm93cyBpdCdzIGEgaHViLgorCQkJICovCisJCQloY2QgPSBidXNfdG9faGNkKGhkZXYtPmJ1cyk7CisJCQlpZiAoaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKSB7CisJCQkJcmV0ID0gaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKGhjZCwgaGRldiwKKwkJCQkJCSZodWItPnR0LCBHRlBfTk9JTyk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJZGV2X2VycihodWItPmludGZkZXYsICJIb3N0IG5vdCAiCisJCQkJCQkJImFjY2VwdGluZyBodWIgaW5mbyAiCisJCQkJCQkJInVwZGF0ZS5cbiIpOworCQkJCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwgIkxTL0ZTIGRldmljZXMgIgorCQkJCQkJCSJhbmQgaHVicyBtYXkgbm90IHdvcmsgIgorCQkJCQkJCSJ1bmRlciB0aGlzIGh1YlxuLiIpOworCQkJCX0KKwkJCX0KKwkJCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwogCQl9IGVsc2UgewogCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CiAJCX0KQEAgLTI2NjAsMTcgKzI2ODEsMTMgQEAKIAogCW11dGV4X2xvY2soJnVzYl9hZGRyZXNzMF9tdXRleCk7CiAKLQlpZiAoIXVkZXYtPmNvbmZpZyAmJiBvbGRzcGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpIHsKLQkJLyogRG9uJ3QgcmVzZXQgVVNCIDMuMCBkZXZpY2VzIGR1cmluZyBhbiBpbml0aWFsIHNldHVwICovCi0JCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9ERUZBVUxUKTsKLQl9IGVsc2UgewotCQkvKiBSZXNldCB0aGUgZGV2aWNlOyBmdWxsIHNwZWVkIG1heSBtb3JwaCB0byBoaWdoIHNwZWVkICovCi0JCS8qIEZJWE1FIGEgVVNCIDIuMCBkZXZpY2UgbWF5IG1vcnBoIGludG8gU3VwZXJTcGVlZCBvbiByZXNldC4gKi8KLQkJcmV0dmFsID0gaHViX3BvcnRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXkpOwotCQlpZiAocmV0dmFsIDwgMCkJCS8qIGVycm9yIG9yIGRpc2Nvbm5lY3QgKi8KLQkJCWdvdG8gZmFpbDsKLQkJLyogc3VjY2Vzcywgc3BlZWQgaXMga25vd24gKi8KLQl9CisJLyogUmVzZXQgdGhlIGRldmljZTsgZnVsbCBzcGVlZCBtYXkgbW9ycGggdG8gaGlnaCBzcGVlZCAqLworCS8qIEZJWE1FIGEgVVNCIDIuMCBkZXZpY2UgbWF5IG1vcnBoIGludG8gU3VwZXJTcGVlZCBvbiByZXNldC4gKi8KKwlyZXR2YWwgPSBodWJfcG9ydF9yZXNldChodWIsIHBvcnQxLCB1ZGV2LCBkZWxheSk7CisJaWYgKHJldHZhbCA8IDApCQkvKiBlcnJvciBvciBkaXNjb25uZWN0ICovCisJCWdvdG8gZmFpbDsKKwkvKiBzdWNjZXNzLCBzcGVlZCBpcyBrbm93biAqLworCiAJcmV0dmFsID0gLUVOT0RFVjsKIAogCWlmIChvbGRzcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTiAmJiBvbGRzcGVlZCAhPSB1ZGV2LT5zcGVlZCkgewpAQCAtMjczMiw2ICsyNzQ5LDExIEBACiAJCXVkZXYtPnR0cG9ydCA9IGhkZXYtPnR0cG9ydDsKIAl9IGVsc2UgaWYgKHVkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdICiAJCQkmJiBoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQlpZiAoIWh1Yi0+dHQuaHViKSB7CisJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJwYXJlbnQgaHViIGhhcyBubyBUVFxuIik7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBmYWlsOworCQl9CiAJCXVkZXYtPnR0ID0gJmh1Yi0+dHQ7CiAJCXVkZXYtPnR0cG9ydCA9IHBvcnQxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCmluZGV4IDQ0YzU5NTQuLjgxY2U2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwpAQCAtNDgsNiArNDgsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNGI0LCAweDA1MjYpLCAuZHJpdmVyX2luZm8gPQogCQkJVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MgfSwKIAorCS8qIFNhbXN1bmcgQW5kcm9pZCBwaG9uZSBtb2RlbSAtIElEIGNvbmZsaWN0IHdpdGggU1BILUk1MDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGU4LCAweDY2MDEpLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MgfSwKKwogCS8qIFJvbGFuZCBTQy04ODIwICovCiAJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDA3KSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCkBAIC02OCw2ICs3MiwxMCBAQAogCS8qIE0tU3lzdGVtcyBGbGFzaCBEaXNrIFBpb25lZXJzICovCiAJeyBVU0JfREVWSUNFKDB4MDhlYywgMHgxMDAwKSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCisJLyogS2V5dG91Y2ggUVdFUlRZIFBhbmVsIGtleWJvYXJkICovCisJeyBVU0JfREVWSUNFKDB4MDkyNiwgMHgzMzMzKSwgLmRyaXZlcl9pbmZvID0KKwkJCVVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTIH0sCisKIAkvKiBYLVJpdGUvR3JldGFnLU1hY2JldGggRXllLU9uZSBQcm8gZGlzcGxheSBjb2xvcmltZXRlciAqLwogCXsgVVNCX0RFVklDRSgweDA5NzEsIDB4MjAwMCksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19OT19TRVRfSU5URiB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IDFkYzk3MzkuLmQ1MDA5OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC01MDksNyArNTA5LDcgQEAKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCiBjb25maWcgVVNCX0dBREdFVF9FRzIwVAotCWJvb2xlYW4gIkludGVsIEVHMjBUKFRvcGNsaWZmKSBVU0IgRGV2aWNlIGNvbnRyb2xsZXIiCisJYm9vbGVhbiAiSW50ZWwgRUcyMFQgUENIL09LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0ggVURDIgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECiAJaGVscApAQCAtNTI1LDYgKzUyNSwxMSBAQAogCSAgVGhpcyBkcml2ZXIgZG9zZSBub3Qgc3VwcG9ydCBpbnRlcnJ1cHQgdHJhbnNmZXIgb3IgaXNvY2hyb25vdXMKIAkgIHRyYW5zZmVyIG1vZGVzLgogCisJICBUaGlzIGRyaXZlciBhbHNvIGNhbiBiZSB1c2VkIGZvciBPS0kgU0VNSUNPTkRVQ1RPUidzIE1MNzIxMyB3aGljaCBpcworCSAgZm9yIElWSShJbi1WZWhpY2xlIEluZm90YWlubWVudCkgdXNlLgorCSAgTUw3MjEzIGlzIGNvbXBhbmlvbiBjaGlwIGZvciBJbnRlbCBBdG9tIEU2eHggc2VyaWVzLgorCSAgTUw3MjEzIGlzIGNvbXBsZXRlbHkgY29tcGF0aWJsZSBmb3IgSW50ZWwgRUcyMFQgUENILgorCiBjb25maWcgVVNCX0VHMjBUCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIFVTQl9HQURHRVRfRUcyMFQKQEAgLTU0MSw2ICs1NDYsOCBAQAogCSAgY2kxM3h4eF91ZGMgY29yZS4KIAkgIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gT1RHIGRyaXZlciBmb3IgUEhZIGluaXRpYWxpemF0aW9uLAogCSAgY2xvY2sgbWFuYWdlbWVudCwgcG93ZXJpbmcgdXAgVkJVUywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCisJICBUaGlzIGRyaXZlciBpcyBub3Qgc3VwcG9ydGVkIG9uIGJvYXJkcyBsaWtlIHRyb3V0IHdoaWNoCisJICBoYXMgYW4gZXh0ZXJuYWwgUEhZLgogCiAJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQogCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImNpMTN4eHhfbXNtIiBhbmQgZm9yY2UgYWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCmluZGV4IDMxNjU2YTIuLmExYzY3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCkBAIC03NiwxMCArNzYsMjEgQEAKIAogLyogY29udHJvbCBlbmRwb2ludCBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgotY3RybF9lbmRwdF9kZXNjID0geworY3RybF9lbmRwdF9vdXRfZGVzYyA9IHsKIAkuYkxlbmd0aCAgICAgICAgID0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKIAorCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyAgICA9IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCisJLndNYXhQYWNrZXRTaXplICA9IGNwdV90b19sZTE2KENUUkxfUEFZTE9BRF9NQVgpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorY3RybF9lbmRwdF9pbl9kZXNjID0geworCS5iTGVuZ3RoICAgICAgICAgPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgICAgPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MLAogCS53TWF4UGFja2V0U2l6ZSAgPSBjcHVfdG9fbGUxNihDVFJMX1BBWUxPQURfTUFYKSwKIH07CkBAIC0yNjUsMTAgKzI3NiwxMCBAQAogCWh3X2Jhbmsuc2l6ZSAvPSBzaXplb2YodTMyKTsKIAogCXJlZyA9IGh3X2FyZWFkKEFCU19EQ0NQQVJBTVMsIERDQ1BBUkFNU19ERU4pID4+IGZmc19ucihEQ0NQQVJBTVNfREVOKTsKLQlpZiAocmVnID09IDAgfHwgcmVnID4gRU5EUFRfTUFYKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlod19lcF9tYXggPSByZWcgKiAyOyAgIC8qIGNhY2hlIGh3IEVORFBUX01BWCAqLwogCi0JaHdfZXBfbWF4ID0gcmVnOyAgIC8qIGNhY2hlIGh3IEVORFBUX01BWCAqLworCWlmIChod19lcF9tYXggPT0gMCB8fCBod19lcF9tYXggPiBFTkRQVF9NQVgpCisJCXJldHVybiAtRU5PREVWOwogCiAJLyogc2V0dXAgbG9jayBtb2RlID8gKi8KIApAQCAtMTE5NywxNiArMTIwOCwxNyBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXg7IGkrKykgewotCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+Y2kxM3h4eF9lcFtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4LzI7IGkrKykgeworCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwUnggPSAmdWRjLT5jaTEzeHh4X2VwW2ldOworCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwVHggPSAmdWRjLT5jaTEzeHh4X2VwW2kgKyBod19lcF9tYXgvMl07CiAJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIFBBR0VfU0laRSAtIG4sCiAJCQkgICAgICAgIkVQPSUwMmk6IFJYPSUwOFggVFg9JTA4WFxuIiwKLQkJCSAgICAgICBpLCAodTMyKW1FcC0+cWhbUlhdLmRtYSwgKHUzMiltRXAtPnFoW1RYXS5kbWEpOworCQkJICAgICAgIGksICh1MzIpbUVwUngtPnFoLmRtYSwgKHUzMiltRXBUeC0+cWguZG1hKTsKIAkJZm9yIChqID0gMDsgaiA8IChzaXplb2Yoc3RydWN0IGNpMTN4eHhfcWgpL3NpemVvZih1MzIpKTsgaisrKSB7CiAJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAogCQkJCSAgICAgICAiICUwNFg6ICAgICUwOFggICAgJTA4WFxuIiwgaiwKLQkJCQkgICAgICAgKigodTMyICopbUVwLT5xaFtSWF0ucHRyICsgaiksCi0JCQkJICAgICAgICooKHUzMiAqKW1FcC0+cWhbVFhdLnB0ciArIGopKTsKKwkJCQkgICAgICAgKigodTMyICopbUVwUngtPnFoLnB0ciArIGopLAorCQkJCSAgICAgICAqKCh1MzIgKiltRXBUeC0+cWgucHRyICsgaikpOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CkBAIC0xMjkzLDcgKzEzMDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAgICpwdHIgPSBOVUxMOwogCXN0cnVjdCBjaTEzeHh4X3JlcSAqcmVxID0gTlVMTDsKLQl1bnNpZ25lZCBpLCBqLCBrLCBuID0gMCwgcVNpemUgPSBzaXplb2Yoc3RydWN0IGNpMTN4eHhfdGQpL3NpemVvZih1MzIpOworCXVuc2lnbmVkIGksIGosIG4gPSAwLCBxU2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2kxM3h4eF90ZCkvc2l6ZW9mKHUzMik7CiAKIAlkYmdfdHJhY2UoIlslc10gJXBcbiIsIF9fZnVuY19fLCBidWYpOwogCWlmIChhdHRyID09IE5VTEwgfHwgYnVmID09IE5VTEwpIHsKQEAgLTEzMDMsMjIgKzEzMTUsMjAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXg7IGkrKykKLQkJZm9yIChrID0gUlg7IGsgPD0gVFg7IGsrKykKLQkJCWxpc3RfZm9yX2VhY2gocHRyLCAmdWRjLT5jaTEzeHh4X2VwW2ldLnFoW2tdLnF1ZXVlKQotCQkJewotCQkJCXJlcSA9IGxpc3RfZW50cnkocHRyLAotCQkJCQkJIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOworCQlsaXN0X2Zvcl9lYWNoKHB0ciwgJnVkYy0+Y2kxM3h4eF9lcFtpXS5xaC5xdWV1ZSkKKwkJeworCQkJcmVxID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCisJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAorCQkJCQkiRVA9JTAyaTogVEQ9JTA4WCAlc1xuIiwKKwkJCQkJaSAlIGh3X2VwX21heC8yLCAodTMyKXJlcS0+ZG1hLAorCQkJCQkoKGkgPCBod19lcF9tYXgvMikgPyAiUlgiIDogIlRYIikpOworCisJCQlmb3IgKGogPSAwOyBqIDwgcVNpemU7IGorKykKIAkJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAotCQkJCQkgICAgICAgIkVQPSUwMmk6IFREPSUwOFggJXNcbiIsCi0JCQkJCSAgICAgICBpLCAodTMyKXJlcS0+ZG1hLAotCQkJCQkgICAgICAgKChrID09IFJYKSA/ICJSWCIgOiAiVFgiKSk7Ci0KLQkJCQlmb3IgKGogPSAwOyBqIDwgcVNpemU7IGorKykKLQkJCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwKLQkJCQkJCSAgICAgICAiICUwNFg6ICAgICUwOFhcbiIsIGosCi0JCQkJCQkgICAgICAgKigodTMyICopcmVxLT5wdHIgKyBqKSk7Ci0JCQl9CisJCQkJCQkiICUwNFg6ICAgICUwOFhcbiIsIGosCisJCQkJCQkqKCh1MzIgKilyZXEtPnB0ciArIGopKTsKKwkJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gbjsKQEAgLTE0NjcsMTIgKzE0NzcsMTIgQEAKIAkgKiAgQXQgdGhpcyBwb2ludCBpdCdzIGd1YXJhbnRlZWQgZXhjbHVzaXZlIGFjY2VzcyB0byBxaGVhZAogCSAqICAoZW5kcHQgaXMgbm90IHByaW1lZCkgc28gaXQncyBubyBuZWVkIHRvIHVzZSB0cmlwd2lyZQogCSAqLwotCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+dGQubmV4dCAgID0gbVJlcS0+ZG1hOyAgICAvKiBURVJNSU5BVEUgPSAwICovCi0JbUVwLT5xaFttRXAtPmRpcl0ucHRyLT50ZC50b2tlbiAmPSB+VERfU1RBVFVTOyAgIC8qIGNsZWFyIHN0YXR1cyAqLworCW1FcC0+cWgucHRyLT50ZC5uZXh0ICAgPSBtUmVxLT5kbWE7ICAgIC8qIFRFUk1JTkFURSA9IDAgKi8KKwltRXAtPnFoLnB0ci0+dGQudG9rZW4gJj0gflREX1NUQVRVUzsgICAvKiBjbGVhciBzdGF0dXMgKi8KIAlpZiAobVJlcS0+cmVxLnplcm8gPT0gMCkKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgfD0gIFFIX1pMVDsKKwkJbUVwLT5xaC5wdHItPmNhcCB8PSAgUUhfWkxUOwogCWVsc2UKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgJj0gflFIX1pMVDsKKwkJbUVwLT5xaC5wdHItPmNhcCAmPSB+UUhfWkxUOwogCiAJd21iKCk7ICAgLyogc3luY2hyb25pemUgYmVmb3JlIGVwIHByaW1lICovCiAKQEAgLTE1NDIsMTEgKzE1NTIsMTEgQEAKIAogCWh3X2VwX2ZsdXNoKG1FcC0+bnVtLCBtRXAtPmRpcik7CiAKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkgeworCXdoaWxlICghbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKIAogCQkvKiBwb3Agb2xkZXN0IHJlcXVlc3QgKi8KIAkJc3RydWN0IGNpMTN4eHhfcmVxICptUmVxID0gXAotCQkJbGlzdF9lbnRyeShtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZS5uZXh0LAorCQkJbGlzdF9lbnRyeShtRXAtPnFoLnF1ZXVlLm5leHQsCiAJCQkJICAgc3RydWN0IGNpMTN4eHhfcmVxLCBxdWV1ZSk7CiAJCWxpc3RfZGVsX2luaXQoJm1SZXEtPnF1ZXVlKTsKIAkJbVJlcS0+cmVxLnN0YXR1cyA9IC1FU0hVVERPV047CkBAIC0xNTcxLDggKzE1ODEsNiBAQAogewogCXN0cnVjdCB1c2JfZXAgKmVwOwogCXN0cnVjdCBjaTEzeHh4ICAgICp1ZGMgPSBjb250YWluZXJfb2YoZ2FkZ2V0LCBzdHJ1Y3QgY2kxM3h4eCwgZ2FkZ2V0KTsKLQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gY29udGFpbmVyX29mKGdhZGdldC0+ZXAwLAotCQkJCQkgICAgICBzdHJ1Y3QgY2kxM3h4eF9lcCwgZXApOwogCiAJdHJhY2UoIiVwIiwgZ2FkZ2V0KTsKIApAQCAtMTU4Myw3ICsxNTkxLDggQEAKIAlnYWRnZXRfZm9yX2VhY2hfZXAoZXAsIGdhZGdldCkgewogCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CiAJfQotCXVzYl9lcF9maWZvX2ZsdXNoKGdhZGdldC0+ZXAwKTsKKwl1c2JfZXBfZmlmb19mbHVzaCgmdWRjLT5lcDBvdXQuZXApOworCXVzYl9lcF9maWZvX2ZsdXNoKCZ1ZGMtPmVwMGluLmVwKTsKIAogCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KGdhZGdldCk7CiAKQEAgLTE1OTEsMTEgKzE2MDAsMTIgQEAKIAlnYWRnZXRfZm9yX2VhY2hfZXAoZXAsIGdhZGdldCkgewogCQl1c2JfZXBfZGlzYWJsZShlcCk7CiAJfQotCXVzYl9lcF9kaXNhYmxlKGdhZGdldC0+ZXAwKTsKKwl1c2JfZXBfZGlzYWJsZSgmdWRjLT5lcDBvdXQuZXApOworCXVzYl9lcF9kaXNhYmxlKCZ1ZGMtPmVwMGluLmVwKTsKIAotCWlmIChtRXAtPnN0YXR1cyAhPSBOVUxMKSB7Ci0JCXVzYl9lcF9mcmVlX3JlcXVlc3QoZ2FkZ2V0LT5lcDAsIG1FcC0+c3RhdHVzKTsKLQkJbUVwLT5zdGF0dXMgPSBOVUxMOworCWlmICh1ZGMtPnN0YXR1cyAhPSBOVUxMKSB7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QoJnVkYy0+ZXAwaW4uZXAsIHVkYy0+c3RhdHVzKTsKKwkJdWRjLT5zdGF0dXMgPSBOVUxMOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTYxNCw3ICsxNjI0LDYgQEAKIF9fcmVsZWFzZXModWRjLT5sb2NrKQogX19hY3F1aXJlcyh1ZGMtPmxvY2spCiB7Ci0Jc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9ICZ1ZGMtPmNpMTN4eHhfZXBbMF07CiAJaW50IHJldHZhbDsKIAogCXRyYWNlKCIlcCIsIHVkYyk7CkBAIC0xNjM1LDExICsxNjQ0LDE1IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCi0JcmV0dmFsID0gdXNiX2VwX2VuYWJsZSgmbUVwLT5lcCwgJmN0cmxfZW5kcHRfZGVzYyk7CisJcmV0dmFsID0gdXNiX2VwX2VuYWJsZSgmdWRjLT5lcDBvdXQuZXAsICZjdHJsX2VuZHB0X291dF9kZXNjKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwlyZXR2YWwgPSB1c2JfZXBfZW5hYmxlKCZ1ZGMtPmVwMGluLmVwLCAmY3RybF9lbmRwdF9pbl9kZXNjKTsKIAlpZiAoIXJldHZhbCkgewotCQltRXAtPnN0YXR1cyA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KCZtRXAtPmVwLCBHRlBfQVRPTUlDKTsKLQkJaWYgKG1FcC0+c3RhdHVzID09IE5VTEwpIHsKLQkJCXVzYl9lcF9kaXNhYmxlKCZtRXAtPmVwKTsKKwkJdWRjLT5zdGF0dXMgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCgmdWRjLT5lcDBpbi5lcCwgR0ZQX0FUT01JQyk7CisJCWlmICh1ZGMtPnN0YXR1cyA9PSBOVUxMKSB7CisJCQl1c2JfZXBfZGlzYWJsZSgmdWRjLT5lcDBvdXQuZXApOwogCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJfQogCX0KQEAgLTE2NzIsMTYgKzE2ODUsMTcgQEAKIAogLyoqCiAgKiBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZTogZ2V0X3N0YXR1cyByZXF1ZXN0IHJlc3BvbnNlCi0gKiBAZXA6ICAgIGVuZHBvaW50CisgKiBAdWRjOiB1ZGMgc3RydWN0CiAgKiBAc2V0dXA6IHNldHVwIHJlcXVlc3QgcGFja2V0CiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUKICAqLwotc3RhdGljIGludCBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwLAorc3RhdGljIGludCBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShzdHJ1Y3QgY2kxM3h4eCAqdWRjLAogCQkJCSAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNldHVwKQogX19yZWxlYXNlcyhtRXAtPmxvY2spCiBfX2FjcXVpcmVzKG1FcC0+bG9jaykKIHsKKwlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+ZXAwaW47CiAJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEgPSBOVUxMOwogCWdmcF90IGdmcF9mbGFncyA9IEdGUF9BVE9NSUM7CiAJaW50IGRpciwgbnVtLCByZXR2YWw7CkBAIC0xNzM2LDI3ICsxNzUwLDIzIEBACiAKIC8qKgogICogaXNyX3NldHVwX3N0YXR1c19waGFzZTogcXVldWVzIHRoZSBzdGF0dXMgcGhhc2Ugb2YgYSBzZXR1cCB0cmFuc2F0aW9uCi0gKiBAbUVwOiBlbmRwb2ludAorICogQHVkYzogdWRjIHN0cnVjdAogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgaXNyX3NldHVwX3N0YXR1c19waGFzZShzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwKQorc3RhdGljIGludCBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHN0cnVjdCBjaTEzeHh4ICp1ZGMpCiBfX3JlbGVhc2VzKG1FcC0+bG9jaykKIF9fYWNxdWlyZXMobUVwLT5sb2NrKQogewogCWludCByZXR2YWw7CisJc3RydWN0IGNpMTN4eHhfZXAgKm1FcDsKIAotCXRyYWNlKCIlcCIsIG1FcCk7CisJdHJhY2UoIiVwIiwgdWRjKTsKIAotCS8qIG1FcCBpcyBhbHdheXMgdmFsaWQgJiBjb25maWd1cmVkICovCi0KLQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCi0JCW1FcC0+ZGlyID0gKG1FcC0+ZGlyID09IFRYKSA/IFJYIDogVFg7Ci0KLQltRXAtPnN0YXR1cy0+bm9faW50ZXJydXB0ID0gMTsKKwltRXAgPSAodWRjLT5lcDBfZGlyID09IFRYKSA/ICZ1ZGMtPmVwMG91dCA6ICZ1ZGMtPmVwMGluOwogCiAJc3Bpbl91bmxvY2sobUVwLT5sb2NrKTsKLQlyZXR2YWwgPSB1c2JfZXBfcXVldWUoJm1FcC0+ZXAsIG1FcC0+c3RhdHVzLCBHRlBfQVRPTUlDKTsKKwlyZXR2YWwgPSB1c2JfZXBfcXVldWUoJm1FcC0+ZXAsIHVkYy0+c3RhdHVzLCBHRlBfQVRPTUlDKTsKIAlzcGluX2xvY2sobUVwLT5sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0xNzc4LDExICsxNzg4LDExIEBACiAKIAl0cmFjZSgiJXAiLCBtRXApOwogCi0JaWYgKGxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkKKwlpZiAobGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogcG9wIG9sZGVzdCByZXF1ZXN0ICovCi0JbVJlcSA9IGxpc3RfZW50cnkobUVwLT5xaFttRXAtPmRpcl0ucXVldWUubmV4dCwKKwltUmVxID0gbGlzdF9lbnRyeShtRXAtPnFoLnF1ZXVlLm5leHQsCiAJCQkgIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCWxpc3RfZGVsX2luaXQoJm1SZXEtPnF1ZXVlKTsKIApAQCAtMTc5NCwxMCArMTgwNCwxMCBAQAogCiAJZGJnX2RvbmUoX3VzYl9hZGRyKG1FcCksIG1SZXEtPnB0ci0+dG9rZW4sIHJldHZhbCk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkgeworCWlmICghbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKIAkJc3RydWN0IGNpMTN4eHhfcmVxKiBtUmVxRW5xOwogCi0JCW1SZXFFbnEgPSBsaXN0X2VudHJ5KG1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlLm5leHQsCisJCW1SZXFFbnEgPSBsaXN0X2VudHJ5KG1FcC0+cWgucXVldWUubmV4dCwKIAkJCQkgIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCQlfaGFyZHdhcmVfZW5xdWV1ZShtRXAsIG1SZXFFbnEpOwogCX0KQEAgLTE4MzYsMTYgKzE4NDYsMTQgQEAKIAkJaW50IHR5cGUsIG51bSwgZXJyID0gLUVJTlZBTDsKIAkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCByZXE7CiAKLQogCQlpZiAobUVwLT5kZXNjID09IE5VTEwpCiAJCQljb250aW51ZTsgICAvKiBub3QgY29uZmlndXJlZCAqLwogCi0JCWlmICgobUVwLT5kaXIgPT0gUlggJiYgaHdfdGVzdF9hbmRfY2xlYXJfY29tcGxldGUoaSkpIHx8Ci0JCSAgICAobUVwLT5kaXIgPT0gVFggJiYgaHdfdGVzdF9hbmRfY2xlYXJfY29tcGxldGUoaSArIDE2KSkpIHsKKwkJaWYgKGh3X3Rlc3RfYW5kX2NsZWFyX2NvbXBsZXRlKGkpKSB7CiAJCQllcnIgPSBpc3JfdHJfY29tcGxldGVfbG93KG1FcCk7CiAJCQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpIHsKIAkJCQlpZiAoZXJyID4gMCkgICAvKiBuZWVkcyBzdGF0dXMgcGhhc2UgKi8KLQkJCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZShtRXApOworCQkJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQkJaWYgKGVyciA8IDApIHsKIAkJCQkJZGJnX2V2ZW50KF91c2JfYWRkcihtRXApLAogCQkJCQkJICAiRVJST1IiLCBlcnIpOwpAQCAtMTg2NiwxNSArMTg3NCwyMiBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQkvKgorCQkgKiBGbHVzaCBkYXRhIGFuZCBoYW5kc2hha2UgdHJhbnNhY3Rpb25zIG9mIHByZXZpb3VzCisJCSAqIHNldHVwIHBhY2tldC4KKwkJICovCisJCV9lcF9udWtlKCZ1ZGMtPmVwMG91dCk7CisJCV9lcF9udWtlKCZ1ZGMtPmVwMGluKTsKKwogCQkvKiByZWFkX3NldHVwX3BhY2tldCAqLwogCQlkbyB7CiAJCQlod190ZXN0X2FuZF9zZXRfc2V0dXBfZ3VhcmQoKTsKLQkJCW1lbWNweSgmcmVxLCAmbUVwLT5xaFtSWF0ucHRyLT5zZXR1cCwgc2l6ZW9mKHJlcSkpOworCQkJbWVtY3B5KCZyZXEsICZtRXAtPnFoLnB0ci0+c2V0dXAsIHNpemVvZihyZXEpKTsKIAkJfSB3aGlsZSAoIWh3X3Rlc3RfYW5kX2NsZWFyX3NldHVwX2d1YXJkKCkpOwogCiAJCXR5cGUgPSByZXEuYlJlcXVlc3RUeXBlOwogCi0JCW1FcC0+ZGlyID0gKHR5cGUgJiBVU0JfRElSX0lOKSA/IFRYIDogUlg7CisJCXVkYy0+ZXAwX2RpciA9ICh0eXBlICYgVVNCX0RJUl9JTikgPyBUWCA6IFJYOwogCiAJCWRiZ19zZXR1cChfdXNiX2FkZHIobUVwKSwgJnJlcSk7CiAKQEAgLTE4OTUsNyArMTkxMCw3IEBACiAJCQkJaWYgKGVycikKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKG1FcCk7CisJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6CiAJCQlpZiAodHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfREVWSUNFKSAgICYmCkBAIC0xOTA1LDcgKzE5MjAsNyBAQAogCQkJaWYgKGxlMTZfdG9fY3B1KHJlcS53TGVuZ3RoKSAhPSAyIHx8CiAJCQkgICAgbGUxNl90b19jcHUocmVxLndWYWx1ZSkgICE9IDApCiAJCQkJYnJlYWs7Ci0JCQllcnIgPSBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShtRXAsICZyZXEpOworCQkJZXJyID0gaXNyX2dldF9zdGF0dXNfcmVzcG9uc2UodWRjLCAmcmVxKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CiAJCQlpZiAodHlwZSAhPSAoVVNCX0RJUl9PVVR8VVNCX1JFQ0lQX0RFVklDRSkpCkBAIC0xOTE2LDcgKzE5MzEsNyBAQAogCQkJZXJyID0gaHdfdXNiX3NldF9hZGRyZXNzKCh1OClsZTE2X3RvX2NwdShyZXEud1ZhbHVlKSk7CiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOwotCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZShtRXApOworCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZSh1ZGMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKIAkJCWlmICh0eXBlICE9IChVU0JfRElSX09VVHxVU0JfUkVDSVBfRU5EUE9JTlQpICYmCkBAIC0xOTMyLDEyICsxOTQ3LDEyIEBACiAJCQlzcGluX2xvY2sodWRjLT5sb2NrKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7Ci0JCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKG1FcCk7CisJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIGRlbGVnYXRlOgogCQkJaWYgKHJlcS53TGVuZ3RoID09IDApICAgLyogbm8gZGF0YSBwaGFzZSAqLwotCQkJCW1FcC0+ZGlyID0gVFg7CisJCQkJdWRjLT5lcDBfZGlyID0gVFg7CiAKIAkJCXNwaW5fdW5sb2NrKHVkYy0+bG9jayk7CiAJCQllcnIgPSB1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LCAmcmVxKTsKQEAgLTE5NjgsNyArMTk4Myw3IEBACiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQogewogCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSBjb250YWluZXJfb2YoZXAsIHN0cnVjdCBjaTEzeHh4X2VwLCBlcCk7Ci0JaW50IGRpcmVjdGlvbiwgcmV0dmFsID0gMDsKKwlpbnQgcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJdHJhY2UoIiVwLCAlcCIsIGVwLCBkZXNjKTsKQEAgLTE5ODIsNyArMTk5Nyw3IEBACiAKIAltRXAtPmRlc2MgPSBkZXNjOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJaWYgKCFsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkKIAkJd2FybigiZW5hYmxpbmcgYSBub24tZW1wdHkgZW5kcG9pbnQhIik7CiAKIAltRXAtPmRpciAgPSB1c2JfZW5kcG9pbnRfZGlyX2luKGRlc2MpID8gVFggOiBSWDsKQEAgLTE5OTEsMjkgKzIwMDYsMjIgQEAKIAogCW1FcC0+ZXAubWF4cGFja2V0ID0gX19jb25zdGFudF9sZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CiAKLQlkaXJlY3Rpb24gPSBtRXAtPmRpcjsKLQlkbyB7Ci0JCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwgIkVOQUJMRSIsIDApOworCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwgIkVOQUJMRSIsIDApOwogCi0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwID0gMDsKKwltRXAtPnFoLnB0ci0+Y2FwID0gMDsKIAotCQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCi0JCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCB8PSAgUUhfSU9TOwotCQllbHNlIGlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKLQkJCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwICY9IH5RSF9NVUxUOwotCQllbHNlCi0JCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCAmPSB+UUhfWkxUOworCWlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkKKwkJbUVwLT5xaC5wdHItPmNhcCB8PSAgUUhfSU9TOworCWVsc2UgaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQltRXAtPnFoLnB0ci0+Y2FwICY9IH5RSF9NVUxUOworCWVsc2UKKwkJbUVwLT5xaC5wdHItPmNhcCAmPSB+UUhfWkxUOwogCi0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwIHw9Ci0JCQkobUVwLT5lcC5tYXhwYWNrZXQgPDwgZmZzX25yKFFIX01BWF9QS1QpKSAmIFFIX01BWF9QS1Q7Ci0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+dGQubmV4dCB8PSBURF9URVJNSU5BVEU7ICAgLyogbmVlZGVkPyAqLworCW1FcC0+cWgucHRyLT5jYXAgfD0KKwkJKG1FcC0+ZXAubWF4cGFja2V0IDw8IGZmc19ucihRSF9NQVhfUEtUKSkgJiBRSF9NQVhfUEtUOworCW1FcC0+cWgucHRyLT50ZC5uZXh0IHw9IFREX1RFUk1JTkFURTsgICAvKiBuZWVkZWQ/ICovCiAKLQkJcmV0dmFsIHw9IGh3X2VwX2VuYWJsZShtRXAtPm51bSwgbUVwLT5kaXIsIG1FcC0+dHlwZSk7Ci0KLQkJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQotCQkJbUVwLT5kaXIgPSAobUVwLT5kaXIgPT0gVFgpID8gUlggOiBUWDsKLQotCX0gd2hpbGUgKG1FcC0+ZGlyICE9IGRpcmVjdGlvbik7CisJcmV0dmFsIHw9IGh3X2VwX2VuYWJsZShtRXAtPm51bSwgbUVwLT5kaXIsIG1FcC0+dHlwZSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKG1FcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXR2YWw7CkBAIC0yMTQ2LDcgKzIxNTQsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKG1FcC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MICYmCi0JICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpIHsKKwkgICAgIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKSB7CiAJCV9lcF9udWtlKG1FcCk7CiAJCXJldHZhbCA9IC1FT1ZFUkZMT1c7CiAJCXdhcm4oImVuZHBvaW50IGN0cmwgJVggbnVrZWQiLCBfdXNiX2FkZHIobUVwKSk7CkBAIC0yMTcwLDkgKzIxNzgsOSBAQAogCS8qIHB1c2ggcmVxdWVzdCAqLwogCW1SZXEtPnJlcS5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJbVJlcS0+cmVxLmFjdHVhbCA9IDA7Ci0JbGlzdF9hZGRfdGFpbCgmbVJlcS0+cXVldWUsICZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSk7CisJbGlzdF9hZGRfdGFpbCgmbVJlcS0+cXVldWUsICZtRXAtPnFoLnF1ZXVlKTsKIAotCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJaWYgKGxpc3RfaXNfc2luZ3VsYXIoJm1FcC0+cWgucXVldWUpKQogCQlyZXR2YWwgPSBfaGFyZHdhcmVfZW5xdWV1ZShtRXAsIG1SZXEpOwogCiAJaWYgKHJldHZhbCA9PSAtRUFMUkVBRFkpIHsKQEAgLTIxOTksNyArMjIwNyw3IEBACiAJdHJhY2UoIiVwLCAlcCIsIGVwLCByZXEpOwogCiAJaWYgKGVwID09IE5VTEwgfHwgcmVxID09IE5VTEwgfHwgbUVwLT5kZXNjID09IE5VTEwgfHwKLQkgICAgbGlzdF9lbXB0eSgmbVJlcS0+cXVldWUpICB8fCBsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJICAgIGxpc3RfZW1wdHkoJm1SZXEtPnF1ZXVlKSAgfHwgbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUobUVwLT5sb2NrLCBmbGFncyk7CkBAIC0yMjQ0LDcgKzIyNTIsNyBAQAogI2lmbmRlZiBTVEFMTF9JTgogCS8qIGdfZmlsZV9zdG9yYWdlIE1TIGNvbXBsaWFudCBidXQgZ196ZXJvIGZhaWxzIGNoYXB0ZXIgOSBjb21wbGlhbmNlICovCiAJaWYgKHZhbHVlICYmIG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLICYmIG1FcC0+ZGlyID09IFRYICYmCi0JICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpIHsKKwkgICAgIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobUVwLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KQEAgLTIzNTUsNyArMjM2Myw3IEBACiAJCWlmIChpc19hY3RpdmUpIHsKIAkJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJl9nYWRnZXQtPmRldik7CiAJCQlod19kZXZpY2VfcmVzZXQodWRjKTsKLQkJCWh3X2RldmljZV9zdGF0ZSh1ZGMtPmNpMTN4eHhfZXBbMF0ucWhbUlhdLmRtYSk7CisJCQlod19kZXZpY2Vfc3RhdGUodWRjLT5lcDBvdXQucWguZG1hKTsKIAkJfSBlbHNlIHsKIAkJCWh3X2RldmljZV9zdGF0ZSgwKTsKIAkJCWlmICh1ZGMtPnVkY19kcml2ZXItPm5vdGlmeV9ldmVudCkKQEAgLTIzOTAsNyArMjM5OCw4IEBACiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBjaTEzeHh4ICp1ZGMgPSBfdWRjOwotCXVuc2lnbmVkIGxvbmcgaSwgaywgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgajsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAogCXRyYWNlKCIlcCIsIGRyaXZlcik7CkBAIC0yNDI3LDQ1ICsyNDM2LDQ2IEBACiAKIAlpbmZvKCJod19lcF9tYXggPSAlZCIsIGh3X2VwX21heCk7CiAKLQl1ZGMtPmRyaXZlciA9IGRyaXZlcjsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKIAogCXJldHZhbCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGh3X2VwX21heDsgaSsrKSB7Ci0JCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2ldOworCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXgvMjsgaSsrKSB7CisJCWZvciAoaiA9IFJYOyBqIDw9IFRYOyBqKyspIHsKKwkJCWludCBrID0gaSArIGogKiBod19lcF9tYXgvMjsKKwkJCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2tdOwogCi0JCXNjbnByaW50ZihtRXAtPm5hbWUsIHNpemVvZihtRXAtPm5hbWUpLCAiZXAlaSIsIChpbnQpaSk7CisJCQlzY25wcmludGYobUVwLT5uYW1lLCBzaXplb2YobUVwLT5uYW1lKSwgImVwJWklcyIsIGksCisJCQkJCShqID09IFRYKSAgPyAiaW4iIDogIm91dCIpOwogCi0JCW1FcC0+bG9jayAgICAgICAgID0gdWRjLT5sb2NrOwotCQltRXAtPmRldmljZSAgICAgICA9ICZ1ZGMtPmdhZGdldC5kZXY7Ci0JCW1FcC0+dGRfcG9vbCAgICAgID0gdWRjLT50ZF9wb29sOworCQkJbUVwLT5sb2NrICAgICAgICAgPSB1ZGMtPmxvY2s7CisJCQltRXAtPmRldmljZSAgICAgICA9ICZ1ZGMtPmdhZGdldC5kZXY7CisJCQltRXAtPnRkX3Bvb2wgICAgICA9IHVkYy0+dGRfcG9vbDsKIAotCQltRXAtPmVwLm5hbWUgICAgICA9IG1FcC0+bmFtZTsKLQkJbUVwLT5lcC5vcHMgICAgICAgPSAmdXNiX2VwX29wczsKLQkJbUVwLT5lcC5tYXhwYWNrZXQgPSBDVFJMX1BBWUxPQURfTUFYOworCQkJbUVwLT5lcC5uYW1lICAgICAgPSBtRXAtPm5hbWU7CisJCQltRXAtPmVwLm9wcyAgICAgICA9ICZ1c2JfZXBfb3BzOworCQkJbUVwLT5lcC5tYXhwYWNrZXQgPSBDVFJMX1BBWUxPQURfTUFYOwogCi0JCS8qIHRoaXMgYWxsb2NhdGlvbiBjYW5ub3QgYmUgcmFuZG9tICovCi0JCWZvciAoayA9IFJYOyBrIDw9IFRYOyBrKyspIHsKLQkJCUlOSVRfTElTVF9IRUFEKCZtRXAtPnFoW2tdLnF1ZXVlKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZtRXAtPnFoLnF1ZXVlKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7Ci0JCQltRXAtPnFoW2tdLnB0ciA9IGRtYV9wb29sX2FsbG9jKHVkYy0+cWhfcG9vbCwKLQkJCQkJCQlHRlBfS0VSTkVMLAotCQkJCQkJCSZtRXAtPnFoW2tdLmRtYSk7CisJCQltRXAtPnFoLnB0ciA9IGRtYV9wb29sX2FsbG9jKHVkYy0+cWhfcG9vbCwgR0ZQX0tFUk5FTCwKKwkJCQkJJm1FcC0+cWguZG1hKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKG1FcC0+cWhba10ucHRyID09IE5VTEwpCisJCQlpZiAobUVwLT5xaC5wdHIgPT0gTlVMTCkKIAkJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZWxzZQotCQkJCW1lbXNldChtRXAtPnFoW2tdLnB0ciwgMCwKLQkJCQkgICAgICAgc2l6ZW9mKCptRXAtPnFoW2tdLnB0cikpOwotCQl9Ci0JCWlmIChpID09IDApCi0JCQl1ZGMtPmdhZGdldC5lcDAgPSAmbUVwLT5lcDsKLQkJZWxzZQorCQkJCW1lbXNldChtRXAtPnFoLnB0ciwgMCwgc2l6ZW9mKCptRXAtPnFoLnB0cikpOworCisJCQkvKiBza2lwIGVwMCBvdXQgYW5kIGluIGVuZHBvaW50cyAqLworCQkJaWYgKGkgPT0gMCkKKwkJCQljb250aW51ZTsKKwogCQkJbGlzdF9hZGRfdGFpbCgmbUVwLT5lcC5lcF9saXN0LCAmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CisJCX0KIAl9CiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCisJdWRjLT5nYWRnZXQuZXAwID0gJnVkYy0+ZXAwaW4uZXA7CiAJLyogYmluZCBnYWRnZXQgKi8KIAlkcml2ZXItPmRyaXZlci5idXMgICAgID0gTlVMTDsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwpAQCAtMjQ3OSw2ICsyNDg5LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAorCXVkYy0+ZHJpdmVyID0gZHJpdmVyOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnVkYy0+Z2FkZ2V0LmRldik7CiAJaWYgKHVkYy0+dWRjX2RyaXZlci0+ZmxhZ3MgJiBDSTEzWFhYX1BVTExVUF9PTl9WQlVTKSB7CiAJCWlmICh1ZGMtPnZidXNfYWN0aXZlKSB7CkBAIC0yNDkwLDE0ICsyNTAxLDEyIEBACiAJCX0KIAl9CiAKLQlyZXR2YWwgPSBod19kZXZpY2Vfc3RhdGUodWRjLT5jaTEzeHh4X2VwWzBdLnFoW1JYXS5kbWEpOworCXJldHZhbCA9IGh3X2RldmljZV9zdGF0ZSh1ZGMtPmVwMG91dC5xaC5kbWEpOwogCWlmIChyZXR2YWwpCiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnVkYy0+Z2FkZ2V0LmRldik7CiAKICBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHJldHZhbCkKLQkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihkcml2ZXIpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKQEAgLTI1MTAsNyArMjUxOSw3IEBACiBpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgY2kxM3h4eCAqdWRjID0gX3VkYzsKLQl1bnNpZ25lZCBsb25nIGksIGssIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgaSwgZmxhZ3M7CiAKIAl0cmFjZSgiJXAiLCBkcml2ZXIpOwogCkBAIC0yNTQ2LDE3ICsyNTU1LDE0IEBACiAJZm9yIChpID0gMDsgaSA8IGh3X2VwX21heDsgaSsrKSB7CiAJCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2ldOwogCi0JCWlmIChpID09IDApCi0JCQl1ZGMtPmdhZGdldC5lcDAgPSBOVUxMOwotCQllbHNlIGlmICghbGlzdF9lbXB0eSgmbUVwLT5lcC5lcF9saXN0KSkKKwkJaWYgKCFsaXN0X2VtcHR5KCZtRXAtPmVwLmVwX2xpc3QpKQogCQkJbGlzdF9kZWxfaW5pdCgmbUVwLT5lcC5lcF9saXN0KTsKIAotCQlmb3IgKGsgPSBSWDsgayA8PSBUWDsgaysrKQotCQkJaWYgKG1FcC0+cWhba10ucHRyICE9IE5VTEwpCi0JCQkJZG1hX3Bvb2xfZnJlZSh1ZGMtPnFoX3Bvb2wsCi0JCQkJCSAgICAgIG1FcC0+cWhba10ucHRyLCBtRXAtPnFoW2tdLmRtYSk7CisJCWlmIChtRXAtPnFoLnB0ciAhPSBOVUxMKQorCQkJZG1hX3Bvb2xfZnJlZSh1ZGMtPnFoX3Bvb2wsIG1FcC0+cWgucHRyLCBtRXAtPnFoLmRtYSk7CiAJfQogCisJdWRjLT5nYWRnZXQuZXAwID0gTlVMTDsKIAl1ZGMtPmRyaXZlciA9IE5VTEw7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaAppbmRleCBmNjFmZWQwLi5hMjQ5MmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaApAQCAtMjAsNyArMjAsNyBAQAogICogREVGSU5FCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIENJMTNYWFhfUEFHRV9TSVpFICA0MDk2dWwgLyogcGFnZSBzaXplIGZvciBURCdzICovCi0jZGVmaW5lIEVORFBUX01BWCAgICAgICAgICAoMTYpCisjZGVmaW5lIEVORFBUX01BWCAgICAgICAgICAoMzIpCiAjZGVmaW5lIENUUkxfUEFZTE9BRF9NQVggICAoNjQpCiAjZGVmaW5lIFJYICAgICAgICAoMCkgIC8qIHNpbWlsYXIgdG8gVVNCX0RJUl9PVVQgYnV0IGNhbiBiZSB1c2VkIGFzIGFuIGluZGV4ICovCiAjZGVmaW5lIFRYICAgICAgICAoMSkgIC8qIHNpbWlsYXIgdG8gVVNCX0RJUl9JTiAgYnV0IGNhbiBiZSB1c2VkIGFzIGFuIGluZGV4ICovCkBAIC04OCw4ICs4OCw3IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgICBxdWV1ZTsKIAkJc3RydWN0IGNpMTN4eHhfcWggKnB0cjsKIAkJZG1hX2FkZHJfdCAgICAgICAgIGRtYTsKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxaFsyXTsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QgICAgICAgICAgICAgICAgICAgICpzdGF0dXM7CisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWg7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VkZ2U7CiAKIAkvKiBnbG9iYWwgcmVzb3VyY2VzICovCkBAIC0xMTksOSArMTE4LDEzIEBACiAKIAlzdHJ1Y3QgZG1hX3Bvb2wgICAgICAgICAgICpxaF9wb29sOyAgIC8qIERNQSBwb29sIGZvciBxdWV1ZSBoZWFkcyAqLwogCXN0cnVjdCBkbWFfcG9vbCAgICAgICAgICAgKnRkX3Bvb2w7ICAgLyogRE1BIHBvb2wgZm9yIHRyYW5zZmVyIGRlc2NzICovCisJc3RydWN0IHVzYl9yZXF1ZXN0ICAgICAgICAqc3RhdHVzOyAgICAvKiBlcDAgc3RhdHVzIHJlcXVlc3QgKi8KIAogCXN0cnVjdCB1c2JfZ2FkZ2V0ICAgICAgICAgIGdhZGdldDsgICAgIC8qIFVTQiBzbGF2ZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgY2kxM3h4eF9lcCAgICAgICAgICBjaTEzeHh4X2VwW0VORFBUX01BWF07IC8qIGV4dGVuZGVkIGVuZHB0cyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGVwMF9kaXI7ICAgIC8qIGVwMCBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgZXAwb3V0IGNpMTN4eHhfZXBbMF0KKyNkZWZpbmUgZXAwaW4gIGNpMTN4eHhfZXBbMTZdCiAKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgICpkcml2ZXI7ICAgICAvKiAzcmQgcGFydHkgZ2FkZ2V0IGRyaXZlciAqLwogCXN0cnVjdCBjaTEzeHh4X3VkY19kcml2ZXIgKnVkY19kcml2ZXI7IC8qIGRldmljZSBjb250cm9sbGVyIGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IGY2ZmY4NDUuLjFiYTRiZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTkyOCw4ICs5MjgsOSBAQAogCQkgKi8KIAkJc3dpdGNoIChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykgewogCQljYXNlIFVTQl9SRUNJUF9JTlRFUkZBQ0U6Ci0JCQlpZiAoY2Rldi0+Y29uZmlnKQotCQkJCWYgPSBjZGV2LT5jb25maWctPmludGVyZmFjZVtpbnRmXTsKKwkJCWlmICghY2Rldi0+Y29uZmlnIHx8IHdfaW5kZXggPj0gTUFYX0NPTkZJR19JTlRFUkZBQ0VTKQorCQkJCWJyZWFrOworCQkJZiA9IGNkZXYtPmNvbmZpZy0+aW50ZXJmYWNlW2ludGZdOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBVU0JfUkVDSVBfRU5EUE9JTlQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCmluZGV4IGI1ZGJiMjMuLjZkOGU1MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCkBAIC0yOTMsNiArMjkzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NvbXBvc2l0ZS5oPgogCiAjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCiAKQEAgLTI3NjMsNyArMjc2NCw3IEBACiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAkJY29tbW9uLT5mcmVlX3N0b3JhZ2Vfb25fcmVsZWFzZSA9IDE7CiAJfSBlbHNlIHsKLQkJbWVtc2V0KGNvbW1vbiwgMCwgc2l6ZW9mIGNvbW1vbik7CisJCW1lbXNldChjb21tb24sIDAsIHNpemVvZiAqY29tbW9uKTsKIAkJY29tbW9uLT5mcmVlX3N0b3JhZ2Vfb25fcmVsZWFzZSA9IDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCmluZGV4IDNjNmUxYTAuLjVlMTQ5NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCkBAIC0zNDYsMTQgKzM0NiwxOSBAQAogCiAJCWlmICh1bmxpa2VseSghc2tiKSkKIAkJCWJyZWFrOwotCQlza2JfYWRkX3J4X2ZyYWcoc2tiLCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzLCBwYWdlLCAwLAotCQkJCXJlcS0+YWN0dWFsKTsKKworCQlpZiAoc2tiLT5sZW4gPT0gMCkgeyAvKiBGaXJzdCBmcmFnbWVudCAqLworCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX1BIT05FVCk7CisJCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCQkJLyogQ2FuJ3QgdXNlIHBza2JfcHVsbCgpIG9uIHBhZ2UgaW4gSVJRICovCisJCQltZW1jcHkoc2tiX3B1dChza2IsIDEpLCBwYWdlX2FkZHJlc3MocGFnZSksIDEpOworCQl9CisKKwkJc2tiX2FkZF9yeF9mcmFnKHNrYiwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncywgcGFnZSwKKwkJCQlza2ItPmxlbiA9PSAwLCByZXEtPmFjdHVhbCk7CiAJCXBhZ2UgPSBOVUxMOwogCiAJCWlmIChyZXEtPmFjdHVhbCA8IHJlcS0+bGVuZ3RoKSB7IC8qIExhc3QgZnJhZ21lbnQgKi8KLQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9QSE9ORVQpOwotCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQkJCXBza2JfcHVsbChza2IsIDEpOwogCQkJc2tiLT5kZXYgPSBkZXY7CiAJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYwppbmRleCAwYzhkZDgxLi5iMTIwZGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKQEAgLTE5OCwxMCArMTk4LDEwIEBACiAjZGVmaW5lIFBDSF9VRENfQlJMRU4JCTB4MEYJLyogQnVyc3QgbGVuZ3RoICovCiAjZGVmaW5lIFBDSF9VRENfVEhMRU4JCTB4MUYJLyogVGhyZXNob2xkIGxlbmd0aCAqLwogLyogVmFsdWUgb2YgRVAgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUgVURDX0VQMElOX0JVRkZfU0laRQk2NAotI2RlZmluZSBVRENfRVBJTl9CVUZGX1NJWkUJNTEyCi0jZGVmaW5lIFVEQ19FUDBPVVRfQlVGRl9TSVpFCTY0Ci0jZGVmaW5lIFVEQ19FUE9VVF9CVUZGX1NJWkUJNTEyCisjZGVmaW5lIFVEQ19FUDBJTl9CVUZGX1NJWkUJMTYKKyNkZWZpbmUgVURDX0VQSU5fQlVGRl9TSVpFCTI1NgorI2RlZmluZSBVRENfRVAwT1VUX0JVRkZfU0laRQkxNgorI2RlZmluZSBVRENfRVBPVVRfQlVGRl9TSVpFCTI1NgogLyogVmFsdWUgb2YgRVAgbWF4aW11bSBwYWNrZXQgc2l6ZSAqLwogI2RlZmluZSBVRENfRVAwSU5fTUFYX1BLVF9TSVpFCTY0CiAjZGVmaW5lIFVEQ19FUDBPVVRfTUFYX1BLVF9TSVpFCTY0CkBAIC0zNTEsNyArMzUxLDcgQEAKIAlzdHJ1Y3QgcGNpX3Bvb2wJCSpkYXRhX3JlcXVlc3RzOwogCXN0cnVjdCBwY2lfcG9vbAkJKnN0cF9yZXF1ZXN0czsKIAlkbWFfYWRkcl90CQkJZG1hX2FkZHI7Ci0JdW5zaWduZWQgbG9uZwkJCWVwMG91dF9idWZbNjRdOworCXZvaWQJCQkJKmVwMG91dF9idWY7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdAkJc2V0dXBfZGF0YTsKIAl1bnNpZ25lZCBsb25nCQkJcGh5c19hZGRyOwogCXZvaWQgX19pb21lbQkJCSpiYXNlX2FkZHI7CkBAIC0zNjEsNiArMzYxLDggQEAKIAogI2RlZmluZSBQQ0hfVURDX1BDSV9CQVIJCQkxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUcyMFRfVURDCTB4ODgwOAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JPSE0JCTB4MTBEQgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01MNzIxM19JT0hfVURDCTB4ODAxRAogCiBzdGF0aWMgY29uc3QgY2hhcgllcDBfc3RyaW5nW10gPSAiZXAwaW4iOwogc3RhdGljIERFRklORV9TUElOTE9DSyh1ZGNfc3RhbGxfc3BpbmxvY2spOwkvKiBzdGFsbCBzcGluIGxvY2sgKi8KQEAgLTEyMTksMTEgKzEyMjEsMTEgQEAKIAlkZXYgPSBlcC0+ZGV2OwogCWlmIChyZXEtPmRtYV9tYXBwZWQpIHsKIAkJaWYgKGVwLT5pbikKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCByZXEtPnJlcS5kbWEsCi0JCQkJCSByZXEtPnJlcS5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsIHJlcS0+cmVxLmRtYSwKKwkJCQkJIHJlcS0+cmVxLmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCByZXEtPnJlcS5kbWEsCi0JCQkJCSByZXEtPnJlcS5sZW5ndGgsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwgcmVxLT5yZXEuZG1hLAorCQkJCQkgcmVxLT5yZXEubGVuZ3RoLCBETUFfRlJPTV9ERVZJQ0UpOwogCQlyZXEtPmRtYV9tYXBwZWQgPSAwOwogCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOwogCX0KQEAgLTE0MTQsNyArMTQxNiw2IEBACiAKIAlwY2hfdWRjX2NsZWFyX2RtYShlcC0+ZGV2LCBETUFfRElSX1JYKTsKIAl0ZF9kYXRhID0gcmVxLT50ZF9kYXRhOwotCWVwLT50ZF9kYXRhID0gcmVxLT50ZF9kYXRhOwogCS8qIFNldCB0aGUgc3RhdHVzIGJpdHMgZm9yIGFsbCBkZXNjcmlwdG9ycyAqLwogCXdoaWxlICgxKSB7CiAJCXRkX2RhdGEtPnN0YXR1cyA9ICh0ZF9kYXRhLT5zdGF0dXMgJiB+UENIX1VEQ19CVUZGX1NUUykgfApAQCAtMTYxMywxNSArMTYxNCwxOSBAQAogCWlmICh1c2JyZXEtPmxlbmd0aCAmJgogCSAgICAoKHVzYnJlcS0+ZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHx8ICF1c2JyZXEtPmRtYSkpIHsKIAkJaWYgKGVwLT5pbikKLQkJCXVzYnJlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCB1c2JyZXEtPmJ1ZiwKLQkJCQkJdXNicmVxLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJdXNicmVxLT5kbWEgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsCisJCQkJCQkgICAgIHVzYnJlcS0+YnVmLAorCQkJCQkJICAgICB1c2JyZXEtPmxlbmd0aCwKKwkJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKLQkJCXVzYnJlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCB1c2JyZXEtPmJ1ZiwKLQkJCQkJdXNicmVxLT5sZW5ndGgsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQl1c2JyZXEtPmRtYSA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwKKwkJCQkJCSAgICAgdXNicmVxLT5idWYsCisJCQkJCQkgICAgIHVzYnJlcS0+bGVuZ3RoLAorCQkJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCQlyZXEtPmRtYV9tYXBwZWQgPSAxOwogCX0KIAlpZiAodXNicmVxLT5sZW5ndGggPiAwKSB7Ci0JCXJldHZhbCA9IHByZXBhcmVfZG1hKGVwLCByZXEsIGdmcCk7CisJCXJldHZhbCA9IHByZXBhcmVfZG1hKGVwLCByZXEsIEdGUF9BVE9NSUMpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBwcm9iZV9lbmQ7CiAJfQpAQCAtMTY0Niw3ICsxNjUxLDYgQEAKIAkJCXBjaF91ZGNfd2FpdF9lcF9zdGFsbChlcCk7CiAJCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcCk7CiAJCQlwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKGVwLT5kZXYsICgxIDw8IGVwLT5udW0pKTsKLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfVFgpOwogCQl9CiAJfQogCS8qIE5vdyBhZGQgdGhpcyByZXF1ZXN0IHRvIHRoZSBlcCdzIHBlbmRpbmcgcmVxdWVzdHMgKi8KQEAgLTE5MjYsNiArMTkzMCw3IEBACiAJICAgIFBDSF9VRENfQlNfRE1BX0RPTkUpCiAJCXJldHVybjsKIAlwY2hfdWRjX2NsZWFyX2RtYShlcC0+ZGV2LCBETUFfRElSX1JYKTsKKwlwY2hfdWRjX2VwX3NldF9kZHB0cihlcCwgMCk7CiAJaWYgKChyZXEtPnRkX2RhdGFfbGFzdC0+c3RhdHVzICYgUENIX1VEQ19SWFRYX1NUUykgIT0KIAkgICAgUENIX1VEQ19SVFNfU1VDQykgewogCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIkludmFsaWQgUlhUWCBzdGF0dXMgKDB4JTA4eCkgIgpAQCAtMTk2Myw3ICsxOTY4LDcgQEAKIAl1MzIJZXBzdHM7CiAJc3RydWN0IHBjaF91ZGNfZXAJKmVwOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bV07CisJZXAgPSAmZGV2LT5lcFtVRENfRVBJTl9JRFgoZXBfbnVtKV07CiAJZXBzdHMgPSBlcC0+ZXBzdHM7CiAJZXAtPmVwc3RzID0gMDsKIApAQCAtMjAwOCw3ICsyMDEzLDcgQEAKIAlzdHJ1Y3QgcGNoX3VkY19lcAkJKmVwOwogCXN0cnVjdCBwY2hfdWRjX3JlcXVlc3QJCSpyZXEgPSBOVUxMOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bSArIDFdOworCWVwID0gJmRldi0+ZXBbVURDX0VQT1VUX0lEWChlcF9udW0pXTsKIAllcHN0cyA9IGVwLT5lcHN0czsKIAllcC0+ZXBzdHMgPSAwOwogCkBAIC0yMDI1LDEwICsyMDMwLDExIEBACiAJfQogCWlmIChlcHN0cyAmIFVEQ19FUFNUU19IRSkKIAkJcmV0dXJuOwotCWlmIChlcHN0cyAmIFVEQ19FUFNUU19SU1MpCisJaWYgKGVwc3RzICYgVURDX0VQU1RTX1JTUykgewogCQlwY2hfdWRjX2VwX3NldF9zdGFsbChlcCk7CiAJCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwKIAkJCQkJICAgICBQQ0hfVURDX0VQSU5UKGVwLT5pbiwgZXAtPm51bSkpOworCX0KIAlpZiAoZXBzdHMgJiBVRENfRVBTVFNfUkNTKSB7CiAJCWlmICghZGV2LT5wcm90X3N0YWxsKSB7CiAJCQlwY2hfdWRjX2VwX2NsZWFyX3N0YWxsKGVwKTsKQEAgLTIwNjAsOCArMjA2NiwxMCBAQAogewogCXUzMgllcHN0czsKIAlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CisJc3RydWN0IHBjaF91ZGNfZXAJKmVwX291dDsKIAogCWVwID0gJmRldi0+ZXBbVURDX0VQMElOX0lEWF07CisJZXBfb3V0ID0gJmRldi0+ZXBbVURDX0VQME9VVF9JRFhdOwogCWVwc3RzID0gZXAtPmVwc3RzOwogCWVwLT5lcHN0cyA9IDA7CiAKQEAgLTIwNzMsOCArMjA4MSwxNiBAQAogCQlyZXR1cm47CiAJaWYgKGVwc3RzICYgVURDX0VQU1RTX0hFKQogCQlyZXR1cm47Ci0JaWYgKChlcHN0cyAmIFVEQ19FUFNUU19UREMpICYmICghZGV2LT5zdGFsbCkpCisJaWYgKChlcHN0cyAmIFVEQ19FUFNUU19UREMpICYmICghZGV2LT5zdGFsbCkpIHsKIAkJcGNoX3VkY19jb21wbGV0ZV90cmFuc2ZlcihlcCk7CisJCXBjaF91ZGNfY2xlYXJfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCWVwX291dC0+dGRfZGF0YS0+c3RhdHVzID0gKGVwX291dC0+dGRfZGF0YS0+c3RhdHVzICYKKwkJCQkJflBDSF9VRENfQlVGRl9TVFMpIHwKKwkJCQkJUENIX1VEQ19CU19IU1RfUkRZOworCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcF9vdXQpOworCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJcGNoX3VkY19lcF9zZXRfcnJkeShlcF9vdXQpOworCX0KIAkvKiBPbiBJTiBpbnRlcnJ1cHQsIHByb3ZpZGUgZGF0YSBpZiB3ZSBoYXZlIGFueSAqLwogCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfSU4pICYmICEoZXBzdHMgJiBVRENfRVBTVFNfVERDKSAmJgogCSAgICAgIShlcHN0cyAmIFVEQ19FUFNUU19UWEVNUFRZKSkKQEAgLTIxMDIsMTEgKzIxMTgsOSBAQAogCQlkZXYtPnN0YWxsID0gMDsKIAkJZGV2LT5lcFtVRENfRVAwSU5fSURYXS5oYWx0ZWQgPSAwOwogCQlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5oYWx0ZWQgPSAwOwotCQkvKiBJbiBkYXRhIG5vdCByZWFkeSAqLwotCQlwY2hfdWRjX2VwX3NldF9uYWsoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CiAJCWRldi0+c2V0dXBfZGF0YSA9IGVwLT50ZF9zdHAtPnJlcXVlc3Q7CiAJCXBjaF91ZGNfaW5pdF9zZXR1cF9idWZmKGVwLT50ZF9zdHApOwotCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfVFgpOworCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfUlgpOwogCQlwY2hfdWRjX2VwX2ZpZm9fZmx1c2goJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSwKIAkJCQkgICAgICBkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLmluKTsKIAkJaWYgKChkZXYtPnNldHVwX2RhdGEuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikpCkBAIC0yMTIyLDE0ICsyMTM2LDIzIEBACiAJCXNldHVwX3N1cHBvcnRlZCA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsCiAJCQkJCQkgICAgICZkZXYtPnNldHVwX2RhdGEpOwogCQlzcGluX2xvY2soJmRldi0+bG9jayk7CisKKwkJaWYgKGRldi0+c2V0dXBfZGF0YS5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSB7CisJCQllcC0+dGRfZGF0YS0+c3RhdHVzID0gKGVwLT50ZF9kYXRhLT5zdGF0dXMgJgorCQkJCQkJflBDSF9VRENfQlVGRl9TVFMpIHwKKwkJCQkJCVBDSF9VRENfQlNfSFNUX1JEWTsKKwkJCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCBlcC0+dGRfZGF0YV9waHlzKTsKKwkJfQogCQkvKiBlcDAgaW4gcmV0dXJucyBkYXRhIG9uIElOIHBoYXNlICovCiAJCWlmIChzZXR1cF9zdXBwb3J0ZWQgPj0gMCAmJiBzZXR1cF9zdXBwb3J0ZWQgPAogCQkJCQkgICAgVURDX0VQMElOX01BWF9QS1RfU0laRSkgewogCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CiAJCQkvKiBHYWRnZXQgd291bGQgaGF2ZSBxdWV1ZWQgYSByZXF1ZXN0IHdoZW4KIAkJCSAqIHdlIGNhbGxlZCB0aGUgc2V0dXAgKi8KLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOwotCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXApOworCQkJaWYgKCEoZGV2LT5zZXR1cF9kYXRhLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pKSB7CisJCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXApOworCQkJfQogCQl9IGVsc2UgaWYgKHNldHVwX3N1cHBvcnRlZCA8IDApIHsKIAkJCS8qIGlmIHVuc3VwcG9ydGVkIHJlcXVlc3QsIHRoZW4gc3RhbGwgKi8KIAkJCXBjaF91ZGNfZXBfc2V0X3N0YWxsKCYoZGV2LT5lcFtVRENfRVAwSU5fSURYXSkpOwpAQCAtMjE0MiwyMiArMjE2NSwxMyBAQAogCQl9CiAJfSBlbHNlIGlmICgoKChzdGF0ICYgVURDX0VQU1RTX09VVF9NQVNLKSA+PiBVRENfRVBTVFNfT1VUX1NISUZUKSA9PQogCQkgICAgIFVEQ19FUFNUU19PVVRfREFUQSkgJiYgIWRldi0+c3RhbGwpIHsKLQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKLQkJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiJXM6IE5vIHJlcXVlc3RcbiIsIF9fZnVuY19fKTsKLQkJCWVwLT50ZF9kYXRhLT5zdGF0dXMgPSAoZXAtPnRkX2RhdGEtPnN0YXR1cyAmCi0JCQkJCSAgICAgICB+UENIX1VEQ19CVUZGX1NUUykgfAotCQkJCQkgICAgICAgUENIX1VEQ19CU19IU1RfUkRZOwotCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBjb250cm9sIHdyaXRlICovCi0JCQkvKiBuZXh0IGZ1bmN0aW9uIHdpbGwgcGlja3VvIGFuIGNsZWFyIHRoZSBzdGF0dXMgKi8KKwkJcGNoX3VkY19jbGVhcl9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJcGNoX3VkY19lcF9zZXRfZGRwdHIoZXAsIDApOworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKIAkJCWVwLT5lcHN0cyA9IHN0YXQ7Ci0KLQkJCXBjaF91ZGNfc3ZjX2RhdGFfb3V0KGRldiwgMCk7Ci0JCQkvKiByZS1wcm9ncmFtIGRlc2MuIHBvaW50ZXIgZm9yIHBvc3NpYmxlIFpMUHMgKi8KLQkJCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCBlcC0+dGRfZGF0YV9waHlzKTsKLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOworCQkJcGNoX3VkY19zdmNfZGF0YV9vdXQoZGV2LCBQQ0hfVURDX0VQMCk7CiAJCX0KKwkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CiAJfQogCXBjaF91ZGNfZXBfc2V0X3JyZHkoZXApOwogfQpAQCAtMjE3NCw3ICsyMTg4LDcgQEAKIAlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CiAJc3RydWN0IHBjaF91ZGNfcmVxdWVzdCAqcmVxOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bV07CisJZXAgPSAmZGV2LT5lcFtVRENfRVBJTl9JRFgoZXBfbnVtKV07CiAJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CiAJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QsIHF1ZXVlKTsKIAkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LApAQCAtMjE5NiwxMyArMjIxMCwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBQQ0hfVURDX1VTRURfRVBfTlVNOyBpKyspIHsKIAkJLyogSU4gKi8KIAkJaWYgKGVwX2ludHIgJiAoMHgxIDw8IGkpKSB7Ci0JCQllcCA9ICZkZXYtPmVwWzIqaV07CisJCQllcCA9ICZkZXYtPmVwW1VEQ19FUElOX0lEWChpKV07CiAJCQllcC0+ZXBzdHMgPSBwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKGVwKTsKIAkJCXBjaF91ZGNfY2xlYXJfZXBfc3RhdHVzKGVwLCBlcC0+ZXBzdHMpOwogCQl9CiAJCS8qIE9VVCAqLwogCQlpZiAoZXBfaW50ciAmICgweDEwMDAwIDw8IGkpKSB7Ci0JCQllcCA9ICZkZXYtPmVwWzIqaSsxXTsKKwkJCWVwID0gJmRldi0+ZXBbVURDX0VQT1VUX0lEWChpKV07CiAJCQllcC0+ZXBzdHMgPSBwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKGVwKTsKIAkJCXBjaF91ZGNfY2xlYXJfZXBfc3RhdHVzKGVwLCBlcC0+ZXBzdHMpOwogCQl9CkBAIC0yNTYzLDkgKzI1NzcsNiBAQAogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0uZXAubWF4cGFja2V0ID0gVURDX0VQMElOX01BWF9QS1RfU0laRTsKIAlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5lcC5tYXhwYWNrZXQgPSBVRENfRVAwT1VUX01BWF9QS1RfU0laRTsKIAotCWRldi0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShkZXYtPnBkZXYsIGRldi0+ZXAwb3V0X2J1ZiwgMjU2LAotCQkJCSAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQogCS8qIHJlbW92ZSBlcDAgaW4gYW5kIG91dCBmcm9tIHRoZSBsaXN0LiAgVGhleSBoYXZlIG93biBwb2ludGVyICovCiAJbGlzdF9kZWxfaW5pdCgmZGV2LT5lcFtVRENfRVAwSU5fSURYXS5lcC5lcF9saXN0KTsKIAlsaXN0X2RlbF9pbml0KCZkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5lcC5lcF9saXN0KTsKQEAgLTI2MzcsNiArMjY0OCwxMyBAQAogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfc3RwX3BoeXMgPSAwOwogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfZGF0YSA9IE5VTEw7CiAJZGV2LT5lcFtVRENfRVAwSU5fSURYXS50ZF9kYXRhX3BoeXMgPSAwOworCisJZGV2LT5lcDBvdXRfYnVmID0ga3phbGxvYyhVRENfRVAwT1VUX0JVRkZfU0laRSAqIDQsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5lcDBvdXRfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXYtPmRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJmRldi0+cGRldi0+ZGV2LCBkZXYtPmVwMG91dF9idWYsCisJCQkJICAgICAgIFVEQ19FUDBPVVRfQlVGRl9TSVpFICogNCwKKwkJCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjcwMCw3ICsyNzE4LDggQEAKIAogCXBjaF91ZGNfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldiwgVURDX0RFVklOVF9NU0spOwogCi0JLyogQXNzdWVzIHRoYXQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgcmVxdWV0cyB3aXRoIHRoaXMgZHJpdmVyICovCisJLyogQXNzdXJlcyB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nIHJlcXVlc3RzIHdpdGggdGhpcyBkcml2ZXIgKi8KKwlkcml2ZXItPmRpc2Nvbm5lY3QoJmRldi0+Z2FkZ2V0KTsKIAlkcml2ZXItPnVuYmluZCgmZGV2LT5nYWRnZXQpOwogCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCWRldi0+ZHJpdmVyID0gTlVMTDsKQEAgLTI3NTAsNiArMjc2OSwxMSBAQAogCQlwY2lfcG9vbF9kZXN0cm95KGRldi0+c3RwX3JlcXVlc3RzKTsKIAl9CiAKKwlpZiAoZGV2LT5kbWFfYWRkcikKKwkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsIGRldi0+ZG1hX2FkZHIsCisJCQkJIFVEQ19FUDBPVVRfQlVGRl9TSVpFICogNCwgRE1BX0ZST01fREVWSUNFKTsKKwlrZnJlZShkZXYtPmVwMG91dF9idWYpOworCiAJcGNoX3VkY19leGl0KGRldik7CiAKIAlpZiAoZGV2LT5pcnFfcmVnaXN0ZXJlZCkKQEAgLTI3OTIsMTEgKzI4MTYsNyBAQAogCWludCByZXQ7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JcmV0ID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogcGNpX3Jlc3RvcmVfc3RhdGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtMjkxNCw2ICsyOTM0LDExIEBACiAJCS5jbGFzcyA9IChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUsCiAJCS5jbGFzc19tYXNrID0gMHhmZmZmZmZmZiwKIAl9LAorCXsKKwkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JPSE0sIFBDSV9ERVZJQ0VfSURfTUw3MjEzX0lPSF9VREMpLAorCQkuY2xhc3MgPSAoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweGZlLAorCQkuY2xhc3NfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKIAl7IDAgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCmluZGV4IDJmYzg2MzYuLjEyZmY2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwpAQCAtMTMxLDMxICsxMzEsMzEgQEAKICAqIHBhcmFtZXRlcnMgYXJlIGluIFVURi04IChzdXBlcnNldCBvZiBBU0NJSSdzIDcgYml0IGNoYXJhY3RlcnMpLgogICovCiAKLXN0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBpZFZlbmRvcjsKK3N0YXRpYyB1c2hvcnQgaWRWZW5kb3I7CiBtb2R1bGVfcGFyYW0oaWRWZW5kb3IsIHVzaG9ydCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlkVmVuZG9yLCAiVVNCIFZlbmRvciBJRCIpOwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgaWRQcm9kdWN0Oworc3RhdGljIHVzaG9ydCBpZFByb2R1Y3Q7CiBtb2R1bGVfcGFyYW0oaWRQcm9kdWN0LCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpZFByb2R1Y3QsICJVU0IgUHJvZHVjdCBJRCIpOwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgYmNkRGV2aWNlOworc3RhdGljIHVzaG9ydCBiY2REZXZpY2U7CiBtb2R1bGVfcGFyYW0oYmNkRGV2aWNlLCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhiY2REZXZpY2UsICJVU0IgRGV2aWNlIHZlcnNpb24gKEJDRCkiKTsKIAotc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaU1hbnVmYWN0dXJlcjsKK3N0YXRpYyBjaGFyICppTWFudWZhY3R1cmVyOwogbW9kdWxlX3BhcmFtKGlNYW51ZmFjdHVyZXIsIGNoYXJwLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaU1hbnVmYWN0dXJlciwgIlVTQiBNYW51ZmFjdHVyZXIgc3RyaW5nIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlQcm9kdWN0Oworc3RhdGljIGNoYXIgKmlQcm9kdWN0OwogbW9kdWxlX3BhcmFtKGlQcm9kdWN0LCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlQcm9kdWN0LCAiVVNCIFByb2R1Y3Qgc3RyaW5nIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlTZXJpYWxOdW07CitzdGF0aWMgY2hhciAqaVNlcmlhbE51bTsKIG1vZHVsZV9wYXJhbShpU2VyaWFsTnVtLCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlTZXJpYWxOdW0sICIxIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlQTlBzdHJpbmc7CitzdGF0aWMgY2hhciAqaVBOUHN0cmluZzsKIG1vZHVsZV9wYXJhbShpUE5Qc3RyaW5nLCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlQTlBzdHJpbmcsICJNRkc6bGludXg7TURMOmdfcHJpbnRlcjtDTFM6UFJJTlRFUjtTTjoxOyIpOwogCkBAIC0xNTk2LDEzICsxNTk2LDEyIEBACiAJaW50IHN0YXR1czsKIAogCW11dGV4X2xvY2soJnVzYl9wcmludGVyX2dhZGdldC5sb2NrX3ByaW50ZXJfaW8pOwotCWNsYXNzX2Rlc3Ryb3kodXNiX2dhZGdldF9jbGFzcyk7Ci0JdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGdfcHJpbnRlcl9kZXZubywgMik7Ci0KIAlzdGF0dXMgPSB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKCZwcmludGVyX2RyaXZlcik7CiAJaWYgKHN0YXR1cykKIAkJRVJST1IoZGV2LCAidXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAleFxuIiwgc3RhdHVzKTsKIAorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihnX3ByaW50ZXJfZGV2bm8sIDIpOworCWNsYXNzX2Rlc3Ryb3kodXNiX2dhZGdldF9jbGFzcyk7CiAJbXV0ZXhfdW5sb2NrKCZ1c2JfcHJpbnRlcl9nYWRnZXQubG9ja19wcmludGVyX2lvKTsKIH0KIG1vZHVsZV9leGl0KGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCmluZGV4IDIwZDQzZGEuLjAxNTExODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCQlicmVhazsKIAljYXNlIFI4QTY2NTk3X0JVTEs6CiAJCS8qIGlzb2Nocm9ub3VzIHBpcGVzIG1heSBiZSB1c2VkIGFzIGJ1bGsgcGlwZXMgKi8KLQkJaWYgKGluZm8tPnBpcGUgPiBSOEE2NjU5N19CQVNFX1BJUEVOVU1fQlVMSykKKwkJaWYgKGluZm8tPnBpcGUgPj0gUjhBNjY1OTdfQkFTRV9QSVBFTlVNX0JVTEspCiAJCQlidWZudW0gPSBpbmZvLT5waXBlIC0gUjhBNjY1OTdfQkFTRV9QSVBFTlVNX0JVTEs7CiAJCWVsc2UKIAkJCWJ1Zm51bSA9IGluZm8tPnBpcGUgLSBSOEE2NjU5N19CQVNFX1BJUEVOVU1fSVNPQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCAyNDA0NmMwLi4wZTZhZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC0xNTEsNiArMTUxLDggQEAKIAkgIFF1YWxjb21tIGNoaXBzZXRzLiBSb290IEh1YiBoYXMgaW5idWlsdCBUVC4KIAkgIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gT1RHIGRyaXZlciBmb3IgUEhZIGluaXRpYWxpemF0aW9uLAogCSAgY2xvY2sgbWFuYWdlbWVudCwgcG93ZXJpbmcgdXAgVkJVUywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCisJICBUaGlzIGRyaXZlciBpcyBub3Qgc3VwcG9ydGVkIG9uIGJvYXJkcyBsaWtlIHRyb3V0IHdoaWNoCisJICBoYXMgYW4gZXh0ZXJuYWwgUEhZLgogCiBjb25maWcgVVNCX0VIQ0lfSENEX1BQQ19PRgogCWJvb2wgIkVIQ0kgc3VwcG9ydCBmb3IgUFBDIFVTQiBjb250cm9sbGVyIG9uIE9GIHBsYXRmb3JtIGJ1cyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwppbmRleCAyYmFmOGE4Li5hODY5ZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCkBAIC0yMjcsOCArMjI3LDggQEAKIAkgKiBtYXJrIEhXIHVuYWNjZXNzaWJsZS4gIFRoZSBQTSBhbmQgVVNCIGNvcmVzIG1ha2Ugc3VyZSB0aGF0CiAJICogdGhlIHJvb3QgaHViIGlzIGVpdGhlciBzdXNwZW5kZWQgb3Igc3RvcHBlZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9zdXNwZW5kKGVoY2ksIGRldmljZV9tYXlfd2FrZXVwKGRldikpOworCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJZWhjaV93cml0ZWwoZWhjaSwgMCwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKIAkodm9pZCllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwppbmRleCA4NmU0Mjg5Li41Yzc2MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCkBAIC01Miw3ICs1Miw2IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGlycTsKIAlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGludCB0ZW1wOwogCiAJcHJfZGVidWcoImluaXRpYWxpemluZyBGU0wtU09DIFVTQiBDb250cm9sbGVyXG4iKTsKIApAQCAtMTI2LDE4ICsxMjUsNiBAQAogCQlnb3RvIGVycjM7CiAJfQogCi0JLyoKLQkgKiBDaGVjayBpZiBpdCBpcyBNUEM1MTIxIFNvQywgb3RoZXJ3aXNlIHNldCBwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzCi0JICogZmxhZyBmb3IgODN4eCBvciA4NTM2IHN5c3RlbSBpbnRlcmZhY2UgcmVnaXN0ZXJzLgotCSAqLwotCWlmIChwZGF0YS0+YmlnX2VuZGlhbl9tbWlvKQotCQl0ZW1wID0gaW5fYmUzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9JRCk7Ci0JZWxzZQotCQl0ZW1wID0gaW5fbGUzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9JRCk7Ci0KLQlpZiAoKHRlbXAgJiBJRF9NU0spICE9ICh+KCh0ZW1wICYgTklEX01TSykgPj4gOCkgJiBJRF9NU0spKQotCQlwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzID0gMTsKLQogCS8qIEVuYWJsZSBVU0IgY29udHJvbGxlciwgODN4eCBvciA4NTM2ICovCiAJaWYgKHBkYXRhLT5oYXZlX3N5c2lmX3JlZ3MpCiAJCXNldGJpdHMzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9DVFJMLCAweDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oCmluZGV4IDJjODM1MzcuLjNmYWJlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmgKQEAgLTE5LDkgKzE5LDYgQEAKICNkZWZpbmUgX0VIQ0lfRlNMX0gKIAogLyogb2Zmc2V0cyBmb3IgdGhlIG5vbi1laGNpIHJlZ2lzdGVycyBpbiB0aGUgRlNMIFNPQyBVU0IgY29udHJvbGxlciAqLwotI2RlZmluZSBGU0xfU09DX1VTQl9JRAkJMHgwCi0jZGVmaW5lIElEX01TSwkJCTB4M2YKLSNkZWZpbmUgTklEX01TSwkJCTB4M2YwMAogI2RlZmluZSBGU0xfU09DX1VTQl9VTFBJVlAJMHgxNzAKICNkZWZpbmUgRlNMX1NPQ19VU0JfUE9SVFNDMQkweDE4NAogI2RlZmluZSBQT1JUX1BUU19NU0sJCSgzPDwzMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCA2ZmVlM2NkLi43NGRjZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC01NzIsNiArNTcyLDggQEAKIAllaGNpLT5pYWFfd2F0Y2hkb2cuZnVuY3Rpb24gPSBlaGNpX2lhYV93YXRjaGRvZzsKIAllaGNpLT5pYWFfd2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlaGNpOwogCisJaGNjX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOworCiAJLyoKIAkgKiBodyBkZWZhdWx0OiAxSyBwZXJpb2RpYyBsaXN0IGhlYWRzLCBvbmUgcGVyIGZyYW1lLgogCSAqIHBlcmlvZGljX3NpemUgY2FuIHNocmluayBieSBVU0JDTUQgdXBkYXRlIGlmIGhjY19wYXJhbXMgYWxsb3dzLgpAQCAtNTc5LDExICs1ODEsMjAgQEAKIAllaGNpLT5wZXJpb2RpY19zaXplID0gREVGQVVMVF9JX1REUFM7CiAJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9pdGRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9zaXRkX2xpc3QpOworCisJaWYgKEhDQ19QR01fRlJBTUVMSVNUTEVOKGhjY19wYXJhbXMpKSB7CisJCS8qIHBlcmlvZGljIHNjaGVkdWxlIHNpemUgY2FuIGJlIHNtYWxsZXIgdGhhbiBkZWZhdWx0ICovCisJCXN3aXRjaCAoRUhDSV9UVU5FX0ZMUykgeworCQljYXNlIDA6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAxMDI0OyBicmVhazsKKwkJY2FzZSAxOiBlaGNpLT5wZXJpb2RpY19zaXplID0gNTEyOyBicmVhazsKKwkJY2FzZSAyOiBlaGNpLT5wZXJpb2RpY19zaXplID0gMjU2OyBicmVhazsKKwkJZGVmYXVsdDoJQlVHKCk7CisJCX0KKwl9CiAJaWYgKChyZXR2YWwgPSBlaGNpX21lbV9pbml0KGVoY2ksIEdGUF9LRVJORUwpKSA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKIAkvKiBjb250cm9sbGVycyBtYXkgY2FjaGUgc29tZSBvZiB0aGUgcGVyaW9kaWMgc2NoZWR1bGUgLi4uICovCi0JaGNjX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOwogCWlmIChIQ0NfSVNPQ19DQUNIRShoY2NfcGFyYW1zKSkJCS8vIGZ1bGwgZnJhbWUgY2FjaGUKIAkJZWhjaS0+aV90aHJlc2ggPSAyICsgODsKIAllbHNlCQkJCQkvLyBOIG1pY3JvZnJhbWVzIGNhY2hlZApAQCAtNjM3LDEyICs2NDgsNiBAQAogCQkvKiBwZXJpb2RpYyBzY2hlZHVsZSBzaXplIGNhbiBiZSBzbWFsbGVyIHRoYW4gZGVmYXVsdCAqLwogCQl0ZW1wICY9IH4oMyA8PCAyKTsKIAkJdGVtcCB8PSAoRUhDSV9UVU5FX0ZMUyA8PCAyKTsKLQkJc3dpdGNoIChFSENJX1RVTkVfRkxTKSB7Ci0JCWNhc2UgMDogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDEwMjQ7IGJyZWFrOwotCQljYXNlIDE6IGVoY2ktPnBlcmlvZGljX3NpemUgPSA1MTI7IGJyZWFrOwotCQljYXNlIDI6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAyNTY7IGJyZWFrOwotCQlkZWZhdWx0OglCVUcoKTsKLQkJfQogCX0KIAlpZiAoSENDX0xQTShoY2NfcGFyYW1zKSkgewogCQkvKiBzdXBwb3J0IGxpbmsgcG93ZXIgbWFuYWdlbWVudCBFSENJIDEuMSBhZGRlbmR1bSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCmluZGV4IDc5NmVhMGMuLjhhNTE1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogewogCWludAkJcG9ydDsKIAl1MzIJCXRlbXA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKIAogCS8qIElmIHJlbW90ZSB3YWtldXAgaXMgZW5hYmxlZCBmb3IgdGhlIHJvb3QgaHViIGJ1dCBkaXNhYmxlZAogCSAqIGZvciB0aGUgY29udHJvbGxlciwgd2UgbXVzdCBhZGp1c3QgYWxsIHRoZSBwb3J0IHdha2V1cCBmbGFncwpAQCAtMTIwLDYgKzEyMSw4IEBACiAJaWYgKCFlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5yb290X2h1Yi0+ZG9fcmVtb3RlX3dha2V1cCB8fCBkb193YWtldXApCiAJCXJldHVybjsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKIAkvKiBjbGVhciBwaHkgbG93LXBvd2VyIG1vZGUgYmVmb3JlIGNoYW5naW5nIHdha2V1cCBmbGFncyAqLwogCWlmIChlaGNpLT5oYXNfaG9zdHBjKSB7CiAJCXBvcnQgPSBIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKTsKQEAgLTEzMSw3ICsxMzQsOSBAQAogCQkJdGVtcCA9IGVoY2lfcmVhZGwoZWhjaSwgaG9zdHBjX3JlZyk7CiAJCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wICYgfkhPU1RQQ19QSENELCBob3N0cGNfcmVnKTsKIAkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJCW1zbGVlcCg1KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlwb3J0ID0gSENTX05fUE9SVFMoZWhjaS0+aGNzX3BhcmFtcyk7CkBAIC0xNzAsNiArMTc1LDggQEAKIAkvKiBEb2VzIHRoZSByb290IGh1YiBoYXZlIGEgcG9ydCB3YWtldXAgcGVuZGluZz8gKi8KIAlpZiAoIXN1c3BlbmRpbmcgJiYgKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPnN0YXR1cykgJiBTVFNfUENEKSkKIAkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoZWhjaV90b19oY2QoZWhjaSkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGVoY2lfYnVzX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKaW5kZXggZmE1OWIyNi4uYzhlMzYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYwpAQCAtMjEsMTAgKzIxLDEzIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCiAjZGVmaW5lIFVMUElfVklFV1BPUlRfT0ZGU0VUCTB4MTcwCiAKIHN0cnVjdCBlaGNpX214Y19wcml2IHsKQEAgLTExNCw2ICsxMTcsNyBAQAogCXN0cnVjdCB1c2JfaGNkICpoY2Q7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGlycSwgcmV0OworCXVuc2lnbmVkIGludCBmbGFnczsKIAlzdHJ1Y3QgZWhjaV9teGNfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBlaGNpX2hjZCAqZWhjaTsKQEAgLTE3Nyw4ICsxODEsOCBAQAogCQljbGtfZW5hYmxlKHByaXYtPmFoYmNsayk7CiAJfQogCi0JLyogImRyIiBkZXZpY2UgaGFzIGl0cyBvd24gY2xvY2sgKi8KLQlpZiAocGRldi0+aWQgPT0gMCkgeworCS8qICJkciIgZGV2aWNlIGhhcyBpdHMgb3duIGNsb2NrIG9uIGkuTVg1MSAqLworCWlmIChjcHVfaXNfbXg1MSgpICYmIChwZGV2LT5pZCA9PSAwKSkgewogCQlwcml2LT5waHkxY2xrID0gY2xrX2dldChkZXYsICJ1c2JfcGh5MSIpOwogCQlpZiAoSVNfRVJSKHByaXYtPnBoeTFjbGspKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHByaXYtPnBoeTFjbGspOwpAQCAtMjQwLDYgKzI0NCwyMyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2FkZDsKIAorCWlmIChwZGF0YS0+b3RnKSB7CisJCS8qCisJCSAqIGVmaWthbXggYW5kIGVmaWthc2IgaGF2ZSBzb21lIGhhcmR3YXJlIGJ1ZyB3aGljaCBpcworCQkgKiBwcmV2ZW50aW5nIHVzYiB0byB3b3JrIHVubGVzcyBDSFJHVkJVUyBpcyBzZXQuCisJCSAqIEl0J3MgaW4gdmlvbGF0aW9uIG9mIFVTQiBzcGVjcworCQkgKi8KKwkJaWYgKG1hY2hpbmVfaXNfbXg1MV9lZmlrYW14KCkgfHwgbWFjaGluZV9pc19teDUxX2VmaWthc2IoKSkgeworCQkJZmxhZ3MgPSBvdGdfaW9fcmVhZChwZGF0YS0+b3RnLCBVTFBJX09UR19DVFJMKTsKKwkJCWZsYWdzIHw9IFVMUElfT1RHX0NUUkxfQ0hSR1ZCVVM7CisJCQlyZXQgPSBvdGdfaW9fd3JpdGUocGRhdGEtPm90ZywgZmxhZ3MsIFVMUElfT1RHX0NUUkwpOworCQkJaWYgKHJldCkgeworCQkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHNldCBDSFJWQlVTXG4iKTsKKwkJCQlnb3RvIGVycl9hZGQ7CisJCQl9CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIAogZXJyX2FkZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCmluZGV4IDY4MGYyZWYuLmY3ODRjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmVoY2lfb21hcF9oY19kcml2ZXIsICZwZGV2LT5kZXYsCiAJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJaWYgKCFoY2QpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBoY2Qgd2l0aCBlcnIgJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgaGNkIHdpdGggZXJyICVkXG4iLCByZXQpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9jcmVhdGVfaGNkOwogCX0KQEAgLTg2NCw3ICs4NjQsNyBAQAogCiAJcmV0ID0gb21hcF9zdGFydF9laGMob21hcCwgaGNkKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzdGFydCBlaGNpXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0IGVoY2kgd2l0aCBlcnIgJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyX3N0YXJ0OwogCX0KIApAQCAtODc5LDcgKzg3OSw3IEBACiAKIAlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgaGNkIHdpdGggZXJyICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGhjZCB3aXRoIGVyciAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfYWRkX2hjZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCA3NjE3OWMzLi4wN2JiOTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC00NCwyOCArNDQsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlaGNpX3F1aXJrX2FtZF9TQjgwMChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCitzdGF0aWMgaW50IGVoY2lfcXVpcmtfYW1kX2h1ZHNvbihzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmFtZF9zbWJ1c19kZXY7CiAJdTggcmV2ID0gMDsKIAogCWFtZF9zbWJ1c19kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FUSSwgMHg0Mzg1LCBOVUxMKTsKLQlpZiAoIWFtZF9zbWJ1c19kZXYpCi0JCXJldHVybiAwOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoYW1kX3NtYnVzX2RldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKLQlpZiAocmV2IDwgMHg0MCkgewotCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKLQkJYW1kX3NtYnVzX2RldiA9IE5VTEw7Ci0JCXJldHVybiAwOworCWlmIChhbWRfc21idXNfZGV2KSB7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFtZF9zbWJ1c19kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CisJCWlmIChyZXYgPCAweDQwKSB7CisJCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKKwkJCWFtZF9zbWJ1c19kZXYgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlhbWRfc21idXNfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsIDB4NzgwYiwgTlVMTCk7CisJCWlmICghYW1kX3NtYnVzX2RldikKKwkJCXJldHVybiAwOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShhbWRfc21idXNfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOworCQlpZiAocmV2IDwgMHgxMSB8fCByZXYgPiAweDE4KSB7CisJCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKKwkJCWFtZF9zbWJ1c19kZXYgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoIWFtZF9uYl9kZXYpCiAJCWFtZF9uYl9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwgMHgxNTEwLCBOVUxMKTsKLQlpZiAoIWFtZF9uYl9kZXYpCi0JCWVoY2lfZXJyKGVoY2ksICJRVUlSSzogdW5hYmxlIHRvIGdldCBBTUQgTkIgZGV2aWNlXG4iKTsKIAotCWVoY2lfaW5mbyhlaGNpLCAiUVVJUks6IEVuYWJsZSBBTUQgU0I4MDAgTDEgZml4XG4iKTsKKwllaGNpX2luZm8oZWhjaSwgIlFVSVJLOiBFbmFibGUgZXhjZXB0aW9uIGZvciBBTUQgSHVkc29uIEFTUE1cbiIpOwogCiAJcGNpX2Rldl9wdXQoYW1kX3NtYnVzX2Rldik7CiAJYW1kX3NtYnVzX2RldiA9IE5VTEw7CkBAIC0xMzEsNyArMTM4LDcgQEAKIAkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KIAllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CiAKLQlpZiAoZWhjaV9xdWlya19hbWRfU0I4MDAoZWhjaSkpCisJaWYgKGVoY2lfcXVpcmtfYW1kX2h1ZHNvbihlaGNpKSkKIAkJZWhjaS0+YW1kX2wxX2ZpeCA9IDE7CiAKIAlyZXR2YWwgPSBlaGNpX2hhbHQoZWhjaSk7CkBAIC0zNjAsOCArMzY3LDggQEAKIAkgKiBtYXJrIEhXIHVuYWNjZXNzaWJsZS4gIFRoZSBQTSBhbmQgVVNCIGNvcmVzIG1ha2Ugc3VyZSB0aGF0CiAJICogdGhlIHJvb3QgaHViIGlzIGVpdGhlciBzdXNwZW5kZWQgb3Igc3RvcHBlZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAllaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfc3VzcGVuZChlaGNpLCBkb193YWtldXApOworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWVoY2lfd3JpdGVsKGVoY2ksIDAsICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAJKHZvaWQpZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMKaW5kZXggZThmNGYzNi4uYTZmMjFiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXhpbGlueC1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS14aWxpbngtb2YuYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KIAogLyoqCiAgKiBlaGNpX3hpbGlueF9vZl9zZXR1cCAtIEluaXRpYWxpemUgdGhlIGRldmljZSBmb3IgZWhjaV9yZXNldCgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZzbC1tcGgtZHItb2YuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCmluZGV4IDU3NGI5OWUuLjc5YTY2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCkBAIC0yNjIsMTkgKzI2MiwyNCBAQAogCX0KIH0KIAotc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgZnNsX3VzYjJfbXBjNTEyMV9wZCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBmc2xfdXNiMl9tcGM1MTIxX3BkID0gewogCS5iaWdfZW5kaWFuX2Rlc2MgPSAxLAogCS5iaWdfZW5kaWFuX21taW8gPSAxLAogCS5lcyA9IDEsCisJLmhhdmVfc3lzaWZfcmVncyA9IDAsCiAJLmxlX3NldHVwX2J1ZiA9IDEsCiAJLmluaXQgPSBmc2xfdXNiMl9tcGM1MTIxX2luaXQsCiAJLmV4aXQgPSBmc2xfdXNiMl9tcGM1MTIxX2V4aXQsCiB9OwogI2VuZGlmIC8qIENPTkZJR19QUENfTVBDNTEyeCAqLwogCitzdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgZnNsX3VzYjJfbXBjOHh4eF9wZCA9IHsKKwkuaGF2ZV9zeXNpZl9yZWdzID0gMSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF91c2IyX21waF9kcl9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAiZnNsLXVzYjItbXBoIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImZzbC11c2IyLWRyIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbC11c2IyLW1waCIsIC5kYXRhID0gJmZzbF91c2IyX21wYzh4eHhfcGQsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciIsIC5kYXRhID0gJmZzbF91c2IyX21wYzh4eHhfcGQsIH0sCiAjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIiwgLmRhdGEgPSAmZnNsX3VzYjJfbXBjNTEyMV9wZCwgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggOTkwZjA2Yi4uMmU5NjAyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC04NjEsNiArODYxLDcgQEAKIAkJCURCRygiZGV2ICVkIGVwJWQgbWF4cGFja2V0ICVkXG4iLAogCQkJCXVkZXYtPmRldm51bSwgZXBudW0sIGVwLT5tYXhwYWNrZXQpOwogCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWtmcmVlKGVwKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKaW5kZXggZmNiZjRhYi4uMDIzMTgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYwpAQCAtMTY5LDkgKzE2OSwxMCBAQAogCX0KIH0KIAotdm9pZCB4aGNpX3ByaW50X2lyX3NldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2ludHJfcmVnICppcl9zZXQsIGludCBzZXRfbnVtKQordm9pZCB4aGNpX3ByaW50X2lyX3NldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzZXRfbnVtKQogewotCXZvaWQgKmFkZHI7CisJc3RydWN0IHhoY2lfaW50cl9yZWcgX19pb21lbSAqaXJfc2V0ID0gJnhoY2ktPnJ1bl9yZWdzLT5pcl9zZXRbc2V0X251bV07CisJdm9pZCBfX2lvbWVtICphZGRyOwogCXUzMiB0ZW1wOwogCXU2NCB0ZW1wXzY0OwogCkBAIC00NDksNyArNDUwLDcgQEAKIAl9CiB9CiAKLXZvaWQgeGhjaV9kYmdfc2xvdF9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpjdHgpCitzdGF0aWMgdm9pZCB4aGNpX2RiZ19zbG90X2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmN0eCkKIHsKIAkvKiBGaWVsZHMgYXJlIDMyIGJpdHMgd2lkZSwgRE1BIGFkZHJlc3NlcyBhcmUgaW4gYnl0ZXMgKi8KIAlpbnQgZmllbGRfc2l6ZSA9IDMyIC8gODsKQEAgLTQ4OCw3ICs0ODksNyBAQAogCQlkYmdfcnN2ZDY0KHhoY2ksICh1NjQgKilzbG90X2N0eCwgZG1hKTsKIH0KIAotdm9pZCB4aGNpX2RiZ19lcF9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorc3RhdGljIHZvaWQgeGhjaV9kYmdfZXBfY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJICAgICBzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpjdHgsCiAJCSAgICAgdW5zaWduZWQgaW50IGxhc3RfZXApCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKaW5kZXggMWQwZjQ1Zi4uYTk1MzQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAKIC8qKioqKioqKioqKioqKioqKiBTdHJlYW1zIHN0cnVjdHVyZXMgbWFuaXB1bGF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgeGhjaV9mcmVlX3N0cmVhbV9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorc3RhdGljIHZvaWQgeGhjaV9mcmVlX3N0cmVhbV9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQl1bnNpZ25lZCBpbnQgbnVtX3N0cmVhbV9jdHhzLAogCQlzdHJ1Y3QgeGhjaV9zdHJlYW1fY3R4ICpzdHJlYW1fY3R4LCBkbWFfYWRkcl90IGRtYSkKIHsKQEAgLTMzNSw3ICszMzUsNyBAQAogICogVGhlIHN0cmVhbSBjb250ZXh0IGFycmF5IG11c3QgYmUgYSBwb3dlciBvZiAyLCBhbmQgY2FuIGJlIGFzIHNtYWxsIGFzCiAgKiA2NCBieXRlcyBvciBhcyBsYXJnZSBhcyAxTUIuCiAgKi8KLXN0cnVjdCB4aGNpX3N0cmVhbV9jdHggKnhoY2lfYWxsb2Nfc3RyZWFtX2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCitzdGF0aWMgc3RydWN0IHhoY2lfc3RyZWFtX2N0eCAqeGhjaV9hbGxvY19zdHJlYW1fY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJdW5zaWduZWQgaW50IG51bV9zdHJlYW1fY3R4cywgZG1hX2FkZHJfdCAqZG1hLAogCQlnZnBfdCBtZW1fZmxhZ3MpCiB7CkBAIC0xOTAwLDExICsxOTAwLDExIEBACiAJdmFsICY9IERCT0ZGX01BU0s7CiAJeGhjaV9kYmcoeGhjaSwgIi8vIERvb3JiZWxsIGFycmF5IGlzIGxvY2F0ZWQgYXQgb2Zmc2V0IDB4JXgiCiAJCQkiIGZyb20gY2FwIHJlZ3MgYmFzZSBhZGRyXG4iLCB2YWwpOwotCXhoY2ktPmRiYSA9ICh2b2lkICopIHhoY2ktPmNhcF9yZWdzICsgdmFsOworCXhoY2ktPmRiYSA9ICh2b2lkIF9faW9tZW0gKikgeGhjaS0+Y2FwX3JlZ3MgKyB2YWw7CiAJeGhjaV9kYmdfcmVncyh4aGNpKTsKIAl4aGNpX3ByaW50X3J1bl9yZWdzKHhoY2kpOwogCS8qIFNldCBpcl9zZXQgdG8gaW50ZXJydXB0IHJlZ2lzdGVyIHNldCAwICovCi0JeGhjaS0+aXJfc2V0ID0gKHZvaWQgKikgeGhjaS0+cnVuX3JlZ3MtPmlyX3NldDsKKwl4aGNpLT5pcl9zZXQgPSAmeGhjaS0+cnVuX3JlZ3MtPmlyX3NldFswXTsKIAogCS8qCiAJICogRXZlbnQgcmluZyBzZXR1cDogQWxsb2NhdGUgYSBub3JtYWwgcmluZywgYnV0IGFsc28gc2V0dXAKQEAgLTE5NjEsNyArMTk2MSw3IEBACiAJLyogU2V0IHRoZSBldmVudCByaW5nIGRlcXVldWUgYWRkcmVzcyAqLwogCXhoY2lfc2V0X2hjX2V2ZW50X2RlcSh4aGNpKTsKIAl4aGNpX2RiZyh4aGNpLCAiV3JvdGUgRVJTVCBhZGRyZXNzIHRvIGlyX3NldCAwLlxuIik7Ci0JeGhjaV9wcmludF9pcl9zZXQoeGhjaSwgeGhjaS0+aXJfc2V0LCAwKTsKKwl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCAwKTsKIAogCS8qCiAJICogWFhYOiBNaWdodCBuZWVkIHRvIHNldCB0aGUgSW50ZXJydXB0ZXIgTW9kZXJhdGlvbiBSZWdpc3RlciB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggZGY1NThmNi4uMzI4OWJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC0zMDgsMTEgKzMwOCw4IEBACiAvKiBSaW5nIHRoZSBob3N0IGNvbnRyb2xsZXIgZG9vcmJlbGwgYWZ0ZXIgcGxhY2luZyBhIGNvbW1hbmQgb24gdGhlIHJpbmcgKi8KIHZvaWQgeGhjaV9yaW5nX2NtZF9kYihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCiB7Ci0JdTMyIHRlbXA7Ci0KIAl4aGNpX2RiZyh4aGNpLCAiLy8gRGluZyBkb25nIVxuIik7Ci0JdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmRiYS0+ZG9vcmJlbGxbMF0pICYgREJfTUFTSzsKLQl4aGNpX3dyaXRlbCh4aGNpLCB0ZW1wIHwgREJfVEFSR0VUX0hPU1QsICZ4aGNpLT5kYmEtPmRvb3JiZWxsWzBdKTsKKwl4aGNpX3dyaXRlbCh4aGNpLCBEQl9WQUxVRV9IT1NULCAmeGhjaS0+ZGJhLT5kb29yYmVsbFswXSk7CiAJLyogRmx1c2ggUENJIHBvc3RlZCB3cml0ZXMgKi8KIAl4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5kYmEtPmRvb3JiZWxsWzBdKTsKIH0KQEAgLTMyMiwyNiArMzE5LDI0IEBACiAJCXVuc2lnbmVkIGludCBlcF9pbmRleCwKIAkJdW5zaWduZWQgaW50IHN0cmVhbV9pZCkKIHsKLQlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcDsKLQl1bnNpZ25lZCBpbnQgZXBfc3RhdGU7Ci0JdTMyIGZpZWxkOwogCV9fdTMyIF9faW9tZW0gKmRiX2FkZHIgPSAmeGhjaS0+ZGJhLT5kb29yYmVsbFtzbG90X2lkXTsKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcCA9ICZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdOworCXVuc2lnbmVkIGludCBlcF9zdGF0ZSA9IGVwLT5lcF9zdGF0ZTsKIAotCWVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07Ci0JZXBfc3RhdGUgPSBlcC0+ZXBfc3RhdGU7CiAJLyogRG9uJ3QgcmluZyB0aGUgZG9vcmJlbGwgZm9yIHRoaXMgZW5kcG9pbnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcKLQkgKiBjYW5jZWxsYXRpb25zIGJlY2F1c2UgdGhlIHdlIGRvbid0IHdhbnQgdG8gaW50ZXJydXB0IHByb2Nlc3NpbmcuCisJICogY2FuY2VsbGF0aW9ucyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gaW50ZXJydXB0IHByb2Nlc3NpbmcuCiAJICogV2UgZG9uJ3Qgd2FudCB0byByZXN0YXJ0IGFueSBzdHJlYW0gcmluZ3MgaWYgdGhlcmUncyBhIHNldCBkZXF1ZXVlCiAJICogcG9pbnRlciBjb21tYW5kIHBlbmRpbmcgYmVjYXVzZSB0aGUgZGV2aWNlIGNhbiBjaG9vc2UgdG8gc3RhcnQgYW55CiAJICogc3RyZWFtIG9uY2UgdGhlIGVuZHBvaW50IGlzIG9uIHRoZSBIVyBzY2hlZHVsZS4KIAkgKiBGSVhNRSAtIGNoZWNrIGFsbCB0aGUgc3RyZWFtIHJpbmdzIGZvciBwZW5kaW5nIGNhbmNlbGxhdGlvbnMuCiAJICovCi0JaWYgKCEoZXBfc3RhdGUgJiBFUF9IQUxUX1BFTkRJTkcpICYmICEoZXBfc3RhdGUgJiBTRVRfREVRX1BFTkRJTkcpCi0JCQkmJiAhKGVwX3N0YXRlICYgRVBfSEFMVEVEKSkgewotCQlmaWVsZCA9IHhoY2lfcmVhZGwoeGhjaSwgZGJfYWRkcikgJiBEQl9NQVNLOwotCQlmaWVsZCB8PSBFUElfVE9fREIoZXBfaW5kZXgpIHwgU1RSRUFNX0lEX1RPX0RCKHN0cmVhbV9pZCk7Ci0JCXhoY2lfd3JpdGVsKHhoY2ksIGZpZWxkLCBkYl9hZGRyKTsKLQl9CisJaWYgKChlcF9zdGF0ZSAmIEVQX0hBTFRfUEVORElORykgfHwgKGVwX3N0YXRlICYgU0VUX0RFUV9QRU5ESU5HKSB8fAorCSAgICAoZXBfc3RhdGUgJiBFUF9IQUxURUQpKQorCQlyZXR1cm47CisJeGhjaV93cml0ZWwoeGhjaSwgREJfVkFMVUUoZXBfaW5kZXgsIHN0cmVhbV9pZCksIGRiX2FkZHIpOworCS8qIFRoZSBDUFUgaGFzIGJldHRlciB0aGluZ3MgdG8gZG8gYXQgdGhpcyBwb2ludCB0aGFuIHdhaXQgZm9yIGEKKwkgKiB3cml0ZS1wb3N0aW5nIGZsdXNoLiAgSXQnbGwgZ2V0IHRoZXJlIHNvb24gZW5vdWdoLgorCSAqLwogfQogCiAvKiBSaW5nIHRoZSBkb29yYmVsbCBmb3IgYW55IHJpbmdzIHdpdGggcGVuZGluZyBVUkJzICovCkBAIC00NzksOCArNDc0LDExIEBACiAJc3RhdGUtPm5ld19kZXFfc2VnID0gZmluZF90cmJfc2VnKGN1cl90ZC0+c3RhcnRfc2VnLAogCQkJZGV2LT5lcHNbZXBfaW5kZXhdLnN0b3BwZWRfdHJiLAogCQkJJnN0YXRlLT5uZXdfY3ljbGVfc3RhdGUpOwotCWlmICghc3RhdGUtPm5ld19kZXFfc2VnKQotCQlCVUcoKTsKKwlpZiAoIXN0YXRlLT5uZXdfZGVxX3NlZykgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCiAJLyogRGlnIG91dCB0aGUgY3ljbGUgc3RhdGUgc2F2ZWQgYnkgdGhlIHhIQyBkdXJpbmcgdGhlIHN0b3AgZXAgY21kICovCiAJeGhjaV9kYmcoeGhjaSwgIkZpbmRpbmcgZW5kcG9pbnQgY29udGV4dFxuIik7CiAJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIGRldi0+b3V0X2N0eCwgZXBfaW5kZXgpOwpAQCAtNDkxLDggKzQ4OSwxMCBAQAogCXN0YXRlLT5uZXdfZGVxX3NlZyA9IGZpbmRfdHJiX3NlZyhzdGF0ZS0+bmV3X2RlcV9zZWcsCiAJCQlzdGF0ZS0+bmV3X2RlcV9wdHIsCiAJCQkmc3RhdGUtPm5ld19jeWNsZV9zdGF0ZSk7Ci0JaWYgKCFzdGF0ZS0+bmV3X2RlcV9zZWcpCi0JCUJVRygpOworCWlmICghc3RhdGUtPm5ld19kZXFfc2VnKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CiAKIAl0cmIgPSAmc3RhdGUtPm5ld19kZXFfcHRyLT5nZW5lcmljOwogCWlmICgodHJiLT5maWVsZFszXSAmIFRSQl9UWVBFX0JJVE1BU0spID09IFRSQl9UWVBFKFRSQl9MSU5LKSAmJgpAQCAtMTE4OCw3ICsxMTg4LDcgQEAKIAogCWFkZHIgPSAmeGhjaS0+b3BfcmVncy0+cG9ydF9zdGF0dXNfYmFzZSArIE5VTV9QT1JUX1JFR1MgKiAocG9ydF9pZCAtIDEpOwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksIGFkZHIpOwotCWlmICgodGVtcCAmIFBPUlRfQ09OTkVDVCkgJiYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfU1VTUEVOREVEKSkgeworCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1NVU1BFTkRFRCkgewogCQl4aGNpX2RiZyh4aGNpLCAicmVzdW1lIHJvb3QgaHViXG4iKTsKIAkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKIAl9CkBAIC0xNzEwLDggKzE3MTAsNyBAQAogCQkvKiBPdGhlcnMgYWxyZWFkeSBoYW5kbGVkIGFib3ZlICovCiAJCWJyZWFrOwogCX0KLQlkZXZfZGJnKCZ0ZC0+dXJiLT5kZXYtPmRldiwKLQkJCSJlcCAlI3ggLSBhc2tlZCBmb3IgJWQgYnl0ZXMsICIKKwl4aGNpX2RiZyh4aGNpLCAiZXAgJSN4IC0gYXNrZWQgZm9yICVkIGJ5dGVzLCAiCiAJCQkiJWQgYnl0ZXMgdW50cmFuc2ZlcnJlZFxuIiwKIAkJCXRkLT51cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCiAJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLApAQCAtMjM2OSwxMiArMjM2OCwxMyBAQAogCiAJCS8qIFNjYXR0ZXIgZ2F0aGVyIGxpc3QgZW50cmllcyBtYXkgY3Jvc3MgNjRLQiBib3VuZGFyaWVzICovCiAJCXJ1bm5pbmdfdG90YWwgPSBUUkJfTUFYX0JVRkZfU0laRSAtCi0JCQkoc2dfZG1hX2FkZHJlc3Moc2cpICYgKCgxIDw8IFRSQl9NQVhfQlVGRl9TSElGVCkgLSAxKSk7CisJCQkoc2dfZG1hX2FkZHJlc3Moc2cpICYgKFRSQl9NQVhfQlVGRl9TSVpFIC0gMSkpOworCQlydW5uaW5nX3RvdGFsICY9IFRSQl9NQVhfQlVGRl9TSVpFIC0gMTsKIAkJaWYgKHJ1bm5pbmdfdG90YWwgIT0gMCkKIAkJCW51bV90cmJzKys7CiAKIAkJLyogSG93IG1hbnkgbW9yZSA2NEtCIGNodW5rcyB0byB0cmFuc2ZlciwgaG93IG1hbnkgbW9yZSBUUkJzPyAqLwotCQl3aGlsZSAocnVubmluZ190b3RhbCA8IHNnX2RtYV9sZW4oc2cpKSB7CisJCXdoaWxlIChydW5uaW5nX3RvdGFsIDwgc2dfZG1hX2xlbihzZykgJiYgcnVubmluZ190b3RhbCA8IHRlbXApIHsKIAkJCW51bV90cmJzKys7CiAJCQlydW5uaW5nX3RvdGFsICs9IFRSQl9NQVhfQlVGRl9TSVpFOwogCQl9CkBAIC0yMzg5LDcgKzIzODksOCBAQAogCX0KIAl4aGNpX2RiZyh4aGNpLCAiXG4iKTsKIAlpZiAoIWluX2ludGVycnVwdCgpKQotCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiZXAgJSN4IC0gdXJiIGxlbiA9ICVkLCBzZ2xpc3QgdXNlZCwgbnVtX3RyYnMgPSAlZFxuIiwKKwkJeGhjaV9kYmcoeGhjaSwgImVwICUjeCAtIHVyYiBsZW4gPSAlZCwgc2dsaXN0IHVzZWQsICIKKwkJCQkibnVtX3RyYnMgPSAlZFxuIiwKIAkJCQl1cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCiAJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAogCQkJCW51bV90cmJzKTsKQEAgLTIzOTksMTEgKzI0MDAsMTEgQEAKIHN0YXRpYyB2b2lkIGNoZWNrX3RyYl9tYXRoKHN0cnVjdCB1cmIgKnVyYiwgaW50IG51bV90cmJzLCBpbnQgcnVubmluZ190b3RhbCkKIHsKIAlpZiAobnVtX3RyYnMgIT0gMCkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIiVzIC0gZXAgJSN4IC0gTWlzY2FsY3VsYXRlZCBudW1iZXIgb2YgIgorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBlcCAlI3ggLSBNaXNjYWxjdWxhdGVkIG51bWJlciBvZiAiCiAJCQkJIlRSQnMsICVkIGxlZnRcbiIsIF9fZnVuY19fLAogCQkJCXVyYi0+ZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywgbnVtX3RyYnMpOwogCWlmIChydW5uaW5nX3RvdGFsICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIiVzIC0gZXAgJSN4IC0gTWlzY2FsY3VsYXRlZCB0eCBsZW5ndGgsICIKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZXAgJSN4IC0gTWlzY2FsY3VsYXRlZCB0eCBsZW5ndGgsICIKIAkJCQkicXVldWVkICUjeCAoJWQpLCBhc2tlZCBmb3IgJSN4ICglZClcbiIsCiAJCQkJX19mdW5jX18sCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLApAQCAtMjQxNCwxNCArMjQxNSwxNyBAQAogCiBzdGF0aWMgdm9pZCBnaXZlYmFja19maXJzdF90cmIoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2xvdF9pZCwKIAkJdW5zaWduZWQgaW50IGVwX2luZGV4LCB1bnNpZ25lZCBpbnQgc3RyZWFtX2lkLCBpbnQgc3RhcnRfY3ljbGUsCi0JCXN0cnVjdCB4aGNpX2dlbmVyaWNfdHJiICpzdGFydF90cmIsIHN0cnVjdCB4aGNpX3RkICp0ZCkKKwkJc3RydWN0IHhoY2lfZ2VuZXJpY190cmIgKnN0YXJ0X3RyYikKIHsKIAkvKgogCSAqIFBhc3MgYWxsIHRoZSBUUkJzIHRvIHRoZSBoYXJkd2FyZSBhdCBvbmNlIGFuZCBtYWtlIHN1cmUgdGhpcyB3cml0ZQogCSAqIGlzbid0IHJlb3JkZXJlZC4KIAkgKi8KIAl3bWIoKTsKLQlzdGFydF90cmItPmZpZWxkWzNdIHw9IHN0YXJ0X2N5Y2xlOworCWlmIChzdGFydF9jeWNsZSkKKwkJc3RhcnRfdHJiLT5maWVsZFszXSB8PSBzdGFydF9jeWNsZTsKKwllbHNlCisJCXN0YXJ0X3RyYi0+ZmllbGRbM10gJj0gfjB4MTsKIAl4aGNpX3JpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHN0cmVhbV9pZCk7CiB9CiAKQEAgLTI0NDksNyArMjQ1Myw3IEBACiAJICogdG8gc2V0IHRoZSBwb2xsaW5nIGludGVydmFsIChvbmNlIHRoZSBBUEkgaXMgYWRkZWQpLgogCSAqLwogCWlmICh4aGNpX2ludGVydmFsICE9IGVwX2ludGVydmFsKSB7Ci0JCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIkRyaXZlciB1c2VzIGRpZmZlcmVudCBpbnRlcnZhbCIKIAkJCQkJIiAoJWQgbWljcm9mcmFtZSVzKSB0aGFuIHhIQ0kgIgogCQkJCQkiKCVkIG1pY3JvZnJhbWUlcylcbiIsCkBAIC0yNTM1LDggKzI1MzksNyBAQAogCXNnID0gdXJiLT5zZzsKIAlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCXRoaXNfc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7Ci0JdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkoYWRkciAmICgoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpIC0gMSkpOworCXRyYl9idWZmX2xlbiA9IFRSQl9NQVhfQlVGRl9TSVpFIC0gKGFkZHIgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSk7CiAJdHJiX2J1ZmZfbGVuID0gbWluX3QoaW50LCB0cmJfYnVmZl9sZW4sIHRoaXNfc2dfbGVuKTsKIAlpZiAodHJiX2J1ZmZfbGVuID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQogCQl0cmJfYnVmZl9sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CkBAIC0yNTUxLDkgKzI1NTQsMTEgQEAKIAkJdTMyIHJlbWFpbmRlciA9IDA7CiAKIAkJLyogRG9uJ3QgY2hhbmdlIHRoZSBjeWNsZSBiaXQgb2YgdGhlIGZpcnN0IFRSQiB1bnRpbCBsYXRlciAqLwotCQlpZiAoZmlyc3RfdHJiKQorCQlpZiAoZmlyc3RfdHJiKSB7CiAJCQlmaXJzdF90cmIgPSBmYWxzZTsKLQkJZWxzZQorCQkJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCQkJZmllbGQgfD0gMHgxOworCQl9IGVsc2UKIAkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCiAJCS8qIENoYWluIGFsbCB0aGUgVFJCcyB0b2dldGhlcjsgY2xlYXIgdGhlIGNoYWluIGJpdCBpbiB0aGUgbGFzdApAQCAtMjU3Miw3ICsyNTc3LDcgQEAKIAkJCQkodW5zaWduZWQgaW50KSAoYWRkciArIFRSQl9NQVhfQlVGRl9TSVpFKSAmIH4oVFJCX01BWF9CVUZGX1NJWkUgLSAxKSwKIAkJCQkodW5zaWduZWQgaW50KSBhZGRyICsgdHJiX2J1ZmZfbGVuKTsKIAkJaWYgKFRSQl9NQVhfQlVGRl9TSVpFIC0KLQkJCQkoYWRkciAmICgoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpIC0gMSkpIDwgdHJiX2J1ZmZfbGVuKSB7CisJCQkJKGFkZHIgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSkgPCB0cmJfYnVmZl9sZW4pIHsKIAkJCXhoY2lfd2Fybih4aGNpLCAiV0FSTjogc2cgZG1hIHhmZXIgY3Jvc3NlcyA2NEtCIGJvdW5kYXJpZXMhXG4iKTsKIAkJCXhoY2lfZGJnKHhoY2ksICJOZXh0IGJvdW5kYXJ5IGF0ICUjeCwgZW5kIGRtYSA9ICUjeFxuIiwKIAkJCQkJKHVuc2lnbmVkIGludCkgKGFkZHIgKyBUUkJfTUFYX0JVRkZfU0laRSkgJiB+KFRSQl9NQVhfQlVGRl9TSVpFIC0gMSksCkBAIC0yNjE2LDcgKzI2MjEsNyBAQAogCQl9CiAKIAkJdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkJKGFkZHIgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKKwkJCShhZGRyICYgKFRSQl9NQVhfQlVGRl9TSVpFIC0gMSkpOwogCQl0cmJfYnVmZl9sZW4gPSBtaW5fdChpbnQsIHRyYl9idWZmX2xlbiwgdGhpc19zZ19sZW4pOwogCQlpZiAocnVubmluZ190b3RhbCArIHRyYl9idWZmX2xlbiA+IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKIAkJCXRyYl9idWZmX2xlbiA9CkBAIC0yNjI1LDcgKzI2MzAsNyBAQAogCiAJY2hlY2tfdHJiX21hdGgodXJiLCBudW1fdHJicywgcnVubmluZ190b3RhbCk7CiAJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCwKLQkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIsIHRkKTsKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0yNjU2LDcgKzI2NjEsOCBAQAogCW51bV90cmJzID0gMDsKIAkvKiBIb3cgbXVjaCBkYXRhIGlzIChwb3RlbnRpYWxseSkgbGVmdCBiZWZvcmUgdGhlIDY0S0IgYm91bmRhcnk/ICovCiAJcnVubmluZ190b3RhbCA9IFRSQl9NQVhfQlVGRl9TSVpFIC0KLQkJKHVyYi0+dHJhbnNmZXJfZG1hICYgKCgxIDw8IFRSQl9NQVhfQlVGRl9TSElGVCkgLSAxKSk7CisJCSh1cmItPnRyYW5zZmVyX2RtYSAmIChUUkJfTUFYX0JVRkZfU0laRSAtIDEpKTsKKwlydW5uaW5nX3RvdGFsICY9IFRSQl9NQVhfQlVGRl9TSVpFIC0gMTsKIAogCS8qIElmIHRoZXJlJ3Mgc29tZSBkYXRhIG9uIHRoaXMgNjRLQiBjaHVuaywgb3Igd2UgaGF2ZSB0byBzZW5kIGEKIAkgKiB6ZXJvLWxlbmd0aCB0cmFuc2Zlciwgd2UgbmVlZCBhdCBsZWFzdCBvbmUgVFJCCkBAIC0yNjcxLDcgKzI2NzcsOCBAQAogCS8qIEZJWE1FOiB0aGlzIGRvZXNuJ3QgZGVhbCB3aXRoIFVSQl9aRVJPX1BBQ0tFVCAtIG5lZWQgb25lIG1vcmUgKi8KIAogCWlmICghaW5faW50ZXJydXB0KCkpCi0JCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJlcCAlI3ggLSB1cmIgbGVuID0gJSN4ICglZCksIGFkZHIgPSAlI2xseCwgbnVtX3RyYnMgPSAlZFxuIiwKKwkJeGhjaV9kYmcoeGhjaSwgImVwICUjeCAtIHVyYiBsZW4gPSAlI3ggKCVkKSwgIgorCQkJCSJhZGRyID0gJSNsbHgsIG51bV90cmJzID0gJWRcbiIsCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCkBAIC0yNjk5LDggKzI3MDYsOCBAQAogCS8qIEhvdyBtdWNoIGRhdGEgaXMgaW4gdGhlIGZpcnN0IFRSQj8gKi8KIAlhZGRyID0gKHU2NCkgdXJiLT50cmFuc2Zlcl9kbWE7CiAJdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkodXJiLT50cmFuc2Zlcl9kbWEgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKLQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgdHJiX2J1ZmZfbGVuKQorCQkodXJiLT50cmFuc2Zlcl9kbWEgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSk7CisJaWYgKHRyYl9idWZmX2xlbiA+IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKIAkJdHJiX2J1ZmZfbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwogCiAJZmlyc3RfdHJiID0gdHJ1ZTsKQEAgLTI3MTEsOSArMjcxOCwxMSBAQAogCQlmaWVsZCA9IDA7CiAKIAkJLyogRG9uJ3QgY2hhbmdlIHRoZSBjeWNsZSBiaXQgb2YgdGhlIGZpcnN0IFRSQiB1bnRpbCBsYXRlciAqLwotCQlpZiAoZmlyc3RfdHJiKQorCQlpZiAoZmlyc3RfdHJiKSB7CiAJCQlmaXJzdF90cmIgPSBmYWxzZTsKLQkJZWxzZQorCQkJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCQkJZmllbGQgfD0gMHgxOworCQl9IGVsc2UKIAkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCiAJCS8qIENoYWluIGFsbCB0aGUgVFJCcyB0b2dldGhlcjsgY2xlYXIgdGhlIGNoYWluIGJpdCBpbiB0aGUgbGFzdApAQCAtMjc1Nyw3ICsyNzY2LDcgQEAKIAogCWNoZWNrX3RyYl9tYXRoKHVyYiwgbnVtX3RyYnMsIHJ1bm5pbmdfdG90YWwpOwogCWdpdmViYWNrX2ZpcnN0X3RyYih4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgdXJiLT5zdHJlYW1faWQsCi0JCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiLCB0ZCk7CisJCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjgxOCwxMyArMjgyNywxNyBAQAogCS8qIFF1ZXVlIHNldHVwIFRSQiAtIHNlZSBzZWN0aW9uIDYuNC4xLjIuMSAqLwogCS8qIEZJWE1FIGJldHRlciB3YXkgdG8gdHJhbnNsYXRlIHNldHVwX3BhY2tldCBpbnRvIHR3byB1MzIgZmllbGRzPyAqLwogCXNldHVwID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJZmllbGQgPSAwOworCWZpZWxkIHw9IFRSQl9JRFQgfCBUUkJfVFlQRShUUkJfU0VUVVApOworCWlmIChzdGFydF9jeWNsZSA9PSAwKQorCQlmaWVsZCB8PSAweDE7CiAJcXVldWVfdHJiKHhoY2ksIGVwX3JpbmcsIGZhbHNlLCB0cnVlLAogCQkJLyogRklYTUUgZW5kaWFubmVzcyBpcyBwcm9iYWJseSBnb2luZyB0byBiaXRlIG15IGFzcyBoZXJlLiAqLwogCQkJc2V0dXAtPmJSZXF1ZXN0VHlwZSB8IHNldHVwLT5iUmVxdWVzdCA8PCA4IHwgc2V0dXAtPndWYWx1ZSA8PCAxNiwKIAkJCXNldHVwLT53SW5kZXggfCBzZXR1cC0+d0xlbmd0aCA8PCAxNiwKIAkJCVRSQl9MRU4oOCkgfCBUUkJfSU5UUl9UQVJHRVQoMCksCiAJCQkvKiBJbW1lZGlhdGUgZGF0YSBpbiBwb2ludGVyICovCi0JCQlUUkJfSURUIHwgVFJCX1RZUEUoVFJCX1NFVFVQKSk7CisJCQlmaWVsZCk7CiAKIAkvKiBJZiB0aGVyZSdzIGRhdGEsIHF1ZXVlIGRhdGEgVFJCcyAqLwogCWZpZWxkID0gMDsKQEAgLTI4NTksNyArMjg3Miw3IEBACiAJCQlmaWVsZCB8IFRSQl9JT0MgfCBUUkJfVFlQRShUUkJfU1RBVFVTKSB8IGVwX3JpbmctPmN5Y2xlX3N0YXRlKTsKIAogCWdpdmViYWNrX2ZpcnN0X3RyYih4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgMCwKLQkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIsIHRkKTsKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0yODcyLDggKzI4ODUsOCBAQAogCWFkZHIgPSAodTY0KSAodXJiLT50cmFuc2Zlcl9kbWEgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7CiAJdGRfbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGg7CiAKLQlydW5uaW5nX3RvdGFsID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkJKGFkZHIgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKKwlydW5uaW5nX3RvdGFsID0gVFJCX01BWF9CVUZGX1NJWkUgLSAoYWRkciAmIChUUkJfTUFYX0JVRkZfU0laRSAtIDEpKTsKKwlydW5uaW5nX3RvdGFsICY9IFRSQl9NQVhfQlVGRl9TSVpFIC0gMTsKIAlpZiAocnVubmluZ190b3RhbCAhPSAwKQogCQludW1fdHJicysrOwogCkBAIC0yOTAwLDYgKzI5MTMsNyBAQAogCWludCBydW5uaW5nX3RvdGFsLCB0cmJfYnVmZl9sZW4sIHRkX2xlbiwgdGRfcmVtYWluX2xlbiwgcmV0OwogCXU2NCBzdGFydF9hZGRyLCBhZGRyOwogCWludCBpLCBqOworCWJvb2wgbW9yZV90cmJzX2NvbWluZzsKIAogCWVwX3JpbmcgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdLnJpbmc7CiAKQEAgLTI5MTAsNyArMjkyNCw3IEBACiAJfQogCiAJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgImVwICUjeCAtIHVyYiBsZW4gPSAlI3ggKCVkKSwiCisJCXhoY2lfZGJnKHhoY2ksICJlcCAlI3ggLSB1cmIgbGVuID0gJSN4ICglZCksIgogCQkJCSIgYWRkciA9ICUjbGx4LCBudW1fdGRzID0gJWRcbiIsCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKQEAgLTI5NTAsNyArMjk2NCwxMCBAQAogCQkJCWZpZWxkIHw9IFRSQl9UWVBFKFRSQl9JU09DKTsKIAkJCQkvKiBBc3N1bWUgVVJCX0lTT19BU0FQIGlzIHNldCAqLwogCQkJCWZpZWxkIHw9IFRSQl9TSUE7Ci0JCQkJaWYgKGkgPiAwKQorCQkJCWlmIChpID09IDApIHsKKwkJCQkJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCQkJCQlmaWVsZCB8PSAweDE7CisJCQkJfSBlbHNlCiAJCQkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCQkJCWZpcnN0X3RyYiA9IGZhbHNlOwogCQkJfSBlbHNlIHsKQEAgLTI5NjUsOSArMjk4MiwxMSBAQAogCQkJICovCiAJCQlpZiAoaiA8IHRyYnNfcGVyX3RkIC0gMSkgewogCQkJCWZpZWxkIHw9IFRSQl9DSEFJTjsKKwkJCQltb3JlX3RyYnNfY29taW5nID0gdHJ1ZTsKIAkJCX0gZWxzZSB7CiAJCQkJdGQtPmxhc3RfdHJiID0gZXBfcmluZy0+ZW5xdWV1ZTsKIAkJCQlmaWVsZCB8PSBUUkJfSU9DOworCQkJCW1vcmVfdHJic19jb21pbmcgPSBmYWxzZTsKIAkJCX0KIAogCQkJLyogQ2FsY3VsYXRlIFRSQiBsZW5ndGggKi8KQEAgLTI5ODAsNyArMjk5OSw3IEBACiAJCQlsZW5ndGhfZmllbGQgPSBUUkJfTEVOKHRyYl9idWZmX2xlbikgfAogCQkJCXJlbWFpbmRlciB8CiAJCQkJVFJCX0lOVFJfVEFSR0VUKDApOwotCQkJcXVldWVfdHJiKHhoY2ksIGVwX3JpbmcsIGZhbHNlLCBmYWxzZSwKKwkJCXF1ZXVlX3RyYih4aGNpLCBlcF9yaW5nLCBmYWxzZSwgbW9yZV90cmJzX2NvbWluZywKIAkJCQlsb3dlcl8zMl9iaXRzKGFkZHIpLAogCQkJCXVwcGVyXzMyX2JpdHMoYWRkciksCiAJCQkJbGVuZ3RoX2ZpZWxkLApAQCAtMzAwMywxMCArMzAyMiw4IEBACiAJCX0KIAl9CiAKLQl3bWIoKTsKLQlzdGFydF90cmItPmZpZWxkWzNdIHw9IHN0YXJ0X2N5Y2xlOwotCi0JeGhjaV9yaW5nX2VwX2Rvb3JiZWxsKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCk7CisJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCwKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDY0LDcgKzMwODEsNyBAQAogCSAqIHRvIHNldCB0aGUgcG9sbGluZyBpbnRlcnZhbCAob25jZSB0aGUgQVBJIGlzIGFkZGVkKS4KIAkgKi8KIAlpZiAoeGhjaV9pbnRlcnZhbCAhPSBlcF9pbnRlcnZhbCkgewotCQlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJEcml2ZXIgdXNlcyBkaWZmZXJlbnQgaW50ZXJ2YWwiCiAJCQkJCSIgKCVkIG1pY3JvZnJhbWUlcykgdGhhbiB4SENJICIKIAkJCQkJIiglZCBtaWNyb2ZyYW1lJXMpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCA0NWU0YTMxLi4yMDgzZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAvKgogICogU2V0IHRoZSBydW4gYml0IGFuZCB3YWl0IGZvciB0aGUgaG9zdCB0byBiZSBydW5uaW5nLgogICovCi1pbnQgeGhjaV9zdGFydChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCitzdGF0aWMgaW50IHhoY2lfc3RhcnQoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewogCXUzMiB0ZW1wOwogCWludCByZXQ7CkBAIC0yMjYsNyArMjI2LDggQEAKIHN0YXRpYyBpbnQgeGhjaV9zZXR1cF9tc2l4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CiAKIAkvKgogCSAqIGNhbGN1bGF0ZSBudW1iZXIgb2YgbXNpLXggdmVjdG9ycyBzdXBwb3J0ZWQuCkBAIC0yNjUsNiArMjY2LDcgQEAKIAkJCWdvdG8gZGlzYWJsZV9tc2l4OwogCX0KIAorCWhjZC0+bXNpeF9lbmFibGVkID0gMTsKIAlyZXR1cm4gcmV0OwogCiBkaXNhYmxlX21zaXg6CkBAIC0yODAsNyArMjgyLDggQEAKIC8qIEZyZWUgYW55IElSUXMgYW5kIGRpc2FibGUgTVNJLVggKi8KIHN0YXRpYyB2b2lkIHhoY2lfY2xlYW51cF9tc2l4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CiAKIAl4aGNpX2ZyZWVfaXJxKHhoY2kpOwogCkBAIC0yOTIsNiArMjk1LDcgQEAKIAkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwogCX0KIAorCWhjZC0+bXNpeF9lbmFibGVkID0gMDsKIAlyZXR1cm47CiB9CiAKQEAgLTMyNSw3ICszMjksNyBAQAogCiAKICNpZmRlZiBDT05GSUdfVVNCX1hIQ0lfSENEX0RFQlVHR0lORwotdm9pZCB4aGNpX2V2ZW50X3Jpbmdfd29yayh1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyB2b2lkIHhoY2lfZXZlbnRfcmluZ193b3JrKHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHRlbXA7CkBAIC00NjksNyArNDczLDcgQEAKIAkJCXhoY2ktPmlyX3NldCwgKHVuc2lnbmVkIGludCkgRVJfSVJRX0VOQUJMRSh0ZW1wKSk7CiAJeGhjaV93cml0ZWwoeGhjaSwgRVJfSVJRX0VOQUJMRSh0ZW1wKSwKIAkJCSZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKLQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCB4aGNpLT5pcl9zZXQsIDApOworCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIDApOwogCiAJaWYgKE5VTV9URVNUX05PT1BTID4gMCkKIAkJZG9vcmJlbGwgPSB4aGNpX3NldHVwX29uZV9ub29wKHhoY2kpOwpAQCAtNTA4LDkgKzUxMiwxMCBAQAogCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCXhoY2lfaGFsdCh4aGNpKTsKIAl4aGNpX3Jlc2V0KHhoY2kpOwotCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAKKwl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKKwogI2lmZGVmIENPTkZJR19VU0JfWEhDSV9IQ0RfREVCVUdHSU5HCiAJLyogVGVsbCB0aGUgZXZlbnQgcmluZyBwb2xsIGZ1bmN0aW9uIG5vdCB0byByZXNjaGVkdWxlICovCiAJeGhjaS0+em9tYmllID0gMTsKQEAgLTUyMyw3ICs1MjgsNyBAQAogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKIAl4aGNpX3dyaXRlbCh4aGNpLCBFUl9JUlFfRElTQUJMRSh0ZW1wKSwKIAkJCSZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKLQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCB4aGNpLT5pcl9zZXQsIDApOworCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIDApOwogCiAJeGhjaV9kYmcoeGhjaSwgImNsZWFuaW5nIHVwIG1lbW9yeVxuIik7CiAJeGhjaV9tZW1fY2xlYW51cCh4aGNpKTsKQEAgLTU0NCw5ICs1NDksMTAgQEAKIAogCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCXhoY2lfaGFsdCh4aGNpKTsKLQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCisJeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7CisKIAl4aGNpX2RiZyh4aGNpLCAieGhjaV9zaHV0ZG93biBjb21wbGV0ZWQgLSBzdGF0dXMgPSAleFxuIiwKIAkJICAgIHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cykpOwogfQpAQCAtNjQ3LDYgKzY1Myw3IEBACiAJaW50CQkJcmMgPSAwOwogCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0geGhjaV90b19oY2QoeGhjaSk7CiAJdTMyCQkJY29tbWFuZDsKKwlpbnQJCQlpOwogCiAJc3Bpbl9sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAJY2xlYXJfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKQEAgLTY3NywxMCArNjg0LDE1IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KLQkvKiBzdGVwIDU6IHJlbW92ZSBjb3JlIHdlbGwgcG93ZXIgKi8KLQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCisJLyogc3RlcCA1OiByZW1vdmUgY29yZSB3ZWxsIHBvd2VyICovCisJLyogc3luY2hyb25pemUgaXJxIHdoZW4gdXNpbmcgTVNJLVggKi8KKwlpZiAoeGhjaS0+bXNpeF9lbnRyaWVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCB4aGNpLT5tc2l4X2NvdW50OyBpKyspCisJCQlzeW5jaHJvbml6ZV9pcnEoeGhjaS0+bXNpeF9lbnRyaWVzW2ldLnZlY3Rvcik7CisJfQorCiAJcmV0dXJuIHJjOwogfQogCkBAIC02OTQsNyArNzA2LDYgQEAKIHsKIAl1MzIJCQljb21tYW5kLCB0ZW1wID0gMDsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOwotCXN0cnVjdCBwY2lfZGV2CQkqcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwogCWludAlvbGRfc3RhdGUsIHJldHZhbDsKIAogCW9sZF9zdGF0ZSA9IGhjZC0+c3RhdGU7CkBAIC03MjksOSArNzQwLDggQEAKIAkJeGhjaV9kYmcoeGhjaSwgIlN0b3AgSENEXG4iKTsKIAkJeGhjaV9oYWx0KHhoY2kpOwogCQl4aGNpX3Jlc2V0KHhoY2kpOwotCQlpZiAoaGliZXJuYXRlZCkKLQkJCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCQlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOworCQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAogI2lmZGVmIENPTkZJR19VU0JfWEhDSV9IQ0RfREVCVUdHSU5HCiAJCS8qIFRlbGwgdGhlIGV2ZW50IHJpbmcgcG9sbCBmdW5jdGlvbiBub3QgdG8gcmVzY2hlZHVsZSAqLwpAQCAtNzQ1LDcgKzc1NSw3IEBACiAJCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKIAkJeGhjaV93cml0ZWwoeGhjaSwgRVJfSVJRX0RJU0FCTEUodGVtcCksCiAJCQkJJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwotCQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCB4aGNpLT5pcl9zZXQsIDApOworCQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCAwKTsKIAogCQl4aGNpX2RiZyh4aGNpLCAiY2xlYW5pbmcgdXAgbWVtb3J5XG4iKTsKIAkJeGhjaV9tZW1fY2xlYW51cCh4aGNpKTsKQEAgLTc2NSwzMCArNzc1LDYgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwotCS8qIFJlLXNldHVwIE1TSS1YICovCi0JaWYgKGhjZC0+aXJxKQotCQlmcmVlX2lycShoY2QtPmlycSwgaGNkKTsKLQloY2QtPmlycSA9IC0xOwotCi0JcmV0dmFsID0geGhjaV9zZXR1cF9tc2l4KHhoY2kpOwotCWlmIChyZXR2YWwpCi0JCS8qIGZhbGwgYmFjayB0byBtc2kqLwotCQlyZXR2YWwgPSB4aGNpX3NldHVwX21zaSh4aGNpKTsKLQotCWlmIChyZXR2YWwpIHsKLQkJLyogZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHQqLwotCQlyZXR2YWwgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZ1c2JfaGNkX2lycSwgSVJRRl9TSEFSRUQsCi0JCQkJCWhjZC0+aXJxX2Rlc2NyLCBoY2QpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQl4aGNpX2Vycih4aGNpLCAicmVxdWVzdCBpbnRlcnJ1cHQgJWQgZmFpbGVkXG4iLAotCQkJCQlwZGV2LT5pcnEpOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQotCQloY2QtPmlycSA9IHBkZXYtPmlycTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAkvKiBzdGVwIDQ6IHNldCBSdW4vU3RvcCBiaXQgKi8KIAljb21tYW5kID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+b3BfcmVncy0+Y29tbWFuZCk7CiAJY29tbWFuZCB8PSBDTURfUlVOOwpAQCAtODcxLDcgKzg1Nyw3IEBACiAvKiBSZXR1cm5zIDEgaWYgdGhlIGFyZ3VtZW50cyBhcmUgT0s7CiAgKiByZXR1cm5zIDAgdGhpcyBpcyBhIHJvb3QgaHViOyByZXR1cm5zIC1FSU5WQUwgZm9yIE5VTEwgcG9pbnRlcnMuCiAgKi8KLWludCB4aGNpX2NoZWNrX2FyZ3Moc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCitzdGF0aWMgaW50IHhoY2lfY2hlY2tfYXJncyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwgaW50IGNoZWNrX2VwLCBib29sIGNoZWNrX3ZpcnRfZGV2LAogCQljb25zdCBjaGFyICpmdW5jKSB7CiAJc3RydWN0IHhoY2lfaGNkCSp4aGNpOwpAQCAtMTcwNyw3ICsxNjkzLDcgQEAKIAl4aGNpX2RiZ19jdHgoeGhjaSwgaW5fY3R4LCB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQoYWRkX2ZsYWdzKSk7CiB9CiAKLXZvaWQgeGhjaV9zZXR1cF9pbnB1dF9jdHhfZm9yX3F1aXJrKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKK3N0YXRpYyB2b2lkIHhoY2lfc2V0dXBfaW5wdXRfY3R4X2Zvcl9xdWlyayhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCXVuc2lnbmVkIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCiAJCXN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKmRlcV9zdGF0ZSkKIHsKQEAgLTI0NDUsOCArMjQzMSwxMiBAQAogCQl4aGNpX2Vycih4aGNpLCAiRXJyb3Igd2hpbGUgYXNzaWduaW5nIGRldmljZSBzbG90IElEXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCS8qIHhoY2lfYWxsb2NfdmlydF9kZXZpY2UoKSBkb2VzIG5vdCB0b3VjaCByaW5nczsgbm8gbmVlZCB0byBsb2NrICovCi0JaWYgKCF4aGNpX2FsbG9jX3ZpcnRfZGV2aWNlKHhoY2ksIHhoY2ktPnNsb3RfaWQsIHVkZXYsIEdGUF9LRVJORUwpKSB7CisJLyogeGhjaV9hbGxvY192aXJ0X2RldmljZSgpIGRvZXMgbm90IHRvdWNoIHJpbmdzOyBubyBuZWVkIHRvIGxvY2suCisJICogVXNlIEdGUF9OT0lPLCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbQorCSAqIHhoY2lfZGlzY292ZXJfb3JfcmVzZXRfZGV2aWNlKCksIHdoaWNoIG1heSBiZSBjYWxsZWQgYXMgcGFydCBvZgorCSAqIG1hc3Mgc3RvcmFnZSBkcml2ZXIgZXJyb3IgaGFuZGxpbmcuCisJICovCisJaWYgKCF4aGNpX2FsbG9jX3ZpcnRfZGV2aWNlKHhoY2ksIHhoY2ktPnNsb3RfaWQsIHVkZXYsIEdGUF9OT0lPKSkgewogCQkvKiBEaXNhYmxlIHNsb3QsIGlmIHdlIGNhbiBkbyBpdCB3aXRob3V0IG1lbSBhbGxvYyAqLwogCQl4aGNpX3dhcm4oeGhjaSwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB4SENJIFVTQiBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmVzXG4iKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKaW5kZXggMTcwYzM2Ny4uN2YxMjdkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKQEAgLTQzNiwyMiArNDM2LDE4IEBACiAvKioKICAqIHN0cnVjdCBkb29yYmVsbF9hcnJheQogICoKKyAqIEJpdHMgIDAgLSAgNzogRW5kcG9pbnQgdGFyZ2V0CisgKiBCaXRzICA4IC0gMTU6IFJzdmRaCisgKiBCaXRzIDE2IC0gMzE6IFN0cmVhbSBJRAorICoKICAqIFNlY3Rpb24gNS42CiAgKi8KIHN0cnVjdCB4aGNpX2Rvb3JiZWxsX2FycmF5IHsKIAl1MzIJZG9vcmJlbGxbMjU2XTsKIH07CiAKLSNkZWZpbmUJREJfVEFSR0VUX01BU0sJCTB4RkZGRkZGMDAKLSNkZWZpbmUJREJfU1RSRUFNX0lEX01BU0sJMHgwMDAwRkZGRgotI2RlZmluZQlEQl9UQVJHRVRfSE9TVAkJMHgwCi0jZGVmaW5lCURCX1NUUkVBTV9JRF9IT1NUCTB4MAotI2RlZmluZQlEQl9NQVNLCQkJKDB4ZmYgPDwgOCkKLQotLyogRW5kcG9pbnQgVGFyZ2V0IC0gYml0cyAwOjcgKi8KLSNkZWZpbmUgRVBJX1RPX0RCKHApCQkoKChwKSArIDEpICYgMHhmZikKLSNkZWZpbmUgU1RSRUFNX0lEX1RPX0RCKHApCSgoKHApICYgMHhmZmZmKSA8PCAxNikKLQorI2RlZmluZSBEQl9WQUxVRShlcCwgc3RyZWFtKQkoKCgoZXApICsgMSkgJiAweGZmKSB8ICgoc3RyZWFtKSA8PCAxNikpCisjZGVmaW5lIERCX1ZBTFVFX0hPU1QJCTB4MDAwMDAwMDAKIAogLyoqCiAgKiBzdHJ1Y3QgeGhjaV9wcm90b2NvbF9jYXBzCkBAIC0xMzUyLDcgKzEzNDgsNyBAQAogfQogCiAvKiB4SENJIGRlYnVnZ2luZyAqLwotdm9pZCB4aGNpX3ByaW50X2lyX3NldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2ludHJfcmVnICppcl9zZXQsIGludCBzZXRfbnVtKTsKK3ZvaWQgeGhjaV9wcmludF9pcl9zZXQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2V0X251bSk7CiB2b2lkIHhoY2lfcHJpbnRfcmVnaXN0ZXJzKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CiB2b2lkIHhoY2lfZGJnX3JlZ3Moc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKIHZvaWQgeGhjaV9wcmludF9ydW5fcmVncyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKaW5kZXggMTczMmQ5Yi4uMTYxNmFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCkBAIC00NSw3ICs0NSw3IEBACiAKIHN0YXRpYyB2b2lkIGNoYW5nZV9jb2xvcihzdHJ1Y3QgdXNiX2xlZCAqbGVkKQogewotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCiAJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCmluZGV4IDRmZjIxNTguLmY3YTIwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwpAQCAtNzc2LDcgKzc3Niw2IEBACiAJeyBVU0JfREVWSUNFKDB4MDU1NywgMHgyMDAxKSB9LAogCXsgVVNCX0RFVklDRSgweDA3MjksIDB4MTI4NCkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxMjkzLCAweDAwMDIpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTI5MywgMHgwMDAyKSB9LAogCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDAwMikgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCBlZWJhMjI4Li45ZDQ5ZDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC00MDQsNiArNDA0LDcgQEAKIAkJbXVzYi0+eGNlaXYtPnNldF9wb3dlciA9IGJmaW5fbXVzYl9zZXRfcG93ZXI7CiAKIAltdXNiLT5pc3IgPSBibGFja2Zpbl9pbnRlcnJ1cHQ7CisJbXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2sgPSB0cnVlOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCAwN2NmMzk0Li5jMjkyZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTEyOCwxMiArMTI4LDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXVzYiAqZGV2X3RvX211c2Ioc3RydWN0IGRldmljZSAqZGV2KQogewotI2lmZGVmIENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRAotCS8qIHVzYmNvcmUgaW5zaXN0cyBkZXYtPmRyaXZlcl9kYXRhIGlzIGEgInN0cnVjdCBoY2QgKiIgKi8KLQlyZXR1cm4gaGNkX3RvX211c2IoZGV2X2dldF9kcnZkYXRhKGRldikpOwotI2Vsc2UKIAlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0jZW5kaWYKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE4NjksNiArMTg2NCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJm11c2ItPm91dF9idWxrKTsKIAogCWhjZC0+dXNlc19uZXdfcG9sbGluZyA9IDE7CisJaGNkLT5oYXNfdHQgPSAxOwogCiAJbXVzYi0+dmJ1c2Vycl9yZXRyeSA9IFZCVVNFUlJfUkVUUllfQ09VTlQ7CiAJbXVzYi0+YV93YWl0X2Jjb24gPSBPVEdfVElNRV9BX1dBSVRfQkNPTjsKQEAgLTE4NzYsMTAgKzE4NzIsOSBAQAogCW11c2IgPSBremFsbG9jKHNpemVvZiAqbXVzYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdXNiKQogCQlyZXR1cm4gTlVMTDsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBtdXNiKTsKIAogI2VuZGlmCi0KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBtdXNiKTsKIAltdXNiLT5tcmVncyA9IG1iYXNlOwogCW11c2ItPmN0cmxfYmFzZSA9IG1iYXNlOwogCW11c2ItPm5JcnEgPSAtRU5PREVWOwpAQCAtMjE5MSw3ICsyMTg2LDcgQEAKIAl2b2lkIF9faW9tZW0JKmJhc2U7CiAKIAlpb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFpb21lbSB8fCBpcnEgPT0gMCkKKwlpZiAoIWlvbWVtIHx8IGlycSA8PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWJhc2UgPSBpb3JlbWFwKGlvbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb21lbSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKaW5kZXggZDBjMjM2Zi4uZTY0MDBiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCkBAIC00OTcsNiArNDk3LDE5IEBACiAJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpnYWRnZXRfZHJpdmVyOwkvKiBpdHMgZHJpdmVyICovCiAjZW5kaWYKIAorCS8qCisJICogRklYTUU6IFJlbW92ZSB0aGlzIGZsYWcuCisJICoKKwkgKiBUaGlzIGlzIG9ubHkgYWRkZWQgdG8gYWxsb3cgQmxhY2tmaW4gdG8gd29yaworCSAqIHdpdGggY3VycmVudCBkcml2ZXIuIEZvciBzb21lIHVua25vd24gcmVhc29uCisJICogQmxhY2tmaW4gZG9lc24ndCB3b3JrIHdpdGggZG91YmxlIGJ1ZmZlcmluZworCSAqIGFuZCB0aGF0J3MgZW5hYmxlZCBieSBkZWZhdWx0LgorCSAqCisJICogV2UgYWRkZWQgdGhpcyBmbGFnIHRvIGZvcmNlZnVsbHkgZGlzYWJsZSBkb3VibGUKKwkgKiBidWZmZXJpbmcgdW50aWwgd2UgZ2V0IGl0IHdvcmtpbmcuCisJICovCisJdW5zaWduZWQgICAgICAgICAgICAgICAgZG91YmxlX2J1ZmZlcl9ub3Rfb2s6MSBfX2RlcHJlY2F0ZWQ7CisKIAlzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZwkqY29uZmlnOwogCiAjaWZkZWYgTVVTQl9DT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oCmluZGV4IDkxNjA2NWIuLjNhOTdjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmgKQEAgLTE2OSw2ICsxNjksOSBAQAogCQkJCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsCiAJCQkJCQkJdTMyIGxlbmd0aCk7CiAJaW50CQkJKCpjaGFubmVsX2Fib3J0KShzdHJ1Y3QgZG1hX2NoYW5uZWwgKik7CisJaW50CQkJKCppc19jb21wYXRpYmxlKShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJCQkJdTE2IG1heHBhY2tldCwKKwkJCQkJCQl2b2lkICpidWYsIHUzMiBsZW5ndGgpOwogfTsKIAogLyogY2FsbGVkIGFmdGVyIGNoYW5uZWxfcHJvZ3JhbSgpLCBtYXkgaW5kaWNhdGUgYSBmYXVsdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCmluZGV4IGVkNThjNmMuLjJmZTMwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKQEAgLTkyLDExICs5MiwzMyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjZGVmaW5lIGlzX2J1ZmZlcl9tYXBwZWQocmVxKSAoaXNfZG1hX2NhcGFibGUoKSAmJiBcCisJCQkJCShyZXEtPm1hcF9zdGF0ZSAhPSBVTl9NQVBQRUQpKQorCiAvKiBNYXBzIHRoZSBidWZmZXIgdG8gZG1hICAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwX2RtYV9idWZmZXIoc3RydWN0IG11c2JfcmVxdWVzdCAqcmVxdWVzdCwKLQkJCQlzdHJ1Y3QgbXVzYiAqbXVzYikKKwkJCXN0cnVjdCBtdXNiICptdXNiLCBzdHJ1Y3QgbXVzYl9lcCAqbXVzYl9lcCkKIHsKKwlpbnQgY29tcGF0aWJsZSA9IHRydWU7CisJc3RydWN0IGRtYV9jb250cm9sbGVyICpkbWEgPSBtdXNiLT5kbWFfY29udHJvbGxlcjsKKworCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IFVOX01BUFBFRDsKKworCWlmICghaXNfZG1hX2NhcGFibGUoKSB8fCAhbXVzYl9lcC0+ZG1hKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiBETUEgZW5naW5lIGNhbiBoYW5kbGUgdGhpcyByZXF1ZXN0LgorCSAqIERNQSBjb2RlIG11c3QgcmVqZWN0IHRoZSBVU0IgcmVxdWVzdCBleHBsaWNpdGx5LgorCSAqIERlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIG1hcCB0aGUgcmVxdWVzdC4KKwkgKi8KKwlpZiAoZG1hLT5pc19jb21wYXRpYmxlKQorCQljb21wYXRpYmxlID0gZG1hLT5pc19jb21wYXRpYmxlKG11c2JfZXAtPmRtYSwKKwkJCQltdXNiX2VwLT5wYWNrZXRfc3osIHJlcXVlc3QtPnJlcXVlc3QuYnVmLAorCQkJCXJlcXVlc3QtPnJlcXVlc3QubGVuZ3RoKTsKKwlpZiAoIWNvbXBhdGlibGUpCisJCXJldHVybjsKKwogCWlmIChyZXF1ZXN0LT5yZXF1ZXN0LmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CiAJCXJlcXVlc3QtPnJlcXVlc3QuZG1hID0gZG1hX21hcF9zaW5nbGUoCiAJCQkJbXVzYi0+Y29udHJvbGxlciwKQEAgLTEwNSw3ICsxMjcsNyBAQAogCQkJCXJlcXVlc3QtPnR4CiAJCQkJCT8gRE1BX1RPX0RFVklDRQogCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7Ci0JCXJlcXVlc3QtPm1hcHBlZCA9IDE7CisJCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IE1VU0JfTUFQUEVEOwogCX0gZWxzZSB7CiAJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKG11c2ItPmNvbnRyb2xsZXIsCiAJCQlyZXF1ZXN0LT5yZXF1ZXN0LmRtYSwKQEAgLTExMyw3ICsxMzUsNyBAQAogCQkJcmVxdWVzdC0+dHgKIAkJCQk/IERNQV9UT19ERVZJQ0UKIAkJCQk6IERNQV9GUk9NX0RFVklDRSk7Ci0JCXJlcXVlc3QtPm1hcHBlZCA9IDA7CisJCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IFBSRV9NQVBQRUQ7CiAJfQogfQogCkBAIC0xMjEsMTEgKzE0MywxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIHVubWFwX2RtYV9idWZmZXIoc3RydWN0IG11c2JfcmVxdWVzdCAqcmVxdWVzdCwKIAkJCQlzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKKwlpZiAoIWlzX2J1ZmZlcl9tYXBwZWQocmVxdWVzdCkpCisJCXJldHVybjsKKwogCWlmIChyZXF1ZXN0LT5yZXF1ZXN0LmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CiAJCURCRygyMCwgIm5vdCB1bm1hcHBpbmcgYSBuZXZlciBtYXBwZWQgYnVmZmVyXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAocmVxdWVzdC0+bWFwcGVkKSB7CisJaWYgKHJlcXVlc3QtPm1hcF9zdGF0ZSA9PSBNVVNCX01BUFBFRCkgewogCQlkbWFfdW5tYXBfc2luZ2xlKG11c2ItPmNvbnRyb2xsZXIsCiAJCQlyZXF1ZXN0LT5yZXF1ZXN0LmRtYSwKIAkJCXJlcXVlc3QtPnJlcXVlc3QubGVuZ3RoLApAQCAtMTMzLDE2ICsxNTgsMTUgQEAKIAkJCQk/IERNQV9UT19ERVZJQ0UKIAkJCQk6IERNQV9GUk9NX0RFVklDRSk7CiAJCXJlcXVlc3QtPnJlcXVlc3QuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKLQkJcmVxdWVzdC0+bWFwcGVkID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSB7IC8qIFBSRV9NQVBQRUQgKi8KIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUobXVzYi0+Y29udHJvbGxlciwKIAkJCXJlcXVlc3QtPnJlcXVlc3QuZG1hLAogCQkJcmVxdWVzdC0+cmVxdWVzdC5sZW5ndGgsCiAJCQlyZXF1ZXN0LT50eAogCQkJCT8gRE1BX1RPX0RFVklDRQogCQkJCTogRE1BX0ZST01fREVWSUNFKTsKLQogCX0KKwlyZXF1ZXN0LT5tYXBfc3RhdGUgPSBVTl9NQVBQRUQ7CiB9CiAKIC8qCkBAIC0xNzIsOCArMTk2LDcgQEAKIAogCWVwLT5idXN5ID0gMTsKIAlzcGluX3VubG9jaygmbXVzYi0+bG9jayk7Ci0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgZXAtPmRtYSkKLQkJdW5tYXBfZG1hX2J1ZmZlcihyZXEsIG11c2IpOworCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAlpZiAocmVxdWVzdC0+c3RhdHVzID09IDApCiAJCURCRyg1LCAiJXMgZG9uZSByZXF1ZXN0ICVwLCAgJWQvJWRcbiIsCiAJCQkJZXAtPmVuZF9wb2ludC5uYW1lLCByZXF1ZXN0LApAQCAtMzM1LDcgKzM1OCw3IEBACiAJCQljc3IpOwogCiAjaWZuZGVmCUNPTkZJR19NVVNCX1BJT19PTkxZCi0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJaWYgKGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmMgPSBtdXNiLT5kbWFfY29udHJvbGxlcjsKIAkJc2l6ZV90IHJlcXVlc3Rfc2l6ZTsKIApAQCAtNDM2LDggKzQ1OSw3IEBACiAJCSAqIFVubWFwIHRoZSBkbWEgYnVmZmVyIGJhY2sgdG8gY3B1IGlmIGRtYSBjaGFubmVsCiAJCSAqIHByb2dyYW1taW5nIGZhaWxzCiAJCSAqLwotCQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpCi0JCQl1bm1hcF9kbWFfYnVmZmVyKHJlcSwgbXVzYik7CisJCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAogCQltdXNiX3dyaXRlX2ZpZm8obXVzYl9lcC0+aHdfZXAsIGZpZm9fY291bnQsCiAJCQkJKHU4ICopIChyZXF1ZXN0LT5idWYgKyByZXF1ZXN0LT5hY3R1YWwpKTsKQEAgLTYyNyw3ICs2NDksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGlzX2NwcGlfZW5hYmxlZCgpICYmIG11c2JfZXAtPmRtYSkgeworCWlmIChpc19jcHBpX2VuYWJsZWQoKSAmJiBpc19idWZmZXJfbWFwcGVkKHJlcSkpIHsKIAkJc3RydWN0IGRtYV9jb250cm9sbGVyCSpjID0gbXVzYi0+ZG1hX2NvbnRyb2xsZXI7CiAJCXN0cnVjdCBkbWFfY2hhbm5lbAkqY2hhbm5lbCA9IG11c2JfZXAtPmRtYTsKIApAQCAtNjU4LDcgKzY4MCw3IEBACiAJCWxlbiA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9SWENPVU5UKTsKIAkJaWYgKHJlcXVlc3QtPmFjdHVhbCA8IHJlcXVlc3QtPmxlbmd0aCkgewogI2lmZGVmIENPTkZJR19VU0JfSU5WRU5UUkFfRE1BCi0JCQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpIHsKKwkJCWlmIChpc19idWZmZXJfbWFwcGVkKHJlcSkpIHsKIAkJCQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmM7CiAJCQkJc3RydWN0IGRtYV9jaGFubmVsCSpjaGFubmVsOwogCQkJCWludAkJCXVzZV9kbWEgPSAwOwpAQCAtNzQyLDcgKzc2NCw3IEBACiAJCQlmaWZvX2NvdW50ID0gbWluX3QodW5zaWduZWQsIGxlbiwgZmlmb19jb3VudCk7CiAKICNpZmRlZglDT05GSUdfVVNCX1RVU0JfT01BUF9ETUEKLQkJCWlmICh0dXNiX2RtYV9vbWFwKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJCQlpZiAodHVzYl9kbWFfb21hcCgpICYmIGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQkJCXN0cnVjdCBkbWFfY29udHJvbGxlciAqYyA9IG11c2ItPmRtYV9jb250cm9sbGVyOwogCQkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9IG11c2JfZXAtPmRtYTsKIAkJCQl1MzIgZG1hX2FkZHIgPSByZXF1ZXN0LT5kbWEgKyByZXF1ZXN0LT5hY3R1YWw7CkBAIC03NjIsNyArNzg0LDcgQEAKIAkJCSAqIHByb2dyYW1taW5nIGZhaWxzLiBUaGlzIGJ1ZmZlciBpcyBtYXBwZWQgaWYgdGhlCiAJCQkgKiBjaGFubmVsIGFsbG9jYXRpb24gaXMgc3VjY2Vzc2Z1bAogCQkJICovCi0JCQkgaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJCQkgaWYgKGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQkJCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAogCQkJCS8qCkBAIC05ODksNyArMTAxMSwxMSBAQAogCQkvKiBTZXQgVFhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKIAkJICogdG8gZGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nIG1vZGUuCiAJCSAqLwotCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1RYTUFYUCwgbXVzYl9lcC0+cGFja2V0X3N6IHwgKG11c2JfZXAtPmhiX211bHQgPDwgMTEpKTsKKwkJaWYgKG11c2ItPmRvdWJsZV9idWZmZXJfbm90X29rKQorCQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWE1BWFAsIGh3X2VwLT5tYXhfcGFja2V0X3N6X3R4KTsKKwkJZWxzZQorCQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWE1BWFAsIG11c2JfZXAtPnBhY2tldF9zegorCQkJCQl8IChtdXNiX2VwLT5oYl9tdWx0IDw8IDExKSk7CiAKIAkJY3NyID0gTVVTQl9UWENTUl9NT0RFIHwgTVVTQl9UWENTUl9DTFJEQVRBVE9HOwogCQlpZiAobXVzYl9yZWFkdyhyZWdzLCBNVVNCX1RYQ1NSKQpAQCAtMTAyNSw3ICsxMDUxLDExIEBACiAJCS8qIFNldCBSWE1BWFAgd2l0aCB0aGUgRklGTyBzaXplIG9mIHRoZSBlbmRwb2ludAogCQkgKiB0byBkaXNhYmxlIGRvdWJsZSBidWZmZXJpbmcgbW9kZS4KIAkJICovCi0JCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfUlhNQVhQLCBtdXNiX2VwLT5wYWNrZXRfc3ogfCAobXVzYl9lcC0+aGJfbXVsdCA8PCAxMSkpOworCQlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgaHdfZXAtPm1heF9wYWNrZXRfc3pfdHgpOworCQllbHNlCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgbXVzYl9lcC0+cGFja2V0X3N6CisJCQkJCXwgKG11c2JfZXAtPmhiX211bHQgPDwgMTEpKTsKIAogCQkvKiBmb3JjZSBzaGFyZWQgZmlmbyB0byBPVVQtb25seSBtb2RlICovCiAJCWlmIChod19lcC0+aXNfc2hhcmVkX2ZpZm8pIHsKQEAgLTEyMTQsMTAgKzEyNDQsNyBAQAogCXJlcXVlc3QtPmVwbnVtID0gbXVzYl9lcC0+Y3VycmVudF9lcG51bTsKIAlyZXF1ZXN0LT50eCA9IG11c2JfZXAtPmlzX2luOwogCi0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKQotCQltYXBfZG1hX2J1ZmZlcihyZXF1ZXN0LCBtdXNiKTsKLQllbHNlCi0JCXJlcXVlc3QtPm1hcHBlZCA9IDA7CisJbWFwX2RtYV9idWZmZXIocmVxdWVzdCwgbXVzYiwgbXVzYl9lcCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgbG9ja2ZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5oCmluZGV4IGRlYzhkYzAuLmE1NTM1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmgKQEAgLTM1LDEzICszNSwxOSBAQAogI2lmbmRlZiBfX01VU0JfR0FER0VUX0gKICNkZWZpbmUgX19NVVNCX0dBREdFVF9ICiAKK2VudW0gYnVmZmVyX21hcF9zdGF0ZSB7CisJVU5fTUFQUEVEID0gMCwKKwlQUkVfTUFQUEVELAorCU1VU0JfTUFQUEVECit9OworCiBzdHJ1Y3QgbXVzYl9yZXF1ZXN0IHsKIAlzdHJ1Y3QgdXNiX3JlcXVlc3QJcmVxdWVzdDsKIAlzdHJ1Y3QgbXVzYl9lcAkJKmVwOwogCXN0cnVjdCBtdXNiCQkqbXVzYjsKIAl1OCB0eDsJCQkvKiBlbmRwb2ludCBkaXJlY3Rpb24gKi8KIAl1OCBlcG51bTsKLQl1OCBtYXBwZWQ7CisJZW51bSBidWZmZXJfbWFwX3N0YXRlIG1hcF9zdGF0ZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG11c2JfcmVxdWVzdCAqdG9fbXVzYl9yZXF1ZXN0KHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKaW5kZXggNGQ1YmNiNC4uMGY1MjNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCkBAIC02MDksNyArNjA5LDcgQEAKIAkvKiBTZXQgUlhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKIAkgKiB0byBkaXNhYmxlIGRvdWJsZSBidWZmZXIgbW9kZS4KIAkgKi8KLQlpZiAobXVzYi0+aHd2ZXJzIDwgTVVTQl9IV1ZFUlNfMjAwMCkKKwlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCiAJCW11c2Jfd3JpdGV3KGVwLT5yZWdzLCBNVVNCX1JYTUFYUCwgZXAtPm1heF9wYWNrZXRfc3pfcngpOwogCWVsc2UKIAkJbXVzYl93cml0ZXcoZXAtPnJlZ3MsIE1VU0JfUlhNQVhQLApAQCAtNzg0LDE0ICs3ODQsMTMgQEAKIAkJLyogcHJvdG9jb2wvZW5kcG9pbnQvaW50ZXJ2YWwvTkFLbGltaXQgKi8KIAkJaWYgKGVwbnVtKSB7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX1RYVFlQRSwgcWgtPnR5cGVfcmVnKTsKLQkJCWlmIChjYW5fYnVsa19zcGxpdChtdXNiLCBxaC0+dHlwZSkpCisJCQlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCiAJCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9UWE1BWFAsCi0JCQkJCXBhY2tldF9zegotCQkJCQl8ICgoaHdfZXAtPm1heF9wYWNrZXRfc3pfdHggLwotCQkJCQkJcGFja2V0X3N6KSAtIDEpIDw8IDExKTsKKwkJCQkJCWh3X2VwLT5tYXhfcGFja2V0X3N6X3R4KTsKIAkJCWVsc2UKIAkJCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1RYTUFYUCwKLQkJCQkJcGFja2V0X3N6KTsKKwkJCQkJCXFoLT5tYXhwYWNrZXQgfAorCQkJCQkJKChxaC0+aGJfbXVsdCAtIDEpIDw8IDExKSk7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX1RYSU5URVJWQUwsIHFoLT5pbnR2X3JlZyk7CiAJCX0gZWxzZSB7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX05BS0xJTUlUMCwgcWgtPmludHZfcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5oCmluZGV4IGY3NjNkNjIuLjIxMDU2YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaApAQCAtOTQsMjQgKzk0LDMzIEBACiB7CiAJbXVzYl93cml0ZXcobWJhc2UsCiAJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQUREUl9MT1cpLAotCQkoKHUxNikoKHUzMikgZG1hX2FkZHIgJiAweEZGRkYpKSk7CisJCWRtYV9hZGRyKTsKIAltdXNiX3dyaXRldyhtYmFzZSwKIAkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSX0hJR0gpLAotCQkoKHUxNikoKCh1MzIpIGRtYV9hZGRyID4+IDE2KSAmIDB4RkZGRikpKTsKKwkJKGRtYV9hZGRyID4+IDE2KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIG11c2JfcmVhZF9oc2RtYV9jb3VudCh2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBiY2hhbm5lbCkKIHsKLQlyZXR1cm4gbXVzYl9yZWFkbChtYmFzZSwKKwl1MzIgY291bnQgPSBtdXNiX3JlYWR3KG1iYXNlLAogCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0hJR0gpKTsKKworCWNvdW50ID0gY291bnQgPDwgMTY7CisKKwljb3VudCB8PSBtdXNiX3JlYWR3KG1iYXNlLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0xPVykpOworCisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXVzYl93cml0ZV9oc2RtYV9jb3VudCh2b2lkIF9faW9tZW0gKm1iYXNlLAogCQkJCXU4IGJjaGFubmVsLCB1MzIgbGVuKQogewotCW11c2Jfd3JpdGVsKG1iYXNlLAorCW11c2Jfd3JpdGV3KG1iYXNlLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0xPVyksbGVuKTsKKwltdXNiX3dyaXRldyhtYmFzZSwKIAkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVF9ISUdIKSwKLQkJbGVuKTsKKwkJKGxlbiA+PiAxNikpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX0JMQUNLRklOICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMgYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKaW5kZXggYTNmMTIzMy4uYmM4YmFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYwpAQCAtMzYyLDYgKzM2Miw3IEBACiAKIHN0YXRpYyBpbnQgb21hcDI0MzBfbXVzYl9leGl0KHN0cnVjdCBtdXNiICptdXNiKQogeworCWRlbF90aW1lcl9zeW5jKCZtdXNiX2lkbGVfdGltZXIpOwogCiAJb21hcDI0MzBfbG93X2xldmVsX2V4aXQobXVzYik7CiAJb3RnX3B1dF90cmFuc2NlaXZlcihtdXNiLT54Y2Vpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCmluZGV4IDlmYjg3NWQuLjlmZmM4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCkBAIC0xMDMsNiArMTAzLDggQEAKIAkgIHJlcXVpcmVkIGFmdGVyIHJlc2V0dGluZyB0aGUgaGFyZHdhcmUgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCiAJICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBldmVuIGZvciBwZXJpcGhlcmFsIG9ubHkgb3IgaG9zdCBvbmx5CiAJICBtb2RlIGNvbmZpZ3VyYXRpb25zLgorCSAgVGhpcyBkcml2ZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBib2FyZHMgbGlrZSB0cm91dCB3aGljaAorCSAgaGFzIGFuIGV4dGVybmFsIFBIWS4KIAogY29uZmlnIEFCODUwMF9VU0IKICAgICAgICAgdHJpc3RhdGUgIkFCODUwMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYyBiL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKaW5kZXggZTcwMDE0YS4uOGFjZjE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCkBAIC0xMzIsNiArMTMyLDggQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5vcCk7CiAKKwlCTE9DS0lOR19JTklUX05PVElGSUVSX0hFQUQoJm5vcC0+b3RnLm5vdGlmaWVyKTsKKwogCXJldHVybiAwOwogZXhpdDoKIAlrZnJlZShub3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL3VscGkuYyBiL2RyaXZlcnMvdXNiL290Zy91bHBpLmMKaW5kZXggMDU5ZDlhYy4uNzcwZDc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL3VscGkuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvdWxwaS5jCkBAIC00NSw3ICs0NSw3IEBACiAvKiBVTFBJIGhhcmRjb2RlZCBJRHMsIHVzZWQgZm9yIHByb2JpbmcgKi8KIHN0YXRpYyBzdHJ1Y3QgdWxwaV9pbmZvIHVscGlfaWRzW10gPSB7CiAJVUxQSV9JTkZPKFVMUElfSUQoMHgwNGNjLCAweDE1MDQpLCAiTlhQIElTUDE1MDQiKSwKLQlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwNiksICJTTVNDIFVTQjMzMTkiKSwKKwlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwNiksICJTTVNDIFVTQjMzMXgiKSwKIH07CiAKIHN0YXRpYyBpbnQgdWxwaV9zZXRfb3RnX2ZsYWdzKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKaW5kZXggNjNmN2NjNC4uN2I4ODE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKQEAgLTQ4NiwxMiArNDg2LDIyIEBACiAJaWYgKGFjdHVhbF9sZW5ndGggPj0gNCkgewogCQlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJdTggcHJldl9saW5lX3N0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXByaXYtPmxpbmVfc3RhdHVzID0gKH4oZGF0YVsyXSkpICYgQ0gzNDFfQklUU19NT0RFTV9TVEFUOwogCQlpZiAoKGRhdGFbMV0gJiBDSDM0MV9NVUxUX1NUQVQpKQogCQkJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoKHByaXYtPmxpbmVfc3RhdHVzIF4gcHJldl9saW5lX3N0YXR1cykgJiBDSDM0MV9CSVRfRENEKSB7CisJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCQlpZiAodHR5KQorCQkJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCQkgICAgcHJpdi0+bGluZV9zdGF0dXMgJiBDSDM0MV9CSVRfRENEKTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggOGQ3NzMxZC4uNzM1ZWEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtNDksNyArNDksNiBAQAogc3RhdGljIHZvaWQgY3AyMTB4X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGludCBjcDIxMHhfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEweF9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnAsIGludCBvbik7Ci1zdGF0aWMgaW50IGNwMjEweF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwKTsKIAogc3RhdGljIGludCBkZWJ1ZzsKIApAQCAtODcsNyArODYsNiBAQAogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODExNSkgfSwgLyogQXJ5Z29uIE5GQy9NaWZhcmUgUmVhZGVyICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTNEKSB9LCAvKiBCdXJuc2lkZSBUZWxlY29tIERlc2ttb2JpbGUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxM0YpIH0sIC8qIFRhbXMgTWFzdGVyIEVhc3kgQ29udHJvbCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0OSkgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBDb21wdXRlcml6ZWQgQmF0dGVyeSBBbmFseXplciAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QSkgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUdibGFzdGVyIFAmUCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QikgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUd0YWxrICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTU2KSB9LCAvKiBCJkcgSDMwMDAgbGluayBjYWJsZSAqLwpAQCAtMTEwLDcgKzEwOCw5IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzQxKSB9LCAvKiBTaWVtZW5zIE1DMzVQVSBHUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzgyKSB9LCAvKiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODNBOCkgfSwgLyogQW1iZXIgV2lyZWxlc3MgQU1CMjU2MCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODNEOCkgfSwgLyogRGVrVGVjIERUQSBQbHVzIFZIRi9VSEYgQm9vc3Rlci9BdHRlbnVhdG9yICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDExKSB9LCAvKiBLeW9jZXJhIEdQUyBNb2R1bGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0MTgpIH0sIC8qIElSWiBBdXRvbWF0aW9uIFRlbGVwb3J0IFNHLTEwIEdTTS9HUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDZFKSB9LCAvKiBCRUkgVVNCIFNlbnNvciBJbnRlcmZhY2UgKFZDUCkgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0NzcpIH0sIC8qIEJhbGx1ZmYgUkZJRCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MCkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwpAQCAtMTY1LDggKzE2NSw3IEBACiAJLnRpb2NtZ2V0IAkJPSBjcDIxMHhfdGlvY21nZXQsCiAJLnRpb2Ntc2V0CQk9IGNwMjEweF90aW9jbXNldCwKIAkuYXR0YWNoCQkJPSBjcDIxMHhfc3RhcnR1cCwKLQkuZHRyX3J0cwkJPSBjcDIxMHhfZHRyX3J0cywKLQkuY2Fycmllcl9yYWlzZWQJCT0gY3AyMTB4X2NhcnJpZXJfcmFpc2VkCisJLmR0cl9ydHMJCT0gY3AyMTB4X2R0cl9ydHMKIH07CiAKIC8qIENvbmZpZyByZXF1ZXN0IHR5cGVzICovCkBAIC03NjUsMTUgKzc2NCw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBjcDIxMHhfY2Fycmllcl9yYWlzZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCkKLXsKLQl1bnNpZ25lZCBpbnQgY29udHJvbDsKLQljcDIxMHhfZ2V0X2NvbmZpZyhwLCBDUDIxMFhfR0VUX01ETVNUUywgJmNvbnRyb2wsIDEpOwotCWlmIChjb250cm9sICYgQ09OVFJPTF9EQ0QpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBjcDIxMHhfYnJlYWtfY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKaW5kZXggYjkyMDcwYy4uNjY2ZTVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpAQCAtNDU1LDcgKzQ1NSw2IEBACiBzdGF0aWMgaW50IGRpZ2lfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBkaWdpX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCBkaWdpX2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZGlnaV9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBvbik7CiBzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cF9kZXZpY2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKQEAgLTUxMSw3ICs1MTAsNiBAQAogCS5vcGVuID0JCQkJZGlnaV9vcGVuLAogCS5jbG9zZSA9CQkJZGlnaV9jbG9zZSwKIAkuZHRyX3J0cyA9CQkJZGlnaV9kdHJfcnRzLAotCS5jYXJyaWVyX3JhaXNlZCA9CQlkaWdpX2NhcnJpZXJfcmFpc2VkLAogCS53cml0ZSA9CQkJZGlnaV93cml0ZSwKIAkud3JpdGVfcm9vbSA9CQkJZGlnaV93cml0ZV9yb29tLAogCS53cml0ZV9idWxrX2NhbGxiYWNrID0gCQlkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCkBAIC0xMzM5LDE0ICsxMzM3LDYgQEAKIAlkaWdpX3NldF9tb2RlbV9zaWduYWxzKHBvcnQsIG9uICogKFRJT0NNX0RUUnxUSU9DTV9SVFMpLCAxKTsKIH0KIAotc3RhdGljIGludCBkaWdpX2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlpZiAocHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmIFRJT0NNX0NEKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBhMjY2OGQwLi5mMzQ5YTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMTAwLDYgKzEwMCw3IEBACiBzdGF0aWMgaW50ICAgZnRkaV9qdGFnX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCAgIGZ0ZGlfbXR4b3JiX2hhY2tfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICAgZnRkaV9ORElfZGV2aWNlX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgIGZ0ZGlfc3RtY2xpdGVfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCAgZnRkaV9VU0JfVUlSVF9zZXR1cChzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2KTsKIHN0YXRpYyB2b2lkICBmdGRpX0hFX1RJUkExX3NldHVwKHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYpOwogCkBAIC0xMjMsNiArMTI0LDEwIEBACiAJLnBvcnRfcHJvYmUgPSBmdGRpX0hFX1RJUkExX3NldHVwLAogfTsKIAorc3RhdGljIHN0cnVjdCBmdGRpX3Npb19xdWlyayBmdGRpX3N0bWNsaXRlX3F1aXJrID0geworCS5wcm9iZQk9IGZ0ZGlfc3RtY2xpdGVfcHJvYmUsCit9OworCiAvKgogICogVGhlIDhVMjMyQU0gaGFzIHRoZSBzYW1lIEFQSSBhcyB0aGUgc2lvIGV4Y2VwdCBmb3I6CiAgKiAtIGl0IGNhbiBzdXBwb3J0IE1VQ0ggaGlnaGVyIGJhdWRyYXRlczsgdXAgdG86CkBAIC02MTYsNiArNjIxLDcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfT0NFQU5JQ19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFRUSV9WSUQsIFRUSV9RTDM1NVBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9STV9DQU5WSUVXX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQUNUT05fVklELCBBQ1RPTl9TUEVDVFJBUFJPX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQ09OVEVDX1ZJRCwgQ09OVEVDX0NPTTFVU0JIX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU09UTDRfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTVEw0X1BJRCkgfSwKQEAgLTY3Niw3ICs2ODIsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUENESl9EQUMyX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUlJDSVJLSVRTX0xPQ09CVUZGRVJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BU0tfUkRSNDAwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoSUNPTV9JRDFfVklELCBJQ09NX0lEMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9PUENfVV9VQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMkMxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyQzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyVlRfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJWUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQNEtWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQNEtWUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMktWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMktWUl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FDR19IRkRVQUxfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ZRUlfU0VSVk9DRU5URVIzMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1RIT1JMQUJTX1BJRCkgfSwKQEAgLTgwMCw2ICs4MTYsOCBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ET1RFQ19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFFJSEFSRFdBUkVfVklELCBNSUxLWU1JU1RPTkVfSlRBR1NFUklBTF9QSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfanRhZ19xdWlyayB9LAorCXsgVVNCX0RFVklDRShTVF9WSUQsIFNUX1NUTUNMVDEwMzBfUElEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX3N0bWNsaXRlX3F1aXJrIH0sCiAJeyB9LAkJCQkJLyogT3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTE2OTksNiArMTcxNywyNSBAQAogfQogCiAvKgorICogRmlyc3QgYW5kIHNlY29uZCBwb3J0IG9uIFNUTUNMaXRlYWRhcHRvcnMgaXMgcmVzZXJ2ZWQgZm9yIEpUQUcgaW50ZXJmYWNlCisgKiBhbmQgdGhlIGZvcnRoIHBvcnQgZm9yIHBpbworICovCitzdGF0aWMgaW50IGZ0ZGlfc3RtY2xpdGVfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNlcmlhbC0+ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBzZXJpYWwtPmludGVyZmFjZTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoaW50ZXJmYWNlID09IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzJdKQorCQlyZXR1cm4gMDsKKworCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJJZ25vcmluZyBzZXJpYWwgcG9ydCByZXNlcnZlZCBmb3IgSlRBR1xuIik7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoKICAqIFRoZSBNYXRyaXggT3JiaXRhbCBWSzIwNC0yNS1VU0IgaGFzIGFuIGludmFsaWQgSU4gZW5kcG9pbnQuCiAgKiBXZSBoYXZlIHRvIGNvcnJlY3QgaXQgaWYgd2Ugd2FudCB0byByZWFkIGZyb20gaXQuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAppbmRleCBiZjA4NjcyLi4xMTdlOGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCkBAIC01MTgsNiArNTE4LDEyIEBACiAjZGVmaW5lIFJBVE9DX1BST0RVQ1RfSURfVVNCNjBGCTB4YjAyMAogCiAvKgorICogQWN0b24gUmVzZWFyY2ggQ29ycC4KKyAqLworI2RlZmluZSBBQ1RPTl9WSUQJCTB4MDY0NwkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgQUNUT05fU1BFQ1RSQVBST19QSUQJMHgwMTAwCisKKy8qCiAgKiBDb250ZWMgcHJvZHVjdHMgKGh0dHA6Ly93d3cuY29udGVjLmNvbSkKICAqIFN1Ym1pdHRlZCBieSBEYW5pZWwgU2FuZ29ycmluCiAgKi8KQEAgLTU2OSwxMSArNTc1LDIzIEBACiAjZGVmaW5lIE9DVF9VUzEwMV9QSUQJCTB4MDQyMQkvKiBPQ1QgVVMxMDEgVVNCIHRvIFJTLTIzMiAqLwogCiAvKgotICogSWNvbSBJRC0xIGRpZ2l0YWwgdHJhbnNjZWl2ZXIKKyAqIERlZmluaXRpb25zIGZvciBJY29tIEluYy4gZGV2aWNlcwogICovCi0KLSNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2Ci0jZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBJQ09NX1ZJRAkJMHgwQzI2IC8qIEljb20gdmVuZG9yIElEICovCisvKiBOb3RlOiBJRC0xIGlzIGEgY29tbXVuaWNhdGlvbnMgdHJhbmNlaXZlciBmb3IgSEFNLXJhZGlvIG9wZXJhdG9ycyAqLworI2RlZmluZSBJQ09NX0lEXzFfUElECQkweDAwMDQgLyogSUQtMSBVU0IgdG8gUlMtMjMyICovCisvKiBOb3RlOiBPUEMgaXMgYW4gT3B0aW9uYWwgY2FibGUgdG8gY29ubmVjdCBhbiBJY29tIFRyYW5jZWl2ZXIgKi8KKyNkZWZpbmUgSUNPTV9PUENfVV9VQ19QSUQJMHgwMDE4IC8qIE9QQy00NzhVQywgT1BDLTExMjJVIGNsb25pbmcgY2FibGUgKi8KKy8qIE5vdGU6IElELVJQKiBkZXZpY2VzIGFyZSBJY29tIFJlcGVhdGVyIERldmljZXMgZm9yIEhBTS1yYWRpbyAqLworI2RlZmluZSBJQ09NX0lEX1JQMkMxX1BJRAkweDAwMDkgLyogSUQtUlAyQyBBc3NldCAxIHRvIFJTLTIzMiAqLworI2RlZmluZSBJQ09NX0lEX1JQMkMyX1BJRAkweDAwMEEgLyogSUQtUlAyQyBBc3NldCAyIHRvIFJTLTIzMiAqLworI2RlZmluZSBJQ09NX0lEX1JQMkRfUElECTB4MDAwQiAvKiBJRC1SUDJEIGNvbmZpZ3VyYXRpb24gcG9ydCovCisjZGVmaW5lIElDT01fSURfUlAyVlRfUElECTB4MDAwQyAvKiBJRC1SUDJWIFRyYW5zbWl0IGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlAyVlJfUElECTB4MDAwRCAvKiBJRC1SUDJWIFJlY2VpdmUgY29uZmlnIHBvcnQgKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDRLVlRfUElECTB4MDAxMCAvKiBJRC1SUDQwMDBWIFRyYW5zbWl0IGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlA0S1ZSX1BJRAkweDAwMTEgLyogSUQtUlA0MDAwViBSZWNlaXZlIGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlAyS1ZUX1BJRAkweDAwMTIgLyogSUQtUlAyMDAwViBUcmFuc21pdCBjb25maWcgcG9ydCAqLworI2RlZmluZSBJQ09NX0lEX1JQMktWUl9QSUQJMHgwMDEzIC8qIElELVJQMjAwMFYgUmVjZWl2ZSBjb25maWcgcG9ydCAqLwogCiAvKgogICogR04gT3RvbWV0cmljcyAoaHR0cDovL3d3dy5vdG9tZXRyaWNzLmNvbSkKQEAgLTEwMjIsNiArMTA0MCwxMiBAQAogI2RlZmluZSBXSFRfUElECQkJMHgwMDA0IC8qIFdpcmVsZXNzIEhhbmRoZWxkIFRlcm1pbmFsICovCiAKIC8qCisgKiBTVE1pY3JvZWxlY3RvbmljcworICovCisjZGVmaW5lIFNUX1ZJRAkJCTB4MDQ4MworI2RlZmluZSBTVF9TVE1DTFQxMDMwX1BJRAkweDM3NDcgLyogU1QgTWljcm8gQ29ubmVjdCBMaXRlIFNUTUNMVDEwMzAgKi8KKworLyoKICAqIFBhcG91Y2ggcHJvZHVjdHMgKGh0dHA6Ly93d3cucGFwb3VjaC5jb20vKQogICogU3VibWl0dGVkIGJ5IEZvbGtlcnQgdmFuIEhldXNkZW4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggZTY4MzNlMi4uZTRkYjVhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC00NzksNiArNDc5LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2hhbmRsZV9icmVhayk7CiAKKy8qKgorICoJdXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZSAtIGhhbmRsZSBhIGNoYW5nZSBvZiBjYXJyaWVyIGRldGVjdCBzdGF0ZQorICoJQHBvcnQ6IHVzYl9zZXJpYWxfcG9ydCBzdHJ1Y3R1cmUgZm9yIHRoZSBvcGVuIHBvcnQKKyAqCUB0dHk6IHR0eV9zdHJ1Y3Qgc3RydWN0dXJlIGZvciB0aGUgcG9ydAorICoJQHN0YXR1czogbmV3IGNhcnJpZXIgZGV0ZWN0IHN0YXR1cywgbm9uemVybyBpZiBhY3RpdmUKKyAqLwordm9pZCB1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnVzYl9wb3J0LAorCQkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnVzYl9wb3J0LT5wb3J0OworCisJZGJnKCIlcyAtIHBvcnQgJWQsIHN0YXR1cyAlZCIsIF9fZnVuY19fLCB1c2JfcG9ydC0+bnVtYmVyLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCWVsc2UgaWYgKHR0eSAmJiAhQ19DTE9DQUwodHR5KSkKKwkJdHR5X2hhbmd1cCh0dHkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZSk7CisKIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggY2Q3NjllZi4uM2IyNDZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTI4ODksOCArMjg4OSw4IEBACiAKIAlkYmcoIiVzICVkLiVkLiVkIiwgZndfaW5mbywgcmVjLT5kYXRhWzBdLCByZWMtPmRhdGFbMV0sIGJ1aWxkKTsKIAotCWVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uRmlybXdhcmVNYWpvclZlcnNpb24gPSBmdy0+ZGF0YVswXTsKLQllZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLkZpcm13YXJlTWlub3JWZXJzaW9uID0gZnctPmRhdGFbMV07CisJZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5GaXJtd2FyZU1ham9yVmVyc2lvbiA9IHJlYy0+ZGF0YVswXTsKKwllZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLkZpcm13YXJlTWlub3JWZXJzaW9uID0gcmVjLT5kYXRhWzFdOwogCWVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uRmlybXdhcmVCdWlsZE51bWJlciA9IGNwdV90b19sZTE2KGJ1aWxkKTsKIAogCWZvciAocmVjID0gaWhleF9uZXh0X2JpbnJlYyhyZWMpOyByZWM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKaW5kZXggNmFiMmEzZi4uMTc4YjIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaApAQCAtMTk5LDYgKzE5OSw3IEBACiAJCS5uYW1lCQk9ICJlcGljIiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiRVBpQyBkZXZpY2UiLAorCS51c2JfZHJpdmVyCQk9ICZpb19kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IEVwaWNfcG9ydF9pZF90YWJsZSwKIAkubnVtX3BvcnRzCQk9IDEsCiAJLm9wZW4JCQk9IGVkZ2Vfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKaW5kZXggMTJlZDU5NC4uOTliOTdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKQEAgLTEyNzUsNiArMTI3NSw3IEBACiAJCSAgIC5uYW1lID0gIml1dV9waG9lbml4IiwKIAkJICAgfSwKIAkuaWRfdGFibGUgPSBpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9ICZpdXVfZHJpdmVyLAogCS5udW1fcG9ydHMgPSAxLAogCS5idWxrX2luX3NpemUgPSA1MTIsCiAJLmJ1bGtfb3V0X3NpemUgPSA1MTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaAppbmRleCAyZDhiYWY2Li5jZTEzNGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKQEAgLTU0Niw2ICs1NDYsNyBAQAogCQkubmFtZQkJPSAia2V5c3Bhbl9ub19maXJtIiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiS2V5c3BhbiAtICh3aXRob3V0IGZpcm13YXJlKSIsCisJLnVzYl9kcml2ZXIJCT0gJmtleXNwYW5fZHJpdmVyLAogCS5pZF90YWJsZQkJPSBrZXlzcGFuX3ByZV9pZHMsCiAJLm51bV9wb3J0cwkJPSAxLAogCS5hdHRhY2gJCQk9IGtleXNwYW5fZmFrZV9zdGFydHVwLApAQCAtNTU3LDYgKzU1OCw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzEiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDEgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fMXBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gMSwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApAQCAtNTc5LDYgKzU4MSw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzIiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDIgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fMnBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gMiwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApAQCAtNjAxLDYgKzYwNCw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzQiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDQgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fNHBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gNCwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCBhMTBkZDU2Li41NTRhODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtNjc5LDIyICs2NzksNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBrZXlzcGFuX3BkYV9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQotewotCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7Ci0JdW5zaWduZWQgY2hhciBtb2RlbWJpdHM7Ci0KLQkvKiBJZiB3ZSBjYW4gcmVhZCB0aGUgbW9kZW0gc3RhdHVzIGFuZCB0aGUgRENEIGlzIGxvdyB0aGVuCi0JICAgY2FycmllciBpcyBub3QgcmFpc2VkIHlldCAqLwotCWlmIChrZXlzcGFuX3BkYV9nZXRfbW9kZW1faW5mbyhzZXJpYWwsICZtb2RlbWJpdHMpID49IDApIHsKLQkJaWYgKCEobW9kZW1iaXRzICYgKDE+PjYpKSkKLQkJCXJldHVybiAwOwotCX0KLQkvKiBDYXJyaWVyIHJhaXNlZCwgb3Igd2UgZmFpbGVkIChlZyBkaXNjb25uZWN0ZWQpIHNvCi0JICAgcHJvZ3Jlc3MgYWNjb3JkaW5nbHkgKi8KLQlyZXR1cm4gMTsKLX0KLQogCiBzdGF0aWMgaW50IGtleXNwYW5fcGRhX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKQEAgLTg4MSw3ICs4NjUsNiBAQAogCS5pZF90YWJsZSA9CQlpZF90YWJsZV9zdGQsCiAJLm51bV9wb3J0cyA9CQkxLAogCS5kdHJfcnRzID0JCWtleXNwYW5fcGRhX2R0cl9ydHMsCi0JLmNhcnJpZXJfcmFpc2VkCT0Ja2V5c3Bhbl9wZGFfY2Fycmllcl9yYWlzZWQsCiAJLm9wZW4gPQkJCWtleXNwYW5fcGRhX29wZW4sCiAJLmNsb3NlID0JCWtleXNwYW5fcGRhX2Nsb3NlLAogCS53cml0ZSA9CQlrZXlzcGFuX3BkYV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCmluZGV4IGNmMTcxODMuLjY1MzQ2NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYwpAQCAtNDQsNiArNDQsNyBAQAogCQkubmFtZSA9CQkibW90by1tb2RlbSIsCiAJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgPQkJJm1vdG9fZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA3NDg3NzgyLi41ZjQ2ODM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0zODIsNyArMzgyLDE2IEBACiAjZGVmaW5lIEhBSUVSX1ZFTkRPUl9JRAkJCQkweDIwMWUKICNkZWZpbmUgSEFJRVJfUFJPRFVDVF9DRTEwMAkJCTB4MjAwOQogCi0jZGVmaW5lIENJTlRFUklPTl9WRU5ET1JfSUQJCQkweDA2ODEKKy8qIENpbnRlcmlvbiAoZm9ybWVybHkgU2llbWVucykgcHJvZHVjdHMgKi8KKyNkZWZpbmUgU0lFTUVOU19WRU5ET1JfSUQJCQkJMHgwNjgxCisjZGVmaW5lIENJTlRFUklPTl9WRU5ET1JfSUQJCQkJMHgxZTJkCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0hDMjVfTURNCQkweDAwNDcKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyNV9NRE1ORVQJMHgwMDQwCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNCQkweDAwNEMKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE1ORVQJMHgwMDRBIC8qIHNhbWUgZm9yIEhDMjhKICovCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0VVM19FCQkJMHgwMDUxCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0VVM19QCQkJMHgwMDUyCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX1BIOAkJCTB4MDA1MwogCiAvKiBPbGl2ZXR0aSBwcm9kdWN0cyAqLwogI2RlZmluZSBPTElWRVRUSV9WRU5ET1JfSUQJCQkweDBiM2MKQEAgLTk0NCw3ICs5NTMsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoUElSRUxMSV9WRU5ET1JfSUQsIFBJUkVMTElfUFJPRFVDVF8xMDBGKSB9LAogCXsgVVNCX0RFVklDRShQSVJFTExJX1ZFTkRPUl9JRCwgUElSRUxMSV9QUk9EVUNUXzEwMTEpfSwKIAl7IFVTQl9ERVZJQ0UoUElSRUxMSV9WRU5ET1JfSUQsIFBJUkVMTElfUFJPRFVDVF8xMDEyKX0sCi0JeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIDB4MDA0NykgfSwKKwkvKiBDaW50ZXJpb24gKi8KKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfRVUzX0UpIH0sCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0VVM19QKSB9LAorCXsgVVNCX0RFVklDRShDSU5URVJJT05fVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9QSDgpIH0sCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNKSB9LCAKKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE1ORVQpIH0sCisJeyBVU0JfREVWSUNFKFNJRU1FTlNfVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9IQzI1X01ETSkgfSwKKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjVfTURNTkVUKSB9LAorCXsgVVNCX0RFVklDRShTSUVNRU5TX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE0pIH0sIC8qIEhDMjggZW51bWVyYXRlcyB3aXRoIFNpZW1lbnMgb3IgQ2ludGVyaW9uIFZJRCBkZXBlbmRpbmcgb24gRlcgcmV2aXNpb24gKi8KKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNTkVUKSB9LAorCiAJeyBVU0JfREVWSUNFKE9MSVZFVFRJX1ZFTkRPUl9JRCwgT0xJVkVUVElfUFJPRFVDVF9PTElDQVJEMTAwKSB9LAogCXsgVVNCX0RFVklDRShDRUxPVF9WRU5ET1JfSUQsIENFTE9UX1BST0RVQ1RfQ1Q2ODBNKSB9LCAvKiBDVC02NTAgQ0RNQSA0NTAgMXhFVkRPIG1vZGVtICovCiAJeyBVU0JfREVWSUNFKE9OREFfVkVORE9SX0lELCBPTkRBX01UODI1VVApIH0sIC8qIE9OREEgTVQ4MjVVUCBtb2RlbSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKaW5kZXggNWJlODY2Yi4uNzM2MTMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCkBAIC0xNTcsNiArMTU3LDcgQEAKIAkJLm5hbWUgPQkJIm90aTY4NTgiLAogCX0sCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0JCSZvdGk2ODU4X2RyaXZlciwKIAkubnVtX3BvcnRzID0JCTEsCiAJLm9wZW4gPQkJCW90aTY4NThfb3BlbiwKIAkuY2xvc2UgPQkJb3RpNjg1OF9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCA4YWU0YzZjLi4wOGM5MTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC01MCw2ICs1MCw3IEBACiAJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX01NWCkgfSwKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfR1BSUykgfSwKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfSENSMzMxKSB9LAorCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9NT1RPUk9MQSkgfSwKIAl7IFVTQl9ERVZJQ0UoSU9EQVRBX1ZFTkRPUl9JRCwgSU9EQVRBX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKElPREFUQV9WRU5ET1JfSUQsIElPREFUQV9QUk9EVUNUX0lEX1JTQVE1KSB9LAogCXsgVVNCX0RFVklDRShBVEVOX1ZFTkRPUl9JRCwgQVRFTl9QUk9EVUNUX0lEKSB9LApAQCAtNjc3LDkgKzY3OCwxMSBAQAogewogCiAJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBzdGF0dXNfaWR4ID0gVUFSVF9TVEFURTsKIAl1OCBsZW5ndGggPSBVQVJUX1NUQVRFICsgMTsKKwl1OCBwcmV2X2xpbmVfc3RhdHVzOwogCXUxNiBpZHYsIGlkcDsKIAogCWlkdiA9IGxlMTZfdG9fY3B1KHBvcnQtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKQEAgLTcwMSwxMSArNzA0LDIwIEBACiAKIAkvKiBTYXZlIG9mZiB0aGUgdWFydCBzdGF0dXMgZm9yIG90aGVycyB0byBsb29rIGF0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcmV2X2xpbmVfc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CiAJcHJpdi0+bGluZV9zdGF0dXMgPSBkYXRhW3N0YXR1c19pZHhdOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAocHJpdi0+bGluZV9zdGF0dXMgJiBVQVJUX0JSRUFLX0VSUk9SKQogCQl1c2Jfc2VyaWFsX2hhbmRsZV9icmVhayhwb3J0KTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCWlmICghdHR5KQorCQlyZXR1cm47CisJaWYgKChwcml2LT5saW5lX3N0YXR1cyBeIHByZXZfbGluZV9zdGF0dXMpICYgVUFSVF9EQ0QpCisJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCXByaXYtPmxpbmVfc3RhdHVzICYgVUFSVF9EQ0QpOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiBzdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCmluZGV4IDQzZWI5YmQuLjFiMDI1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfTU1YCQkweDA2MTIKICNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfR1BSUwkJMHgwNjA5CiAjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX0hDUjMzMQkweDMzMWEKKyNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfTU9UT1JPTEEJMHgwMzA3CiAKICNkZWZpbmUgQVRFTl9WRU5ET1JfSUQJCTB4MDU1NwogI2RlZmluZSBBVEVOX1ZFTkRPUl9JRDIJCTB4MDU0NwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3FjYXV4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYwppbmRleCAyMTRhM2U1Li4zMGI3M2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYwpAQCAtMzYsNiArMzYsNyBAQAogI2RlZmluZSBVVFNUQVJDT01fUFJPRFVDVF9VTTE3NV9WMQkJMHgzNzEyCiAjZGVmaW5lIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTc1X1YyCQkweDM3MTQKICNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNzVfQUxMVEVMCQkweDM3MTUKKyNkZWZpbmUgUEFOVEVDSF9QUk9EVUNUX1VNTDI5MF9WWlcJCTB4MzcxOAogCiAvKiBDTU9URUNIIGRldmljZXMgKi8KICNkZWZpbmUgQ01PVEVDSF9WRU5ET1JfSUQJCQkweDE2ZDgKQEAgLTY2LDYgKzY3LDcgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKExHX1ZFTkRPUl9JRCwgTEdfUFJPRFVDVF9WWDQ0MDBfNjAwMCwgMHhmZiwgMHhmZiwgMHgwMCkgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFNBTllPX1ZFTkRPUl9JRCwgU0FOWU9fUFJPRFVDVF9LQVRBTkFfTFgsIDB4ZmYsIDB4ZmYsIDB4MDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19QUk9EVUNUX1U1MjAsIDB4ZmYsIDB4MDAsIDB4MDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVVFNUQVJDT01fVkVORE9SX0lELCBQQU5URUNIX1BST0RVQ1RfVU1MMjkwX1ZaVywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKQEAgLTg0LDYgKzg2LDcgQEAKIAkJLm5hbWUgPQkJInFjYXV4IiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmcWNhdXhfZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKaW5kZXggY2I4MTk1Yy4uNzRjZDRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKQEAgLTQyLDYgKzQyLDcgQEAKIAkJLm5hbWUgPQkJInNpZW1lbnNfbXBpIiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmc2llbWVuc191c2JfbXBpX2RyaXZlciwKIAkubnVtX3BvcnRzID0JCTEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggNzQ4MWZmOC4uMDQ1NzgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwpAQCAtMzAxLDYgKzMwMSw5IEBACiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHg2OEEzKSwgCS8qIFNpZXJyYSBXaXJlbGVzcyBEaXJlY3QgSVAgbW9kZW1zICovCiAJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmRpcmVjdF9pcF9pbnRlcmZhY2VfYmxhY2tsaXN0CiAJfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZjNkLCAweDY4QTMpLCAJLyogQWlycHJpbWUvU2llcnJhIFdpcmVsZXNzIERpcmVjdCBJUCBtb2RlbXMgKi8KKwkgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZGlyZWN0X2lwX2ludGVyZmFjZV9ibGFja2xpc3QKKwl9LAogICAgICAgIHsgVVNCX0RFVklDRSgweDQxM0MsIDB4MDgxMzMpIH0sIC8qIERlbGwgQ29tcHV0ZXIgQ29ycC4gV2lyZWxlc3MgNTcyMCBWWlcgTW9iaWxlIEJyb2FkYmFuZCAoRVZETyBSZXYtQSkgTWluaWNhcmQgR1BTIFBvcnQgKi8KIAogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKaW5kZXggNzY1YWE5OC4uY2JmYjcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogLyogaG93IGNvbWUgPz8/ICovCiAjZGVmaW5lIFVBUlRfU1RBVEUJCQkweDA4Ci0jZGVmaW5lIFVBUlRfU1RBVEVfVFJBTlNJRU5UX01BU0sJMHg3NAorI2RlZmluZSBVQVJUX1NUQVRFX1RSQU5TSUVOVF9NQVNLCTB4NzUKICNkZWZpbmUgVUFSVF9EQ0QJCQkweDAxCiAjZGVmaW5lIFVBUlRfRFNSCQkJMHgwMgogI2RlZmluZSBVQVJUX0JSRUFLX0VSUk9SCQkweDA0CkBAIC01MjUsNiArNTI1LDEwIEBACiAJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KIAkJaWYgKHN0YXR1cyAmIFVBUlRfT1ZFUlJVTl9FUlJPUikKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCisJCWlmIChzdGF0dXMgJiBVQVJUX0RDRCkKKwkJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCSAgIHByaXYtPmxpbmVfc3RhdHVzICYgTVNSX1NUQVRVU19MSU5FX0RDRCk7CiAJfQogCiAJdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHR0eSwgZGF0YSwgdHR5X2ZsYWcsCkBAIC02NDUsNiArNjQ5LDcgQEAKIAkJLm5hbWUgPQkJIlNQQ1A4eDUiLAogCX0sCiAJLmlkX3RhYmxlCQk9IGlkX3RhYmxlLAorCS51c2JfZHJpdmVyCQk9ICZzcGNwOHg1X2RyaXZlciwKIAkubnVtX3BvcnRzCQk9IDEsCiAJLm9wZW4gCQkJPSBzcGNwOHg1X29wZW4sCiAJLmR0cl9ydHMJCT0gc3BjcDh4NV9kdHJfcnRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKaW5kZXggYjI5MDJmMy4uYTkxMDAwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCkBAIC0zNjksOSArMzY5LDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHRpX2V4aXQodm9pZCkKIHsKKwl1c2JfZGVyZWdpc3RlcigmdGlfdXNiX2RyaXZlcik7CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8xcG9ydF9kZXZpY2UpOwogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmdGlfMnBvcnRfZGV2aWNlKTsKLQl1c2JfZGVyZWdpc3RlcigmdGlfdXNiX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggNjk1NGRlNS4uNTQ2YTUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0xMzQ0LDExICsxMzQ0LDE1IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJZml4dXBfZ2VuZXJpYyhkcml2ZXIpOwotCWlmIChkcml2ZXItPnVzYl9kcml2ZXIpCi0JCWRyaXZlci0+dXNiX2RyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxOwogCiAJaWYgKCFkcml2ZXItPmRlc2NyaXB0aW9uKQogCQlkcml2ZXItPmRlc2NyaXB0aW9uID0gZHJpdmVyLT5kcml2ZXIubmFtZTsKKwlpZiAoIWRyaXZlci0+dXNiX2RyaXZlcikgeworCQlXQVJOKDEsICJTZXJpYWwgZHJpdmVyICVzIGhhcyBubyB1c2JfZHJpdmVyXG4iLAorCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZHJpdmVyLT51c2JfZHJpdmVyLT5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDE7CiAKIAkvKiBBZGQgdGhpcyBkZXZpY2UgdG8gb3VyIGxpc3Qgb2YgZGV2aWNlcyAqLwogCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCmluZGV4IGYyZWQ2YTMuLjk1YTgyMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKQEAgLTc1LDYgKzc1LDcgQEAKIAkJLm5hbWUgPQkJImRlYnVnIiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmZGVidWdfZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIAkuYnVsa19vdXRfc2l6ZSA9CVVTQl9ERUJVR19NQVhfUEFDS0VUX1NJWkUsCiAJLmJyZWFrX2N0bCA9CQl1c2JfZGVidWdfYnJlYWtfY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl93d2FuLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYwppbmRleCBiMDA0YjJhLi45YzAxNGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYwpAQCAtMjk1LDEyICsyOTUsMTUgQEAKIAkJICAgIF9fZnVuY19fLCBzdGF0dXMsIGVuZHBvaW50KTsKIAl9IGVsc2UgewogCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQl9IGVsc2UKLQkJCWRiZygiJXM6IGVtcHR5IHJlYWQgdXJiIHJlY2VpdmVkIiwgX19mdW5jX18pOwotCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJaWYgKHR0eSkgeworCQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLAorCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfSBlbHNlCisJCQkJZGJnKCIlczogZW1wdHkgcmVhZCB1cmIgcmVjZWl2ZWQiLCBfX2Z1bmNfXyk7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQogCiAJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAkJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IDE1YTVkODkuLjFjMTE5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CiAjaW5jbHVkZSAidmlzb3IuaCIKIAogLyoKQEAgLTQ3OSw2ICs0ODAsMTcgQEAKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKKwkvKgorCSAqIHNvbWUgU2Ftc3VuZyBBbmRyb2lkIHBob25lcyBpbiBtb2RlbSBtb2RlIGhhdmUgdGhlIHNhbWUgSUQKKwkgKiBhcyBTUEgtSTUwMCwgYnV0IHRoZXkgYXJlIEFDTSBkZXZpY2VzLCBzbyBkb250IGJpbmQgdG8gdGhlbQorCSAqLworCWlmIChpZC0+aWRWZW5kb3IgPT0gU0FNU1VOR19WRU5ET1JfSUQgJiYKKwkJaWQtPmlkUHJvZHVjdCA9PSBTQU1TVU5HX1NQSF9JNTAwX0lEICYmCisJCXNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQ09NTSAmJgorCQlzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MgPT0KKwkJCVVTQl9DRENfU1VCQ0xBU1NfQUNNKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewogCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/P1xuIiwKIAkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaAppbmRleCBjODU0ZmRlLi4yYzg1NTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmgKQEAgLTMxLDQgKzMxLDkgQEAKIAkJIkN5cHJlc3MgSVNELTMwMExQIiwKIAkJVVNCX1NDX0NZUF9BVEFDQiwgVVNCX1BSX0RFVklDRSwgTlVMTCwgMCksCiAKK1VOVVNVQUxfREVWKCAweDE0Y2QsIDB4NjExNiwgMHgwMDAwLCAweDk5OTksCisJCSJTdXBlciBUb3AiLAorCQkiVVNCIDIuMCAgU0FUQSBCUklER0UiLAorCQlVU0JfU0NfQ1lQX0FUQUNCLCBVU0JfUFJfREVWSUNFLCBOVUxMLCAwKSwKKwogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggZmNjMWUzMi4uYzE2MDJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0xMDQ0LDYgKzEwNDQsMTUgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfQlVMSzMyKSwKIAorLyogUmVwb3J0ZWQgYnkgPHR0a3NwYW1AZnJlZS5mcj4KKyAqIFRoZSBkZXZpY2UgcmVwb3J0cyBhIHZlbmRvci1zcGVjaWZpYyBkZXZpY2UgY2xhc3MsIHJlcXVpcmluZyBhbgorICogZXhwbGljaXQgdmVuZG9yL3Byb2R1Y3QgbWF0Y2guCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwODUxLCAweDE1NDIsIDB4MDAwMiwgMHgwMDAyLAorCQkiTWFnaWNQaXhlbCIsCisJCSJGV19PbWVnYTIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLCAwKSwKKwogLyogQW5kcmV3IEx1bm4gPGFuZHJld0BsdW5uLmNoPgogICogUGFuRGlnaXRhbCBEaWdpdGFsIFBpY3R1cmUgRnJhbWUuIERvZXMgbm90IGxpa2UgQUxMT1dfTUVESVVNX1JFTU9WQUwKICAqIG9uIExVTiA0LgpAQCAtMTM4OCw2ICsxMzk3LDEzIEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCiAKKy8qIFN1Ym1pdHRlZCBieSBOaWNrIEhvbGxvd2F5ICovCitVTlVTVUFMX0RFViggMHgwZjg4LCAweDA0MmUsIDB4MDEwMCwgMHgwMTAwLAorCQkiVlRlY2giLAorCQkiS2lkaXpvb20iLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKwogLyogUmVwb3J0ZWQgYnkgTWljaGFlbCBTdGF0dG1hbm4gPG1pY2hhZWxAc3RhdHRtYW5uLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwZmNlLCAweGQwMDgsIDB4MDAwMCwgMHgwMDAwLAogCQkiU29ueSBFcmljc3NvbiIsCkBAIC0xODcyLDYgKzE4ODgsMjIgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9fUkVBRF9ESVNDX0lORk8gKSwKIAorLyogUGF0Y2ggYnkgUmljaGFyZCBTY2j8dHogPHIuc2NodHpAdC1vbmxpbmUuZGU+CisgKiBUaGlzIGV4dGVybmFsIGhhcmQgZHJpdmUgZW5jbG9zdXJlIHVzZXMgYSBKTWljcm9uIGNoaXAgd2hpY2gKKyAqIG5lZWRzIHRoZSBVU19GTF9JR05PUkVfUkVTSURVRSBmbGFnIHRvIHdvcmsgcHJvcGVybHkuICovCitVTlVTVUFMX0RFViggIDB4MWU2OCwgMHgwMDFiLCAweDAwMDAsIDB4MDAwMCwKKwkJIlRyZWtTdG9yIEdtYkggJiBDby4gS0ciLAorCQkiRGF0YVN0YXRpb24gbWF4aSBnLnUiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSB8IFVTX0ZMX1NBTkVfU0VOU0UgKSwKKworLyogUmVwb3J0ZWQgYnkgSmFzcGVyIE1hY2tlbnppZSA8c2NhcmxldHBpbXBlcm5hbEBob3RtYWlsLmNvbT4gKi8KK1VOVVNVQUxfREVWKCAweDFlNzQsIDB4NDYyMSwgMHgwMDAwLCAweDAwMDAsCisJCSJDb2J5IEVsZWN0cm9uaWNzIiwKKwkJIk1QMyBQbGF5ZXIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9CVUxLX0lHTk9SRV9UQUcgfCBVU19GTF9NQVhfU0VDVE9SU182NCApLAorCiBVTlVTVUFMX0RFViggMHgyMTE2LCAweDAzMjAsIDB4MDAwMSwgMHgwMDAxLAogCQkiU1QiLAogCQkiMkEiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggOWIzY2ExMC4uZjYxNmNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYworKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xMjgsOCArMTI4LDcgQEAKIAlzaXplX3QgaGRyX3NpemU7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAotCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXI/Ci0JICogTm90IHN1cmUgaXQncyB3b3J0aCBpdCwgaXQncyBzdHJhaWdodC1mb3J3YXJkIGVub3VnaC4gKi8KKwkvKiBUT0RPOiBjaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIGZyb20gdmhvc3Rfd29ya2VyPyAqLwogCXNvY2sgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2sodnEtPnByaXZhdGVfZGF0YSwgMSk7CiAJaWYgKCFzb2NrKQogCQlyZXR1cm47CkBAIC0zMDYsNyArMzA1LDggQEAKIAlzaXplX3QgbGVuLCB0b3RhbF9sZW4gPSAwOwogCWludCBlcnI7CiAJc2l6ZV90IGhkcl9zaXplOwotCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByY3VfZGVyZWZlcmVuY2UodnEtPnByaXZhdGVfZGF0YSk7CisJLyogVE9ETzogY2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyBmcm9tIHZob3N0X3dvcmtlcj8gKi8KKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHZxLT5wcml2YXRlX2RhdGEsIDEpOwogCWlmICghc29jayB8fCBza2JfcXVldWVfZW1wdHkoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKIAkJcmV0dXJuOwogCkBAIC00MTUsNyArNDE1LDggQEAKIAlpbnQgZXJyLCBoZWFkY291bnQ7CiAJc2l6ZV90IHZob3N0X2hsZW4sIHNvY2tfaGxlbjsKIAlzaXplX3Qgdmhvc3RfbGVuLCBzb2NrX2xlbjsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlKHZxLT5wcml2YXRlX2RhdGEpOworCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXI/ICovCisJc3RydWN0IHNvY2tldCAqc29jayA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh2cS0+cHJpdmF0ZV9kYXRhLCAxKTsKIAlpZiAoIXNvY2sgfHwgc2tiX3F1ZXVlX2VtcHR5KCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5oIGIvZHJpdmVycy92aG9zdC92aG9zdC5oCmluZGV4IDJhZjQ0YjcuLmIzMzYzYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAorKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKQEAgLTE3Myw5ICsxNzMsOSBAQAogewogCXVuc2lnbmVkIGFja2VkX2ZlYXR1cmVzOwogCi0JYWNrZWRfZmVhdHVyZXMgPQotCQlyY3VfZGVyZWZlcmVuY2VfaW5kZXhfY2hlY2soZGV2LT5hY2tlZF9mZWF0dXJlcywKLQkJCQkJICAgIGxvY2tkZXBfaXNfaGVsZCgmZGV2LT5tdXRleCkpOworCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXIgb3IgZGV2IG11dGV4IGlzCisJICogaGVsZD8gKi8KKwlhY2tlZF9mZWF0dXJlcyA9IHJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjayhkZXYtPmFja2VkX2ZlYXR1cmVzLCAxKTsKIAlyZXR1cm4gYWNrZWRfZmVhdHVyZXMgJiAoMSA8PCBiaXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdHYzNTBxdi5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHR2MzUwcXYuYwppbmRleCA4MDEwYWFlLi5kZDBlODRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdHYzNTBxdi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2x0djM1MHF2LmMKQEAgLTIzOSwxMSArMjM5LDE1IEBACiAJbGNkLT5zcGkgPSBzcGk7CiAJbGNkLT5wb3dlciA9IEZCX0JMQU5LX1BPV0VSRE9XTjsKIAlsY2QtPmJ1ZmZlciA9IGt6YWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsY2QtPmJ1ZmZlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2xjZDsKKwl9CiAKIAlsZCA9IGxjZF9kZXZpY2VfcmVnaXN0ZXIoImx0djM1MHF2IiwgJnNwaS0+ZGV2LCBsY2QsICZsdHZfb3BzKTsKIAlpZiAoSVNfRVJSKGxkKSkgewogCQlyZXQgPSBQVFJfRVJSKGxkKTsKLQkJZ290byBvdXRfZnJlZV9sY2Q7CisJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyOwogCX0KIAlsY2QtPmxkID0gbGQ7CiAKQEAgLTI1Nyw2ICsyNjEsOCBAQAogCiBvdXRfdW5yZWdpc3RlcjoKIAlsY2RfZGV2aWNlX3VucmVnaXN0ZXIobGQpOworb3V0X2ZyZWVfYnVmZmVyOgorCWtmcmVlKGxjZC0+YnVmZmVyKTsKIG91dF9mcmVlX2xjZDoKIAlrZnJlZShsY2QpOwogCXJldHVybiByZXQ7CkBAIC0yNjgsNiArMjc0LDcgQEAKIAogCWx0djM1MHF2X3Bvd2VyKGxjZCwgRkJfQkxBTktfUE9XRVJET1dOKTsKIAlsY2RfZGV2aWNlX3VucmVnaXN0ZXIobGNkLT5sZCk7CisJa2ZyZWUobGNkLT5idWZmZXIpOwogCWtmcmVlKGxjZCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9vbWFwX2hkcS5jIGIvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMKaW5kZXggM2E3ZTlmZi4uMzhlOTZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMKQEAgLTU5MywxOSArNTkzLDE3IEBACiAKIAkvKiBnZXQgaW50ZXJmYWNlICYgZnVuY3Rpb25hbCBjbG9jayBvYmplY3RzICovCiAJaGRxX2RhdGEtPmhkcV9pY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKLQloZHFfZGF0YS0+aGRxX2ZjayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOworCWlmIChJU19FUlIoaGRxX2RhdGEtPmhkcV9pY2spKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIkNhbid0IGdldCBIRFEgaWNrIGNsb2NrIG9iamVjdFxuIik7CisJCXJldCA9IFBUUl9FUlIoaGRxX2RhdGEtPmhkcV9pY2spOworCQlnb3RvIGVycl9pY2s7CisJfQogCi0JaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ljaykgfHwgSVNfRVJSKGhkcV9kYXRhLT5oZHFfZmNrKSkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJDYW4ndCBnZXQgSERRIGNsb2NrIG9iamVjdHNcbiIpOwotCQlpZiAoSVNfRVJSKGhkcV9kYXRhLT5oZHFfaWNrKSkgewotCQkJcmV0ID0gUFRSX0VSUihoZHFfZGF0YS0+aGRxX2ljayk7Ci0JCQlnb3RvIGVycl9jbGs7Ci0JCX0KLQkJaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ZjaykpIHsKLQkJCXJldCA9IFBUUl9FUlIoaGRxX2RhdGEtPmhkcV9mY2spOwotCQkJY2xrX3B1dChoZHFfZGF0YS0+aGRxX2ljayk7Ci0JCQlnb3RvIGVycl9jbGs7Ci0JCX0KKwloZHFfZGF0YS0+aGRxX2ZjayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOworCWlmIChJU19FUlIoaGRxX2RhdGEtPmhkcV9mY2spKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIkNhbid0IGdldCBIRFEgZmNrIGNsb2NrIG9iamVjdFxuIik7CisJCXJldCA9IFBUUl9FUlIoaGRxX2RhdGEtPmhkcV9mY2spOworCQlnb3RvIGVycl9mY2s7CiAJfQogCiAJaGRxX2RhdGEtPmhkcV91c2Vjb3VudCA9IDA7CkBAIC02NjUsMTAgKzY2MywxMiBAQAogCWNsa19kaXNhYmxlKGhkcV9kYXRhLT5oZHFfaWNrKTsKIAogZXJyX2ludGZjbGs6Ci0JY2xrX3B1dChoZHFfZGF0YS0+aGRxX2ljayk7CiAJY2xrX3B1dChoZHFfZGF0YS0+aGRxX2Zjayk7CiAKLWVycl9jbGs6CitlcnJfZmNrOgorCWNsa19wdXQoaGRxX2RhdGEtPmhkcV9pY2spOworCitlcnJfaWNrOgogCWlvdW5tYXAoaGRxX2RhdGEtPmhkcV9iYXNlKTsKIAogZXJyX2lvcmVtYXA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKaW5kZXggMmUyNDAwZS4uMzE2NDliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwpAQCAtODYyLDEyICs4NjIsMTIgQEAKIAogIyBNNjhLIEFyY2hpdGVjdHVyZQogCi1jb25maWcgTTU0OHhfV0FUQ0hET0cKLQl0cmlzdGF0ZSAiTUNGNTQ4eCB3YXRjaGRvZyBzdXBwb3J0IgorY29uZmlnIE01NHh4X1dBVENIRE9HCisJdHJpc3RhdGUgIk1DRjU0eHggd2F0Y2hkb2cgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE01NDh4CiAJaGVscAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbTU0OHhfd2R0LgorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG01NHh4X3dkdC4KIAogIyBNSVBTIEFyY2hpdGVjdHVyZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQppbmRleCBkZDc3NjY1Li4yMGU0NGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKQEAgLTEwNiw3ICsxMDYsNyBAQAogIyBNMzJSIEFyY2hpdGVjdHVyZQogCiAjIE02OEsgQXJjaGl0ZWN0dXJlCi1vYmotJChDT05GSUdfTTU0OHhfV0FUQ0hET0cpICs9IG01NDh4X3dkdC5vCitvYmotJChDT05GSUdfTTU0eHhfV0FUQ0hET0cpICs9IG01NHh4X3dkdC5vCiAKICMgTUlQUyBBcmNoaXRlY3R1cmUKIG9iai0kKENPTkZJR19BVEg3OV9XRFQpICs9IGF0aDc5X3dkdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL201NDh4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tNTR4eF93ZHQuYwpzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3dhdGNoZG9nL201NDh4X3dkdC5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL201NHh4X3dkdC5jCmluZGV4IGNhYmJjZmUuLjRkNDMyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbTU0OHhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tNTR4eF93ZHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBkcml2ZXJzL3dhdGNoZG9nL201NDh4X3dkdC5jCisgKiBkcml2ZXJzL3dhdGNoZG9nL201NHh4X3dkdC5jCiAgKgotICogV2F0Y2hkb2cgZHJpdmVyIGZvciBDb2xkRmlyZSBNQ0Y1NDh4IHByb2Nlc3NvcnMKKyAqIFdhdGNoZG9nIGRyaXZlciBmb3IgQ29sZEZpcmUgTUNGNTQ3eCAmIE1DRjU0OHggcHJvY2Vzc29ycwogICogQ29weXJpZ2h0IDIwMTAgKGMpIFBoaWxpcHBlIERlIE11eXRlciA8cGhkbUBtYWNxZWwuYmU+CiAgKgogICogQWRhcHRlZCBmcm9tIHRoZSBJWFA0eHggd2F0Y2hkb2cgZHJpdmVyLCB3aGljaCBjYXJyaWVzIHRoZXNlIG5vdGljZXM6CkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL2NvbGRmaXJlLmg+Ci0jaW5jbHVkZSA8YXNtL201NDh4c2ltLmg+Ci0jaW5jbHVkZSA8YXNtL201NDh4Z3B0Lmg+CisjaW5jbHVkZSA8YXNtL201NHh4c2ltLmg+CisjaW5jbHVkZSA8YXNtL201NHh4Z3B0Lmg+CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaGVhcnRiZWF0ID0gMzA7CS8qIChzZWNzKSBEZWZhdWx0IGlzIDAuNSBtaW51dGUgKi8KQEAgLTc2LDcgKzc2LDcgQEAKIAlfX3Jhd193cml0ZWwoZ21zMCwgTUNGX01CQVIgKyBNQ0ZfR1BUX0dNUzApOwogfQogCi1zdGF0aWMgaW50IG01NDh4X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBtNTR4eF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChXRFRfSU5fVVNFLCAmd2R0X3N0YXR1cykpCiAJCXJldHVybiAtRUJVU1k7CkBAIC04Niw3ICs4Niw3IEBACiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3NpemVfdCBtNTQ4eF93ZHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmRhdGEsCitzdGF0aWMgc3NpemVfdCBtNTR4eF93ZHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmRhdGEsCiAJCQkJCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7CiAJaWYgKGxlbikgewpAQCAtMTEyLDEwICsxMTIsMTAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkub3B0aW9ucwk9IFdESU9GX01BR0lDQ0xPU0UgfCBXRElPRl9TRVRUSU1FT1VUIHwKIAkJCQlXRElPRl9LRUVQQUxJVkVQSU5HLAotCS5pZGVudGl0eQk9ICJDb2xkZmlyZSBNNTQ4eCBXYXRjaGRvZyIsCisJLmlkZW50aXR5CT0gIkNvbGRmaXJlIE01NHh4IFdhdGNoZG9nIiwKIH07CiAKLXN0YXRpYyBsb25nIG01NDh4X3dkdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKK3N0YXRpYyBsb25nIG01NHh4X3dkdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQkJCQkgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IHJldCA9IC1FTk9UVFk7CkBAIC0xNjEsNyArMTYxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG01NDh4X3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBtNTR4eF93ZHRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpZiAodGVzdF9iaXQoV0RUX09LX1RPX0NMT1NFLCAmd2R0X3N0YXR1cykpCiAJCXdkdF9kaXNhYmxlKCk7CkBAIC0xNzcsNDUgKzE3Nyw0NSBAQAogfQogCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG01NDh4X3dkdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbTU0eHhfd2R0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAotCS53cml0ZQkJPSBtNTQ4eF93ZHRfd3JpdGUsCi0JLnVubG9ja2VkX2lvY3RsCT0gbTU0OHhfd2R0X2lvY3RsLAotCS5vcGVuCQk9IG01NDh4X3dkdF9vcGVuLAotCS5yZWxlYXNlCT0gbTU0OHhfd2R0X3JlbGVhc2UsCisJLndyaXRlCQk9IG01NHh4X3dkdF93cml0ZSwKKwkudW5sb2NrZWRfaW9jdGwJPSBtNTR4eF93ZHRfaW9jdGwsCisJLm9wZW4JCT0gbTU0eHhfd2R0X29wZW4sCisJLnJlbGVhc2UJPSBtNTR4eF93ZHRfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtNTQ4eF93ZHRfbWlzY2RldiA9IHsKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBtNTR4eF93ZHRfbWlzY2RldiA9IHsKIAkubWlub3IJCT0gV0FUQ0hET0dfTUlOT1IsCiAJLm5hbWUJCT0gIndhdGNoZG9nIiwKLQkuZm9wcwkJPSAmbTU0OHhfd2R0X2ZvcHMsCisJLmZvcHMJCT0gJm01NHh4X3dkdF9mb3BzLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgbTU0OHhfd2R0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG01NHh4X3dkdF9pbml0KHZvaWQpCiB7CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oTUNGX01CQVIgKyBNQ0ZfR1BUX0dDSVIwLCA0LAotCQkJCQkJIkNvbGRmaXJlIE01NDh4IFdhdGNoZG9nIikpIHsKKwkJCQkJCSJDb2xkZmlyZSBNNTR4eCBXYXRjaGRvZyIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkiQ29sZGZpcmUgTTU0OHggV2F0Y2hkb2cgOiBJL08gcmVnaW9uIGJ1c3lcbiIpOworCQkJCSJDb2xkZmlyZSBNNTR4eCBXYXRjaGRvZyA6IEkvTyByZWdpb24gYnVzeVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIkNvbGRGaXJlIHdhdGNoZG9nIGRyaXZlciBpcyBsb2FkZWQuXG4iKTsKIAotCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZtNTQ4eF93ZHRfbWlzY2Rldik7CisJcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJm01NHh4X3dkdF9taXNjZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IG01NDh4X3dkdF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgbTU0eHhfd2R0X2V4aXQodm9pZCkKIHsKLQltaXNjX2RlcmVnaXN0ZXIoJm01NDh4X3dkdF9taXNjZGV2KTsKKwltaXNjX2RlcmVnaXN0ZXIoJm01NHh4X3dkdF9taXNjZGV2KTsKIAlyZWxlYXNlX21lbV9yZWdpb24oTUNGX01CQVIgKyBNQ0ZfR1BUX0dDSVIwLCA0KTsKIH0KIAotbW9kdWxlX2luaXQobTU0OHhfd2R0X2luaXQpOwotbW9kdWxlX2V4aXQobTU0OHhfd2R0X2V4aXQpOworbW9kdWxlX2luaXQobTU0eHhfd2R0X2luaXQpOworbW9kdWxlX2V4aXQobTU0eHhfd2R0X2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJQaGlsaXBwZSBEZSBNdXl0ZXIgPHBoZG1AbWFjcWVsLmJlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb2xkZmlyZSBNNTQ4eCBXYXRjaGRvZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb2xkZmlyZSBNNTR4eCBXYXRjaGRvZyIpOwogCiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcyAoZGVmYXVsdCAzMHMpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9tYW5hZ2UuYyBiL2RyaXZlcnMveGVuL21hbmFnZS5jCmluZGV4IGRiOGM0YzQuLjI0MTc3MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL21hbmFnZS5jCisrKyBiL2RyaXZlcnMveGVuL21hbmFnZS5jCkBAIC0zNywxMSArMzcsMTkgQEAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgeGVuX2h2bV9zdXNwZW5kKHZvaWQgKmRhdGEpCiB7CisJaW50IGVycjsKIAlzdHJ1Y3Qgc2NoZWRfc2h1dGRvd24gciA9IHsgLnJlYXNvbiA9IFNIVVRET1dOX3N1c3BlbmQgfTsKIAlpbnQgKmNhbmNlbGxlZCA9IGRhdGE7CiAKIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKKwllcnIgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4ZW5faHZtX3N1c3BlbmQ6IHN5c2Rldl9zdXNwZW5kIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwogCSpjYW5jZWxsZWQgPSBIWVBFUlZJU09SX3NjaGVkX29wKFNDSEVET1Bfc2h1dGRvd24sICZyKTsKIAogCXhlbl9odm1fcG9zdF9zdXNwZW5kKCpjYW5jZWxsZWQpOwpAQCAtNTMsNiArNjEsOCBAQAogCQl4ZW5fdGltZXJfcmVzdW1lKCk7CiAJfQogCisJc3lzZGV2X3Jlc3VtZSgpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy93cml0ZS5jIGIvZnMvYWZzL3dyaXRlLmMKaW5kZXggMTU2OTBiYi4uNzg5YjNhZiAxMDA2NDQKLS0tIGEvZnMvYWZzL3dyaXRlLmMKKysrIGIvZnMvYWZzL3dyaXRlLmMKQEAgLTE0MCw2ICsxNDAsNyBAQAogCWNhbmRpZGF0ZS0+Zmlyc3QgPSBjYW5kaWRhdGUtPmxhc3QgPSBpbmRleDsKIAljYW5kaWRhdGUtPm9mZnNldF9maXJzdCA9IGZyb207CiAJY2FuZGlkYXRlLT50b19sYXN0ID0gdG87CisJSU5JVF9MSVNUX0hFQUQoJmNhbmRpZGF0ZS0+bGluayk7CiAJY2FuZGlkYXRlLT51c2FnZSA9IDE7CiAJY2FuZGlkYXRlLT5zdGF0ZSA9IEFGU19XQkFDS19QRU5ESU5HOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhbmRpZGF0ZS0+d2FpdHEpOwpkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCBmYzU1N2EzLi4yNjg2OWNkIDEwMDY0NAotLS0gYS9mcy9haW8uYworKysgYi9mcy9haW8uYwpAQCAtMjM5LDE1ICsyMzksMjMgQEAKIAljYWxsX3JjdSgmY3R4LT5yY3VfaGVhZCwgY3R4X3JjdV9mcmVlKTsKIH0KIAotI2RlZmluZSBnZXRfaW9jdHgoa2lvY3R4KSBkbyB7CQkJCQkJXAotCUJVR19PTihhdG9taWNfcmVhZCgmKGtpb2N0eCktPnVzZXJzKSA8PSAwKTsJCQlcCi0JYXRvbWljX2luYygmKGtpb2N0eCktPnVzZXJzKTsJCQkJCVwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIHB1dF9pb2N0eChraW9jdHgpIGRvIHsJCQkJCQlcCi0JQlVHX09OKGF0b21pY19yZWFkKCYoa2lvY3R4KS0+dXNlcnMpIDw9IDApOwkJCVwKLQlpZiAodW5saWtlbHkoYXRvbWljX2RlY19hbmRfdGVzdCgmKGtpb2N0eCktPnVzZXJzKSkpIAkJXAotCQlfX3B1dF9pb2N0eChraW9jdHgpOwkJCQkJXAotfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfaW9jdHgoc3RydWN0IGtpb2N0eCAqa2lvY3R4KQoreworCUJVR19PTihhdG9taWNfcmVhZCgma2lvY3R4LT51c2VycykgPD0gMCk7CisJYXRvbWljX2luYygma2lvY3R4LT51c2Vycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRyeV9nZXRfaW9jdHgoc3RydWN0IGtpb2N0eCAqa2lvY3R4KQoreworCXJldHVybiBhdG9taWNfaW5jX25vdF96ZXJvKCZraW9jdHgtPnVzZXJzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB1dF9pb2N0eChzdHJ1Y3Qga2lvY3R4ICpraW9jdHgpCit7CisJQlVHX09OKGF0b21pY19yZWFkKCZraW9jdHgtPnVzZXJzKSA8PSAwKTsKKwlpZiAodW5saWtlbHkoYXRvbWljX2RlY19hbmRfdGVzdCgma2lvY3R4LT51c2VycykpKQorCQlfX3B1dF9pb2N0eChraW9jdHgpOworfQogCiAvKiBpb2N0eF9hbGxvYwogICoJQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBhbiBpb2N0eC4gIFJldHVybnMgYW4gRVJSX1BUUiBpZiBpdCBmYWlsZWQuCkBAIC02MDEsOCArNjA5LDEzIEBACiAJcmN1X3JlYWRfbG9jaygpOwogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGN0eCwgbiwgJm1tLT5pb2N0eF9saXN0LCBsaXN0KSB7Ci0JCWlmIChjdHgtPnVzZXJfaWQgPT0gY3R4X2lkICYmICFjdHgtPmRlYWQpIHsKLQkJCWdldF9pb2N0eChjdHgpOworCQkvKgorCQkgKiBSQ1UgcHJvdGVjdHMgdXMgYWdhaW5zdCBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5IGJ1dAorCQkgKiB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGdldCBhIHJlZmVyZW5jZSB3aGVuIHRoZQorCQkgKiByZWZlcmVuY2UgY291bnQgYWxyZWFkeSBkcm9wcGVkIHRvIDAgKGN0eC0+ZGVhZCB0ZXN0CisJCSAqIGlzIHVucmVsaWFibGUgYmVjYXVzZSBvZiByYWNlcykuCisJCSAqLworCQlpZiAoY3R4LT51c2VyX2lkID09IGN0eF9pZCAmJiAhY3R4LT5kZWFkICYmIHRyeV9nZXRfaW9jdHgoY3R4KSl7CiAJCQlyZXQgPSBjdHg7CiAJCQlicmVhazsKIAkJfQpAQCAtMTYyOSw2ICsxNjQyLDIzIEBACiAJCWdvdG8gb3V0X3B1dF9yZXE7CiAKIAlzcGluX2xvY2tfaXJxKCZjdHgtPmN0eF9sb2NrKTsKKwkvKgorCSAqIFdlIGNvdWxkIGhhdmUgcmFjZWQgd2l0aCBpb19kZXN0cm95KCkgYW5kIGFyZSBjdXJyZW50bHkgaG9sZGluZyBhCisJICogcmVmZXJlbmNlIHRvIGN0eCB3aGljaCBzaG91bGQgYmUgZGVzdHJveWVkLiBXZSBjYW5ub3Qgc3VibWl0IElPCisJICogc2luY2UgY3R4IGdldHMgZnJlZWQgYXMgc29vbiBhcyBpb19zdWJtaXQoKSBwdXRzIGl0cyByZWZlcmVuY2UuICBUaGUKKwkgKiBjaGVjayBoZXJlIGlzIHJlbGlhYmxlOiBpb19kZXN0cm95KCkgc2V0cyBjdHgtPmRlYWQgYmVmb3JlIHdhaXRpbmcKKwkgKiBmb3Igb3V0c3RhbmRpbmcgSU8gYW5kIHRoZSBiYXJyaWVyIGJldHdlZW4gdGhlc2UgdHdvIGlzIHJlYWxpemVkIGJ5CisJICogdW5sb2NrIG9mIG1tLT5pb2N0eF9sb2NrIGFuZCBsb2NrIG9mIGN0eC0+Y3R4X2xvY2suICBBbmFsb2dvdXNseSB3ZQorCSAqIGluY3JlbWVudCBjdHgtPnJlcXNfYWN0aXZlIGJlZm9yZSBjaGVja2luZyBmb3IgY3R4LT5kZWFkIGFuZCB0aGUKKwkgKiBiYXJyaWVyIGlzIHJlYWxpemVkIGJ5IHVubG9jayBhbmQgbG9jayBvZiBjdHgtPmN0eF9sb2NrLiBUaHVzIGlmIHdlCisJICogZG9uJ3Qgc2VlIGN0eC0+ZGVhZCBzZXQgaGVyZSwgaW9fZGVzdHJveSgpIHdhaXRzIGZvciBvdXIgSU8gdG8KKwkgKiBmaW5pc2guCisJICovCisJaWYgKGN0eC0+ZGVhZCkgeworCQlzcGluX3VubG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9wdXRfcmVxOworCX0KIAlhaW9fcnVuX2lvY2IocmVxKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmN0eC0+cnVuX2xpc3QpKSB7CiAJCS8qIGRyYWluIHRoZSBydW4gbGlzdCAqLwpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCAzMzNhN2JiLi44ODkyODcwIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtODczLDYgKzg3MywxMSBAQAogCXJldCA9IGFkZF9zeW1saW5rKGJkZXYtPmJkX3BhcnQtPmhvbGRlcl9kaXIsICZkaXNrX3RvX2RldihkaXNrKS0+a29iaik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZGVsOworCS8qCisJICogYmRldiBjb3VsZCBiZSBkZWxldGVkIGJlbmVhdGggdXMgd2hpY2ggd291bGQgaW1wbGljaXRseSBkZXN0cm95CisJICogdGhlIGhvbGRlciBkaXJlY3RvcnkuICBIb2xkIG9uIHRvIGl0LgorCSAqLworCWtvYmplY3RfZ2V0KGJkZXYtPmJkX3BhcnQtPmhvbGRlcl9kaXIpOwogCiAJbGlzdF9hZGQoJmhvbGRlci0+bGlzdCwgJmJkZXYtPmJkX2hvbGRlcl9kaXNrcyk7CiAJZ290byBvdXRfdW5sb2NrOwpAQCAtOTA5LDYgKzkxNCw3IEBACiAJCWRlbF9zeW1saW5rKGRpc2stPnNsYXZlX2RpciwgJnBhcnRfdG9fZGV2KGJkZXYtPmJkX3BhcnQpLT5rb2JqKTsKIAkJZGVsX3N5bWxpbmsoYmRldi0+YmRfcGFydC0+aG9sZGVyX2RpciwKIAkJCSAgICAmZGlza190b19kZXYoZGlzayktPmtvYmopOworCQlrb2JqZWN0X3B1dChiZGV2LT5iZF9wYXJ0LT5ob2xkZXJfZGlyKTsKIAkJbGlzdF9kZWxfaW5pdCgmaG9sZGVyLT5saXN0KTsKIAkJa2ZyZWUoaG9sZGVyKTsKIAl9CkBAIC05MjIsMTQgKzkyOCwxNSBAQAogICogZmx1c2hfZGlzayAtIGludmFsaWRhdGVzIGFsbCBidWZmZXItY2FjaGUgZW50cmllcyBvbiBhIGRpc2sKICAqCiAgKiBAYmRldjogICAgICBzdHJ1Y3QgYmxvY2sgZGV2aWNlIHRvIGJlIGZsdXNoZWQKKyAqIEBraWxsX2RpcnR5OiBmbGFnIHRvIGd1aWRlIGhhbmRsaW5nIG9mIGRpcnR5IGlub2RlcwogICoKICAqIEludmFsaWRhdGVzIGFsbCBidWZmZXItY2FjaGUgZW50cmllcyBvbiBhIGRpc2suIEl0IHNob3VsZCBiZSBjYWxsZWQKICAqIHdoZW4gYSBkaXNrIGhhcyBiZWVuIGNoYW5nZWQgLS0gZWl0aGVyIGJ5IGEgbWVkaWEgY2hhbmdlIG9yIG9ubGluZQogICogcmVzaXplLgogICovCi1zdGF0aWMgdm9pZCBmbHVzaF9kaXNrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCitzdGF0aWMgdm9pZCBmbHVzaF9kaXNrKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJvb2wga2lsbF9kaXJ0eSkKIHsKLQlpZiAoX19pbnZhbGlkYXRlX2RldmljZShiZGV2KSkgeworCWlmIChfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYsIGtpbGxfZGlydHkpKSB7CiAJCWNoYXIgbmFtZVtCREVWTkFNRV9TSVpFXSA9ICIiOwogCiAJCWlmIChiZGV2LT5iZF9kaXNrKQpAQCAtOTY2LDcgKzk3Myw3IEBACiAJCSAgICAgICAiJXM6IGRldGVjdGVkIGNhcGFjaXR5IGNoYW5nZSBmcm9tICVsbGQgdG8gJWxsZFxuIiwKIAkJICAgICAgIG5hbWUsIGJkZXZfc2l6ZSwgZGlza19zaXplKTsKIAkJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLCBkaXNrX3NpemUpOwotCQlmbHVzaF9kaXNrKGJkZXYpOworCQlmbHVzaF9kaXNrKGJkZXYsIGZhbHNlKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGNoZWNrX2Rpc2tfc2l6ZV9jaGFuZ2UpOwpAQCAtMTAxOSw3ICsxMDI2LDcgQEAKIAlpZiAoIShldmVudHMgJiBESVNLX0VWRU5UX01FRElBX0NIQU5HRSkpCiAJCXJldHVybiAwOwogCi0JZmx1c2hfZGlzayhiZGV2KTsKKwlmbHVzaF9kaXNrKGJkZXYsIHRydWUpOwogCWlmIChiZG9wcy0+cmV2YWxpZGF0ZV9kaXNrKQogCQliZG9wcy0+cmV2YWxpZGF0ZV9kaXNrKGJkZXYtPmJkX2Rpc2spOwogCXJldHVybiAxOwpAQCAtMTIxNSwxMiArMTIyMiw2IEBACiAKIAlyZXMgPSBfX2Jsa2Rldl9nZXQoYmRldiwgbW9kZSwgMCk7CiAKLQkvKiBfX2Jsa2Rldl9nZXQoKSBtYXkgYWx0ZXIgcmVhZCBvbmx5IHN0YXR1cywgY2hlY2sgaXQgYWZ0ZXJ3YXJkcyAqLwotCWlmICghcmVzICYmIChtb2RlICYgRk1PREVfV1JJVEUpICYmIGJkZXZfcmVhZF9vbmx5KGJkZXYpKSB7Ci0JCV9fYmxrZGV2X3B1dChiZGV2LCBtb2RlLCAwKTsKLQkJcmVzID0gLUVBQ0NFUzsKLQl9Ci0KIAlpZiAod2hvbGUpIHsKIAkJLyogZmluaXNoIGNsYWltaW5nICovCiAJCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKQEAgLTEyOTgsNiArMTI5OSwxMSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAKKwlpZiAoKG1vZGUgJiBGTU9ERV9XUklURSkgJiYgYmRldl9yZWFkX29ubHkoYmRldikpIHsKKwkJYmxrZGV2X3B1dChiZGV2LCBtb2RlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVBQ0NFUyk7CisJfQorCiAJcmV0dXJuIGJkZXY7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa2Rldl9nZXRfYnlfcGF0aCk7CkBAIC0xNjAxLDcgKzE2MDcsNyBAQAogfQogRVhQT1JUX1NZTUJPTChsb29rdXBfYmRldik7CiAKLWludCBfX2ludmFsaWRhdGVfZGV2aWNlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCitpbnQgX19pbnZhbGlkYXRlX2RldmljZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBib29sIGtpbGxfZGlydHkpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGdldF9zdXBlcihiZGV2KTsKIAlpbnQgcmVzID0gMDsKQEAgLTE2MTQsNyArMTYyMCw3IEBACiAJCSAqIGhvbGQpLgogCQkgKi8KIAkJc2hyaW5rX2RjYWNoZV9zYihzYik7Ci0JCXJlcyA9IGludmFsaWRhdGVfaW5vZGVzKHNiKTsKKwkJcmVzID0gaW52YWxpZGF0ZV9pbm9kZXMoc2IsIGtpbGxfZGlydHkpOwogCQlkcm9wX3N1cGVyKHNiKTsKIAl9CiAJaW52YWxpZGF0ZV9iZGV2KGJkZXYpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYWNsLmMgYi9mcy9idHJmcy9hY2wuYwppbmRleCAxNWI1Y2EyLi45Yzk0OTM0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9hY2wuYworKysgYi9mcy9idHJmcy9hY2wuYwpAQCAtMzcsNiArMzcsOSBAQAogCWNoYXIgKnZhbHVlID0gTlVMTDsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAKKwlpZiAoIUlTX1BPU0lYQUNMKGlub2RlKSkKKwkJcmV0dXJuIE5VTEw7CisKIAlhY2wgPSBnZXRfY2FjaGVkX2FjbChpbm9kZSwgdHlwZSk7CiAJaWYgKGFjbCAhPSBBQ0xfTk9UX0NBQ0hFRCkKIAkJcmV0dXJuIGFjbDsKQEAgLTg0LDYgKzg3LDkgQEAKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoIUlTX1BPU0lYQUNMKGRlbnRyeS0+ZF9pbm9kZSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCWFjbCA9IGJ0cmZzX2dldF9hY2woZGVudHJ5LT5kX2lub2RlLCB0eXBlKTsKIAogCWlmIChJU19FUlIoYWNsKSkKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMgYi9mcy9idHJmcy9jb21wcmVzc2lvbi5jCmluZGV4IGY3NDUyODcuLjRkMjExMGUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMKKysrIGIvZnMvYnRyZnMvY29tcHJlc3Npb24uYwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJdTY0IGVtX2xlbjsKIAl1NjQgZW1fc3RhcnQ7CiAJc3RydWN0IGV4dGVudF9tYXAgKmVtOwotCWludCByZXQ7CisJaW50IHJldCA9IC1FTk9NRU07CiAJdTMyICpzdW1zOwogCiAJdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZTsKQEAgLTU3Nyw2ICs1NzcsOSBAQAogCiAJY29tcHJlc3NlZF9sZW4gPSBlbS0+YmxvY2tfbGVuOwogCWNiID0ga21hbGxvYyhjb21wcmVzc2VkX2Jpb19zaXplKHJvb3QsIGNvbXByZXNzZWRfbGVuKSwgR0ZQX05PRlMpOworCWlmICghY2IpCisJCWdvdG8gb3V0OworCiAJYXRvbWljX3NldCgmY2ItPnBlbmRpbmdfYmlvcywgMCk7CiAJY2ItPmVycm9ycyA9IDA7CiAJY2ItPmlub2RlID0gaW5vZGU7CkBAIC01OTcsMTMgKzYwMCwxOCBAQAogCiAJbnJfcGFnZXMgPSAoY29tcHJlc3NlZF9sZW4gKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSAvCiAJCQkJIFBBR0VfQ0FDSEVfU0laRTsKLQljYi0+Y29tcHJlc3NlZF9wYWdlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJfcGFnZXMsCisJY2ItPmNvbXByZXNzZWRfcGFnZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5yX3BhZ2VzLAogCQkJCSAgICAgICBHRlBfTk9GUyk7CisJaWYgKCFjYi0+Y29tcHJlc3NlZF9wYWdlcykKKwkJZ290byBmYWlsMTsKKwogCWJkZXYgPSBCVFJGU19JKGlub2RlKS0+cm9vdC0+ZnNfaW5mby0+ZnNfZGV2aWNlcy0+bGF0ZXN0X2JkZXY7CiAKIAlmb3IgKHBhZ2VfaW5kZXggPSAwOyBwYWdlX2luZGV4IDwgbnJfcGFnZXM7IHBhZ2VfaW5kZXgrKykgewogCQljYi0+Y29tcHJlc3NlZF9wYWdlc1twYWdlX2luZGV4XSA9IGFsbG9jX3BhZ2UoR0ZQX05PRlMgfAogCQkJCQkJCSAgICAgIF9fR0ZQX0hJR0hNRU0pOworCQlpZiAoIWNiLT5jb21wcmVzc2VkX3BhZ2VzW3BhZ2VfaW5kZXhdKQorCQkJZ290byBmYWlsMjsKIAl9CiAJY2ItPm5yX3BhZ2VzID0gbnJfcGFnZXM7CiAKQEAgLTYxNCw2ICs2MjIsOCBAQAogCWNiLT5sZW4gPSB1bmNvbXByZXNzZWRfbGVuOwogCiAJY29tcF9iaW8gPSBjb21wcmVzc2VkX2Jpb19hbGxvYyhiZGV2LCBjdXJfZGlza19ieXRlLCBHRlBfTk9GUyk7CisJaWYgKCFjb21wX2JpbykKKwkJZ290byBmYWlsMjsKIAljb21wX2Jpby0+YmlfcHJpdmF0ZSA9IGNiOwogCWNvbXBfYmlvLT5iaV9lbmRfaW8gPSBlbmRfY29tcHJlc3NlZF9iaW9fcmVhZDsKIAlhdG9taWNfaW5jKCZjYi0+cGVuZGluZ19iaW9zKTsKQEAgLTY4MSw2ICs2OTEsMTcgQEAKIAogCWJpb19wdXQoY29tcF9iaW8pOwogCXJldHVybiAwOworCitmYWlsMjoKKwlmb3IgKHBhZ2VfaW5kZXggPSAwOyBwYWdlX2luZGV4IDwgbnJfcGFnZXM7IHBhZ2VfaW5kZXgrKykKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiLT5jb21wcmVzc2VkX3BhZ2VzW3BhZ2VfaW5kZXhdKTsKKworCWtmcmVlKGNiLT5jb21wcmVzc2VkX3BhZ2VzKTsKK2ZhaWwxOgorCWtmcmVlKGNiKTsKK291dDoKKwlmcmVlX2V4dGVudF9tYXAoZW0pOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGNvbXBfaWRsZV93b3Jrc3BhY2VbQlRSRlNfQ09NUFJFU1NfVFlQRVNdOwpAQCAtOTAwLDcgKzkyMSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBfX2V4aXQgYnRyZnNfZXhpdF9jb21wcmVzcyh2b2lkKQordm9pZCBidHJmc19leGl0X2NvbXByZXNzKHZvaWQpCiB7CiAJZnJlZV93b3Jrc3BhY2VzKCk7CiB9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCAyYzk4YjNhLi42ZjgyMGZhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTEyNTQsNiArMTI1NCw3IEBACiAjZGVmaW5lIEJUUkZTX01PVU5UX1NQQUNFX0NBQ0hFCQkoMSA8PCAxMikKICNkZWZpbmUgQlRSRlNfTU9VTlRfQ0xFQVJfQ0FDSEUJCSgxIDw8IDEzKQogI2RlZmluZSBCVFJGU19NT1VOVF9VU0VSX1NVQlZPTF9STV9BTExPV0VEICgxIDw8IDE0KQorI2RlZmluZSBCVFJGU19NT1VOVF9FTk9TUENfREVCVUcJICgxIDw8IDE1KQogCiAjZGVmaW5lIGJ0cmZzX2NsZWFyX29wdChvLCBvcHQpCQkoKG8pICY9IH5CVFJGU19NT1VOVF8jI29wdCkKICNkZWZpbmUgYnRyZnNfc2V0X29wdChvLCBvcHQpCQkoKG8pIHw9IEJUUkZTX01PVU5UXyMjb3B0KQpAQCAtMjIxOCw2ICsyMjE5LDggQEAKIAkJCQkgICB1NjQgc3RhcnQsIHU2NCBlbmQpOwogaW50IGJ0cmZzX2Vycm9yX2Rpc2NhcmRfZXh0ZW50KHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZW5yLAogCQkJICAgICAgIHU2NCBudW1fYnl0ZXMpOworaW50IGJ0cmZzX2ZvcmNlX2NodW5rX2FsbG9jKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgdHlwZSk7CiAKIC8qIGN0cmVlLmMgKi8KIGludCBidHJmc19iaW5fc2VhcmNoKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYiwgc3RydWN0IGJ0cmZzX2tleSAqa2V5LApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IGI1MzFjMzYuLmUxYWE4ZDYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTM1OSwxMCArMzU5LDE0IEBACiAKIAl0cmVlID0gJkJUUkZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCktPmlvX3RyZWU7CiAKLQlpZiAocGFnZS0+cHJpdmF0ZSA9PSBFWFRFTlRfUEFHRV9QUklWQVRFKQorCWlmIChwYWdlLT5wcml2YXRlID09IEVYVEVOVF9QQUdFX1BSSVZBVEUpIHsKKwkJV0FSTl9PTigxKTsKIAkJZ290byBvdXQ7Ci0JaWYgKCFwYWdlLT5wcml2YXRlKQorCX0KKwlpZiAoIXBhZ2UtPnByaXZhdGUpIHsKKwkJV0FSTl9PTigxKTsKIAkJZ290byBvdXQ7CisJfQogCWxlbiA9IHBhZ2UtPnByaXZhdGUgPj4gMjsKIAlXQVJOX09OKGxlbiA9PSAwKTsKIApAQCAtMTU1MCw2ICsxNTU0LDcgQEAKIAkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKIAogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJaWYgKHRyYW5zaWQgPT0gdHJhbnMtPnRyYW5zaWQpIHsKIAkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJCQlCVUdfT04ocmV0KTsKQEAgLTI0NTMsMTAgKzI0NTgsMTQgQEAKIAl1cF93cml0ZSgmcm9vdC0+ZnNfaW5mby0+Y2xlYW51cF93b3JrX3NlbSk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJaWYgKElTX0VSUih0cmFucykpCisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCUJVR19PTihyZXQpOwogCS8qIHJ1biBjb21taXQgYWdhaW4gdG8gZHJvcCB0aGUgb3JpZ2luYWwgc25hcHNob3QgKi8KIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJaWYgKElTX0VSUih0cmFucykpCisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCXJldCA9IGJ0cmZzX3dyaXRlX2FuZF93YWl0X3RyYW5zYWN0aW9uKE5VTEwsIHJvb3QpOwogCUJVR19PTihyZXQpOwpAQCAtMjU1NCw2ICsyNTYzLDggQEAKIAlrZnJlZShmc19pbmZvLT5jaHVua19yb290KTsKIAlrZnJlZShmc19pbmZvLT5kZXZfcm9vdCk7CiAJa2ZyZWUoZnNfaW5mby0+Y3N1bV9yb290KTsKKwlrZnJlZShmc19pbmZvKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHBvcnQuYyBiL2ZzL2J0cmZzL2V4cG9ydC5jCmluZGV4IDk3ODY5NjMuLmZmMjdkN2EgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4cG9ydC5jCisrKyBiL2ZzL2J0cmZzL2V4cG9ydC5jCkBAIC0xNzEsNiArMTcxLDggQEAKIAlpbnQgcmV0OwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJaWYgKGRpci0+aV9pbm8gPT0gQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkgewogCQlrZXkub2JqZWN0aWQgPSByb290LT5yb290X2tleS5vYmplY3RpZDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCmluZGV4IGI1NTI2OTMuLjU4OGZmOTggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwpAQCAtMzIwLDExICszMjAsNiBAQAogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlleGNsdWRlX3N1cGVyX3N0cmlwZXMoZXh0ZW50X3Jvb3QsIGJsb2NrX2dyb3VwKTsKLQlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5sb2NrKTsKLQlibG9ja19ncm91cC0+c3BhY2VfaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKz0gYmxvY2tfZ3JvdXAtPmJ5dGVzX3N1cGVyOwotCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+c3BhY2VfaW5mby0+bG9jayk7Ci0KIAlsYXN0ID0gbWF4X3QodTY0LCBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkLCBCVFJGU19TVVBFUl9JTkZPX09GRlNFVCk7CiAKIAkvKgpAQCAtNDY3LDggKzQ2MiwxMCBAQAogCQkJY2FjaGUtPmNhY2hlZCA9IEJUUkZTX0NBQ0hFX05POwogCQl9CiAJCXNwaW5fdW5sb2NrKCZjYWNoZS0+bG9jayk7Ci0JCWlmIChyZXQgPT0gMSkKKwkJaWYgKHJldCA9PSAxKSB7CisJCQlmcmVlX2V4Y2x1ZGVkX2V4dGVudHMoZnNfaW5mby0+ZXh0ZW50X3Jvb3QsIGNhY2hlKTsKIAkJCXJldHVybiAwOworCQl9CiAJfQogCiAJaWYgKGxvYWRfY2FjaGVfb25seSkKQEAgLTMzNDQsOCArMzM0MSwxMCBAQAogCXU2NCByZXNlcnZlZDsKIAl1NjQgbWF4X3JlY2xhaW07CiAJdTY0IHJlY2xhaW1lZCA9IDA7CisJbG9uZyB0aW1lX2xlZnQ7CiAJaW50IHBhdXNlID0gMTsKIAlpbnQgbnJfcGFnZXMgPSAoMiAqIDEwMjQgKiAxMDI0KSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCWludCBsb29wcyA9IDA7CiAKIAlibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCXNwYWNlX2luZm8gPSBibG9ja19yc3YtPnNwYWNlX2luZm87CkBAIC0zMzU4LDcgKzMzNTcsNyBAQAogCiAJbWF4X3JlY2xhaW0gPSBtaW4ocmVzZXJ2ZWQsIHRvX3JlY2xhaW0pOwogCi0Jd2hpbGUgKDEpIHsKKwl3aGlsZSAobG9vcHMgPCAxMDI0KSB7CiAJCS8qIGhhdmUgdGhlIGZsdXNoZXIgdGhyZWFkcyBqdW1wIGluIGFuZCBkbyBzb21lIElPICovCiAJCXNtcF9tYigpOwogCQlucl9wYWdlcyA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLApAQCAtMzM2Niw4ICszMzY1LDEyIEBACiAJCXdyaXRlYmFja19pbm9kZXNfc2JfbnJfaWZfaWRsZShyb290LT5mc19pbmZvLT5zYiwgbnJfcGFnZXMpOwogCiAJCXNwaW5fbG9jaygmc3BhY2VfaW5mby0+bG9jayk7Ci0JCWlmIChyZXNlcnZlZCA+IHNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkKQorCQlpZiAocmVzZXJ2ZWQgPiBzcGFjZV9pbmZvLT5ieXRlc19yZXNlcnZlZCkgeworCQkJbG9vcHMgPSAwOwogCQkJcmVjbGFpbWVkICs9IHJlc2VydmVkIC0gc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQ7CisJCX0gZWxzZSB7CisJCQlsb29wcysrOworCQl9CiAJCXJlc2VydmVkID0gc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQ7CiAJCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKIApAQCAtMzM3OCw3ICszMzgxLDEyIEBACiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQocGF1c2UpOworCQl0aW1lX2xlZnQgPSBzY2hlZHVsZV90aW1lb3V0KHBhdXNlKTsKKworCQkvKiBXZSB3ZXJlIGludGVycnVwdGVkLCBleGl0ICovCisJCWlmICh0aW1lX2xlZnQpCisJCQlicmVhazsKKwogCQlwYXVzZSA8PD0gMTsKIAkJaWYgKHBhdXNlID4gSFogLyAxMCkKIAkJCXBhdXNlID0gSFogLyAxMDsKQEAgLTM1ODgsOCArMzU5NiwyMCBAQAogCiAJaWYgKG51bV9ieXRlcyA+IDApIHsKIAkJaWYgKGRlc3QpIHsKLQkJCWJsb2NrX3Jzdl9hZGRfYnl0ZXMoZGVzdCwgbnVtX2J5dGVzLCAwKTsKLQkJfSBlbHNlIHsKKwkJCXNwaW5fbG9jaygmZGVzdC0+bG9jayk7CisJCQlpZiAoIWRlc3QtPmZ1bGwpIHsKKwkJCQl1NjQgYnl0ZXNfdG9fYWRkOworCisJCQkJYnl0ZXNfdG9fYWRkID0gZGVzdC0+c2l6ZSAtIGRlc3QtPnJlc2VydmVkOworCQkJCWJ5dGVzX3RvX2FkZCA9IG1pbihudW1fYnl0ZXMsIGJ5dGVzX3RvX2FkZCk7CisJCQkJZGVzdC0+cmVzZXJ2ZWQgKz0gYnl0ZXNfdG9fYWRkOworCQkJCWlmIChkZXN0LT5yZXNlcnZlZCA+PSBkZXN0LT5zaXplKQorCQkJCQlkZXN0LT5mdWxsID0gMTsKKwkJCQludW1fYnl0ZXMgLT0gYnl0ZXNfdG9fYWRkOworCQkJfQorCQkJc3Bpbl91bmxvY2soJmRlc3QtPmxvY2spOworCQl9CisJCWlmIChudW1fYnl0ZXMpIHsKIAkJCXNwaW5fbG9jaygmc3BhY2VfaW5mby0+bG9jayk7CiAJCQlzcGFjZV9pbmZvLT5ieXRlc19yZXNlcnZlZCAtPSBudW1fYnl0ZXM7CiAJCQlzcGluX3VubG9jaygmc3BhY2VfaW5mby0+bG9jayk7CkBAIC00MDEyLDYgKzQwMzIsNyBAQAogCiAJbnVtX2J5dGVzID0gQUxJR04obnVtX2J5dGVzLCByb290LT5zZWN0b3JzaXplKTsKIAlhdG9taWNfZGVjKCZCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cyk7CisJV0FSTl9PTihhdG9taWNfcmVhZCgmQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMpIDwgMCk7CiAKIAlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOwogCW5yX2V4dGVudHMgPSBhdG9taWNfcmVhZCgmQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMpOwpAQCAtNTM1NSw3ICs1Mzc2LDcgQEAKIAkJCSAgICAgICBudW1fYnl0ZXMsIGRhdGEsIDEpOwogCQlnb3RvIGFnYWluOwogCX0KLQlpZiAocmV0ID09IC1FTk9TUEMpIHsKKwlpZiAocmV0ID09IC1FTk9TUEMgJiYgYnRyZnNfdGVzdF9vcHQocm9vdCwgRU5PU1BDX0RFQlVHKSkgewogCQlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc2luZm87CiAKIAkJc2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhyb290LT5mc19pbmZvLCBkYXRhKTsKQEAgLTU2MzMsNiArNTY1NCw3IEBACiAJICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHUzMiBibG9ja3NpemUpCiB7CiAJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqYmxvY2tfcnN2OworCXN0cnVjdCBidHJmc19ibG9ja19yc3YgKmdsb2JhbF9yc3YgPSAmcm9vdC0+ZnNfaW5mby0+Z2xvYmFsX2Jsb2NrX3JzdjsKIAlpbnQgcmV0OwogCiAJYmxvY2tfcnN2ID0gZ2V0X2Jsb2NrX3Jzdih0cmFucywgcm9vdCk7CkBAIC01NjQwLDE0ICs1NjYyLDM5IEBACiAJaWYgKGJsb2NrX3Jzdi0+c2l6ZSA9PSAwKSB7CiAJCXJldCA9IHJlc2VydmVfbWV0YWRhdGFfYnl0ZXModHJhbnMsIHJvb3QsIGJsb2NrX3JzdiwKIAkJCQkJICAgICBibG9ja3NpemUsIDApOwotCQlpZiAocmV0KQorCQkvKgorCQkgKiBJZiB3ZSBjb3VsZG4ndCByZXNlcnZlIG1ldGFkYXRhIGJ5dGVzIHRyeSBhbmQgdXNlIHNvbWUgZnJvbQorCQkgKiB0aGUgZ2xvYmFsIHJlc2VydmUuCisJCSAqLworCQlpZiAocmV0ICYmIGJsb2NrX3JzdiAhPSBnbG9iYWxfcnN2KSB7CisJCQlyZXQgPSBibG9ja19yc3ZfdXNlX2J5dGVzKGdsb2JhbF9yc3YsIGJsb2Nrc2l6ZSk7CisJCQlpZiAoIXJldCkKKwkJCQlyZXR1cm4gZ2xvYmFsX3JzdjsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJCX0gZWxzZSBpZiAocmV0KSB7CisJCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCQl9CiAJCXJldHVybiBibG9ja19yc3Y7CiAJfQogCiAJcmV0ID0gYmxvY2tfcnN2X3VzZV9ieXRlcyhibG9ja19yc3YsIGJsb2Nrc2l6ZSk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBibG9ja19yc3Y7CisJaWYgKHJldCkgeworCQlXQVJOX09OKDEpOworCQlyZXQgPSByZXNlcnZlX21ldGFkYXRhX2J5dGVzKHRyYW5zLCByb290LCBibG9ja19yc3YsIGJsb2Nrc2l6ZSwKKwkJCQkJICAgICAwKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXNwaW5fbG9jaygmYmxvY2tfcnN2LT5sb2NrKTsKKwkJCWJsb2NrX3Jzdi0+c2l6ZSArPSBibG9ja3NpemU7CisJCQlzcGluX3VubG9jaygmYmxvY2tfcnN2LT5sb2NrKTsKKwkJCXJldHVybiBibG9ja19yc3Y7CisJCX0gZWxzZSBpZiAocmV0ICYmIGJsb2NrX3JzdiAhPSBnbG9iYWxfcnN2KSB7CisJCQlyZXQgPSBibG9ja19yc3ZfdXNlX2J5dGVzKGdsb2JhbF9yc3YsIGJsb2Nrc2l6ZSk7CisJCQlpZiAoIXJldCkKKwkJCQlyZXR1cm4gZ2xvYmFsX3JzdjsKKwkJfQorCX0KIAogCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwogfQpAQCAtNjIyMSw2ICs2MjY4LDggQEAKIAlCVUdfT04oIXdjKTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24odHJlZV9yb290LCAwKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CisKIAlpZiAoYmxvY2tfcnN2KQogCQl0cmFucy0+YmxvY2tfcnN2ID0gYmxvY2tfcnN2OwogCkBAIC02MzE4LDYgKzYzNjcsNyBAQAogCiAJCQlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHRyZWVfcm9vdCk7CiAJCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHRyZWVfcm9vdCwgMCk7CisJCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCQlpZiAoYmxvY2tfcnN2KQogCQkJCXRyYW5zLT5ibG9ja19yc3YgPSBibG9ja19yc3Y7CiAJCX0KQEAgLTY0NDYsNiArNjQ5Niw4IEBACiAJaW50IHJldCA9IDA7CiAKIAlyYSA9IGt6YWxsb2Moc2l6ZW9mKCpyYSksIEdGUF9OT0ZTKTsKKwlpZiAoIXJhKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlmaXJzdF9pbmRleCA9IHN0YXJ0ID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CkBAIC02NTMxLDcgKzY1ODMsNyBAQAogCXU2NCBlbmQgPSBzdGFydCArIGV4dGVudF9rZXktPm9mZnNldCAtIDE7CiAKIAllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOwotCUJVR19PTighZW0gfHwgSVNfRVJSKGVtKSk7CisJQlVHX09OKCFlbSk7CiAKIAllbS0+c3RhcnQgPSBzdGFydDsKIAllbS0+bGVuID0gZXh0ZW50X2tleS0+b2Zmc2V0OwpAQCAtNzQ3Nyw3ICs3NTI5LDcgQEAKIAkJQlVHX09OKHJlbG9jX3Jvb3QtPmNvbW1pdF9yb290ICE9IE5VTEwpOwogCQl3aGlsZSAoMSkgewogCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCQkJQlVHX09OKCF0cmFucyk7CisJCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAkJCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPmRyb3BfbXV0ZXgpOwogCQkJcmV0ID0gYnRyZnNfZHJvcF9zbmFwc2hvdCh0cmFucywgcmVsb2Nfcm9vdCk7CkBAIC03NTM1LDcgKzc1ODcsNyBAQAogCiAJaWYgKGZvdW5kKSB7CiAJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCUJVR19PTighdHJhbnMpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJCUJVR19PTihyZXQpOwogCX0KQEAgLTc3NzksNyArNzgzMSw3IEBACiAKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24oZXh0ZW50X3Jvb3QsIDEpOwotCUJVR19PTighdHJhbnMpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCWlmIChleHRlbnRfa2V5LT5vYmplY3RpZCA9PSAwKSB7CiAJCXJldCA9IGRlbF9leHRlbnRfemVybyh0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgsIGV4dGVudF9rZXkpOwpAQCAtODAxMyw2ICs4MDY1LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IGJ0cmZzX2ZvcmNlX2NodW5rX2FsbG9jKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgdHlwZSkKK3sKKwl1NjQgYWxsb2NfZmxhZ3MgPSBnZXRfYWxsb2NfcHJvZmlsZShyb290LCB0eXBlKTsKKwlyZXR1cm4gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIDIgKiAxMDI0ICogMTAyNCwgYWxsb2NfZmxhZ3MsIDEpOworfQorCiAvKgogICogaGVscGVyIHRvIGFjY291bnQgdGhlIHVudXNlZCBzcGFjZSBvZiBhbGwgdGhlIHJlYWRvbmx5IGJsb2NrIGdyb3VwIGluIHRoZQogICogbGlzdC4gdGFrZXMgbWlycm9ycyBpbnRvIGFjY291bnQuCkBAIC04MjcwLDYgKzgzMjksMTMgQEAKIAkJaWYgKGJsb2NrX2dyb3VwLT5jYWNoZWQgPT0gQlRSRlNfQ0FDSEVfU1RBUlRFRCkKIAkJCXdhaXRfYmxvY2tfZ3JvdXBfY2FjaGVfZG9uZShibG9ja19ncm91cCk7CiAKKwkJLyoKKwkJICogV2UgaGF2ZW4ndCBjYWNoZWQgdGhpcyBibG9jayBncm91cCwgd2hpY2ggbWVhbnMgd2UgY291bGQKKwkJICogcG9zc2libHkgaGF2ZSBleGNsdWRlZCBleHRlbnRzIG9uIHRoaXMgYmxvY2sgZ3JvdXAuCisJCSAqLworCQlpZiAoYmxvY2tfZ3JvdXAtPmNhY2hlZCA9PSBCVFJGU19DQUNIRV9OTykKKwkJCWZyZWVfZXhjbHVkZWRfZXh0ZW50cyhpbmZvLT5leHRlbnRfcm9vdCwgYmxvY2tfZ3JvdXApOworCiAJCWJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlX2NhY2hlKGJsb2NrX2dyb3VwKTsKIAkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIApAQCAtODM4NSw2ICs4NDUxLDEzIEBACiAJCWNhY2hlLT5zZWN0b3JzaXplID0gcm9vdC0+c2VjdG9yc2l6ZTsKIAogCQkvKgorCQkgKiBXZSBuZWVkIHRvIGV4Y2x1ZGUgdGhlIHN1cGVyIHN0cmlwZXMgbm93IHNvIHRoYXQgdGhlIHNwYWNlCisJCSAqIGluZm8gaGFzIHN1cGVyIGJ5dGVzIGFjY291bnRlZCBmb3IsIG90aGVyd2lzZSB3ZSdsbCB0aGluaworCQkgKiB3ZSBoYXZlIG1vcmUgc3BhY2UgdGhhbiB3ZSBhY3R1YWxseSBkby4KKwkJICovCisJCWV4Y2x1ZGVfc3VwZXJfc3RyaXBlcyhyb290LCBjYWNoZSk7CisKKwkJLyoKIAkJICogY2hlY2sgZm9yIHR3byBjYXNlcywgZWl0aGVyIHdlIGFyZSBmdWxsLCBhbmQgdGhlcmVmb3JlCiAJCSAqIGRvbid0IG5lZWQgdG8gYm90aGVyIHdpdGggdGhlIGNhY2hpbmcgd29yayBzaW5jZSB3ZSB3b24ndAogCQkgKiBmaW5kIGFueSBzcGFjZSwgb3Igd2UgYXJlIGVtcHR5LCBhbmQgd2UgY2FuIGp1c3QgYWRkIGFsbApAQCAtODM5MiwxMiArODQ2NSwxMCBAQAogCQkgKiB0aW1lLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGZ1bGwgY2FzZS4KIAkJICovCiAJCWlmIChmb3VuZF9rZXkub2Zmc2V0ID09IGJ0cmZzX2Jsb2NrX2dyb3VwX3VzZWQoJmNhY2hlLT5pdGVtKSkgewotCQkJZXhjbHVkZV9zdXBlcl9zdHJpcGVzKHJvb3QsIGNhY2hlKTsKIAkJCWNhY2hlLT5sYXN0X2J5dGVfdG9fdW5waW4gPSAodTY0KS0xOwogCQkJY2FjaGUtPmNhY2hlZCA9IEJUUkZTX0NBQ0hFX0ZJTklTSEVEOwogCQkJZnJlZV9leGNsdWRlZF9leHRlbnRzKHJvb3QsIGNhY2hlKTsKIAkJfSBlbHNlIGlmIChidHJmc19ibG9ja19ncm91cF91c2VkKCZjYWNoZS0+aXRlbSkgPT0gMCkgewotCQkJZXhjbHVkZV9zdXBlcl9zdHJpcGVzKHJvb3QsIGNhY2hlKTsKIAkJCWNhY2hlLT5sYXN0X2J5dGVfdG9fdW5waW4gPSAodTY0KS0xOwogCQkJY2FjaGUtPmNhY2hlZCA9IEJUUkZTX0NBQ0hFX0ZJTklTSEVEOwogCQkJYWRkX25ld19mcmVlX3NwYWNlKGNhY2hlLCByb290LT5mc19pbmZvLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMgYi9mcy9idHJmcy9leHRlbnRfaW8uYwppbmRleCAyZTk5M2NmLi5mZDNmMTcyIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uYworKysgYi9mcy9idHJmcy9leHRlbnRfaW8uYwpAQCAtMTQzMywxMiArMTQzMywxMyBAQAogICovCiB1NjQgY291bnRfcmFuZ2VfYml0cyhzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCSAgICAgdTY0ICpzdGFydCwgdTY0IHNlYXJjaF9lbmQsIHU2NCBtYXhfYnl0ZXMsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBiaXRzKQorCQkgICAgIHVuc2lnbmVkIGxvbmcgYml0cywgaW50IGNvbnRpZykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZTsKIAl1NjQgY3VyX3N0YXJ0ID0gKnN0YXJ0OwogCXU2NCB0b3RhbF9ieXRlcyA9IDA7CisJdTY0IGxhc3QgPSAwOwogCWludCBmb3VuZCA9IDA7CiAKIAlpZiAoc2VhcmNoX2VuZCA8PSBjdXJfc3RhcnQpIHsKQEAgLTE0NjMsNyArMTQ2NCw5IEBACiAJCXN0YXRlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGV4dGVudF9zdGF0ZSwgcmJfbm9kZSk7CiAJCWlmIChzdGF0ZS0+c3RhcnQgPiBzZWFyY2hfZW5kKQogCQkJYnJlYWs7Ci0JCWlmIChzdGF0ZS0+ZW5kID49IGN1cl9zdGFydCAmJiAoc3RhdGUtPnN0YXRlICYgYml0cykpIHsKKwkJaWYgKGNvbnRpZyAmJiBmb3VuZCAmJiBzdGF0ZS0+c3RhcnQgPiBsYXN0ICsgMSkKKwkJCWJyZWFrOworCQlpZiAoc3RhdGUtPmVuZCA+PSBjdXJfc3RhcnQgJiYgKHN0YXRlLT5zdGF0ZSAmIGJpdHMpID09IGJpdHMpIHsKIAkJCXRvdGFsX2J5dGVzICs9IG1pbihzZWFyY2hfZW5kLCBzdGF0ZS0+ZW5kKSArIDEgLQogCQkJCSAgICAgICBtYXgoY3VyX3N0YXJ0LCBzdGF0ZS0+c3RhcnQpOwogCQkJaWYgKHRvdGFsX2J5dGVzID49IG1heF9ieXRlcykKQEAgLTE0NzIsNiArMTQ3NSw5IEBACiAJCQkJKnN0YXJ0ID0gc3RhdGUtPnN0YXJ0OwogCQkJCWZvdW5kID0gMTsKIAkJCX0KKwkJCWxhc3QgPSBzdGF0ZS0+ZW5kOworCQl9IGVsc2UgaWYgKGNvbnRpZyAmJiBmb3VuZCkgeworCQkJYnJlYWs7CiAJCX0KIAkJbm9kZSA9IHJiX25leHQobm9kZSk7CiAJCWlmICghbm9kZSkKQEAgLTE4NjUsNyArMTg3MSw3IEBACiAJYmlvX2dldChiaW8pOwogCiAJaWYgKHRyZWUtPm9wcyAmJiB0cmVlLT5vcHMtPnN1Ym1pdF9iaW9faG9vaykKLQkJdHJlZS0+b3BzLT5zdWJtaXRfYmlvX2hvb2socGFnZS0+bWFwcGluZy0+aG9zdCwgcncsIGJpbywKKwkJcmV0ID0gdHJlZS0+b3BzLT5zdWJtaXRfYmlvX2hvb2socGFnZS0+bWFwcGluZy0+aG9zdCwgcncsIGJpbywKIAkJCQkJICAgbWlycm9yX251bSwgYmlvX2ZsYWdzLCBzdGFydCk7CiAJZWxzZQogCQlzdWJtaXRfYmlvKHJ3LCBiaW8pOwpAQCAtMTkyMCw2ICsxOTI2LDggQEAKIAkJbnIgPSBiaW9fZ2V0X25yX3ZlY3MoYmRldik7CiAKIAliaW8gPSBidHJmc19iaW9fYWxsb2MoYmRldiwgc2VjdG9yLCBuciwgR0ZQX05PRlMgfCBfX0dGUF9ISUdIKTsKKwlpZiAoIWJpbykKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAliaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBwYWdlX3NpemUsIG9mZnNldCk7CiAJYmlvLT5iaV9lbmRfaW8gPSBlbmRfaW9fZnVuYzsKQEAgLTE5NDQsNiArMTk1Miw3IEBACiAKIHN0YXRpYyB2b2lkIHNldF9wYWdlX2V4dGVudF9oZWFkKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKKwlXQVJOX09OKCFQYWdlUHJpdmF0ZShwYWdlKSk7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBFWFRFTlRfUEFHRV9QUklWQVRFX0ZJUlNUX1BBR0UgfCBsZW4gPDwgMik7CiB9CiAKQEAgLTIxMjYsNyArMjEzNSw3IEBACiAJcmV0ID0gX19leHRlbnRfcmVhZF9mdWxsX3BhZ2UodHJlZSwgcGFnZSwgZ2V0X2V4dGVudCwgJmJpbywgMCwKIAkJCQkgICAgICAmYmlvX2ZsYWdzKTsKIAlpZiAoYmlvKQotCQlzdWJtaXRfb25lX2JpbyhSRUFELCBiaW8sIDAsIGJpb19mbGFncyk7CisJCXJldCA9IHN1Ym1pdF9vbmVfYmlvKFJFQUQsIGJpbywgMCwgYmlvX2ZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yODE5LDkgKzI4MjgsMTcgQEAKIAkJICogYXQgdGhpcyBwb2ludCB3ZSBjYW4gc2FmZWx5IGNsZWFyIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZQogCQkgKiBsb2NrZWQgYml0IGFuZCB0aGUgbm9kYXRhc3VtIGJpdAogCQkgKi8KLQkJY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBzdGFydCwgZW5kLAorCQlyZXQgPSBjbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsCiAJCQkJIH4oRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9OT0RBVEFTVU0pLAogCQkJCSAwLCAwLCBOVUxMLCBtYXNrKTsKKworCQkvKiBpZiBjbGVhcl9leHRlbnRfYml0IGZhaWxlZCBmb3IgZW5vbWVtIHJlYXNvbnMsCisJCSAqIHdlIGNhbid0IGFsbG93IHRoZSByZWxlYXNlIHRvIGNvbnRpbnVlLgorCQkgKi8KKwkJaWYgKHJldCA8IDApCisJCQlyZXQgPSAwOworCQllbHNlCisJCQlyZXQgPSAxOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMjkwMSw2ICsyOTE4LDQ2IEBACiAJcmV0dXJuIHNlY3RvcjsKIH0KIAorLyoKKyAqIGhlbHBlciBmdW5jdGlvbiBmb3IgZmllbWFwLCB3aGljaCBkb2Vzbid0IHdhbnQgdG8gc2VlIGFueSBob2xlcy4KKyAqIFRoaXMgbWFwcyB1bnRpbCB3ZSBmaW5kIHNvbWV0aGluZyBwYXN0ICdsYXN0JworICovCitzdGF0aWMgc3RydWN0IGV4dGVudF9tYXAgKmdldF9leHRlbnRfc2tpcF9ob2xlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkJdTY0IG9mZnNldCwKKwkJCQkJCXU2NCBsYXN0LAorCQkJCQkJZ2V0X2V4dGVudF90ICpnZXRfZXh0ZW50KQoreworCXU2NCBzZWN0b3JzaXplID0gQlRSRlNfSShpbm9kZSktPnJvb3QtPnNlY3RvcnNpemU7CisJc3RydWN0IGV4dGVudF9tYXAgKmVtOworCXU2NCBsZW47CisKKwlpZiAob2Zmc2V0ID49IGxhc3QpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUoMSkgeworCQlsZW4gPSBsYXN0IC0gb2Zmc2V0OworCQlpZiAobGVuID09IDApCisJCQlicmVhazsKKwkJbGVuID0gKGxlbiArIHNlY3RvcnNpemUgLSAxKSAmIH4oc2VjdG9yc2l6ZSAtIDEpOworCQllbSA9IGdldF9leHRlbnQoaW5vZGUsIE5VTEwsIDAsIG9mZnNldCwgbGVuLCAwKTsKKwkJaWYgKCFlbSB8fCBJU19FUlIoZW0pKQorCQkJcmV0dXJuIGVtOworCisJCS8qIGlmIHRoaXMgaXNuJ3QgYSBob2xlIHJldHVybiBpdCAqLworCQlpZiAoIXRlc3RfYml0KEVYVEVOVF9GTEFHX1ZBQ0FOQ1ksICZlbS0+ZmxhZ3MpICYmCisJCSAgICBlbS0+YmxvY2tfc3RhcnQgIT0gRVhURU5UX01BUF9IT0xFKSB7CisJCQlyZXR1cm4gZW07CisJCX0KKworCQkvKiB0aGlzIGlzIGEgaG9sZSwgYWR2YW5jZSB0byB0aGUgbmV4dCBleHRlbnQgKi8KKwkJb2Zmc2V0ID0gZXh0ZW50X21hcF9lbmQoZW0pOworCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQlpZiAob2Zmc2V0ID49IGxhc3QpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIGludCBleHRlbnRfZmllbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCiAJCV9fdTY0IHN0YXJ0LCBfX3U2NCBsZW4sIGdldF9leHRlbnRfdCAqZ2V0X2V4dGVudCkKIHsKQEAgLTI5MTAsMTYgKzI5NjcsMTkgQEAKIAl1MzIgZmxhZ3MgPSAwOwogCXUzMiBmb3VuZF90eXBlOwogCXU2NCBsYXN0OworCXU2NCBsYXN0X2Zvcl9nZXRfZXh0ZW50ID0gMDsKIAl1NjQgZGlza28gPSAwOworCXU2NCBpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAlzdHJ1Y3QgYnRyZnNfa2V5IGZvdW5kX2tleTsKIAlzdHJ1Y3QgZXh0ZW50X21hcCAqZW0gPSBOVUxMOwogCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZF9zdGF0ZSA9IE5VTEw7CiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CiAJc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0gKml0ZW07CiAJaW50IGVuZCA9IDA7Ci0JdTY0IGVtX3N0YXJ0ID0gMCwgZW1fbGVuID0gMDsKKwl1NjQgZW1fc3RhcnQgPSAwOworCXU2NCBlbV9sZW4gPSAwOworCXU2NCBlbV9lbmQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZW1mbGFnczsKLQlpbnQgaG9sZSA9IDA7CiAKIAlpZiAobGVuID09IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjkyOSw2ICsyOTg5LDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAorCS8qCisJICogbG9va3VwIHRoZSBsYXN0IGZpbGUgZXh0ZW50LiAgV2UncmUgbm90IHVzaW5nIGlfc2l6ZSBoZXJlCisJICogYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBwcmVhbGxvY2F0aW9uIHBhc3QgaV9zaXplCisJICovCiAJcmV0ID0gYnRyZnNfbG9va3VwX2ZpbGVfZXh0ZW50KE5VTEwsIEJUUkZTX0koaW5vZGUpLT5yb290LAogCQkJCSAgICAgICBwYXRoLCBpbm9kZS0+aV9pbm8sIC0xLCAwKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMjk0MiwxOCArMzAwNiwzOCBAQAogCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShwYXRoLT5ub2Rlc1swXSwgJmZvdW5kX2tleSwgcGF0aC0+c2xvdHNbMF0pOwogCWZvdW5kX3R5cGUgPSBidHJmc19rZXlfdHlwZSgmZm91bmRfa2V5KTsKIAotCS8qIE5vIGV4dGVudHMsIGp1c3QgcmV0dXJuICovCisJLyogTm8gZXh0ZW50cywgYnV0IHRoZXJlIG1pZ2h0IGJlIGRlbGFsbG9jIGJpdHMgKi8KIAlpZiAoZm91bmRfa2V5Lm9iamVjdGlkICE9IGlub2RlLT5pX2lubyB8fAogCSAgICBmb3VuZF90eXBlICE9IEJUUkZTX0VYVEVOVF9EQVRBX0tFWSkgewotCQlidHJmc19mcmVlX3BhdGgocGF0aCk7Ci0JCXJldHVybiAwOworCQkvKiBoYXZlIHRvIHRydXN0IGlfc2l6ZSBhcyB0aGUgZW5kICovCisJCWxhc3QgPSAodTY0KS0xOworCQlsYXN0X2Zvcl9nZXRfZXh0ZW50ID0gaXNpemU7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogcmVtZW1iZXIgdGhlIHN0YXJ0IG9mIHRoZSBsYXN0IGV4dGVudC4gIFRoZXJlIGFyZSBhCisJCSAqIGJ1bmNoIG9mIGRpZmZlcmVudCBmYWN0b3JzIHRoYXQgZ28gaW50byB0aGUgbGVuZ3RoIG9mIHRoZQorCQkgKiBleHRlbnQsIHNvIGl0cyBtdWNoIGxlc3MgY29tcGxleCB0byByZW1lbWJlciB3aGVyZSBpdCBzdGFydGVkCisJCSAqLworCQlsYXN0ID0gZm91bmRfa2V5Lm9mZnNldDsKKwkJbGFzdF9mb3JfZ2V0X2V4dGVudCA9IGxhc3QgKyAxOwogCX0KLQlsYXN0ID0gZm91bmRfa2V5Lm9mZnNldDsKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAKKwkvKgorCSAqIHdlIG1pZ2h0IGhhdmUgc29tZSBleHRlbnRzIGFsbG9jYXRlZCBidXQgbW9yZSBkZWxhbGxvYyBwYXN0IHRob3NlCisJICogZXh0ZW50cy4gIHNvLCB3ZSB0cnVzdCBpc2l6ZSB1bmxlc3MgdGhlIHN0YXJ0IG9mIHRoZSBsYXN0IGV4dGVudCBpcworCSAqIGJleW9uZCBpc2l6ZQorCSAqLworCWlmIChsYXN0IDwgaXNpemUpIHsKKwkJbGFzdCA9ICh1NjQpLTE7CisJCWxhc3RfZm9yX2dldF9leHRlbnQgPSBpc2l6ZTsKKwl9CisKIAlsb2NrX2V4dGVudF9iaXRzKCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwgc3RhcnQsIHN0YXJ0ICsgbGVuLCAwLAogCQkJICZjYWNoZWRfc3RhdGUsIEdGUF9OT0ZTKTsKLQllbSA9IGdldF9leHRlbnQoaW5vZGUsIE5VTEwsIDAsIG9mZiwgbWF4IC0gb2ZmLCAwKTsKKworCWVtID0gZ2V0X2V4dGVudF9za2lwX2hvbGVzKGlub2RlLCBvZmYsIGxhc3RfZm9yX2dldF9leHRlbnQsCisJCQkJICAgZ2V0X2V4dGVudCk7CiAJaWYgKCFlbSkKIAkJZ290byBvdXQ7CiAJaWYgKElTX0VSUihlbSkpIHsKQEAgLTI5NjIsMTkgKzMwNDYsMTQgQEAKIAl9CiAKIAl3aGlsZSAoIWVuZCkgewotCQlob2xlID0gMDsKLQkJb2ZmID0gZW0tPnN0YXJ0ICsgZW0tPmxlbjsKKwkJb2ZmID0gZXh0ZW50X21hcF9lbmQoZW0pOwogCQlpZiAob2ZmID49IG1heCkKIAkJCWVuZCA9IDE7CiAKLQkJaWYgKGVtLT5ibG9ja19zdGFydCA9PSBFWFRFTlRfTUFQX0hPTEUpIHsKLQkJCWhvbGUgPSAxOwotCQkJZ290byBuZXh0OwotCQl9Ci0KIAkJZW1fc3RhcnQgPSBlbS0+c3RhcnQ7CiAJCWVtX2xlbiA9IGVtLT5sZW47Ci0KKwkJZW1fZW5kID0gZXh0ZW50X21hcF9lbmQoZW0pOworCQllbWZsYWdzID0gZW0tPmZsYWdzOwogCQlkaXNrbyA9IDA7CiAJCWZsYWdzID0gMDsKIApAQCAtMjk5MywzNyArMzA3MiwyOSBAQAogCQlpZiAodGVzdF9iaXQoRVhURU5UX0ZMQUdfQ09NUFJFU1NFRCwgJmVtLT5mbGFncykpCiAJCQlmbGFncyB8PSBGSUVNQVBfRVhURU5UX0VOQ09ERUQ7CiAKLW5leHQ6Ci0JCWVtZmxhZ3MgPSBlbS0+ZmxhZ3M7CiAJCWZyZWVfZXh0ZW50X21hcChlbSk7CiAJCWVtID0gTlVMTDsKLQkJaWYgKCFlbmQpIHsKLQkJCWVtID0gZ2V0X2V4dGVudChpbm9kZSwgTlVMTCwgMCwgb2ZmLCBtYXggLSBvZmYsIDApOwotCQkJaWYgKCFlbSkKLQkJCQlnb3RvIG91dDsKLQkJCWlmIChJU19FUlIoZW0pKSB7Ci0JCQkJcmV0ID0gUFRSX0VSUihlbSk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQllbWZsYWdzID0gZW0tPmZsYWdzOwotCQl9Ci0KLQkJaWYgKHRlc3RfYml0KEVYVEVOVF9GTEFHX1ZBQ0FOQ1ksICZlbWZsYWdzKSkgeworCQlpZiAoKGVtX3N0YXJ0ID49IGxhc3QpIHx8IGVtX2xlbiA9PSAodTY0KS0xIHx8CisJCSAgIChsYXN0ID09ICh1NjQpLTEgJiYgaXNpemUgPD0gZW1fZW5kKSkgewogCQkJZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9MQVNUOwogCQkJZW5kID0gMTsKIAkJfQogCi0JCWlmIChlbV9zdGFydCA9PSBsYXN0KSB7CisJCS8qIG5vdyBzY2FuIGZvcndhcmQgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IHRoZSBsYXN0IGV4dGVudC4gKi8KKwkJZW0gPSBnZXRfZXh0ZW50X3NraXBfaG9sZXMoaW5vZGUsIG9mZiwgbGFzdF9mb3JfZ2V0X2V4dGVudCwKKwkJCQkJICAgZ2V0X2V4dGVudCk7CisJCWlmIChJU19FUlIoZW0pKSB7CisJCQlyZXQgPSBQVFJfRVJSKGVtKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICghZW0pIHsKIAkJCWZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfTEFTVDsKIAkJCWVuZCA9IDE7CiAJCX0KLQotCQlpZiAoIWhvbGUpIHsKLQkJCXJldCA9IGZpZW1hcF9maWxsX25leHRfZXh0ZW50KGZpZWluZm8sIGVtX3N0YXJ0LCBkaXNrbywKLQkJCQkJCWVtX2xlbiwgZmxhZ3MpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dF9mcmVlOwotCQl9CisJCXJldCA9IGZpZW1hcF9maWxsX25leHRfZXh0ZW50KGZpZWluZm8sIGVtX3N0YXJ0LCBkaXNrbywKKwkJCQkJICAgICAgZW1fbGVuLCBmbGFncyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9mcmVlOwogCX0KIG91dF9mcmVlOgogCWZyZWVfZXh0ZW50X21hcChlbSk7CkBAIC0zMTkyLDcgKzMyNjMsMTMgQEAKIAkJfQogCQlpZiAoIVBhZ2VVcHRvZGF0ZShwKSkKIAkJCXVwdG9kYXRlID0gMDsKLQkJdW5sb2NrX3BhZ2UocCk7CisKKwkJLyoKKwkJICogc2VlIGJlbG93IGFib3V0IGhvdyB3ZSBhdm9pZCBhIG5hc3R5IHJhY2Ugd2l0aCByZWxlYXNlIHBhZ2UKKwkJICogYW5kIHdoeSB3ZSB1bmxvY2sgbGF0ZXIKKwkJICovCisJCWlmIChpICE9IDApCisJCQl1bmxvY2tfcGFnZShwKTsKIAl9CiAJaWYgKHVwdG9kYXRlKQogCQlzZXRfYml0KEVYVEVOVF9CVUZGRVJfVVBUT0RBVEUsICZlYi0+YmZsYWdzKTsKQEAgLTMyMTYsOSArMzI5MywyNiBAQAogCWF0b21pY19pbmMoJmViLT5yZWZzKTsKIAlzcGluX3VubG9jaygmdHJlZS0+YnVmZmVyX2xvY2spOwogCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKworCS8qCisJICogdGhlcmUgaXMgYSByYWNlIHdoZXJlIHJlbGVhc2UgcGFnZSBtYXkgaGF2ZQorCSAqIHRyaWVkIHRvIGZpbmQgdGhpcyBleHRlbnQgYnVmZmVyIGluIHRoZSByYWRpeAorCSAqIGJ1dCBmYWlsZWQuICBJdCB3aWxsIHRlbGwgdGhlIFZNIGl0IGlzIHNhZmUgdG8KKwkgKiByZWNsYWltIHRoZSwgYW5kIGl0IHdpbGwgY2xlYXIgdGhlIHBhZ2UgcHJpdmF0ZSBiaXQuCisJICogV2UgbXVzdCBtYWtlIHN1cmUgdG8gc2V0IHRoZSBwYWdlIHByaXZhdGUgYml0IHByb3Blcmx5CisJICogYWZ0ZXIgdGhlIGV4dGVudCBidWZmZXIgaXMgaW4gdGhlIHJhZGl4IHRyZWUgc28KKwkgKiBpdCBkb2Vzbid0IGdldCBsb3N0CisJICovCisJc2V0X3BhZ2VfZXh0ZW50X21hcHBlZChlYi0+Zmlyc3RfcGFnZSk7CisJc2V0X3BhZ2VfZXh0ZW50X2hlYWQoZWItPmZpcnN0X3BhZ2UsIGViLT5sZW4pOworCWlmICghcGFnZTApCisJCXVubG9ja19wYWdlKGViLT5maXJzdF9wYWdlKTsKIAlyZXR1cm4gZWI7CiAKIGZyZWVfZWI6CisJaWYgKGViLT5maXJzdF9wYWdlICYmICFwYWdlMCkKKwkJdW5sb2NrX3BhZ2UoZWItPmZpcnN0X3BhZ2UpOworCiAJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZlYi0+cmVmcykpCiAJCXJldHVybiBleGlzdHM7CiAJYnRyZnNfcmVsZWFzZV9leHRlbnRfYnVmZmVyKGViKTsKQEAgLTMyNjksMTAgKzMzNjMsMTEgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWxvY2tfcGFnZShwYWdlKTsKKwkJV0FSTl9PTighUGFnZVByaXZhdGUocGFnZSkpOworCisJCXNldF9wYWdlX2V4dGVudF9tYXBwZWQocGFnZSk7CiAJCWlmIChpID09IDApCiAJCQlzZXRfcGFnZV9leHRlbnRfaGVhZChwYWdlLCBlYi0+bGVuKTsKLQkJZWxzZQotCQkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBFWFRFTlRfUEFHRV9QUklWQVRFKTsKIAogCQljbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlKTsKIAkJc3Bpbl9sb2NrX2lycSgmcGFnZS0+bWFwcGluZy0+dHJlZV9sb2NrKTsKQEAgLTM0NjIsNiArMzU1NywxMyBAQAogCiAJZm9yIChpID0gc3RhcnRfaTsgaSA8IG51bV9wYWdlczsgaSsrKSB7CiAJCXBhZ2UgPSBleHRlbnRfYnVmZmVyX3BhZ2UoZWIsIGkpOworCisJCVdBUk5fT04oIVBhZ2VQcml2YXRlKHBhZ2UpKTsKKworCQlzZXRfcGFnZV9leHRlbnRfbWFwcGVkKHBhZ2UpOworCQlpZiAoaSA9PSAwKQorCQkJc2V0X3BhZ2VfZXh0ZW50X2hlYWQocGFnZSwgZWItPmxlbik7CisKIAkJaWYgKGluY19hbGxfcGFnZXMpCiAJCQlwYWdlX2NhY2hlX2dldChwYWdlKTsKIAkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5oIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmgKaW5kZXggNzA4M2NmYS4uOTMxOGRmZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmgKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmgKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiB1NjQgY291bnRfcmFuZ2VfYml0cyhzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCSAgICAgdTY0ICpzdGFydCwgdTY0IHNlYXJjaF9lbmQsCi0JCSAgICAgdTY0IG1heF9ieXRlcywgdW5zaWduZWQgbG9uZyBiaXRzKTsKKwkJICAgICB1NjQgbWF4X2J5dGVzLCB1bnNpZ25lZCBsb25nIGJpdHMsIGludCBjb250aWcpOwogCiB2b2lkIGZyZWVfZXh0ZW50X3N0YXRlKHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlKTsKIGludCB0ZXN0X3JhbmdlX2JpdChzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsIHU2NCBzdGFydCwgdTY0IGVuZCwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9tYXAuYyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwppbmRleCBiMGUxZmNlLi4yYjZjMTJlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfbWFwLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X21hcC5jCkBAIC01MSw4ICs1MSw4IEBACiB7CiAJc3RydWN0IGV4dGVudF9tYXAgKmVtOwogCWVtID0ga21lbV9jYWNoZV9hbGxvYyhleHRlbnRfbWFwX2NhY2hlLCBtYXNrKTsKLQlpZiAoIWVtIHx8IElTX0VSUihlbSkpCi0JCXJldHVybiBlbTsKKwlpZiAoIWVtKQorCQlyZXR1cm4gTlVMTDsKIAllbS0+aW5fdHJlZSA9IDA7CiAJZW0tPmZsYWdzID0gMDsKIAllbS0+Y29tcHJlc3NfdHlwZSA9IEJUUkZTX0NPTVBSRVNTX05PTkU7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9maWxlLWl0ZW0uYyBiL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCmluZGV4IGE1NjJhMjUuLjRmMTlhM2UgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCisrKyBiL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCkBAIC01MzYsNiArNTM2LDggQEAKIAlyb290ID0gcm9vdC0+ZnNfaW5mby0+Y3N1bV9yb290OwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOwogCiAJd2hpbGUgKDEpIHsKIAkJa2V5Lm9iamVjdGlkID0gQlRSRlNfRVhURU5UX0NTVU1fT0JKRUNUSUQ7CkBAIC01NDgsNyArNTUwLDEwIEBACiAJCQlpZiAocGF0aC0+c2xvdHNbMF0gPT0gMCkKIAkJCQlnb3RvIG91dDsKIAkJCXBhdGgtPnNsb3RzWzBdLS07CisJCX0gZWxzZSBpZiAocmV0IDwgMCkgeworCQkJZ290byBvdXQ7CiAJCX0KKwogCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07CiAJCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShsZWFmLCAma2V5LCBwYXRoLT5zbG90c1swXSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUuYyBiL2ZzL2J0cmZzL2ZpbGUuYwppbmRleCBjODAwZDU4Li43MDg0MTQwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9maWxlLmMKKysrIGIvZnMvYnRyZnMvZmlsZS5jCkBAIC0xODYsNiArMTg2LDcgQEAKIAkJCXNwbGl0ID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CiAJCWlmICghc3BsaXQyKQogCQkJc3BsaXQyID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CisJCUJVR19PTighc3BsaXQgfHwgIXNwbGl0Mik7CiAKIAkJd3JpdGVfbG9jaygmZW1fdHJlZS0+bG9jayk7CiAJCWVtID0gbG9va3VwX2V4dGVudF9tYXBwaW5nKGVtX3RyZWUsIHN0YXJ0LCBsZW4pOwpAQCAtNzkzLDggKzc5NCwxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgewogCQlwYWdlc1tpXSA9IGdyYWJfY2FjaGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbmRleCArIGkpOwogCQlpZiAoIXBhZ2VzW2ldKSB7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJQlVHX09OKDEpOworCQkJaW50IGM7CisJCQlmb3IgKGMgPSBpIC0gMTsgYyA+PSAwOyBjLS0pIHsKKwkJCQl1bmxvY2tfcGFnZShwYWdlc1tjXSk7CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2VzW2NdKTsKKwkJCX0KKwkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZXNbaV0pOwogCX0KQEAgLTk0Niw2ICs5NTEsMTAgQEAKIAkJICAgICBQQUdFX0NBQ0hFX1NJWkUsIFBBR0VfQ0FDSEVfU0laRSAvCiAJCSAgICAgKHNpemVvZihzdHJ1Y3QgcGFnZSAqKSkpOwogCXBhZ2VzID0ga21hbGxvYyhucnB0cnMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICghcGFnZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQogCiAJLyogZ2VuZXJpY193cml0ZV9jaGVja3MgY2FuIGNoYW5nZSBvdXIgcG9zICovCiAJc3RhcnRfcG9zID0gcG9zOwpAQCAtOTg0LDggKzk5Myw4IEBACiAJCXNpemVfdCB3cml0ZV9ieXRlcyA9IG1pbihpb3ZfaXRlcl9jb3VudCgmaSksCiAJCQkJCSBucnB0cnMgKiAoc2l6ZV90KVBBR0VfQ0FDSEVfU0laRSAtCiAJCQkJCSBvZmZzZXQpOwotCQlzaXplX3QgbnVtX3BhZ2VzID0gKHdyaXRlX2J5dGVzICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4KLQkJCQkJUEFHRV9DQUNIRV9TSElGVDsKKwkJc2l6ZV90IG51bV9wYWdlcyA9ICh3cml0ZV9ieXRlcyArIG9mZnNldCArCisJCQkJICAgIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAKIAkJV0FSTl9PTihudW1fcGFnZXMgPiBucnB0cnMpOwogCQltZW1zZXQocGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIG5ycHRycyk7CkBAIC0xMDE1LDggKzEwMjQsOCBAQAogCiAJCWNvcGllZCA9IGJ0cmZzX2NvcHlfZnJvbV91c2VyKHBvcywgbnVtX3BhZ2VzLAogCQkJCQkgICB3cml0ZV9ieXRlcywgcGFnZXMsICZpKTsKLQkJZGlydHlfcGFnZXMgPSAoY29waWVkICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4KLQkJCQkJUEFHRV9DQUNIRV9TSElGVDsKKwkJZGlydHlfcGFnZXMgPSAoY29waWVkICsgb2Zmc2V0ICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4KKwkJCQlQQUdFX0NBQ0hFX1NISUZUOwogCiAJCWlmIChudW1fcGFnZXMgPiBkaXJ0eV9wYWdlcykgewogCQkJaWYgKGNvcGllZCA+IDApCmRpZmYgLS1naXQgYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKaW5kZXggNjBkNjg0Mi4uYTAzOTA2NSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCisrKyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwpAQCAtOTg3LDExICs5ODcsMTggQEAKIAlyZXR1cm4gZW50cnk7CiB9CiAKLXN0YXRpYyB2b2lkIHVubGlua19mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbykKK3N0YXRpYyBpbmxpbmUgdm9pZAorX191bmxpbmtfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkgICAgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm8pCiB7CiAJcmJfZXJhc2UoJmluZm8tPm9mZnNldF9pbmRleCwgJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCk7CiAJYmxvY2tfZ3JvdXAtPmZyZWVfZXh0ZW50cy0tOworfQorCitzdGF0aWMgdm9pZCB1bmxpbmtfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm8pCit7CisJX191bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7CiAJYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2UgLT0gaW5mby0+Ynl0ZXM7CiB9CiAKQEAgLTEwMTYsMTQgKzEwMjMsMTggQEAKIAl1NjQgbWF4X2J5dGVzOwogCXU2NCBiaXRtYXBfYnl0ZXM7CiAJdTY0IGV4dGVudF9ieXRlczsKKwl1NjQgc2l6ZSA9IGJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0OwogCiAJLyoKIAkgKiBUaGUgZ29hbCBpcyB0byBrZWVwIHRoZSB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IHVzZWQgcGVyIDFnYiBvZiBzcGFjZQogCSAqIGF0IG9yIGJlbG93IDMyaywgc28gd2UgbmVlZCB0byBhZGp1c3QgaG93IG11Y2ggbWVtb3J5IHdlIGFsbG93IHRvIGJlCiAJICogdXNlZCBieSBleHRlbnQgYmFzZWQgZnJlZSBzcGFjZSB0cmFja2luZwogCSAqLwotCW1heF9ieXRlcyA9IE1BWF9DQUNIRV9CWVRFU19QRVJfR0lHICoKLQkJKGRpdjY0X3U2NChibG9ja19ncm91cC0+a2V5Lm9mZnNldCwgMTAyNCAqIDEwMjQgKiAxMDI0KSk7CisJaWYgKHNpemUgPCAxMDI0ICogMTAyNCAqIDEwMjQpCisJCW1heF9ieXRlcyA9IE1BWF9DQUNIRV9CWVRFU19QRVJfR0lHOworCWVsc2UKKwkJbWF4X2J5dGVzID0gTUFYX0NBQ0hFX0JZVEVTX1BFUl9HSUcgKgorCQkJZGl2NjRfdTY0KHNpemUsIDEwMjQgKiAxMDI0ICogMTAyNCk7CiAKIAkvKgogCSAqIHdlIHdhbnQgdG8gYWNjb3VudCBmb3IgMSBtb3JlIGJpdG1hcCB0aGFuIHdoYXQgd2UgaGF2ZSBzbyB3ZSBjYW4gbWFrZQpAQCAtMTE3MSw2ICsxMTgyLDE2IEBACiAJcmVjYWxjdWxhdGVfdGhyZXNob2xkcyhibG9ja19ncm91cCk7CiB9CiAKK3N0YXRpYyB2b2lkIGZyZWVfYml0bWFwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYml0bWFwX2luZm8pCit7CisJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvKTsKKwlrZnJlZShiaXRtYXBfaW5mby0+Yml0bWFwKTsKKwlrZnJlZShiaXRtYXBfaW5mbyk7CisJYmxvY2tfZ3JvdXAtPnRvdGFsX2JpdG1hcHMtLTsKKwlyZWNhbGN1bGF0ZV90aHJlc2hvbGRzKGJsb2NrX2dyb3VwKTsKK30KKwogc3RhdGljIG5vaW5saW5lIGludCByZW1vdmVfZnJvbV9iaXRtYXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKIAkJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpiaXRtYXBfaW5mbywKIAkJCSAgICAgIHU2NCAqb2Zmc2V0LCB1NjQgKmJ5dGVzKQpAQCAtMTE5NSw2ICsxMjE2LDcgQEAKIAkgKi8KIAlzZWFyY2hfc3RhcnQgPSAqb2Zmc2V0OwogCXNlYXJjaF9ieXRlcyA9ICpieXRlczsKKwlzZWFyY2hfYnl0ZXMgPSBtaW4oc2VhcmNoX2J5dGVzLCBlbmQgLSBzZWFyY2hfc3RhcnQgKyAxKTsKIAlyZXQgPSBzZWFyY2hfYml0bWFwKGJsb2NrX2dyb3VwLCBiaXRtYXBfaW5mbywgJnNlYXJjaF9zdGFydCwKIAkJCSAgICAmc2VhcmNoX2J5dGVzKTsKIAlCVUdfT04ocmV0IDwgMCB8fCBzZWFyY2hfc3RhcnQgIT0gKm9mZnNldCk7CkBAIC0xMjExLDEzICsxMjMzLDggQEAKIAogCWlmICgqYnl0ZXMpIHsKIAkJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9uZXh0KCZiaXRtYXBfaW5mby0+b2Zmc2V0X2luZGV4KTsKLQkJaWYgKCFiaXRtYXBfaW5mby0+Ynl0ZXMpIHsKLQkJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBiaXRtYXBfaW5mbyk7Ci0JCQlrZnJlZShiaXRtYXBfaW5mby0+Yml0bWFwKTsKLQkJCWtmcmVlKGJpdG1hcF9pbmZvKTsKLQkJCWJsb2NrX2dyb3VwLT50b3RhbF9iaXRtYXBzLS07Ci0JCQlyZWNhbGN1bGF0ZV90aHJlc2hvbGRzKGJsb2NrX2dyb3VwKTsKLQkJfQorCQlpZiAoIWJpdG1hcF9pbmZvLT5ieXRlcykKKwkJCWZyZWVfYml0bWFwKGJsb2NrX2dyb3VwLCBiaXRtYXBfaW5mbyk7CiAKIAkJLyoKIAkJICogbm8gZW50cnkgYWZ0ZXIgdGhpcyBiaXRtYXAsIGJ1dCB3ZSBzdGlsbCBoYXZlIGJ5dGVzIHRvCkBAIC0xMjUwLDEzICsxMjY3LDggQEAKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCWdvdG8gYWdhaW47Ci0JfSBlbHNlIGlmICghYml0bWFwX2luZm8tPmJ5dGVzKSB7Ci0JCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBiaXRtYXBfaW5mbyk7Ci0JCWtmcmVlKGJpdG1hcF9pbmZvLT5iaXRtYXApOwotCQlrZnJlZShiaXRtYXBfaW5mbyk7Ci0JCWJsb2NrX2dyb3VwLT50b3RhbF9iaXRtYXBzLS07Ci0JCXJlY2FsY3VsYXRlX3RocmVzaG9sZHMoYmxvY2tfZ3JvdXApOwotCX0KKwl9IGVsc2UgaWYgKCFiaXRtYXBfaW5mby0+Ynl0ZXMpCisJCWZyZWVfYml0bWFwKGJsb2NrX2dyb3VwLCBiaXRtYXBfaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNTksMjIgKzEzNzEsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCSB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMpCitib29sIHRyeV9tZXJnZV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvLCBib29sIHVwZGF0ZV9zdGF0KQogewotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpyaWdodF9pbmZvID0gTlVMTDsKLQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqbGVmdF9pbmZvID0gTlVMTDsKLQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbyA9IE5VTEw7Ci0JaW50IHJldCA9IDA7Ci0KLQlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UpLCBHRlBfTk9GUyk7Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWluZm8tPm9mZnNldCA9IG9mZnNldDsKLQlpbmZvLT5ieXRlcyA9IGJ5dGVzOwotCi0Jc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqbGVmdF9pbmZvOworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpyaWdodF9pbmZvOworCWJvb2wgbWVyZ2VkID0gZmFsc2U7CisJdTY0IG9mZnNldCA9IGluZm8tPm9mZnNldDsKKwl1NjQgYnl0ZXMgPSBpbmZvLT5ieXRlczsKIAogCS8qCiAJICogZmlyc3Qgd2Ugd2FudCB0byBzZWUgaWYgdGhlcmUgaXMgZnJlZSBzcGFjZSBhZGphY2VudCB0byB0aGUgcmFuZ2Ugd2UKQEAgLTEzODgsMzcgKzEzOTIsNjIgQEAKIAllbHNlCiAJCWxlZnRfaW5mbyA9IHRyZWVfc2VhcmNoX29mZnNldChibG9ja19ncm91cCwgb2Zmc2V0IC0gMSwgMCwgMCk7CiAKLQkvKgotCSAqIElmIHRoZXJlIHdhcyBubyBleHRlbnQgZGlyZWN0bHkgdG8gdGhlIGxlZnQgb3IgcmlnaHQgb2YgdGhpcyBuZXcKLQkgKiBleHRlbnQgdGhlbiB3ZSBrbm93IHdlJ3JlIGdvaW5nIHRvIGhhdmUgdG8gYWxsb2NhdGUgYSBuZXcgZXh0ZW50LCBzbwotCSAqIGJlZm9yZSB3ZSBkbyB0aGF0IHNlZSBpZiB3ZSBuZWVkIHRvIGRyb3AgdGhpcyBpbnRvIGEgYml0bWFwCi0JICovCi0JaWYgKCghbGVmdF9pbmZvIHx8IGxlZnRfaW5mby0+Yml0bWFwKSAmJgotCSAgICAoIXJpZ2h0X2luZm8gfHwgcmlnaHRfaW5mby0+Yml0bWFwKSkgewotCQlyZXQgPSBpbnNlcnRfaW50b19iaXRtYXAoYmxvY2tfZ3JvdXAsIGluZm8pOwotCi0JCWlmIChyZXQgPCAwKSB7Ci0JCQlnb3RvIG91dDsKLQkJfSBlbHNlIGlmIChyZXQpIHsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQogCWlmIChyaWdodF9pbmZvICYmICFyaWdodF9pbmZvLT5iaXRtYXApIHsKLQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIHJpZ2h0X2luZm8pOworCQlpZiAodXBkYXRlX3N0YXQpCisJCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgcmlnaHRfaW5mbyk7CisJCWVsc2UKKwkJCV9fdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIHJpZ2h0X2luZm8pOwogCQlpbmZvLT5ieXRlcyArPSByaWdodF9pbmZvLT5ieXRlczsKIAkJa2ZyZWUocmlnaHRfaW5mbyk7CisJCW1lcmdlZCA9IHRydWU7CiAJfQogCiAJaWYgKGxlZnRfaW5mbyAmJiAhbGVmdF9pbmZvLT5iaXRtYXAgJiYKIAkgICAgbGVmdF9pbmZvLT5vZmZzZXQgKyBsZWZ0X2luZm8tPmJ5dGVzID09IG9mZnNldCkgewotCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgbGVmdF9pbmZvKTsKKwkJaWYgKHVwZGF0ZV9zdGF0KQorCQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGxlZnRfaW5mbyk7CisJCWVsc2UKKwkJCV9fdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGxlZnRfaW5mbyk7CiAJCWluZm8tPm9mZnNldCA9IGxlZnRfaW5mby0+b2Zmc2V0OwogCQlpbmZvLT5ieXRlcyArPSBsZWZ0X2luZm8tPmJ5dGVzOwogCQlrZnJlZShsZWZ0X2luZm8pOworCQltZXJnZWQgPSB0cnVlOwogCX0KIAorCXJldHVybiBtZXJnZWQ7Cit9CisKK2ludCBidHJmc19hZGRfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKK3sKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbzsKKwlpbnQgcmV0ID0gMDsKKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSksIEdGUF9OT0ZTKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJaW5mby0+b2Zmc2V0ID0gb2Zmc2V0OworCWluZm8tPmJ5dGVzID0gYnl0ZXM7CisKKwlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCisJaWYgKHRyeV9tZXJnZV9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvLCB0cnVlKSkKKwkJZ290byBsaW5rOworCisJLyoKKwkgKiBUaGVyZSB3YXMgbm8gZXh0ZW50IGRpcmVjdGx5IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IG9mIHRoaXMgbmV3CisJICogZXh0ZW50IHRoZW4gd2Uga25vdyB3ZSdyZSBnb2luZyB0byBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3IGV4dGVudCwgc28KKwkgKiBiZWZvcmUgd2UgZG8gdGhhdCBzZWUgaWYgd2UgbmVlZCB0byBkcm9wIHRoaXMgaW50byBhIGJpdG1hcAorCSAqLworCXJldCA9IGluc2VydF9pbnRvX2JpdG1hcChibG9ja19ncm91cCwgaW5mbyk7CisJaWYgKHJldCA8IDApIHsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChyZXQpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorbGluazoKIAlyZXQgPSBsaW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8pOwogCWlmIChyZXQpCiAJCWtmcmVlKGluZm8pOwpAQCAtMTYyMSw2ICsxNjUwLDcgQEAKIAkJbm9kZSA9IHJiX25leHQoJmVudHJ5LT5vZmZzZXRfaW5kZXgpOwogCQlyYl9lcmFzZSgmZW50cnktPm9mZnNldF9pbmRleCwgJmNsdXN0ZXItPnJvb3QpOwogCQlCVUdfT04oZW50cnktPmJpdG1hcCk7CisJCXRyeV9tZXJnZV9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBlbnRyeSwgZmFsc2UpOwogCQl0cmVlX2luc2VydF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwKIAkJCQkgICBlbnRyeS0+b2Zmc2V0LCAmZW50cnktPm9mZnNldF9pbmRleCwgMCk7CiAJfQpAQCAtMTY4NSwxMyArMTcxNSw4IEBACiAJcmV0ID0gb2Zmc2V0OwogCWlmIChlbnRyeS0+Yml0bWFwKSB7CiAJCWJpdG1hcF9jbGVhcl9iaXRzKGJsb2NrX2dyb3VwLCBlbnRyeSwgb2Zmc2V0LCBieXRlcyk7Ci0JCWlmICghZW50cnktPmJ5dGVzKSB7Ci0JCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgZW50cnkpOwotCQkJa2ZyZWUoZW50cnktPmJpdG1hcCk7Ci0JCQlrZnJlZShlbnRyeSk7Ci0JCQlibG9ja19ncm91cC0+dG90YWxfYml0bWFwcy0tOwotCQkJcmVjYWxjdWxhdGVfdGhyZXNob2xkcyhibG9ja19ncm91cCk7Ci0JCX0KKwkJaWYgKCFlbnRyeS0+Ynl0ZXMpCisJCQlmcmVlX2JpdG1hcChibG9ja19ncm91cCwgZW50cnkpOwogCX0gZWxzZSB7CiAJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBlbnRyeSk7CiAJCWVudHJ5LT5vZmZzZXQgKz0gYnl0ZXM7CkBAIC0xNzg5LDYgKzE4MTQsOCBAQAogCiAJcmV0ID0gc2VhcmNoX3N0YXJ0OwogCWJpdG1hcF9jbGVhcl9iaXRzKGJsb2NrX2dyb3VwLCBlbnRyeSwgcmV0LCBieXRlcyk7CisJaWYgKGVudHJ5LT5ieXRlcyA9PSAwKQorCQlmcmVlX2JpdG1hcChibG9ja19ncm91cCwgZW50cnkpOwogb3V0OgogCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKIAlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CkBAIC0xODQyLDE1ICsxODY5LDI2IEBACiAJCWVudHJ5LT5vZmZzZXQgKz0gYnl0ZXM7CiAJCWVudHJ5LT5ieXRlcyAtPSBieXRlczsKIAotCQlpZiAoZW50cnktPmJ5dGVzID09IDApIHsKKwkJaWYgKGVudHJ5LT5ieXRlcyA9PSAwKQogCQkJcmJfZXJhc2UoJmVudHJ5LT5vZmZzZXRfaW5kZXgsICZjbHVzdGVyLT5yb290KTsKLQkJCWtmcmVlKGVudHJ5KTsKLQkJfQogCQlicmVhazsKIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOwogCisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKworCWJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlIC09IGJ5dGVzOworCWlmIChlbnRyeS0+Ynl0ZXMgPT0gMCkgeworCQlibG9ja19ncm91cC0+ZnJlZV9leHRlbnRzLS07CisJCWtmcmVlKGVudHJ5KTsKKwl9CisKKwlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCAxNjBiNTViLi4wZWZkYjY1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTQxNiw3ICs0MTYsNyBAQAogCX0KIAlpZiAoc3RhcnQgPT0gMCkgewogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCUJVR19PTighdHJhbnMpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCQl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIApAQCAtNjEyLDYgKzYxMiw3IEBACiAJCQkgICAgR0ZQX05PRlMpOwogCiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQlyZXQgPSBidHJmc19yZXNlcnZlX2V4dGVudCh0cmFucywgcm9vdCwKIAkJCQkJICAgYXN5bmNfZXh0ZW50LT5jb21wcmVzc2VkX3NpemUsCiAJCQkJCSAgIGFzeW5jX2V4dGVudC0+Y29tcHJlc3NlZF9zaXplLApAQCAtNjQzLDYgKzY0NCw3IEBACiAJCQkJCWFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLCAwKTsKIAogCQllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOworCQlCVUdfT04oIWVtKTsKIAkJZW0tPnN0YXJ0ID0gYXN5bmNfZXh0ZW50LT5zdGFydDsKIAkJZW0tPmxlbiA9IGFzeW5jX2V4dGVudC0+cmFtX3NpemU7CiAJCWVtLT5vcmlnX3N0YXJ0ID0gZW0tPnN0YXJ0OwpAQCAtNzcxLDcgKzc3Myw3IEBACiAKIAlCVUdfT04ocm9vdCA9PSByb290LT5mc19pbmZvLT50cmVlX3Jvb3QpOwogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKLQlCVUdfT04oIXRyYW5zKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAKQEAgLTgxOSw2ICs4MjEsNyBAQAogCQlCVUdfT04ocmV0KTsKIAogCQllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOworCQlCVUdfT04oIWVtKTsKIAkJZW0tPnN0YXJ0ID0gc3RhcnQ7CiAJCWVtLT5vcmlnX3N0YXJ0ID0gZW0tPnN0YXJ0OwogCQlyYW1fc2l6ZSA9IGlucy5vZmZzZXQ7CkBAIC0xMDQ5LDcgKzEwNTIsNyBAQAogCX0gZWxzZSB7CiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKIAl9Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJY293X3N0YXJ0ID0gKHU2NCktMTsKIAljdXJfb2Zmc2V0ID0gc3RhcnQ7CkBAIC0xMTY4LDYgKzExNzEsNyBAQAogCQkJc3RydWN0IGV4dGVudF9tYXBfdHJlZSAqZW1fdHJlZTsKIAkJCWVtX3RyZWUgPSAmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlOwogCQkJZW0gPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKKwkJCUJVR19PTighZW0pOwogCQkJZW0tPnN0YXJ0ID0gY3VyX29mZnNldDsKIAkJCWVtLT5vcmlnX3N0YXJ0ID0gZW0tPnN0YXJ0OwogCQkJZW0tPmxlbiA9IG51bV9ieXRlczsKQEAgLTE1NTcsNiArMTU2MSw3IEBACiBvdXRfcGFnZToKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJa2ZyZWUoZml4dXApOwogfQogCiAvKgpAQCAtMTcwMyw3ICsxNzA4LDcgQEAKIAkJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHJvb3QsIDEpOwogCQkJZWxzZQogCQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKLQkJCUJVR19PTighdHJhbnMpOworCQkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCQl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAkJCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwpAQCAtMTcyMCw2ICsxNzI1LDcgQEAKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290LCAxKTsKIAllbHNlCiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAKQEAgLTE5MDcsNyArMTkxMyw3IEBACiAKIAlwcml2YXRlID0gMDsKIAlpZiAoY291bnRfcmFuZ2VfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX2ZhaWx1cmVfdHJlZSwgJnByaXZhdGUsCi0JCQkgICAgICh1NjQpLTEsIDEsIEVYVEVOVF9ESVJUWSkpIHsKKwkJCSAgICAgKHU2NCktMSwgMSwgRVhURU5UX0RJUlRZLCAwKSkgewogCQlyZXQgPSBnZXRfc3RhdGVfcHJpdmF0ZSgmQlRSRlNfSShpbm9kZSktPmlvX2ZhaWx1cmVfdHJlZSwKIAkJCQkJc3RhcnQsICZwcml2YXRlX2ZhaWx1cmUpOwogCQlpZiAocmV0ID09IDApIHsKQEAgLTIzNTQsNiArMjM2MCw3IEBACiAJCSAqLwogCQlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkgewogCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwkJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJCWJ0cmZzX29ycGhhbl9kZWwodHJhbnMsIGlub2RlKTsKIAkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJCQlpcHV0KGlub2RlKTsKQEAgLTIzODEsNiArMjM4OCw3IEBACiAKIAlpZiAocm9vdC0+b3JwaGFuX2Jsb2NrX3JzdiB8fCByb290LT5vcnBoYW5faXRlbV9pbnNlcnRlZCkgewogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAl9CiAKQEAgLTI2NDEsNyArMjY0OSw3IEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnI7CisJCWdvdG8gb3V0OwogCX0KIAogCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKQEAgLTI3MTQsOSArMjcyMiwxMCBAQAogCXN0cnVjdCBleHRlbnRfYnVmZmVyICplYjsKIAlpbnQgbGV2ZWw7CiAJdTY0IHJlZnMgPSAxOwotCWludCB1bmluaXRpYWxpemVkX3ZhcihyZXQpOwogCiAJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgQlRSRlNfTUFYX0xFVkVMOyBsZXZlbCsrKSB7CisJCWludCByZXQ7CisKIAkJaWYgKCFwYXRoLT5ub2Rlc1tsZXZlbF0pCiAJCQlicmVhazsKIAkJZWIgPSBwYXRoLT5ub2Rlc1tsZXZlbF07CkBAIC0yNzI3LDcgKzI3MzYsNyBAQAogCQlpZiAocmVmcyA+IDEpCiAJCQlyZXR1cm4gMTsKIAl9Ci0JcmV0dXJuIHJldDsgLyogWFhYIGNhbGxlcnM/ICovCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC00MTM0LDcgKzQxNDMsNyBAQAogCX0KIAlzcmN1X3JlYWRfdW5sb2NrKCZyb290LT5mc19pbmZvLT5zdWJ2b2xfc3JjdSwgaW5kZXgpOwogCi0JaWYgKHJvb3QgIT0gc3ViX3Jvb3QpIHsKKwlpZiAoIUlTX0VSUihpbm9kZSkgJiYgcm9vdCAhPSBzdWJfcm9vdCkgewogCQlkb3duX3JlYWQoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOwogCQlpZiAoIShpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkpCiAJCQlidHJmc19vcnBoYW5fY2xlYW51cChzdWJfcm9vdCk7CkBAIC00MzQ3LDYgKzQzNTYsOCBAQAogCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290LCAxKTsKIAkJZWxzZQogCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCWlmIChub2xvY2spCiAJCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb25fbm9sb2NrKHRyYW5zLCByb290KTsKQEAgLTQzNzIsNiArNDM4Myw3IEBACiAJCXJldHVybjsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAKIAlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKQEAgLTUxNzYsNiArNTE4OCw4IEBACiAJCQkJZW0gPSBOVUxMOwogCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKIAkJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCQkJaWYgKElTX0VSUih0cmFucykpCisJCQkJCXJldHVybiBFUlJfQ0FTVCh0cmFucyk7CiAJCQkJZ290byBhZ2FpbjsKIAkJCX0KIAkJCW1hcCA9IGttYXAocGFnZSk7CkBAIC01MjY2LDYgKzUyODAsMTI4IEBACiAJcmV0dXJuIGVtOwogfQogCitzdHJ1Y3QgZXh0ZW50X21hcCAqYnRyZnNfZ2V0X2V4dGVudF9maWVtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgIHNpemVfdCBwZ19vZmZzZXQsIHU2NCBzdGFydCwgdTY0IGxlbiwKKwkJCQkJICAgaW50IGNyZWF0ZSkKK3sKKwlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07CisJc3RydWN0IGV4dGVudF9tYXAgKmhvbGVfZW0gPSBOVUxMOworCXU2NCByYW5nZV9zdGFydCA9IHN0YXJ0OworCXU2NCBlbmQ7CisJdTY0IGZvdW5kOworCXU2NCBmb3VuZF9lbmQ7CisJaW50IGVyciA9IDA7CisKKwllbSA9IGJ0cmZzX2dldF9leHRlbnQoaW5vZGUsIHBhZ2UsIHBnX29mZnNldCwgc3RhcnQsIGxlbiwgY3JlYXRlKTsKKwlpZiAoSVNfRVJSKGVtKSkKKwkJcmV0dXJuIGVtOworCWlmIChlbSkgeworCQkvKgorCQkgKiBpZiBvdXIgZW0gbWFwcyB0byBhIGhvbGUsIHRoZXJlIG1pZ2h0CisJCSAqIGFjdHVhbGx5IGJlIGRlbGFsbG9jIGJ5dGVzIGJlaGluZCBpdAorCQkgKi8KKwkJaWYgKGVtLT5ibG9ja19zdGFydCAhPSBFWFRFTlRfTUFQX0hPTEUpCisJCQlyZXR1cm4gZW07CisJCWVsc2UKKwkJCWhvbGVfZW0gPSBlbTsKKwl9CisKKwkvKiBjaGVjayB0byBzZWUgaWYgd2UndmUgd3JhcHBlZCAobGVuID09IC0xIG9yIHNpbWlsYXIpICovCisJZW5kID0gc3RhcnQgKyBsZW47CisJaWYgKGVuZCA8IHN0YXJ0KQorCQllbmQgPSAodTY0KS0xOworCWVsc2UKKwkJZW5kIC09IDE7CisKKwllbSA9IE5VTEw7CisKKwkvKiBvaywgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcsIGxldHMgbG9vayBmb3IgZGVsYWxsb2MgKi8KKwlmb3VuZCA9IGNvdW50X3JhbmdlX2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCAmcmFuZ2Vfc3RhcnQsCisJCQkJIGVuZCwgbGVuLCBFWFRFTlRfREVMQUxMT0MsIDEpOworCWZvdW5kX2VuZCA9IHJhbmdlX3N0YXJ0ICsgZm91bmQ7CisJaWYgKGZvdW5kX2VuZCA8IHJhbmdlX3N0YXJ0KQorCQlmb3VuZF9lbmQgPSAodTY0KS0xOworCisJLyoKKwkgKiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZyB1c2VmdWwsIHJldHVybgorCSAqIHRoZSBvcmlnaW5hbCByZXN1bHRzIGZyb20gZ2V0X2V4dGVudCgpCisJICovCisJaWYgKHJhbmdlX3N0YXJ0ID4gZW5kIHx8IGZvdW5kX2VuZCA8PSBzdGFydCkgeworCQllbSA9IGhvbGVfZW07CisJCWhvbGVfZW0gPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBhZGp1c3QgdGhlIHJhbmdlX3N0YXJ0IHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0CisJICogZ28gYmFja3dhcmRzIGZyb20gdGhlIHN0YXJ0IHRoZXkgcGFzc2VkIGluCisJICovCisJcmFuZ2Vfc3RhcnQgPSBtYXgoc3RhcnQscmFuZ2Vfc3RhcnQpOworCWZvdW5kID0gZm91bmRfZW5kIC0gcmFuZ2Vfc3RhcnQ7CisKKwlpZiAoZm91bmQgPiAwKSB7CisJCXU2NCBob2xlX3N0YXJ0ID0gc3RhcnQ7CisJCXU2NCBob2xlX2xlbiA9IGxlbjsKKworCQllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOworCQlpZiAoIWVtKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJLyoKKwkJICogd2hlbiBidHJmc19nZXRfZXh0ZW50IGNhbid0IGZpbmQgYW55dGhpbmcgaXQKKwkJICogcmV0dXJucyBvbmUgaHVnZSBob2xlCisJCSAqCisJCSAqIG1ha2Ugc3VyZSB3aGF0IGl0IGZvdW5kIHJlYWxseSBmaXRzIG91ciByYW5nZSwgYW5kCisJCSAqIGFkanVzdCB0byBtYWtlIHN1cmUgaXQgaXMgYmFzZWQgb24gdGhlIHN0YXJ0IGZyb20KKwkJICogdGhlIGNhbGxlcgorCQkgKi8KKwkJaWYgKGhvbGVfZW0pIHsKKwkJCXU2NCBjYWxjX2VuZCA9IGV4dGVudF9tYXBfZW5kKGhvbGVfZW0pOworCisJCQlpZiAoY2FsY19lbmQgPD0gc3RhcnQgfHwgKGhvbGVfZW0tPnN0YXJ0ID4gZW5kKSkgeworCQkJCWZyZWVfZXh0ZW50X21hcChob2xlX2VtKTsKKwkJCQlob2xlX2VtID0gTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkJaG9sZV9zdGFydCA9IG1heChob2xlX2VtLT5zdGFydCwgc3RhcnQpOworCQkJCWhvbGVfbGVuID0gY2FsY19lbmQgLSBob2xlX3N0YXJ0OworCQkJfQorCQl9CisJCWVtLT5iZGV2ID0gTlVMTDsKKwkJaWYgKGhvbGVfZW0gJiYgcmFuZ2Vfc3RhcnQgPiBob2xlX3N0YXJ0KSB7CisJCQkvKiBvdXIgaG9sZSBzdGFydHMgYmVmb3JlIG91ciBkZWxhbGxvYywgc28gd2UKKwkJCSAqIGhhdmUgdG8gcmV0dXJuIGp1c3QgdGhlIHBhcnRzIG9mIHRoZSBob2xlCisJCQkgKiB0aGF0IGdvIHVudGlsICB0aGUgZGVsYWxsb2Mgc3RhcnRzCisJCQkgKi8KKwkJCWVtLT5sZW4gPSBtaW4oaG9sZV9sZW4sCisJCQkJICAgICAgcmFuZ2Vfc3RhcnQgLSBob2xlX3N0YXJ0KTsKKwkJCWVtLT5zdGFydCA9IGhvbGVfc3RhcnQ7CisJCQllbS0+b3JpZ19zdGFydCA9IGhvbGVfc3RhcnQ7CisJCQkvKgorCQkJICogZG9uJ3QgYWRqdXN0IGJsb2NrIHN0YXJ0IGF0IGFsbCwKKwkJCSAqIGl0IGlzIGZpeGVkIGF0IEVYVEVOVF9NQVBfSE9MRQorCQkJICovCisJCQllbS0+YmxvY2tfc3RhcnQgPSBob2xlX2VtLT5ibG9ja19zdGFydDsKKwkJCWVtLT5ibG9ja19sZW4gPSBob2xlX2xlbjsKKwkJfSBlbHNlIHsKKwkJCWVtLT5zdGFydCA9IHJhbmdlX3N0YXJ0OworCQkJZW0tPmxlbiA9IGZvdW5kOworCQkJZW0tPm9yaWdfc3RhcnQgPSByYW5nZV9zdGFydDsKKwkJCWVtLT5ibG9ja19zdGFydCA9IEVYVEVOVF9NQVBfREVMQUxMT0M7CisJCQllbS0+YmxvY2tfbGVuID0gZm91bmQ7CisJCX0KKwl9IGVsc2UgaWYgKGhvbGVfZW0pIHsKKwkJcmV0dXJuIGhvbGVfZW07CisJfQorb3V0OgorCisJZnJlZV9leHRlbnRfbWFwKGhvbGVfZW0pOworCWlmIChlcnIpIHsKKwkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisJcmV0dXJuIGVtOworfQorCiBzdGF0aWMgc3RydWN0IGV4dGVudF9tYXAgKmJ0cmZzX25ld19leHRlbnRfZGlyZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCQkgIHU2NCBzdGFydCwgdTY0IGxlbikKIHsKQEAgLTUyODAsOCArNTQxNiw4IEBACiAJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBzdGFydCArIGxlbiAtIDEsIDApOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOwotCWlmICghdHJhbnMpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWlmIChJU19FUlIodHJhbnMpKQorCQlyZXR1cm4gRVJSX0NBU1QodHJhbnMpOwogCiAJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAKQEAgLTU1MDUsNyArNTY0MSw3IEBACiAJCSAqIHdoaWxlIHdlIGxvb2sgZm9yIG5vY293IGNyb3NzIHJlZnMKIAkJICovCiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKLQkJaWYgKCF0cmFucykKKwkJaWYgKElTX0VSUih0cmFucykpCiAJCQlnb3RvIG11c3RfY293OwogCiAJCWlmIChjYW5fbm9jb3dfb2RpcmVjdCh0cmFucywgaW5vZGUsIHN0YXJ0LCBsZW4pID09IDEpIHsKQEAgLTU2NDAsNyArNTc3Niw3IEBACiAJQlVHX09OKCFvcmRlcmVkKTsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKLQlpZiAoIXRyYW5zKSB7CisJaWYgKElTX0VSUih0cmFucykpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNjA4OCw3ICs2MjI0LDcgQEAKIHN0YXRpYyBpbnQgYnRyZnNfZmllbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCiAJCV9fdTY0IHN0YXJ0LCBfX3U2NCBsZW4pCiB7Ci0JcmV0dXJuIGV4dGVudF9maWVtYXAoaW5vZGUsIGZpZWluZm8sIHN0YXJ0LCBsZW4sIGJ0cmZzX2dldF9leHRlbnQpOworCXJldHVybiBleHRlbnRfZmllbWFwKGlub2RlLCBmaWVpbmZvLCBzdGFydCwgbGVuLCBidHJmc19nZXRfZXh0ZW50X2ZpZW1hcCk7CiB9CiAKIGludCBidHJmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCmRpZmYgLS1naXQgYS9mcy9idHJmcy9pb2N0bC5jIGIvZnMvYnRyZnMvaW9jdGwuYwppbmRleCBhNTA2YTIyLi41ZmRiMmFiIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pb2N0bC5jCisrKyBiL2ZzL2J0cmZzL2lvY3RsLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJQlVHX09OKHJldCk7CkBAIC05MDcsNiArOTA3LDEwIEBACiAKIAlpZiAobmV3X3NpemUgPiBvbGRfc2l6ZSkgewogCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCQlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQkJcmV0ID0gUFRSX0VSUih0cmFucyk7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KIAkJcmV0ID0gYnRyZnNfZ3Jvd19kZXZpY2UodHJhbnMsIGRldmljZSwgbmV3X3NpemUpOwogCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0gZWxzZSB7CkBAIC0xMDY3LDEyICsxMDcxLDE1IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZmbGFncywgYXJnLCBzaXplb2YoZmxhZ3MpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoZmxhZ3MgJiB+QlRSRlNfU1VCVk9MX0NSRUFURV9BU1lOQykKKwlpZiAoZmxhZ3MgJiBCVFJGU19TVUJWT0xfQ1JFQVRFX0FTWU5DKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmbGFncyAmIH5CVFJGU19TVUJWT0xfUkRPTkxZKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKKwlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJCXJldHVybiAtRUFDQ0VTOworCiAJZG93bl93cml0ZSgmcm9vdC0+ZnNfaW5mby0+c3Vidm9sX3NlbSk7CiAKIAkvKiBub3RoaW5nIHRvIGRvICovCkBAIC0xMDkzLDcgKzExMDAsNyBAQAogCQlnb3RvIG91dF9yZXNldDsKIAl9CiAKLQlyZXQgPSBidHJmc191cGRhdGVfcm9vdCh0cmFucywgcm9vdCwKKwlyZXQgPSBidHJmc191cGRhdGVfcm9vdCh0cmFucywgcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LAogCQkJCSZyb290LT5yb290X2tleSwgJnJvb3QtPnJvb3RfaXRlbSk7CiAKIAlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwpAQCAtMTg5OCw3ICsxOTA1LDEwIEBACiAKIAkJCW1lbWNweSgmbmV3X2tleSwgJmtleSwgc2l6ZW9mKG5ld19rZXkpKTsKIAkJCW5ld19rZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87Ci0JCQluZXdfa2V5Lm9mZnNldCA9IGtleS5vZmZzZXQgKyBkZXN0b2ZmIC0gb2ZmOworCQkJaWYgKG9mZiA8PSBrZXkub2Zmc2V0KQorCQkJCW5ld19rZXkub2Zmc2V0ID0ga2V5Lm9mZnNldCArIGRlc3RvZmYgLSBvZmY7CisJCQllbHNlCisJCQkJbmV3X2tleS5vZmZzZXQgPSBkZXN0b2ZmOwogCiAJCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCQkJaWYgKElTX0VSUih0cmFucykpIHsKQEAgLTIwODIsNyArMjA5Miw3IEBACiAKIAlyZXQgPSAtRU5PTUVNOwogCXRyYW5zID0gYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24ocm9vdCwgMCk7Ci0JaWYgKCF0cmFucykKKwlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJZ290byBvdXRfZHJvcDsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHRyYW5zOwpAQCAtMjEzOCw5ICsyMTQ4LDkgQEAKIAlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCWlmICghdHJhbnMpIHsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgewogCQlidHJmc19mcmVlX3BhdGgocGF0aCk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJfQogCiAJZGlyX2lkID0gYnRyZnNfc3VwZXJfcm9vdF9kaXIoJnJvb3QtPmZzX2luZm8tPnN1cGVyX2NvcHkpOwpAQCAtMjIwMSw3ICsyMjExLDcgQEAKIAlpbnQgbnVtX3R5cGVzID0gNDsKIAlpbnQgYWxsb2Nfc2l6ZTsKIAlpbnQgcmV0ID0gMDsKLQlpbnQgc2xvdF9jb3VudCA9IDA7CisJdTY0IHNsb3RfY291bnQgPSAwOwogCWludCBpLCBjOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZzcGFjZV9hcmdzLApAQCAtMjI0MCw3ICsyMjUwLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2xvdF9jb3VudCA9IG1pbl90KGludCwgc3BhY2VfYXJncy5zcGFjZV9zbG90cywgc2xvdF9jb3VudCk7CisJc2xvdF9jb3VudCA9IG1pbl90KHU2NCwgc3BhY2VfYXJncy5zcGFjZV9zbG90cywgc2xvdF9jb3VudCk7CiAKIAlhbGxvY19zaXplID0gc2l6ZW9mKCpkZXN0KSAqIHNsb3RfY291bnQ7CiAKQEAgLTIyNjAsNiArMjI3MCw5IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV90eXBlczsgaSsrKSB7CiAJCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICp0bXA7CiAKKwkJaWYgKCFzbG90X2NvdW50KQorCQkJYnJlYWs7CisKIAkJaW5mbyA9IE5VTEw7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCAmcm9vdC0+ZnNfaW5mby0+c3BhY2VfaW5mbywKQEAgLTIyODEsNyArMjI5NCwxMCBAQAogCQkJCW1lbWNweShkZXN0LCAmc3BhY2UsIHNpemVvZihzcGFjZSkpOwogCQkJCWRlc3QrKzsKIAkJCQlzcGFjZV9hcmdzLnRvdGFsX3NwYWNlcysrOworCQkJCXNsb3RfY291bnQtLTsKIAkJCX0KKwkJCWlmICghc2xvdF9jb3VudCkKKwkJCQlicmVhazsKIAkJfQogCQl1cF9yZWFkKCZpbmZvLT5ncm91cHNfc2VtKTsKIAl9CkBAIC0yMzM0LDYgKzIzNTAsOCBAQAogCXU2NCB0cmFuc2lkOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCXRyYW5zaWQgPSB0cmFucy0+dHJhbnNpZDsKIAlidHJmc19jb21taXRfdHJhbnNhY3Rpb25fYXN5bmModHJhbnMsIHJvb3QsIDApOwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9sem8uYyBiL2ZzL2J0cmZzL2x6by5jCmluZGV4IGNjOWI0NTAuLmExNzhmNWUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2x6by5jCisrKyBiL2ZzL2J0cmZzL2x6by5jCkBAIC0yODAsNiArMjgwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHRvdF9vdXQ7CiAJdW5zaWduZWQgbG9uZyB0b3RfbGVuOwogCWNoYXIgKmJ1ZjsKKwlib29sIG1heV9sYXRlX3VubWFwLCBuZWVkX3VubWFwOwogCiAJZGF0YV9pbiA9IGttYXAocGFnZXNfaW5bMF0pOwogCXRvdF9sZW4gPSByZWFkX2NvbXByZXNzX2xlbmd0aChkYXRhX2luKTsKQEAgLTMwMCwxMSArMzAxLDEzIEBACiAKIAkJdG90X2luICs9IGluX2xlbjsKIAkJd29ya2luZ19ieXRlcyA9IGluX2xlbjsKKwkJbWF5X2xhdGVfdW5tYXAgPSBuZWVkX3VubWFwID0gZmFsc2U7CiAKIAkJLyogZmFzdCBwYXRoOiBhdm9pZCB1c2luZyB0aGUgd29ya2luZyBidWZmZXIgKi8KIAkJaWYgKGluX3BhZ2VfYnl0ZXNfbGVmdCA+PSBpbl9sZW4pIHsKIAkJCWJ1ZiA9IGRhdGFfaW4gKyBpbl9vZmZzZXQ7CiAJCQlieXRlcyA9IGluX2xlbjsKKwkJCW1heV9sYXRlX3VubWFwID0gdHJ1ZTsKIAkJCWdvdG8gY29udDsKIAkJfQogCkBAIC0zMjksMTQgKzMzMiwxNyBAQAogCQkJCWlmICh3b3JraW5nX2J5dGVzID09IDAgJiYgdG90X2luID49IHRvdF9sZW4pCiAJCQkJCWJyZWFrOwogCi0JCQkJa3VubWFwKHBhZ2VzX2luW3BhZ2VfaW5faW5kZXhdKTsKLQkJCQlwYWdlX2luX2luZGV4Kys7Ci0JCQkJaWYgKHBhZ2VfaW5faW5kZXggPj0gdG90YWxfcGFnZXNfaW4pIHsKKwkJCQlpZiAocGFnZV9pbl9pbmRleCArIDEgPj0gdG90YWxfcGFnZXNfaW4pIHsKIAkJCQkJcmV0ID0gLTE7Ci0JCQkJCWRhdGFfaW4gPSBOVUxMOwogCQkJCQlnb3RvIGRvbmU7CiAJCQkJfQotCQkJCWRhdGFfaW4gPSBrbWFwKHBhZ2VzX2luW3BhZ2VfaW5faW5kZXhdKTsKKworCQkJCWlmIChtYXlfbGF0ZV91bm1hcCkKKwkJCQkJbmVlZF91bm1hcCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlrdW5tYXAocGFnZXNfaW5bcGFnZV9pbl9pbmRleF0pOworCisJCQkJZGF0YV9pbiA9IGttYXAocGFnZXNfaW5bKytwYWdlX2luX2luZGV4XSk7CiAKIAkJCQlpbl9wYWdlX2J5dGVzX2xlZnQgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCQkJaW5fb2Zmc2V0ID0gMDsKQEAgLTM0Niw2ICszNTIsOCBAQAogCQlvdXRfbGVuID0gbHpvMXhfd29yc3RfY29tcHJlc3MoUEFHRV9DQUNIRV9TSVpFKTsKIAkJcmV0ID0gbHpvMXhfZGVjb21wcmVzc19zYWZlKGJ1ZiwgaW5fbGVuLCB3b3Jrc3BhY2UtPmJ1ZiwKIAkJCQkJICAgICZvdXRfbGVuKTsKKwkJaWYgKG5lZWRfdW5tYXApCisJCQlrdW5tYXAocGFnZXNfaW5bcGFnZV9pbl9pbmRleCAtIDFdKTsKIAkJaWYgKHJldCAhPSBMWk9fRV9PSykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnRyZnMgZGVjb21wcmVzcyBmYWlsZWRcbiIpOwogCQkJcmV0ID0gLTE7CkBAIC0zNjMsOCArMzcxLDcgQEAKIAkJCWJyZWFrOwogCX0KIGRvbmU6Ci0JaWYgKGRhdGFfaW4pCi0JCWt1bm1hcChwYWdlc19pbltwYWdlX2luX2luZGV4XSk7CisJa3VubWFwKHBhZ2VzX2luW3BhZ2VfaW5faW5kZXhdKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCmluZGV4IDJiNjFlMWQuLjA4M2E1NTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAkJCQkJICB1NjQgZmlsZV9vZmZzZXQpCiB7CiAJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmdHJlZS0+dHJlZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcHJldjsKKwlzdHJ1Y3QgcmJfbm9kZSAqcHJldiA9IE5VTEw7CiAJc3RydWN0IHJiX25vZGUgKnJldDsKIAlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKmVudHJ5OwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9wcmludC10cmVlLmMgYi9mcy9idHJmcy9wcmludC10cmVlLmMKaW5kZXggMGQxMjZiZS4uZmIyNjA1ZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcHJpbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL3ByaW50LXRyZWUuYwpAQCAtMjYwLDYgKzI2MCw3IEBACiAjZWxzZQogCQkJQlVHKCk7CiAjZW5kaWYKKwkJCWJyZWFrOwogCQljYXNlIEJUUkZTX0JMT0NLX0dST1VQX0lURU1fS0VZOgogCQkJYmkgPSBidHJmc19pdGVtX3B0cihsLCBpLAogCQkJCQkgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2l0ZW0pOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCmluZGV4IDA0NWM5YzIuLjMxYWRlNTggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYworKysgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKQEAgLTExNTcsNiArMTE1Nyw3IEBACiAJbmV3X25vZGUtPmJ5dGVuciA9IGRlc3QtPm5vZGUtPnN0YXJ0OwogCW5ld19ub2RlLT5sZXZlbCA9IG5vZGUtPmxldmVsOwogCW5ld19ub2RlLT5sb3dlc3QgPSBub2RlLT5sb3dlc3Q7CisJbmV3X25vZGUtPmNoZWNrZWQgPSAxOwogCW5ld19ub2RlLT5yb290ID0gZGVzdDsKIAogCWlmICghbm9kZS0+bG93ZXN0KSB7CkBAIC0yMDI4LDYgKzIwMjksNyBAQAogCiAJd2hpbGUgKDEpIHsKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQl0cmFucy0+YmxvY2tfcnN2ID0gcmMtPmJsb2NrX3JzdjsKIAogCQlyZXQgPSBidHJmc19ibG9ja19yc3ZfY2hlY2sodHJhbnMsIHJvb3QsIHJjLT5ibG9ja19yc3YsCkBAIC0yMTQ3LDYgKzIxNDksMTIgQEAKIAl9CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQlpZiAoIWVycikKKwkJCWJ0cmZzX2Jsb2NrX3Jzdl9yZWxlYXNlKHJjLT5leHRlbnRfcm9vdCwKKwkJCQkJCXJjLT5ibG9ja19yc3YsIG51bV9ieXRlcyk7CisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKKwl9CiAKIAlpZiAoIWVycikgewogCQlpZiAobnVtX2J5dGVzICE9IHJjLT5tZXJnaW5nX3Jzdl9zaXplKSB7CkBAIC0zMjIyLDYgKzMyMzAsNyBAQAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkgewogCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJCXJldCA9IFBUUl9FUlIodHJhbnMpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTM2MjgsNiArMzYzNyw3IEBACiAJc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM2NDQsNiArMzY1NCw3IEBACiAJdTMyIGl0ZW1fc2l6ZTsKIAlpbnQgcmV0OwogCWludCBlcnIgPSAwOworCWludCBwcm9ncmVzcyA9IDA7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCWlmICghcGF0aCkKQEAgLTM2NTYsOCArMzY2NywxMCBAQAogCX0KIAogCXdoaWxlICgxKSB7CisJCXByb2dyZXNzKys7CiAJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAwKTsKLQorCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CityZXN0YXJ0OgogCQlpZiAodXBkYXRlX2JhY2tyZWZfY2FjaGUodHJhbnMsICZyYy0+YmFja3JlZl9jYWNoZSkpIHsKIAkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKIAkJCWNvbnRpbnVlOwpAQCAtMzc3MCw2ICszNzgzLDE1IEBACiAJCQl9CiAJCX0KIAl9CisJaWYgKHRyYW5zICYmIHByb2dyZXNzICYmIGVyciA9PSAtRU5PU1BDKSB7CisJCXJldCA9IGJ0cmZzX2ZvcmNlX2NodW5rX2FsbG9jKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QsCisJCQkJCSAgICAgIHJjLT5ibG9ja19ncm91cC0+ZmxhZ3MpOworCQlpZiAocmV0ID09IDApIHsKKwkJCWVyciA9IDA7CisJCQlwcm9ncmVzcyA9IDA7CisJCQlnb3RvIHJlc3RhcnQ7CisJCX0KKwl9CiAKIAlidHJmc19yZWxlYXNlX3BhdGgocmMtPmV4dGVudF9yb290LCBwYXRoKTsKIAljbGVhcl9leHRlbnRfYml0cygmcmMtPnByb2Nlc3NlZF9ibG9ja3MsIDAsICh1NjQpLTEsIEVYVEVOVF9ESVJUWSwKQEAgLTM4MDQsNyArMzgyNiwxMCBAQAogCiAJLyogZ2V0IHJpZCBvZiBwaW5uZWQgZXh0ZW50cyAqLwogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOwotCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJZXJyID0gUFRSX0VSUih0cmFucyk7CisJZWxzZQorCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJjLT5leHRlbnRfcm9vdCk7CiBvdXRfZnJlZToKIAlidHJmc19mcmVlX2Jsb2NrX3JzdihyYy0+ZXh0ZW50X3Jvb3QsIHJjLT5ibG9ja19yc3YpOwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTQwMjIsNiArNDA0Nyw3IEBACiAJaW50IHJldDsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LCAwKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAltZW1zZXQoJnJvb3QtPnJvb3RfaXRlbS5kcm9wX3Byb2dyZXNzLCAwLAogCQlzaXplb2Yocm9vdC0+cm9vdF9pdGVtLmRyb3BfcHJvZ3Jlc3MpKTsKQEAgLTQxMjUsNiArNDE1MSwxMSBAQAogCXNldF9yZWxvY19jb250cm9sKHJjKTsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCXVuc2V0X3JlbG9jX2NvbnRyb2wocmMpOworCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CiAKIAlyYy0+bWVyZ2VfcmVsb2NfdHJlZSA9IDE7CiAKQEAgLTQxNTQsOSArNDE4NSwxMyBAQAogCXVuc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7Ci0JYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOwotb3V0OgorCWlmIChJU19FUlIodHJhbnMpKQorCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwllbHNlCisJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKK291dF9mcmVlOgogCWtmcmVlKHJjKTsKK291dDoKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlbG9jX3Jvb3RzKSkgewogCQlyZWxvY19yb290ID0gbGlzdF9lbnRyeShyZWxvY19yb290cy5uZXh0LAogCQkJCQlzdHJ1Y3QgYnRyZnNfcm9vdCwgcm9vdF9saXN0KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IGIyMTMwYzQuLmQzOWE5ODkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtMTU1LDcgKzE1NSw4IEBACiAJT3B0X25vc3NkLCBPcHRfc3NkX3NwcmVhZCwgT3B0X3RocmVhZF9wb29sLCBPcHRfbm9hY2wsIE9wdF9jb21wcmVzcywKIAlPcHRfY29tcHJlc3NfdHlwZSwgT3B0X2NvbXByZXNzX2ZvcmNlLCBPcHRfY29tcHJlc3NfZm9yY2VfdHlwZSwKIAlPcHRfbm90cmVlbG9nLCBPcHRfcmF0aW8sIE9wdF9mbHVzaG9uY29tbWl0LCBPcHRfZGlzY2FyZCwKLQlPcHRfc3BhY2VfY2FjaGUsIE9wdF9jbGVhcl9jYWNoZSwgT3B0X3VzZXJfc3Vidm9sX3JtX2FsbG93ZWQsIE9wdF9lcnIsCisJT3B0X3NwYWNlX2NhY2hlLCBPcHRfY2xlYXJfY2FjaGUsIE9wdF91c2VyX3N1YnZvbF9ybV9hbGxvd2VkLAorCU9wdF9lbm9zcGNfZGVidWcsIE9wdF9lcnIsCiB9OwogCiBzdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CkBAIC0xODQsNiArMTg1LDcgQEAKIAl7T3B0X3NwYWNlX2NhY2hlLCAic3BhY2VfY2FjaGUifSwKIAl7T3B0X2NsZWFyX2NhY2hlLCAiY2xlYXJfY2FjaGUifSwKIAl7T3B0X3VzZXJfc3Vidm9sX3JtX2FsbG93ZWQsICJ1c2VyX3N1YnZvbF9ybV9hbGxvd2VkIn0sCisJe09wdF9lbm9zcGNfZGVidWcsICJlbm9zcGNfZGVidWcifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC0zNTgsNiArMzYwLDkgQEAKIAkJY2FzZSBPcHRfdXNlcl9zdWJ2b2xfcm1fYWxsb3dlZDoKIAkJCWJ0cmZzX3NldF9vcHQoaW5mby0+bW91bnRfb3B0LCBVU0VSX1NVQlZPTF9STV9BTExPV0VEKTsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9lbm9zcGNfZGVidWc6CisJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgRU5PU1BDX0RFQlVHKTsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9lcnI6CiAJCQlwcmludGsoS0VSTl9JTkZPICJidHJmczogdW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiAiCiAJCQkgICAgICAgIiclcydcbiIsIHApOwpAQCAtMzgzLDcgKzM4OCw3IEBACiAJCXN0cnVjdCBidHJmc19mc19kZXZpY2VzICoqZnNfZGV2aWNlcykKIHsKIAlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107Ci0JY2hhciAqb3B0cywgKnA7CisJY2hhciAqb3B0cywgKm9yaWcsICpwOwogCWludCBlcnJvciA9IDA7CiAJaW50IGludGFyZzsKIApAQCAtMzk3LDYgKzQwMiw3IEBACiAJb3B0cyA9IGtzdHJkdXAob3B0aW9ucywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFvcHRzKQogCQlyZXR1cm4gLUVOT01FTTsKKwlvcmlnID0gb3B0czsKIAogCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0cywgIiwiKSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBAIC00MzIsNyArNDM4LDcgQEAKIAl9CiAKICBvdXRfZnJlZV9vcHRzOgotCWtmcmVlKG9wdHMpOworCWtmcmVlKG9yaWcpOwogIG91dDoKIAkvKgogCSAqIElmIG5vIHN1YnZvbHVtZSBuYW1lIGlzIHNwZWNpZmllZCB3ZSB1c2UgdGhlIGRlZmF1bHQgb25lLiAgQWxsb2NhdGUKQEAgLTYyMyw2ICs2MjksOCBAQAogCWJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHJvb3QsIDAsIDApOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTc2MSw2ICs3NjksOCBAQAogCQl9CiAKIAkJYnRyZnNfY2xvc2VfZGV2aWNlcyhmc19kZXZpY2VzKTsKKwkJa2ZyZWUoZnNfaW5mbyk7CisJCWtmcmVlKHRyZWVfcm9vdCk7CiAJfSBlbHNlIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCBiYWU1YzdiLi4zZDczYzhkIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTExNjEsNiArMTE2MSwxMSBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZhYy0+d29yaywgZG9fYXN5bmNfY29tbWl0KTsKIAlhYy0+cm9vdCA9IHJvb3Q7CiAJYWMtPm5ld3RyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKGFjLT5uZXd0cmFucykpIHsKKwkJaW50IGVyciA9IFBUUl9FUlIoYWMtPm5ld3RyYW5zKTsKKwkJa2ZyZWUoYWMpOworCQlyZXR1cm4gZXJyOworCX0KIAogCS8qIHRha2UgdHJhbnNhY3Rpb24gcmVmZXJlbmNlICovCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuYyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKaW5kZXggMDU0NzQ0YS4uYTRiYmI4NSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuYworKysgYi9mcy9idHJmcy90cmVlLWxvZy5jCkBAIC0zMzgsNiArMzM4LDEyIEBACiAJCX0KIAkJZHN0X2NvcHkgPSBrbWFsbG9jKGl0ZW1fc2l6ZSwgR0ZQX05PRlMpOwogCQlzcmNfY29weSA9IGttYWxsb2MoaXRlbV9zaXplLCBHRlBfTk9GUyk7CisJCWlmICghZHN0X2NvcHkgfHwgIXNyY19jb3B5KSB7CisJCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CisJCQlrZnJlZShkc3RfY29weSk7CisJCQlrZnJlZShzcmNfY29weSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCiAJCXJlYWRfZXh0ZW50X2J1ZmZlcihlYiwgc3JjX2NvcHksIHNyY19wdHIsIGl0ZW1fc2l6ZSk7CiAKQEAgLTY2NSw2ICs2NzEsOSBAQAogCWJ0cmZzX2Rpcl9pdGVtX2tleV90b19jcHUobGVhZiwgZGksICZsb2NhdGlvbik7CiAJbmFtZV9sZW4gPSBidHJmc19kaXJfbmFtZV9sZW4obGVhZiwgZGkpOwogCW5hbWUgPSBrbWFsbG9jKG5hbWVfbGVuLCBHRlBfTk9GUyk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJlYWRfZXh0ZW50X2J1ZmZlcihsZWFmLCBuYW1lLCAodW5zaWduZWQgbG9uZykoZGkgKyAxKSwgbmFtZV9sZW4pOwogCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKIApAQCAtNzQ0LDYgKzc1Myw5IEBACiAJaW50IG1hdGNoID0gMDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIGxvZywga2V5LCBwYXRoLCAwLCAwKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gb3V0OwpAQCAtOTY3LDYgKzk3OSw4IEBACiAJa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LCBwYXRoLCAwLCAwKTsKQEAgLTExNzgsNiArMTE5Miw5IEBACiAKIAluYW1lX2xlbiA9IGJ0cmZzX2Rpcl9uYW1lX2xlbihlYiwgZGkpOwogCW5hbWUgPSBrbWFsbG9jKG5hbWVfbGVuLCBHRlBfTk9GUyk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWxvZ190eXBlID0gYnRyZnNfZGlyX3R5cGUoZWIsIGRpKTsKIAlyZWFkX2V4dGVudF9idWZmZXIoZWIsIG5hbWUsICh1bnNpZ25lZCBsb25nKShkaSArIDEpLAogCQkgICBuYW1lX2xlbik7CkBAIC0xNjkyLDYgKzE3MDksOCBAQAogCQlyb290X293bmVyID0gYnRyZnNfaGVhZGVyX293bmVyKHBhcmVudCk7CiAKIAkJbmV4dCA9IGJ0cmZzX2ZpbmRfY3JlYXRlX3RyZWVfYmxvY2socm9vdCwgYnl0ZW5yLCBibG9ja3NpemUpOworCQlpZiAoIW5leHQpCisJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlpZiAoKmxldmVsID09IDEpIHsKIAkJCXdjLT5wcm9jZXNzX2Z1bmMocm9vdCwgbmV4dCwgd2MsIHB0cl9nZW4pOwpAQCAtMjAzMiw2ICsyMDUxLDcgQEAKIAkJd2FpdF9sb2dfY29tbWl0KHRyYW5zLCBsb2dfcm9vdF90cmVlLAogCQkJCWxvZ19yb290X3RyZWUtPmxvZ190cmFuc2lkKTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2dfcm9vdF90cmVlLT5sb2dfbXV0ZXgpOworCQlyZXQgPSAwOwogCQlnb3RvIG91dDsKIAl9CiAJYXRvbWljX3NldCgmbG9nX3Jvb3RfdHJlZS0+bG9nX2NvbW1pdFtpbmRleDJdLCAxKTsKQEAgLTIwOTYsNyArMjExNiw3IEBACiAJc21wX21iKCk7CiAJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnJvb3QtPmxvZ19jb21taXRfd2FpdFtpbmRleDFdKSkKIAkJd2FrZV91cCgmcm9vdC0+bG9nX2NvbW1pdF93YWl0W2luZGV4MV0pOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfbG9nX3RyZWUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCkBAIC0yMTk0LDYgKzIyMTQsOSBAQAogCiAJbG9nID0gcm9vdC0+bG9nX3Jvb3Q7CiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOworCiAJZGkgPSBidHJmc19sb29rdXBfZGlyX2l0ZW0odHJhbnMsIGxvZywgcGF0aCwgZGlyLT5pX2lubywKIAkJCQkgICBuYW1lLCBuYW1lX2xlbiwgLTEpOwogCWlmIChJU19FUlIoZGkpKSB7CkBAIC0yNTk0LDYgKzI2MTcsOSBAQAogCiAJaW5zX2RhdGEgPSBrbWFsbG9jKG5yICogc2l6ZW9mKHN0cnVjdCBidHJmc19rZXkpICsKIAkJCSAgIG5yICogc2l6ZW9mKHUzMiksIEdGUF9OT0ZTKTsKKwlpZiAoIWluc19kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWluc19zaXplcyA9ICh1MzIgKilpbnNfZGF0YTsKIAlpbnNfa2V5cyA9IChzdHJ1Y3QgYnRyZnNfa2V5ICopKGluc19kYXRhICsgbnIgKiBzaXplb2YodTMyKSk7CiAKQEAgLTI3MjUsNyArMjc1MSwxMyBAQAogCWxvZyA9IHJvb3QtPmxvZ19yb290OwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOwogCWRzdF9wYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghZHN0X3BhdGgpIHsKKwkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAltaW5fa2V5Lm9iamVjdGlkID0gaW5vZGUtPmlfaW5vOwogCW1pbl9rZXkudHlwZSA9IEJUUkZTX0lOT0RFX0lURU1fS0VZOwpAQCAtMzA4MCw2ICszMTEyLDcgQEAKIAlCVUdfT04oIXBhdGgpOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihmc19pbmZvLT50cmVlX3Jvb3QsIDApOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCXdjLnRyYW5zID0gdHJhbnM7CiAJd2MucGluID0gMTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ZvbHVtZXMuYyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwppbmRleCBkMTU4NTMwLi5kZDEzZWI4IDEwMDY0NAotLS0gYS9mcy9idHJmcy92b2x1bWVzLmMKKysrIGIvZnMvYnRyZnMvdm9sdW1lcy5jCkBAIC0xMjEzLDYgKzEyMTMsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KIAlrZXkub2JqZWN0aWQgPSBCVFJGU19ERVZfSVRFTVNfT0JKRUNUSUQ7CiAJa2V5LnR5cGUgPSBCVFJGU19ERVZfSVRFTV9LRVk7CiAJa2V5Lm9mZnNldCA9IGRldmljZS0+ZGV2aWQ7CkBAIC0xMzM0LDExICsxMzM4LDExIEBACiAKIAlyZXQgPSBidHJmc19zaHJpbmtfZGV2aWNlKGRldmljZSwgMCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9icmVsc2U7CisJCWdvdG8gZXJyb3JfdW5kbzsKIAogCXJldCA9IGJ0cmZzX3JtX2Rldl9pdGVtKHJvb3QtPmZzX2luZm8tPmNodW5rX3Jvb3QsIGRldmljZSk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJvcl9icmVsc2U7CisJCWdvdG8gZXJyb3JfdW5kbzsKIAogCWRldmljZS0+aW5fZnNfbWV0YWRhdGEgPSAwOwogCkBAIC0xNDEyLDYgKzE0MTYsMTMgQEAKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnZvbHVtZV9tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZ1dWlkX211dGV4KTsKIAlyZXR1cm4gcmV0OworZXJyb3JfdW5kbzoKKwlpZiAoZGV2aWNlLT53cml0ZWFibGUpIHsKKwkJbGlzdF9hZGQoJmRldmljZS0+ZGV2X2FsbG9jX2xpc3QsCisJCQkgJnJvb3QtPmZzX2luZm8tPmZzX2RldmljZXMtPmFsbG9jX2xpc3QpOworCQlyb290LT5mc19pbmZvLT5mc19kZXZpY2VzLT5yd19kZXZpY2VzKys7CisJfQorCWdvdG8gZXJyb3JfYnJlbHNlOwogfQogCiAvKgpAQCAtMTYwMSwxMSArMTYxMiwxOSBAQAogCiAJcmV0ID0gZmluZF9uZXh0X2RldmlkKHJvb3QsICZkZXZpY2UtPmRldmlkKTsKIAlpZiAocmV0KSB7CisJCWtmcmVlKGRldmljZS0+bmFtZSk7CiAJCWtmcmVlKGRldmljZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQlrZnJlZShkZXZpY2UtPm5hbWUpOworCQlrZnJlZShkZXZpY2UpOworCQlyZXQgPSBQVFJfRVJSKHRyYW5zKTsKKwkJZ290byBlcnJvcjsKKwl9CisKIAlsb2NrX2NodW5rcyhyb290KTsKIAogCWRldmljZS0+d3JpdGVhYmxlID0gMTsKQEAgLTE2MjEsNyArMTY0MCw3IEBACiAJZGV2aWNlLT5kZXZfcm9vdCA9IHJvb3QtPmZzX2luZm8tPmRldl9yb290OwogCWRldmljZS0+YmRldiA9IGJkZXY7CiAJZGV2aWNlLT5pbl9mc19tZXRhZGF0YSA9IDE7Ci0JZGV2aWNlLT5tb2RlID0gMDsKKwlkZXZpY2UtPm1vZGUgPSBGTU9ERV9FWENMOwogCXNldF9ibG9ja3NpemUoZGV2aWNlLT5iZGV2LCA0MDk2KTsKIAogCWlmIChzZWVkaW5nX2RldikgewpAQCAtMTg3Myw3ICsxODkyLDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJbG9ja19jaHVua3Mocm9vdCk7CiAKQEAgLTIwNDcsNyArMjA2Niw3IEBACiAJCUJVR19PTihyZXQpOwogCiAJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24oZGV2X3Jvb3QsIDApOwotCQlCVUdfT04oIXRyYW5zKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJCXJldCA9IGJ0cmZzX2dyb3dfZGV2aWNlKHRyYW5zLCBkZXZpY2UsIG9sZF9zaXplKTsKIAkJQlVHX09OKHJldCk7CkBAIC0yMjEzLDYgKzIyMzIsMTEgQEAKIAogCS8qIFNocmlua2luZyBzdWNjZWVkZWQsIGVsc2Ugd2Ugd291bGQgYmUgYXQgImRvbmUiLiAqLwogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJcmV0ID0gUFRSX0VSUih0cmFucyk7CisJCWdvdG8gZG9uZTsKKwl9CisKIAlsb2NrX2NodW5rcyhyb290KTsKIAogCWRldmljZS0+ZGlza190b3RhbF9ieXRlcyA9IG5ld19zaXplOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9jYXBzLmMgYi9mcy9jZXBoL2NhcHMuYwppbmRleCA2MGQyN2JjLi42YjYxZGVkIDEwMDY0NAotLS0gYS9mcy9jZXBoL2NhcHMuYworKysgYi9mcy9jZXBoL2NhcHMuYwpAQCAtMTU2MCw5ICsxNTYwLDEwIEBACiAJCS8qIE5PVEU6IG5vIHNpZGUtZWZmZWN0cyBhbGxvd2VkLCB1bnRpbCB3ZSB0YWtlIHNfbXV0ZXggKi8KIAogCQlyZXZva2luZyA9IGNhcC0+aW1wbGVtZW50ZWQgJiB+Y2FwLT5pc3N1ZWQ7Ci0JCWlmIChyZXZva2luZykKLQkJCWRvdXQoIiBtZHMlZCByZXZva2luZyAlc1xuIiwgY2FwLT5tZHMsCi0JCQkgICAgIGNlcGhfY2FwX3N0cmluZyhyZXZva2luZykpOworCQlkb3V0KCIgbWRzJWQgY2FwICVwIGlzc3VlZCAlcyBpbXBsZW1lbnRlZCAlcyByZXZva2luZyAlc1xuIiwKKwkJICAgICBjYXAtPm1kcywgY2FwLCBjZXBoX2NhcF9zdHJpbmcoY2FwLT5pc3N1ZWQpLAorCQkgICAgIGNlcGhfY2FwX3N0cmluZyhjYXAtPmltcGxlbWVudGVkKSwKKwkJICAgICBjZXBoX2NhcF9zdHJpbmcocmV2b2tpbmcpKTsKIAogCQlpZiAoY2FwID09IGNpLT5pX2F1dGhfY2FwICYmCiAJCSAgICAoY2FwLT5pc3N1ZWQgJiBDRVBIX0NBUF9GSUxFX1dSKSkgewpAQCAtMTY1OCw2ICsxNjU5LDggQEAKIAogCQlpZiAoY2FwID09IGNpLT5pX2F1dGhfY2FwICYmIGNpLT5pX2RpcnR5X2NhcHMpCiAJCQlmbHVzaGluZyA9IF9fbWFya19jYXBzX2ZsdXNoaW5nKGlub2RlLCBzZXNzaW9uKTsKKwkJZWxzZQorCQkJZmx1c2hpbmcgPSAwOwogCiAJCW1kcyA9IGNhcC0+bWRzOyAgLyogcmVtZW1iZXIgbWRzLCBzbyB3ZSBkb24ndCByZXBlYXQgKi8KIAkJc2VudCsrOwpAQCAtMTk0MCw2ICsxOTQzLDM1IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBraWNrX2ZsdXNoaW5nX2lub2RlX2NhcHMoc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYywKKwkJCQkgICAgIHN0cnVjdCBjZXBoX21kc19zZXNzaW9uICpzZXNzaW9uLAorCQkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSA9IGNlcGhfaW5vZGUoaW5vZGUpOworCXN0cnVjdCBjZXBoX2NhcCAqY2FwOworCWludCBkZWxheWVkID0gMDsKKworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJY2FwID0gY2ktPmlfYXV0aF9jYXA7CisJZG91dCgia2lja19mbHVzaGluZ19pbm9kZV9jYXBzICVwIGZsdXNoaW5nICVzIGZsdXNoX3NlcSAlbGxkXG4iLCBpbm9kZSwKKwkgICAgIGNlcGhfY2FwX3N0cmluZyhjaS0+aV9mbHVzaGluZ19jYXBzKSwgY2ktPmlfY2FwX2ZsdXNoX3NlcSk7CisJX19jZXBoX2ZsdXNoX3NuYXBzKGNpLCAmc2Vzc2lvbiwgMSk7CisJaWYgKGNpLT5pX2ZsdXNoaW5nX2NhcHMpIHsKKwkJZGVsYXllZCA9IF9fc2VuZF9jYXAobWRzYywgY2FwLCBDRVBIX0NBUF9PUF9GTFVTSCwKKwkJCQkgICAgIF9fY2VwaF9jYXBzX3VzZWQoY2kpLAorCQkJCSAgICAgX19jZXBoX2NhcHNfd2FudGVkKGNpKSwKKwkJCQkgICAgIGNhcC0+aXNzdWVkIHwgY2FwLT5pbXBsZW1lbnRlZCwKKwkJCQkgICAgIGNpLT5pX2ZsdXNoaW5nX2NhcHMsIE5VTEwpOworCQlpZiAoZGVsYXllZCkgeworCQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJCV9fY2FwX2RlbGF5X3JlcXVldWUobWRzYywgY2kpOworCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCQl9CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCX0KK30KKwogCiAvKgogICogVGFrZSByZWZlcmVuY2VzIHRvIGNhcGFiaWxpdGllcyB3ZSBob2xkLCBzbyB0aGF0IHdlIGRvbid0IHJlbGVhc2UKQEAgLTI2ODcsNyArMjcxOSw3IEBACiAJY2VwaF9hZGRfY2FwKGlub2RlLCBzZXNzaW9uLCBjYXBfaWQsIC0xLAogCQkgICAgIGlzc3VlZCwgd2FudGVkLCBzZXEsIG1zZXEsIHJlYWxtaW5vLCBDRVBIX0NBUF9GTEFHX0FVVEgsCiAJCSAgICAgTlVMTCAvKiBubyBjYXBzIGNvbnRleHQgKi8pOwotCXRyeV9mbHVzaF9jYXBzKGlub2RlLCBzZXNzaW9uLCBOVUxMKTsKKwlraWNrX2ZsdXNoaW5nX2lub2RlX2NhcHMobWRzYywgc2Vzc2lvbiwgaW5vZGUpOwogCXVwX3JlYWQoJm1kc2MtPnNuYXBfcndzZW0pOwogCiAJLyogbWFrZSBzdXJlIHdlIHJlLXJlcXVlc3QgbWF4X3NpemUsIGlmIG5lY2Vzc2FyeSAqLwpAQCAtMjc4NSw4ICsyODE3LDcgQEAKIAljYXNlIENFUEhfQ0FQX09QX0lNUE9SVDoKIAkJaGFuZGxlX2NhcF9pbXBvcnQobWRzYywgaW5vZGUsIGgsIHNlc3Npb24sCiAJCQkJICBzbmFwdHJhY2UsIHNuYXB0cmFjZV9sZW4pOwotCQljZXBoX2NoZWNrX2NhcHMoY2VwaF9pbm9kZShpbm9kZSksIENIRUNLX0NBUFNfTk9ERUxBWSwKLQkJCQlzZXNzaW9uKTsKKwkJY2VwaF9jaGVja19jYXBzKGNlcGhfaW5vZGUoaW5vZGUpLCAwLCBzZXNzaW9uKTsKIAkJZ290byBkb25lX3VubG9ja2VkOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9kaXIuYyBiL2ZzL2NlcGgvZGlyLmMKaW5kZXggMGJjNjhkZS4uMDk5YTU4NiAxMDA2NDQKLS0tIGEvZnMvY2VwaC9kaXIuYworKysgYi9mcy9jZXBoL2Rpci5jCkBAIC00MDksNyArNDA5LDcgQEAKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCWlmIChjaS0+aV9yZWxlYXNlX2NvdW50ID09IGZpLT5kaXJfcmVsZWFzZV9jb3VudCkgewogCQlkb3V0KCIgbWFya2luZyAlcCBjb21wbGV0ZVxuIiwgaW5vZGUpOwotCQljaS0+aV9jZXBoX2ZsYWdzIHw9IENFUEhfSV9DT01QTEVURTsKKwkJLyogY2ktPmlfY2VwaF9mbGFncyB8PSBDRVBIX0lfQ09NUExFVEU7ICovCiAJCWNpLT5pX21heF9vZmZzZXQgPSBmaWxwLT5mX3BvczsKIAl9CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwpAQCAtNDk2LDYgKzQ5Niw3IEBACiAKIAkvKiAuc25hcCBkaXI/ICovCiAJaWYgKGVyciA9PSAtRU5PRU5UICYmCisJICAgIGNlcGhfc25hcChwYXJlbnQpID09IENFUEhfTk9TTkFQICYmCiAJICAgIHN0cmNtcChkZW50cnktPmRfbmFtZS5uYW1lLAogCQkgICBmc2MtPm1vdW50X29wdGlvbnMtPnNuYXBkaXJfbmFtZSkgPT0gMCkgewogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY2VwaF9nZXRfc25hcGRpcihwYXJlbnQpOwpAQCAtMTAyOSwyOCArMTAzMCw4IEBACiBzdGF0aWMgdm9pZCBjZXBoX2RlbnRyeV9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlzdHJ1Y3QgY2VwaF9kZW50cnlfaW5mbyAqZGkgPSBjZXBoX2RlbnRyeShkZW50cnkpOwotCXN0cnVjdCBpbm9kZSAqcGFyZW50X2lub2RlID0gTlVMTDsKLQl1NjQgc25hcGlkID0gQ0VQSF9OT1NOQVA7CiAKLQlpZiAoIUlTX1JPT1QoZGVudHJ5KSkgewotCQlwYXJlbnRfaW5vZGUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOwotCQlpZiAocGFyZW50X2lub2RlKQotCQkJc25hcGlkID0gY2VwaF9zbmFwKHBhcmVudF9pbm9kZSk7Ci0JfQotCWRvdXQoImRlbnRyeV9yZWxlYXNlICVwIHBhcmVudCAlcFxuIiwgZGVudHJ5LCBwYXJlbnRfaW5vZGUpOwotCWlmIChwYXJlbnRfaW5vZGUgJiYgc25hcGlkICE9IENFUEhfU05BUERJUikgewotCQlzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSA9IGNlcGhfaW5vZGUocGFyZW50X2lub2RlKTsKLQotCQlzcGluX2xvY2soJnBhcmVudF9pbm9kZS0+aV9sb2NrKTsKLQkJaWYgKGNpLT5pX3NoYXJlZF9nZW4gPT0gZGktPmxlYXNlX3NoYXJlZF9nZW4gfHwKLQkJICAgIHNuYXBpZCA8PSBDRVBIX01BWFNOQVApIHsKLQkJCWRvdXQoIiBjbGVhcmluZyAlcCBjb21wbGV0ZSAoZF9yZWxlYXNlKVxuIiwKLQkJCSAgICAgcGFyZW50X2lub2RlKTsKLQkJCWNpLT5pX2NlcGhfZmxhZ3MgJj0gfkNFUEhfSV9DT01QTEVURTsKLQkJCWNpLT5pX3JlbGVhc2VfY291bnQrKzsKLQkJfQotCQlzcGluX3VubG9jaygmcGFyZW50X2lub2RlLT5pX2xvY2spOwotCX0KKwlkb3V0KCJkZW50cnlfcmVsZWFzZSAlcFxuIiwgZGVudHJ5KTsKIAlpZiAoZGkpIHsKIAkJY2VwaF9kZW50cnlfbHJ1X2RlbChkZW50cnkpOwogCQlpZiAoZGktPmxlYXNlX3Nlc3Npb24pCmRpZmYgLS1naXQgYS9mcy9jZXBoL2lub2RlLmMgYi9mcy9jZXBoL2lub2RlLmMKaW5kZXggZTgzNWVmZi4uMTkzYmZhNSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9pbm9kZS5jCisrKyBiL2ZzL2NlcGgvaW5vZGUuYwpAQCAtNzA3LDEzICs3MDcsOSBAQAogCQkgICAgKGlzc3VlZCAmIENFUEhfQ0FQX0ZJTEVfRVhDTCkgPT0gMCAmJgogCQkgICAgKGNpLT5pX2NlcGhfZmxhZ3MgJiBDRVBIX0lfQ09NUExFVEUpID09IDApIHsKIAkJCWRvdXQoIiBtYXJraW5nICVwIGNvbXBsZXRlIChlbXB0eSlcbiIsIGlub2RlKTsKLQkJCWNpLT5pX2NlcGhfZmxhZ3MgfD0gQ0VQSF9JX0NPTVBMRVRFOworCQkJLyogY2ktPmlfY2VwaF9mbGFncyB8PSBDRVBIX0lfQ09NUExFVEU7ICovCiAJCQljaS0+aV9tYXhfb2Zmc2V0ID0gMjsKIAkJfQotCi0JCS8qIGl0IG1heSBiZSBiZXR0ZXIgdG8gc2V0IHN0X3NpemUgaW4gZ2V0YXR0ciBpbnN0ZWFkPyAqLwotCQlpZiAoY2VwaF90ZXN0X21vdW50X29wdChjZXBoX3NiX3RvX2NsaWVudChpbm9kZS0+aV9zYiksIFJCWVRFUykpCi0JCQlpbm9kZS0+aV9zaXplID0gY2ktPmlfcmJ5dGVzOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9lcnIoImZpbGxfaW5vZGUgJWxseC4lbGx4IEJBRCBtb2RlIDAlb1xuIiwKQEAgLTE4MTksNyArMTgxNSwxMSBAQAogCQllbHNlCiAJCQlzdGF0LT5kZXYgPSAwOwogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQkJc3RhdC0+c2l6ZSA9IGNpLT5pX3JieXRlczsKKwkJCWlmIChjZXBoX3Rlc3RfbW91bnRfb3B0KGNlcGhfc2JfdG9fY2xpZW50KGlub2RlLT5pX3NiKSwKKwkJCQkJCVJCWVRFUykpCisJCQkJc3RhdC0+c2l6ZSA9IGNpLT5pX3JieXRlczsKKwkJCWVsc2UKKwkJCQlzdGF0LT5zaXplID0gY2ktPmlfZmlsZXMgKyBjaS0+aV9zdWJkaXJzOwogCQkJc3RhdC0+YmxvY2tzID0gMDsKIAkJCXN0YXQtPmJsa3NpemUgPSA2NTUzNjsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tZHNfY2xpZW50LmMgYi9mcy9jZXBoL21kc19jbGllbnQuYwppbmRleCAxZTMwZDE5Li5hMWVlOGZhIDEwMDY0NAotLS0gYS9mcy9jZXBoL21kc19jbGllbnQuYworKysgYi9mcy9jZXBoL21kc19jbGllbnQuYwpAQCAtNjkzLDkgKzY5MywxMSBAQAogCQkJCWRvdXQoImNob29zZV9tZHMgJXAgJWxseC4lbGx4ICIKIAkJCQkgICAgICJmcmFnICV1IG1kcyVkICglZC8lZClcbiIsCiAJCQkJICAgICBpbm9kZSwgY2VwaF92aW5vcChpbm9kZSksCi0JCQkJICAgICBmcmFnLmZyYWcsIGZyYWcubWRzLAorCQkJCSAgICAgZnJhZy5mcmFnLCBtZHMsCiAJCQkJICAgICAoaW50KXIsIGZyYWcubmRpc3QpOwotCQkJCXJldHVybiBtZHM7CisJCQkJaWYgKGNlcGhfbWRzbWFwX2dldF9zdGF0ZShtZHNjLT5tZHNtYXAsIG1kcykgPj0KKwkJCQkgICAgQ0VQSF9NRFNfU1RBVEVfQUNUSVZFKQorCQkJCQlyZXR1cm4gbWRzOwogCQkJfQogCiAJCQkvKiBzaW5jZSB0aGlzIGZpbGUvZGlyIHdhc24ndCBrbm93biB0byBiZQpAQCAtNzA4LDcgKzcxMCw5IEBACiAJCQkJZG91dCgiY2hvb3NlX21kcyAlcCAlbGx4LiVsbHggIgogCQkJCSAgICAgImZyYWcgJXUgbWRzJWQgKGF1dGgpXG4iLAogCQkJCSAgICAgaW5vZGUsIGNlcGhfdmlub3AoaW5vZGUpLCBmcmFnLmZyYWcsIG1kcyk7Ci0JCQkJcmV0dXJuIG1kczsKKwkJCQlpZiAoY2VwaF9tZHNtYXBfZ2V0X3N0YXRlKG1kc2MtPm1kc21hcCwgbWRzKSA+PQorCQkJCSAgICBDRVBIX01EU19TVEFURV9BQ1RJVkUpCisJCQkJCXJldHVybiBtZHM7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9jZXBoL3NuYXAuYyBiL2ZzL2NlcGgvc25hcC5jCmluZGV4IDM5YzI0M2EuLmY0MGI5MTMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvc25hcC5jCisrKyBiL2ZzL2NlcGgvc25hcC5jCkBAIC01ODQsMTAgKzU4NCwxNCBAQAogCWlmIChsYXN0aW5vZGUpCiAJCWlwdXQobGFzdGlub2RlKTsKIAotCWRvdXQoInF1ZXVlX3JlYWxtX2NhcF9zbmFwcyAlcCAlbGx4IGNoaWxkcmVuXG4iLCByZWFsbSwgcmVhbG0tPmlubyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJnJlYWxtLT5jaGlsZHJlbiwgY2hpbGRfaXRlbSkKLQkJcXVldWVfcmVhbG1fY2FwX3NuYXBzKGNoaWxkKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmcmVhbG0tPmNoaWxkcmVuLCBjaGlsZF9pdGVtKSB7CisJCWRvdXQoInF1ZXVlX3JlYWxtX2NhcF9zbmFwcyAlcCAlbGx4IHF1ZXVlIGNoaWxkICVwICVsbHhcbiIsCisJCSAgICAgcmVhbG0sIHJlYWxtLT5pbm8sIGNoaWxkLCBjaGlsZC0+aW5vKTsKKwkJbGlzdF9kZWxfaW5pdCgmY2hpbGQtPmRpcnR5X2l0ZW0pOworCQlsaXN0X2FkZCgmY2hpbGQtPmRpcnR5X2l0ZW0sICZyZWFsbS0+ZGlydHlfaXRlbSk7CisJfQogCisJbGlzdF9kZWxfaW5pdCgmcmVhbG0tPmRpcnR5X2l0ZW0pOwogCWRvdXQoInF1ZXVlX3JlYWxtX2NhcF9zbmFwcyAlcCAlbGx4IGRvbmVcbiIsIHJlYWxtLCByZWFsbS0+aW5vKTsKIH0KIApAQCAtNjgzLDcgKzY4Nyw5IEBACiAJICogcXVldWUgY2FwIHNuYXBzIF9hZnRlcl8gd2UndmUgYnVpbHQgdGhlIG5ldyBzbmFwIGNvbnRleHRzLAogCSAqIHNvIHRoYXQgaV9oZWFkX3NuYXBjIGNhbiBiZSBzZXQgYXBwcm9wcmlhdGVseS4KIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlYWxtLCAmZGlydHlfcmVhbG1zLCBkaXJ0eV9pdGVtKSB7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkaXJ0eV9yZWFsbXMpKSB7CisJCXJlYWxtID0gbGlzdF9maXJzdF9lbnRyeSgmZGlydHlfcmVhbG1zLCBzdHJ1Y3QgY2VwaF9zbmFwX3JlYWxtLAorCQkJCQkgZGlydHlfaXRlbSk7CiAJCXF1ZXVlX3JlYWxtX2NhcF9zbmFwcyhyZWFsbSk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9jZXBoL3N1cGVyLmMgYi9mcy9jZXBoL3N1cGVyLmMKaW5kZXggYmY2ZjBmMy4uOWM1MDg1NCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9zdXBlci5jCisrKyBiL2ZzL2NlcGgvc3VwZXIuYwpAQCAtMjkwLDYgKzI5MCw4IEBACiAKICAgICAgICAgZnNvcHQtPnJzaXplID0gQ0VQSF9NT1VOVF9SU0laRV9ERUZBVUxUOwogICAgICAgICBmc29wdC0+c25hcGRpcl9uYW1lID0ga3N0cmR1cChDRVBIX1NOQVBESVJOQU1FX0RFRkFVTFQsIEdGUF9LRVJORUwpOworCWZzb3B0LT5jYXBzX3dhbnRlZF9kZWxheV9taW4gPSBDRVBIX0NBUFNfV0FOVEVEX0RFTEFZX01JTl9ERUZBVUxUOworCWZzb3B0LT5jYXBzX3dhbnRlZF9kZWxheV9tYXggPSBDRVBIX0NBUFNfV0FOVEVEX0RFTEFZX01BWF9ERUZBVUxUOwogICAgICAgICBmc29wdC0+Y2FwX3JlbGVhc2Vfc2FmZXR5ID0gQ0VQSF9DQVBfUkVMRUFTRV9TQUZFVFlfREVGQVVMVDsKICAgICAgICAgZnNvcHQtPm1heF9yZWFkZGlyID0gQ0VQSF9NQVhfUkVBRERJUl9ERUZBVUxUOwogICAgICAgICBmc29wdC0+bWF4X3JlYWRkaXJfYnl0ZXMgPSBDRVBIX01BWF9SRUFERElSX0JZVEVTX0RFRkFVTFQ7CmRpZmYgLS1naXQgYS9mcy9jZXBoL3hhdHRyLmMgYi9mcy9jZXBoL3hhdHRyLmMKaW5kZXggNmUxMmE2Yi4uOGM5ZWJhNiAxMDA2NDQKLS0tIGEvZnMvY2VwaC94YXR0ci5jCisrKyBiL2ZzL2NlcGgveGF0dHIuYwpAQCAtMjE5LDYgKzIxOSw3IEBACiAJc3RydWN0IHJiX25vZGUgKipwOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCBjZXBoX2lub2RlX3hhdHRyICp4YXR0ciA9IE5VTEw7CisJaW50IG5hbWVfbGVuID0gc3RybGVuKG5hbWUpOwogCWludCBjOwogCiAJcCA9ICZjaS0+aV94YXR0cnMuaW5kZXgucmJfbm9kZTsKQEAgLTIyNiw2ICsyMjcsOCBAQAogCQlwYXJlbnQgPSAqcDsKIAkJeGF0dHIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBjZXBoX2lub2RlX3hhdHRyLCBub2RlKTsKIAkJYyA9IHN0cm5jbXAobmFtZSwgeGF0dHItPm5hbWUsIHhhdHRyLT5uYW1lX2xlbik7CisJCWlmIChjID09IDAgJiYgbmFtZV9sZW4gPiB4YXR0ci0+bmFtZV9sZW4pCisJCQljID0gMTsKIAkJaWYgKGMgPCAwKQogCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwogCQllbHNlIGlmIChjID4gMCkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCBlZTQ1NjQ4Li43Y2IwZjdmIDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC0zLDYgKzMsNyBAQAogCWRlcGVuZHMgb24gSU5FVAogCXNlbGVjdCBOTFMKIAlzZWxlY3QgQ1JZUFRPCisJc2VsZWN0IENSWVBUT19NRDQKIAlzZWxlY3QgQ1JZUFRPX01ENQogCXNlbGVjdCBDUllQVE9fSE1BQwogCXNlbGVjdCBDUllQVE9fQVJDNApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9NYWtlZmlsZSBiL2ZzL2NpZnMvTWFrZWZpbGUKaW5kZXggNDNiMTlkZC4uZDg3NTU4NCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9NYWtlZmlsZQorKysgYi9mcy9jaWZzL01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogCiBjaWZzLXkgOj0gY2lmc2ZzLm8gY2lmc3NtYi5vIGNpZnNfZGVidWcubyBjb25uZWN0Lm8gZGlyLm8gZmlsZS5vIGlub2RlLm8gXAogCSAgbGluay5vIG1pc2MubyBuZXRtaXNjLm8gc21iZGVzLm8gc21iZW5jcnlwdC5vIHRyYW5zcG9ydC5vIGFzbjEubyBcCi0JICBtZDQubyBtZDUubyBjaWZzX3VuaWNvZGUubyBudGVyci5vIHhhdHRyLm8gY2lmc2VuY3J5cHQubyBcCisJICBjaWZzX3VuaWNvZGUubyBudGVyci5vIHhhdHRyLm8gY2lmc2VuY3J5cHQubyBcCiAJICByZWFkZGlyLm8gaW9jdGwubyBzZXNzLm8gZXhwb3J0Lm8KIAogY2lmcy0kKENPTkZJR19DSUZTX0FDTCkgKz0gY2lmc2FjbC5vCmRpZmYgLS1naXQgYS9mcy9jaWZzL1JFQURNRSBiL2ZzL2NpZnMvUkVBRE1FCmluZGV4IDQ2YWY5OWEuLmZlMTY4MzUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvUkVBRE1FCisrKyBiL2ZzL2NpZnMvUkVBRE1FCkBAIC00NTIsNiArNDUyLDExIEBACiAJCWlmIG9wbG9jayAoY2FjaGluZyB0b2tlbikgaXMgZ3JhbnRlZCBhbmQgaGVsZC4gTm90ZSB0aGF0CiAJCWRpcmVjdCBhbGxvd3Mgd3JpdGUgb3BlcmF0aW9ucyBsYXJnZXIgdGhhbiBwYWdlIHNpemUKIAkJdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLgorICBzdHJpY3RjYWNoZSAgIFVzZSBmb3Igc3dpdGNoaW5nIG9uIHN0cmljdCBjYWNoZSBtb2RlLiBJbiB0aGlzIG1vZGUgdGhlCisJCWNsaWVudCByZWFkIGZyb20gdGhlIGNhY2hlIGFsbCB0aGUgdGltZSBpdCBoYXMgT3Bsb2NrIExldmVsIElJLAorCQlvdGhlcndpc2UgLSByZWFkIGZyb20gdGhlIHNlcnZlci4gQWxsIHdyaXR0ZW4gZGF0YSBhcmUgc3RvcmVkCisJCWluIHRoZSBjYWNoZSwgYnV0IGlmIHRoZSBjbGllbnQgZG9lc24ndCBoYXZlIEV4Y2x1c2l2ZSBPcGxvY2ssCisJCWl0IHdyaXRlcyB0aGUgZGF0YSB0byB0aGUgc2VydmVyLgogICBhY2wgICAJQWxsb3cgc2V0ZmFjbCBhbmQgZ2V0ZmFjbCB0byBtYW5hZ2UgcG9zaXggQUNMcyBpZiBzZXJ2ZXIKIAkJc3VwcG9ydHMgdGhlbS4gIChkZWZhdWx0KQogICBub2FjbCAJRG8gbm90IGFsbG93IHNldGZhY2wgYW5kIGdldGZhY2wgY2FsbHMgb24gdGhpcyBtb3VudApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKaW5kZXggZjFjNjg2Mi4uMGEyNjVhZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYworKysgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCkBAIC0yODIsOCArMjgyLDYgQEAKIAljRllJKDEsICJpbiAlcyIsIF9fZnVuY19fKTsKIAlCVUdfT04oSVNfUk9PVChtbnRwdCkpOwogCi0JeGlkID0gR2V0WGlkKCk7Ci0KIAkvKgogCSAqIFRoZSBNU0RGUyBzcGVjIHN0YXRlcyB0aGF0IHBhdGhzIGluIERGUyByZWZlcnJhbCByZXF1ZXN0cyBhbmQKIAkgKiByZXNwb25zZXMgbXVzdCBiZSBwcmVmaXhlZCBieSBhIHNpbmdsZSAnXCcgY2hhcmFjdGVyIGluc3RlYWQgb2YKQEAgLTI5Myw3ICsyOTEsNyBAQAogCW1udCA9IEVSUl9QVFIoLUVOT01FTSk7CiAJZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShtbnRwdCk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKQotCQlnb3RvIGZyZWVfeGlkOworCQlnb3RvIGNkZGFfZXhpdDsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKG1udHB0LT5kX2lub2RlLT5pX3NiKTsKIAl0bGluayA9IGNpZnNfc2JfdGxpbmsoY2lmc19zYik7CkBAIC0zMDMsOSArMzAxLDExIEBACiAJfQogCXNlcyA9IHRsaW5rX3Rjb24odGxpbmspLT5zZXM7CiAKKwl4aWQgPSBHZXRYaWQoKTsKIAlyYyA9IGdldF9kZnNfcGF0aCh4aWQsIHNlcywgZnVsbF9wYXRoICsgMSwgY2lmc19zYi0+bG9jYWxfbmxzLAogCQkmbnVtX3JlZmVycmFscywgJnJlZmVycmFscywKIAkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisJRnJlZVhpZCh4aWQpOwogCiAJY2lmc19wdXRfdGxpbmsodGxpbmspOwogCkBAIC0zMzgsOCArMzM4LDcgQEAKIAlmcmVlX2Rmc19pbmZvX2FycmF5KHJlZmVycmFscywgbnVtX3JlZmVycmFscyk7CiBmcmVlX2Z1bGxfcGF0aDoKIAlrZnJlZShmdWxsX3BhdGgpOwotZnJlZV94aWQ6Ci0JRnJlZVhpZCh4aWQpOworY2RkYV9leGl0OgogCWNGWUkoMSwgImxlYXZpbmcgJXMiICwgX19mdW5jX18pOwogCXJldHVybiBtbnQ7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNhY2wuYyBiL2ZzL2NpZnMvY2lmc2FjbC5jCmluZGV4IDFlNzYzNmIuLmJlZWViZjEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2FjbC5jCisrKyBiL2ZzL2NpZnMvY2lmc2FjbC5jCkBAIC0zNzIsNiArMzcyLDEwIEBACiAKIAkJcHBhY2UgPSBrbWFsbG9jKG51bV9hY2VzICogc2l6ZW9mKHN0cnVjdCBjaWZzX2FjZSAqKSwKIAkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcGFjZSkgeworCQkJY0VSUk9SKDEsICJEQUNMIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIik7CisJCQlyZXR1cm47CisJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FjZXM7ICsraSkgewogCQkJcHBhY2VbaV0gPSAoc3RydWN0IGNpZnNfYWNlICopIChhY2xfYmFzZSArIGFjbF9zaXplKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCA2NmYzZDUwLi5hNTE1ODVmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgotI2luY2x1ZGUgIm1kNS5oIgogI2luY2x1ZGUgImNpZnNfdW5pY29kZS5oIgogI2luY2x1ZGUgImNpZnNwcm90by5oIgogI2luY2x1ZGUgIm50bG1zc3AuaCIKQEAgLTM3LDExICszNiw2IEBACiAvKiBOb3RlIHRoYXQgdGhlIHNtYiBoZWFkZXIgc2lnbmF0dXJlIGZpZWxkIG9uIGlucHV0IGNvbnRhaW5zIHRoZQogCXNlcXVlbmNlIG51bWJlciBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgKi8KIAotZXh0ZXJuIHZvaWQgbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBuKTsKLWV4dGVybiB2b2lkIEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNik7Ci1leHRlcm4gdm9pZCBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgICAgICB1bnNpZ25lZCBjaGFyICpwMjQpOwotCiBzdGF0aWMgaW50IGNpZnNfY2FsY3VsYXRlX3NpZ25hdHVyZShjb25zdCBzdHJ1Y3Qgc21iX2hkciAqY2lmc19wZHUsCiAJCQkJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyLCBjaGFyICpzaWduYXR1cmUpCiB7CkBAIC0yMzQsNiArMjI4LDcgQEAKIC8qIGZpcnN0IGNhbGN1bGF0ZSAyNCBieXRlcyBudGxtIHJlc3BvbnNlIGFuZCB0aGVuIDE2IGJ5dGUgc2Vzc2lvbiBrZXkgKi8KIGludCBzZXR1cF9udGxtX3Jlc3BvbnNlKHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzKQogeworCWludCByYyA9IDA7CiAJdW5zaWduZWQgaW50IHRlbXBfbGVuID0gQ0lGU19TRVNTX0tFWV9TSVpFICsgQ0lGU19BVVRIX1JFU1BfU0laRTsKIAljaGFyIHRlbXBfa2V5W0NJRlNfU0VTU19LRVlfU0laRV07CiAKQEAgLTI0NywxMyArMjQyLDI2IEBACiAJfQogCXNlcy0+YXV0aF9rZXkubGVuID0gdGVtcF9sZW47CiAKLQlTTUJOVGVuY3J5cHQoc2VzLT5wYXNzd29yZCwgc2VzLT5zZXJ2ZXItPmNyeXB0a2V5LAorCXJjID0gU01CTlRlbmNyeXB0KHNlcy0+cGFzc3dvcmQsIHNlcy0+c2VydmVyLT5jcnlwdGtleSwKIAkJCXNlcy0+YXV0aF9rZXkucmVzcG9uc2UgKyBDSUZTX1NFU1NfS0VZX1NJWkUpOworCWlmIChyYykgeworCQljRllJKDEsICIlcyBDYW4ndCBnZW5lcmF0ZSBOVExNIHJlc3BvbnNlLCBlcnJvcjogJWQiLAorCQkJX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCUVfbWQ0aGFzaChzZXMtPnBhc3N3b3JkLCB0ZW1wX2tleSk7Ci0JbWRmb3VyKHNlcy0+YXV0aF9rZXkucmVzcG9uc2UsIHRlbXBfa2V5LCBDSUZTX1NFU1NfS0VZX1NJWkUpOworCXJjID0gRV9tZDRoYXNoKHNlcy0+cGFzc3dvcmQsIHRlbXBfa2V5KTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlQgaGFzaCwgZXJyb3I6ICVkIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCXJldHVybiAwOworCXJjID0gbWRmb3VyKHNlcy0+YXV0aF9rZXkucmVzcG9uc2UsIHRlbXBfa2V5LCBDSUZTX1NFU1NfS0VZX1NJWkUpOworCWlmIChyYykKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlRMTSBzZXNzaW9uIGtleSwgZXJyb3I6ICVkIiwKKwkJCV9fZnVuY19fLCByYyk7CisKKwlyZXR1cm4gcmM7CiB9CiAKICNpZmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKQEAgLTY0OSw5ICs2NTcsMTAgQEAKIAlnZXRfcmFuZG9tX2J5dGVzKHNlY19rZXksIENJRlNfU0VTU19LRVlfU0laRSk7CiAKIAl0Zm1fYXJjNCA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOwotCWlmICghdGZtX2FyYzQgfHwgSVNfRVJSKHRmbV9hcmM0KSkgeworCWlmIChJU19FUlIodGZtX2FyYzQpKSB7CisJCXJjID0gUFRSX0VSUih0Zm1fYXJjNCk7CiAJCWNFUlJPUigxLCAiY291bGQgbm90IGFsbG9jYXRlIGNyeXB0byBBUEkgYXJjNFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHRmbV9hcmM0KTsKKwkJcmV0dXJuIHJjOwogCX0KIAogCWRlc2MudGZtID0gdGZtX2FyYzQ7CkBAIC03MDAsMTQgKzcwOSwxMyBAQAogCXVuc2lnbmVkIGludCBzaXplOwogCiAJc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUgPSBjcnlwdG9fYWxsb2Nfc2hhc2goImhtYWMobWQ1KSIsIDAsIDApOwotCWlmICghc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUgfHwKLQkJCUlTX0VSUihzZXJ2ZXItPnNlY21lY2guaG1hY21kNSkpIHsKKwlpZiAoSVNfRVJSKHNlcnZlci0+c2VjbWVjaC5obWFjbWQ1KSkgewogCQljRVJST1IoMSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gaG1hY21kNVxuIik7CiAJCXJldHVybiBQVFJfRVJSKHNlcnZlci0+c2VjbWVjaC5obWFjbWQ1KTsKIAl9CiAKIAlzZXJ2ZXItPnNlY21lY2gubWQ1ID0gY3J5cHRvX2FsbG9jX3NoYXNoKCJtZDUiLCAwLCAwKTsKLQlpZiAoIXNlcnZlci0+c2VjbWVjaC5tZDUgfHwgSVNfRVJSKHNlcnZlci0+c2VjbWVjaC5tZDUpKSB7CisJaWYgKElTX0VSUihzZXJ2ZXItPnNlY21lY2gubWQ1KSkgewogCQljRVJST1IoMSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gbWQ1XG4iKTsKIAkJcmMgPSBQVFJfRVJSKHNlcnZlci0+c2VjbWVjaC5tZDUpOwogCQlnb3RvIGNyeXB0b19hbGxvY2F0ZV9tZDVfZmFpbDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuaCBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkMmVjMC4uMDAwMDAwMAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogICBmcy9jaWZzL2NpZnNlbmNyeXB0LmgKLSAqCi0gKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDUKLSAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKLSAqCi0gKiAgIEV4dGVybnMgZm9yIG1pc2MuIHNtYWxsIGVuY3J5cHRpb24gcm91dGluZXMKLSAqICAgc28gd2UgZG8gbm90IGhhdmUgdG8gcHV0IHRoZW0gaW4gY2lmc3Byb3RvLmgKLSAqCi0gKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAotICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCi0gKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qIG1kNC5jICovCi1leHRlcm4gdm9pZCBtZGZvdXIodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IG4pOwotLyogc21iZGVzLmMgKi8KLWV4dGVybiB2b2lkIEVfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqcDE2KTsKLWV4dGVybiB2b2lkIEVfUDI0KHVuc2lnbmVkIGNoYXIgKnAyMSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgdW5zaWduZWQgY2hhciAqcDI0KTsKLQotCi0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IGE4MzIzZjEuLmYyOTcwMTMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNjAwLDEwICs2MDAsMTcgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzc2l6ZV90IHdyaXR0ZW47CisJaW50IHJjOwogCiAJd3JpdHRlbiA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOwotCWlmICghQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwpCi0JCWZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKworCWlmIChDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZUFsbCkKKwkJcmV0dXJuIHdyaXR0ZW47CisKKwlyYyA9IGZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKwlpZiAocmMpCisJCWNGWUkoMSwgImNpZnNfZmlsZV9haW9fd3JpdGU6ICVkIHJjIG9uICVwIGlub2RlIiwgcmMsIGlub2RlKTsKKwogCXJldHVybiB3cml0dGVuOwogfQogCkBAIC03MzcsNyArNzQ0LDcgQEAKIAkucmVhZCA9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUgPSBkb19zeW5jX3dyaXRlLAogCS5haW9fcmVhZCA9IGNpZnNfc3RyaWN0X3JlYWR2LAotCS5haW9fd3JpdGUgPSBjaWZzX2ZpbGVfYWlvX3dyaXRlLAorCS5haW9fd3JpdGUgPSBjaWZzX3N0cmljdF93cml0ZXYsCiAJLm9wZW4gPSBjaWZzX29wZW4sCiAJLnJlbGVhc2UgPSBjaWZzX2Nsb3NlLAogCS5sb2NrID0gY2lmc19sb2NrLApAQCAtNzkzLDcgKzgwMCw3IEBACiAJLnJlYWQgPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlID0gZG9fc3luY193cml0ZSwKIAkuYWlvX3JlYWQgPSBjaWZzX3N0cmljdF9yZWFkdiwKLQkuYWlvX3dyaXRlID0gY2lmc19maWxlX2Fpb193cml0ZSwKKwkuYWlvX3dyaXRlID0gY2lmc19zdHJpY3Rfd3JpdGV2LAogCS5vcGVuID0gY2lmc19vcGVuLAogCS5yZWxlYXNlID0gY2lmc19jbG9zZSwKIAkuZnN5bmMgPSBjaWZzX3N0cmljdF9mc3luYywKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IGYyMzIwNmQuLmE5MzcxYjYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtODUsNyArODUsOSBAQAogZXh0ZXJuIHNzaXplX3QgY2lmc19zdHJpY3RfcmVhZHYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKIGV4dGVybiBzc2l6ZV90IGNpZnNfdXNlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKndyaXRlX2RhdGEsCi0JCQkgc2l6ZV90IHdyaXRlX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CisJCQkgICAgICAgc2l6ZV90IHdyaXRlX3NpemUsIGxvZmZfdCAqcG9mZnNldCk7CitleHRlcm4gc3NpemVfdCBjaWZzX3N0cmljdF93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcyk7CiBleHRlcm4gaW50IGNpZnNfbG9jayhzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xvY2sgKik7CiBleHRlcm4gaW50IGNpZnNfZnN5bmMoc3RydWN0IGZpbGUgKiwgaW50KTsKIGV4dGVybiBpbnQgY2lmc19zdHJpY3RfZnN5bmMoc3RydWN0IGZpbGUgKiwgaW50KTsKQEAgLTEyNSw1ICsxMjcsNSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBjaWZzX2V4cG9ydF9vcHM7CiAjZW5kaWYgLyogRVhQRVJJTUVOVEFMICovCiAKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNjkiCisjZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjcxIgogI2VuZGlmCQkJCS8qIF9DSUZTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IGVkZDViMjkuLjE3YWZiMGYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTE4OCw2ICsxODgsOCBAQAogCS8qIG11bHRpcGxleGVkIHJlYWRzIG9yIHdyaXRlcyAqLwogCXVuc2lnbmVkIGludCBtYXhCdWY7CS8qIG1heEJ1ZiBzcGVjaWZpZXMgdGhlIG1heGltdW0gKi8KIAkvKiBtZXNzYWdlIHNpemUgdGhlIHNlcnZlciBjYW4gc2VuZCBvciByZWNlaXZlIGZvciBub24tcmF3IFNNQnMgKi8KKwkvKiBtYXhCdWYgaXMgcmV0dXJuZWQgYnkgU01CIE5lZ290aWF0ZVByb3RvY29sIHNvIG1heEJ1ZiBpcyBvbmx5IDAgKi8KKwkvKiB3aGVuIHNvY2tldCBpcyBzZXR1cCAoYW5kIGR1cmluZyByZWNvbm5lY3QpIGJlZm9yZSBOZWdQcm90IHNlbnQgKi8KIAl1bnNpZ25lZCBpbnQgbWF4X3J3OwkvKiBtYXhSdyBzcGVjaWZpZXMgdGhlIG1heGltdW0gKi8KIAkvKiBtZXNzYWdlIHNpemUgdGhlIHNlcnZlciBjYW4gc2VuZCBvciByZWNlaXZlIGZvciAqLwogCS8qIFNNQl9DT01fV1JJVEVfUkFXIG9yIFNNQl9DT01fUkVBRF9SQVcuICovCkBAIC02NTIsNyArNjU0LDcgQEAKICNkZWZpbmUgICBNSURfUkVRVUVTVF9TVUJNSVRURUQgMgogI2RlZmluZSAgIE1JRF9SRVNQT05TRV9SRUNFSVZFRCA0CiAjZGVmaW5lICAgTUlEX1JFVFJZX05FRURFRCAgICAgIDggLyogc2Vzc2lvbiBjbG9zZWQgd2hpbGUgdGhpcyByZXF1ZXN0IG91dCAqLwotI2RlZmluZSAgIE1JRF9OT19SRVNQX05FRURFRCAweDEwCisjZGVmaW5lICAgTUlEX1JFU1BPTlNFX01BTEZPUk1FRCAweDEwCiAKIC8qIFR5cGVzIG9mIHJlc3BvbnNlIGJ1ZmZlciByZXR1cm5lZCBmcm9tIFNlbmRSZWNlaXZlMiAqLwogI2RlZmluZSAgIENJRlNfTk9fQlVGRkVSICAgICAgICAwICAgIC8qIFJlc3BvbnNlIGJ1ZmZlciBub3QgcmV0dXJuZWQgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IDk4Mjg5NWYuLjgwOTZmMjcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtODUsNiArODUsOCBAQAogZXh0ZXJuIGJvb2wgaXNfdmFsaWRfb3Bsb2NrX2JyZWFrKHN0cnVjdCBzbWJfaGRyICpzbWIsCiAJCQkJICBzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICopOwogZXh0ZXJuIGJvb2wgaXNfc2l6ZV9zYWZlX3RvX2NoYW5nZShzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqLCBfX3U2NCBlb2YpOworZXh0ZXJuIHZvaWQgY2lmc191cGRhdGVfZW9mKHN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSwgbG9mZl90IG9mZnNldCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbik7CiBleHRlcm4gc3RydWN0IGNpZnNGaWxlSW5mbyAqZmluZF93cml0YWJsZV9maWxlKHN0cnVjdCBjaWZzSW5vZGVJbmZvICosIGJvb2wpOwogZXh0ZXJuIHN0cnVjdCBjaWZzRmlsZUluZm8gKmZpbmRfcmVhZGFibGVfZmlsZShzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqLCBib29sKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgc21iQ2FsY1NpemUoc3RydWN0IHNtYl9oZHIgKnB0cik7CkBAIC0zNzMsNyArMzc1LDcgQEAKIGV4dGVybiBpbnQgY2lmc192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBzbWJfaGRyICosCiAJCQkJIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwKIAkJCQlfX3UzMiBleHBlY3RlZF9zZXF1ZW5jZV9udW1iZXIpOwotZXh0ZXJuIHZvaWQgU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CiBleHRlcm4gaW50IHNldHVwX250bG1fcmVzcG9uc2Uoc3RydWN0IGNpZnNTZXNJbmZvICopOwogZXh0ZXJuIGludCBzZXR1cF9udGxtdjJfcnNwKHN0cnVjdCBjaWZzU2VzSW5mbyAqLCBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICopOwogZXh0ZXJuIGludCBjaWZzX2NyeXB0b19zaGFzaF9hbGxvY2F0ZShzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICopOwpAQCAtNDIzLDQgKzQyNSwxMSBAQAogZXh0ZXJuIGludCBDSUZTQ2hlY2tNRlN5bWxpbmsoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLAogCQljb25zdCB1bnNpZ25lZCBjaGFyICpwYXRoLAogCQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiLCBpbnQgeGlkKTsKK2V4dGVybiBpbnQgbWRmb3VyKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBFX21kNGhhc2goY29uc3QgdW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpwMTYpOworZXh0ZXJuIHZvaWQgU01CZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAorCQkJdW5zaWduZWQgY2hhciAqcDI0KTsKK2V4dGVybiB2b2lkIEVfUDE2KHVuc2lnbmVkIGNoYXIgKnAxNCwgdW5zaWduZWQgY2hhciAqcDE2KTsKK2V4dGVybiB2b2lkIEVfUDI0KHVuc2lnbmVkIGNoYXIgKnAyMSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCisJCQl1bnNpZ25lZCBjaGFyICpwMjQpOwogI2VuZGlmCQkJLyogX0NJRlNQUk9UT19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDMxMDZmNWUuLjkwNGFhNDcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0xMzYsOSArMTM2LDYgQEAKIAkJfQogCX0KIAotCWlmIChzZXMtPnN0YXR1cyA9PSBDaWZzRXhpdGluZykKLQkJcmV0dXJuIC1FSU87Ci0KIAkvKgogCSAqIEdpdmUgZGVtdWx0aXBsZXggdGhyZWFkIHVwIHRvIDEwIHNlY29uZHMgdG8gcmVjb25uZWN0LCBzaG91bGQgYmUKIAkgKiBncmVhdGVyIHRoYW4gY2lmcyBzb2NrZXQgdGltZW91dCB3aGljaCBpcyA3IHNlY29uZHMKQEAgLTE1Niw3ICsxNTMsNyBAQAogCQkgKiByZXRyeWluZyB1bnRpbCBwcm9jZXNzIGlzIGtpbGxlZCBvciBzZXJ2ZXIgY29tZXMKIAkJICogYmFjayBvbi1saW5lCiAJCSAqLwotCQlpZiAoIXRjb24tPnJldHJ5IHx8IHNlcy0+c3RhdHVzID09IENpZnNFeGl0aW5nKSB7CisJCWlmICghdGNvbi0+cmV0cnkpIHsKIAkJCWNGWUkoMSwgImdhdmUgdXAgd2FpdGluZyBvbiByZWNvbm5lY3QgaW4gc21iX2luaXQiKTsKIAkJCXJldHVybiAtRUhPU1RET1dOOwogCQl9CkBAIC00OTE0LDcgKzQ5MTEsNiBAQAogCQkgICBfX3UxNiBmaWQsIF9fdTMyIHBpZF9vZl9vcGVuZXIsIGJvb2wgU2V0QWxsb2NhdGlvbikKIHsKIAlzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JlcSAqcFNNQiAgPSBOVUxMOwotCWNoYXIgKmRhdGFfb2Zmc2V0OwogCXN0cnVjdCBmaWxlX2VuZF9vZl9maWxlX2luZm8gKnBhcm1fZGF0YTsKIAlpbnQgcmMgPSAwOwogCV9fdTE2IHBhcmFtcywgcGFyYW1fb2Zmc2V0LCBvZmZzZXQsIGJ5dGVfY291bnQsIGNvdW50OwpAQCAtNDkzOCw4ICs0OTM0LDYgQEAKIAlwYXJhbV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JlcSwgRmlkKSAtIDQ7CiAJb2Zmc2V0ID0gcGFyYW1fb2Zmc2V0ICsgcGFyYW1zOwogCi0JZGF0YV9vZmZzZXQgPSAoY2hhciAqKSAoJnBTTUItPmhkci5Qcm90b2NvbCkgKyBvZmZzZXQ7Ci0KIAljb3VudCA9IHNpemVvZihzdHJ1Y3QgZmlsZV9lbmRfb2ZfZmlsZV9pbmZvKTsKIAlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwogCS8qIEJCIGZpbmQgZXhhY3QgbWF4IFNNQiBQRFUgZnJvbSBzZXNzIHN0cnVjdHVyZSBCQiAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAwY2MzYjgxLi44ZDZjMTdhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtNTUsOSArNTUsNiBAQAogLyogU01CIGVjaG8gInRpbWVvdXQiIC0tIEZJWE1FOiB0dW5hYmxlPyAqLwogI2RlZmluZSBTTUJfRUNIT19JTlRFUlZBTCAoNjAgKiBIWikKIAotZXh0ZXJuIHZvaWQgU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqYzgsCi0JCQkgdW5zaWduZWQgY2hhciAqcDI0KTsKLQogZXh0ZXJuIG1lbXBvb2xfdCAqY2lmc19yZXFfcG9vbHA7CiAKIHN0cnVjdCBzbWJfdm9sIHsKQEAgLTg3LDYgKzg0LDcgQEAKIAlib29sIG5vX3hhdHRyOjE7ICAgLyogc2V0IGlmIHhhdHRyIChFQSkgc3VwcG9ydCBzaG91bGQgYmUgZGlzYWJsZWQqLwogCWJvb2wgc2VydmVyX2lubzoxOyAvKiB1c2UgaW5vZGUgbnVtYmVycyBmcm9tIHNlcnZlciBpZSBVbmlxdWVJZCAqLwogCWJvb2wgZGlyZWN0X2lvOjE7CisJYm9vbCBzdHJpY3RfaW86MTsgLyogc3RyaWN0IGNhY2hlIGJlaGF2aW9yICovCiAJYm9vbCByZW1hcDoxOyAgICAgIC8qIHNldCB0byByZW1hcCBzZXZlbiByZXNlcnZlZCBjaGFycyBpbiBmaWxlbmFtZXMgKi8KIAlib29sIHBvc2l4X3BhdGhzOjE7IC8qIHVuc2V0IHRvIG5vdCBhc2sgZm9yIHBvc2l4IHBhdGhuYW1lcy4gKi8KIAlib29sIG5vX2xpbnV4X2V4dDoxOwpAQCAtMzM5LDggKzMzNywxMyBAQAogCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvLCBlY2hvLndvcmspOwogCi0JLyogbm8gbmVlZCB0byBwaW5nIGlmIHdlIGdvdCBhIHJlc3BvbnNlIHJlY2VudGx5ICovCi0JaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHNlcnZlci0+bHN0cnAgKyBTTUJfRUNIT19JTlRFUlZBTCAtIEhaKSkKKwkvKgorCSAqIFdlIGNhbm5vdCBzZW5kIGFuIGVjaG8gdW50aWwgdGhlIE5FR09USUFURV9QUk9UT0NPTCByZXF1ZXN0IGlzCisJICogZG9uZSwgd2hpY2ggaXMgaW5kaWNhdGVkIGJ5IG1heEJ1ZiAhPSAwLiBBbHNvLCBubyBuZWVkIHRvIHBpbmcgaWYKKwkgKiB3ZSBnb3QgYSByZXNwb25zZSByZWNlbnRseQorCSAqLworCWlmIChzZXJ2ZXItPm1heEJ1ZiA9PSAwIHx8CisJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHNlcnZlci0+bHN0cnAgKyBTTUJfRUNIT19JTlRFUlZBTCAtIEhaKSkKIAkJZ290byByZXF1ZXVlX2VjaG87CiAKIAlyYyA9IENJRlNTTUJFY2hvKHNlcnZlcik7CkBAIC01ODAsMTQgKzU4MywyMyBAQAogCQllbHNlIGlmIChyZWNvbm5lY3QgPT0gMSkKIAkJCWNvbnRpbnVlOwogCi0JCWxlbmd0aCArPSA0OyAvKiBhY2NvdW50IGZvciByZmMxMDAyIGhkciAqLworCQl0b3RhbF9yZWFkICs9IDQ7IC8qIGFjY291bnQgZm9yIHJmYzEwMDIgaGRyICovCiAKKwkJZHVtcF9zbWIoc21iX2J1ZmZlciwgdG90YWxfcmVhZCk7CiAKLQkJZHVtcF9zbWIoc21iX2J1ZmZlciwgbGVuZ3RoKTsKLQkJaWYgKGNoZWNrU01CKHNtYl9idWZmZXIsIHNtYl9idWZmZXItPk1pZCwgdG90YWxfcmVhZCs0KSkgewotCQkJY2lmc19kdW1wX21lbSgiQmFkIFNNQjogIiwgc21iX2J1ZmZlciwgNDgpOwotCQkJY29udGludWU7Ci0JCX0KKwkJLyoKKwkJICogV2Uga25vdyB0aGF0IHdlIHJlY2VpdmVkIGVub3VnaCB0byBnZXQgdG8gdGhlIE1JRCBhcyB3ZQorCQkgKiBjaGVja2VkIHRoZSBwZHVfbGVuZ3RoIGVhcmxpZXIuIE5vdyBjaGVjayB0byBzZWUKKwkJICogaWYgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciBpcyBPSy4gV2UgYm9ycm93IHRoZSBsZW5ndGgKKwkJICogdmFyIGZvciB0aGUgcmVzdCBvZiB0aGUgbG9vcCB0byBhdm9pZCBhIG5ldyBzdGFjayB2YXIuCisJCSAqCisJCSAqIDQ4IGJ5dGVzIGlzIGVub3VnaCB0byBkaXNwbGF5IHRoZSBoZWFkZXIgYW5kIGEgbGl0dGxlIGJpdAorCQkgKiBpbnRvIHRoZSBwYXlsb2FkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisJCSAqLworCQlsZW5ndGggPSBjaGVja1NNQihzbWJfYnVmZmVyLCBzbWJfYnVmZmVyLT5NaWQsIHRvdGFsX3JlYWQpOworCQlpZiAobGVuZ3RoICE9IDApCisJCQljaWZzX2R1bXBfbWVtKCJCYWQgU01COiAiLCBzbWJfYnVmZmVyLAorCQkJCQltaW5fdCh1bnNpZ25lZCBpbnQsIHRvdGFsX3JlYWQsIDQ4KSk7CiAKIAkJbWlkX2VudHJ5ID0gTlVMTDsKIAkJc2VydmVyLT5sc3RycCA9IGppZmZpZXM7CkBAIC01OTksNyArNjExLDggQEAKIAkJCWlmICgobWlkX2VudHJ5LT5taWQgPT0gc21iX2J1ZmZlci0+TWlkKSAmJgogCQkJICAgIChtaWRfZW50cnktPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgJiYKIAkJCSAgICAobWlkX2VudHJ5LT5jb21tYW5kID09IHNtYl9idWZmZXItPkNvbW1hbmQpKSB7Ci0JCQkJaWYgKGNoZWNrMm5kVDIoc21iX2J1ZmZlcixzZXJ2ZXItPm1heEJ1ZikgPiAwKSB7CisJCQkJaWYgKGxlbmd0aCA9PSAwICYmCisJCQkJICAgY2hlY2sybmRUMihzbWJfYnVmZmVyLCBzZXJ2ZXItPm1heEJ1ZikgPiAwKSB7CiAJCQkJCS8qIFdlIGhhdmUgYSBtdWx0aXBhcnQgdHJhbnNhY3QyIHJlc3AgKi8KIAkJCQkJaXNNdWx0aVJzcCA9IHRydWU7CiAJCQkJCWlmIChtaWRfZW50cnktPnJlc3BfYnVmKSB7CkBAIC02MzQsMTIgKzY0NywxNyBAQAogCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYgPSBzbWJfYnVmZmVyOwogCQkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPSBpc0xhcmdlQnVmOwogbXVsdGlfdDJfZm5kOgotCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPSBNSURfUkVTUE9OU0VfUkVDRUlWRUQ7Ci0JCQkJbGlzdF9kZWxfaW5pdCgmbWlkX2VudHJ5LT5xaGVhZCk7Ci0JCQkJbWlkX2VudHJ5LT5jYWxsYmFjayhtaWRfZW50cnkpOworCQkJCWlmIChsZW5ndGggPT0gMCkKKwkJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9CisJCQkJCQkJTUlEX1JFU1BPTlNFX1JFQ0VJVkVEOworCQkJCWVsc2UKKwkJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9CisJCQkJCQkJTUlEX1JFU1BPTlNFX01BTEZPUk1FRDsKICNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKIAkJCQltaWRfZW50cnktPndoZW5fcmVjZWl2ZWQgPSBqaWZmaWVzOwogI2VuZGlmCisJCQkJbGlzdF9kZWxfaW5pdCgmbWlkX2VudHJ5LT5xaGVhZCk7CisJCQkJbWlkX2VudHJ5LT5jYWxsYmFjayhtaWRfZW50cnkpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJbWlkX2VudHJ5ID0gTlVMTDsKQEAgLTY1NSw2ICs2NzMsOSBAQAogCQkJCWVsc2UKIAkJCQkJc21hbGxidWYgPSBOVUxMOwogCQkJfQorCQl9IGVsc2UgaWYgKGxlbmd0aCAhPSAwKSB7CisJCQkvKiByZXNwb25zZSBzYW5pdHkgY2hlY2tzIGZhaWxlZCAqLworCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAoIWlzX3ZhbGlkX29wbG9ja19icmVhayhzbWJfYnVmZmVyLCBzZXJ2ZXIpICYmCiAJCQkgICAhaXNNdWx0aVJzcCkgewogCQkJY0VSUk9SKDEsICJObyB0YXNrIHRvIHdha2UsIHVua25vd24gZnJhbWUgcmVjZWl2ZWQhICIKQEAgLTEzNDQsNiArMTM2NSw4IEBACiAJCQl2b2wtPmRpcmVjdF9pbyA9IDE7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImZvcmNlZGlyZWN0aW8iLCAxMykgPT0gMCkgewogCQkJdm9sLT5kaXJlY3RfaW8gPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzdHJpY3RjYWNoZSIsIDExKSA9PSAwKSB7CisJCQl2b2wtPnN0cmljdF9pbyA9IDE7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgIm5vYWMiLCA0KSA9PSAwKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDSUZTOiBNb3VudCBvcHRpb24gbm9hYyBub3QgIgogCQkJCSJzdXBwb3J0ZWQuIEluc3RlYWQgc2V0ICIKQEAgLTI1ODQsNiArMjYwNyw4IEBACiAJaWYgKHB2b2x1bWVfaW5mby0+bXVsdGl1c2VyKQogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSAoQ0lGU19NT1VOVF9NVUxUSVVTRVIgfAogCQkJCQkgICAgQ0lGU19NT1VOVF9OT19QRVJNKTsKKwlpZiAocHZvbHVtZV9pbmZvLT5zdHJpY3RfaW8pCisJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfU1RSSUNUX0lPOwogCWlmIChwdm9sdW1lX2luZm8tPmRpcmVjdF9pbykgewogCQljRllJKDEsICJtb3VudGluZyBzaGFyZSB1c2luZyBkaXJlY3QgaS9vIik7CiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfRElSRUNUX0lPOwpAQCAtMjk4NSw3ICszMDEwLDggQEAKIAkJCQkJIGJjY19wdHIpOwogCQllbHNlCiAjZW5kaWYgLyogQ0lGU19XRUFLX1BXX0hBU0ggKi8KLQkJU01CTlRlbmNyeXB0KHRjb24tPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksIGJjY19wdHIpOworCQlyYyA9IFNNQk5UZW5jcnlwdCh0Y29uLT5wYXNzd29yZCwgc2VzLT5zZXJ2ZXItPmNyeXB0a2V5LAorCQkJCQliY2NfcHRyKTsKIAogCQliY2NfcHRyICs9IENJRlNfQVVUSF9SRVNQX1NJWkU7CiAJCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklDT0RFKSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGQ3ZDY1YTcuLmU5NjRiMWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0zNDYsNyArMzQ2LDYgQEAKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCB0Y29uX2xpbmsgKnRsaW5rOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZSA9IE5VTEw7Ci0Jc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGU7CiAJY2hhciAqZnVsbF9wYXRoID0gTlVMTDsKIAlib29sIHBvc2l4X29wZW5fb2sgPSBmYWxzZTsKIAlfX3UxNiBuZXRmaWQ7CkBAIC0zNjEsOCArMzYwLDYgQEAKIAl9CiAJdGNvbiA9IHRsaW5rX3Rjb24odGxpbmspOwogCi0JcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTg0OCw3ICs4NDUsNyBAQAogfQogCiAvKiB1cGRhdGUgdGhlIGZpbGUgc2l6ZSAoaWYgbmVlZGVkKSBhZnRlciBhIHdyaXRlICovCi1zdGF0aWMgdm9pZAordm9pZAogY2lmc191cGRhdGVfZW9mKHN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSwgbG9mZl90IG9mZnNldCwKIAkJICAgICAgdW5zaWduZWQgaW50IGJ5dGVzX3dyaXR0ZW4pCiB7CkBAIC0xMTQ2LDcgKzExNDMsNiBAQAogCWNoYXIgKndyaXRlX2RhdGE7CiAJaW50IHJjID0gLUVGQVVMVDsKIAlpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7Ci0Jc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKm9wZW5fZmlsZTsKIApAQCAtMTE1NCw3ICsxMTUwLDYgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7Ci0JY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCiAJb2Zmc2V0ICs9IChsb2ZmX3QpZnJvbTsKIAl3cml0ZV9kYXRhID0ga21hcChwYWdlKTsKQEAgLTE2MTksMTMgKzE2MTQsMjE1IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50CitjaWZzX3dyaXRlX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQoreworCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CisJCXBhZ2VzW2ldID0gYWxsb2NfcGFnZShfX0dGUF9ISUdITUVNKTsKKwkJaWYgKCFwYWdlc1tpXSkgeworCQkJLyoKKwkJCSAqIHNhdmUgbnVtYmVyIG9mIHBhZ2VzIHdlIGhhdmUgYWxyZWFkeSBhbGxvY2F0ZWQgYW5kCisJCQkgKiByZXR1cm4gd2l0aCBFTk9NRU0gZXJyb3IKKwkJCSAqLworCQkJbnVtX3BhZ2VzID0gaTsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7CisKK2Vycm9yOgorCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKKwkJcHV0X3BhZ2UocGFnZXNbaV0pOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZQorc2l6ZV90IGdldF9udW1wYWdlcyhjb25zdCBzaXplX3Qgd3NpemUsIGNvbnN0IHNpemVfdCBsZW4sIHNpemVfdCAqY3VyX2xlbikKK3sKKwlzaXplX3QgbnVtX3BhZ2VzOworCXNpemVfdCBjbGVuOworCisJY2xlbiA9IG1pbl90KGNvbnN0IHNpemVfdCwgbGVuLCB3c2l6ZSk7CisJbnVtX3BhZ2VzID0gY2xlbiAvIFBBR0VfQ0FDSEVfU0laRTsKKwlpZiAoY2xlbiAlIFBBR0VfQ0FDSEVfU0laRSkKKwkJbnVtX3BhZ2VzKys7CisKKwlpZiAoY3VyX2xlbikKKwkJKmN1cl9sZW4gPSBjbGVuOworCisJcmV0dXJuIG51bV9wYWdlczsKK30KKworc3RhdGljIHNzaXplX3QKK2NpZnNfaW92ZWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50IHdyaXR0ZW47CisJdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsIG5wYWdlcywgaTsKKwlzaXplX3QgY29waWVkLCBsZW4sIGN1cl9sZW47CisJc3NpemVfdCB0b3RhbF93cml0dGVuID0gMDsKKwlzdHJ1Y3Qga3ZlYyAqdG9fc2VuZDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXN0cnVjdCBpb3ZfaXRlciBpdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBjaWZzRmlsZUluZm8gKm9wZW5fZmlsZTsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOworCWludCB4aWQsIHJjOworCisJbGVuID0gaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCXJjID0gZ2VuZXJpY193cml0ZV9jaGVja3MoZmlsZSwgcG9mZnNldCwgJmxlbiwgMCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKKwludW1fcGFnZXMgPSBnZXRfbnVtcGFnZXMoY2lmc19zYi0+d3NpemUsIGxlbiwgJmN1cl9sZW4pOworCisJcGFnZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZXMgKikqbnVtX3BhZ2VzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRvX3NlbmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZlYykqKG51bV9wYWdlcyArIDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRvX3NlbmQpIHsKKwkJa2ZyZWUocGFnZXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyYyA9IGNpZnNfd3JpdGVfYWxsb2NhdGVfcGFnZXMocGFnZXMsIG51bV9wYWdlcyk7CisJaWYgKHJjKSB7CisJCWtmcmVlKHBhZ2VzKTsKKwkJa2ZyZWUodG9fc2VuZCk7CisJCXJldHVybiByYzsKKwl9CisKKwl4aWQgPSBHZXRYaWQoKTsKKwlvcGVuX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcFRjb24gPSB0bGlua190Y29uKG9wZW5fZmlsZS0+dGxpbmspOworCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKworCWlvdl9pdGVyX2luaXQoJml0LCBpb3YsIG5yX3NlZ3MsIGxlbiwgMCk7CisJbnBhZ2VzID0gbnVtX3BhZ2VzOworCisJZG8geworCQlzaXplX3Qgc2F2ZV9sZW4gPSBjdXJfbGVuOworCQlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJCWNvcGllZCA9IG1pbl90KGNvbnN0IHNpemVfdCwgY3VyX2xlbiwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJCWNvcGllZCA9IGlvdl9pdGVyX2NvcHlfZnJvbV91c2VyKHBhZ2VzW2ldLCAmaXQsIDAsCisJCQkJCQkJIGNvcGllZCk7CisJCQljdXJfbGVuIC09IGNvcGllZDsKKwkJCWlvdl9pdGVyX2FkdmFuY2UoJml0LCBjb3BpZWQpOworCQkJdG9fc2VuZFtpKzFdLmlvdl9iYXNlID0ga21hcChwYWdlc1tpXSk7CisJCQl0b19zZW5kW2krMV0uaW92X2xlbiA9IGNvcGllZDsKKwkJfQorCisJCWN1cl9sZW4gPSBzYXZlX2xlbiAtIGN1cl9sZW47CisKKwkJZG8geworCQkJaWYgKG9wZW5fZmlsZS0+aW52YWxpZEhhbmRsZSkgeworCQkJCXJjID0gY2lmc19yZW9wZW5fZmlsZShvcGVuX2ZpbGUsIGZhbHNlKTsKKwkJCQlpZiAocmMgIT0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlyYyA9IENJRlNTTUJXcml0ZTIoeGlkLCBwVGNvbiwgb3Blbl9maWxlLT5uZXRmaWQsCisJCQkJCSAgIGN1cl9sZW4sICpwb2Zmc2V0LCAmd3JpdHRlbiwKKwkJCQkJICAgdG9fc2VuZCwgbnBhZ2VzLCAwKTsKKwkJfSB3aGlsZSAocmMgPT0gLUVBR0FJTik7CisKKwkJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKQorCQkJa3VubWFwKHBhZ2VzW2ldKTsKKworCQlpZiAod3JpdHRlbikgeworCQkJbGVuIC09IHdyaXR0ZW47CisJCQl0b3RhbF93cml0dGVuICs9IHdyaXR0ZW47CisJCQljaWZzX3VwZGF0ZV9lb2YoQ0lGU19JKGlub2RlKSwgKnBvZmZzZXQsIHdyaXR0ZW4pOworCQkJKnBvZmZzZXQgKz0gd3JpdHRlbjsKKwkJfSBlbHNlIGlmIChyYyA8IDApIHsKKwkJCWlmICghdG90YWxfd3JpdHRlbikKKwkJCQl0b3RhbF93cml0dGVuID0gcmM7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGdldCBsZW5ndGggYW5kIG51bWJlciBvZiBrdmVjcyBvZiB0aGUgbmV4dCB3cml0ZSAqLworCQlucGFnZXMgPSBnZXRfbnVtcGFnZXMoY2lmc19zYi0+d3NpemUsIGxlbiwgJmN1cl9sZW4pOworCX0gd2hpbGUgKGxlbiA+IDApOworCisJaWYgKHRvdGFsX3dyaXR0ZW4gPiAwKSB7CisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWlmICgqcG9mZnNldCA+IGlub2RlLT5pX3NpemUpCisJCQlpX3NpemVfd3JpdGUoaW5vZGUsICpwb2Zmc2V0KTsKKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCX0KKworCWNpZnNfc3RhdHNfYnl0ZXNfd3JpdHRlbihwVGNvbiwgdG90YWxfd3JpdHRlbik7CisJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKKwkJcHV0X3BhZ2UocGFnZXNbaV0pOworCWtmcmVlKHRvX3NlbmQpOworCWtmcmVlKHBhZ2VzKTsKKwlGcmVlWGlkKHhpZCk7CisJcmV0dXJuIHRvdGFsX3dyaXR0ZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNpZnNfdXNlcl93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCit7CisJc3NpemVfdCB3cml0dGVuOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwkvKgorCSAqIEJCIC0gb3B0aW1pemUgdGhlIHdheSB3aGVuIHNpZ25pbmcgaXMgZGlzYWJsZWQuIFdlIGNhbiBkcm9wIHRoaXMKKwkgKiBleHRyYSBtZW1vcnktdG8tbWVtb3J5IGNvcHlpbmcgYW5kIHVzZSBpb3ZlYyBidWZmZXJzIGZvciBjb25zdHJ1Y3RpbmcKKwkgKiB3cml0ZSByZXF1ZXN0LgorCSAqLworCisJd3JpdHRlbiA9IGNpZnNfaW92ZWNfd3JpdGUoaW9jYi0+a2lfZmlscCwgaW92LCBucl9zZWdzLCAmcG9zKTsKKwlpZiAod3JpdHRlbiA+IDApIHsKKwkJQ0lGU19JKGlub2RlKS0+aW52YWxpZF9tYXBwaW5nID0gdHJ1ZTsKKwkJaW9jYi0+a2lfcG9zID0gcG9zOworCX0KKworCXJldHVybiB3cml0dGVuOworfQorCitzc2l6ZV90IGNpZnNfc3RyaWN0X3dyaXRldihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwlpZiAoQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwpCisJCXJldHVybiBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKKworCS8qCisJICogSW4gc3RyaWN0IGNhY2hlIG1vZGUgd2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSB0byB0aGUgc2VydmVyIGV4YWN0bHkKKwkgKiBmcm9tIHRoZSBwb3MgdG8gcG9zK2xlbi0xIHJhdGhlciB0aGFuIGZsdXNoIGFsbCBhZmZlY3RlZCBwYWdlcworCSAqIGJlY2F1c2UgaXQgbWF5IGNhdXNlIGEgZXJyb3Igd2l0aCBtYW5kYXRvcnkgbG9ja3Mgb24gdGhlc2UgcGFnZXMgYnV0CisJICogbm90IG9uIHRoZSByZWdpb24gZnJvbSBwb3MgdG8gcHBvcytsZW4tMS4KKwkgKi8KKworCXJldHVybiBjaWZzX3VzZXJfd3JpdGV2KGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKK30KKwogc3RhdGljIHNzaXplX3QKIGNpZnNfaW92ZWNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCiAJCSB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcG9mZnNldCkKIHsKIAlpbnQgcmM7CiAJaW50IHhpZDsKLQl1bnNpZ25lZCBpbnQgdG90YWxfcmVhZCwgYnl0ZXNfcmVhZCA9IDA7CisJc3NpemVfdCB0b3RhbF9yZWFkOworCXVuc2lnbmVkIGludCBieXRlc19yZWFkID0gMDsKIAlzaXplX3QgbGVuLCBjdXJfbGVuOwogCWludCBpb3Zfb2Zmc2V0ID0gMDsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9saW5rLmMgYi9mcy9jaWZzL2xpbmsuYwppbmRleCAzMDY3NjlkLi5lODgwNGQzIDEwMDY0NAotLS0gYS9mcy9jaWZzL2xpbmsuYworKysgYi9mcy9jaWZzL2xpbmsuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgImNpZnNwcm90by5oIgogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKICNpbmNsdWRlICJjaWZzX2ZzX3NiLmgiCi0jaW5jbHVkZSAibWQ1LmgiCiAKICNkZWZpbmUgQ0lGU19NRl9TWU1MSU5LX0xFTl9PRkZTRVQgKDQrMSkKICNkZWZpbmUgQ0lGU19NRl9TWU1MSU5LX01ENV9PRkZTRVQgKENJRlNfTUZfU1lNTElOS19MRU5fT0ZGU0VUKyg0KzEpKQpAQCAtNDcsNiArNDYsNDUgQEAKIAltZDVfaGFzaFsxMl0sIG1kNV9oYXNoWzEzXSwgbWQ1X2hhc2hbMTRdLCBtZDVfaGFzaFsxNV0KIAogc3RhdGljIGludAorc3ltbGlua19oYXNoKHVuc2lnbmVkIGludCBsaW5rX2xlbiwgY29uc3QgY2hhciAqbGlua19zdHIsIHU4ICptZDVfaGFzaCkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgaW50IHNpemU7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqbWQ1OworCXN0cnVjdCBzZGVzYyAqc2Rlc2NtZDU7CisKKwltZDUgPSBjcnlwdG9fYWxsb2Nfc2hhc2goIm1kNSIsIDAsIDApOworCWlmIChJU19FUlIobWQ1KSkgeworCQlyYyA9IFBUUl9FUlIobWQ1KTsKKwkJY0VSUk9SKDEsICIlczogQ3J5cHRvIG1kNSBhbGxvY2F0aW9uIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCXNpemUgPSBzaXplb2Yoc3RydWN0IHNoYXNoX2Rlc2MpICsgY3J5cHRvX3NoYXNoX2Rlc2NzaXplKG1kNSk7CisJc2Rlc2NtZDUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghc2Rlc2NtZDUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQljRVJST1IoMSwgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gc3ltbGlua19oYXNoX2VycjsKKwl9CisJc2Rlc2NtZDUtPnNoYXNoLnRmbSA9IG1kNTsKKwlzZGVzY21kNS0+c2hhc2guZmxhZ3MgPSAweDA7CisKKwlyYyA9IGNyeXB0b19zaGFzaF9pbml0KCZzZGVzY21kNS0+c2hhc2gpOworCWlmIChyYykgeworCQljRVJST1IoMSwgIiVzOiBDb3VsZCBub3QgaW5pdCBtZDUgc2hhc2hcbiIsIF9fZnVuY19fKTsKKwkJZ290byBzeW1saW5rX2hhc2hfZXJyOworCX0KKwljcnlwdG9fc2hhc2hfdXBkYXRlKCZzZGVzY21kNS0+c2hhc2gsIGxpbmtfc3RyLCBsaW5rX2xlbik7CisJcmMgPSBjcnlwdG9fc2hhc2hfZmluYWwoJnNkZXNjbWQ1LT5zaGFzaCwgbWQ1X2hhc2gpOworCitzeW1saW5rX2hhc2hfZXJyOgorCWNyeXB0b19mcmVlX3NoYXNoKG1kNSk7CisJa2ZyZWUoc2Rlc2NtZDUpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CiBDSUZTUGFyc2VNRlN5bWxpbmsoY29uc3QgdTggKmJ1ZiwKIAkJICAgdW5zaWduZWQgaW50IGJ1Zl9sZW4sCiAJCSAgIHVuc2lnbmVkIGludCAqX2xpbmtfbGVuLApAQCAtNTYsNyArOTQsNiBAQAogCXVuc2lnbmVkIGludCBsaW5rX2xlbjsKIAljb25zdCBjaGFyICptZDVfc3RyMTsKIAljb25zdCBjaGFyICpsaW5rX3N0cjsKLQlzdHJ1Y3QgTUQ1Q29udGV4dCBtZDVfY3R4OwogCXU4IG1kNV9oYXNoWzE2XTsKIAljaGFyIG1kNV9zdHIyWzM0XTsKIApAQCAtNzAsOSArMTA3LDExIEBACiAJaWYgKHJjICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY2lmc19NRDVfaW5pdCgmbWQ1X2N0eCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZtZDVfY3R4LCAoY29uc3QgdTggKilsaW5rX3N0ciwgbGlua19sZW4pOwotCWNpZnNfTUQ1X2ZpbmFsKG1kNV9oYXNoLCAmbWQ1X2N0eCk7CisJcmMgPSBzeW1saW5rX2hhc2gobGlua19sZW4sIGxpbmtfc3RyLCBtZDVfaGFzaCk7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIiVzOiBNRDUgaGFzaCBmYWlsdXJlOiAlZFxuIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAogCXNucHJpbnRmKG1kNV9zdHIyLCBzaXplb2YobWQ1X3N0cjIpLAogCQkgQ0lGU19NRl9TWU1MSU5LX01ENV9GT1JNQVQsCkBAIC05NCw5ICsxMzMsOSBAQAogc3RhdGljIGludAogQ0lGU0Zvcm1hdE1GU3ltbGluayh1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmX2xlbiwgY29uc3QgY2hhciAqbGlua19zdHIpCiB7CisJaW50IHJjOwogCXVuc2lnbmVkIGludCBsaW5rX2xlbjsKIAl1bnNpZ25lZCBpbnQgb2ZzOwotCXN0cnVjdCBNRDVDb250ZXh0IG1kNV9jdHg7CiAJdTggbWQ1X2hhc2hbMTZdOwogCiAJaWYgKGJ1Zl9sZW4gIT0gQ0lGU19NRl9TWU1MSU5LX0ZJTEVfU0laRSkKQEAgLTEwNyw5ICsxNDYsMTEgQEAKIAlpZiAobGlua19sZW4gPiBDSUZTX01GX1NZTUxJTktfTElOS19NQVhMRU4pCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCi0JY2lmc19NRDVfaW5pdCgmbWQ1X2N0eCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZtZDVfY3R4LCAoY29uc3QgdTggKilsaW5rX3N0ciwgbGlua19sZW4pOwotCWNpZnNfTUQ1X2ZpbmFsKG1kNV9oYXNoLCAmbWQ1X2N0eCk7CisJcmMgPSBzeW1saW5rX2hhc2gobGlua19sZW4sIGxpbmtfc3RyLCBtZDVfaGFzaCk7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIiVzOiBNRDUgaGFzaCBmYWlsdXJlOiAlZFxuIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAogCXNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwKIAkJIENJRlNfTUZfU1lNTElOS19MRU5fRk9STUFUIENJRlNfTUZfU1lNTElOS19NRDVfRk9STUFULApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9tZDQuYyBiL2ZzL2NpZnMvbWQ0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MjVjMjYuLjAwMDAwMDAKLS0tIGEvZnMvY2lmcy9tZDQuYworKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICAgVW5peCBTTUIvTmV0YmlvcyBpbXBsZW1lbnRhdGlvbi4KLSAgIFZlcnNpb24gMS45LgotICAgYSBpbXBsZW1lbnRhdGlvbiBvZiBNRDQgZGVzaWduZWQgZm9yIHVzZSBpbiB0aGUgU01CIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sCi0gICBDb3B5cmlnaHQgKEMpIEFuZHJldyBUcmlkZ2VsbCAxOTk3LTE5OTguCi0gICBNb2RpZmllZCBieSBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkgMjAwMi0yMDAzCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSAiY2lmc2VuY3J5cHQuaCIKLQotLyogTk9URTogVGhpcyBjb2RlIG1ha2VzIG5vIGF0dGVtcHQgdG8gYmUgZmFzdCEgKi8KLQotc3RhdGljIF9fdTMyCi1GKF9fdTMyIFgsIF9fdTMyIFksIF9fdTMyIFopCi17Ci0JcmV0dXJuIChYICYgWSkgfCAoKH5YKSAmIFopOwotfQotCi1zdGF0aWMgX191MzIKLUcoX191MzIgWCwgX191MzIgWSwgX191MzIgWikKLXsKLQlyZXR1cm4gKFggJiBZKSB8IChYICYgWikgfCAoWSAmIFopOwotfQotCi1zdGF0aWMgX191MzIKLUgoX191MzIgWCwgX191MzIgWSwgX191MzIgWikKLXsKLQlyZXR1cm4gWCBeIFkgXiBaOwotfQotCi1zdGF0aWMgX191MzIKLWxzaGlmdChfX3UzMiB4LCBpbnQgcykKLXsKLQl4ICY9IDB4RkZGRkZGRkY7Ci0JcmV0dXJuICgoeCA8PCBzKSAmIDB4RkZGRkZGRkYpIHwgKHggPj4gKDMyIC0gcykpOwotfQotCi0jZGVmaW5lIFJPVU5EMShhLGIsYyxkLGsscykgKCphKSA9IGxzaGlmdCgoKmEpICsgRigqYiwqYywqZCkgKyBYW2tdLCBzKQotI2RlZmluZSBST1VORDIoYSxiLGMsZCxrLHMpICgqYSkgPSBsc2hpZnQoKCphKSArIEcoKmIsKmMsKmQpICsgWFtrXSArIChfX3UzMikweDVBODI3OTk5LHMpCi0jZGVmaW5lIFJPVU5EMyhhLGIsYyxkLGsscykgKCphKSA9IGxzaGlmdCgoKmEpICsgSCgqYiwqYywqZCkgKyBYW2tdICsgKF9fdTMyKTB4NkVEOUVCQTEscykKLQotLyogdGhpcyBhcHBsaWVzIG1kNCB0byA2NCBieXRlIGNodW5rcyAqLwotc3RhdGljIHZvaWQKLW1kZm91cjY0KF9fdTMyICpNLCBfX3UzMiAqQSwgX191MzIgKkIsIF9fdTMyICpDLCBfX3UzMiAqRCkKLXsKLQlpbnQgajsKLQlfX3UzMiBBQSwgQkIsIENDLCBERDsKLQlfX3UzMiBYWzE2XTsKLQotCi0JZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCi0JCVhbal0gPSBNW2pdOwotCi0JQUEgPSAqQTsKLQlCQiA9ICpCOwotCUNDID0gKkM7Ci0JREQgPSAqRDsKLQotCVJPVU5EMShBLCBCLCBDLCBELCAwLCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgMSwgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDIsIDExKTsKLQlST1VORDEoQiwgQywgRCwgQSwgMywgMTkpOwotCVJPVU5EMShBLCBCLCBDLCBELCA0LCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgNSwgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDYsIDExKTsKLQlST1VORDEoQiwgQywgRCwgQSwgNywgMTkpOwotCVJPVU5EMShBLCBCLCBDLCBELCA4LCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgOSwgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDEwLCAxMSk7Ci0JUk9VTkQxKEIsIEMsIEQsIEEsIDExLCAxOSk7Ci0JUk9VTkQxKEEsIEIsIEMsIEQsIDEyLCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgMTMsIDcpOwotCVJPVU5EMShDLCBELCBBLCBCLCAxNCwgMTEpOwotCVJPVU5EMShCLCBDLCBELCBBLCAxNSwgMTkpOwotCi0JUk9VTkQyKEEsIEIsIEMsIEQsIDAsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA0LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgOCwgOSk7Ci0JUk9VTkQyKEIsIEMsIEQsIEEsIDEyLCAxMyk7Ci0JUk9VTkQyKEEsIEIsIEMsIEQsIDEsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA1LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgOSwgOSk7Ci0JUk9VTkQyKEIsIEMsIEQsIEEsIDEzLCAxMyk7Ci0JUk9VTkQyKEEsIEIsIEMsIEQsIDIsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA2LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgMTAsIDkpOwotCVJPVU5EMihCLCBDLCBELCBBLCAxNCwgMTMpOwotCVJPVU5EMihBLCBCLCBDLCBELCAzLCAzKTsKLQlST1VORDIoRCwgQSwgQiwgQywgNywgNSk7Ci0JUk9VTkQyKEMsIEQsIEEsIEIsIDExLCA5KTsKLQlST1VORDIoQiwgQywgRCwgQSwgMTUsIDEzKTsKLQotCVJPVU5EMyhBLCBCLCBDLCBELCAwLCAzKTsKLQlST1VORDMoRCwgQSwgQiwgQywgOCwgOSk7Ci0JUk9VTkQzKEMsIEQsIEEsIEIsIDQsIDExKTsKLQlST1VORDMoQiwgQywgRCwgQSwgMTIsIDE1KTsKLQlST1VORDMoQSwgQiwgQywgRCwgMiwgMyk7Ci0JUk9VTkQzKEQsIEEsIEIsIEMsIDEwLCA5KTsKLQlST1VORDMoQywgRCwgQSwgQiwgNiwgMTEpOwotCVJPVU5EMyhCLCBDLCBELCBBLCAxNCwgMTUpOwotCVJPVU5EMyhBLCBCLCBDLCBELCAxLCAzKTsKLQlST1VORDMoRCwgQSwgQiwgQywgOSwgOSk7Ci0JUk9VTkQzKEMsIEQsIEEsIEIsIDUsIDExKTsKLQlST1VORDMoQiwgQywgRCwgQSwgMTMsIDE1KTsKLQlST1VORDMoQSwgQiwgQywgRCwgMywgMyk7Ci0JUk9VTkQzKEQsIEEsIEIsIEMsIDExLCA5KTsKLQlST1VORDMoQywgRCwgQSwgQiwgNywgMTEpOwotCVJPVU5EMyhCLCBDLCBELCBBLCAxNSwgMTUpOwotCi0JKkEgKz0gQUE7Ci0JKkIgKz0gQkI7Ci0JKkMgKz0gQ0M7Ci0JKkQgKz0gREQ7Ci0KLQkqQSAmPSAweEZGRkZGRkZGOwotCSpCICY9IDB4RkZGRkZGRkY7Ci0JKkMgJj0gMHhGRkZGRkZGRjsKLQkqRCAmPSAweEZGRkZGRkZGOwotCi0JZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCi0JCVhbal0gPSAwOwotfQotCi1zdGF0aWMgdm9pZAotY29weTY0KF9fdTMyICpNLCB1bnNpZ25lZCBjaGFyICppbikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlNW2ldID0gKGluW2kgKiA0ICsgM10gPDwgMjQpIHwgKGluW2kgKiA0ICsgMl0gPDwgMTYpIHwKLQkJICAgIChpbltpICogNCArIDFdIDw8IDgpIHwgKGluW2kgKiA0ICsgMF0gPDwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5NCh1bnNpZ25lZCBjaGFyICpvdXQsIF9fdTMyIHgpCi17Ci0Jb3V0WzBdID0geCAmIDB4RkY7Ci0Jb3V0WzFdID0gKHggPj4gOCkgJiAweEZGOwotCW91dFsyXSA9ICh4ID4+IDE2KSAmIDB4RkY7Ci0Jb3V0WzNdID0gKHggPj4gMjQpICYgMHhGRjsKLX0KLQotLyogcHJvZHVjZSBhIG1kNCBtZXNzYWdlIGRpZ2VzdCBmcm9tIGRhdGEgb2YgbGVuZ3RoIG4gYnl0ZXMgKi8KLXZvaWQKLW1kZm91cih1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbikKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdOwotCV9fdTMyIE1bMTZdOwotCV9fdTMyIGIgPSBuICogODsKLQlpbnQgaTsKLQlfX3UzMiBBID0gMHg2NzQ1MjMwMTsKLQlfX3UzMiBCID0gMHhlZmNkYWI4OTsKLQlfX3UzMiBDID0gMHg5OGJhZGNmZTsKLQlfX3UzMiBEID0gMHgxMDMyNTQ3NjsKLQotCXdoaWxlIChuID4gNjQpIHsKLQkJY29weTY0KE0sIGluKTsKLQkJbWRmb3VyNjQoTSwgJkEsICZCLCAmQywgJkQpOwotCQlpbiArPSA2NDsKLQkJbiAtPSA2NDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0JCWJ1ZltpXSA9IDA7Ci0JbWVtY3B5KGJ1ZiwgaW4sIG4pOwotCWJ1ZltuXSA9IDB4ODA7Ci0KLQlpZiAobiA8PSA1NSkgewotCQljb3B5NChidWYgKyA1NiwgYik7Ci0JCWNvcHk2NChNLCBidWYpOwotCQltZGZvdXI2NChNLCAmQSwgJkIsICZDLCAmRCk7Ci0JfSBlbHNlIHsKLQkJY29weTQoYnVmICsgMTIwLCBiKTsKLQkJY29weTY0KE0sIGJ1Zik7Ci0JCW1kZm91cjY0KE0sICZBLCAmQiwgJkMsICZEKTsKLQkJY29weTY0KE0sIGJ1ZiArIDY0KTsKLQkJbWRmb3VyNjQoTSwgJkEsICZCLCAmQywgJkQpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLQkJYnVmW2ldID0gMDsKLQljb3B5NjQoTSwgYnVmKTsKLQotCWNvcHk0KG91dCwgQSk7Ci0JY29weTQob3V0ICsgNCwgQik7Ci0JY29weTQob3V0ICsgOCwgQyk7Ci0JY29weTQob3V0ICsgMTIsIEQpOwotCi0JQSA9IEIgPSBDID0gRCA9IDA7Ci19CmRpZmYgLS1naXQgYS9mcy9jaWZzL21kNS5jIGIvZnMvY2lmcy9tZDUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThiNjZhNS4uMDAwMDAwMAotLS0gYS9mcy9jaWZzL21kNS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzY2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgTUQ1IG1lc3NhZ2UtZGlnZXN0IGFsZ29yaXRobS4KLSAqIFRoZSBhbGdvcml0aG0gaXMgZHVlIHRvIFJvbiBSaXZlc3QuICBUaGlzIGNvZGUgd2FzCi0gKiB3cml0dGVuIGJ5IENvbGluIFBsdW1iIGluIDE5OTMsIG5vIGNvcHlyaWdodCBpcyBjbGFpbWVkLgotICogVGhpcyBjb2RlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluOyBkbyB3aXRoIGl0IHdoYXQgeW91IHdpc2guCi0gKgotICogRXF1aXZhbGVudCBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCi0gKiBUaGlzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIGFnYWluc3QgdGhhdCwgYW5kIGlzIGVxdWl2YWxlbnQsCi0gKiBleGNlcHQgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIHR3byBwYWdlcyBvZiBsZWdhbGVzZQotICogd2l0aCBldmVyeSBjb3B5LgotICoKLSAqIFRvIGNvbXB1dGUgdGhlIG1lc3NhZ2UgZGlnZXN0IG9mIGEgY2h1bmsgb2YgYnl0ZXMsIGRlY2xhcmUgYW4KLSAqIE1ENUNvbnRleHQgc3RydWN0dXJlLCBwYXNzIGl0IHRvIGNpZnNfTUQ1X2luaXQsIGNhbGwgY2lmc19NRDVfdXBkYXRlIGFzCi0gKiBuZWVkZWQgb24gYnVmZmVycyBmdWxsIG9mIGJ5dGVzLCBhbmQgdGhlbiBjYWxsIGNpZnNfTUQ1X2ZpbmFsLCB3aGljaAotICogd2lsbCBmaWxsIGEgc3VwcGxpZWQgMTYtYnl0ZSBhcnJheSB3aXRoIHRoZSBkaWdlc3QuCi0gKi8KLQotLyogVGhpcyBjb2RlIHNsaWdodGx5IG1vZGlmaWVkIHRvIGZpdCBpbnRvIFNhbWJhIGJ5Ci0gICBhYmFydGxldEBzYW1iYS5vcmcgSnVuIDIwMDEKLSAgIGFuZCB0byBmaXQgdGhlIGNpZnMgdmZzIGJ5Ci0gICBTdGV2ZSBGcmVuY2ggc2ZyZW5jaEB1cy5pYm0uY29tICovCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlICJtZDUuaCIKLQotc3RhdGljIHZvaWQgTUQ1VHJhbnNmb3JtKF9fdTMyIGJ1Zls0XSwgX191MzIgY29uc3QgaW5bMTZdKTsKLQotLyoKLSAqIE5vdGU6IHRoaXMgY29kZSBpcyBoYXJtbGVzcyBvbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzLgotICovCi1zdGF0aWMgdm9pZAotYnl0ZVJldmVyc2UodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25ncykKLXsKLQlfX3UzMiB0OwotCWRvIHsKLQkJdCA9IChfX3UzMikgKCh1bnNpZ25lZCkgYnVmWzNdIDw8IDggfCBidWZbMl0pIDw8IDE2IHwKLQkJICAgICgodW5zaWduZWQpIGJ1ZlsxXSA8PCA4IHwgYnVmWzBdKTsKLQkJKihfX3UzMiAqKSBidWYgPSB0OwotCQlidWYgKz0gNDsKLQl9IHdoaWxlICgtLWxvbmdzKTsKLX0KLQotLyoKLSAqIFN0YXJ0IE1ENSBhY2N1bXVsYXRpb24uICBTZXQgYml0IGNvdW50IHRvIDAgYW5kIGJ1ZmZlciB0byBteXN0ZXJpb3VzCi0gKiBpbml0aWFsaXphdGlvbiBjb25zdGFudHMuCi0gKi8KLXZvaWQKLWNpZnNfTUQ1X2luaXQoc3RydWN0IE1ENUNvbnRleHQgKmN0eCkKLXsKLQljdHgtPmJ1ZlswXSA9IDB4Njc0NTIzMDE7Ci0JY3R4LT5idWZbMV0gPSAweGVmY2RhYjg5OwotCWN0eC0+YnVmWzJdID0gMHg5OGJhZGNmZTsKLQljdHgtPmJ1ZlszXSA9IDB4MTAzMjU0NzY7Ci0KLQljdHgtPmJpdHNbMF0gPSAwOwotCWN0eC0+Yml0c1sxXSA9IDA7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgY29udGV4dCB0byByZWZsZWN0IHRoZSBjb25jYXRlbmF0aW9uIG9mIGFub3RoZXIgYnVmZmVyIGZ1bGwKLSAqIG9mIGJ5dGVzLgotICovCi12b2lkCi1jaWZzX01ENV91cGRhdGUoc3RydWN0IE1ENUNvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmLCB1bnNpZ25lZCBsZW4pCi17Ci0JcmVnaXN0ZXIgX191MzIgdDsKLQotCS8qIFVwZGF0ZSBiaXRjb3VudCAqLwotCi0JdCA9IGN0eC0+Yml0c1swXTsKLQlpZiAoKGN0eC0+Yml0c1swXSA9IHQgKyAoKF9fdTMyKSBsZW4gPDwgMykpIDwgdCkKLQkJY3R4LT5iaXRzWzFdKys7CS8qIENhcnJ5IGZyb20gbG93IHRvIGhpZ2ggKi8KLQljdHgtPmJpdHNbMV0gKz0gbGVuID4+IDI5OwotCi0JdCA9ICh0ID4+IDMpICYgMHgzZjsJLyogQnl0ZXMgYWxyZWFkeSBpbiBzaHNJbmZvLT5kYXRhICovCi0KLQkvKiBIYW5kbGUgYW55IGxlYWRpbmcgb2RkLXNpemVkIGNodW5rcyAqLwotCi0JaWYgKHQpIHsKLQkJdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopIGN0eC0+aW4gKyB0OwotCi0JCXQgPSA2NCAtIHQ7Ci0JCWlmIChsZW4gPCB0KSB7Ci0JCQltZW1tb3ZlKHAsIGJ1ZiwgbGVuKTsKLQkJCXJldHVybjsKLQkJfQotCQltZW1tb3ZlKHAsIGJ1ZiwgdCk7Ci0JCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKLQkJTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAoX191MzIgKikgY3R4LT5pbik7Ci0JCWJ1ZiArPSB0OwotCQlsZW4gLT0gdDsKLQl9Ci0JLyogUHJvY2VzcyBkYXRhIGluIDY0LWJ5dGUgY2h1bmtzICovCi0KLQl3aGlsZSAobGVuID49IDY0KSB7Ci0JCW1lbW1vdmUoY3R4LT5pbiwgYnVmLCA2NCk7Ci0JCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKLQkJTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAoX191MzIgKikgY3R4LT5pbik7Ci0JCWJ1ZiArPSA2NDsKLQkJbGVuIC09IDY0OwotCX0KLQotCS8qIEhhbmRsZSBhbnkgcmVtYWluaW5nIGJ5dGVzIG9mIGRhdGEuICovCi0KLQltZW1tb3ZlKGN0eC0+aW4sIGJ1ZiwgbGVuKTsKLX0KLQotLyoKLSAqIEZpbmFsIHdyYXB1cCAtIHBhZCB0byA2NC1ieXRlIGJvdW5kYXJ5IHdpdGggdGhlIGJpdCBwYXR0ZXJuCi0gKiAxIDAqICg2NC1iaXQgY291bnQgb2YgYml0cyBwcm9jZXNzZWQsIE1TQi1maXJzdCkKLSAqLwotdm9pZAotY2lmc19NRDVfZmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbMTZdLCBzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4KQotewotCXVuc2lnbmVkIGludCBjb3VudDsKLQl1bnNpZ25lZCBjaGFyICpwOwotCi0JLyogQ29tcHV0ZSBudW1iZXIgb2YgYnl0ZXMgbW9kIDY0ICovCi0JY291bnQgPSAoY3R4LT5iaXRzWzBdID4+IDMpICYgMHgzRjsKLQotCS8qIFNldCB0aGUgZmlyc3QgY2hhciBvZiBwYWRkaW5nIHRvIDB4ODAuICBUaGlzIGlzIHNhZmUgc2luY2UgdGhlcmUgaXMKLQkgICBhbHdheXMgYXQgbGVhc3Qgb25lIGJ5dGUgZnJlZSAqLwotCXAgPSBjdHgtPmluICsgY291bnQ7Ci0JKnArKyA9IDB4ODA7Ci0KLQkvKiBCeXRlcyBvZiBwYWRkaW5nIG5lZWRlZCB0byBtYWtlIDY0IGJ5dGVzICovCi0JY291bnQgPSA2NCAtIDEgLSBjb3VudDsKLQotCS8qIFBhZCBvdXQgdG8gNTYgbW9kIDY0ICovCi0JaWYgKGNvdW50IDwgOCkgewotCQkvKiBUd28gbG90cyBvZiBwYWRkaW5nOiAgUGFkIHRoZSBmaXJzdCBibG9jayB0byA2NCBieXRlcyAqLwotCQltZW1zZXQocCwgMCwgY291bnQpOwotCQlieXRlUmV2ZXJzZShjdHgtPmluLCAxNik7Ci0JCU1ENVRyYW5zZm9ybShjdHgtPmJ1ZiwgKF9fdTMyICopIGN0eC0+aW4pOwotCi0JCS8qIE5vdyBmaWxsIHRoZSBuZXh0IGJsb2NrIHdpdGggNTYgYnl0ZXMgKi8KLQkJbWVtc2V0KGN0eC0+aW4sIDAsIDU2KTsKLQl9IGVsc2UgewotCQkvKiBQYWQgYmxvY2sgdG8gNTYgYnl0ZXMgKi8KLQkJbWVtc2V0KHAsIDAsIGNvdW50IC0gOCk7Ci0JfQotCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE0KTsKLQotCS8qIEFwcGVuZCBsZW5ndGggaW4gYml0cyBhbmQgdHJhbnNmb3JtICovCi0JKChfX3UzMiAqKSBjdHgtPmluKVsxNF0gPSBjdHgtPmJpdHNbMF07Ci0JKChfX3UzMiAqKSBjdHgtPmluKVsxNV0gPSBjdHgtPmJpdHNbMV07Ci0KLQlNRDVUcmFuc2Zvcm0oY3R4LT5idWYsIChfX3UzMiAqKSBjdHgtPmluKTsKLQlieXRlUmV2ZXJzZSgodW5zaWduZWQgY2hhciAqKSBjdHgtPmJ1ZiwgNCk7Ci0JbWVtbW92ZShkaWdlc3QsIGN0eC0+YnVmLCAxNik7Ci0JbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsJLyogSW4gY2FzZSBpdCdzIHNlbnNpdGl2ZSAqLwotfQotCi0vKiBUaGUgZm91ciBjb3JlIGZ1bmN0aW9ucyAtIEYxIGlzIG9wdGltaXplZCBzb21ld2hhdCAqLwotCi0vKiAjZGVmaW5lIEYxKHgsIHksIHopICh4ICYgeSB8IH54ICYgeikgKi8KLSNkZWZpbmUgRjEoeCwgeSwgeikgKHogXiAoeCAmICh5IF4geikpKQotI2RlZmluZSBGMih4LCB5LCB6KSBGMSh6LCB4LCB5KQotI2RlZmluZSBGMyh4LCB5LCB6KSAoeCBeIHkgXiB6KQotI2RlZmluZSBGNCh4LCB5LCB6KSAoeSBeICh4IHwgfnopKQotCi0vKiBUaGlzIGlzIHRoZSBjZW50cmFsIHN0ZXAgaW4gdGhlIE1ENSBhbGdvcml0aG0uICovCi0jZGVmaW5lIE1ENVNURVAoZiwgdywgeCwgeSwgeiwgZGF0YSwgcykgXAotCSh3ICs9IGYoeCwgeSwgeikgKyBkYXRhLCAgdyA9IHc8PHMgfCB3Pj4oMzItcyksICB3ICs9IHgpCi0KLS8qCi0gKiBUaGUgY29yZSBvZiB0aGUgTUQ1IGFsZ29yaXRobSwgdGhpcyBhbHRlcnMgYW4gZXhpc3RpbmcgTUQ1IGhhc2ggdG8KLSAqIHJlZmxlY3QgdGhlIGFkZGl0aW9uIG9mIDE2IGxvbmd3b3JkcyBvZiBuZXcgZGF0YS4gIGNpZnNfTUQ1X3VwZGF0ZSBibG9ja3MKLSAqIHRoZSBkYXRhIGFuZCBjb252ZXJ0cyBieXRlcyBpbnRvIGxvbmd3b3JkcyBmb3IgdGhpcyByb3V0aW5lLgotICovCi1zdGF0aWMgdm9pZAotTUQ1VHJhbnNmb3JtKF9fdTMyIGJ1Zls0XSwgX191MzIgY29uc3QgaW5bMTZdKQotewotCXJlZ2lzdGVyIF9fdTMyIGEsIGIsIGMsIGQ7Ci0KLQlhID0gYnVmWzBdOwotCWIgPSBidWZbMV07Ci0JYyA9IGJ1ZlsyXTsKLQlkID0gYnVmWzNdOwotCi0JTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bMF0gKyAweGQ3NmFhNDc4LCA3KTsKLQlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxXSArIDB4ZThjN2I3NTYsIDEyKTsKLQlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsyXSArIDB4MjQyMDcwZGIsIDE3KTsKLQlNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpblszXSArIDB4YzFiZGNlZWUsIDIyKTsKLQlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpbls0XSArIDB4ZjU3YzBmYWYsIDcpOwotCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzVdICsgMHg0Nzg3YzYyYSwgMTIpOwotCU1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzZdICsgMHhhODMwNDYxMywgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzddICsgMHhmZDQ2OTUwMSwgMjIpOwotCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzhdICsgMHg2OTgwOThkOCwgNyk7Ci0JTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bOV0gKyAweDhiNDRmN2FmLCAxMik7Ci0JTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMTBdICsgMHhmZmZmNWJiMSwgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzExXSArIDB4ODk1Y2Q3YmUsIDIyKTsKLQlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblsxMl0gKyAweDZiOTAxMTIyLCA3KTsKLQlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxM10gKyAweGZkOTg3MTkzLCAxMik7Ci0JTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMTRdICsgMHhhNjc5NDM4ZSwgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzE1XSArIDB4NDliNDA4MjEsIDIyKTsKLQotCU1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhmNjFlMjU2MiwgNSk7Ci0JTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bNl0gKyAweGMwNDBiMzQwLCA5KTsKLQlNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxMV0gKyAweDI2NWU1YTUxLCAxNCk7Ci0JTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bMF0gKyAweGU5YjZjN2FhLCAyMCk7Ci0JTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bNV0gKyAweGQ2MmYxMDVkLCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsxMF0gKyAweDAyNDQxNDUzLCA5KTsKLQlNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweGQ4YTFlNjgxLCAxNCk7Ci0JTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bNF0gKyAweGU3ZDNmYmM4LCAyMCk7Ci0JTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bOV0gKyAweDIxZTFjZGU2LCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsxNF0gKyAweGMzMzcwN2Q2LCA5KTsKLQlNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblszXSArIDB4ZjRkNTBkODcsIDE0KTsKLQlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpbls4XSArIDB4NDU1YTE0ZWQsIDIwKTsKLQlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpblsxM10gKyAweGE5ZTNlOTA1LCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsyXSArIDB4ZmNlZmEzZjgsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzddICsgMHg2NzZmMDJkOSwgMTQpOwotCU1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzEyXSArIDB4OGQyYTRjOGEsIDIwKTsKLQotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzVdICsgMHhmZmZhMzk0MiwgNCk7Ci0JTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bOF0gKyAweDg3NzFmNjgxLCAxMSk7Ci0JTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bMTFdICsgMHg2ZDlkNjEyMiwgMTYpOwotCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzE0XSArIDB4ZmRlNTM4MGMsIDIzKTsKLQlNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxXSArIDB4YTRiZWVhNDQsIDQpOwotCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzRdICsgMHg0YmRlY2ZhOSwgMTEpOwotCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzddICsgMHhmNmJiNGI2MCwgMTYpOwotCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzEwXSArIDB4YmViZmJjNzAsIDIzKTsKLQlNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxM10gKyAweDI4OWI3ZWM2LCA0KTsKLQlNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpblswXSArIDB4ZWFhMTI3ZmEsIDExKTsKLQlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblszXSArIDB4ZDRlZjMwODUsIDE2KTsKLQlNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpbls2XSArIDB4MDQ4ODFkMDUsIDIzKTsKLQlNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpbls5XSArIDB4ZDlkNGQwMzksIDQpOwotCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzEyXSArIDB4ZTZkYjk5ZTUsIDExKTsKLQlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweDFmYTI3Y2Y4LCAxNik7Ci0JTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMl0gKyAweGM0YWM1NjY1LCAyMyk7Ci0KLQlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpblswXSArIDB4ZjQyOTIyNDQsIDYpOwotCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzddICsgMHg0MzJhZmY5NywgMTApOwotCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzE0XSArIDB4YWI5NDIzYTcsIDE1KTsKLQlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpbls1XSArIDB4ZmM5M2EwMzksIDIxKTsKLQlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpblsxMl0gKyAweDY1NWI1OWMzLCA2KTsKLQlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblszXSArIDB4OGYwY2NjOTIsIDEwKTsKLQlNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsxMF0gKyAweGZmZWZmNDdkLCAxNSk7Ci0JTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMV0gKyAweDg1ODQ1ZGQxLCAyMSk7Ci0JTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bOF0gKyAweDZmYTg3ZTRmLCA2KTsKLQlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsxNV0gKyAweGZlMmNlNmUwLCAxMCk7Ci0JTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGEzMDE0MzE0LCAxNSk7Ci0JTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMTNdICsgMHg0ZTA4MTFhMSwgMjEpOwotCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzRdICsgMHhmNzUzN2U4MiwgNik7Ci0JTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bMTFdICsgMHhiZDNhZjIzNSwgMTApOwotCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzJdICsgMHgyYWQ3ZDJiYiwgMTUpOwotCU1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzldICsgMHhlYjg2ZDM5MSwgMjEpOwotCi0JYnVmWzBdICs9IGE7Ci0JYnVmWzFdICs9IGI7Ci0JYnVmWzJdICs9IGM7Ci0JYnVmWzNdICs9IGQ7Ci19Ci0KLSNpZiAwICAgLyogY3VycmVudGx5IHVudXNlZCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gdGhlIHJmYyAyMTA0IHZlcnNpb24gb2YgaG1hY19tZDUgaW5pdGlhbGlzYXRpb24uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkCi1obWFjX21kNV9pbml0X3JmYzIxMDQodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKLQkJICAgICAgc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpCi17Ci0JaW50IGk7Ci0KLQkvKiBpZiBrZXkgaXMgbG9uZ2VyIHRoYW4gNjQgYnl0ZXMgcmVzZXQgaXQgdG8ga2V5PU1ENShrZXkpICovCi0JaWYgKGtleV9sZW4gPiA2NCkgewotCQl1bnNpZ25lZCBjaGFyIHRrWzE2XTsKLQkJc3RydWN0IE1ENUNvbnRleHQgdGN0eDsKLQotCQljaWZzX01ENV9pbml0KCZ0Y3R4KTsKLQkJY2lmc19NRDVfdXBkYXRlKCZ0Y3R4LCBrZXksIGtleV9sZW4pOwotCQljaWZzX01ENV9maW5hbCh0aywgJnRjdHgpOwotCi0JCWtleSA9IHRrOwotCQlrZXlfbGVuID0gMTY7Ci0JfQotCi0JLyogc3RhcnQgb3V0IGJ5IHN0b3Jpbmcga2V5IGluIHBhZHMgKi8KLQltZW1zZXQoY3R4LT5rX2lwYWQsIDAsIHNpemVvZihjdHgtPmtfaXBhZCkpOwotCW1lbXNldChjdHgtPmtfb3BhZCwgMCwgc2l6ZW9mKGN0eC0+a19vcGFkKSk7Ci0JbWVtY3B5KGN0eC0+a19pcGFkLCBrZXksIGtleV9sZW4pOwotCW1lbWNweShjdHgtPmtfb3BhZCwga2V5LCBrZXlfbGVuKTsKLQotCS8qIFhPUiBrZXkgd2l0aCBpcGFkIGFuZCBvcGFkIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWN0eC0+a19pcGFkW2ldIF49IDB4MzY7Ci0JCWN0eC0+a19vcGFkW2ldIF49IDB4NWM7Ci0JfQotCi0JY2lmc19NRDVfaW5pdCgmY3R4LT5jdHgpOwotCWNpZnNfTUQ1X3VwZGF0ZSgmY3R4LT5jdHgsIGN0eC0+a19pcGFkLCA2NCk7Ci19Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gdGhlIG1pY3Jvc29mdCB2ZXJzaW9uIG9mIGhtYWNfbWQ1IGluaXRpYWxpc2F0aW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1obWFjX21kNV9pbml0X2xpbUtfdG9fNjQoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKLQkJCSBzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCkKLXsKLQlpbnQgaTsKLQotCS8qIGlmIGtleSBpcyBsb25nZXIgdGhhbiA2NCBieXRlcyB0cnVuY2F0ZSBpdCAqLwotCWlmIChrZXlfbGVuID4gNjQpCi0JCWtleV9sZW4gPSA2NDsKLQotCS8qIHN0YXJ0IG91dCBieSBzdG9yaW5nIGtleSBpbiBwYWRzICovCi0JbWVtc2V0KGN0eC0+a19pcGFkLCAwLCBzaXplb2YoY3R4LT5rX2lwYWQpKTsKLQltZW1zZXQoY3R4LT5rX29wYWQsIDAsIHNpemVvZihjdHgtPmtfb3BhZCkpOwotCW1lbWNweShjdHgtPmtfaXBhZCwga2V5LCBrZXlfbGVuKTsKLQltZW1jcHkoY3R4LT5rX29wYWQsIGtleSwga2V5X2xlbik7Ci0KLQkvKiBYT1Iga2V5IHdpdGggaXBhZCBhbmQgb3BhZCB2YWx1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQljdHgtPmtfaXBhZFtpXSBePSAweDM2OwotCQljdHgtPmtfb3BhZFtpXSBePSAweDVjOwotCX0KLQotCWNpZnNfTUQ1X2luaXQoJmN0eC0+Y3R4KTsKLQljaWZzX01ENV91cGRhdGUoJmN0eC0+Y3R4LCBjdHgtPmtfaXBhZCwgNjQpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSB1cGRhdGUgaG1hY19tZDUgImlubmVyIiBidWZmZXIKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAotaG1hY19tZDVfdXBkYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCB0ZXh0X2xlbiwKLQkJc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpCi17Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHgtPmN0eCwgdGV4dCwgdGV4dF9sZW4pOwkvKiB0aGVuIHRleHQgb2YgZGF0YWdyYW0gKi8KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gZmluaXNoIG9mZiBobWFjX21kNSAiaW5uZXIiIGJ1ZmZlciBhbmQgZ2VuZXJhdGUgb3V0ZXIgb25lLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1obWFjX21kNV9maW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIHN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KQotewotCXN0cnVjdCBNRDVDb250ZXh0IGN0eF9vOwotCi0JY2lmc19NRDVfZmluYWwoZGlnZXN0LCAmY3R4LT5jdHgpOwotCi0JY2lmc19NRDVfaW5pdCgmY3R4X28pOwotCWNpZnNfTUQ1X3VwZGF0ZSgmY3R4X28sIGN0eC0+a19vcGFkLCA2NCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHhfbywgZGlnZXN0LCAxNik7Ci0JY2lmc19NRDVfZmluYWwoZGlnZXN0LCAmY3R4X28pOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSBzaW5nbGUgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGFuIEhNQUMgTUQ1IGRpZ2VzdCBmcm9tIGRhdGEuCi0gdXNlIHRoZSBtaWNyb3NvZnQgaG1hY21kNSBpbml0IG1ldGhvZCBiZWNhdXNlIHRoZSBrZXkgaXMgMTYgYnl0ZXMuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgMCAvKiBjdXJyZW50bHkgdW51c2VkICovCi1zdGF0aWMgdm9pZAotaG1hY19tZDUodW5zaWduZWQgY2hhciBrZXlbMTZdLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JIHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCkKLXsKLQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgY3R4OwotCWhtYWNfbWQ1X2luaXRfbGltS190b182NChrZXksIDE2LCAmY3R4KTsKLQlpZiAoZGF0YV9sZW4gIT0gMCkKLQkJaG1hY19tZDVfdXBkYXRlKGRhdGEsIGRhdGFfbGVuLCAmY3R4KTsKLQotCWhtYWNfbWQ1X2ZpbmFsKGRpZ2VzdCwgJmN0eCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWQ1LmggYi9mcy9jaWZzL21kNS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmJhOGNiLi4wMDAwMDAwCi0tLSBhL2ZzL2NpZnMvbWQ1LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jaWZuZGVmIE1ENV9ICi0jZGVmaW5lIE1ENV9ICi0jaWZuZGVmIEhFQURFUl9NRDVfSAotLyogVHJ5IHRvIGF2b2lkIGNsYXNoZXMgd2l0aCBPcGVuU1NMICovCi0jZGVmaW5lIEhFQURFUl9NRDVfSAotI2VuZGlmCi0KLXN0cnVjdCBNRDVDb250ZXh0IHsKLQlfX3UzMiBidWZbNF07Ci0JX191MzIgYml0c1syXTsKLQl1bnNpZ25lZCBjaGFyIGluWzY0XTsKLX07Ci0jZW5kaWYJCQkJLyogIU1ENV9IICovCi0KLSNpZm5kZWYgX0hNQUNfTUQ1X0gKLXN0cnVjdCBITUFDTUQ1Q29udGV4dCB7Ci0Jc3RydWN0IE1ENUNvbnRleHQgY3R4OwotCXVuc2lnbmVkIGNoYXIga19pcGFkWzY1XTsKLQl1bnNpZ25lZCBjaGFyIGtfb3BhZFs2NV07Ci19OwotI2VuZGlmCQkJCS8qIF9ITUFDX01ENV9IICovCi0KLXZvaWQgY2lmc19NRDVfaW5pdChzdHJ1Y3QgTUQ1Q29udGV4dCAqY29udGV4dCk7Ci12b2lkIGNpZnNfTUQ1X3VwZGF0ZShzdHJ1Y3QgTUQ1Q29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmLAotCQkJdW5zaWduZWQgbGVuKTsKLXZvaWQgY2lmc19NRDVfZmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbMTZdLCBzdHJ1Y3QgTUQ1Q29udGV4dCAqY29udGV4dCk7Ci0KLS8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgY29tZSBmcm9tIGxpYi9obWFjbWQ1LmMgICovCi0KLS8qIHZvaWQgaG1hY19tZDVfaW5pdF9yZmMyMTA0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleV9sZW4sCi0JCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ki8KLXZvaWQgaG1hY19tZDVfaW5pdF9saW1LX3RvXzY0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleV9sZW4sCi0JCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ci12b2lkIGhtYWNfbWQ1X3VwZGF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgdGV4dF9sZW4sCi0JCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ci12b2lkIGhtYWNfbWQ1X2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpOwotLyogdm9pZCBobWFjX21kNSh1bnNpZ25lZCBjaGFyIGtleVsxNl0sIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKLQkJCXVuc2lnbmVkIGNoYXIgKmRpZ2VzdCk7Ki8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggYTA5ZTA3Ny4uMmE5MzBhNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTIzNiwxMCArMjM2LDcgQEAKIHsKIAlfX3UxNiBtaWQgPSAwOwogCV9fdTE2IGxhc3RfbWlkOwotCWludCAgIGNvbGxpc2lvbjsKLQotCWlmIChzZXJ2ZXIgPT0gTlVMTCkKLQkJcmV0dXJuIG1pZDsKKwlib29sIGNvbGxpc2lvbjsKIAogCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwogCWxhc3RfbWlkID0gc2VydmVyLT5DdXJyZW50TWlkOyAvKiB3ZSBkbyBub3Qgd2FudCB0byBsb29wIGZvcmV2ZXIgKi8KQEAgLTI1MiwyNCArMjQ5LDM4IEBACiAJKGFuZCBpdCB3b3VsZCBhbHNvIGhhdmUgdG8gaGF2ZSBiZWVuIGEgcmVxdWVzdCB0aGF0CiAJIGRpZCBub3QgdGltZSBvdXQpICovCiAJd2hpbGUgKHNlcnZlci0+Q3VycmVudE1pZCAhPSBsYXN0X21pZCkgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAJCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkX2VudHJ5OworCQl1bnNpZ25lZCBpbnQgbnVtX21pZHM7CiAKLQkJY29sbGlzaW9uID0gMDsKKwkJY29sbGlzaW9uID0gZmFsc2U7CiAJCWlmIChzZXJ2ZXItPkN1cnJlbnRNaWQgPT0gMCkKIAkJCXNlcnZlci0+Q3VycmVudE1pZCsrOwogCi0JCWxpc3RfZm9yX2VhY2godG1wLCAmc2VydmVyLT5wZW5kaW5nX21pZF9xKSB7Ci0JCQltaWRfZW50cnkgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IG1pZF9xX2VudHJ5LCBxaGVhZCk7Ci0KLQkJCWlmICgobWlkX2VudHJ5LT5taWQgPT0gc2VydmVyLT5DdXJyZW50TWlkKSAmJgotCQkJICAgIChtaWRfZW50cnktPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkpIHsKKwkJbnVtX21pZHMgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1pZF9lbnRyeSwgJnNlcnZlci0+cGVuZGluZ19taWRfcSwgcWhlYWQpIHsKKwkJCSsrbnVtX21pZHM7CisJCQlpZiAobWlkX2VudHJ5LT5taWQgPT0gc2VydmVyLT5DdXJyZW50TWlkICYmCisJCQkgICAgbWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKIAkJCQkvKiBUaGlzIG1pZCBpcyBpbiB1c2UsIHRyeSBhIGRpZmZlcmVudCBvbmUgKi8KLQkJCQljb2xsaXNpb24gPSAxOworCQkJCWNvbGxpc2lvbiA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJaWYgKGNvbGxpc2lvbiA9PSAwKSB7CisKKwkJLyoKKwkJICogaWYgd2UgaGF2ZSBtb3JlIHRoYW4gMzJrIG1pZHMgaW4gdGhlIGxpc3QsIHRoZW4gc29tZXRoaW5nCisJCSAqIGlzIHZlcnkgd3JvbmcuIFBvc3NpYmx5IGEgbG9jYWwgdXNlciBpcyB0cnlpbmcgdG8gRG9TIHRoZQorCQkgKiBib3ggYnkgaXNzdWluZyBsb25nLXJ1bm5pbmcgY2FsbHMgYW5kIFNJR0tJTEwnaW5nIHRoZW0uIElmCisJCSAqIHdlIGdldCB0byAyXjE2IG1pZHMgdGhlbiB3ZSdyZSBpbiBiaWcgdHJvdWJsZSBhcyB0aGlzCisJCSAqIGZ1bmN0aW9uIGNvdWxkIGxvb3AgZm9yZXZlci4KKwkJICoKKwkJICogR28gYWhlYWQgYW5kIGFzc2lnbiBvdXQgdGhlIG1pZCBpbiB0aGlzIHNpdHVhdGlvbiwgYnV0IGZvcmNlCisJCSAqIGFuIGV2ZW50dWFsIHJlY29ubmVjdCB0byBjbGVhbiBvdXQgdGhlIHBlbmRpbmdfbWlkX3EuCisJCSAqLworCQlpZiAobnVtX21pZHMgPiAzMjc2OCkKKwkJCXNlcnZlci0+dGNwU3RhdHVzID0gQ2lmc05lZWRSZWNvbm5lY3Q7CisKKwkJaWYgKCFjb2xsaXNpb24pIHsKIAkJCW1pZCA9IHNlcnZlci0+Q3VycmVudE1pZDsKIAkJCWJyZWFrOwogCQl9CkBAIC0zODEsMjkgKzM5MiwzMSBAQAogfQogCiBzdGF0aWMgaW50Ci1jaGVja1NNQmhkcihzdHJ1Y3Qgc21iX2hkciAqc21iLCBfX3UxNiBtaWQpCitjaGVja19zbWJfaGRyKHN0cnVjdCBzbWJfaGRyICpzbWIsIF9fdTE2IG1pZCkKIHsKLQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIHJlYWxseSBpcyBhbiBTTUIsIHRoYXQgaXQgaXMgYSByZXNwb25zZSwKLQkgICBhbmQgdGhhdCB0aGUgbWVzc2FnZSBpZHMgbWF0Y2ggKi8KLQlpZiAoKCooX19sZTMyICopIHNtYi0+UHJvdG9jb2wgPT0gY3B1X3RvX2xlMzIoMHg0MjRkNTNmZikpICYmCi0JCShtaWQgPT0gc21iLT5NaWQpKSB7Ci0JCWlmIChzbWItPkZsYWdzICYgU01CRkxHX1JFU1BPTlNFKQotCQkJcmV0dXJuIDA7Ci0JCWVsc2UgewotCQkvKiBvbmx5IG9uZSB2YWxpZCBjYXNlIHdoZXJlIHNlcnZlciBzZW5kcyB1cyByZXF1ZXN0ICovCi0JCQlpZiAoc21iLT5Db21tYW5kID09IFNNQl9DT01fTE9DS0lOR19BTkRYKQotCQkJCXJldHVybiAwOwotCQkJZWxzZQotCQkJCWNFUlJPUigxLCAiUmVjZWl2ZWQgUmVxdWVzdCBub3QgcmVzcG9uc2UiKTsKLQkJfQotCX0gZWxzZSB7IC8qIGJhZCBzaWduYXR1cmUgb3IgbWlkICovCi0JCWlmICgqKF9fbGUzMiAqKSBzbWItPlByb3RvY29sICE9IGNwdV90b19sZTMyKDB4NDI0ZDUzZmYpKQotCQkJY0VSUk9SKDEsICJCYWQgcHJvdG9jb2wgc3RyaW5nIHNpZ25hdHVyZSBoZWFkZXIgJXgiLAotCQkJCSoodW5zaWduZWQgaW50ICopIHNtYi0+UHJvdG9jb2wpOwotCQlpZiAobWlkICE9IHNtYi0+TWlkKQotCQkJY0VSUk9SKDEsICJNaWRzIGRvIG5vdCBtYXRjaCIpOworCS8qIGRvZXMgaXQgaGF2ZSB0aGUgcmlnaHQgU01CICJzaWduYXR1cmUiID8gKi8KKwlpZiAoKihfX2xlMzIgKikgc21iLT5Qcm90b2NvbCAhPSBjcHVfdG9fbGUzMigweDQyNGQ1M2ZmKSkgeworCQljRVJST1IoMSwgIkJhZCBwcm90b2NvbCBzdHJpbmcgc2lnbmF0dXJlIGhlYWRlciAweCV4IiwKKwkJCSoodW5zaWduZWQgaW50ICopc21iLT5Qcm90b2NvbCk7CisJCXJldHVybiAxOwogCX0KLQljRVJST1IoMSwgImJhZCBzbWIgZGV0ZWN0ZWQuIFRoZSBNaWQ9JWQiLCBzbWItPk1pZCk7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBtZXNzYWdlIGlkcyBtYXRjaCAqLworCWlmIChtaWQgIT0gc21iLT5NaWQpIHsKKwkJY0VSUk9SKDEsICJNaWRzIGRvIG5vdCBtYXRjaC4gcmVjZWl2ZWQ9JXUgZXhwZWN0ZWQ9JXUiLAorCQkJc21iLT5NaWQsIG1pZCk7CisJCXJldHVybiAxOworCX0KKworCS8qIGlmIGl0J3MgYSByZXNwb25zZSB0aGVuIGFjY2VwdCAqLworCWlmIChzbWItPkZsYWdzICYgU01CRkxHX1JFU1BPTlNFKQorCQlyZXR1cm4gMDsKKworCS8qIG9ubHkgb25lIHZhbGlkIGNhc2Ugd2hlcmUgc2VydmVyIHNlbmRzIHVzIHJlcXVlc3QgKi8KKwlpZiAoc21iLT5Db21tYW5kID09IFNNQl9DT01fTE9DS0lOR19BTkRYKQorCQlyZXR1cm4gMDsKKworCWNFUlJPUigxLCAiU2VydmVyIHNlbnQgcmVxdWVzdCwgbm90IHJlc3BvbnNlLiBtaWQ9JXUiLCBzbWItPk1pZCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQ0OCw3ICs0NjEsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoY2hlY2tTTUJoZHIoc21iLCBtaWQpKQorCWlmIChjaGVja19zbWJfaGRyKHNtYiwgbWlkKSkKIAkJcmV0dXJuIDE7CiAJY2xjX2xlbiA9IHNtYkNhbGNTaXplX0xFKHNtYik7CiAKQEAgLTQ2NSwyNSArNDc4LDI2IEBACiAJCQlpZiAoKCg0ICsgbGVuKSAmIDB4RkZGRikgPT0gKGNsY19sZW4gJiAweEZGRkYpKQogCQkJCXJldHVybiAwOyAvKiBiY2Mgd3JhcHBlZCAqLwogCQl9Ci0JCWNGWUkoMSwgIkNhbGN1bGF0ZWQgc2l6ZSAlZCB2cyBsZW5ndGggJWQgbWlzbWF0Y2ggZm9yIG1pZCAlZCIsCisJCWNGWUkoMSwgIkNhbGN1bGF0ZWQgc2l6ZSAldSB2cyBsZW5ndGggJXUgbWlzbWF0Y2ggZm9yIG1pZD0ldSIsCiAJCQkJY2xjX2xlbiwgNCArIGxlbiwgc21iLT5NaWQpOwotCQkvKiBXaW5kb3dzIFhQIGNhbiByZXR1cm4gYSBmZXcgYnl0ZXMgdG9vIG11Y2gsIHByZXN1bWFibHkKLQkJYW4gaWxsZWdhbCBwYWQsIGF0IHRoZSBlbmQgb2YgYnl0ZSByYW5nZSBsb2NrIHJlc3BvbnNlcwotCQlzbyB3ZSBhbGxvdyBmb3IgdGhhdCB0aHJlZSBieXRlIHBhZCwgYXMgbG9uZyBhcyBhY3R1YWwKLQkJcmVjZWl2ZWQgbGVuZ3RoIGlzIGFzIGxvbmcgb3IgbG9uZ2VyIHRoYW4gY2FsY3VsYXRlZCBsZW5ndGggKi8KLQkJLyogV2UgaGF2ZSBub3cgaGFkIHRvIGV4dGVuZCB0aGlzIG1vcmUsIHNpbmNlIHRoZXJlIGlzIGEKLQkJY2FzZSBpbiB3aGljaCBpdCBuZWVkcyB0byBiZSBiaWdnZXIgc3RpbGwgdG8gaGFuZGxlIGEKLQkJbWFsZm9ybWVkIHJlc3BvbnNlIHRvIHRyYW5zYWN0MiBmaW5kZmlyc3QgZnJvbSBXaW5YUCB3aGVuCi0JCWFjY2VzcyBkZW5pZWQgaXMgcmV0dXJuZWQgYW5kIHRodXMgYmNjIGFuZCB3Y3QgYXJlIHplcm8KLQkJYnV0IHNlcnZlciBzYXlzIGxlbmd0aCBpcyAweDIxIGJ5dGVzIHRvbyBsb25nIGFzIGlmIHRoZSBzZXJ2ZXIKLQkJZm9yZ2V0IHRvIHJlc2V0IHRoZSBzbWIgcmZjMTAwMSBsZW5ndGggd2hlbiBpdCByZXNldCB0aGUKLQkJd2N0IGFuZCBiY2MgdG8gbWluaW11bSBzaXplIGFuZCBkcm9wIHRoZSB0MiBwYXJtcyBhbmQgZGF0YSAqLwotCQlpZiAoKDQrbGVuID4gY2xjX2xlbikgJiYgKGxlbiA8PSBjbGNfbGVuICsgNTEyKSkKLQkJCXJldHVybiAwOwotCQllbHNlIHsKLQkJCWNFUlJPUigxLCAiUkZDMTAwMSBzaXplICVkIGJpZ2dlciB0aGFuIFNNQiBmb3IgTWlkPSVkIiwKKworCQlpZiAoNCArIGxlbiA8IGNsY19sZW4pIHsKKwkJCWNFUlJPUigxLCAiUkZDMTAwMSBzaXplICV1IHNtYWxsZXIgdGhhbiBTTUIgZm9yIG1pZD0ldSIsCiAJCQkJCWxlbiwgc21iLT5NaWQpOwogCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAobGVuID4gY2xjX2xlbiArIDUxMikgeworCQkJLyoKKwkJCSAqIFNvbWUgc2VydmVycyAoV2luZG93cyBYUCBpbiBwYXJ0aWN1bGFyKSBzZW5kIG1vcmUKKwkJCSAqIGRhdGEgdGhhbiB0aGUgbGVuZ3RocyBpbiB0aGUgU01CIHBhY2tldCB3b3VsZAorCQkJICogaW5kaWNhdGUgb24gY2VydGFpbiBjYWxscyAoYnl0ZSByYW5nZSBsb2NrcyBhbmQKKwkJCSAqIHRyYW5zMiBmaW5kIGZpcnN0IGNhbGxzIGluIHBhcnRpY3VsYXIpLiBXaGlsZSB0aGUKKwkJCSAqIGNsaWVudCBjYW4gaGFuZGxlIHN1Y2ggYSBmcmFtZSBieSBpZ25vcmluZyB0aGUKKwkJCSAqIHRyYWlsaW5nIGRhdGEsIHdlIGNob29zZSBsaW1pdCB0aGUgYW1vdW50IG9mIGV4dHJhCisJCQkgKiBkYXRhIHRvIDUxMiBieXRlcy4KKwkJCSAqLworCQkJY0VSUk9SKDEsICJSRkMxMDAxIHNpemUgJXUgbW9yZSB0aGFuIDUxMiBieXRlcyBsYXJnZXIgIgorCQkJCSAgInRoYW4gU01CIGZvciBtaWQ9JXUiLCBsZW4sIHNtYi0+TWlkKTsKKwkJCXJldHVybiAxOwogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9uZXRtaXNjLmMgYi9mcy9jaWZzL25ldG1pc2MuYwppbmRleCA4ZDkxODlmLi43OWY2NDFlIDEwMDY0NAotLS0gYS9mcy9jaWZzL25ldG1pc2MuYworKysgYi9mcy9jaWZzL25ldG1pc2MuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiB7CiAJaW50IHJjLCBhbGVuLCBzbGVuOwogCWNvbnN0IGNoYXIgKnBjdDsKLQljaGFyICplbmRwLCBzY29wZV9pZFsxM107CisJY2hhciBzY29wZV9pZFsxM107CiAJc3RydWN0IHNvY2thZGRyX2luICpzNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgZHN0OwogCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnM2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZHN0OwogCkBAIC0xOTcsOSArMTk3LDkgQEAKIAkJbWVtY3B5KHNjb3BlX2lkLCBwY3QgKyAxLCBzbGVuKTsKIAkJc2NvcGVfaWRbc2xlbl0gPSAnXDAnOwogCi0JCXM2LT5zaW42X3Njb3BlX2lkID0gKHUzMikgc2ltcGxlX3N0cnRvdWwocGN0LCAmZW5kcCwgMCk7Ci0JCWlmIChlbmRwICE9IHNjb3BlX2lkICsgc2xlbikKLQkJCXJldHVybiAwOworCQlyYyA9IHN0cmljdF9zdHJ0b3VsKHNjb3BlX2lkLCAwLAorCQkJCQkodW5zaWduZWQgbG9uZyAqKSZzNi0+c2luNl9zY29wZV9pZCk7CisJCXJjID0gKHJjID09IDApID8gMSA6IDA7CiAJfQogCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCA3ZjI1Y2MzLi5mOGU0Y2QyIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtNzY0LDcgKzc2NCw2IEBACiB7CiAJaW50IHJjID0gMDsKIAlpbnQgeGlkLCBpOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc0ZpbGUgPSBOVUxMOwogCWNoYXIgKmN1cnJlbnRfZW50cnk7CkBAIC03NzUsOCArNzc0LDYgQEAKIAogCXhpZCA9IEdldFhpZCgpOwogCi0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7Ci0KIAkvKgogCSAqIEVuc3VyZSBGaW5kRmlyc3QgZG9lc24ndCBmYWlsIGJlZm9yZSBkb2luZyBmaWxsZGlyKCkgZm9yICcuJyBhbmQKIAkgKiAnLi4nLiBPdGhlcndpc2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byBub3RpZnkgVkZTIGluIGNhc2Ugb2YgZmFpbHVyZS4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc2Vzcy5jIGIvZnMvY2lmcy9zZXNzLmMKaW5kZXggMWFkYzk2Mi4uMTY3NjU3MCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zZXNzLmMKKysrIGIvZnMvY2lmcy9zZXNzLmMKQEAgLTY1NiwxMyArNjU2LDEzIEBACiAKIAlpZiAodHlwZSA9PSBMQU5NQU4pIHsKICNpZmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKLQkJY2hhciBsbm1fc2Vzc2lvbl9rZXlbQ0lGU19TRVNTX0tFWV9TSVpFXTsKKwkJY2hhciBsbm1fc2Vzc2lvbl9rZXlbQ0lGU19BVVRIX1JFU1BfU0laRV07CiAKIAkJcFNNQi0+cmVxLmhkci5GbGFnczIgJj0gflNNQkZMRzJfVU5JQ09ERTsKIAogCQkvKiBubyBjYXBhYmlsaXRpZXMgZmxhZ3MgaW4gb2xkIGxhbm1hbiBuZWdvdGlhdGlvbiAqLwogCi0JCXBTTUItPm9sZF9yZXEuUGFzc3dvcmRMZW5ndGggPSBjcHVfdG9fbGUxNihDSUZTX1NFU1NfS0VZX1NJWkUpOworCQlwU01CLT5vbGRfcmVxLlBhc3N3b3JkTGVuZ3RoID0gY3B1X3RvX2xlMTYoQ0lGU19BVVRIX1JFU1BfU0laRSk7CiAKIAkJLyogQ2FsY3VsYXRlIGhhc2ggd2l0aCBwYXNzd29yZCBhbmQgY29weSBpbnRvIGJjY19wdHIuCiAJCSAqIEVuY3J5cHRpb24gS2V5IChzdG9yZWQgYXMgaW4gY3J5cHRrZXkpIGdldHMgdXNlZCBpZiB0aGUKQEAgLTY3NSw4ICs2NzUsOCBAQAogCQkJCQl0cnVlIDogZmFsc2UsIGxubV9zZXNzaW9uX2tleSk7CiAKIAkJc2VzLT5mbGFncyB8PSBDSUZTX1NFU19MQU5NQU47Ci0JCW1lbWNweShiY2NfcHRyLCAoY2hhciAqKWxubV9zZXNzaW9uX2tleSwgQ0lGU19TRVNTX0tFWV9TSVpFKTsKLQkJYmNjX3B0ciArPSBDSUZTX1NFU1NfS0VZX1NJWkU7CisJCW1lbWNweShiY2NfcHRyLCAoY2hhciAqKWxubV9zZXNzaW9uX2tleSwgQ0lGU19BVVRIX1JFU1BfU0laRSk7CisJCWJjY19wdHIgKz0gQ0lGU19BVVRIX1JFU1BfU0laRTsKIAogCQkvKiBjYW4gbm90IHNpZ24gaWYgTEFOTUFOIG5lZ290aWF0ZWQgc28gbm8gbmVlZAogCQl0byBjYWxjdWxhdGUgc2lnbmluZyBrZXk/IGJ1dCB3aGF0IGlmIHNlcnZlcgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJkZXMuYyBiL2ZzL2NpZnMvc21iZGVzLmMKaW5kZXggYjZiNmRjYi4uMDQ3MjE0OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zbWJkZXMuYworKysgYi9mcy9jaWZzL3NtYmRlcy5jCkBAIC00NSw3ICs0NSw2IEBACiAgICB1cCB3aXRoIGEgZGlmZmVyZW50IGFuc3dlciB0byB0aGUgb25lIGFib3ZlKQogKi8KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSAiY2lmc2VuY3J5cHQuaCIKICNkZWZpbmUgdWNoYXIgdW5zaWduZWQgY2hhcgogCiBzdGF0aWMgdWNoYXIgcGVybTFbNTZdID0geyA1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJlbmNyeXB0LmMgYi9mcy9jaWZzL3NtYmVuY3J5cHQuYwppbmRleCAxOTJlYTUxLi5iNTA0MWM4IDEwMDY0NAotLS0gYS9mcy9jaWZzL3NtYmVuY3J5cHQuYworKysgYi9mcy9jaWZzL3NtYmVuY3J5cHQuYwpAQCAtMzIsOSArMzIsOCBAQAogI2luY2x1ZGUgImNpZnNfdW5pY29kZS5oIgogI2luY2x1ZGUgImNpZnNwZHUuaCIKICNpbmNsdWRlICJjaWZzZ2xvYi5oIgotI2luY2x1ZGUgIm1kNS5oIgogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKLSNpbmNsdWRlICJjaWZzZW5jcnlwdC5oIgorI2luY2x1ZGUgImNpZnNwcm90by5oIgogCiAjaWZuZGVmIGZhbHNlCiAjZGVmaW5lIGZhbHNlIDAKQEAgLTQ4LDE0ICs0Nyw1OCBAQAogI2RlZmluZSBTU1ZBTFgoYnVmLHBvcyx2YWwpIChDVkFMKGJ1Zixwb3MpPSh2YWwpJjB4RkYsQ1ZBTChidWYscG9zKzEpPSh2YWwpPj44KQogI2RlZmluZSBTU1ZBTChidWYscG9zLHZhbCkgU1NWQUxYKChidWYpLChwb3MpLCgoX191MTYpKHZhbCkpKQogCi0vKlRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgY29tZSBmcm9tICBsaWJzbWIvc21iZW5jcnlwdC5jICAqLworLyogcHJvZHVjZSBhIG1kNCBtZXNzYWdlIGRpZ2VzdCBmcm9tIGRhdGEgb2YgbGVuZ3RoIG4gYnl0ZXMgKi8KK2ludAorbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm1kNF9oYXNoLCB1bnNpZ25lZCBjaGFyICpsaW5rX3N0ciwgaW50IGxpbmtfbGVuKQoreworCWludCByYzsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICptZDQ7CisJc3RydWN0IHNkZXNjICpzZGVzY21kNDsKIAotdm9pZCBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCXVuc2lnbmVkIGNoYXIgKnAyNCk7Ci12b2lkIEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNik7Ci1zdGF0aWMgdm9pZCBTTUJPV0ZlbmNyeXB0KHVuc2lnbmVkIGNoYXIgcGFzc3dkWzE2XSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgIHVuc2lnbmVkIGNoYXIgcDI0WzI0XSk7Ci12b2lkIFNNQk5UZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKmM4LCB1bnNpZ25lZCBjaGFyICpwMjQpOworCW1kNCA9IGNyeXB0b19hbGxvY19zaGFzaCgibWQ0IiwgMCwgMCk7CisJaWYgKElTX0VSUihtZDQpKSB7CisJCXJjID0gUFRSX0VSUihtZDQpOworCQljRVJST1IoMSwgIiVzOiBDcnlwdG8gbWQ0IGFsbG9jYXRpb24gZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hhc2hfZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3NpemUobWQ0KTsKKwlzZGVzY21kNCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZGVzY21kNCkgeworCQlyYyA9IC1FTk9NRU07CisJCWNFUlJPUigxLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIF9fZnVuY19fKTsKKwkJZ290byBtZGZvdXJfZXJyOworCX0KKwlzZGVzY21kNC0+c2hhc2gudGZtID0gbWQ0OworCXNkZXNjbWQ0LT5zaGFzaC5mbGFncyA9IDB4MDsKKworCXJjID0gY3J5cHRvX3NoYXNoX2luaXQoJnNkZXNjbWQ0LT5zaGFzaCk7CisJaWYgKHJjKSB7CisJCWNFUlJPUigxLCAiJXM6IENvdWxkIG5vdCBpbml0IG1kNCBzaGFzaFxuIiwgX19mdW5jX18pOworCQlnb3RvIG1kZm91cl9lcnI7CisJfQorCWNyeXB0b19zaGFzaF91cGRhdGUoJnNkZXNjbWQ0LT5zaGFzaCwgbGlua19zdHIsIGxpbmtfbGVuKTsKKwlyYyA9IGNyeXB0b19zaGFzaF9maW5hbCgmc2Rlc2NtZDQtPnNoYXNoLCBtZDRfaGFzaCk7CisKK21kZm91cl9lcnI6CisJY3J5cHRvX2ZyZWVfc2hhc2gobWQ0KTsKKwlrZnJlZShzZGVzY21kNCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIERvZXMgdGhlIGRlcyBlbmNyeXB0aW9uIGZyb20gdGhlIE5UIG9yIExNIE1ENCBoYXNoLiAqLworc3RhdGljIHZvaWQKK1NNQk9XRmVuY3J5cHQodW5zaWduZWQgY2hhciBwYXNzd2RbMTZdLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKKwkgICAgICB1bnNpZ25lZCBjaGFyIHAyNFsyNF0pCit7CisJdW5zaWduZWQgY2hhciBwMjFbMjFdOworCisJbWVtc2V0KHAyMSwgJ1wwJywgMjEpOworCisJbWVtY3B5KHAyMSwgcGFzc3dkLCAxNik7CisJRV9QMjQocDIxLCBjOCwgcDI0KTsKK30KIAogLyoKICAgIFRoaXMgaW1wbGVtZW50cyB0aGUgWC9PcGVuIFNNQiBwYXNzd29yZCBlbmNyeXB0aW9uCkBAIC0xMTgsOSArMTYxLDEwIEBACiAgKiBDcmVhdGVzIHRoZSBNRDQgSGFzaCBvZiB0aGUgdXNlcnMgcGFzc3dvcmQgaW4gTlQgVU5JQ09ERS4KICAqLwogCi12b2lkCitpbnQKIEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNikKIHsKKwlpbnQgcmM7CiAJaW50IGxlbjsKIAlfX3UxNiB3cHdkWzEyOV07CiAKQEAgLTEzOSw4ICsxODMsMTAgQEAKIAkvKiBDYWxjdWxhdGUgbGVuZ3RoIGluIGJ5dGVzICovCiAJbGVuID0gX215X3djc2xlbih3cHdkKSAqIHNpemVvZihfX3UxNik7CiAKLQltZGZvdXIocDE2LCAodW5zaWduZWQgY2hhciAqKSB3cHdkLCBsZW4pOworCXJjID0gbWRmb3VyKHAxNiwgKHVuc2lnbmVkIGNoYXIgKikgd3B3ZCwgbGVuKTsKIAltZW1zZXQod3B3ZCwgMCwgMTI5ICogMik7CisKKwlyZXR1cm4gcmM7CiB9CiAKICNpZiAwIC8qIGN1cnJlbnRseSB1bnVzZWQgKi8KQEAgLTIxMiwxOSArMjU4LDYgQEAKIH0KICNlbmRpZgogCi0vKiBEb2VzIHRoZSBkZXMgZW5jcnlwdGlvbiBmcm9tIHRoZSBOVCBvciBMTSBNRDQgaGFzaC4gKi8KLXN0YXRpYyB2b2lkCi1TTUJPV0ZlbmNyeXB0KHVuc2lnbmVkIGNoYXIgcGFzc3dkWzE2XSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JICAgICAgdW5zaWduZWQgY2hhciBwMjRbMjRdKQotewotCXVuc2lnbmVkIGNoYXIgcDIxWzIxXTsKLQotCW1lbXNldChwMjEsICdcMCcsIDIxKTsKLQotCW1lbWNweShwMjEsIHBhc3N3ZCwgMTYpOwotCUVfUDI0KHAyMSwgYzgsIHAyNCk7Ci19Ci0KIC8qIERvZXMgdGhlIGRlcyBlbmNyeXB0aW9uIGZyb20gdGhlIEZJUlNUIDggQllURVMgb2YgdGhlIE5UIG9yIExNIE1ENCBoYXNoLiAqLwogI2lmIDAgLyogY3VycmVudGx5IHVudXNlZCAqLwogc3RhdGljIHZvaWQKQEAgLTI0MiwxNiArMjc1LDIxIEBACiAjZW5kaWYKIAogLyogRG9lcyB0aGUgTlQgTUQ0IGhhc2ggdGhlbiBkZXMgZW5jcnlwdGlvbi4gKi8KLQotdm9pZAoraW50CiBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpjOCwgdW5zaWduZWQgY2hhciAqcDI0KQogeworCWludCByYzsKIAl1bnNpZ25lZCBjaGFyIHAyMVsyMV07CiAKIAltZW1zZXQocDIxLCAnXDAnLCAyMSk7CiAKLQlFX21kNGhhc2gocGFzc3dkLCBwMjEpOworCXJjID0gRV9tZDRoYXNoKHBhc3N3ZCwgcDIxKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlQgaGFzaCwgZXJyb3I6ICVkIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAlTTUJPV0ZlbmNyeXB0KHAyMSwgYzgsIHAyNCk7CisJcmV0dXJuIHJjOwogfQogCiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCmluZGV4IGMxY2NjYTEuLjQ2ZDg3NTZmIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTIzNiw5ICsyMzYsOSBAQAogCQlzZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNOZWVkUmVjb25uZWN0OwogCX0KIAotCWlmIChyYyA8IDApIHsKKwlpZiAocmMgPCAwICYmIHJjICE9IC1FSU5UUikKIAkJY0VSUk9SKDEsICJFcnJvciAlZCBzZW5kaW5nIGRhdGEgb24gc29ja2V0IHRvIHNlcnZlciIsIHJjKTsKLQl9IGVsc2UKKwllbHNlCiAJCXJjID0gMDsKIAogCS8qIERvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBidWZmZXIgYXMgYQpAQCAtMzU5LDYgKzM1OSwxMCBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCisJLyogZW5hYmxlIHNpZ25pbmcgaWYgc2VydmVyIHJlcXVpcmVzIGl0ICovCisJaWYgKHNlcnZlci0+c2VjTW9kZSAmIChTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpCisJCWluX2J1Zi0+RmxhZ3MyIHw9IFNNQkZMRzJfU0VDVVJJVFlfU0lHTkFUVVJFOworCiAJbXV0ZXhfbG9jaygmc2VydmVyLT5zcnZfbXV0ZXgpOwogCW1pZCA9IEFsbG9jTWlkUUVudHJ5KGluX2J1Ziwgc2VydmVyKTsKIAlpZiAobWlkID09IE5VTEwpIHsKQEAgLTQ1Myw2ICs0NTcsOSBAQAogCWNhc2UgTUlEX1JFVFJZX05FRURFRDoKIAkJcmMgPSAtRUFHQUlOOwogCQlicmVhazsKKwljYXNlIE1JRF9SRVNQT05TRV9NQUxGT1JNRUQ6CisJCXJjID0gLUVJTzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJY0VSUk9SKDEsICIlczogaW52YWxpZCBtaWQgc3RhdGUgbWlkPSVkIHN0YXRlPSVkIiwgX19mdW5jX18sCiAJCQltaWQtPm1pZCwgbWlkLT5taWRTdGF0ZSk7CkBAIC01NzAsMTcgKzU3NywzMyBAQAogI2VuZGlmCiAKIAltdXRleF91bmxvY2soJnNlcy0+c2VydmVyLT5zcnZfbXV0ZXgpOwotCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKIAotCWlmIChyYyA8IDApCisJaWYgKHJjIDwgMCkgeworCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CiAJCWdvdG8gb3V0OworCX0KIAotCWlmIChsb25nX29wID09IENJRlNfQVNZTkNfT1ApCisJaWYgKGxvbmdfb3AgPT0gQ0lGU19BU1lOQ19PUCkgeworCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CiAJCWdvdG8gb3V0OworCX0KIAogCXJjID0gd2FpdF9mb3JfcmVzcG9uc2Uoc2VzLT5zZXJ2ZXIsIG1pZFEpOwotCWlmIChyYyAhPSAwKQotCQlnb3RvIG91dDsKKwlpZiAocmMgIT0gMCkgeworCQlzZW5kX250X2NhbmNlbChzZXMtPnNlcnZlciwgaW5fYnVmLCBtaWRRKTsKKwkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCWlmIChtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKKwkJCW1pZFEtPmNhbGxiYWNrID0gRGVsZXRlTWlkUUVudHJ5OworCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKKwkJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7CisJCQl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCX0KKworCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKIAogCXJjID0gc3luY19taWRfcmVzdWx0KG1pZFEsIHNlcy0+c2VydmVyKTsKIAlpZiAocmMgIT0gMCkgewpAQCAtNzI0LDggKzc0NywxOSBAQAogCQlnb3RvIG91dDsKIAogCXJjID0gd2FpdF9mb3JfcmVzcG9uc2Uoc2VzLT5zZXJ2ZXIsIG1pZFEpOwotCWlmIChyYyAhPSAwKQotCQlnb3RvIG91dDsKKwlpZiAocmMgIT0gMCkgeworCQlzZW5kX250X2NhbmNlbChzZXMtPnNlcnZlciwgaW5fYnVmLCBtaWRRKTsKKwkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCWlmIChtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKKwkJCS8qIG5vIGxvbmdlciBjb25zaWRlcmVkIHRvIGJlICJpbi1mbGlnaHQiICovCisJCQltaWRRLT5jYWxsYmFjayA9IERlbGV0ZU1pZFFFbnRyeTsKKwkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOworCQkJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwl9CiAKIAlyYyA9IHN5bmNfbWlkX3Jlc3VsdChtaWRRLCBzZXMtPnNlcnZlcik7CiAJaWYgKHJjICE9IDApIHsKQEAgLTkyMiwxMCArOTU2LDIxIEBACiAJCQl9CiAJCX0KIAotCQlpZiAod2FpdF9mb3JfcmVzcG9uc2Uoc2VzLT5zZXJ2ZXIsIG1pZFEpID09IDApIHsKLQkJCS8qIFdlIGdvdCB0aGUgcmVzcG9uc2UgLSByZXN0YXJ0IHN5c3RlbSBjYWxsLiAqLwotCQkJcnN0YXJ0ID0gMTsKKwkJcmMgPSB3YWl0X2Zvcl9yZXNwb25zZShzZXMtPnNlcnZlciwgbWlkUSk7CisJCWlmIChyYykgeworCQkJc2VuZF9udF9jYW5jZWwoc2VzLT5zZXJ2ZXIsIGluX2J1ZiwgbWlkUSk7CisJCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCWlmIChtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKKwkJCQkvKiBubyBsb25nZXIgY29uc2lkZXJlZCB0byBiZSAiaW4tZmxpZ2h0IiAqLworCQkJCW1pZFEtPmNhbGxiYWNrID0gRGVsZXRlTWlkUUVudHJ5OworCQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQkJcmV0dXJuIHJjOworCQkJfQorCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAkJfQorCisJCS8qIFdlIGdvdCB0aGUgcmVzcG9uc2UgLSByZXN0YXJ0IHN5c3RlbSBjYWxsLiAqLworCQlyc3RhcnQgPSAxOwogCX0KIAogCXJjID0gc3luY19taWRfcmVzdWx0KG1pZFEsIHNlcy0+c2VydmVyKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggOWM2NGFlOS4uMmQ4Yzg3YiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTE0NjgsMTUgKzE0NjgsMTMgQEAKIAogc3RhdGljIGludCB3b3JrX3N0YXJ0KHZvaWQpCiB7Ci0JcmVjdl93b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImRsbV9yZWN2IiwgV1FfTUVNX1JFQ0xBSU0gfAotCQkJCQkgV1FfSElHSFBSSSB8IFdRX0ZSRUVaRUFCTEUsIDApOworCXJlY3Zfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImRsbV9yZWN2Iik7CiAJaWYgKCFyZWN2X3dvcmtxdWV1ZSkgewogCQlsb2dfcHJpbnQoImNhbid0IHN0YXJ0IGRsbV9yZWN2Iik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXNlbmRfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJkbG1fc2VuZCIsIFdRX01FTV9SRUNMQUlNIHwKLQkJCQkJIFdRX0hJR0hQUkkgfCBXUV9GUkVFWkVBQkxFLCAwKTsKKwlzZW5kX3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJkbG1fc2VuZCIpOwogCWlmICghc2VuZF93b3JrcXVldWUpIHsKIAkJbG9nX3ByaW50KCJjYW4ndCBzdGFydCBkbG1fc2VuZCIpOwogCQlkZXN0cm95X3dvcmtxdWV1ZShyZWN2X3dvcmtxdWV1ZSk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9kZW50cnkuYyBiL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCmluZGV4IDZmYzRmMzEuLjUzNGMxZDQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCisrKyBiL2ZzL2VjcnlwdGZzL2RlbnRyeS5jCkBAIC00NiwyNCArNDYsMjggQEAKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnk7CiAJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5X3NhdmU7Ci0Jc3RydWN0IHZmc21vdW50ICp2ZnNtb3VudF9zYXZlOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeV9zYXZlID0gTlVMTDsKKwlzdHJ1Y3QgdmZzbW91bnQgKnZmc21vdW50X3NhdmUgPSBOVUxMOwogCWludCByYyA9IDE7CiAKLQlpZiAobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkKKwlpZiAobmQgJiYgbmQtPmZsYWdzICYgTE9PS1VQX1JDVSkKIAkJcmV0dXJuIC1FQ0hJTEQ7CiAKIAlsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZGVudHJ5KTsKIAlsb3dlcl9tbnQgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KGRlbnRyeSk7CiAJaWYgKCFsb3dlcl9kZW50cnktPmRfb3AgfHwgIWxvd2VyX2RlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKQogCQlnb3RvIG91dDsKLQlkZW50cnlfc2F2ZSA9IG5kLT5wYXRoLmRlbnRyeTsKLQl2ZnNtb3VudF9zYXZlID0gbmQtPnBhdGgubW50OwotCW5kLT5wYXRoLmRlbnRyeSA9IGxvd2VyX2RlbnRyeTsKLQluZC0+cGF0aC5tbnQgPSBsb3dlcl9tbnQ7CisJaWYgKG5kKSB7CisJCWRlbnRyeV9zYXZlID0gbmQtPnBhdGguZGVudHJ5OworCQl2ZnNtb3VudF9zYXZlID0gbmQtPnBhdGgubW50OworCQluZC0+cGF0aC5kZW50cnkgPSBsb3dlcl9kZW50cnk7CisJCW5kLT5wYXRoLm1udCA9IGxvd2VyX21udDsKKwl9CiAJcmMgPSBsb3dlcl9kZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZShsb3dlcl9kZW50cnksIG5kKTsKLQluZC0+cGF0aC5kZW50cnkgPSBkZW50cnlfc2F2ZTsKLQluZC0+cGF0aC5tbnQgPSB2ZnNtb3VudF9zYXZlOworCWlmIChuZCkgeworCQluZC0+cGF0aC5kZW50cnkgPSBkZW50cnlfc2F2ZTsKKwkJbmQtPnBhdGgubW50ID0gdmZzbW91bnRfc2F2ZTsKKwl9CiAJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgewogCQlzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlID0KIAkJCWVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKGRlbnRyeS0+ZF9pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaCBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCmluZGV4IGRiYzg0ZWQuLmUwMDc1MzQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCisrKyBiL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oCkBAIC02MzIsOCArNjMyLDcgQEAKIAkJICAgICAgIHUzMiBmbGFncyk7CiBpbnQgZWNyeXB0ZnNfbG9va3VwX2FuZF9pbnRlcnBvc2VfbG93ZXIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAogCQkJCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksCi0JCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlLAotCQkJCQlzdHJ1Y3QgbmFtZWlkYXRhICplY3J5cHRmc19uZCk7CisJCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlKTsKIGludCBlY3J5cHRmc19kZWNvZGVfYW5kX2RlY3J5cHRfZmlsZW5hbWUoY2hhciAqKmRlY3J5cHRlZF9uYW1lLAogCQkJCQkgc2l6ZV90ICpkZWNyeXB0ZWRfbmFtZV9zaXplLAogCQkJCQkgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZmlsZS5jIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCmluZGV4IDgxZTEwZTYuLjdkMTA1MGUgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2ZpbGUuYworKysgYi9mcy9lY3J5cHRmcy9maWxlLmMKQEAgLTMxNyw2ICszMTcsNyBAQAogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVjcnlwdGZzX2Rpcl9mb3BzID0gewogCS5yZWFkZGlyID0gZWNyeXB0ZnNfcmVhZGRpciwKKwkucmVhZCA9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnVubG9ja2VkX2lvY3RsID0gZWNyeXB0ZnNfdW5sb2NrZWRfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwgPSBlY3J5cHRmc19jb21wYXRfaW9jdGwsCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCBiZDMzZjg3Li5iNTkyOTM4IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTc0LDE2ICs3NCwyMCBAQAogCXVuc2lnbmVkIGludCBmbGFnc19zYXZlOwogCWludCByYzsKIAotCWRlbnRyeV9zYXZlID0gbmQtPnBhdGguZGVudHJ5OwotCXZmc21vdW50X3NhdmUgPSBuZC0+cGF0aC5tbnQ7Ci0JZmxhZ3Nfc2F2ZSA9IG5kLT5mbGFnczsKLQluZC0+cGF0aC5kZW50cnkgPSBsb3dlcl9kZW50cnk7Ci0JbmQtPnBhdGgubW50ID0gbG93ZXJfbW50OwotCW5kLT5mbGFncyAmPSB+TE9PS1VQX09QRU47CisJaWYgKG5kKSB7CisJCWRlbnRyeV9zYXZlID0gbmQtPnBhdGguZGVudHJ5OworCQl2ZnNtb3VudF9zYXZlID0gbmQtPnBhdGgubW50OworCQlmbGFnc19zYXZlID0gbmQtPmZsYWdzOworCQluZC0+cGF0aC5kZW50cnkgPSBsb3dlcl9kZW50cnk7CisJCW5kLT5wYXRoLm1udCA9IGxvd2VyX21udDsKKwkJbmQtPmZsYWdzICY9IH5MT09LVVBfT1BFTjsKKwl9CiAJcmMgPSB2ZnNfY3JlYXRlKGxvd2VyX2Rpcl9pbm9kZSwgbG93ZXJfZGVudHJ5LCBtb2RlLCBuZCk7Ci0JbmQtPnBhdGguZGVudHJ5ID0gZGVudHJ5X3NhdmU7Ci0JbmQtPnBhdGgubW50ID0gdmZzbW91bnRfc2F2ZTsKLQluZC0+ZmxhZ3MgPSBmbGFnc19zYXZlOworCWlmIChuZCkgeworCQluZC0+cGF0aC5kZW50cnkgPSBkZW50cnlfc2F2ZTsKKwkJbmQtPnBhdGgubW50ID0gdmZzbW91bnRfc2F2ZTsKKwkJbmQtPmZsYWdzID0gZmxhZ3Nfc2F2ZTsKKwl9CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yNDEsOCArMjQ1LDcgQEAKICAqLwogaW50IGVjcnlwdGZzX2xvb2t1cF9hbmRfaW50ZXJwb3NlX2xvd2VyKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSwKIAkJCQkJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5LAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmVjcnlwdGZzX2Rpcl9pbm9kZSwKLQkJCQkJc3RydWN0IG5hbWVpZGF0YSAqZWNyeXB0ZnNfbmQpCisJCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlKQogewogCXN0cnVjdCBkZW50cnkgKmxvd2VyX2Rpcl9kZW50cnk7CiAJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQ7CkBAIC0yOTAsOCArMjkzLDYgQEAKIAkJZ290byBvdXQ7CiAJaWYgKHNwZWNpYWxfZmlsZShsb3dlcl9pbm9kZS0+aV9tb2RlKSkKIAkJZ290byBvdXQ7Ci0JaWYgKCFlY3J5cHRmc19uZCkKLQkJZ290byBvdXQ7CiAJLyogUmVsZWFzZWQgaW4gdGhpcyBmdW5jdGlvbiAqLwogCXBhZ2VfdmlydCA9IGttZW1fY2FjaGVfemFsbG9jKGVjcnlwdGZzX2hlYWRlcl9jYWNoZV8yLCBHRlBfVVNFUik7CiAJaWYgKCFwYWdlX3ZpcnQpIHsKQEAgLTM0OSw3NSArMzUwLDYgQEAKIH0KIAogLyoqCi0gKiBlY3J5cHRmc19uZXdfbG93ZXJfZGVudHJ5Ci0gKiBAbmFtZTogVGhlIG5hbWUgb2YgdGhlIG5ldyBkZW50cnkuCi0gKiBAbG93ZXJfZGlyX2RlbnRyeTogUGFyZW50IGRpcmVjdG9yeSBvZiB0aGUgbmV3IGRlbnRyeS4KLSAqIEBuZDogbmFtZWlkYXRhIGZyb20gbGFzdCBsb29rdXAuCi0gKgotICogQ3JlYXRlIGEgbmV3IGRlbnRyeSBvciBnZXQgaXQgZnJvbSBsb3dlciBwYXJlbnQgZGlyLgotICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqCi1lY3J5cHRmc19uZXdfbG93ZXJfZGVudHJ5KHN0cnVjdCBxc3RyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kaXJfZGVudHJ5LAotCQkJICBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5OwotCXN0cnVjdCBkZW50cnkgKnRtcDsKLQlzdHJ1Y3QgaW5vZGUgKmxvd2VyX2Rpcl9pbm9kZTsKLQotCWxvd2VyX2Rpcl9pbm9kZSA9IGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGU7Ci0KLQl0bXAgPSBkX2FsbG9jKGxvd2VyX2Rpcl9kZW50cnksIG5hbWUpOwotCWlmICghdG1wKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCW11dGV4X2xvY2soJmxvd2VyX2Rpcl9pbm9kZS0+aV9tdXRleCk7Ci0JbmV3X2RlbnRyeSA9IGxvd2VyX2Rpcl9pbm9kZS0+aV9vcC0+bG9va3VwKGxvd2VyX2Rpcl9pbm9kZSwgdG1wLCBuZCk7Ci0JbXV0ZXhfdW5sb2NrKCZsb3dlcl9kaXJfaW5vZGUtPmlfbXV0ZXgpOwotCi0JaWYgKCFuZXdfZGVudHJ5KQotCQluZXdfZGVudHJ5ID0gdG1wOwotCWVsc2UKLQkJZHB1dCh0bXApOwotCi0JcmV0dXJuIG5ld19kZW50cnk7Ci19Ci0KLQotLyoqCi0gKiBlY3J5cHRmc19sb29rdXBfb25lX2xvd2VyCi0gKiBAZWNyeXB0ZnNfZGVudHJ5OiBUaGUgZUNyeXB0ZnMgZGVudHJ5IHRoYXQgd2UgYXJlIGxvb2tpbmcgdXAKLSAqIEBsb3dlcl9kaXJfZGVudHJ5OiBsb3dlciBwYXJlbnQgZGlyZWN0b3J5Ci0gKiBAbmFtZTogbG93ZXIgZmlsZSBuYW1lCi0gKgotICogR2V0IHRoZSBsb3dlciBkZW50cnkgZnJvbSB2ZnMuIElmIGxvd2VyIGRlbnRyeSBkb2VzIG5vdCBleGlzdCB5ZXQsCi0gKiBjcmVhdGUgaXQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoKLWVjcnlwdGZzX2xvb2t1cF9vbmVfbG93ZXIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAotCQkJICBzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kaXJfZGVudHJ5LCBzdHJ1Y3QgcXN0ciAqbmFtZSkKLXsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOwotCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50OwotCWludCBlcnI7Ci0KLQlsb3dlcl9tbnQgPSBtbnRnZXQoZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udCgKLQkJCQkgICAgZWNyeXB0ZnNfZGVudHJ5LT5kX3BhcmVudCkpOwotCWVyciA9IHZmc19wYXRoX2xvb2t1cChsb3dlcl9kaXJfZGVudHJ5LCBsb3dlcl9tbnQsIG5hbWUtPm5hbWUgLCAwLCAmbmQpOwotCW1udHB1dChsb3dlcl9tbnQpOwotCi0JaWYgKCFlcnIpIHsKLQkJLyogd2UgZG9udCBuZWVkIHRoZSBtb3VudCAqLwotCQltbnRwdXQobmQucGF0aC5tbnQpOwotCQlyZXR1cm4gbmQucGF0aC5kZW50cnk7Ci0JfQotCWlmIChlcnIgIT0gLUVOT0VOVCkKLQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKLQotCS8qIGNyZWF0ZSBhIG5ldyBsb3dlciBkZW50cnkgKi8KLQlyZXR1cm4gZWNyeXB0ZnNfbmV3X2xvd2VyX2RlbnRyeShuYW1lLCBsb3dlcl9kaXJfZGVudHJ5LCAmbmQpOwotfQotCi0vKioKICAqIGVjcnlwdGZzX2xvb2t1cAogICogQGVjcnlwdGZzX2Rpcl9pbm9kZTogVGhlIGVDcnlwdGZzIGRpcmVjdG9yeSBpbm9kZQogICogQGVjcnlwdGZzX2RlbnRyeTogVGhlIGVDcnlwdGZzIGRlbnRyeSB0aGF0IHdlIGFyZSBsb29raW5nIHVwCkBAIC00MzQsNyArMzY2LDYgQEAKIAlzaXplX3QgZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWVfc2l6ZTsKIAlzdHJ1Y3QgZWNyeXB0ZnNfbW91bnRfY3J5cHRfc3RhdCAqbW91bnRfY3J5cHRfc3RhdCA9IE5VTEw7CiAJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeSwgKmxvd2VyX2RlbnRyeTsKLQlzdHJ1Y3QgcXN0ciBsb3dlcl9uYW1lOwogCWludCByYyA9IDA7CiAKIAlpZiAoKGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLmxlbiA9PSAxCkBAIC00NDQsMjAgKzM3NSwxNCBAQAogCQlnb3RvIG91dF9kX2Ryb3A7CiAJfQogCWxvd2VyX2Rpcl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZWNyeXB0ZnNfZGVudHJ5LT5kX3BhcmVudCk7Ci0JbG93ZXJfbmFtZS5uYW1lID0gZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZTsKLQlsb3dlcl9uYW1lLmxlbiA9IGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLmxlbjsKLQlsb3dlcl9uYW1lLmhhc2ggPSBlY3J5cHRmc19kZW50cnktPmRfbmFtZS5oYXNoOwotCWlmIChsb3dlcl9kaXJfZGVudHJ5LT5kX29wICYmIGxvd2VyX2Rpcl9kZW50cnktPmRfb3AtPmRfaGFzaCkgewotCQlyYyA9IGxvd2VyX2Rpcl9kZW50cnktPmRfb3AtPmRfaGFzaChsb3dlcl9kaXJfZGVudHJ5LAotCQkJCWxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUsICZsb3dlcl9uYW1lKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0X2RfZHJvcDsKLQl9Ci0JbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfbG9va3VwX29uZV9sb3dlcihlY3J5cHRmc19kZW50cnksCi0JCQkJCQkgbG93ZXJfZGlyX2RlbnRyeSwgJmxvd2VyX25hbWUpOworCW11dGV4X2xvY2soJmxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCWxvd2VyX2RlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJICAgICAgbG93ZXJfZGlyX2RlbnRyeSwKKwkJCQkgICAgICBlY3J5cHRmc19kZW50cnktPmRfbmFtZS5sZW4pOworCW11dGV4X3VubG9jaygmbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJaWYgKElTX0VSUihsb3dlcl9kZW50cnkpKSB7CiAJCXJjID0gUFRSX0VSUihsb3dlcl9kZW50cnkpOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIiVzOiBsb29rdXBfb25lX2xvd2VyKCkgcmV0dXJuZWQgIgorCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIiVzOiBsb29rdXBfb25lX2xlbigpIHJldHVybmVkICIKIAkJCQkiWyVkXSBvbiBsb3dlcl9kZW50cnkgPSBbJXNdXG4iLCBfX2Z1bmNfXywgcmMsCiAJCQkJZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWUpOwogCQlnb3RvIG91dF9kX2Ryb3A7CkBAIC00NzksMjggKzQwNCwyMSBAQAogCQkgICAgICAgImZpbGVuYW1lOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7CiAJCWdvdG8gb3V0X2RfZHJvcDsKIAl9Ci0JbG93ZXJfbmFtZS5uYW1lID0gZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWU7Ci0JbG93ZXJfbmFtZS5sZW4gPSBlbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZV9zaXplOwotCWxvd2VyX25hbWUuaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKGxvd2VyX25hbWUubmFtZSwgbG93ZXJfbmFtZS5sZW4pOwotCWlmIChsb3dlcl9kaXJfZGVudHJ5LT5kX29wICYmIGxvd2VyX2Rpcl9kZW50cnktPmRfb3AtPmRfaGFzaCkgewotCQlyYyA9IGxvd2VyX2Rpcl9kZW50cnktPmRfb3AtPmRfaGFzaChsb3dlcl9kaXJfZGVudHJ5LAotCQkJCWxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUsICZsb3dlcl9uYW1lKTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0X2RfZHJvcDsKLQl9Ci0JbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfbG9va3VwX29uZV9sb3dlcihlY3J5cHRmc19kZW50cnksCi0JCQkJCQkgbG93ZXJfZGlyX2RlbnRyeSwgJmxvd2VyX25hbWUpOworCW11dGV4X2xvY2soJmxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCWxvd2VyX2RlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKGVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lLAorCQkJCSAgICAgIGxvd2VyX2Rpcl9kZW50cnksCisJCQkJICAgICAgZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWVfc2l6ZSk7CisJbXV0ZXhfdW5sb2NrKCZsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoSVNfRVJSKGxvd2VyX2RlbnRyeSkpIHsKIAkJcmMgPSBQVFJfRVJSKGxvd2VyX2RlbnRyeSk7Ci0JCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiJXM6IGxvb2t1cF9vbmVfbG93ZXIoKSByZXR1cm5lZCAiCisJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiJXM6IGxvb2t1cF9vbmVfbGVuKCkgcmV0dXJuZWQgIgogCQkJCSJbJWRdIG9uIGxvd2VyX2RlbnRyeSA9IFslc11cbiIsIF9fZnVuY19fLCByYywKIAkJCQllbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZSk7CiAJCWdvdG8gb3V0X2RfZHJvcDsKIAl9CiBsb29rdXBfYW5kX2ludGVycG9zZToKIAlyYyA9IGVjcnlwdGZzX2xvb2t1cF9hbmRfaW50ZXJwb3NlX2xvd2VyKGVjcnlwdGZzX2RlbnRyeSwgbG93ZXJfZGVudHJ5LAotCQkJCQkJIGVjcnlwdGZzX2Rpcl9pbm9kZSwKLQkJCQkJCSBlY3J5cHRmc19uZCk7CisJCQkJCQkgZWNyeXB0ZnNfZGlyX2lub2RlKTsKIAlnb3RvIG91dDsKIG91dF9kX2Ryb3A6CiAJZF9kcm9wKGVjcnlwdGZzX2RlbnRyeSk7CkBAIC0xMDkyLDYgKzEwMTAsOCBAQAogCXJjID0gdmZzX2dldGF0dHIoZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udChkZW50cnkpLAogCQkJIGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihkZW50cnkpLCAmbG93ZXJfc3RhdCk7CiAJaWYgKCFyYykgeworCQlmc3N0YWNrX2NvcHlfYXR0cl9hbGwoZGVudHJ5LT5kX2lub2RlLAorCQkJCSAgICAgIGVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKGRlbnRyeS0+ZF9pbm9kZSkpOwogCQlnZW5lcmljX2ZpbGxhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgc3RhdCk7CiAJCXN0YXQtPmJsb2NrcyA9IGxvd2VyX3N0YXQuYmxvY2tzOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2V2ZW50ZmQuYyBiL2ZzL2V2ZW50ZmQuYwppbmRleCBlMDE5NGIzLi5kOWE1OTE3IDEwMDY0NAotLS0gYS9mcy9ldmVudGZkLmMKKysrIGIvZnMvZXZlbnRmZC5jCkBAIC05OSw3ICs5OSw3IEBACiAgKiBAY3R4OiBbaW5dIFBvaW50ZXIgdG8gZXZlbnRmZCBjb250ZXh0LgogICoKICAqIFRoZSBldmVudGZkIGNvbnRleHQgcmVmZXJlbmNlIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgYWNxdWlyZWQgZWl0aGVyCi0gKiB3aXRoIGV2ZW50ZmRfY3R4X2dldCgpIG9yIGV2ZW50ZmRfY3R4X2ZkZ2V0KCkpLgorICogd2l0aCBldmVudGZkX2N0eF9nZXQoKSBvciBldmVudGZkX2N0eF9mZGdldCgpLgogICovCiB2b2lkIGV2ZW50ZmRfY3R4X3B1dChzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCkKIHsKQEAgLTE0Niw5ICsxNDYsOSBAQAogICogZXZlbnRmZF9jdHhfcmVtb3ZlX3dhaXRfcXVldWUgLSBSZWFkIHRoZSBjdXJyZW50IGNvdW50ZXIgYW5kIHJlbW92ZXMgd2FpdCBxdWV1ZS4KICAqIEBjdHg6IFtpbl0gUG9pbnRlciB0byBldmVudGZkIGNvbnRleHQuCiAgKiBAd2FpdDogW2luXSBXYWl0IHF1ZXVlIHRvIGJlIHJlbW92ZWQuCi0gKiBAY250OiBbb3V0XSBQb2ludGVyIHRvIHRoZSA2NGJpdCBjb250ZXIgdmFsdWUuCisgKiBAY250OiBbb3V0XSBQb2ludGVyIHRvIHRoZSA2NC1iaXQgY291bnRlciB2YWx1ZS4KICAqCi0gKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKKyAqIFJldHVybnMgJTAgaWYgc3VjY2Vzc2Z1bCwgb3IgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlczoKICAqCiAgKiAtRUFHQUlOICAgICAgOiBUaGUgb3BlcmF0aW9uIHdvdWxkIGhhdmUgYmxvY2tlZC4KICAqCkBAIC0xNzUsMTEgKzE3NSwxMSBAQAogICogZXZlbnRmZF9jdHhfcmVhZCAtIFJlYWRzIHRoZSBldmVudGZkIGNvdW50ZXIgb3Igd2FpdCBpZiBpdCBpcyB6ZXJvLgogICogQGN0eDogW2luXSBQb2ludGVyIHRvIGV2ZW50ZmQgY29udGV4dC4KICAqIEBub193YWl0OiBbaW5dIERpZmZlcmVudCBmcm9tIHplcm8gaWYgdGhlIG9wZXJhdGlvbiBzaG91bGQgbm90IGJsb2NrLgotICogQGNudDogW291dF0gUG9pbnRlciB0byB0aGUgNjRiaXQgY29udGVyIHZhbHVlLgorICogQGNudDogW291dF0gUG9pbnRlciB0byB0aGUgNjQtYml0IGNvdW50ZXIgdmFsdWUuCiAgKgotICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CisgKiBSZXR1cm5zICUwIGlmIHN1Y2Nlc3NmdWwsIG9yIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CiAgKgotICogLUVBR0FJTiAgICAgIDogVGhlIG9wZXJhdGlvbiB3b3VsZCBoYXZlIGJsb2NrZWQgYnV0IEBub193YWl0IHdhcyBub256ZXJvLgorICogLUVBR0FJTiAgICAgIDogVGhlIG9wZXJhdGlvbiB3b3VsZCBoYXZlIGJsb2NrZWQgYnV0IEBub193YWl0IHdhcyBub24temVyby4KICAqIC1FUkVTVEFSVFNZUyA6IEEgc2lnbmFsIGludGVycnVwdGVkIHRoZSB3YWl0IG9wZXJhdGlvbi4KICAqCiAgKiBJZiBAbm9fd2FpdCBpcyB6ZXJvLCB0aGUgZnVuY3Rpb24gbWlnaHQgc2xlZXAgdW50aWwgdGhlIGV2ZW50ZmQgaW50ZXJuYWwKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggY2M4YTliNy4uNGEwOWFmOSAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTYzLDYgKzYzLDEzIEBACiAgKiBjbGVhbnVwIHBhdGggYW5kIGl0IGlzIGFsc28gYWNxdWlyZWQgYnkgZXZlbnRwb2xsX3JlbGVhc2VfZmlsZSgpCiAgKiBpZiBhIGZpbGUgaGFzIGJlZW4gcHVzaGVkIGluc2lkZSBhbiBlcG9sbCBzZXQgYW5kIGl0IGlzIHRoZW4KICAqIGNsb3NlKClkIHdpdGhvdXQgYSBwcmV2aW91cyBjYWxsIHRvZXBvbGxfY3RsKEVQT0xMX0NUTF9ERUwpLgorICogSXQgaXMgYWxzbyBhY3F1aXJlZCB3aGVuIGluc2VydGluZyBhbiBlcG9sbCBmZCBvbnRvIGFub3RoZXIgZXBvbGwKKyAqIGZkLiBXZSBkbyB0aGlzIHNvIHRoYXQgd2Ugd2FsayB0aGUgZXBvbGwgdHJlZSBhbmQgZW5zdXJlIHRoYXQgdGhpcworICogaW5zZXJ0aW9uIGRvZXMgbm90IGNyZWF0ZSBhIGN5Y2xlIG9mIGVwb2xsIGZpbGUgZGVzY3JpcHRvcnMsIHdoaWNoCisgKiBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrLiBXZSBuZWVkIGEgZ2xvYmFsIG11dGV4IHRvIHByZXZlbnQgdHdvCisgKiBzaW11bHRhbmVvdXMgaW5zZXJ0cyAoQSBpbnRvIEIgYW5kIEIgaW50byBBKSBmcm9tIHJhY2luZyBhbmQKKyAqIGNvbnN0cnVjdGluZyBhIGN5Y2xlIHdpdGhvdXQgZWl0aGVyIGluc2VydCBvYnNlcnZpbmcgdGhhdCBpdCBpcworICogZ29pbmcgdG8uCiAgKiBJdCBpcyBwb3NzaWJsZSB0byBkcm9wIHRoZSAiZXAtPm10eCIgYW5kIHRvIHVzZSB0aGUgZ2xvYmFsCiAgKiBtdXRleCAiZXBtdXRleCIgKHRvZ2V0aGVyIHdpdGggImVwLT5sb2NrIikgdG8gaGF2ZSBpdCB3b3JraW5nLAogICogYnV0IGhhdmluZyAiZXAtPm10eCIgd2lsbCBtYWtlIHRoZSBpbnRlcmZhY2UgbW9yZSBzY2FsYWJsZS4KQEAgLTIyNCw2ICsyMzEsOSBAQAogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGVwbXV0ZXgpOwogCisvKiBVc2VkIHRvIGNoZWNrIGZvciBlcG9sbCBmaWxlIGRlc2NyaXB0b3IgaW5jbHVzaW9uIGxvb3BzICovCitzdGF0aWMgc3RydWN0IG5lc3RlZF9jYWxscyBwb2xsX2xvb3BfbmNhbGxzOworCiAvKiBVc2VkIGZvciBzYWZlIHdha2UgdXAgaW1wbGVtZW50YXRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgbmVzdGVkX2NhbGxzIHBvbGxfc2FmZXdha2VfbmNhbGxzOwogCkBAIC0xMTE0LDYgKzExMjQsMTcgQEAKIAlyZXR1cm4gZXBfc2Nhbl9yZWFkeV9saXN0KGVwLCBlcF9zZW5kX2V2ZW50c19wcm9jLCAmZXNlZCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbWVzcGVjIGVwX3NldF9tc3RpbWVvdXQobG9uZyBtcykKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgbm93LCB0cyA9IHsKKwkJLnR2X3NlYyA9IG1zIC8gTVNFQ19QRVJfU0VDLAorCQkudHZfbnNlYyA9IE5TRUNfUEVSX01TRUMgKiAobXMgJSBNU0VDX1BFUl9TRUMpLAorCX07CisKKwlrdGltZV9nZXRfdHMoJm5vdyk7CisJcmV0dXJuIHRpbWVzcGVjX2FkZF9zYWZlKG5vdywgdHMpOworfQorCiBzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cywKIAkJICAgaW50IG1heGV2ZW50cywgbG9uZyB0aW1lb3V0KQogewpAQCAtMTEyMSwxMiArMTE0MiwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9uZyBzbGFjazsKIAl3YWl0X3F1ZXVlX3Qgd2FpdDsKLQlzdHJ1Y3QgdGltZXNwZWMgZW5kX3RpbWU7CiAJa3RpbWVfdCBleHBpcmVzLCAqdG8gPSBOVUxMOwogCiAJaWYgKHRpbWVvdXQgPiAwKSB7Ci0JCWt0aW1lX2dldF90cygmZW5kX3RpbWUpOwotCQl0aW1lc3BlY19hZGRfbnMoJmVuZF90aW1lLCAodTY0KXRpbWVvdXQgKiBOU0VDX1BFUl9NU0VDKTsKKwkJc3RydWN0IHRpbWVzcGVjIGVuZF90aW1lID0gZXBfc2V0X21zdGltZW91dCh0aW1lb3V0KTsKKwogCQlzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSgmZW5kX3RpbWUpOwogCQl0byA9ICZleHBpcmVzOwogCQkqdG8gPSB0aW1lc3BlY190b19rdGltZShlbmRfdGltZSk7CkBAIC0xMTg4LDYgKzEyMDgsNjIgQEAKIAlyZXR1cm4gcmVzOwogfQogCisvKioKKyAqIGVwX2xvb3BfY2hlY2tfcHJvYyAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZCB0byB0aGUgQGVwX2NhbGxfbmVzdGVkKCkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFQSSwgdG8gdmVyaWZ5IHRoYXQgYWRkaW5nIGFuIGVwb2xsIGZpbGUgaW5zaWRlIGFub3RoZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIGVwb2xsIHN0cnVjdHVyZSwgZG9lcyBub3QgdmlvbGF0ZSB0aGUgY29uc3RyYWludHMsIGluCisgKiAgICAgICAgICAgICAgICAgICAgICB0ZXJtcyBvZiBjbG9zZWQgbG9vcHMsIG9yIHRvbyBkZWVwIGNoYWlucyAod2hpY2ggY2FuCisgKiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgaW4gZXhjZXNzaXZlIHN0YWNrIHVzYWdlKS4KKyAqCisgKiBAcHJpdjogUG9pbnRlciB0byB0aGUgZXBvbGwgZmlsZSB0byBiZSBjdXJyZW50bHkgY2hlY2tlZC4KKyAqIEBjb29raWU6IE9yaWdpbmFsIGNvb2tpZSBmb3IgdGhpcyBjYWxsLiBUaGlzIGlzIHRoZSB0b3Atb2YtdGhlLWNoYWluIGVwb2xsCisgKiAgICAgICAgICBkYXRhIHN0cnVjdHVyZSBwb2ludGVyLgorICogQGNhbGxfbmVzdHM6IEN1cnJlbnQgZGVwdCBvZiB0aGUgQGVwX2NhbGxfbmVzdGVkKCkgY2FsbCBzdGFjay4KKyAqCisgKiBSZXR1cm5zOiBSZXR1cm5zIHplcm8gaWYgYWRkaW5nIHRoZSBlcG9sbCBAZmlsZSBpbnNpZGUgY3VycmVudCBlcG9sbAorICogICAgICAgICAgc3RydWN0dXJlIEBlcCBkb2VzIG5vdCB2aW9sYXRlIHRoZSBjb25zdHJhaW50cywgb3IgLTEgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGVwX2xvb3BfY2hlY2tfcHJvYyh2b2lkICpwcml2LCB2b2lkICpjb29raWUsIGludCBjYWxsX25lc3RzKQoreworCWludCBlcnJvciA9IDA7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBwcml2OworCXN0cnVjdCBldmVudHBvbGwgKmVwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCByYl9ub2RlICpyYnA7CisJc3RydWN0IGVwaXRlbSAqZXBpOworCisJbXV0ZXhfbG9jaygmZXAtPm10eCk7CisJZm9yIChyYnAgPSByYl9maXJzdCgmZXAtPnJicik7IHJicDsgcmJwID0gcmJfbmV4dChyYnApKSB7CisJCWVwaSA9IHJiX2VudHJ5KHJicCwgc3RydWN0IGVwaXRlbSwgcmJuKTsKKwkJaWYgKHVubGlrZWx5KGlzX2ZpbGVfZXBvbGwoZXBpLT5mZmQuZmlsZSkpKSB7CisJCQllcnJvciA9IGVwX2NhbGxfbmVzdGVkKCZwb2xsX2xvb3BfbmNhbGxzLCBFUF9NQVhfTkVTVFMsCisJCQkJCSAgICAgICBlcF9sb29wX2NoZWNrX3Byb2MsIGVwaS0+ZmZkLmZpbGUsCisJCQkJCSAgICAgICBlcGktPmZmZC5maWxlLT5wcml2YXRlX2RhdGEsIGN1cnJlbnQpOworCQkJaWYgKGVycm9yICE9IDApCisJCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZlcC0+bXR4KTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBlcF9sb29wX2NoZWNrIC0gUGVyZm9ybXMgYSBjaGVjayB0byB2ZXJpZnkgdGhhdCBhZGRpbmcgYW4gZXBvbGwgZmlsZSAoQGZpbGUpCisgKiAgICAgICAgICAgICAgICAgYW5vdGhlciBlcG9sbCBmaWxlIChyZXByZXNlbnRlZCBieSBAZXApIGRvZXMgbm90IGNyZWF0ZQorICogICAgICAgICAgICAgICAgIGNsb3NlZCBsb29wcyBvciB0b28gZGVlcCBjaGFpbnMuCisgKgorICogQGVwOiBQb2ludGVyIHRvIHRoZSBlcG9sbCBwcml2YXRlIGRhdGEgc3RydWN0dXJlLgorICogQGZpbGU6IFBvaW50ZXIgdG8gdGhlIGVwb2xsIGZpbGUgdG8gYmUgY2hlY2tlZC4KKyAqCisgKiBSZXR1cm5zOiBSZXR1cm5zIHplcm8gaWYgYWRkaW5nIHRoZSBlcG9sbCBAZmlsZSBpbnNpZGUgY3VycmVudCBlcG9sbAorICogICAgICAgICAgc3RydWN0dXJlIEBlcCBkb2VzIG5vdCB2aW9sYXRlIHRoZSBjb25zdHJhaW50cywgb3IgLTEgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGVwX2xvb3BfY2hlY2soc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBlcF9jYWxsX25lc3RlZCgmcG9sbF9sb29wX25jYWxscywgRVBfTUFYX05FU1RTLAorCQkJICAgICAgZXBfbG9vcF9jaGVja19wcm9jLCBmaWxlLCBlcCwgY3VycmVudCk7Cit9CisKIC8qCiAgKiBPcGVuIGFuIGV2ZW50cG9sbCBmaWxlIGRlc2NyaXB0b3IuCiAgKi8KQEAgLTEyMzYsNiArMTMxMiw3IEBACiAJCXN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKiwgZXZlbnQpCiB7CiAJaW50IGVycm9yOworCWludCBkaWRfbG9ja19lcG11dGV4ID0gMDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSwgKnRmaWxlOwogCXN0cnVjdCBldmVudHBvbGwgKmVwOwogCXN0cnVjdCBlcGl0ZW0gKmVwaTsKQEAgLTEyNzcsNiArMTM1NCwyNSBAQAogCSAqLwogCWVwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCisJLyoKKwkgKiBXaGVuIHdlIGluc2VydCBhbiBlcG9sbCBmaWxlIGRlc2NyaXB0b3IsIGluc2lkZSBhbm90aGVyIGVwb2xsIGZpbGUKKwkgKiBkZXNjcmlwdG9yLCB0aGVyZSBpcyB0aGUgY2hhbmdlIG9mIGNyZWF0aW5nIGNsb3NlZCBsb29wcywgd2hpY2ggYXJlCisJICogYmV0dGVyIGJlIGhhbmRsZWQgaGVyZSwgdGhhbiBpbiBtb3JlIGNyaXRpY2FsIHBhdGhzLgorCSAqCisJICogV2UgaG9sZCBlcG11dGV4IGFjcm9zcyB0aGUgbG9vcCBjaGVjayBhbmQgdGhlIGluc2VydCBpbiB0aGlzIGNhc2UsIGluCisJICogb3JkZXIgdG8gcHJldmVudCB0d28gc2VwYXJhdGUgaW5zZXJ0cyBmcm9tIHJhY2luZyBhbmQgZWFjaCBkb2luZyB0aGUKKwkgKiBpbnNlcnQgImF0IHRoZSBzYW1lIHRpbWUiIHN1Y2ggdGhhdCBlcF9sb29wX2NoZWNrIHBhc3NlcyBvbiBib3RoCisJICogYmVmb3JlIGVpdGhlciBvbmUgZG9lcyB0aGUgaW5zZXJ0LCB0aGVyZWJ5IGNyZWF0aW5nIGEgY3ljbGUuCisJICovCisJaWYgKHVubGlrZWx5KGlzX2ZpbGVfZXBvbGwodGZpbGUpICYmIG9wID09IEVQT0xMX0NUTF9BREQpKSB7CisJCW11dGV4X2xvY2soJmVwbXV0ZXgpOworCQlkaWRfbG9ja19lcG11dGV4ID0gMTsKKwkJZXJyb3IgPSAtRUxPT1A7CisJCWlmIChlcF9sb29wX2NoZWNrKGVwLCB0ZmlsZSkgIT0gMCkKKwkJCWdvdG8gZXJyb3JfdGd0X2ZwdXQ7CisJfQorCisKIAltdXRleF9sb2NrKCZlcC0+bXR4KTsKIAogCS8qCkBAIC0xMzEyLDYgKzE0MDgsOSBAQAogCW11dGV4X3VubG9jaygmZXAtPm10eCk7CiAKIGVycm9yX3RndF9mcHV0OgorCWlmICh1bmxpa2VseShkaWRfbG9ja19lcG11dGV4KSkKKwkJbXV0ZXhfdW5sb2NrKCZlcG11dGV4KTsKKwogCWZwdXQodGZpbGUpOwogZXJyb3JfZnB1dDoKIAlmcHV0KGZpbGUpOwpAQCAtMTQzMSw2ICsxNTMwLDEyIEBACiAJCUVQX0lURU1fQ09TVDsKIAlCVUdfT04obWF4X3VzZXJfd2F0Y2hlcyA8IDApOwogCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBwZXJmb3JtIGVwb2xsIGZpbGUgZGVzY3JpcHRvcgorCSAqIGluY2x1c2lvbiBsb29wcyBjaGVja3MuCisJICovCisJZXBfbmVzdGVkX2NhbGxzX2luaXQoJnBvbGxfbG9vcF9uY2FsbHMpOworCiAJLyogSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlIHVzZWQgdG8gcGVyZm9ybSBzYWZlIHBvbGwgd2FpdCBoZWFkIHdha2UgdXBzICovCiAJZXBfbmVzdGVkX2NhbGxzX2luaXQoJnBvbGxfc2FmZXdha2VfbmNhbGxzKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGM2MmVmY2IuLjUyYTQ0N2QgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCQlnb3RvIG91dDsKIAogCWZpbGUgPSBkb19maWxwX29wZW4oQVRfRkRDV0QsIHRtcCwKLQkJCQlPX0xBUkdFRklMRSB8IE9fUkRPTkxZIHwgRk1PREVfRVhFQywgMCwKKwkJCQlPX0xBUkdFRklMRSB8IE9fUkRPTkxZIHwgX19GTU9ERV9FWEVDLCAwLAogCQkJCU1BWV9SRUFEIHwgTUFZX0VYRUMgfCBNQVlfT1BFTik7CiAJcHV0bmFtZSh0bXApOwogCWVycm9yID0gUFRSX0VSUihmaWxlKTsKQEAgLTcyMyw3ICs3MjMsNyBAQAogCWludCBlcnI7CiAKIAlmaWxlID0gZG9fZmlscF9vcGVuKEFUX0ZEQ1dELCBuYW1lLAotCQkJCU9fTEFSR0VGSUxFIHwgT19SRE9OTFkgfCBGTU9ERV9FWEVDLCAwLAorCQkJCU9fTEFSR0VGSUxFIHwgT19SRE9OTFkgfCBfX0ZNT0RFX0VYRUMsIDAsCiAJCQkJTUFZX0VYRUMgfCBNQVlfT1BFTik7CiAJaWYgKElTX0VSUihmaWxlKSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9leG9mcy9pbm9kZS5jIGIvZnMvZXhvZnMvaW5vZGUuYwppbmRleCA0MjY4NTQyLi5hNzU1NTIzIDEwMDY0NAotLS0gYS9mcy9leG9mcy9pbm9kZS5jCisrKyBiL2ZzL2V4b2ZzL2lub2RlLmMKQEAgLTEwMzAsNyArMTAzMCw2IEBACiAJCW1lbWNweShvaS0+aV9kYXRhLCBmY2IuaV9kYXRhLCBzaXplb2YoZmNiLmlfZGF0YSkpOwogCX0KIAotCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSBzYi0+c19iZGk7CiAJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKIAkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZS0+aV9mb3AgPSAmZXhvZnNfZmlsZV9vcGVyYXRpb25zOwpAQCAtMTEzMSw3ICsxMTMwLDYgQEAKIAogCXNiaSA9IHNiLT5zX2ZzX2luZm87CiAKLQlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gc2ItPnNfYmRpOwogCXNiLT5zX2RpcnQgPSAxOwogCWlub2RlX2luaXRfb3duZXIoaW5vZGUsIGRpciwgbW9kZSk7CiAJaW5vZGUtPmlfaW5vID0gc2JpLT5zX25leHRpZCsrOwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvbmFtZWkuYyBiL2ZzL2V4b2ZzL25hbWVpLmMKaW5kZXggMjY0ZTk1ZC4uNGQ3MGRiMSAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvbmFtZWkuYworKysgYi9mcy9leG9mcy9uYW1laS5jCkBAIC0yNzIsNyArMjcyLDYgQEAKIAkJbmV3X2RlID0gZXhvZnNfZmluZF9lbnRyeShuZXdfZGlyLCBuZXdfZGVudHJ5LCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXJyID0gZXhvZnNfc2V0X2xpbmsobmV3X2RpciwgbmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlKTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQlpZiAoZGlyX2RlKQpAQCAtMjg2LDEyICsyODUsOSBAQAogCQkJaWYgKG5ld19kaXItPmlfbmxpbmsgPj0gRVhPRlNfTElOS19NQVgpCiAJCQkJZ290byBvdXRfZGlyOwogCQl9Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWVyciA9IGV4b2ZzX2FkZF9saW5rKG5ld19kZW50cnksIG9sZF9pbm9kZSk7Ci0JCWlmIChlcnIpIHsKLQkJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCX0KIAkJaWYgKGRpcl9kZSkKIAkJCWlub2RlX2luY19saW5rX2NvdW50KG5ld19kaXIpOwogCX0KQEAgLTI5OSw3ICsyOTUsNyBAQAogCW9sZF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAogCWV4b2ZzX2RlbGV0ZV9lbnRyeShvbGRfZGUsIG9sZF9wYWdlKTsKLQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOworCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKIAogCWlmIChkaXJfZGUpIHsKIAkJZXJyID0gZXhvZnNfc2V0X2xpbmsob2xkX2lub2RlLCBkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvbmFtZWkuYyBiL2ZzL2V4dDIvbmFtZWkuYwppbmRleCAyZTFkODM0Li5hZGI5MTg1IDEwMDY0NAotLS0gYS9mcy9leHQyL25hbWVpLmMKKysrIGIvZnMvZXh0Mi9uYW1laS5jCkBAIC0zNDQsNyArMzQ0LDYgQEAKIAkJbmV3X2RlID0gZXh0Ml9maW5kX2VudHJ5IChuZXdfZGlyLCAmbmV3X2RlbnRyeS0+ZF9uYW1lLCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXh0Ml9zZXRfbGluayhuZXdfZGlyLCBuZXdfZGUsIG5ld19wYWdlLCBvbGRfaW5vZGUsIDEpOwogCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQlpZiAoZGlyX2RlKQpAQCAtMzU2LDEyICszNTUsOSBAQAogCQkJaWYgKG5ld19kaXItPmlfbmxpbmsgPj0gRVhUMl9MSU5LX01BWCkKIAkJCQlnb3RvIG91dF9kaXI7CiAJCX0KLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXJyID0gZXh0Ml9hZGRfbGluayhuZXdfZGVudHJ5LCBvbGRfaW5vZGUpOwotCQlpZiAoZXJyKSB7Ci0JCQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOworCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZGlyOwotCQl9CiAJCWlmIChkaXJfZGUpCiAJCQlpbm9kZV9pbmNfbGlua19jb3VudChuZXdfZGlyKTsKIAl9CkBAIC0zNjksMTIgKzM2NSwxMSBAQAogCS8qCiAJICogTGlrZSBtb3N0IG90aGVyIFVuaXggc3lzdGVtcywgc2V0IHRoZSBjdGltZSBmb3IgaW5vZGVzIG9uIGEKICAJICogcmVuYW1lLgotCSAqIGlub2RlX2RlY19saW5rX2NvdW50KCkgd2lsbCBtYXJrIHRoZSBpbm9kZSBkaXJ0eS4KIAkgKi8KIAlvbGRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOworCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKIAogCWV4dDJfZGVsZXRlX2VudHJ5IChvbGRfZGUsIG9sZF9wYWdlKTsKLQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQlpZiAob2xkX2RpciAhPSBuZXdfZGlyKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCAwYzhkOTdiLi4zYWEwYjcyIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAorKysgYi9mcy9leHQ0L2V4dDQuaApAQCAtODQ4LDYgKzg0OCw3IEBACiAJYXRvbWljX3QgaV9pb2VuZF9jb3VudDsJLyogTnVtYmVyIG9mIG91dHN0YW5kaW5nIGlvX2VuZCBzdHJ1Y3RzICovCiAJLyogY3VycmVudCBpb19lbmQgc3RydWN0dXJlIGZvciBhc3luYyBESU8gd3JpdGUqLwogCWV4dDRfaW9fZW5kX3QgKmN1cl9haW9fZGlvOworCWF0b21pY190IGlfYWlvZGlvX3Vud3JpdHRlbjsgLyogTnIuIG9mIGluZmxpZ2h0IGNvbnZlcnNpb25zIHBlbmRpbmcgKi8KIAogCXNwaW5sb2NrX3QgaV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrOwogCkBAIC0yMTE5LDYgKzIxMjAsMTUgQEAKIAogI2RlZmluZSBpbl9yYW5nZShiLCBmaXJzdCwgbGVuKQkoKGIpID49IChmaXJzdCkgJiYgKGIpIDw9IChmaXJzdCkgKyAobGVuKSAtIDEpCiAKKy8qIEZvciBpb2VuZCAmIGFpbyB1bndyaXR0ZW4gY29udmVyc2lvbiB3YWl0IHF1ZXVlcyAqLworI2RlZmluZSBFWFQ0X1dRX0hBU0hfU1oJCTM3CisjZGVmaW5lIGV4dDRfaW9lbmRfd3EodikgICAoJmV4dDRfX2lvZW5kX3dxWygodW5zaWduZWQgbG9uZykodikpICVcCisJCQkJCSAgICBFWFQ0X1dRX0hBU0hfU1pdKQorI2RlZmluZSBleHQ0X2Fpb19tdXRleCh2KSAgKCZleHQ0X19haW9fbXV0ZXhbKCh1bnNpZ25lZCBsb25nKSh2KSkgJVwKKwkJCQkJICAgICBFWFQ0X1dRX0hBU0hfU1pdKQorZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGV4dDRfX2lvZW5kX3dxW0VYVDRfV1FfSEFTSF9TWl07CitleHRlcm4gc3RydWN0IG11dGV4IGV4dDRfX2Fpb19tdXRleFtFWFQ0X1dRX0hBU0hfU1pdOworCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX0VYVDRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCA2M2E3NTgxLi5jY2NlOGE3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtMzE3NCw5ICszMTc0LDEwIEBACiAJCSAqIHRoYXQgdGhpcyBJTyBuZWVkcyB0byBjb252ZXJ0aW9uIHRvIHdyaXR0ZW4gd2hlbiBJTyBpcwogCQkgKiBjb21wbGV0ZWQKIAkJICovCi0JCWlmIChpbykKKwkJaWYgKGlvICYmICEoaW8tPmZsYWcgJiBFWFQ0X0lPX0VORF9VTldSSVRURU4pKSB7CiAJCQlpby0+ZmxhZyA9IEVYVDRfSU9fRU5EX1VOV1JJVFRFTjsKLQkJZWxzZQorCQkJYXRvbWljX2luYygmRVhUNF9JKGlub2RlKS0+aV9haW9kaW9fdW53cml0dGVuKTsKKwkJfSBlbHNlCiAJCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOKTsKIAkJaWYgKGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKGlub2RlKSkKIAkJCW1hcC0+bV9mbGFncyB8PSBFWFQ0X01BUF9VTklOSVQ7CkBAIC0zNDYzLDkgKzM0NjQsMTAgQEAKIAkJICogdGhhdCB3ZSBuZWVkIHRvIHBlcmZvcm0gY29udmVydGlvbiB3aGVuIElPIGlzIGRvbmUuCiAJCSAqLwogCQlpZiAoKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1BSRV9JTykpIHsKLQkJCWlmIChpbykKKwkJCWlmIChpbyAmJiAhKGlvLT5mbGFnICYgRVhUNF9JT19FTkRfVU5XUklUVEVOKSkgewogCQkJCWlvLT5mbGFnID0gRVhUNF9JT19FTkRfVU5XUklUVEVOOwotCQkJZWxzZQorCQkJCWF0b21pY19pbmMoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbik7CisJCQl9IGVsc2UKIAkJCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwKIAkJCQkJCSAgICAgRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuYwppbmRleCAyZTgzMjJjLi43YjgwZDU0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYworKysgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtNTUsMTEgKzU1LDQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfYWlvZGlvX3dhaXQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3EgPSBleHQ0X2lvZW5kX3dxKGlub2RlKTsKKworCXdhaXRfZXZlbnQoKndxLCAoYXRvbWljX3JlYWQoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbikgPT0gMCkpOworfQorCisvKgorICogVGhpcyB0ZXN0cyB3aGV0aGVyIHRoZSBJTyBpbiBxdWVzdGlvbiBpcyBibG9jay1hbGlnbmVkIG9yIG5vdC4KKyAqIEV4dDQgdXRpbGl6ZXMgdW53cml0dGVuIGV4dGVudHMgd2hlbiBob2xlLWZpbGxpbmcgZHVyaW5nIGRpcmVjdCBJTywgYW5kIHRoZXkKKyAqIGFyZSBjb252ZXJ0ZWQgdG8gd3JpdHRlbiBvbmx5IGFmdGVyIHRoZSBJTyBpcyBjb21wbGV0ZS4gIFVudGlsIHRoZXkgYXJlCisgKiBtYXBwZWQsIHRoZXNlIGJsb2NrcyBhcHBlYXIgYXMgaG9sZXMsIHNvIGRpb196ZXJvX2Jsb2NrKCkgd2lsbCBhc3N1bWUgdGhhdAorICogaXQgbmVlZHMgdG8gemVybyBvdXQgcG9ydGlvbnMgb2YgdGhlIHN0YXJ0IGFuZC9vciBlbmQgYmxvY2suICBJZiAyIEFJTworICogdGhyZWFkcyBhcmUgYXQgd29yayBvbiB0aGUgc2FtZSB1bndyaXR0ZW4gYmxvY2ssIHRoZXkgbXVzdCBiZSBzeW5jaHJvbml6ZWQKKyAqIG9yIG9uZSB0aHJlYWQgd2lsbCB6ZXJvIHRoZSBvdGhlcidzIGRhdGEsIGNhdXNpbmcgY29ycnVwdGlvbi4KKyAqLworc3RhdGljIGludAorZXh0NF91bmFsaWduZWRfYWlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCWludCBibG9ja21hc2sgPSBzYi0+c19ibG9ja3NpemUgLSAxOworCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKwlsb2ZmX3QgZmluYWxfc2l6ZSA9IHBvcyArIGNvdW50OworCisJaWYgKHBvcyA+PSBpbm9kZS0+aV9zaXplKQorCQlyZXR1cm4gMDsKKworCWlmICgocG9zICYgYmxvY2ttYXNrKSB8fCAoZmluYWxfc2l6ZSAmIGJsb2NrbWFzaykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90CiBleHQ0X2ZpbGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpb2NiLT5raV9maWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCWludCB1bmFsaWduZWRfYWlvID0gMDsKKwlpbnQgcmV0OwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIGVuY291bnRlcmVkIGEgYml0bWFwLWZvcm1hdCBmaWxlLCB0aGUgc2l6ZSBsaW1pdApAQCAtNzgsOSArMTE0LDMxIEBACiAJCQlucl9zZWdzID0gaW92X3Nob3J0ZW4oKHN0cnVjdCBpb3ZlYyAqKWlvdiwgbnJfc2VncywKIAkJCQkJICAgICAgc2JpLT5zX2JpdG1hcF9tYXhieXRlcyAtIHBvcyk7CiAJCX0KKwl9IGVsc2UgaWYgKHVubGlrZWx5KChpb2NiLT5raV9maWxwLT5mX2ZsYWdzICYgT19ESVJFQ1QpICYmCisJCSAgICFpc19zeW5jX2tpb2NiKGlvY2IpKSkgeworCQl1bmFsaWduZWRfYWlvID0gZXh0NF91bmFsaWduZWRfYWlvKGlub2RlLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiAJfQogCi0JcmV0dXJuIGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOworCS8qIFVuYWxpZ25lZCBkaXJlY3QgQUlPIG11c3QgYmUgc2VyaWFsaXplZDsgc2VlIGNvbW1lbnQgYWJvdmUgKi8KKwlpZiAodW5hbGlnbmVkX2FpbykgeworCQlzdGF0aWMgdW5zaWduZWQgbG9uZyB1bmFsaWduZWRfd2Fybl90aW1lOworCisJCS8qIFdhcm4gYWJvdXQgdGhpcyBvbmNlIHBlciBkYXkgKi8KKwkJaWYgKHByaW50a190aW1lZF9yYXRlbGltaXQoJnVuYWxpZ25lZF93YXJuX3RpbWUsIDYwKjYwKjI0KkhaKSkKKwkJCWV4dDRfbXNnKGlub2RlLT5pX3NiLCBLRVJOX1dBUk5JTkcsCisJCQkJICJVbmFsaWduZWQgQUlPL0RJTyBvbiBpbm9kZSAlbGQgYnkgJXM7ICIKKwkJCQkgInBlcmZvcm1hbmNlIHdpbGwgYmUgcG9vci4iLAorCQkJCSBpbm9kZS0+aV9pbm8sIGN1cnJlbnQtPmNvbW0pOworCQltdXRleF9sb2NrKGV4dDRfYWlvX211dGV4KGlub2RlKSk7CisJCWV4dDRfYWlvZGlvX3dhaXQoaW5vZGUpOworCX0KKworCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOworCisJaWYgKHVuYWxpZ25lZF9haW8pCisJCW11dGV4X3VubG9jayhleHQ0X2Fpb19tdXRleChpbm9kZSkpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBleHQ0X2ZpbGVfdm1fb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCA4NTFmNDliLi5kMWZlMDlhIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYworKysgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtMzQyLDEwICszNDIsMTUgQEAKIC8qIFdlIGNyZWF0ZSBzbGFiIGNhY2hlcyBmb3IgZ3JvdXBpbmZvIGRhdGEgc3RydWN0dXJlcyBiYXNlZCBvbiB0aGUKICAqIHN1cGVyYmxvY2sgYmxvY2sgc2l6ZS4gIFRoZXJlIHdpbGwgYmUgb25lIHBlciBtb3VudGVkIGZpbGVzeXN0ZW0gZm9yCiAgKiBlYWNoIHVuaXF1ZSBzX2Jsb2Nrc2l6ZV9iaXRzICovCi0jZGVmaW5lIE5SX0dSUElORk9fQ0FDSEVTCVwKLQkoRVhUNF9NQVhfQkxPQ0tfTE9HX1NJWkUgLSBFWFQ0X01JTl9CTE9DS19MT0dfU0laRSArIDEpCisjZGVmaW5lIE5SX0dSUElORk9fQ0FDSEVTIDgKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXh0NF9ncm91cGluZm9fY2FjaGVzW05SX0dSUElORk9fQ0FDSEVTXTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKmV4dDRfZ3JvdXBpbmZvX3NsYWJfbmFtZXNbTlJfR1JQSU5GT19DQUNIRVNdID0geworCSJleHQ0X2dyb3VwaW5mb18xayIsICJleHQ0X2dyb3VwaW5mb18yayIsICJleHQ0X2dyb3VwaW5mb180ayIsCisJImV4dDRfZ3JvdXBpbmZvXzhrIiwgImV4dDRfZ3JvdXBpbmZvXzE2ayIsICJleHQ0X2dyb3VwaW5mb18zMmsiLAorCSJleHQ0X2dyb3VwaW5mb182NGsiLCAiZXh0NF9ncm91cGluZm9fMTI4ayIKK307CisKIHN0YXRpYyB2b2lkIGV4dDRfbWJfZ2VuZXJhdGVfZnJvbV9wYShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpiaXRtYXAsCiAJCQkJCWV4dDRfZ3JvdXBfdCBncm91cCk7CiBzdGF0aWMgdm9pZCBleHQ0X21iX2dlbmVyYXRlX2Zyb21fZnJlZWxpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqYml0bWFwLApAQCAtMjQxNCw2ICsyNDE5LDU1IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfZ3JvdXBpbmZvX2Rlc3Ryb3lfc2xhYnModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9HUlBJTkZPX0NBQ0hFUzsgaSsrKSB7CisJCWlmIChleHQ0X2dyb3VwaW5mb19jYWNoZXNbaV0pCisJCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9ncm91cGluZm9fY2FjaGVzW2ldKTsKKwkJZXh0NF9ncm91cGluZm9fY2FjaGVzW2ldID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXh0NF9ncm91cGluZm9fY3JlYXRlX3NsYWIoc2l6ZV90IHNpemUpCit7CisJc3RhdGljIERFRklORV9NVVRFWChleHQ0X2dycGluZm9fc2xhYl9jcmVhdGVfbXV0ZXgpOworCWludCBzbGFiX3NpemU7CisJaW50IGJsb2Nrc2l6ZV9iaXRzID0gb3JkZXJfYmFzZV8yKHNpemUpOworCWludCBjYWNoZV9pbmRleCA9IGJsb2Nrc2l6ZV9iaXRzIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkU7CisJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcDsKKworCWlmIChjYWNoZV9pbmRleCA+PSBOUl9HUlBJTkZPX0NBQ0hFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodW5saWtlbHkoY2FjaGVfaW5kZXggPCAwKSkKKwkJY2FjaGVfaW5kZXggPSAwOworCisJbXV0ZXhfbG9jaygmZXh0NF9ncnBpbmZvX3NsYWJfY3JlYXRlX211dGV4KTsKKwlpZiAoZXh0NF9ncm91cGluZm9fY2FjaGVzW2NhY2hlX2luZGV4XSkgeworCQltdXRleF91bmxvY2soJmV4dDRfZ3JwaW5mb19zbGFiX2NyZWF0ZV9tdXRleCk7CisJCXJldHVybiAwOwkvKiBBbHJlYWR5IGNyZWF0ZWQgKi8KKwl9CisKKwlzbGFiX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvLAorCQkJCWJiX2NvdW50ZXJzW2Jsb2Nrc2l6ZV9iaXRzICsgMl0pOworCisJY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoZXh0NF9ncm91cGluZm9fc2xhYl9uYW1lc1tjYWNoZV9pbmRleF0sCisJCQkJCXNsYWJfc2l6ZSwgMCwgU0xBQl9SRUNMQUlNX0FDQ09VTlQsCisJCQkJCU5VTEwpOworCisJbXV0ZXhfdW5sb2NrKCZleHQ0X2dycGluZm9fc2xhYl9jcmVhdGVfbXV0ZXgpOworCWlmICghY2FjaGVwKSB7CisJCXByaW50ayhLRVJOX0VNRVJHICJFWFQ0OiBubyBtZW1vcnkgZm9yIGdyb3VwaW5mbyBzbGFiIGNhY2hlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZXh0NF9ncm91cGluZm9fY2FjaGVzW2NhY2hlX2luZGV4XSA9IGNhY2hlcDsKKworCXJldHVybiAwOworfQorCiBpbnQgZXh0NF9tYl9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBuZWVkc19yZWNvdmVyeSkKIHsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKQEAgLTI0MjEsOSArMjQ3NSw2IEBACiAJdW5zaWduZWQgb2Zmc2V0OwogCXVuc2lnbmVkIG1heDsKIAlpbnQgcmV0OwotCWludCBjYWNoZV9pbmRleDsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwotCWNoYXIgKm5hbWVwID0gTlVMTDsKIAogCWkgPSAoc2ItPnNfYmxvY2tzaXplX2JpdHMgKyAyKSAqIHNpemVvZigqc2JpLT5zX21iX29mZnNldHMpOwogCkBAIC0yNDQwLDMwICsyNDkxLDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JY2FjaGVfaW5kZXggPSBzYi0+c19ibG9ja3NpemVfYml0cyAtIEVYVDRfTUlOX0JMT0NLX0xPR19TSVpFOwotCWNhY2hlcCA9IGV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tjYWNoZV9pbmRleF07Ci0JaWYgKCFjYWNoZXApIHsKLQkJY2hhciBuYW1lWzMyXTsKLQkJaW50IGxlbiA9IG9mZnNldG9mKHN0cnVjdCBleHQ0X2dyb3VwX2luZm8sCi0JCQkJCWJiX2NvdW50ZXJzW3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzICsgMl0pOwotCi0JCXNwcmludGYobmFtZSwgImV4dDRfZ3JvdXBpbmZvXyVkIiwgc2ItPnNfYmxvY2tzaXplX2JpdHMpOwotCQluYW1lcCA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmFtZXApIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIE5lZWQgdG8gZnJlZSB0aGUga21lbV9jYWNoZV9uYW1lKCkgd2hlbiB3ZQotCQkgKiBkZXN0cm95IHRoZSBzbGFiICovCi0JCWNhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKG5hbWVwLCBsZW4sIDAsCi0JCQkJCSAgICAgU0xBQl9SRUNMQUlNX0FDQ09VTlQsIE5VTEwpOwotCQlpZiAoIWNhY2hlcCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tjYWNoZV9pbmRleF0gPSBjYWNoZXA7Ci0JfQorCXJldCA9IGV4dDRfZ3JvdXBpbmZvX2NyZWF0ZV9zbGFiKHNiLT5zX2Jsb2Nrc2l6ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCiAJLyogb3JkZXIgMCBpcyByZWd1bGFyIGJpdG1hcCAqLwogCXNiaS0+c19tYl9tYXhzWzBdID0gc2ItPnNfYmxvY2tzaXplIDw8IDM7CkBAIC0yNTIwLDcgKzI1NTAsNiBAQAogCWlmIChyZXQpIHsKIAkJa2ZyZWUoc2JpLT5zX21iX29mZnNldHMpOwogCQlrZnJlZShzYmktPnNfbWJfbWF4cyk7Ci0JCWtmcmVlKG5hbWVwKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3MzQsNyArMjc2Myw2IEBACiAKIHZvaWQgZXh0NF9leGl0X21iYWxsb2Modm9pZCkKIHsKLQlpbnQgaTsKIAkvKgogCSAqIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3UoKSdzIG9uIGV4dDRfcHNwYWNlX2NhY2hlcAogCSAqIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBzbGFiIGNhY2hlLgpAQCAtMjc0MywxNSArMjc3MSw3IEBACiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfcHNwYWNlX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfYWNfY2FjaGVwKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0NF9mcmVlX2V4dF9jYWNoZXApOwotCi0JZm9yIChpID0gMDsgaSA8IE5SX0dSUElORk9fQ0FDSEVTOyBpKyspIHsKLQkJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCA9IGV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tpXTsKLQkJaWYgKGNhY2hlcCkgewotCQkJY2hhciAqbmFtZSA9IChjaGFyICopa21lbV9jYWNoZV9uYW1lKGNhY2hlcCk7Ci0JCQlrbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGVwKTsKLQkJCWtmcmVlKG5hbWUpOwotCQl9Ci0JfQorCWV4dDRfZ3JvdXBpbmZvX2Rlc3Ryb3lfc2xhYnMoKTsKIAlleHQ0X3JlbW92ZV9kZWJ1Z2ZzX2VudHJ5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcGFnZS1pby5jIGIvZnMvZXh0NC9wYWdlLWlvLmMKaW5kZXggNzI3MGRjZi4uOTU1Y2MzMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9wYWdlLWlvLmMKKysrIGIvZnMvZXh0NC9wYWdlLWlvLmMKQEAgLTMyLDE0ICszMiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaW9fcGFnZV9jYWNoZXAsICppb19lbmRfY2FjaGVwOwogCi0jZGVmaW5lIFdRX0hBU0hfU1oJCTM3Ci0jZGVmaW5lIHRvX2lvZW5kX3dxKHYpCSgmaW9lbmRfd3FbKCh1bnNpZ25lZCBsb25nKXYpICUgV1FfSEFTSF9TWl0pCi1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgaW9lbmRfd3FbV1FfSEFTSF9TWl07Ci0KIGludCBfX2luaXQgZXh0NF9pbml0X3BhZ2Vpbyh2b2lkKQogewotCWludCBpOwotCiAJaW9fcGFnZV9jYWNoZXAgPSBLTUVNX0NBQ0hFKGV4dDRfaW9fcGFnZSwgU0xBQl9SRUNMQUlNX0FDQ09VTlQpOwogCWlmIChpb19wYWdlX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ4LDkgKzQyLDYgQEAKIAkJa21lbV9jYWNoZV9kZXN0cm95KGlvX3BhZ2VfY2FjaGVwKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWZvciAoaSA9IDA7IGkgPCBXUV9IQVNIX1NaOyBpKyspCi0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlvZW5kX3dxW2ldKTsKLQogCXJldHVybiAwOwogfQogCkBAIC02Miw3ICs1Myw3IEBACiAKIHZvaWQgZXh0NF9pb2VuZF93YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgKndxID0gdG9faW9lbmRfd3EoaW5vZGUpOworCXdhaXRfcXVldWVfaGVhZF90ICp3cSA9IGV4dDRfaW9lbmRfd3EoaW5vZGUpOwogCiAJd2FpdF9ldmVudCgqd3EsIChhdG9taWNfcmVhZCgmRVhUNF9JKGlub2RlKS0+aV9pb2VuZF9jb3VudCkgPT0gMCkpOwogfQpAQCAtODcsNyArNzgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBpby0+bnVtX2lvX3BhZ2VzOyBpKyspCiAJCXB1dF9pb19wYWdlKGlvLT5wYWdlc1tpXSk7CiAJaW8tPm51bV9pb19wYWdlcyA9IDA7Ci0Jd3EgPSB0b19pb2VuZF93cShpby0+aW5vZGUpOworCXdxID0gZXh0NF9pb2VuZF93cShpby0+aW5vZGUpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZFWFQ0X0koaW8tPmlub2RlKS0+aV9pb2VuZF9jb3VudCkgJiYKIAkgICAgd2FpdHF1ZXVlX2FjdGl2ZSh3cSkpCiAJCXdha2VfdXBfYWxsKHdxKTsKQEAgLTEwMiw2ICs5Myw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGlvLT5pbm9kZTsKIAlsb2ZmX3Qgb2Zmc2V0ID0gaW8tPm9mZnNldDsKIAlzc2l6ZV90IHNpemUgPSBpby0+c2l6ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CiAJaW50IHJldCA9IDA7CiAKIAlleHQ0X2RlYnVnKCJleHQ0X2VuZF9pb19ub2xvY2s6IGlvIDB4JXAgZnJvbSBpbm9kZSAlbHUsbGlzdC0+bmV4dCAweCVwLCIKQEAgLTEyNiw3ICsxMTgsMTYgQEAKIAlpZiAoaW8tPmlvY2IpCiAJCWFpb19jb21wbGV0ZShpby0+aW9jYiwgaW8tPnJlc3VsdCwgMCk7CiAJLyogY2xlYXIgdGhlIERJTyBBSU8gdW53cml0dGVuIGZsYWcgKi8KLQlpby0+ZmxhZyAmPSB+RVhUNF9JT19FTkRfVU5XUklUVEVOOworCWlmIChpby0+ZmxhZyAmIEVYVDRfSU9fRU5EX1VOV1JJVFRFTikgeworCQlpby0+ZmxhZyAmPSB+RVhUNF9JT19FTkRfVU5XUklUVEVOOworCQkvKiBXYWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbiAqLworCQl3cSA9IGV4dDRfaW9lbmRfd3EoaW8tPmlub2RlKTsKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbikgJiYKKwkJICAgIHdhaXRxdWV1ZV9hY3RpdmUod3EpKSB7CisJCQl3YWtlX3VwX2FsbCh3cSk7CisJCX0KKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTAsNiArMTkxLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CisJc2VjdG9yX3QgYmlfc2VjdG9yID0gYmlvLT5iaV9zZWN0b3I7CiAKIAlCVUdfT04oIWlvX2VuZCk7CiAJYmlvLT5iaV9wcml2YXRlID0gTlVMTDsKQEAgLTIwNyw5ICsyMDksNyBAQAogCQlpZiAoZXJyb3IpCiAJCQlTZXRQYWdlRXJyb3IocGFnZSk7CiAJCUJVR19PTighaGVhZCk7Ci0JCWlmIChoZWFkLT5iX3NpemUgPT0gUEFHRV9DQUNIRV9TSVpFKQotCQkJY2xlYXJfYnVmZmVyX2RpcnR5KGhlYWQpOwotCQllbHNlIHsKKwkJaWYgKGhlYWQtPmJfc2l6ZSAhPSBQQUdFX0NBQ0hFX1NJWkUpIHsKIAkJCWxvZmZfdCBvZmZzZXQ7CiAJCQlsb2ZmX3QgaW9fZW5kX29mZnNldCA9IGlvX2VuZC0+b2Zmc2V0ICsgaW9fZW5kLT5zaXplOwogCkBAIC0yMjEsNyArMjIxLDYgQEAKIAkJCQkJaWYgKGVycm9yKQogCQkJCQkJYnVmZmVyX2lvX2Vycm9yKGJoKTsKIAotCQkJCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOwogCQkJCX0KIAkJCQlpZiAoYnVmZmVyX2RlbGF5KGJoKSkKIAkJCQkJcGFydGlhbF93cml0ZSA9IDE7CkBAIC0yNTcsNyArMjU2LDcgQEAKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW9fZW5kLT5vZmZzZXQsCiAJCQkgICAgIChsb25nKSBpb19lbmQtPnNpemUsCiAJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkgICAgIGJpby0+Ymlfc2VjdG9yID4+IChpbm9kZS0+aV9ibGtiaXRzIC0gOSkpOworCQkJICAgICBiaV9zZWN0b3IgPj4gKGlub2RlLT5pX2Jsa2JpdHMgLSA5KSk7CiAJfQogCiAJLyogQWRkIHRoZSBpb19lbmQgdG8gcGVyLWlub2RlIGNvbXBsZXRlZCBpbyBsaXN0Ki8KQEAgLTM4MCw2ICszNzksNyBAQAogCiAJYmxvY2tzaXplID0gMSA8PCBpbm9kZS0+aV9ibGtiaXRzOwogCisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlCVUdfT04oUGFnZVdyaXRlYmFjayhwYWdlKSk7CiAJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCUNsZWFyUGFnZUVycm9yKHBhZ2UpOwpAQCAtMzk3LDEyICszOTcsMTQgQEAKIAlmb3IgKGJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKSwgYmxvY2tfc3RhcnQgPSAwOwogCSAgICAgYmggIT0gaGVhZCB8fCAhYmxvY2tfc3RhcnQ7CiAJICAgICBibG9ja19zdGFydCA9IGJsb2NrX2VuZCwgYmggPSBiaC0+Yl90aGlzX3BhZ2UpIHsKKwogCQlibG9ja19lbmQgPSBibG9ja19zdGFydCArIGJsb2Nrc2l6ZTsKIAkJaWYgKGJsb2NrX3N0YXJ0ID49IGxlbikgewogCQkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJY29udGludWU7CiAJCX0KKwkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAkJcmV0ID0gaW9fc3VibWl0X2FkZF9iaChpbywgaW9fcGFnZSwgaW5vZGUsIHdiYywgYmgpOwogCQlpZiAocmV0KSB7CiAJCQkvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDQ4Y2U1NjEuLmY2YTMxOGYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTc3LDYgKzc3LDcgQEAKIAkJICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkIGV4dDRfZGVzdHJveV9sYXp5aW5pdF90aHJlYWQodm9pZCk7CiBzdGF0aWMgdm9pZCBleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK3N0YXRpYyB2b2lkIGV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KHZvaWQpOwogCiAjaWYgIWRlZmluZWQoQ09ORklHX0VYVDNfRlMpICYmICFkZWZpbmVkKENPTkZJR19FWFQzX0ZTX01PRFVMRSkgJiYgZGVmaW5lZChDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzKQogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4dDNfZnNfdHlwZSA9IHsKQEAgLTgzMiw2ICs4MzMsNyBAQAogCWVpLT5pX3N5bmNfdGlkID0gMDsKIAllaS0+aV9kYXRhc3luY190aWQgPSAwOwogCWF0b21pY19zZXQoJmVpLT5pX2lvZW5kX2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZlaS0+aV9haW9kaW9fdW53cml0dGVuLCAwKTsKIAogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KQEAgLTI3MTYsNiArMjcxOCw4IEBACiAJbXV0ZXhfdW5sb2NrKCZleHQ0X2xpX2luZm8tPmxpX2xpc3RfbXR4KTsKIH0KIAorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZXh0NF9sYXp5aW5pdF90YXNrOworCiAvKgogICogVGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hlcmUgZXh0NGxhenlpbml0IHRocmVhZCBsaXZlcy4gSXQgd2Fsa3MKICAqIHRocm91Z2ggdGhlIHJlcXVlc3QgbGlzdCBzZWFyY2hpbmcgZm9yIG5leHQgc2NoZWR1bGVkIGZpbGVzeXN0ZW0uCkBAIC0yNzg0LDYgKzI3ODgsMTAgQEAKIAkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG5leHRfd2FrZXVwKSkKIAkJCXNjaGVkdWxlKCk7CiAJCWZpbmlzaF93YWl0KCZlbGktPmxpX3dhaXRfZGFlbW9uLCAmd2FpdCk7CisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJCWV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KCk7CisJCQlnb3RvIGV4aXRfdGhyZWFkOworCQl9CiAJfQogCiBleGl0X3RocmVhZDoKQEAgLTI4MDgsNiArMjgxNiw3IEBACiAJd2FrZV91cCgmZWxpLT5saV93YWl0X3Rhc2spOwogCiAJa2ZyZWUoZXh0NF9saV9pbmZvKTsKKwlleHQ0X2xhenlpbml0X3Rhc2sgPSBOVUxMOwogCWV4dDRfbGlfaW5mbyA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZleHQ0X2xpX210eCk7CiAKQEAgLTI4MzAsMTEgKzI4MzksMTAgQEAKIAogc3RhdGljIGludCBleHQ0X3J1bl9sYXp5aW5pdF90aHJlYWQodm9pZCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7Ci0KLQl0ID0ga3RocmVhZF9ydW4oZXh0NF9sYXp5aW5pdF90aHJlYWQsIGV4dDRfbGlfaW5mbywgImV4dDRsYXp5aW5pdCIpOwotCWlmIChJU19FUlIodCkpIHsKLQkJaW50IGVyciA9IFBUUl9FUlIodCk7CisJZXh0NF9sYXp5aW5pdF90YXNrID0ga3RocmVhZF9ydW4oZXh0NF9sYXp5aW5pdF90aHJlYWQsCisJCQkJCSBleHQ0X2xpX2luZm8sICJleHQ0bGF6eWluaXQiKTsKKwlpZiAoSVNfRVJSKGV4dDRfbGF6eWluaXRfdGFzaykpIHsKKwkJaW50IGVyciA9IFBUUl9FUlIoZXh0NF9sYXp5aW5pdF90YXNrKTsKIAkJZXh0NF9jbGVhcl9yZXF1ZXN0X2xpc3QoKTsKIAkJZGVsX3RpbWVyX3N5bmMoJmV4dDRfbGlfaW5mby0+bGlfdGltZXIpOwogCQlrZnJlZShleHQ0X2xpX2luZm8pOwpAQCAtMjk4NSwxNiArMjk5MywxMCBAQAogCSAqIElmIHRocmVhZCBleGl0ZWQgZWFybGllcgogCSAqIHRoZXJlJ3Mgbm90aGluZyB0byBiZSBkb25lLgogCSAqLwotCWlmICghZXh0NF9saV9pbmZvKQorCWlmICghZXh0NF9saV9pbmZvIHx8ICFleHQ0X2xhenlpbml0X3Rhc2spCiAJCXJldHVybjsKIAotCWV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KCk7Ci0KLQl3aGlsZSAoZXh0NF9saV9pbmZvLT5saV90YXNrKSB7Ci0JCXdha2VfdXAoJmV4dDRfbGlfaW5mby0+bGlfd2FpdF9kYWVtb24pOwotCQl3YWl0X2V2ZW50KGV4dDRfbGlfaW5mby0+bGlfd2FpdF90YXNrLAotCQkJICAgZXh0NF9saV9pbmZvLT5saV90YXNrID09IE5VTEwpOwotCX0KKwlrdGhyZWFkX3N0b3AoZXh0NF9sYXp5aW5pdF90YXNrKTsKIH0KIAogc3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKQEAgLTQ3NjgsNyArNDc3MCw3IEBACiAJLmZzX2ZsYWdzCT0gRlNfUkVRVUlSRVNfREVWLAogfTsKIAotaW50IF9faW5pdCBleHQ0X2luaXRfZmVhdF9hZHZlcnRzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBleHQ0X2luaXRfZmVhdF9hZHZlcnRzKHZvaWQpCiB7CiAJc3RydWN0IGV4dDRfZmVhdHVyZXMgKmVmOwogCWludCByZXQgPSAtRU5PTUVNOwpAQCAtNDc5MiwyMyArNDc5NCw0NCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGV4dDRfZXhpdF9mZWF0X2FkdmVydHModm9pZCkKK3sKKwlrb2JqZWN0X3B1dCgmZXh0NF9mZWF0LT5mX2tvYmopOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmV4dDRfZmVhdC0+Zl9rb2JqX3VucmVnaXN0ZXIpOworCWtmcmVlKGV4dDRfZmVhdCk7Cit9CisKKy8qIFNoYXJlZCBhY3Jvc3MgYWxsIGV4dDQgZmlsZSBzeXN0ZW1zICovCit3YWl0X3F1ZXVlX2hlYWRfdCBleHQ0X19pb2VuZF93cVtFWFQ0X1dRX0hBU0hfU1pdOworc3RydWN0IG11dGV4IGV4dDRfX2Fpb19tdXRleFtFWFQ0X1dRX0hBU0hfU1pdOworCiBzdGF0aWMgaW50IF9faW5pdCBleHQ0X2luaXRfZnModm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAKIAlleHQ0X2NoZWNrX2ZsYWdfdmFsdWVzKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRVhUNF9XUV9IQVNIX1NaOyBpKyspIHsKKwkJbXV0ZXhfaW5pdCgmZXh0NF9fYWlvX211dGV4W2ldKTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZXh0NF9faW9lbmRfd3FbaV0pOworCX0KKwogCWVyciA9IGV4dDRfaW5pdF9wYWdlaW8oKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWVyciA9IGV4dDRfaW5pdF9zeXN0ZW1fem9uZSgpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0NTsKKwkJZ290byBvdXQ3OwogCWV4dDRfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoImV4dDQiLCBOVUxMLCBmc19rb2JqKTsKIAlpZiAoIWV4dDRfa3NldCkKLQkJZ290byBvdXQ0OworCQlnb3RvIG91dDY7CiAJZXh0NF9wcm9jX3Jvb3QgPSBwcm9jX21rZGlyKCJmcy9leHQ0IiwgTlVMTCk7CisJaWYgKCFleHQ0X3Byb2Nfcm9vdCkKKwkJZ290byBvdXQ1OwogCiAJZXJyID0gZXh0NF9pbml0X2ZlYXRfYWR2ZXJ0cygpOworCWlmIChlcnIpCisJCWdvdG8gb3V0NDsKIAogCWVyciA9IGV4dDRfaW5pdF9tYmFsbG9jKCk7CiAJaWYgKGVycikKQEAgLTQ4MzgsMTIgKzQ4NjEsMTQgQEAKIG91dDI6CiAJZXh0NF9leGl0X21iYWxsb2MoKTsKIG91dDM6Ci0Ja2ZyZWUoZXh0NF9mZWF0KTsKLQlyZW1vdmVfcHJvY19lbnRyeSgiZnMvZXh0NCIsIE5VTEwpOwotCWtzZXRfdW5yZWdpc3RlcihleHQ0X2tzZXQpOworCWV4dDRfZXhpdF9mZWF0X2FkdmVydHMoKTsKIG91dDQ6Ci0JZXh0NF9leGl0X3N5c3RlbV96b25lKCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2V4dDQiLCBOVUxMKTsKIG91dDU6CisJa3NldF91bnJlZ2lzdGVyKGV4dDRfa3NldCk7CitvdXQ2OgorCWV4dDRfZXhpdF9zeXN0ZW1fem9uZSgpOworb3V0NzoKIAlleHQ0X2V4aXRfcGFnZWlvKCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ4NTcsNiArNDg4Miw3IEBACiAJZGVzdHJveV9pbm9kZWNhY2hlKCk7CiAJZXh0NF9leGl0X3hhdHRyKCk7CiAJZXh0NF9leGl0X21iYWxsb2MoKTsKKwlleHQ0X2V4aXRfZmVhdF9hZHZlcnRzKCk7CiAJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2V4dDQiLCBOVUxMKTsKIAlrc2V0X3VucmVnaXN0ZXIoZXh0NF9rc2V0KTsKIAlleHQ0X2V4aXRfc3lzdGVtX3pvbmUoKTsKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IGVjYzhiMzkuLmNiMTAyNjEgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtODE1LDcgKzgxNSw3IEBACiAJCV9fT19TWU5DCXwgT19EU1lOQwl8IEZBU1lOQwl8CiAJCU9fRElSRUNUCXwgT19MQVJHRUZJTEUJfCBPX0RJUkVDVE9SWQl8CiAJCU9fTk9GT0xMT1cJfCBPX05PQVRJTUUJfCBPX0NMT0VYRUMJfAotCQlGTU9ERV9FWEVDCisJCV9fRk1PREVfRVhFQwogCQkpKTsKIAogCWZhc3luY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJmYXN5bmNfY2FjaGUiLApkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IGMzZTg5YWQuLmViMzZiNmIgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTEyNSwxMyArMTI1LDEzIEBACiAJCWdvdG8gZmFpbDsKIAogCXBlcmNwdV9jb3VudGVyX2luYygmbnJfZmlsZXMpOworCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOwogCWlmIChzZWN1cml0eV9maWxlX2FsbG9jKGYpKQogCQlnb3RvIGZhaWxfc2VjOwogCiAJSU5JVF9MSVNUX0hFQUQoJmYtPmZfdS5mdV9saXN0KTsKIAlhdG9taWNfbG9uZ19zZXQoJmYtPmZfY291bnQsIDEpOwogCXJ3bG9ja19pbml0KCZmLT5mX293bmVyLmxvY2spOwotCWYtPmZfY3JlZCA9IGdldF9jcmVkKGNyZWQpOwogCXNwaW5fbG9ja19pbml0KCZmLT5mX2xvY2spOwogCWV2ZW50cG9sbF9pbml0X2ZpbGUoZik7CiAJLyogZi0+Zl92ZXJzaW9uOiAwICovCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCBiZmVkODQ0Li44MzU0M2I1IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTEyODMsOCArMTI4MywxMSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9PUEVOKSAmJiBmYy0+YXRvbWljX29fdHJ1bmMpCi0JCXJldHVybiAwOworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfT1BFTikgeworCQlpZiAoZmMtPmF0b21pY19vX3RydW5jKQorCQkJcmV0dXJuIDA7CisJCWZpbGUgPSBOVUxMOworCX0KIAogCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkKIAkJaXNfdHJ1bmNhdGUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCA5NWRhMWJjLi45ZTA4MzJkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtODYsMTggKzg2LDUyIEBACiAJcmV0dXJuIGZmOwogfQogCi1zdGF0aWMgdm9pZCBmdXNlX3JlbGVhc2VfZW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKK3N0YXRpYyB2b2lkIGZ1c2VfcmVsZWFzZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JcGF0aF9wdXQoJnJlcS0+bWlzYy5yZWxlYXNlLnBhdGgpOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxOworCXN0cnVjdCBmdXNlX2Nvbm4gKmZjOworCXN0cnVjdCBwYXRoIHBhdGg7CisKKwlyZXEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ1c2VfcmVxLCBtaXNjLnJlbGVhc2Uud29yayk7CisJcGF0aCA9IHJlcS0+bWlzYy5yZWxlYXNlLnBhdGg7CisJZmMgPSBnZXRfZnVzZV9jb25uKHBhdGguZGVudHJ5LT5kX2lub2RlKTsKKworCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CisJcGF0aF9wdXQoJnBhdGgpOwogfQogCi1zdGF0aWMgdm9pZCBmdXNlX2ZpbGVfcHV0KHN0cnVjdCBmdXNlX2ZpbGUgKmZmKQorc3RhdGljIHZvaWQgZnVzZV9yZWxlYXNlX2VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCit7CisJaWYgKGZjLT5kZXN0cm95X3JlcSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgZnVzZWJsayBtb3VudCwgdGhlbiBpdCdzIHBvc3NpYmxlIHRoYXQKKwkJICogcmVsZWFzaW5nIHRoZSBwYXRoIHdpbGwgcmVzdWx0IGluIHJlbGVhc2luZyB0aGUKKwkJICogc3VwZXIgYmxvY2sgYW5kIHNlbmRpbmcgdGhlIERFU1RST1kgcmVxdWVzdC4gIElmCisJCSAqIHRoZSBzZXJ2ZXIgaXMgc2luZ2xlIHRocmVhZGVkLCB0aGlzIHdvdWxkIGhhbmcuCisJCSAqIEZvciB0aGlzIHJlYXNvbiBkbyB0aGUgcGF0aF9wdXQoKSBpbiBhIHNlcGFyYXRlCisJCSAqIHRocmVhZC4KKwkJICovCisJCWF0b21pY19pbmMoJnJlcS0+Y291bnQpOworCQlJTklUX1dPUksoJnJlcS0+bWlzYy5yZWxlYXNlLndvcmssIGZ1c2VfcmVsZWFzZV9hc3luYyk7CisJCXNjaGVkdWxlX3dvcmsoJnJlcS0+bWlzYy5yZWxlYXNlLndvcmspOworCX0gZWxzZSB7CisJCXBhdGhfcHV0KCZyZXEtPm1pc2MucmVsZWFzZS5wYXRoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZ1c2VfZmlsZV9wdXQoc3RydWN0IGZ1c2VfZmlsZSAqZmYsIGJvb2wgc3luYykKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZmYtPmNvdW50KSkgewogCQlzdHJ1Y3QgZnVzZV9yZXEgKnJlcSA9IGZmLT5yZXNlcnZlZF9yZXE7CiAKLQkJcmVxLT5lbmQgPSBmdXNlX3JlbGVhc2VfZW5kOwotCQlmdXNlX3JlcXVlc3Rfc2VuZF9iYWNrZ3JvdW5kKGZmLT5mYywgcmVxKTsKKwkJaWYgKHN5bmMpIHsKKwkJCWZ1c2VfcmVxdWVzdF9zZW5kKGZmLT5mYywgcmVxKTsKKwkJCXBhdGhfcHV0KCZyZXEtPm1pc2MucmVsZWFzZS5wYXRoKTsKKwkJCWZ1c2VfcHV0X3JlcXVlc3QoZmYtPmZjLCByZXEpOworCQl9IGVsc2UgeworCQkJcmVxLT5lbmQgPSBmdXNlX3JlbGVhc2VfZW5kOworCQkJZnVzZV9yZXF1ZXN0X3NlbmRfYmFja2dyb3VuZChmZi0+ZmMsIHJlcSk7CisJCX0KIAkJa2ZyZWUoZmYpOwogCX0KIH0KQEAgLTIxOSw4ICsyNTMsMTIgQEAKIAkgKiBOb3JtYWxseSB0aGlzIHdpbGwgc2VuZCB0aGUgUkVMRUFTRSByZXF1ZXN0LCBob3dldmVyIGlmCiAJICogc29tZSBhc3luY2hyb25vdXMgUkVBRCBvciBXUklURSByZXF1ZXN0cyBhcmUgb3V0c3RhbmRpbmcsCiAJICogdGhlIHNlbmRpbmcgd2lsbCBiZSBkZWxheWVkLgorCSAqCisJICogTWFrZSB0aGUgcmVsZWFzZSBzeW5jaHJvbm91cyBpZiB0aGlzIGlzIGEgZnVzZWJsayBtb3VudCwKKwkgKiBzeW5jaHJvbm91cyBSRUxFQVNFIGlzIGFsbG93ZWQgKGFuZCBkZXNpcmFibGUpIGluIHRoaXMgY2FzZQorCSAqIGJlY2F1c2UgdGhlIHNlcnZlciBjYW4gYmUgdHJ1c3RlZCBub3QgdG8gc2NyZXcgdXAuCiAJICovCi0JZnVzZV9maWxlX3B1dChmZik7CisJZnVzZV9maWxlX3B1dChmZiwgZmYtPmZjLT5kZXN0cm95X3JlcSAhPSBOVUxMKTsKIH0KIAogc3RhdGljIGludCBmdXNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC01NTgsNyArNTk2LDcgQEAKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCX0KIAlpZiAocmVxLT5mZikKLQkJZnVzZV9maWxlX3B1dChyZXEtPmZmKTsKKwkJZnVzZV9maWxlX3B1dChyZXEtPmZmLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1c2Vfc2VuZF9yZWFkcGFnZXMoc3RydWN0IGZ1c2VfcmVxICpyZXEsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTEzNyw3ICsxMTc1LDcgQEAKIHN0YXRpYyB2b2lkIGZ1c2Vfd3JpdGVwYWdlX2ZyZWUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQogewogCV9fZnJlZV9wYWdlKHJlcS0+cGFnZXNbMF0pOwotCWZ1c2VfZmlsZV9wdXQocmVxLT5mZik7CisJZnVzZV9maWxlX3B1dChyZXEtPmZmLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1c2Vfd3JpdGVwYWdlX2ZpbmlzaChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCBhZTU3NDRhLi5kNDI4Njk0IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogLyoqIE1heCBudW1iZXIgb2YgcGFnZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIHNpbmdsZSByZWFkIHJlcXVlc3QgKi8KICNkZWZpbmUgRlVTRV9NQVhfUEFHRVNfUEVSX1JFUSAzMgpAQCAtMjYyLDcgKzI2MywxMCBAQAogCS8qKiBEYXRhIGZvciBhc3luY2hyb25vdXMgcmVxdWVzdHMgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgZnVzZV9yZWxlYXNlX2luIGluOworCQkJdW5pb24geworCQkJCXN0cnVjdCBmdXNlX3JlbGVhc2VfaW4gaW47CisJCQkJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJCQl9OwogCQkJc3RydWN0IHBhdGggcGF0aDsKIAkJfSByZWxlYXNlOwogCQlzdHJ1Y3QgZnVzZV9pbml0X2luIGluaXRfaW47CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggMDhhOGJlYi4uN2NkOWE1YSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtMTc3OSwxMSArMTc3OSwxMSBAQAogI2VuZGlmCiAKIAlnbG9ja193b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImdsb2NrX3dvcmtxdWV1ZSIsIFdRX01FTV9SRUNMQUlNIHwKLQkJCQkJICBXUV9ISUdIUFJJIHwgV1FfRlJFRVpFQUJMRSwgMCk7CisJCQkJCSAgV1FfSElHSFBSSSB8IFdRX0ZSRUVaQUJMRSwgMCk7CiAJaWYgKElTX0VSUihnbG9ja193b3JrcXVldWUpKQogCQlyZXR1cm4gUFRSX0VSUihnbG9ja193b3JrcXVldWUpOwogCWdmczJfZGVsZXRlX3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgiZGVsZXRlX3dvcmtxdWV1ZSIsCi0JCQkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaRUFCTEUsCisJCQkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSwKIAkJCQkJCTApOwogCWlmIChJU19FUlIoZ2ZzMl9kZWxldGVfd29ya3F1ZXVlKSkgewogCQlkZXN0cm95X3dvcmtxdWV1ZShnbG9ja193b3JrcXVldWUpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCBlYmVmN2FiLi43MmMzMWEzIDEwMDY0NAotLS0gYS9mcy9nZnMyL21haW4uYworKysgYi9mcy9nZnMyL21haW4uYwpAQCAtNTksMTQgKzU5LDcgQEAKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKShnbCArIDEpOwogCiAJZ2ZzMl9pbml0X2dsb2NrX29uY2UoZ2wpOwotCW1lbXNldChtYXBwaW5nLCAwLCBzaXplb2YoKm1hcHBpbmcpKTsKLQlJTklUX1JBRElYX1RSRUUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+cHJpdmF0ZV9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+cHJpdmF0ZV9sb2NrKTsKLQlJTklUX1JBV19QUklPX1RSRUVfUk9PVCgmbWFwcGluZy0+aV9tbWFwKTsKLQlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhcik7CisJYWRkcmVzc19zcGFjZV9pbml0X29uY2UobWFwcGluZyk7CiB9CiAKIC8qKgpAQCAtMTQ0LDcgKzEzNyw3IEBACiAKIAllcnJvciA9IC1FTk9NRU07CiAJZ2ZzX3JlY292ZXJ5X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJnZnNfcmVjb3ZlcnkiLAotCQkJCQkgIFdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpFQUJMRSwgMCk7CisJCQkJCSAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9GUkVFWkFCTEUsIDApOwogCWlmICghZ2ZzX3JlY292ZXJ5X3dxKQogCQlnb3RvIGZhaWxfd3E7CiAKZGlmZiAtLWdpdCBhL2ZzL2hmcy9kaXIuYyBiL2ZzL2hmcy9kaXIuYwppbmRleCBhZmE2NmFhLi5iNGQ3MGIxIDEwMDY0NAotLS0gYS9mcy9oZnMvZGlyLmMKKysrIGIvZnMvaGZzL2Rpci5jCkBAIC0yMzgsNDYgKzIzOCwyMiBAQAogfQogCiAvKgotICogaGZzX3VubGluaygpCisgKiBoZnNfcmVtb3ZlKCkKICAqCi0gKiBUaGlzIGlzIHRoZSB1bmxpbmsoKSBlbnRyeSBpbiB0aGUgaW5vZGVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgZm9yCi0gKiByZWd1bGFyIEhGUyBkaXJlY3Rvcmllcy4gIFRoZSBwdXJwb3NlIGlzIHRvIGRlbGV0ZSBhbiBleGlzdGluZwotICogZmlsZSwgZ2l2ZW4gdGhlIGlub2RlIGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeSBhbmQgdGhlIG5hbWUKLSAqIChhbmQgaXRzIGxlbmd0aCkgb2YgdGhlIGV4aXN0aW5nIGZpbGUuCisgKiBUaGlzIHNlcnZlcyBhcyBib3RoIHVubGluaygpIGFuZCBybWRpcigpIGluIHRoZSBpbm9kZV9vcGVyYXRpb25zCisgKiBzdHJ1Y3R1cmUgZm9yIHJlZ3VsYXIgSEZTIGRpcmVjdG9yaWVzLiAgVGhlIHB1cnBvc2UgaXMgdG8gZGVsZXRlCisgKiBhbiBleGlzdGluZyBjaGlsZCwgZ2l2ZW4gdGhlIGlub2RlIGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeSBhbmQKKyAqIHRoZSBuYW1lIChhbmQgaXRzIGxlbmd0aCkgb2YgdGhlIGV4aXN0aW5nIGRpcmVjdG9yeS4KKyAqCisgKiBIRlMgZG9lcyBub3QgaGF2ZSBoYXJkbGlua3MsIHNvIGJvdGggcm1kaXIgYW5kIHVubGluayBzZXQgdGhlCisgKiBsaW5rIGNvdW50IHRvIDAuICBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZSBlbXB0aW5lc3MgY2hlY2suCiAgKi8KLXN0YXRpYyBpbnQgaGZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQorc3RhdGljIGludCBoZnNfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludCByZXM7CiAKLQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlyZXMgPSBoZnNfY2F0X2RlbGV0ZShpbm9kZS0+aV9pbm8sIGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZHJvcF9ubGluayhpbm9kZSk7Ci0JaGZzX2RlbGV0ZV9pbm9kZShpbm9kZSk7Ci0JaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCi0JcmV0dXJuIHJlczsKLX0KLQotLyoKLSAqIGhmc19ybWRpcigpCi0gKgotICogVGhpcyBpcyB0aGUgcm1kaXIoKSBlbnRyeSBpbiB0aGUgaW5vZGVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUgZm9yCi0gKiByZWd1bGFyIEhGUyBkaXJlY3Rvcmllcy4gIFRoZSBwdXJwb3NlIGlzIHRvIGRlbGV0ZSBhbiBleGlzdGluZwotICogZGlyZWN0b3J5LCBnaXZlbiB0aGUgaW5vZGUgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGFuZCB0aGUgbmFtZQotICogKGFuZCBpdHMgbGVuZ3RoKSBvZiB0aGUgZXhpc3RpbmcgZGlyZWN0b3J5LgotICovCi1zdGF0aWMgaW50IGhmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW50IHJlczsKLQotCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCWlmIChpbm9kZS0+aV9zaXplICE9IDIpCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfc2l6ZSAhPSAyKQogCQlyZXR1cm4gLUVOT1RFTVBUWTsKIAlyZXMgPSBoZnNfY2F0X2RlbGV0ZShpbm9kZS0+aV9pbm8sIGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpZiAocmVzKQpAQCAtMzA3LDcgKzI4Myw3IEBACiAKIAkvKiBVbmxpbmsgZGVzdGluYXRpb24gaWYgaXQgYWxyZWFkeSBleGlzdHMgKi8KIAlpZiAobmV3X2RlbnRyeS0+ZF9pbm9kZSkgewotCQlyZXMgPSBoZnNfdW5saW5rKG5ld19kaXIsIG5ld19kZW50cnkpOworCQlyZXMgPSBoZnNfcmVtb3ZlKG5ld19kaXIsIG5ld19kZW50cnkpOwogCQlpZiAocmVzKQogCQkJcmV0dXJuIHJlczsKIAl9CkBAIC0zMzIsOSArMzA4LDkgQEAKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkuY3JlYXRlCQk9IGhmc19jcmVhdGUsCiAJLmxvb2t1cAkJPSBoZnNfbG9va3VwLAotCS51bmxpbmsJCT0gaGZzX3VubGluaywKKwkudW5saW5rCQk9IGhmc19yZW1vdmUsCiAJLm1rZGlyCQk9IGhmc19ta2RpciwKLQkucm1kaXIJCT0gaGZzX3JtZGlyLAorCS5ybWRpcgkJPSBoZnNfcmVtb3ZlLAogCS5yZW5hbWUJCT0gaGZzX3JlbmFtZSwKIAkuc2V0YXR0cgk9IGhmc19pbm9kZV9zZXRhdHRyLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKaW5kZXggNTJhMGJjYS4uYjE5OTFhMiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9leHRlbnRzLmMKKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmMKQEAgLTM5Nyw4ICszOTcsOCBAQAogCXUzMiBzdGFydCwgbGVuLCBnb2FsOwogCWludCByZXM7CiAKLQlpZiAoc2JpLT50b3RhbF9ibG9ja3MgLSBzYmktPmZyZWVfYmxvY2tzICsgOCA+Ci0JCQlzYmktPmFsbG9jX2ZpbGUtPmlfc2l6ZSAqIDgpIHsKKwlpZiAoc2JpLT5hbGxvY19maWxlLT5pX3NpemUgKiA4IDwKKwkgICAgc2JpLT50b3RhbF9ibG9ja3MgLSBzYmktPmZyZWVfYmxvY2tzICsgOCkgewogCQkvKiBleHRlbmQgYWxsb2MgZmlsZSAqLwogCQlwcmludGsoS0VSTl9FUlIgImhmczogZXh0ZW5kIGFsbG9jIGZpbGUhICIKIAkJCQkiKCVsbHUsJXUsJXUpXG4iLApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9wYXJ0X3RibC5jIGIvZnMvaGZzcGx1cy9wYXJ0X3RibC5jCmluZGV4IGQ2NmFkMTEuLjQwYWQ4OGMgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvcGFydF90YmwuYworKysgYi9mcy9oZnNwbHVzL3BhcnRfdGJsLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXJlcyA9IGhmc3BsdXNfc3VibWl0X2JpbyhzYi0+c19iZGV2LCAqcGFydF9zdGFydCArIEhGU19QTUFQX0JMSywKIAkJCQkgZGF0YSwgUkVBRCk7CiAJaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKKwkJZ290byBvdXQ7CiAKIAlzd2l0Y2ggKGJlMTZfdG9fY3B1KCooKF9fYmUxNiAqKWRhdGEpKSkgewogCWNhc2UgSEZTX09MRF9QTUFQX01BR0lDOgpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJCXJlcyA9IC1FTk9FTlQ7CiAJCWJyZWFrOwogCX0KLQorb3V0OgogCWtmcmVlKGRhdGEpOwogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmMKaW5kZXggOWEzYjQ3OS4uYjQ5YjU1NSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9zdXBlci5jCisrKyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwpAQCAtMzM4LDIwICszMzgsMjIgQEAKIAlzdHJ1Y3QgaW5vZGUgKnJvb3QsICppbm9kZTsKIAlzdHJ1Y3QgcXN0ciBzdHI7CiAJc3RydWN0IG5sc190YWJsZSAqbmxzID0gTlVMTDsKLQlpbnQgZXJyID0gLUVJTlZBTDsKKwlpbnQgZXJyOwogCisJZXJyID0gLUVJTlZBTDsKIAlzYmkgPSBremFsbG9jKHNpemVvZigqc2JpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYmkpCi0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIG91dDsKIAogCXNiLT5zX2ZzX2luZm8gPSBzYmk7CiAJbXV0ZXhfaW5pdCgmc2JpLT5hbGxvY19tdXRleCk7CiAJbXV0ZXhfaW5pdCgmc2JpLT52aF9tdXRleCk7CiAJaGZzcGx1c19maWxsX2RlZmF1bHRzKHNiaSk7CisKKwllcnIgPSAtRUlOVkFMOwogCWlmICghaGZzcGx1c19wYXJzZV9vcHRpb25zKGRhdGEsIHNiaSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IHVuYWJsZSB0byBwYXJzZSBtb3VudCBvcHRpb25zXG4iKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBjbGVhbnVwOworCQlnb3RvIG91dF91bmxvYWRfbmxzOwogCX0KIAogCS8qIHRlbXBvcmFyaWx5IHVzZSB1dGY4IHRvIGNvcnJlY3RseSBmaW5kIHRoZSBoaWRkZW4gZGlyIGJlbG93ICovCkBAIC0zNTksMTYgKzM2MSwxNCBAQAogCXNiaS0+bmxzID0gbG9hZF9ubHMoInV0ZjgiKTsKIAlpZiAoIXNiaS0+bmxzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiB1bmFibGUgdG8gbG9hZCBubHMgZm9yIHV0ZjhcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X3VubG9hZF9ubHM7CiAJfQogCiAJLyogR3JhYiB0aGUgdm9sdW1lIGhlYWRlciAqLwogCWlmIChoZnNwbHVzX3JlYWRfd3JhcHBlcihzYikpIHsKIAkJaWYgKCFzaWxlbnQpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZnM6IHVuYWJsZSB0byBmaW5kIEhGUysgc3VwZXJibG9ja1xuIik7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfdW5sb2FkX25sczsKIAl9CiAJdmhkciA9IHNiaS0+c192aGRyOwogCkBAIC0zNzcsNyArMzc3LDcgQEAKIAlpZiAoYmUxNl90b19jcHUodmhkci0+dmVyc2lvbikgPCBIRlNQTFVTX01JTl9WRVJTSU9OIHx8CiAJICAgIGJlMTZfdG9fY3B1KHZoZHItPnZlcnNpb24pID4gSEZTUExVU19DVVJSRU5UX1ZFUlNJT04pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IHdyb25nIGZpbGVzeXN0ZW0gdmVyc2lvblxuIik7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfZnJlZV92aGRyOwogCX0KIAlzYmktPnRvdGFsX2Jsb2NrcyA9IGJlMzJfdG9fY3B1KHZoZHItPnRvdGFsX2Jsb2Nrcyk7CiAJc2JpLT5mcmVlX2Jsb2NrcyA9IGJlMzJfdG9fY3B1KHZoZHItPmZyZWVfYmxvY2tzKTsKQEAgLTQyMSwxOSArNDIxLDE5IEBACiAJc2JpLT5leHRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNQTFVTX0VYVF9DTklEKTsKIAlpZiAoIXNiaS0+ZXh0X3RyZWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIGV4dGVudHMgZmlsZVxuIik7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfZnJlZV92aGRyOwogCX0KIAlzYmktPmNhdF90cmVlID0gaGZzX2J0cmVlX29wZW4oc2IsIEhGU1BMVVNfQ0FUX0NOSUQpOwogCWlmICghc2JpLT5jYXRfdHJlZSkgewogCQlwcmludGsoS0VSTl9FUlIgImhmczogZmFpbGVkIHRvIGxvYWQgY2F0YWxvZyBmaWxlXG4iKTsKLQkJZ290byBjbGVhbnVwOworCQlnb3RvIG91dF9jbG9zZV9leHRfdHJlZTsKIAl9CiAKIAlpbm9kZSA9IGhmc3BsdXNfaWdldChzYiwgSEZTUExVU19BTExPQ19DTklEKTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQlwcmludGsoS0VSTl9FUlIgImhmczogZmFpbGVkIHRvIGxvYWQgYWxsb2NhdGlvbiBmaWxlXG4iKTsKIAkJZXJyID0gUFRSX0VSUihpbm9kZSk7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfY2xvc2VfY2F0X3RyZWU7CiAJfQogCXNiaS0+YWxsb2NfZmlsZSA9IGlub2RlOwogCkBAIC00NDIsMTQgKzQ0Miw3IEBACiAJaWYgKElTX0VSUihyb290KSkgewogCQlwcmludGsoS0VSTl9FUlIgImhmczogZmFpbGVkIHRvIGxvYWQgcm9vdCBkaXJlY3RvcnlcbiIpOwogCQllcnIgPSBQVFJfRVJSKHJvb3QpOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotCXNiLT5zX2Rfb3AgPSAmaGZzcGx1c19kZW50cnlfb3BlcmF0aW9uczsKLQlzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3QpOwotCWlmICghc2ItPnNfcm9vdCkgewotCQlpcHV0KHJvb3QpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X3B1dF9hbGxvY19maWxlOwogCX0KIAogCXN0ci5sZW4gPSBzaXplb2YoSEZTUF9ISURERU5ESVJfTkFNRSkgLSAxOwpAQCAtNDU5LDQ2ICs0NTIsNjkgQEAKIAlpZiAoIWhmc19icmVjX3JlYWQoJmZkLCAmZW50cnksIHNpemVvZihlbnRyeSkpKSB7CiAJCWhmc19maW5kX2V4aXQoJmZkKTsKIAkJaWYgKGVudHJ5LnR5cGUgIT0gY3B1X3RvX2JlMTYoSEZTUExVU19GT0xERVIpKQotCQkJZ290byBjbGVhbnVwOworCQkJZ290byBvdXRfcHV0X3Jvb3Q7CiAJCWlub2RlID0gaGZzcGx1c19pZ2V0KHNiLCBiZTMyX3RvX2NwdShlbnRyeS5mb2xkZXIuaWQpKTsKIAkJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCQkJZ290byBjbGVhbnVwOworCQkJZ290byBvdXRfcHV0X3Jvb3Q7CiAJCX0KIAkJc2JpLT5oaWRkZW5fZGlyID0gaW5vZGU7CiAJfSBlbHNlCiAJCWhmc19maW5kX2V4aXQoJmZkKTsKIAotCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKLQkJZ290byBvdXQ7CisJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJCS8qCisJCSAqIEgrTFggPT0gaGZzcGx1c3V0aWxzLCBIK0x4ID09IHRoaXMgZHJpdmVyLCBIK2x4IGlzIHVudXNlZAorCQkgKiBhbGwgdGhyZWUgYXJlIHJlZ2lzdGVyZWQgd2l0aCBBcHBsZSBmb3Igb3VyIHVzZQorCQkgKi8KKwkJdmhkci0+bGFzdF9tb3VudF92ZXJzID0gY3B1X3RvX2JlMzIoSEZTUF9NT1VOVF9WRVJTSU9OKTsKKwkJdmhkci0+bW9kaWZ5X2RhdGUgPSBoZnNwX25vdzJtdCgpOworCQliZTMyX2FkZF9jcHUoJnZoZHItPndyaXRlX2NvdW50LCAxKTsKKwkJdmhkci0+YXR0cmlidXRlcyAmPSBjcHVfdG9fYmUzMih+SEZTUExVU19WT0xfVU5NTlQpOworCQl2aGRyLT5hdHRyaWJ1dGVzIHw9IGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX0lOQ05TVE5UKTsKKwkJaGZzcGx1c19zeW5jX2ZzKHNiLCAxKTsKIAotCS8qIEgrTFggPT0gaGZzcGx1c3V0aWxzLCBIK0x4ID09IHRoaXMgZHJpdmVyLCBIK2x4IGlzIHVudXNlZAotCSAqIGFsbCB0aHJlZSBhcmUgcmVnaXN0ZXJlZCB3aXRoIEFwcGxlIGZvciBvdXIgdXNlCi0JICovCi0Jdmhkci0+bGFzdF9tb3VudF92ZXJzID0gY3B1X3RvX2JlMzIoSEZTUF9NT1VOVF9WRVJTSU9OKTsKLQl2aGRyLT5tb2RpZnlfZGF0ZSA9IGhmc3Bfbm93Mm10KCk7Ci0JYmUzMl9hZGRfY3B1KCZ2aGRyLT53cml0ZV9jb3VudCwgMSk7Ci0Jdmhkci0+YXR0cmlidXRlcyAmPSBjcHVfdG9fYmUzMih+SEZTUExVU19WT0xfVU5NTlQpOwotCXZoZHItPmF0dHJpYnV0ZXMgfD0gY3B1X3RvX2JlMzIoSEZTUExVU19WT0xfSU5DTlNUTlQpOwotCWhmc3BsdXNfc3luY19mcyhzYiwgMSk7CisJCWlmICghc2JpLT5oaWRkZW5fZGlyKSB7CisJCQltdXRleF9sb2NrKCZzYmktPnZoX211dGV4KTsKKwkJCXNiaS0+aGlkZGVuX2RpciA9IGhmc3BsdXNfbmV3X2lub2RlKHNiLCBTX0lGRElSKTsKKwkJCWhmc3BsdXNfY3JlYXRlX2NhdChzYmktPmhpZGRlbl9kaXItPmlfaW5vLCByb290LCAmc3RyLAorCQkJCQkgICBzYmktPmhpZGRlbl9kaXIpOworCQkJbXV0ZXhfdW5sb2NrKCZzYmktPnZoX211dGV4KTsKIAotCWlmICghc2JpLT5oaWRkZW5fZGlyKSB7Ci0JCW11dGV4X2xvY2soJnNiaS0+dmhfbXV0ZXgpOwotCQlzYmktPmhpZGRlbl9kaXIgPSBoZnNwbHVzX25ld19pbm9kZShzYiwgU19JRkRJUik7Ci0JCWhmc3BsdXNfY3JlYXRlX2NhdChzYmktPmhpZGRlbl9kaXItPmlfaW5vLCBzYi0+c19yb290LT5kX2lub2RlLAotCQkJCSAgICZzdHIsIHNiaS0+aGlkZGVuX2Rpcik7Ci0JCW11dGV4X3VubG9jaygmc2JpLT52aF9tdXRleCk7Ci0KLQkJaGZzcGx1c19tYXJrX2lub2RlX2RpcnR5KHNiaS0+aGlkZGVuX2RpciwgSEZTUExVU19JX0NBVF9ESVJUWSk7CisJCQloZnNwbHVzX21hcmtfaW5vZGVfZGlydHkoc2JpLT5oaWRkZW5fZGlyLAorCQkJCQkJIEhGU1BMVVNfSV9DQVRfRElSVFkpOworCQl9CiAJfQotb3V0OgorCisJc2ItPnNfZF9vcCA9ICZoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zOworCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qocm9vdCk7CisJaWYgKCFzYi0+c19yb290KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3B1dF9oaWRkZW5fZGlyOworCX0KKwogCXVubG9hZF9ubHMoc2JpLT5ubHMpOwogCXNiaS0+bmxzID0gbmxzOwogCXJldHVybiAwOwogCi1jbGVhbnVwOgotCWhmc3BsdXNfcHV0X3N1cGVyKHNiKTsKK291dF9wdXRfaGlkZGVuX2RpcjoKKwlpcHV0KHNiaS0+aGlkZGVuX2Rpcik7CitvdXRfcHV0X3Jvb3Q6CisJaXB1dChzYmktPmFsbG9jX2ZpbGUpOworb3V0X3B1dF9hbGxvY19maWxlOgorCWlwdXQoc2JpLT5hbGxvY19maWxlKTsKK291dF9jbG9zZV9jYXRfdHJlZToKKwloZnNfYnRyZWVfY2xvc2Uoc2JpLT5jYXRfdHJlZSk7CitvdXRfY2xvc2VfZXh0X3RyZWU6CisJaGZzX2J0cmVlX2Nsb3NlKHNiaS0+ZXh0X3RyZWUpOworb3V0X2ZyZWVfdmhkcjoKKwlrZnJlZShzYmktPnNfdmhkcik7CisJa2ZyZWUoc2JpLT5zX2JhY2t1cF92aGRyKTsKK291dF91bmxvYWRfbmxzOgorCXVubG9hZF9ubHMoc2JpLT5ubHMpOwogCXVubG9hZF9ubHMobmxzKTsKKwlrZnJlZShzYmkpOworb3V0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKaW5kZXggMTk2MjMxNy4uMzAzMWQ4MSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy93cmFwcGVyLmMKKysrIGIvZnMvaGZzcGx1cy93cmFwcGVyLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQlicmVhazsKIAljYXNlIGNwdV90b19iZTE2KEhGU1BfV1JBUF9NQUdJQyk6CiAJCWlmICghaGZzcGx1c19yZWFkX21kYihzYmktPnNfdmhkciwgJndkKSkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfZnJlZV9iYWNrdXBfdmhkcjsKIAkJd2QuYWJsa19zaXplID4+PSBIRlNQTFVTX1NFQ1RPUl9TSElGVDsKIAkJcGFydF9zdGFydCArPSB3ZC5hYmxrX3N0YXJ0ICsgd2QuZW1iZWRfc3RhcnQgKiB3ZC5hYmxrX3NpemU7CiAJCXBhcnRfc2l6ZSA9IHdkLmVtYmVkX2NvdW50ICogd2QuYWJsa19zaXplOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJCSAqIChzaG91bGQgZG8gdGhpcyBvbmx5IGZvciBjZHJvbS9sb29wIHRob3VnaCkKIAkJICovCiAJCWlmIChoZnNfcGFydF9maW5kKHNiLCAmcGFydF9zdGFydCwgJnBhcnRfc2l6ZSkpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X2ZyZWVfYmFja3VwX3ZoZHI7CiAJCWdvdG8gcmVyZWFkOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggZGE4NWU1Ni4uMDY0N2Q4MCAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0yOTUsNiArMjk1LDIwIEBACiAJCWNhbGxfcmN1KCZpbm9kZS0+aV9yY3UsIGlfY2FsbGJhY2spOwogfQogCit2b2lkIGFkZHJlc3Nfc3BhY2VfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworCW1lbXNldChtYXBwaW5nLCAwLCBzaXplb2YoKm1hcHBpbmcpKTsKKwlJTklUX1JBRElYX1RSRUUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7CisJc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnRyZWVfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+cHJpdmF0ZV9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+cHJpdmF0ZV9sb2NrKTsKKwlJTklUX1JBV19QUklPX1RSRUVfUk9PVCgmbWFwcGluZy0+aV9tbWFwKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhcik7CisJbXV0ZXhfaW5pdCgmbWFwcGluZy0+dW5tYXBfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChhZGRyZXNzX3NwYWNlX2luaXRfb25jZSk7CisKIC8qCiAgKiBUaGVzZSBhcmUgaW5pdGlhbGl6YXRpb25zIHRoYXQgb25seSBuZWVkIHRvIGJlIGRvbmUKICAqIG9uY2UsIGJlY2F1c2UgdGhlIGZpZWxkcyBhcmUgaWRlbXBvdGVudCBhY3Jvc3MgdXNlCkBAIC0zMDgsMTMgKzMyMiw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RldmljZXMpOwogCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV93Yl9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfbHJ1KTsKLQlJTklUX1JBRElYX1RSRUUoJmlub2RlLT5pX2RhdGEucGFnZV90cmVlLCBHRlBfQVRPTUlDKTsKLQlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlfZGF0YS50cmVlX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZpbm9kZS0+aV9kYXRhLmlfbW1hcF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGF0YS5wcml2YXRlX2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZpbm9kZS0+aV9kYXRhLnByaXZhdGVfbG9jayk7Ci0JSU5JVF9SQVdfUFJJT19UUkVFX1JPT1QoJmlub2RlLT5pX2RhdGEuaV9tbWFwKTsKLQlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfZGF0YS5pX21tYXBfbm9ubGluZWFyKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmaW5vZGUtPmlfZGF0YSk7CiAJaV9zaXplX29yZGVyZWRfaW5pdChpbm9kZSk7CiAjaWZkZWYgQ09ORklHX0ZTTk9USUZZCiAJSU5JVF9ITElTVF9IRUFEKCZpbm9kZS0+aV9mc25vdGlmeV9tYXJrcyk7CkBAIC01NDAsMTEgKzU0OCwxNCBAQAogLyoqCiAgKiBpbnZhbGlkYXRlX2lub2RlcwktIGF0dGVtcHQgdG8gZnJlZSBhbGwgaW5vZGVzIG9uIGEgc3VwZXJibG9jawogICogQHNiOgkJc3VwZXJibG9jayB0byBvcGVyYXRlIG9uCisgKiBAa2lsbF9kaXJ0eTogZmxhZyB0byBndWlkZSBoYW5kbGluZyBvZiBkaXJ0eSBpbm9kZXMKICAqCiAgKiBBdHRlbXB0cyB0byBmcmVlIGFsbCBpbm9kZXMgZm9yIGEgZ2l2ZW4gc3VwZXJibG9jay4gIElmIHRoZXJlIHdlcmUgYW55CiAgKiBidXN5IGlub2RlcyByZXR1cm4gYSBub24temVybyB2YWx1ZSwgZWxzZSB6ZXJvLgorICogSWYgQGtpbGxfZGlydHkgaXMgc2V0LCBkaXNjYXJkIGRpcnR5IGlub2RlcyB0b28sIG90aGVyd2lzZSB0cmVhdAorICogdGhlbSBhcyBidXN5LgogICovCi1pbnQgaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK2ludCBpbnZhbGlkYXRlX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBib29sIGtpbGxfZGlydHkpCiB7CiAJaW50IGJ1c3kgPSAwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUsICpuZXh0OwpAQCAtNTU2LDYgKzU2NywxMCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbm9kZSwgbmV4dCwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7CiAJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX05FVyB8IElfRlJFRUlORyB8IElfV0lMTF9GUkVFKSkKIAkJCWNvbnRpbnVlOworCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZICYmICFraWxsX2RpcnR5KSB7CisJCQlidXN5ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCWlmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpKSB7CiAJCQlidXN5ID0gMTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmgKaW5kZXggMDY2MzU2OC4uOWI5NzZiNSAxMDA2NDQKLS0tIGEvZnMvaW50ZXJuYWwuaAorKysgYi9mcy9pbnRlcm5hbC5oCkBAIC0xMTIsNCArMTEyLDQgQEAKICAqLwogZXh0ZXJuIGludCBnZXRfbnJfZGlydHlfaW5vZGVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgZXZpY3RfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLWV4dGVybiBpbnQgaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICopOworZXh0ZXJuIGludCBpbnZhbGlkYXRlX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgYm9vbCk7CmRpZmYgLS1naXQgYS9mcy9pb2N0bC5jIGIvZnMvaW9jdGwuYwppbmRleCBhNTk2MzVlLi4xZWViZWI3IDEwMDY0NAotLS0gYS9mcy9pb2N0bC5jCisrKyBiL2ZzL2lvY3RsLmMKQEAgLTI3Myw2ICsyNzMsMTMgQEAKIAkJbGVuID0gaXNpemU7CiAJfQogCisJLyoKKwkgKiBTb21lIGZpbGVzeXN0ZW1zIGNhbid0IGRlYWwgd2l0aCBiZWluZyBhc2tlZCB0byBtYXAgbGVzcyB0aGFuCisJICogYmxvY2tzaXplLCBzbyBtYWtlIHN1cmUgb3VyIGxlbiBpcyBhdCBsZWFzdCBibG9jayBsZW5ndGguCisJICovCisJaWYgKGxvZ2ljYWxfdG9fYmxrKGlub2RlLCBsZW4pID09IDApCisJCWxlbiA9IGJsa190b19sb2dpY2FsKGlub2RlLCAxKTsKKwogCXN0YXJ0X2JsayA9IGxvZ2ljYWxfdG9fYmxrKGlub2RlLCBzdGFydCk7CiAJbGFzdF9ibGsgPSBsb2dpY2FsX3RvX2Jsayhpbm9kZSwgc3RhcnQgKyBsZW4gLSAxKTsKIApkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCA5ZTQ2ODY5Li45N2U3MzQ2IDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtNDczLDcgKzQ3Myw4IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgdW5kZXIgal9zdGF0ZV9sb2NrLiAgUmV0dXJucyB0cnVlIGlmIGEgdHJhbnNhY3Rpb24gY29tbWl0IHdhcyBzdGFydGVkLgorICogQ2FsbGVkIHdpdGggal9zdGF0ZV9sb2NrIGxvY2tlZCBmb3Igd3JpdGluZy4KKyAqIFJldHVybnMgdHJ1ZSBpZiBhIHRyYW5zYWN0aW9uIGNvbW1pdCB3YXMgc3RhcnRlZC4KICAqLwogaW50IF9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgdGFyZ2V0KQogewpAQCAtNTIwLDExICs1MjEsMTMgQEAKIHsKIAl0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbiA9IE5VTEw7CiAJdGlkX3QgdGlkOworCWludCBuZWVkX3RvX3N0YXJ0ID0gMDsKIAogCXJlYWRfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlpZiAoam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uICYmICFjdXJyZW50LT5qb3VybmFsX2luZm8pIHsKIAkJdHJhbnNhY3Rpb24gPSBqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb247Ci0JCV9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRyYW5zYWN0aW9uLT50X3RpZCk7CisJCWlmICghdGlkX2dlcShqb3VybmFsLT5qX2NvbW1pdF9yZXF1ZXN0LCB0cmFuc2FjdGlvbi0+dF90aWQpKQorCQkJbmVlZF90b19zdGFydCA9IDE7CiAJfSBlbHNlIGlmIChqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pCiAJCXRyYW5zYWN0aW9uID0gam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uOwogCkBAIC01MzUsNiArNTM4LDggQEAKIAogCXRpZCA9IHRyYW5zYWN0aW9uLT50X3RpZDsKIAlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwlpZiAobmVlZF90b19zdGFydCkKKwkJamJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRpZCk7CiAJamJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgdGlkKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCBmYWFkMmJkLi4xZDExOTEwIDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC0xMTcsMTAgKzExNywxMCBAQAogc3RhdGljIGludCBzdGFydF90aGlzX2hhbmRsZShqb3VybmFsX3QgKmpvdXJuYWwsIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkgICAgIGludCBnZnBfbWFzaykKIHsKLQl0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbjsKLQlpbnQgbmVlZGVkOwotCWludCBuYmxvY2tzID0gaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzOwotCXRyYW5zYWN0aW9uX3QgKm5ld190cmFuc2FjdGlvbiA9IE5VTEw7CisJdHJhbnNhY3Rpb25fdAkqdHJhbnNhY3Rpb24sICpuZXdfdHJhbnNhY3Rpb24gPSBOVUxMOworCXRpZF90CQl0aWQ7CisJaW50CQluZWVkZWQsIG5lZWRfdG9fc3RhcnQ7CisJaW50CQluYmxvY2tzID0gaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzOwogCiAJaWYgKG5ibG9ja3MgPiBqb3VybmFsLT5qX21heF90cmFuc2FjdGlvbl9idWZmZXJzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSkJEOiAlcyB3YW50cyB0b28gbWFueSBjcmVkaXRzICglZCA+ICVkKVxuIiwKQEAgLTIyMiw4ICsyMjIsMTEgQEAKIAkJYXRvbWljX3N1YihuYmxvY2tzLCAmdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyk7CiAJCXByZXBhcmVfdG9fd2FpdCgmam91cm5hbC0+al93YWl0X3RyYW5zYWN0aW9uX2xvY2tlZCwgJndhaXQsCiAJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQlfX2piZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0cmFuc2FjdGlvbi0+dF90aWQpOworCQl0aWQgPSB0cmFuc2FjdGlvbi0+dF90aWQ7CisJCW5lZWRfdG9fc3RhcnQgPSAhdGlkX2dlcShqb3VybmFsLT5qX2NvbW1pdF9yZXF1ZXN0LCB0aWQpOwogCQlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJaWYgKG5lZWRfdG9fc3RhcnQpCisJCQlqYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdGlkKTsKIAkJc2NoZWR1bGUoKTsKIAkJZmluaXNoX3dhaXQoJmpvdXJuYWwtPmpfd2FpdF90cmFuc2FjdGlvbl9sb2NrZWQsICZ3YWl0KTsKIAkJZ290byByZXBlYXQ7CkBAIC00NDIsNyArNDQ1LDggQEAKIHsKIAl0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbiA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbjsKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSB0cmFuc2FjdGlvbi0+dF9qb3VybmFsOwotCWludCByZXQ7CisJdGlkX3QJCXRpZDsKKwlpbnQJCW5lZWRfdG9fc3RhcnQsIHJldDsKIAogCS8qIElmIHdlJ3ZlIGhhZCBhbiBhYm9ydCBvZiBhbnkgdHlwZSwgZG9uJ3QgZXZlbiB0aGluayBhYm91dAogCSAqIGFjdHVhbGx5IGRvaW5nIHRoZSByZXN0YXJ0ISAqLwpAQCAtNDY1LDggKzQ2OSwxMSBAQAogCXNwaW5fdW5sb2NrKCZ0cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7CiAKIAlqYmRfZGVidWcoMiwgInJlc3RhcnRpbmcgaGFuZGxlICVwXG4iLCBoYW5kbGUpOwotCV9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRyYW5zYWN0aW9uLT50X3RpZCk7CisJdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOworCW5lZWRfdG9fc3RhcnQgPSAhdGlkX2dlcShqb3VybmFsLT5qX2NvbW1pdF9yZXF1ZXN0LCB0aWQpOwogCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCWlmIChuZWVkX3RvX3N0YXJ0KQorCQlqYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdGlkKTsKIAogCWxvY2tfbWFwX3JlbGVhc2UoJmhhbmRsZS0+aF9sb2NrZGVwX21hcCk7CiAJaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzID0gbmJsb2NrczsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2hvc3QuYyBiL2ZzL2xvY2tkL2hvc3QuYwppbmRleCA1ZjFiY2IyLi5iN2M5OWJmIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9ob3N0LmMKKysrIGIvZnMvbG9ja2QvaG9zdC5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAkJCQkJc3RydWN0IG5zbV9oYW5kbGUgKm5zbSwKIAkJCQkJY29uc3Qgc3RydWN0IG5sbV9yZWJvb3QgKmluZm8pCiB7Ci0Jc3RydWN0IG5sbV9ob3N0ICpob3N0ID0gTlVMTDsKKwlzdHJ1Y3QgbmxtX2hvc3QgKmhvc3Q7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmNoYWluOwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CiAKQEAgLTUzMiwxMiArNTMyLDEzIEBACiAJCQlob3N0LT5oX3N0YXRlKys7CiAKIAkJCW5sbV9nZXRfaG9zdChob3N0KTsKLQkJCWdvdG8gb3V0OworCQkJbXV0ZXhfdW5sb2NrKCZubG1faG9zdF9tdXRleCk7CisJCQlyZXR1cm4gaG9zdDsKIAkJfQogCX0KLW91dDoKKwogCW11dGV4X3VubG9jaygmbmxtX2hvc3RfbXV0ZXgpOwotCXJldHVybiBob3N0OworCXJldHVybiBOVUxMOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jCmluZGV4IGNlNzMzN2QuLjZlNjc3N2YgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L25hbWVpLmMKKysrIGIvZnMvbWluaXgvbmFtZWkuYwpAQCAtMjEzLDcgKzIxMyw2IEBACiAJCW5ld19kZSA9IG1pbml4X2ZpbmRfZW50cnkobmV3X2RlbnRyeSwgJm5ld19wYWdlKTsKIAkJaWYgKCFuZXdfZGUpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCW1pbml4X3NldF9saW5rKG5ld19kZSwgbmV3X3BhZ2UsIG9sZF9pbm9kZSk7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCWlmIChkaXJfZGUpCkBAIC0yMjUsMTggKzIyNCwxNSBAQAogCQkJaWYgKG5ld19kaXItPmlfbmxpbmsgPj0gaW5mby0+c19saW5rX21heCkKIAkJCQlnb3RvIG91dF9kaXI7CiAJCX0KLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXJyID0gbWluaXhfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2RpcjsKLQkJfQogCQlpZiAoZGlyX2RlKQogCQkJaW5vZGVfaW5jX2xpbmtfY291bnQobmV3X2Rpcik7CiAJfQogCiAJbWluaXhfZGVsZXRlX2VudHJ5KG9sZF9kZSwgb2xkX3BhZ2UpOwotCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQltaW5peF9zZXRfbGluayhkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDdkNzdmMjQuLjAwODdjZjkgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtNDU1LDE0ICs0NTUsNiBAQAogCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC0+ZnM7CiAJc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gbmQtPnBhdGguZGVudHJ5OwogCi0JLyoKLQkgKiBJdCBjYW4gYmUgcG9zc2libGUgdG8gcmV2YWxpZGF0ZSB0aGUgZGVudHJ5IHRoYXQgd2Ugc3RhcnRlZAotCSAqIHRoZSBwYXRoIHdhbGsgd2l0aC4gZm9yY2VfcmV2YWxfcGF0aCBtYXkgYWxzbyByZXZhbGlkYXRlIHRoZQotCSAqIGRlbnRyeSBhbHJlYWR5IGNvbW1pdHRlZCB0byB0aGUgbmFtZWlkYXRhLgotCSAqLwotCWlmICh1bmxpa2VseShwYXJlbnQgPT0gZGVudHJ5KSkKLQkJcmV0dXJuIG5hbWVpZGF0YV9kcm9wX3JjdShuZCk7Ci0KIAlCVUdfT04oIShuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKSk7CiAJaWYgKG5kLT5yb290Lm1udCkgewogCQlzcGluX2xvY2soJmZzLT5sb2NrKTsKQEAgLTU2MSwzOSArNTUzLDI1IEBACiAgKi8KIHZvaWQgcmVsZWFzZV9vcGVuX2ludGVudChzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlpZiAobmQtPmludGVudC5vcGVuLmZpbGUtPmZfcGF0aC5kZW50cnkgPT0gTlVMTCkKLQkJcHV0X2ZpbHAobmQtPmludGVudC5vcGVuLmZpbGUpOwotCWVsc2UKLQkJZnB1dChuZC0+aW50ZW50Lm9wZW4uZmlsZSk7Ci19CisJc3RydWN0IGZpbGUgKmZpbGUgPSBuZC0+aW50ZW50Lm9wZW4uZmlsZTsKIAotLyoKLSAqIENhbGwgZF9yZXZhbGlkYXRlIGFuZCBoYW5kbGUgZmlsZXN5c3RlbXMgdGhhdCByZXF1ZXN0IHJjdS13YWxrCi0gKiB0byBiZSBkcm9wcGVkLiBUaGlzIG1heSBiZSBjYWxsZWQgYW5kIHJldHVybiBpbiByY3Utd2FsayBtb2RlLAotICogcmVnYXJkbGVzcyBvZiBzdWNjZXNzIG9yIGVycm9yLiBJZiAtRUNISUxEIGlzIHJldHVybmVkLCB0aGUgY2FsbGVyCi0gKiBtdXN0IHJldHVybiAtRUNISUxEIGJhY2sgdXAgdGhlIHBhdGggd2FsayBzdGFjayBzbyBwYXRoIHdhbGsgbWF5Ci0gKiBiZSByZXN0YXJ0ZWQgaW4gcmVmLXdhbGsgbW9kZS4KLSAqLwotc3RhdGljIGludCBkX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7Ci0JaWYgKHN0YXR1cyA9PSAtRUNISUxEKSB7Ci0JCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1KG5kLCBkZW50cnkpKQotCQkJcmV0dXJuIHN0YXR1czsKLQkJc3RhdHVzID0gZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisJaWYgKGZpbGUgJiYgIUlTX0VSUihmaWxlKSkgeworCQlpZiAoZmlsZS0+Zl9wYXRoLmRlbnRyeSA9PSBOVUxMKQorCQkJcHV0X2ZpbHAoZmlsZSk7CisJCWVsc2UKKwkJCWZwdXQoZmlsZSk7CiAJfQotCi0JcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICoKK3N0YXRpYyBpbmxpbmUgaW50IGRfcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXJldHVybiBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKgogZG9fcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBkX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisJaW50IHN0YXR1cyA9IGRfcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKIAlpZiAodW5saWtlbHkoc3RhdHVzIDw9IDApKSB7CiAJCS8qCiAJCSAqIFRoZSBkZW50cnkgZmFpbGVkIHZhbGlkYXRpb24uCkBAIC02MDIsMjQgKzU4MCwzOSBAQAogCQkgKiB0byByZXR1cm4gYSBmYWlsIHN0YXR1cy4KIAkJICovCiAJCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQkvKiBJZiB3ZSdyZSBpbiByY3Utd2Fsaywgd2UgZG9uJ3QgaGF2ZSBhIHJlZiAqLwotCQkJaWYgKCEobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkpCi0JCQkJZHB1dChkZW50cnkpOworCQkJZHB1dChkZW50cnkpOwogCQkJZGVudHJ5ID0gRVJSX1BUUihzdGF0dXMpOwotCi0JCX0gZWxzZSB7Ci0JCQkvKiBEb24ndCBkX2ludmFsaWRhdGUgaW4gcmN1LXdhbGsgbW9kZSAqLwotCQkJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3VfbWF5YmUobmQsIGRlbnRyeSkpCi0JCQkJcmV0dXJuIEVSUl9QVFIoLUVDSElMRCk7Ci0JCQlpZiAoIWRfaW52YWxpZGF0ZShkZW50cnkpKSB7Ci0JCQkJZHB1dChkZW50cnkpOwotCQkJCWRlbnRyeSA9IE5VTEw7Ci0JCQl9CisJCX0gZWxzZSBpZiAoIWRfaW52YWxpZGF0ZShkZW50cnkpKSB7CisJCQlkcHV0KGRlbnRyeSk7CisJCQlkZW50cnkgPSBOVUxMOwogCQl9CiAJfQogCXJldHVybiBkZW50cnk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqCitkb19yZXZhbGlkYXRlX3JjdShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCWludCBzdGF0dXMgPSBkX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisJaWYgKGxpa2VseShzdGF0dXMgPiAwKSkKKwkJcmV0dXJuIGRlbnRyeTsKKwlpZiAoc3RhdHVzID09IC1FQ0hJTEQpIHsKKwkJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3UobmQsIGRlbnRyeSkpCisJCQlyZXR1cm4gRVJSX1BUUigtRUNISUxEKTsKKwkJcmV0dXJuIGRvX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisJfQorCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gRVJSX1BUUihzdGF0dXMpOworCS8qIERvbid0IGRfaW52YWxpZGF0ZSBpbiByY3Utd2FsayBtb2RlICovCisJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3UobmQsIGRlbnRyeSkpCisJCXJldHVybiBFUlJfUFRSKC1FQ0hJTEQpOworCWlmICghZF9pbnZhbGlkYXRlKGRlbnRyeSkpIHsKKwkJZHB1dChkZW50cnkpOworCQlkZW50cnkgPSBOVUxMOworCX0KKwlyZXR1cm4gZGVudHJ5OworfQorCiBzdGF0aWMgaW5saW5lIGludCBuZWVkX3JldmFsX2RvdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJaWYgKGxpa2VseSghKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9PUF9SRVZBTElEQVRFKSkpCkBAIC02NjQsOSArNjU3LDYgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXN0YXR1cykgewotCQkvKiBEb24ndCBkX2ludmFsaWRhdGUgaW4gcmN1LXdhbGsgbW9kZSAqLwotCQlpZiAobmFtZWlkYXRhX2Ryb3BfcmN1KG5kKSkKLQkJCXJldHVybiAtRUNISUxEOwogCQlkX2ludmFsaWRhdGUoZGVudHJ5KTsKIAkJc3RhdHVzID0gLUVTVEFMRTsKIAl9CkBAIC03NzMsNiArNzYzLDggQEAKIAlpbnQgZXJyb3I7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gbGluay0+ZGVudHJ5OwogCisJQlVHX09OKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpOworCiAJdG91Y2hfYXRpbWUobGluay0+bW50LCBkZW50cnkpOwogCW5kX3NldF9saW5rKG5kLCBOVUxMKTsKIApAQCAtODAzLDEwICs3OTUsMTYgQEAKICAqIFdpdGhvdXQgdGhhdCBraW5kIG9mIHRvdGFsIGxpbWl0LCBuYXN0eSBjaGFpbnMgb2YgY29uc2VjdXRpdmUKICAqIHN5bWxpbmtzIGNhbiBjYXVzZSBhbG1vc3QgYXJiaXRyYXJpbHkgbG9uZyBsb29rdXBzLiAKICAqLwotc3RhdGljIGlubGluZSBpbnQgZG9fZm9sbG93X2xpbmsoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQorc3RhdGljIGlubGluZSBpbnQgZG9fZm9sbG93X2xpbmsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXZvaWQgKmNvb2tpZTsKIAlpbnQgZXJyID0gLUVMT09QOworCisJLyogV2UgZHJvcCByY3Utd2FsayBoZXJlICovCisJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3VfbWF5YmUobmQsIHBhdGgtPmRlbnRyeSkpCisJCXJldHVybiAtRUNISUxEOworCUJVR19PTihpbm9kZSAhPSBwYXRoLT5kZW50cnktPmRfaW5vZGUpOworCiAJaWYgKGN1cnJlbnQtPmxpbmtfY291bnQgPj0gTUFYX05FU1RFRF9MSU5LUykKIAkJZ290byBsb29wOwogCWlmIChjdXJyZW50LT50b3RhbF9saW5rX2NvdW50ID49IDQwKQpAQCAtMTI1MSw5ICsxMjQ5LDE1IEBACiAJCQlyZXR1cm4gLUVDSElMRDsKIAogCQluZC0+c2VxID0gc2VxOwotCQlpZiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX09QX1JFVkFMSURBVEUpCi0JCQlnb3RvIG5lZWRfcmV2YWxpZGF0ZTsKLWRvbmUyOgorCQlpZiAodW5saWtlbHkoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX09QX1JFVkFMSURBVEUpKSB7CisJCQlkZW50cnkgPSBkb19yZXZhbGlkYXRlX3JjdShkZW50cnksIG5kKTsKKwkJCWlmICghZGVudHJ5KQorCQkJCWdvdG8gbmVlZF9sb29rdXA7CisJCQlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCQkJZ290byBmYWlsOworCQkJaWYgKCEobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkpCisJCQkJZ290byBkb25lOworCQl9CiAJCXBhdGgtPm1udCA9IG1udDsKIAkJcGF0aC0+ZGVudHJ5ID0gZGVudHJ5OwogCQlpZiAobGlrZWx5KF9fZm9sbG93X21vdW50X3JjdShuZCwgcGF0aCwgaW5vZGUsIGZhbHNlKSkpCkBAIC0xMjY2LDggKzEyNzAsMTMgQEAKIAlpZiAoIWRlbnRyeSkKIAkJZ290byBuZWVkX2xvb2t1cDsKIGZvdW5kOgotCWlmIChkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfT1BfUkVWQUxJREFURSkKLQkJZ290byBuZWVkX3JldmFsaWRhdGU7CisJaWYgKHVubGlrZWx5KGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9PUF9SRVZBTElEQVRFKSkgeworCQlkZW50cnkgPSBkb19yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCQlpZiAoIWRlbnRyeSkKKwkJCWdvdG8gbmVlZF9sb29rdXA7CisJCWlmIChJU19FUlIoZGVudHJ5KSkKKwkJCWdvdG8gZmFpbDsKKwl9CiBkb25lOgogCXBhdGgtPm1udCA9IG1udDsKIAlwYXRoLT5kZW50cnkgPSBkZW50cnk7CkBAIC0xMzA5LDE2ICsxMzE4LDYgQEAKIAltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CiAJZ290byBmb3VuZDsKIAotbmVlZF9yZXZhbGlkYXRlOgotCWRlbnRyeSA9IGRvX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7Ci0JaWYgKCFkZW50cnkpCi0JCWdvdG8gbmVlZF9sb29rdXA7Ci0JaWYgKElTX0VSUihkZW50cnkpKQotCQlnb3RvIGZhaWw7Ci0JaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCi0JCWdvdG8gZG9uZTI7Ci0JZ290byBkb25lOwotCiBmYWlsOgogCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CiB9CkBAIC0xNDE1LDExICsxNDE0LDcgQEAKIAkJCWdvdG8gb3V0X2RwdXQ7CiAKIAkJaWYgKGlub2RlLT5pX29wLT5mb2xsb3dfbGluaykgewotCQkJLyogV2UgY29tbW9ubHkgZHJvcCByY3Utd2FsayBoZXJlICovCi0JCQlpZiAobmFtZWlkYXRhX2RlbnRyeV9kcm9wX3JjdV9tYXliZShuZCwgbmV4dC5kZW50cnkpKQotCQkJCXJldHVybiAtRUNISUxEOwotCQkJQlVHX09OKGlub2RlICE9IG5leHQuZGVudHJ5LT5kX2lub2RlKTsKLQkJCWVyciA9IGRvX2ZvbGxvd19saW5rKCZuZXh0LCBuZCk7CisJCQllcnIgPSBkb19mb2xsb3dfbGluayhpbm9kZSwgJm5leHQsIG5kKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byByZXR1cm5fZXJyOwogCQkJbmQtPmlub2RlID0gbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlOwpAQCAtMTQ2MywxMCArMTQ1OCw3IEBACiAJCQlicmVhazsKIAkJaWYgKGlub2RlICYmIHVubGlrZWx5KGlub2RlLT5pX29wLT5mb2xsb3dfbGluaykgJiYKIAkJICAgIChsb29rdXBfZmxhZ3MgJiBMT09LVVBfRk9MTE9XKSkgewotCQkJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3VfbWF5YmUobmQsIG5leHQuZGVudHJ5KSkKLQkJCQlyZXR1cm4gLUVDSElMRDsKLQkJCUJVR19PTihpbm9kZSAhPSBuZXh0LmRlbnRyeS0+ZF9pbm9kZSk7Ci0JCQllcnIgPSBkb19mb2xsb3dfbGluaygmbmV4dCwgbmQpOworCQkJZXJyID0gZG9fZm9sbG93X2xpbmsoaW5vZGUsICZuZXh0LCBuZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gcmV0dXJuX2VycjsKIAkJCW5kLT5pbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKQEAgLTE1MDAsMTIgKzE0OTIsMTUgQEAKIAkJICogV2UgbWF5IG5lZWQgdG8gY2hlY2sgdGhlIGNhY2hlZCBkZW50cnkgZm9yIHN0YWxlbmVzcy4KIAkJICovCiAJCWlmIChuZWVkX3JldmFsX2RvdChuZC0+cGF0aC5kZW50cnkpKSB7CisJCQlpZiAobmFtZWlkYXRhX2Ryb3BfcmN1X2xhc3RfbWF5YmUobmQpKQorCQkJCXJldHVybiAtRUNISUxEOwogCQkJLyogTm90ZTogd2UgZG8gbm90IGRfaW52YWxpZGF0ZSgpICovCiAJCQllcnIgPSBkX3JldmFsaWRhdGUobmQtPnBhdGguZGVudHJ5LCBuZCk7CiAJCQlpZiAoIWVycikKIAkJCQllcnIgPSAtRVNUQUxFOwogCQkJaWYgKGVyciA8IDApCiAJCQkJYnJlYWs7CisJCQlyZXR1cm4gMDsKIAkJfQogcmV0dXJuX2Jhc2U6CiAJCWlmIChuYW1laWRhdGFfZHJvcF9yY3VfbGFzdF9tYXliZShuZCkpCkBAIC0yMjY1LDggKzIyNjAsNiBAQAogCXJldHVybiBmaWxwOwogCiBleGl0OgotCWlmICghSVNfRVJSKG5kLT5pbnRlbnQub3Blbi5maWxlKSkKLQkJcmVsZWFzZV9vcGVuX2ludGVudChuZCk7CiAJcGF0aF9wdXQoJm5kLT5wYXRoKTsKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CkBAIC0yMzg5LDggKzIzODIsNiBAQAogZXhpdF9kcHV0OgogCXBhdGhfcHV0X2NvbmRpdGlvbmFsKHBhdGgsIG5kKTsKIGV4aXQ6Ci0JaWYgKCFJU19FUlIobmQtPmludGVudC5vcGVuLmZpbGUpKQotCQlyZWxlYXNlX29wZW5faW50ZW50KG5kKTsKIAlwYXRoX3B1dCgmbmQtPnBhdGgpOwogCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KQEAgLTI0NzcsNiArMjQ2OCw3IEBACiAJfQogCWF1ZGl0X2lub2RlKHBhdGhuYW1lLCBuZC5wYXRoLmRlbnRyeSk7CiAJZmlscCA9IGZpbmlzaF9vcGVuKCZuZCwgb3Blbl9mbGFnLCBhY2NfbW9kZSk7CisJcmVsZWFzZV9vcGVuX2ludGVudCgmbmQpOwogCXJldHVybiBmaWxwOwogCiBjcmVhdDoKQEAgLTI1NTMsNiArMjU0NSw3IEBACiAJCXBhdGhfcHV0KCZuZC5yb290KTsKIAlpZiAoZmlscCA9PSBFUlJfUFRSKC1FU1RBTEUpICYmICEoZmxhZ3MgJiBMT09LVVBfUkVWQUwpKQogCQlnb3RvIHJldmFsOworCXJlbGVhc2Vfb3Blbl9pbnRlbnQoJm5kKTsKIAlyZXR1cm4gZmlscDsKIAogZXhpdF9kcHV0OgpAQCAtMjU2MCw4ICsyNTUzLDYgQEAKIG91dF9wYXRoOgogCXBhdGhfcHV0KCZuZC5wYXRoKTsKIG91dF9maWxwOgotCWlmICghSVNfRVJSKG5kLmludGVudC5vcGVuLmZpbGUpKQotCQlyZWxlYXNlX29wZW5faW50ZW50KCZuZCk7CiAJZmlscCA9IEVSUl9QVFIoZXJyb3IpOwogCWdvdG8gb3V0OwogfQpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCA3YjBiOTUzLi5kMWVkZjI2IDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMTI0NCw3ICsxMjQ0LDcgQEAKIAkJICovCiAJCWJyX3dyaXRlX2xvY2sodmZzbW91bnRfbG9jayk7CiAJCWlmIChtbnRfZ2V0X2NvdW50KG1udCkgIT0gMikgewotCQkJYnJfd3JpdGVfbG9jayh2ZnNtb3VudF9sb2NrKTsKKwkJCWJyX3dyaXRlX3VubG9jayh2ZnNtb3VudF9sb2NrKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJYnJfd3JpdGVfdW5sb2NrKHZmc21vdW50X2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmMgYi9mcy9uZnMvY2FsbGJhY2suYwppbmRleCAxOTkwMTY1Li5lM2QyOTQyIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suYworKysgYi9mcy9uZnMvY2FsbGJhY2suYwpAQCAtMTM1LDMzICsxMzUsNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAvKgotICogICogQ0JfU0VRVUVOQ0Ugb3BlcmF0aW9ucyB3aWxsIGZhaWwgdW50aWwgdGhlIGNhbGxiYWNrIHNlc3Npb25pZCBpcyBzZXQuCi0gKiAgICovCi1pbnQgbmZzNF9zZXRfY2FsbGJhY2tfc2Vzc2lvbmlkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCi17Ci0Jc3RydWN0IHN2Y19zZXJ2ICpzZXJ2ID0gY2xwLT5jbF9ycGNjbGllbnQtPmNsX3hwcnQtPmJjX3NlcnY7Ci0Jc3RydWN0IG5mczRfc2Vzc2lvbmlkICpiY19zaWQ7Ci0KLQlpZiAoIXNlcnYtPnN2X2JjX3hwcnQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogb24gc3VjY2VzcyBmcmVlZCBpbiB4cHJ0X2ZyZWUgKi8KLQliY19zaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJjX3NpZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtY3B5KGJjX3NpZC0+ZGF0YSwgJmNscC0+Y2xfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLAotCQlORlM0X01BWF9TRVNTSU9OSURfTEVOKTsKLQlzcGluX2xvY2tfYmgoJnNlcnYtPnN2X2NiX2xvY2spOwotCXNlcnYtPnN2X2JjX3hwcnQtPnhwdF9iY19zaWQgPSBiY19zaWQ7Ci0Jc3Bpbl91bmxvY2tfYmgoJnNlcnYtPnN2X2NiX2xvY2spOwotCWRwcmludGsoIiVzIHNldCB4cHRfYmNfc2lkPSV1OiV1OiV1OiV1IGZvciBzdl9iY194cHJ0ICVwXG4iLCBfX2Z1bmNfXywKLQkJKCh1MzIgKiliY19zaWQtPmRhdGEpWzBdLCAoKHUzMiAqKWJjX3NpZC0+ZGF0YSlbMV0sCi0JCSgodTMyICopYmNfc2lkLT5kYXRhKVsyXSwgKCh1MzIgKiliY19zaWQtPmRhdGEpWzNdLAotCQlzZXJ2LT5zdl9iY194cHJ0KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIFRoZSBjYWxsYmFjayBzZXJ2aWNlIGZvciBORlN2NC4xIGNhbGxiYWNrcwogICovCiBzdGF0aWMgaW50CkBAIC0yNjYsMTAgKzIzOSw2IEBACiAJCXN0cnVjdCBuZnNfY2FsbGJhY2tfZGF0YSAqY2JfaW5mbykKIHsKIH0KLWludCBuZnM0X3NldF9jYWxsYmFja19zZXNzaW9uaWQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKLXsKLQlyZXR1cm4gMDsKLX0KICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIAogLyoKQEAgLTM1OSw3OCArMzI4LDU4IEBACiAJbXV0ZXhfdW5sb2NrKCZuZnNfY2FsbGJhY2tfbXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IGNoZWNrX2dzc19jYWxsYmFja19wcmluY2lwYWwoc3RydWN0IG5mc19jbGllbnQgKmNscCwKLQkJCQkJc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKKy8qIEJvb2xlYW4gY2hlY2sgb2YgUlBDX0FVVEhfR1NTIHByaW5jaXBhbCAqLworaW50CitjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7CiAJc3RydWN0IHJwY19jbG50ICpyID0gY2xwLT5jbF9ycGNjbGllbnQ7CiAJY2hhciAqcCA9IHN2Y19nc3NfcHJpbmNpcGFsKHJxc3RwKTsKIAorCWlmIChycXN0cC0+cnFfYXV0aG9wLT5mbGF2b3VyICE9IFJQQ19BVVRIX0dTUykKKwkJcmV0dXJuIDE7CisKIAkvKiBObyBSUENfQVVUSF9HU1Mgb24gTkZTdjQuMSBiYWNrIGNoYW5uZWwgeWV0ICovCiAJaWYgKGNscC0+Y2xfbWlub3J2ZXJzaW9uICE9IDApCi0JCXJldHVybiBTVkNfRFJPUDsKKwkJcmV0dXJuIDA7CiAJLyoKIAkgKiBJdCBtaWdodCBqdXN0IGJlIGEgbm9ybWFsIHVzZXIgcHJpbmNpcGFsLCBpbiB3aGljaCBjYXNlCiAJICogdXNlcnNwYWNlIHdvbid0IGJvdGhlciB0byB0ZWxsIHVzIHRoZSBuYW1lIGF0IGFsbC4KIAkgKi8KIAlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gU1ZDX0RFTklFRDsKKwkJcmV0dXJuIDA7CiAKIAkvKiBFeHBlY3QgYSBHU1NfQ19OVF9IT1NUQkFTRURfTkFNRSBsaWtlICJuZnNAc2VydmVyaG9zdG5hbWUiICovCiAKIAlpZiAobWVtY21wKHAsICJuZnNAIiwgNCkgIT0gMCkKLQkJcmV0dXJuIFNWQ19ERU5JRUQ7CisJCXJldHVybiAwOwogCXAgKz0gNDsKIAlpZiAoc3RyY21wKHAsIHItPmNsX3NlcnZlcikgIT0gMCkKLQkJcmV0dXJuIFNWQ19ERU5JRUQ7Ci0JcmV0dXJuIFNWQ19PSzsKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9CiAKLS8qIHBnX2F1dGhlbnRpY2F0ZSBtZXRob2QgaGVscGVyICovCi1zdGF0aWMgc3RydWN0IG5mc19jbGllbnQgKm5mc19jYl9maW5kX2NsaWVudChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQotewotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2Vzc2lvbmlkID0gYmNfeHBydF9zaWQocnFzdHApOwotCWludCBpc19jYl9jb21wb3VuZCA9IHJxc3RwLT5ycV9wcm9jID09IENCX0NPTVBPVU5EID8gMSA6IDA7Ci0KLQlkcHJpbnRrKCItLT4gJXMgcnFfcHJvYyAlZFxuIiwgX19mdW5jX18sIHJxc3RwLT5ycV9wcm9jKTsKLQlpZiAoc3ZjX2lzX2JhY2tjaGFubmVsKHJxc3RwKSkKLQkJLyogU2Vzc2lvbmlkICh1c3VhbGx5KSBzZXQgYWZ0ZXIgQ0JfTlVMTCBwaW5nICovCi0JCXJldHVybiBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChzdmNfYWRkcihycXN0cCksIHNlc3Npb25pZCwKLQkJCQkJCSAgaXNfY2JfY29tcG91bmQpOwotCWVsc2UKLQkJLyogTm8gY2FsbGJhY2sgaWRlbnRpZmllciBpbiBwZ19hdXRoZW50aWNhdGUgKi8KLQkJcmV0dXJuIG5mczRfZmluZF9jbGllbnRfbm9faWRlbnQoc3ZjX2FkZHIocnFzdHApKTsKLX0KLQotLyogcGdfYXV0aGVudGljYXRlIG1ldGhvZCBmb3IgbmZzdjQgY2FsbGJhY2sgdGhyZWFkcy4gKi8KKy8qCisgKiBwZ19hdXRoZW50aWNhdGUgbWV0aG9kIGZvciBuZnN2NCBjYWxsYmFjayB0aHJlYWRzLgorICoKKyAqIFRoZSBhdXRoZmxhdm9yIGhhcyBiZWVuIG5lZ290aWF0ZWQsIHNvIGFuIGluY29ycmVjdCBmbGF2b3IgaXMgYSBzZXJ2ZXIKKyAqIGJ1Zy4gRHJvcCBwYWNrZXRzIHdpdGggaW5jb3JyZWN0IGF1dGhmbGF2b3IuCisgKgorICogQWxsIG90aGVyIGNoZWNraW5nIGRvbmUgYWZ0ZXIgTkZTIGRlY29kaW5nIHdoZXJlIHRoZSBuZnNfY2xpZW50IGNhbiBiZQorICogZm91bmQgaW4gbmZzNF9jYWxsYmFja19jb21wb3VuZAorICovCiBzdGF0aWMgaW50IG5mc19jYWxsYmFja19hdXRoZW50aWNhdGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKIHsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOwotCVJQQ19JRkRFQlVHKGNoYXIgYnVmW1JQQ19NQVhfQUREUkJVRkxFTl0pOwotCWludCByZXQgPSBTVkNfT0s7Ci0KLQkvKiBEb24ndCB0YWxrIHRvIHN0cmFuZ2VycyAqLwotCWNscCA9IG5mc19jYl9maW5kX2NsaWVudChycXN0cCk7Ci0JaWYgKGNscCA9PSBOVUxMKQotCQlyZXR1cm4gU1ZDX0RST1A7Ci0KLQlkcHJpbnRrKCIlczogJXMgTkZTdjQgY2FsbGJhY2shXG4iLCBfX2Z1bmNfXywKLQkJCXN2Y19wcmludF9hZGRyKHJxc3RwLCBidWYsIHNpemVvZihidWYpKSk7Ci0KIAlzd2l0Y2ggKHJxc3RwLT5ycV9hdXRob3AtPmZsYXZvdXIpIHsKLQkJY2FzZSBSUENfQVVUSF9OVUxMOgotCQkJaWYgKHJxc3RwLT5ycV9wcm9jICE9IENCX05VTEwpCi0JCQkJcmV0ID0gU1ZDX0RFTklFRDsKLQkJCWJyZWFrOwotCQljYXNlIFJQQ19BVVRIX1VOSVg6Ci0JCQlicmVhazsKLQkJY2FzZSBSUENfQVVUSF9HU1M6Ci0JCQlyZXQgPSBjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKGNscCwgcnFzdHApOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXQgPSBTVkNfREVOSUVEOworCWNhc2UgUlBDX0FVVEhfTlVMTDoKKwkJaWYgKHJxc3RwLT5ycV9wcm9jICE9IENCX05VTEwpCisJCQlyZXR1cm4gU1ZDX0RST1A7CisJCWJyZWFrOworCWNhc2UgUlBDX0FVVEhfR1NTOgorCQkvKiBObyBSUENfQVVUSF9HU1Mgc3VwcG9ydCB5ZXQgaW4gTkZTdjQuMSAqLworCQkgaWYgKHN2Y19pc19iYWNrY2hhbm5lbChycXN0cCkpCisJCQlyZXR1cm4gU1ZDX0RST1A7CiAJfQotCW5mc19wdXRfY2xpZW50KGNscCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gU1ZDX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmggYi9mcy9uZnMvY2FsbGJhY2suaAppbmRleCBkM2I0NGY5Li40NmQ5M2NlIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suaAorKysgYi9mcy9uZnMvY2FsbGJhY2suaApAQCAtNyw2ICs3LDcgQEAKICAqLwogI2lmbmRlZiBfX0xJTlVYX0ZTX05GU19DQUxMQkFDS19ICiAjZGVmaW5lIF9fTElOVVhfRlNfTkZTX0NBTExCQUNLX0gKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjLmg+CiAKICNkZWZpbmUgTkZTNF9DQUxMQkFDSyAweDQwMDAwMDAwCiAjZGVmaW5lIE5GUzRfQ0FMTEJBQ0tfWERSU0laRSAyMDQ4CkBAIC0zNyw3ICszOCw2IEBACiBzdHJ1Y3QgY2JfcHJvY2Vzc19zdGF0ZSB7CiAJX19iZTMyCQkJZHJjX3N0YXR1czsKIAlzdHJ1Y3QgbmZzX2NsaWVudAkqY2xwOwotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZAkqc3ZjX3NpZDsgLyogdjQuMSBjYWxsYmFjayBzZXJ2aWNlIHNlc3Npb25pZCAqLwogfTsKIAogc3RydWN0IGNiX2NvbXBvdW5kX2hkcl9hcmcgewpAQCAtMTY4LDcgKzE2OCw3IEBACiBleHRlcm4gdm9pZCBuZnM0X2NoZWNrX2RyYWluX2JjX2NvbXBsZXRlKHN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlcyk7CiBleHRlcm4gdm9pZCBuZnM0X2NiX3Rha2Vfc2xvdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KLQorZXh0ZXJuIGludCBjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKHN0cnVjdCBuZnNfY2xpZW50ICosIHN0cnVjdCBzdmNfcnFzdCAqKTsKIGV4dGVybiBfX2JlMzIgbmZzNF9jYWxsYmFja19nZXRhdHRyKHN0cnVjdCBjYl9nZXRhdHRyYXJncyAqYXJncywKIAkJCQkgICAgc3RydWN0IGNiX2dldGF0dHJyZXMgKnJlcywKIAkJCQkgICAgc3RydWN0IGNiX3Byb2Nlc3Nfc3RhdGUgKmNwcyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jIGIvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYwppbmRleCA0YmI5MWNiLi44OTU4NzU3IDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCisrKyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKQEAgLTM3MywxNyArMzczLDExIEBACiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscDsKIAlpbnQgaTsKLQlfX2JlMzIgc3RhdHVzOworCV9fYmUzMiBzdGF0dXMgPSBodG9ubChORlM0RVJSX0JBRFNFU1NJT04pOwogCiAJY3BzLT5jbHAgPSBOVUxMOwogCi0Jc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9CQURTRVNTSU9OKTsKLQkvKiBJbmNvbWluZyBzZXNzaW9uIG11c3QgbWF0Y2ggdGhlIGNhbGxiYWNrIHNlc3Npb24gKi8KLQlpZiAobWVtY21wKCZhcmdzLT5jc2Ffc2Vzc2lvbmlkLCBjcHMtPnN2Y19zaWQsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pKQotCQlnb3RvIG91dDsKLQotCWNscCA9IG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGFyZ3MtPmNzYV9hZGRyLAotCQkJCQkgJmFyZ3MtPmNzYV9zZXNzaW9uaWQsIDEpOworCWNscCA9IG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGFyZ3MtPmNzYV9hZGRyLCAmYXJncy0+Y3NhX3Nlc3Npb25pZCk7CiAJaWYgKGNscCA9PSBOVUxMKQogCQlnb3RvIG91dDsKIApAQCAtNDE0LDkgKzQwOCw5IEBACiAJcmVzLT5jc3JfaGlnaGVzdHNsb3RpZCA9IE5GUzQxX0JDX01BWF9DQUxMQkFDS1MgLSAxOwogCXJlcy0+Y3NyX3RhcmdldF9oaWdoZXN0c2xvdGlkID0gTkZTNDFfQkNfTUFYX0NBTExCQUNLUyAtIDE7CiAJbmZzNF9jYl90YWtlX3Nsb3QoY2xwKTsKLQljcHMtPmNscCA9IGNscDsgLyogcHV0IGluIG5mczRfY2FsbGJhY2tfY29tcG91bmQgKi8KIAogb3V0OgorCWNwcy0+Y2xwID0gY2xwOyAvKiBwdXQgaW4gbmZzNF9jYWxsYmFja19jb21wb3VuZCAqLwogCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5jc2FfbnJjbGlzdHM7IGkrKykKIAkJa2ZyZWUoYXJncy0+Y3NhX3JjbGlzdHNbaV0ucmNsX3JlZmNhbGxzKTsKIAlrZnJlZShhcmdzLT5jc2FfcmNsaXN0cyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMgYi9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKaW5kZXggMjMxMTJjMi4uMTRlMGY5MyAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jCisrKyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwpAQCAtNzk0LDEwICs3OTQsOSBAQAogCiAJaWYgKGhkcl9hcmcubWlub3J2ZXJzaW9uID09IDApIHsKIAkJY3BzLmNscCA9IG5mczRfZmluZF9jbGllbnRfaWRlbnQoaGRyX2FyZy5jYl9pZGVudCk7Ci0JCWlmICghY3BzLmNscCkKKwkJaWYgKCFjcHMuY2xwIHx8ICFjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKGNwcy5jbHAsIHJxc3RwKSkKIAkJCXJldHVybiBycGNfZHJvcF9yZXBseTsKLQl9IGVsc2UKLQkJY3BzLnN2Y19zaWQgPSBiY194cHJ0X3NpZChycXN0cCk7CisJfQogCiAJaGRyX3Jlcy50YWdsZW4gPSBoZHJfYXJnLnRhZ2xlbjsKIAloZHJfcmVzLnRhZyA9IGhkcl9hcmcudGFnOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NsaWVudC5jIGIvZnMvbmZzL2NsaWVudC5jCmluZGV4IDE5MmYyZjguLmJkM2NhMzIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jbGllbnQuYworKysgYi9mcy9uZnMvY2xpZW50LmMKQEAgLTEyMDYsMTYgKzEyMDYsMTEgQEAKICAqIEZvciBDQl9DT01QT1VORCBjYWxscywgZmluZCBhIGNsaWVudCBieSBJUCBhZGRyZXNzLCBwcm90b2NvbCB2ZXJzaW9uLAogICogbWlub3J2ZXJzaW9uLCBhbmQgc2Vzc2lvbklECiAgKgotICogQ1JFQVRFX1NFU1NJT04gdHJpZ2dlcnMgYSBDQl9OVUxMIHBpbmcgZnJvbSBzZXJ2ZXJzLiBUaGUgY2FsbGJhY2sgc2VydmljZQotICogc2Vzc2lvbmlkIGNhbiBvbmx5IGJlIHNldCBhZnRlciB0aGUgQ1JFQVRFX1NFU1NJT04gcmV0dXJuLCBzbyBhIENCX05VTEwKLSAqIGNhbiBhcnJpdmUgYmVmb3JlIHRoZSBjYWxsYmFjayBzZXNzaW9uaWQgaXMgc2V0LiBGb3IgQ0JfTlVMTCBjYWxscywKLSAqIGZpbmQgYSBjbGllbnQgYnkgSVAgYWRkcmVzcyBwcm90b2NvbCB2ZXJzaW9uLCBhbmQgbWlub3J2ZXJzaW9uLgotICoKICAqIFJldHVybnMgTlVMTCBpZiBubyBzdWNoIGNsaWVudAogICovCiBzdHJ1Y3QgbmZzX2NsaWVudCAqCiBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0JCQkgICBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNpZCwgaW50IGlzX2NiX2NvbXBvdW5kKQorCQkJICAgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQpCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscDsKIApAQCAtMTIyNyw5ICsxMjIyLDkgQEAKIAkJaWYgKCFuZnM0X2hhc19zZXNzaW9uKGNscCkpCiAJCQljb250aW51ZTsKIAotCQkvKiBNYXRjaCBzZXNzaW9uaWQgdW5sZXNzIGNiX251bGwgY2FsbCovCi0JCWlmIChpc19jYl9jb21wb3VuZCAmJiAobWVtY21wKGNscC0+Y2xfc2Vzc2lvbi0+c2Vzc19pZC5kYXRhLAotCQkgICAgc2lkLT5kYXRhLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKSAhPSAwKSkKKwkJLyogTWF0Y2ggc2Vzc2lvbmlkKi8KKwkJaWYgKG1lbWNtcChjbHAtPmNsX3Nlc3Npb24tPnNlc3NfaWQuZGF0YSwKKwkJICAgIHNpZC0+ZGF0YSwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTikgIT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCWF0b21pY19pbmMoJmNscC0+Y2xfY291bnQpOwpAQCAtMTI0NCw3ICsxMjM5LDcgQEAKIAogc3RydWN0IG5mc19jbGllbnQgKgogbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJICAgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQsIGludCBpc19jYl9jb21wb3VuZCkKKwkJCSAgIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2lkKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RlbGVnYXRpb24uYyBiL2ZzL25mcy9kZWxlZ2F0aW9uLmMKaW5kZXggMzY0ZTQzMi4uYmJiYzZiZiAxMDA2NDQKLS0tIGEvZnMvbmZzL2RlbGVnYXRpb24uYworKysgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCkBAIC0yMyw4ICsyMyw2IEBACiAKIHN0YXRpYyB2b2lkIG5mc19kb19mcmVlX2RlbGVnYXRpb24oc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uKQogewotCWlmIChkZWxlZ2F0aW9uLT5jcmVkKQotCQlwdXRfcnBjY3JlZChkZWxlZ2F0aW9uLT5jcmVkKTsKIAlrZnJlZShkZWxlZ2F0aW9uKTsKIH0KIApAQCAtMzcsNiArMzUsMTAgQEAKIAogc3RhdGljIHZvaWQgbmZzX2ZyZWVfZGVsZWdhdGlvbihzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb24pCiB7CisJaWYgKGRlbGVnYXRpb24tPmNyZWQpIHsKKwkJcHV0X3JwY2NyZWQoZGVsZWdhdGlvbi0+Y3JlZCk7CisJCWRlbGVnYXRpb24tPmNyZWQgPSBOVUxMOworCX0KIAljYWxsX3JjdSgmZGVsZWdhdGlvbi0+cmN1LCBuZnNfZnJlZV9kZWxlZ2F0aW9uX2NhbGxiYWNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IGU2YWNlMGQuLjk5NDNhNzUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTQwNywxNSArNDA3LDE4IEBACiAJCXBvcyArPSB2ZWMtPmlvdl9sZW47CiAJfQogCisJLyoKKwkgKiBJZiBubyBieXRlcyB3ZXJlIHN0YXJ0ZWQsIHJldHVybiB0aGUgZXJyb3IsIGFuZCBsZXQgdGhlCisJICogZ2VuZXJpYyBsYXllciBoYW5kbGUgdGhlIGNvbXBsZXRpb24uCisJICovCisJaWYgKHJlcXVlc3RlZF9ieXRlcyA9PSAwKSB7CisJCW5mc19kaXJlY3RfcmVxX3JlbGVhc2UoZHJlcSk7CisJCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogLUVJTzsKKwl9CisKIAlpZiAocHV0X2RyZXEoZHJlcSkpCiAJCW5mc19kaXJlY3RfY29tcGxldGUoZHJlcSk7Ci0KLQlpZiAocmVxdWVzdGVkX2J5dGVzICE9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHJlc3VsdCA8IDApCi0JCXJldHVybiByZXN1bHQ7Ci0JcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG5mc19kaXJlY3RfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LApAQCAtODQxLDE1ICs4NDQsMTggQEAKIAkJcG9zICs9IHZlYy0+aW92X2xlbjsKIAl9CiAKKwkvKgorCSAqIElmIG5vIGJ5dGVzIHdlcmUgc3RhcnRlZCwgcmV0dXJuIHRoZSBlcnJvciwgYW5kIGxldCB0aGUKKwkgKiBnZW5lcmljIGxheWVyIGhhbmRsZSB0aGUgY29tcGxldGlvbi4KKwkgKi8KKwlpZiAocmVxdWVzdGVkX2J5dGVzID09IDApIHsKKwkJbmZzX2RpcmVjdF9yZXFfcmVsZWFzZShkcmVxKTsKKwkJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiAtRUlPOworCX0KKwogCWlmIChwdXRfZHJlcShkcmVxKSkKIAkJbmZzX2RpcmVjdF93cml0ZV9jb21wbGV0ZShkcmVxLCBkcmVxLT5pbm9kZSk7Ci0KLQlpZiAocmVxdWVzdGVkX2J5dGVzICE9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHJlc3VsdCA8IDApCi0JCXJldHVybiByZXN1bHQ7Ci0JcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG5mc19kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggZDg1MTI0Mi4uMWNjNjAwZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTg4MSw5ICs4ODEsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBuZnNfd2NjX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5mc193Y2NfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVDSEFOR0UpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFKQpAQCAtODkxLDI1ICs4OTIsMzIgQEAKIAkJbmZzaS0+Y2hhbmdlX2F0dHIgPSBmYXR0ci0+Y2hhbmdlX2F0dHI7CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKIAl9CiAJLyogSWYgd2UgaGF2ZSBhdG9taWMgV0NDIGRhdGEsIHdlIG1heSB1cGRhdGUgc29tZSBhdHRyaWJ1dGVzICovCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVDVElNRSkKIAkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DVElNRSkKLQkJCSYmIHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5wcmVfY3RpbWUpKQotCQkJbWVtY3B5KCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5jdGltZSwgc2l6ZW9mKGlub2RlLT5pX2N0aW1lKSk7CisJCQkmJiB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+cHJlX2N0aW1lKSkgeworCQltZW1jcHkoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPmN0aW1lLCBzaXplb2YoaW5vZGUtPmlfY3RpbWUpKTsKKwkJcmV0IHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOworCX0KIAogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFTVRJTUUpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTVRJTUUpCiAJCQkmJiB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+cHJlX210aW1lKSkgewotCQkJbWVtY3B5KCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5tdGltZSwgc2l6ZW9mKGlub2RlLT5pX210aW1lKSk7Ci0JCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJCQluZnNpLT5jYWNoZV92YWxpZGl0eSB8PSBORlNfSU5PX0lOVkFMSURfREFUQTsKKwkJbWVtY3B5KCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5tdGltZSwgc2l6ZW9mKGlub2RlLT5pX210aW1lKSk7CisJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKIAl9CiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVTSVpFKQogCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1NJWkUpCiAJCQkmJiBpX3NpemVfcmVhZChpbm9kZSkgPT0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5wcmVfc2l6ZSkKLQkJCSYmIG5mc2ktPm5wYWdlcyA9PSAwKQotCQkJaV9zaXplX3dyaXRlKGlub2RlLCBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpKTsKKwkJCSYmIG5mc2ktPm5wYWdlcyA9PSAwKSB7CisJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKSk7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xMjIzLDcgKzEyMzEsNyBAQAogCQkJfCBORlNfSU5PX1JFVkFMX1BBR0VDQUNIRSk7CiAKIAkvKiBEbyBhdG9taWMgd2VhayBjYWNoZSBjb25zaXN0ZW5jeSB1cGRhdGVzICovCi0JbmZzX3djY191cGRhdGVfaW5vZGUoaW5vZGUsIGZhdHRyKTsKKwlpbnZhbGlkIHw9IG5mc193Y2NfdXBkYXRlX2lub2RlKGlub2RlLCBmYXR0cik7CiAKIAkvKiBNb3JlIGNhY2hlIGNvbnNpc3RlbmN5IGNoZWNrcyAqLwogCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DSEFOR0UpIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgKaW5kZXggNDY0NGYwNC4uY2Y5ZmRiZCAxMDA2NDQKLS0tIGEvZnMvbmZzL2ludGVybmFsLmgKKysrIGIvZnMvbmZzL2ludGVybmFsLmgKQEAgLTEzMyw4ICsxMzMsNyBAQAogZXh0ZXJuIHN0cnVjdCBuZnNfY2xpZW50ICpuZnM0X2ZpbmRfY2xpZW50X25vX2lkZW50KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKTsKIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqbmZzNF9maW5kX2NsaWVudF9pZGVudChpbnQpOwogZXh0ZXJuIHN0cnVjdCBuZnNfY2xpZW50ICoKLW5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKiwKLQkJCSAgIGludCk7CituZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IG5mczRfc2Vzc2lvbmlkICopOwogZXh0ZXJuIHN0cnVjdCBuZnNfc2VydmVyICpuZnNfY3JlYXRlX3NlcnZlcigKIAkJCQkJY29uc3Qgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqLAogCQkJCQlzdHJ1Y3QgbmZzX2ZoICopOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNhY2wuYyBiL2ZzL25mcy9uZnMzYWNsLmMKaW5kZXggOWY4OGM1Zi4uMjc0MzQyNyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNhY2wuYworKysgYi9mcy9uZnMvbmZzM2FjbC5jCkBAIC0zMTEsOCArMzExLDggQEAKIAlpZiAoIW5mc19zZXJ2ZXJfY2FwYWJsZShpbm9kZSwgTkZTX0NBUF9BQ0xTKSkKIAkJZ290byBvdXQ7CiAKLQkvKiBXZSBhcmUgZG9pbmcgdGhpcyBoZXJlLCBiZWNhdXNlIFhEUiBtYXJzaGFsbGluZyBjYW4gb25seQotCSAgIHJldHVybiAtRU5PTUVNLiAqLworCS8qIFdlIGFyZSBkb2luZyB0aGlzIGhlcmUgYmVjYXVzZSBYRFIgbWFyc2hhbGxpbmcgZG9lcyBub3QKKwkgKiByZXR1cm4gYW55IHJlc3VsdHMsIGl0IEJVR3MuICovCiAJc3RhdHVzID0gLUVOT1NQQzsKIAlpZiAoYWNsICE9IE5VTEwgJiYgYWNsLT5hX2NvdW50ID4gTkZTX0FDTF9NQVhfRU5UUklFUykKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3hkci5jIGIvZnMvbmZzL25mczN4ZHIuYwppbmRleCAwMWM1ZThiLi4xODNjNmIxIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM3hkci5jCisrKyBiL2ZzL25mcy9uZnMzeGRyLmMKQEAgLTEzMjgsMTAgKzEzMjgsMTMgQEAKIAogCWVuY29kZV9uZnNfZmgzKHhkciwgTkZTX0ZIKGFyZ3MtPmlub2RlKSk7CiAJZW5jb2RlX3VpbnQzMih4ZHIsIGFyZ3MtPm1hc2spOwotCWlmIChhcmdzLT5ucGFnZXMgIT0gMCkKLQkJeGRyX3dyaXRlX3BhZ2VzKHhkciwgYXJncy0+cGFnZXMsIDAsIGFyZ3MtPmxlbik7CiAKIAliYXNlID0gcmVxLT5ycV9zbGVuOworCWlmIChhcmdzLT5ucGFnZXMgIT0gMCkKKwkJeGRyX3dyaXRlX3BhZ2VzKHhkciwgYXJncy0+cGFnZXMsIDAsIGFyZ3MtPmxlbik7CisJZWxzZQorCQl4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIE5GU19BQ0xfSU5MSU5FX0JVRlNJWkUpOworCiAJZXJyb3IgPSBuZnNhY2xfZW5jb2RlKHhkci0+YnVmLCBiYXNlLCBhcmdzLT5pbm9kZSwKIAkJCSAgICAoYXJncy0+bWFzayAmIE5GU19BQ0wpID8KIAkJCSAgICBhcmdzLT5hY2xfYWNjZXNzIDogTlVMTCwgMSwgMCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dGRldi5jCmluZGV4IDUxZmU2NGFjLi5mNWM5YjEyIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYworKysgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKIAkvKiBpcHY2IGxlbmd0aCBwbHVzIHBvcnQgaXMgbGVnYWwgKi8KIAlpZiAocmxlbiA+IElORVQ2X0FERFJTVFJMRU4gKyA4KSB7Ci0JCWRwcmludGsoIiVzIEludmFsaWQgYWRkcmVzcywgbGVuZ3RoICVkXG4iLCBfX2Z1bmNfXywKKwkJZHByaW50aygiJXM6IEludmFsaWQgYWRkcmVzcywgbGVuZ3RoICVkXG4iLCBfX2Z1bmNfXywKIAkJCXJsZW4pOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMjI1LDYgKzIyNSwxMSBAQAogCS8qIHJlcGxhY2UgdGhlIHBvcnQgZG90cyB3aXRoIGRhc2hlcyBmb3IgdGhlIGluNF9wdG9uKCkgZGVsaW1pdGVyKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWNoYXIgKnJlcyA9IHN0cnJjaHIoYnVmLCAnLicpOworCQlpZiAoIXJlcykgeworCQkJZHByaW50aygiJXM6IEZhaWxlZCBmaW5kaW5nIGV4cGVjdGVkIGRvdHMgaW4gcG9ydFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CiAJCSpyZXMgPSAnLSc7CiAJfQogCkBAIC0yNDAsNyArMjQ1LDcgQEAKIAlwb3J0ID0gaHRvbnMoKHRtcFswXSA8PCA4KSB8ICh0bXBbMV0pKTsKIAogCWRzID0gbmZzNF9wbmZzX2RzX2FkZChpbm9kZSwgaXBfYWRkciwgcG9ydCk7Ci0JZHByaW50aygiJXMgRGVjb2RlZCBhZGRyZXNzIGFuZCBwb3J0ICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKKwlkcHJpbnRrKCIlczogRGVjb2RlZCBhZGRyZXNzIGFuZCBwb3J0ICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKIG91dF9mcmVlOgogCWtmcmVlKGJ1Zik7CiBvdXRfZXJyOgpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA5ZDk5MmIwLi4xZmY3NmFjIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNTAsNiArNTAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9iY194cHJ0Lmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgIm5mczRfZnMuaCIKICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiCkBAIC0zMjUxLDYgKzMyNTMsMzUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgYnVmX3RvX3BhZ2VzX25vc2xhYihjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4sCisJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCAqcGdiYXNlKQoreworCXN0cnVjdCBwYWdlICpuZXdwYWdlLCAqKnNwYWdlczsKKwlpbnQgcmMgPSAwOworCXNpemVfdCBsZW47CisJc3BhZ2VzID0gcGFnZXM7CisKKwlkbyB7CisJCWxlbiA9IG1pbihQQUdFX0NBQ0hFX1NJWkUsIGJ1Zmxlbik7CisJCW5ld3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCisJCWlmIChuZXdwYWdlID09IE5VTEwpCisJCQlnb3RvIHVud2luZDsKKwkJbWVtY3B5KHBhZ2VfYWRkcmVzcyhuZXdwYWdlKSwgYnVmLCBsZW4pOworICAgICAgICAgICAgICAgIGJ1ZiArPSBsZW47CisgICAgICAgICAgICAgICAgYnVmbGVuIC09IGxlbjsKKwkJKnBhZ2VzKysgPSBuZXdwYWdlOworCQlyYysrOworCX0gd2hpbGUgKGJ1ZmxlbiAhPSAwKTsKKworCXJldHVybiByYzsKKwordW53aW5kOgorCWZvcig7IHJjID4gMDsgcmMtLSkKKwkJX19mcmVlX3BhZ2Uoc3BhZ2VzW3JjLTFdKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwogc3RydWN0IG5mczRfY2FjaGVkX2FjbCB7CiAJaW50IGNhY2hlZDsKIAlzaXplX3QgbGVuOwpAQCAtMzQxOSwxMyArMzQ1MCwyMyBAQAogCQkucnBjX2FyZ3AJPSAmYXJnLAogCQkucnBjX3Jlc3AJPSAmcmVzLAogCX07Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCiAJaWYgKCFuZnM0X3NlcnZlcl9zdXBwb3J0c19hY2xzKHNlcnZlcikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlpID0gYnVmX3RvX3BhZ2VzX25vc2xhYihidWYsIGJ1ZmxlbiwgYXJnLmFjbF9wYWdlcywgJmFyZy5hY2xfcGdiYXNlKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOwogCW5mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihpbm9kZSk7Ci0JYnVmX3RvX3BhZ2VzKGJ1ZiwgYnVmbGVuLCBhcmcuYWNsX3BhZ2VzLCAmYXJnLmFjbF9wZ2Jhc2UpOwogCXJldCA9IG5mczRfY2FsbF9zeW5jKHNlcnZlciwgJm1zZywgJmFyZywgJnJlcywgMSk7CisKKwkvKgorCSAqIEZyZWUgZWFjaCBwYWdlIGFmdGVyIHR4LCBzbyB0aGUgb25seSByZWYgbGVmdCBpcworCSAqIGhlbGQgYnkgdGhlIG5ldHdvcmsgc3RhY2sKKwkgKi8KKwlmb3IgKDsgaSA+IDA7IGktLSkKKwkJcHV0X3BhZ2UocGFnZXNbaS0xXSk7CisKIAkvKgogCSAqIEFjbCB1cGRhdGUgY2FuIHJlc3VsdCBpbiBpbm9kZSBhdHRyaWJ1dGUgdXBkYXRlLgogCSAqIHNvIG1hcmsgdGhlIGF0dHJpYnV0ZSBjYWNoZSBpbnZhbGlkLgpAQCAtNDU3MiwyNyArNDYxMywxNiBAQAogCSpwID0gaHRvbmwoKHUzMiljbHAtPmNsX2Jvb3RfdGltZS50dl9uc2VjKTsKIAlhcmdzLnZlcmlmaWVyID0gJnZlcmlmaWVyOwogCi0Jd2hpbGUgKDEpIHsKLQkJYXJncy5pZF9sZW4gPSBzY25wcmludGYoYXJncy5pZCwgc2l6ZW9mKGFyZ3MuaWQpLAotCQkJCQkiJXMvJXMgJXUiLAotCQkJCQljbHAtPmNsX2lwYWRkciwKLQkJCQkJcnBjX3BlZXJhZGRyMnN0cihjbHAtPmNsX3JwY2NsaWVudCwKLQkJCQkJCQkgUlBDX0RJU1BMQVlfQUREUiksCi0JCQkJCWNscC0+Y2xfaWRfdW5pcXVpZmllcik7CisJYXJncy5pZF9sZW4gPSBzY25wcmludGYoYXJncy5pZCwgc2l6ZW9mKGFyZ3MuaWQpLAorCQkJCSIlcy8lcy4lcy8ldSIsCisJCQkJY2xwLT5jbF9pcGFkZHIsCisJCQkJaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLAorCQkJCWluaXRfdXRzbmFtZSgpLT5kb21haW5uYW1lLAorCQkJCWNscC0+Y2xfcnBjY2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3IpOwogCi0JCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOwotCi0JCWlmIChzdGF0dXMgIT0gLU5GUzRFUlJfQ0xJRF9JTlVTRSkKLQkJCWJyZWFrOwotCi0JCWlmIChzaWduYWxsZWQoKSkKLQkJCWJyZWFrOwotCi0JCWlmICgrK2NscC0+Y2xfaWRfdW5pcXVpZmllciA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0Jc3RhdHVzID0gbmZzNF9jaGVja19jbF9leGNoYW5nZV9mbGFncyhjbHAtPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gbmZzNF9jaGVja19jbF9leGNoYW5nZV9mbGFncyhjbHAtPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKIAlkcHJpbnRrKCI8LS0gJXMgc3RhdHVzPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCAyMzM2ZDUzLi5lNjc0MmI1IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC0yMzIsMTIgKzIzMiw2IEBACiAJc3RhdHVzID0gbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBuZnM0X3NldF9jYWxsYmFja19zZXNzaW9uaWQoY2xwKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2Vzc2lvbmlkIG5vdCBzZXQuIE5vIGNhbGxiYWNrIHNlcnZpY2VcbiIpOwotCQluZnNfY2FsbGJhY2tfZG93bigxKTsKLQkJc3RhdHVzID0gMDsKLQl9CiAJbmZzNDFfc2V0dXBfc3RhdGVfcmVuZXdhbChjbHApOwogCW5mc19tYXJrX2NsaWVudF9yZWFkeShjbHAsIE5GU19DU19SRUFEWSk7CiBvdXQ6CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCAyYWI4ZTVjLi40ZTJjMTY4IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTYwODYsMTEgKzYwODYsMTEgQEAKIAlfX2JlMzIgKnAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCWlmICghbnRvaGwoKnArKykpIHsKKwlpZiAoKnAgPT0geGRyX3plcm8pIHsKIAkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CiAJCWlmICh1bmxpa2VseSghcCkpCiAJCQlnb3RvIG91dF9vdmVyZmxvdzsKLQkJaWYgKCFudG9obCgqcCsrKSkKKwkJaWYgKCpwID09IHhkcl96ZXJvKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCWVudHJ5LT5lb2YgPSAxOwogCQlyZXR1cm4gLUVCQURDT09LSUU7CkBAIC02MTAxLDcgKzYxMDEsNyBAQAogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAllbnRyeS0+cHJldl9jb29raWUgPSBlbnRyeS0+Y29va2llOwogCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZlbnRyeS0+Y29va2llKTsKLQllbnRyeS0+bGVuID0gbnRvaGwoKnArKyk7CisJZW50cnktPmxlbiA9IGJlMzJfdG9fY3B1cChwKTsKIAogCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIGVudHJ5LT5sZW4pOwogCWlmICh1bmxpa2VseSghcCkpCkBAIC02MTMyLDkgKzYxMzIsNiBAQAogCWlmIChlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVFlQRSkKIAkJZW50cnktPmRfdHlwZSA9IG5mc191bW9kZV90b19kdHlwZShlbnRyeS0+ZmF0dHItPm1vZGUpOwogCi0JaWYgKHZlcmlmeV9hdHRyX2xlbih4ZHIsIHAsIGxlbikgPCAwKQotCQlnb3RvIG91dF9vdmVyZmxvdzsKLQogCXJldHVybiAwOwogCiBvdXRfb3ZlcmZsb3c6CmRpZmYgLS1naXQgYS9mcy9uZnMvcG5mcy5jIGIvZnMvbmZzL3BuZnMuYwppbmRleCBiYzQwODk3Li4xYjFiYzFhIDEwMDY0NAotLS0gYS9mcy9uZnMvcG5mcy5jCisrKyBiL2ZzL25mcy9wbmZzLmMKQEAgLTk1MSw3ICs5NTEsNyBAQAogewogCXN0cnVjdCBwbmZzX2RldmljZWlkX2NhY2hlICpsb2NhbCA9IGNscC0+Y2xfZGV2aWRfY2FjaGU7CiAKLQlkcHJpbnRrKCItLT4gJXMgY2xfZGV2aWRfY2FjaGUgJXBcbiIsIF9fZnVuY19fLCBjbHAtPmNsX2RldmlkX2NhY2hlKTsKKwlkcHJpbnRrKCItLT4gJXMgKHslZH0pXG4iLCBfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmxvY2FsLT5kY19yZWYpKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmbG9jYWwtPmRjX3JlZiwgJmNscC0+Y2xfbG9jaykpIHsKIAkJaW50IGk7CiAJCS8qIFZlcmlmeSBjYWNoZSBpcyBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCAxMGQ2NDhlYS4uYzgyNzhmNCAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTkzMiw3ICs5MzIsNyBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKIAkJZGF0YSA9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEsIHBhZ2VzKTsKIAkJbGlzdF9kZWwoJmRhdGEtPnBhZ2VzKTsKLQkJbmZzX3dyaXRlZGF0YV9yZWxlYXNlKGRhdGEpOworCQluZnNfd3JpdGVkYXRhX2ZyZWUoZGF0YSk7CiAJfQogCW5mc19yZWRpcnR5X3JlcXVlc3QocmVxKTsKIAlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMgYi9mcy9uZnNfY29tbW9uL25mc2FjbC5jCmluZGV4IGZjMWM1MjUuLjg0YzI3ZDYgMTAwNjQ0Ci0tLSBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMKKysrIGIvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYwpAQCAtNDIsNiArNDIsMTEgQEAKIAlnaWRfdCBnaWQ7CiB9OwogCitzdHJ1Y3QgbmZzYWNsX3NpbXBsZV9hY2wgeworCXN0cnVjdCBwb3NpeF9hY2wgYWNsOworCXN0cnVjdCBwb3NpeF9hY2xfZW50cnkgYWNlWzRdOworfTsKKwogc3RhdGljIGludAogeGRyX25mc2FjZV9lbmNvZGUoc3RydWN0IHhkcl9hcnJheTJfZGVzYyAqZGVzYywgdm9pZCAqZWxlbSkKIHsKQEAgLTcyLDkgKzc3LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGludAotbmZzYWNsX2VuY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCBlbmNvZGVfZW50cmllcywgaW50IHR5cGVmbGFnKQorLyoqCisgKiBuZnNhY2xfZW5jb2RlIC0gRW5jb2RlIGFuIE5GU3YzIEFDTAorICoKKyAqIEBidWY6IGRlc3RpbmF0aW9uIHhkcl9idWYgdG8gY29udGFpbiBYRFIgZW5jb2RlZCBBQ0wKKyAqIEBiYXNlOiBieXRlIG9mZnNldCBpbiB4ZHJfYnVmIHdoZXJlIFhEUidkIEFDTCBiZWdpbnMKKyAqIEBpbm9kZTogaW5vZGUgb2YgZmlsZSB3aG9zZSBBQ0wgdGhpcyBpcworICogQGFjbDogcG9zaXhfYWNsIHRvIGVuY29kZQorICogQGVuY29kZV9lbnRyaWVzOiB3aGV0aGVyIHRvIGVuY29kZSBBQ0VzIGFzIHdlbGwKKyAqIEB0eXBlZmxhZzogQUNMIHR5cGU6IE5GU19BQ0xfREVGQVVMVCBvciB6ZXJvCisgKgorICogUmV0dXJucyBzaXplIG9mIGVuY29kZWQgQUNMIGluIGJ5dGVzIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUuCisgKi8KK2ludCBuZnNhY2xfZW5jb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IGVuY29kZV9lbnRyaWVzLCBpbnQgdHlwZWZsYWcpCiB7CiAJaW50IGVudHJpZXMgPSAoYWNsICYmIGFjbC0+YV9jb3VudCkgPyBtYXhfdChpbnQsIGFjbC0+YV9jb3VudCwgNCkgOiAwOwogCXN0cnVjdCBuZnNhY2xfZW5jb2RlX2Rlc2MgbmZzYWNsX2Rlc2MgPSB7CkBAIC04OCwxNyArMTA0LDIyIEBACiAJCS51aWQgPSBpbm9kZS0+aV91aWQsCiAJCS5naWQgPSBpbm9kZS0+aV9naWQsCiAJfTsKKwlzdHJ1Y3QgbmZzYWNsX3NpbXBsZV9hY2wgYWNsYnVmOwogCWludCBlcnI7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsMiA9IE5VTEw7CiAKIAlpZiAoZW50cmllcyA+IE5GU19BQ0xfTUFYX0VOVFJJRVMgfHwKIAkgICAgeGRyX2VuY29kZV93b3JkKGJ1ZiwgYmFzZSwgZW50cmllcykpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChlbmNvZGVfZW50cmllcyAmJiBhY2wgJiYgYWNsLT5hX2NvdW50ID09IDMpIHsKLQkJLyogRmFrZSB1cCBhbiBBQ0xfTUFTSyBlbnRyeS4gKi8KLQkJYWNsMiA9IHBvc2l4X2FjbF9hbGxvYyg0LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFhY2wyKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDIgPSAmYWNsYnVmLmFjbDsKKworCQkvKiBBdm9pZCB0aGUgdXNlIG9mIHBvc2l4X2FjbF9hbGxvYygpLiAgbmZzYWNsX2VuY29kZSgpIGlzCisJCSAqIGludm9rZWQgaW4gY29udGV4dHMgd2hlcmUgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGlzCisJCSAqIGZhdGFsLiAgRm9ydHVuYXRlbHkgdGhpcyBmYWtlIEFDTCBpcyBzbWFsbCBlbm91Z2ggdG8KKwkJICogY29uc3RydWN0IG9uIHRoZSBzdGFjay4gKi8KKwkJbWVtc2V0KGFjbDIsIDAsIHNpemVvZihhY2wyKSk7CisJCXBvc2l4X2FjbF9pbml0KGFjbDIsIDQpOworCiAJCS8qIEluc2VydCBlbnRyaWVzIGluIGNhbm9uaWNhbCBvcmRlcjogb3RoZXIgb3JkZXJzIHNlZW0KIAkJIHRvIGNvbmZ1c2UgU29sYXJpcyBWeEZTLiAqLwogCQlhY2wyLT5hX2VudHJpZXNbMF0gPSBhY2wtPmFfZW50cmllc1swXTsgIC8qIEFDTF9VU0VSX09CSiAqLwpAQCAtMTA5LDggKzEzMCw2IEBACiAJCW5mc2FjbF9kZXNjLmFjbCA9IGFjbDI7CiAJfQogCWVyciA9IHhkcl9lbmNvZGVfYXJyYXkyKGJ1ZiwgYmFzZSArIDQsICZuZnNhY2xfZGVzYy5kZXNjKTsKLQlpZiAoYWNsMikKLQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsMik7CiAJaWYgKCFlcnIpCiAJCWVyciA9IDggKyBuZnNhY2xfZGVzYy5kZXNjLmVsZW1fc2l6ZSAqCiAJCQkgIG5mc2FjbF9kZXNjLmRlc2MuYXJyYXlfbGVuOwpAQCAtMjI0LDkgKzI0MywxOCBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQKLW5mc2FjbF9kZWNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCAqYWNsY250LAotCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKipwYWNsKQorLyoqCisgKiBuZnNhY2xfZGVjb2RlIC0gRGVjb2RlIGFuIE5GU3YzIEFDTAorICoKKyAqIEBidWY6IHhkcl9idWYgY29udGFpbmluZyBYRFInZCBBQ0wgZGF0YSB0byBkZWNvZGUKKyAqIEBiYXNlOiBieXRlIG9mZnNldCBpbiB4ZHJfYnVmIHdoZXJlIFhEUidkIEFDTCBiZWdpbnMKKyAqIEBhY2xjbnQ6IGNvdW50IG9mIEFDRXMgaW4gZGVjb2RlZCBwb3NpeF9hY2wKKyAqIEBwYWNsOiBidWZmZXIgaW4gd2hpY2ggdG8gcGxhY2UgZGVjb2RlZCBwb3NpeF9hY2wKKyAqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGRlY29kZWQgQUNMIGluIGJ5dGVzLCBvciBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLgorICovCitpbnQgbmZzYWNsX2RlY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgaW50ICphY2xjbnQsCisJCSAgc3RydWN0IHBvc2l4X2FjbCAqKnBhY2wpCiB7CiAJc3RydWN0IG5mc2FjbF9kZWNvZGVfZGVzYyBuZnNhY2xfZGVzYyA9IHsKIAkJLmRlc2MgPSB7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRjYWxsYmFjay5jIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwppbmRleCAzYmU5NzVlLi5jZGUzNmNiIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRjYWxsYmFjay5jCisrKyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKQEAgLTQ4NCw3ICs0ODQsNyBAQAogb3V0OgogCXJldHVybiBzdGF0dXM7CiBvdXRfZGVmYXVsdDoKLQlyZXR1cm4gbmZzX2NiX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKKwlyZXR1cm4gbmZzX2NiX3N0YXRfdG9fZXJybm8obmZzZXJyKTsKIH0KIAogLyoKQEAgLTU2NCwxMSArNTY0LDkgQEAKIAlpZiAodW5saWtlbHkoc3RhdHVzKSkKIAkJZ290byBvdXQ7CiAJaWYgKHVubGlrZWx5KG5mc2VyciAhPSBORlM0X09LKSkKLQkJZ290byBvdXRfZGVmYXVsdDsKKwkJc3RhdHVzID0gbmZzX2NiX3N0YXRfdG9fZXJybm8obmZzZXJyKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwotb3V0X2RlZmF1bHQ6Ci0JcmV0dXJuIG5mc19jYl9zdGF0X3RvX2Vycm5vKHN0YXR1cyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRzdGF0ZS5jIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwppbmRleCBkOThkMDIxLi41NGI2MGJmIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKQEAgLTIzMCw5ICsyMzAsNiBAQAogCWRwLT5kbF9jbGllbnQgPSBjbHA7CiAJZ2V0X25mczRfZmlsZShmcCk7CiAJZHAtPmRsX2ZpbGUgPSBmcDsKLQlkcC0+ZGxfdmZzX2ZpbGUgPSBmaW5kX3JlYWRhYmxlX2ZpbGUoZnApOwotCWdldF9maWxlKGRwLT5kbF92ZnNfZmlsZSk7Ci0JZHAtPmRsX2Zsb2NrID0gTlVMTDsKIAlkcC0+ZGxfdHlwZSA9IHR5cGU7CiAJZHAtPmRsX3N0YXRlaWQuc2lfYm9vdCA9IGJvb3RfdGltZTsKIAlkcC0+ZGxfc3RhdGVpZC5zaV9zdGF0ZW93bmVyaWQgPSBjdXJyZW50X2RlbGVnaWQrKzsKQEAgLTI0MSw4ICsyMzgsNiBAQAogCWZoX2NvcHlfc2hhbGxvdygmZHAtPmRsX2ZoLCAmY3VycmVudF9maC0+ZmhfaGFuZGxlKTsKIAlkcC0+ZGxfdGltZSA9IDA7CiAJYXRvbWljX3NldCgmZHAtPmRsX2NvdW50LCAxKTsKLQlsaXN0X2FkZCgmZHAtPmRsX3BlcmZpbGUsICZmcC0+ZmlfZGVsZWdhdGlvbnMpOwotCWxpc3RfYWRkKCZkcC0+ZGxfcGVyY2xudCwgJmNscC0+Y2xfZGVsZWdhdGlvbnMpOwogCUlOSVRfV09SSygmZHAtPmRsX3JlY2FsbC5jYl93b3JrLCBuZnNkNF9kb19jYWxsYmFja19ycGMpOwogCXJldHVybiBkcDsKIH0KQEAgLTI1MywzNiArMjQ4LDMwIEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRwLT5kbF9jb3VudCkpIHsKIAkJZHByaW50aygiTkZTRDogZnJlZWluZyBkcCAlcFxuIixkcCk7CiAJCXB1dF9uZnM0X2ZpbGUoZHAtPmRsX2ZpbGUpOwotCQlmcHV0KGRwLT5kbF92ZnNfZmlsZSk7CiAJCWttZW1fY2FjaGVfZnJlZShkZWxlZ19zbGFiLCBkcCk7CiAJCW51bV9kZWxlZ2F0aW9ucy0tOwogCX0KIH0KIAotLyogUmVtb3ZlIHRoZSBhc3NvY2lhdGVkIGZpbGVfbG9jayBmaXJzdCwgdGhlbiByZW1vdmUgdGhlIGRlbGVnYXRpb24uCi0gKiBsZWFzZV9tb2RpZnkoKSBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBGU19MRUFTRSBmaWxlX2xvY2sgZnJvbQotICogdGhlIGlfZmxvY2sgbGlzdCwgZXZlbnR1YWxseSBjYWxsaW5nIG5mc2QncyBsb2NrX21hbmFnZXIKLSAqIGZsX3JlbGVhc2VfY2FsbGJhY2suCi0gKi8KLXN0YXRpYyB2b2lkCi1uZnM0X2Nsb3NlX2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApCitzdGF0aWMgdm9pZCBuZnM0X3B1dF9kZWxlZ19sZWFzZShzdHJ1Y3QgbmZzNF9maWxlICpmcCkKIHsKLQlkcHJpbnRrKCJORlNEOiBjbG9zZV9kZWxlZ2F0aW9uIGRwICVwXG4iLGRwKTsKLQkvKiBYWFg6IGRvIHdlIGV2ZW4gbmVlZCB0aGlzIGNoZWNrPzogKi8KLQlpZiAoZHAtPmRsX2Zsb2NrKQotCQl2ZnNfc2V0bGVhc2UoZHAtPmRsX3Zmc19maWxlLCBGX1VOTENLLCAmZHAtPmRsX2Zsb2NrKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZnAtPmZpX2RlbGVnZWVzKSkgeworCQl2ZnNfc2V0bGVhc2UoZnAtPmZpX2RlbGVnX2ZpbGUsIEZfVU5MQ0ssICZmcC0+ZmlfbGVhc2UpOworCQlmcC0+ZmlfbGVhc2UgPSBOVUxMOworCQlmcC0+ZmlfZGVsZWdfZmlsZSA9IE5VTEw7CisJfQogfQogCiAvKiBDYWxsZWQgdW5kZXIgdGhlIHN0YXRlIGxvY2suICovCiBzdGF0aWMgdm9pZAogdW5oYXNoX2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApCiB7Ci0JbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmZpbGUpOwogCWxpc3RfZGVsX2luaXQoJmRwLT5kbF9wZXJjbG50KTsKIAlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZkcC0+ZGxfcGVyZmlsZSk7CiAJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3JlY2FsbF9scnUpOwogCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7Ci0JbmZzNF9jbG9zZV9kZWxlZ2F0aW9uKGRwKTsKKwluZnM0X3B1dF9kZWxlZ19sZWFzZShkcC0+ZGxfZmlsZSk7CiAJbmZzNF9wdXRfZGVsZWdhdGlvbihkcCk7CiB9CiAKQEAgLTk1OCw4ICs5NDcsNiBAQAogCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmY2xwLT5jbF9kZWxlZ2F0aW9ucykpIHsKIAkJZHAgPSBsaXN0X2VudHJ5KGNscC0+Y2xfZGVsZWdhdGlvbnMubmV4dCwgc3RydWN0IG5mczRfZGVsZWdhdGlvbiwgZGxfcGVyY2xudCk7Ci0JCWRwcmludGsoIk5GU0Q6IGV4cGlyZSBjbGllbnQuIGRwICVwLCBmcCAlcFxuIiwgZHAsCi0JCQkJZHAtPmRsX2Zsb2NrKTsKIAkJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmNsbnQpOwogCQlsaXN0X21vdmUoJmRwLT5kbF9yZWNhbGxfbHJ1LCAmcmVhcGxpc3QpOwogCX0KQEAgLTIwNzgsNiArMjA2NSw3IEBACiAJCWZwLT5maV9pbm9kZSA9IGlncmFiKGlubyk7CiAJCWZwLT5maV9pZCA9IGN1cnJlbnRfZmlsZWlkKys7CiAJCWZwLT5maV9oYWRfY29uZmxpY3QgPSBmYWxzZTsKKwkJZnAtPmZpX2xlYXNlID0gTlVMTDsKIAkJbWVtc2V0KGZwLT5maV9mZHMsIDAsIHNpemVvZihmcC0+ZmlfZmRzKSk7CiAJCW1lbXNldChmcC0+ZmlfYWNjZXNzLCAwLCBzaXplb2YoZnAtPmZpX2FjY2VzcykpOwogCQlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKQEAgLTIzMjksMjMgKzIzMTcsOCBAQAogCQluZnM0X2ZpbGVfcHV0X2FjY2VzcyhmcCwgT19SRE9OTFkpOwogfQogCi0vKgotICogU3Bhd24gYSB0aHJlYWQgdG8gcGVyZm9ybSBhIHJlY2FsbCBvbiB0aGUgZGVsZWdhdGlvbiByZXByZXNlbnRlZAotICogYnkgdGhlIGxlYXNlIChmaWxlX2xvY2spCi0gKgotICogQ2FsbGVkIGZyb20gYnJlYWtfbGVhc2UoKSB3aXRoIGxvY2tfZmxvY2tzKCkgaGVsZC4KLSAqIE5vdGU6IHdlIGFzc3VtZSBicmVha19sZWFzZSB3aWxsIG9ubHkgY2FsbCB0aGlzICpvbmNlKiBmb3IgYW55IGdpdmVuCi0gKiBsZWFzZS4KLSAqLwotc3RhdGljCi12b2lkIG5mc2RfYnJlYWtfZGVsZWdfY2Ioc3RydWN0IGZpbGVfbG9jayAqZmwpCitzdGF0aWMgdm9pZCBuZnNkX2JyZWFrX29uZV9kZWxlZyhzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCkKIHsKLQlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IChzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICopZmwtPmZsX293bmVyOwotCi0JZHByaW50aygiTkZTRCBuZnNkX2JyZWFrX2RlbGVnX2NiOiBkcCAlcCBmbCAlcFxuIixkcCxmbCk7Ci0JaWYgKCFkcCkKLQkJcmV0dXJuOwotCiAJLyogV2UncmUgYXNzdW1pbmcgdGhlIHN0YXRlIGNvZGUgbmV2ZXIgZHJvcHMgaXRzIHJlZmVyZW5jZQogCSAqIHdpdGhvdXQgZmlyc3QgcmVtb3ZpbmcgdGhlIGxlYXNlLiAgU2luY2Ugd2UncmUgaW4gdGhpcyBsZWFzZQogCSAqIGNhbGxiYWNrIChhbmQgc2luY2UgdGhlIGxlYXNlIGNvZGUgaXMgc2VyaWFsaXplZCBieSB0aGUga2VybmVsCkBAIC0yMzUzLDIyICsyMzI2LDM1IEBACiAJICogaXQncyBzYWZlIHRvIHRha2UgYSByZWZlcmVuY2U6ICovCiAJYXRvbWljX2luYygmZHAtPmRsX2NvdW50KTsKIAotCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmRwLT5kbF9yZWNhbGxfbHJ1LCAmZGVsX3JlY2FsbF9scnUpOwotCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7CiAKIAkvKiBvbmx5IHBsYWNlIGRsX3RpbWUgaXMgc2V0LiBwcm90ZWN0ZWQgYnkgbG9ja19mbG9ja3MqLwogCWRwLT5kbF90aW1lID0gZ2V0X3NlY29uZHMoKTsKIAorCW5mc2Q0X2NiX3JlY2FsbChkcCk7Cit9CisKKy8qIENhbGxlZCBmcm9tIGJyZWFrX2xlYXNlKCkgd2l0aCBsb2NrX2Zsb2NrcygpIGhlbGQuICovCitzdGF0aWMgdm9pZCBuZnNkX2JyZWFrX2RlbGVnX2NiKHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXN0cnVjdCBuZnM0X2ZpbGUgKmZwID0gKHN0cnVjdCBuZnM0X2ZpbGUgKilmbC0+Zmxfb3duZXI7CisJc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHA7CisKKwlCVUdfT04oIWZwKTsKKwkvKiBXZSBhc3N1bWUgYnJlYWtfbGVhc2UgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgbGVhc2U6ICovCisJQlVHX09OKGZwLT5maV9oYWRfY29uZmxpY3QpOwogCS8qCiAJICogV2UgZG9uJ3Qgd2FudCB0aGUgbG9ja3MgY29kZSB0byB0aW1lb3V0IHRoZSBsZWFzZSBmb3IgdXM7Ci0JICogd2UnbGwgcmVtb3ZlIGl0IG91cnNlbGYgaWYgdGhlIGRlbGVnYXRpb24gaXNuJ3QgcmV0dXJuZWQKLQkgKiBpbiB0aW1lLgorCSAqIHdlJ2xsIHJlbW92ZSBpdCBvdXJzZWxmIGlmIGEgZGVsZWdhdGlvbiBpc24ndCByZXR1cm5lZAorCSAqIGluIHRpbWU6CiAJICovCiAJZmwtPmZsX2JyZWFrX3RpbWUgPSAwOwogCi0JZHAtPmRsX2ZpbGUtPmZpX2hhZF9jb25mbGljdCA9IHRydWU7Ci0JbmZzZDRfY2JfcmVjYWxsKGRwKTsKKwlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKKwlmcC0+ZmlfaGFkX2NvbmZsaWN0ID0gdHJ1ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRwLCAmZnAtPmZpX2RlbGVnYXRpb25zLCBkbF9wZXJmaWxlKQorCQluZnNkX2JyZWFrX29uZV9kZWxlZyhkcCk7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKIH0KIAogc3RhdGljCkBAIC0yNDU5LDEzICsyNDQ1LDE1IEBACiBzdGF0aWMgc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqCiBmaW5kX2RlbGVnYXRpb25fZmlsZShzdHJ1Y3QgbmZzNF9maWxlICpmcCwgc3RhdGVpZF90ICpzdGlkKQogewotCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwOworCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwID0gTlVMTDsKIAorCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHAsICZmcC0+ZmlfZGVsZWdhdGlvbnMsIGRsX3BlcmZpbGUpIHsKIAkJaWYgKGRwLT5kbF9zdGF0ZWlkLnNpX3N0YXRlb3duZXJpZCA9PSBzdGlkLT5zaV9zdGF0ZW93bmVyaWQpCi0JCQlyZXR1cm4gZHA7CisJCQlicmVhazsKIAl9Ci0JcmV0dXJuIE5VTEw7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKKwlyZXR1cm4gZHA7CiB9CiAKIGludCBzaGFyZV9hY2Nlc3NfdG9fZmxhZ3ModTMyIHNoYXJlX2FjY2VzcykKQEAgLTI2NDEsNiArMjYyOSw2NiBAQAogCXJldHVybiBjbHAtPmNsX21pbm9ydmVyc2lvbiAmJiBjbHAtPmNsX2NiX3N0YXRlID09IE5GU0Q0X0NCX1VOS05PV047CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrICpuZnM0X2FsbG9jX2luaXRfbGVhc2Uoc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAsIGludCBmbGFnKQoreworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOworCisJZmwgPSBsb2Nrc19hbGxvY19sb2NrKCk7CisJaWYgKCFmbCkKKwkJcmV0dXJuIE5VTEw7CisJbG9ja3NfaW5pdF9sb2NrKGZsKTsKKwlmbC0+ZmxfbG1vcHMgPSAmbmZzZF9sZWFzZV9tbmdfb3BzOworCWZsLT5mbF9mbGFncyA9IEZMX0xFQVNFOworCWZsLT5mbF90eXBlID0gZmxhZyA9PSBORlM0X09QRU5fREVMRUdBVEVfUkVBRD8gRl9SRExDSzogRl9XUkxDSzsKKwlmbC0+ZmxfZW5kID0gT0ZGU0VUX01BWDsKKwlmbC0+Zmxfb3duZXIgPSAoZmxfb3duZXJfdCkoZHAtPmRsX2ZpbGUpOworCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOworCXJldHVybiBmbDsKK30KKworc3RhdGljIGludCBuZnM0X3NldGxlYXNlKHN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwLCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgbmZzNF9maWxlICpmcCA9IGRwLT5kbF9maWxlOworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOworCWludCBzdGF0dXM7CisKKwlmbCA9IG5mczRfYWxsb2NfaW5pdF9sZWFzZShkcCwgZmxhZyk7CisJaWYgKCFmbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZmwtPmZsX2ZpbGUgPSBmaW5kX3JlYWRhYmxlX2ZpbGUoZnApOworCWxpc3RfYWRkKCZkcC0+ZGxfcGVyY2xudCwgJmRwLT5kbF9jbGllbnQtPmNsX2RlbGVnYXRpb25zKTsKKwlzdGF0dXMgPSB2ZnNfc2V0bGVhc2UoZmwtPmZsX2ZpbGUsIGZsLT5mbF90eXBlLCAmZmwpOworCWlmIChzdGF0dXMpIHsKKwkJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmNsbnQpOworCQlsb2Nrc19mcmVlX2xvY2soZmwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZnAtPmZpX2xlYXNlID0gZmw7CisJZnAtPmZpX2RlbGVnX2ZpbGUgPSBmbC0+ZmxfZmlsZTsKKwlnZXRfZmlsZShmcC0+ZmlfZGVsZWdfZmlsZSk7CisJYXRvbWljX3NldCgmZnAtPmZpX2RlbGVnZWVzLCAxKTsKKwlsaXN0X2FkZCgmZHAtPmRsX3BlcmZpbGUsICZmcC0+ZmlfZGVsZWdhdGlvbnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5mczRfc2V0X2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAsIGludCBmbGFnKQoreworCXN0cnVjdCBuZnM0X2ZpbGUgKmZwID0gZHAtPmRsX2ZpbGU7CisKKwlpZiAoIWZwLT5maV9sZWFzZSkKKwkJcmV0dXJuIG5mczRfc2V0bGVhc2UoZHAsIGZsYWcpOworCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOworCWlmIChmcC0+ZmlfaGFkX2NvbmZsaWN0KSB7CisJCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlhdG9taWNfaW5jKCZmcC0+ZmlfZGVsZWdlZXMpOworCWxpc3RfYWRkKCZkcC0+ZGxfcGVyZmlsZSwgJmZwLT5maV9kZWxlZ2F0aW9ucyk7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKKwlsaXN0X2FkZCgmZHAtPmRsX3BlcmNsbnQsICZkcC0+ZGxfY2xpZW50LT5jbF9kZWxlZ2F0aW9ucyk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBBdHRlbXB0IHRvIGhhbmQgb3V0IGEgZGVsZWdhdGlvbi4KICAqLwpAQCAtMjY1MCw3ICsyNjk4LDYgQEAKIAlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3AgPSBzdHAtPnN0X3N0YXRlb3duZXI7CiAJaW50IGNiX3VwOwotCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCWludCBzdGF0dXMsIGZsYWcgPSAwOwogCiAJY2JfdXAgPSBuZnNkNF9jYl9jaGFubmVsX2dvb2Qoc29wLT5zb19jbGllbnQpOwpAQCAtMjY4MSwzNiArMjcyOCwxMSBAQAogCX0KIAogCWRwID0gYWxsb2NfaW5pdF9kZWxlZyhzb3AtPnNvX2NsaWVudCwgc3RwLCBmaCwgZmxhZyk7Ci0JaWYgKGRwID09IE5VTEwpIHsKLQkJZmxhZyA9IE5GUzRfT1BFTl9ERUxFR0FURV9OT05FOwotCQlnb3RvIG91dDsKLQl9Ci0Jc3RhdHVzID0gLUVOT01FTTsKLQlmbCA9IGxvY2tzX2FsbG9jX2xvY2soKTsKLQlpZiAoIWZsKQotCQlnb3RvIG91dDsKLQlsb2Nrc19pbml0X2xvY2soZmwpOwotCWZsLT5mbF9sbW9wcyA9ICZuZnNkX2xlYXNlX21uZ19vcHM7Ci0JZmwtPmZsX2ZsYWdzID0gRkxfTEVBU0U7Ci0JZmwtPmZsX3R5cGUgPSBmbGFnID09IE5GUzRfT1BFTl9ERUxFR0FURV9SRUFEPyBGX1JETENLOiBGX1dSTENLOwotCWZsLT5mbF9lbmQgPSBPRkZTRVRfTUFYOwotCWZsLT5mbF9vd25lciA9ICAoZmxfb3duZXJfdClkcDsKLQlmbC0+ZmxfZmlsZSA9IGZpbmRfcmVhZGFibGVfZmlsZShzdHAtPnN0X2ZpbGUpOwotCUJVR19PTighZmwtPmZsX2ZpbGUpOwotCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwotCWRwLT5kbF9mbG9jayA9IGZsOwotCi0JLyogdmZzX3NldGxlYXNlIGNoZWNrcyB0byBzZWUgaWYgZGVsZWdhdGlvbiBzaG91bGQgYmUgaGFuZGVkIG91dC4KLQkgKiB0aGUgbG9ja19tYW5hZ2VyIGNhbGxiYWNrIGZsX2NoYW5nZSBpcyB1c2VkCi0JICovCi0JaWYgKChzdGF0dXMgPSB2ZnNfc2V0bGVhc2UoZmwtPmZsX2ZpbGUsIGZsLT5mbF90eXBlLCAmZmwpKSkgewotCQlkcHJpbnRrKCJORlNEOiBzZXRsZWFzZSBmYWlsZWQgWyVkXSwgbm8gZGVsZWdhdGlvblxuIiwgc3RhdHVzKTsKLQkJZHAtPmRsX2Zsb2NrID0gTlVMTDsKLQkJbG9ja3NfZnJlZV9sb2NrKGZsKTsKLQkJdW5oYXNoX2RlbGVnYXRpb24oZHApOwotCQlmbGFnID0gTkZTNF9PUEVOX0RFTEVHQVRFX05PTkU7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoZHAgPT0gTlVMTCkKKwkJZ290byBvdXRfbm9fZGVsZWc7CisJc3RhdHVzID0gbmZzNF9zZXRfZGVsZWdhdGlvbihkcCwgZmxhZyk7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXRfZnJlZTsKIAogCW1lbWNweSgmb3Blbi0+b3BfZGVsZWdhdGVfc3RhdGVpZCwgJmRwLT5kbF9zdGF0ZWlkLCBzaXplb2YoZHAtPmRsX3N0YXRlaWQpKTsKIApAQCAtMjcyMiw2ICsyNzQ0LDEyIEBACiAJCQkmJiBvcGVuLT5vcF9kZWxlZ2F0ZV90eXBlICE9IE5GUzRfT1BFTl9ERUxFR0FURV9OT05FKQogCQlkcHJpbnRrKCJORlNEOiBXQVJOSU5HOiByZWZ1c2luZyBkZWxlZ2F0aW9uIHJlY2xhaW1cbiIpOwogCW9wZW4tPm9wX2RlbGVnYXRlX3R5cGUgPSBmbGFnOworCXJldHVybjsKK291dF9mcmVlOgorCW5mczRfcHV0X2RlbGVnYXRpb24oZHApOworb3V0X25vX2RlbGVnOgorCWZsYWcgPSBORlM0X09QRU5fREVMRUdBVEVfTk9ORTsKKwlnb3RvIG91dDsKIH0KIAogLyoKQEAgLTI5MTYsOCArMjk0NCw2IEBACiAJCQkJdGVzdF92YWwgPSB1OwogCQkJYnJlYWs7CiAJCX0KLQkJZHByaW50aygiTkZTRDogcHVyZ2luZyB1bnVzZWQgZGVsZWdhdGlvbiBkcCAlcCwgZnAgJXBcbiIsCi0JCQkgICAgICAgICAgICBkcCwgZHAtPmRsX2Zsb2NrKTsKIAkJbGlzdF9tb3ZlKCZkcC0+ZGxfcmVjYWxsX2xydSwgJnJlYXBsaXN0KTsKIAl9CiAJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKQEAgLTMxMjgsNyArMzE1NCw3IEBACiAJCQlnb3RvIG91dDsKIAkJcmVuZXdfY2xpZW50KGRwLT5kbF9jbGllbnQpOwogCQlpZiAoZmlscHApIHsKLQkJCSpmaWxwcCA9IGZpbmRfcmVhZGFibGVfZmlsZShkcC0+ZGxfZmlsZSk7CisJCQkqZmlscHAgPSBkcC0+ZGxfZmlsZS0+ZmlfZGVsZWdfZmlsZTsKIAkJCUJVR19PTighKmZpbHBwKTsKIAkJfQogCX0gZWxzZSB7IC8qIG9wZW4gb3IgbG9jayBzdGF0ZWlkICovCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IDk1NjYyOWIuLjEyNzViODYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC0zMTcsOCArMzE3LDggQEAKIAkJUkVBRF9CVUYoZHVtbXkzMik7CiAJCWxlbiArPSAoWERSX1FVQURMRU4oZHVtbXkzMikgPDwgMik7CiAJCVJFQURNRU0oYnVmLCBkdW1teTMyKTsKLQkJaWYgKChob3N0X2VyciA9IG5mc2RfbWFwX25hbWVfdG9fdWlkKGFyZ3AtPnJxc3RwLCBidWYsIGR1bW15MzIsICZpYXR0ci0+aWFfdWlkKSkpCi0JCQlnb3RvIG91dF9uZnNlcnI7CisJCWlmICgoc3RhdHVzID0gbmZzZF9tYXBfbmFtZV90b191aWQoYXJncC0+cnFzdHAsIGJ1ZiwgZHVtbXkzMiwgJmlhdHRyLT5pYV91aWQpKSkKKwkJCXJldHVybiBzdGF0dXM7CiAJCWlhdHRyLT5pYV92YWxpZCB8PSBBVFRSX1VJRDsKIAl9CiAJaWYgKGJtdmFsWzFdICYgRkFUVFI0X1dPUkQxX09XTkVSX0dST1VQKSB7CkBAIC0zMjgsOCArMzI4LDggQEAKIAkJUkVBRF9CVUYoZHVtbXkzMik7CiAJCWxlbiArPSAoWERSX1FVQURMRU4oZHVtbXkzMikgPDwgMik7CiAJCVJFQURNRU0oYnVmLCBkdW1teTMyKTsKLQkJaWYgKChob3N0X2VyciA9IG5mc2RfbWFwX25hbWVfdG9fZ2lkKGFyZ3AtPnJxc3RwLCBidWYsIGR1bW15MzIsICZpYXR0ci0+aWFfZ2lkKSkpCi0JCQlnb3RvIG91dF9uZnNlcnI7CisJCWlmICgoc3RhdHVzID0gbmZzZF9tYXBfbmFtZV90b19naWQoYXJncC0+cnFzdHAsIGJ1ZiwgZHVtbXkzMiwgJmlhdHRyLT5pYV9naWQpKSkKKwkJCXJldHVybiBzdGF0dXM7CiAJCWlhdHRyLT5pYV92YWxpZCB8PSBBVFRSX0dJRDsKIAl9CiAJaWYgKGJtdmFsWzFdICYgRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTX1NFVCkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9zdGF0ZS5oIGIvZnMvbmZzZC9zdGF0ZS5oCmluZGV4IDMwNzQ2NTYuLjJkMzEyMjQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2Qvc3RhdGUuaAorKysgYi9mcy9uZnNkL3N0YXRlLmgKQEAgLTgzLDggKzgzLDYgQEAKIAlhdG9taWNfdAkJZGxfY291bnQ7ICAgICAgIC8qIHJlZiBjb3VudCAqLwogCXN0cnVjdCBuZnM0X2NsaWVudAkqZGxfY2xpZW50OwogCXN0cnVjdCBuZnM0X2ZpbGUJKmRsX2ZpbGU7Ci0Jc3RydWN0IGZpbGUJCSpkbF92ZnNfZmlsZTsKLQlzdHJ1Y3QgZmlsZV9sb2NrCSpkbF9mbG9jazsKIAl1MzIJCQlkbF90eXBlOwogCXRpbWVfdAkJCWRsX3RpbWU7CiAvKiBGb3IgcmVjYWxsOiAqLwpAQCAtMzc5LDYgKzM3Nyw5IEBACiAJICovCiAJYXRvbWljX3QJCWZpX3JlYWRlcnM7CiAJYXRvbWljX3QJCWZpX3dyaXRlcnM7CisJc3RydWN0IGZpbGUJCSpmaV9kZWxlZ19maWxlOworCXN0cnVjdCBmaWxlX2xvY2sJKmZpX2xlYXNlOworCWF0b21pY190CQlmaV9kZWxlZ2VlczsKIAlzdHJ1Y3QgaW5vZGUJCSpmaV9pbm9kZTsKIAl1MzIgICAgICAgICAgICAgICAgICAgICBmaV9pZDsgICAgICAvKiB1c2VkIHdpdGggc3RhdGVvd25lci0+c29faWQgCiAJCQkJCSAgICAgKiBmb3Igc3RhdGVpZF9oYXNodGJsIGhhc2ggKi8KZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDY0MTExN2YuLmRhMWQ5NzAgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtODA4LDcgKzgwOCw3IEBACiAJCWlmIChyYS0+cF9jb3VudCA9PSAwKQogCQkJZnJhcCA9IHJhcDsKIAl9Ci0JZGVwdGggPSBuZnNkc3RhdHMucmFfc2l6ZSoxMS8xMDsKKwlkZXB0aCA9IG5mc2RzdGF0cy5yYV9zaXplOwogCWlmICghZnJhcCkgewkKIAkJc3Bpbl91bmxvY2soJnJhYi0+cGJfbG9jayk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTc0NCw2ICsxNzQ0LDEzIEBACiAJaG9zdF9lcnIgPSBuZnNkX2JyZWFrX2xlYXNlKG9kZW50cnktPmRfaW5vZGUpOwogCWlmIChob3N0X2VycikKIAkJZ290byBvdXRfZHJvcF93cml0ZTsKKwlpZiAobmRlbnRyeS0+ZF9pbm9kZSkgeworCQlob3N0X2VyciA9IG5mc2RfYnJlYWtfbGVhc2UobmRlbnRyeS0+ZF9pbm9kZSk7CisJCWlmIChob3N0X2VycikKKwkJCWdvdG8gb3V0X2Ryb3Bfd3JpdGU7CisJfQorCWlmIChob3N0X2VycikKKwkJZ290byBvdXRfZHJvcF93cml0ZTsKIAlob3N0X2VyciA9IHZmc19yZW5hbWUoZmRpciwgb2RlbnRyeSwgdGRpciwgbmRlbnRyeSk7CiAJaWYgKCFob3N0X2VycikgewogCQlob3N0X2VyciA9IGNvbW1pdF9tZXRhZGF0YSh0ZmhwKTsKQEAgLTE4MTIsMjIgKzE4MTksMjIgQEAKIAogCWhvc3RfZXJyID0gbW50X3dhbnRfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKIAlpZiAoaG9zdF9lcnIpCi0JCWdvdG8gb3V0X25mc2VycjsKKwkJZ290byBvdXRfcHV0OwogCiAJaG9zdF9lcnIgPSBuZnNkX2JyZWFrX2xlYXNlKHJkZW50cnktPmRfaW5vZGUpOwogCWlmIChob3N0X2VycikKLQkJZ290byBvdXRfcHV0OworCQlnb3RvIG91dF9kcm9wX3dyaXRlOwogCWlmICh0eXBlICE9IFNfSUZESVIpCiAJCWhvc3RfZXJyID0gdmZzX3VubGluayhkaXJwLCByZGVudHJ5KTsKIAllbHNlCiAJCWhvc3RfZXJyID0gdmZzX3JtZGlyKGRpcnAsIHJkZW50cnkpOworCWlmICghaG9zdF9lcnIpCisJCWhvc3RfZXJyID0gY29tbWl0X21ldGFkYXRhKGZocCk7CitvdXRfZHJvcF93cml0ZToKKwltbnRfZHJvcF93cml0ZShmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOwogb3V0X3B1dDoKIAlkcHV0KHJkZW50cnkpOwogCi0JaWYgKCFob3N0X2VycikKLQkJaG9zdF9lcnIgPSBjb21taXRfbWV0YWRhdGEoZmhwKTsKLQotCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CiBvdXRfbmZzZXJyOgogCWVyciA9IG5mc2Vycm5vKGhvc3RfZXJyKTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idG5vZGUuYyBiL2ZzL25pbGZzMi9idG5vZGUuYwppbmRleCAzODhlOWU4Li44NWY3YmFhIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRub2RlLmMKKysrIGIvZnMvbmlsZnMyL2J0bm9kZS5jCkBAIC0zNSwxMSArMzUsNiBAQAogI2luY2x1ZGUgImJ0bm9kZS5oIgogCiAKLXZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYykKLXsKLQluaWxmc19tYXBwaW5nX2luaXRfb25jZShidG5jKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2J0bm9kZV9hb3BzID0gewogCS5zeW5jX3BhZ2UJCT0gYmxvY2tfc3luY19wYWdlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idG5vZGUuaCBiL2ZzL25pbGZzMi9idG5vZGUuaAppbmRleCA3OTAzNzQ5Li4xYjhlYmQ4IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRub2RlLmgKKysrIGIvZnMvbmlsZnMyL2J0bm9kZS5oCkBAIC0zNyw3ICszNyw2IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdiaDsKIH07CiAKLXZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKik7CiB2b2lkIG5pbGZzX2J0bm9kZV9jYWNoZV9jbGVhcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHN0cnVjdCBidWZmZXJfaGVhZCAqbmlsZnNfYnRub2RlX2NyZWF0ZV9ibG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYywKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9tZHQuYyBiL2ZzL25pbGZzMi9tZHQuYwppbmRleCA2YTBlMmExLi5hMGJhYmQyIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbWR0LmMKKysrIGIvZnMvbmlsZnMyL21kdC5jCkBAIC00NTQsOSArNDU0LDkgQEAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gaW5vZGUtPmlfc2ItPnNfYmRpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnNoYWRvdy0+ZnJvemVuX2J1ZmZlcnMpOwotCW5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKCZzaGFkb3ctPmZyb3plbl9kYXRhKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmc2hhZG93LT5mcm96ZW5fZGF0YSk7CiAJbmlsZnNfbWFwcGluZ19pbml0KCZzaGFkb3ctPmZyb3plbl9kYXRhLCBiZGksICZzaGFkb3dfbWFwX2FvcHMpOwotCW5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKCZzaGFkb3ctPmZyb3plbl9idG5vZGVzKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmc2hhZG93LT5mcm96ZW5fYnRub2Rlcyk7CiAJbmlsZnNfbWFwcGluZ19pbml0KCZzaGFkb3ctPmZyb3plbl9idG5vZGVzLCBiZGksICZzaGFkb3dfbWFwX2FvcHMpOwogCW1pLT5taV9zaGFkb3cgPSBzaGFkb3c7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmFtZWkuYyBiL2ZzL25pbGZzMi9uYW1laS5jCmluZGV4IDk4MDM0MjcuLjE2MTc5MWQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uYW1laS5jCisrKyBiL2ZzL25pbGZzMi9uYW1laS5jCkBAIC0zOTcsNyArMzk3LDYgQEAKIAkJbmV3X2RlID0gbmlsZnNfZmluZF9lbnRyeShuZXdfZGlyLCAmbmV3X2RlbnRyeS0+ZF9uYW1lLCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5jX25saW5rKG9sZF9pbm9kZSk7CiAJCW5pbGZzX3NldF9saW5rKG5ld19kaXIsIG5ld19kZSwgbmV3X3BhZ2UsIG9sZF9pbm9kZSk7CiAJCW5pbGZzX21hcmtfaW5vZGVfZGlydHkobmV3X2Rpcik7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKQEAgLTQxMSwxMyArNDEwLDkgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IE5JTEZTX0xJTktfTUFYKQogCQkJCWdvdG8gb3V0X2RpcjsKIAkJfQotCQlpbmNfbmxpbmsob2xkX2lub2RlKTsKIAkJZXJyID0gbmlsZnNfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZHJvcF9ubGluayhvbGRfaW5vZGUpOwotCQkJbmlsZnNfbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOworCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZGlyOwotCQl9CiAJCWlmIChkaXJfZGUpIHsKIAkJCWluY19ubGluayhuZXdfZGlyKTsKIAkJCW5pbGZzX21hcmtfaW5vZGVfZGlydHkobmV3X2Rpcik7CkBAIC00MzEsNyArNDI2LDYgQEAKIAlvbGRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAKIAluaWxmc19kZWxldGVfZW50cnkob2xkX2RlLCBvbGRfcGFnZSk7Ci0JZHJvcF9ubGluayhvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQluaWxmc19zZXRfbGluayhvbGRfaW5vZGUsIGRpcl9kZSwgZGlyX3BhZ2UsIG5ld19kaXIpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3BhZ2UuYyBiL2ZzL25pbGZzMi9wYWdlLmMKaW5kZXggMGM0MzI0MS4uYTU4NWIzNSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3BhZ2UuYworKysgYi9mcy9uaWxmczIvcGFnZS5jCkBAIC00OTIsMTkgKzQ5Miw2IEBACiAJcmV0dXJuIG5jOwogfQogCi12b2lkIG5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQotewotCW1lbXNldChtYXBwaW5nLCAwLCBzaXplb2YoKm1hcHBpbmcpKTsKLQlJTklUX1JBRElYX1RSRUUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPnByaXZhdGVfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnByaXZhdGVfbG9jayk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+aV9tbWFwX2xvY2spOwotCUlOSVRfUkFXX1BSSU9fVFJFRV9ST09UKCZtYXBwaW5nLT5pX21tYXApOwotCUlOSVRfTElTVF9IRUFEKCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKTsKLX0KLQogdm9pZCBuaWxmc19tYXBwaW5nX2luaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLAogCQkJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYW9wcykKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9wYWdlLmggYi9mcy9uaWxmczIvcGFnZS5oCmluZGV4IDYyMmRmMjcuLjJhMDA5NTMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9wYWdlLmgKKysrIGIvZnMvbmlsZnMyL3BhZ2UuaApAQCAtNjEsNyArNjEsNiBAQAogaW50IG5pbGZzX2NvcHlfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CiB2b2lkIG5pbGZzX2NvcHlfYmFja19wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHZvaWQgbmlsZnNfY2xlYXJfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7Ci12b2lkIG5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKIHZvaWQgbmlsZnNfbWFwcGluZ19pbml0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwKIAkJCWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFvcHMpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuYyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKaW5kZXggNTVlYmFlNS4uMmRlOWY2MyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuYworKysgYi9mcy9uaWxmczIvc2VnbWVudC5jCkBAIC00MzAsNyArNDMwLDggQEAKIAluaWxmc19zZWdjdG9yX21hcF9zZWdzdW1fZW50cnkoCiAJCXNjaSwgJnNjaS0+c2NfYmluZm9fcHRyLCBzaXplb2Yoc3RydWN0IG5pbGZzX2ZpbmZvKSk7CiAKLQlpZiAoaW5vZGUtPmlfc2IgJiYgIXRlc3RfYml0KE5JTEZTX1NDX0hBVkVfREVMVEEsICZzY2ktPnNjX2ZsYWdzKSkKKwlpZiAoTklMRlNfSShpbm9kZSktPmlfcm9vdCAmJgorCSAgICAhdGVzdF9iaXQoTklMRlNfU0NfSEFWRV9ERUxUQSwgJnNjaS0+c2NfZmxhZ3MpKQogCQlzZXRfYml0KE5JTEZTX1NDX0hBVkVfREVMVEEsICZzY2ktPnNjX2ZsYWdzKTsKIAkvKiBza2lwIGZpbmZvICovCiB9CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VwZXIuYyBiL2ZzL25pbGZzMi9zdXBlci5jCmluZGV4IDU4ZmQ3MDcuLjE2NzNiM2QgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zdXBlci5jCisrKyBiL2ZzL25pbGZzMi9zdXBlci5jCkBAIC0xMjc5LDcgKzEyNzksNyBAQAogI2lmZGVmIENPTkZJR19OSUxGU19YQVRUUgogCWluaXRfcndzZW0oJmlpLT54YXR0cl9zZW0pOwogI2VuZGlmCi0JbmlsZnNfYnRub2RlX2NhY2hlX2luaXRfb25jZSgmaWktPmlfYnRub2RlX2NhY2hlKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmaWktPmlfYnRub2RlX2NhY2hlKTsKIAlpaS0+aV9ibWFwID0gJmlpLT5pX2JtYXBfZGF0YTsKIAlpbm9kZV9pbml0X29uY2UoJmlpLT52ZnNfaW5vZGUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9tZnQuYyBiL2ZzL250ZnMvbWZ0LmMKaW5kZXggYjU3MmI2Ny4uMzI2ZTc0NyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9tZnQuYworKysgYi9mcy9udGZzL21mdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqCiAgKiBtZnQuYyAtIE5URlMga2VybmVsIG1mdCByZWNvcmQgb3BlcmF0aW9ucy4gUGFydCBvZiB0aGUgTGludXgtTlRGUyBwcm9qZWN0LgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA2IEFudG9uIEFsdGFwYXJtYWtvdgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMTEgQW50b24gQWx0YXBhcm1ha292IGFuZCBUdXhlcmEgSW5jLgogICogQ29weXJpZ2h0IChjKSAyMDAyIFJpY2hhcmQgUnVzc29uCiAgKgogICogVGhpcyBwcm9ncmFtL2luY2x1ZGUgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI1NzYsNiArMjU3Niw4IEBACiAJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCWlmIChiYXNlX25pKSB7CisJCU1GVF9SRUNPUkQgKm1fdG1wOworCiAJCS8qCiAJCSAqIFNldHVwIHRoZSBiYXNlIG1mdCByZWNvcmQgaW4gdGhlIGV4dGVudCBtZnQgcmVjb3JkLiAgVGhpcwogCQkgKiBjb21wbGV0ZXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGFsbG9jYXRlZCBleHRlbnQgbWZ0IHJlY29yZApAQCAtMjU4OCwxMSArMjU5MCwxMSBAQAogCQkgKiBhdHRhY2ggaXQgdG8gdGhlIGJhc2UgaW5vZGUgQGJhc2VfbmkgYW5kIG1hcCwgcGluLCBhbmQgbG9jawogCQkgKiBpdHMsIGkuZS4gdGhlIGFsbG9jYXRlZCwgbWZ0IHJlY29yZC4KIAkJICovCi0JCW0gPSBtYXBfZXh0ZW50X21mdF9yZWNvcmQoYmFzZV9uaSwgYml0LCAmbmkpOwotCQlpZiAoSVNfRVJSKG0pKSB7CisJCW1fdG1wID0gbWFwX2V4dGVudF9tZnRfcmVjb3JkKGJhc2VfbmksIGJpdCwgJm5pKTsKKwkJaWYgKElTX0VSUihtX3RtcCkpIHsKIAkJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkZhaWxlZCB0byBtYXAgYWxsb2NhdGVkIGV4dGVudCAiCiAJCQkJCSJtZnQgcmVjb3JkIDB4JWxseC4iLCAobG9uZyBsb25nKWJpdCk7Ci0JCQllcnIgPSBQVFJfRVJSKG0pOworCQkJZXJyID0gUFRSX0VSUihtX3RtcCk7CiAJCQkvKiBTZXQgdGhlIG1mdCByZWNvcmQgaXRzZWxmIG5vdCBpbiB1c2UuICovCiAJCQltLT5mbGFncyAmPSBjcHVfdG9fbGUxNigKIAkJCQkJfmxlMTZfdG9fY3B1KE1GVF9SRUNPUkRfSU5fVVNFKSk7CkBAIC0yNjAzLDYgKzI2MDUsNyBAQAogCQkJbnRmc191bm1hcF9wYWdlKHBhZ2UpOwogCQkJZ290byB1bmRvX21mdGJtcF9hbGxvYzsKIAkJfQorCQlCVUdfT04obSAhPSBtX3RtcCk7CiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGUgYWxsb2NhdGVkIG1mdCByZWNvcmQgaXMgd3JpdHRlbiBvdXQgdG8gZGlzay4KIAkJICogTm8gbmVlZCB0byBzZXQgdGhlIGlub2RlIGRpcnR5IGJlY2F1c2UgdGhlIGNhbGxlciBpcyBnb2luZwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5oIGIvZnMvb2NmczIvam91cm5hbC5oCmluZGV4IDQzZTU2YjkuLjYxODBkYTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuaAorKysgYi9mcy9vY2ZzMi9qb3VybmFsLmgKQEAgLTQwNSw5ICs0MDUsOSBAQAogCSAgICAgICBvY2ZzMl9xdW90YV90cmFuc19jcmVkaXRzKHNiKTsKIH0KIAotLyogZGF0YSBibG9jayBmb3IgbmV3IGRpci9zeW1saW5rLCAyIGZvciBiaXRtYXAgdXBkYXRlcyAoYml0bWFwIGZlICsKLSAqIGJpdG1hcCBibG9jayBmb3IgdGhlIG5ldyBiaXQpIGR4X3Jvb3QgdXBkYXRlIGZvciBmcmVlIGxpc3QgKi8KLSNkZWZpbmUgT0NGUzJfRElSX0xJTktfQURESVRJT05BTF9DUkVESVRTICgxICsgMiArIDEpCisvKiBkYXRhIGJsb2NrIGZvciBuZXcgZGlyL3N5bWxpbmssIGFsbG9jYXRpb24gb2YgZGlyZWN0b3J5IGJsb2NrLCBkeF9yb290CisgKiB1cGRhdGUgZm9yIGZyZWUgbGlzdCAqLworI2RlZmluZSBPQ0ZTMl9ESVJfTElOS19BRERJVElPTkFMX0NSRURJVFMgKDEgKyBPQ0ZTMl9TVUJBTExPQ19BTExPQyArIDEpCiAKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2FkZF9kaXJfaW5kZXhfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwppbmRleCBiNWY5MTYwLi4xOWViYzVhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYworKysgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwpAQCAtMzIyOCw3ICszMjI4LDcgQEAKIAkJCQkJdTMyIG51bV9jbHVzdGVycywgdW5zaWduZWQgaW50IGVfZmxhZ3MpCiB7CiAJaW50IHJldCwgZGVsZXRlLCBpbmRleCwgY3JlZGl0cyA9ICAwOwotCXUzMiBuZXdfYml0LCBuZXdfbGVuOworCXUzMiBuZXdfYml0LCBuZXdfbGVuLCBvcmlnX251bV9jbHVzdGVyczsKIAl1bnNpZ25lZCBpbnQgc2V0X2xlbjsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKHNiKTsKIAloYW5kbGVfdCAqaGFuZGxlOwpAQCAtMzI2MSw2ICszMjYxLDggQEAKIAkJZ290byBvdXQ7CiAJfQogCisJb3JpZ19udW1fY2x1c3RlcnMgPSBudW1fY2x1c3RlcnM7CisKIAl3aGlsZSAobnVtX2NsdXN0ZXJzKSB7CiAJCXJldCA9IG9jZnMyX2dldF9yZWZjb3VudF9yZWMocmVmX2NpLCBjb250ZXh0LT5yZWZfcm9vdF9iaCwKIAkJCQkJICAgICBwX2NsdXN0ZXIsIG51bV9jbHVzdGVycywKQEAgLTMzNDgsNyArMzM1MCw4IEBACiAJICogaW4gd3JpdGUtYmFjayBtb2RlLgogCSAqLwogCWlmIChjb250ZXh0LT5nZXRfY2x1c3RlcnMgPT0gb2NmczJfZGlfZ2V0X2NsdXN0ZXJzKSB7Ci0JCXJldCA9IG9jZnMyX2Nvd19zeW5jX3dyaXRlYmFjayhzYiwgY29udGV4dCwgY3BvcywgbnVtX2NsdXN0ZXJzKTsKKwkJcmV0ID0gb2NmczJfY293X3N5bmNfd3JpdGViYWNrKHNiLCBjb250ZXh0LCBjcG9zLAorCQkJCQkgICAgICAgb3JpZ19udW1fY2x1c3RlcnMpOwogCQlpZiAocmV0KQogCQkJbWxvZ19lcnJubyhyZXQpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDM4Zjk4NmQuLjM2YzQyM2YgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMTMxNiw3ICsxMzE2LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgbW91bnRfb3B0aW9ucyAqbW9wdCwKIAkJCSAgICAgICBpbnQgaXNfcmVtb3VudCkKIHsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMsIHVzZXJfc3RhY2sgPSAwOwogCWNoYXIgKnA7CiAJdTMyIHRtcDsKIApAQCAtMTQ1OSw2ICsxNDU5LDE1IEBACiAJCQltZW1jcHkobW9wdC0+Y2x1c3Rlcl9zdGFjaywgYXJnc1swXS5mcm9tLAogCQkJICAgICAgIE9DRlMyX1NUQUNLX0xBQkVMX0xFTik7CiAJCQltb3B0LT5jbHVzdGVyX3N0YWNrW09DRlMyX1NUQUNLX0xBQkVMX0xFTl0gPSAnXDAnOworCQkJLyoKKwkJCSAqIE9wZW4gY29kZSB0aGUgbWVtY21wIGhlcmUgYXMgd2UgZG9uJ3QgaGF2ZQorCQkJICogYW4gb3NiIHRvIHBhc3MgdG8KKwkJCSAqIG9jZnMyX3VzZXJzcGFjZV9zdGFjaygpLgorCQkJICovCisJCQlpZiAobWVtY21wKG1vcHQtPmNsdXN0ZXJfc3RhY2ssCisJCQkJICAgT0NGUzJfQ0xBU1NJQ19DTFVTVEVSX1NUQUNLLAorCQkJCSAgIE9DRlMyX1NUQUNLX0xBQkVMX0xFTikpCisJCQkJdXNlcl9zdGFjayA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfaW5vZGU2NDoKIAkJCW1vcHQtPm1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9JTk9ERTY0OwpAQCAtMTUxNCwxMyArMTUyMywxNiBAQAogCQl9CiAJfQogCi0JLyogRW5zdXJlIG9ubHkgb25lIGhlYXJ0YmVhdCBtb2RlICovCi0JdG1wID0gbW9wdC0+bW91bnRfb3B0ICYgKE9DRlMyX01PVU5UX0hCX0xPQ0FMIHwgT0NGUzJfTU9VTlRfSEJfR0xPQkFMIHwKLQkJCQkgT0NGUzJfTU9VTlRfSEJfTk9ORSk7Ci0JaWYgKGh3ZWlnaHQzMih0bXApICE9IDEpIHsKLQkJbWxvZyhNTF9FUlJPUiwgIkludmFsaWQgaGVhcnRiZWF0IG1vdW50IG9wdGlvbnNcbiIpOwotCQlzdGF0dXMgPSAwOwotCQlnb3RvIGJhaWw7CisJaWYgKHVzZXJfc3RhY2sgPT0gMCkgeworCQkvKiBFbnN1cmUgb25seSBvbmUgaGVhcnRiZWF0IG1vZGUgKi8KKwkJdG1wID0gbW9wdC0+bW91bnRfb3B0ICYgKE9DRlMyX01PVU5UX0hCX0xPQ0FMIHwKKwkJCQkJIE9DRlMyX01PVU5UX0hCX0dMT0JBTCB8CisJCQkJCSBPQ0ZTMl9NT1VOVF9IQl9OT05FKTsKKwkJaWYgKGh3ZWlnaHQzMih0bXApICE9IDEpIHsKKwkJCW1sb2coTUxfRVJST1IsICJJbnZhbGlkIGhlYXJ0YmVhdCBtb3VudCBvcHRpb25zXG4iKTsKKwkJCXN0YXR1cyA9IDA7CisJCQlnb3RvIGJhaWw7CisJCX0KIAl9CiAKIAlzdGF0dXMgPSAxOwpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IGU1MjM4OWUuLjVhMmM2ZWIgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTc5MCw2ICs3OTAsOCBAQAogCiAJLyogUGljayB1cCB0aGUgZmlscCBmcm9tIHRoZSBvcGVuIGludGVudCAqLwogCWZpbHAgPSBuZC0+aW50ZW50Lm9wZW4uZmlsZTsKKwluZC0+aW50ZW50Lm9wZW4uZmlsZSA9IE5VTEw7CisKIAkvKiBIYXMgdGhlIGZpbGVzeXN0ZW0gaW5pdGlhbGlzZWQgdGhlIGZpbGUgZm9yIHVzPyAqLwogCWlmIChmaWxwLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpIHsKIAkJcGF0aF9nZXQoJm5kLT5wYXRoKTsKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvbGRtLmMgYi9mcy9wYXJ0aXRpb25zL2xkbS5jCmluZGV4IDc4OWM2MjUuLmIxMGUzNTQgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvbGRtLmMKKysrIGIvZnMvcGFydGl0aW9ucy9sZG0uYwpAQCAtMjUxLDYgKzI1MSwxMSBAQAogCX0KIAogCXZtLT52YmxrX3NpemUgICAgID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEgKyAweDA4KTsKKwlpZiAodm0tPnZibGtfc2l6ZSA9PSAwKSB7CisJCWxkbV9lcnJvciAoIklsbGVnYWwgVkJMSyBzaXplIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKIAl2bS0+dmJsa19vZmZzZXQgICA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhICsgMHgwQyk7CiAJdm0tPmxhc3RfdmJsa19zZXEgPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSArIDB4MDQpOwogCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL21hYy5jIGIvZnMvcGFydGl0aW9ucy9tYWMuYwppbmRleCA2OGQ2YTIxLi4xMWY2ODhiIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL21hYy5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbWFjLmMKQEAgLTI5LDEwICsyOSw5IEBACiAKIGludCBtYWNfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpCiB7Ci0JaW50IHNsb3QgPSAxOwogCVNlY3RvciBzZWN0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0JaW50IGJsaywgYmxvY2tzX2luX21hcDsKKwlpbnQgc2xvdCwgYmxvY2tzX2luX21hcDsKIAl1bnNpZ25lZCBzZWNzaXplOwogI2lmZGVmIENPTkZJR19QUENfUE1BQwogCWludCBmb3VuZF9yb290ID0gMDsKQEAgLTU5LDEwICs1OCwxNCBAQAogCQlwdXRfZGV2X3NlY3RvcihzZWN0KTsKIAkJcmV0dXJuIDA7CQkvKiBub3QgYSBNYWNPUyBkaXNrICovCiAJfQotCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIiBbbWFjXSIsIFBBR0VfU0laRSk7CiAJYmxvY2tzX2luX21hcCA9IGJlMzJfdG9fY3B1KHBhcnQtPm1hcF9jb3VudCk7Ci0JZm9yIChibGsgPSAxOyBibGsgPD0gYmxvY2tzX2luX21hcDsgKytibGspIHsKLQkJaW50IHBvcyA9IGJsayAqIHNlY3NpemU7CisJaWYgKGJsb2Nrc19pbl9tYXAgPCAwIHx8IGJsb2Nrc19pbl9tYXAgPj0gRElTS19NQVhfUEFSVFMpIHsKKwkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CisJCXJldHVybiAwOworCX0KKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgW21hY10iLCBQQUdFX1NJWkUpOworCWZvciAoc2xvdCA9IDE7IHNsb3QgPD0gYmxvY2tzX2luX21hcDsgKytzbG90KSB7CisJCWludCBwb3MgPSBzbG90ICogc2Vjc2l6ZTsKIAkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJCWRhdGEgPSByZWFkX3BhcnRfc2VjdG9yKHN0YXRlLCBwb3MvNTEyLCAmc2VjdCk7CiAJCWlmICghZGF0YSkKQEAgLTExMywxMyArMTE2LDExIEBACiAJCQl9CiAKIAkJCWlmIChnb29kbmVzcyA+IGZvdW5kX3Jvb3RfZ29vZG5lc3MpIHsKLQkJCQlmb3VuZF9yb290ID0gYmxrOworCQkJCWZvdW5kX3Jvb3QgPSBzbG90OwogCQkJCWZvdW5kX3Jvb3RfZ29vZG5lc3MgPSBnb29kbmVzczsKIAkJCX0KIAkJfQogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwotCi0JCSsrc2xvdDsKIAl9CiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJaWYgKGZvdW5kX3Jvb3RfZ29vZG5lc3MpCmRpZmYgLS1naXQgYS9mcy9wb3NpeF9hY2wuYyBiL2ZzL3Bvc2l4X2FjbC5jCmluZGV4IDM5ZGY5NWEuLmIxY2Y2YmYgMTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCisrKyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCitFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9pbml0KTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX2FsbG9jKTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX2Nsb25lKTsKIEVYUE9SVF9TWU1CT0wocG9zaXhfYWNsX3ZhbGlkKTsKQEAgLTMyLDYgKzMzLDE2IEBACiBFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9wZXJtaXNzaW9uKTsKIAogLyoKKyAqIEluaXQgYSBmcmVzaCBwb3NpeF9hY2wKKyAqLwordm9pZAorcG9zaXhfYWNsX2luaXQoc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgY291bnQpCit7CisJYXRvbWljX3NldCgmYWNsLT5hX3JlZmNvdW50LCAxKTsKKwlhY2wtPmFfY291bnQgPSBjb3VudDsKK30KKworLyoKICAqIEFsbG9jYXRlIGEgbmV3IEFDTCB3aXRoIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGVudHJpZXMuCiAgKi8KIHN0cnVjdCBwb3NpeF9hY2wgKgpAQCAtNDAsMTAgKzUxLDggQEAKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsKSArCiAJICAgICAgICAgICAgICAgICAgICBjb3VudCAqIHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5KTsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBrbWFsbG9jKHNpemUsIGZsYWdzKTsKLQlpZiAoYWNsKSB7Ci0JCWF0b21pY19zZXQoJmFjbC0+YV9yZWZjb3VudCwgMSk7Ci0JCWFjbC0+YV9jb3VudCA9IGNvdW50OwotCX0KKwlpZiAoYWNsKQorCQlwb3NpeF9hY2xfaW5pdChhY2wsIGNvdW50KTsKIAlyZXR1cm4gYWNsOwogfQogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmMKaW5kZXggZGYyYjcwMy4uN2M5OWMxYyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9hcnJheS5jCisrKyBiL2ZzL3Byb2MvYXJyYXkuYwpAQCAtMzUzLDkgKzM1Myw2IEBACiAJdGFza19jYXAobSwgdGFzayk7CiAJdGFza19jcHVzX2FsbG93ZWQobSwgdGFzayk7CiAJY3B1c2V0X3Rhc2tfc3RhdHVzX2FsbG93ZWQobSwgdGFzayk7Ci0jaWYgZGVmaW5lZChDT05GSUdfUzM5MCkKLQl0YXNrX3Nob3dfcmVncyhtLCB0YXNrKTsKLSNlbmRpZgogCXRhc2tfY29udGV4dF9zd2l0Y2hfY291bnRzKG0sIHRhc2spOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX2RldnRyZWUuYyBiL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKaW5kZXggZDkzOTZhNC4uOTI3Y2JkMSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX2RldnRyZWUuYworKysgYi9mcy9wcm9jL3Byb2NfZGV2dHJlZS5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAkJcmV0dXJuOwogCXJvb3QgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwogCWlmIChyb290ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIvcHJvYy9kZXZpY2UtdHJlZTogY2FuJ3QgZmluZCByb290XG4iKTsKKwkJcHJfZGVidWcoIi9wcm9jL2RldmljZS10cmVlOiBjYW4ndCBmaW5kIHJvb3RcbiIpOwogCQlyZXR1cm47CiAJfQogCXByb2NfZGV2aWNlX3RyZWVfYWRkX25vZGUocm9vdCwgcHJvY19kZXZpY2VfdHJlZSk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCBiYTVmNTFlLi42OGZkZjQ1IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTc3MSw3ICs3NzEsNyBAQAogCQkJCQlFTVBUWV9ESVJfU0laRV9WMSA6IEVNUFRZX0RJUl9TSVpFLAogCQkJCQlkZW50cnksIGlub2RlLCAmc2VjdXJpdHkpOwogCWlmIChyZXR2YWwpIHsKLQkJZGlyLT5pX25saW5rLS07CisJCURFQ19ESVJfSU5PREVfTkxJTksoZGlyKQogCQlnb3RvIG91dF9mYWlsZWQ7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA3NGUxNDllLi43ZTlkZDRjIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTE3Nyw2ICsxNzcsMTEgQEAKIAlzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnMgPSBzLT5zX3R5cGU7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnMtPnNfYWN0aXZlKSkgewogCQlmcy0+a2lsbF9zYihzKTsKKwkJLyoKKwkJICogV2UgbmVlZCB0byBjYWxsIHJjdV9iYXJyaWVyIHNvIGFsbCB0aGUgZGVsYXllZCByY3UgZnJlZQorCQkgKiBpbm9kZXMgYXJlIGZsdXNoZWQgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIGZzIG1vZHVsZS4KKwkJICovCisJCXJjdV9iYXJyaWVyKCk7CiAJCXB1dF9maWxlc3lzdGVtKGZzKTsKIAkJcHV0X3N1cGVyKHMpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy9zeXN2L25hbWVpLmMgYi9mcy9zeXN2L25hbWVpLmMKaW5kZXggYjQyN2IxMi4uZTQ3NGZiYyAxMDA2NDQKLS0tIGEvZnMvc3lzdi9uYW1laS5jCisrKyBiL2ZzL3N5c3YvbmFtZWkuYwpAQCAtMjQ1LDcgKzI0NSw2IEBACiAJCW5ld19kZSA9IHN5c3ZfZmluZF9lbnRyeShuZXdfZGVudHJ5LCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJc3lzdl9zZXRfbGluayhuZXdfZGUsIG5ld19wYWdlLCBvbGRfaW5vZGUpOwogCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQlpZiAoZGlyX2RlKQpAQCAtMjU3LDE4ICsyNTYsMTUgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IFNZU1ZfU0IobmV3X2Rpci0+aV9zYiktPnNfbGlua19tYXgpCiAJCQkJZ290byBvdXRfZGlyOwogCQl9Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWVyciA9IHN5c3ZfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2RpcjsKLQkJfQogCQlpZiAoZGlyX2RlKQogCQkJaW5vZGVfaW5jX2xpbmtfY291bnQobmV3X2Rpcik7CiAJfQogCiAJc3lzdl9kZWxldGVfZW50cnkob2xkX2RlLCBvbGRfcGFnZSk7Ci0JaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiAKIAlpZiAoZGlyX2RlKSB7CiAJCXN5c3Zfc2V0X2xpbmsoZGlyX2RlLCBkaXJfcGFnZSwgbmV3X2Rpcik7CmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jCmluZGV4IDJiZTBmOWUuLmI3YzMzOGQgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9uYW1laS5jCisrKyBiL2ZzL3VkZi9uYW1laS5jCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8bGludXgvY3JjLWl0dS10Lmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KIAorZW51bSB7IFVERl9NQVhfTElOS1MgPSAweGZmZmYgfTsKKwogc3RhdGljIGlubGluZSBpbnQgdWRmX21hdGNoKGludCBsZW4xLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lMSwgaW50IGxlbjIsCiAJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZTIpCiB7CkBAIC02NTAsNyArNjUyLDcgQEAKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwogCiAJZXJyID0gLUVNTElOSzsKLQlpZiAoZGlyLT5pX25saW5rID49ICgyNTYgPDwgc2l6ZW9mKGRpci0+aV9ubGluaykpIC0gMSkKKwlpZiAoZGlyLT5pX25saW5rID49IFVERl9NQVhfTElOS1MpCiAJCWdvdG8gb3V0OwogCiAJZXJyID0gLUVJTzsKQEAgLTEwMzQsOSArMTAzNiw4IEBACiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpLCAqZmk7CiAJaW50IGVycjsKIAotCWlmIChpbm9kZS0+aV9ubGluayA+PSAoMjU2IDw8IHNpemVvZihpbm9kZS0+aV9ubGluaykpIC0gMSkgeworCWlmIChpbm9kZS0+aV9ubGluayA+PSBVREZfTUFYX0xJTktTKQogCQlyZXR1cm4gLUVNTElOSzsKLQl9CiAKIAlmaSA9IHVkZl9hZGRfZW50cnkoZGlyLCBkZW50cnksICZmaWJoLCAmY2ZpLCAmZXJyKTsKIAlpZiAoIWZpKSB7CkBAIC0xMTMxLDkgKzExMzIsNyBAQAogCQkJZ290byBlbmRfcmVuYW1lOwogCiAJCXJldHZhbCA9IC1FTUxJTks7Ci0JCWlmICghbmV3X2lub2RlICYmCi0JCQluZXdfZGlyLT5pX25saW5rID49Ci0JCQkJKDI1NiA8PCBzaXplb2YobmV3X2Rpci0+aV9ubGluaykpIC0gMSkKKwkJaWYgKCFuZXdfaW5vZGUgJiYgbmV3X2Rpci0+aV9ubGluayA+PSBVREZfTUFYX0xJTktTKQogCQkJZ290byBlbmRfcmVuYW1lOwogCX0KIAlpZiAoIW5maSkgewpkaWZmIC0tZ2l0IGEvZnMvdWZzL25hbWVpLmMgYi9mcy91ZnMvbmFtZWkuYwppbmRleCAxMmYzOWI5Li5kNmY2ODE1IDEwMDY0NAotLS0gYS9mcy91ZnMvbmFtZWkuYworKysgYi9mcy91ZnMvbmFtZWkuYwpAQCAtMzA2LDcgKzMwNiw2IEBACiAJCW5ld19kZSA9IHVmc19maW5kX2VudHJ5KG5ld19kaXIsICZuZXdfZGVudHJ5LT5kX25hbWUsICZuZXdfcGFnZSk7CiAJCWlmICghbmV3X2RlKQogCQkJZ290byBvdXRfZGlyOwotCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQl1ZnNfc2V0X2xpbmsobmV3X2RpciwgbmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlKTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJaWYgKGRpcl9kZSkKQEAgLTMxOCwxMiArMzE3LDkgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IFVGU19MSU5LX01BWCkKIAkJCQlnb3RvIG91dF9kaXI7CiAJCX0KLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXJyID0gdWZzX2FkZF9saW5rKG5ld19kZW50cnksIG9sZF9pbm9kZSk7Ci0JCWlmIChlcnIpIHsKLQkJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCX0KIAkJaWYgKGRpcl9kZSkKIAkJCWlub2RlX2luY19saW5rX2NvdW50KG5ld19kaXIpOwogCX0KQEAgLTMzMSwxMiArMzI3LDExIEBACiAJLyoKIAkgKiBMaWtlIG1vc3Qgb3RoZXIgVW5peCBzeXN0ZW1zLCBzZXQgdGhlIGN0aW1lIGZvciBpbm9kZXMgb24gYQogIAkgKiByZW5hbWUuCi0JICogaW5vZGVfZGVjX2xpbmtfY291bnQoKSB3aWxsIG1hcmsgdGhlIGlub2RlIGRpcnR5LgogCSAqLwogCW9sZF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAKIAl1ZnNfZGVsZXRlX2VudHJ5KG9sZF9kaXIsIG9sZF9kZSwgb2xkX3BhZ2UpOwotCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQl1ZnNfc2V0X2xpbmsob2xkX2lub2RlLCBkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2Rpc2NhcmQuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2Rpc2NhcmQuYwppbmRleCAwNTIwMWFlLi5kNjE2MTFjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19kaXNjYXJkLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZGlzY2FyZC5jCkBAIC0xNTIsNiArMTUyLDggQEAKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1YRlNfRVJST1IoRVBFUk0pOworCWlmICghYmxrX3F1ZXVlX2Rpc2NhcmQocSkpCisJCXJldHVybiAtWEZTX0VSUk9SKEVPUE5PVFNVUFApOwogCWlmIChjb3B5X2Zyb21fdXNlcigmcmFuZ2UsIHVyYW5nZSwgc2l6ZW9mKHJhbmdlKSkpCiAJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IGIwNmVkZTEuLjBjYTBlM2MgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtNjk1LDE0ICs2OTUsMTkgQEAKIAl4ZnNfbW91bnRfdAkJKm1wLAogCXZvaWQJCQlfX3VzZXIgKmFyZykKIHsKLQl4ZnNfZnNvcF9nZW9tX3YxX3QJZnNnZW87CisJeGZzX2Zzb3BfZ2VvbV90ICAgICAgICAgZnNnZW87CiAJaW50CQkJZXJyb3I7CiAKLQllcnJvciA9IHhmc19mc19nZW9tZXRyeShtcCwgKHhmc19mc29wX2dlb21fdCAqKSZmc2dlbywgMyk7CisJZXJyb3IgPSB4ZnNfZnNfZ2VvbWV0cnkobXAsICZmc2dlbywgMyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gLWVycm9yOwogCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmc2dlbywgc2l6ZW9mKGZzZ2VvKSkpCisJLyoKKwkgKiBDYWxsZXIgc2hvdWxkIGhhdmUgcGFzc2VkIGFuIGFyZ3VtZW50IG9mIHR5cGUKKwkgKiB4ZnNfZnNvcF9nZW9tX3YxX3QuICBUaGlzIGlzIGEgcHJvcGVyIHN1YnNldCBvZiB0aGUKKwkgKiB4ZnNfZnNvcF9nZW9tX3QgdGhhdCB4ZnNfZnNfZ2VvbWV0cnkoKSBmaWxscyBpbi4KKwkgKi8KKwlpZiAoY29weV90b191c2VyKGFyZywgJmZzZ2VvLCBzaXplb2YoeGZzX2Zzb3BfZ2VvbV92MV90KSkpCiAJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CiAJcmV0dXJuIDA7CiB9CkBAIC05ODUsMTAgKzk5MCwyMiBAQAogCiAJCS8qCiAJCSAqIEV4dGVudCBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYXBwcm9wcmlhdGUgYmxvY2sKLQkJICogc2l6ZSwgaWYgc2V0IGF0IGFsbC4KKwkJICogc2l6ZSwgaWYgc2V0IGF0IGFsbC4gSXQgbXVzdCBhbHNvIGJlIHNtYWxsZXIgdGhhbiB0aGUKKwkJICogbWF4aW11bSBleHRlbnQgc2l6ZSBzdXBwb3J0ZWQgYnkgdGhlIGZpbGVzeXN0ZW0uCisJCSAqCisJCSAqIEFsc28sIGZvciBub24tcmVhbHRpbWUgZmlsZXMsIGxpbWl0IHRoZSBleHRlbnQgc2l6ZSBoaW50IHRvCisJCSAqIGhhbGYgdGhlIHNpemUgb2YgdGhlIEFHcyBpbiB0aGUgZmlsZXN5c3RlbSBzbyBhbGlnbm1lbnQKKwkJICogZG9lc24ndCByZXN1bHQgaW4gZXh0ZW50cyBsYXJnZXIgdGhhbiBhbiBBRy4KIAkJICovCiAJCWlmIChmYS0+ZnN4X2V4dHNpemUgIT0gMCkgewotCQkJeGZzX2V4dGxlbl90CXNpemU7CisJCQl4ZnNfZXh0bGVuX3QgICAgc2l6ZTsKKwkJCXhmc19mc2Jsb2NrX3QgICBleHRzaXplX2ZzYjsKKworCQkJZXh0c2l6ZV9mc2IgPSBYRlNfQl9UT19GU0IobXAsIGZhLT5mc3hfZXh0c2l6ZSk7CisJCQlpZiAoZXh0c2l6ZV9mc2IgPiBNQVhFWFRMRU4pIHsKKwkJCQljb2RlID0gWEZTX0VSUk9SKEVJTlZBTCk7CisJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQl9CiAKIAkJCWlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApIHx8CiAJCQkgICAgKChtYXNrICYgRlNYX1hGTEFHUykgJiYKQEAgLTk5Nyw2ICsxMDE0LDEwIEBACiAJCQkJICAgICAgIG1wLT5tX3NiLnNiX2Jsb2NrbG9nOwogCQkJfSBlbHNlIHsKIAkJCQlzaXplID0gbXAtPm1fc2Iuc2JfYmxvY2tzaXplOworCQkJCWlmIChleHRzaXplX2ZzYiA+IG1wLT5tX3NiLnNiX2FnYmxvY2tzIC8gMikgeworCQkJCQljb2RlID0gWEZTX0VSUk9SKEVJTlZBTCk7CisJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJCX0KIAkJCX0KIAogCQkJaWYgKGZhLT5mc3hfZXh0c2l6ZSAlIHNpemUpIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCBmOGU4NTRiLi4yMDZhMjgxIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC0xODYzLDEyICsxODYzLDE0IEBACiAJeGZzX2RxdW90X3QJKmRxcG91dDsKIAl4ZnNfZHF1b3RfdAkqZHFwOwogCWludAkJcmVzdGFydHM7CisJaW50CQlzdGFydGFnYWluOwogCiAJcmVzdGFydHMgPSAwOwogCWRxcG91dCA9IE5VTEw7CiAKIAkvKiBsb2Nrb3JkZXI6IGhhc2hjaGFpbmxvY2ssIGZyZWVsaXN0bG9jaywgbXBsaXN0bG9jaywgZHFsb2NrLCBkcWZsb2NrICovCi1zdGFydGFnYWluOgorYWdhaW46CisJc3RhcnRhZ2FpbiA9IDA7CiAJbXV0ZXhfbG9jaygmeGZzX0dxbS0+cW1fZHFmcmxpc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRxcCwgJnhmc19HcW0tPnFtX2RxZnJsaXN0LCBxX2ZyZWVsaXN0KSB7CkBAIC0xODg1LDEzICsxODg3LDEwIEBACiAJCQlBU1NFUlQoISAoZHFwLT5kcV9mbGFncyAmIFhGU19EUV9JTkFDVElWRSkpOwogCiAJCQl0cmFjZV94ZnNfZHFyZWNsYWltX3dhbnQoZHFwKTsKLQotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOwotCQkJaWYgKCsrcmVzdGFydHMgPj0gWEZTX1FNX1JFQ0xBSU1fTUFYX1JFU1RBUlRTKQotCQkJCXJldHVybiBOVUxMOwogCQkJWFFNX1NUQVRTX0lOQyh4cW1zdGF0cy54c19xbV9kcXdhbnRzKTsKLQkJCWdvdG8gc3RhcnRhZ2FpbjsKKwkJCXJlc3RhcnRzKys7CisJCQlzdGFydGFnYWluID0gMTsKKwkJCWdvdG8gZHF1bmxvY2s7CiAJCX0KIAogCQkvKgpAQCAtMTkwNiwyMyArMTkwNSwyMCBAQAogCQkJQVNTRVJUKGxpc3RfZW1wdHkoJmRxcC0+cV9tcGxpc3QpKTsKIAkJCWxpc3RfZGVsX2luaXQoJmRxcC0+cV9mcmVlbGlzdCk7CiAJCQl4ZnNfR3FtLT5xbV9kcWZybGlzdF9jbnQtLTsKLQkJCXhmc19kcXVubG9jayhkcXApOwogCQkJZHFwb3V0ID0gZHFwOwogCQkJWFFNX1NUQVRTX0lOQyh4cW1zdGF0cy54c19xbV9kcWluYWN0X3JlY2xhaW1zKTsKLQkJCWJyZWFrOworCQkJZ290byBkcXVubG9jazsKIAkJfQogCiAJCUFTU0VSVChkcXAtPnFfaGFzaCk7CiAJCUFTU0VSVCghbGlzdF9lbXB0eSgmZHFwLT5xX21wbGlzdCkpOwogCiAJCS8qCi0JCSAqIFRyeSB0byBncmFiIHRoZSBmbHVzaCBsb2NrLiBJZiB0aGlzIGRxdW90IGlzIGluIHRoZSBwcm9jZXNzIG9mCi0JCSAqIGdldHRpbmcgZmx1c2hlZCB0byBkaXNrLCB3ZSBkb24ndCB3YW50IHRvIHJlY2xhaW0gaXQuCisJCSAqIFRyeSB0byBncmFiIHRoZSBmbHVzaCBsb2NrLiBJZiB0aGlzIGRxdW90IGlzIGluIHRoZSBwcm9jZXNzCisJCSAqIG9mIGdldHRpbmcgZmx1c2hlZCB0byBkaXNrLCB3ZSBkb24ndCB3YW50IHRvIHJlY2xhaW0gaXQuCiAJCSAqLwotCQlpZiAoIXhmc19kcWZsb2NrX25vd2FpdChkcXApKSB7Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCWlmICgheGZzX2RxZmxvY2tfbm93YWl0KGRxcCkpCisJCQlnb3RvIGRxdW5sb2NrOwogCiAJCS8qCiAJCSAqIFdlIGhhdmUgdGhlIGZsdXNoIGxvY2sgc28gd2Uga25vdyB0aGF0IHRoaXMgaXMgbm90IGluIHRoZQpAQCAtMTk0NCw4ICsxOTQwLDcgQEAKIAkJCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKIAkJCSJ4ZnNfcW1fZHFyZWNsYWltOiBkcXVvdCAlcCBmbHVzaCBmYWlsZWQiLCBkcXApOwogCQkJfQotCQkJeGZzX2RxdW5sb2NrKGRxcCk7IC8qIGRxZmx1c2ggdW5sb2NrcyBkcWZsb2NrICovCi0JCQljb250aW51ZTsKKwkJCWdvdG8gZHF1bmxvY2s7CiAJCX0KIAogCQkvKgpAQCAtMTk2NywxMyArMTk2Miw4IEBACiAJCSAqLwogCQlpZiAoIW11dGV4X3RyeWxvY2soJm1wLT5tX3F1b3RhaW5mby0+cWlfZHFsaXN0X2xvY2spKSB7CiAJCQlyZXN0YXJ0cysrOwotCQkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jayk7Ci0JCQl4ZnNfZHFmdW5sb2NrKGRxcCk7Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJCW11dGV4X3VubG9jaygmeGZzX0dxbS0+cW1fZHFmcmxpc3RfbG9jayk7Ci0JCQlpZiAocmVzdGFydHMrKyA+PSBYRlNfUU1fUkVDTEFJTV9NQVhfUkVTVEFSVFMpCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQlnb3RvIHN0YXJ0YWdhaW47CisJCQlzdGFydGFnYWluID0gMTsKKwkJCWdvdG8gcWh1bmxvY2s7CiAJCX0KIAogCQlBU1NFUlQoZHFwLT5xX25yZWZzID09IDApOwpAQCAtMTk4NiwxNCArMTk3NiwyMCBAQAogCQl4ZnNfR3FtLT5xbV9kcWZybGlzdF9jbnQtLTsKIAkJZHFwb3V0ID0gZHFwOwogCQltdXRleF91bmxvY2soJm1wLT5tX3F1b3RhaW5mby0+cWlfZHFsaXN0X2xvY2spOworcWh1bmxvY2s6CiAJCW11dGV4X3VubG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spOwogZHFmdW5sb2NrOgogCQl4ZnNfZHFmdW5sb2NrKGRxcCk7CitkcXVubG9jazoKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChkcXBvdXQpCiAJCQlicmVhazsKIAkJaWYgKHJlc3RhcnRzID49IFhGU19RTV9SRUNMQUlNX01BWF9SRVNUQVJUUykKLQkJCXJldHVybiBOVUxMOworCQkJYnJlYWs7CisJCWlmIChzdGFydGFnYWluKSB7CisJCQltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOworCQkJZ290byBhZ2FpbjsKKwkJfQogCX0KIAltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOwogCXJldHVybiBkcXBvdXQ7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmggYi9mcy94ZnMveGZzX2FsbG9jLmgKaW5kZXggMGFiNTZiMy4uZDBiM2JjNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5oCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuaApAQCAtNzUsNiArNzUsMjIgQEAKICNkZWZpbmUgWEZTX0FMTE9DX1NFVF9BU0lERShtcCkgICg0ICsgKChtcCktPm1fc2Iuc2JfYWdjb3VudCAqIDQpKQogCiAvKgorICogV2hlbiBkZWNpZGluZyBob3cgbXVjaCBzcGFjZSB0byBhbGxvY2F0ZSBvdXQgb2YgYW4gQUcsIHdlIGxpbWl0IHRoZQorICogYWxsb2NhdGlvbiBtYXhpbXVtIHNpemUgdG8gdGhlIHNpemUgdGhlIEFHLiBIb3dldmVyLCB3ZSBjYW5ub3QgdXNlIGFsbCB0aGUKKyAqIGJsb2NrcyBpbiB0aGUgQUcgLSBzb21lIGFyZSBwZXJtYW5lbnRseSB1c2VkIGJ5IG1ldGFkYXRhLiBUaGVzZQorICogYmxvY2tzIGFyZSBnZW5lcmFsbHk6CisgKgktIHRoZSBBRyBzdXBlcmJsb2NrLCBBR0YsIEFHSSBhbmQgQUdGTAorICoJLSB0aGUgQUdGIChibm8gYW5kIGNudCkgYW5kIEFHSSBidHJlZSByb290IGJsb2NrcworICoJLSA0IGJsb2NrcyBvbiB0aGUgQUdGTCBhY2NvcmRpbmcgdG8gWEZTX0FMTE9DX1NFVF9BU0lERSgpIGxpbWl0cworICoKKyAqIFRoZSBBRyBoZWFkZXJzIGFyZSBzZWN0b3Igc2l6ZWQsIHNvIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGhleSB0YWtlIHVwIGlzCisgKiBkZXBlbmRlbnQgb24gZmlsZXN5c3RlbSBnZW9tZXRyeS4gVGhlIG90aGVycyBhcmUgYWxsIHNpbmdsZSBibG9ja3MuCisgKi8KKyNkZWZpbmUgWEZTX0FMTE9DX0FHX01BWF9VU0FCTEUobXApCVwKKwkoKG1wKS0+bV9zYi5zYl9hZ2Jsb2NrcyAtIFhGU19CQl9UT19GU0IobXAsIFhGU19GU1NfVE9fQkIobXAsIDQpKSAtIDcpCisKKworLyoKICAqIEFyZ3VtZW50IHN0cnVjdHVyZSBmb3IgeGZzX2FsbG9jIHJvdXRpbmVzLgogICogVGhpcyBpcyB0dXJuZWQgaW50byBhIHN0cnVjdHVyZSB0byBhdm9pZCBoYXZpbmcgMjAgYXJndW1lbnRzIHBhc3NlZAogICogZG93biBzZXZlcmFsIGxldmVscyBvZiB0aGUgc3RhY2suCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IDQxMTFjZDMuLmRjM2FmZDc3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtMTAzOCwxNyArMTAzOCwzNCBAQAogCQkgKiBGaWxsaW5nIGluIHRoZSBtaWRkbGUgcGFydCBvZiBhIHByZXZpb3VzIGRlbGF5ZWQgYWxsb2NhdGlvbi4KIAkJICogQ29udGlndWl0eSBpcyBpbXBvc3NpYmxlIGhlcmUuCiAJCSAqIFRoaXMgY2FzZSBpcyBhdm9pZGVkIGFsbW9zdCBhbGwgdGhlIHRpbWUuCisJCSAqCisJCSAqIFdlIHN0YXJ0IHdpdGggYSBkZWxheWVkIGFsbG9jYXRpb246CisJCSAqCisJCSAqICtkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkKworCQkgKiAgUFJFViBAIGlkeAorCQkgKgorCSAgICAgICAgICogYW5kIHdlIGFyZSBhbGxvY2F0aW5nOgorCQkgKiAgICAgICAgICAgICAgICAgICAgICtycnJycnJycnJycnJycnJycisKKwkJICoJCQkgICAgICBuZXcKKwkJICoKKwkJICogYW5kIHdlIHNldCBpdCB1cCBmb3IgaW5zZXJ0aW9uIGFzOgorCQkgKiArZGRkZGRkZGRkZGRkZGRkZGRkZCtycnJycnJycnJycnJycnJycitkZGRkZGRkZGRkZGRkZGRkZCsKKwkJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3CisJCSAqICBQUkVWIEAgaWR4ICAgICAgICAgIExFRlQgICAgICAgICAgICAgIFJJR0hUCisJCSAqICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkIGF0IGlkeCArIDEKIAkJICovCiAJCXRlbXAgPSBuZXctPmJyX3N0YXJ0b2ZmIC0gUFJFVi5icl9zdGFydG9mZjsKLQkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCAwLCBfVEhJU19JUF8pOwotCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCwgdGVtcCk7Ci0JCXJbMF0gPSAqbmV3OwotCQlyWzFdLmJyX3N0YXRlID0gUFJFVi5icl9zdGF0ZTsKLQkJclsxXS5icl9zdGFydGJsb2NrID0gMDsKLQkJclsxXS5icl9zdGFydG9mZiA9IG5ld19lbmRvZmY7CiAJCXRlbXAyID0gUFJFVi5icl9zdGFydG9mZiArIFBSRVYuYnJfYmxvY2tjb3VudCAtIG5ld19lbmRvZmY7Ci0JCXJbMV0uYnJfYmxvY2tjb3VudCA9IHRlbXAyOwotCQl4ZnNfaWV4dF9pbnNlcnQoaXAsIGlkeCArIDEsIDIsICZyWzBdLCBzdGF0ZSk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgMCwgX1RISVNfSVBfKTsKKwkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwkvKiB0cnVuY2F0ZSBQUkVWICovCisJCUxFRlQgPSAqbmV3OworCQlSSUdIVC5icl9zdGF0ZSA9IFBSRVYuYnJfc3RhdGU7CisJCVJJR0hULmJyX3N0YXJ0YmxvY2sgPSBudWxsc3RhcnRibG9jaygKKwkJCQkoaW50KXhmc19ibWFwX3dvcnN0X2luZGxlbihpcCwgdGVtcDIpKTsKKwkJUklHSFQuYnJfc3RhcnRvZmYgPSBuZXdfZW5kb2ZmOworCQlSSUdIVC5icl9ibG9ja2NvdW50ID0gdGVtcDI7CisJCS8qIGluc2VydCBMRUZUIChyWzBdKSBhbmQgUklHSFQgKHJbMV0pIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwkJeGZzX2lleHRfaW5zZXJ0KGlwLCBpZHggKyAxLCAyLCAmTEVGVCwgc3RhdGUpOwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHggKyAxOwogCQlpcC0+aV9kLmRpX25leHRlbnRzKys7CiAJCWlmIChjdXIgPT0gTlVMTCkKQEAgLTI0MzAsNyArMjQ0Nyw3IEBACiAJCXN0YXJ0YWcgPSBhZyA9IDA7CiAKIAlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7Ci0Jd2hpbGUgKCpibGVuIDwgYXAtPmFsZW4pIHsKKwl3aGlsZSAoKmJsZW4gPCBhcmdzLT5tYXhsZW4pIHsKIAkJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgewogCQkJZXJyb3IgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBhcmdzLT50cCwgYWcsCiAJCQkJCQkgICAgWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSyk7CkBAIC0yNDUyLDcgKzI0NjksNyBAQAogCQkJbm90aW5pdCA9IDE7CiAKIAkJaWYgKHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGFwLT5pcCkpIHsKLQkJCWlmICgqYmxlbiA+PSBhcC0+YWxlbikKKwkJCWlmICgqYmxlbiA+PSBhcmdzLT5tYXhsZW4pCiAJCQkJYnJlYWs7CiAKIAkJCWlmIChhcC0+dXNlcmRhdGEpIHsKQEAgLTI0OTgsMTQgKzI1MTUsMTQgQEAKIAkgKiBJZiB0aGUgYmVzdCBzZWVuIGxlbmd0aCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVlc3QKIAkgKiBsZW5ndGgsIHVzZSB0aGUgYmVzdCBhcyB0aGUgbWluaW11bS4KIAkgKi8KLQllbHNlIGlmICgqYmxlbiA8IGFwLT5hbGVuKQorCWVsc2UgaWYgKCpibGVuIDwgYXJncy0+bWF4bGVuKQogCQlhcmdzLT5taW5sZW4gPSAqYmxlbjsKIAkvKgotCSAqIE90aGVyd2lzZSB3ZSd2ZSBzZWVuIGFuIGV4dGVudCBhcyBiaWcgYXMgYWxlbiwKKwkgKiBPdGhlcndpc2Ugd2UndmUgc2VlbiBhbiBleHRlbnQgYXMgYmlnIGFzIG1heGxlbiwKIAkgKiB1c2UgdGhhdCBhcyB0aGUgbWluaW11bS4KIAkgKi8KIAllbHNlCi0JCWFyZ3MtPm1pbmxlbiA9IGFwLT5hbGVuOworCQlhcmdzLT5taW5sZW4gPSBhcmdzLT5tYXhsZW47CiAKIAkvKgogCSAqIHNldCB0aGUgZmFpbHVyZSBmYWxsYmFjayBjYXNlIHRvIGxvb2sgaW4gdGhlIHNlbGVjdGVkCkBAIC0yNTczLDcgKzI1OTAsOSBAQAogCWFyZ3MudHAgPSBhcC0+dHA7CiAJYXJncy5tcCA9IG1wOwogCWFyZ3MuZnNibm8gPSBhcC0+cnZhbDsKLQlhcmdzLm1heGxlbiA9IE1JTihhcC0+YWxlbiwgbXAtPm1fc2Iuc2JfYWdibG9ja3MpOworCisJLyogVHJpbSB0aGUgYWxsb2NhdGlvbiBiYWNrIHRvIHRoZSBtYXhpbXVtIGFuIEFHIGNhbiBmaXQuICovCisJYXJncy5tYXhsZW4gPSBNSU4oYXAtPmFsZW4sIFhGU19BTExPQ19BR19NQVhfVVNBQkxFKG1wKSk7CiAJYXJncy5maXJzdGJsb2NrID0gYXAtPmZpcnN0YmxvY2s7CiAJYmxlbiA9IDA7CiAJaWYgKG51bGxmYikgewpAQCAtMjYyMSw3ICsyNjQwLDcgQEAKIAkJCS8qCiAJCQkgKiBBZGp1c3QgZm9yIGFsaWdubWVudAogCQkJICovCi0JCQlpZiAoYmxlbiA+IGFyZ3MuYWxpZ25tZW50ICYmIGJsZW4gPD0gYXAtPmFsZW4pCisJCQlpZiAoYmxlbiA+IGFyZ3MuYWxpZ25tZW50ICYmIGJsZW4gPD0gYXJncy5tYXhsZW4pCiAJCQkJYXJncy5taW5sZW4gPSBibGVuIC0gYXJncy5hbGlnbm1lbnQ7CiAJCQlhcmdzLm1pbmFsaWduc2xvcCA9IDA7CiAJCX0gZWxzZSB7CkBAIC0yNjQwLDcgKzI2NTksNyBAQAogCQkJICogb2YgbWlubGVuK2FsaWdubWVudCtzbG9wIGRvZXNuJ3QgZ28gdXAKIAkJCSAqIGJldHdlZW4gdGhlIGNhbGxzLgogCQkJICovCi0JCQlpZiAoYmxlbiA+IG1wLT5tX2RhbGlnbiAmJiBibGVuIDw9IGFwLT5hbGVuKQorCQkJaWYgKGJsZW4gPiBtcC0+bV9kYWxpZ24gJiYgYmxlbiA8PSBhcmdzLm1heGxlbikKIAkJCQluZXh0bWlubGVuID0gYmxlbiAtIG1wLT5tX2RhbGlnbjsKIAkJCWVsc2UKIAkJCQluZXh0bWlubGVuID0gYXJncy5taW5sZW47CkBAIC00NDg1LDYgKzQ1MDQsMTYgQEAKIAkJCQkvKiBGaWd1cmUgb3V0IHRoZSBleHRlbnQgc2l6ZSwgYWRqdXN0IGFsZW4gKi8KIAkJCQlleHRzeiA9IHhmc19nZXRfZXh0c3pfaGludChpcCk7CiAJCQkJaWYgKGV4dHN6KSB7CisJCQkJCS8qCisJCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkb24ndCBleGNlZWQgYSBzaW5nbGUKKwkJCQkJICogZXh0ZW50IGxlbmd0aCB3aGVuIHdlIGFsaWduIHRoZQorCQkJCQkgKiBleHRlbnQgYnkgcmVkdWNpbmcgbGVuZ3RoIHdlIGFyZQorCQkJCQkgKiBnb2luZyB0byBhbGxvY2F0ZSBieSB0aGUgbWF4aW11bQorCQkJCQkgKiBhbW91bnQgZXh0ZW50IHNpemUgYWxpZ21lbnQgbWF5CisJCQkJCSAqIHJlcXVpcmUuCisJCQkJCSAqLworCQkJCQlhbGVuID0gWEZTX0ZJTEJMS1NfTUlOKGxlbiwKKwkJCQkJCSAgIE1BWEVYVExFTiAtICgyICogZXh0c3ogLSAxKSk7CiAJCQkJCWVycm9yID0geGZzX2JtYXBfZXh0c2l6ZV9hbGlnbihtcCwKIAkJCQkJCQkmZ290LCAmcHJldiwgZXh0c3osCiAJCQkJCQkJcnQsIGVvZiwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCA5OGM2ZjczLi42ZjhjMjFjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC00MjcsMTMgKzQyNywxNSBAQAogCiAJCWlmIChyZW1vdmUpIHsKIAkJCS8qCi0JCQkgKiBXZSBoYXZlIHRvIHJlbW92ZSB0aGUgbG9nIGl0ZW0gZnJvbSB0aGUgdHJhbnNhY3Rpb24KLQkJCSAqIGFzIHdlIGFyZSBhYm91dCB0byByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhlCi0JCQkgKiBidWZmZXIuICBJZiB3ZSBkb24ndCwgdGhlIHVubG9jayB0aGF0IG9jY3VycyBsYXRlcgotCQkJICogaW4geGZzX3RyYW5zX3VuY29tbWl0KCkgd2lsbCByeSB0byByZWZlcmVuY2UgdGhlCisJCQkgKiBJZiB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb250ZXh0LCB3ZSBoYXZlIHRvCisJCQkgKiByZW1vdmUgdGhlIGxvZyBpdGVtIGZyb20gdGhlIHRyYW5zYWN0aW9uIGFzIHdlIGFyZQorCQkJICogYWJvdXQgdG8gcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIuICBJZiB3ZQorCQkJICogZG9uJ3QsIHRoZSB1bmxvY2sgdGhhdCBvY2N1cnMgbGF0ZXIgaW4KKwkJCSAqIHhmc190cmFuc191bmNvbW1pdCgpIHdpbGwgdHJ5IHRvIHJlZmVyZW5jZSB0aGUKIAkJCSAqIGJ1ZmZlciB3aGljaCB3ZSBubyBsb25nZXIgaGF2ZSBhIGhvbGQgb24uCiAJCQkgKi8KLQkJCXhmc190cmFuc19kZWxfaXRlbShsaXApOworCQkJaWYgKGxpcC0+bGlfZGVzYykKKwkJCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKIAogCQkJLyoKIAkJCSAqIFNpbmNlIHRoZSB0cmFuc2FjdGlvbiBubyBsb25nZXIgcmVmZXJzIHRvIHRoZSBidWZmZXIsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwppbmRleCA3NWYyZWY2Li5kMjJlNjI2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKQEAgLTEzOCw3ICsxMzgsOCBAQAogCiAJaWYgKHJlbW92ZSkgewogCQlBU1NFUlQoIShsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkpOwotCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKKwkJaWYgKGxpcC0+bGlfZGVzYykKKwkJCXhmc190cmFuc19kZWxfaXRlbShsaXApOwogCQl4ZnNfZWZpX2l0ZW1fZnJlZShlZmlwKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCBjZWM4OWRkLi44NTY2OGVmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC01Myw2ICs1Myw5IEBACiAJeGZzX2Zzb3BfZ2VvbV90CQkqZ2VvLAogCWludAkJCW5ld192ZXJzaW9uKQogeworCisJbWVtc2V0KGdlbywgMCwgc2l6ZW9mKCpnZW8pKTsKKwogCWdlby0+YmxvY2tzaXplID0gbXAtPm1fc2Iuc2JfYmxvY2tzaXplOwogCWdlby0+cnRleHRzaXplID0gbXAtPm1fc2Iuc2JfcmV4dHNpemU7CiAJZ2VvLT5hZ2Jsb2NrcyA9IG1wLT5tX3NiLnNiX2FnYmxvY2tzOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jCmluZGV4IDU1NTgyYmQuLjhhMGYwNDQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuYworKysgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTMzNyw3ICszMzcsMTIgQEAKIAkJaW50IHNoaWZ0ID0gMDsKIAkJaW50NjRfdCBmcmVlc3A7CiAKLQkJYWxsb2NfYmxvY2tzID0gWEZTX0JfVE9fRlNCKG1wLCBpcC0+aV9zaXplKTsKKwkJLyoKKwkJICogcm91bmRkb3duX3Bvd19vZl90d28oKSByZXR1cm5zIGFuIHVuZGVmaW5lZCByZXN1bHQKKwkJICogaWYgd2UgcGFzcyBpbiBhbGxvY19ibG9ja3MgPSAwLiBIZW5jZSB0aGUgIisgMSIgdG8KKwkJICogZW5zdXJlIHdlIGFsd2F5cyBwYXNzIGluIGEgbm9uLXplcm8gdmFsdWUuCisJCSAqLworCQlhbGxvY19ibG9ja3MgPSBYRlNfQl9UT19GU0IobXAsIGlwLT5pX3NpemUpICsgMTsKIAkJYWxsb2NfYmxvY2tzID0gWEZTX0ZJTEVPRkZfTUlOKE1BWEVYVExFTiwKIAkJCQkJcm91bmRkb3duX3Bvd19vZl90d28oYWxsb2NfYmxvY2tzKSk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmggYi9mcy94ZnMveGZzX2xvZy5oCmluZGV4IDkxNmViN2QuLjNiZDMyOTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmgKKysrIGIvZnMveGZzL3hmc19sb2cuaApAQCAtMTkxLDcgKzE5MSw3IEBACiAKIHhsb2dfdGlkX3QgeGZzX2xvZ19nZXRfdHJhbnNfaWRlbnQoc3RydWN0IHhmc190cmFucyAqdHApOwogCi1pbnQJeGZzX2xvZ19jb21taXRfY2lsKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3QgeGZzX3RyYW5zICp0cCwKK3ZvaWQJeGZzX2xvZ19jb21taXRfY2lsKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3QgeGZzX3RyYW5zICp0cCwKIAkJCQlzdHJ1Y3QgeGZzX2xvZ192ZWMgKmxvZ192ZWN0b3IsCiAJCQkJeGZzX2xzbl90ICpjb21taXRfbHNuLCBpbnQgZmxhZ3MpOwogYm9vbAl4ZnNfbG9nX2l0ZW1faW5fY3VycmVudF9jaGtwdChzdHJ1Y3QgeGZzX2xvZ19pdGVtICpsaXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfY2lsLmMgYi9mcy94ZnMveGZzX2xvZ19jaWwuYwppbmRleCA5ZGM4MTI1Li45Y2E1OWJlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19jaWwuYworKysgYi9mcy94ZnMveGZzX2xvZ19jaWwuYwpAQCAtNTQzLDcgKzU0Myw3IEBACiAKIAllcnJvciA9IHhsb2dfd3JpdGUobG9nLCAmbHZoZHIsIHRpYywgJmN0eC0+c3RhcnRfbHNuLCBOVUxMLCAwKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2Fib3J0OworCQlnb3RvIG91dF9hYm9ydF9mcmVlX3RpY2tldDsKIAogCS8qCiAJICogbm93IHRoYXQgd2UndmUgd3JpdHRlbiB0aGUgY2hlY2twb2ludCBpbnRvIHRoZSBsb2csIHN0cmljdGx5CkBAIC01NjksOCArNTY5LDkgQEAKIAl9CiAJc3Bpbl91bmxvY2soJmNpbC0+eGNfY2lsX2xvY2spOwogCisJLyogeGZzX2xvZ19kb25lIGFsd2F5cyBmcmVlcyB0aGUgdGlja2V0IG9uIGVycm9yLiAqLwogCWNvbW1pdF9sc24gPSB4ZnNfbG9nX2RvbmUobG9nLT5sX21wLCB0aWMsICZjb21taXRfaWNsb2csIDApOwotCWlmIChlcnJvciB8fCBjb21taXRfbHNuID09IC0xKQorCWlmIChjb21taXRfbHNuID09IC0xKQogCQlnb3RvIG91dF9hYm9ydDsKIAogCS8qIGF0dGFjaCBhbGwgdGhlIHRyYW5zYWN0aW9ucyB3LyBidXN5IGV4dGVudHMgdG8gaWNsb2cgKi8KQEAgLTYwMCw2ICs2MDEsOCBAQAogCWttZW1fZnJlZShuZXdfY3R4KTsKIAlyZXR1cm4gMDsKIAorb3V0X2Fib3J0X2ZyZWVfdGlja2V0OgorCXhmc19sb2dfdGlja2V0X3B1dCh0aWMpOwogb3V0X2Fib3J0OgogCXhsb2dfY2lsX2NvbW1pdHRlZChjdHgsIFhGU19MSV9BQk9SVEVEKTsKIAlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CkBAIC02MjIsNyArNjI1LDcgQEAKICAqIGJhY2tncm91bmQgY29tbWl0LCByZXR1cm5zIHdpdGhvdXQgaXQgaGVsZCBvbmNlIGJhY2tncm91bmQgY29tbWl0cyBhcmUKICAqIGFsbG93ZWQgYWdhaW4uCiAgKi8KLWludAordm9pZAogeGZzX2xvZ19jb21taXRfY2lsKAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLApAQCAtNjM3LDExICs2NDAsNiBAQAogCWlmIChmbGFncyAmIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpCiAJCWxvZ19mbGFncyA9IFhGU19MT0dfUkVMX1BFUk1fUkVTRVJWOwogCi0JaWYgKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpIHsKLQkJeGxvZ19jaWxfZnJlZV9sb2d2ZWMobG9nX3ZlY3Rvcik7Ci0JCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQl9Ci0KIAkvKgogCSAqIGRvIGFsbCB0aGUgaGFyZCB3b3JrIG9mIGZvcm1hdHRpbmcgaXRlbXMgKGluY2x1ZGluZyBtZW1vcnkKIAkgKiBhbGxvY2F0aW9uKSBvdXRzaWRlIHRoZSBDSUwgY29udGV4dCBsb2NrLiBUaGlzIHByZXZlbnRzIHN0YWxsaW5nIENJTApAQCAtNzAxLDcgKzY5OSw2IEBACiAJICovCiAJaWYgKHB1c2gpCiAJCXhsb2dfY2lsX3B1c2gobG9nLCAwKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuYyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwppbmRleCAzM2RiYzRlLi43NjkyMjc5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmMKKysrIGIvZnMveGZzL3hmc190cmFucy5jCkBAIC0xNDQ2LDYgKzE0NDYsMTQgQEAKICAqIEJ1bGsgb3BlcmF0aW9uIHZlcnNpb24gb2YgeGZzX3RyYW5zX2NvbW1pdHRlZCB0aGF0IHRha2VzIGEgbG9nIHZlY3RvciBvZgogICogaXRlbXMgdG8gaW5zZXJ0IGludG8gdGhlIEFJTC4gVGhpcyB1c2VzIGJ1bGsgQUlMIGluc2VydGlvbiB0ZWNobmlxdWVzIHRvCiAgKiBtaW5pbWlzZSBsb2NrIHRyYWZmaWMuCisgKgorICogSWYgd2UgYXJlIGNhbGxlZCB3aXRoIHRoZSBhYm9ydGVkIGZsYWcgc2V0LCBpdCBpcyBiZWNhdXNlIGEgbG9nIHdyaXRlIGR1cmluZworICogYSBDSUwgY2hlY2twb2ludCBjb21taXQgaGFzIGZhaWxlZC4gSW4gdGhpcyBjYXNlLCBhbGwgdGhlIGl0ZW1zIGluIHRoZQorICogY2hlY2twb2ludCBoYXZlIGFscmVhZHkgZ29uZSB0aHJvdWdoIElPUF9DT01NSVRFRCBhbmQgSU9QX1VOTE9DSywgd2hpY2gKKyAqIG1lYW5zIHRoYXQgY2hlY2twb2ludCBjb21taXQgYWJvcnQgaGFuZGxpbmcgaXMgdHJlYXRlZCBleGFjdGx5IHRoZSBzYW1lCisgKiBhcyBhbiBpY2xvZyB3cml0ZSBlcnJvciBldmVuIHRob3VnaCB3ZSBoYXZlbid0IHN0YXJ0ZWQgYW55IElPIHlldC4gSGVuY2UgaW4KKyAqIHRoaXMgY2FzZSBhbGwgd2UgbmVlZCB0byBkbyBpcyBJT1BfQ09NTUlUVEVEIHByb2Nlc3NpbmcsIGZvbGxvd2VkIGJ5IGFuCisgKiBJT1BfVU5QSU4oYWJvcnRlZCkgY2FsbC4KICAqLwogdm9pZAogeGZzX3RyYW5zX2NvbW1pdHRlZF9idWxrKApAQCAtMTQ3Miw2ICsxNDgwLDE2IEBACiAJCWlmIChYRlNfTFNOX0NNUChpdGVtX2xzbiwgKHhmc19sc25fdCktMSkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCisJCS8qCisJCSAqIGlmIHdlIGFyZSBhYm9ydGluZyB0aGUgb3BlcmF0aW9uLCBubyBwb2ludCBpbiBpbnNlcnRpbmcgdGhlCisJCSAqIG9iamVjdCBpbnRvIHRoZSBBSUwgYXMgd2UgYXJlIGluIGEgc2h1dGRvd24gc2l0dWF0aW9uLgorCQkgKi8KKwkJaWYgKGFib3J0ZWQpIHsKKwkJCUFTU0VSVChYRlNfRk9SQ0VEX1NIVVRET1dOKGFpbHAtPnhhX21vdW50KSk7CisJCQlJT1BfVU5QSU4obGlwLCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKGl0ZW1fbHNuICE9IGNvbW1pdF9sc24pIHsKIAogCQkJLyoKQEAgLTE1MDMsMjAgKzE1MjEsMjQgQEAKIH0KIAogLyoKLSAqIENhbGxlZCBmcm9tIHRoZSB0cmFuc19jb21taXQgY29kZSB3aGVuIHdlIG5vdGljZSB0aGF0Ci0gKiB0aGUgZmlsZXN5c3RlbSBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgZm9yY2VkIHNodXRkb3duLgorICogQ2FsbGVkIGZyb20gdGhlIHRyYW5zX2NvbW1pdCBjb2RlIHdoZW4gd2Ugbm90aWNlIHRoYXQgdGhlIGZpbGVzeXN0ZW0gaXMgaW4KKyAqIHRoZSBtaWRkbGUgb2YgYSBmb3JjZWQgc2h1dGRvd24uCisgKgorICogV2hlbiB3ZSBhcmUgY2FsbGVkIGhlcmUsIHdlIGhhdmUgYWxyZWFkeSBwaW5uZWQgYWxsIHRoZSBpdGVtcyBpbiB0aGUKKyAqIHRyYW5zYWN0aW9uLiBIb3dldmVyLCBuZWl0aGVyIElPUF9DT01NSVRUSU5HIG9yIElPUF9VTkxPQ0sgaGFzIGJlZW4gY2FsbGVkCisgKiBzbyB3ZSBjYW4gc2ltcGx5IHdhbGsgdGhlIGl0ZW1zIGluIHRoZSB0cmFuc2FjdGlvbiwgdW5waW4gdGhlbSB3aXRoIGFuIGFib3J0CisgKiBmbGFnIGFuZCB0aGVuIGZyZWUgdGhlIGl0ZW1zLiBOb3RlIHRoYXQgdW5waW5uaW5nIHRoZSBpdGVtcyBjYW4gcmVzdWx0IGluCisgKiB0aGVtIGJlaW5nIGZyZWVkIGltbWVkaWF0ZWx5LCBzbyB3ZSBuZWVkIHRvIHVzZSBhIHNhZmUgbGlzdCB0cmF2ZXJzYWwgbWV0aG9kCisgKiBoZXJlLgogICovCiBTVEFUSUMgdm9pZAogeGZzX3RyYW5zX3VuY29tbWl0KAogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLAogCXVpbnQJCQlmbGFncykKIHsKLQlzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MgKmxpZHA7CisJc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjICpsaWRwLCAqbjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkobGlkcCwgJnRwLT50X2l0ZW1zLCBsaWRfdHJhbnMpIHsKLQkJLyoKLQkJICogVW5waW4gYWxsIGJ1dCB0aG9zZSB0aGF0IGFyZW4ndCBkaXJ0eS4KLQkJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpZHAsIG4sICZ0cC0+dF9pdGVtcywgbGlkX3RyYW5zKSB7CiAJCWlmIChsaWRwLT5saWRfZmxhZ3MgJiBYRlNfTElEX0RJUlRZKQogCQkJSU9QX1VOUElOKGxpZHAtPmxpZF9pdGVtLCAxKTsKIAl9CkBAIC0xNzMzLDcgKzE3NTUsNiBAQAogCWludAkJCWZsYWdzKQogewogCXN0cnVjdCB4ZnNfbG9nX3ZlYwkqbG9nX3ZlY3RvcjsKLQlpbnQJCQllcnJvcjsKIAogCS8qCiAJICogR2V0IGVhY2ggbG9nIGl0ZW0gdG8gYWxsb2NhdGUgYSB2ZWN0b3Igc3RydWN0dXJlIGZvcgpAQCAtMTc0NCw5ICsxNzY1LDcgQEAKIAlpZiAoIWxvZ192ZWN0b3IpCiAJCXJldHVybiBFTk9NRU07CiAKLQllcnJvciA9IHhmc19sb2dfY29tbWl0X2NpbChtcCwgdHAsIGxvZ192ZWN0b3IsIGNvbW1pdF9sc24sIGZsYWdzKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwl4ZnNfbG9nX2NvbW1pdF9jaWwobXAsIHRwLCBsb2dfdmVjdG9yLCBjb21taXRfbHNuLCBmbGFncyk7CiAKIAljdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKCZ0cC0+dF9wZmxhZ3MsIFBGX0ZTVFJBTlMpOwogCXhmc190cmFuc19mcmVlKHRwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKaW5kZXggMzFiNjE4OC4uYjRiZmUzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKQEAgLTQsNiArNCw4IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2lmZGVmIENPTkZJR19NTVUKIAorI2luY2x1ZGUgPGxpbnV4L21tX3R5cGVzLmg+CisKICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCiBleHRlcm4gaW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCA2ZWJiODEwLi5mZTc3ZTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC0xMjQsNyArMTI0LDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKLSNkZWZpbmUgRlRSQUNFX0VWRU5UUygpCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfZnRyYWNlX2V2ZW50cykgPSAuOwlcCisjZGVmaW5lIEZUUkFDRV9FVkVOVFMoKQkuID0gQUxJR04oOCk7CQkJCQlcCisJCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X2Z0cmFjZV9ldmVudHMpID0gLjsJXAogCQkJKihfZnRyYWNlX2V2ZW50cykJCQkJXAogCQkJVk1MSU5VWF9TWU1CT0woX19zdG9wX2Z0cmFjZV9ldmVudHMpID0gLjsKICNlbHNlCkBAIC0xNDAsNyArMTQxLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpIFZNTElOVVhfU1lNQk9MKF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsJXAorI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpIC4gPSBBTElHTig4KTsJCQkJCVwKKwkJCSBWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhKSA9IC47CVwKIAkJCSAqKF9fc3lzY2FsbHNfbWV0YWRhdGEpCQkJCVwKIAkJCSBWTUxJTlVYX1NZTUJPTChfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsKICNlbHNlCkBAIC0xNjUsMTAgKzE2Nyw4IEBACiAJQ1BVX0tFRVAoZXhpdC5kYXRhKQkJCQkJCVwKIAlNRU1fS0VFUChpbml0LmRhdGEpCQkJCQkJXAogCU1FTV9LRUVQKGV4aXQuZGF0YSkJCQkJCQlcCi0JLiA9IEFMSUdOKDMyKTsJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50cykgPSAuOwkJCVwKKwlTVFJVQ1RfQUxJR04oKTsJCQkJCQkJXAogCSooX190cmFjZXBvaW50cykJCQkJCQlcCi0JVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdHJhY2Vwb2ludHMpID0gLjsJCQlcCiAJLyogaW1wbGVtZW50IGR5bmFtaWMgcHJpbnRrIGRlYnVnICovCQkJCVwKIAkuID0gQUxJR04oOCk7CQkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdmVyYm9zZSkgPSAuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTc2LDEzICsxNzYsNyBAQAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAogCUJSQU5DSF9QUk9GSUxFKCkJCQkJCQlcCi0JVFJBQ0VfUFJJTlRLUygpCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlTVFJVQ1RfQUxJR04oKTsJCQkJCQkJXAotCUZUUkFDRV9FVkVOVFMoKQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JU1RSVUNUX0FMSUdOKCk7CQkJCQkJCVwKLQlUUkFDRV9TWVNDQUxMUygpCisJVFJBQ0VfUFJJTlRLUygpCiAKIC8qCiAgKiBEYXRhIHNlY3Rpb24gaGVscGVycwpAQCAtMjIwLDYgKzIxNCwxMCBAQAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3JvZGF0YSkgPSAuOwkJCVwKIAkJKigucm9kYXRhKSAqKC5yb2RhdGEuKikJCQkJCVwKIAkJKihfX3Zlcm1hZ2ljKQkJLyogS2VybmVsIHZlcnNpb24gbWFnaWMgKi8JXAorCQkuID0gQUxJR04oOCk7CQkJCQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdHJhY2Vwb2ludHNfcHRycykgPSAuOwkJXAorCQkqKF9fdHJhY2Vwb2ludHNfcHRycykJLyogVHJhY2Vwb2ludHM6IHBvaW50ZXIgYXJyYXkgKi9cCisJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzX3B0cnMpID0gLjsJCVwKIAkJKihfX21hcmtlcnNfc3RyaW5ncykJLyogTWFya2Vyczogc3RyaW5ncyAqLwkJXAogCQkqKF9fdHJhY2Vwb2ludHNfc3RyaW5ncykvKiBUcmFjZXBvaW50czogc3RyaW5ncyAqLwlcCiAJfQkJCQkJCQkJXApAQCAtNDgyLDYgKzQ4MCw4IEBACiAJS0VSTkVMX0NUT1JTKCkJCQkJCQkJXAogCSooLmluaXQucm9kYXRhKQkJCQkJCQlcCiAJTUNPVU5UX1JFQygpCQkJCQkJCVwKKwlGVFJBQ0VfRVZFTlRTKCkJCQkJCQkJXAorCVRSQUNFX1NZU0NBTExTKCkJCQkJCQlcCiAJREVWX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJQ1BVX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJTUVNX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggYTQ2OTRjNi4uMzQ4ODQzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtMTEwMSw3ICsxMTAxLDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybWRldjsgLyoqPCBQbGF0Zm9ybSBkZXZpY2Ugc3RydXR1cmUgKi8KIAogCXN0cnVjdCBkcm1fc2dfbWVtICpzZzsJLyoqPCBTY2F0dGVyIGdhdGhlciBtZW1vcnkgKi8KLQlpbnQgbnVtX2NydGNzOyAgICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIENSVENzIG9uIHRoaXMgZGV2aWNlICovCisJdW5zaWduZWQgaW50IG51bV9jcnRjczsgICAgICAgICAgICAgICAgICAvKio8IE51bWJlciBvZiBDUlRDcyBvbiB0aGlzIGRldmljZSAqLwogCXZvaWQgKmRldl9wcml2YXRlOwkJLyoqPCBkZXZpY2UgcHJpdmF0ZSBkYXRhICovCiAJdm9pZCAqbW1fcHJpdmF0ZTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqZGV2X21hcHBpbmc7CkBAIC0xMzY3LDcgKzEzNjcsNyBAQAogZXh0ZXJuIHUzMiBkcm1fdmJsYW5rX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiB1MzIgZHJtX3ZibGFua19jb3VudF9hbmRfdGltZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YywKIAkJCQkgICAgIHN0cnVjdCB0aW1ldmFsICp2Ymxhbmt0aW1lKTsKLWV4dGVybiB2b2lkIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKK2V4dGVybiBib29sIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKTsKIGV4dGVybiBpbnQgZHJtX3ZibGFua19nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHZvaWQgZHJtX3ZibGFua19wdXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHZvaWQgZHJtX3ZibGFua19vZmYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggYWNkN2ZhZC4uODAxYmU1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC0yNzUsNiArMjc1LDcgQEAKIAogLyoqCiAgKiBkcm1fY3J0Y19mdW5jcyAtIGNvbnRyb2wgQ1JUQ3MgZm9yIGEgZ2l2ZW4gZGV2aWNlCisgKiBAcmVzZXQ6IHJlc2V0IENSVEMgYWZ0ZXIgc3RhdGUgaGFzIGJlZW4gaW52YWxpZGF0ZSAoZS5nLiByZXN1bWUpCiAgKiBAZHBtczogY29udHJvbCBkaXNwbGF5IHBvd2VyIGxldmVscwogICogQHNhdmU6IHNhdmUgQ1JUQyBzdGF0ZQogICogQHJlc29yZTogcmVzdG9yZSBDUlRDIHN0YXRlCkBAIC0zMDIsNiArMzAzLDggQEAKIAl2b2lkICgqc2F2ZSkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsgLyogc3VzcGVuZD8gKi8KIAkvKiBSZXN0b3JlIENSVEMgc3RhdGUgKi8KIAl2b2lkICgqcmVzdG9yZSkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsgLyogcmVzdW1lPyAqLworCS8qIFJlc2V0IENSVEMgc3RhdGUgKi8KKwl2b2lkICgqcmVzZXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiAKIAkvKiBjdXJzb3IgY29udHJvbHMgKi8KIAlpbnQgKCpjdXJzb3Jfc2V0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LApAQCAtMzc5LDYgKzM4Miw3IEBACiAgKiBAZHBtczogc2V0IHBvd2VyIHN0YXRlIChzZWUgZHJtX2NydGNfZnVuY3MgYWJvdmUpCiAgKiBAc2F2ZTogc2F2ZSBjb25uZWN0b3Igc3RhdGUKICAqIEByZXN0b3JlOiByZXN0b3JlIGNvbm5lY3RvciBzdGF0ZQorICogQHJlc2V0OiByZXNldCBjb25uZWN0b3IgYWZ0ZXIgc3RhdGUgaGFzIGJlZW4gaW52YWxpZGF0ZSAoZS5nLiByZXN1bWUpCiAgKiBAbW9kZV92YWxpZDogaXMgdGhpcyBtb2RlIHZhbGlkIG9uIHRoZSBnaXZlbiBjb25uZWN0b3I/CiAgKiBAbW9kZV9maXh1cDogdHJ5IHRvIGZpeHVwIHByb3Bvc2VkIG1vZGUgZm9yIHRoaXMgY29ubmVjdG9yCiAgKiBAbW9kZV9zZXQ6IHNldCB0aGlzIG1vZGUKQEAgLTM5Niw2ICs0MDAsNyBAQAogCXZvaWQgKCpkcG1zKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBpbnQgbW9kZSk7CiAJdm9pZCAoKnNhdmUpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogCXZvaWQgKCpyZXN0b3JlKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKwl2b2lkICgqcmVzZXQpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIGFueXRoaW5nIGlzIGF0dGFjaGVkIHRvIHRoZSBjb25uZWN0b3IuCiAJICogQGZvcmNlIGlzIHNldCB0byBmYWxzZSB3aGlsc3QgcG9sbGluZywgdHJ1ZSB3aGVuIGNoZWNraW5nIHRoZQpAQCAtNDEzLDYgKzQxOCw3IEBACiB9OwogCiBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgeworCXZvaWQgKCpyZXNldCkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKIH07CiAKQEAgLTY1Niw2ICs2NjIsNyBAQAogCQkJCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiBleHRlcm4gdm9pZCBkcm1fbW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9tb2RlX2NvbmZpZ19yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfc2V0X25hbWUoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwogZXh0ZXJuIGJvb2wgZHJtX21vZGVfZXF1YWwoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUxLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IGZlMjlhZTMuLjVmZjExOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAl7MHgxMDAyLCAweDQxNTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB9LCBcCiAJezB4MTAwMiwgMHg0MjM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg0MjQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IyMDB9LCBcCi0JezB4MTAwMiwgMHg0MjQzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IyMDB9LCBcCiAJezB4MTAwMiwgMHg0MzM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMTAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NDMzNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzIwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWX0sIFwKIAl7MHgxMDAyLCAweDQ0MzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMyMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvcnhycGMtdHlwZS5oIGIvaW5jbHVkZS9rZXlzL3J4cnBjLXR5cGUuaAppbmRleCA1Y2I4NmMzLi5mYzQ4NzU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2tleXMvcnhycGMtdHlwZS5oCisrKyBiL2luY2x1ZGUva2V5cy9yeHJwYy10eXBlLmgKQEAgLTk5LDcgKzk5LDYgQEAKICAqIHN0cnVjdHVyZSBvZiByYXcgcGF5bG9hZHMgcGFzc2VkIHRvIGFkZF9rZXkoKSBvciBpbnN0YW50aWF0ZSBrZXkKICAqLwogc3RydWN0IHJ4cnBjX2tleV9kYXRhX3YxIHsKLQl1MzIJCWtpZl92ZXJzaW9uOwkJLyogMSAqLwogCXUxNgkJc2VjdXJpdHlfaW5kZXg7CiAJdTE2CQl0aWNrZXRfbGVuZ3RoOwogCXUzMgkJZXhwaXJ5OwkJCS8qIHRpbWVfdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCAyMjk2ZDhiLi5iMGFkYTZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMSw1ICsxLDYgQEAKIGhlYWRlci15ICs9IGJ5dGVvcmRlci8KIGhlYWRlci15ICs9IGNhbi8KK2hlYWRlci15ICs9IGNhaWYvCiBoZWFkZXIteSArPSBkdmIvCiBoZWFkZXIteSArPSBoZGxjLwogaGVhZGVyLXkgKz0gaXNkbi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDRkMThmZjMuLmQ1MDYzZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtNjk5LDcgKzY5OSw3IEBACiBleHRlcm4gdm9pZCBibGtfc3RvcF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gdm9pZCBibGtfc3luY19xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gdm9pZCBfX2Jsa19zdG9wX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKLWV4dGVybiB2b2lkIF9fYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKK2V4dGVybiB2b2lkIF9fYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYm9vbCBmb3JjZV9rYmxvY2tkKTsKIGV4dGVybiB2b2lkIGJsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7CiBleHRlcm4gaW50IGJsa19ycV9tYXBfdXNlcihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAogCQkJICAgc3RydWN0IHJxX21hcF9kYXRhICosIHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcsCkBAIC0xMDg4LDcgKzEwODgsNiBAQAogCiBzdHJ1Y3Qgd29ya19zdHJ1Y3Q7CiBpbnQga2Jsb2NrZF9zY2hlZHVsZV93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotaW50IGtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yaywgdW5zaWduZWQgbG9uZyBkZWxheSk7CiAKICNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUAogLyoKQEAgLTExMzYsNyArMTEzNSw2IEBACiBleHRlcm4gaW50IGJsa190aHJvdGxfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gdm9pZCBibGtfdGhyb3RsX2V4aXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIGludCBibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqKmJpbyk7Ci1leHRlcm4gdm9pZCB0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBsb25nIGRlbGF5KTsKIGV4dGVybiB2b2lkIHRocm90bF9zaHV0ZG93bl90aW1lcl93cShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiAjZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HICovCiBzdGF0aWMgaW5saW5lIGludCBibGtfdGhyb3RsX2JpbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqKmJpbykKQEAgLTExNDYsNyArMTE0NCw2IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGJsa190aHJvdGxfaW5pdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgYmxrX3Rocm90bF9leGl0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgbG9uZyBkZWxheSkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aHJvdGxfc2h1dGRvd25fdGltZXJfd3Eoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpIHt9CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfVEhST1RUTElORyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAppbmRleCAzMzk1Y2Y3Li5iMjJmYjBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKQEAgLTI0NSw3ICsyNDUsNiBAQAogCiBleHRlcm4gdm9pZCBibGtfZHVtcF9jbWQoY2hhciAqYnVmLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpOwogZXh0ZXJuIHZvaWQgYmxrX2ZpbGxfcndicyhjaGFyICpyd2JzLCB1MzIgcncsIGludCBieXRlcyk7Ci1leHRlcm4gdm9pZCBibGtfZmlsbF9yd2JzX3JxKGNoYXIgKnJ3YnMsIHN0cnVjdCByZXF1ZXN0ICpycSk7CiAKICNlbmRpZiAvKiBDT05GSUdfRVZFTlRfVFJBQ0lORyAmJiBDT05GSUdfQkxPQ0sgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYWlmL0tidWlsZCBiL2luY2x1ZGUvbGludXgvY2FpZi9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljZjI1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2FpZi9LYnVpbGQKQEAgLTAsMCArMSwyIEBACitoZWFkZXIteSArPSBjYWlmX3NvY2tldC5oCitoZWFkZXIteSArPSBpZl9jYWlmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2VwaC9tZXNzZW5nZXIuaCBiL2luY2x1ZGUvbGludXgvY2VwaC9tZXNzZW5nZXIuaAppbmRleCBjMzAxMWJlLi4zMWQ5MWE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZXBoL21lc3Nlbmdlci5oCkBAIC0xMjMsNiArMTIzLDcgQEAKICNkZWZpbmUgU09DS19DTE9TRUQJMTEgLyogc29ja2V0IHN0YXRlIGNoYW5nZWQgdG8gY2xvc2VkICovCiAjZGVmaW5lIE9QRU5JTkcgICAgICAgICAxMyAvKiBvcGVuIGNvbm5lY3Rpb24gdy8gKHBvc3NpYmx5IG5ldykgcGVlciAqLwogI2RlZmluZSBERUFEICAgICAgICAgICAgMTQgLyogZGVhZCwgYWJvdXQgdG8ga2ZyZWUgKi8KKyNkZWZpbmUgQkFDS09GRiAgICAgICAgIDE1CiAKIC8qCiAgKiBBIHNpbmdsZSBjb25uZWN0aW9uIHdpdGggYW5vdGhlciBob3N0LgpAQCAtMTYwLDcgKzE2MSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBvdXRfcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZCBvdXRfc2VudDsgICAvKiBzZW5kaW5nIG9yIHNlbnQgYnV0IHVuYWNrZWQgKi8KIAl1NjQgb3V0X3NlcTsJCSAgICAgLyogbGFzdCBtZXNzYWdlIHF1ZXVlZCBmb3Igc2VuZCAqLwotCWJvb2wgb3V0X2tlZXBhbGl2ZV9wZW5kaW5nOwogCiAJdTY0IGluX3NlcSwgaW5fc2VxX2Fja2VkOyAgLyogbGFzdCBtZXNzYWdlIHJlY2VpdmVkLCBhY2tlZCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYm5sLmggYi9pbmNsdWRlL2xpbnV4L2RjYm5sLmgKaW5kZXggNjhjZDI0OC4uNjY5MDBlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2JubC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNibmwuaApAQCAtMTAxLDggKzEwMSw4IEBACiAgKi8KIHN0cnVjdCBkY2JfYXBwIHsKIAlfX3U4CXNlbGVjdG9yOwotCV9fdTMyCXByb3RvY29sOwogCV9fdTgJcHJpb3JpdHk7CisJX191MTYJcHJvdG9jb2w7CiB9OwogCiBzdHJ1Y3QgZGNibXNnIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKaW5kZXggZGE3ZTUyYi4uMWVmZmM4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogfQogCiAvKgotICogQ2hlY2sgaWYgdGhlIHRhc2sgc2hvdWxkIGJlIGNvdW50ZWQgYXMgZnJlZXplYWJsZSBieSB0aGUgZnJlZXplcgorICogQ2hlY2sgaWYgdGhlIHRhc2sgc2hvdWxkIGJlIGNvdW50ZWQgYXMgZnJlZXphYmxlIGJ5IHRoZSBmcmVlemVyCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZyZWV6ZXJfc2hvdWxkX3NraXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDMyYjM4Y2QuLmUzOGI1MGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC02NDksNiArNjQ5LDcgQEAKIAlzcGlubG9ja190CQlwcml2YXRlX2xvY2s7CS8qIGZvciB1c2UgYnkgdGhlIGFkZHJlc3Nfc3BhY2UgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXByaXZhdGVfbGlzdDsJLyogZGl0dG8gKi8KIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqYXNzb2NfbWFwcGluZzsJLyogZGl0dG8gKi8KKwlzdHJ1Y3QgbXV0ZXgJCXVubWFwX211dGV4OyAgICAvKiB0byBwcm90ZWN0IHVubWFwcGluZyAqLwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKIAkvKgogCSAqIE9uIG1vc3QgYXJjaGl0ZWN0dXJlcyB0aGF0IGFsaWdubWVudCBpcyBhbHJlYWR5IHRoZSBjYXNlOyBidXQKQEAgLTIxMzksNyArMjE0MCw3IEBACiAJCQkJICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7CiBleHRlcm4gaW50IHJldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqKTsKIGV4dGVybiBpbnQgY2hlY2tfZGlza19jaGFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKLWV4dGVybiBpbnQgX19pbnZhbGlkYXRlX2RldmljZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIGludCBfX2ludmFsaWRhdGVfZGV2aWNlKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgYm9vbCk7CiBleHRlcm4gaW50IGludmFsaWRhdGVfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICosIGludCk7CiAjZW5kaWYKIHVuc2lnbmVkIGxvbmcgaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLApAQCAtMjIyNSw2ICsyMjI2LDcgQEAKIAogZXh0ZXJuIGludCBpbm9kZV9pbml0X2Fsd2F5cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgaW5vZGVfaW5pdF9vbmNlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGFkZHJlc3Nfc3BhY2VfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIGlncmFiKHN0cnVjdCBpbm9kZSAqKTsKQEAgLTI1NTUsOSArMjU1NywxMiBAQAogCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CiBpbnQgX19pbml0IGdldF9maWxlc3lzdGVtX2xpc3QoY2hhciAqYnVmKTsKIAorI2RlZmluZSBfX0ZNT0RFX0VYRUMJCSgoX19mb3JjZSBpbnQpIEZNT0RFX0VYRUMpCisjZGVmaW5lIF9fRk1PREVfTk9OT1RJRlkJKChfX2ZvcmNlIGludCkgRk1PREVfTk9OT1RJRlkpCisKICNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDA0XDAwMlwwMDZcMDA2IlsoeCkmT19BQ0NNT0RFXSkKICNkZWZpbmUgT1BFTl9GTU9ERShmbGFnKSAoKF9fZm9yY2UgZm1vZGVfdCkoKChmbGFnICsgMSkgJiBPX0FDQ01PREUpIHwgXAotCQkJCQkgICAgKGZsYWcgJiBGTU9ERV9OT05PVElGWSkpKQorCQkJCQkgICAgKGZsYWcgJiBfX0ZNT0RFX05PTk9USUZZKSkpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IDBiODRjNjEuLmRjYTMxNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMzMyLDE2ICszMzIsMTkgQEAKIAlyZXR1cm4gYWxsb2NfcGFnZXNfY3VycmVudChnZnBfbWFzaywgb3JkZXIpOwogfQogZXh0ZXJuIHN0cnVjdCBwYWdlICphbGxvY19wYWdlc192bWEoZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlciwKLQkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpOworCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCWludCBub2RlKTsKICNlbHNlCiAjZGVmaW5lIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcikgXAogCQlhbGxvY19wYWdlc19ub2RlKG51bWFfbm9kZV9pZCgpLCBnZnBfbWFzaywgb3JkZXIpCi0jZGVmaW5lIGFsbG9jX3BhZ2VzX3ZtYShnZnBfbWFzaywgb3JkZXIsIHZtYSwgYWRkcikJXAorI2RlZmluZSBhbGxvY19wYWdlc192bWEoZ2ZwX21hc2ssIG9yZGVyLCB2bWEsIGFkZHIsIG5vZGUpCVwKIAlhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpCiAjZW5kaWYKICNkZWZpbmUgYWxsb2NfcGFnZShnZnBfbWFzaykgYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIDApCi0jZGVmaW5lIGFsbG9jX3BhZ2Vfdm1hKGdmcF9tYXNrLCB2bWEsIGFkZHIpCVwKLQlhbGxvY19wYWdlc192bWEoZ2ZwX21hc2ssIDAsIHZtYSwgYWRkcikKKyNkZWZpbmUgYWxsb2NfcGFnZV92bWEoZ2ZwX21hc2ssIHZtYSwgYWRkcikJCQlcCisJYWxsb2NfcGFnZXNfdm1hKGdmcF9tYXNrLCAwLCB2bWEsIGFkZHIsIG51bWFfbm9kZV9pZCgpKQorI2RlZmluZSBhbGxvY19wYWdlX3ZtYV9ub2RlKGdmcF9tYXNrLCB2bWEsIGFkZHIsIG5vZGUpCQlcCisJYWxsb2NfcGFnZXNfdm1hKGdmcF9tYXNrLCAwLCB2bWEsIGFkZHIsIG5vZGUpCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fZ2V0X2ZyZWVfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfemVyb2VkX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdlX21tLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaAppbmRleCA4ZTZjOGM0Li5kZjI5YzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaApAQCAtNTcsNyArNTcsOCBAQAogCSAgKHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzICYJCQkJCVwKIAkgICAoMTw8VFJBTlNQQVJFTlRfSFVHRVBBR0VfUkVRX01BRFZfRkxBRykgJiYJCQlcCiAJICAgKChfX3ZtYSktPnZtX2ZsYWdzICYgVk1fSFVHRVBBR0UpKSkgJiYJCQlcCi0JICEoKF9fdm1hKS0+dm1fZmxhZ3MgJiBWTV9OT0hVR0VQQUdFKSkKKwkgISgoX192bWEpLT52bV9mbGFncyAmIFZNX05PSFVHRVBBR0UpICYmCQkJXAorCSAhaXNfdm1hX3RlbXBvcmFyeV9zdGFjayhfX3ZtYSkpCiAjZGVmaW5lIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2RlZnJhZyhfX3ZtYSkJCQkJXAogCSgodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgJgkJCQkJXAogCSAgKDE8PFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19GTEFHKSkgfHwJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oCmluZGV4IDY5NzQ3NDYuLmZlN2M0YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oCkBAIC00LDggKzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAotI2RlZmluZSBNQVRSSVhfTUFYX1JPV1MJCTE2Ci0jZGVmaW5lIE1BVFJJWF9NQVhfQ09MUwkJMTYKKyNkZWZpbmUgTUFUUklYX01BWF9ST1dTCQkzMgorI2RlZmluZSBNQVRSSVhfTUFYX0NPTFMJCTMyCiAKICNkZWZpbmUgS0VZKHJvdywgY29sLCB2YWwpCSgoKChyb3cpICYgKE1BVFJJWF9NQVhfUk9XUyAtIDEpKSA8PCAyNCkgfFwKIAkJCQkgKCgoY29sKSAmIChNQVRSSVhfTUFYX0NPTFMgLSAxKSkgPDwgMTYpIHxcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCBhYmRlMjUyLi44MGZjYjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTc0LDcgKzc0LDggQEAKIAogI2RlZmluZSBJUlFGX01PRElGWV9NQVNLCVwKIAkoSVJRX1RZUEVfU0VOU0VfTUFTSyB8IElSUV9OT1BST0JFIHwgSVJRX05PUkVRVUVTVCB8IFwKLQkgSVJRX05PQVVUT0VOIHwgSVJRX01PVkVfUENOVFhUIHwgSVJRX0xFVkVMKQorCSBJUlFfTk9BVVRPRU4gfCBJUlFfTU9WRV9QQ05UWFQgfCBJUlFfTEVWRUwgfCBJUlFfTk9fQkFMQU5DSU5HIHwgXAorCSBJUlFfUEVSX0NQVSkKIAogI2lmZGVmIENPTkZJR19JUlFfUEVSX0NQVQogIyBkZWZpbmUgQ0hFQ0tfSVJRX1BFUl9DUFUodmFyKSAoKHZhcikgJiBJUlFfUEVSX0NQVSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IGUyZjRkNmEuLjJmZTZlODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtNTg4LDcgKzU4OCw3IEBACiAKIC8qKgogICogQlVJTERfQlVHX09OIC0gYnJlYWsgY29tcGlsZSBpZiBhIGNvbmRpdGlvbiBpcyB0cnVlLgotICogQGNvbmQ6IHRoZSBjb25kaXRpb24gd2hpY2ggdGhlIGNvbXBpbGVyIHNob3VsZCBrbm93IGlzIGZhbHNlLgorICogQGNvbmRpdGlvbjogdGhlIGNvbmRpdGlvbiB3aGljaCB0aGUgY29tcGlsZXIgc2hvdWxkIGtub3cgaXMgZmFsc2UuCiAgKgogICogSWYgeW91IGhhdmUgc29tZSBjb2RlIHdoaWNoIHJlbGllcyBvbiBjZXJ0YWluIGNvbnN0YW50cyBiZWluZyBlcXVhbCwgb3IKICAqIG90aGVyIGNvbXBpbGUtdGltZS1ldmFsdWF0ZWQgY29uZGl0aW9uLCB5b3Ugc2hvdWxkIHVzZSBCVUlMRF9CVUdfT04gdG8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2xpc3QuaCBiL2luY2x1ZGUvbGludXgva2xpc3QuaAppbmRleCBlOTFhNGU1Li5hMzcwY2U1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rbGlzdC5oCkBAIC0yMiw3ICsyMiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAlrX2xpc3Q7CiAJdm9pZAkJCSgqZ2V0KShzdHJ1Y3Qga2xpc3Rfbm9kZSAqKTsKIAl2b2lkCQkJKCpwdXQpKHN0cnVjdCBrbGlzdF9ub2RlICopOwotfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKHNpemVvZih2b2lkICopKSkpOwogCiAjZGVmaW5lIEtMSVNUX0lOSVQoX25hbWUsIF9nZXQsIF9wdXQpCQkJCQlcCiAJeyAua19sb2NrCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoX25hbWUua19sb2NrKSwJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdC5oIGIvaW5jbHVkZS9saW51eC9saXN0LmgKaW5kZXggOWE1ZjhhNy4uM2E1NDI2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9saXN0LmgKQEAgLTk2LDYgKzk2LDExIEBACiAgKiBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCiAgKi8KICNpZm5kZWYgQ09ORklHX0RFQlVHX0xJU1QKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3RfZGVsX2VudHJ5KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQogewogCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKQEAgLTEwMyw2ICsxMDgsNyBAQAogCWVudHJ5LT5wcmV2ID0gTElTVF9QT0lTT04yOwogfQogI2Vsc2UKK2V4dGVybiB2b2lkIF9fbGlzdF9kZWxfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpOwogZXh0ZXJuIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpOwogI2VuZGlmCiAKQEAgLTEzNSw3ICsxNDEsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWxfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKIHsKLQlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CisJX19saXN0X2RlbF9lbnRyeShlbnRyeSk7CiAJSU5JVF9MSVNUX0hFQUQoZW50cnkpOwogfQogCkBAIC0xNDYsNyArMTUyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGxpc3RfbW92ZShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewotCV9fbGlzdF9kZWwobGlzdC0+cHJldiwgbGlzdC0+bmV4dCk7CisJX19saXN0X2RlbF9lbnRyeShsaXN0KTsKIAlsaXN0X2FkZChsaXN0LCBoZWFkKTsKIH0KIApAQCAtMTU4LDcgKzE2NCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKIAkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0JX19saXN0X2RlbChsaXN0LT5wcmV2LCBsaXN0LT5uZXh0KTsKKwlfX2xpc3RfZGVsX2VudHJ5KGxpc3QpOwogCWxpc3RfYWRkX3RhaWwobGlzdCwgaGVhZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvY29yZS5oCmluZGV4IDNmZDM2ODQ1Li5lZjRmMGI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9jb3JlLmgKQEAgLTcxLDYgKzcxLDcgQEAKIAl1MTYgaXJxX21hc2tzX2NhY2hlW1dNODk5NF9OVU1fSVJRX1JFR1NdOwogCiAJLyogVXNlZCBvdmVyIHN1c3BlbmQvcmVzdW1lICovCisJYm9vbCBzdXNwZW5kZWQ7CiAJdTE2IGxkb19yZWdzW1dNODk5NF9OVU1fTERPX1JFR1NdOwogCXUxNiBncGlvX3JlZ3NbV004OTk0X05VTV9HUElPX1JFR1NdOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCBlN2M2Mzg1Li41ZGU0MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTYyLDcgKzYyLDcgQEAKIAlzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSBtYXR0cjsKIAljb25zdCBjaGFyICptb2R1bGVfbmFtZTsKIAljb25zdCBjaGFyICp2ZXJzaW9uOwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKHNpemVvZih2b2lkICopKSkpOwogCiBzdHJ1Y3QgbW9kdWxlX2tvYmplY3QKIHsKQEAgLTM3Nyw3ICszNzcsNyBAQAogCSAgIGtlZXBpbmcgcG9pbnRlcnMgdG8gdGhpcyBzdHVmZiAqLwogCWNoYXIgKmFyZ3M7CiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCi0Jc3RydWN0IHRyYWNlcG9pbnQgKnRyYWNlcG9pbnRzOworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnRzX3B0cnM7CiAJdW5zaWduZWQgaW50IG51bV90cmFjZXBvaW50czsKICNlbmRpZgogI2lmZGVmIEhBVkVfSlVNUF9MQUJFTApAQCAtMzg5LDcgKzM4OSw3IEBACiAJdW5zaWduZWQgaW50IG51bV90cmFjZV9icHJpbnRrX2ZtdDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HCi0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICp0cmFjZV9ldmVudHM7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICoqdHJhY2VfZXZlbnRzOwogCXVuc2lnbmVkIGludCBudW1fdHJhY2VfZXZlbnRzOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oIGIvaW5jbHVkZS9saW51eC9tcm91dGUuaAppbmRleCAwZmE3YTNhLi5iMjFkNTY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKQEAgLTE1MCw2ICsxNTAsNyBAQAogZXh0ZXJuIGludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqLCBpbnQsIGNoYXIgX191c2VyICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgaW50IF9fdXNlciAqKTsKIGV4dGVybiBpbnQgaXBtcl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOworZXh0ZXJuIGludCBpcG1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBpcF9tcl9pbml0KHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKaW5kZXggNjA5MWFiNy4uOWQyZGViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKQEAgLTEzNiw2ICsxMzYsNyBAQAogZXh0ZXJuIGludCBpcDZfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKiwgaW50LCBjaGFyIF9fdXNlciAqLCBpbnQgX191c2VyICopOwogZXh0ZXJuIGludCBpcDZfbXJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IGlwNm1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50IGlwNm1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwogZXh0ZXJuIGludCBpcDZfbXJfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGlwNl9tcl9jbGVhbnVwKHZvaWQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzYWNsLmggYi9pbmNsdWRlL2xpbnV4L25mc2FjbC5oCmluZGV4IGYzMjFiNTcuLmZhYmNiMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNhY2wuaApAQCAtNTEsMTAgKzUxLDEwIEBACiAJcmV0dXJuIHc7CiB9CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQKK2V4dGVybiBpbnQKIG5mc2FjbF9lbmNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgZW5jb2RlX2VudHJpZXMsIGludCB0eXBlZmxhZyk7Ci1leHRlcm4gdW5zaWduZWQgaW50CitleHRlcm4gaW50CiBuZnNhY2xfZGVjb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgKmFjbGNudCwKIAkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICoqcGFjbCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaCBiL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaAppbmRleCAzMmZiODEyLi4xY2E2NDExMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaApAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wcmludGsuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAgCiAvKiBFYWNoIGVzY2FwZWQgZW50cnkgaXMgcHJlZml4ZWQgYnkgRVNDQVBFX0NPREUKQEAgLTE4NiwxMCArMTg4LDE3IEBACiBpbnQgb3Byb2ZpbGVfYWRkX2RhdGE2NChzdHJ1Y3Qgb3BfZW50cnkgKmVudHJ5LCB1NjQgdmFsKTsKIGludCBvcHJvZmlsZV93cml0ZV9jb21taXQoc3RydWN0IG9wX2VudHJ5ICplbnRyeSk7CiAKLSNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKyNpZmRlZiBDT05GSUdfSFdfUEVSRl9FVkVOVFMKIGludCBfX2luaXQgb3Byb2ZpbGVfcGVyZl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpOwogdm9pZCBvcHJvZmlsZV9wZXJmX2V4aXQodm9pZCk7CiBjaGFyICpvcF9uYW1lX2Zyb21fcGVyZl9pZCh2b2lkKTsKLSNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgb3Byb2ZpbGVfcGVyZl9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCit7CisJcHJfaW5mbygib3Byb2ZpbGU6IGhhcmR3YXJlIGNvdW50ZXJzIG5vdCBhdmFpbGFibGVcbiIpOworCXJldHVybiAtRU5PREVWOworfQorc3RhdGljIGlubGluZSB2b2lkIG9wcm9maWxlX3BlcmZfZXhpdCh2b2lkKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfSFdfUEVSRl9FVkVOVFMgKi8KIAogI2VuZGlmIC8qIE9QUk9GSUxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCBkZDljN2FiLi4yMTQxNWNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC00MzEsNiArNDMxLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVudHJ5OwogCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CiAJc3RydWN0IHdha2V1cF9zb3VyY2UJKndha2V1cDsKKyNlbHNlCisJdW5zaWduZWQgaW50CQlzaG91bGRfd2FrZXVwOjE7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogCXN0cnVjdCB0aW1lcl9saXN0CXN1c3BlbmRfdGltZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtX3dha2V1cC5oIGIvaW5jbHVkZS9saW51eC9wbV93YWtldXAuaAppbmRleCA5Y2ZmMDBkLi4wM2E2N2RiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtX3dha2V1cC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG1fd2FrZXVwLmgKQEAgLTEwOSwxMSArMTA5LDYgQEAKIAlyZXR1cm4gZGV2LT5wb3dlci5jYW5fd2FrZXVwOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZGV2aWNlX21heV93YWtldXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgd2FrZXVwX3NvdXJjZSAqd2FrZXVwX3NvdXJjZV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gTlVMTDsKQEAgLTEzNCwyNCArMTI5LDMyIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV93YWtldXBfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlkZXYtPnBvd2VyLnNob3VsZF93YWtldXAgPSB0cnVlOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2KQogeworCWRldi0+cG93ZXIuc2hvdWxkX3dha2V1cCA9IGZhbHNlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwlkZXYtPnBvd2VyLnNob3VsZF93YWtldXAgPSBlbmFibGU7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9pbml0X3dha2V1cChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgdmFsKQogewotCWRldi0+cG93ZXIuY2FuX3dha2V1cCA9IHZhbDsKLQlyZXR1cm4gdmFsID8gLUVJTlZBTCA6IDA7CisJZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShkZXYsIHZhbCk7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKGRldiwgdmFsKTsKKwlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW5saW5lIGludCBkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBkZXZpY2VfbWF5X3dha2V1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGRldi0+cG93ZXIuY2FuX3dha2V1cCAmJiBkZXYtPnBvd2VyLnNob3VsZF93YWtldXA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3BtX3N0YXlfYXdha2Uoc3RydWN0IHdha2V1cF9zb3VyY2UgKndzKSB7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaCBiL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgKaW5kZXggZDY4MjgzYS4uNTQyMTFjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCkBAIC03MSw2ICs3MSw3IEBACiAKIC8qIHBvc2l4X2FjbC5jICovCiAKK2V4dGVybiB2b2lkIHBvc2l4X2FjbF9pbml0KHN0cnVjdCBwb3NpeF9hY2wgKiwgaW50KTsKIGV4dGVybiBzdHJ1Y3QgcG9zaXhfYWNsICpwb3NpeF9hY2xfYWxsb2MoaW50LCBnZnBfdCk7CiBleHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqcG9zaXhfYWNsX2Nsb25lKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKiwgZ2ZwX3QpOwogZXh0ZXJuIGludCBwb3NpeF9hY2xfdmFsaWQoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRyYWNlLmggYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCmluZGV4IDA5MmEwNGYuLmExMTQ3ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaApAQCAtMTAyLDExICsxMDIsOCBAQAogCiBleHRlcm4gbG9uZyBhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsCiAJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1leHRlcm4gaW50IHB0cmFjZV90cmFjZW1lKHZvaWQpOwogZXh0ZXJuIGludCBwdHJhY2VfcmVhZGRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgc3JjLCBjaGFyIF9fdXNlciAqZHN0LCBpbnQgbGVuKTsKIGV4dGVybiBpbnQgcHRyYWNlX3dyaXRlZGF0YShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgY2hhciBfX3VzZXIgKnNyYywgdW5zaWduZWQgbG9uZyBkc3QsIGludCBsZW4pOwotZXh0ZXJuIGludCBwdHJhY2VfYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKLWV4dGVybiBpbnQgcHRyYWNlX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiB2b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIGV4dGVybiBpbnQgcHRyYWNlX2NoZWNrX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBraWxsKTsKIGV4dGVybiBpbnQgcHRyYWNlX3JlcXVlc3Qoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCmluZGV4IGZjYjk4ODQuLmE1OTMwY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKQEAgLTE4Miw2ICsxODIsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIHJlc19jb3VudGVyX2NoZWNrX21hcmdpbiAtIGNoZWNrIGlmIHRoZSBjb3VudGVyIGFsbG93cyBjaGFyZ2luZworICogQGNudDogdGhlIHJlc291cmNlIGNvdW50ZXIgdG8gY2hlY2sKKyAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyB0byBjaGVjayB0aGUgcmVtYWluaW5nIHNwYWNlIGFnYWluc3QKKyAqCisgKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBvbiB3aGV0aGVyIHRoZSBjb3VudGVyIGNhbiBiZSBjaGFyZ2VkCisgKiBAYnl0ZXMgb3Igd2hldGhlciB0aGlzIHdvdWxkIGV4Y2VlZCB0aGUgbGltaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCByZXNfY291bnRlcl9jaGVja19tYXJnaW4oc3RydWN0IHJlc19jb3VudGVyICpjbnQsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGJ5dGVzKQoreworCWJvb2wgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY250LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gY250LT5saW1pdCAtIGNudC0+dXNhZ2UgPj0gYnl0ZXM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY250LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGlubGluZSBib29sIHJlc19jb3VudGVyX2NoZWNrX3VuZGVyX3NvZnRfbGltaXQoc3RydWN0IHJlc19jb3VudGVyICpjbnQpCiB7CiAJYm9vbCByZXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jpb19yZWdzLmggYi9pbmNsdWRlL2xpbnV4L3Jpb19yZWdzLmgKaW5kZXggZDYzZGNiYS4uOTAyNmIzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaW9fcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmlvX3JlZ3MuaApAQCAtMTQsMTAgKzE0LDEyIEBACiAjZGVmaW5lIExJTlVYX1JJT19SRUdTX0gKIAogLyoKLSAqIEluIFJhcGlkSU8sIGVhY2ggZGV2aWNlIGhhcyBhIDJNQiBjb25maWd1cmF0aW9uIHNwYWNlIHRoYXQgaXMKKyAqIEluIFJhcGlkSU8sIGVhY2ggZGV2aWNlIGhhcyBhIDE2TUIgY29uZmlndXJhdGlvbiBzcGFjZSB0aGF0IGlzCiAgKiBhY2Nlc3NlZCB2aWEgbWFpbnRlbmFuY2UgdHJhbnNhY3Rpb25zLiAgUG9ydGlvbnMgb2YgY29uZmlndXJhdGlvbgogICogc3BhY2UgYXJlIHN0YW5kYXJkaXplZCBhbmQvb3IgcmVzZXJ2ZWQuCiAgKi8KKyNkZWZpbmUgUklPX01BSU5UX1NQQUNFX1NaCTB4MTAwMDAwMCAvKiAxNk1CIG9mIFJhcGlkSU8gbWFpbmVuYW5jZSBzcGFjZSAqLworCiAjZGVmaW5lIFJJT19ERVZfSURfQ0FSCQkweDAwCS8qIFtJXSBEZXZpY2UgSWRlbnRpdHkgQ0FSICovCiAjZGVmaW5lIFJJT19ERVZfSU5GT19DQVIJMHgwNAkvKiBbSV0gRGV2aWNlIEluZm9ybWF0aW9uIENBUiAqLwogI2RlZmluZSBSSU9fQVNNX0lEX0NBUgkJMHgwOAkvKiBbSV0gQXNzZW1ibHkgSWRlbnRpdHkgQ0FSICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0Yy5oIGIvaW5jbHVkZS9saW51eC9ydGMuaAppbmRleCBhMGI2MzlmLi44OWMzZTUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRjLmgKQEAgLTIwMyw2ICsyMDMsMTggQEAKIAlzdHJ1Y3QgaHJ0aW1lciBwaWVfdGltZXI7IC8qIHN1YiBzZWNvbmQgZXhwLCBzbyBuZWVkcyBocnRpbWVyICovCiAJaW50IHBpZV9lbmFibGVkOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBpcnF3b3JrOworCisKKyNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMCisJc3RydWN0IHdvcmtfc3RydWN0IHVpZV90YXNrOworCXN0cnVjdCB0aW1lcl9saXN0IHVpZV90aW1lcjsKKwkvKiBUaG9zZSBmaWVsZHMgYXJlIHByb3RlY3RlZCBieSBydGMtPmlycV9sb2NrICovCisJdW5zaWduZWQgaW50IG9sZHNlY3M7CisJdW5zaWduZWQgaW50IHVpZV9pcnFfYWN0aXZlOjE7CisJdW5zaWduZWQgaW50IHN0b3BfdWllX3BvbGxpbmc6MTsKKwl1bnNpZ25lZCBpbnQgdWllX3Rhc2tfYWN0aXZlOjE7CisJdW5zaWduZWQgaW50IHVpZV90aW1lcl9hY3RpdmU6MTsKKyNlbmRpZgogfTsKICNkZWZpbmUgdG9fcnRjX2RldmljZShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHJ0Y19kZXZpY2UsIGRldikKIApAQCAtMjM1LDcgKzI0NywxMCBAQAogCQkJCXN0cnVjdCBydGNfdGFzayAqdGFzaywgaW50IGZyZXEpOwogZXh0ZXJuIGludCBydGNfdXBkYXRlX2lycV9lbmFibGUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywgdW5zaWduZWQgaW50IGVuYWJsZWQpOwogZXh0ZXJuIGludCBydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCB1bnNpZ25lZCBpbnQgZW5hYmxlZCk7CitleHRlcm4gaW50IHJ0Y19kZXZfdXBkYXRlX2lycV9lbmFibGVfZW11bChzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLAorCQkJCQkJdW5zaWduZWQgaW50IGVuYWJsZWQpOwogCit2b2lkIHJ0Y19oYW5kbGVfbGVnYWN5X2lycShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBpbnQgbnVtLCBpbnQgbW9kZSk7CiB2b2lkIHJ0Y19haWVfdXBkYXRlX2lycSh2b2lkICpwcml2YXRlKTsKIHZvaWQgcnRjX3VpZV91cGRhdGVfaXJxKHZvaWQgKnByaXZhdGUpOwogZW51bSBocnRpbWVyX3Jlc3RhcnQgcnRjX3BpZV91cGRhdGVfaXJxKHN0cnVjdCBocnRpbWVyICp0aW1lcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggZDc0N2Y5NC4uNzc3ZDhhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTc0NCw3ICsxNzQ0LDcgQEAKICNkZWZpbmUgUEZfTUNFX0VBUkxZICAgIDB4MDgwMDAwMDAgICAgICAvKiBFYXJseSBraWxsIGZvciBtY2UgcHJvY2VzcyBwb2xpY3kgKi8KICNkZWZpbmUgUEZfTUVNUE9MSUNZCTB4MTAwMDAwMDAJLyogTm9uLWRlZmF1bHQgTlVNQSBtZW1wb2xpY3kgKi8KICNkZWZpbmUgUEZfTVVURVhfVEVTVEVSCTB4MjAwMDAwMDAJLyogVGhyZWFkIGJlbG9uZ3MgdG8gdGhlIHJ0IG11dGV4IHRlc3RlciAqLwotI2RlZmluZSBQRl9GUkVFWkVSX1NLSVAJMHg0MDAwMDAwMAkvKiBGcmVlemVyIHNob3VsZCBub3QgY291bnQgaXQgYXMgZnJlZXplYWJsZSAqLworI2RlZmluZSBQRl9GUkVFWkVSX1NLSVAJMHg0MDAwMDAwMAkvKiBGcmVlemVyIHNob3VsZCBub3QgY291bnQgaXQgYXMgZnJlZXphYmxlICovCiAjZGVmaW5lIFBGX0ZSRUVaRVJfTk9TSUcgMHg4MDAwMDAwMAkvKiBGcmVlemVyIHdvbid0IHNlbmQgc2lnbmFscyB0byBpdCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IGM2NDJiYjguLmIyYjdmOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTE2NjIsNyArMTY2Miw3IEBACiAJCSAgICBjb25zdCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJICAgIGNvbnN0IGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCiAJCSAgICBjb25zdCBrZXJuZWxfY2FwX3QgKnBlcm1pdHRlZCk7Ci1pbnQgc2VjdXJpdHlfY2FwYWJsZShpbnQgY2FwKTsKK2ludCBzZWN1cml0eV9jYXBhYmxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBpbnQgY2FwKTsKIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApOwogaW50IHNlY3VyaXR5X3JlYWxfY2FwYWJsZV9ub2F1ZGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY2FwKTsKIGludCBzZWN1cml0eV9zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBvcCk7CkBAIC0xODU2LDkgKzE4NTYsOSBAQAogCXJldHVybiBjYXBfY2Fwc2V0KG5ldywgb2xkLCBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBhYmxlKGludCBjYXApCitzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9jYXBhYmxlKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLCBpbnQgY2FwKQogewotCXJldHVybiBjYXBfY2FwYWJsZShjdXJyZW50LCBjdXJyZW50X2NyZWQoKSwgY2FwLCBTRUNVUklUWV9DQVBfQVVESVQpOworCXJldHVybiBjYXBfY2FwYWJsZShjdXJyZW50LCBjcmVkLCBjYXAsIFNFQ1VSSVRZX0NBUF9BVURJVCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3JlYWxfY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNhcCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaAppbmRleCBjNTBiNDU4Li4wODI4ODQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvYmNfeHBydC5oCkBAIC00NywxNCArNDcsNiBAQAogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpiY194cHJ0X3NpZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQotewotCWlmIChzdmNfaXNfYmFja2NoYW5uZWwocnFzdHApKQotCQlyZXR1cm4gKHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqKQotCQkJcnFzdHAtPnJxX3NlcnZlci0+c3ZfYmNfeHBydC0+eHB0X2JjX3NpZDsKLQlyZXR1cm4gTlVMTDsKLX0KLQogI2Vsc2UgLyogQ09ORklHX05GU19WNF8xICovCiBzdGF0aWMgaW5saW5lIGludCB4cHJ0X3NldHVwX2JhY2tjaGFubmVsKHN0cnVjdCBycGNfeHBydCAqeHBydCwKIAkJCQkJIHVuc2lnbmVkIGludCBtaW5fcmVxcykKQEAgLTY3LDExICs1OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpiY194cHJ0X3NpZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQotewotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgeHBydF9mcmVlX2JjX3JlcXVlc3Qoc3RydWN0IHJwY19ycXN0ICpyZXEpCiB7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAppbmRleCAwNTk4NzdiLi43YWQ5NzUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmgKQEAgLTc3LDcgKzc3LDYgQEAKIAlzaXplX3QJCQl4cHRfcmVtb3RlbGVuOwkvKiBsZW5ndGggb2YgYWRkcmVzcyAqLwogCXN0cnVjdCBycGNfd2FpdF9xdWV1ZQl4cHRfYmNfcGVuZGluZzsJLyogYmFja2NoYW5uZWwgd2FpdCBxdWV1ZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJeHB0X3VzZXJzOwkvKiBjYWxsYmFja3Mgb24gZnJlZSAqLwotCXZvaWQJCQkqeHB0X2JjX3NpZDsJLyogYmFjayBjaGFubmVsIHNlc3Npb24gSUQgKi8KIAogCXN0cnVjdCBuZXQJCSp4cHRfbmV0OwogCXN0cnVjdCBycGNfeHBydAkJKnhwdF9iY194cHJ0OwkvKiBORlN2NC4xIGJhY2tjaGFubmVsICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggMThjZDA2OC4uOTg2NjRkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtMTI1LDM5ICsxMjUsMzcgQEAKIGV4dGVybiBzdHJ1Y3QgdHJhY2VfZXZlbnRfZnVuY3Rpb25zIGV4aXRfc3lzY2FsbF9wcmludF9mdW5jczsKIAogI2RlZmluZSBTWVNDQUxMX1RSQUNFX0VOVEVSX0VWRU5UKHNuYW1lKQkJCQlcCi0Jc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhCQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKSBfX3N5c2NhbGxfbWV0YV8jI3NuYW1lOwkJXAorCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3N5c2NhbGxfbWV0YV8jI3NuYW1lOwkJXAogCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpCQkJXAogCSAgZXZlbnRfZW50ZXJfIyNzbmFtZSA9IHsJCQkJCVwKIAkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAic3lzX2VudGVyIiNzbmFtZSwJCVwKIAkJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3Nfc3lzY2FsbF9lbnRlciwJXAogCQkuZXZlbnQuZnVuY3MgICAgICAgICAgICA9ICZlbnRlcl9zeXNjYWxsX3ByaW50X2Z1bmNzLAlcCiAJCS5kYXRhCQkJPSAodm9pZCAqKSZfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLFwKIAl9OwkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKKwkgKl9fZXZlbnRfZW50ZXJfIyNzbmFtZSA9ICZldmVudF9lbnRlcl8jI3NuYW1lOwkJCVwKIAlfX1RSQUNFX0VWRU5UX0ZMQUdTKGVudGVyXyMjc25hbWUsIFRSQUNFX0VWRU5UX0ZMX0NBUF9BTlkpCiAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FWElUX0VWRU5UKHNuYW1lKQkJCQkJXAotCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YQkJCQkJXAotCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKIAlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKIAkgIGV2ZW50X2V4aXRfIyNzbmFtZSA9IHsJCQkJCVwKIAkJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAic3lzX2V4aXQiI3NuYW1lLAkJXAogCQkuY2xhc3MJCQk9ICZldmVudF9jbGFzc19zeXNjYWxsX2V4aXQsCVwKIAkJLmV2ZW50LmZ1bmNzCQk9ICZleGl0X3N5c2NhbGxfcHJpbnRfZnVuY3MsCVwKIAkJLmRhdGEJCQk9ICh2b2lkICopJl9fc3lzY2FsbF9tZXRhXyMjc25hbWUsXAogCX07CQkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpCQkJXAorCSpfX2V2ZW50X2V4aXRfIyNzbmFtZSA9ICZldmVudF9leGl0XyMjc25hbWU7CQkJXAogCV9fVFJBQ0VfRVZFTlRfRkxBR1MoZXhpdF8jI3NuYW1lLCBUUkFDRV9FVkVOVF9GTF9DQVBfQU5ZKQogCiAjZGVmaW5lIFNZU0NBTExfTUVUQURBVEEoc25hbWUsIG5iKQkJCQlcCiAJU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChzbmFtZSk7CQkJXAogCVNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChzbmFtZSk7CQkJXAogCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3VzZWQJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAogCSAgX19zeXNjYWxsX21ldGFfIyNzbmFtZSA9IHsJCQkJXAogCQkubmFtZSAJCT0gInN5cyIjc25hbWUsCQkJXAogCQkubmJfYXJncyAJPSBuYiwJCQkJXApAQCAtMTY2LDE0ICsxNjQsMTUgQEAKIAkJLmVudGVyX2V2ZW50CT0gJmV2ZW50X2VudGVyXyMjc25hbWUsCQlcCiAJCS5leGl0X2V2ZW50CT0gJmV2ZW50X2V4aXRfIyNzbmFtZSwJCVwKIAkJLmVudGVyX2ZpZWxkcwk9IExJU1RfSEVBRF9JTklUKF9fc3lzY2FsbF9tZXRhXyMjc25hbWUuZW50ZXJfZmllbGRzKSwgXAotCX07CisJfTsJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3VzZWQJCQlcCisJICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3N5c2NhbGxzX21ldGFkYXRhIikpKQlcCisJICpfX3Bfc3lzY2FsbF9tZXRhXyMjc25hbWUgPSAmX19zeXNjYWxsX21ldGFfIyNzbmFtZTsKIAogI2RlZmluZSBTWVNDQUxMX0RFRklORTAoc25hbWUpCQkJCQlcCiAJU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChfIyNzbmFtZSk7CQkJXAogCVNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChfIyNzbmFtZSk7CQkJXAogCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSBfX3VzZWQJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAogCSAgX19zeXNjYWxsX21ldGFfXyMjc25hbWUgPSB7CQkJCVwKIAkJLm5hbWUgCQk9ICJzeXNfIiNzbmFtZSwJCQlcCiAJCS5uYl9hcmdzIAk9IDAsCQkJCVwKQEAgLTE4MSw2ICsxODAsOSBAQAogCQkuZXhpdF9ldmVudAk9ICZldmVudF9leGl0X18jI3NuYW1lLAkJXAogCQkuZW50ZXJfZmllbGRzCT0gTElTVF9IRUFEX0lOSVQoX19zeXNjYWxsX21ldGFfXyMjc25hbWUuZW50ZXJfZmllbGRzKSwgXAogCX07CQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAorCSAqX19wX3N5c2NhbGxfbWV0YV8jI3NuYW1lID0gJl9fc3lzY2FsbF9tZXRhX18jI3NuYW1lOwlcCiAJYXNtbGlua2FnZSBsb25nIHN5c18jI3NuYW1lKHZvaWQpCiAjZWxzZQogI2RlZmluZSBTWVNDQUxMX0RFRklORTAobmFtZSkJICAgYXNtbGlua2FnZSBsb25nIHN5c18jI25hbWUodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKaW5kZXggODY1MTU1Ni4uZDNlYzg5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aGVybWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKQEAgLTE3Miw2ICsxNzIsMTQgQEAKIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICp0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKiwgdm9pZCAqLAogCQljb25zdCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgKik7CiB2b2lkIHRoZXJtYWxfY29vbGluZ19kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqKTsKKworI2lmZGVmIENPTkZJR19ORVQKIGV4dGVybiBpbnQgZ2VuZXJhdGVfbmV0bGlua19ldmVudCh1MzIgb3JpZywgZW51bSBldmVudHMgZXZlbnQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyYXRlX25ldGxpbmtfZXZlbnQodTMyIG9yaWcsIGVudW0gZXZlbnRzIGV2ZW50KQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX1RIRVJNQUxfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IGM2ODE0NjEuLjk3Yzg0YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0zMywxMiArMzMsNyBAQAogCXZvaWQgKCpyZWdmdW5jKSh2b2lkKTsKIAl2b2lkICgqdW5yZWdmdW5jKSh2b2lkKTsKIAlzdHJ1Y3QgdHJhY2Vwb2ludF9mdW5jIF9fcmN1ICpmdW5jczsKLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsJCS8qCi0JCQkJCSAqIEFsaWduZWQgb24gMzIgYnl0ZXMgYmVjYXVzZSBpdCBpcwotCQkJCQkgKiBnbG9iYWxseSB2aXNpYmxlIGFuZCBnY2MgaGFwcGlseQotCQkJCQkgKiBhbGlnbiB0aGVzZSBvbiB0aGUgc3RydWN0dXJlIHNpemUuCi0JCQkJCSAqIEtlZXAgaW4gc3luYyB3aXRoIHZtbGludXgubGRzLmguCi0JCQkJCSAqLworfTsKIAogLyoKICAqIENvbm5lY3QgYSBwcm9iZSB0byBhIHRyYWNlcG9pbnQuCkBAIC02MSwxNSArNTYsMTUgQEAKIAogc3RydWN0IHRyYWNlcG9pbnRfaXRlciB7CiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwotCXN0cnVjdCB0cmFjZXBvaW50ICp0cmFjZXBvaW50OworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnQ7CiB9OwogCiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfc3RhcnQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfbmV4dChzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKTsKIGV4dGVybiB2b2lkIHRyYWNlcG9pbnRfaXRlcl9zdG9wKHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwogZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF9pdGVyX3Jlc2V0KHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwotZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICoqdHJhY2Vwb2ludCwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sIHN0cnVjdCB0cmFjZXBvaW50ICplbmQpOworZXh0ZXJuIGludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpOwogCiAvKgogICogdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gdGhlIGxhc3QgdHJhY2Vwb2ludApAQCAtODQsMTEgKzc5LDEzIEBACiAjZGVmaW5lIFBBUkFNUyhhcmdzLi4uKSBhcmdzCiAKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLWV4dGVybiB2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKTsKK2V4dGVybgordm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICpiZWdpbiwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sCi0Jc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sCisJc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKQogeyB9CiAjZW5kaWYgLyogQ09ORklHX1RSQUNFUE9JTlRTICovCiAKQEAgLTE3NCwxMiArMTcxLDIwIEBACiAJewkJCQkJCQkJXAogCX0KIAorLyoKKyAqIFdlIGhhdmUgbm8gZ3VhcmFudGVlIHRoYXQgZ2NjIGFuZCB0aGUgbGlua2VyIHdvbid0IHVwLWFsaWduIHRoZSB0cmFjZXBvaW50CisgKiBzdHJ1Y3R1cmVzLCBzbyB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbgorICogb24gdGhlIHRyYWNlcG9pbnRzLgorICovCiAjZGVmaW5lIERFRklORV9UUkFDRV9GTihuYW1lLCByZWcsIHVucmVnKQkJCQlcCiAJc3RhdGljIGNvbnN0IGNoYXIgX190cHN0cnRhYl8jI25hbWVbXQkJCQlcCiAJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50c19zdHJpbmdzIikpKSA9ICNuYW1lOwlcCiAJc3RydWN0IHRyYWNlcG9pbnQgX190cmFjZXBvaW50XyMjbmFtZQkJCQlcCi0JX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50cyIpLCBhbGlnbmVkKDMyKSkpID0JXAotCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH0KKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzIikpKSA9CQkJXAorCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH07CQlcCisJc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgX190cmFjZXBvaW50X3B0cl8jI25hbWUgX191c2VkCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3B0cnMiKSkpID0JCVwKKwkJJl9fdHJhY2Vwb2ludF8jI25hbWU7CiAKICNkZWZpbmUgREVGSU5FX1RSQUNFKG5hbWUpCQkJCQkJXAogCURFRklORV9UUkFDRV9GTihuYW1lLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oIGIvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKaW5kZXggNWU4NmRjNy4uODFhOTI3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY2RjLmgKQEAgLTg5LDcgKzg5LDcgQEAKIAogI2RlZmluZSBVU0JfQ0RDX0NPTU1fRkVBVFVSRQkweDAxCiAjZGVmaW5lIFVTQl9DRENfQ0FQX0xJTkUJMHgwMgotI2RlZmluZSBVU0JfQ0RDX0NBUF9CUksJMHgwNAorI2RlZmluZSBVU0JfQ0RDX0NBUF9CUksJCTB4MDQKICNkZWZpbmUgVVNCX0NEQ19DQVBfTk9USUZZCTB4MDgKIAogLyogIlVuaW9uIEZ1bmN0aW9uYWwgRGVzY3JpcHRvciIgZnJvbSBDREMgc3BlYyA1LjIuMy44ICovCkBAIC0yNzEsNiArMjcxLDExIEBACiAJX19sZTE2CXdMZW5ndGg7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHVzYl9jZGNfc3BlZWRfY2hhbmdlIHsKKwlfX2xlMzIJRExCaXRSUmF0ZTsJLyogY29udGFpbnMgdGhlIGRvd25saW5rIGJpdCByYXRlIChJTiBwaXBlKSAqLworCV9fbGUzMglVTEJpdFJhdGU7CS8qIGNvbnRhaW5zIHRoZSB1cGxpbmsgYml0IHJhdGUgKE9VVCBwaXBlKSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCkBAIC0yOTIsNyArMjk3LDcgQEAKIAlfX2xlMTYJd05kcE91dERpdmlzb3I7CiAJX19sZTE2CXdOZHBPdXRQYXlsb2FkUmVtYWluZGVyOwogCV9fbGUxNgl3TmRwT3V0QWxpZ25tZW50OwotCV9fbGUxNgl3UGFkZGluZzI7CisJX19sZTE2CXdOdGJPdXRNYXhEYXRhZ3JhbXM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyoKQEAgLTMwNyw3ICszMTIsNyBAQAogCV9fbGUxNgl3SGVhZGVyTGVuZ3RoOwogCV9fbGUxNgl3U2VxdWVuY2U7CiAJX19sZTE2CXdCbG9ja0xlbmd0aDsKLQlfX2xlMTYJd0ZwSW5kZXg7CisJX19sZTE2CXdOZHBJbmRleDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgdXNiX2NkY19uY21fbnRoMzIgewpAQCAtMzE1LDcgKzMyMCw3IEBACiAJX19sZTE2CXdIZWFkZXJMZW5ndGg7CiAJX19sZTE2CXdTZXF1ZW5jZTsKIAlfX2xlMzIJZHdCbG9ja0xlbmd0aDsKLQlfX2xlMzIJZHdGcEluZGV4OworCV9fbGUzMglkd05kcEluZGV4OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qCkBAIC0zMzcsNyArMzQyLDcgQEAKIHN0cnVjdCB1c2JfY2RjX25jbV9uZHAxNiB7CiAJX19sZTMyCWR3U2lnbmF0dXJlOwogCV9fbGUxNgl3TGVuZ3RoOwotCV9fbGUxNgl3TmV4dEZwSW5kZXg7CisJX19sZTE2CXdOZXh0TmRwSW5kZXg7CiAJc3RydWN0CXVzYl9jZGNfbmNtX2RwZTE2IGRwZTE2WzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTM3NSw2ICszODAsNyBAQAogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX0VOQ0FQX0NPTU1BTkQJCQkoMSA8PCAyKQogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX01BWF9EQVRBR1JBTV9TSVpFCQkoMSA8PCAzKQogI2RlZmluZSBVU0JfQ0RDX05DTV9OQ0FQX0NSQ19NT0RFCQkJKDEgPDwgNCkKKyNkZWZpbmUJVVNCX0NEQ19OQ01fTkNBUF9OVEJfSU5QVVRfU0laRQkJCSgxIDw8IDUpCiAKIC8qIENEQyBOQ00gc3ViY2xhc3MgVGFibGUgNi0zOiBOVEIgUGFyYW1ldGVyIFN0cnVjdHVyZSAqLwogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEIxNl9TVVBQT1JURUQJCQkoMSA8PCAwKQpAQCAtMzkyLDYgKzM5OCwxMyBAQAogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkUJCQkyMDQ4CiAjZGVmaW5lIFVTQl9DRENfTkNNX05UQl9NSU5fT1VUX1NJWkUJCQkyMDQ4CiAKKy8qIE5UQiBJbnB1dCBTaXplIFN0cnVjdHVyZSAqLworc3RydWN0IHVzYl9jZGNfbmNtX25kcF9pbnB1dF9zaXplIHsKKwlfX2xlMzIJZHdOdGJJbk1heFNpemU7CisJX19sZTE2CXdOdGJJbk1heERhdGFncmFtczsKKwlfX2xlMTYJd1Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIENEQyBOQ00gc3ViY2xhc3MgNi4yLjExIFNldENyY01vZGUgKi8KICNkZWZpbmUgVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRAkJCTB4MDAKICNkZWZpbmUgVVNCX0NEQ19OQ01fQ1JDX0FQUEVOREVECQkJMHgwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAppbmRleCBkZDZlZTQ5Li5hODU0ZmU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaApAQCAtMTEyLDYgKzExMiw3IEBACiAJLyogRmxhZ3MgdGhhdCBnZXQgc2V0IG9ubHkgZHVyaW5nIEhDRCByZWdpc3RyYXRpb24gb3IgcmVtb3ZhbC4gKi8KIAl1bnNpZ25lZAkJcmhfcmVnaXN0ZXJlZDoxOy8qIGlzIHJvb3QgaHViIHJlZ2lzdGVyZWQ/ICovCiAJdW5zaWduZWQJCXJoX3BvbGxhYmxlOjE7CS8qIG1heSB3ZSBwb2xsIHRoZSByb290IGh1Yj8gKi8KKwl1bnNpZ25lZAkJbXNpeF9lbmFibGVkOjE7CS8qIGRyaXZlciBoYXMgTVNJLVggZW5hYmxlZD8gKi8KIAogCS8qIFRoZSBuZXh0IGZsYWcgaXMgYSBzdG9wZ2FwLCB0byBiZSByZW1vdmVkIHdoZW4gYWxsIHRoZSBIQ0RzCiAJICogc3VwcG9ydCB0aGUgbmV3IHJvb3QtaHViIHBvbGxpbmcgbWVjaGFuaXNtLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiX2h3LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaAppbmRleCBiOTJlMTczLi43ZDFiYWJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9tc21faHN1c2JfaHcuaApAQCAtMTYsMTIgKzE2LDggQEAKICNpZm5kZWYgX19MSU5VWF9VU0JfR0FER0VUX01TTTcyS19VRENfSF9fCiAjZGVmaW5lIF9fTElOVVhfVVNCX0dBREdFVF9NU003MktfVURDX0hfXwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVNNN1gwMEEKLSNkZWZpbmUgVVNCX1NCVVNDRkcgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDA5MCkKLSNlbHNlCiAjZGVmaW5lIFVTQl9BSEJCVVJTVCAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTApCiAjZGVmaW5lIFVTQl9BSEJNT0RFICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTgpCi0jZW5kaWYKICNkZWZpbmUgVVNCX0NBUExFTkdUSCAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDEwMCkgLyogOCBiaXQgKi8KIAogI2RlZmluZSBVU0JfVVNCQ01EICAgICAgICAgICAoTVNNX1VTQl9CQVNFICsgMHgwMTQwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAppbmRleCAxNmQ2ODJmLi5jOTA0OTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaApAQCAtMzQ3LDYgKzM0Nyw5IEBACiBleHRlcm4gaW50IHVzYl9zZXJpYWxfaGFuZGxlX3N5c3JxX2NoYXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQkJdW5zaWduZWQgaW50IGNoKTsKIGV4dGVybiBpbnQgdXNiX3NlcmlhbF9oYW5kbGVfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCB1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnVzYl9wb3J0LAorCQkJCQkgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkJIHVuc2lnbmVkIGludCBzdGF0dXMpOwogCiAKIGV4dGVybiBpbnQgdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyICpkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCmluZGV4IGE4NTA2NGQuLmU0ZDMzMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKQEAgLTcsNyArNyw4IEBACiAgKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KICAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuCiAgKgotICogQ29weXJpZ2h0IChDKSBSZWQgSGF0LCBJbmMuLCAyMDA5LCAyMDEwCisgKiBDb3B5cmlnaHQgKEMpIFJlZCBIYXQsIEluYy4sIDIwMDksIDIwMTAsIDIwMTEKKyAqIENvcHlyaWdodCAoQykgQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4sIDIwMDksIDIwMTAsIDIwMTEKICAqLwogCiAvKiBGZWF0dXJlIGJpdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDFhYzExNTguLmY3OTk4YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjUwLDcgKzI1MCw3IEBACiBlbnVtIHsKIAlXUV9OT05fUkVFTlRSQU5UCT0gMSA8PCAwLCAvKiBndWFyYW50ZWUgbm9uLXJlZW50cmFuY2UgKi8KIAlXUV9VTkJPVU5ECQk9IDEgPDwgMSwgLyogbm90IGJvdW5kIHRvIGFueSBjcHUgKi8KLQlXUV9GUkVFWkVBQkxFCQk9IDEgPDwgMiwgLyogZnJlZXplIGR1cmluZyBzdXNwZW5kICovCisJV1FfRlJFRVpBQkxFCQk9IDEgPDwgMiwgLyogZnJlZXplIGR1cmluZyBzdXNwZW5kICovCiAJV1FfTUVNX1JFQ0xBSU0JCT0gMSA8PCAzLCAvKiBtYXkgYmUgdXNlZCBmb3IgbWVtb3J5IHJlY2xhaW0gKi8KIAlXUV9ISUdIUFJJCQk9IDEgPDwgNCwgLyogaGlnaCBwcmlvcml0eSAqLwogCVdRX0NQVV9JTlRFTlNJVkUJPSAxIDw8IDUsIC8qIGNwdSBpbnN0ZW5zaXZlIHdvcmtxdWV1ZSAqLwpAQCAtMzE4LDcgKzMxOCw3IEBACiAvKioKICAqIGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlIC0gYWxsb2NhdGUgYW4gb3JkZXJlZCB3b3JrcXVldWUKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSB3b3JrcXVldWUKLSAqIEBmbGFnczogV1FfKiBmbGFncyAob25seSBXUV9GUkVFWkVBQkxFIGFuZCBXUV9NRU1fUkVDTEFJTSBhcmUgbWVhbmluZ2Z1bCkKKyAqIEBmbGFnczogV1FfKiBmbGFncyAob25seSBXUV9GUkVFWkFCTEUgYW5kIFdRX01FTV9SRUNMQUlNIGFyZSBtZWFuaW5nZnVsKQogICoKICAqIEFsbG9jYXRlIGFuIG9yZGVyZWQgd29ya3F1ZXVlLiAgQW4gb3JkZXJlZCB3b3JrcXVldWUgZXhlY3V0ZXMgYXQKICAqIG1vc3Qgb25lIHdvcmsgaXRlbSBhdCBhbnkgZ2l2ZW4gdGltZSBpbiB0aGUgcXVldWVkIG9yZGVyLiAgVGhleSBhcmUKQEAgLTMzNSw4ICszMzUsOCBAQAogCiAjZGVmaW5lIGNyZWF0ZV93b3JrcXVldWUobmFtZSkJCQkJCVwKIAlhbGxvY193b3JrcXVldWUoKG5hbWUpLCBXUV9NRU1fUkVDTEFJTSwgMSkKLSNkZWZpbmUgY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKG5hbWUpCQkJXAotCWFsbG9jX3dvcmtxdWV1ZSgobmFtZSksIFdRX0ZSRUVaRUFCTEUgfCBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDEpCisjZGVmaW5lIGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKG5hbWUpCQkJXAorCWFsbG9jX3dvcmtxdWV1ZSgobmFtZSksIFdRX0ZSRUVaQUJMRSB8IFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMSkKICNkZWZpbmUgY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUobmFtZSkJCQlcCiAJYWxsb2Nfd29ya3F1ZXVlKChuYW1lKSwgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAxKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IGEyOWZlYjAuLmQyY2Y4ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC0xODQsNiArMTg0LDcgQEAKIAlfX3UzMgkJIGxpbmtfbW9kZTsKIAlfX3U4ICAgICAgICAgICAgIGF1dGhfdHlwZTsKIAlfX3U4ICAgICAgICAgICAgIHNlY19sZXZlbDsKKwlfX3U4CQkgcGVuZGluZ19zZWNfbGV2ZWw7CiAJX191OCAgICAgICAgICAgICBwb3dlcl9zYXZlOwogCV9fdTE2ICAgICAgICAgICAgZGlzY190aW1lb3V0OwogCXVuc2lnbmVkIGxvbmcJIHBlbmQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCmluZGV4IDhhNjRiODEuLmI0YzdjMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCkBAIC0xOTUsNyArMTk1LDggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGdlbmxtc2dfY2FuY2VsKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcikKIHsKLQlubG1zZ19jYW5jZWwoc2tiLCBoZHIgLSBHRU5MX0hEUkxFTiAtIE5MTVNHX0hEUkxFTik7CisJaWYgKGhkcikKKwkJbmxtc2dfY2FuY2VsKHNrYiwgaGRyIC0gR0VOTF9IRFJMRU4gLSBOTE1TR19IRFJMRU4pOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCA0YTNjZDJjLi45NmU1MGUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC04OSw2ICs4OSwxOCBAQAogI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfR0xPQkFMCQkweDBlCiAKIC8qCisgKglBZGRyIGZsYWdzCisgKi8KKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1RSQU5TSUVOVChhKQlcCisJKChhKS0+czZfYWRkclsxXSAmIDB4MTApCisjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1BSRUZJWChhKQlcCisJKChhKS0+czZfYWRkclsxXSAmIDB4MjApCisjZGVmaW5lIElQVjZfQUREUl9NQ19GTEFHX1JFTkRFWlZPVVMoYSkJXAorCSgoYSktPnM2X2FkZHJbMV0gJiAweDQwKQorI2VuZGlmCisKKy8qCiAgKglmcmFnbWVudGF0aW9uIGhlYWRlcgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oCmluZGV4IDk2YmE1ZjcuLjM0OWNlZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaApAQCAtNzcsOSArNzcsNiBAQAogCWlmIChlID09IE5VTEwpCiAJCXJldHVybjsKIAotCWlmICghKGUtPmN0bWFzayAmICgxIDw8IGV2ZW50KSkpCi0JCXJldHVybjsKLQogCXNldF9iaXQoZXZlbnQsICZlLT5jYWNoZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmgKaW5kZXggY2Q4NWIzYi4uZTUwNTM1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmgKQEAgLTIwMSwxOCArMjAxLDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQKLW5mX3Rwcm94eV9wdXRfc29jayhzdHJ1Y3Qgc29jayAqc2spCi17Ci0JLyogVElNRV9XQUlUIGluZXQgc29ja2V0cyBoYXZlIHRvIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgKi8KLQlpZiAoKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgJiYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSkKLQkJaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKLQllbHNlCi0JCXNvY2tfcHV0KHNrKTsKLX0KLQogLyogYXNzaWduIGEgc29ja2V0IHRvIHRoZSBza2IgLS0gY29uc3VtZXMgc2sgKi8KLWludAordm9pZAogbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzayk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggZTllZWU5OS4uMDRmODU1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC0xOTksNyArMTk5LDcgQEAKIAogc3RydWN0IHFkaXNjX3NrYl9jYiB7CiAJdW5zaWduZWQgaW50CQlwa3RfbGVuOwotCWNoYXIJCQlkYXRhW107CisJbG9uZwkJCWRhdGFbXTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHFkaXNjX3FsZW4oc3RydWN0IFFkaXNjICpxKQpAQCAtNDQ1LDcgKzQ0NSw2IEBACiB7CiAJX19za2JfcXVldWVfdGFpbChsaXN0LCBza2IpOwogCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiB9CkBAIC00NjAsOCArNDU5LDEwIEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCk7CiAKLQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkKKwlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkgewogCQlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IHFkaXNjX3BrdF9sZW4oc2tiKTsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CisJfQogCiAJcmV0dXJuIHNrYjsKIH0KQEAgLTQ3NCwxMCArNDc1LDExIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3FkaXNjX3F1ZXVlX2Ryb3BfaGVhZChzdHJ1Y3QgUWRpc2MgKnNjaCwKIAkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19xZGlzY19kZXF1ZXVlX2hlYWQoc2NoLCBsaXN0KTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZShsaXN0KTsKIAogCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7CiAJCXVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7CisJCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gbGVuOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIGxlbjsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggZDg4NGQyNi4uYmMxY2Y3ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTc1Myw2ICs3NTMsOCBAQAogCQkJCQlpbnQgbGV2ZWwsCiAJCQkJCWludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLAogCQkJCQlpbnQgX191c2VyICpvcHRpb24pOworCWludAkJCSgqY29tcGF0X2lvY3RsKShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKICNlbmRpZgogCWludAkJCSgqc2VuZG1zZykoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9kcy5oIGIvaW5jbHVkZS9wY21jaWEvZHMuaAppbmRleCA4NDc5YjY2Li4zZmQ1MDY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9kcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKQEAgLTI2MSw2ICsyNjEsNyBAQAogI2RlZmluZSBDT05GX0VOQUJMRV9FU1IgICAgICAgICAweDAwMDgKICNkZWZpbmUgQ09ORl9FTkFCTEVfSU9DQVJECTB4MDAxMCAvKiBhdXRvLWVuYWJsZWQgaWYgSU8gcmVzb3VyY2VzIG9yIElSUQogCQkJCQkqIChDT05GX0VOQUJMRV9JUlEpIGluIHVzZSAqLworI2RlZmluZSBDT05GX0VOQUJMRV9aVkNBUkQJMHgwMDIwCiAKIC8qIGZsYWdzIHVzZWQgYnkgcGNtY2lhX2xvb3BfY29uZmlnKCkgYXV0b2NvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgQ09ORl9BVVRPX0NIRUNLX1ZDQwkweDAxMDAgLyogY2hlY2sgZm9yIG1hdGNoaW5nIFZjYz8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IDY0OGQyMzMuLmI3NmQ0MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtOSw2ICs5LDcgQEAKICNkZWZpbmUgX1NDU0lfU0NTSV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKIHN0cnVjdCBzY3NpX2NtbmQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvd204OTAzLmggYi9pbmNsdWRlL3NvdW5kL3dtODkwMy5oCmluZGV4IGI0YTBkYjIzLi4xZWVlYmQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3dtODkwMy5oCisrKyBiL2luY2x1ZGUvc291bmQvd204OTAzLmgKQEAgLTE3LDEzICsxNyw5IEBACiAvKgogICogUjYgKDB4MDYpIC0gTWljIEJpYXMgQ29udHJvbCAwCiAgKi8KLSNkZWZpbmUgV004OTAzX01JQ0RFVF9IWVNUX0VOQSAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlDREVUX0hZU1RfRU5BICovCi0jZGVmaW5lIFdNODkwM19NSUNERVRfSFlTVF9FTkFfTUFTSyAgICAgICAgICAgICAweDAwODAgIC8qIE1JQ0RFVF9IWVNUX0VOQSAqLwotI2RlZmluZSBXTTg5MDNfTUlDREVUX0hZU1RfRU5BX1NISUZUICAgICAgICAgICAgICAgICA3ICAvKiBNSUNERVRfSFlTVF9FTkEgKi8KLSNkZWZpbmUgV004OTAzX01JQ0RFVF9IWVNUX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogTUlDREVUX0hZU1RfRU5BICovCi0jZGVmaW5lIFdNODkwM19NSUNERVRfVEhSX01BU0sgICAgICAgICAgICAgICAgICAweDAwNzAgIC8qIE1JQ0RFVF9USFIgLSBbNjo0XSAqLwotI2RlZmluZSBXTTg5MDNfTUlDREVUX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUNERVRfVEhSIC0gWzY6NF0gKi8KLSNkZWZpbmUgV004OTAzX01JQ0RFVF9USFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMyAgLyogTUlDREVUX1RIUiAtIFs2OjRdICovCisjZGVmaW5lIFdNODkwM19NSUNERVRfVEhSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMzAgIC8qIE1JQ0RFVF9USFIgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5MDNfTUlDREVUX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUNERVRfVEhSIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTAzX01JQ0RFVF9USFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMiAgLyogTUlDREVUX1RIUiAtIFs1OjRdICovCiAjZGVmaW5lIFdNODkwM19NSUNTSE9SVF9USFJfTUFTSyAgICAgICAgICAgICAgICAweDAwMEMgIC8qIE1JQ1NIT1JUX1RIUiAtIFszOjJdICovCiAjZGVmaW5lIFdNODkwM19NSUNTSE9SVF9USFJfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQ1NIT1JUX1RIUiAtIFszOjJdICovCiAjZGVmaW5lIFdNODkwM19NSUNTSE9SVF9USFJfV0lEVEggICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQ1NIT1JUX1RIUiAtIFszOjJdICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmggYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmgKaW5kZXggMDdmZGZiNi4uMDgyOGI2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oCisrKyBiL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaApAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgotI2luY2x1ZGUgInRhcmdldF9jb3JlX21pYi5oIgogCiAjZGVmaW5lIFRBUkdFVF9DT1JFX01PRF9WRVJTSU9OCQkidjQuMC4wLXJjNiIKICNkZWZpbmUgU0hVVERPV05fU0lHUwkoc2lnbWFzayhTSUdLSUxMKXxzaWdtYXNrKFNJR0lOVCl8c2lnbWFzayhTSUdBQlJUKSkKQEAgLTE5NSw2ICsxOTQsMjEgQEAKIAlTQU1fVEFTS19BVFRSX0VNVUxBVEVECiB9IHQxMF90YXNrX2F0dHJfaW5kZXhfdDsKIAorLyoKKyAqIFVzZWQgZm9yIHRhcmdldCBTQ1NJIHN0YXRpc3RpY3MKKyAqLwordHlwZWRlZiBlbnVtIHsKKwlTQ1NJX0lOU1RfSU5ERVgsCisJU0NTSV9ERVZJQ0VfSU5ERVgsCisJU0NTSV9BVVRIX0lOVFJfSU5ERVgsCisJU0NTSV9JTkRFWF9UWVBFX01BWAorfSBzY3NpX2luZGV4X3Q7CisKK3N0cnVjdCBzY3NpX2luZGV4X3RhYmxlIHsKKwlzcGlubG9ja190CWxvY2s7CisJdTMyCQlzY3NpX21pYl9pbmRleFtTQ1NJX0lOREVYX1RZUEVfTUFYXTsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCiBzdHJ1Y3Qgc2VfY21kOwogCiBzdHJ1Y3QgdDEwX2FsdWEgewpAQCAtNTc4LDggKzU5Miw2IEBACiAJc3BpbmxvY2tfdAkJc3RhdHNfbG9jazsKIAkvKiBVc2VkIGZvciBQUiBTUEVDX0lfUFQ9MSBhbmQgUkVHSVNURVJfQU5EX01PVkUgKi8KIAlhdG9taWNfdAkJYWNsX3ByX3JlZl9jb3VudDsKLQkvKiBVc2VkIGZvciBNSUIgYWNjZXNzICovCi0JYXRvbWljX3QJCW1pYl9yZWZfY291bnQ7CiAJc3RydWN0IHNlX2Rldl9lbnRyeQkqZGV2aWNlX2xpc3Q7CiAJc3RydWN0IHNlX3Nlc3Npb24JKm5hY2xfc2VzczsKIAlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGc7CkBAIC01OTUsOCArNjA3LDYgQEAKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiBzdHJ1Y3Qgc2Vfc2Vzc2lvbiB7Ci0JLyogVXNlZCBmb3IgTUlCIGFjY2VzcyAqLwotCWF0b21pY190CQltaWJfcmVmX2NvdW50OwogCXU2NAkJCXNlc3NfYmluX2lzaWQ7CiAJc3RydWN0IHNlX25vZGVfYWNsCSpzZV9ub2RlX2FjbDsKIAlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGc7CkBAIC04MDYsNyArODE2LDYgQEAKIAkvKiBWaXJ0dWFsIGlTQ1NJIGRldmljZXMgYXR0YWNoZWQuICovCiAJdTMyCQkJZGV2X2NvdW50OwogCXUzMgkJCWhiYV9pbmRleDsKLQlhdG9taWNfdAkJZGV2X21pYl9hY2Nlc3NfY291bnQ7CiAJYXRvbWljX3QJCWxvYWRfYmFsYW5jZV9xdWV1ZTsKIAlhdG9taWNfdAkJbGVmdF9xdWV1ZV9kZXB0aDsKIAkvKiBNYXhpbXVtIHF1ZXVlIGRlcHRoIHRoZSBIQkEgY2FuIGhhbmRsZS4gKi8KQEAgLTg0NSw2ICs4NTQsMTIgQEAKIAogI2RlZmluZSBTRV9MVU4oYykJCSgoc3RydWN0IHNlX2x1biAqKShjKS0+c2VfbHVuKQogCitzdHJ1Y3Qgc2NzaV9wb3J0X3N0YXRzIHsKKyAgICAgICB1NjQgICAgIGNtZF9wZHVzOworICAgICAgIHU2NCAgICAgdHhfZGF0YV9vY3RldHM7CisgICAgICAgdTY0ICAgICByeF9kYXRhX29jdGV0czsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCiBzdHJ1Y3Qgc2VfcG9ydCB7CiAJLyogUkVMQVRJVkUgVEFSR0VUIFBPUlQgSURFTlRJRkVSICovCiAJdTE2CQlzZXBfcnRwaTsKQEAgLTg2Nyw2ICs4ODIsNyBAQAogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIHN0cnVjdCBzZV90cGdfbnAgeworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnRwZ19ucF9wYXJlbnQ7CiAJc3RydWN0IGNvbmZpZ19ncm91cAl0cGdfbnBfZ3JvdXA7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmggYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaAppbmRleCA2NmY0NGU1Li4yNDY5NDA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaAorKysgYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaApAQCAtMTExLDYgKzExMSw4IEBACiAKIGV4dGVybiBpbnQgaW5pdF9zZV9nbG9iYWwodm9pZCk7CiBleHRlcm4gdm9pZCByZWxlYXNlX3NlX2dsb2JhbCh2b2lkKTsKK2V4dGVybiB2b2lkIGluaXRfc2NzaV9pbmRleF90YWJsZSh2b2lkKTsKK2V4dGVybiB1MzIgc2NzaV9nZXRfbmV3X2luZGV4KHNjc2lfaW5kZXhfdCk7CiBleHRlcm4gdm9pZCB0cmFuc3BvcnRfaW5pdF9xdWV1ZV9vYmooc3RydWN0IHNlX3F1ZXVlX29iaiAqKTsKIGV4dGVybiBpbnQgdHJhbnNwb3J0X3N1YnN5c3RlbV9jaGVja19pbml0KHZvaWQpOwogZXh0ZXJuIGludCB0cmFuc3BvcnRfc3Vic3lzdGVtX3JlZ2lzdGVyKHN0cnVjdCBzZV9zdWJzeXN0ZW1fYXBpICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKaW5kZXggYWJhNDIxZC4uNzhmMThhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCkBAIC0zMSw3ICszMSw3IEBACiAJCQkJCTAgOiBibGtfcnFfc2VjdG9ycyhycSk7CiAJCV9fZW50cnktPmVycm9ycyAgICA9IHJxLT5lcnJvcnM7CiAKLQkJYmxrX2ZpbGxfcndic19ycShfX2VudHJ5LT5yd2JzLCBycSk7CisJCWJsa19maWxsX3J3YnMoX19lbnRyeS0+cndicywgcnEtPmNtZF9mbGFncywgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCWJsa19kdW1wX2NtZChfX2dldF9zdHIoY21kKSwgcnEpOwogCSksCiAKQEAgLTExOCw3ICsxMTgsNyBAQAogCQlfX2VudHJ5LT5ieXRlcyAgICAgPSAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSA/CiAJCQkJCWJsa19ycV9ieXRlcyhycSkgOiAwOwogCi0JCWJsa19maWxsX3J3YnNfcnEoX19lbnRyeS0+cndicywgcnEpOworCQlibGtfZmlsbF9yd2JzKF9fZW50cnktPnJ3YnMsIHJxLT5jbWRfZmxhZ3MsIGJsa19ycV9ieXRlcyhycSkpOwogCQlibGtfZHVtcF9jbWQoX19nZXRfc3RyKGNtZCksIHJxKTsKIAkJbWVtY3B5KF9fZW50cnktPmNvbW0sIGN1cnJlbnQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOwogCSksCkBAIC01NjMsNyArNTYzLDcgQEAKIAkJX19lbnRyeS0+bnJfc2VjdG9yCT0gYmxrX3JxX3NlY3RvcnMocnEpOwogCQlfX2VudHJ5LT5vbGRfZGV2CT0gZGV2OwogCQlfX2VudHJ5LT5vbGRfc2VjdG9yCT0gZnJvbTsKLQkJYmxrX2ZpbGxfcndic19ycShfX2VudHJ5LT5yd2JzLCBycSk7CisJCWJsa19maWxsX3J3YnMoX19lbnRyeS0+cndicywgcnEtPmNtZF9mbGFncywgYmxrX3JxX2J5dGVzKHJxKSk7CiAJKSwKIAogCVRQX3ByaW50aygiJWQsJWQgJXMgJWxsdSArICV1IDwtICglZCwlZCkgJWxsdSIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCBlMTY2MTBjLi4zZTY4MzY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKQEAgLTQ0NiwxNCArNDQ2LDE2IEBACiAgKgkucmVnCQkJPSBmdHJhY2VfZXZlbnRfcmVnLAogICogfTsKICAqCi0gKiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAotICogX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQotICogX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XzxjYWxsPiA9IHsKKyAqIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfPGNhbGw+ID0gewogICoJLm5hbWUJCQk9ICI8Y2FsbD4iLAogICoJLmNsYXNzCQkJPSBldmVudF9jbGFzc188dGVtcGxhdGU+LAogICoJLmV2ZW50CQkJPSAmZnRyYWNlX2V2ZW50X3R5cGVfPGNhbGw+LAogICoJLnByaW50X2ZtdAkJPSBwcmludF9mbXRfPGNhbGw+LAogICogfTsKKyAqIC8vIGl0cyBvbmx5IHNhZmUgdG8gdXNlIHBvaW50ZXJzIHdoZW4gZG9pbmcgbGlua2VyIHRyaWNrcyB0bworICogLy8gY3JlYXRlIGFuIGFycmF5LgorICogc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQKKyAqIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF88Y2FsbD4gPSAmZXZlbnRfPGNhbGw+OwogICoKICAqLwogCkBAIC01NzksMjggKzU4MSwyOCBAQAogI3VuZGVmIERFRklORV9FVkVOVAogI2RlZmluZSBERUZJTkVfRVZFTlQodGVtcGxhdGUsIGNhbGwsIHByb3RvLCBhcmdzKQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkIGV2ZW50XyMjY2FsbCA9IHsJCQlcCiAJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCiAJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3NfIyN0ZW1wbGF0ZSwJCVwKIAkuZXZlbnQuZnVuY3MJCT0gJmZ0cmFjZV9ldmVudF90eXBlX2Z1bmNzXyMjdGVtcGxhdGUsCVwKIAkucHJpbnRfZm10CQk9IHByaW50X2ZtdF8jI3RlbXBsYXRlLAkJCVwKLX07Cit9OwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgKl9fZXZlbnRfIyNjYWxsID0gJmV2ZW50XyMjY2FsbAogCiAjdW5kZWYgREVGSU5FX0VWRU5UX1BSSU5UCiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgY2FsbCwgcHJvdG8sIGFyZ3MsIHByaW50KQkJXAogCQkJCQkJCQkJXAogc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRfZm10XyMjY2FsbFtdID0gcHJpbnQ7CQkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCi1fX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpIGV2ZW50XyMjY2FsbCA9IHsJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkIGV2ZW50XyMjY2FsbCA9IHsJCQlcCiAJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCiAJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3NfIyN0ZW1wbGF0ZSwJCVwKIAkuZXZlbnQuZnVuY3MJCT0gJmZ0cmFjZV9ldmVudF90eXBlX2Z1bmNzXyMjY2FsbCwJXAogCS5wcmludF9mbXQJCT0gcHJpbnRfZm10XyMjY2FsbCwJCQlcCi19Cit9OwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgKl9fZXZlbnRfIyNjYWxsID0gJmV2ZW50XyMjY2FsbAogCiAjaW5jbHVkZSBUUkFDRV9JTkNMVURFKFRSQUNFX0lOQ0xVREVfRklMRSkKIApkaWZmIC0tZ2l0IGEvaW5pdC9jYWxpYnJhdGUuYyBiL2luaXQvY2FsaWJyYXRlLmMKaW5kZXggNmViNDhlNS4uMjRmZTAyMiAxMDA2NDQKLS0tIGEvaW5pdC9jYWxpYnJhdGUuYworKysgYi9pbml0L2NhbGlicmF0ZS5jCkBAIC02Niw3ICs2Niw3IEBACiAJCXByZV9zdGFydCA9IDA7CiAJCXJlYWRfY3VycmVudF90aW1lcigmc3RhcnQpOwogCQlzdGFydF9qaWZmaWVzID0gamlmZmllczsKLQkJd2hpbGUgKGppZmZpZXMgPD0gKHN0YXJ0X2ppZmZpZXMgKyAxKSkgeworCQl3aGlsZSAodGltZV9iZWZvcmVfZXEoamlmZmllcywgc3RhcnRfamlmZmllcyArIDEpKSB7CiAJCQlwcmVfc3RhcnQgPSBzdGFydDsKIAkJCXJlYWRfY3VycmVudF90aW1lcigmc3RhcnQpOwogCQl9CkBAIC03NCw4ICs3NCw4IEBACiAKIAkJcHJlX2VuZCA9IDA7CiAJCWVuZCA9IHBvc3Rfc3RhcnQ7Ci0JCXdoaWxlIChqaWZmaWVzIDw9Ci0JCSAgICAgICAoc3RhcnRfamlmZmllcyArIDEgKyBERUxBWV9DQUxJQlJBVElPTl9USUNLUykpIHsKKwkJd2hpbGUgKHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIHN0YXJ0X2ppZmZpZXMgKyAxICsKKwkJCQkJICAgICAgIERFTEFZX0NBTElCUkFUSU9OX1RJQ0tTKSkgewogCQkJcHJlX2VuZCA9IGVuZDsKIAkJCXJlYWRfY3VycmVudF90aW1lcigmZW5kKTsKIAkJfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NhcGFiaWxpdHkuYyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKaW5kZXggMmYwNTMwMy4uOWU5Mzg1ZiAxMDA2NDQKLS0tIGEva2VybmVsL2NhcGFiaWxpdHkuYworKysgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCkBAIC0zMDYsNyArMzA2LDcgQEAKIAkJQlVHKCk7CiAJfQogCi0JaWYgKHNlY3VyaXR5X2NhcGFibGUoY2FwKSA9PSAwKSB7CisJaWYgKHNlY3VyaXR5X2NhcGFibGUoY3VycmVudF9jcmVkKCksIGNhcCkgPT0gMCkgewogCQljdXJyZW50LT5mbGFncyB8PSBQRl9TVVBFUlBSSVY7CiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCA0MzQ5OTM1Li5lOTJlOTgxIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC0xNTc1LDggKzE1NzUsMTAgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAl0cmlhbGNzID0gYWxsb2NfdHJpYWxfY3B1c2V0KGNzKTsKLQlpZiAoIXRyaWFsY3MpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghdHJpYWxjcykgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAlzd2l0Y2ggKGNmdC0+cHJpdmF0ZSkgewogCWNhc2UgRklMRV9DUFVMSVNUOgpAQCAtMTU5MSw2ICsxNTkzLDcgQEAKIAl9CiAKIAlmcmVlX3RyaWFsX2NwdXNldCh0cmlhbGNzKTsKK291dDoKIAljZ3JvdXBfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jcmVkLmMgYi9rZXJuZWwvY3JlZC5jCmluZGV4IDZhMWFhMDAuLjNhOWQ2ZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcmVkLmMKKysrIGIva2VybmVsL2NyZWQuYwpAQCAtMjUyLDEzICsyNTIsMTMgQEAKICNlbmRpZgogCiAJYXRvbWljX3NldCgmbmV3LT51c2FnZSwgMSk7CisjaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCisJbmV3LT5tYWdpYyA9IENSRURfTUFHSUM7CisjZW5kaWYKIAogCWlmIChzZWN1cml0eV9jcmVkX2FsbG9jX2JsYW5rKG5ldywgR0ZQX0tFUk5FTCkgPCAwKQogCQlnb3RvIGVycm9yOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTCi0JbmV3LT5tYWdpYyA9IENSRURfTUFHSUM7Ci0jZW5kaWYKIAlyZXR1cm4gbmV3OwogCiBlcnJvcjoKQEAgLTY1Nyw2ICs2NTcsOCBAQAogCXZhbGlkYXRlX2NyZWRzKG9sZCk7CiAKIAkqbmV3ID0gKm9sZDsKKwlhdG9taWNfc2V0KCZuZXctPnVzYWdlLCAxKTsKKwlzZXRfY3JlZF9zdWJzY3JpYmVycyhuZXcsIDApOwogCWdldF91aWQobmV3LT51c2VyKTsKIAlnZXRfZ3JvdXBfaW5mbyhuZXctPmdyb3VwX2luZm8pOwogCkBAIC02NzQsOCArNjc2LDYgQEAKIAlpZiAoc2VjdXJpdHlfcHJlcGFyZV9jcmVkcyhuZXcsIG9sZCwgR0ZQX0tFUk5FTCkgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JYXRvbWljX3NldCgmbmV3LT51c2FnZSwgMSk7Ci0Jc2V0X2NyZWRfc3Vic2NyaWJlcnMobmV3LCAwKTsKIAlwdXRfY3JlZChvbGQpOwogCXZhbGlkYXRlX2NyZWRzKG5ldyk7CiAJcmV0dXJuIG5ldzsKQEAgLTc0OCw3ICs3NDgsMTEgQEAKIAlpZiAoY3JlZC0+bWFnaWMgIT0gQ1JFRF9NQUdJQykKIAkJcmV0dXJuIHRydWU7CiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgKLQlpZiAoc2VsaW51eF9pc19lbmFibGVkKCkpIHsKKwkvKgorCSAqIGNyZWQtPnNlY3VyaXR5ID09IE5VTEwgaWYgc2VjdXJpdHlfY3JlZF9hbGxvY19ibGFuaygpIG9yCisJICogc2VjdXJpdHlfcHJlcGFyZV9jcmVkcygpIHJldHVybmVkIGFuIGVycm9yLgorCSAqLworCWlmIChzZWxpbnV4X2lzX2VuYWJsZWQoKSAmJiBjcmVkLT5zZWN1cml0eSkgewogCQlpZiAoKHVuc2lnbmVkIGxvbmcpIGNyZWQtPnNlY3VyaXR5IDwgUEFHRV9TSVpFKQogCQkJcmV0dXJuIHRydWU7CiAJCWlmICgoKih1MzIgKiljcmVkLT5zZWN1cml0eSAmIDB4ZmZmZmZmMDApID09CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2ludGVybmFscy5oIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaAppbmRleCA0NTcxYWU3Li45OWMzYmM4IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2ludGVybmFscy5oCisrKyBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKQEAgLTMsNiArMywxMiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaXJxZGVzYy5oPgogCisjaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKKyMgZGVmaW5lIElSUV9CSVRNQVBfQklUUwkoTlJfSVJRUyArIDgxOTYpCisjZWxzZQorIyBkZWZpbmUgSVJRX0JJVE1BUF9CSVRTCU5SX0lSUVMKKyNlbmRpZgorCiBleHRlcm4gaW50IG5vaXJxZGVidWc7CiAKICNkZWZpbmUgaXJxX2RhdGFfdG9fZGVzYyhkYXRhKQljb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGlycV9kZXNjLCBpcnFfZGF0YSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaXJxZGVzYy5jIGIva2VybmVsL2lycS9pcnFkZXNjLmMKaW5kZXggMjgyZjIwMi4uMjAzOWJlYSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pcnFkZXNjLmMKKysrIGIva2VybmVsL2lycS9pcnFkZXNjLmMKQEAgLTk0LDcgKzk0LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKG5yX2lycXMpOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKHNwYXJzZV9pcnFfbG9jayk7Ci1zdGF0aWMgREVDTEFSRV9CSVRNQVAoYWxsb2NhdGVkX2lycXMsIE5SX0lSUVMpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGFsbG9jYXRlZF9pcnFzLCBJUlFfQklUTUFQX0JJVFMpOwogCiAjaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKIApAQCAtMjE3LDYgKzIxNywxNSBAQAogCWluaXRjbnQgPSBhcmNoX3Byb2JlX25yX2lycXMoKTsKIAlwcmludGsoS0VSTl9JTkZPICJOUl9JUlFTOiVkIG5yX2lycXM6JWQgJWRcbiIsIE5SX0lSUVMsIG5yX2lycXMsIGluaXRjbnQpOwogCisJaWYgKFdBUk5fT04obnJfaXJxcyA+IElSUV9CSVRNQVBfQklUUykpCisJCW5yX2lycXMgPSBJUlFfQklUTUFQX0JJVFM7CisKKwlpZiAoV0FSTl9PTihpbml0Y250ID4gSVJRX0JJVE1BUF9CSVRTKSkKKwkJaW5pdGNudCA9IElSUV9CSVRNQVBfQklUUzsKKworCWlmIChpbml0Y250ID4gbnJfaXJxcykKKwkJbnJfaXJxcyA9IGluaXRjbnQ7CisKIAlmb3IgKGkgPSAwOyBpIDwgaW5pdGNudDsgaSsrKSB7CiAJCWRlc2MgPSBhbGxvY19kZXNjKGksIG5vZGUpOwogCQlzZXRfYml0KGksIGFsbG9jYXRlZF9pcnFzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDBjYWE1OWYuLjkwMzNjMWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAKIAlpZiAocmV0dmFsKQogCQlrZnJlZShhY3Rpb24pOwogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRCisjaWZkZWYgQ09ORklHX0RFQlVHX1NISVJRX0ZJWE1FCiAJaWYgKCFyZXR2YWwgJiYgKGlycWZsYWdzICYgSVJRRl9TSEFSRUQpKSB7CiAJCS8qCiAJCSAqIEl0J3MgYSBzaGFyZWQgSVJRIC0tIHRoZSBkcml2ZXIgb3VnaHQgdG8gYmUgcHJlcGFyZWQgZm9yIGl0CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jIGIva2VybmVsL2lycS9taWdyYXRpb24uYwppbmRleCAxZDI1NDE5Li40NDFmZDYyIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCisrKyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKQEAgLTU2LDYgKzU2LDcgQEAKIHZvaWQgbW92ZV9uYXRpdmVfaXJxKGludCBpcnEpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlib29sIG1hc2tlZDsKIAogCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSkpCiAJCXJldHVybjsKQEAgLTYzLDggKzY0LDE1IEBACiAJaWYgKHVubGlrZWx5KGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpCiAJCXJldHVybjsKIAotCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CisJLyoKKwkgKiBCZSBjYXJlZnVsIHZzLiBhbHJlYWR5IG1hc2tlZCBpbnRlcnJ1cHRzLiBJZiB0aGlzIGlzIGEKKwkgKiB0aHJlYWRlZCBpbnRlcnJ1cHQgd2l0aCBPTkVTSE9UIHNldCwgd2UgY2FuIGVuZCB1cCB3aXRoIGFuCisJICogaW50ZXJydXB0IHN0b3JtLgorCSAqLworCW1hc2tlZCA9IGRlc2MtPnN0YXR1cyAmIElSUV9NQVNLRUQ7CisJaWYgKCFtYXNrZWQpCisJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CiAJbW92ZV9tYXNrZWRfaXJxKGlycSk7Ci0JZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX3VubWFzaygmZGVzYy0+aXJxX2RhdGEpOworCWlmICghbWFza2VkKQorCQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfdW5tYXNrKCZkZXNjLT5pcnFfZGF0YSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcmVzZW5kLmMgYi9rZXJuZWwvaXJxL3Jlc2VuZC5jCmluZGV4IDg5MTExNWEuLmRjNDkzNTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvcmVzZW5kLmMKKysrIGIva2VybmVsL2lycS9yZXNlbmQuYwpAQCAtMjMsNyArMjMsNyBAQAogI2lmZGVmIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQKIAogLyogQml0bWFwIHRvIGhhbmRsZSBzb2Z0d2FyZSByZXNlbmQgb2YgaW50ZXJydXB0czogKi8KLXN0YXRpYyBERUNMQVJFX0JJVE1BUChpcnFzX3Jlc2VuZCwgTlJfSVJRUyk7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAoaXJxc19yZXNlbmQsIElSUV9CSVRNQVBfQklUUyk7CiAKIC8qCiAgKiBSdW4gc29mdHdhcmUgcmVzZW5kcyBvZiBJUlEncwpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDM0ZTAwYjcuLmVmYTI5MGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTI0NjAsOSArMjQ2MCw5IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUwotCW1vZC0+dHJhY2Vwb2ludHMgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fdHJhY2Vwb2ludHMiLAotCQkJCQlzaXplb2YoKm1vZC0+dHJhY2Vwb2ludHMpLAotCQkJCQkmbW9kLT5udW1fdHJhY2Vwb2ludHMpOworCW1vZC0+dHJhY2Vwb2ludHNfcHRycyA9IHNlY3Rpb25fb2JqcyhpbmZvLCAiX190cmFjZXBvaW50c19wdHJzIiwKKwkJCQkJICAgICBzaXplb2YoKm1vZC0+dHJhY2Vwb2ludHNfcHRycyksCisJCQkJCSAgICAgJm1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfSlVNUF9MQUJFTAogCW1vZC0+anVtcF9lbnRyaWVzID0gc2VjdGlvbl9vYmpzKGluZm8sICJfX2p1bXBfdGFibGUiLApAQCAtMzM5Myw3ICszMzkzLDcgQEAKIAkJICAgc3RydWN0IG1vZHZlcnNpb25faW5mbyAqdmVyLAogCQkgICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCwKIAkJICAgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmtzLAotCQkgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCisJCSAgIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRwKQogewogfQogRVhQT1JUX1NZTUJPTChtb2R1bGVfbGF5b3V0KTsKQEAgLTM0MDcsOCArMzQwNyw4IEBACiAJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJm1vZHVsZXMsIGxpc3QpCiAJCWlmICghbW9kLT50YWludHMpCi0JCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzLAotCQkJCW1vZC0+dHJhY2Vwb2ludHMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CisJCQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPnRyYWNlcG9pbnRzX3B0cnMsCisJCQkJbW9kLT50cmFjZXBvaW50c19wdHJzICsgbW9kLT5udW1fdHJhY2Vwb2ludHMpOwogCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKIH0KIApAQCAtMzQzMiw4ICszNDMyLDggQEAKIAkJCWVsc2UgaWYgKGl0ZXJfbW9kID4gaXRlci0+bW9kdWxlKQogCQkJCWl0ZXItPnRyYWNlcG9pbnQgPSBOVUxMOwogCQkJZm91bmQgPSB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKCZpdGVyLT50cmFjZXBvaW50LAotCQkJCWl0ZXJfbW9kLT50cmFjZXBvaW50cywKLQkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHMKKwkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHNfcHRycywKKwkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHNfcHRycwogCQkJCQkrIGl0ZXJfbW9kLT5udW1fdHJhY2Vwb2ludHMpOwogCQkJaWYgKGZvdW5kKSB7CiAJCQkJaXRlci0+bW9kdWxlID0gaXRlcl9tb2Q7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9ldmVudC5jIGIva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCAxMjZhMzAyLi42NTYyMjJmIDEwMDY0NAotLS0gYS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTc4Miw2ICs3ODIsMTAgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogfQogCisjZGVmaW5lIE1BWF9JTlRFUlJVUFRTICh+MFVMTCkKKworc3RhdGljIHZvaWQgcGVyZl9sb2dfdGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZW5hYmxlKTsKKwogc3RhdGljIGludAogZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCQkgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKQEAgLTc5NCw2ICs3OTgsMTcgQEAKIAogCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFOwogCWV2ZW50LT5vbmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogVW50aHJvdHRsZSBldmVudHMsIHNpbmNlIHdlIHNjaGVkdWxlZCB3ZSBtaWdodCBoYXZlIG1pc3NlZCBzZXZlcmFsCisJICogdGlja3MgYWxyZWFkeSwgYWxzbyBmb3IgYSBoZWF2aWx5IHNjaGVkdWxpbmcgdGFzayB0aGVyZSBpcyBsaXR0bGUKKwkgKiBndWFyYW50ZWUgaXQnbGwgZ2V0IGEgdGljayBpbiBhIHRpbWVseSBtYW5uZXIuCisJICovCisJaWYgKHVubGlrZWx5KGV2ZW50LT5ody5pbnRlcnJ1cHRzID09IE1BWF9JTlRFUlJVUFRTKSkgeworCQlwZXJmX2xvZ190aHJvdHRsZShldmVudCwgMSk7CisJCWV2ZW50LT5ody5pbnRlcnJ1cHRzID0gMDsKKwl9CisKIAkvKgogCSAqIFRoZSBuZXcgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0dXJuIGl0IG9uIGluIHRoZSBoYXJkd2FyZToKIAkgKi8KQEAgLTE1OTYsMTAgKzE2MTEsNiBAQAogCX0KIH0KIAotI2RlZmluZSBNQVhfSU5URVJSVVBUUyAofjBVTEwpCi0KLXN0YXRpYyB2b2lkIHBlcmZfbG9nX3Rocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGVuYWJsZSk7Ci0KIHN0YXRpYyB1NjQgcGVyZl9jYWxjdWxhdGVfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5zZWMsIHU2NCBjb3VudCkKIHsKIAl1NjQgZnJlcXVlbmN5ID0gZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXE7CkBAIC0xOTAxLDExICsxOTEyLDEyIEBACiAJCXJldHVybjsKIAogCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7Ci0JdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOworCWlmIChjdHgtPmlzX2FjdGl2ZSkKKwkJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwogCXVwZGF0ZV9ldmVudF90aW1lcyhldmVudCk7CisJaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwkJZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwotCi0JZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTY0IHBlcmZfZXZlbnRfY291bnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtMTk5OSw4ICsyMDExLDcgQEAKIAkgKiBhY2Nlc3NlZCBmcm9tIE5NSS4gVXNlIGEgdGVtcG9yYXJ5IG1hbnVhbCBwZXIgY3B1IGFsbG9jYXRpb24KIAkgKiB1bnRpbCB0aGF0IGdldHMgc29ydGVkIG91dC4KIAkgKi8KLQlzaXplID0gc2l6ZW9mKCplbnRyaWVzKSArIHNpemVvZihzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKikgKgotCQludW1fcG9zc2libGVfY3B1cygpOworCXNpemUgPSBvZmZzZXRvZihzdHJ1Y3QgY2FsbGNoYWluX2NwdXNfZW50cmllcywgY3B1X2VudHJpZXNbbnJfY3B1X2lkc10pOwogCiAJZW50cmllcyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlbnRyaWVzKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL21haW4uYyBiL2tlcm5lbC9wb3dlci9tYWluLmMKaW5kZXggN2I1ZGI2YS4uNzAxODUzMCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL21haW4uYworKysgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCkBAIC0zMjYsNyArMzI2LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgcG1fc3RhcnRfd29ya3F1ZXVlKHZvaWQpCiB7Ci0JcG1fd3EgPSBhbGxvY193b3JrcXVldWUoInBtIiwgV1FfRlJFRVpFQUJMRSwgMCk7CisJcG1fd3EgPSBhbGxvY193b3JrcXVldWUoInBtIiwgV1FfRlJFRVpBQkxFLCAwKTsKIAogCXJldHVybiBwbV93cSA/IDAgOiAtRU5PTUVNOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKaW5kZXggZDZkMmExMC4uMGNmM2EyNyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYworKysgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KICNkZWZpbmUgVElNRU9VVAkoMjAgKiBIWikKIAotc3RhdGljIGlubGluZSBpbnQgZnJlZXplYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQorc3RhdGljIGlubGluZSBpbnQgZnJlZXphYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApCiB7CiAJaWYgKChwID09IGN1cnJlbnQpIHx8CiAJICAgIChwLT5mbGFncyAmIFBGX05PRlJFRVpFKSB8fApAQCAtNTMsNyArNTMsNyBAQAogCQl0b2RvID0gMDsKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJZG9fZWFjaF90aHJlYWQoZywgcCkgewotCQkJaWYgKGZyb3plbihwKSB8fCAhZnJlZXplYWJsZShwKSkKKwkJCWlmIChmcm96ZW4ocCkgfHwgIWZyZWV6YWJsZShwKSkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKCFmcmVlemVfdGFzayhwLCBzaWdfb25seSkpCkBAIC0xNjcsNyArMTY3LDcgQEAKIAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJZG9fZWFjaF90aHJlYWQoZywgcCkgewotCQlpZiAoIWZyZWV6ZWFibGUocCkpCisJCWlmICghZnJlZXphYmxlKHApKQogCQkJY29udGludWU7CiAKIAkJaWYgKG5vc2lnX29ubHkgJiYgc2hvdWxkX3NlbmRfc2lnbmFsKHApKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwppbmRleCAwZGFjNzVlLi42NGRiNjQ4IDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYworKysgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwpAQCAtMTUxOSwxMSArMTUxOSw4IEBACiBzd3N1c3BfYWxsb2Moc3RydWN0IG1lbW9yeV9iaXRtYXAgKm9yaWdfYm0sIHN0cnVjdCBtZW1vcnlfYml0bWFwICpjb3B5X2JtLAogCQl1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIHVuc2lnbmVkIGludCBucl9oaWdobWVtKQogewotCWludCBlcnJvciA9IDA7Ci0KIAlpZiAobnJfaGlnaG1lbSA+IDApIHsKLQkJZXJyb3IgPSBnZXRfaGlnaG1lbV9idWZmZXIoUEdfQU5ZKTsKLQkJaWYgKGVycm9yKQorCQlpZiAoZ2V0X2hpZ2htZW1fYnVmZmVyKFBHX0FOWSkpCiAJCQlnb3RvIGVycl9vdXQ7CiAJCWlmIChucl9oaWdobWVtID4gYWxsb2NfaGlnaG1lbSkgewogCQkJbnJfaGlnaG1lbSAtPSBhbGxvY19oaWdobWVtOwpAQCAtMTU0Niw3ICsxNTQzLDcgQEAKIAogIGVycl9vdXQ6CiAJc3dzdXNwX2ZyZWUoKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIGFzbWxpbmthZ2UgaW50IHN3c3VzcF9zYXZlKHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggMmRkYmRjNy4uMzYyMzE1MiAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMjYyLDI1ICsyNjIsNDcgQEAKIGludCBkbWVzZ19yZXN0cmljdDsKICNlbmRpZgogCitzdGF0aWMgaW50IHN5c2xvZ19hY3Rpb25fcmVzdHJpY3RlZChpbnQgdHlwZSkKK3sKKwlpZiAoZG1lc2dfcmVzdHJpY3QpCisJCXJldHVybiAxOworCS8qIFVubGVzcyByZXN0cmljdGVkLCB3ZSBhbGxvdyAicmVhZCBhbGwiIGFuZCAiZ2V0IGJ1ZmZlciBzaXplIiBmb3IgZXZlcnlib2R5ICovCisJcmV0dXJuIHR5cGUgIT0gU1lTTE9HX0FDVElPTl9SRUFEX0FMTCAmJiB0eXBlICE9IFNZU0xPR19BQ1RJT05fU0laRV9CVUZGRVI7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKK3sKKwkvKgorCSAqIElmIHRoaXMgaXMgZnJvbSAvcHJvYy9rbXNnIGFuZCB3ZSd2ZSBhbHJlYWR5IG9wZW5lZCBpdCwgdGhlbiB3ZSd2ZQorCSAqIGFscmVhZHkgZG9uZSB0aGUgY2FwYWJpbGl0aWVzIGNoZWNrcyBhdCBvcGVuIHRpbWUuCisJICovCisJaWYgKGZyb21fZmlsZSAmJiB0eXBlICE9IFNZU0xPR19BQ1RJT05fT1BFTikKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3lzbG9nX2FjdGlvbl9yZXN0cmljdGVkKHR5cGUpKSB7CisJCWlmIChjYXBhYmxlKENBUF9TWVNMT0cpKQorCQkJcmV0dXJuIDA7CisJCS8qIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGFjY2VwdCBDQVBfU1lTX0FETUlOIHRvbywgd2l0aCBhIHdhcm5pbmcgKi8KKwkJaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKKwkJCVdBUk5fT05DRSgxLCAiQXR0ZW1wdCB0byBhY2Nlc3Mgc3lzbG9nIHdpdGggQ0FQX1NZU19BRE1JTiAiCisJCQkJICJidXQgbm8gQ0FQX1NZU0xPRyAoZGVwcmVjYXRlZCkuXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAtRVBFUk07CisJfQorCXJldHVybiAwOworfQorCiBpbnQgZG9fc3lzbG9nKGludCB0eXBlLCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgbGVuLCBib29sIGZyb21fZmlsZSkKIHsKIAl1bnNpZ25lZCBpLCBqLCBsaW1pdCwgY291bnQ7CiAJaW50IGRvX2NsZWFyID0gMDsKIAljaGFyIGM7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgZXJyb3I7CiAKLQkvKgotCSAqIElmIHRoaXMgaXMgZnJvbSAvcHJvYy9rbXNnIHdlIG9ubHkgZG8gdGhlIGNhcGFiaWxpdGllcyBjaGVja3MKLQkgKiBhdCBvcGVuIHRpbWUuCi0JICovCi0JaWYgKHR5cGUgPT0gU1lTTE9HX0FDVElPTl9PUEVOIHx8ICFmcm9tX2ZpbGUpIHsKLQkJaWYgKGRtZXNnX3Jlc3RyaWN0ICYmICFjYXBhYmxlKENBUF9TWVNMT0cpKQotCQkJZ290byB3YXJuOyAvKiBzd2l0Y2ggdG8gcmV0dXJuIC1FUEVSTSBhZnRlciAyLjYuMzkgKi8KLQkJaWYgKCh0eXBlICE9IFNZU0xPR19BQ1RJT05fUkVBRF9BTEwgJiYKLQkJICAgICB0eXBlICE9IFNZU0xPR19BQ1RJT05fU0laRV9CVUZGRVIpICYmCi0JCSAgICAhY2FwYWJsZShDQVBfU1lTTE9HKSkKLQkJCWdvdG8gd2FybjsgLyogc3dpdGNoIHRvIHJldHVybiAtRVBFUk0gYWZ0ZXIgMi42LjM5ICovCi0JfQorCWVycm9yID0gY2hlY2tfc3lzbG9nX3Blcm1pc3Npb25zKHR5cGUsIGZyb21fZmlsZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKIAogCWVycm9yID0gc2VjdXJpdHlfc3lzbG9nKHR5cGUpOwogCWlmIChlcnJvcikKQEAgLTQyMywxMiArNDQ1LDYgQEAKIAl9CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwotd2FybjoKLQkvKiByZW1vdmUgYWZ0ZXIgMi42LjM5ICovCi0JaWYgKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCVdBUk5fT05DRSgxLCAiQXR0ZW1wdCB0byBhY2Nlc3Mgc3lzbG9nIHdpdGggQ0FQX1NZU19BRE1JTiAiCi0JCSAgImJ1dCBubyBDQVBfU1lTTE9HIChkZXByZWNhdGVkIGFuZCBkZW5pZWQpLlxuIik7Ci0JcmV0dXJuIC1FUEVSTTsKIH0KIAogU1lTQ0FMTF9ERUZJTkUzKHN5c2xvZywgaW50LCB0eXBlLCBjaGFyIF9fdXNlciAqLCBidWYsIGludCwgbGVuKQpkaWZmIC0tZ2l0IGEva2VybmVsL3B0cmFjZS5jIGIva2VybmVsL3B0cmFjZS5jCmluZGV4IDk5YmJhYTMuLmUyMzAyZTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wdHJhY2UuYworKysgYi9rZXJuZWwvcHRyYWNlLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogCXJldHVybiAhZXJyOwogfQogCi1pbnQgcHRyYWNlX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgaW50IHB0cmFjZV9hdHRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCWludCByZXR2YWw7CiAKQEAgLTIxOSw3ICsyMTksNyBAQAogICogUGVyZm9ybXMgY2hlY2tzIGFuZCBzZXRzIFBUX1BUUkFDRUQuCiAgKiBTaG91bGQgYmUgdXNlZCBieSBhbGwgcHRyYWNlIGltcGxlbWVudGF0aW9ucyBmb3IgUFRSQUNFX1RSQUNFTUUuCiAgKi8KLWludCBwdHJhY2VfdHJhY2VtZSh2b2lkKQorc3RhdGljIGludCBwdHJhY2VfdHJhY2VtZSh2b2lkKQogewogCWludCByZXQgPSAtRVBFUk07CiAKQEAgLTI5Myw3ICsyOTMsNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotaW50IHB0cmFjZV9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IGRhdGEpCitzdGF0aWMgaW50IHB0cmFjZV9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IGRhdGEpCiB7CiAJYm9vbCBkZWFkID0gZmFsc2U7CiAKQEAgLTMxMyw3ICszMTMsNyBAQAogCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKIAkJZGVhZCA9IF9fcHRyYWNlX2RldGFjaChjdXJyZW50LCBjaGlsZCk7CiAJCWlmICghY2hpbGQtPmV4aXRfc3RhdGUpCi0JCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOworCQkJd2FrZV91cF9zdGF0ZShjaGlsZCwgVEFTS19UUkFDRUQgfCBUQVNLX1NUT1BQRUQpOwogCX0KIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggMzU0NzY5OS4uMGMyNmUyZCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC03MjIsMTAgKzcyMiwxMCBAQAogCXU2NCBub3csIGRlbHRhOwogCXVuc2lnbmVkIGxvbmcgbG9hZCA9IGNmc19ycS0+bG9hZC53ZWlnaHQ7CiAKLQlpZiAoIWNmc19ycSkKKwlpZiAoY2ZzX3JxLT50ZyA9PSAmcm9vdF90YXNrX2dyb3VwKQogCQlyZXR1cm47CiAKLQlub3cgPSBycV9vZihjZnNfcnEpLT5jbG9jazsKKwlub3cgPSBycV9vZihjZnNfcnEpLT5jbG9ja190YXNrOwogCWRlbHRhID0gbm93IC0gY2ZzX3JxLT5sb2FkX3N0YW1wOwogCiAJLyogdHJ1bmNhdGUgbG9hZCBoaXN0b3J5IGF0IDQgaWRsZSBwZXJpb2RzICovCkBAIC04MzAsOSArODMwLDYgQEAKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZTsKIAlsb25nIHNoYXJlczsKIAotCWlmICghY2ZzX3JxKQotCQlyZXR1cm47Ci0KIAl0ZyA9IGNmc19ycS0+dGc7CiAJc2UgPSB0Zy0+c2VbY3B1X29mKHJxX29mKGNmc19ycSkpXTsKIAlpZiAoIXNlKQpAQCAtMTQzMiw3ICsxNDI5LDcgQEAKIAogc3RhdGljIGludCB3YWtlX2FmZmluZShzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc3luYykKIHsKLQl1bnNpZ25lZCBsb25nIHRoaXNfbG9hZCwgbG9hZDsKKwlzNjQgdGhpc19sb2FkLCBsb2FkOwogCWludCBpZHgsIHRoaXNfY3B1LCBwcmV2X2NwdTsKIAl1bnNpZ25lZCBsb25nIHRsX3Blcl90YXNrOwogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKQEAgLTE0NzEsOCArMTQ2OCw4IEBACiAJICogT3RoZXJ3aXNlIGNoZWNrIGlmIGVpdGhlciBjcHVzIGFyZSBuZWFyIGVub3VnaCBpbiBsb2FkIHRvIGFsbG93IHRoaXMKIAkgKiB0YXNrIHRvIGJlIHdva2VuIG9uIHRoaXNfY3B1LgogCSAqLwotCWlmICh0aGlzX2xvYWQpIHsKLQkJdW5zaWduZWQgbG9uZyB0aGlzX2VmZl9sb2FkLCBwcmV2X2VmZl9sb2FkOworCWlmICh0aGlzX2xvYWQgPiAwKSB7CisJCXM2NCB0aGlzX2VmZl9sb2FkLCBwcmV2X2VmZl9sb2FkOwogCiAJCXRoaXNfZWZmX2xvYWQgPSAxMDA7CiAJCXRoaXNfZWZmX2xvYWQgKj0gcG93ZXJfb2YocHJldl9jcHUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBjOTE0ZWM3Li5hZDYyNjc3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtNjI1LDcgKzYyNSw3IEBACiAJc3RydWN0IHJ0X3JxICpydF9ycSA9IHJ0X3JxX29mX3NlKHJ0X3NlKTsKIAl1NjQgZGVsdGFfZXhlYzsKIAotCWlmICghdGFza19oYXNfcnRfcG9saWN5KGN1cnIpKQorCWlmIChjdXJyLT5zY2hlZF9jbGFzcyAhPSAmcnRfc2NoZWRfY2xhc3MpCiAJCXJldHVybjsKIAogCWRlbHRhX2V4ZWMgPSBycS0+Y2xvY2tfdGFzayAtIGN1cnItPnNlLmV4ZWNfc3RhcnQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMzFiNzFhMi4uMThkYTcwMiAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTM4NSw3ICsxMzg1LDggQEAKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpLCAqdGNyZWQ7CiAKIAl0Y3JlZCA9IF9fdGFza19jcmVkKHRhc2spOwotCWlmICgoY3JlZC0+dWlkICE9IHRjcmVkLT5ldWlkIHx8CisJaWYgKGN1cnJlbnQgIT0gdGFzayAmJgorCSAgICAoY3JlZC0+dWlkICE9IHRjcmVkLT5ldWlkIHx8CiAJICAgICBjcmVkLT51aWQgIT0gdGNyZWQtPnN1aWQgfHwKIAkgICAgIGNyZWQtPnVpZCAhPSB0Y3JlZC0+dWlkICB8fAogCSAgICAgY3JlZC0+Z2lkICE9IHRjcmVkLT5lZ2lkIHx8CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jIGIva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYwppbmRleCA0OGIyNzYxLi5hM2I1YWZmIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKQEAgLTYwMCw0ICs2MDAsMTQgQEAKIAlyZXR1cm4gdGlja19icm9hZGNhc3RfZGV2aWNlLm1vZGUgPT0gVElDS0RFVl9NT0RFX09ORVNIT1Q7CiB9CiAKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZSBicm9hZGNhc3QgZGV2aWNlIHN1cHBvcnRzIG9uZXNob3QuCisgKi8KK2Jvb2wgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hdmFpbGFibGUodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpiYyA9IHRpY2tfYnJvYWRjYXN0X2RldmljZS5ldnRkZXY7CisKKwlyZXR1cm4gYmMgPyBiYy0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UIDogZmFsc2U7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1jb21tb24uYyBiL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMKaW5kZXggMDUxYmM4MC4uZWQyMjhlZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1jb21tb24uYworKysgYi9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jCkBAIC01MSw3ICs1MSwxMSBAQAogewogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiA9IF9fdGhpc19jcHVfcmVhZCh0aWNrX2NwdV9kZXZpY2UuZXZ0ZGV2KTsKIAotCXJldHVybiBkZXYgJiYgKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UKTsKKwlpZiAoIWRldiB8fCAhKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9PTkVTSE9UKSkKKwkJcmV0dXJuIDA7CisJaWYgKCEoZGV2LT5mZWF0dXJlcyAmIENMT0NLX0VWVF9GRUFUX0MzU1RPUCkpCisJCXJldHVybiAxOworCXJldHVybiB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2F2YWlsYWJsZSgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oIGIva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCmluZGV4IDI5MGVlZmIuLmY2NWQzYTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaAorKysgYi9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKQEAgLTM2LDYgKzM2LDcgQEAKIGV4dGVybiBpbnQgdGlja19yZXN1bWVfYnJvYWRjYXN0X29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpOwogZXh0ZXJuIGludCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2FjdGl2ZSh2b2lkKTsKIGV4dGVybiB2b2lkIHRpY2tfY2hlY2tfb25lc2hvdF9icm9hZGNhc3QoaW50IGNwdSk7Citib29sIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfYXZhaWxhYmxlKHZvaWQpOwogIyBlbHNlIC8qIEJST0FEQ0FTVCAqLwogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfYnJvYWRjYXN0X3NldHVwX29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpCiB7CkBAIC00Niw2ICs0Nyw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19zaHV0ZG93bl9icm9hZGNhc3Rfb25lc2hvdCh1bnNpZ25lZCBpbnQgKmNwdXApIHsgfQogc3RhdGljIGlubGluZSBpbnQgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfY2hlY2tfb25lc2hvdF9icm9hZGNhc3QoaW50IGNwdSkgeyB9CitzdGF0aWMgaW5saW5lIGJvb2wgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hdmFpbGFibGUodm9pZCkgeyByZXR1cm4gdHJ1ZTsgfQogIyBlbmRpZiAvKiAhQlJPQURDQVNUICovCiAKICNlbHNlIC8qICFPTkVTSE9UICovCkBAIC03Niw2ICs3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIGludCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2FjdGl2ZSh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGJvb2wgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hdmFpbGFibGUodm9pZCkgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZiAvKiAhVElDS19PTkVTSE9UICovCiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKaW5kZXggMzJhMTlmOS4uMzI1ODQ1NSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwpAQCAtNDEsNyArNDEsNyBAQAogCWNoYXIgc3ltbmFtZVtLU1lNX05BTUVfTEVOXTsKIAogCWlmIChsb29rdXBfc3ltYm9sX25hbWUoKHVuc2lnbmVkIGxvbmcpc3ltLCBzeW1uYW1lKSA8IDApCi0JCVNFUV9wcmludGYobSwgIjwlcD4iLCBzeW0pOworCQlTRVFfcHJpbnRmKG0sICI8JXBLPiIsIHN5bSk7CiAJZWxzZQogCQlTRVFfcHJpbnRmKG0sICIlcyIsIHN5bW5hbWUpOwogfQpAQCAtMTEyLDcgKzExMiw3IEBACiBzdGF0aWMgdm9pZAogcHJpbnRfYmFzZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UsIHU2NCBub3cpCiB7Ci0JU0VRX3ByaW50ZihtLCAiICAuYmFzZTogICAgICAgJXBcbiIsIGJhc2UpOworCVNFUV9wcmludGYobSwgIiAgLmJhc2U6ICAgICAgICVwS1xuIiwgYmFzZSk7CiAJU0VRX3ByaW50ZihtLCAiICAuaW5kZXg6ICAgICAgJWRcbiIsCiAJCQliYXNlLT5pbmRleCk7CiAJU0VRX3ByaW50ZihtLCAiICAucmVzb2x1dGlvbjogJUx1IG5zZWNzXG4iLApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCA0M2NhOTkzLi5kNjQ1OTkyIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtOTU5LDcgKzk1OSw3IEBACiAgKgogICogU3luY2hyb25pemF0aW9uIHJ1bGVzOiBDYWxsZXJzIG11c3QgcHJldmVudCByZXN0YXJ0aW5nIG9mIHRoZSB0aW1lciwKICAqIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGlzIG1lYW5pbmdsZXNzLiBJdCBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbQotICogaGFyZGlycSBjb250ZXh0cy4gVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGxvY2tzIHdoaWNoIHdvdWxkIHByZXZlbnQKKyAqIGludGVycnVwdCBjb250ZXh0cy4gVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGxvY2tzIHdoaWNoIHdvdWxkIHByZXZlbnQKICAqIGNvbXBsZXRpb24gb2YgdGhlIHRpbWVyJ3MgaGFuZGxlci4gVGhlIHRpbWVyJ3MgaGFuZGxlciBtdXN0IG5vdCBjYWxsCiAgKiBhZGRfdGltZXJfb24oKS4gVXBvbiBleGl0IHRoZSB0aW1lciBpcyBub3QgcXVldWVkIGFuZCB0aGUgaGFuZGxlciBpcwogICogbm90IHJ1bm5pbmcgb24gYW55IENQVS4KQEAgLTk2OSwxMCArOTY5LDEyIEBACiBpbnQgZGVsX3RpbWVyX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogewogI2lmZGVmIENPTkZJR19MT0NLREVQCi0JbG9jYWxfYmhfZGlzYWJsZSgpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbG9ja19tYXBfYWNxdWlyZSgmdGltZXItPmxvY2tkZXBfbWFwKTsKIAlsb2NrX21hcF9yZWxlYXNlKCZ0aW1lci0+bG9ja2RlcF9tYXApOwotCWxvY2FsX2JoX2VuYWJsZSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKICNlbmRpZgogCS8qCiAJICogZG9uJ3QgdXNlIGl0IGluIGhhcmRpcnEgY29udGV4dCwgYmVjYXVzZSBpdApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCAxNTM1NjJkLi5jYmFmZWQ3IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtMTM4LDYgKzEzOCwxMyBAQAogCQkgICAgICFibGtfdHJhY2VyX2VuYWJsZWQpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIElmIHRoZSBCTEtfVENfTk9USUZZIGFjdGlvbiBtYXNrIGlzbid0IHNldCwgZG9uJ3Qgc2VuZCBhbnkgbm90ZQorCSAqIG1lc3NhZ2UgdG8gdGhlIHRyYWNlLgorCSAqLworCWlmICghKGJ0LT5hY3RfbWFzayAmIEJMS19UQ19OT1RJRlkpKQorCQlyZXR1cm47CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJYnVmID0gcGVyX2NwdV9wdHIoYnQtPm1zZ19kYXRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CkBAIC0xODIwLDIxICsxODI3LDUgQEAKIAlyd2JzW2ldID0gJ1wwJzsKIH0KIAotdm9pZCBibGtfZmlsbF9yd2JzX3JxKGNoYXIgKnJ3YnMsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlpbnQgcncgPSBycS0+Y21kX2ZsYWdzICYgMHgwMzsKLQlpbnQgYnl0ZXM7Ci0KLQlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKQotCQlydyB8PSBSRVFfRElTQ0FSRDsKLQotCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX1NFQ1VSRSkKLQkJcncgfD0gUkVRX1NFQ1VSRTsKLQotCWJ5dGVzID0gYmxrX3JxX2J5dGVzKHJxKTsKLQotCWJsa19maWxsX3J3YnMocndicywgcncsIGJ5dGVzKTsKLX0KLQogI2VuZGlmIC8qIENPTkZJR19FVkVOVF9UUkFDSU5HICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCAzNWZkZTA5Li41ZjQ5OWUwNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtMTI4NCw3ICsxMjg0LDcgQEAKIHN0YXRpYyB2b2lkIHRyYWNlX21vZHVsZV9hZGRfZXZlbnRzKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3QgZnRyYWNlX21vZHVsZV9maWxlX29wcyAqZmlsZV9vcHMgPSBOVUxMOwotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgKnN0YXJ0LCAqZW5kOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKmNhbGwsICoqc3RhcnQsICoqZW5kOwogCiAJc3RhcnQgPSBtb2QtPnRyYWNlX2V2ZW50czsKIAllbmQgPSBtb2QtPnRyYWNlX2V2ZW50cyArIG1vZC0+bnVtX3RyYWNlX2V2ZW50czsKQEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJCXJldHVybjsKIAogCWZvcl9lYWNoX2V2ZW50KGNhbGwsIHN0YXJ0LCBlbmQpIHsKLQkJX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBtb2QsCisJCV9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoKmNhbGwsIG1vZCwKIAkJCQkgICAgICAgJmZpbGVfb3BzLT5pZCwgJmZpbGVfb3BzLT5lbmFibGUsCiAJCQkJICAgICAgICZmaWxlX29wcy0+ZmlsdGVyLCAmZmlsZV9vcHMtPmZvcm1hdCk7CiAJfQpAQCAtMTM2Nyw4ICsxMzY3LDggQEAKIAkucHJpb3JpdHkgPSAwLAogfTsKIAotZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3N0YXJ0X2Z0cmFjZV9ldmVudHNbXTsKLWV4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX19zdG9wX2Z0cmFjZV9ldmVudHNbXTsKK2V4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKl9fc3RhcnRfZnRyYWNlX2V2ZW50c1tdOworZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqX19zdG9wX2Z0cmFjZV9ldmVudHNbXTsKIAogc3RhdGljIGNoYXIgYm9vdHVwX2V2ZW50X2J1ZltDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTsKIApAQCAtMTM4NCw3ICsxMzg0LDcgQEAKIAogc3RhdGljIF9faW5pdCBpbnQgZXZlbnRfdHJhY2VfaW5pdCh2b2lkKQogewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKipjYWxsOwogCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwogCXN0cnVjdCBkZW50cnkgKmVudHJ5OwogCXN0cnVjdCBkZW50cnkgKmRfZXZlbnRzOwpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKIAkJcHJfd2FybmluZygidHJhY2luZzogRmFpbGVkIHRvIGFsbG9jYXRlIGNvbW1vbiBmaWVsZHMiKTsKIAogCWZvcl9lYWNoX2V2ZW50KGNhbGwsIF9fc3RhcnRfZnRyYWNlX2V2ZW50cywgX19zdG9wX2Z0cmFjZV9ldmVudHMpIHsKLQkJX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBOVUxMLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCisJCV9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoKmNhbGwsIE5VTEwsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9lbmFibGVfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9mb3JtYXRfZm9wcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggNGI3NGQ3MS4uYmJlZWMzMSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtMTYxLDEzICsxNjEsMTMgQEAKIAkuZmllbGRzCQkJPSBMSVNUX0hFQURfSU5JVChldmVudF9jbGFzc19mdHJhY2VfIyNjYWxsLmZpZWxkcyksXAogfTsJCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKLV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCitzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkIGV2ZW50XyMjY2FsbCA9IHsJCQlcCiAJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCiAJLmV2ZW50LnR5cGUJCT0gZXR5cGUsCQkJCVwKIAkuY2xhc3MJCQk9ICZldmVudF9jbGFzc19mdHJhY2VfIyNjYWxsLAkJXAogCS5wcmludF9mbXQJCT0gcHJpbnQsCQkJCVwKIH07CQkJCQkJCQkJXAorc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF8jI2NhbGwgPSAmZXZlbnRfIyNjYWxsOwogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCBiNzA2NTI5Li41YzlmZTA4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtNTUsMjAgKzU1LDIxIEBACiAJLnJhd19pbml0CT0gaW5pdF9zeXNjYWxsX3RyYWNlLAogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YVtdOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CitleHRlcm4gc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKl9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGFbXTsKK2V4dGVybiBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN5c2NhbGxzX21ldGFkYXRhOwogCi1zdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmZpbmRfc3lzY2FsbF9tZXRhKHVuc2lnbmVkIGxvbmcgc3lzY2FsbCkKK3N0YXRpYyBfX2luaXQgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKgorZmluZF9zeXNjYWxsX21ldGEodW5zaWduZWQgbG9uZyBzeXNjYWxsKQogewotCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzdGFydDsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3RvcDsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN0YXJ0OworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICoqc3RvcDsKIAljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOwogCiAKLQlzdGFydCA9IChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKV9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGE7Ci0Jc3RvcCA9IChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKV9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YTsKKwlzdGFydCA9IF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGE7CisJc3RvcCA9IF9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YTsKIAlrYWxsc3ltc19sb29rdXAoc3lzY2FsbCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKIAogCWZvciAoIDsgc3RhcnQgPCBzdG9wOyBzdGFydCsrKSB7CkBAIC03OCw4ICs3OSw4IEBACiAJCSAqIHdpdGggIlN5UyIgaW5zdGVhZCBvZiAic3lzIiwgbGVhZGluZyB0byBhbiB1bndhbnRlZAogCQkgKiBtaXNtYXRjaC4KIAkJICovCi0JCWlmIChzdGFydC0+bmFtZSAmJiAhc3RyY21wKHN0YXJ0LT5uYW1lICsgMywgc3RyICsgMykpCi0JCQlyZXR1cm4gc3RhcnQ7CisJCWlmICgoKnN0YXJ0KS0+bmFtZSAmJiAhc3RyY21wKCgqc3RhcnQpLT5uYW1lICsgMywgc3RyICsgMykpCisJCQlyZXR1cm4gKnN0YXJ0OwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZXBvaW50LmMgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCmluZGV4IGU5NWVlN2YuLjY4MTg3YWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZXBvaW50LmMKKysrIGIva2VybmVsL3RyYWNlcG9pbnQuYwpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgogCi1leHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgX19zdGFydF9fX3RyYWNlcG9pbnRzW107Ci1leHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgX19zdG9wX19fdHJhY2Vwb2ludHNbXTsKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0IF9fc3RhcnRfX190cmFjZXBvaW50c19wdHJzW107CitleHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCBfX3N0b3BfX190cmFjZXBvaW50c19wdHJzW107CiAKIC8qIFNldCB0byAxIHRvIGVuYWJsZSB0cmFjZXBvaW50IGRlYnVnIG91dHB1dCAqLwogc3RhdGljIGNvbnN0IGludCB0cmFjZXBvaW50X2RlYnVnOwpAQCAtMjk4LDEwICsyOTgsMTAgQEAKICAqCiAgKiBVcGRhdGVzIHRoZSBwcm9iZSBjYWxsYmFjayBjb3JyZXNwb25kaW5nIHRvIGEgcmFuZ2Ugb2YgdHJhY2Vwb2ludHMuCiAgKi8KLXZvaWQKLXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3ZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sCisJCQkJICAgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKQogewotCXN0cnVjdCB0cmFjZXBvaW50ICppdGVyOworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKml0ZXI7CiAJc3RydWN0IHRyYWNlcG9pbnRfZW50cnkgKm1hcmtfZW50cnk7CiAKIAlpZiAoIWJlZ2luKQpAQCAtMzA5LDEyICszMDksMTIgQEAKIAogCW11dGV4X2xvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKIAlmb3IgKGl0ZXIgPSBiZWdpbjsgaXRlciA8IGVuZDsgaXRlcisrKSB7Ci0JCW1hcmtfZW50cnkgPSBnZXRfdHJhY2Vwb2ludChpdGVyLT5uYW1lKTsKKwkJbWFya19lbnRyeSA9IGdldF90cmFjZXBvaW50KCgqaXRlciktPm5hbWUpOwogCQlpZiAobWFya19lbnRyeSkgewotCQkJc2V0X3RyYWNlcG9pbnQoJm1hcmtfZW50cnksIGl0ZXIsCisJCQlzZXRfdHJhY2Vwb2ludCgmbWFya19lbnRyeSwgKml0ZXIsCiAJCQkJCSEhbWFya19lbnRyeS0+cmVmY291bnQpOwogCQl9IGVsc2UgewotCQkJZGlzYWJsZV90cmFjZXBvaW50KGl0ZXIpOworCQkJZGlzYWJsZV90cmFjZXBvaW50KCppdGVyKTsKIAkJfQogCX0KIAltdXRleF91bmxvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKQEAgLTMyNiw4ICszMjYsOCBAQAogc3RhdGljIHZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVzKHZvaWQpCiB7CiAJLyogQ29yZSBrZXJuZWwgdHJhY2Vwb2ludHMgKi8KLQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShfX3N0YXJ0X19fdHJhY2Vwb2ludHMsCi0JCV9fc3RvcF9fX3RyYWNlcG9pbnRzKTsKKwl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShfX3N0YXJ0X19fdHJhY2Vwb2ludHNfcHRycywKKwkJX19zdG9wX19fdHJhY2Vwb2ludHNfcHRycyk7CiAJLyogdHJhY2Vwb2ludHMgaW4gbW9kdWxlcy4gKi8KIAltb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKCk7CiB9CkBAIC01MTQsOCArNTE0LDggQEAKICAqIFdpbGwgcmV0dXJuIHRoZSBmaXJzdCB0cmFjZXBvaW50IGluIHRoZSByYW5nZSBpZiB0aGUgaW5wdXQgdHJhY2Vwb2ludCBpcwogICogTlVMTC4KICAqLwotaW50IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKip0cmFjZXBvaW50LAotCXN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK2ludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpCiB7CiAJaWYgKCEqdHJhY2Vwb2ludCAmJiBiZWdpbiAhPSBlbmQpIHsKIAkJKnRyYWNlcG9pbnQgPSBiZWdpbjsKQEAgLTUzNCw3ICs1MzQsOCBAQAogCS8qIENvcmUga2VybmVsIHRyYWNlcG9pbnRzICovCiAJaWYgKCFpdGVyLT5tb2R1bGUpIHsKIAkJZm91bmQgPSB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKCZpdGVyLT50cmFjZXBvaW50LAotCQkJCV9fc3RhcnRfX190cmFjZXBvaW50cywgX19zdG9wX19fdHJhY2Vwb2ludHMpOworCQkJCV9fc3RhcnRfX190cmFjZXBvaW50c19wdHJzLAorCQkJCV9fc3RvcF9fX3RyYWNlcG9pbnRzX3B0cnMpOwogCQlpZiAoZm91bmQpCiAJCQlnb3RvIGVuZDsKIAl9CkBAIC01ODUsOCArNTg2LDggQEAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgTU9EVUxFX1NUQVRFX0NPTUlORzoKIAljYXNlIE1PRFVMRV9TVEFURV9HT0lORzoKLQkJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT50cmFjZXBvaW50cywKLQkJCW1vZC0+dHJhY2Vwb2ludHMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CisJCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHNfcHRycywKKwkJCW1vZC0+dHJhY2Vwb2ludHNfcHRycyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dhdGNoZG9nLmMgYi9rZXJuZWwvd2F0Y2hkb2cuYwppbmRleCBkN2ViZGY0Li4xOGJiMTU3IDEwMDY0NAotLS0gYS9rZXJuZWwvd2F0Y2hkb2cuYworKysgYi9rZXJuZWwvd2F0Y2hkb2cuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAotaW50IHdhdGNoZG9nX2VuYWJsZWQ7CitpbnQgd2F0Y2hkb2dfZW5hYmxlZCA9IDE7CiBpbnQgX19yZWFkX21vc3RseSBzb2Z0bG9ja3VwX3RocmVzaCA9IDYwOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgd2F0Y2hkb2dfdG91Y2hfdHMpOwpAQCAtNDMsOSArNDMsNiBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2V2ZW50ICosIHdhdGNoZG9nX2V2KTsKICNlbmRpZgogCi1zdGF0aWMgaW50IG5vX3dhdGNoZG9nOwotCi0KIC8qIGJvb3QgY29tbWFuZHMgKi8KIC8qCiAgKiBTaG91bGQgd2UgcGFuaWMgd2hlbiBhIHNvZnQtbG9ja3VwIG9yIGhhcmQtbG9ja3VwIG9jY3VyczoKQEAgLTU4LDcgKzU1LDcgQEAKIAlpZiAoIXN0cm5jbXAoc3RyLCAicGFuaWMiLCA1KSkKIAkJaGFyZGxvY2t1cF9wYW5pYyA9IDE7CiAJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiMCIsIDEpKQotCQlub193YXRjaGRvZyA9IDE7CisJCXdhdGNoZG9nX2VuYWJsZWQgPSAwOwogCXJldHVybiAxOwogfQogX19zZXR1cCgibm1pX3dhdGNoZG9nPSIsIGhhcmRsb2NrdXBfcGFuaWNfc2V0dXApOwpAQCAtNzcsNyArNzQsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBub3dhdGNoZG9nX3NldHVwKGNoYXIgKnN0cikKIHsKLQlub193YXRjaGRvZyA9IDE7CisJd2F0Y2hkb2dfZW5hYmxlZCA9IDA7CiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJub3dhdGNoZG9nIiwgbm93YXRjaGRvZ19zZXR1cCk7CkBAIC04NSw3ICs4Miw3IEBACiAvKiBkZXByZWNhdGVkICovCiBzdGF0aWMgaW50IF9faW5pdCBub3NvZnRsb2NrdXBfc2V0dXAoY2hhciAqc3RyKQogewotCW5vX3dhdGNoZG9nID0gMTsKKwl3YXRjaGRvZ19lbmFibGVkID0gMDsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5vc29mdGxvY2t1cCIsIG5vc29mdGxvY2t1cF9zZXR1cCk7CkBAIC0zNjYsOCArMzYzLDE0IEBACiAJCWdvdG8gb3V0X3NhdmU7CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJOTUkgd2F0Y2hkb2cgZGlzYWJsZWQgZm9yIGNwdSVpOiB1bmFibGUgdG8gY3JlYXRlIHBlcmYgZXZlbnQ6ICVsZFxuIiwKLQkgICAgICAgY3B1LCBQVFJfRVJSKGV2ZW50KSk7CisKKwkvKiB2YXJ5IHRoZSBLRVJOIGxldmVsIGJhc2VkIG9uIHRoZSByZXR1cm5lZCBlcnJubyAqLworCWlmIChQVFJfRVJSKGV2ZW50KSA9PSAtRU9QTk9UU1VQUCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTk1JIHdhdGNoZG9nIGRpc2FibGVkIChjcHUlaSk6IG5vdCBzdXBwb3J0ZWQgKG5vIExBUElDPylcbiIsIGNwdSk7CisJZWxzZSBpZiAoUFRSX0VSUihldmVudCkgPT0gLUVOT0VOVCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk1JIHdhdGNoZG9nIGRpc2FibGVkIChjcHUlaSk6IGhhcmR3YXJlIGV2ZW50cyBub3QgZW5hYmxlZFxuIiwgY3B1KTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiTk1JIHdhdGNoZG9nIGRpc2FibGVkIChjcHUlaSk6IHVuYWJsZSB0byBjcmVhdGUgcGVyZiBldmVudDogJWxkXG4iLCBjcHUsIFBUUl9FUlIoZXZlbnQpKTsKIAlyZXR1cm4gUFRSX0VSUihldmVudCk7CiAKIAkvKiBzdWNjZXNzIHBhdGggKi8KQEAgLTQzMiw5ICs0MzUsNiBAQAogCQl3YWtlX3VwX3Byb2Nlc3MocCk7CiAJfQogCi0JLyogaWYgYW55IGNwdSBzdWNjZWVkcywgd2F0Y2hkb2cgaXMgY29uc2lkZXJlZCBlbmFibGVkIGZvciB0aGUgc3lzdGVtICovCi0Jd2F0Y2hkb2dfZW5hYmxlZCA9IDE7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYyLDEyICs0NjIsMTYgQEAKIHN0YXRpYyB2b2lkIHdhdGNoZG9nX2VuYWJsZV9hbGxfY3B1cyh2b2lkKQogewogCWludCBjcHU7Ci0JaW50IHJlc3VsdCA9IDA7CisKKwl3YXRjaGRvZ19lbmFibGVkID0gMDsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlyZXN1bHQgKz0gd2F0Y2hkb2dfZW5hYmxlKGNwdSk7CisJCWlmICghd2F0Y2hkb2dfZW5hYmxlKGNwdSkpCisJCQkvKiBpZiBhbnkgY3B1IHN1Y2NlZWRzLCB3YXRjaGRvZyBpcyBjb25zaWRlcmVkCisJCQkgICBlbmFibGVkIGZvciB0aGUgc3lzdGVtICovCisJCQl3YXRjaGRvZ19lbmFibGVkID0gMTsKIAotCWlmIChyZXN1bHQpCisJaWYgKCF3YXRjaGRvZ19lbmFibGVkKQogCQlwcmludGsoS0VSTl9FUlIgIndhdGNoZG9nOiBmYWlsZWQgdG8gYmUgZW5hYmxlZCBvbiBzb21lIGNwdXNcbiIpOwogCiB9CkBAIC00NzYsOSArNDgwLDYgQEAKIHsKIAlpbnQgY3B1OwogCi0JaWYgKG5vX3dhdGNoZG9nKQotCQlyZXR1cm47Ci0KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKIAkJd2F0Y2hkb2dfZGlzYWJsZShjcHUpOwogCkBAIC00OTgsMTAgKzQ5OSwxMiBAQAogewogCXByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7CiAKLQlpZiAod2F0Y2hkb2dfZW5hYmxlZCkKLQkJd2F0Y2hkb2dfZW5hYmxlX2FsbF9jcHVzKCk7Ci0JZWxzZQotCQl3YXRjaGRvZ19kaXNhYmxlX2FsbF9jcHVzKCk7CisJaWYgKHdyaXRlKSB7CisJCWlmICh3YXRjaGRvZ19lbmFibGVkKQorCQkJd2F0Y2hkb2dfZW5hYmxlX2FsbF9jcHVzKCk7CisJCWVsc2UKKwkJCXdhdGNoZG9nX2Rpc2FibGVfYWxsX2NwdXMoKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUzMCw3ICs1MzMsOCBAQAogCQlicmVhazsKIAljYXNlIENQVV9PTkxJTkU6CiAJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQkJZXJyID0gd2F0Y2hkb2dfZW5hYmxlKGhvdGNwdSk7CisJCWlmICh3YXRjaGRvZ19lbmFibGVkKQorCQkJZXJyID0gd2F0Y2hkb2dfZW5hYmxlKGhvdGNwdSk7CiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgpAQCAtNTU1LDkgKzU1OSw2IEBACiAJdm9pZCAqY3B1ID0gKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGVycjsKIAotCWlmIChub193YXRjaGRvZykKLQkJcmV0dXJuOwotCiAJZXJyID0gY3B1X2NhbGxiYWNrKCZjcHVfbmZiLCBDUFVfVVBfUFJFUEFSRSwgY3B1KTsKIAlXQVJOX09OKG5vdGlmaWVyX3RvX2Vycm5vKGVycikpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggMTE4NjlmYS4uZWU2NTc4YiAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtNzksNyArNzksOSBAQAogCU1BWF9JRExFX1dPUktFUlNfUkFUSU8JPSA0LAkJLyogMS80IG9mIGJ1c3kgY2FuIGJlIGlkbGUgKi8KIAlJRExFX1dPUktFUl9USU1FT1VUCT0gMzAwICogSFosCS8qIGtlZXAgaWRsZSBvbmVzIGZvciA1IG1pbnMgKi8KIAotCU1BWURBWV9JTklUSUFMX1RJTUVPVVQJPSBIWiAvIDEwMCwJLyogY2FsbCBmb3IgaGVscCBhZnRlciAxMG1zICovCisJTUFZREFZX0lOSVRJQUxfVElNRU9VVCAgPSBIWiAvIDEwMCA+PSAyID8gSFogLyAxMDAgOiAyLAorCQkJCQkJLyogY2FsbCBmb3IgaGVscCBhZnRlciAxMG1zCisJCQkJCQkgICAobWluIHR3byB0aWNrcykgKi8KIAlNQVlEQVlfSU5URVJWQUwJCT0gSFogLyAxMCwJLyogYW5kIHRoZW4gZXZlcnkgMTAwbXMgKi8KIAlDUkVBVEVfQ09PTERPV04JCT0gSFosCQkvKiB0aW1lIHRvIGJyZWF0aCBhZnRlciBmYWlsICovCiAJVFJVU1RFRV9DT09MRE9XTgk9IEhaIC8gMTAsCS8qIGZvciB0cnVzdGVlIGRyYWluaW5nICovCkBAIC0yMDQ3LDYgKzIwNDksMTUgQEAKIAkJCQltb3ZlX2xpbmtlZF93b3Jrcyh3b3JrLCBzY2hlZHVsZWQsICZuKTsKIAogCQlwcm9jZXNzX3NjaGVkdWxlZF93b3JrcyhyZXNjdWVyKTsKKworCQkvKgorCQkgKiBMZWF2ZSB0aGlzIGdjd3EuICBJZiBrZWVwX3dvcmtpbmcoKSBpcyAldHJ1ZSwgbm90aWZ5IGEKKwkJICogcmVndWxhciB3b3JrZXI7IG90aGVyd2lzZSwgd2UgZW5kIHVwIHdpdGggMCBjb25jdXJyZW5jeQorCQkgKiBhbmQgc3RhbGxpbmcgdGhlIGV4ZWN1dGlvbi4KKwkJICovCisJCWlmIChrZWVwX3dvcmtpbmcoZ2N3cSkpCisJCQl3YWtlX3VwX3dvcmtlcihnY3dxKTsKKwogCQlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOwogCX0KIApAQCAtMjk1Niw3ICsyOTY3LDcgQEAKIAkgKi8KIAlzcGluX2xvY2soJndvcmtxdWV1ZV9sb2NrKTsKIAotCWlmICh3b3JrcXVldWVfZnJlZXppbmcgJiYgd3EtPmZsYWdzICYgV1FfRlJFRVpFQUJMRSkKKwlpZiAod29ya3F1ZXVlX2ZyZWV6aW5nICYmIHdxLT5mbGFncyAmIFdRX0ZSRUVaQUJMRSkKIAkJZm9yX2VhY2hfY3dxX2NwdShjcHUsIHdxKQogCQkJZ2V0X2N3cShjcHUsIHdxKS0+bWF4X2FjdGl2ZSA9IDA7CiAKQEAgLTMwNjgsNyArMzA3OSw3IEBACiAKIAkJc3Bpbl9sb2NrX2lycSgmZ2N3cS0+bG9jayk7CiAKLQkJaWYgKCEod3EtPmZsYWdzICYgV1FfRlJFRVpFQUJMRSkgfHwKKwkJaWYgKCEod3EtPmZsYWdzICYgV1FfRlJFRVpBQkxFKSB8fAogCQkgICAgIShnY3dxLT5mbGFncyAmIEdDV1FfRlJFRVpJTkcpKQogCQkJZ2V0X2N3cShnY3dxLT5jcHUsIHdxKS0+bWF4X2FjdGl2ZSA9IG1heF9hY3RpdmU7CiAKQEAgLTMzMTgsNyArMzMyOSw3IEBACiAJICogd2FudCB0byBnZXQgaXQgb3ZlciB3aXRoIEFTQVAgLSBzcGFtIHJlc2N1ZXJzLCB3YWtlIHVwIGFzCiAJICogbWFueSBpZGxlcnMgYXMgbmVjZXNzYXJ5IGFuZCBjcmVhdGUgbmV3IG9uZXMgdGlsbCB0aGUKIAkgKiB3b3JrbGlzdCBpcyBlbXB0eS4gIE5vdGUgdGhhdCBpZiB0aGUgZ2N3cSBpcyBmcm96ZW4sIHRoZXJlCi0JICogbWF5IGJlIGZyb3plbiB3b3JrcyBpbiBmcmVlemVhYmxlIGN3cXMuICBEb24ndCBkZWNsYXJlCisJICogbWF5IGJlIGZyb3plbiB3b3JrcyBpbiBmcmVlemFibGUgY3dxcy4gIERvbid0IGRlY2xhcmUKIAkgKiBjb21wbGV0aW9uIHdoaWxlIGZyb3plbi4KIAkgKi8KIAl3aGlsZSAoZ2N3cS0+bnJfd29ya2VycyAhPSBnY3dxLT5ucl9pZGxlIHx8CkBAIC0zNTc2LDkgKzM1ODcsOSBAQAogLyoqCiAgKiBmcmVlemVfd29ya3F1ZXVlc19iZWdpbiAtIGJlZ2luIGZyZWV6aW5nIHdvcmtxdWV1ZXMKICAqCi0gKiBTdGFydCBmcmVlemluZyB3b3JrcXVldWVzLiAgQWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBhbGwKLSAqIGZyZWV6ZWFibGUgd29ya3F1ZXVlcyB3aWxsIHF1ZXVlIG5ldyB3b3JrcyB0byB0aGVpciBmcm96ZW5fd29ya3MKLSAqIGxpc3QgaW5zdGVhZCBvZiBnY3dxLT53b3JrbGlzdC4KKyAqIFN0YXJ0IGZyZWV6aW5nIHdvcmtxdWV1ZXMuICBBZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIGFsbCBmcmVlemFibGUKKyAqIHdvcmtxdWV1ZXMgd2lsbCBxdWV1ZSBuZXcgd29ya3MgdG8gdGhlaXIgZnJvemVuX3dvcmtzIGxpc3QgaW5zdGVhZCBvZgorICogZ2N3cS0+d29ya2xpc3QuCiAgKgogICogQ09OVEVYVDoKICAqIEdyYWJzIGFuZCByZWxlYXNlcyB3b3JrcXVldWVfbG9jayBhbmQgZ2N3cS0+bG9jaydzLgpAQCAtMzYwNCw3ICszNjE1LDcgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpIHsKIAkJCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gZ2V0X2N3cShjcHUsIHdxKTsKIAotCQkJaWYgKGN3cSAmJiB3cS0+ZmxhZ3MgJiBXUV9GUkVFWkVBQkxFKQorCQkJaWYgKGN3cSAmJiB3cS0+ZmxhZ3MgJiBXUV9GUkVFWkFCTEUpCiAJCQkJY3dxLT5tYXhfYWN0aXZlID0gMDsKIAkJfQogCkBAIC0zNjE1LDcgKzM2MjYsNyBAQAogfQogCiAvKioKLSAqIGZyZWV6ZV93b3JrcXVldWVzX2J1c3kgLSBhcmUgZnJlZXplYWJsZSB3b3JrcXVldWVzIHN0aWxsIGJ1c3k/CisgKiBmcmVlemVfd29ya3F1ZXVlc19idXN5IC0gYXJlIGZyZWV6YWJsZSB3b3JrcXVldWVzIHN0aWxsIGJ1c3k/CiAgKgogICogQ2hlY2sgd2hldGhlciBmcmVlemluZyBpcyBjb21wbGV0ZS4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKICAqIGJldHdlZW4gZnJlZXplX3dvcmtxdWV1ZXNfYmVnaW4oKSBhbmQgdGhhd193b3JrcXVldWVzKCkuCkBAIC0zNjI0LDggKzM2MzUsOCBAQAogICogR3JhYnMgYW5kIHJlbGVhc2VzIHdvcmtxdWV1ZV9sb2NrLgogICoKICAqIFJFVFVSTlM6Ci0gKiAldHJ1ZSBpZiBzb21lIGZyZWV6ZWFibGUgd29ya3F1ZXVlcyBhcmUgc3RpbGwgYnVzeS4gICVmYWxzZSBpZgotICogZnJlZXppbmcgaXMgY29tcGxldGUuCisgKiAldHJ1ZSBpZiBzb21lIGZyZWV6YWJsZSB3b3JrcXVldWVzIGFyZSBzdGlsbCBidXN5LiAgJWZhbHNlIGlmIGZyZWV6aW5nCisgKiBpcyBjb21wbGV0ZS4KICAqLwogYm9vbCBmcmVlemVfd29ya3F1ZXVlc19idXN5KHZvaWQpCiB7CkBAIC0zNjQ1LDcgKzM2NTYsNyBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdxLCAmd29ya3F1ZXVlcywgbGlzdCkgewogCQkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfY3dxKGNwdSwgd3EpOwogCi0JCQlpZiAoIWN3cSB8fCAhKHdxLT5mbGFncyAmIFdRX0ZSRUVaRUFCTEUpKQorCQkJaWYgKCFjd3EgfHwgISh3cS0+ZmxhZ3MgJiBXUV9GUkVFWkFCTEUpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlCVUdfT04oY3dxLT5ucl9hY3RpdmUgPCAwKTsKQEAgLTM2OTAsNyArMzcwMSw3IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkod3EsICZ3b3JrcXVldWVzLCBsaXN0KSB7CiAJCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSA9IGdldF9jd3EoY3B1LCB3cSk7CiAKLQkJCWlmICghY3dxIHx8ICEod3EtPmZsYWdzICYgV1FfRlJFRVpFQUJMRSkpCisJCQlpZiAoIWN3cSB8fCAhKHdxLT5mbGFncyAmIFdRX0ZSRUVaQUJMRSkpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIHJlc3RvcmUgbWF4X2FjdGl2ZSBhbmQgcmVwb3B1bGF0ZSB3b3JrbGlzdCAqLwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCAzOTY3YzIzNS4uMmI5NzQxOCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTgwNSw3ICs4MDUsNyBAQAogY29uZmlnIEZSQU1FX1BPSU5URVIKIAlib29sICJDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBmcmFtZSBwb2ludGVycyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBcCi0JCShDUklTIHx8IE02OEsgfHwgTTY4S05PTU1VIHx8IEZSViB8fCBVTUwgfHwgXAorCQkoQ1JJUyB8fCBNNjhLIHx8IEZSViB8fCBVTUwgfHwgXAogCQkgQVZSMzIgfHwgU1VQRVJIIHx8IEJMQUNLRklOIHx8IE1OMTAzMDApIHx8IFwKIAkJQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTCiAJZGVmYXVsdCB5IGlmIChERUJVR19JTkZPICYmIFVNTCkgfHwgQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTCmRpZmYgLS1naXQgYS9saWIvbGlzdF9kZWJ1Zy5jIGIvbGliL2xpc3RfZGVidWcuYwppbmRleCAzNDRjNzEwLi5iODAyOWE1IDEwMDY0NAotLS0gYS9saWIvbGlzdF9kZWJ1Zy5jCisrKyBiL2xpYi9saXN0X2RlYnVnLmMKQEAgLTM1LDYgKzM1LDMxIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fbGlzdF9hZGQpOwogCit2b2lkIF9fbGlzdF9kZWxfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcHJldiwgKm5leHQ7CisKKwlwcmV2ID0gZW50cnktPnByZXY7CisJbmV4dCA9IGVudHJ5LT5uZXh0OworCisJaWYgKFdBUk4obmV4dCA9PSBMSVNUX1BPSVNPTjEsCisJCSJsaXN0X2RlbCBjb3JydXB0aW9uLCAlcC0+bmV4dCBpcyBMSVNUX1BPSVNPTjEgKCVwKVxuIiwKKwkJZW50cnksIExJU1RfUE9JU09OMSkgfHwKKwkgICAgV0FSTihwcmV2ID09IExJU1RfUE9JU09OMiwKKwkJImxpc3RfZGVsIGNvcnJ1cHRpb24sICVwLT5wcmV2IGlzIExJU1RfUE9JU09OMiAoJXApXG4iLAorCQllbnRyeSwgTElTVF9QT0lTT04yKSB8fAorCSAgICBXQVJOKHByZXYtPm5leHQgIT0gZW50cnksCisJCSJsaXN0X2RlbCBjb3JydXB0aW9uLiBwcmV2LT5uZXh0IHNob3VsZCBiZSAlcCwgIgorCQkiYnV0IHdhcyAlcFxuIiwgZW50cnksIHByZXYtPm5leHQpIHx8CisJICAgIFdBUk4obmV4dC0+cHJldiAhPSBlbnRyeSwKKwkJImxpc3RfZGVsIGNvcnJ1cHRpb24uIG5leHQtPnByZXYgc2hvdWxkIGJlICVwLCAiCisJCSJidXQgd2FzICVwXG4iLCBlbnRyeSwgbmV4dC0+cHJldikpCisJCXJldHVybjsKKworCV9fbGlzdF9kZWwocHJldiwgbmV4dCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fbGlzdF9kZWxfZW50cnkpOworCiAvKioKICAqIGxpc3RfZGVsIC0gZGVsZXRlcyBlbnRyeSBmcm9tIGxpc3QuCiAgKiBAZW50cnk6IHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgpAQCAtNDMsMTkgKzY4LDcgQEAKICAqLwogdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKIHsKLQlXQVJOKGVudHJ5LT5uZXh0ID09IExJU1RfUE9JU09OMSwKLQkJImxpc3RfZGVsIGNvcnJ1cHRpb24sIG5leHQgaXMgTElTVF9QT0lTT04xICglcClcbiIsCi0JCUxJU1RfUE9JU09OMSk7Ci0JV0FSTihlbnRyeS0+bmV4dCAhPSBMSVNUX1BPSVNPTjEgJiYgZW50cnktPnByZXYgPT0gTElTVF9QT0lTT04yLAotCQkibGlzdF9kZWwgY29ycnVwdGlvbiwgcHJldiBpcyBMSVNUX1BPSVNPTjIgKCVwKVxuIiwKLQkJTElTVF9QT0lTT04yKTsKLQlXQVJOKGVudHJ5LT5wcmV2LT5uZXh0ICE9IGVudHJ5LAotCQkibGlzdF9kZWwgY29ycnVwdGlvbi4gcHJldi0+bmV4dCBzaG91bGQgYmUgJXAsICIKLQkJImJ1dCB3YXMgJXBcbiIsIGVudHJ5LCBlbnRyeS0+cHJldi0+bmV4dCk7Ci0JV0FSTihlbnRyeS0+bmV4dC0+cHJldiAhPSBlbnRyeSwKLQkJImxpc3RfZGVsIGNvcnJ1cHRpb24uIG5leHQtPnByZXYgc2hvdWxkIGJlICVwLCAiCi0JCSJidXQgd2FzICVwXG4iLCBlbnRyeSwgZW50cnktPm5leHQtPnByZXYpOwotCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwlfX2xpc3RfZGVsX2VudHJ5KGVudHJ5KTsKIAllbnRyeS0+bmV4dCA9IExJU1RfUE9JU09OMTsKIAllbnRyeS0+cHJldiA9IExJU1RfUE9JU09OMjsKIH0KZGlmZiAtLWdpdCBhL2xpYi9ubGF0dHIuYyBiL2xpYi9ubGF0dHIuYwppbmRleCA1MDIxY2JjLi5hYzA5ZjIyIDEwMDY0NAotLS0gYS9saWIvbmxhdHRyLmMKKysrIGIvbGliL25sYXR0ci5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIHsKIAlpbnQgaSwgbGVuID0gMDsKIAotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBwKyspIHsKIAkJaWYgKHAtPmxlbikKIAkJCWxlbiArPSBubGFfdG90YWxfc2l6ZShwLT5sZW4pOwogCQllbHNlIGlmIChubGFfYXR0cl9taW5sZW5bcC0+dHlwZV0pCmRpZmYgLS1naXQgYS9saWIvcmJ0cmVlLmMgYi9saWIvcmJ0cmVlLmMKaW5kZXggNDY5M2Y3OS4uYTE2YmUxOSAxMDA2NDQKLS0tIGEvbGliL3JidHJlZS5jCisrKyBiL2xpYi9yYnRyZWUuYwpAQCAtMzE1LDYgKzMxNSw3IEBACiAKIAlyYl9hdWdtZW50X3BhdGgobm9kZSwgZnVuYywgZGF0YSk7CiB9CitFWFBPUlRfU1lNQk9MKHJiX2F1Z21lbnRfaW5zZXJ0KTsKIAogLyoKICAqIGJlZm9yZSByZW1vdmluZyB0aGUgbm9kZSwgZmluZCB0aGUgZGVlcGVzdCBub2RlIG9uIHRoZSByZWJhbGFuY2UgcGF0aApAQCAtMzQwLDYgKzM0MSw3IEBACiAKIAlyZXR1cm4gZGVlcGVzdDsKIH0KK0VYUE9SVF9TWU1CT0wocmJfYXVnbWVudF9lcmFzZV9iZWdpbik7CiAKIC8qCiAgKiBhZnRlciByZW1vdmFsLCB1cGRhdGUgdGhlIHRyZWUgdG8gYWNjb3VudCBmb3IgdGhlIHJlbW92ZWQgZW50cnkKQEAgLTM1MCw2ICszNTIsNyBAQAogCWlmIChub2RlKQogCQlyYl9hdWdtZW50X3BhdGgobm9kZSwgZnVuYywgZGF0YSk7CiB9CitFWFBPUlRfU1lNQk9MKHJiX2F1Z21lbnRfZXJhc2VfZW5kKTsKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3Qgbm9kZSAoaW4gc29ydCBvcmRlcikgb2YgdGhlIHRyZWUuCmRpZmYgLS1naXQgYS9saWIvc3dpb3RsYi5jIGIvbGliL3N3aW90bGIuYwppbmRleCBjNDdiYmUxLi45M2NhMDhiIDEwMDY0NAotLS0gYS9saWIvc3dpb3RsYi5jCisrKyBiL2xpYi9zd2lvdGxiLmMKQEAgLTY4Niw4ICs2ODYsMTAgQEAKIAkvKgogCSAqIEVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzIHJldHVybmVkIGlzIERNQSdibGUKIAkgKi8KLQlpZiAoIWRtYV9jYXBhYmxlKGRldiwgZGV2X2FkZHIsIHNpemUpKQotCQlwYW5pYygibWFwX3NpbmdsZTogYm91bmNlIGJ1ZmZlciBpcyBub3QgRE1BJ2JsZSIpOworCWlmICghZG1hX2NhcGFibGUoZGV2LCBkZXZfYWRkciwgc2l6ZSkpIHsKKwkJc3dpb3RsYl90YmxfdW5tYXBfc2luZ2xlKGRldiwgbWFwLCBzaXplLCBkaXIpOworCQlkZXZfYWRkciA9IHN3aW90bGJfdmlydF90b19idXMoZGV2LCBpb190bGJfb3ZlcmZsb3dfYnVmZmVyKTsKKwl9CiAKIAlyZXR1cm4gZGV2X2FkZHI7CiB9CmRpZmYgLS1naXQgYS9saWIvdGV4dHNlYXJjaC5jIGIvbGliL3RleHRzZWFyY2guYwppbmRleCBkNjA4MzMxLi5lMGNjMDE0IDEwMDY0NAotLS0gYS9saWIvdGV4dHNlYXJjaC5jCisrKyBiL2xpYi90ZXh0c2VhcmNoLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAqCiAgKiBJTlRST0RVQ1RJT04KICAqCi0gKiAgIFRoZSB0ZXh0c2VhcmNoIGluZnJhc3RydWN0dXJlIHByb3ZpZGVzIHRleHQgc2VhcmNoaW5nIGZhY2l0aWxpZXMgZm9yCisgKiAgIFRoZSB0ZXh0c2VhcmNoIGluZnJhc3RydWN0dXJlIHByb3ZpZGVzIHRleHQgc2VhcmNoaW5nIGZhY2lsaXRpZXMgZm9yCiAgKiAgIGJvdGggbGluZWFyIGFuZCBub24tbGluZWFyIGRhdGEuIEluZGl2aWR1YWwgc2VhcmNoIGFsZ29yaXRobXMgYXJlCiAgKiAgIGltcGxlbWVudGVkIGluIG1vZHVsZXMgYW5kIGNob3NlbiBieSB0aGUgdXNlci4KICAqCkBAIC00Myw3ICs0Myw3IEBACiAgKiAgICAgICB0byB0aGUgYWxnb3JpdGhtIHRvIHN0b3JlIHBlcnNpc3RlbnQgdmFyaWFibGVzLgogICogICAoNCkgQ29yZSBldmVudHVhbGx5IHJlc2V0cyB0aGUgc2VhcmNoIG9mZnNldCBhbmQgZm9yd2FyZHMgdGhlIGZpbmQoKQogICogICAgICAgcmVxdWVzdCB0byB0aGUgYWxnb3JpdGhtLgotICogICAoNSkgQWxnb3JpdGhtIGNhbGxzIGdldF9uZXh0X2Jsb2NrKCkgcHJvdmlkZWQgYnkgdGhlIHVzZXIgY29udGlub3VzbHkKKyAqICAgKDUpIEFsZ29yaXRobSBjYWxscyBnZXRfbmV4dF9ibG9jaygpIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGNvbnRpbnVvdXNseQogICogICAgICAgdG8gZmV0Y2ggdGhlIGRhdGEgdG8gYmUgc2VhcmNoZWQgaW4gYmxvY2sgYnkgYmxvY2suCiAgKiAgICg2KSBBbGdvcml0aG0gaW52b2tlcyBmaW5pc2goKSBhZnRlciB0aGUgbGFzdCBjYWxsIHRvIGdldF9uZXh0X2Jsb2NrCiAgKiAgICAgICB0byBjbGVhbiB1cCBhbnkgbGVmdG92ZXJzIGZyb20gZ2V0X25leHRfYmxvY2suIChPcHRpb25hbCkKQEAgLTU4LDE1ICs1OCwxNSBAQAogICogICB0aGUgcGF0dGVybiB0byBsb29rIGZvciBhbmQgZmxhZ3MuIEFzIGEgZmxhZywgeW91IGNhbiBzZXQgVFNfSUdOT1JFQ0FTRQogICogICB0byBwZXJmb3JtIGNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmcuIEJ1dCBpdCBtaWdodCBzbG93IGRvd24KICAqICAgcGVyZm9ybWFuY2Ugb2YgYWxnb3JpdGhtLCBzbyB5b3Ugc2hvdWxkIHVzZSBpdCBhdCBvd24geW91ciByaXNrLgotICogICBUaGUgcmV0dXJuZWQgY29uZmlndXJhdGlvbiBtYXkgdGhlbiBiZSB1c2VkIGZvciBhbiBhcmJpdGFyeQorICogICBUaGUgcmV0dXJuZWQgY29uZmlndXJhdGlvbiBtYXkgdGhlbiBiZSB1c2VkIGZvciBhbiBhcmJpdHJhcnkKICAqICAgYW1vdW50IG9mIHRpbWVzIGFuZCBldmVuIGluIHBhcmFsbGVsIGFzIGxvbmcgYXMgYSBzZXBhcmF0ZSBzdHJ1Y3QKICAqICAgdHNfc3RhdGUgdmFyaWFibGUgaXMgcHJvdmlkZWQgdG8gZXZlcnkgaW5zdGFuY2UuCiAgKgogICogICBUaGUgYWN0dWFsIHNlYXJjaCBpcyBwZXJmb3JtZWQgYnkgZWl0aGVyIGNhbGxpbmcgdGV4dHNlYXJjaF9maW5kXy0KICAqICAgY29udGludW91cygpIGZvciBsaW5lYXIgZGF0YSBvciBieSBwcm92aWRpbmcgYW4gb3duIGdldF9uZXh0X2Jsb2NrKCkKICAqICAgaW1wbGVtZW50YXRpb24gYW5kIGNhbGxpbmcgdGV4dHNlYXJjaF9maW5kKCkuIEJvdGggZnVuY3Rpb25zIHJldHVybgotICogICB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHBhdGVybiBvciBVSU5UX01BWCBpZgotICogICBubyBtYXRjaCB3YXMgZm91bmQuIFN1YnNlcXVlbnQgb2NjdXJlbmNlcyBjYW4gYmUgZm91bmQgYnkgY2FsbGluZworICogICB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHBhdHRlcm4gb3IgVUlOVF9NQVggaWYKKyAqICAgbm8gbWF0Y2ggd2FzIGZvdW5kLiBTdWJzZXF1ZW50IG9jY3VycmVuY2VzIGNhbiBiZSBmb3VuZCBieSBjYWxsaW5nCiAgKiAgIHRleHRzZWFyY2hfbmV4dCgpIHJlZ2FyZGxlc3Mgb2YgdGhlIGxpbmVhcml0eSBvZiB0aGUgZGF0YS4KICAqCiAgKiAgIE9uY2UgeW91J3JlIGRvbmUgdXNpbmcgYSBjb25maWd1cmF0aW9uIGl0IG11c3QgYmUgZ2l2ZW4gYmFjayB2aWEKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IGUxODc0NTQuLmRiZTk5YTUgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKKysrIGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNjUwLDEwICs2NTAsMTAgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfaHVnZXBhZ2Vfdm1hKGludCBkZWZyYWcsCiAJCQkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGhhZGRyKQorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGhhZGRyLCBpbnQgbmQpCiB7CiAJcmV0dXJuIGFsbG9jX3BhZ2VzX3ZtYShhbGxvY19odWdlcGFnZV9nZnBtYXNrKGRlZnJhZyksCi0JCQkgICAgICAgSFBBR0VfUE1EX09SREVSLCB2bWEsIGhhZGRyKTsKKwkJCSAgICAgICBIUEFHRV9QTURfT1JERVIsIHZtYSwgaGFkZHIsIG5kKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfTlVNQQpAQCAtNjc4LDcgKzY3OCw3IEBACiAJCWlmICh1bmxpa2VseShraHVnZXBhZ2VkX2VudGVyKHZtYSkpKQogCQkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAkJcGFnZSA9IGFsbG9jX2h1Z2VwYWdlX3ZtYSh0cmFuc3BhcmVudF9odWdlcGFnZV9kZWZyYWcodm1hKSwKLQkJCQkJICB2bWEsIGhhZGRyKTsKKwkJCQkJICB2bWEsIGhhZGRyLCBudW1hX25vZGVfaWQoKSk7CiAJCWlmICh1bmxpa2VseSghcGFnZSkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfbmV3cGFnZV9jaGFyZ2UocGFnZSwgbW0sIEdGUF9LRVJORUwpKSkgewpAQCAtNzk5LDggKzc5OSw4IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEhQQUdFX1BNRF9OUjsgaSsrKSB7Ci0JCXBhZ2VzW2ldID0gYWxsb2NfcGFnZV92bWEoR0ZQX0hJR0hVU0VSX01PVkFCTEUsCi0JCQkJCSAgdm1hLCBhZGRyZXNzKTsKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlX3ZtYV9ub2RlKEdGUF9ISUdIVVNFUl9NT1ZBQkxFLAorCQkJCQkgICAgICAgdm1hLCBhZGRyZXNzLCBwYWdlX3RvX25pZChwYWdlKSk7CiAJCWlmICh1bmxpa2VseSghcGFnZXNbaV0gfHwKIAkJCSAgICAgbWVtX2Nncm91cF9uZXdwYWdlX2NoYXJnZShwYWdlc1tpXSwgbW0sCiAJCQkJCQkgICAgICAgR0ZQX0tFUk5FTCkpKSB7CkBAIC05MDIsNyArOTAyLDcgQEAKIAlpZiAodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZW5hYmxlZCh2bWEpICYmCiAJICAgICF0cmFuc3BhcmVudF9odWdlcGFnZV9kZWJ1Z19jb3coKSkKIAkJbmV3X3BhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZGVmcmFnKHZtYSksCi0JCQkJCSAgICAgIHZtYSwgaGFkZHIpOworCQkJCQkgICAgICB2bWEsIGhhZGRyLCBudW1hX25vZGVfaWQoKSk7CiAJZWxzZQogCQluZXdfcGFnZSA9IE5VTEw7CiAKQEAgLTExNjIsNyArMTE2MiwxMiBAQAogCQkvKiBhZnRlciBjbGVhcmluZyBQYWdlVGFpbCB0aGUgZ3VwIHJlZmNvdW50IGNhbiBiZSByZWxlYXNlZCAqLwogCQlzbXBfbWIoKTsKIAotCQlwYWdlX3RhaWwtPmZsYWdzICY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVA7CisJCS8qCisJCSAqIHJldGFpbiBod3BvaXNvbiBmbGFnIG9mIHRoZSBwb2lzb25lZCB0YWlsIHBhZ2U6CisJCSAqICAgZml4IGZvciB0aGUgdW5zdWl0YWJsZSBwcm9jZXNzIGtpbGxlZCBvbiBHdWVzdCBNYWNoaW5lKEtWTSkKKwkJICogICBieSB0aGUgbWVtb3J5LWZhaWx1cmUuCisJCSAqLworCQlwYWdlX3RhaWwtPmZsYWdzICY9IH5QQUdFX0ZMQUdTX0NIRUNLX0FUX1BSRVAgfCBfX1BHX0hXUE9JU09OOwogCQlwYWdlX3RhaWwtPmZsYWdzIHw9IChwYWdlLT5mbGFncyAmCiAJCQkJICAgICAoKDFMIDw8IFBHX3JlZmVyZW5jZWQpIHwKIAkJCQkgICAgICAoMUwgPDwgUEdfc3dhcGJhY2tlZCkgfApAQCAtMTc0MCw3ICsxNzQ1LDggQEAKIHN0YXRpYyB2b2lkIGNvbGxhcHNlX2h1Z2VfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQkgICAgICAgc3RydWN0IHBhZ2UgKipocGFnZSwKLQkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKKwkJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgICBpbnQgbm9kZSkKIHsKIAlwZ2RfdCAqcGdkOwogCXB1ZF90ICpwdWQ7CkBAIC0xNzY4LDcgKzE3NzQsOCBAQAogCSAqIG1tYXBfc2VtIGluIHJlYWQgbW9kZSBpcyBnb29kIGlkZWEgYWxzbyB0byBhbGxvdyBncmVhdGVyCiAJICogc2NhbGFiaWxpdHkuCiAJICovCi0JbmV3X3BhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEoa2h1Z2VwYWdlZF9kZWZyYWcoKSwgdm1hLCBhZGRyZXNzKTsKKwluZXdfcGFnZSA9IGFsbG9jX2h1Z2VwYWdlX3ZtYShraHVnZXBhZ2VkX2RlZnJhZygpLCB2bWEsIGFkZHJlc3MsCisJCQkJICAgICAgbm9kZSk7CiAJaWYgKHVubGlrZWx5KCFuZXdfcGFnZSkpIHsKIAkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJKmhwYWdlID0gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTE4MDYsNiArMTgxMyw4IEBACiAJLyogVk1fUEZOTUFQIHZtYXMgbWF5IGhhdmUgdm1fb3BzIG51bGwgYnV0IHZtX2ZpbGUgc2V0ICovCiAJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzIHx8IHZtYS0+dm1fZmlsZSkKIAkJZ290byBvdXQ7CisJaWYgKGlzX3ZtYV90ZW1wb3Jhcnlfc3RhY2sodm1hKSkKKwkJZ290byBvdXQ7CiAJVk1fQlVHX09OKGlzX2xpbmVhcl9wZm5fbWFwcGluZyh2bWEpIHx8IGlzX3Bmbl9tYXBwaW5nKHZtYSkpOwogCiAJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7CkBAIC0xODQ3LDcgKzE4NTYsNiBAQAogCQlzZXRfcG1kX2F0KG1tLCBhZGRyZXNzLCBwbWQsIF9wbWQpOwogCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJCWFub25fdm1hX3VubG9jayh2bWEtPmFub25fdm1hKTsKLQkJbWVtX2Nncm91cF91bmNoYXJnZV9wYWdlKG5ld19wYWdlKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xODkzLDYgKzE5MDEsNyBAQAogCXJldHVybjsKIAogb3V0OgorCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShuZXdfcGFnZSk7CiAjaWZkZWYgQ09ORklHX05VTUEKIAlwdXRfcGFnZShuZXdfcGFnZSk7CiAjZW5kaWYKQEAgLTE5MTIsNiArMTkyMSw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBfYWRkcmVzczsKIAlzcGlubG9ja190ICpwdGw7CisJaW50IG5vZGUgPSAtMTsKIAogCVZNX0JVR19PTihhZGRyZXNzICYgfkhQQUdFX1BNRF9NQVNLKTsKIApAQCAtMTk0Miw2ICsxOTUyLDEzIEBACiAJCXBhZ2UgPSB2bV9ub3JtYWxfcGFnZSh2bWEsIF9hZGRyZXNzLCBwdGV2YWwpOwogCQlpZiAodW5saWtlbHkoIXBhZ2UpKQogCQkJZ290byBvdXRfdW5tYXA7CisJCS8qCisJCSAqIENob3NlIHRoZSBub2RlIG9mIHRoZSBmaXJzdCBwYWdlLiBUaGlzIGNvdWxkCisJCSAqIGJlIG1vcmUgc29waGlzdGljYXRlZCBhbmQgbG9vayBhdCBtb3JlIHBhZ2VzLAorCQkgKiBidXQgaXNuJ3QgZm9yIG5vdy4KKwkJICovCisJCWlmIChub2RlID09IC0xKQorCQkJbm9kZSA9IHBhZ2VfdG9fbmlkKHBhZ2UpOwogCQlWTV9CVUdfT04oUGFnZUNvbXBvdW5kKHBhZ2UpKTsKIAkJaWYgKCFQYWdlTFJVKHBhZ2UpIHx8IFBhZ2VMb2NrZWQocGFnZSkgfHwgIVBhZ2VBbm9uKHBhZ2UpKQogCQkJZ290byBvdXRfdW5tYXA7CkBAIC0xOTU4LDcgKzE5NzUsNyBAQAogCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOwogCWlmIChyZXQpCiAJCS8qIGNvbGxhcHNlX2h1Z2VfcGFnZSB3aWxsIHJldHVybiB3aXRoIHRoZSBtbWFwX3NlbSByZWxlYXNlZCAqLwotCQljb2xsYXBzZV9odWdlX3BhZ2UobW0sIGFkZHJlc3MsIGhwYWdlLCB2bWEpOworCQljb2xsYXBzZV9odWdlX3BhZ2UobW0sIGFkZHJlc3MsIGhwYWdlLCB2bWEsIG5vZGUpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0yMDI3LDMyICsyMDQ0LDI3IEBACiAJCWlmICgoISh2bWEtPnZtX2ZsYWdzICYgVk1fSFVHRVBBR0UpICYmCiAJCSAgICAgIWtodWdlcGFnZWRfYWx3YXlzKCkpIHx8CiAJCSAgICAodm1hLT52bV9mbGFncyAmIFZNX05PSFVHRVBBR0UpKSB7CisJCXNraXA6CiAJCQlwcm9ncmVzcysrOwogCQkJY29udGludWU7CiAJCX0KLQogCQkvKiBWTV9QRk5NQVAgdm1hcyBtYXkgaGF2ZSB2bV9vcHMgbnVsbCBidXQgdm1fZmlsZSBzZXQgKi8KLQkJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzIHx8IHZtYS0+dm1fZmlsZSkgewotCQkJa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MgPSB2bWEtPnZtX2VuZDsKLQkJCXByb2dyZXNzKys7Ci0JCQljb250aW51ZTsKLQkJfQorCQlpZiAoIXZtYS0+YW5vbl92bWEgfHwgdm1hLT52bV9vcHMgfHwgdm1hLT52bV9maWxlKQorCQkJZ290byBza2lwOworCQlpZiAoaXNfdm1hX3RlbXBvcmFyeV9zdGFjayh2bWEpKQorCQkJZ290byBza2lwOworCiAJCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCBpc19wZm5fbWFwcGluZyh2bWEpKTsKIAogCQloc3RhcnQgPSAodm1hLT52bV9zdGFydCArIH5IUEFHRV9QTURfTUFTSykgJiBIUEFHRV9QTURfTUFTSzsKIAkJaGVuZCA9IHZtYS0+dm1fZW5kICYgSFBBR0VfUE1EX01BU0s7Ci0JCWlmIChoc3RhcnQgPj0gaGVuZCkgewotCQkJcHJvZ3Jlc3MrKzsKLQkJCWNvbnRpbnVlOwotCQl9CisJCWlmIChoc3RhcnQgPj0gaGVuZCkKKwkJCWdvdG8gc2tpcDsKKwkJaWYgKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzID4gaGVuZCkKKwkJCWdvdG8gc2tpcDsKIAkJaWYgKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzIDwgaHN0YXJ0KQogCQkJa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MgPSBoc3RhcnQ7Ci0JCWlmIChraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyA+IGhlbmQpIHsKLQkJCWtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzID0gaGVuZCArIEhQQUdFX1BNRF9TSVpFOwotCQkJcHJvZ3Jlc3MrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCUJVR19PTihraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyAmIH5IUEFHRV9QTURfTUFTSyk7CisJCVZNX0JVR19PTihraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyAmIH5IUEFHRV9QTURfTUFTSyk7CiAKIAkJd2hpbGUgKGtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzIDwgaGVuZCkgewogCQkJaW50IHJldDsKQEAgLTIwODEsNyArMjA5Myw3IEBACiBicmVha291dGVybG9vcF9tbWFwX3NlbToKIAogCXNwaW5fbG9jaygma2h1Z2VwYWdlZF9tbV9sb2NrKTsKLQlCVUdfT04oa2h1Z2VwYWdlZF9zY2FuLm1tX3Nsb3QgIT0gbW1fc2xvdCk7CisJVk1fQlVHX09OKGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IG1tX3Nsb3QpOwogCS8qCiAJICogUmVsZWFzZSB0aGUgY3VycmVudCBtbV9zbG90IGlmIHRoaXMgbW0gaXMgYWJvdXQgdG8gZGllLCBvcgogCSAqIGlmIHdlIHNjYW5uZWQgYWxsIHZtYXMgb2YgdGhpcyBtbS4KQEAgLTIyMzYsOSArMjI0OCw5IEBACiAKIAlmb3IgKDs7KSB7CiAJCW11dGV4X3VubG9jaygma2h1Z2VwYWdlZF9tdXRleCk7Ci0JCUJVR19PTihraHVnZXBhZ2VkX3RocmVhZCAhPSBjdXJyZW50KTsKKwkJVk1fQlVHX09OKGtodWdlcGFnZWRfdGhyZWFkICE9IGN1cnJlbnQpOwogCQlraHVnZXBhZ2VkX2xvb3AoKTsKLQkJQlVHX09OKGtodWdlcGFnZWRfdGhyZWFkICE9IGN1cnJlbnQpOworCQlWTV9CVUdfT04oa2h1Z2VwYWdlZF90aHJlYWQgIT0gY3VycmVudCk7CiAKIAkJbXV0ZXhfbG9jaygma2h1Z2VwYWdlZF9tdXRleCk7CiAJCWlmICgha2h1Z2VwYWdlZF9lbmFibGVkKCkpCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay10ZXN0LmMgYi9tbS9rbWVtbGVhay10ZXN0LmMKaW5kZXggMTc3YTUxNi4uZmYwZDk3NyAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWstdGVzdC5jCisrKyBiL21tL2ttZW1sZWFrLXRlc3QuYwpAQCAtNzUsMTMgKzc1LDExIEBACiAJICogYWZ0ZXIgdGhlIG1vZHVsZSBpcyByZW1vdmVkLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWVsZW0gPSBrbWFsbG9jKHNpemVvZigqZWxlbSksIEdGUF9LRVJORUwpOwotCQlwcl9pbmZvKCJrbWVtbGVhazoga21hbGxvYyhzaXplb2YoKmVsZW0pKSA9ICVwXG4iLCBlbGVtKTsKKwkJZWxlbSA9IGt6YWxsb2Moc2l6ZW9mKCplbGVtKSwgR0ZQX0tFUk5FTCk7CisJCXByX2luZm8oImttZW1sZWFrOiBremFsbG9jKHNpemVvZigqZWxlbSkpID0gJXBcbiIsIGVsZW0pOwogCQlpZiAoIWVsZW0pCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtc2V0KGVsZW0sIDAsIHNpemVvZigqZWxlbSkpOwogCQlJTklUX0xJU1RfSEVBRCgmZWxlbS0+bGlzdCk7Ci0KIAkJbGlzdF9hZGRfdGFpbCgmZWxlbS0+bGlzdCwgJnRlc3RfbGlzdCk7CiAJfQogCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCBiZDliYzIxLi44NDIyNWYzIDEwMDY0NAotLS0gYS9tbS9rbWVtbGVhay5jCisrKyBiL21tL2ttZW1sZWFrLmMKQEAgLTExMyw3ICsxMTMsOSBAQAogI2RlZmluZSBCWVRFU19QRVJfUE9JTlRFUglzaXplb2Yodm9pZCAqKQogCiAvKiBHRlAgYml0bWFzayBmb3Iga21lbWxlYWsgaW50ZXJuYWwgYWxsb2NhdGlvbnMgKi8KLSNkZWZpbmUgR0ZQX0tNRU1MRUFLX01BU0sJKEdGUF9LRVJORUwgfCBHRlBfQVRPTUlDKQorI2RlZmluZSBnZnBfa21lbWxlYWtfbWFzayhnZnApCSgoKGdmcCkgJiAoR0ZQX0tFUk5FTCB8IEdGUF9BVE9NSUMpKSB8IFwKKwkJCQkgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MgfCBcCisJCQkJIF9fR0ZQX05PV0FSTikKIAogLyogc2Nhbm5pbmcgYXJlYSBpbnNpZGUgYSBtZW1vcnkgYmxvY2sgKi8KIHN0cnVjdCBrbWVtbGVha19zY2FuX2FyZWEgewpAQCAtNTExLDkgKzUxMywxMCBAQAogCXN0cnVjdCBrbWVtbGVha19vYmplY3QgKm9iamVjdDsKIAlzdHJ1Y3QgcHJpb190cmVlX25vZGUgKm5vZGU7CiAKLQlvYmplY3QgPSBrbWVtX2NhY2hlX2FsbG9jKG9iamVjdF9jYWNoZSwgZ2ZwICYgR0ZQX0tNRU1MRUFLX01BU0spOworCW9iamVjdCA9IGttZW1fY2FjaGVfYWxsb2Mob2JqZWN0X2NhY2hlLCBnZnBfa21lbWxlYWtfbWFzayhnZnApKTsKIAlpZiAoIW9iamVjdCkgewotCQlrbWVtbGVha19zdG9wKCJDYW5ub3QgYWxsb2NhdGUgYSBrbWVtbGVha19vYmplY3Qgc3RydWN0dXJlXG4iKTsKKwkJcHJfd2FybmluZygiQ2Fubm90IGFsbG9jYXRlIGEga21lbWxlYWtfb2JqZWN0IHN0cnVjdHVyZVxuIik7CisJCWttZW1sZWFrX2Rpc2FibGUoKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC03MzQsOSArNzM3LDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWFyZWEgPSBrbWVtX2NhY2hlX2FsbG9jKHNjYW5fYXJlYV9jYWNoZSwgZ2ZwICYgR0ZQX0tNRU1MRUFLX01BU0spOworCWFyZWEgPSBrbWVtX2NhY2hlX2FsbG9jKHNjYW5fYXJlYV9jYWNoZSwgZ2ZwX2ttZW1sZWFrX21hc2soZ2ZwKSk7CiAJaWYgKCFhcmVhKSB7Ci0JCWttZW1sZWFrX3dhcm4oIkNhbm5vdCBhbGxvY2F0ZSBhIHNjYW4gYXJlYVxuIik7CisJCXByX3dhcm5pbmcoIkNhbm5vdCBhbGxvY2F0ZSBhIHNjYW4gYXJlYVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggYmRiYTI0NS4uNDYxOGZkYSAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYworKysgYi9tbS9tZW1ibG9jay5jCkBAIC0xMzcsOCArMTM3LDYgQEAKIAogCUJVR19PTigwID09IHNpemUpOwogCi0Jc2l6ZSA9IG1lbWJsb2NrX2FsaWduX3VwKHNpemUsIGFsaWduKTsKLQogCS8qIFB1bXAgdXAgbWF4X2FkZHIgKi8KIAlpZiAoZW5kID09IE1FTUJMT0NLX0FMTE9DX0FDQ0VTU0lCTEUpCiAJCWVuZCA9IG1lbWJsb2NrLmN1cnJlbnRfbGltaXQ7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMzg3OGNmZS4uZGE1M2EyNSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjEyLDggKzYxMiwxMCBAQAogCS8qIHBhZ2VpbiBvZiBhIGJpZyBwYWdlIGlzIGFuIGV2ZW50LiBTbywgaWdub3JlIHBhZ2Ugc2l6ZSAqLwogCWlmIChucl9wYWdlcyA+IDApCiAJCV9fdGhpc19jcHVfaW5jKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9TVEFUX1BHUEdJTl9DT1VOVF0pOwotCWVsc2UKKwllbHNlIHsKIAkJX190aGlzX2NwdV9pbmMobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfUEdQR09VVF9DT1VOVF0pOworCQlucl9wYWdlcyA9IC1ucl9wYWdlczsgLyogZm9yIGV2ZW50ICovCisJfQogCiAJX190aGlzX2NwdV9hZGQobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX0VWRU5UU10sIG5yX3BhZ2VzKTsKIApAQCAtMTExMSw2ICsxMTEzLDIzIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCisvKioKKyAqIG1lbV9jZ3JvdXBfY2hlY2tfbWFyZ2luIC0gY2hlY2sgaWYgdGhlIG1lbW9yeSBjZ3JvdXAgYWxsb3dzIGNoYXJnaW5nCisgKiBAbWVtOiBtZW1vcnkgY2dyb3VwIHRvIGNoZWNrCisgKiBAYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhlIGNhbGxlciBpbnRlbmRzIHRvIGNoYXJnZQorICoKKyAqIFJldHVybnMgYSBib29sZWFuIHZhbHVlIG9uIHdoZXRoZXIgQG1lbSBjYW4gYmUgY2hhcmdlZCBAYnl0ZXMgb3IKKyAqIHdoZXRoZXIgdGhpcyB3b3VsZCBleGNlZWQgdGhlIGxpbWl0LgorICovCitzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX2NoZWNrX21hcmdpbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCB1bnNpZ25lZCBsb25nIGJ5dGVzKQoreworCWlmICghcmVzX2NvdW50ZXJfY2hlY2tfbWFyZ2luKCZtZW0tPnJlcywgYnl0ZXMpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGRvX3N3YXBfYWNjb3VudCAmJiAhcmVzX2NvdW50ZXJfY2hlY2tfbWFyZ2luKCZtZW0tPm1lbXN3LCBieXRlcykpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7CiAJc3RydWN0IGNncm91cCAqY2dycCA9IG1lbWNnLT5jc3MuY2dyb3VwOwpAQCAtMTgzNywyMyArMTg1NiwzNCBAQAogCQlmbGFncyB8PSBNRU1fQ0dST1VQX1JFQ0xBSU1fTk9TV0FQOwogCX0gZWxzZQogCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywgcmVzKTsKLQotCWlmIChjc2l6ZSA+IFBBR0VfU0laRSkgLyogY2hhbmdlIGNzaXplIGFuZCByZXRyeSAqLworCS8qCisJICogY3NpemUgY2FuIGJlIGVpdGhlciBhIGh1Z2UgcGFnZSAoSFBBR0VfU0laRSksIGEgYmF0Y2ggb2YKKwkgKiByZWd1bGFyIHBhZ2VzIChDSEFSR0VfU0laRSksIG9yIGEgc2luZ2xlIHJlZ3VsYXIgcGFnZQorCSAqIChQQUdFX1NJWkUpLgorCSAqCisJICogTmV2ZXIgcmVjbGFpbSBvbiBiZWhhbGYgb2Ygb3B0aW9uYWwgYmF0Y2hpbmcsIHJldHJ5IHdpdGggYQorCSAqIHNpbmdsZSBwYWdlIGluc3RlYWQuCisJICovCisJaWYgKGNzaXplID09IENIQVJHRV9TSVpFKQogCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOwogCiAJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkKIAkJcmV0dXJuIENIQVJHRV9XT1VMREJMT0NLOwogCiAJcmV0ID0gbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW1fb3Zlcl9saW1pdCwgTlVMTCwKLQkJCQkJZ2ZwX21hc2ssIGZsYWdzKTsKKwkJCQkJICAgICAgZ2ZwX21hc2ssIGZsYWdzKTsKKwlpZiAobWVtX2Nncm91cF9jaGVja19tYXJnaW4obWVtX292ZXJfbGltaXQsIGNzaXplKSkKKwkJcmV0dXJuIENIQVJHRV9SRVRSWTsKIAkvKgotCSAqIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoKSBtaWdodCBub3QgZ2l2ZSB1cyBhIGZ1bGwKLQkgKiBwaWN0dXJlIG9mIHJlY2xhaW0uIFNvbWUgcGFnZXMgYXJlIHJlY2xhaW1lZCBhbmQgbWlnaHQgYmUKLQkgKiBtb3ZlZCB0byBzd2FwIGNhY2hlIG9yIGp1c3QgdW5tYXBwZWQgZnJvbSB0aGUgY2dyb3VwLgotCSAqIENoZWNrIHRoZSBsaW1pdCBhZ2FpbiB0byBzZWUgaWYgdGhlIHJlY2xhaW0gcmVkdWNlZCB0aGUKLQkgKiBjdXJyZW50IHVzYWdlIG9mIHRoZSBjZ3JvdXAgYmVmb3JlIGdpdmluZyB1cAorCSAqIEV2ZW4gdGhvdWdoIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBhdCB0aGlzIHBvaW50LCByZWNsYWltCisJICogbWF5IGhhdmUgYmVlbiBhYmxlIHRvIGZyZWUgc29tZSBwYWdlcy4gIFJldHJ5IHRoZSBjaGFyZ2UKKwkgKiBiZWZvcmUga2lsbGluZyB0aGUgdGFzay4KKwkgKgorCSAqIE9ubHkgZm9yIHJlZ3VsYXIgcGFnZXMsIHRob3VnaDogaHVnZSBwYWdlcyBhcmUgcmF0aGVyCisJICogdW5saWtlbHkgdG8gc3VjY2VlZCBzbyBjbG9zZSB0byB0aGUgbGltaXQsIGFuZCB3ZSBmYWxsIGJhY2sKKwkgKiB0byByZWd1bGFyIHBhZ2VzIGFueXdheSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAJICovCi0JaWYgKHJldCB8fCBtZW1fY2dyb3VwX2NoZWNrX3VuZGVyX2xpbWl0KG1lbV9vdmVyX2xpbWl0KSkKKwlpZiAoY3NpemUgPT0gUEFHRV9TSVpFICYmIHJldCkKIAkJcmV0dXJuIENIQVJHRV9SRVRSWTsKIAogCS8qCkBAIC0yMzIzLDEzICsyMzUzLDE5IEBACiAJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGVudW0gY2hhcmdlX3R5cGUgY3R5cGUpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7Ci0Jc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKLQlpbnQgcmV0OwogCWludCBwYWdlX3NpemUgPSBQQUdFX1NJWkU7CisJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKKwlib29sIG9vbSA9IHRydWU7CisJaW50IHJldDsKIAogCWlmIChQYWdlVHJhbnNIdWdlKHBhZ2UpKSB7CiAJCXBhZ2Vfc2l6ZSA8PD0gY29tcG91bmRfb3JkZXIocGFnZSk7CiAJCVZNX0JVR19PTighUGFnZVRyYW5zSHVnZShwYWdlKSk7CisJCS8qCisJCSAqIE5ldmVyIE9PTS1raWxsIGEgcHJvY2VzcyBmb3IgYSBodWdlIHBhZ2UuICBUaGUKKwkJICogZmF1bHQgaGFuZGxlciB3aWxsIGZhbGwgYmFjayB0byByZWd1bGFyIHBhZ2VzLgorCQkgKi8KKwkJb29tID0gZmFsc2U7CiAJfQogCiAJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CkBAIC0yMzM4LDcgKzIzNzQsNyBAQAogCQlyZXR1cm4gMDsKIAlwcmVmZXRjaHcocGMpOwogCi0JcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UobW0sIGdmcF9tYXNrLCAmbWVtLCB0cnVlLCBwYWdlX3NpemUpOworCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKG1tLCBnZnBfbWFzaywgJm1lbSwgb29tLCBwYWdlX3NpemUpOwogCWlmIChyZXQgfHwgIW1lbSkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTAyNCw5ICs1MDYwLDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IGVuYWJsZV9zd2FwX2FjY291bnQoY2hhciAqcykKIHsKIAkvKiBjb25zaWRlciBlbmFibGVkIGlmIG5vIHBhcmFtZXRlciBvciAxIGlzIGdpdmVuICovCi0JaWYgKCFzIHx8ICFzdHJjbXAocywgIjEiKSkKKwlpZiAoISgqcykgfHwgIXN0cmNtcChzLCAiPTEiKSkKIAkJcmVhbGx5X2RvX3N3YXBfYWNjb3VudCA9IDE7Ci0JZWxzZSBpZiAoIXN0cmNtcChzLCAiMCIpKQorCWVsc2UgaWYgKCFzdHJjbXAocywgIj0wIikpCiAJCXJlYWxseV9kb19zd2FwX2FjY291bnQgPSAwOwogCXJldHVybiAxOwogfQpAQCAtNTAzNCw3ICs1MDcwLDggQEAKIAogc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV9zd2FwX2FjY291bnQoY2hhciAqcykKIHsKLQllbmFibGVfc3dhcF9hY2NvdW50KCIwIik7CisJcHJpbnRrX29uY2UoIm5vc3dhcGFjY291bnQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDIuNi40MC4gVXNlIHN3YXBhY2NvdW50PTAgaW5zdGVhZFxuIik7CisJZW5hYmxlX3N3YXBfYWNjb3VudCgiPTAiKTsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5vc3dhcGFjY291bnQiLCBkaXNhYmxlX3N3YXBfYWNjb3VudCk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1NDhmYmQ3Li4wMjA3YzJmIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTIzMyw4ICsyMzMsOCBAQAogCX0KIAogCS8qCi0JICogT25seSBhbGwgc2hyaW5rX3NsYWIgaGVyZSAod2hpY2ggd291bGQgYWxzbwotCSAqIHNocmluayBvdGhlciBjYWNoZXMpIGlmIGFjY2VzcyBpcyBub3QgcG90ZW50aWFsbHkgZmF0YWwuCisJICogT25seSBjYWxsIHNocmlua19zbGFiIGhlcmUgKHdoaWNoIHdvdWxkIGFsc28gc2hyaW5rIG90aGVyIGNhY2hlcykgaWYKKwkgKiBhY2Nlc3MgaXMgbm90IHBvdGVudGlhbGx5IGZhdGFsLgogCSAqLwogCWlmIChhY2Nlc3MpIHsKIAkJaW50IG5yOwpAQCAtMzg2LDggKzM4Niw2IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJc3RydWN0IGFub25fdm1hICphdjsKIAotCWlmICghUGFnZUh1Z2UocGFnZSkgJiYgdW5saWtlbHkoc3BsaXRfaHVnZV9wYWdlKHBhZ2UpKSkKLQkJcmV0dXJuOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJYXYgPSBwYWdlX2xvY2tfYW5vbl92bWEocGFnZSk7CiAJaWYgKGF2ID09IE5VTEwpCS8qIE5vdCBhY3R1YWxseSBtYXBwZWQgYW55bW9yZSAqLwpAQCAtODU2LDYgKzg1NCw3IEBACiAJaW50IHJldDsKIAlpbnQga2lsbCA9IDE7CiAJc3RydWN0IHBhZ2UgKmhwYWdlID0gY29tcG91bmRfaGVhZChwKTsKKwlzdHJ1Y3QgcGFnZSAqcHBhZ2U7CiAKIAlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VTbGFiKHApKQogCQlyZXR1cm4gU1dBUF9TVUNDRVNTOwpAQCAtODk3LDYgKzg5Niw0NCBAQAogCX0KIAogCS8qCisJICogcHBhZ2U6IHBvaXNvbmVkIHBhZ2UKKwkgKiAgIGlmIHAgaXMgcmVndWxhciBwYWdlKDRrIHBhZ2UpCisJICogICAgICAgIHBwYWdlID09IHJlYWwgcG9pc29uZWQgcGFnZTsKKwkgKiAgIGVsc2UgcCBpcyBodWdldGxiIG9yIFRIUCwgcHBhZ2UgPT0gaGVhZCBwYWdlLgorCSAqLworCXBwYWdlID0gaHBhZ2U7CisKKwlpZiAoUGFnZVRyYW5zSHVnZShocGFnZSkpIHsKKwkJLyoKKwkJICogVmVyaWZ5IHRoYXQgdGhpcyBpc24ndCBhIGh1Z2V0bGJmcyBoZWFkIHBhZ2UsIHRoZSBjaGVjayBmb3IKKwkJICogUGFnZUFub24gaXMganVzdCBmb3IgYXZvaWQgdHJpcHBpbmcgYSBzcGxpdF9odWdlX3BhZ2UKKwkJICogaW50ZXJuYWwgZGVidWcgY2hlY2ssIGFzIHNwbGl0X2h1Z2VfcGFnZSByZWZ1c2VzIHRvIGRlYWwgd2l0aAorCQkgKiBhbnl0aGluZyB0aGF0IGlzbid0IGFuIGFub24gcGFnZS4gUGFnZUFub24gY2FuJ3QgZ28gYXdheSBmcm8KKwkJICogdW5kZXIgdXMgYmVjYXVzZSB3ZSBob2xkIGEgcmVmY291bnQgb24gdGhlIGhwYWdlLCB3aXRob3V0IGEKKwkJICogcmVmY291bnQgb24gdGhlIGhwYWdlLiBzcGxpdF9odWdlX3BhZ2UgY2FuJ3QgYmUgc2FmZWx5IGNhbGxlZAorCQkgKiBpbiB0aGUgZmlyc3QgcGxhY2UsIGhhdmluZyBhIHJlZmNvdW50IG9uIHRoZSB0YWlsIGlzbid0CisJCSAqIGVub3VnaCAqIHRvIGJlIHNhZmUuCisJCSAqLworCQlpZiAoIVBhZ2VIdWdlKGhwYWdlKSAmJiBQYWdlQW5vbihocGFnZSkpIHsKKwkJCWlmICh1bmxpa2VseShzcGxpdF9odWdlX3BhZ2UoaHBhZ2UpKSkgeworCQkJCS8qCisJCQkJICogRklYTUU6IGlmIHNwbGl0dGluZyBUSFAgaXMgZmFpbGVkLCBpdCBpcworCQkJCSAqIGJldHRlciB0byBzdG9wIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uIHJhdGhlcgorCQkJCSAqIHRoYW4gY2F1c2luZyBwYW5pYyBieSB1bm1hcHBpbmcuIFN5c3RlbSBtaWdodAorCQkJCSAqIHN1cnZpdmUgaWYgdGhlIHBhZ2UgaXMgZnJlZWQgbGF0ZXIuCisJCQkJICovCisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCQkiTUNFICUjbHg6IGZhaWxlZCB0byBzcGxpdCBUSFBcbiIsIHBmbik7CisKKwkJCQlCVUdfT04oIVBhZ2VIV1BvaXNvbihwKSk7CisJCQkJcmV0dXJuIFNXQVBfRkFJTDsKKwkJCX0KKwkJCS8qIFRIUCBpcyBzcGxpdCwgc28gcHBhZ2Ugc2hvdWxkIGJlIHRoZSByZWFsIHBvaXNvbmVkIHBhZ2UuICovCisJCQlwcGFnZSA9IHA7CisJCX0KKwl9CisKKwkvKgogCSAqIEZpcnN0IGNvbGxlY3QgYWxsIHRoZSBwcm9jZXNzZXMgdGhhdCBoYXZlIHRoZSBwYWdlCiAJICogbWFwcGVkIGluIGRpcnR5IGZvcm0uICBUaGlzIGhhcyB0byBiZSBkb25lIGJlZm9yZSB0cnlfdG9fdW5tYXAsCiAJICogYmVjYXVzZSB0dHUgdGFrZXMgdGhlIHJtYXAgZGF0YSBzdHJ1Y3R1cmVzIGRvd24uCkBAIC05MDUsMTIgKzk0MiwxOCBAQAogCSAqIHRoZXJlJ3Mgbm90aGluZyB0aGF0IGNhbiBiZSBkb25lLgogCSAqLwogCWlmIChraWxsKQotCQljb2xsZWN0X3Byb2NzKGhwYWdlLCAmdG9raWxsKTsKKwkJY29sbGVjdF9wcm9jcyhwcGFnZSwgJnRva2lsbCk7CiAKLQlyZXQgPSB0cnlfdG9fdW5tYXAoaHBhZ2UsIHR0dSk7CisJaWYgKGhwYWdlICE9IHBwYWdlKQorCQlsb2NrX3BhZ2Vfbm9zeW5jKHBwYWdlKTsKKworCXJldCA9IHRyeV90b191bm1hcChwcGFnZSwgdHR1KTsKIAlpZiAocmV0ICE9IFNXQVBfU1VDQ0VTUykKIAkJcHJpbnRrKEtFUk5fRVJSICJNQ0UgJSNseDogZmFpbGVkIHRvIHVubWFwIHBhZ2UgKG1hcGNvdW50PSVkKVxuIiwKLQkJCQlwZm4sIHBhZ2VfbWFwY291bnQoaHBhZ2UpKTsKKwkJCQlwZm4sIHBhZ2VfbWFwY291bnQocHBhZ2UpKTsKKworCWlmIChocGFnZSAhPSBwcGFnZSkKKwkJdW5sb2NrX3BhZ2UocHBhZ2UpOwogCiAJLyoKIAkgKiBOb3cgdGhhdCB0aGUgZGlydHkgYml0IGhhcyBiZWVuIHByb3BhZ2F0ZWQgdG8gdGhlCkBAIC05MjEsNyArOTY0LDcgQEAKIAkgKiB1c2UgYSBtb3JlIGZvcmNlLWZ1bGwgdW5jYXRjaGFibGUga2lsbCB0byBwcmV2ZW50CiAJICogYW55IGFjY2Vzc2VzIHRvIHRoZSBwb2lzb25lZCBtZW1vcnkuCiAJICovCi0Ja2lsbF9wcm9jc19hbygmdG9raWxsLCAhIVBhZ2VEaXJ0eShocGFnZSksIHRyYXBubywKKwlraWxsX3Byb2NzX2FvKCZ0b2tpbGwsICEhUGFnZURpcnR5KHBwYWdlKSwgdHJhcG5vLAogCQkgICAgICByZXQgIT0gU1dBUF9TVUNDRVNTLCBwLCBwZm4pOwogCiAJcmV0dXJuIHJldDsKQEAgLTEwMjIsMTkgKzEwNjUsMjIgQEAKIAkgKiBUaGUgY2hlY2sgKHVubmVjZXNzYXJpbHkpIGlnbm9yZXMgTFJVIHBhZ2VzIGJlaW5nIGlzb2xhdGVkIGFuZAogCSAqIHdhbGtlZCBieSB0aGUgcGFnZSByZWNsYWltIGNvZGUsIGhvd2V2ZXIgdGhhdCdzIG5vdCBhIGJpZyBsb3NzLgogCSAqLwotCWlmICghUGFnZUxSVShwKSAmJiAhUGFnZUh1Z2UocCkpCi0JCXNoYWtlX3BhZ2UocCwgMCk7Ci0JaWYgKCFQYWdlTFJVKHApICYmICFQYWdlSHVnZShwKSkgewotCQkvKgotCQkgKiBzaGFrZV9wYWdlIGNvdWxkIGhhdmUgdHVybmVkIGl0IGZyZWUuCi0JCSAqLwotCQlpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHApKSB7Ci0JCQlhY3Rpb25fcmVzdWx0KHBmbiwgImZyZWUgYnVkZHksIDJuZCB0cnkiLCBERUxBWUVEKTsKLQkJCXJldHVybiAwOworCWlmICghUGFnZUh1Z2UocCkgJiYgIVBhZ2VUcmFuc0NvbXBvdW5kKHApKSB7CisJCWlmICghUGFnZUxSVShwKSkKKwkJCXNoYWtlX3BhZ2UocCwgMCk7CisJCWlmICghUGFnZUxSVShwKSkgeworCQkJLyoKKwkJCSAqIHNoYWtlX3BhZ2UgY291bGQgaGF2ZSB0dXJuZWQgaXQgZnJlZS4KKwkJCSAqLworCQkJaWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkgeworCQkJCWFjdGlvbl9yZXN1bHQocGZuLCAiZnJlZSBidWRkeSwgMm5kIHRyeSIsCisJCQkJCQlERUxBWUVEKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWFjdGlvbl9yZXN1bHQocGZuLCAibm9uIExSVSIsIElHTk9SRUQpOworCQkJcHV0X3BhZ2UocCk7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9Ci0JCWFjdGlvbl9yZXN1bHQocGZuLCAibm9uIExSVSIsIElHTk9SRUQpOwotCQlwdXRfcGFnZShwKTsKLQkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAkvKgpAQCAtMTA2NCw3ICsxMTEwLDcgQEAKIAkgKiBGb3IgZXJyb3Igb24gdGhlIHRhaWwgcGFnZSwgd2Ugc2hvdWxkIHNldCBQR19od3BvaXNvbgogCSAqIG9uIHRoZSBoZWFkIHBhZ2UgdG8gc2hvdyB0aGF0IHRoZSBodWdlcGFnZSBpcyBod3BvaXNvbmVkCiAJICovCi0JaWYgKFBhZ2VUYWlsKHApICYmIFRlc3RTZXRQYWdlSFdQb2lzb24oaHBhZ2UpKSB7CisJaWYgKFBhZ2VIdWdlKHApICYmIFBhZ2VUYWlsKHApICYmIFRlc3RTZXRQYWdlSFdQb2lzb24oaHBhZ2UpKSB7CiAJCWFjdGlvbl9yZXN1bHQocGZuLCAiaHVnZXBhZ2UgYWxyZWFkeSBoYXJkd2FyZSBwb2lzb25lZCIsCiAJCQkJSUdOT1JFRCk7CiAJCXVubG9ja19wYWdlKGhwYWdlKTsKQEAgLTEyOTUsNyArMTM0MSwxMCBAQAogCXJldCA9IG1pZ3JhdGVfaHVnZV9wYWdlcygmcGFnZWxpc3QsIG5ld19wYWdlLCBNUE9MX01GX01PVkVfQUxMLCAwLAogCQkJCXRydWUpOwogCWlmIChyZXQpIHsKLQkJcHV0YmFja19scnVfcGFnZXMoJnBhZ2VsaXN0KTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UxLCAqcGFnZTI7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlMSwgcGFnZTIsICZwYWdlbGlzdCwgbHJ1KQorCQkJcHV0X3BhZ2UocGFnZTEpOworCiAJCXByX2RlYnVnKCJzb2Z0IG9mZmxpbmU6ICUjbHg6IG1pZ3JhdGlvbiBmYWlsZWQgJWQsIHR5cGUgJWx4XG4iLAogCQkJIHBmbiwgcmV0LCBwYWdlLT5mbGFncyk7CiAJCWlmIChyZXQgPiAwKQpAQCAtMTQxOSw2ICsxNDY4LDcgQEAKIAkJcmV0ID0gbWlncmF0ZV9wYWdlcygmcGFnZWxpc3QsIG5ld19wYWdlLCBNUE9MX01GX01PVkVfQUxMLAogCQkJCQkJCQkwLCB0cnVlKTsKIAkJaWYgKHJldCkgeworCQkJcHV0YmFja19scnVfcGFnZXMoJnBhZ2VsaXN0KTsKIAkJCXByX2luZm8oInNvZnQgb2ZmbGluZTogJSNseDogbWlncmF0aW9uIGZhaWxlZCAlZCwgdHlwZSAlbHhcbiIsCiAJCQkJcGZuLCByZXQsIHBhZ2UtPmZsYWdzKTsKIAkJCWlmIChyZXQgPiAwKQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAzMTI1MGZhLi41ODIzNjk4IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMjIxOSw3ICsyMjE5LDYgQEAKIAkJCQkJCQkgJnB0bCk7CiAJCQlpZiAoIXB0ZV9zYW1lKCpwYWdlX3RhYmxlLCBvcmlnX3B0ZSkpIHsKIAkJCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7Ci0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKIAkJCQlnb3RvIHVubG9jazsKIAkJCX0KIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRfcGFnZSk7CkBAIC0yMjg5LDcgKzIyODgsNiBAQAogCQkJCQkJCSAmcHRsKTsKIAkJCWlmICghcHRlX3NhbWUoKnBhZ2VfdGFibGUsIG9yaWdfcHRlKSkgewogCQkJCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKLQkJCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2xkX3BhZ2UpOwogCQkJCWdvdG8gdW5sb2NrOwogCQkJfQogCkBAIC0yMzY3LDE2ICsyMzY1LDYgQEAKIAl9CiAJX19TZXRQYWdlVXB0b2RhdGUobmV3X3BhZ2UpOwogCi0JLyoKLQkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNrLCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKLQkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCi0JICovCi0JaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSAmJiBvbGRfcGFnZSkgewotCQlsb2NrX3BhZ2Uob2xkX3BhZ2UpOwkvKiBmb3IgTFJVIG1hbmlwdWxhdGlvbiAqLwotCQljbGVhcl9wYWdlX21sb2NrKG9sZF9wYWdlKTsKLQkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOwotCX0KLQogCWlmIChtZW1fY2dyb3VwX25ld3BhZ2VfY2hhcmdlKG5ld19wYWdlLCBtbSwgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gb29tX2ZyZWVfbmV3OwogCkBAIC0yNDQ0LDEwICsyNDMyLDIwIEBACiAKIAlpZiAobmV3X3BhZ2UpCiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXdfcGFnZSk7Ci0JaWYgKG9sZF9wYWdlKQotCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2xkX3BhZ2UpOwogdW5sb2NrOgogCXB0ZV91bm1hcF91bmxvY2socGFnZV90YWJsZSwgcHRsKTsKKwlpZiAob2xkX3BhZ2UpIHsKKwkJLyoKKwkJICogRG9uJ3QgbGV0IGFub3RoZXIgdGFzaywgd2l0aCBwb3NzaWJseSB1bmxvY2tlZCB2bWEsCisJCSAqIGtlZXAgdGhlIG1sb2NrZWQgcGFnZS4KKwkJICovCisJCWlmICgocmV0ICYgVk1fRkFVTFRfV1JJVEUpICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkgeworCQkJbG9ja19wYWdlKG9sZF9wYWdlKTsJLyogTFJVIG1hbmlwdWxhdGlvbiAqLworCQkJbXVubG9ja192bWFfcGFnZShvbGRfcGFnZSk7CisJCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7CisJCX0KKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKKwl9CiAJcmV0dXJuIHJldDsKIG9vbV9mcmVlX25ldzoKIAlwYWdlX2NhY2hlX3JlbGVhc2UobmV3X3BhZ2UpOwpAQCAtMjY1MCw2ICsyNjQ4LDcgQEAKIAkJZGV0YWlscy5sYXN0X2luZGV4ID0gVUxPTkdfTUFYOwogCWRldGFpbHMuaV9tbWFwX2xvY2sgPSAmbWFwcGluZy0+aV9tbWFwX2xvY2s7CiAKKwltdXRleF9sb2NrKCZtYXBwaW5nLT51bm1hcF9tdXRleCk7CiAJc3Bpbl9sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CiAKIAkvKiBQcm90ZWN0IGFnYWluc3QgZW5kbGVzcyB1bm1hcHBpbmcgbG9vcHMgKi8KQEAgLTI2NjYsNiArMjY2NSw3IEBACiAJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKSkpCiAJCXVubWFwX21hcHBpbmdfcmFuZ2VfbGlzdCgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhciwgJmRldGFpbHMpOwogCXNwaW5fdW5sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZtYXBwaW5nLT51bm1hcF9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKHVubWFwX21hcHBpbmdfcmFuZ2UpOwogCkBAIC0zMDUzLDEyICszMDUzLDYgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCWNoYXJnZWQgPSAxOwotCQkJLyoKLQkJCSAqIERvbid0IGxldCBhbm90aGVyIHRhc2ssIHdpdGggcG9zc2libHkgdW5sb2NrZWQgdm1hLAotCQkJICoga2VlcCB0aGUgbWxvY2tlZCBwYWdlLgotCQkJICovCi0JCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKLQkJCQljbGVhcl9wYWdlX21sb2NrKHZtZi5wYWdlKTsKIAkJCWNvcHlfdXNlcl9oaWdocGFnZShwYWdlLCB2bWYucGFnZSwgYWRkcmVzcywgdm1hKTsKIAkJCV9fU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCAzNjhmYzlkLi5iNTNlYzk5IDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTUyNCwxMCArMTUyNCw5IEBACiB9CiAKIC8qIFJldHVybiBhIHpvbmVsaXN0IGluZGljYXRlZCBieSBnZnAgZm9yIG5vZGUgcmVwcmVzZW50aW5nIGEgbWVtcG9saWN5ICovCi1zdGF0aWMgc3RydWN0IHpvbmVsaXN0ICpwb2xpY3lfem9uZWxpc3QoZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgc3RydWN0IHpvbmVsaXN0ICpwb2xpY3lfem9uZWxpc3QoZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3ksCisJaW50IG5kKQogewotCWludCBuZCA9IG51bWFfbm9kZV9pZCgpOwotCiAJc3dpdGNoIChwb2xpY3ktPm1vZGUpIHsKIAljYXNlIE1QT0xfUFJFRkVSUkVEOgogCQlpZiAoIShwb2xpY3ktPmZsYWdzICYgTVBPTF9GX0xPQ0FMKSkKQEAgLTE2NzksNyArMTY3OCw3IEBACiAJCXpsID0gbm9kZV96b25lbGlzdChpbnRlcmxlYXZlX25pZCgqbXBvbCwgdm1hLCBhZGRyLAogCQkJCWh1Z2VfcGFnZV9zaGlmdChoc3RhdGVfdm1hKHZtYSkpKSwgZ2ZwX2ZsYWdzKTsKIAl9IGVsc2UgewotCQl6bCA9IHBvbGljeV96b25lbGlzdChnZnBfZmxhZ3MsICptcG9sKTsKKwkJemwgPSBwb2xpY3lfem9uZWxpc3QoZ2ZwX2ZsYWdzLCAqbXBvbCwgbnVtYV9ub2RlX2lkKCkpOwogCQlpZiAoKCptcG9sKS0+bW9kZSA9PSBNUE9MX0JJTkQpCiAJCQkqbm9kZW1hc2sgPSAmKCptcG9sKS0+di5ub2RlczsKIAl9CkBAIC0xODIwLDcgKzE4MTksNyBAQAogICovCiBzdHJ1Y3QgcGFnZSAqCiBhbGxvY19wYWdlc192bWEoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQl1bnNpZ25lZCBsb25nIGFkZHIpCisJCXVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUpCiB7CiAJc3RydWN0IG1lbXBvbGljeSAqcG9sID0gZ2V0X3ZtYV9wb2xpY3koY3VycmVudCwgdm1hLCBhZGRyKTsKIAlzdHJ1Y3Qgem9uZWxpc3QgKnpsOwpAQCAtMTgzMCwxMyArMTgyOSwxMyBAQAogCWlmICh1bmxpa2VseShwb2wtPm1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKSkgewogCQl1bnNpZ25lZCBuaWQ7CiAKLQkJbmlkID0gaW50ZXJsZWF2ZV9uaWQocG9sLCB2bWEsIGFkZHIsIFBBR0VfU0hJRlQpOworCQluaWQgPSBpbnRlcmxlYXZlX25pZChwb2wsIHZtYSwgYWRkciwgUEFHRV9TSElGVCArIG9yZGVyKTsKIAkJbXBvbF9jb25kX3B1dChwb2wpOwogCQlwYWdlID0gYWxsb2NfcGFnZV9pbnRlcmxlYXZlKGdmcCwgb3JkZXIsIG5pZCk7CiAJCXB1dF9tZW1zX2FsbG93ZWQoKTsKIAkJcmV0dXJuIHBhZ2U7CiAJfQotCXpsID0gcG9saWN5X3pvbmVsaXN0KGdmcCwgcG9sKTsKKwl6bCA9IHBvbGljeV96b25lbGlzdChnZnAsIHBvbCwgbm9kZSk7CiAJaWYgKHVubGlrZWx5KG1wb2xfbmVlZHNfY29uZF9yZWYocG9sKSkpIHsKIAkJLyoKIAkJICogc2xvdyBwYXRoOiByZWYgY291bnRlZCBzaGFyZWQgcG9saWN5CkBAIC0xODkyLDcgKzE4OTEsOCBAQAogCQlwYWdlID0gYWxsb2NfcGFnZV9pbnRlcmxlYXZlKGdmcCwgb3JkZXIsIGludGVybGVhdmVfbm9kZXMocG9sKSk7CiAJZWxzZQogCQlwYWdlID0gX19hbGxvY19wYWdlc19ub2RlbWFzayhnZnAsIG9yZGVyLAotCQkJcG9saWN5X3pvbmVsaXN0KGdmcCwgcG9sKSwgcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sKSk7CisJCQkJcG9saWN5X3pvbmVsaXN0KGdmcCwgcG9sLCBudW1hX25vZGVfaWQoKSksCisJCQkJcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sKSk7CiAJcHV0X21lbXNfYWxsb3dlZCgpOwogCXJldHVybiBwYWdlOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDlmMjlhM2IuLjM1MmRlNTU1IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKKysrIGIvbW0vbWlncmF0ZS5jCkBAIC03NzIsNiArNzcyLDcgQEAKIHVubG9jazoKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAorbW92ZV9uZXdwYWdlOgogCWlmIChyYyAhPSAtRUFHQUlOKSB7CiAgCQkvKgogIAkJICogQSBwYWdlIHRoYXQgaGFzIGJlZW4gbWlncmF0ZWQgaGFzIGFsbCByZWZlcmVuY2VzCkBAIC03ODUsOCArNzg2LDYgQEAKIAkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAl9CiAKLW1vdmVfbmV3cGFnZToKLQogCS8qCiAJICogTW92ZSB0aGUgbmV3IHBhZ2UgdG8gdGhlIExSVS4gSWYgbWlncmF0aW9uIHdhcyBub3Qgc3VjY2Vzc2Z1bAogCSAqIHRoZW4gdGhpcyB3aWxsIGZyZWUgdGhlIHBhZ2UuCkBAIC05ODEsMTAgKzk4MCw2IEBACiAJfQogCXJjID0gMDsKIG91dDoKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCBwYWdlMiwgZnJvbSwgbHJ1KQotCQlwdXRfcGFnZShwYWdlKTsKLQogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0xMjkyLDE0ICsxMjg3LDE0IEBACiAJCXJldHVybiAtRVBFUk07CiAKIAkvKiBGaW5kIHRoZSBtbV9zdHJ1Y3QgKi8KLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAl0YXNrID0gcGlkID8gZmluZF90YXNrX2J5X3ZwaWQocGlkKSA6IGN1cnJlbnQ7CiAJaWYgKCF0YXNrKSB7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQogCW1tID0gZ2V0X3Rhc2tfbW0odGFzayk7Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKCFtbSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9tbS9tbG9jay5jIGIvbW0vbWxvY2suYwppbmRleCAxM2U4MWVlLi5jMzkyNGM3ZiAxMDA2NDQKLS0tIGEvbW0vbWxvY2suYworKysgYi9tbS9tbG9jay5jCkBAIC0xNzgsNiArMTc4LDEzIEBACiAJaWYgKCh2bWEtPnZtX2ZsYWdzICYgKFZNX1dSSVRFIHwgVk1fU0hBUkVEKSkgPT0gVk1fV1JJVEUpCiAJCWd1cF9mbGFncyB8PSBGT0xMX1dSSVRFOwogCisJLyoKKwkgKiBXZSB3YW50IG1sb2NrIHRvIHN1Y2NlZWQgZm9yIHJlZ2lvbnMgdGhhdCBoYXZlIGFueSBwZXJtaXNzaW9ucworCSAqIG90aGVyIHRoYW4gUFJPVF9OT05FLgorCSAqLworCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMpKQorCQlndXBfZmxhZ3MgfD0gRk9MTF9GT1JDRTsKKwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQogCQlndXBfZmxhZ3MgfD0gRk9MTF9NTE9DSzsKIApkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuYwppbmRleCA5OTI1YjYzLi4xZGU5OGQ0IDEwMDY0NAotLS0gYS9tbS9tcmVtYXAuYworKysgYi9tbS9tcmVtYXAuYwpAQCAtOTQsOSArOTQsNyBAQAogCQkgKi8KIAkJbWFwcGluZyA9IHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nOwogCQlzcGluX2xvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKLQkJaWYgKG5ld192bWEtPnZtX3RydW5jYXRlX2NvdW50ICYmCi0JCSAgICBuZXdfdm1hLT52bV90cnVuY2F0ZV9jb3VudCAhPSB2bWEtPnZtX3RydW5jYXRlX2NvdW50KQotCQkJbmV3X3ZtYS0+dm1fdHJ1bmNhdGVfY291bnQgPSAwOworCQluZXdfdm1hLT52bV90cnVuY2F0ZV9jb3VudCA9IDA7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBhODczZTYxLi5jZGVmMWQ0IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC01Mzc2LDEwICs1Mzc2LDkgQEAKIAlmb3IgKGZvdW5kID0gMCwgaXRlciA9IDA7IGl0ZXIgPCBwYWdlYmxvY2tfbnJfcGFnZXM7IGl0ZXIrKykgewogCQl1bnNpZ25lZCBsb25nIGNoZWNrID0gcGZuICsgaXRlcjsKIAotCQlpZiAoIXBmbl92YWxpZF93aXRoaW4oY2hlY2spKSB7Ci0JCQlpdGVyKys7CisJCWlmICghcGZuX3ZhbGlkX3dpdGhpbihjaGVjaykpCiAJCQljb250aW51ZTsKLQkJfQorCiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShjaGVjayk7CiAJCWlmICghcGFnZV9jb3VudChwYWdlKSkgewogCQkJaWYgKFBhZ2VCdWRkeShwYWdlKSkKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDA3YTQ1OGQuLjAzNDFjNTcgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtMTk0MCw3ICsxOTQwLDcgQEAKIAogCWVycm9yID0gLUVJTlZBTDsKIAlpZiAoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgewotCQliZGV2ID0gSV9CREVWKGlub2RlKTsKKwkJYmRldiA9IGJkZ3JhYihJX0JERVYoaW5vZGUpKTsKIAkJZXJyb3IgPSBibGtkZXZfZ2V0KGJkZXYsIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSB8IEZNT0RFX0VYQ0wsCiAJCQkJICAgc3lzX3N3YXBvbik7CiAJCWlmIChlcnJvciA8IDApIHsKZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IDQ5ZmViNDYuLmQ2NDI5NmIgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKKysrIGIvbW0vdHJ1bmNhdGUuYwpAQCAtMjI1LDYgKzIyNSw3IEBACiAJbmV4dCA9IHN0YXJ0OwogCXdoaWxlIChuZXh0IDw9IGVuZCAmJgogCSAgICAgICBwYWdldmVjX2xvb2t1cCgmcHZlYywgbWFwcGluZywgbmV4dCwgUEFHRVZFQ19TSVpFKSkgeworCQltZW1fY2dyb3VwX3VuY2hhcmdlX3N0YXJ0KCk7CiAJCWZvciAoaSA9IDA7IGkgPCBwYWdldmVjX2NvdW50KCZwdmVjKTsgaSsrKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMucGFnZXNbaV07CiAJCQlwZ29mZl90IHBhZ2VfaW5kZXggPSBwYWdlLT5pbmRleDsKQEAgLTI0Nyw2ICsyNDgsNyBAQAogCQkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCX0KIAkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKwkJbWVtX2Nncm91cF91bmNoYXJnZV9lbmQoKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDE0OGM2ZTYuLjY3NzFlYTcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xODQxLDE2ICsxODQxLDI4IEBACiAJaWYgKCEoc2MtPnJlY2xhaW1fbW9kZSAmIFJFQ0xBSU1fTU9ERV9DT01QQUNUSU9OKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyoKLQkgKiBJZiB3ZSBmYWlsZWQgdG8gcmVjbGFpbSBhbmQgaGF2ZSBzY2FubmVkIHRoZSBmdWxsIGxpc3QsIHN0b3AuCi0JICogTk9URTogQ2hlY2tpbmcganVzdCBucl9yZWNsYWltZWQgd291bGQgZXhpdCByZWNsYWltL2NvbXBhY3Rpb24gZmFyCi0JICogICAgICAgZmFzdGVyIGJ1dCBvYnZpb3VzbHkgd291bGQgYmUgbGVzcyBsaWtlbHkgdG8gc3VjY2VlZAotCSAqICAgICAgIGFsbG9jYXRpb24uIElmIHRoaXMgaXMgZGVzaXJhYmxlLCB1c2UgR0ZQX1JFUEVBVCB0byBkZWNpZGUKLQkgKiAgICAgICBpZiBib3RoIHJlY2xhaW1lZCBhbmQgc2Nhbm5lZCBzaG91bGQgYmUgY2hlY2tlZCBvciBqdXN0Ci0JICogICAgICAgcmVjbGFpbWVkCi0JICovCi0JaWYgKCFucl9yZWNsYWltZWQgJiYgIW5yX3NjYW5uZWQpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBDb25zaWRlciBzdG9wcGluZyBkZXBlbmRpbmcgb24gc2NhbiBhbmQgcmVjbGFpbSBhY3Rpdml0eSAqLworCWlmIChzYy0+Z2ZwX21hc2sgJiBfX0dGUF9SRVBFQVQpIHsKKwkJLyoKKwkJICogRm9yIF9fR0ZQX1JFUEVBVCBhbGxvY2F0aW9ucywgc3RvcCByZWNsYWltaW5nIGlmIHRoZQorCQkgKiBmdWxsIExSVSBsaXN0IGhhcyBiZWVuIHNjYW5uZWQgYW5kIHdlIGFyZSBzdGlsbCBmYWlsaW5nCisJCSAqIHRvIHJlY2xhaW0gcGFnZXMuIFRoaXMgZnVsbCBMUlUgc2NhbiBpcyBwb3RlbnRpYWxseQorCQkgKiBleHBlbnNpdmUgYnV0IGEgX19HRlBfUkVQRUFUIGNhbGxlciByZWFsbHkgd2FudHMgdG8gc3VjY2VlZAorCQkgKi8KKwkJaWYgKCFucl9yZWNsYWltZWQgJiYgIW5yX3NjYW5uZWQpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRm9yIG5vbi1fX0dGUF9SRVBFQVQgYWxsb2NhdGlvbnMgd2hpY2ggY2FuIHByZXN1bWFibHkKKwkJICogZmFpbCB3aXRob3V0IGNvbnNlcXVlbmNlLCBzdG9wIGlmIHdlIGZhaWxlZCB0byByZWNsYWltCisJCSAqIGFueSBwYWdlcyBmcm9tIHRoZSBsYXN0IFNXQVBfQ0xVU1RFUl9NQVggbnVtYmVyIG9mCisJCSAqIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkLiBUaGlzIHdpbGwgcmV0dXJuIHRvIHRoZQorCQkgKiBjYWxsZXIgZmFzdGVyIGF0IHRoZSByaXNrIHJlY2xhaW0vY29tcGFjdGlvbiBhbmQKKwkJICogdGhlIHJlc3VsdGluZyBhbGxvY2F0aW9uIGF0dGVtcHQgZmFpbHMKKwkJICovCisJCWlmICghbnJfcmVjbGFpbWVkKQorCQkJcmV0dXJuIGZhbHNlOworCX0KIAogCS8qCiAJICogSWYgd2UgaGF2ZSBub3QgcmVjbGFpbWVkIGVub3VnaCBwYWdlcyBmb3IgY29tcGFjdGlvbiBhbmQgdGhlCkBAIC0xODgyLDEyICsxODk0LDEyIEBACiAJdW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdOwogCXVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbjsKIAllbnVtIGxydV9saXN0IGw7Ci0JdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7CisJdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIG5yX3NjYW5uZWQ7CiAJdW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltID0gc2MtPm5yX3RvX3JlY2xhaW07Ci0JdW5zaWduZWQgbG9uZyBucl9zY2FubmVkID0gc2MtPm5yX3NjYW5uZWQ7CiAKIHJlc3RhcnQ6CiAJbnJfcmVjbGFpbWVkID0gMDsKKwlucl9zY2FubmVkID0gc2MtPm5yX3NjYW5uZWQ7CiAJZ2V0X3NjYW5fY291bnQoem9uZSwgc2MsIG5yLCBwcmlvcml0eSk7CiAKIAl3aGlsZSAobnJbTFJVX0lOQUNUSVZFX0FOT05dIHx8IG5yW0xSVV9BQ1RJVkVfRklMRV0gfHwKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYyBiL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYwppbmRleCBlZTQxZmVmLi5kMWE2MTEzIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi91bmljYXN0LmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5jCkBAIC01MCwxMiArNTAsMTIgQEAKIAkJc2tiID0gdGZwLT5za2I7CiAJfQogCisJaWYgKHNrYl9saW5lYXJpemUoc2tiKSA8IDAgfHwgc2tiX2xpbmVhcml6ZSh0bXBfc2tiKSA8IDApCisJCWdvdG8gZXJyOworCiAJc2tiX3B1bGwodG1wX3NrYiwgc2l6ZW9mKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0KSk7Ci0JaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0bXBfc2tiLT5sZW4sIEdGUF9BVE9NSUMpIDwgMCkgewotCQkvKiBmcmVlIGJ1ZmZlcmVkIHNrYiwgc2tiIHdpbGwgYmUgZnJlZWQgbGF0ZXIgKi8KLQkJa2ZyZWVfc2tiKHRmcC0+c2tiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgdG1wX3NrYi0+bGVuLCBHRlBfQVRPTUlDKSA8IDApCisJCWdvdG8gZXJyOwogCiAJLyogbW92ZSBmcmVlIGVudHJ5IHRvIGVuZCAqLwogCXRmcC0+c2tiID0gTlVMTDsKQEAgLTcwLDYgKzcwLDExIEBACiAJdW5pY2FzdF9wYWNrZXQtPnBhY2tldF90eXBlID0gQkFUX1VOSUNBU1Q7CiAKIAlyZXR1cm4gc2tiOworCitlcnI6CisJLyogZnJlZSBidWZmZXJlZCBza2IsIHNrYiB3aWxsIGJlIGZyZWVkIGxhdGVyICovCisJa2ZyZWVfc2tiKHRmcC0+c2tiKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZnJhZ19jcmVhdGVfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3Zpcy5jIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKaW5kZXggY2Q0YzQyMy4uZGUxMDIyYyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdmlzLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKQEAgLTY0LDYgKzY0LDcgQEAKIAogCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2xpc3RfbG9jayk7CiAJa2ZyZWVfc2tiKGluZm8tPnNrYl9wYWNrZXQpOworCWtmcmVlKGluZm8pOwogfQogCiAvKiBDb21wYXJlIHR3byB2aXMgcGFja2V0cywgdXNlZCBieSB0aGUgaGFzaGluZyBhbGdvcml0aG0gKi8KQEAgLTI2OCwxMCArMjY5LDEwIEBACiAJCQkJYnVmZl9wb3MgKz0gc3ByaW50ZihidWZmICsgYnVmZl9wb3MsICIlcE0sIiwKIAkJCQkJCWVudHJ5LT5hZGRyKTsKIAotCQkJCWZvciAoaSA9IDA7IGkgPCBwYWNrZXQtPmVudHJpZXM7IGkrKykKKwkJCQlmb3IgKGogPSAwOyBqIDwgcGFja2V0LT5lbnRyaWVzOyBqKyspCiAJCQkJCWJ1ZmZfcG9zICs9IHZpc19kYXRhX3JlYWRfZW50cnkoCiAJCQkJCQkJYnVmZiArIGJ1ZmZfcG9zLAotCQkJCQkJCSZlbnRyaWVzW2ldLAorCQkJCQkJCSZlbnRyaWVzW2pdLAogCQkJCQkJCWVudHJ5LT5hZGRyLAogCQkJCQkJCWVudHJ5LT5wcmltYXJ5KTsKIApAQCAtNDQ0LDcgKzQ0NSw3IEBACiAJCQkgICAgICBpbmZvKTsKIAlpZiAoaGFzaF9hZGRlZCA8IDApIHsKIAkJLyogZGlkIG5vdCB3b3JrIChmb3Igc29tZSByZWFzb24pICovCi0JCWtyZWZfcHV0KCZvbGRfaW5mby0+cmVmY291bnQsIGZyZWVfaW5mbyk7CisJCWtyZWZfcHV0KCZpbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKIAkJaW5mbyA9IE5VTEw7CiAJfQogCkBAIC04MTUsNyArODE2LDcgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPQogCQljb250YWluZXJfb2YoZGVsYXllZF93b3JrLCBzdHJ1Y3QgYmF0X3ByaXYsIHZpc193b3JrKTsKLQlzdHJ1Y3QgdmlzX2luZm8gKmluZm8sICp0ZW1wOworCXN0cnVjdCB2aXNfaW5mbyAqaW5mbzsKIAogCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOwogCXB1cmdlX3Zpc19wYWNrZXRzKGJhdF9wcml2KTsKQEAgLTgyNSw4ICs4MjYsOSBAQAogCQlzZW5kX2xpc3RfYWRkKGJhdF9wcml2LCBiYXRfcHJpdi0+bXlfdmlzX2luZm8pOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbmZvLCB0ZW1wLCAmYmF0X3ByaXYtPnZpc19zZW5kX2xpc3QsCi0JCQkJIHNlbmRfbGlzdCkgeworCXdoaWxlICghbGlzdF9lbXB0eSgmYmF0X3ByaXYtPnZpc19zZW5kX2xpc3QpKSB7CisJCWluZm8gPSBsaXN0X2ZpcnN0X2VudHJ5KCZiYXRfcHJpdi0+dmlzX3NlbmRfbGlzdCwKKwkJCQkJdHlwZW9mKCppbmZvKSwgc2VuZF9saXN0KTsKIAogCQlrcmVmX2dldCgmaW5mby0+cmVmY291bnQpOwogCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCmluZGV4IDZiOTBhNDEuLjk5Y2Q4ZDkgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKQEAgLTM3OSwxNCArMzc5LDEwIEBACiAJaGNpX2Nvbm5faG9sZChhY2wpOwogCiAJaWYgKGFjbC0+c3RhdGUgPT0gQlRfT1BFTiB8fCBhY2wtPnN0YXRlID09IEJUX0NMT1NFRCkgewotCQlhY2wtPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKKwkJYWNsLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisJCWFjbC0+cGVuZGluZ19zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CiAJCWFjbC0+YXV0aF90eXBlID0gYXV0aF90eXBlOwogCQloY2lfYWNsX2Nvbm5lY3QoYWNsKTsKLQl9IGVsc2UgewotCQlpZiAoYWNsLT5zZWNfbGV2ZWwgPCBzZWNfbGV2ZWwpCi0JCQlhY2wtPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKLQkJaWYgKGFjbC0+YXV0aF90eXBlIDwgYXV0aF90eXBlKQotCQkJYWNsLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAJfQogCiAJaWYgKHR5cGUgPT0gQUNMX0xJTkspCkBAIC00NDIsMTEgKzQzOCwxNyBAQAogewogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCisJaWYgKGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsID4gc2VjX2xldmVsKQorCQlzZWNfbGV2ZWwgPSBjb25uLT5wZW5kaW5nX3NlY19sZXZlbDsKKwogCWlmIChzZWNfbGV2ZWwgPiBjb25uLT5zZWNfbGV2ZWwpCi0JCWNvbm4tPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKKwkJY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CiAJZWxzZSBpZiAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0FVVEgpCiAJCXJldHVybiAxOwogCisJLyogTWFrZSBzdXJlIHdlIHByZXNlcnZlIGFuIGV4aXN0aW5nIE1JVE0gcmVxdWlyZW1lbnQqLworCWF1dGhfdHlwZSB8PSAoY29ubi0+YXV0aF90eXBlICYgMHgwMSk7CisKIAljb25uLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCkpIHsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCA4YjYwMmQ4Li45YzQ1NDFiIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC0xMDExLDYgKzEwMTEsMTAgQEAKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKGhkZXYtPndvcmtxdWV1ZSk7CiAKKwloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2JsYWNrbGlzdF9jbGVhcihoZGV2KTsKKwloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwogCV9faGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IDM4MTAwMTcuLmEyOTA4NTQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtNjkyLDEzICs2OTIsMTMgQEAKIAlpZiAoY29ubi0+c3RhdGUgIT0gQlRfQ09ORklHIHx8ICFjb25uLT5vdXQpCiAJCXJldHVybiAwOwogCi0JaWYgKGNvbm4tPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9TRFApCisJaWYgKGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX1NEUCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBPbmx5IHJlcXVlc3QgYXV0aGVudGljYXRpb24gZm9yIFNTUCBjb25uZWN0aW9ucyBvciBub24tU1NQCiAJICogZGV2aWNlcyB3aXRoIHNlY19sZXZlbCBISUdIICovCiAJaWYgKCEoaGRldi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPnNzcF9tb2RlID4gMCkgJiYKLQkJCQkJY29ubi0+c2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX0hJR0gpCisJCQkJY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfSElHSCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKQEAgLTEwOTUsOSArMTA5NSwxMCBAQAogCiAJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpKTsKIAlpZiAoY29ubikgewotCQlpZiAoIWV2LT5zdGF0dXMpCisJCWlmICghZXYtPnN0YXR1cykgewogCQkJY29ubi0+bGlua19tb2RlIHw9IEhDSV9MTV9BVVRIOwotCQllbHNlCisJCQljb25uLT5zZWNfbGV2ZWwgPSBjb25uLT5wZW5kaW5nX3NlY19sZXZlbDsKKwkJfSBlbHNlCiAJCQljb25uLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CiAKIAkJY2xlYXJfYml0KEhDSV9DT05OX0FVVEhfUEVORCwgJmNvbm4tPnBlbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IGM3OTFmY2QuLjY3NTYxNGUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTMwNSwzMyArMzA1LDQ0IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHU4IGwyY2FwX2dldF9hdXRoX3R5cGUoc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1JBVykgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCXJldHVybiBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkdfTUlUTTsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCQlyZXR1cm4gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HOworCQl9CisJfSBlbHNlIGlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJCXJldHVybiBIQ0lfQVRfTk9fQk9ORElOR19NSVRNOworCQllbHNlCisJCQlyZXR1cm4gSENJX0FUX05PX0JPTkRJTkc7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgeworCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CisJCQlyZXR1cm4gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCXJldHVybiBIQ0lfQVRfR0VORVJBTF9CT05ESU5HOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HOworCQl9CisJfQorfQorCiAvKiBTZXJ2aWNlIGxldmVsIHNlY3VyaXR5ICovCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jaGVja19zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CiAJX191OCBhdXRoX3R5cGU7CiAKLQlpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgewotCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HX01JVE07Ci0JCWVsc2UKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCi0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCi0JCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKLQkJCWJyZWFrOwotCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJYXV0aF90eXBlID0gbDJjYXBfZ2V0X2F1dGhfdHlwZShzayk7CiAKIAlyZXR1cm4gaGNpX2Nvbm5fc2VjdXJpdHkoY29ubi0+aGNvbiwgbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsCiAJCQkJCQkJCWF1dGhfdHlwZSk7CkBAIC04NDgsNiArODU5LDcgQEAKIAkJCQlyZXN1bHQgPSBMMkNBUF9DUl9TRUNfQkxPQ0s7CiAJCQllbHNlCiAJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfQkFEX1BTTTsKKwkJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47CiAKIAkJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwogCQkJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CkBAIC0xMDY4LDM5ICsxMDgwLDcgQEAKIAogCWVyciA9IC1FTk9NRU07CiAKLQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19SQVcpIHsKLQkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgewotCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6Ci0JCQlhdXRoX3R5cGUgPSBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkdfTUlUTTsKLQkJCWJyZWFrOwotCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9ERURJQ0FURURfQk9ORElORzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSBpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgewotCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HX01JVE07Ci0JCWVsc2UKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCi0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCi0JCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKLQkJCWJyZWFrOwotCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJYXV0aF90eXBlID0gbDJjYXBfZ2V0X2F1dGhfdHlwZShzayk7CiAKIAloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgQUNMX0xJTkssIGRzdCwKIAkJCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CkBAIC0xMTI3LDcgKzExMDcsOCBAQAogCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQgJiYKIAkJCQlzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkgewogCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7Ci0JCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNURUQ7CisJCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKQorCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKIAkJfSBlbHNlCiAJCQlsMmNhcF9kb19zdGFydChzayk7CiAJfQpAQCAtMTg5Myw4ICsxODc0LDggQEAKIAkJaWYgKHBpLT5tb2RlID09IEwyQ0FQX01PREVfU1RSRUFNSU5HKSB7CiAJCQlsMmNhcF9zdHJlYW1pbmdfc2VuZChzayk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZICYmCi0JCQkJCXBpLT5jb25uX3N0YXRlICYmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CisJCQlpZiAoKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRU1PVEVfQlVTWSkgJiYKKwkJCQkJKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpKSB7CiAJCQkJZXJyID0gbGVuOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IGZmOGFhYTcuLjZiODM3NzYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTExNjQsNyArMTE2NCw4IEBACiAJCQkgKiBpbml0aWF0b3IgcmZjb21tX3Byb2Nlc3NfcnggYWxyZWFkeSBjYWxscwogCQkJICogcmZjb21tX3Nlc3Npb25fcHV0KCkgKi8KIAkJCWlmIChzLT5zb2NrLT5zay0+c2tfc3RhdGUgIT0gQlRfQ0xPU0VEKQotCQkJCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKKwkJCQlpZiAobGlzdF9lbXB0eSgmcy0+ZGxjcykpCisJCQkJCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwppbmRleCAyNTc1YzJkLi5kN2I5YWY0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwpAQCAtNzI3LDcgKzcyNyw5IEBACiAJCQlicmVhazsKIAkJfQogCisJCXR0eV91bmxvY2soKTsKIAkJc2NoZWR1bGUoKTsKKwkJdHR5X2xvY2soKTsKIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmZGV2LT53YWl0LCAmd2FpdCk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuYwppbmRleCAyODcyMzkzLi44ODQ4NWNjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2ZkYi5jCisrKyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKQEAgLTMyOCwxMiArMzI4LDEyIEBACiAJZmRiID0ga21lbV9jYWNoZV9hbGxvYyhicl9mZGJfY2FjaGUsIEdGUF9BVE9NSUMpOwogCWlmIChmZGIpIHsKIAkJbWVtY3B5KGZkYi0+YWRkci5hZGRyLCBhZGRyLCBFVEhfQUxFTik7Ci0JCWhsaXN0X2FkZF9oZWFkX3JjdSgmZmRiLT5obGlzdCwgaGVhZCk7Ci0KIAkJZmRiLT5kc3QgPSBzb3VyY2U7CiAJCWZkYi0+aXNfbG9jYWwgPSBpc19sb2NhbDsKIAkJZmRiLT5pc19zdGF0aWMgPSBpc19sb2NhbDsKIAkJZmRiLT5hZ2VpbmdfdGltZXIgPSBqaWZmaWVzOworCisJCWhsaXN0X2FkZF9oZWFkX3JjdSgmZmRiLT5obGlzdCwgaGVhZCk7CiAJfQogCXJldHVybiBmZGI7CiB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggNmY2ZDhlMS4uODhlNGFhOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtODAsNyArODAsNyBAQAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkZXN0KSkgewogCQltZHN0ID0gYnJfbWRiX2dldChiciwgc2tiKTsKIAkJaWYgKG1kc3QgfHwgQlJfSU5QVVRfU0tCX0NCX01ST1VURVJTX09OTFkoc2tiKSkgewotCQkJaWYgKChtZHN0ICYmICFobGlzdF91bmhhc2hlZCgmbWRzdC0+bWdsaXN0KSkgfHwKKwkJCWlmICgobWRzdCAmJiBtZHN0LT5tZ2xpc3QpIHx8CiAJCQkgICAgYnJfbXVsdGljYXN0X2lzX3JvdXRlcihicikpCiAJCQkJc2tiMiA9IHNrYjsKIAkJCWJyX211bHRpY2FzdF9mb3J3YXJkKG1kc3QsIHNrYiwgc2tiMik7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCBmNzAxYTIxLi4wMzBhMDAyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTM3LDEwICszNyw5IEBACiAJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChYLCBsb2NrZGVwX2lzX2hlbGQoJmJyLT5tdWx0aWNhc3RfbG9jaykpCiAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLXN0YXRpYyBpbmxpbmUgaW50IGlwdjZfaXNfbG9jYWxfbXVsdGljYXN0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IGlwdjZfaXNfdHJhbnNpZW50X211bHRpY2FzdChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7Ci0JaWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoYWRkcikgJiYKLQkgICAgSVBWNl9BRERSX01DX1NDT1BFKGFkZHIpIDw9IElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUwpCisJaWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoYWRkcikgJiYgSVBWNl9BRERSX01DX0ZMQUdfVFJBTlNJRU5UKGFkZHIpKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMiw4ICsyMzEsNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fCB0aW1lcl9wZW5kaW5nKCZtcC0+dGltZXIpKQogCQlnb3RvIG91dDsKIAotCWlmICghaGxpc3RfdW5oYXNoZWQoJm1wLT5tZ2xpc3QpKQotCQlobGlzdF9kZWxfaW5pdCgmbXAtPm1nbGlzdCk7CisJbXAtPm1nbGlzdCA9IGZhbHNlOwogCiAJaWYgKG1wLT5wb3J0cykKIAkJZ290byBvdXQ7CkBAIC0yNzYsNyArMjc0LDcgQEAKIAkJZGVsX3RpbWVyKCZwLT5xdWVyeV90aW1lcik7CiAJCWNhbGxfcmN1X2JoKCZwLT5yY3UsIGJyX211bHRpY2FzdF9mcmVlX3BnKTsKIAotCQlpZiAoIW1wLT5wb3J0cyAmJiBobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkgJiYKKwkJaWYgKCFtcC0+cG9ydHMgJiYgIW1wLT5tZ2xpc3QgJiYKIAkJICAgIG5ldGlmX3J1bm5pbmcoYnItPmRldikpCiAJCQltb2RfdGltZXIoJm1wLT50aW1lciwgamlmZmllcyk7CiAKQEAgLTQzNiw3ICs0MzQsNiBAQAogCWV0aCA9IGV0aF9oZHIoc2tiKTsKIAogCW1lbWNweShldGgtPmhfc291cmNlLCBici0+ZGV2LT5kZXZfYWRkciwgNik7Ci0JaXB2Nl9ldGhfbWNfbWFwKGdyb3VwLCBldGgtPmhfZGVzdCk7CiAJZXRoLT5oX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiAJc2tiX3B1dChza2IsIHNpemVvZigqZXRoKSk7CiAKQEAgLTQ0OCw4ICs0NDUsMTAgQEAKIAlpcDZoLT5wYXlsb2FkX2xlbiA9IGh0b25zKDggKyBzaXplb2YoKm1sZHEpKTsKIAlpcDZoLT5uZXh0aGRyID0gSVBQUk9UT19IT1BPUFRTOwogCWlwNmgtPmhvcF9saW1pdCA9IDE7Ci0JaXB2Nl9hZGRyX3NldCgmaXA2aC0+c2FkZHIsIDAsIDAsIDAsIDApOworCWlwdjZfZGV2X2dldF9zYWRkcihkZXZfbmV0KGJyLT5kZXYpLCBici0+ZGV2LCAmaXA2aC0+ZGFkZHIsIDAsCisJCQkgICAmaXA2aC0+c2FkZHIpOwogCWlwdjZfYWRkcl9zZXQoJmlwNmgtPmRhZGRyLCBodG9ubCgweGZmMDIwMDAwKSwgMCwgMCwgaHRvbmwoMSkpOworCWlwdjZfZXRoX21jX21hcCgmaXA2aC0+ZGFkZHIsIGV0aC0+aF9kZXN0KTsKIAogCWhvcG9wdCA9ICh1OCAqKShpcDZoICsgMSk7CiAJaG9wb3B0WzBdID0gSVBQUk9UT19JQ01QVjY7CQkvKiBuZXh0IGhkciAqLwpAQCAtNTI4LDcgKzUyNyw3IEBACiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbXAtPmJyOwogCiAJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOwotCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fCBobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkgfHwKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikgfHwgIW1wLT5tZ2xpc3QgfHwKIAkgICAgbXAtPnF1ZXJpZXNfc2VudCA+PSBici0+bXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50KQogCQlnb3RvIG91dDsKIApAQCAtNzE5LDcgKzcxOCw3IEBACiAJCWdvdG8gZXJyOwogCiAJaWYgKCFwb3J0KSB7Ci0JCWhsaXN0X2FkZF9oZWFkKCZtcC0+bWdsaXN0LCAmYnItPm1nbGlzdCk7CisJCW1wLT5tZ2xpc3QgPSB0cnVlOwogCQltb2RfdGltZXIoJm1wLT50aW1lciwgbm93ICsgYnItPm11bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzgxLDExICs3ODAsMTEgQEAKIHsKIAlzdHJ1Y3QgYnJfaXAgYnJfZ3JvdXA7CiAKLQlpZiAoaXB2Nl9pc19sb2NhbF9tdWx0aWNhc3QoZ3JvdXApKQorCWlmICghaXB2Nl9pc190cmFuc2llbnRfbXVsdGljYXN0KGdyb3VwKSkKIAkJcmV0dXJuIDA7CiAKIAlpcHY2X2FkZHJfY29weSgmYnJfZ3JvdXAudS5pcDYsIGdyb3VwKTsKLQlicl9ncm91cC5wcm90byA9IGh0b25zKEVUSF9QX0lQKTsKKwlicl9ncm91cC5wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpOwogCiAJcmV0dXJuIGJyX211bHRpY2FzdF9hZGRfZ3JvdXAoYnIsIHBvcnQsICZicl9ncm91cCk7CiB9CkBAIC0xMDE0LDE4ICsxMDEzLDE5IEBACiAKIAkJbnNyY3MgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLAogCQkJCQkgICBsZW4gKyBvZmZzZXRvZihzdHJ1Y3QgbWxkMl9ncmVjLAotCQkJCQkJCSAgZ3JlY19tY2EpLAorCQkJCQkJCSAgZ3JlY19uc3JjcyksCiAJCQkJCSAgIHNpemVvZihfbnNyY3MpLCAmX25zcmNzKTsKIAkJaWYgKCFuc3JjcykKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmICghcHNrYl9tYXlfcHVsbChza2IsCiAJCQkJICAgbGVuICsgc2l6ZW9mKCpncmVjKSArCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikgKiAoKm5zcmNzKSkpCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikgKiBudG9ocygqbnNyY3MpKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWdyZWMgPSAoc3RydWN0IG1sZDJfZ3JlYyAqKShza2ItPmRhdGEgKyBsZW4pOwotCQlsZW4gKz0gc2l6ZW9mKCpncmVjKSArIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpICogKCpuc3Jjcyk7CisJCWxlbiArPSBzaXplb2YoKmdyZWMpICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpICogbnRvaHMoKm5zcmNzKTsKIAogCQkvKiBXZSB0cmVhdCB0aGVzZSBhcyBNTER2MSByZXBvcnRzIGZvciBub3cuICovCiAJCXN3aXRjaCAoZ3JlYy0+Z3JlY190eXBlKSB7CkBAIC0xMTY1LDcgKzExNjUsNyBAQAogCiAJbWF4X2RlbGF5ICo9IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQ7CiAKLQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCWlmIChtcC0+bWdsaXN0ICYmCiAJICAgICh0aW1lcl9wZW5kaW5nKCZtcC0+dGltZXIpID8KIAkgICAgIHRpbWVfYWZ0ZXIobXAtPnRpbWVyLmV4cGlyZXMsIG5vdyArIG1heF9kZWxheSkgOgogCSAgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZtcC0+dGltZXIpID49IDApKQpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKIAkJaWYgKHRpbWVyX3BlbmRpbmcoJnAtPnRpbWVyKSA/CiAJCSAgICB0aW1lX2FmdGVyKHAtPnRpbWVyLmV4cGlyZXMsIG5vdyArIG1heF9kZWxheSkgOgogCQkgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZwLT50aW1lcikgPj0gMCkKLQkJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBub3cgKyBtYXhfZGVsYXkpOworCQkJbW9kX3RpbWVyKCZwLT50aW1lciwgbm93ICsgbWF4X2RlbGF5KTsKIAl9CiAKIG91dDoKQEAgLTEyMzYsNyArMTIzNiw3IEBACiAJCWdvdG8gb3V0OwogCiAJbWF4X2RlbGF5ICo9IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQ7Ci0JaWYgKCFobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkgJiYKKwlpZiAobXAtPm1nbGlzdCAmJgogCSAgICAodGltZXJfcGVuZGluZygmbXAtPnRpbWVyKSA/CiAJICAgICB0aW1lX2FmdGVyKG1wLT50aW1lci5leHBpcmVzLCBub3cgKyBtYXhfZGVsYXkpIDoKIAkgICAgIHRyeV90b19kZWxfdGltZXJfc3luYygmbXAtPnRpbWVyKSA+PSAwKSkKQEAgLTEyNDgsNyArMTI0OCw3IEBACiAJCWlmICh0aW1lcl9wZW5kaW5nKCZwLT50aW1lcikgPwogCQkgICAgdGltZV9hZnRlcihwLT50aW1lci5leHBpcmVzLCBub3cgKyBtYXhfZGVsYXkpIDoKIAkJICAgIHRyeV90b19kZWxfdGltZXJfc3luYygmcC0+dGltZXIpID49IDApCi0JCQltb2RfdGltZXIoJm1wLT50aW1lciwgbm93ICsgbWF4X2RlbGF5KTsKKwkJCW1vZF90aW1lcigmcC0+dGltZXIsIG5vdyArIG1heF9kZWxheSk7CiAJfQogCiBvdXQ6CkBAIC0xMjgzLDcgKzEyODMsNyBAQAogCQkgICAgIGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfaW50ZXJ2YWw7CiAKIAlpZiAoIXBvcnQpIHsKLQkJaWYgKCFobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkgJiYKKwkJaWYgKG1wLT5tZ2xpc3QgJiYKIAkJICAgICh0aW1lcl9wZW5kaW5nKCZtcC0+dGltZXIpID8KIAkJICAgICB0aW1lX2FmdGVyKG1wLT50aW1lci5leHBpcmVzLCB0aW1lKSA6CiAJCSAgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZtcC0+dGltZXIpID49IDApKSB7CkBAIC0xMzQxLDcgKzEzNDEsNyBAQAogewogCXN0cnVjdCBicl9pcCBicl9ncm91cDsKIAotCWlmIChpcHY2X2lzX2xvY2FsX211bHRpY2FzdChncm91cCkpCisJaWYgKCFpcHY2X2lzX3RyYW5zaWVudF9tdWx0aWNhc3QoZ3JvdXApKQogCQlyZXR1cm47CiAKIAlpcHY2X2FkZHJfY29weSgmYnJfZ3JvdXAudS5pcDYsIGdyb3VwKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggODRhYWM3Ny4uNGUxYjYyMCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTg0LDEzICs4NCwxMyBAQAogc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5CiB7CiAJc3RydWN0IGhsaXN0X25vZGUJCWhsaXN0WzJdOwotCXN0cnVjdCBobGlzdF9ub2RlCQltZ2xpc3Q7CiAJc3RydWN0IG5ldF9icmlkZ2UJCSpicjsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICpwb3J0czsKIAlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3U7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0CQlxdWVyeV90aW1lcjsKIAlzdHJ1Y3QgYnJfaXAJCQlhZGRyOworCWJvb2wJCQkJbWdsaXN0OwogCXUzMgkJCQlxdWVyaWVzX3NlbnQ7CiB9OwogCkBAIC0yMzgsNyArMjM4LDYgQEAKIAlzcGlubG9ja190CQkJbXVsdGljYXN0X2xvY2s7CiAJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSBfX3JjdSAqbWRiOwogCXN0cnVjdCBobGlzdF9oZWFkCQlyb3V0ZXJfbGlzdDsKLQlzdHJ1Y3QgaGxpc3RfaGVhZAkJbWdsaXN0OwogCiAJc3RydWN0IHRpbWVyX2xpc3QJCW11bHRpY2FzdF9yb3V0ZXJfdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QJCW11bHRpY2FzdF9xdWVyaWVyX3RpbWVyOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2hubF9uZXQuYyBiL25ldC9jYWlmL2NobmxfbmV0LmMKaW5kZXggZmE5ZGFiMy4uNjAwOGQ2ZCAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2hubF9uZXQuYworKysgYi9uZXQvY2FpZi9jaG5sX25ldC5jCkBAIC0zOTQsOSArMzk0LDcgQEAKIAlwcml2LT5jb25uX3JlcS5zb2NrYWRkci51LmRnbS5jb25uZWN0aW9uX2lkID0gLTE7CiAJcHJpdi0+Zmxvd2VuYWJsZWQgPSBmYWxzZTsKIAotCUFTU0VSVF9SVE5MKCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+bmV0bWdtdF93cSk7Ci0JbGlzdF9hZGQoJnByaXYtPmxpc3RfZmllbGQsICZjaG5sX25ldF9saXN0KTsKIH0KIAogCkBAIC00NTMsNiArNDUxLDggQEAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAocmV0KQogCQlwcl93YXJuKCJkZXZpY2UgcnRtbCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwllbHNlCisJCWxpc3RfYWRkKCZjYWlmZGV2LT5saXN0X2ZpZWxkLCAmY2hubF9uZXRfbGlzdCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXIuYwppbmRleCBkZmY2MzNkLi4wNWYzNTc4IDEwMDY0NAotLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXIuYworKysgYi9uZXQvY2VwaC9tZXNzZW5nZXIuYwpAQCAtMjUyLDggKzI1MiwxMiBAQAogewogCXN0cnVjdCBrdmVjIGlvdiA9IHtidWYsIGxlbn07CiAJc3RydWN0IG1zZ2hkciBtc2cgPSB7IC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQgfCBNU0dfTk9TSUdOQUwgfTsKKwlpbnQgcjsKIAotCXJldHVybiBrZXJuZWxfcmVjdm1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBsZW4sIG1zZy5tc2dfZmxhZ3MpOworCXIgPSBrZXJuZWxfcmVjdm1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBsZW4sIG1zZy5tc2dfZmxhZ3MpOworCWlmIChyID09IC1FQUdBSU4pCisJCXIgPSAwOworCXJldHVybiByOwogfQogCiAvKgpAQCAtMjY0LDEzICsyNjgsMTcgQEAKIAkJICAgICBzaXplX3Qga3ZsZW4sIHNpemVfdCBsZW4sIGludCBtb3JlKQogewogCXN0cnVjdCBtc2doZHIgbXNnID0geyAubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlUIHwgTVNHX05PU0lHTkFMIH07CisJaW50IHI7CiAKIAlpZiAobW9yZSkKIAkJbXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTsKIAllbHNlCiAJCW1zZy5tc2dfZmxhZ3MgfD0gTVNHX0VPUjsgIC8qIHN1cGVyZmx1b3VzLCBidXQgd2hhdCB0aGUgaGVsbCAqLwogCi0JcmV0dXJuIGtlcm5lbF9zZW5kbXNnKHNvY2ssICZtc2csIGlvdiwga3ZsZW4sIGxlbik7CisJciA9IGtlcm5lbF9zZW5kbXNnKHNvY2ssICZtc2csIGlvdiwga3ZsZW4sIGxlbik7CisJaWYgKHIgPT0gLUVBR0FJTikKKwkJciA9IDA7CisJcmV0dXJuIHI7CiB9CiAKIApAQCAtMzI4LDcgKzMzNiw2IEBACiAJCWNlcGhfbXNnX3B1dChjb24tPm91dF9tc2cpOwogCQljb24tPm91dF9tc2cgPSBOVUxMOwogCX0KLQljb24tPm91dF9rZWVwYWxpdmVfcGVuZGluZyA9IGZhbHNlOwogCWNvbi0+aW5fc2VxID0gMDsKIAljb24tPmluX3NlcV9hY2tlZCA9IDA7CiB9CkBAIC04NDcsNiArODU0LDggQEAKIAkJICAgIChtc2ctPnBhZ2VzIHx8IG1zZy0+cGFnZWxpc3QgfHwgbXNnLT5iaW8gfHwgaW5fdHJhaWwpKQogCQkJa3VubWFwKHBhZ2UpOwogCisJCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJCXJldCA9IDA7CiAJCWlmIChyZXQgPD0gMCkKIAkJCWdvdG8gb3V0OwogCkBAIC0xMjM4LDggKzEyNDcsNiBAQAogCQkgICAgIGNvbi0+YXV0aF9yZXRyeSk7CiAJCWlmIChjb24tPmF1dGhfcmV0cnkgPT0gMikgewogCQkJY29uLT5lcnJvcl9tc2cgPSAiY29ubmVjdCBhdXRob3JpemF0aW9uIGZhaWx1cmUiOwotCQkJcmVzZXRfY29ubmVjdGlvbihjb24pOwotCQkJc2V0X2JpdChDTE9TRUQsICZjb24tPnN0YXRlKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQljb24tPmF1dGhfcmV0cnkgPSAxOwpAQCAtMTcwNSwxNCArMTcxMiw2IEBACiAKIAkvKiBvcGVuIHRoZSBzb2NrZXQgZmlyc3Q/ICovCiAJaWYgKGNvbi0+c29jayA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIGlmIHdlIHdlcmUgU1RBTkRCWSBhbmQgYXJlIHJlY29ubmVjdGluZyBfdGhpc18KLQkJICogY29ubmVjdGlvbiwgYnVtcCBjb25uZWN0X3NlcSBub3cuICBBbHdheXMgYnVtcAotCQkgKiBnbG9iYWxfc2VxLgotCQkgKi8KLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTVEFOREJZLCAmY29uLT5zdGF0ZSkpCi0JCQljb24tPmNvbm5lY3Rfc2VxKys7Ci0KIAkJcHJlcGFyZV93cml0ZV9iYW5uZXIobXNnciwgY29uKTsKIAkJcHJlcGFyZV93cml0ZV9jb25uZWN0KG1zZ3IsIGNvbiwgMSk7CiAJCXByZXBhcmVfcmVhZF9iYW5uZXIoY29uKTsKQEAgLTE3MzcsMTYgKzE3MzYsMTIgQEAKIAlpZiAoY29uLT5vdXRfc2tpcCkgewogCQlyZXQgPSB3cml0ZV9wYXJ0aWFsX3NraXAoY29uKTsKIAkJaWYgKHJldCA8PSAwKQotCQkJZ290byBkb25lOwotCQlpZiAocmV0IDwgMCkgewotCQkJZG91dCgidHJ5X3dyaXRlIHdyaXRlX3BhcnRpYWxfc2tpcCBlcnIgJWRcbiIsIHJldCk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KKwkJCWdvdG8gb3V0OwogCX0KIAlpZiAoY29uLT5vdXRfa3ZlY19sZWZ0KSB7CiAJCXJldCA9IHdyaXRlX3BhcnRpYWxfa3ZlYyhjb24pOwogCQlpZiAocmV0IDw9IDApCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBtc2cgcGFnZXM/ICovCkBAIC0xNzYxLDExICsxNzU2LDExIEBACiAJCWlmIChyZXQgPT0gMSkKIAkJCWdvdG8gbW9yZV9rdmVjOyAgLyogd2UgbmVlZCB0byBzZW5kIHRoZSBmb290ZXIsIHRvbyEgKi8KIAkJaWYgKHJldCA9PSAwKQotCQkJZ290byBkb25lOworCQkJZ290byBvdXQ7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkb3V0KCJ0cnlfd3JpdGUgd3JpdGVfcGFydGlhbF9tc2dfcGFnZXMgZXJyICVkXG4iLAogCQkJICAgICByZXQpOwotCQkJZ290byBkb25lOworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKQEAgLTE3ODksMTAgKzE3ODQsOSBAQAogCS8qIE5vdGhpbmcgdG8gZG8hICovCiAJY2xlYXJfYml0KFdSSVRFX1BFTkRJTkcsICZjb24tPnN0YXRlKTsKIAlkb3V0KCJ0cnlfd3JpdGUgbm90aGluZyBlbHNlIHRvIHdyaXRlLlxuIik7Ci1kb25lOgogCXJldCA9IDA7CiBvdXQ6Ci0JZG91dCgidHJ5X3dyaXRlIGRvbmUgb24gJXBcbiIsIGNvbik7CisJZG91dCgidHJ5X3dyaXRlIGRvbmUgb24gJXAgcmV0ICVkXG4iLCBjb24sIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTgyMSwxOSArMTgxNSwxNyBAQAogCQkJZG91dCgidHJ5X3JlYWQgY29ubmVjdGluZ1xuIik7CiAJCQlyZXQgPSByZWFkX3BhcnRpYWxfYmFubmVyKGNvbik7CiAJCQlpZiAocmV0IDw9IDApCi0JCQkJZ290byBkb25lOwotCQkJaWYgKHByb2Nlc3NfYmFubmVyKGNvbikgPCAwKSB7Ci0JCQkJcmV0ID0gLTE7CiAJCQkJZ290byBvdXQ7Ci0JCQl9CisJCQlyZXQgPSBwcm9jZXNzX2Jhbm5lcihjb24pOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXQ7CiAJCX0KIAkJcmV0ID0gcmVhZF9wYXJ0aWFsX2Nvbm5lY3QoY29uKTsKIAkJaWYgKHJldCA8PSAwKQotCQkJZ290byBkb25lOwotCQlpZiAocHJvY2Vzc19jb25uZWN0KGNvbikgPCAwKSB7Ci0JCQlyZXQgPSAtMTsKIAkJCWdvdG8gb3V0OwotCQl9CisJCXJldCA9IHByb2Nlc3NfY29ubmVjdChjb24pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OwogCQlnb3RvIG1vcmU7CiAJfQogCkBAIC0xODQ4LDcgKzE4NDAsNyBAQAogCQlkb3V0KCJza2lwcGluZyAlZCAvICVkIGJ5dGVzXG4iLCBza2lwLCAtY29uLT5pbl9iYXNlX3Bvcyk7CiAJCXJldCA9IGNlcGhfdGNwX3JlY3Ztc2coY29uLT5zb2NrLCBidWYsIHNraXApOwogCQlpZiAocmV0IDw9IDApCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJY29uLT5pbl9iYXNlX3BvcyArPSByZXQ7CiAJCWlmIChjb24tPmluX2Jhc2VfcG9zKQogCQkJZ290byBtb3JlOwpAQCAtMTg1OSw3ICsxODUxLDcgQEAKIAkJICovCiAJCXJldCA9IGNlcGhfdGNwX3JlY3Ztc2coY29uLT5zb2NrLCAmY29uLT5pbl90YWcsIDEpOwogCQlpZiAocmV0IDw9IDApCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJZG91dCgidHJ5X3JlYWQgZ290IHRhZyAlZFxuIiwgKGludCljb24tPmluX3RhZyk7CiAJCXN3aXRjaCAoY29uLT5pbl90YWcpIHsKIAkJY2FzZSBDRVBIX01TR1JfVEFHX01TRzoKQEAgLTE4NzAsNyArMTg2Miw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBDRVBIX01TR1JfVEFHX0NMT1NFOgogCQkJc2V0X2JpdChDTE9TRUQsICZjb24tPnN0YXRlKTsgICAvKiBmaXhtZSAqLwotCQkJZ290byBkb25lOworCQkJZ290byBvdXQ7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGJhZF90YWc7CiAJCX0KQEAgLTE4ODIsMTMgKzE4NzQsMTIgQEAKIAkJCWNhc2UgLUVCQURNU0c6CiAJCQkJY29uLT5lcnJvcl9tc2cgPSAiYmFkIGNyYyI7CiAJCQkJcmV0ID0gLUVJTzsKLQkJCQlnb3RvIG91dDsKKwkJCQlicmVhazsKIAkJCWNhc2UgLUVJTzoKIAkJCQljb24tPmVycm9yX21zZyA9ICJpbyBlcnJvciI7Ci0JCQkJZ290byBvdXQ7Ci0JCQlkZWZhdWx0OgotCQkJCWdvdG8gZG9uZTsKKwkJCQlicmVhazsKIAkJCX0KKwkJCWdvdG8gb3V0OwogCQl9CiAJCWlmIChjb24tPmluX3RhZyA9PSBDRVBIX01TR1JfVEFHX1JFQURZKQogCQkJZ290byBtb3JlOwpAQCAtMTg5OCwxNSArMTg4OSwxMyBAQAogCWlmIChjb24tPmluX3RhZyA9PSBDRVBIX01TR1JfVEFHX0FDSykgewogCQlyZXQgPSByZWFkX3BhcnRpYWxfYWNrKGNvbik7CiAJCWlmIChyZXQgPD0gMCkKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gb3V0OwogCQlwcm9jZXNzX2Fjayhjb24pOwogCQlnb3RvIG1vcmU7CiAJfQogCi1kb25lOgotCXJldCA9IDA7CiBvdXQ6Ci0JZG91dCgidHJ5X3JlYWQgZG9uZSBvbiAlcFxuIiwgY29uKTsKKwlkb3V0KCJ0cnlfcmVhZCBkb25lIG9uICVwIHJldCAlZFxuIiwgY29uLCByZXQpOwogCXJldHVybiByZXQ7CiAKIGJhZF90YWc6CkBAIC0xOTUxLDcgKzE5NDAsMjQgQEAKIAkJCQkJCSAgIHdvcmsud29yayk7CiAKIAltdXRleF9sb2NrKCZjb24tPm11dGV4KTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJBQ0tPRkYsICZjb24tPnN0YXRlKSkgeworCQlkb3V0KCJjb25fd29yayAlcCBiYWNraW5nIG9mZlxuIiwgY29uKTsKKwkJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhjZXBoX21zZ3Jfd3EsICZjb24tPndvcmssCisJCQkJICAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoY29uLT5kZWxheSkpKSB7CisJCQlkb3V0KCJjb25fd29yayAlcCBiYWNrb2ZmICVsdVxuIiwgY29uLCBjb24tPmRlbGF5KTsKKwkJCW11dGV4X3VubG9jaygmY29uLT5tdXRleCk7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQljb24tPm9wcy0+cHV0KGNvbik7CisJCQlkb3V0KCJjb25fd29yayAlcCBGQUlMRUQgdG8gYmFjayBvZmYgJWx1XG4iLCBjb24sCisJCQkgICAgIGNvbi0+ZGVsYXkpOworCQl9CisJfQogCisJaWYgKHRlc3RfYml0KFNUQU5EQlksICZjb24tPnN0YXRlKSkgeworCQlkb3V0KCJjb25fd29yayAlcCBTVEFOREJZXG4iLCBjb24pOworCQlnb3RvIGRvbmU7CisJfQogCWlmICh0ZXN0X2JpdChDTE9TRUQsICZjb24tPnN0YXRlKSkgeyAvKiBlLmcuIGlmIHdlIGFyZSByZXBsYWNlZCAqLwogCQlkb3V0KCJjb25fd29yayBDTE9TRURcbiIpOwogCQljb25fY2xvc2Vfc29ja2V0KGNvbik7CkBAIC0yMDA4LDEwICsyMDE0LDEyIEBACiAJLyogUmVxdWV1ZSBhbnl0aGluZyB0aGF0IGhhc24ndCBiZWVuIGFja2VkICovCiAJbGlzdF9zcGxpY2VfaW5pdCgmY29uLT5vdXRfc2VudCwgJmNvbi0+b3V0X3F1ZXVlKTsKIAotCS8qIElmIHRoZXJlIGFyZSBubyBtZXNzYWdlcyBpbiB0aGUgcXVldWUsIHBsYWNlIHRoZSBjb25uZWN0aW9uCi0JICogaW4gYSBTVEFOREJZIHN0YXRlIChpLmUuLCBkb24ndCB0cnkgdG8gcmVjb25uZWN0IGp1c3QgeWV0KS4gKi8KLQlpZiAobGlzdF9lbXB0eSgmY29uLT5vdXRfcXVldWUpICYmICFjb24tPm91dF9rZWVwYWxpdmVfcGVuZGluZykgewotCQlkb3V0KCJmYXVsdCBzZXR0aW5nIFNUQU5EQllcbiIpOworCS8qIElmIHRoZXJlIGFyZSBubyBtZXNzYWdlcyBxdWV1ZWQgb3Iga2VlcGFsaXZlIHBlbmRpbmcsIHBsYWNlCisJICogdGhlIGNvbm5lY3Rpb24gaW4gYSBTVEFOREJZIHN0YXRlICovCisJaWYgKGxpc3RfZW1wdHkoJmNvbi0+b3V0X3F1ZXVlKSAmJgorCSAgICAhdGVzdF9iaXQoS0VFUEFMSVZFX1BFTkRJTkcsICZjb24tPnN0YXRlKSkgeworCQlkb3V0KCJmYXVsdCAlcCBzZXR0aW5nIFNUQU5EQlkgY2xlYXJpbmcgV1JJVEVfUEVORElOR1xuIiwgY29uKTsKKwkJY2xlYXJfYml0KFdSSVRFX1BFTkRJTkcsICZjb24tPnN0YXRlKTsKIAkJc2V0X2JpdChTVEFOREJZLCAmY29uLT5zdGF0ZSk7CiAJfSBlbHNlIHsKIAkJLyogcmV0cnkgYWZ0ZXIgYSBkZWxheS4gKi8KQEAgLTIwMTksMTEgKzIwMjcsMjQgQEAKIAkJCWNvbi0+ZGVsYXkgPSBCQVNFX0RFTEFZX0lOVEVSVkFMOwogCQllbHNlIGlmIChjb24tPmRlbGF5IDwgTUFYX0RFTEFZX0lOVEVSVkFMKQogCQkJY29uLT5kZWxheSAqPSAyOwotCQlkb3V0KCJmYXVsdCBxdWV1ZWluZyAlcCBkZWxheSAlbHVcbiIsIGNvbiwgY29uLT5kZWxheSk7CiAJCWNvbi0+b3BzLT5nZXQoY29uKTsKIAkJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhjZXBoX21zZ3Jfd3EsICZjb24tPndvcmssCi0JCQkJICAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoY29uLT5kZWxheSkpID09IDApCisJCQkJICAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoY29uLT5kZWxheSkpKSB7CisJCQlkb3V0KCJmYXVsdCBxdWV1ZWQgJXAgZGVsYXkgJWx1XG4iLCBjb24sIGNvbi0+ZGVsYXkpOworCQl9IGVsc2UgewogCQkJY29uLT5vcHMtPnB1dChjb24pOworCQkJZG91dCgiZmF1bHQgZmFpbGVkIHRvIHF1ZXVlICVwIGRlbGF5ICVsdSwgYmFja29mZlxuIiwKKwkJCSAgICAgY29uLCBjb24tPmRlbGF5KTsKKwkJCS8qCisJCQkgKiBJbiBtYW55IGNhc2VzIHdlIHNlZSBhIHNvY2tldCBzdGF0ZSBjaGFuZ2UKKwkJCSAqIHdoaWxlIGNvbl93b3JrIGlzIHJ1bm5pbmcgYW5kIGVuZCB1cAorCQkJICogcXVldWluZyAobm9uLWRlbGF5ZWQpIHdvcmssIHN1Y2ggdGhhdCB3ZQorCQkJICogY2FuJ3QgYmFja29mZiB3aXRoIGEgZGVsYXkuICBTZXQgYSBmbGFnIHNvCisJCQkgKiB0aGF0IHdoZW4gY29uX3dvcmsgcmVzdGFydHMgd2Ugc2NoZWR1bGUgdGhlCisJCQkgKiBkZWxheSB0aGVuLgorCQkJICovCisJCQlzZXRfYml0KEJBQ0tPRkYsICZjb24tPnN0YXRlKTsKKwkJfQogCX0KIAogb3V0X3VubG9jazoKQEAgLTIwOTQsNiArMjExNSwxOSBAQAogfQogRVhQT1JUX1NZTUJPTChjZXBoX21lc3Nlbmdlcl9kZXN0cm95KTsKIAorc3RhdGljIHZvaWQgY2xlYXJfc3RhbmRieShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pCit7CisJLyogY29tZSBiYWNrIGZyb20gU1RBTkRCWT8gKi8KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUQU5EQlksICZjb24tPnN0YXRlKSkgeworCQltdXRleF9sb2NrKCZjb24tPm11dGV4KTsKKwkJZG91dCgiY2xlYXJfc3RhbmRieSAlcCBhbmQgKytjb25uZWN0X3NlcVxuIiwgY29uKTsKKwkJY29uLT5jb25uZWN0X3NlcSsrOworCQlXQVJOX09OKHRlc3RfYml0KFdSSVRFX1BFTkRJTkcsICZjb24tPnN0YXRlKSk7CisJCVdBUk5fT04odGVzdF9iaXQoS0VFUEFMSVZFX1BFTkRJTkcsICZjb24tPnN0YXRlKSk7CisJCW11dGV4X3VubG9jaygmY29uLT5tdXRleCk7CisJfQorfQorCiAvKgogICogUXVldWUgdXAgYW4gb3V0Z29pbmcgbWVzc2FnZSBvbiB0aGUgZ2l2ZW4gY29ubmVjdGlvbi4KICAqLwpAQCAtMjEyNiw2ICsyMTYwLDcgQEAKIAogCS8qIGlmIHRoZXJlIHdhc24ndCBhbnl0aGluZyB3YWl0aW5nIHRvIHNlbmQgYmVmb3JlLCBxdWV1ZQogCSAqIG5ldyB3b3JrICovCisJY2xlYXJfc3RhbmRieShjb24pOwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFdSSVRFX1BFTkRJTkcsICZjb24tPnN0YXRlKSA9PSAwKQogCQlxdWV1ZV9jb24oY29uKTsKIH0KQEAgLTIxOTEsNiArMjIyNiw4IEBACiAgKi8KIHZvaWQgY2VwaF9jb25fa2VlcGFsaXZlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbikKIHsKKwlkb3V0KCJjb25fa2VlcGFsaXZlICVwXG4iLCBjb24pOworCWNsZWFyX3N0YW5kYnkoY29uKTsKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChLRUVQQUxJVkVfUEVORElORywgJmNvbi0+c3RhdGUpID09IDAgJiYKIAkgICAgdGVzdF9hbmRfc2V0X2JpdChXUklURV9QRU5ESU5HLCAmY29uLT5zdGF0ZSkgPT0gMCkKIAkJcXVldWVfY29uKGNvbik7CmRpZmYgLS1naXQgYS9uZXQvY2VwaC9wYWdldmVjLmMgYi9uZXQvY2VwaC9wYWdldmVjLmMKaW5kZXggMWEwNDBlNi4uY2Q5YzIxZCAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvcGFnZXZlYy5jCisrKyBiL25ldC9jZXBoL3BhZ2V2ZWMuYwpAQCAtMTYsMjIgKzE2LDMwIEBACiAJCQkJCSAgaW50IG51bV9wYWdlcywgYm9vbCB3cml0ZV9wYWdlKQogewogCXN0cnVjdCBwYWdlICoqcGFnZXM7Ci0JaW50IHJjOworCWludCBnb3QgPSAwOworCWludCByYyA9IDA7CiAKIAlwYWdlcyA9IGttYWxsb2Moc2l6ZW9mKCpwYWdlcykgKiBudW1fcGFnZXMsIEdGUF9OT0ZTKTsKIAlpZiAoIXBhZ2VzKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlyYyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCAodW5zaWduZWQgbG9uZylkYXRhLAotCQkJICAgIG51bV9wYWdlcywgd3JpdGVfcGFnZSwgMCwgcGFnZXMsIE5VTEwpOworCXdoaWxlIChnb3QgPCBudW1fcGFnZXMpIHsKKwkJcmMgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwKKwkJICAgICh1bnNpZ25lZCBsb25nKWRhdGEgKyAoKHVuc2lnbmVkIGxvbmcpZ290ICogUEFHRV9TSVpFKSwKKwkJICAgIG51bV9wYWdlcyAtIGdvdCwgd3JpdGVfcGFnZSwgMCwgcGFnZXMgKyBnb3QsIE5VTEwpOworCQlpZiAocmMgPCAwKQorCQkJYnJlYWs7CisJCUJVR19PTihyYyA9PSAwKTsKKwkJZ290ICs9IHJjOworCX0KIAl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCWlmIChyYyA8IG51bV9wYWdlcykKKwlpZiAocmMgPCAwKQogCQlnb3RvIGZhaWw7CiAJcmV0dXJuIHBhZ2VzOwogCiBmYWlsOgotCWNlcGhfcHV0X3BhZ2VfdmVjdG9yKHBhZ2VzLCByYyA+IDAgPyByYyA6IDAsIGZhbHNlKTsKKwljZXBoX3B1dF9wYWdlX3ZlY3RvcihwYWdlcywgZ290LCBmYWxzZSk7CiAJcmV0dXJuIEVSUl9QVFIocmMpOwogfQogRVhQT1JUX1NZTUJPTChjZXBoX2dldF9kaXJlY3RfcGFnZV92ZWN0b3IpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA3YzZhNDZmLi44YWU2NjMxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzQ5LDcgKzc0OSw4IEBACiAgKglAaGE6IGhhcmR3YXJlIGFkZHJlc3MKICAqCiAgKglTZWFyY2ggZm9yIGFuIGludGVyZmFjZSBieSBNQUMgYWRkcmVzcy4gUmV0dXJucyBOVUxMIGlmIHRoZSBkZXZpY2UKLSAqCWlzIG5vdCBmb3VuZCBvciBhIHBvaW50ZXIgdG8gdGhlIGRldmljZS4gVGhlIGNhbGxlciBtdXN0IGhvbGQgUkNVCisgKglpcyBub3QgZm91bmQgb3IgYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UuCisgKglUaGUgY2FsbGVyIG11c3QgaG9sZCBSQ1Ugb3IgUlROTC4KICAqCVRoZSByZXR1cm5lZCBkZXZpY2UgaGFzIG5vdCBoYWQgaXRzIHJlZiBjb3VudCBpbmNyZWFzZWQKICAqCWFuZCB0aGUgY2FsbGVyIG11c3QgdGhlcmVmb3JlIGJlIGNhcmVmdWwgYWJvdXQgbG9ja2luZwogICoKQEAgLTEyNzksMTAgKzEyODAsMTMgQEAKIAogc3RhdGljIGludCBfX2Rldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCWludCByZXR2YWw7CiAJTElTVF9IRUFEKHNpbmdsZSk7CiAKIAlsaXN0X2FkZCgmZGV2LT51bnJlZ19saXN0LCAmc2luZ2xlKTsKLQlyZXR1cm4gX19kZXZfY2xvc2VfbWFueSgmc2luZ2xlKTsKKwlyZXR2YWwgPSBfX2Rldl9jbG9zZV9tYW55KCZzaW5nbGUpOworCWxpc3RfZGVsKCZzaW5nbGUpOworCXJldHVybiByZXR2YWw7CiB9CiAKIGludCBkZXZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQpAQCAtMTMyNCw3ICsxMzI4LDcgQEAKIAogCWxpc3RfYWRkKCZkZXYtPnVucmVnX2xpc3QsICZzaW5nbGUpOwogCWRldl9jbG9zZV9tYW55KCZzaW5nbGUpOwotCisJbGlzdF9kZWwoJnNpbmdsZSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRldl9jbG9zZSk7CkBAIC0yNTYyLDcgKzI1NjYsOCBAQAogCiAJbWFwID0gcmN1X2RlcmVmZXJlbmNlKHJ4cXVldWUtPnJwc19tYXApOwogCWlmIChtYXApIHsKLQkJaWYgKG1hcC0+bGVuID09IDEpIHsKKwkJaWYgKG1hcC0+bGVuID09IDEgJiYKKwkJICAgICFyY3VfZGVyZWZlcmVuY2VfcmF3KHJ4cXVldWUtPnJwc19mbG93X3RhYmxlKSkgewogCQkJdGNwdSA9IG1hcC0+Y3B1c1swXTsKIAkJCWlmIChjcHVfb25saW5lKHRjcHUpKQogCQkJCWNwdSA9IHRjcHU7CkBAIC0zNDIzLDYgKzM0MjgsOCBAQAogCV9fc2tiX3B1bGwoc2tiLCBza2JfaGVhZGxlbihza2IpKTsKIAlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTiAtIHNrYl9oZWFkcm9vbShza2IpKTsKIAlza2ItPnZsYW5fdGNpID0gMDsKKwlza2ItPmRldiA9IG5hcGktPmRldjsKKwlza2ItPnNrYl9paWYgPSAwOwogCiAJbmFwaS0+c2tiID0gc2tiOwogfQpAQCAtNTA1OSw2ICs1MDY2LDcgQEAKIAogCWxpc3RfYWRkKCZkZXYtPnVucmVnX2xpc3QsICZzaW5nbGUpOwogCXJvbGxiYWNrX3JlZ2lzdGVyZWRfbWFueSgmc2luZ2xlKTsKKwlsaXN0X2RlbCgmc2luZ2xlKTsKIH0KIAogdW5zaWduZWQgbG9uZyBuZXRkZXZfZml4X2ZlYXR1cmVzKHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMsIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC01NjU2LDE4ICs1NjY0LDYgQEAKIAogCWRldl9uZXRfc2V0KGRldiwgJmluaXRfbmV0KTsKIAotCWRldi0+bnVtX3R4X3F1ZXVlcyA9IHR4cXM7Ci0JZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSB0eHFzOwotCWlmIChuZXRpZl9hbGxvY19uZXRkZXZfcXVldWVzKGRldikpCi0JCWdvdG8gZnJlZV9wY3B1OwotCi0jaWZkZWYgQ09ORklHX1JQUwotCWRldi0+bnVtX3J4X3F1ZXVlcyA9IHJ4cXM7Ci0JZGV2LT5yZWFsX251bV9yeF9xdWV1ZXMgPSByeHFzOwotCWlmIChuZXRpZl9hbGxvY19yeF9xdWV1ZXMoZGV2KSkKLQkJZ290byBmcmVlX3BjcHU7Ci0jZW5kaWYKLQogCWRldi0+Z3NvX21heF9zaXplID0gR1NPX01BWF9TSVpFOwogCiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZXRodG9vbF9udHVwbGVfbGlzdC5saXN0KTsKQEAgLTU2NzcsOSArNTY3MywyNiBAQAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmxpbmtfd2F0Y2hfbGlzdCk7CiAJZGV2LT5wcml2X2ZsYWdzID0gSUZGX1hNSVRfRFNUX1JFTEVBU0U7CiAJc2V0dXAoZGV2KTsKKworCWRldi0+bnVtX3R4X3F1ZXVlcyA9IHR4cXM7CisJZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSB0eHFzOworCWlmIChuZXRpZl9hbGxvY19uZXRkZXZfcXVldWVzKGRldikpCisJCWdvdG8gZnJlZV9hbGw7CisKKyNpZmRlZiBDT05GSUdfUlBTCisJZGV2LT5udW1fcnhfcXVldWVzID0gcnhxczsKKwlkZXYtPnJlYWxfbnVtX3J4X3F1ZXVlcyA9IHJ4cXM7CisJaWYgKG5ldGlmX2FsbG9jX3J4X3F1ZXVlcyhkZXYpKQorCQlnb3RvIGZyZWVfYWxsOworI2VuZGlmCisKIAlzdHJjcHkoZGV2LT5uYW1lLCBuYW1lKTsKIAlyZXR1cm4gZGV2OwogCitmcmVlX2FsbDoKKwlmcmVlX25ldGRldihkZXYpOworCXJldHVybiBOVUxMOworCiBmcmVlX3BjcHU6CiAJZnJlZV9wZXJjcHUoZGV2LT5wY3B1X3JlZmNudCk7CiAJa2ZyZWUoZGV2LT5fdHgpOwpAQCAtNjIwNyw2ICs2MjIwLDcgQEAKIAkJfQogCX0KIAl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZkZXZfa2lsbF9saXN0KTsKKwlsaXN0X2RlbCgmZGV2X2tpbGxfbGlzdCk7CiAJcnRubF91bmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMKaW5kZXggNTA4ZjljMS4uMTMzZmQyMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYworKysgYi9uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZmcm9tX2xpc3QtPmxpc3QsIGxpc3QpIHsKIAkJdHlwZSA9IGFkZHJfdHlwZSA/IGFkZHJfdHlwZSA6IGhhLT50eXBlOwotCQlfX2h3X2FkZHJfZGVsKHRvX2xpc3QsIGhhLT5hZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlKTsKKwkJX19od19hZGRyX2RlbCh0b19saXN0LCBoYS0+YWRkciwgYWRkcl9sZW4sIHR5cGUpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woX19od19hZGRyX2RlbF9tdWx0aXBsZSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggMTc3NDE3OC4uZmYyMzAyOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtODE3LDcgKzgxNyw3IEBACiAJaWYgKHJlZ3MubGVuID4gcmVnbGVuKQogCQlyZWdzLmxlbiA9IHJlZ2xlbjsKIAotCXJlZ2J1ZiA9IHZtYWxsb2MocmVnbGVuKTsKKwlyZWdidWYgPSB2emFsbG9jKHJlZ2xlbik7CiAJaWYgKCFyZWdidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDc1MGRiNTcuLjJkNjVjNmIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xMTIxLDggKzExMjEsNyBAQAogCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCQkJaWYgKGFmX29wcy0+dmFsaWRhdGVfbGlua19hZikgewotCQkJCWVyciA9IGFmX29wcy0+dmFsaWRhdGVfbGlua19hZihkZXYsCi0JCQkJCQkJdGJbSUZMQV9BRl9TUEVDXSk7CisJCQkJZXJyID0gYWZfb3BzLT52YWxpZGF0ZV9saW5rX2FmKGRldiwgYWYpOwogCQkJCWlmIChlcnIgPCAwKQogCQkJCQlyZXR1cm4gZXJyOwogCQkJfQpAQCAtMTY3Miw2ICsxNjcxLDkgQEAKIAkJCXNucHJpbnRmKGlmbmFtZSwgSUZOQU1TSVosICIlcyUlZCIsIG9wcy0+a2luZCk7CiAKIAkJZGVzdF9uZXQgPSBydG5sX2xpbmtfZ2V0X25ldChuZXQsIHRiKTsKKwkJaWYgKElTX0VSUihkZXN0X25ldCkpCisJCQlyZXR1cm4gUFRSX0VSUihkZXN0X25ldCk7CisKIAkJZGV2ID0gcnRubF9jcmVhdGVfbGluayhuZXQsIGRlc3RfbmV0LCBpZm5hbWUsIG9wcywgdGIpOwogCiAJCWlmIChJU19FUlIoZGV2KSkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggZDMxYmIzNi4uZDg4M2RjYyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTIxMCw2ICsyMTAsNyBAQAogCXNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsKIAltZW1zZXQoc2hpbmZvLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBkYXRhcmVmKSk7CiAJYXRvbWljX3NldCgmc2hpbmZvLT5kYXRhcmVmLCAxKTsKKwlrbWVtY2hlY2tfYW5ub3RhdGVfdmFyaWFibGUoc2hpbmZvLT5kZXN0cnVjdG9yX2FyZyk7CiAKIAlpZiAoZmNsb25lKSB7CiAJCXN0cnVjdCBza19idWZmICpjaGlsZCA9IHNrYiArIDE7CkBAIC0yNzQ0LDggKzI3NDUsMTIgQEAKIAogbWVyZ2U6CiAJaWYgKG9mZnNldCA+IGhlYWRsZW4pIHsKLQkJc2tiaW5mby0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgKz0gb2Zmc2V0IC0gaGVhZGxlbjsKLQkJc2tiaW5mby0+ZnJhZ3NbMF0uc2l6ZSAtPSBvZmZzZXQgLSBoZWFkbGVuOworCQl1bnNpZ25lZCBpbnQgZWF0ID0gb2Zmc2V0IC0gaGVhZGxlbjsKKworCQlza2JpbmZvLT5mcmFnc1swXS5wYWdlX29mZnNldCArPSBlYXQ7CisJCXNrYmluZm8tPmZyYWdzWzBdLnNpemUgLT0gZWF0OworCQlza2ItPmRhdGFfbGVuIC09IGVhdDsKKwkJc2tiLT5sZW4gLT0gZWF0OwogCQlvZmZzZXQgPSBoZWFkbGVuOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2RjYi9kY2JubC5jIGIvbmV0L2RjYi9kY2JubC5jCmluZGV4IGQ5MDBhYjkuLmM0NDM0OGEgMTAwNjQ0Ci0tLSBhL25ldC9kY2IvZGNibmwuYworKysgYi9uZXQvZGNiL2RjYm5sLmMKQEAgLTU4Myw3ICs1ODMsNyBAQAogCXU4IHVwLCBpZHR5cGU7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlpZiAoIXRiW0RDQl9BVFRSX0FQUF0gfHwgIW5ldGRldi0+ZGNibmxfb3BzLT5nZXRhcHApCisJaWYgKCF0YltEQ0JfQVRUUl9BUFBdKQogCQlnb3RvIG91dDsKIAogCXJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoYXBwX3RiLCBEQ0JfQVBQX0FUVFJfTUFYLCB0YltEQ0JfQVRUUl9BUFBdLApAQCAtNjA0LDcgKzYwNCwxNiBAQAogCQlnb3RvIG91dDsKIAogCWlkID0gbmxhX2dldF91MTYoYXBwX3RiW0RDQl9BUFBfQVRUUl9JRF0pOwotCXVwID0gbmV0ZGV2LT5kY2JubF9vcHMtPmdldGFwcChuZXRkZXYsIGlkdHlwZSwgaWQpOworCisJaWYgKG5ldGRldi0+ZGNibmxfb3BzLT5nZXRhcHApIHsKKwkJdXAgPSBuZXRkZXYtPmRjYm5sX29wcy0+Z2V0YXBwKG5ldGRldiwgaWR0eXBlLCBpZCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRjYl9hcHAgYXBwID0geworCQkJCQkuc2VsZWN0b3IgPSBpZHR5cGUsCisJCQkJCS5wcm90b2NvbCA9IGlkLAorCQkJCSAgICAgfTsKKwkJdXAgPSBkY2JfZ2V0YXBwKG5ldGRldiwgJmFwcCk7CisJfQogCiAJLyogc2VuZCB0aGlzIGJhY2sgKi8KIAlkY2JubF9za2IgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKQEAgLTYxNyw2ICs2MjYsOSBAQAogCWRjYi0+Y21kID0gRENCX0NNRF9HQVBQOwogCiAJYXBwX25lc3QgPSBubGFfbmVzdF9zdGFydChkY2JubF9za2IsIERDQl9BVFRSX0FQUCk7CisJaWYgKCFhcHBfbmVzdCkKKwkJZ290byBvdXRfY2FuY2VsOworCiAJcmV0ID0gbmxhX3B1dF91OChkY2JubF9za2IsIERDQl9BUFBfQVRUUl9JRFRZUEUsIGlkdHlwZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfY2FuY2VsOwpAQCAtMTE4MSw3ICsxMTkzLDcgQEAKIAkJCWdvdG8gZXJyOwogCX0KIAotCWlmIChpZWVlW0RDQl9BVFRSX0lFRUVfUEZDXSAmJiBvcHMtPmllZWVfc2V0ZXRzKSB7CisJaWYgKGllZWVbRENCX0FUVFJfSUVFRV9QRkNdICYmIG9wcy0+aWVlZV9zZXRwZmMpIHsKIAkJc3RydWN0IGllZWVfcGZjICpwZmMgPSBubGFfZGF0YShpZWVlW0RDQl9BVFRSX0lFRUVfUEZDXSk7CiAJCWVyciA9IG9wcy0+aWVlZV9zZXRwZmMobmV0ZGV2LCBwZmMpOwogCQlpZiAoZXJyKQpAQCAtMTYwNCw2ICsxNjE2LDEwIEBACiB1OCBkY2Jfc2V0YXBwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfYXBwICpuZXcpCiB7CiAJc3RydWN0IGRjYl9hcHBfdHlwZSAqaXRyOworCXN0cnVjdCBkY2JfYXBwX3R5cGUgZXZlbnQ7CisKKwltZW1jcHkoJmV2ZW50Lm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mKGV2ZW50Lm5hbWUpKTsKKwltZW1jcHkoJmV2ZW50LmFwcCwgbmV3LCBzaXplb2YoZXZlbnQuYXBwKSk7CiAKIAlzcGluX2xvY2soJmRjYl9sb2NrKTsKIAkvKiBTZWFyY2ggZm9yIGV4aXN0aW5nIG1hdGNoIGFuZCByZXBsYWNlICovCkBAIC0xNjM1LDcgKzE2NTEsNyBAQAogCX0KIG91dDoKIAlzcGluX3VubG9jaygmZGNiX2xvY2spOwotCWNhbGxfZGNiZXZlbnRfbm90aWZpZXJzKERDQl9BUFBfRVZFTlQsIG5ldyk7CisJY2FsbF9kY2JldmVudF9ub3RpZmllcnMoRENCX0FQUF9FVkVOVCwgJmV2ZW50KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZGNiX3NldGFwcCk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pbnB1dC5jIGIvbmV0L2RjY3AvaW5wdXQuYwppbmRleCA4Y2RlMDA5Li40MjIyZTdhIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pbnB1dC5jCisrKyBiL25ldC9kY2NwL2lucHV0LmMKQEAgLTYxNCw2ICs2MTQsOSBAQAogCQkvKiBDYWxsZXIgKGRjY3BfdjRfZG9fcmN2KSB3aWxsIHNlbmQgUmVzZXQgKi8KIAkJZGNiLT5kY2NwZF9yZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX05PX0NPTk5FQ1RJT047CiAJCXJldHVybiAxOworCX0gZWxzZSBpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfQ0xPU0VEKSB7CisJCWRjYi0+ZGNjcGRfcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9OT19DT05ORUNUSU9OOworCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAoc2stPnNrX3N0YXRlICE9IERDQ1BfUkVRVUVTVElORyAmJiBzay0+c2tfc3RhdGUgIT0gRENDUF9SRVNQT05EKSB7CkBAIC02NjgsMTAgKzY3MSw2IEBACiAJfQogCiAJc3dpdGNoIChzay0+c2tfc3RhdGUpIHsKLQljYXNlIERDQ1BfQ0xPU0VEOgotCQlkY2ItPmRjY3BkX3Jlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfTk9fQ09OTkVDVElPTjsKLQkJcmV0dXJuIDE7Ci0KIAljYXNlIERDQ1BfUkVRVUVTVElORzoKIAkJcXVldWVkID0gZGNjcF9yY3ZfcmVxdWVzdF9zZW50X3N0YXRlX3Byb2Nlc3Moc2ssIHNrYiwgZGgsIGxlbik7CiAJCWlmIChxdWV1ZWQgPj0gMCkKZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKaW5kZXggNzM5NDM1YS4uY2ZhN2E1ZSAxMDA2NDQKLS0tIGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKKysrIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKQEAgLTY3LDggKzY3LDkgQEAKIAlzaXplX3QgcmVzdWx0X2xlbiA9IDA7CiAJY29uc3QgY2hhciAqZGF0YSA9IF9kYXRhLCAqZW5kLCAqb3B0OwogCi0Ja2VudGVyKCIlJSVkLCVzLCclcycsJXp1IiwKLQkgICAgICAga2V5LT5zZXJpYWwsIGtleS0+ZGVzY3JpcHRpb24sIGRhdGEsIGRhdGFsZW4pOworCWtlbnRlcigiJSUlZCwlcywnJSouKnMnLCV6dSIsCisJICAgICAgIGtleS0+c2VyaWFsLCBrZXktPmRlc2NyaXB0aW9uLAorCSAgICAgICAoaW50KWRhdGFsZW4sIChpbnQpZGF0YWxlbiwgZGF0YSwgZGF0YWxlbik7CiAKIAlpZiAoZGF0YWxlbiA8PSAxIHx8ICFkYXRhIHx8IGRhdGFbZGF0YWxlbiAtIDFdICE9ICdcMCcpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjE3LDYgKzIxOCwxOSBAQAogCQlzZXFfcHJpbnRmKG0sICI6ICV1Iiwga2V5LT5kYXRhbGVuKTsKIH0KIAorLyoKKyAqIHJlYWQgdGhlIEROUyBkYXRhCisgKiAtIHRoZSBrZXkncyBzZW1hcGhvcmUgaXMgcmVhZC1sb2NrZWQKKyAqLworc3RhdGljIGxvbmcgZG5zX3Jlc29sdmVyX3JlYWQoY29uc3Qgc3RydWN0IGtleSAqa2V5LAorCQkJICAgICAgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKwlpZiAoa2V5LT50eXBlX2RhdGEueFswXSkKKwkJcmV0dXJuIGtleS0+dHlwZV9kYXRhLnhbMF07CisKKwlyZXR1cm4gdXNlcl9yZWFkKGtleSwgYnVmZmVyLCBidWZsZW4pOworfQorCiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfZG5zX3Jlc29sdmVyID0gewogCS5uYW1lCQk9ICJkbnNfcmVzb2x2ZXIiLAogCS5pbnN0YW50aWF0ZQk9IGRuc19yZXNvbHZlcl9pbnN0YW50aWF0ZSwKQEAgLTIyNCw3ICsyMzgsNyBAQAogCS5yZXZva2UJCT0gdXNlcl9yZXZva2UsCiAJLmRlc3Ryb3kJPSB1c2VyX2Rlc3Ryb3ksCiAJLmRlc2NyaWJlCT0gZG5zX3Jlc29sdmVyX2Rlc2NyaWJlLAotCS5yZWFkCQk9IHVzZXJfcmVhZCwKKwkucmVhZAkJPSBkbnNfcmVzb2x2ZXJfcmVhZCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZG5zX3Jlc29sdmVyKHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwppbmRleCAxNWRjYzFhLi4wYzI4MjYzIDEwMDY0NAotLS0gYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCisrKyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKQEAgLTI2NSwxMyArMjY1LDEzIEBACiBzdGF0aWMgaW50IGVjb25ldF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBzb2NrYWRkcl9lYyAqc2FkZHI9KHN0cnVjdCBzb2NrYWRkcl9lYyAqKW1zZy0+bXNnX25hbWU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZWNfYWRkciBhZGRyOwogCWludCBlcnI7CiAJdW5zaWduZWQgY2hhciBwb3J0LCBjYjsKICNpZiBkZWZpbmVkKENPTkZJR19FQ09ORVRfQVVOVURQKSB8fCBkZWZpbmVkKENPTkZJR19FQ09ORVRfTkFUSVZFKQorCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGVjX2NiICplYjsKICNlbmRpZgpAQCAtNDg4LDEwICs0ODgsMTAgQEAKIAogZXJyb3JfZnJlZV9idWY6CiAJdmZyZWUodXNlcmJ1Zik7CitlcnJvcjoKICNlbHNlCiAJZXJyID0gLUVQUk9UT1RZUEU7CiAjZW5kaWYKLQllcnJvcjoKIAltdXRleF91bmxvY2soJmVjb25ldF9tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IGYyYjYxMTAuLjQ1Yjg5ZDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTg4MCw2ICs4ODAsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woaW5ldF9pb2N0bCk7CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitpbnQgaW5ldF9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJaW50IGVyciA9IC1FTk9JT0NUTENNRDsKKworCWlmIChzay0+c2tfcHJvdC0+Y29tcGF0X2lvY3RsKQorCQllcnIgPSBzay0+c2tfcHJvdC0+Y29tcGF0X2lvY3RsKHNrLCBjbWQsIGFyZyk7CisKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldF9zdHJlYW1fb3BzID0gewogCS5mYW1pbHkJCSAgID0gUEZfSU5FVCwKIAkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCkBAIC05MDMsNiArOTE2LDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGluZXRfY29tcGF0X2lvY3RsLAogI2VuZGlmCiB9OwogRVhQT1JUX1NZTUJPTChpbmV0X3N0cmVhbV9vcHMpOwpAQCAtOTI5LDYgKzk0Myw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBpbmV0X2NvbXBhdF9pb2N0bCwKICNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0woaW5ldF9kZ3JhbV9vcHMpOwpAQCAtOTU5LDYgKzk3NCw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBpbmV0X2NvbXBhdF9pb2N0bCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCAwNGM4YjY5Li43OTI3NTg5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtMTAxNywxNCArMTAxNywxMyBAQAogCQlJUFY0X0RFVkNPTkZfQUxMKG5ldCwgUFJPWFlfQVJQKSA9IG9uOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKF9faW5fZGV2X2dldF9yY3UoZGV2KSkgewotCQlJTl9ERVZfQ09ORl9TRVQoX19pbl9kZXZfZ2V0X3JjdShkZXYpLCBQUk9YWV9BUlAsIG9uKTsKKwlpZiAoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkgeworCQlJTl9ERVZfQ09ORl9TRVQoX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSwgUFJPWFlfQVJQLCBvbik7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVOWElPOwogfQogCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqLwogc3RhdGljIGludCBhcnBfcmVxX3NldF9wdWJsaWMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwcmVxICpyLAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTIzMywxMCArMTIzMiwxMCBAQAogCWlmICghKHIuYXJwX2ZsYWdzICYgQVRGX05FVE1BU0spKQogCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyLmFycF9uZXRtYXNrKS0+c2luX2FkZHIuc19hZGRyID0KIAkJCQkJCQkgICBodG9ubCgweEZGRkZGRkZGVUwpOwotCXJjdV9yZWFkX2xvY2soKTsKKwlydG5sX2xvY2soKTsKIAlpZiAoci5hcnBfZGV2WzBdKSB7CiAJCWVyciA9IC1FTk9ERVY7Ci0JCWRldiA9IGRldl9nZXRfYnlfbmFtZV9yY3UobmV0LCByLmFycF9kZXYpOworCQlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIHIuYXJwX2Rldik7CiAJCWlmIChkZXYgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCkBAIC0xMjYzLDcgKzEyNjIsNyBAQAogCQlicmVhazsKIAl9CiBvdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJcnRubF91bmxvY2soKTsKIAlpZiAoY21kID09IFNJT0NHQVJQICYmICFlcnIgJiYgY29weV90b191c2VyKGFyZywgJnIsIHNpemVvZihyKSkpCiAJCWVyciA9IC1FRkFVTFQ7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCA3NDhjYjViLi5kZjQ2MTZmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xMDMwLDYgKzEwMzAsMjEgQEAKIAlyZXR1cm4gbXR1ID49IDY4OwogfQogCitzdGF0aWMgdm9pZCBpbmV0ZGV2X3NlbmRfZ3JhdHVpdG91c19hcnAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2KQorCit7CisJc3RydWN0IGluX2lmYWRkciAqaWZhID0gaW5fZGV2LT5pZmFfbGlzdDsKKworCWlmICghaWZhKQorCQlyZXR1cm47CisKKwlhcnBfc2VuZChBUlBPUF9SRVFVRVNULCBFVEhfUF9BUlAsCisJCSBpZmEtPmlmYV9hZGRyZXNzLCBkZXYsCisJCSBpZmEtPmlmYV9hZGRyZXNzLCBOVUxMLAorCQkgZGV2LT5kZXZfYWRkciwgTlVMTCk7Cit9CisKIC8qIENhbGxlZCBvbmx5IHVuZGVyIFJUTkwgc2VtYXBob3JlICovCiAKIHN0YXRpYyBpbnQgaW5ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCkBAIC0xMDgyLDE4ICsxMDk3LDEzIEBACiAJCX0KIAkJaXBfbWNfdXAoaW5fZGV2KTsKIAkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBORVRERVZfTk9USUZZX1BFRVJTOgogCWNhc2UgTkVUREVWX0NIQU5HRUFERFI6CisJCWlmICghSU5fREVWX0FSUF9OT1RJRlkoaW5fZGV2KSkKKwkJCWJyZWFrOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE5FVERFVl9OT1RJRllfUEVFUlM6CiAJCS8qIFNlbmQgZ3JhdHVpdG91cyBBUlAgdG8gbm90aWZ5IG9mIGxpbmsgY2hhbmdlICovCi0JCWlmIChJTl9ERVZfQVJQX05PVElGWShpbl9kZXYpKSB7Ci0JCQlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBpbl9kZXYtPmlmYV9saXN0OwotCi0JCQlpZiAoaWZhKQotCQkJCWFycF9zZW5kKEFSUE9QX1JFUVVFU1QsIEVUSF9QX0FSUCwKLQkJCQkJIGlmYS0+aWZhX2FkZHJlc3MsIGRldiwKLQkJCQkJIGlmYS0+aWZhX2FkZHJlc3MsIE5VTEwsCi0JCQkJCSBkZXYtPmRldl9hZGRyLCBOVUxMKTsKLQkJfQorCQlpbmV0ZGV2X3NlbmRfZ3JhdHVpdG91c19hcnAoZGV2LCBpbl9kZXYpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCQlpcF9tY19kb3duKGluX2Rldik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYyBiL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCmluZGV4IGM1YWY5MDkuLjNjOGRmYTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfdGltZXdhaXRfc29jay5jCkBAIC01MDUsNyArNTA1LDkgQEAKIAkJCX0KIAogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJCQlpbmV0X3R3c2tfZGVzY2hlZHVsZSh0dywgdHdkcik7CisJCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJCWluZXRfdHdza19wdXQodHcpOwogCQkJZ290byByZXN0YXJ0X3JjdTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldHBlZXIuYyBiL25ldC9pcHY0L2luZXRwZWVyLmMKaW5kZXggZDliYzg1Ny4uYTk2ZTY1NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldHBlZXIuYworKysgYi9uZXQvaXB2NC9pbmV0cGVlci5jCkBAIC00NzUsNyArNDc1LDcgQEAKIHN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihzdHJ1Y3QgaW5ldHBlZXJfYWRkciAqZGFkZHIsIGludCBjcmVhdGUpCiB7CiAJc3RydWN0IGluZXRfcGVlciBfX3JjdSAqKnN0YWNrW1BFRVJfTUFYREVQVEhdLCAqKipzdGFja3B0cjsKLQlzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UgPSBmYW1pbHlfdG9fYmFzZShBRl9JTkVUKTsKKwlzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UgPSBmYW1pbHlfdG9fYmFzZShkYWRkci0+ZmFtaWx5KTsKIAlzdHJ1Y3QgaW5ldF9wZWVyICpwOwogCiAJLyogTG9vayB1cCBmb3IgdGhlIGFkZHJlc3MgcXVpY2tseSwgbG9ja2xlc3MuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IGViNjhhMGUuLjY2MTNlZGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC03NzUsNiArNzc1LDcgQEAKIAkJCS5mbDRfZHN0ID0gZHN0LAogCQkJLmZsNF9zcmMgPSB0aXBoLT5zYWRkciwKIAkJCS5mbDRfdG9zID0gUlRfVE9TKHRvcyksCisJCQkucHJvdG8gPSBJUFBST1RPX0dSRSwKIAkJCS5mbF9ncmVfa2V5ID0gdHVubmVsLT5wYXJtcy5vX2tleQogCQl9OwogCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksICZydCwgJmZsKSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDNmM2E5YWYuLjhiNjVhMTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bmV0L2lwaXAuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgpAQCAtMTQzNCw2ICsxNDM1LDgxIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcSB7CisJc3RydWN0IGluX2FkZHIgc3JjOworCXN0cnVjdCBpbl9hZGRyIGdycDsKKwljb21wYXRfdWxvbmdfdCBwa3RjbnQ7CisJY29tcGF0X3Vsb25nX3QgYnl0ZWNudDsKKwljb21wYXRfdWxvbmdfdCB3cm9uZ19pZjsKK307CisKK3N0cnVjdCBjb21wYXRfc2lvY192aWZfcmVxIHsKKwl2aWZpX3QJdmlmaTsJCS8qIFdoaWNoIGlmYWNlICovCisJY29tcGF0X3Vsb25nX3QgaWNvdW50OworCWNvbXBhdF91bG9uZ190IG9jb3VudDsKKwljb21wYXRfdWxvbmdfdCBpYnl0ZXM7CisJY29tcGF0X3Vsb25nX3Qgb2J5dGVzOworfTsKKworaW50IGlwbXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxIHNyOworCXN0cnVjdCBjb21wYXRfc2lvY192aWZfcmVxIHZyOworCXN0cnVjdCB2aWZfZGV2aWNlICp2aWY7CisJc3RydWN0IG1mY19jYWNoZSAqYzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisJc3RydWN0IG1yX3RhYmxlICptcnQ7CisKKwltcnQgPSBpcG1yX2dldF90YWJsZShuZXQsIHJhd19zayhzayktPmlwbXJfdGFibGUgPyA6IFJUX1RBQkxFX0RFRkFVTFQpOworCWlmIChtcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dFVFZJRkNOVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ciwgYXJnLCBzaXplb2YodnIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodnIudmlmaSA+PSBtcnQtPm1heHZpZikKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKKwkJdmlmID0gJm1ydC0+dmlmX3RhYmxlW3ZyLnZpZmldOworCQlpZiAoVklGX0VYSVNUUyhtcnQsIHZyLnZpZmkpKSB7CisJCQl2ci5pY291bnQgPSB2aWYtPnBrdF9pbjsKKwkJCXZyLm9jb3VudCA9IHZpZi0+cGt0X291dDsKKwkJCXZyLmlieXRlcyA9IHZpZi0+Ynl0ZXNfaW47CisJCQl2ci5vYnl0ZXMgPSB2aWYtPmJ5dGVzX291dDsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdnIsIHNpemVvZih2cikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWNhc2UgU0lPQ0dFVFNHQ05UOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnNyLCBhcmcsIHNpemVvZihzcikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQljID0gaXBtcl9jYWNoZV9maW5kKG1ydCwgc3Iuc3JjLnNfYWRkciwgc3IuZ3JwLnNfYWRkcik7CisJCWlmIChjKSB7CisJCQlzci5wa3RjbnQgPSBjLT5tZmNfdW4ucmVzLnBrdDsKKwkJCXNyLmJ5dGVjbnQgPSBjLT5tZmNfdW4ucmVzLmJ5dGVzOworCQkJc3Iud3JvbmdfaWYgPSBjLT5tZmNfdW4ucmVzLndyb25nX2lmOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3IsIHNpemVvZihzcikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KK30KKyNlbmRpZgorCiAKIHN0YXRpYyBpbnQgaXBtcl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCmluZGV4IGI4ZGRjYzQuLmE1ZTUyYTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0X21hbmdsZS5jCkBAIC02MCwxMiArNjAsMTIgQEAKIAogCWlmIChtYW5nbGUtPmZsYWdzICYgfkFSUFRfTUFOR0xFX01BU0sgfHwKIAkgICAgIShtYW5nbGUtPmZsYWdzICYgQVJQVF9NQU5HTEVfTUFTSykpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobWFuZ2xlLT50YXJnZXQgIT0gTkZfRFJPUCAmJiBtYW5nbGUtPnRhcmdldCAhPSBORl9BQ0NFUFQgJiYKIAkgICBtYW5nbGUtPnRhcmdldCAhPSBYVF9DT05USU5VRSkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOworCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgYXJwdF9tYW5nbGVfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IGEzZDVhYjcuLjYzOTBiYTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCiBzdGF0aWMgc3RydWN0IHJhd19oYXNoaW5mbyByYXdfdjRfaGFzaGluZm8gPSB7CiAJLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocmF3X3Y0X2hhc2hpbmZvLmxvY2spLApAQCAtODM4LDYgKzgzOSwyMyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgY29tcGF0X3Jhd19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DT1VUUToKKwljYXNlIFNJT0NJTlE6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJZGVmYXVsdDoKKyNpZmRlZiBDT05GSUdfSVBfTVJPVVRFCisJCXJldHVybiBpcG1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpOworI2Vsc2UKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKyNlbmRpZgorCX0KK30KKyNlbmRpZgorCiBzdHJ1Y3QgcHJvdG8gcmF3X3Byb3QgPSB7CiAJLm5hbWUJCSAgID0gIlJBVyIsCiAJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLApAQCAtODYwLDYgKzg3OCw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9yYXdfc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfcmF3X2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGNvbXBhdF9yYXdfaW9jdGwsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDM1MWRjNGUuLjZlZDY2MDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMjcwNyw2ICsyNzA3LDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9ibGFja2hvbGVfZGVmYXVsdF9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBpcHY0X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpCiB7CiB9CkBAIC0yNzE2LDYgKzI3MjEsOCBAQAogCS5wcm90b2NvbAkJPQljcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmRlc3Ryb3kJCT0JaXB2NF9kc3RfZGVzdHJveSwKIAkuY2hlY2sJCQk9CWlwdjRfYmxhY2tob2xlX2RzdF9jaGVjaywKKwkuZGVmYXVsdF9tdHUJCT0JaXB2NF9ibGFja2hvbGVfZGVmYXVsdF9tdHUsCisJLmRlZmF1bHRfYWR2bXNzCQk9CWlwdjRfZGVmYXVsdF9hZHZtc3MsCiAJLnVwZGF0ZV9wbXR1CQk9CWlwdjRfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAyNTQ5YjI5Li42NWY2YzA0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtMTIyMiw3ICsxMjIyLDcgQEAKIAl9CiAKIAkvKiBELVNBQ0sgZm9yIGFscmVhZHkgZm9yZ290dGVuIGRhdGEuLi4gRG8gZHVtYiBjb3VudGluZy4gKi8KLQlpZiAoZHVwX3NhY2sgJiYKKwlpZiAoZHVwX3NhY2sgJiYgdHAtPnVuZG9fbWFya2VyICYmIHRwLT51bmRvX3JldHJhbnMgJiYKIAkgICAgIWFmdGVyKGVuZF9zZXFfMCwgcHJpb3Jfc25kX3VuYSkgJiYKIAkgICAgYWZ0ZXIoZW5kX3NlcV8wLCB0cC0+dW5kb19tYXJrZXIpKQogCQl0cC0+dW5kb19yZXRyYW5zLS07CkBAIC0xMjk5LDcgKzEyOTksOCBAQAogCiAJLyogQWNjb3VudCBELVNBQ0sgZm9yIHJldHJhbnNtaXR0ZWQgcGFja2V0LiAqLwogCWlmIChkdXBfc2FjayAmJiAoc2Fja2VkICYgVENQQ0JfUkVUUkFOUykpIHsKLQkJaWYgKGFmdGVyKFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSwgdHAtPnVuZG9fbWFya2VyKSkKKwkJaWYgKHRwLT51bmRvX21hcmtlciAmJiB0cC0+dW5kb19yZXRyYW5zICYmCisJCSAgICBhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEsIHRwLT51bmRvX21hcmtlcikpCiAJCQl0cC0+dW5kb19yZXRyYW5zLS07CiAJCWlmIChzYWNrZWQgJiBUQ1BDQl9TQUNLRURfQUNLRUQpCiAJCQlzdGF0ZS0+cmVvcmQgPSBtaW4oZmFja19jb3VudCwgc3RhdGUtPnJlb3JkKTsKQEAgLTQzOTksNyArNDQwMCw3IEBACiAJCQlpZiAoIXNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgMCwgdHAtPnVjb3B5LmlvdiwgY2h1bmspKSB7CiAJCQkJdHAtPnVjb3B5LmxlbiAtPSBjaHVuazsKIAkJCQl0cC0+Y29waWVkX3NlcSArPSBjaHVuazsKLQkJCQllYXRlbiA9IChjaHVuayA9PSBza2ItPmxlbiAmJiAhdGgtPmZpbik7CisJCQkJZWF0ZW4gPSAoY2h1bmsgPT0gc2tiLT5sZW4pOwogCQkJCXRjcF9yY3Zfc3BhY2VfYWRqdXN0KHNrKTsKIAkJCX0KIAkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDg1NmY2ODQuLjAyZjU4M2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtMTk5NCw3ICsxOTk0LDYgQEAKIAkJCQl9CiAJCQkJcmVxID0gcmVxLT5kbF9uZXh0OwogCQkJfQotCQkJc3QtPm9mZnNldCA9IDA7CiAJCQlpZiAoKytzdC0+c2J1Y2tldCA+PSBpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5saXN0ZW5fb3B0LT5ucl90YWJsZV9lbnRyaWVzKQogCQkJCWJyZWFrOwogZ2V0X3JlcToKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCA0MDZmMzIwLi5kZmE1YmViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC0yMTYyLDcgKzIxNjIsNyBAQAogCQlpZiAoIXRwLT5yZXRyYW5zX3N0YW1wKQogCQkJdHAtPnJldHJhbnNfc3RhbXAgPSBUQ1BfU0tCX0NCKHNrYiktPndoZW47CiAKLQkJdHAtPnVuZG9fcmV0cmFucysrOworCQl0cC0+dW5kb19yZXRyYW5zICs9IHRjcF9za2JfcGNvdW50KHNrYik7CiAKIAkJLyogc25kX254dCBpcyBzdG9yZWQgdG8gZGV0ZWN0IGxvc3Mgb2YgcmV0cmFuc21pdHRlZCBzZWdtZW50LAogCQkgKiBzZWUgdGNwX2lucHV0LmMgdGNwX3NhY2t0YWdfd3JpdGVfcXVldWUoKS4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDI0YTFjZjEuLmZkNjc4MmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjY2MSwxNCArMjY2MSwxMiBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYTsKLQlMSVNUX0hFQUQoa2VlcF9saXN0KTsKLQlpbnQgc3RhdGU7CisJaW50IHN0YXRlLCBpOwogCiAJQVNTRVJUX1JUTkwoKTsKIAotCS8qIEZsdXNoIHJvdXRlcyBpZiBkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCBvciBpdCBpcyBub3QgbG9vcGJhY2sgKi8KLQlpZiAoaG93IHx8ICEoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykpCi0JCXJ0Nl9pZmRvd24obmV0LCBkZXYpOworCXJ0Nl9pZmRvd24obmV0LCBkZXYpOworCW5laWdoX2lmZG93bigmbmRfdGJsLCBkZXYpOwogCiAJaWRldiA9IF9faW42X2Rldl9nZXQoZGV2KTsKIAlpZiAoaWRldiA9PSBOVUxMKQpAQCAtMjY4OSw2ICsyNjg3LDIzIEBACiAKIAl9CiAKKwkvKiBTdGVwIDI6IGNsZWFyIGhhc2ggdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSU42X0FERFJfSFNJWkU7IGkrKykgeworCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaCA9ICZpbmV0Nl9hZGRyX2xzdFtpXTsKKwkJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwkJc3Bpbl9sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOworCXJlc3RhcnQ6CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShpZmEsIG4sIGgsIGFkZHJfbHN0KSB7CisJCQlpZiAoaWZhLT5pZGV2ID09IGlkZXYpIHsKKwkJCQlobGlzdF9kZWxfaW5pdF9yY3UoJmlmYS0+YWRkcl9sc3QpOworCQkJCWFkZHJjb25mX2RlbF90aW1lcihpZmEpOworCQkJCWdvdG8gcmVzdGFydDsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKKwl9CisKIAl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAogCS8qIFN0ZXAgMjogY2xlYXIgZmxhZ3MgZm9yIHN0YXRlbGVzcyBhZGRyY29uZiAqLwpAQCAtMjcyMiw1MiArMjczNywyMyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgaW5ldDZfaWZhZGRyLCBpZl9saXN0KTsKIAkJYWRkcmNvbmZfZGVsX3RpbWVyKGlmYSk7CiAKLQkJLyogSWYganVzdCBkb2luZyBsaW5rIGRvd24sIGFuZCBhZGRyZXNzIGlzIHBlcm1hbmVudAotCQkgICBhbmQgbm90IGxpbmstbG9jYWwsIHRoZW4gcmV0YWluIGl0LiAqLwotCQlpZiAoIWhvdyAmJgotCQkgICAgKGlmYS0+ZmxhZ3MmSUZBX0ZfUEVSTUFORU5UKSAmJgotCQkgICAgIShpcHY2X2FkZHJfdHlwZSgmaWZhLT5hZGRyKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmaWZhLT5pZl9saXN0LCAma2VlcF9saXN0KTsKKwkJbGlzdF9kZWwoJmlmYS0+aWZfbGlzdCk7CiAKLQkJCS8qIElmIG5vdCBkb2luZyBEQUQgb24gdGhpcyBhZGRyZXNzLCBqdXN0IGtlZXAgaXQuICovCi0JCQlpZiAoKGRldi0+ZmxhZ3MmKElGRl9OT0FSUHxJRkZfTE9PUEJBQ0spKSB8fAotCQkJICAgIGlkZXYtPmNuZi5hY2NlcHRfZGFkIDw9IDAgfHwKLQkJCSAgICAoaWZhLT5mbGFncyAmIElGQV9GX05PREFEKSkKLQkJCQljb250aW51ZTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAotCQkJLyogSWYgaXQgd2FzIHRlbnRhdGl2ZSBhbHJlYWR5LCBubyBuZWVkIHRvIG5vdGlmeSAqLwotCQkJaWYgKGlmYS0+ZmxhZ3MgJiBJRkFfRl9URU5UQVRJVkUpCi0JCQkJY29udGludWU7CisJCXNwaW5fbG9ja19iaCgmaWZhLT5zdGF0ZV9sb2NrKTsKKwkJc3RhdGUgPSBpZmEtPnN0YXRlOworCQlpZmEtPnN0YXRlID0gSU5FVDZfSUZBRERSX1NUQVRFX0RFQUQ7CisJCXNwaW5fdW5sb2NrX2JoKCZpZmEtPnN0YXRlX2xvY2spOwogCi0JCQkvKiBGbGFnIGl0IGZvciBsYXRlciByZXN0b3JhdGlvbiB3aGVuIGxpbmsgY29tZXMgdXAgKi8KLQkJCWlmYS0+ZmxhZ3MgfD0gSUZBX0ZfVEVOVEFUSVZFOwotCQkJaWZhLT5zdGF0ZSA9IElORVQ2X0lGQUREUl9TVEFURV9EQUQ7Ci0JCX0gZWxzZSB7Ci0JCQlsaXN0X2RlbCgmaWZhLT5pZl9saXN0KTsKLQotCQkJLyogY2xlYXIgaGFzaCB0YWJsZSAqLwotCQkJc3Bpbl9sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOwotCQkJaGxpc3RfZGVsX2luaXRfcmN1KCZpZmEtPmFkZHJfbHN0KTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZhZGRyY29uZl9oYXNoX2xvY2spOwotCi0JCQl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCQkJc3Bpbl9sb2NrX2JoKCZpZmEtPnN0YXRlX2xvY2spOwotCQkJc3RhdGUgPSBpZmEtPnN0YXRlOwotCQkJaWZhLT5zdGF0ZSA9IElORVQ2X0lGQUREUl9TVEFURV9ERUFEOwotCQkJc3Bpbl91bmxvY2tfYmgoJmlmYS0+c3RhdGVfbG9jayk7Ci0KLQkJCWlmIChzdGF0ZSAhPSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRCkgewotCQkJCV9faXB2Nl9pZmFfbm90aWZ5KFJUTV9ERUxBRERSLCBpZmEpOwotCQkJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpbmV0NmFkZHJfY2hhaW4sCi0JCQkJCQkJICAgTkVUREVWX0RPV04sIGlmYSk7Ci0JCQl9Ci0KLQkJCWluNl9pZmFfcHV0KGlmYSk7Ci0JCQl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKwkJaWYgKHN0YXRlICE9IElORVQ2X0lGQUREUl9TVEFURV9ERUFEKSB7CisJCQlfX2lwdjZfaWZhX25vdGlmeShSVE1fREVMQUREUiwgaWZhKTsKKwkJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZpbmV0NmFkZHJfY2hhaW4sIE5FVERFVl9ET1dOLCBpZmEpOwogCQl9Ci0JfQorCQlpbjZfaWZhX3B1dChpZmEpOwogCi0JbGlzdF9zcGxpY2UoJmtlZXBfbGlzdCwgJmlkZXYtPmFkZHJfbGlzdCk7CisJCXdyaXRlX2xvY2tfYmgoJmlkZXYtPmxvY2spOworCX0KIAogCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAKQEAgLTQxNTYsOCArNDE0Miw3IEBACiAJCWFkZHJjb25mX2xlYXZlX3NvbGljdChpZnAtPmlkZXYsICZpZnAtPmFkZHIpOwogCQlkc3RfaG9sZCgmaWZwLT5ydC0+ZHN0KTsKIAotCQlpZiAoaWZwLT5zdGF0ZSA9PSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRCAmJgotCQkgICAgaXA2X2RlbF9ydChpZnAtPnJ0KSkKKwkJaWYgKGlwNl9kZWxfcnQoaWZwLT5ydCkpCiAJCQlkc3RfZnJlZSgmaWZwLT5ydC0+ZHN0KTsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKaW5kZXggOWZhYjI3NC4uMGUxZDUzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYworKysgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CkBAIC0xODA0LDYgKzE4MDUsODAgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxNiB7CisJc3RydWN0IHNvY2thZGRyX2luNiBzcmM7CisJc3RydWN0IHNvY2thZGRyX2luNiBncnA7CisJY29tcGF0X3Vsb25nX3QgcGt0Y250OworCWNvbXBhdF91bG9uZ190IGJ5dGVjbnQ7CisJY29tcGF0X3Vsb25nX3Qgd3JvbmdfaWY7Cit9OworCitzdHJ1Y3QgY29tcGF0X3Npb2NfbWlmX3JlcTYgeworCW1pZmlfdAltaWZpOworCWNvbXBhdF91bG9uZ190IGljb3VudDsKKwljb21wYXRfdWxvbmdfdCBvY291bnQ7CisJY29tcGF0X3Vsb25nX3QgaWJ5dGVzOworCWNvbXBhdF91bG9uZ190IG9ieXRlczsKK307CisKK2ludCBpcDZtcl9jb21wYXRfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBjb21wYXRfc2lvY19zZ19yZXE2IHNyOworCXN0cnVjdCBjb21wYXRfc2lvY19taWZfcmVxNiB2cjsKKwlzdHJ1Y3QgbWlmX2RldmljZSAqdmlmOworCXN0cnVjdCBtZmM2X2NhY2hlICpjOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwlzdHJ1Y3QgbXI2X3RhYmxlICptcnQ7CisKKwltcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCByYXc2X3NrKHNrKS0+aXA2bXJfdGFibGUgPyA6IFJUNl9UQUJMRV9ERkxUKTsKKwlpZiAobXJ0ID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHRVRNSUZDTlRfSU42OgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnZyLCBhcmcsIHNpemVvZih2cikpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2ci5taWZpID49IG1ydC0+bWF4dmlmKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlYWRfbG9jaygmbXJ0X2xvY2spOworCQl2aWYgPSAmbXJ0LT52aWY2X3RhYmxlW3ZyLm1pZmldOworCQlpZiAoTUlGX0VYSVNUUyhtcnQsIHZyLm1pZmkpKSB7CisJCQl2ci5pY291bnQgPSB2aWYtPnBrdF9pbjsKKwkJCXZyLm9jb3VudCA9IHZpZi0+cGt0X291dDsKKwkJCXZyLmlieXRlcyA9IHZpZi0+Ynl0ZXNfaW47CisJCQl2ci5vYnl0ZXMgPSB2aWYtPmJ5dGVzX291dDsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdnIsIHNpemVvZih2cikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWNhc2UgU0lPQ0dFVFNHQ05UX0lONjoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzciwgYXJnLCBzaXplb2Yoc3IpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJlYWRfbG9jaygmbXJ0X2xvY2spOworCQljID0gaXA2bXJfY2FjaGVfZmluZChtcnQsICZzci5zcmMuc2luNl9hZGRyLCAmc3IuZ3JwLnNpbjZfYWRkcik7CisJCWlmIChjKSB7CisJCQlzci5wa3RjbnQgPSBjLT5tZmNfdW4ucmVzLnBrdDsKKwkJCXNyLmJ5dGVjbnQgPSBjLT5tZmNfdW4ucmVzLmJ5dGVzOworCQkJc3Iud3JvbmdfaWYgPSBjLT5tZmNfdW4ucmVzLndyb25nX2lmOworCQkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZzciwgc2l6ZW9mKHNyKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgaXA2bXJfZm9yd2FyZDJfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCmluZGV4IDA5Yzg4ODkuLmRlMzM4MDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCkBAIC00MTAsNyArNDEwLDcgQEAKIAkJaWYgKHAgIT0gTlVMTCkgewogCQkJc2JfYWRkKG0sICIlMDJ4IiwgKnArKyk7CiAJCQlmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspCi0JCQkJc2JfYWRkKG0sICI6JTAyeCIsIHBbaV0pOworCQkJCXNiX2FkZChtLCAiOiUwMngiLCAqcCsrKTsKIAkJfQogCQlzYl9hZGQobSwgIiAiKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCA4NmMzOTUyLi5jNWIwOTE1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAKQEAgLTExNTcsNiArMTE1OCwyMyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbnQgY29tcGF0X3Jhd3Y2X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NPVVRROgorCWNhc2UgU0lPQ0lOUToKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwlkZWZhdWx0OgorI2lmZGVmIENPTkZJR19JUFY2X01ST1VURQorCQlyZXR1cm4gaXA2bXJfY29tcGF0X2lvY3RsKHNrLCBjbWQsIGNvbXBhdF9wdHIoYXJnKSk7CisjZWxzZQorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworI2VuZGlmCisJfQorfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHJhd3Y2X2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KQogewogCWlmIChpbmV0X3NrKHNrKS0+aW5ldF9udW0gPT0gSVBQUk9UT19SQVcpCkBAIC0xMjE1LDYgKzEyMzMsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfcmF3djZfc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfcmF3djZfZ2V0c29ja29wdCwKKwkuY29tcGF0X2lvY3RsCSAgID0gY29tcGF0X3Jhd3Y2X2lvY3RsLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCAzNzNiZDA0Li45MDQzMTJlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTcyLDggKzcyLDYgQEAKICNkZWZpbmUgUlQ2X1RSQUNFKHguLi4pIGRvIHsgOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZpbmUgQ0xPTkVfT0ZGTElOS19ST1VURSAwCi0KIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKiBpcDZfcnRfY29weShzdHJ1Y3QgcnQ2X2luZm8gKm9ydCk7CiBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeQkqaXA2X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBjb29raWUpOwogc3RhdGljIHVuc2lnbmVkIGludAkgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CkBAIC0xMTUsNiArMTEzLDExIEBACiAJLmxvY2FsX291dAkJPQlfX2lwNl9sb2NhbF9vdXQsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9ibGFja2hvbGVfZGVmYXVsdF9tdHUoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBpcDZfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1KHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIG10dSkKIHsKIH0KQEAgLTEyNCw2ICsxMjcsOCBAQAogCS5wcm90b2NvbAkJPQljcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKIAkuZGVzdHJveQkJPQlpcDZfZHN0X2Rlc3Ryb3ksCiAJLmNoZWNrCQkJPQlpcDZfZHN0X2NoZWNrLAorCS5kZWZhdWx0X210dQkJPQlpcDZfYmxhY2tob2xlX2RlZmF1bHRfbXR1LAorCS5kZWZhdWx0X2Fkdm1zcwkJPQlpcDZfZGVmYXVsdF9hZHZtc3MsCiAJLnVwZGF0ZV9wbXR1CQk9CWlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCiB9OwogCkBAIC0xOTYsNyArMjAxLDYgQEAKIAkJaW42X2Rldl9wdXQoaWRldik7CiAJfQogCWlmIChwZWVyKSB7Ci0JCUJVR19PTighKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0NBQ0hFKSk7CiAJCXJ0LT5ydDZpX3BlZXIgPSBOVUxMOwogCQlpbmV0X3B1dHBlZXIocGVlcik7CiAJfQpAQCAtMjA2LDkgKzIxMCw2IEBACiB7CiAJc3RydWN0IGluZXRfcGVlciAqcGVlcjsKIAotCWlmIChXQVJOX09OKCEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQ0FDSEUpKSkKLQkJcmV0dXJuOwotCiAJcGVlciA9IGluZXRfZ2V0cGVlcl92NigmcnQtPnJ0NmlfZHN0LmFkZHIsIGNyZWF0ZSk7CiAJaWYgKHBlZXIgJiYgY21weGNoZygmcnQtPnJ0NmlfcGVlciwgTlVMTCwgcGVlcikgIT0gTlVMTCkKIAkJaW5ldF9wdXRwZWVyKHBlZXIpOwpAQCAtNzM4LDEzICs3MzksOCBAQAogCiAJaWYgKCFydC0+cnQ2aV9uZXh0aG9wICYmICEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfTk9ORVhUSE9QKSkKIAkJbnJ0ID0gcnQ2X2FsbG9jX2NvdyhydCwgJmZsLT5mbDZfZHN0LCAmZmwtPmZsNl9zcmMpOwotCWVsc2UgewotI2lmIENMT05FX09GRkxJTktfUk9VVEUKKwllbHNlCiAJCW5ydCA9IHJ0Nl9hbGxvY19jbG9uZShydCwgJmZsLT5mbDZfZHN0KTsKLSNlbHNlCi0JCWdvdG8gb3V0MjsKLSNlbmRpZgotCX0KIAogCWRzdF9yZWxlYXNlKCZydC0+ZHN0KTsKIAlydCA9IG5ydCA/IDogbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwpAQCAtMjU2MSwxNCArMjU1NywxNiBAQAogaW50IGlwdjZfc3lzY3RsX3J0Y2FjaGVfZmx1c2goY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwKIAkJCSAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtPm5zcHJveHktPm5ldF9uczsKLQlpbnQgZGVsYXkgPSBuZXQtPmlwdjYuc3lzY3RsLmZsdXNoX2RlbGF5OwotCWlmICh3cml0ZSkgewotCQlwcm9jX2RvaW50dmVjKGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7Ci0JCWZpYjZfcnVuX2djKGRlbGF5IDw9IDAgPyB+MFVMIDogKHVuc2lnbmVkIGxvbmcpZGVsYXksIG5ldCk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQorCXN0cnVjdCBuZXQgKm5ldDsKKwlpbnQgZGVsYXk7CisJaWYgKCF3cml0ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXQgPSAoc3RydWN0IG5ldCAqKWN0bC0+ZXh0cmExOworCWRlbGF5ID0gbmV0LT5pcHY2LnN5c2N0bC5mbHVzaF9kZWxheTsKKwlwcm9jX2RvaW50dmVjKGN0bCwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJZmliNl9ydW5fZ2MoZGVsYXkgPD0gMCA/IH4wVUwgOiAodW5zaWduZWQgbG9uZylkZWxheSwgbmV0KTsKKwlyZXR1cm4gMDsKIH0KIAogY3RsX3RhYmxlIGlwdjZfcm91dGVfdGFibGVfdGVtcGxhdGVbXSA9IHsKQEAgLTI2NTUsNiArMjY1Myw3IEBACiAKIAlpZiAodGFibGUpIHsKIAkJdGFibGVbMF0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmZsdXNoX2RlbGF5OworCQl0YWJsZVswXS5leHRyYTEgPSBuZXQ7CiAJCXRhYmxlWzFdLmRhdGEgPSAmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzLmdjX3RocmVzaDsKIAkJdGFibGVbMl0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9tYXhfc2l6ZTsKIAkJdGFibGVbM10uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY19taW5faW50ZXJ2YWw7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCmluZGV4IGZhMWQ4ZjQuLjdjYjY1ZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZnJhZy5oPgogCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBlbXB0eVsxXTsKKwogc3RhdGljIGN0bF90YWJsZSBpcHY2X3RhYmxlX3RlbXBsYXRlW10gPSB7CiAJewogCQkucHJvY25hbWUJPSAicm91dGUiLApAQCAtMzUsNiArMzcsMTIgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKIAl9LAorCXsKKwkJLnByb2NuYW1lCT0gIm5laWdoIiwKKwkJLm1heGxlbgkJPSAwLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gZW1wdHksCisJfSwKIAl7IH0KIH07CiAKQEAgLTE1Miw3ICsxNjAsNiBAQAogCiBpbnQgaXB2Nl9zdGF0aWNfc3lzY3RsX3JlZ2lzdGVyKHZvaWQpCiB7Ci0Jc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZW1wdHlbMV07CiAJaXA2X2Jhc2UgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMobmV0X2lwdjZfY3RsX3BhdGgsIGVtcHR5KTsKIAlpZiAoaXA2X2Jhc2UgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDdlNzQwMjMuLmRhODc0MjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC05OCw2ICs5OCwxMCBAQAogCWlmICgheGRzdC0+dS5ydDYucnQ2aV9pZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXhkc3QtPnUucnQ2LnJ0NmlfcGVlciA9IHJ0LT5ydDZpX3BlZXI7CisJaWYgKHJ0LT5ydDZpX3BlZXIpCisJCWF0b21pY19pbmMoJnJ0LT5ydDZpX3BlZXItPnJlZmNudCk7CisKIAkvKiBTaGVpdC4uLiBJIHJlbWVtYmVyIEkgZGlkIHRoaXMgcmlnaHQuIEFwcGFyZW50bHksCiAJICogaXQgd2FzIG1hZ2ljYWxseSBsb3N0LCBzbyB0aGlzIGNvZGUgbmVlZHMgYXVkaXQgKi8KIAl4ZHN0LT51LnJ0Ni5ydDZpX2ZsYWdzID0gcnQtPnJ0NmlfZmxhZ3MgJiAoUlRGX0FOWUNBU1QgfApAQCAtMjE2LDYgKzIyMCw4IEBACiAKIAlpZiAobGlrZWx5KHhkc3QtPnUucnQ2LnJ0NmlfaWRldikpCiAJCWluNl9kZXZfcHV0KHhkc3QtPnUucnQ2LnJ0NmlfaWRldik7CisJaWYgKGxpa2VseSh4ZHN0LT51LnJ0Ni5ydDZpX3BlZXIpKQorCQlpbmV0X3B1dHBlZXIoeGRzdC0+dS5ydDYucnQ2aV9wZWVyKTsKIAl4ZnJtX2RzdF9kZXN0cm95KHhkc3QpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggNGJjOGE5Mi4uOWNkNzNiMSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMTgyMiw2ICsxODIyLDcgQEAKIAkJKmNvb2tpZSBePSAyOwogCQlJRUVFODAyMTFfU0tCX0NCKHNrYiktPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfVFhfT0ZGQ0hBTjsKIAkJbG9jYWwtPmh3X3JvY19za2IgPSBza2I7CisJCWxvY2FsLT5od19yb2Nfc2tiX2Zvcl9zdGF0dXMgPSBza2I7CiAJCW11dGV4X3VubG9jaygmbG9jYWwtPm10eCk7CiAKIAkJcmV0dXJuIDA7CkBAIC0xODc1LDYgKzE4NzYsNyBAQAogCQlpZiAocmV0ID09IDApIHsKIAkJCWtmcmVlX3NrYihsb2NhbC0+aHdfcm9jX3NrYik7CiAJCQlsb2NhbC0+aHdfcm9jX3NrYiA9IE5VTEw7CisJCQlsb2NhbC0+aHdfcm9jX3NrYl9mb3Jfc3RhdHVzID0gTlVMTDsKIAkJfQogCiAJCW11dGV4X3VubG9jaygmbG9jYWwtPm10eCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IGM0N2Q3YzAuLjUzM2ZkMzIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC05NTMsNyArOTUzLDcgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqaHdfcm9jX2NoYW5uZWw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmh3X3JvY19kZXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKmh3X3JvY19za2I7CisJc3RydWN0IHNrX2J1ZmYgKmh3X3JvY19za2IsICpod19yb2Nfc2tiX2Zvcl9zdGF0dXM7CiAJc3RydWN0IHdvcmtfc3RydWN0IGh3X3JvY19zdGFydCwgaHdfcm9jX2RvbmU7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBod19yb2NfY2hhbm5lbF90eXBlOwogCXVuc2lnbmVkIGludCBod19yb2NfZHVyYXRpb247CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDhhY2JhNDUuLjdhMTBhOGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0xMjI5LDYgKzEyMjksNyBAQAogCX0KIAltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZ1bnJlZ19saXN0KTsKKwlsaXN0X2RlbCgmdW5yZWdfbGlzdCk7CiB9CiAKIHN0YXRpYyB1MzIgaWVlZTgwMjExX2lkbGVfb2ZmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggNDVmYmI5ZS4uYzljZWI0ZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0xMDMzLDYgKzEwMzMsMTIgQEAKIAlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCiAJCXJldHVybjsKIAorCS8qCisJICogSW4gY2FzZSB3ZSByZWNlaXZlIGZyYW1lcyBhZnRlciBkaXNhc3NvY2lhdGlvbi4KKwkgKi8KKwlpZiAoIXNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkKQorCQlyZXR1cm47CisKIAlpZWVlODAyMTFfc3RhX3Jlc2V0X2Nvbm5fbW9uaXRvcihzZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwppbmRleCAzOGE3OTcyLi4wNzFhYzk1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCkBAIC0zMjMsNiArMzIzLDcgQEAKIAogCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9OTDgwMjExX0ZSQU1FX1RYKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisJCXU2NCBjb29raWUgPSAodW5zaWduZWQgbG9uZylza2I7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKQEAgLTMzNCw4ICszMzUsMTIgQEAKIAkJCWJyZWFrOwogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOworCQlpZiAobG9jYWwtPmh3X3JvY19za2JfZm9yX3N0YXR1cyA9PSBza2IpIHsKKwkJCWNvb2tpZSA9IGxvY2FsLT5od19yb2NfY29va2llIF4gMjsKKwkJCWxvY2FsLT5od19yb2Nfc2tiX2Zvcl9zdGF0dXMgPSBOVUxMOworCQl9CiAJCWNmZzgwMjExX21nbXRfdHhfc3RhdHVzKAotCQkJc2tiLT5kZXYsICh1bnNpZ25lZCBsb25nKSBza2IsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQlza2ItPmRldiwgY29va2llLCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJISEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spLCBHRlBfQVRPTUlDKTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggNTk1MGUzYS4uYjBiZWFhNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKKysrIGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTE1NDcsNyArMTU0Nyw3IEBACiAJCXNrYl9vcnBoYW4oc2tiKTsKIAl9CiAKLQlpZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSkKKwlpZiAoc2tiX2Nsb25lZChza2IpKQogCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfZXhwYW5kX3NrYl9oZWFkX2Nsb25lZCk7CiAJZWxzZSBpZiAoaGVhZF9uZWVkIHx8IHRhaWxfbmVlZCkKIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZCk7CkBAIC0yMjMwLDYgKzIyMzAsOSBAQAogCiAJc2RhdGEgPSB2aWZfdG9fc2RhdGEodmlmKTsKIAorCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQlnb3RvIG91dDsKKwogCWlmICh0aW1fb2Zmc2V0KQogCQkqdGltX29mZnNldCA9IDA7CiAJaWYgKHRpbV9sZW5ndGgpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdXRpbC5jIGIvbmV0L21hYzgwMjExL3V0aWwuYwppbmRleCBjZjY4NzAwLi5kMDM2NTk3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdXRpbC5jCisrKyBiL25ldC9tYWM4MDIxMS91dGlsLmMKQEAgLTEyMTAsNyArMTIxMCw5IEBACiAJCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfQVNTT0M7CisJCQltdXRleF9sb2NrKCZzZGF0YS0+dS5tZ2QubXR4KTsKIAkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKKwkJCW11dGV4X3VubG9jaygmc2RhdGEtPnUubWdkLm10eCk7CiAJCQlicmVhazsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfSUJTUzsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvY29yZS5jIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKaW5kZXggMzJmY2JlMi4uNGFhNjE0YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9jb3JlLmMKQEAgLTEzMyw2ICsxMzMsNyBAQAogCiAJCS8qIE9wdGltaXphdGlvbjogd2UgZG9uJ3QgbmVlZCB0byBob2xkIG1vZHVsZQogCQkgICByZWZlcmVuY2UgaGVyZSwgc2luY2UgZnVuY3Rpb24gY2FuJ3Qgc2xlZXAuIC0tUlIgKi8KK3JlcGVhdDoKIAkJdmVyZGljdCA9IGVsZW0tPmhvb2soaG9vaywgc2tiLCBpbmRldiwgb3V0ZGV2LCBva2ZuKTsKIAkJaWYgKHZlcmRpY3QgIT0gTkZfQUNDRVBUKSB7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwpAQCAtMTQ1LDcgKzE0Niw3IEBACiAjZW5kaWYKIAkJCWlmICh2ZXJkaWN0ICE9IE5GX1JFUEVBVCkKIAkJCQlyZXR1cm4gdmVyZGljdDsKLQkJCSppID0gKCppKS0+cHJldjsKKwkJCWdvdG8gcmVwZWF0OwogCQl9CiAJfQogCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggMjJmN2FkNS4uYmE5OGUxMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwpAQCAtODA4LDkgKzgwOCw5IEBACiAJZGVzdC0+dV90aHJlc2hvbGQgPSB1ZGVzdC0+dV90aHJlc2hvbGQ7CiAJZGVzdC0+bF90aHJlc2hvbGQgPSB1ZGVzdC0+bF90aHJlc2hvbGQ7CiAKLQlzcGluX2xvY2soJmRlc3QtPmRzdF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmRlc3QtPmRzdF9sb2NrKTsKIAlpcF92c19kc3RfcmVzZXQoZGVzdCk7Ci0Jc3Bpbl91bmxvY2soJmRlc3QtPmRzdF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmZGVzdC0+ZHN0X2xvY2spOwogCiAJaWYgKGFkZCkKIAkJaXBfdnNfbmV3X2VzdGltYXRvcigmZGVzdC0+c3RhdHMpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IGU2MTUxMTkuLjg0ZjRmY2MgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTk0Miw4ICs5NDIsMTUgQEAKIAlpZiAoc2V0X3JlcGx5ICYmICF0ZXN0X2FuZF9zZXRfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKQogCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9SRVBMWSwgY3QpOwogb3V0OgotCWlmICh0bXBsKQotCQluZl9jdF9wdXQodG1wbCk7CisJaWYgKHRtcGwpIHsKKwkJLyogU3BlY2lhbCBjYXNlOiB3ZSBoYXZlIHRvIHJlcGVhdCB0aGlzIGhvb2ssIGFzc2lnbiB0aGUKKwkJICogdGVtcGxhdGUgYWdhaW4gdG8gdGhpcyBwYWNrZXQuIFdlIGFzc3VtZSB0aGF0IHRoaXMgcGFja2V0CisJCSAqIGhhcyBubyBjb25udHJhY2sgYXNzaWduZWQuIFRoaXMgaXMgdXNlZCBieSBuZl9jdF90Y3AuICovCisJCWlmIChyZXQgPT0gTkZfUkVQRUFUKQorCQkJc2tiLT5uZmN0ID0gKHN0cnVjdCBuZl9jb25udHJhY2sgKil0bXBsOworCQllbHNlCisJCQluZl9jdF9wdXQodG1wbCk7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMKaW5kZXggNTcwMmRlMy4uNjNhMWI5MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMKQEAgLTYzLDYgKzYzLDkgQEAKIAkJICogdGhpcyBkb2VzIG5vdCBoYXJtIGFuZCBpdCBoYXBwZW5zIHZlcnkgcmFyZWx5LiAqLwogCQl1bnNpZ25lZCBsb25nIG1pc3NlZCA9IGUtPm1pc3NlZDsKIAorCQlpZiAoISgoZXZlbnRzIHwgbWlzc2VkKSAmIGUtPmN0bWFzaykpCisJCQlnb3RvIG91dF91bmxvY2s7CisKIAkJcmV0ID0gbm90aWZ5LT5mY24oZXZlbnRzIHwgbWlzc2VkLCAmaXRlbSk7CiAJCWlmICh1bmxpa2VseShyZXQgPCAwIHx8IG1pc3NlZCkpIHsKIAkJCXNwaW5fbG9ja19iaCgmY3QtPmxvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDkzMjk3YWEuLmVlYWQ5ZGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTY2Nyw2ICs2NjcsNyBAQAogCQkJaWYgKGN0bmV0bGlua19maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwKIAkJCQkJCUlQQ1ROTF9NU0dfQ1RfTkVXLCBjdCkgPCAwKSB7CisJCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOwogCQkJCWNiLT5hcmdzWzFdID0gKHVuc2lnbmVkIGxvbmcpY3Q7CiAJCQkJZ290byBvdXQ7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwppbmRleCBiMDczOTNlLi45MTgxNjk5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKQEAgLTg1LDYgKzg1LDggQEAKIAogaW50IG5mX2xvZ19iaW5kX3BmKHVfaW50OF90IHBmLCBjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCiB7CisJaWYgKHBmID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCisJCXJldHVybiAtRUlOVkFMOwogCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CiAJaWYgKF9fZmluZF9sb2dnZXIocGYsIGxvZ2dlci0+bmFtZSkgPT0gTlVMTCkgewogCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CkBAIC05OCw2ICsxMDAsOCBAQAogCiB2b2lkIG5mX2xvZ191bmJpbmRfcGYodV9pbnQ4X3QgcGYpCiB7CisJaWYgKHBmID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCisJCXJldHVybjsKIAltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW3BmXSwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCmluZGV4IDRkODdiZWYuLjQ3NGQ2MjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKQEAgLTI4LDI2ICsyOCwyMyBAQAogCXNrYi0+ZGVzdHJ1Y3RvciA9IE5VTEw7CiAKIAlpZiAoc2spCi0JCW5mX3Rwcm94eV9wdXRfc29jayhzayk7CisJCXNvY2tfcHV0KHNrKTsKIH0KIAogLyogY29uc3VtZXMgc2sgKi8KLWludAordm9pZAogbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIHsKLQlib29sIHRyYW5zcGFyZW50ID0gKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSA/Ci0JCQkJaW5ldF90d3NrKHNrKS0+dHdfdHJhbnNwYXJlbnQgOgotCQkJCWluZXRfc2soc2spLT50cmFuc3BhcmVudDsKKwkvKiBhc3NpZ25pbmcgdHcgc29ja2V0cyBjb21wbGljYXRlcyB0aGluZ3M7IG1vc3QKKwkgKiBza2ItPnNrLT5YIGNoZWNrcyB3b3VsZCBoYXZlIHRvIHRlc3Qgc2stPnNrX3N0YXRlIGZpcnN0ICovCisJaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKSB7CisJCWluZXRfdHdza19wdXQoaW5ldF90d3NrKHNrKSk7CisJCXJldHVybjsKKwl9CiAKLQlpZiAodHJhbnNwYXJlbnQpIHsKLQkJc2tiX29ycGhhbihza2IpOwotCQlza2ItPnNrID0gc2s7Ci0JCXNrYi0+ZGVzdHJ1Y3RvciA9IG5mX3Rwcm94eV9kZXN0cnVjdG9yOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UKLQkJbmZfdHByb3h5X3B1dF9zb2NrKHNrKTsKLQotCXJldHVybiAwOworCXNrYl9vcnBoYW4oc2tiKTsKKwlza2ItPnNrID0gc2s7CisJc2tiLT5kZXN0cnVjdG9yID0gbmZfdHByb3h5X2Rlc3RydWN0b3I7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl90cHJveHlfYXNzaWduX3NvY2spOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jIGIvbmV0L25ldGZpbHRlci94dF9UUFJPWFkuYwppbmRleCA2NDA2NzhmLi5kY2ZkNTdlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmMKQEAgLTMzLDYgKzMzLDIwIEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9UUFJPWFkuaD4KIAorc3RhdGljIGJvb2wgdHByb3h5X3NrX2lzX3RyYW5zcGFyZW50KHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9USU1FX1dBSVQpIHsKKwkJaWYgKGluZXRfc2soc2spLT50cmFuc3BhcmVudCkKKwkJCXJldHVybiB0cnVlOworCQlzb2NrX3B1dChzayk7CisJfSBlbHNlIHsKKwkJaWYgKGluZXRfdHdzayhzayktPnR3X3RyYW5zcGFyZW50KQorCQkJcmV0dXJuIHRydWU7CisJCWluZXRfdHdza19wdXQoaW5ldF90d3NrKHNrKSk7CisJfQorCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGlubGluZSBfX2JlMzIKIHRwcm94eV9sYWRkcjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHVzZXJfbGFkZHIsIF9fYmUzMiBkYWRkcikKIHsKQEAgLTE0MSw3ICsxNTUsNyBAQAogCQkJCQkgICBza2ItPmRldiwgTkZUX0xPT0tVUF9MSVNURU5FUik7CiAKIAkvKiBOT1RFOiBhc3NpZ25fc29jayBjb25zdW1lcyBvdXIgc2sgcmVmZXJlbmNlICovCi0JaWYgKHNrICYmIG5mX3Rwcm94eV9hc3NpZ25fc29jayhza2IsIHNrKSkgeworCWlmIChzayAmJiB0cHJveHlfc2tfaXNfdHJhbnNwYXJlbnQoc2spKSB7CiAJCS8qIFRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgdGFyZ2V0LCBidXQgd2UgZG9uJ3QgZG8gbXVsdGlwbGUKIAkJICAgdGFyZ2V0cyBvbiB0aGUgc2FtZSBydWxlIHlldCAqLwogCQlza2ItPm1hcmsgPSAoc2tiLT5tYXJrICYgfm1hcmtfbWFzaykgXiBtYXJrX3ZhbHVlOwpAQCAtMTQ5LDYgKzE2Myw4IEBACiAJCXByX2RlYnVnKCJyZWRpcmVjdGluZzogcHJvdG8gJWhodSAlcEk0OiVodSAtPiAlcEk0OiVodSwgbWFyazogJXhcbiIsCiAJCQkgaXBoLT5wcm90b2NvbCwgJmlwaC0+ZGFkZHIsIG50b2hzKGhwLT5kZXN0KSwKIAkJCSAmbGFkZHIsIG50b2hzKGxwb3J0KSwgc2tiLT5tYXJrKTsKKworCQluZl90cHJveHlfYXNzaWduX3NvY2soc2tiLCBzayk7CiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCkBAIC0zMDYsNyArMzIyLDcgQEAKIAkJCQkJICAgcGFyLT5pbiwgTkZUX0xPT0tVUF9MSVNURU5FUik7CiAKIAkvKiBOT1RFOiBhc3NpZ25fc29jayBjb25zdW1lcyBvdXIgc2sgcmVmZXJlbmNlICovCi0JaWYgKHNrICYmIG5mX3Rwcm94eV9hc3NpZ25fc29jayhza2IsIHNrKSkgeworCWlmIChzayAmJiB0cHJveHlfc2tfaXNfdHJhbnNwYXJlbnQoc2spKSB7CiAJCS8qIFRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgdGFyZ2V0LCBidXQgd2UgZG9uJ3QgZG8gbXVsdGlwbGUKIAkJICAgdGFyZ2V0cyBvbiB0aGUgc2FtZSBydWxlIHlldCAqLwogCQlza2ItPm1hcmsgPSAoc2tiLT5tYXJrICYgfnRnaS0+bWFya19tYXNrKSBeIHRnaS0+bWFya192YWx1ZTsKQEAgLTMxNCw2ICszMzAsOCBAQAogCQlwcl9kZWJ1ZygicmVkaXJlY3Rpbmc6IHByb3RvICVoaHUgJXBJNjolaHUgLT4gJXBJNjolaHUsIG1hcms6ICV4XG4iLAogCQkJIHRwcm90bywgJmlwaC0+c2FkZHIsIG50b2hzKGhwLT5zb3VyY2UpLAogCQkJIGxhZGRyLCBudG9ocyhscG9ydCksIHNrYi0+bWFyayk7CisKKwkJbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHNrYiwgc2spOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwppbmRleCA4OGY3YzM1Li43M2MzM2E0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuYwpAQCAtNTMsMTUgKzUzLDEzIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1pcHJhbmdlX2lwdjZfc3ViKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpiKQoraXByYW5nZV9pcHY2X2x0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpiKQogewogCXVuc2lnbmVkIGludCBpOwotCWludCByOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewotCQlyID0gbnRvaGwoYS0+czZfYWRkcjMyW2ldKSAtIG50b2hsKGItPnM2X2FkZHIzMltpXSk7Ci0JCWlmIChyICE9IDApCi0JCQlyZXR1cm4gcjsKKwkJaWYgKGEtPnM2X2FkZHIzMltpXSAhPSBiLT5zNl9hZGRyMzJbaV0pCisJCQlyZXR1cm4gbnRvaGwoYS0+czZfYWRkcjMyW2ldKSA8IG50b2hsKGItPnM2X2FkZHIzMltpXSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NSwxNSArNzMsMTUgQEAKIAlib29sIG07CiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQykgewotCQltICA9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWluLmluNikgPCAwOwotCQltIHw9IGlwcmFuZ2VfaXB2Nl9zdWIoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWF4LmluNikgPiAwOworCQltICA9IGlwcmFuZ2VfaXB2Nl9sdCgmaXBoLT5zYWRkciwgJmluZm8tPnNyY19taW4uaW42KTsKKwkJbSB8PSBpcHJhbmdlX2lwdjZfbHQoJmluZm8tPnNyY19tYXguaW42LCAmaXBoLT5zYWRkcik7CiAJCW0gXj0gISEoaW5mby0+ZmxhZ3MgJiBJUFJBTkdFX1NSQ19JTlYpOwogCQlpZiAobSkKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKLQkJbSAgPSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21pbi5pbjYpIDwgMDsKLQkJbSB8PSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21heC5pbjYpID4gMDsKKwkJbSAgPSBpcHJhbmdlX2lwdjZfbHQoJmlwaC0+ZGFkZHIsICZpbmZvLT5kc3RfbWluLmluNik7CisJCW0gfD0gaXByYW5nZV9pcHY2X2x0KCZpbmZvLT5kc3RfbWF4LmluNiwgJmlwaC0+ZGFkZHIpOwogCQltIF49ICEhKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1RfSU5WKTsKIAkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jIGIvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYwppbmRleCAwMGQ2YWU4My4uOWNjNDYzNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jCkBAIC0zNSw2ICszNSwxNSBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjZW5kaWYKIAorc3RhdGljIHZvaWQKK3h0X3NvY2tldF9wdXRfc2soc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkKKwkJaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKKwllbHNlCisJCXNvY2tfcHV0KHNrKTsKK30KKwogc3RhdGljIGludAogZXh0cmFjdF9pY21wNF9maWVsZHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgIHU4ICpwcm90b2NvbCwKQEAgLTE2NCw3ICsxNzMsNyBAQAogCQkJCSAgICAgICAoc2stPnNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQgJiYKIAkJCQkJaW5ldF90d3NrKHNrKS0+dHdfdHJhbnNwYXJlbnQpKTsKIAotCQluZl90cHJveHlfcHV0X3NvY2soc2spOworCQl4dF9zb2NrZXRfcHV0X3NrKHNrKTsKIAogCQlpZiAod2lsZGNhcmQgfHwgIXRyYW5zcGFyZW50KQogCQkJc2sgPSBOVUxMOwpAQCAtMjk4LDcgKzMwNyw3IEBACiAJCQkJICAgICAgIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCAmJgogCQkJCQlpbmV0X3R3c2soc2spLT50d190cmFuc3BhcmVudCkpOwogCi0JCW5mX3Rwcm94eV9wdXRfc29jayhzayk7CisJCXh0X3NvY2tldF9wdXRfc2soc2spOwogCiAJCWlmICh3aWxkY2FyZCB8fCAhdHJhbnNwYXJlbnQpCiAJCQlzayA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggNDc4MTgxZC4uMWY5MjQ1OSAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtMTQwNyw3ICsxNDA3LDcgQEAKIAlpbnQgbm9ibG9jayA9IGZsYWdzJk1TR19ET05UV0FJVDsKIAlzaXplX3QgY29waWVkOwogCXN0cnVjdCBza19idWZmICpza2IsICpkYXRhX3NrYjsKLQlpbnQgZXJyOworCWludCBlcnIsIHJldDsKIAogCWlmIChmbGFncyZNU0dfT09CKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0xNDcwLDggKzE0NzAsMTMgQEAKIAogCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOwogCi0JaWYgKG5say0+Y2IgJiYgYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA8PSBzay0+c2tfcmN2YnVmIC8gMikKLQkJbmV0bGlua19kdW1wKHNrKTsKKwlpZiAobmxrLT5jYiAmJiBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpIDw9IHNrLT5za19yY3ZidWYgLyAyKSB7CisJCXJldCA9IG5ldGxpbmtfZHVtcChzayk7CisJCWlmIChyZXQpIHsKKwkJCXNrLT5za19lcnIgPSByZXQ7CisJCQlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKKwkJfQorCX0KIAogCXNjbV9yZWN2KHNvY2ssIG1zZywgc2lvY2ItPnNjbSwgZmxhZ3MpOwogb3V0OgpAQCAtMTczNiw2ICsxNzQxLDcgQEAKIAlzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2I7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sazsKKwlpbnQgcmV0OwogCiAJY2IgPSBremFsbG9jKHNpemVvZigqY2IpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2IgPT0gTlVMTCkKQEAgLTE3NjQsOSArMTc3MCwxMyBAQAogCW5say0+Y2IgPSBjYjsKIAltdXRleF91bmxvY2sobmxrLT5jYl9tdXRleCk7CiAKLQluZXRsaW5rX2R1bXAoc2spOworCXJldCA9IG5ldGxpbmtfZHVtcChzayk7CisKIAlzb2NrX3B1dChzayk7CiAKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJLyogV2Ugc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYSBkdW1wLCBieSByZXR1cm5pbmcgLUVJTlRSIHdlCiAJICogc2lnbmFsIG5vdCB0byBzZW5kIEFDSyBldmVuIGlmIGl0IHdhcyByZXF1ZXN0ZWQuCiAJICovCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItaW5wdXQuYyBiL25ldC9yeHJwYy9hci1pbnB1dC5jCmluZGV4IDg5MzE1MDAuLjFhMmIwNjMzIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXItaW5wdXQuYworKysgYi9uZXQvcnhycGMvYXItaW5wdXQuYwpAQCAtNDIzLDYgKzQyMyw3IEBACiAJCQlnb3RvIHByb3RvY29sX2Vycm9yOwogCQl9CiAKKwljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX0FDS0FMTDoKIAljYXNlIFJYUlBDX1BBQ0tFVF9UWVBFX0FDSzoKIAkJLyogQUNLIHByb2Nlc3NpbmcgaXMgZG9uZSBpbiBwcm9jZXNzIGNvbnRleHQgKi8KIAkJcmVhZF9sb2NrX2JoKCZjYWxsLT5zdGF0ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1rZXkuYyBiL25ldC9yeHJwYy9hci1rZXkuYwppbmRleCA1ZWUxNmYwLi5kNzYzNzkzIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvYXIta2V5LmMKKysrIGIvbmV0L3J4cnBjL2FyLWtleS5jCkBAIC04OSwxMSArODksMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCXBsZW4gLT0gc2l6ZW9mKCp0b2tlbik7Ci0JdG9rZW4gPSBrbWFsbG9jKHNpemVvZigqdG9rZW4pLCBHRlBfS0VSTkVMKTsKKwl0b2tlbiA9IGt6YWxsb2Moc2l6ZW9mKCp0b2tlbiksIEdGUF9LRVJORUwpOwogCWlmICghdG9rZW4pCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdG9rZW4tPmthZCA9IGttYWxsb2MocGxlbiwgR0ZQX0tFUk5FTCk7CisJdG9rZW4tPmthZCA9IGt6YWxsb2MocGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0b2tlbi0+a2FkKSB7CiAJCWtmcmVlKHRva2VuKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03MzEsMTAgKzczMSwxMCBAQAogCQlnb3RvIGVycm9yOwogCiAJcmV0ID0gLUVOT01FTTsKLQl0b2tlbiA9IGttYWxsb2Moc2l6ZW9mKCp0b2tlbiksIEdGUF9LRVJORUwpOworCXRva2VuID0ga3phbGxvYyhzaXplb2YoKnRva2VuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0b2tlbikKIAkJZ290byBlcnJvcjsKLQl0b2tlbi0+a2FkID0ga21hbGxvYyhwbGVuLCBHRlBfS0VSTkVMKTsKKwl0b2tlbi0+a2FkID0ga3phbGxvYyhwbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRva2VuLT5rYWQpCiAJCWdvdG8gZXJyb3JfZnJlZTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggYzgwZDFjMi4uNWY2M2VjNSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC0zOTAsNyArMzkwLDYgQEAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2wtPnEpOwogCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewogCQlzY2gtPnEucWxlbisrOwotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJY2JxX21hcmtfdG9wbGV2ZWwocSwgY2wpOwogCQlpZiAoIWNsLT5uZXh0X2FsaXZlKQogCQkJY2JxX2FjdGl2YXRlX2NsYXNzKGNsKTsKQEAgLTY0OSw3ICs2NDgsNiBAQAogCQlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2wtPnEpOwogCQlpZiAocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKIAkJCXNjaC0+cS5xbGVuKys7Ci0JCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCWlmICghY2wtPm5leHRfYWxpdmUpCiAJCQkJY2JxX2FjdGl2YXRlX2NsYXNzKGNsKTsKIAkJCXJldHVybiAwOwpAQCAtOTcxLDYgKzk2OSw3IEBACiAKIAkJc2tiID0gY2JxX2RlcXVldWVfMShzY2gpOwogCQlpZiAoc2tiKSB7CisJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCXNjaC0+cS5xbGVuLS07CiAJCQlzY2gtPmZsYWdzICY9IH5UQ1FfRl9USFJPVFRMRUQ7CiAJCQlyZXR1cm4gc2tiOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kcnIuYyBiL25ldC9zY2hlZC9zY2hfZHJyLmMKaW5kZXggZGU1NWU2NC4uNmI3ZmU0YSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kcnIuYworKysgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCkBAIC0zNzYsNyArMzc2LDYgQEAKIAl9CiAKIAlic3RhdHNfdXBkYXRlKCZjbC0+YnN0YXRzLCBza2IpOwotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCiAJc2NoLT5xLnFsZW4rKzsKIAlyZXR1cm4gZXJyOwpAQCAtNDAzLDYgKzQwMiw3IEBACiAJCQlza2IgPSBxZGlzY19kZXF1ZXVlX3BlZWtlZChjbC0+cWRpc2MpOwogCQkJaWYgKGNsLT5xZGlzYy0+cS5xbGVuID09IDApCiAJCQkJbGlzdF9kZWwoJmNsLT5hbGlzdCk7CisJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCXNjaC0+cS5xbGVuLS07CiAJCQlyZXR1cm4gc2tiOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2RzbWFyay5jIGIvbmV0L3NjaGVkL3NjaF9kc21hcmsuYwppbmRleCA2MGY0YmRkLi4wZjdiZjNmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCisrKyBiL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKQEAgLTI2MCw3ICsyNjAsNiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXNjaC0+cS5xbGVuKys7CiAKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKQEAgLTI4Myw2ICsyODIsNyBAQAogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbi0tOwogCiAJaW5kZXggPSBza2ItPnRjX2luZGV4ICYgKHAtPmluZGljZXMgLSAxKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZmlmby5jIGIvbmV0L3NjaGVkL3NjaF9maWZvLmMKaW5kZXggYWE0ZDYzMy4uZDQ2OGI0NyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9maWZvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9maWZvLmMKQEAgLTQ2LDE3ICs0NiwxNCBAQAogCiBzdGF0aWMgaW50IHBmaWZvX3RhaWxfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MqIHNjaCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2hlYWQ7CiAJc3RydWN0IGZpZm9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAogCWlmIChsaWtlbHkoc2tiX3F1ZXVlX2xlbigmc2NoLT5xKSA8IHEtPmxpbWl0KSkKIAkJcmV0dXJuIHFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7CiAKIAkvKiBxdWV1ZSBmdWxsLCByZW1vdmUgb25lIHNrYiB0byBmdWxmaWxsIHRoZSBsaW1pdCAqLwotCXNrYl9oZWFkID0gcWRpc2NfZGVxdWV1ZV9oZWFkKHNjaCk7CisJX19xZGlzY19xdWV1ZV9kcm9wX2hlYWQoc2NoLCAmc2NoLT5xKTsKIAlzY2gtPnFzdGF0cy5kcm9wcysrOwotCWtmcmVlX3NrYihza2JfaGVhZCk7Ci0KIAlxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpOwogCiAJcmV0dXJuIE5FVF9YTUlUX0NOOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCAzNGRjNTk4Li4xYmM2OTgwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtODM5LDYgKzgzOSw3IEBACiAKIAlsaXN0X2FkZCgmZGV2LT51bnJlZ19saXN0LCAmc2luZ2xlKTsKIAlkZXZfZGVhY3RpdmF0ZV9tYW55KCZzaW5nbGUpOworCWxpc3RfZGVsKCZzaW5nbGUpOwogfQogCiBzdGF0aWMgdm9pZCBkZXZfaW5pdF9zY2hlZHVsZXJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggMmU0NTc5MS4uMTRhNzk5ZGUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC0xNjAwLDcgKzE2MDAsNiBAQAogCQlzZXRfYWN0aXZlKGNsLCBxZGlzY19wa3RfbGVuKHNrYikpOwogCiAJYnN0YXRzX3VwZGF0ZSgmY2wtPmJzdGF0cywgc2tiKTsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbisrOwogCiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CkBAIC0xNjY2LDYgKzE2NjUsNyBAQAogCX0KIAogCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbi0tOwogCiAJcmV0dXJuIHNrYjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IDk4NGMxYjAuLmZjMTJmZTYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaHRiLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuYwpAQCAtNTc0LDcgKzU3NCw2IEBACiAJfQogCiAJc2NoLT5xLnFsZW4rKzsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KIApAQCAtODQyLDcgKzg0MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaHRiX2RlcXVldWUoc3RydWN0IFFkaXNjICpzY2gpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwogCWludCBsZXZlbDsKIAlwc2NoZWRfdGltZV90IG5leHRfZXZlbnQ7CkBAIC04NTEsNiArODUwLDggQEAKIAkvKiB0cnkgdG8gZGVxdWV1ZSBkaXJlY3QgcGFja2V0cyBhcyBoaWdoIHByaW8gKCEpIHRvIG1pbmltaXplIGNwdSB3b3JrICovCiAJc2tiID0gX19za2JfZGVxdWV1ZSgmcS0+ZGlyZWN0X3F1ZXVlKTsKIAlpZiAoc2tiICE9IE5VTEwpIHsKK29rOgorCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOwogCQlzY2gtPnEucWxlbi0tOwogCQlyZXR1cm4gc2tiOwpAQCAtODg0LDExICs4ODUsOCBAQAogCQkJaW50IHByaW8gPSBmZnoobSk7CiAJCQltIHw9IDEgPDwgcHJpbzsKIAkJCXNrYiA9IGh0Yl9kZXF1ZXVlX3RyZWUocSwgcHJpbywgbGV2ZWwpOwotCQkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKLQkJCQlzY2gtPnEucWxlbi0tOwotCQkJCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKLQkJCQlnb3RvIGZpbjsKLQkJCX0KKwkJCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKQorCQkJCWdvdG8gb2s7CiAJCX0KIAl9CiAJc2NoLT5xc3RhdHMub3ZlcmxpbWl0cysrOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKaW5kZXggMjFmMTNkYS4uNDM2YTJlNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYworKysgYi9uZXQvc2NoZWQvc2NoX211bHRpcS5jCkBAIC04Myw3ICs4Myw2IEBACiAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgcWRpc2MpOwogCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5xLnFsZW4rKzsKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQpAQCAtMTEyLDYgKzExMSw3IEBACiAJCQlxZGlzYyA9IHEtPnF1ZXVlc1txLT5jdXJiYW5kXTsKIAkJCXNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKIAkJCWlmIChza2IpIHsKKwkJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCQlzY2gtPnEucWxlbi0tOwogCQkJCXJldHVybiBza2I7CiAJCQl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX25ldGVtLmMgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKaW5kZXggMWM0YmNlOC4uNmEzMDA2YiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCisrKyBiL25ldC9zY2hlZC9zY2hfbmV0ZW0uYwpAQCAtMjQwLDcgKzI0MCw2IEBACiAKIAlpZiAobGlrZWx5KHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSkgewogCQlzY2gtPnEucWxlbisrOwotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAl9IGVsc2UgaWYgKG5ldF94bWl0X2Ryb3BfY291bnQocmV0KSkgewogCQlzY2gtPnFzdGF0cy5kcm9wcysrOwogCX0KQEAgLTI4OSw2ICsyODgsNyBAQAogCQkJCXNrYi0+dHN0YW1wLnR2NjQgPSAwOwogI2VuZGlmCiAJCQlwcl9kZWJ1ZygibmV0ZW1fZGVxdWV1ZTogcmV0dXJuIHNrYj0lcFxuIiwgc2tiKTsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXJldHVybiBza2I7CiAJCX0KQEAgLTQ3Niw3ICs0NzYsNiBAQAogCQlfX3NrYl9xdWV1ZV9hZnRlcihsaXN0LCBza2IsIG5za2IpOwogCiAJCXNjaC0+cXN0YXRzLmJhY2tsb2cgKz0gcWRpc2NfcGt0X2xlbihuc2tiKTsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIG5za2IpOwogCiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcHJpby5jIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKaW5kZXggOTY2MTU4ZC4uZmJkNzEwZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9wcmlvLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9wcmlvLmMKQEAgLTg0LDcgKzg0LDYgQEAKIAogCXJldCA9IHFkaXNjX2VucXVldWUoc2tiLCBxZGlzYyk7CiAJaWYgKHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSB7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbisrOwogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIAl9CkBAIC0xMTYsNiArMTE1LDcgQEAKIAkJc3RydWN0IFFkaXNjICpxZGlzYyA9IHEtPnF1ZXVlc1twcmlvXTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKIAkJaWYgKHNrYikgeworCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlzY2gtPnEucWxlbi0tOwogCQkJcmV0dXJuIHNrYjsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9yZWQuYyBiL25ldC9zY2hlZC9zY2hfcmVkLmMKaW5kZXggYTYwMDljNS4uOWY5OGRiZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9yZWQuYworKysgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCkBAIC05NCw3ICs5NCw2IEBACiAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgY2hpbGQpOwogCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbisrOwogCX0gZWxzZSBpZiAobmV0X3htaXRfZHJvcF9jb3VudChyZXQpKSB7CiAJCXEtPnN0YXRzLnBkcm9wKys7CkBAIC0xMTQsMTEgKzExMywxMyBAQAogCXN0cnVjdCBRZGlzYyAqY2hpbGQgPSBxLT5xZGlzYzsKIAogCXNrYiA9IGNoaWxkLT5kZXF1ZXVlKGNoaWxkKTsKLQlpZiAoc2tiKQorCWlmIChza2IpIHsKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXNjaC0+cS5xbGVuLS07Ci0JZWxzZSBpZiAoIXJlZF9pc19pZGxpbmcoJnEtPnBhcm1zKSkKLQkJcmVkX3N0YXJ0X29mX2lkbGVfcGVyaW9kKCZxLT5wYXJtcyk7Ci0KKwl9IGVsc2UgeworCQlpZiAoIXJlZF9pc19pZGxpbmcoJnEtPnBhcm1zKSkKKwkJCXJlZF9zdGFydF9vZl9pZGxlX3BlcmlvZCgmcS0+cGFybXMpOworCX0KIAlyZXR1cm4gc2tiOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwppbmRleCAyMzllYzUzLi5lZGVhOGNlIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTQwMiwxMCArNDAyLDggQEAKIAkJcS0+dGFpbCA9IHNsb3Q7CiAJCXNsb3QtPmFsbG90ID0gcS0+c2NhbGVkX3F1YW50dW07CiAJfQotCWlmICgrK3NjaC0+cS5xbGVuIDw9IHEtPmxpbWl0KSB7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOworCWlmICgrK3NjaC0+cS5xbGVuIDw9IHEtPmxpbWl0KQogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKLQl9CiAKIAlzZnFfZHJvcChzY2gpOwogCXJldHVybiBORVRfWE1JVF9DTjsKQEAgLTQ0NSw2ICs0NDMsNyBAQAogCX0KIAlza2IgPSBzbG90X2RlcXVldWVfaGVhZChzbG90KTsKIAlzZnFfZGVjKHEsIGEpOworCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCXNjaC0+cS5xbGVuLS07CiAJc2NoLT5xc3RhdHMuYmFja2xvZyAtPSBxZGlzY19wa3RfbGVuKHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGJmLmMgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCmluZGV4IDc3NTY1ZTcuLmU5MzE2NTggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGJmLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90YmYuYwpAQCAtMTM0LDcgKzEzNCw2IEBACiAJfQogCiAJc2NoLT5xLnFsZW4rKzsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIH0KIApAQCAtMTg3LDYgKzE4Niw3IEBACiAJCQlxLT5wdG9rZW5zID0gcHRva3M7CiAJCQlzY2gtPnEucWxlbi0tOwogCQkJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOworCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlyZXR1cm4gc2tiOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGVxbC5jIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKaW5kZXggODRjZTQ4ZS4uZDg0ZTczMiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKQEAgLTg3LDcgKzg3LDYgQEAKIAogCWlmIChxLT5xLnFsZW4gPCBkZXYtPnR4X3F1ZXVlX2xlbikgewogCQlfX3NrYl9xdWV1ZV90YWlsKCZxLT5xLCBza2IpOwotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQogCkBAIC0xMTEsNiArMTEwLDggQEAKIAkJCWRhdC0+bS0+c2xhdmVzID0gc2NoOwogCQkJbmV0aWZfd2FrZV9xdWV1ZShtKTsKIAkJfQorCX0gZWxzZSB7CisJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCX0KIAlzY2gtPnEucWxlbiA9IGRhdC0+cS5xbGVuICsgZGF0X3F1ZXVlLT5xZGlzYy0+cS5xbGVuOwogCXJldHVybiBza2I7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggMmNjNDZmMC4uYjIzNDI4ZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMjAyOSwxMSArMjAyOSwxMSBAQAogCQkJKmVycnAgPSBzY3RwX21ha2Vfb3BfZXJyb3JfZml4ZWQoYXNvYywgY2h1bmspOwogCiAJCWlmICgqZXJycCkgewotCQkJc2N0cF9pbml0X2NhdXNlX2ZpeGVkKCplcnJwLCBTQ1RQX0VSUk9SX1VOS05PV05fUEFSQU0sCi0JCQkJCVdPUkRfUk9VTkQobnRvaHMocGFyYW0ucC0+bGVuZ3RoKSkpOwotCQkJc2N0cF9hZGR0b19jaHVua19maXhlZCgqZXJycCwKLQkJCQkJV09SRF9ST1VORChudG9ocyhwYXJhbS5wLT5sZW5ndGgpKSwKLQkJCQkJcGFyYW0udik7CisJCQlpZiAoIXNjdHBfaW5pdF9jYXVzZV9maXhlZCgqZXJycCwgU0NUUF9FUlJPUl9VTktOT1dOX1BBUkFNLAorCQkJCQlXT1JEX1JPVU5EKG50b2hzKHBhcmFtLnAtPmxlbmd0aCkpKSkKKwkJCQlzY3RwX2FkZHRvX2NodW5rX2ZpeGVkKCplcnJwLAorCQkJCQkJV09SRF9ST1VORChudG9ocyhwYXJhbS5wLT5sZW5ndGgpKSwKKwkJCQkJCXBhcmFtLnYpOwogCQl9IGVsc2UgewogCQkJLyogSWYgdGhlcmUgaXMgbm8gbWVtb3J5IGZvciBnZW5lcmF0aW5nIHRoZSBFUlJPUgogCQkJICogcmVwb3J0IGFzIHNwZWNpZmllZCwgYW4gQUJPUlQgd2lsbCBiZSB0cmlnZ2VyZWQKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggN2JkM2JiYi4uZDgwMmU5NCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTE2MDksOSArMTYwOSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHN2Y19iY19zb2NrX2ZyZWUoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KQogewotCWlmICh4cHJ0KSB7Ci0JCWtmcmVlKHhwcnQtPnhwdF9iY19zaWQpOworCWlmICh4cHJ0KQogCQlrZnJlZShjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHN2Y19zb2NrLCBza194cHJ0KSk7Ci0JfQogfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCAzZTVkYmQ0Li5kMTEyZjAzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtODAyLDExICs4MDIsMTEgQEAKIAkJCXJldHVybiBmcmVxOwogCQlpZiAoZnJlcSA9PSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXdkZXZfbG9jayh3ZGV2KTsKIAkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQl3ZGV2X2xvY2sod2Rldik7CiAJCWVyciA9IGNmZzgwMjExX3NldF9mcmVxKHJkZXYsIHdkZXYsIGZyZXEsIE5MODAyMTFfQ0hBTl9OT19IVCk7Ci0JCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwogCQl3ZGV2X3VubG9jayh3ZGV2KTsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CiAJCXJldHVybiBlcnI7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jIGIvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jCmluZGV4IDU1MTg3YzguLjQwNjIwNzUgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYworKysgYi9uZXQveDI1L3gyNV9mYWNpbGl0aWVzLmMKQEAgLTI3LDkgKzI3LDE5IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQveDI1Lmg+CiAKLS8qCi0gKiBQYXJzZSBhIHNldCBvZiBmYWNpbGl0aWVzIGludG8gdGhlIGZhY2lsaXRpZXMgc3RydWN0dXJlcy4gVW5yZWNvZ25pc2VkCi0gKglmYWNpbGl0aWVzIGFyZSB3cml0dGVuIHRvIHRoZSBkZWJ1ZyBsb2cgZmlsZS4KKy8qKgorICogeDI1X3BhcnNlX2ZhY2lsaXRpZXMgLSBQYXJzZSBmYWNpbGl0aWVzIGZyb20gc2tiIGludG8gdGhlIGZhY2lsaXRpZXMgc3RydWN0cworICoKKyAqIEBza2I6IHNrX2J1ZmYgdG8gcGFyc2UKKyAqIEBmYWNpbGl0aWVzOiBSZWd1bGFyIGZhY2lsaXRlcywgdXBkYXRlZCBhcyBmYWNpbGl0aWVzIGFyZSBmb3VuZAorICogQGR0ZV9mYWNzOiBJVFUgRFRFIGZhY2lsaXRpZXMsIHVwZGF0ZWQgYXMgRFRFIGZhY2lsaXRpZXMgYXJlIGZvdW5kCisgKiBAdmNfZmFjX21hc2s6IG1hc2sgaXMgdXBkYXRlZCB3aXRoIGFsbCBmYWNpbGl0aWVzIGZvdW5kCisgKgorICogUmV0dXJuIGNvZGVzOgorICogIC0xIC0gUGFyc2luZyBlcnJvciwgY2FsbGVyIHNob3VsZCBkcm9wIGNhbGwgYW5kIGNsZWFuIHVwCisgKiAgIDAgLSBQYXJzZSBPSywgdGhpcyBza2IgaGFzIG5vIGZhY2lsaXRpZXMKKyAqICA+MCAtIFBhcnNlIE9LLCByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGZhY2lsaXRpZXMgaGVhZGVyCisgKgogICovCiBpbnQgeDI1X3BhcnNlX2ZhY2lsaXRpZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHgyNV9mYWNpbGl0aWVzICpmYWNpbGl0aWVzLAogCQlzdHJ1Y3QgeDI1X2R0ZV9mYWNpbGl0aWVzICpkdGVfZmFjcywgdW5zaWduZWQgbG9uZyAqdmNfZmFjX21hc2spCkBAIC02Miw3ICs3Miw3IEBACiAJCXN3aXRjaCAoKnAgJiBYMjVfRkFDX0NMQVNTX01BU0spIHsKIAkJY2FzZSBYMjVfRkFDX0NMQVNTX0E6CiAJCQlpZiAobGVuIDwgMikKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gLTE7CiAJCQlzd2l0Y2ggKCpwKSB7CiAJCQljYXNlIFgyNV9GQUNfUkVWRVJTRToKIAkJCQlpZigocFsxXSAmIDB4ODEpID09IDB4ODEpIHsKQEAgLTEwNyw3ICsxMTcsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19COgogCQkJaWYgKGxlbiA8IDMpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJc3dpdGNoICgqcCkgewogCQkJY2FzZSBYMjVfRkFDX1BBQ0tFVF9TSVpFOgogCQkJCWZhY2lsaXRpZXMtPnBhY3NpemVfaW4gID0gcFsxXTsKQEAgLTEzMCw3ICsxNDAsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19DOgogCQkJaWYgKGxlbiA8IDQpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlguMjU6IHVua25vd24gZmFjaWxpdHkgJTAyWCwgIgogCQkJICAgICAgICJ2YWx1ZXMgJTAyWCwgJTAyWCwgJTAyWFxuIiwKIAkJCSAgICAgICBwWzBdLCBwWzFdLCBwWzJdLCBwWzNdKTsKQEAgLTEzOSwxOCArMTQ5LDE4IEBACiAJCQlicmVhazsKIAkJY2FzZSBYMjVfRkFDX0NMQVNTX0Q6CiAJCQlpZiAobGVuIDwgcFsxXSArIDIpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJc3dpdGNoICgqcCkgewogCQkJY2FzZSBYMjVfRkFDX0NBTExJTkdfQUU6CiAJCQkJaWYgKHBbMV0gPiBYMjVfTUFYX0RURV9GQUNJTF9MRU4gfHwgcFsxXSA8PSAxKQotCQkJCQlyZXR1cm4gMDsKKwkJCQkJcmV0dXJuIC0xOwogCQkJCWR0ZV9mYWNzLT5jYWxsaW5nX2xlbiA9IHBbMl07CiAJCQkJbWVtY3B5KGR0ZV9mYWNzLT5jYWxsaW5nX2FlLCAmcFszXSwgcFsxXSAtIDEpOwogCQkJCSp2Y19mYWNfbWFzayB8PSBYMjVfTUFTS19DQUxMSU5HX0FFOwogCQkJCWJyZWFrOwogCQkJY2FzZSBYMjVfRkFDX0NBTExFRF9BRToKIAkJCQlpZiAocFsxXSA+IFgyNV9NQVhfRFRFX0ZBQ0lMX0xFTiB8fCBwWzFdIDw9IDEpCi0JCQkJCXJldHVybiAwOworCQkJCQlyZXR1cm4gLTE7CiAJCQkJZHRlX2ZhY3MtPmNhbGxlZF9sZW4gPSBwWzJdOwogCQkJCW1lbWNweShkdGVfZmFjcy0+Y2FsbGVkX2FlLCAmcFszXSwgcFsxXSAtIDEpOwogCQkJCSp2Y19mYWNfbWFzayB8PSBYMjVfTUFTS19DQUxMRURfQUU7CmRpZmYgLS1naXQgYS9uZXQveDI1L3gyNV9pbi5jIGIvbmV0L3gyNS94MjVfaW4uYwppbmRleCBmNzI5ZjAyLi4xNWRlNjVmIDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9pbi5jCisrKyBiL25ldC94MjUveDI1X2luLmMKQEAgLTkxLDEwICs5MSwxMCBAQAogewogCXN0cnVjdCB4MjVfYWRkcmVzcyBzb3VyY2VfYWRkciwgZGVzdF9hZGRyOwogCWludCBsZW47CisJc3RydWN0IHgyNV9zb2NrICp4MjUgPSB4MjVfc2soc2spOwogCiAJc3dpdGNoIChmcmFtZXR5cGUpIHsKIAkJY2FzZSBYMjVfQ0FMTF9BQ0NFUFRFRDogewotCQkJc3RydWN0IHgyNV9zb2NrICp4MjUgPSB4MjVfc2soc2spOwogCiAJCQl4MjVfc3RvcF90aW1lcihzayk7CiAJCQl4MjUtPmNvbmRpdGlvbiA9IDB4MDA7CkBAIC0xMTMsMTQgKzExMywxNiBAQAogCQkJCQkJJmRlc3RfYWRkcik7CiAJCQlpZiAobGVuID4gMCkKIAkJCQlza2JfcHVsbChza2IsIGxlbik7CisJCQllbHNlIGlmIChsZW4gPCAwKQorCQkJCWdvdG8gb3V0X2NsZWFyOwogCiAJCQlsZW4gPSB4MjVfcGFyc2VfZmFjaWxpdGllcyhza2IsICZ4MjUtPmZhY2lsaXRpZXMsCiAJCQkJCQkmeDI1LT5kdGVfZmFjaWxpdGllcywKIAkJCQkJCSZ4MjUtPnZjX2ZhY2lsX21hc2spOwogCQkJaWYgKGxlbiA+IDApCiAJCQkJc2tiX3B1bGwoc2tiLCBsZW4pOwotCQkJZWxzZQotCQkJCXJldHVybiAtMTsKKwkJCWVsc2UgaWYgKGxlbiA8IDApCisJCQkJZ290byBvdXRfY2xlYXI7CiAJCQkvKgogCQkJICoJQ29weSBhbnkgQ2FsbCBVc2VyIERhdGEuCiAJCQkgKi8KQEAgLTE0NCw2ICsxNDYsMTIgQEAKIAl9CiAKIAlyZXR1cm4gMDsKKworb3V0X2NsZWFyOgorCXgyNV93cml0ZV9pbnRlcm5hbChzaywgWDI1X0NMRUFSX1JFUVVFU1QpOworCXgyNS0+c3RhdGUgPSBYMjVfU1RBVEVfMjsKKwl4MjVfc3RhcnRfdDIzdGltZXIoc2spOworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfbGluay5jIGIvbmV0L3gyNS94MjVfbGluay5jCmluZGV4IDRjYmM5NDIuLjIxMzA2OTIgMTAwNjQ0Ci0tLSBhL25ldC94MjUveDI1X2xpbmsuYworKysgYi9uZXQveDI1L3gyNV9saW5rLmMKQEAgLTM5Niw5ICszOTYsMTIgQEAKIAl3cml0ZV9sb2NrX2JoKCZ4MjVfbmVpZ2hfbGlzdF9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgdG1wLCAmeDI1X25laWdoX2xpc3QpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwogCQluYiA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCB4MjVfbmVpZ2gsIG5vZGUpOworCQlkZXYgPSBuYi0+ZGV2OwogCQlfX3gyNV9yZW1vdmVfbmVpZ2gobmIpOwotCQlkZXZfcHV0KG5iLT5kZXYpOworCQlkZXZfcHV0KGRldik7CiAJfQogCXdyaXRlX3VubG9ja19iaCgmeDI1X25laWdoX2xpc3RfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCA4YjNlZjQwLi42NDU5NTg4IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTEzNDAsMTAgKzEzNDAsMTMgQEAKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9Ci0JeGRzdCA9IGRzdF9hbGxvYyhkc3Rfb3BzKSA/OiBFUlJfUFRSKC1FTk9CVUZTKTsKKwl4ZHN0ID0gZHN0X2FsbG9jKGRzdF9vcHMpOwogCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKIAotCXhkc3QtPmZsby5vcHMgPSAmeGZybV9idW5kbGVfZmNfb3BzOworCWlmIChsaWtlbHkoeGRzdCkpCisJCXhkc3QtPmZsby5vcHMgPSAmeGZybV9idW5kbGVfZmNfb3BzOworCWVsc2UKKwkJeGRzdCA9IEVSUl9QVFIoLUVOT0JVRlMpOwogCiAJcmV0dXJuIHhkc3Q7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jIGIvc2NyaXB0cy9iYXNpYy9maXhkZXAuYwppbmRleCBjOWExNmFiLi42Yzk0YzZjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jCisrKyBiL3NjcmlwdHMvYmFzaWMvZml4ZGVwLmMKQEAgLTMxNSw2ICszMTUsNyBAQAogCWNoYXIgKmVuZCA9IG0gKyBsZW47CiAJY2hhciAqcDsKIAljaGFyIHNbUEFUSF9NQVhdOworCWludCBmaXJzdDsKIAogCXAgPSBzdHJjaHIobSwgJzonKTsKIAlpZiAoIXApIHsKQEAgLTMyNyw2ICszMjgsNyBAQAogCiAJY2xlYXJfY29uZmlnKCk7CiAKKwlmaXJzdCA9IDE7CiAJd2hpbGUgKG0gPCBlbmQpIHsKIAkJd2hpbGUgKG0gPCBlbmQgJiYgKCptID09ICcgJyB8fCAqbSA9PSAnXFwnIHx8ICptID09ICdcbicpKQogCQkJbSsrOwpAQCAtMzQwLDkgKzM0MiwxNyBAQAogCQlpZiAoc3RycmNtcChzLCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCIpICYmCiAJCSAgICBzdHJyY21wKHMsICJhcmNoL3VtL2luY2x1ZGUvdW1sLWNvbmZpZy5oIikgJiYKIAkJICAgIHN0cnJjbXAocywgIi52ZXIiKSkgewotCQkJcHJpbnRmKCIgICVzIFxcXG4iLCBzKTsKKwkJCS8qCisJCQkgKiBEbyBub3Qgb3V0cHV0IHRoZSBmaXJzdCBkZXBlbmRlbmN5ICh0aGUKKwkJCSAqIHNvdXJjZSBmaWxlKSwgc28gdGhhdCBrYnVpbGQgaXMgbm90IGNvbmZ1c2VkCisJCQkgKiBpZiBhIC5jIGZpbGUgaXMgcmV3cml0dGVuIGludG8gLlMgb3IgdmljZQorCQkJICogdmVyc2EuCisJCQkgKi8KKwkJCWlmICghZmlyc3QpCisJCQkJcHJpbnRmKCIgICVzIFxcXG4iLCBzKTsKIAkJCWRvX2NvbmZpZ19maWxlKHMpOwogCQl9CisJCWZpcnN0ID0gMDsKIAkJbSA9IHAgKyAxOwogCX0KIAlwcmludGYoIlxuJXM6ICQoZGVwc18lcylcblxuIiwgdGFyZ2V0LCB0YXJnZXQpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViCmluZGV4IGIwYjIzNTcuLmY2Y2JjM2QgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9idWlsZGRlYgorKysgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGRkZWIKQEAgLTIzOCwxMiArMjM4LDEyIEBACiBmaQogCiAjIEJ1aWxkIGhlYWRlciBwYWNrYWdlCi1maW5kIC4gLW5hbWUgTWFrZWZpbGUgLW8gLW5hbWUgS2NvbmZpZ1wqIC1vIC1uYW1lIFwqLnBsID4gL3RtcC9maWxlcyQkCi1maW5kIGFyY2gveDg2L2luY2x1ZGUgaW5jbHVkZSBzY3JpcHRzIC10eXBlIGYgPj4gL3RtcC9maWxlcyQkCisoY2QgJHNyY3RyZWU7IGZpbmQgLiAtbmFtZSBNYWtlZmlsZSAtbyAtbmFtZSBLY29uZmlnXCogLW8gLW5hbWUgXCoucGwgPiAvdG1wL2ZpbGVzJCQpCisoY2QgJHNyY3RyZWU7IGZpbmQgYXJjaC8kU1JDQVJDSC9pbmNsdWRlIGluY2x1ZGUgc2NyaXB0cyAtdHlwZSBmID4+IC90bXAvZmlsZXMkJCkKIChjZCAkb2JqdHJlZTsgZmluZCAuY29uZmlnIE1vZHVsZS5zeW12ZXJzIGluY2x1ZGUgc2NyaXB0cyAtdHlwZSBmID4+IC90bXAvb2JqZmlsZXMkJCkKIGRlc3RkaXI9JGtlcm5lbF9oZWFkZXJzX2Rpci91c3Ivc3JjL2xpbnV4LWhlYWRlcnMtJHZlcnNpb24KIG1rZGlyIC1wICIkZGVzdGRpciIKLXRhciAtYyAtZiAtIC1UIC90bXAvZmlsZXMkJCB8IChjZCAkZGVzdGRpcjsgdGFyIC14ZiAtKQorKGNkICRzcmN0cmVlOyB0YXIgLWMgLWYgLSAtVCAvdG1wL2ZpbGVzJCQpIHwgKGNkICRkZXN0ZGlyOyB0YXIgLXhmIC0pCiAoY2QgJG9ianRyZWU7IHRhciAtYyAtZiAtIC1UIC90bXAvb2JqZmlsZXMkJCkgfCAoY2QgJGRlc3RkaXI7IHRhciAteGYgLSkKIHJtIC1mIC90bXAvZmlsZXMkJCAvdG1wL29iamZpbGVzJCQKIGFyY2g9JChkcGtnIC0tcHJpbnQtYXJjaGl0ZWN0dXJlKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggNzM5ZTQwMy4uN2I3MzA4YSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYworKysgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC0xNTQsMTAgKzE1NCw5IEBACiAJCQkJICAgIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsIHBlcm1pdHRlZCk7CiB9CiAKLWludCBzZWN1cml0eV9jYXBhYmxlKGludCBjYXApCitpbnQgc2VjdXJpdHlfY2FwYWJsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgaW50IGNhcCkKIHsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT5jYXBhYmxlKGN1cnJlbnQsIGN1cnJlbnRfY3JlZCgpLCBjYXAsCi0JCQkJICAgICBTRUNVUklUWV9DQVBfQVVESVQpOworCXJldHVybiBzZWN1cml0eV9vcHMtPmNhcGFibGUoY3VycmVudCwgY3JlZCwgY2FwLCBTRUNVUklUWV9DQVBfQVVESVQpOwogfQogCiBpbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY2FwKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGUyNzZlYjQuLmM4ZDY5OTIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTMxOTgsNyArMzE5OCwxMSBAQAogewogCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGNyZWQtPnNlY3VyaXR5OwogCi0JQlVHX09OKCh1bnNpZ25lZCBsb25nKSBjcmVkLT5zZWN1cml0eSA8IFBBR0VfU0laRSk7CisJLyoKKwkgKiBjcmVkLT5zZWN1cml0eSA9PSBOVUxMIGlmIHNlY3VyaXR5X2NyZWRfYWxsb2NfYmxhbmsoKSBvcgorCSAqIHNlY3VyaXR5X3ByZXBhcmVfY3JlZHMoKSByZXR1cm5lZCBhbiBlcnJvci4KKwkgKi8KKwlCVUdfT04oY3JlZC0+c2VjdXJpdHkgJiYgKHVuc2lnbmVkIGxvbmcpIGNyZWQtPnNlY3VyaXR5IDwgUEFHRV9TSVpFKTsKIAljcmVkLT5zZWN1cml0eSA9ICh2b2lkICopIDB4N1VMOwogCWtmcmVlKHRzZWMpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggMjRkMzAxMy4uN2MxZmM2NCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC01MCw3ICs1MCwxMSBAQAogCWlmICh2ICYgU0xGUl8xUlhWKQogCQlyZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTDFSWCk7CiAKLQl3cml0ZWwobWFpbmNyLCBhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOworCWlmIChtYWluY3IgIT0gcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKSkgeworCQl3cml0ZWwobWFpbmNyLCBhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOworCQlyZWFkbChhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOworCQl1ZGVsYXkoMSk7CisJfQogfQogCiAvKgpAQCAtOTkzLDYgKzk5Nyw4IEBACiAJICogZGlzYWJsaW5nIHRoZSBjaGFubmVsIGRvZXNuJ3QgY2xlYXIgdGhlIEZJRk8uCiAJICovCiAJd3JpdGVsKGFhY2ktPm1haW5jciAmIH5NQUlOQ1JfSUUsIGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKTsKKwl1ZGVsYXkoMSk7CiAJd3JpdGVsKGFhY2ktPm1haW5jciwgYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9hYzk3Yy5jIGIvc291bmQvYXRtZWwvYWM5N2MuYwppbmRleCAxMGMzYTg3Li5iMzEwNzAyIDEwMDY0NAotLS0gYS9zb3VuZC9hdG1lbC9hYzk3Yy5jCisrKyBiL3NvdW5kL2F0bWVsL2FjOTdjLmMKQEAgLTMzLDkgKzMzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgogCiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9BVDkxCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2VuZGlmCisKICNpbmNsdWRlICJhYzk3Yy5oIgogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaHJ0aW1lci5jIGIvc291bmQvY29yZS9ocnRpbWVyLmMKaW5kZXggNzczMDU3NS4uYjhiMzFjNCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9ocnRpbWVyLmMKKysrIGIvc291bmQvY29yZS9ocnRpbWVyLmMKQEAgLTQ1LDEyICs0NSwxMyBAQAogewogCXN0cnVjdCBzbmRfaHJ0aW1lciAqc3RpbWUgPSBjb250YWluZXJfb2YoaHJ0LCBzdHJ1Y3Qgc25kX2hydGltZXIsIGhydCk7CiAJc3RydWN0IHNuZF90aW1lciAqdCA9IHN0aW1lLT50aW1lcjsKKwl1bnNpZ25lZCBsb25nIG9ydW5zOwogCiAJaWYgKCFhdG9taWNfcmVhZCgmc3RpbWUtPnJ1bm5pbmcpKQogCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CiAKLQlocnRpbWVyX2ZvcndhcmRfbm93KGhydCwgbnNfdG9fa3RpbWUodC0+c3RpY2tzICogcmVzb2x1dGlvbikpOwotCXNuZF90aW1lcl9pbnRlcnJ1cHQoc3RpbWUtPnRpbWVyLCB0LT5zdGlja3MpOworCW9ydW5zID0gaHJ0aW1lcl9mb3J3YXJkX25vdyhocnQsIG5zX3RvX2t0aW1lKHQtPnN0aWNrcyAqIHJlc29sdXRpb24pKTsKKwlzbmRfdGltZXJfaW50ZXJydXB0KHN0aW1lLT50aW1lciwgdC0+c3RpY2tzICogb3J1bnMpOwogCiAJaWYgKCFhdG9taWNfcmVhZCgmc3RpbWUtPnJ1bm5pbmcpKQogCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CkBAIC0xMDQsNyArMTA1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfdGltZXJfaGFyZHdhcmUgaHJ0aW1lcl9odyA9IHsKLQkuZmxhZ3MgPQlTTkRSVl9USU1FUl9IV19BVVRPLAorCS5mbGFncyA9CVNORFJWX1RJTUVSX0hXX0FVVE8gfCBTTkRSVl9USU1FUl9IV19UQVNLTEVULAogCS5vcGVuID0JCXNuZF9ocnRpbWVyX29wZW4sCiAJLmNsb3NlID0Jc25kX2hydGltZXJfY2xvc2UsCiAJLnN0YXJ0ID0Jc25kX2hydGltZXJfc3RhcnQsCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2phY2suYyBiL3NvdW5kL2NvcmUvamFjay5jCmluZGV4IDQ5MDJhZTUuLjUzYjUzZTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvamFjay5jCisrKyBiL3NvdW5kL2NvcmUvamFjay5jCkBAIC0xNDEsNiArMTQxLDcgQEAKIAogZmFpbF9pbnB1dDoKIAlpbnB1dF9mcmVlX2RldmljZShqYWNrLT5pbnB1dF9kZXYpOworCWtmcmVlKGphY2stPmlkKTsKIAlrZnJlZShqYWNrKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tdHBhdi5jIGIvc291bmQvZHJpdmVycy9tdHBhdi5jCmluZGV4IGRhMDM1OTcuLjVjNDI2ZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXRwYXYuYworKysgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKQEAgLTU1LDE0ICs1NSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KIC8qCiAgKiAgICAgIGdsb2JhbHMKICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL01ha2VmaWxlIGIvc291bmQvb3NzL01ha2VmaWxlCmluZGV4IDk2ZjE0ZGMuLjkwZmZiOTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9NYWtlZmlsZQorKysgYi9zb3VuZC9vc3MvTWFrZWZpbGUKQEAgLTg3LDcgKzg3LDcgQEAKIAkkKG9iaikvYmluMmhleCBwc3Nfc3ludGggPCAkPCA+ICRACiBlbHNlCiAgICAgJChvYmopL3Bzc19ib290Lmg6Ci0JKAkJCQkJCQlcCisJJChRKSgJCQkJCQkJXAogCSAgICBlY2hvICdzdGF0aWMgdW5zaWduZWQgY2hhciAqIHBzc19zeW50aCA9IE5VTEw7JzsJXAogCSAgICBlY2hvICdzdGF0aWMgaW50IHBzc19zeW50aExlbiA9IDA7JzsJCVwKIAkpID4gJEAKQEAgLTEwMiw3ICsxMDIsNyBAQAogCSQob2JqKS9oZXgyaGV4IC1pIHRyaXhfYm9vdCA8ICQ8ID4gJEAKIGVsc2UKICAgICAkKG9iaikvdHJpeF9ib290Lmg6Ci0JKAkJCQkJCQlcCisJJChRKSgJCQkJCQkJXAogCSAgICBlY2hvICdzdGF0aWMgdW5zaWduZWQgY2hhciAqIHRyaXhfYm9vdCA9IE5VTEw7JzsJXAogCSAgICBlY2hvICdzdGF0aWMgaW50IHRyaXhfYm9vdF9sZW4gPSAwOyc7CQlcCiAJKSA+ICRACmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKaW5kZXggMjNmNDlmMy4uMTZjMGJkZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYwpAQCAtMTI1MiwxMSArMTI1MiwxOSBAQAogc3RhdGljIGludCBpbmxpbmUgdm9ydGV4X2FkYmRtYV9nZXRsaW5lYXJwb3Modm9ydGV4X3QgKiB2b3J0ZXgsIGludCBhZGJkbWEpCiB7CiAJc3RyZWFtX3QgKmRtYSA9ICZ2b3J0ZXgtPmRtYV9hZGJbYWRiZG1hXTsKLQlpbnQgdGVtcDsKKwlpbnQgdGVtcCwgcGFnZSwgZGVsdGE7CiAKIAl0ZW1wID0gaHdyZWFkKHZvcnRleC0+bW1pbywgVk9SVEVYX0FEQkRNQV9TVEFUICsgKGFkYmRtYSA8PCAyKSk7Ci0JdGVtcCA9IChkbWEtPnBlcmlvZF92aXJ0ICogZG1hLT5wZXJpb2RfYnl0ZXMpICsgKHRlbXAgJiAoZG1hLT5wZXJpb2RfYnl0ZXMgLSAxKSk7Ci0JcmV0dXJuIHRlbXA7CisJcGFnZSA9ICh0ZW1wICYgQURCX1NVQkJVRl9NQVNLKSA+PiBBREJfU1VCQlVGX1NISUZUOworCWlmIChkbWEtPm5yX3BlcmlvZHMgPj0gNCkKKwkJZGVsdGEgPSAocGFnZSAtIGRtYS0+cGVyaW9kX3JlYWwpICYgMzsKKwllbHNlIHsKKwkJZGVsdGEgPSAocGFnZSAtIGRtYS0+cGVyaW9kX3JlYWwpOworCQlpZiAoZGVsdGEgPCAwKQorCQkJZGVsdGEgKz0gZG1hLT5ucl9wZXJpb2RzOworCX0KKwlyZXR1cm4gKGRtYS0+cGVyaW9kX3ZpcnQgKyBkZWx0YSkgKiBkbWEtPnBlcmlvZF9ieXRlcworCQkrICh0ZW1wICYgKGRtYS0+cGVyaW9kX2J5dGVzIC0gMSkpOwogfQogCiBzdGF0aWMgdm9pZCB2b3J0ZXhfYWRiZG1hX3N0YXJ0Zmlmbyh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IGFkYmRtYSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDYxMTc1OTUuLjU3MzU5NGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtOTc5LDMxICs5NzksMjUgQEAKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwogCXN3aXRjaCAoYml0cmF0ZSkgewotI2RlZmluZSBBWkZfRk1UX1hMQVRFKGluX2ZyZXEsIG91dF9iaXRzKSBcCi0JZG8geyBcCi0JCWNhc2UgQVpGX0ZSRVFfICMjIGluX2ZyZXE6IFwKLQkJCWZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXyAjIyBvdXRfYml0czsgXAotCQkJYnJlYWs7IFwKLQl9IHdoaWxlICgwKTsKLQlBWkZfRk1UX1hMQVRFKDQwMDAsIFNVU1BFQ1RFRF80MDAwKQotCUFaRl9GTVRfWExBVEUoNDgwMCwgU1VTUEVDVEVEXzQ4MDApCi0JLyogdGhlIEFaRjMzMjggbmFtZXMgaXQgIjU1MTAiIGZvciBzb21lIHN0cmFuZ2UgcmVhc29uOiAqLwotCUFaRl9GTVRfWExBVEUoNTUxMiwgNTUxMCkKLQlBWkZfRk1UX1hMQVRFKDY2MjAsIDY2MjApCi0JQVpGX0ZNVF9YTEFURSg4MDAwLCA4MDAwKQotCUFaRl9GTVRfWExBVEUoOTYwMCwgOTYwMCkKLQlBWkZfRk1UX1hMQVRFKDExMDI1LCAxMTAyNSkKLQlBWkZfRk1UX1hMQVRFKDEzMjQwLCBTVVNQRUNURURfMTMyNDApCi0JQVpGX0ZNVF9YTEFURSgxNjAwMCwgMTYwMDApCi0JQVpGX0ZNVF9YTEFURSgyMjA1MCwgMjIwNTApCi0JQVpGX0ZNVF9YTEFURSgzMjAwMCwgMzIwMDApCisJY2FzZSBBWkZfRlJFUV80MDAwOiAgZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfU1VTUEVDVEVEXzQwMDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNDgwMDogIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRX1NVU1BFQ1RFRF80ODAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzU1MTI6CisJCS8qIHRoZSBBWkYzMzI4IG5hbWVzIGl0ICI1NTEwIiBmb3Igc29tZSBzdHJhbmdlIHJlYXNvbiAqLworCQkJICAgICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV81NTEwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzY2MjA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV82NjIwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzgwMDA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV84MDAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzk2MDA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV85NjAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzExMDI1OiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV8xMTAyNTsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV8xMzI0MDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfU1VTUEVDVEVEXzEzMjQwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzE2MDAwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV8xNjAwMDsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV8yMjA1MDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfMjIwNTA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfMzIwMDA6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzMyMDAwOyBicmVhazsKIAlkZWZhdWx0OgogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAidW5rbm93biBiaXRyYXRlICVkLCBhc3N1bWluZyA0NC4xa0h6IVxuIiwgYml0cmF0ZSk7CiAJCS8qIGZhbGwtdGhyb3VnaCAqLwotCUFaRl9GTVRfWExBVEUoNDQxMDAsIDQ0MTAwKQotCUFaRl9GTVRfWExBVEUoNDgwMDAsIDQ4MDAwKQotCUFaRl9GTVRfWExBVEUoNjYyMDAsIFNVU1BFQ1RFRF82NjIwMCkKLSN1bmRlZiBBWkZfRk1UX1hMQVRFCisJY2FzZSBBWkZfRlJFUV80NDEwMDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfNDQxMDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNDgwMDA6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzQ4MDAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzY2MjAwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV9TVVNQRUNURURfNjYyMDA7IGJyZWFrOwogCX0KIAkvKiB2YWwgPSAweGZmMDc7IDNtMjcuOTkzcyAoNjUzMDFIejsgLT4gNjQwMDBIej8/PykgaG1tLCA2NjEyMCwgNjU5NjcsIDY2MTIzICovCiAJLyogdmFsID0gMHhmZjA5OyAxN20xNS4wOThzICgxMzEyMyw0NzhIejsgLT4gMTIwMDBIej8/PykgaG1tLCAxMzIzNy4ySHo/ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9lbGQuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jCmluZGV4IDRhNjYzNDcuLjc0YjA1NjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAlzbmRfcHJpbnRfcGNtX3JhdGVzKGEtPnJhdGVzLCBidWYsIHNpemVvZihidWYpKTsKIAogCWlmIChhLT5mb3JtYXQgPT0gQVVESU9fQ09ESU5HX1RZUEVfTFBDTSkKLQkJc25kX3ByaW50X3BjbV9iaXRzKGEtPnNhbXBsZV9iaXRzLCBidWYyICsgOCwgc2l6ZW9mKGJ1ZjIgLSA4KSk7CisJCXNuZF9wcmludF9wY21fYml0cyhhLT5zYW1wbGVfYml0cywgYnVmMiArIDgsIHNpemVvZihidWYyKSAtIDgpOwogCWVsc2UgaWYgKGEtPm1heF9iaXRyYXRlKQogCQlzbnByaW50ZihidWYyLCBzaXplb2YoYnVmMiksCiAJCQkJIiwgbWF4IGJpdHJhdGUgPSAlZCIsIGEtPm1heF9iaXRyYXRlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDJlOTFhOTkuLmZjZWRhZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMjMwOCw2ICsyMzA4LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MTNkLCAiQVNVUyBQNUFEMiIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFiMywgIkFTVVMiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxZTcsICJBU1VTIE0yViIsIFBPU19GSVhfTFBJQiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODQxMCwgIkFTVVMiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwNjksICJTb255IFZQQ1MxMVY5RSIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDExMDYsIDB4MzI4OCwgIkFTVVMgTTJWLU1YIFNFIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjEwLCAiVG9zaGliYSBBMTAwLTI1OSIsIFBPU19GSVhfTFBJQiksCkBAIC0yNzAzLDcgKzI3MDQsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9mcmVlOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BBVENIX0xPQURFUgotCWlmIChwYXRjaFtkZXZdKSB7CisJaWYgKHBhdGNoW2Rldl0gJiYgKnBhdGNoW2Rldl0pIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIkFwcGx5aW5nIHBhdGNoIGZpcm13YXJlICclcydcbiIsCiAJCQkgICBwYXRjaFtkZXZdKTsKIAkJZXJyID0gc25kX2hkYV9sb2FkX3BhdGNoKGNoaXAtPmJ1cywgcGF0Y2hbZGV2XSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYwppbmRleCBhMDdiMDMxLi4wNjc5ODJmNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCkBAIC0xMDM5LDkgKzEwMzksMTEgQEAKIAl7MHgxMSwgQUNfVkVSQl9TRVRfUFJPQ19DT0VGLCAweDAwMDh9LAogCXsweDExLCBBQ19WRVJCX1NFVF9QUk9DX1NUQVRFLCAweDAwfSwKIAorI2lmIDAgLyogRG9uJ3QgdG8gc2V0IHRvIEQzIGFzIHdlIGFyZSBpbiBwb3dlci11cCBzZXF1ZW5jZSAqLwogCXsweDA3LCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgMHgwM30sIC8qIFMvUERJRiBSeDogRDMgKi8KIAl7MHgwOCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIDB4MDN9LCAvKiBTL1BESUYgVHg6IEQzICovCiAJLyp7MHgwMSwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIDB4MDN9LCovIC8qIEFGRzogRDMgVGhpcyBpcyBhbHJlYWR5IGhhbmRsZWQgKi8KKyNlbmRpZgogCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCA5YmIwMzBhLi40ZDUwMDRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC04NSw2ICs4NSw3IEBACiAJdW5zaWduZWQgaW50IGF1dG9fbWljOwogCWludCBhdXRvX21pY19leHQ7CQkvKiBhdXRvY2ZnLmlucHV0c1tdIGluZGV4IGZvciBleHQgbWljICovCiAJdW5zaWduZWQgaW50IG5lZWRfZGFjX2ZpeDsKKwloZGFfbmlkX3Qgc2xhdmVfZGlnX291dHNbMl07CiAKIAkvKiBjYXB0dXJlICovCiAJdW5zaWduZWQgaW50IG51bV9hZGNfbmlkczsKQEAgLTEyNyw2ICsxMjgsNyBAQAogCXVuc2lnbmVkIGludCBpZGVhcGFkOjE7CiAJdW5zaWduZWQgaW50IHRoaW5rcGFkOjE7CiAJdW5zaWduZWQgaW50IGhwX2xhcHRvcDoxOworCXVuc2lnbmVkIGludCBhc3VzOjE7CiAKIAl1bnNpZ25lZCBpbnQgZXh0X21pY19wcmVzZW50OwogCXVuc2lnbmVkIGludCByZWNvcmRpbmc7CkBAIC0zNTIsNiArMzU0LDggQEAKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLm5pZCA9CiAJCQkJc3BlYy0+ZGlnX2luX25pZDsKIAkJfQorCQlpZiAoc3BlYy0+c2xhdmVfZGlnX291dHNbMF0pCisJCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQwMywxMCArNDA3LDE2IEBACiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWM7CiAJc3RydWN0IGNvbmV4YW50X2phY2sgKmphY2s7CiAJY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAKIAlzcGVjID0gY29kZWMtPnNwZWM7CiAJc25kX2FycmF5X2luaXQoJnNwZWMtPmphY2tzLCBzaXplb2YoKmphY2spLCAzMik7CisKKwlqYWNrID0gc3BlYy0+amFja3MubGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+amFja3MudXNlZDsgaSsrLCBqYWNrKyspCisJCWlmIChqYWNrLT5uaWQgPT0gbmlkKQorCQkJcmV0dXJuIDAgOyAvKiBhbHJlYWR5IHByZXNlbnQgKi8KKwogCWphY2sgPSBzbmRfYXJyYXlfbmV3KCZzcGVjLT5qYWNrcyk7CiAJbmFtZSA9ICh0eXBlID09IFNORF9KQUNLX0hFQURQSE9ORSkgPyAiSGVhZHBob25lIiA6ICJNaWMiIDsKIApAQCAtMjEwMCw3ICsyMTEwLDcgQEAKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA2Nl9kYWNfbmlkc1sxXSA9IHsgMHgxMCB9Owogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2FkY19uaWRzWzNdID0geyAweDE0LCAweDE1LCAweDE2IH07CiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNjZfY2Fwc3JjX25pZHNbMV0gPSB7IDB4MTcgfTsKLSNkZWZpbmUgQ1hUNTA2Nl9TUERJRl9PVVQJMHgyMQorc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2RpZ291dF9waW5fbmlkc1syXSA9IHsgMHgyMCwgMHgyMiB9OwogCiAvKiBPTFBDJ3MgbWljcm9waG9uZSBwb3J0IGlzIERDIGNvdXBsZWQgZm9yIHVzZSB3aXRoIGV4dGVybmFsIHNlbnNvcnMsCiAgKiB0aGVyZWZvcmUgd2UgdXNlIGEgNTAlIG1pYyBiaWFzIGluIG9yZGVyIHRvIGNlbnRlciB0aGUgaW5wdXQgc2lnbmFsIHdpdGgKQEAgLTIzMTIsNiArMjMyMiwxOSBAQAogCX0KIH0KIAorCisvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gZGlnaXRhbCBtaWMgYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KK3N0YXRpYyB2b2lkIGN4dDUwNjZfYXN1c19hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBwcmVzZW50OworCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWIpOworCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBleHRlcm5hbCBtaWNyb3Bob25lIHByZXNlbnQ9JWRcbiIsIHByZXNlbnQpOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTcsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJICAgIHByZXNlbnQgPyAxIDogMCk7Cit9CisKKwogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGRpZ2l0YWwgbWljIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCiBzdGF0aWMgdm9pZCBjeHQ1MDY2X2hwX2xhcHRvcF9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMjM4Nyw2ICsyNDEwLDIzIEBACiAJY3h0NTA2Nl91cGRhdGVfc3BlYWtlcihjb2RlYyk7CiB9CiAKKy8qIERpc3BhdGNoIHRoZSByaWdodCBtaWMgYXV0b3N3aXRjaCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgY3h0NTA2Nl9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCisJCWN4dDUwNjZfdm9zdHJvX2F1dG9taWMoY29kZWMpOworCWVsc2UgaWYgKHNwZWMtPmlkZWFwYWQpCisJCWN4dDUwNjZfaWRlYXBhZF9hdXRvbWljKGNvZGVjKTsKKwllbHNlIGlmIChzcGVjLT50aGlua3BhZCkKKwkJY3h0NTA2Nl90aGlua3BhZF9hdXRvbWljKGNvZGVjKTsKKwllbHNlIGlmIChzcGVjLT5ocF9sYXB0b3ApCisJCWN4dDUwNjZfaHBfbGFwdG9wX2F1dG9taWMoY29kZWMpOworCWVsc2UgaWYgKHNwZWMtPmFzdXMpCisJCWN4dDUwNjZfYXN1c19hdXRvbWljKGNvZGVjKTsKK30KKwogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwogc3RhdGljIHZvaWQgY3h0NTA2Nl9vbHBjX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQogewpAQCAtMjQwNSw2MCArMjQ0NSwxOSBAQAogfQogCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBjeHQ1MDY2X3Zvc3Ryb19ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKK3N0YXRpYyB2b2lkIGN4dDUwNjZfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCiB7Ci0Jc25kX3ByaW50ZGQoIkNYVDUwNjZfdm9zdHJvOiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7CisJc25kX3ByaW50ZGQoIkNYVDUwNjY6IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKIAlzd2l0Y2ggKHJlcyA+PiAyNikgewogCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6CiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA2Nl92b3N0cm9fYXV0b21pYyhjb2RlYyk7CisJCWN4dDUwNjZfYXV0b21pYyhjb2RlYyk7CiAJCWJyZWFrOwogCX0KIH0KIAotLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgY3h0NTA2Nl9pZGVhcGFkX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXNuZF9wcmludGRkKCJDWFQ1MDY2X2lkZWFwYWQ6IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6Ci0JCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwotCQlicmVhazsKLQljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA2Nl9pZGVhcGFkX2F1dG9taWMoY29kZWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNjZfaHBfbGFwdG9wX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXNuZF9wcmludGRkKCJDWFQ1MDY2X2hwX2xhcHRvcDogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOwotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKLQkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgotCQljeHQ1MDY2X2hwX2xhcHRvcF9hdXRvbWljKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBjeHQ1MDY2X3RoaW5rcGFkX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXNuZF9wcmludGRkKCJDWFQ1MDY2X3RoaW5rcGFkOiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7Ci0Jc3dpdGNoIChyZXMgPj4gMjYpIHsKLQljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgotCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNjZfdGhpbmtwYWRfYXV0b21pYyhjb2RlYyk7Ci0JCWJyZWFrOwotCX0KLX0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfYW5hbG9nX21pY19ib29zdCA9IHsKIAkubnVtX2l0ZW1zID0gNSwKQEAgLTI2MzMsNiArMjYzMiwyNyBAQAogCXNwZWMtPnJlY29yZGluZyA9IDA7CiB9CiAKK3N0YXRpYyB2b2lkIGNvbmV4YW50X2NoZWNrX2RpZ19vdXRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICBoZGFfbmlkX3QgKmRpZ19waW5zLAorCQkJCSAgICBpbnQgbnVtX3BpbnMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgKm5pZF9sb2MgPSAmc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpbnM7IGkrKywgZGlnX3BpbnMrKykgeworCQl1bnNpZ25lZCBpbnQgY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAqZGlnX3BpbnMpOworCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGNmZykgPT0gQUNfSkFDS19QT1JUX05PTkUpCisJCQljb250aW51ZTsKKwkJaWYgKHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAqZGlnX3BpbnMsIG5pZF9sb2MsIDEpICE9IDEpCisJCQljb250aW51ZTsKKwkJaWYgKHNwZWMtPnNsYXZlX2RpZ19vdXRzWzBdKQorCQkJbmlkX2xvYysrOworCQllbHNlCisJCQluaWRfbG9jID0gc3BlYy0+c2xhdmVfZGlnX291dHM7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA2Nl9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CkBAIC0zMDM5LDIwICszMDU5LDExIEBACiAvKiBpbml0aWFsaXplIGphY2stc2Vuc2luZywgdG9vICovCiBzdGF0aWMgaW50IGN4dDUwNjZfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCiAJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGluaXRcbiIpOwogCWNvbmV4YW50X2luaXQoY29kZWMpOwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KSB7CiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwotCQlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCi0JCQljeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKGNvZGVjKTsKLQkJZWxzZSBpZiAoc3BlYy0+aWRlYXBhZCkKLQkJCWN4dDUwNjZfaWRlYXBhZF9hdXRvbWljKGNvZGVjKTsKLQkJZWxzZSBpZiAoc3BlYy0+dGhpbmtwYWQpCi0JCQljeHQ1MDY2X3RoaW5rcGFkX2F1dG9taWMoY29kZWMpOwotCQllbHNlIGlmIChzcGVjLT5ocF9sYXB0b3ApCi0JCQljeHQ1MDY2X2hwX2xhcHRvcF9hdXRvbWljKGNvZGVjKTsKKwkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKIAl9CiAJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKIAlyZXR1cm4gMDsKQEAgLTMwODAsNiArMzA5MSw3IEBACiAJQ1hUNTA2Nl9ERUxMX1ZPU1RSTywJLyogRGVsbCBWb3N0cm8gMTAxNWkgKi8KIAlDWFQ1MDY2X0lERUFQQUQsCS8qIExlbm92byBJZGVhUGFkIFUxNTAgKi8KIAlDWFQ1MDY2X1RISU5LUEFELAkvKiBMZW5vdm8gVGhpbmtQYWQgVDQxMHMsIG90aGVycz8gKi8KKwlDWFQ1MDY2X0FTVVMsCQkvKiBBc3VzIEs1MkpVLCBMZW5vdm8gRzU2MCAtIEludCBtaWMgYXQgMHgxYSBhbmQgRXh0IG1pYyBhdCAweDFiICovCiAJQ1hUNTA2Nl9IUF9MQVBUT1AsICAgICAgLyogSFAgTGFwdG9wICovCiAJQ1hUNTA2Nl9NT0RFTFMKIH07CkBAIC0zMDkxLDYgKzMxMDMsNyBAQAogCVtDWFQ1MDY2X0RFTExfVk9TVFJPXQk9ICJkZWxsLXZvc3RybyIsCiAJW0NYVDUwNjZfSURFQVBBRF0JPSAiaWRlYXBhZCIsCiAJW0NYVDUwNjZfVEhJTktQQURdCT0gInRoaW5rcGFkIiwKKwlbQ1hUNTA2Nl9BU1VTXQkJPSAiYXN1cyIsCiAJW0NYVDUwNjZfSFBfTEFQVE9QXQk9ICJocC1sYXB0b3AiLAogfTsKIApAQCAtMzEwMSw4ICszMTE0LDEyIEBACiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQwMSwgIkRlbGwgVm9zdHJvIDEwMTQiLCBDWFQ1MDY2X0RFTExfVk9TVFJPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDAyLCAiRGVsbCBWb3N0cm8iLCBDWFQ1MDY2X0RFTExfVk9TVFJPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDA4LCAiRGVsbCBJbnNwaXJvbiBPbmUgMTlUIiwgQ1hUNTA2Nl9JREVBUEFEKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNTBmLCAiRGVsbCBJbnNwaXJvbiIsIENYVDUwNjZfSURFQVBBRCksCisJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDUxMCwgIkRlbGwgVm9zdHJvIiwgQ1hUNTA2Nl9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzNjBiLCAiSFAgRzYwIiwgQ1hUNTA2Nl9IUF9MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzZjMsICJBc3VzIEE1MkoiLCBDWFQ1MDY2X0hQX0xBUFRPUCksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNmMywgIkFzdXMgQTUySiIsIENYVDUwNjZfQVNVUyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY0MywgIkFzdXMgSzUySlUiLCBDWFQ1MDY2X0FTVVMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5OTMsICJBc3VzIFU1MEYiLCBDWFQ1MDY2X0FTVVMpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMWUsICJUb3NoaWJhIFNhdGVsbGl0ZSBDNjUwRCIsIENYVDUwNjZfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY1MCwgIlRvc2hpYmEgU2F0ZWxsaXRlIFA1MDAtUFNQR1NDLTAxODAwVCIsIENYVDUwNjZfT0xQQ19YT18xXzUpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmZTAsICJUb3NoaWJhIFNhdGVsbGl0ZSBQcm8gVDEzMC0xNUYiLCBDWFQ1MDY2X09MUENfWE9fMV81KSwKQEAgLTMxMTEsNyArMzEyOCw5IEBACiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDgzMywgIk9MUEMgWE8tMS41IiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBmMiwgIkxlbm92byBUNDAwcyIsIENYVDUwNjZfVEhJTktQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYzUsICJUaGlua3BhZCBFZGdlIDEzIiwgQ1hUNTA2Nl9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFjNiwgIlRoaW5rcGFkIEVkZ2UgMTMiLCBDWFQ1MDY2X0FTVVMpLAogIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMTVlLCAiTGVub3ZvIFRoaW5rcGFkIiwgQ1hUNTA2Nl9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzhhZiwgIkxlbm92byBHNTYwIiwgQ1hUNTA2Nl9BU1VTKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8iLCBDWFQ1MDY2X0lERUFQQUQpLCAvKiBGYWxsYmFjayBmb3IgTGVub3ZvcyB3aXRob3V0IGRvY2sgbWljICovCiAJe30KIH07CkBAIC0zMTMzLDcgKzMxNTIsOCBAQAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGN4dDUwNjZfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gY3h0NTA2Nl9kYWNfbmlkczsKLQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IENYVDUwNjZfU1BESUZfT1VUOworCWNvbmV4YW50X2NoZWNrX2RpZ19vdXRzKGNvZGVjLCBjeHQ1MDY2X2RpZ291dF9waW5fbmlkcywKKwkgICAgQVJSQVlfU0laRShjeHQ1MDY2X2RpZ291dF9waW5fbmlkcykpOwogCXNwZWMtPm51bV9hZGNfbmlkcyA9IDE7CiAJc3BlYy0+YWRjX25pZHMgPSBjeHQ1MDY2X2FkY19uaWRzOwogCXNwZWMtPmNhcHNyY19uaWRzID0gY3h0NTA2Nl9jYXBzcmNfbmlkczsKQEAgLTMxNjcsMTcgKzMxODcsMjAgQEAKIAkJc3BlYy0+bnVtX2luaXRfdmVyYnMrKzsKIAkJc3BlYy0+ZGVsbF9hdXRvbXV0ZSA9IDE7CiAJCWJyZWFrOworCWNhc2UgQ1hUNTA2Nl9BU1VTOgogCWNhc2UgQ1hUNTA2Nl9IUF9MQVBUT1A6CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfaHBfbGFwdG9wX2V2ZW50OworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl91bnNvbF9ldmVudDsKIAkJc3BlYy0+aW5pdF92ZXJic1tzcGVjLT5udW1faW5pdF92ZXJic10gPQogCQkJY3h0NTA2Nl9pbml0X3ZlcmJzX2hwX2xhcHRvcDsKIAkJc3BlYy0+bnVtX2luaXRfdmVyYnMrKzsKLQkJc3BlYy0+aHBfbGFwdG9wID0gMTsKKwkJc3BlYy0+aHBfbGFwdG9wID0gYm9hcmRfY29uZmlnID09IENYVDUwNjZfSFBfTEFQVE9QOworCQlzcGVjLT5hc3VzID0gYm9hcmRfY29uZmlnID09IENYVDUwNjZfQVNVUzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3RlcjsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKIAkJLyogbm8gUy9QRElGIG91dCAqLwotCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CisJCWlmIChib2FyZF9jb25maWcgPT0gQ1hUNTA2Nl9IUF9MQVBUT1ApCisJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CiAJCS8qIGlucHV0IHNvdXJjZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkICovCiAJCXNwZWMtPmlucHV0X211eCA9IE5VTEw7CiAJCXNwZWMtPnBvcnRfZF9tb2RlID0gMDsKQEAgLTMyMDcsNyArMzIzMCw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA2Nl9ERUxMX1ZPU1RSTzoKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl92b3N0cm9fZXZlbnQ7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Vuc29sX2V2ZW50OwogCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzX3Zvc3RybzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3Rlcl9vbHBjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwpAQCAtMzIyNCw3ICszMjQ3LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDY2X0lERUFQQUQ6CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfaWRlYXBhZF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXI7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfaWRlYXBhZDsKQEAgLTMyNDAsNyArMzI2Myw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA2Nl9USElOS1BBRDoKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl90aGlua3BhZF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXI7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfdGhpbmtwYWQ7CkBAIC0zMzg5LDcgKzM0MTIsNyBAQAogCQl9CiAJfQogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9kYWNfbmlkczsKLQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBudW1zICogMjsKKwlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKIAlpZiAoY2ZnLT5ocF9vdXRzID4gMCkKIAkJc3BlYy0+YXV0b19tdXRlID0gMTsKQEAgLTM3MDgsOSArMzczMSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3hfYXV0b19hZGRfdm9sdW1lKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpiYXNlbmFtZSwKK3N0YXRpYyBpbnQgY3hfYXV0b19hZGRfdm9sdW1lX2lkeChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqYmFzZW5hbWUsCiAJCQkgICAgICBjb25zdCBjaGFyICpkaXIsIGludCBjaWR4LAotCQkJICAgICAgaGRhX25pZF90IG5pZCwgaW50IGhkYV9kaXIpCisJCQkgICAgICBoZGFfbmlkX3QgbmlkLCBpbnQgaGRhX2RpciwgaW50IGFtcF9pZHgpCiB7CiAJc3RhdGljIGNoYXIgbmFtZVszMl07CiAJc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGtuZXdbXSA9IHsKQEAgLTM3MjIsNyArMzc0NSw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7Ci0JCWtuZXdbaV0ucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBoZGFfZGlyKTsKKwkJa25ld1tpXS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIGFtcF9pZHgsCisJCQkJCQkJICAgIGhkYV9kaXIpOwogCQlrbmV3W2ldLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUc7CiAJCWtuZXdbaV0uaW5kZXggPSBjaWR4OwogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyVzICVzIiwgYmFzZW5hbWUsIGRpciwgc2Z4W2ldKTsKQEAgLTM3MzgsNiArMzc2Miw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgY3hfYXV0b19hZGRfdm9sdW1lKGNvZGVjLCBzdHIsIGRpciwgY2lkeCwgbmlkLCBoZGFfZGlyKQkJXAorCWN4X2F1dG9fYWRkX3ZvbHVtZV9pZHgoY29kZWMsIHN0ciwgZGlyLCBjaWR4LCBuaWQsIGhkYV9kaXIsIDApCisKICNkZWZpbmUgY3hfYXV0b19hZGRfcGJfdm9sdW1lKGNvZGVjLCBuaWQsIHN0ciwgaWR4KQkJCVwKIAljeF9hdXRvX2FkZF92b2x1bWUoY29kZWMsIHN0ciwgIiBQbGF5YmFjayIsIGlkeCwgbmlkLCBIREFfT1VUUFVUKQogCkBAIC0zNzg3LDI5ICszODE0LDYwIEBACiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKIAlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9sYWJlbDsKLQlpbnQgaSwgZXJyLCBjaWR4OworCWludCBpLCBlcnIsIGNpZHgsIGNvbm5fbGVuOworCWhkYV9uaWRfdCBjb25uW0hEQV9NQVhfQ09OTkVDVElPTlNdOwogCi0JZXJyID0gY3hfYXV0b19hZGRfdm9sdW1lKGNvZGVjLCAiQ2FwdHVyZSIsICIiLCAwLCBzcGVjLT5hZGNfbmlkc1swXSwKLQkJCQkgSERBX0lOUFVUKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwlpbnQgbXVsdGlfYWRjX3ZvbHVtZSA9IDA7IC8qIElmIHRoZSBBREMgbmlkIGhhcyBzZXZlcmFsIGlucHV0IHZvbHVtZXMgKi8KKwlpbnQgYWRjX25pZCA9IHNwZWMtPmFkY19uaWRzWzBdOworCisJY29ubl9sZW4gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgYWRjX25pZCwgY29ubiwKKwkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7CisJaWYgKGNvbm5fbGVuIDwgMCkKKwkJcmV0dXJuIGNvbm5fbGVuOworCisJbXVsdGlfYWRjX3ZvbHVtZSA9IGNmZy0+bnVtX2lucHV0cyA+IDEgJiYgY29ubl9sZW4gPiAxOworCWlmICghbXVsdGlfYWRjX3ZvbHVtZSkgeworCQllcnIgPSBjeF9hdXRvX2FkZF92b2x1bWUoY29kZWMsICJDYXB0dXJlIiwgIiIsIDAsIGFkY19uaWQsCisJCQkJCSBIREFfSU5QVVQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJcHJldl9sYWJlbCA9IE5VTEw7CiAJY2lkeCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bnVtX2lucHV0czsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBjZmctPmlucHV0c1tpXS5waW47CiAJCWNvbnN0IGNoYXIgKmxhYmVsOwotCQlpZiAoIShnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX0lOX0FNUCkpCisJCWludCBqOworCQlpbnQgcGluX2FtcCA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfSU5fQU1QOworCQlpZiAoIXBpbl9hbXAgJiYgIW11bHRpX2FkY192b2x1bWUpCiAJCQljb250aW51ZTsKKwogCQlsYWJlbCA9IGhkYV9nZXRfYXV0b2NmZ19pbnB1dF9sYWJlbChjb2RlYywgY2ZnLCBpKTsKIAkJaWYgKGxhYmVsID09IHByZXZfbGFiZWwpCiAJCQljaWR4Kys7CiAJCWVsc2UKIAkJCWNpZHggPSAwOwogCQlwcmV2X2xhYmVsID0gbGFiZWw7Ci0JCWVyciA9IGN4X2F1dG9fYWRkX3ZvbHVtZShjb2RlYywgbGFiZWwsICIgQ2FwdHVyZSIsIGNpZHgsCi0JCQkJCSBuaWQsIEhEQV9JTlBVVCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKKworCQlpZiAocGluX2FtcCkgeworCQkJZXJyID0gY3hfYXV0b19hZGRfdm9sdW1lKGNvZGVjLCBsYWJlbCwgIiBCb29zdCIsIGNpZHgsCisJCQkJCQkgbmlkLCBIREFfSU5QVVQpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWlmICghbXVsdGlfYWRjX3ZvbHVtZSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgY29ubl9sZW47IGorKykgeworCQkJaWYgKGNvbm5bal0gPT0gbmlkKSB7CisJCQkJZXJyID0gY3hfYXV0b19hZGRfdm9sdW1lX2lkeChjb2RlYywgbGFiZWwsCisJCQkJICAgICIgQ2FwdHVyZSIsIGNpZHgsIGFkY19uaWQsIEhEQV9JTlBVVCwgaik7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0zODgxLDYgKzM5MzksOCBAQAogCSAgLnBhdGNoID0gcGF0Y2hfY3h0NTA2NiB9LAogCXsgLmlkID0gMHgxNGYxNTA2OSwgLm5hbWUgPSAiQ1gyMDU4NSIsCiAJICAucGF0Y2ggPSBwYXRjaF9jeHQ1MDY2IH0sCisJeyAuaWQgPSAweDE0ZjE1MDZlLCAubmFtZSA9ICJDWDIwNTkwIiwKKwkgIC5wYXRjaCA9IHBhdGNoX2N4dDUwNjYgfSwKIAl7IC5pZCA9IDB4MTRmMTUwOTcsIC5uYW1lID0gIkNYMjA2MzEiLAogCSAgLnBhdGNoID0gcGF0Y2hfY29uZXhhbnRfYXV0byB9LAogCXsgLmlkID0gMHgxNGYxNTA5OCwgLm5hbWUgPSAiQ1gyMDYzMiIsCkBAIC0zOTA3LDYgKzM5NjcsNyBAQAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjE0ZjE1MDY3Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTRmMTUwNjgiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxNGYxNTA2OSIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjE0ZjE1MDZlIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTRmMTUwOTciKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxNGYxNTA5OCIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjE0ZjE1MGExIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCmluZGV4IDJkNWI4M2YuLmVjMGZhMmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCkBAIC02NDIsNiArNjQyLDcgQEAKIAkJCWhkbWlfYWktPnZlcgkJPSAweDAxOwogCQkJaGRtaV9haS0+bGVuCQk9IDB4MGE7CiAJCQloZG1pX2FpLT5DQzAyX0NUNDcJPSBjaGFubmVscyAtIDE7CisJCQloZG1pX2FpLT5DQQkJPSBjYTsKIAkJCWhkbWlfY2hlY2tzdW1fYXVkaW9faW5mb2ZyYW1lKGhkbWlfYWkpOwogCQl9IGVsc2UgaWYgKHNwZWMtPnNpbmtfZWxkW2ldLmNvbm5fdHlwZSA9PSAxKSB7IC8qIERpc3BsYXlQb3J0ICovCiAJCQlzdHJ1Y3QgZHBfYXVkaW9faW5mb2ZyYW1lICpkcF9haTsKQEAgLTY1MSw2ICs2NTIsNyBAQAogCQkJZHBfYWktPmxlbgkJPSAweDFiOwogCQkJZHBfYWktPnZlcgkJPSAweDExIDw8IDI7CiAJCQlkcF9haS0+Q0MwMl9DVDQ3CT0gY2hhbm5lbHMgLSAxOworCQkJZHBfYWktPkNBCQk9IGNhOwogCQl9IGVsc2UgewogCQkJc25kX3ByaW50ZCgiSERNSTogdW5rbm93biBjb25uZWN0aW9uIHR5cGUgYXQgcGluICVkXG4iLAogCQkJCSAgIHBpbl9uaWQpOwpAQCAtMTYzMiw2ICsxNjM0LDkgQEAKIHsgLmlkID0gMHgxMGRlMDAxMiwgLm5hbWUgPSAiR1BVIDEyIEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCiB7IC5pZCA9IDB4MTBkZTAwMTMsIC5uYW1lID0gIkdQVSAxMyBIRE1JL0RQIiwJLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF84OSB9LAogeyAuaWQgPSAweDEwZGUwMDE0LCAubmFtZSA9ICJHUFUgMTQgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfODkgfSwKK3sgLmlkID0gMHgxMGRlMDAxNSwgLm5hbWUgPSAiR1BVIDE1IEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCit7IC5pZCA9IDB4MTBkZTAwMTYsIC5uYW1lID0gIkdQVSAxNiBIRE1JL0RQIiwJLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF84OSB9LAorLyogMTcgaXMga25vd24gdG8gYmUgYWJzZW50ICovCiB7IC5pZCA9IDB4MTBkZTAwMTgsIC5uYW1lID0gIkdQVSAxOCBIRE1JL0RQIiwJLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF84OSB9LAogeyAuaWQgPSAweDEwZGUwMDE5LCAubmFtZSA9ICJHUFUgMTkgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfODkgfSwKIHsgLmlkID0gMHgxMGRlMDAxYSwgLm5hbWUgPSAiR1BVIDFhIEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCkBAIC0xNjc0LDYgKzE2NzksOCBAQAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDEyIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMTMiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAxNCIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDE1Iik7CitNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMTYiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAxOCIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDE5Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMWEiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggYmU0ZGY0Yy4uNDI2MWJiOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTExMzMsMTEgKzExMzMsOCBAQAogCQluaWQgPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbaV07CiAJCWlmICghbmlkKQogCQkJYnJlYWs7Ci0JCWlmIChzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCBuaWQpKSB7Ci0JCQlzcGVjLT5qYWNrX3ByZXNlbnQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJYWxjX3JlcG9ydF9qYWNrKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbaV0pOworCQlhbGNfcmVwb3J0X2phY2soY29kZWMsIG5pZCk7CisJCXNwZWMtPmphY2tfcHJlc2VudCB8PSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCBuaWQpOwogCX0KIAogCW11dGUgPSBzcGVjLT5qYWNrX3ByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwOwpAQCAtMjI5MCw2ICsyMjg3LDI5IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ19taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMiwgMHgwLAorCQlIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLCAweDBmLCAyLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiTEZFIFBsYXliYWNrIFZvbHVtZSIsIDB4MGYsIDEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJMRkUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZiwgMSwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTaWRlIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiU2lkZSBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODlfYWNlcl9hc3BpcmVfODkzMGdfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCkBAIC0xMDM1OSw3ICsxMDM3OSw3IEBACiAJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4OF9BQ0VSX0FTUElSRV80OTMwR10gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4OF9iYXNlX21peGVyLAorCQkubWl4ZXJzID0geyBhbGM4ODhfYWNlcl9hc3BpcmVfNDkzMGdfbWl4ZXIsCiAJCQkJYWxjODgzX2NobW9kZV9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMsIGFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzLAogCQkJCWFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ192ZXJicyB9LApAQCAtMTQ5NTQsOSArMTQ5NzQsMTEgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDg0LCAiU29ueSBWQUlPIiwgQUxDMjc1X0ZJWFVQX1NPTllfSFdFUSksCiAJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDRkLCAiU29ueSBWQUlPIiwgQUxDMjY5X0ZJWFVQX1NPTllfVkFJTyksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQ3MCwgIkRlbGwgTTEwMXoiLCBBTEMyNjlfRklYVVBfREVMTF9NMTAxWiksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFiOCwgIlRoaW5rcGFkIEVkZ2UgMTQiLCBBTEMyNjlfRklYVVBfU0tVX0lHTk9SRSksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFlOSwgIlRoaW5rcGFkIEVkZ2UgMTQiLCBBTEMyNjlfRklYVVBfU0tVX0lHTk9SRSksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBmMiwgIlRoaW5rcGFkIFNMNDEwLzUxMCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMTVlLCAiVGhpbmtwYWQgTDUxMiIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWI4LCAiVGhpbmtwYWQgRWRnZSAxNCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWNhLCAiVGhpbmtwYWQgTDQxMiIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWU5LCAiVGhpbmtwYWQgRWRnZSAxNSIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxYTEzLCAiQXN1cyBHNzNKdyIsIEFMQzI2OV9GSVhVUF9BU1VTX0c3M0pXKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHg5ZTU0LCAiTEVOT1ZPIE5CIiwgQUxDMjY5X0ZJWFVQX0xFTk9WT19FQVBEKSwKIAl7fQpAQCAtMTQ5OTAsNyArMTUwMTIsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZTMsICJBU1VTIFUzM0pjIiwgQUxDMjY5VkJfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI3MywgIkFTVVMgVUw4MEp0IiwgQUxDMjY5VkJfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI4MywgIkFTVVMgVTUzSmMiLCBBTEMyNjlfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySlYiLCBBTEMyNjlWQl9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMmQzLCAiQVNVUyBONjFKdiIsIEFMQzI2OV9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2EzLCAiQVNVUyBVTDMwVnQiLCBBTEMyNjlfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTM3MywgIkFTVVMgRzczSlgiLCBBTEMyNjlfQU1JQyksCkBAIC0xODgwMCw2ICsxODgyMiw3IEBACiAJCQkJCUFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTg1NCwgMHhmMDAwLCAweDIwMDAsICJBU1VTIEgxMy0yMDB4IiwKIAkJCSAgIEFMQzY2M19BU1VTX0gxMyksCisJU05EX1BDSV9RVUlSSygweDE5OTEsIDB4NTYyOCwgIk9yZGlzc2ltbyBFVkUiLCBBTEM2NjJfTEVOT1ZPXzEwMUUpLAogCXt9CiB9OwogCkBAIC0xOTQ5Miw2ICsxOTUxNSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2ZpeHVwX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzMDgsICJBY2VyIEFzcGlyZSA4OTQyRyIsIEFMQzY2Ml9GSVhVUF9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzOGIsICJBY2VyIEFzcGlyZSA4OTQzRyIsIEFMQzY2Ml9GSVhVUF9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwNTEsICJTYW1zdW5nIFI3MjAiLCBBTEM2NjJfRklYVVBfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzhhZiwgIkxlbm92byBJZGVhcGFkIFk1NTBQIiwgQUxDNjYyX0ZJWFVQX0lERUFQQUQpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDllYTQ4YjQuLmJkN2IxMjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTU4Niw3ICs1ODYsMTIgQEAKIAkweDBmLCAweDEwLCAweDExLCAweDFmLCAweDIwLAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzWzEwXSA9IHsKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4N3h4eF9waW5fbmlkc1s2XSA9IHsKKwkweDBhLCAweDBiLCAweDBjLCAweDBkLAorCTB4MGYsIDB4MTEsCit9OworCitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODh4eHhfcGluX25pZHNbOF0gPSB7CiAJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwKIAkweDBmLCAweDExLCAweDFmLCAweDIwLAogfTsKQEAgLTU0MzAsMTIgKzU0MzUsMTMgQEAKIAlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKIAljYXNlIDB4MTExZDc2ZDE6CiAJY2FzZSAweDExMWQ3NmQ5OgorCWNhc2UgMHgxMTFkNzZlNToKIAkJc3BlYy0+ZG1pY19uaWRzID0gc3RhYzkyaGQ4N2JfZG1pY19uaWRzOwogCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJ4eF9jb25uZWN0ZWRfcG9ydHMoY29kZWMsCiAJCQkJc3RhYzkyaGQ4N2JfZG1pY19uaWRzLAogCQkJCVNUQUM5MkhEODdCX05VTV9ETUlDUyk7Ci0JCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzKTsKLQkJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzOworCQlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4N3h4eF9waW5fbmlkcyk7CisJCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ4N3h4eF9waW5fbmlkczsKIAkJc3BlYy0+bW9ub19uaWQgPSAwOwogCQlzcGVjLT5udW1fcHdycyA9IDA7CiAJCWJyZWFrOwpAQCAtNTQ0Myw2ICs1NDQ5LDcgQEAKIAljYXNlIDB4MTExZDc2Njc6CiAJY2FzZSAweDExMWQ3NjY4OgogCWNhc2UgMHgxMTFkNzY2OToKKwljYXNlIDB4MTExZDc2ZTM6CiAJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5Mnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKIAkJCQlzdGFjOTJoZDg4eHh4X2RtaWNfbmlkcywKIAkJCQlTVEFDOTJIRDg4WFhYX05VTV9ETUlDUyk7CkBAIC02Mzg3LDYgKzYzOTQsOCBAQAogCXsgLmlkID0gMHgxMTFkNzZjZCwgLm5hbWUgPSAiOTJIRDg5RjIiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDczeHggfSwKIAl7IC5pZCA9IDB4MTExZDc2Y2UsIC5uYW1lID0gIjkySEQ4OUYxIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ3M3h4IH0sCiAJeyAuaWQgPSAweDExMWQ3NmUwLCAubmFtZSA9ICI5MkhEOTFCWFgiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKKwl7IC5pZCA9IDB4MTExZDc2ZTMsIC5uYW1lID0gIjkySEQ5OEJYWCIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkODN4eHh9LAorCXsgLmlkID0gMHgxMTFkNzZlNSwgLm5hbWUgPSAiOTJIRDk5QlhYIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCiAJeyAuaWQgPSAweDExMWQ3NmU3LCAubmFtZSA9ICI5MkhEOTBCWFgiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKaW5kZXggYTc2YzMyNi4uNjNiMDA1NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC01NjcsNyArNTY3LDcgQEAKIAkJaGRhX25pZF90IG5pZCA9IGNmZy0+aW5wdXRzW2ldLnBpbjsKIAkJaWYgKHNwZWMtPnNtYXJ0NTFfZW5hYmxlZCAmJiBpc19zbWFydDUxX3BpbnMoc3BlYywgbmlkKSkKIAkJCWN0bCA9IFBJTl9PVVQ7Ci0JCWVsc2UgaWYgKGkgPT0gQVVUT19QSU5fTUlDKQorCQllbHNlIGlmIChjZmctPmlucHV0c1tpXS50eXBlID09IEFVVE9fUElOX01JQykKIAkJCWN0bCA9IFBJTl9WUkVGNTA7CiAJCWVsc2UKIAkJCWN0bCA9IFBJTl9JTjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmggYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCmluZGV4IGMyYWU2M2QuLmY1Mzg5N2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uaApAQCAtOTIsNiArOTIsOCBAQAogCXZvaWQgKCp1cGRhdGVfZGFjX3ZvbHVtZSkoc3RydWN0IG94eWdlbiAqY2hpcCk7CiAJdm9pZCAoKnVwZGF0ZV9kYWNfbXV0ZSkoc3RydWN0IG94eWdlbiAqY2hpcCk7CiAJdm9pZCAoKnVwZGF0ZV9jZW50ZXJfbGZlX21peCkoc3RydWN0IG94eWdlbiAqY2hpcCwgYm9vbCBtaXhlZCk7CisJdW5zaWduZWQgaW50ICgqYWRqdXN0X2RhY19yb3V0aW5nKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgcGxheV9yb3V0aW5nKTsKIAl2b2lkICgqZ3Bpb19jaGFuZ2VkKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKIAl2b2lkICgqdWFydF9pbnB1dCkoc3RydWN0IG94eWdlbiAqY2hpcCk7CiAJdm9pZCAoKmFjOTdfc3dpdGNoKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4ZXIuYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX21peGVyLmMKaW5kZXggOWJmZjE0ZC4uMjZjN2U4YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4ZXIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9taXhlci5jCkBAIC0xODAsNiArMTgwLDggQEAKIAkJCSAgICAoMSA8PCBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9TSElGVCkgfAogCQkJICAgICgyIDw8IE9YWUdFTl9QTEFZX0RBQzJfU09VUkNFX1NISUZUKSB8CiAJCQkgICAgKDMgPDwgT1hZR0VOX1BMQVlfREFDM19TT1VSQ0VfU0hJRlQpOworCWlmIChjaGlwLT5tb2RlbC5hZGp1c3RfZGFjX3JvdXRpbmcpCisJCXJlZ192YWx1ZSA9IGNoaXAtPm1vZGVsLmFkanVzdF9kYWNfcm91dGluZyhjaGlwLCByZWdfdmFsdWUpOwogCW94eWdlbl93cml0ZTE2X21hc2tlZChjaGlwLCBPWFlHRU5fUExBWV9ST1VUSU5HLCByZWdfdmFsdWUsCiAJCQkgICAgICBPWFlHRU5fUExBWV9EQUMwX1NPVVJDRV9NQVNLIHwKIAkJCSAgICAgIE9YWUdFTl9QTEFZX0RBQzFfU09VUkNFX01BU0sgfApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl9jczQzeHguYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfY3M0M3h4LmMKaW5kZXggOWY3MmQ0Mi4uMjUyNzE5MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi94b25hcl9jczQzeHguYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2NzNDN4eC5jCkBAIC0zOTIsNyArMzkyLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuQ1M0Mzk4OiA3PyIpOwotCWZvciAoaSA9IDI7IGkgPD0gODsgKytpKQorCWZvciAoaSA9IDI7IGkgPCA4OyArK2kpCiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAlMDJ4IiwgZGF0YS0+Y3M0Mzk4X3JlZ3NbaV0pOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAJZHVtcF9jczQzNjJhX3JlZ2lzdGVycyhkYXRhLCBidWZmZXIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5jIGIvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5jCmluZGV4IGUxZmE2MDIuLmJjNmViNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfZGcuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2RnLmMKQEAgLTI0LDYgKzI0LDExIEBACiAgKgogICogICBTUEkgMCAtPiBDUzQyNDUKICAqCisgKiAgIEnCslMgMSAtPiBDUzQyNDUKKyAqICAgScKyUyAyIC0+IENTNDM2MSAoY2VudGVyL0xGRSkKKyAqICAgScKyUyAzIC0+IENTNDM2MSAoc3Vycm91bmQpCisgKiAgIEnCslMgNCAtPiBDUzQzNjEgKGZyb250KQorICoKICAqICAgR1BJTyAzIDwtID8KICAqICAgR1BJTyA0IDwtIGhlYWRwaG9uZSBkZXRlY3QKICAqICAgR1BJTyA1IC0+IHJvdXRlIGlucHV0IGphY2sgdG8gbGluZS1pbiAoMCkgb3IgbWljLWluICgxKQpAQCAtMzYsNiArNDEsNyBAQAogICogICBpbnB1dCAxIDwtIGF1eAogICogICBpbnB1dCAyIDwtIGZyb250IG1pYwogICogICBpbnB1dCA0IDwtIGxpbmUvbWljCisgKiAgIERBQyBvdXQgLT4gaGVhZHBob25lcwogICogICBhdXggb3V0IC0+IGZyb250IHBhbmVsIGhlYWRwaG9uZXMKICAqLwogCkBAIC0yMDcsNiArMjEzLDM1IEBACiAJY3M0MjQ1X3dyaXRlX2NhY2hlZChjaGlwLCBDUzQyNDVfQURDX0NUUkwsIHZhbHVlKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2hpZnRfYml0cyh1bnNpZ25lZCBpbnQgdmFsdWUsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHNoaWZ0X2Zyb20sCisJCQkJICAgICAgdW5zaWduZWQgaW50IHNoaWZ0X3RvLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXNrKQoreworCWlmIChzaGlmdF9mcm9tIDwgc2hpZnRfdG8pCisJCXJldHVybiAodmFsdWUgPDwgKHNoaWZ0X3RvIC0gc2hpZnRfZnJvbSkpICYgbWFzazsKKwllbHNlCisJCXJldHVybiAodmFsdWUgPj4gKHNoaWZ0X2Zyb20gLSBzaGlmdF90bykpICYgbWFzazsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhZGp1c3RfZGdfZGFjX3JvdXRpbmcoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgcGxheV9yb3V0aW5nKQoreworCXJldHVybiAocGxheV9yb3V0aW5nICYgT1hZR0VOX1BMQVlfREFDMF9TT1VSQ0VfTUFTSykgfAorCSAgICAgICBzaGlmdF9iaXRzKHBsYXlfcm91dGluZywKKwkJCSAgT1hZR0VOX1BMQVlfREFDMl9TT1VSQ0VfU0hJRlQsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzFfU09VUkNFX1NISUZULAorCQkJICBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9NQVNLKSB8CisJICAgICAgIHNoaWZ0X2JpdHMocGxheV9yb3V0aW5nLAorCQkJICBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9TSElGVCwKKwkJCSAgT1hZR0VOX1BMQVlfREFDMl9TT1VSQ0VfU0hJRlQsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzJfU09VUkNFX01BU0spIHwKKwkgICAgICAgc2hpZnRfYml0cyhwbGF5X3JvdXRpbmcsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzBfU09VUkNFX1NISUZULAorCQkJICBPWFlHRU5fUExBWV9EQUMzX1NPVVJDRV9TSElGVCwKKwkJCSAgT1hZR0VOX1BMQVlfREFDM19TT1VSQ0VfTUFTSyk7Cit9CisKIHN0YXRpYyBpbnQgb3V0cHV0X3N3aXRjaF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKIAkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKIHsKQEAgLTU1Nyw2ICs1OTIsNyBAQAogCS5yZXN1bWUgPSBkZ19yZXN1bWUsCiAJLnNldF9kYWNfcGFyYW1zID0gc2V0X2NzNDI0NV9kYWNfcGFyYW1zLAogCS5zZXRfYWRjX3BhcmFtcyA9IHNldF9jczQyNDVfYWRjX3BhcmFtcywKKwkuYWRqdXN0X2RhY19yb3V0aW5nID0gYWRqdXN0X2RnX2RhY19yb3V0aW5nLAogCS5kdW1wX3JlZ2lzdGVycyA9IGR1bXBfY3M0MjQ1X3JlZ2lzdGVycywKIAkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkZyksCiAJLmRldmljZV9jb25maWcgPSBQTEFZQkFDS18wX1RPX0kyUyB8CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaAppbmRleCBiZDI2ZTA5Li42Y2U5YWQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgX19QREFVRElPQ0ZfSAogCiAjaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwX29wcy5jIGIvc291bmQvcGNtY2lhL3Z4L3Z4cF9vcHMuYwppbmRleCA5ODllMDRhLi5mZTMzZTEyIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvdngvdnhwX29wcy5jCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBfb3BzLmMKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAidnhwb2NrZXQuaCIKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvc25kLXNvYy1hZmViOTI2MC5jIGIvc291bmQvc29jL2F0bWVsL3NuZC1zb2MtYWZlYjkyNjAuYwppbmRleCBkYTIyMDhlLi41ZTRkNDk5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvc25kLXNvYy1hZmViOTI2MC5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWFmZWI5MjYwLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCS5jcHVfZGFpX25hbWUgPSAiYXRtZWwtc3NjLWRhaS4wIiwKIAkuY29kZWNfZGFpX25hbWUgPSAidGx2MzIwYWljMjMtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAiYXRtZWxfcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ0bHYzMjBhaWMyMy1jb2RlYy4wLTB4MWEiLAorCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzIzLWNvZGVjLjAtMDAxYSIsCiAJLmluaXQgPSBhZmViOTI2MF90bHYzMjBhaWMyM19pbml0LAogCS5vcHMgPSAmYWZlYjkyNjBfb3BzLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jCmluZGV4IGU5MDJiMjQuLmFkMjg2NjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNzbTI2MDIuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJLmNwdV9kYWlfbmFtZSA9ICJiZjV4eC1pMnMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJzc20yNjAyLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gImJmNXh4LXBjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAic3NtMjYwMi1jb2RlYy4wLTB4MWIiLAorCS5jb2RlY19uYW1lID0gInNzbTI2MDItY29kZWMuMC0wMDFiIiwKIAkub3BzID0gJmJmNXh4X3NzbTI2MDJfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jcTkzdmMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3E5M3ZjLmMKaW5kZXggNDZkYmZkMC4uMzQ3YTU2NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jcTkzdmMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2NxOTN2Yy5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAogc3RhdGljIGludCBjcTkzdmNfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBkYXZpbmNpX3ZjICpkYXZpbmNpX3ZjID0gY29kZWMtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV92YyAqZGF2aW5jaV92YyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJZGF2aW5jaV92Yy0+Y3E5M3ZjLmNvZGVjID0gY29kZWM7CiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGRhdmluY2lfdmM7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jCmluZGV4IDAzZDFlODYuLjBiYjQyNGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jCkBAIC0zNjcsOSArMzY3LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCB1OCBjeDIwNDQyX3JlZzsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBjeDIwNDQyX2NvZGVjX2RldiA9IHsKIAkucHJvYmUgPSAJY3gyMDQ0Ml9jb2RlY19wcm9iZSwKIAkucmVtb3ZlID0gCWN4MjA0NDJfY29kZWNfcmVtb3ZlLAorCS5yZWdfY2FjaGVfZGVmYXVsdCA9ICZjeDIwNDQyX3JlZywKIAkucmVnX2NhY2hlX3NpemUgPSAxLAogCS5yZWdfd29yZF9zaXplID0gc2l6ZW9mKHU4KSwKIAkucmVhZCA9IGN4MjA0NDJfcmVhZF9yZWdfY2FjaGUsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwppbmRleCA5ODc0NzZhLi4wMTdkOTljIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKQEAgLTE0ODIsNyArMTQ4Miw3IEBACiAJCQkgICAgV004OTAzX01JQ0RFVF9FSU5UIHwgV004OTAzX01JQ1NIUlRfRUlOVCwKIAkJCSAgICBpcnFfbWFzayk7CiAKLQlpZiAoZGV0ICYmIHNocnQpIHsKKwlpZiAoZGV0IHx8IHNocnQpIHsKIAkJLyogRW5hYmxlIG1pYyBkZXRlY3Rpb24sIHRoaXMgbWF5IG5vdCBoYXZlIGJlZW4gc2V0IHRocm91Z2gKIAkJICogcGxhdGZvcm0gZGF0YSAoZWcsIGlmIHRoZSBkZWZhdWx0cyBhcmUgT0spLiAqLwogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzAsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuaAppbmRleCBlODQ5MGYzLi5lM2VjMjQzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmgKQEAgLTE2NSw3ICsxNjUsNyBAQAogCiAjZGVmaW5lIFdNODkwM19WTUlEX1JFU181MEsgICAgICAgICAgICAgICAgICAgICAgICAgIDIKICNkZWZpbmUgV004OTAzX1ZNSURfUkVTXzI1MEsgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBXTTg5MDNfVk1JRF9SRVNfNUsgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdNODkwM19WTUlEX1JFU181SyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKIAogLyoKICAqIFI4ICgweDA4KSAtIEFuYWxvZ3VlIERBQyAwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwppbmRleCAyNDdhNmE5Li40YWZiZTNiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKQEAgLTEwNyw2ICsxMDcsMTIgQEAKIAogCWludCByZXZpc2lvbjsKIAlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YTsKKworCXVuc2lnbmVkIGludCBhaWYxY2xrX2VuYWJsZToxOworCXVuc2lnbmVkIGludCBhaWYyY2xrX2VuYWJsZToxOworCisJdW5zaWduZWQgaW50IGFpZjFjbGtfZGlzYWJsZToxOworCXVuc2lnbmVkIGludCBhaWYyY2xrX2Rpc2FibGU6MTsKIH07CiAKIHN0YXRpYyBpbnQgd204OTk0X3JlYWRhYmxlKHVuc2lnbmVkIGludCByZWcpCkBAIC0xMDA0LDYgKzEwMTAsMTEwIEBACiAJfQogfQogCitzdGF0aWMgaW50IGxhdGVfZW5hYmxlX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJaWYgKHdtODk5NC0+YWlmMWNsa19lbmFibGUpIHsKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEsCisJCQkJCSAgICBXTTg5OTRfQUlGMUNMS19FTkFfTUFTSywKKwkJCQkJICAgIFdNODk5NF9BSUYxQ0xLX0VOQSk7CisJCQl3bTg5OTQtPmFpZjFjbGtfZW5hYmxlID0gMDsKKwkJfQorCQlpZiAod204OTk0LT5haWYyY2xrX2VuYWJsZSkgeworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSwKKwkJCQkJICAgIFdNODk5NF9BSUYyQ0xLX0VOQV9NQVNLLAorCQkJCQkgICAgV004OTk0X0FJRjJDTEtfRU5BKTsKKwkJCXdtODk5NC0+YWlmMmNsa19lbmFibGUgPSAwOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxhdGVfZGlzYWJsZV9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJaWYgKHdtODk5NC0+YWlmMWNsa19kaXNhYmxlKSB7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xLAorCQkJCQkgICAgV004OTk0X0FJRjFDTEtfRU5BX01BU0ssIDApOworCQkJd204OTk0LT5haWYxY2xrX2Rpc2FibGUgPSAwOworCQl9CisJCWlmICh3bTg5OTQtPmFpZjJjbGtfZGlzYWJsZSkgeworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSwKKwkJCQkJICAgIFdNODk5NF9BSUYyQ0xLX0VOQV9NQVNLLCAwKTsKKwkJCXdtODk5NC0+YWlmMmNsa19kaXNhYmxlID0gMDsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaWYxY2xrX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkgICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJd204OTk0LT5haWYxY2xrX2VuYWJsZSA9IDE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQl3bTg5OTQtPmFpZjFjbGtfZGlzYWJsZSA9IDE7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpZjJjbGtfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCSAgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQl3bTg5OTQtPmFpZjJjbGtfZW5hYmxlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCXdtODk5NC0+YWlmMmNsa19kaXNhYmxlID0gMTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRjX211eF9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlsYXRlX2VuYWJsZV9ldih3LCBrY29udHJvbCwgZXZlbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhY19ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCB3LT5zaGlmdDsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsCisJCQkgICAgbWFzaywgbWFzayk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyICpocF9tdXhfdGV4dFtdID0gewogCSJNaXhlciIsCiAJIkRBQyIsCkBAIC0xMjcyLDYgKzEzODIsNTkgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYyZGFjcl9zcmNfbXV4ID0KIAlTT0NfREFQTV9FTlVNKCJBSUYyREFDUiBNdXgiLCBhaWYyZGFjcl9zcmNfZW51bSk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5OTRfbGF0ZWNsa19yZXZkX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFJRjFDTEsiLCBTTkRfU09DX05PUE0sIDAsIDAsIGFpZjFjbGtfZXYsCisJU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMkNMSyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgYWlmMmNsa19ldiwKKwlTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKK1NORF9TT0NfREFQTV9QR0FfRSgiTGF0ZSBEQUMxTCBFbmFibGUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCWxhdGVfZW5hYmxlX2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCitTTkRfU09DX0RBUE1fUEdBX0UoIkxhdGUgREFDMVIgRW5hYmxlIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwlsYXRlX2VuYWJsZV9ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorU05EX1NPQ19EQVBNX1BHQV9FKCJMYXRlIERBQzJMIEVuYWJsZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJbGF0ZV9lbmFibGVfZXYsIFNORF9TT0NfREFQTV9QUkVfUE1VKSwKK1NORF9TT0NfREFQTV9QR0FfRSgiTGF0ZSBEQUMyUiBFbmFibGUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCWxhdGVfZW5hYmxlX2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCisKK1NORF9TT0NfREFQTV9QT1NUKCJMYXRlIERpc2FibGUgUEdBIiwgbGF0ZV9kaXNhYmxlX2V2KQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9sYXRlY2xrX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFJRjFDTEsiLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFJRjJDTEsiLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9kYWNfcmV2ZF93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fREFDX0UoIkRBQzJMIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAzLCAwLAorCWRhY19ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorU05EX1NPQ19EQVBNX0RBQ19FKCJEQUMyUiIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMiwgMCwKKwlkYWNfZXYsIFNORF9TT0NfREFQTV9QUkVfUE1VKSwKK1NORF9TT0NfREFQTV9EQUNfRSgiREFDMUwiLCBOVUxMLCBTTkRfU09DX05PUE0sIDEsIDAsCisJZGFjX2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCitTTkRfU09DX0RBUE1fREFDX0UoIkRBQzFSIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAwLCAwLAorCWRhY19ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9kYWNfd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX0RBQygiREFDMkwiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAzLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQzFSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMiwgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUMxTCIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDEsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDMVIiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAwLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5OTRfYWRjX3JldmRfd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX01VWF9FKCJBRENMIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEsIDAsICZhZGNsX211eCwKKwkJICAgYWRjX211eF9ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorU05EX1NPQ19EQVBNX01VWF9FKCJBRENSIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDAsIDAsICZhZGNyX211eCwKKwkJICAgYWRjX211eF9ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9hZGNfd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX01VWCgiQURDTCBNdXgiLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxLCAwLCAmYWRjbF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiQURDUiBNdXgiLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAwLCAwLCAmYWRjcl9tdXgpLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9kYXBtX3dpZGdldHNbXSA9IHsKIFNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzFEQVQiKSwKIFNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzJEQVQiKSwKQEAgLTEyODQsMTIgKzE0NDcsOSBAQAogU05EX1NPQ19EQVBNX1NVUFBMWSgiRFNQMkNMSyIsIFdNODk5NF9DTE9DS0lOR18xLCAyLCAwLCBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9TVVBQTFkoIkRTUElOVENMSyIsIFdNODk5NF9DTE9DS0lOR18xLCAxLCAwLCBOVUxMLCAwKSwKIAotU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMUNMSyIsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMkNMSyIsIFdNODk5NF9BSUYyX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApLAotCi1TTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzFMIiwgIkFJRjEgQ2FwdHVyZSIsCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzFMIiwgTlVMTCwKIAkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCA5LCAwKSwKLVNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMVIiLCAiQUlGMSBDYXB0dXJlIiwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMVIiLCBOVUxMLAogCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDgsIDApLAogU05EX1NPQ19EQVBNX0FJRl9JTl9FKCJBSUYxREFDMUwiLCBOVUxMLCAwLAogCQkgICAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCA5LCAwLCB3bTg5NThfYWlmX2V2LApAQCAtMTI5OCw5ICsxNDU4LDkgQEAKIAkJICAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgOCwgMCwgd204OTU4X2FpZl9ldiwKIAkJICAgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKIAotU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyTCIsICJBSUYxIENhcHR1cmUiLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyTCIsIE5VTEwsCiAJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTEsIDApLAotU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyUiIsICJBSUYxIENhcHR1cmUiLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyUiIsIE5VTEwsCiAJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTAsIDApLAogU05EX1NPQ19EQVBNX0FJRl9JTl9FKCJBSUYxREFDMkwiLCBOVUxMLCAwLAogCQkgICAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxMSwgMCwgd204OTU4X2FpZl9ldiwKQEAgLTEzNDUsNiArMTUwNSw3IEBACiAKIFNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUNEQVQiLCAiQUlGMSBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCiBTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyREFDREFUIiwgIkFJRjIgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBRENEQVQiLCAiQUlGMSBDYXB0dXJlIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKIFNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYyQURDREFUIiwgIkFJRjIgQ2FwdHVyZSIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCiAKIFNORF9TT0NfREFQTV9NVVgoIkFJRjFEQUMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMWRhY19tdXgpLApAQCAtMTM2OCwxNCArMTUyOSw2IEBACiBTTkRfU09DX0RBUE1fQURDKCJBRENMIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAxLCAwKSwKIFNORF9TT0NfREFQTV9BREMoIkFEQ1IiLCBOVUxMLCBTTkRfU09DX05PUE0sIDAsIDApLAogCi1TTkRfU09DX0RBUE1fTVVYKCJBRENMIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEsIDAsICZhZGNsX211eCksCi1TTkRfU09DX0RBUE1fTVVYKCJBRENSIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDAsIDAsICZhZGNyX211eCksCi0KLVNORF9TT0NfREFQTV9EQUMoIkRBQzJMIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMywgMCksCi1TTkRfU09DX0RBUE1fREFDKCJEQUMyUiIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDIsIDApLAotU05EX1NPQ19EQVBNX0RBQygiREFDMUwiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxLCAwKSwKLVNORF9TT0NfREFQTV9EQUMoIkRBQzFSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMCwgMCksCi0KIFNORF9TT0NfREFQTV9NVVgoIkxlZnQgSGVhZHBob25lIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmhwbF9tdXgpLAogU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgSGVhZHBob25lIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmhwcl9tdXgpLAogCkBAIC0xNTE1LDE0ICsxNjY4LDEyIEBACiAJeyAiQUlGMkFEQyBNdXgiLCAiQUlGM0RBQ0RBVCIsICJBSUYzQURDREFUIiB9LAogCiAJLyogREFDMSBpbnB1dHMgKi8KLQl7ICJEQUMxTCIsIE5VTEwsICJEQUMxTCBNaXhlciIgfSwKIAl7ICJEQUMxTCBNaXhlciIsICJBSUYyIFN3aXRjaCIsICJBSUYyREFDTCIgfSwKIAl7ICJEQUMxTCBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyTCIgfSwKIAl7ICJEQUMxTCBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxTCIgfSwKIAl7ICJEQUMxTCBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAogCXsgIkRBQzFMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKIAotCXsgIkRBQzFSIiwgTlVMTCwgIkRBQzFSIE1peGVyIiB9LAogCXsgIkRBQzFSIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNSIiB9LAogCXsgIkRBQzFSIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJSIiB9LAogCXsgIkRBQzFSIE1peGVyIiwgIkFJRjEuMSBTd2l0Y2giLCAiQUlGMURBQzFSIiB9LApAQCAtMTUzMSw3ICsxNjgyLDYgQEAKIAogCS8qIERBQzIvQUlGMiBvdXRwdXRzICAqLwogCXsgIkFJRjJBRENMIiwgTlVMTCwgIkFJRjJEQUMyTCBNaXhlciIgfSwKLQl7ICJEQUMyTCIsIE5VTEwsICJBSUYyREFDMkwgTWl4ZXIiIH0sCiAJeyAiQUlGMkRBQzJMIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNMIiB9LAogCXsgIkFJRjJEQUMyTCBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyTCIgfSwKIAl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMUwiIH0sCkBAIC0xNTM5LDEzICsxNjg5LDE3IEBACiAJeyAiQUlGMkRBQzJMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKIAogCXsgIkFJRjJBRENSIiwgTlVMTCwgIkFJRjJEQUMyUiBNaXhlciIgfSwKLQl7ICJEQUMyUiIsIE5VTEwsICJBSUYyREFDMlIgTWl4ZXIiIH0sCiAJeyAiQUlGMkRBQzJSIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNSIiB9LAogCXsgIkFJRjJEQUMyUiBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyUiIgfSwKIAl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMVIiIH0sCiAJeyAiQUlGMkRBQzJSIE1peGVyIiwgIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgIkxlZnQgU2lkZXRvbmUiIH0sCiAJeyAiQUlGMkRBQzJSIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKIAorCXsgIkFJRjFBRENEQVQiLCBOVUxMLCAiQUlGMUFEQzFMIiB9LAorCXsgIkFJRjFBRENEQVQiLCBOVUxMLCAiQUlGMUFEQzFSIiB9LAorCXsgIkFJRjFBRENEQVQiLCBOVUxMLCAiQUlGMUFEQzJMIiB9LAorCXsgIkFJRjFBRENEQVQiLCBOVUxMLCAiQUlGMUFEQzJSIiB9LAorCiAJeyAiQUlGMkFEQ0RBVCIsIE5VTEwsICJBSUYyQURDIE11eCIgfSwKIAogCS8qIEFJRjMgb3V0cHV0ICovCkBAIC0xNTc4LDYgKzE3MzIsMzEgQEAKIAl7ICJSaWdodCBIZWFkcGhvbmUgTXV4IiwgIkRBQyIsICJEQUMxUiIgfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODk5NF9sYXRlY2xrX3JldmRfaW50ZXJjb25bXSA9IHsKKwl7ICJEQUMxTCIsIE5VTEwsICJMYXRlIERBQzFMIEVuYWJsZSBQR0EiIH0sCisJeyAiTGF0ZSBEQUMxTCBFbmFibGUgUEdBIiwgTlVMTCwgIkRBQzFMIE1peGVyIiB9LAorCXsgIkRBQzFSIiwgTlVMTCwgIkxhdGUgREFDMVIgRW5hYmxlIFBHQSIgfSwKKwl7ICJMYXRlIERBQzFSIEVuYWJsZSBQR0EiLCBOVUxMLCAiREFDMVIgTWl4ZXIiIH0sCisJeyAiREFDMkwiLCBOVUxMLCAiTGF0ZSBEQUMyTCBFbmFibGUgUEdBIiB9LAorCXsgIkxhdGUgREFDMkwgRW5hYmxlIFBHQSIsIE5VTEwsICJBSUYyREFDMkwgTWl4ZXIiIH0sCisJeyAiREFDMlIiLCBOVUxMLCAiTGF0ZSBEQUMyUiBFbmFibGUgUEdBIiB9LAorCXsgIkxhdGUgREFDMlIgRW5hYmxlIFBHQSIsIE5VTEwsICJBSUYyREFDMlIgTWl4ZXIiIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODk5NF9sYXRlY2xrX2ludGVyY29uW10gPSB7CisJeyAiREFDMUwiLCBOVUxMLCAiREFDMUwgTWl4ZXIiIH0sCisJeyAiREFDMVIiLCBOVUxMLCAiREFDMVIgTWl4ZXIiIH0sCisJeyAiREFDMkwiLCBOVUxMLCAiQUlGMkRBQzJMIE1peGVyIiB9LAorCXsgIkRBQzJSIiwgTlVMTCwgIkFJRjJEQUMyUiBNaXhlciIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODk5NF9yZXZkX2ludGVyY29uW10gPSB7CisJeyAiQUlGMURBQ0RBVCIsIE5VTEwsICJBSUYyREFDREFUIiB9LAorCXsgIkFJRjJEQUNEQVQiLCBOVUxMLCAiQUlGMURBQ0RBVCIgfSwKKwl7ICJBSUYxQURDREFUIiwgTlVMTCwgIkFJRjJBRENEQVQiIH0sCisJeyAiQUlGMkFEQ0RBVCIsIE5VTEwsICJBSUYxQURDREFUIiB9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTk0X2ludGVyY29uW10gPSB7CiAJeyAiQUlGMkRBQ0wiLCBOVUxMLCAiQUlGMkRBQyBNdXgiIH0sCiAJeyAiQUlGMkRBQ1IiLCBOVUxMLCAiQUlGMkRBQyBNdXgiIH0sCkBAIC0yMzg2LDcgKzI1NjUsNyBAQAogCWVsc2UKIAkJdmFsID0gMDsKIAotCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHJlZyk7CisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywgbWFzaywgdmFsKTsKIH0KIAogI2RlZmluZSBXTTg5OTRfUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF85NjAwMApAQCAtMjUwMSw2ICsyNjgwLDIyIEBACiB7CiAJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgaSwgcmV0OworCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7CisKKwlpZiAod204OTk0LT5yZXZpc2lvbiA8IDQpIHsKKwkJLyogZm9yY2UgYSBIVyByZWFkICovCisJCXZhbCA9IHdtODk5NF9yZWdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLAorCQkJCSAgICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUpOworCisJCS8qIG1vZGlmeSB0aGUgY2FjaGUgb25seSAqLworCQljb2RlYy0+Y2FjaGVfb25seSA9IDE7CisJCW1hc2sgPSAgV004OTk0X0RBQzFSX0VOQSB8IFdNODk5NF9EQUMxTF9FTkEgfAorCQkJV004OTk0X0RBQzJSX0VOQSB8IFdNODk5NF9EQUMyTF9FTkE7CisJCXZhbCAmPSBtYXNrOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LAorCQkJCSAgICBtYXNrLCB2YWwpOworCQljb2RlYy0+Y2FjaGVfb25seSA9IDA7CisJfQogCiAJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzICovCiAJcmV0ID0gc25kX3NvY19jYWNoZV9zeW5jKGNvZGVjKTsKQEAgLTI4MzQsMTEgKzMwMjksMTAgQEAKIAkJcmVwb3J0IHw9IFNORF9KQUNLX0JUTl81OwogCiBkb25lOgotCXNuZF9zb2NfamFja19yZXBvcnQod204OTk0LT5taWNkZXRbMF0uamFjaywKKwlzbmRfc29jX2phY2tfcmVwb3J0KHdtODk5NC0+bWljZGV0WzBdLmphY2ssIHJlcG9ydCwKIAkJCSAgICBTTkRfSkFDS19CVE5fMCB8IFNORF9KQUNLX0JUTl8xIHwgU05EX0pBQ0tfQlROXzIgfAogCQkJICAgIFNORF9KQUNLX0JUTl8zIHwgU05EX0pBQ0tfQlROXzQgfCBTTkRfSkFDS19CVE5fNSB8Ci0JCQkgICAgU05EX0pBQ0tfTUlDUk9QSE9ORSB8IFNORF9KQUNLX1ZJREVPT1VULAotCQkJICAgIHJlcG9ydCk7CisJCQkgICAgU05EX0pBQ0tfTUlDUk9QSE9ORSB8IFNORF9KQUNLX1ZJREVPT1VUKTsKIH0KIAogLyoqCkBAIC0zMTEyLDYgKzMzMDYsMjEgQEAKIAljYXNlIFdNODk5NDoKIAkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfc3BlY2lmaWNfZGFwbV93aWRnZXRzLAogCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X3NwZWNpZmljX2RhcG1fd2lkZ2V0cykpOworCQlpZiAod204OTk0LT5yZXZpc2lvbiA8IDQpIHsKKwkJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTk0X2xhdGVjbGtfcmV2ZF93aWRnZXRzLAorCQkJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9sYXRlY2xrX3JldmRfd2lkZ2V0cykpOworCQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfYWRjX3JldmRfd2lkZ2V0cywKKwkJCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfYWRjX3JldmRfd2lkZ2V0cykpOworCQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfZGFjX3JldmRfd2lkZ2V0cywKKwkJCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfZGFjX3JldmRfd2lkZ2V0cykpOworCQl9IGVsc2UgeworCQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfbGF0ZWNsa193aWRnZXRzLAorCQkJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9sYXRlY2xrX3dpZGdldHMpKTsKKwkJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTk0X2FkY193aWRnZXRzLAorCQkJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9hZGNfd2lkZ2V0cykpOworCQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfZGFjX3dpZGdldHMsCisJCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X2RhY193aWRnZXRzKSk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBXTTg5NTg6CiAJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5NThfc25kX2NvbnRyb2xzLApAQCAtMzEyOSw2ICszMzM4LDE2IEBACiAJY2FzZSBXTTg5OTQ6CiAJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk5NF9pbnRlcmNvbiwKIAkJCQkJQVJSQVlfU0laRSh3bTg5OTRfaW50ZXJjb24pKTsKKworCQlpZiAod204OTk0LT5yZXZpc2lvbiA8IDQpIHsKKwkJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk5NF9yZXZkX2ludGVyY29uLAorCQkJCQkJQVJSQVlfU0laRSh3bTg5OTRfcmV2ZF9pbnRlcmNvbikpOworCQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTk0X2xhdGVjbGtfcmV2ZF9pbnRlcmNvbiwKKwkJCQkJCUFSUkFZX1NJWkUod204OTk0X2xhdGVjbGtfcmV2ZF9pbnRlcmNvbikpOworCQl9IGVsc2UgeworCQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTk0X2xhdGVjbGtfaW50ZXJjb24sCisJCQkJCQlBUlJBWV9TSVpFKHdtODk5NF9sYXRlY2xrX2ludGVyY29uKSk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBXTTg5NTg6CiAJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk1OF9pbnRlcmNvbiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5jCmluZGV4IDYwNDVjYmQuLjYwOGM4NGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTUuYwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKIAllbHNlCiAJCXZhbCA9IDA7CiAKLQlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLCBtYXNrLCByZWcpOworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHZhbCk7CiB9CiAKIC8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEZMTCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTkwODEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKaW5kZXggNDM4MjViMi4uY2NlNzA0YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTkwODEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMTM0MSw2ICsxMzQyLDEwIEBACiAJd205MDgxLT5jb250cm9sX3R5cGUgPSBTTkRfU09DX0kyQzsKIAl3bTkwODEtPmNvbnRyb2xfZGF0YSA9IGkyYzsKIAorCWlmIChkZXZfZ2V0X3BsYXRkYXRhKCZpMmMtPmRldikpCisJCW1lbWNweSgmd205MDgxLT5yZXR1bmUsIGRldl9nZXRfcGxhdGRhdGEoJmkyYy0+ZGV2KSwKKwkJICAgICAgIHNpemVvZih3bTkwODEtPnJldHVuZSkpOworCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYsCiAJCQkmc29jX2NvZGVjX2Rldl93bTkwODEsICZ3bTkwODFfZGFpLCAxKTsKIAlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKaW5kZXggYzQ2Njk4Mi4uNTE2ODkyNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKQEAgLTkxLDYgKzkxLDcgQEAKIHN0YXRpYyB2b2lkIGNhbGlicmF0ZV9kY19zZXJ2byhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHdtX2h1YnNfZGF0YSAqaHVicyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXM4IG9mZnNldDsKIAl1MTYgcmVnLCByZWdfbCwgcmVnX3IsIGRjc19jZmc7CiAKIAkvKiBJZiB3ZSdyZSB1c2luZyBhIGRpZ2l0YWwgb25seSBwYXRoIGFuZCBoYXZlIGEgcHJldmlvdXNseQpAQCAtMTQ5LDE2ICsxNTAsMTQgQEAKIAkJCWh1YnMtPmRjc19jb2Rlcyk7CiAKIAkJLyogSFBPVVQxTCAqLwotCQlpZiAocmVnX2wgKyBodWJzLT5kY3NfY29kZXMgPiAwICYmCi0JCSAgICByZWdfbCArIGh1YnMtPmRjc19jb2RlcyA8IDB4ZmYpCi0JCQlyZWdfbCArPSBodWJzLT5kY3NfY29kZXM7Ci0JCWRjc19jZmcgPSByZWdfbCA8PCBXTTg5OTNfRENTX0RBQ19XUl9WQUxfMV9TSElGVDsKKwkJb2Zmc2V0ID0gcmVnX2w7CisJCW9mZnNldCArPSBodWJzLT5kY3NfY29kZXM7CisJCWRjc19jZmcgPSAodTgpb2Zmc2V0IDw8IFdNODk5M19EQ1NfREFDX1dSX1ZBTF8xX1NISUZUOwogCiAJCS8qIEhQT1VUMVIgKi8KLQkJaWYgKHJlZ19yICsgaHVicy0+ZGNzX2NvZGVzID4gMCAmJgotCQkgICAgcmVnX3IgKyBodWJzLT5kY3NfY29kZXMgPCAweGZmKQotCQkJcmVnX3IgKz0gaHVicy0+ZGNzX2NvZGVzOwotCQlkY3NfY2ZnIHw9IHJlZ19yOworCQlvZmZzZXQgPSByZWdfcjsKKwkJb2Zmc2V0ICs9IGh1YnMtPmRjc19jb2RlczsKKwkJZGNzX2NmZyB8PSAodTgpb2Zmc2V0OwogCiAJCWRldl9kYmcoY29kZWMtPmRldiwgIkRDUyByZXN1bHQ6ICV4XG4iLCBkY3NfY2ZnKTsKIApAQCAtNjc1LDYgKzY3NCw5IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhbmFsb2d1ZV9yb3V0ZXNbXSA9IHsKKwl7ICJNSUNCSUFTMSIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIk1JQ0JJQVMyIiwgTlVMTCwgIkNMS19TWVMiIH0sCisKIAl7ICJJTjFMIFBHQSIsICJJTjFMUCBTd2l0Y2giLCAiSU4xTFAiIH0sCiAJeyAiSU4xTCBQR0EiLCAiSU4xTE4gU3dpdGNoIiwgIklOMUxOIiB9LAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYwppbmRleCAwYzJkNmJhLi5mZTc5ODQyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKQEAgLTIxOCwxMiArMjE4LDI0IEBACiAJCS5vcHMgPSAmZXZtX3NwZGlmX29wcywKIAl9LAogfTsKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBkYTh4eF9ldm1fZGFpID0geworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZGE4MzBfZXZtX2RhaSA9IHsKKwkubmFtZSA9ICJUTFYzMjBBSUMzWCIsCisJLnN0cmVhbV9uYW1lID0gIkFJQzNYIiwKKwkuY3B1X2RhaV9uYW1lID0gImRhdmluY2ktbWNhc3AuMSIsCisJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzN4LWhpZmkiLAorCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzN4LWNvZGVjLjEtMDAxOCIsCisJLnBsYXRmb3JtX25hbWUgPSAiZGF2aW5jaS1wY20tYXVkaW8iLAorCS5pbml0ID0gZXZtX2FpYzN4X2luaXQsCisJLm9wcyA9ICZldm1fb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGRhODUwX2V2bV9kYWkgPSB7CiAJLm5hbWUgPSAiVExWMzIwQUlDM1giLAogCS5zdHJlYW1fbmFtZSA9ICJBSUMzWCIsCiAJLmNwdV9kYWlfbmFtZT0gImRhdmluY2ktbWNhc3AuMCIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzN4LWhpZmkiLAotCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzN4LWNvZGVjLjAtMDAxYSIsCisJLmNvZGVjX25hbWUgPSAidGx2MzIwYWljM3gtY29kZWMuMS0wMDE4IiwKIAkucGxhdGZvcm1fbmFtZSA9ICJkYXZpbmNpLXBjbS1hdWRpbyIsCiAJLmluaXQgPSBldm1fYWljM3hfaW5pdCwKIAkub3BzID0gJmV2bV9vcHMsCkBAIC0yNTksMTMgKzI3MSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBkYTgzMF9zbmRfc29jX2NhcmQgPSB7CiAJLm5hbWUgPSAiREE4MzAvT01BUC1MMTM3IEVWTSIsCi0JLmRhaV9saW5rID0gJmRhOHh4X2V2bV9kYWksCisJLmRhaV9saW5rID0gJmRhODMwX2V2bV9kYWksCiAJLm51bV9saW5rcyA9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBkYTg1MF9zbmRfc29jX2NhcmQgPSB7CiAJLm5hbWUgPSAiREE4NTAvT01BUC1MMTM4IEVWTSIsCi0JLmRhaV9saW5rID0gJmRhOHh4X2V2bV9kYWksCisJLmRhaV9saW5rID0gJmRhODUwX2V2bV9kYWksCiAJLm51bV9saW5rcyA9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2V1a3JlYS10bHYzMjAuYyBiL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCmluZGV4IGUyMGM5ZTEuLjFlOWJjY2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCisrKyBiL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCkBAIC03OSw3ICs3OSw3IEBACiAJLm5hbWUJCT0gInRsdjMyMGFpYzIzIiwKIAkuc3RyZWFtX25hbWUJPSAiVExWMzIwQUlDMjMiLAogCS5jb2RlY19kYWlfbmFtZQk9ICJ0bHYzMjBhaWMyMy1oaWZpIiwKLQkucGxhdGZvcm1fbmFtZQk9ICJpbXgtcGNtLWF1ZGlvLjAiLAorCS5wbGF0Zm9ybV9uYW1lCT0gImlteC1maXEtcGNtLWF1ZGlvLjAiLAogCS5jb2RlY19uYW1lCT0gInRsdjMyMGFpYzIzLWNvZGVjLjAtMDAxYSIsCiAJLmNwdV9kYWlfbmFtZQk9ICJpbXgtc3NpLjAiLAogCS5vcHMJCT0gJmV1a3JlYV90bHYzMjBfc25kX29wcywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jIGIvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMKaW5kZXggMjEwMWJkYy4uMzE2N2JlNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMKKysrIGIvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMKQEAgLTUwNyw4ICs1MDcsNiBAQAogCS8qIFNldCB1cCBkaWdpdGFsIG11dGUgaWYgbm90IHByb3ZpZGVkIGJ5IHRoZSBjb2RlYyAqLwogCWlmICghY29kZWNfZGFpLT5kcml2ZXItPm9wcykgewogCQljb2RlY19kYWktPmRyaXZlci0+b3BzID0gJmFtc19kZWx0YV9kYWlfb3BzOwotCX0gZWxzZSBpZiAoIWNvZGVjX2RhaS0+ZHJpdmVyLT5vcHMtPmRpZ2l0YWxfbXV0ZSkgewotCQljb2RlY19kYWktPmRyaXZlci0+b3BzLT5kaWdpdGFsX211dGUgPSBhbXNfZGVsdGFfZGlnaXRhbF9tdXRlOwogCX0gZWxzZSB7CiAJCWFtc19kZWx0YV9vcHMuc3RhcnR1cCA9IGFtc19kZWx0YV9zdGFydHVwOwogCQlhbXNfZGVsdGFfb3BzLnNodXRkb3duID0gYW1zX2RlbHRhX3NodXRkb3duOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9jb3JnaS5jIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCmluZGV4IGZjNTkyZjAuLjc4NGNmZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYworKysgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKQEAgLTMwNywxMCArMzA3LDEwIEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgY29yZ2lfZGFpID0gewogCS5uYW1lID0gIldNODczMSIsCiAJLnN0cmVhbV9uYW1lID0gIldNODczMSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJweGEtaXMyLWRhaSIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtaTJzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzMxLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODczMS1jb2RlYy0wLjAwMWEiLAorCS5jb2RlY19uYW1lID0gIndtODczMS1jb2RlYy0wLjAwMWIiLAogCS5pbml0ID0gY29yZ2lfd204NzMxX2luaXQsCiAJLm9wcyA9ICZjb3JnaV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jIGIvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jCmluZGV4IDI4MzMzZTcuLmRjNjU2NTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYworKysgYi9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCXsKIAkJLm5hbWUgPSAiQUM5NyIsCiAJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAotCQkuY3B1X2RhaV9uYW1lID0gInB4YS1hYzk3LjAiLAorCQkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3IiwKIAkJLmNvZGVjX2RhaV9uYW1lID0gIndtOTcwNS1oaWZpIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcwNS1jb2RlYyIsCkBAIC0xMjYsNyArMTI2LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCQkuY29kZWNfZGFpX25hbWUgPSAid205NzA1LWF1eCIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MDUtY29kZWMiLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jIGIvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jCmluZGV4IDAxYmYzMTYuLjUxODk3ZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYworKysgYi9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMKQEAgLTk5LDcgKzk5LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTciLAogCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4wIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5NyIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MDUtaGlmaSIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MDUtY29kZWMiLApAQCAtMTA5LDcgKzEwOSw3IEBACiAJewogCQkubmFtZSA9ICJBQzk3IEF1eCIsCiAJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCi0JCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMSIsCisJCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTctYXV4IiwKIAkJLmNvZGVjX2RhaV9uYW1lID0id205NzA1LWF1eCIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MDUtY29kZWMiLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jIGIvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCmluZGV4IGM2YTM3YzZlLi4wNTNlZDIwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKKysrIGIvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCkBAIC04OSw3ICs4OSw3IEBACiAJewogCQkubmFtZSA9ICJBQzk3IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTciLAogCQkuY29kZWNfZGFpX25hbWUgPSAid205NzEyLWhpZmkiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKIAkJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKQEAgLTk4LDcgKzk4LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCQkuY29kZWNfZGFpX25hbWUgPSJ3bTk3MTItYXV4IiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcxMi1jb2RlYyIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2VtLXgyNzAuYyBiL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCmluZGV4IGZjMjJlNmUuLmIxM2E0MjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCisrKyBiL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCkBAIC0zNyw3ICszNyw3IEBACiAJewogCQkubmFtZSA9ICJBQzk3IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTciLAogCQkuY29kZWNfZGFpX25hbWUgPSAid205NzEyLWhpZmkiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKIAkJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKQEAgLTQ1LDcgKzQ1LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCQkuY29kZWNfZGFpX25hbWUgPSJ3bTk3MTItYXV4IiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcxMi1jb2RlYyIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMgYi9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMKaW5kZXggMGQ3MGZjOC4uMzhjYTY3NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jCisrKyBiL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJewogCQkubmFtZSA9ICJBQzk3IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTciLAogCQkuY29kZWNfZGFpX25hbWUgPSAid205NzEzLWhpZmkiLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtY29kZWMiLAogCQkuaW5pdCA9IG1pb2E3MDFfd205NzEzX2luaXQsCkBAIC0xNzIsNyArMTcyLDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCQkuY29kZWNfZGFpX25hbWUgPSJ3bTk3MTMtYXV4IiwKIAkJLmNvZGVjX25hbWUgPSAid205NzEzLWNvZGVjIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYyBiL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCmluZGV4IDg1N2RiOTYuLjUwNGU0MDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCisrKyBiL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIHsKIAkubmFtZSA9ICJBQzk3IEhpRmkiLAogCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5NyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gICJ3bTk3MTItaGlmaSIsCiAJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKQEAgLTE0MSw3ICsxNDEsNyBAQAogewogCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMSIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MTItYXV4IiwKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTItY29kZWMiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9wb29kbGUuYyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKaW5kZXggNjI5OGVlMS4uYTdkNDk5OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9wb29kbGUuYworKysgYi9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1pMnMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg3MzEtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAid204NzMxLWNvZGVjLjAtMDAxYSIsCisJLmNvZGVjX25hbWUgPSAid204NzMxLWNvZGVjLjAtMDAxYiIsCiAJLmluaXQgPSBwb29kbGVfd204NzMxX2luaXQsCiAJLm9wcyA9ICZwb29kbGVfb3BzLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvc3BpdHouYyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwppbmRleCBjMmFjYjY5Li44ZTE1NzEzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKKysrIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCkBAIC0zMTUsMTAgKzMxNSwxMCBAQAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNwaXR6X2RhaSA9IHsKIAkubmFtZSA9ICJ3bTg3NTAiLAogCS5zdHJlYW1fbmFtZSA9ICJXTTg3NTAiLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWlzMiIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtaTJzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUwLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODc1MC1jb2RlYy4wLTAwMWEiLAorCS5jb2RlY19uYW1lID0gIndtODc1MC1jb2RlYy4wLTAwMWIiLAogCS5pbml0ID0gc3BpdHpfd204NzUwX2luaXQsCiAJLm9wcyA9ICZzcGl0el9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS90b3NhLmMgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwppbmRleCBmNzU4MDRlLi40YjZlNWQ2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYworKysgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiB7CiAJLm5hbWUgPSAiQUM5NyIsCiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4wIiwKKwkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3IiwKIAkuY29kZWNfZGFpX25hbWUgPSAid205NzEyLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCS5jb2RlY19uYW1lID0gIndtOTcxMi1jb2RlYyIsCkBAIC0yMjksNyArMjI5LDcgQEAKIHsKIAkubmFtZSA9ICJBQzk3IEF1eCIsCiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkuY3B1X2RhaV9uYW1lID0gInB4YS1hYzk3LjEiLAorCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTctYXV4IiwKIAkuY29kZWNfZGFpX25hbWUgPSAid205NzEyLWF1eCIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYyBiL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYwppbmRleCBiMjIyYTdkLi4yNWJiYTEwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKKysrIGIvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtY29kZWMiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5NyIsCiAJLmNvZGVjX25hbWUgPSAid205NzEzLWhpZmkiLAogCS5pbml0ID0genlsb25pdGVfd205NzEzX2luaXQsCiB9LApAQCAtMTc1LDcgKzE3NSw3IEBACiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtY29kZWMiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMSIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCS5jb2RlY19uYW1lID0gIndtOTcxMy1hdXgiLAogfSwKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX2d0YTAyX3dtODc1My5jCmluZGV4IDNlZWM2MTAuLjBkMGFlMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M19ndGEwMl93bTg3NTMuYwpAQCAtMzk3LDExICszOTcsMTEgQEAKIHsgLyogSGlmaSBQbGF5YmFjayAtIGZvciBzaW1pbGF0aW91cyB1c2Ugd2l0aCB2b2ljZSBiZWxvdyAqLwogCS5uYW1lID0gIldNODc1MyIsCiAJLnN0cmVhbV9uYW1lID0gIldNODc1MyBIaUZpIiwKLQkuY3B1X2RhaV9uYW1lID0gInMzYzI0eHgtaTJzIiwKKwkuY3B1X2RhaV9uYW1lID0gInMzYzI0eHgtaWlzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUzLWhpZmkiLAogCS5pbml0ID0gbmVvMTk3M19ndGEwMl93bTg3NTNfaW5pdCwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkub3BzID0gJm5lbzE5NzNfZ3RhMDJfaGlmaV9vcHMsCiB9LAogeyAvKiBWb2ljZSB2aWEgQlQgKi8KQEAgLTQxMCw3ICs0MTAsNyBAQAogCS5jcHVfZGFpX25hbWUgPSAiYmx1ZXRvb3RoLWRhaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My12b2ljZSIsCiAJLm9wcyA9ICZuZW8xOTczX2d0YTAyX3ZvaWNlX29wcywKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKaW5kZXggYzdhMjQ1MS4uZDIwODE1ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCkBAIC01NTksOSArNTU5LDkgQEAKIAkubmFtZSA9ICJXTTg3NTMiLAogCS5zdHJlYW1fbmFtZSA9ICJXTTg3NTMgSGlGaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCi0JLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWkycyIsCisJLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWlpcyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My1oaWZpIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkuaW5pdCA9IG5lbzE5NzNfd204NzUzX2luaXQsCiAJLm9wcyA9ICZuZW8xOTczX2hpZmlfb3BzLAogfSwKQEAgLTU3MSw3ICs1NzEsNyBAQAogCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAogCS5jcHVfZGFpX25hbWUgPSAiYmx1ZXRvb3RoLWRhaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My12b2ljZSIsCi0JLmNvZGVjX25hbWUgPSAid204NzUzLWNvZGVjLjAtMHgxYSIsCisJLmNvZGVjX25hbWUgPSAid204NzUzLWNvZGVjLjAtMDAxYSIsCiAJLm9wcyA9ICZuZW8xOTczX3ZvaWNlX29wcywKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYwppbmRleCBiYjQyOTJlLi4wOGZjYWFhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYwpAQCAtOTQsOCArOTQsOCBAQAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNpbXRlY19kYWlfYWljMzMgPSB7CiAJLm5hbWUJCT0gInRsdjMyMGFpYzMzIiwKIAkuc3RyZWFtX25hbWUJPSAiVExWMzIwQUlDMzMiLAotCS5jb2RlY19uYW1lCT0gInRsdjMyMGFpYzN4LWNvZGVjLjAtMHgxYSIsCi0JLmNwdV9kYWlfbmFtZQk9ICJzM2MyNHh4LWkycyIsCisJLmNvZGVjX25hbWUJPSAidGx2MzIwYWljM3gtY29kZWMuMC0wMDFhIiwKKwkuY3B1X2RhaV9uYW1lCT0gInMzYzI0eHgtaWlzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAidGx2MzIwYWljM3gtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUJPSAic2Ftc3VuZy1hdWRpbyIsCiAJLmluaXQJCT0gc2ltdGVjX2hlcm1lc19pbml0LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLmMKaW5kZXggZmJiYTRlMy4uMTE2ZTNlNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jCkBAIC04NSw4ICs4NSw4IEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc2ltdGVjX2RhaV9haWMyMyA9IHsKIAkubmFtZQkJPSAidGx2MzIwYWljMjMiLAogCS5zdHJlYW1fbmFtZQk9ICJUTFYzMjBBSUMyMyIsCi0JLmNvZGVjX25hbWUJPSAidGx2MzIwYWljM3gtY29kZWMuMC0weDFhIiwKLQkuY3B1X2RhaV9uYW1lCT0gInMzYzI0eHgtaTJzIiwKKwkuY29kZWNfbmFtZQk9ICJ0bHYzMjBhaWMzeC1jb2RlYy4wLTAwMWEiLAorCS5jcHVfZGFpX25hbWUJPSAiczNjMjR4eC1paXMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ0bHYzMjBhaWMzeC1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIAkuaW5pdAkJPSBzaW10ZWNfdGx2MzIwYWljMjNfaW5pdCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfdWRhMTM0eC5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKaW5kZXggY2RjOGVjYi4uMmMwOWU5MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCS5zdHJlYW1fbmFtZSA9ICJVREExMzRYIiwKIAkuY29kZWNfbmFtZSA9ICJ1ZGExMzR4LWhpZmkiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ1ZGExMzR4LWhpZmkiLAotCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1pMnMiLAorCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1paXMiLAogCS5vcHMgPSAmczNjMjR4eF91ZGExMzR4X29wcywKIAkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGJhYzcyOTEuLmMzZjZmMWU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMTQ0OSw2ICsxNDQ5LDcgQEAKIAkJcnRkID0gJmNhcmQtPnJ0ZF9hdXhbbnVtXTsKIAkJbmFtZSA9IGF1eF9kZXYtPm5hbWU7CiAJfQorCXJ0ZC0+Y2FyZCA9IGNhcmQ7CiAKIAkvKiBtYWNoaW5lIGNvbnRyb2xzLCByb3V0ZXMgYW5kIHdpZGdldHMgYXJlIG5vdCBwcmVmaXhlZCAqLwogCXRlbXAgPSBjb2RlYy0+bmFtZV9wcmVmaXg7CkBAIC0xNDcxLDcgKzE0NzIsNiBAQAogCiAJLyogcmVnaXN0ZXIgdGhlIHJ0ZCBkZXZpY2UgKi8KIAlydGQtPmNvZGVjID0gY29kZWM7Ci0JcnRkLT5jYXJkID0gY2FyZDsKIAlydGQtPmRldi5wYXJlbnQgPSBjYXJkLT5kZXY7CiAJcnRkLT5kZXYucmVsZWFzZSA9IHJ0ZF9yZWxlYXNlOwogCXJ0ZC0+ZGV2LmluaXRfbmFtZSA9IG5hbWU7CkBAIC0xNjY0LDkgKzE2NjQsNiBAQAogCWdvdG8gb3V0OwogCiBmb3VuZDoKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNvZGVjLT5kZXYtPmRyaXZlci0+b3duZXIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXJldCA9IHNvY19wcm9iZV9jb2RlYyhjYXJkLCBjb2RlYyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IDQ5OTczMGEuLjI1ZTU0MjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC03MTIsNyArNzEyLDE1IEBACiAJCSAgICAhcGF0aC0+Y29ubmVjdGVkKHBhdGgtPnNvdXJjZSwgcGF0aC0+c2luaykpCiAJCQljb250aW51ZTsKIAotCQlpZiAocGF0aC0+c2luayAmJiBwYXRoLT5zaW5rLT5wb3dlcl9jaGVjayAmJgorCQlpZiAoIXBhdGgtPnNpbmspCisJCQljb250aW51ZTsKKworCQlpZiAocGF0aC0+c2luay0+Zm9yY2UpIHsKKwkJCXBvd2VyID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHBhdGgtPnNpbmstPnBvd2VyX2NoZWNrICYmCiAJCSAgICBwYXRoLT5zaW5rLT5wb3dlcl9jaGVjayhwYXRoLT5zaW5rKSkgewogCQkJcG93ZXIgPSAxOwogCQkJYnJlYWs7CkBAIC0xNjI3LDYgKzE2MzUsNyBAQAogaW50IHNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CisJdW5zaWduZWQgaW50IHZhbDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmRhcG0tPmNhcmQtPndpZGdldHMsIGxpc3QpCiAJewpAQCAtMTY3NSw2ICsxNjg0LDE4IEBACiAJCWNhc2Ugc25kX3NvY19kYXBtX3Bvc3Q6CiAJCQlicmVhazsKIAkJfQorCisJCS8qIFJlYWQgdGhlIGluaXRpYWwgcG93ZXIgc3RhdGUgZnJvbSB0aGUgZGV2aWNlICovCisJCWlmICh3LT5yZWcgPj0gMCkgeworCQkJdmFsID0gc25kX3NvY19yZWFkKHctPmNvZGVjLCB3LT5yZWcpOworCQkJdmFsICY9IDEgPDwgdy0+c2hpZnQ7CisJCQlpZiAody0+aW52ZXJ0KQorCQkJCXZhbCA9ICF2YWw7CisKKwkJCWlmICh2YWwpCisJCQkJdy0+cG93ZXIgPSAxOworCQl9CisKIAkJdy0+bmV3ID0gMTsKIAl9CiAKQEAgLTE3NDIsNyArMTc2Myw3IEBACiAJaW50IG1heCA9IG1jLT5tYXg7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAoMSA8PCBmbHMobWF4KSkgLSAxOwogCXVuc2lnbmVkIGludCBpbnZlcnQgPSBtYy0+aW52ZXJ0OwotCXVuc2lnbmVkIGludCB2YWwsIHZhbF9tYXNrOworCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IGNvbm5lY3QsIGNoYW5nZTsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3VwZGF0ZSB1cGRhdGU7CiAKQEAgLTE3NTAsMTMgKzE3NzEsMTMgQEAKIAogCWlmIChpbnZlcnQpCiAJCXZhbCA9IG1heCAtIHZhbDsKLQl2YWxfbWFzayA9IG1hc2sgPDwgc2hpZnQ7CisJbWFzayA9IG1hc2sgPDwgc2hpZnQ7CiAJdmFsID0gdmFsIDw8IHNoaWZ0OwogCiAJbXV0ZXhfbG9jaygmd2lkZ2V0LT5jb2RlYy0+bXV0ZXgpOwogCXdpZGdldC0+dmFsdWUgPSB2YWw7CiAKLQljaGFuZ2UgPSBzbmRfc29jX3Rlc3RfYml0cyh3aWRnZXQtPmNvZGVjLCByZWcsIHZhbF9tYXNrLCB2YWwpOworCWNoYW5nZSA9IHNuZF9zb2NfdGVzdF9iaXRzKHdpZGdldC0+Y29kZWMsIHJlZywgbWFzaywgdmFsKTsKIAlpZiAoY2hhbmdlKSB7CiAJCWlmICh2YWwpCiAJCQkvKiBuZXcgY29ubmVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMgYi9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYwppbmRleCA2OGI5NzQ3Li42NmVhYmFmIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYworKysgYi9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJfQogCiAJZGV2LT5wY20tPnByaXZhdGVfZGF0YSA9IGRldjsKLQlzdHJjcHkoZGV2LT5wY20tPm5hbWUsIGRldi0+cHJvZHVjdF9uYW1lKTsKKwlzdHJsY3B5KGRldi0+cGNtLT5uYW1lLCBkZXYtPnByb2R1Y3RfbmFtZSwgc2l6ZW9mKGRldi0+cGNtLT5uYW1lKSk7CiAKIAltZW1zZXQoZGV2LT5zdWJfcGxheWJhY2ssIDAsIHNpemVvZihkZXYtPnN1Yl9wbGF5YmFjaykpOwogCW1lbXNldChkZXYtPnN1Yl9jYXB0dXJlLCAwLCBzaXplb2YoZGV2LT5zdWJfY2FwdHVyZSkpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL21pZGkuYyBiL3NvdW5kL3VzYi9jYWlhcS9taWRpLmMKaW5kZXggMmYyMThjNy4uYTFhNDcwODggMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9taWRpLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL21pZGkuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlzdHJjcHkocm1pZGktPm5hbWUsIGRldmljZS0+cHJvZHVjdF9uYW1lKTsKKwlzdHJsY3B5KHJtaWRpLT5uYW1lLCBkZXZpY2UtPnByb2R1Y3RfbmFtZSwgc2l6ZW9mKHJtaWRpLT5uYW1lKSk7CiAKIAlybWlkaS0+aW5mb19mbGFncyA9IFNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CiAJcm1pZGktPnByaXZhdGVfZGF0YSA9IGRldmljZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYXJkLmMgYi9zb3VuZC91c2IvY2FyZC5jCmluZGV4IDgwMGY3Y2IuLmMwZjgyNzBiIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FyZC5jCisrKyBiL3NvdW5kL3VzYi9jYXJkLmMKQEAgLTMyMyw2ICszMjMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwltdXRleF9pbml0KCZjaGlwLT5zaHV0ZG93bl9tdXRleCk7CiAJY2hpcC0+aW5kZXggPSBpZHg7CiAJY2hpcC0+ZGV2ID0gZGV2OwogCWNoaXAtPmNhcmQgPSBjYXJkOwpAQCAtNTMxLDYgKzUzMiw3IEBACiAJY2hpcCA9IHB0cjsKIAljYXJkID0gY2hpcC0+Y2FyZDsKIAltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c2h1dGRvd25fbXV0ZXgpOwogCWNoaXAtPnNodXRkb3duID0gMTsKIAljaGlwLT5udW1faW50ZXJmYWNlcy0tOwogCWlmIChjaGlwLT5udW1faW50ZXJmYWNlcyA8PSAwKSB7CkBAIC01NDgsOSArNTUwLDExIEBACiAJCQlzbmRfdXNiX21peGVyX2Rpc2Nvbm5lY3QocCk7CiAJCX0KIAkJdXNiX2NoaXBbY2hpcC0+aW5kZXhdID0gTlVMTDsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zaHV0ZG93bl9tdXRleCk7CiAJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQlzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKGNhcmQpOwogCX0gZWxzZSB7CisJCW11dGV4X3VubG9jaygmY2hpcC0+c2h1dGRvd25fbXV0ZXgpOwogCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWl4ZXIuYyBiL3NvdW5kL3VzYi9taXhlci5jCmluZGV4IDdkZjg5YjMuLjg1YWY2MDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9taXhlci5jCisrKyBiL3NvdW5kL3VzYi9taXhlci5jCkBAIC05NSw3ICs5NSw3IEBACiB9OwogCiAKLS8qRS1tdSAwMjAyKDA0MDQpIGVYdGVuc2lvbiBVbml0KFhVKSBjb250cm9sKi8KKy8qRS1tdSAwMjAyLzA0MDQvMDIwNCBlWHRlbnNpb24gVW5pdChYVSkgY29udHJvbCovCiBlbnVtIHsKIAlVU0JfWFVfQ0xPQ0tfUkFURSAJCT0gMHhlMzAxLAogCVVTQl9YVV9DTE9DS19TT1VSQ0UJCT0gMHhlMzAyLApAQCAtMTU2Niw3ICsxNTY2LDcgQEAKIAkJCWN2YWwtPmluaXRpYWxpemVkID0gMTsKIAkJfSBlbHNlIHsKIAkJCWlmICh0eXBlID09IFVTQl9YVV9DTE9DS19SQVRFKSB7Ci0JCQkJLyogRS1NdSBVU0IgMDQwNC8wMjAyL1RyYWNrZXJQcmUKKwkJCQkvKiBFLU11IFVTQiAwNDA0LzAyMDIvVHJhY2tlclByZS8wMjA0CiAJCQkJICogc2FtcGxlcmF0ZSBjb250cm9sIHF1aXJrCiAJCQkJICovCiAJCQkJY3ZhbC0+bWluID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9wY20uYyBiL3NvdW5kL3VzYi9wY20uYwppbmRleCA0MTMyNTIyLi5lM2Y2ODA1IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcGNtLmMKKysrIGIvc291bmQvdXNiL3BjbS5jCkBAIC0zNjEsNiArMzYxLDcgQEAKIAl9CiAKIAlpZiAoY2hhbmdlZCkgeworCQltdXRleF9sb2NrKCZzdWJzLT5zdHJlYW0tPmNoaXAtPnNodXRkb3duX211dGV4KTsKIAkJLyogZm9ybWF0IGNoYW5nZWQgKi8KIAkJc25kX3VzYl9yZWxlYXNlX3N1YnN0cmVhbV91cmJzKHN1YnMsIDApOwogCQkvKiBpbmZsdWVuY2VkOiBwZXJpb2RfYnl0ZXMsIGNoYW5uZWxzLCByYXRlLCBmb3JtYXQsICovCkBAIC0zNjgsNiArMzY5LDcgQEAKIAkJCQkJCSAgcGFyYW1zX3JhdGUoaHdfcGFyYW1zKSwKIAkJCQkJCSAgc25kX3BjbV9mb3JtYXRfcGh5c2ljYWxfd2lkdGgocGFyYW1zX2Zvcm1hdChod19wYXJhbXMpKSAqCiAJCQkJCQkJcGFyYW1zX2NoYW5uZWxzKGh3X3BhcmFtcykpOworCQltdXRleF91bmxvY2soJnN1YnMtPnN0cmVhbS0+Y2hpcC0+c2h1dGRvd25fbXV0ZXgpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zODUsOCArMzg3LDkgQEAKIAlzdWJzLT5jdXJfYXVkaW9mbXQgPSBOVUxMOwogCXN1YnMtPmN1cl9yYXRlID0gMDsKIAlzdWJzLT5wZXJpb2RfYnl0ZXMgPSAwOwotCWlmICghc3Vicy0+c3RyZWFtLT5jaGlwLT5zaHV0ZG93bikKLQkJc25kX3VzYl9yZWxlYXNlX3N1YnN0cmVhbV91cmJzKHN1YnMsIDApOworCW11dGV4X2xvY2soJnN1YnMtPnN0cmVhbS0+Y2hpcC0+c2h1dGRvd25fbXV0ZXgpOworCXNuZF91c2JfcmVsZWFzZV9zdWJzdHJlYW1fdXJicyhzdWJzLCAwKTsKKwltdXRleF91bmxvY2soJnN1YnMtPnN0cmVhbS0+Y2hpcC0+c2h1dGRvd25fbXV0ZXgpOwogCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaCBiL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaAppbmRleCAzNTk5OTg3Li45MjFhODZmIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKKysrIGIvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCkBAIC03OSw2ICs3OSwxMyBAQAogCS5pZFByb2R1Y3QgPSAweDNmMGEsCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKIH0sCit7CisJLyogRS1NdSAwMjA0IFVTQiAqLworCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCS5pZFZlbmRvciA9IDB4MDQxZSwKKwkuaWRQcm9kdWN0ID0gMHgzZjE5LAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCit9LAogCiAvKgogICogTG9naXRlY2ggUXVpY2tDYW06IGJEZXZpY2VDbGFzcyBpcyB2ZW5kb3Itc3BlY2lmaWMsIHNvIGdlbmVyaWMgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLmMgYi9zb3VuZC91c2IvcXVpcmtzLmMKaW5kZXggY2Y4YmYwOC4uZTMxNGNkYiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy5jCisrKyBiL3NvdW5kL3VzYi9xdWlya3MuYwpAQCAtNTMyLDcgKzUzMiw3IEBACiB9CiAKIC8qCi0gKiBGb3IgRS1NdSAwNDA0VVNCLzAyMDJVU0IvVHJhY2tlclByZSBzYW1wbGUgcmF0ZSBzaG91bGQgYmUgc2V0IGZvciBkZXZpY2UsCisgKiBGb3IgRS1NdSAwNDA0VVNCLzAyMDJVU0IvVHJhY2tlclByZS8wMjA0IHNhbXBsZSByYXRlIHNob3VsZCBiZSBzZXQgZm9yIGRldmljZSwKICAqIG5vdCBmb3IgaW50ZXJmYWNlLgogICovCiAKQEAgLTU4OSw2ICs1ODksNyBAQAogCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjAyKTogLyogRS1NdSAwMjAyIFVTQiAqLwogCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjA0KTogLyogRS1NdSAwNDA0IFVTQiAqLwogCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjBhKTogLyogRS1NdSBUcmFja2VyIFByZSAqLworCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjE5KTogLyogRS1NdSAwMjA0IFVTQiAqLwogCQlzZXRfZm9ybWF0X2VtdV9xdWlyayhzdWJzLCBmbXQpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uaCBiL3NvdW5kL3VzYi91c2JhdWRpby5oCmluZGV4IGRiM2ViMjEuLjZlNjZmZmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5oCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5oCkBAIC0zNiw2ICszNiw3IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXUzMiB1c2JfaWQ7CiAJaW50IHNodXRkb3duOworCXN0cnVjdCBtdXRleCBzaHV0ZG93bl9tdXRleDsKIAl1bnNpZ25lZCBpbnQgdHhmcl9xdWlyazoxOyAvKiBTdWJmcmFtZSBib3VuZGFyaWVzIG9uIHRyYW5zZmVycyAqLwogCWludCBudW1faW50ZXJmYWNlczsKIAlpbnQgbnVtX3N1c3BlbmRlZF9pbnRmOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IGIyZjcyOWYuLjYwY2FjNmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTc1OSw4ICs3NTksOCBAQAogCQlwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfbWFjaGluZXMoc2Vzc2lvbiwgZXZlbnRfX3N5bnRoZXNpemVfZ3Vlc3Rfb3MpOwogCiAJaWYgKCFzeXN0ZW1fd2lkZSkKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF90aWQsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCi0JCQkJCSBzZXNzaW9uKTsKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkX21hcCh0aHJlYWRzLCBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LAorCQkJCQkgICAgIHNlc3Npb24pOwogCWVsc2UKIAkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50LCBzZXNzaW9uKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCmluZGV4IDc0NmNmMDMuLjBhY2U3ODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKQEAgLTI2NCw5ICsyNjQsNiBAQAogCQljLT5zdGFydF90aW1lID0gc3RhcnQ7CiAJaWYgKHAtPnN0YXJ0X3RpbWUgPT0gMCB8fCBwLT5zdGFydF90aW1lID4gc3RhcnQpCiAJCXAtPnN0YXJ0X3RpbWUgPSBzdGFydDsKLQotCWlmIChjcHUgPiBudW1jcHVzKQotCQludW1jcHVzID0gY3B1OwogfQogCiAjZGVmaW5lIE1BWF9DUFVTIDQwOTYKQEAgLTUxMSw2ICs1MDgsOSBAQAogCQlpZiAoIWV2ZW50X3N0cikKIAkJCXJldHVybiAwOwogCisJCWlmIChzYW1wbGUtPmNwdSA+IG51bWNwdXMpCisJCQludW1jcHVzID0gc2FtcGxlLT5jcHU7CisKIAkJaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpjcHVfaWRsZSIpID09IDApIHsKIAkJCXN0cnVjdCBwb3dlcl9wcm9jZXNzb3JfZW50cnkgKnBwZSA9ICh2b2lkICopdGU7CiAJCQlpZiAocHBlLT5zdGF0ZSA9PSAodTMyKVBXUl9FVkVOVF9FWElUKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IGI2OTk4ZTAuLjVhMjlkOWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTEzMDYsNyArMTMwNiw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKHRhcmdldF90aWQgIT0gLTEpCi0JCWV2ZW50X19zeW50aGVzaXplX3RocmVhZCh0YXJnZXRfdGlkLCBldmVudF9fcHJvY2Vzcywgc2Vzc2lvbik7CisJCWV2ZW50X19zeW50aGVzaXplX3RocmVhZF9tYXAodGhyZWFkcywgZXZlbnRfX3Byb2Nlc3MsIHNlc3Npb24pOwogCWVsc2UKIAkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkcyhldmVudF9fcHJvY2Vzcywgc2Vzc2lvbik7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKaW5kZXggMTQ3OGFiNC4uNTBkMGE5MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKQEAgLTI2MywxMSArMjYzLDEyIEBACiAJCQkJCSAgICAgcHJvY2Vzcywgc2Vzc2lvbik7CiB9CiAKLWludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWQocGlkX3QgcGlkLCBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCi0JCQkgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkX21hcChzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcywKKwkJCQkgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAorCQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewogCWV2ZW50X3QgKmNvbW1fZXZlbnQsICptbWFwX2V2ZW50OwotCWludCBlcnIgPSAtMTsKKwlpbnQgZXJyID0gLTEsIHRocmVhZDsKIAogCWNvbW1fZXZlbnQgPSBtYWxsb2Moc2l6ZW9mKGNvbW1fZXZlbnQtPmNvbW0pICsgc2Vzc2lvbi0+aWRfaGRyX3NpemUpOwogCWlmIChjb21tX2V2ZW50ID09IE5VTEwpCkBAIC0yNzcsOCArMjc4LDE1IEBACiAJaWYgKG1tYXBfZXZlbnQgPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZV9jb21tOwogCi0JZXJyID0gX19ldmVudF9fc3ludGhlc2l6ZV90aHJlYWQoY29tbV9ldmVudCwgbW1hcF9ldmVudCwgcGlkLAotCQkJCQkgcHJvY2Vzcywgc2Vzc2lvbik7CisJZXJyID0gMDsKKwlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IHRocmVhZHMtPm5yOyArK3RocmVhZCkgeworCQlpZiAoX19ldmVudF9fc3ludGhlc2l6ZV90aHJlYWQoY29tbV9ldmVudCwgbW1hcF9ldmVudCwKKwkJCQkJICAgICAgIHRocmVhZHMtPm1hcFt0aHJlYWRdLAorCQkJCQkgICAgICAgcHJvY2Vzcywgc2Vzc2lvbikpIHsKKwkJCWVyciA9IC0xOworCQkJYnJlYWs7CisJCX0KKwl9CiAJZnJlZShtbWFwX2V2ZW50KTsKIG91dF9mcmVlX2NvbW06CiAJZnJlZShjb21tX2V2ZW50KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKaW5kZXggMmI3ZTkxOS4uY2M3YjUyZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmgKQEAgLTEzNSwxNCArMTM1LDE2IEBACiB2b2lkIGV2ZW50X19wcmludF90b3RhbHModm9pZCk7CiAKIHN0cnVjdCBwZXJmX3Nlc3Npb247CitzdHJ1Y3QgdGhyZWFkX21hcDsKIAogdHlwZWRlZiBpbnQgKCpldmVudF9faGFuZGxlcl9zeW50aF90KShldmVudF90ICpldmVudCwgCiAJCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiB0eXBlZGVmIGludCAoKmV2ZW50X19oYW5kbGVyX3QpKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSwKIAkJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKLQkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CitpbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkX21hcChzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcywKKwkJCQkgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAorCQkJCSBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIGludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKIAkJCSAgICAgIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogaW50IGV2ZW50X19zeW50aGVzaXplX2tlcm5lbF9tbWFwKGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKaW5kZXggZjVjZmVkNi4uZDg1NzVkMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAlpbnQgY3B1LCB0aHJlYWQ7CiAJc3RydWN0IHBlcmZfY291bnRzX3ZhbHVlcyAqYWdnciA9ICZldnNlbC0+Y291bnRzLT5hZ2dyLCBjb3VudDsKIAotCWFnZ3ItPnZhbCA9IDA7CisJYWdnci0+dmFsID0gYWdnci0+ZW5hID0gYWdnci0+cnVuID0gMDsKIAogCWZvciAoY3B1ID0gMDsgY3B1IDwgbmNwdXM7IGNwdSsrKSB7CiAJCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgbnRocmVhZHM7IHRocmVhZCsrKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwppbmRleCAzMmY0ZjFmLi5kZjUxNTYwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKQEAgLTU4NSw2ICs1ODUsNyBAQAogewogCXN0cnVjdCBzb3J0X2VudHJ5ICpzZTsKIAl1NjQgcGVyaW9kLCB0b3RhbCwgcGVyaW9kX3N5cywgcGVyaW9kX3VzLCBwZXJpb2RfZ3Vlc3Rfc3lzLCBwZXJpb2RfZ3Vlc3RfdXM7CisJdTY0IG5yX2V2ZW50czsKIAljb25zdCBjaGFyICpzZXAgPSBzeW1ib2xfY29uZi5maWVsZF9zZXA7CiAJaW50IHJldDsKIApAQCAtNTkzLDYgKzU5NCw3IEBACiAKIAlpZiAocGFpcl9oaXN0cykgewogCQlwZXJpb2QgPSBzZWxmLT5wYWlyID8gc2VsZi0+cGFpci0+cGVyaW9kIDogMDsKKwkJbnJfZXZlbnRzID0gc2VsZi0+cGFpciA/IHNlbGYtPnBhaXItPm5yX2V2ZW50cyA6IDA7CiAJCXRvdGFsID0gcGFpcl9oaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOwogCQlwZXJpb2Rfc3lzID0gc2VsZi0+cGFpciA/IHNlbGYtPnBhaXItPnBlcmlvZF9zeXMgOiAwOwogCQlwZXJpb2RfdXMgPSBzZWxmLT5wYWlyID8gc2VsZi0+cGFpci0+cGVyaW9kX3VzIDogMDsKQEAgLTYwMCw2ICs2MDIsNyBAQAogCQlwZXJpb2RfZ3Vlc3RfdXMgPSBzZWxmLT5wYWlyID8gc2VsZi0+cGFpci0+cGVyaW9kX2d1ZXN0X3VzIDogMDsKIAl9IGVsc2UgewogCQlwZXJpb2QgPSBzZWxmLT5wZXJpb2Q7CisJCW5yX2V2ZW50cyA9IHNlbGYtPm5yX2V2ZW50czsKIAkJdG90YWwgPSBzZXNzaW9uX3RvdGFsOwogCQlwZXJpb2Rfc3lzID0gc2VsZi0+cGVyaW9kX3N5czsKIAkJcGVyaW9kX3VzID0gc2VsZi0+cGVyaW9kX3VzOwpAQCAtNjQwLDkgKzY0Myw5IEBACiAKIAlpZiAoc3ltYm9sX2NvbmYuc2hvd19ucl9zYW1wbGVzKSB7CiAJCWlmIChzZXApCi0JCQlyZXQgKz0gc25wcmludGYocyArIHJldCwgc2l6ZSAtIHJldCwgIiVjJSIgUFJJdTY0LCAqc2VwLCBwZXJpb2QpOworCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlYyUiIFBSSXU2NCwgKnNlcCwgbnJfZXZlbnRzKTsKIAkJZWxzZQotCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlMTEiIFBSSXU2NCwgcGVyaW9kKTsKKwkJCXJldCArPSBzbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJTExIiBQUkl1NjQsIG5yX2V2ZW50cyk7CiAJfQogCiAJaWYgKHBhaXJfaGlzdHMpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYwppbmRleCBmYjczN2ZlLi45NmM4NjYwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCkBAIC00NTYsOSArNDU2LDkgQEAKIAkJcmV0dXJuOwogCiAJc3ZnX2xlZ2VuZGFfYm94KDAsCSJSdW5uaW5nIiwgInNhbXBsZSIpOwotCXN2Z19sZWdlbmRhX2JveCgxMDAsCSJJZGxlIiwicmVjdC5jMSIpOwotCXN2Z19sZWdlbmRhX2JveCgyMDAsCSJEZWVwZXIgSWRsZSIsICJyZWN0LmMzIik7Ci0Jc3ZnX2xlZ2VuZGFfYm94KDM1MCwJIkRlZXBlc3QgSWRsZSIsICJyZWN0LmM2Iik7CisJc3ZnX2xlZ2VuZGFfYm94KDEwMCwJIklkbGUiLCJjMSIpOworCXN2Z19sZWdlbmRhX2JveCgyMDAsCSJEZWVwZXIgSWRsZSIsICJjMyIpOworCXN2Z19sZWdlbmRhX2JveCgzNTAsCSJEZWVwZXN0IElkbGUiLCAiYzYiKTsKIAlzdmdfbGVnZW5kYV9ib3goNTUwLAkiU2xlZXBpbmciLCAicHJvY2VzczIiKTsKIAlzdmdfbGVnZW5kYV9ib3goNjUwLAkiV2FpdGluZyBmb3IgY3B1IiwgIndhaXRpbmciKTsKIAlzdmdfbGVnZW5kYV9ib3goODAwLAkiQmxvY2tlZCBvbiBJTyIsICJibG9ja2VkIik7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuYwppbmRleCA0YzY5ODNkLi4zNjJhMGNiIDEwMDY0NAotLS0gYS90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jCisrKyBiL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMKQEAgLTcyLDcgKzcyLDcgQEAKIAogaW50IG51bV9jcHVzOwogCi10eXBlZGVmIHN0cnVjdCBwZXJfY3B1X2NvdW50ZXJzIHsKK3N0cnVjdCBjb3VudGVycyB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRzYzsJCS8qIHBlciB0aHJlYWQgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgYXBlcmY7CS8qIHBlciB0aHJlYWQgKi8KIAl1bnNpZ25lZCBsb25nIGxvbmcgbXBlcmY7CS8qIHBlciB0aHJlYWQgKi8KQEAgLTg4LDEzICs4OCwxMyBAQAogCWludCBwa2c7CiAJaW50IGNvcmU7CiAJaW50IGNwdTsKLQlzdHJ1Y3QgcGVyX2NwdV9jb3VudGVycyAqbmV4dDsKLX0gUENDOworCXN0cnVjdCBjb3VudGVycyAqbmV4dDsKK307CiAKLVBDQyAqcGNjX2V2ZW47Ci1QQ0MgKnBjY19vZGQ7Ci1QQ0MgKnBjY19kZWx0YTsKLVBDQyAqcGNjX2F2ZXJhZ2U7CitzdHJ1Y3QgY291bnRlcnMgKmNudF9ldmVuOworc3RydWN0IGNvdW50ZXJzICpjbnRfb2RkOworc3RydWN0IGNvdW50ZXJzICpjbnRfZGVsdGE7CitzdHJ1Y3QgY291bnRlcnMgKmNudF9hdmVyYWdlOwogc3RydWN0IHRpbWV2YWwgdHZfZXZlbjsKIHN0cnVjdCB0aW1ldmFsIHR2X29kZDsKIHN0cnVjdCB0aW1ldmFsIHR2X2RlbHRhOwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJcmV0dXJuIG1zcjsKIH0KIAotdm9pZCBwcmludF9oZWFkZXIoKQordm9pZCBwcmludF9oZWFkZXIodm9pZCkKIHsKIAlpZiAoc2hvd19wa2cpCiAJCWZwcmludGYoc3RkZXJyLCAicGtnICIpOwpAQCAtMTYwLDM5ICsxNjAsMzkgQEAKIAlwdXRjKCdcbicsIHN0ZGVycik7CiB9CiAKLXZvaWQgZHVtcF9wY2MoUENDICpwY2MpCit2b2lkIGR1bXBfY250KHN0cnVjdCBjb3VudGVycyAqY250KQogewotCWZwcmludGYoc3RkZXJyLCAicGFja2FnZTogJWQgIiwgcGNjLT5wa2cpOwotCWZwcmludGYoc3RkZXJyLCAiY29yZTo6ICVkICIsIHBjYy0+Y29yZSk7Ci0JZnByaW50ZihzdGRlcnIsICJDUFU6ICVkICIsIHBjYy0+Y3B1KTsKLQlmcHJpbnRmKHN0ZGVyciwgIlRTQzogJTAxNmxsWFxuIiwgcGNjLT50c2MpOwotCWZwcmludGYoc3RkZXJyLCAiYzM6ICUwMTZsbFhcbiIsIHBjYy0+YzMpOwotCWZwcmludGYoc3RkZXJyLCAiYzY6ICUwMTZsbFhcbiIsIHBjYy0+YzYpOwotCWZwcmludGYoc3RkZXJyLCAiYzc6ICUwMTZsbFhcbiIsIHBjYy0+YzcpOwotCWZwcmludGYoc3RkZXJyLCAiYXBlcmY6ICUwMTZsbFhcbiIsIHBjYy0+YXBlcmYpOwotCWZwcmludGYoc3RkZXJyLCAicGMyOiAlMDE2bGxYXG4iLCBwY2MtPnBjMik7Ci0JZnByaW50ZihzdGRlcnIsICJwYzM6ICUwMTZsbFhcbiIsIHBjYy0+cGMzKTsKLQlmcHJpbnRmKHN0ZGVyciwgInBjNjogJTAxNmxsWFxuIiwgcGNjLT5wYzYpOwotCWZwcmludGYoc3RkZXJyLCAicGM3OiAlMDE2bGxYXG4iLCBwY2MtPnBjNyk7Ci0JZnByaW50ZihzdGRlcnIsICJtc3IweCV4OiAlMDE2bGxYXG4iLCBleHRyYV9tc3Jfb2Zmc2V0LCBwY2MtPmV4dHJhX21zcik7CisJZnByaW50ZihzdGRlcnIsICJwYWNrYWdlOiAlZCAiLCBjbnQtPnBrZyk7CisJZnByaW50ZihzdGRlcnIsICJjb3JlOjogJWQgIiwgY250LT5jb3JlKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkNQVTogJWQgIiwgY250LT5jcHUpOworCWZwcmludGYoc3RkZXJyLCAiVFNDOiAlMDE2bGxYXG4iLCBjbnQtPnRzYyk7CisJZnByaW50ZihzdGRlcnIsICJjMzogJTAxNmxsWFxuIiwgY250LT5jMyk7CisJZnByaW50ZihzdGRlcnIsICJjNjogJTAxNmxsWFxuIiwgY250LT5jNik7CisJZnByaW50ZihzdGRlcnIsICJjNzogJTAxNmxsWFxuIiwgY250LT5jNyk7CisJZnByaW50ZihzdGRlcnIsICJhcGVyZjogJTAxNmxsWFxuIiwgY250LT5hcGVyZik7CisJZnByaW50ZihzdGRlcnIsICJwYzI6ICUwMTZsbFhcbiIsIGNudC0+cGMyKTsKKwlmcHJpbnRmKHN0ZGVyciwgInBjMzogJTAxNmxsWFxuIiwgY250LT5wYzMpOworCWZwcmludGYoc3RkZXJyLCAicGM2OiAlMDE2bGxYXG4iLCBjbnQtPnBjNik7CisJZnByaW50ZihzdGRlcnIsICJwYzc6ICUwMTZsbFhcbiIsIGNudC0+cGM3KTsKKwlmcHJpbnRmKHN0ZGVyciwgIm1zcjB4JXg6ICUwMTZsbFhcbiIsIGV4dHJhX21zcl9vZmZzZXQsIGNudC0+ZXh0cmFfbXNyKTsKIH0KIAotdm9pZCBkdW1wX2xpc3QoUENDICpwY2MpCit2b2lkIGR1bXBfbGlzdChzdHJ1Y3QgY291bnRlcnMgKmNudCkKIHsKLQlwcmludGYoImR1bXBfbGlzdCAweCVwXG4iLCBwY2MpOworCXByaW50ZigiZHVtcF9saXN0IDB4JXBcbiIsIGNudCk7CiAKLQlmb3IgKDsgcGNjOyBwY2MgPSBwY2MtPm5leHQpCi0JCWR1bXBfcGNjKHBjYyk7CisJZm9yICg7IGNudDsgY250ID0gY250LT5uZXh0KQorCQlkdW1wX2NudChjbnQpOwogfQogCi12b2lkIHByaW50X3BjYyhQQ0MgKnApCit2b2lkIHByaW50X2NudChzdHJ1Y3QgY291bnRlcnMgKnApCiB7CiAJZG91YmxlIGludGVydmFsX2Zsb2F0OwogCiAJaW50ZXJ2YWxfZmxvYXQgPSB0dl9kZWx0YS50dl9zZWMgKyB0dl9kZWx0YS50dl91c2VjLzEwMDAwMDAuMDsKIAogCS8qIHRvcG9sb2d5IGNvbHVtbnMsIHByaW50IGJsYW5rcyBvbiAxc3QgKGF2ZXJhZ2UpIGxpbmUgKi8KLQlpZiAocCA9PSBwY2NfYXZlcmFnZSkgeworCWlmIChwID09IGNudF9hdmVyYWdlKSB7CiAJCWlmIChzaG93X3BrZykKIAkJCWZwcmludGYoc3RkZXJyLCAiICAgICIpOwogCQlpZiAoc2hvd19jb3JlKQpAQCAtMjYyLDI0ICsyNjIsMjQgQEAKIAlwdXRjKCdcbicsIHN0ZGVycik7CiB9CiAKLXZvaWQgcHJpbnRfY291bnRlcnMoUENDICpjbnQpCit2b2lkIHByaW50X2NvdW50ZXJzKHN0cnVjdCBjb3VudGVycyAqY291bnRlcnMpCiB7Ci0JUENDICpwY2M7CisJc3RydWN0IGNvdW50ZXJzICpjbnQ7CiAKIAlwcmludF9oZWFkZXIoKTsKIAogCWlmIChudW1fY3B1cyA+IDEpCi0JCXByaW50X3BjYyhwY2NfYXZlcmFnZSk7CisJCXByaW50X2NudChjbnRfYXZlcmFnZSk7CiAKLQlmb3IgKHBjYyA9IGNudDsgcGNjICE9IE5VTEw7IHBjYyA9IHBjYy0+bmV4dCkKLQkJcHJpbnRfcGNjKHBjYyk7CisJZm9yIChjbnQgPSBjb3VudGVyczsgY250ICE9IE5VTEw7IGNudCA9IGNudC0+bmV4dCkKKwkJcHJpbnRfY250KGNudCk7CiAKIH0KIAogI2RlZmluZSBTVUJUUkFDVF9DT1VOVEVSKGFmdGVyLCBiZWZvcmUsIGRlbHRhKSAoZGVsdGEgPSAoYWZ0ZXIgLSBiZWZvcmUpLCAoYmVmb3JlID4gYWZ0ZXIpKQogCi0KLWludCBjb21wdXRlX2RlbHRhKFBDQyAqYWZ0ZXIsIFBDQyAqYmVmb3JlLCBQQ0MgKmRlbHRhKQoraW50IGNvbXB1dGVfZGVsdGEoc3RydWN0IGNvdW50ZXJzICphZnRlciwKKwlzdHJ1Y3QgY291bnRlcnMgKmJlZm9yZSwgc3RydWN0IGNvdW50ZXJzICpkZWx0YSkKIHsKIAlpbnQgZXJyb3JzID0gMDsKIAlpbnQgcGVyZl9lcnIgPSAwOwpAQCAtMzkxLDIwICszOTEsMjAgQEAKIAkJZGVsdGEtPmV4dHJhX21zciA9IGFmdGVyLT5leHRyYV9tc3I7CiAJCWlmIChlcnJvcnMpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAiRVJST1IgY3B1JWQgYmVmb3JlOlxuIiwgYmVmb3JlLT5jcHUpOwotCQkJZHVtcF9wY2MoYmVmb3JlKTsKKwkJCWR1bXBfY250KGJlZm9yZSk7CiAJCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGNwdSVkIGFmdGVyOlxuIiwgYmVmb3JlLT5jcHUpOwotCQkJZHVtcF9wY2MoYWZ0ZXIpOworCQkJZHVtcF9jbnQoYWZ0ZXIpOwogCQkJZXJyb3JzID0gMDsKIAkJfQogCX0KIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjb21wdXRlX2F2ZXJhZ2UoUENDICpkZWx0YSwgUENDICphdmcpCit2b2lkIGNvbXB1dGVfYXZlcmFnZShzdHJ1Y3QgY291bnRlcnMgKmRlbHRhLCBzdHJ1Y3QgY291bnRlcnMgKmF2ZykKIHsKLQlQQ0MgKnN1bTsKKwlzdHJ1Y3QgY291bnRlcnMgKnN1bTsKIAotCXN1bSA9IGNhbGxvYygxLCBzaXplb2YoUENDKSk7CisJc3VtID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY291bnRlcnMpKTsKIAlpZiAoc3VtID09IE5VTEwpIHsKIAkJcGVycm9yKCJjYWxsb2Mgc3VtIik7CiAJCWV4aXQoMSk7CkBAIC00MzgsMzUgKzQzOCwzNCBAQAogCWZyZWUoc3VtKTsKIH0KIAotdm9pZCBnZXRfY291bnRlcnMoUENDICpwY2MpCit2b2lkIGdldF9jb3VudGVycyhzdHJ1Y3QgY291bnRlcnMgKmNudCkKIHsKLQlmb3IgKCA7IHBjYzsgcGNjID0gcGNjLT5uZXh0KSB7Ci0JCXBjYy0+dHNjID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1RTQyk7CisJZm9yICggOyBjbnQ7IGNudCA9IGNudC0+bmV4dCkgeworCQljbnQtPnRzYyA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9UU0MpOwogCQlpZiAoZG9fbmhtX2NzdGF0ZXMpCi0JCQlwY2MtPmMzID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX0NPUkVfQzNfUkVTSURFTkNZKTsKKwkJCWNudC0+YzMgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfQ09SRV9DM19SRVNJREVOQ1kpOwogCQlpZiAoZG9fbmhtX2NzdGF0ZXMpCi0JCQlwY2MtPmM2ID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX0NPUkVfQzZfUkVTSURFTkNZKTsKKwkJCWNudC0+YzYgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfQ09SRV9DNl9SRVNJREVOQ1kpOwogCQlpZiAoZG9fc25iX2NzdGF0ZXMpCi0JCQlwY2MtPmM3ID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX0NPUkVfQzdfUkVTSURFTkNZKTsKKwkJCWNudC0+YzcgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfQ09SRV9DN19SRVNJREVOQ1kpOwogCQlpZiAoaGFzX2FwZXJmKQotCQkJcGNjLT5hcGVyZiA9IGdldF9tc3IocGNjLT5jcHUsIE1TUl9BUEVSRik7CisJCQljbnQtPmFwZXJmID0gZ2V0X21zcihjbnQtPmNwdSwgTVNSX0FQRVJGKTsKIAkJaWYgKGhhc19hcGVyZikKLQkJCXBjYy0+bXBlcmYgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfTVBFUkYpOworCQkJY250LT5tcGVyZiA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9NUEVSRik7CiAJCWlmIChkb19zbmJfY3N0YXRlcykKLQkJCXBjYy0+cGMyID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1BLR19DMl9SRVNJREVOQ1kpOworCQkJY250LT5wYzIgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfUEtHX0MyX1JFU0lERU5DWSk7CiAJCWlmIChkb19uaG1fY3N0YXRlcykKLQkJCXBjYy0+cGMzID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1BLR19DM19SRVNJREVOQ1kpOworCQkJY250LT5wYzMgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfUEtHX0MzX1JFU0lERU5DWSk7CiAJCWlmIChkb19uaG1fY3N0YXRlcykKLQkJCXBjYy0+cGM2ID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1BLR19DNl9SRVNJREVOQ1kpOworCQkJY250LT5wYzYgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfUEtHX0M2X1JFU0lERU5DWSk7CiAJCWlmIChkb19zbmJfY3N0YXRlcykKLQkJCXBjYy0+cGM3ID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX1BLR19DN19SRVNJREVOQ1kpOworCQkJY250LT5wYzcgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfUEtHX0M3X1JFU0lERU5DWSk7CiAJCWlmIChleHRyYV9tc3Jfb2Zmc2V0KQotCQkJcGNjLT5leHRyYV9tc3IgPSBnZXRfbXNyKHBjYy0+Y3B1LCBleHRyYV9tc3Jfb2Zmc2V0KTsKKwkJCWNudC0+ZXh0cmFfbXNyID0gZ2V0X21zcihjbnQtPmNwdSwgZXh0cmFfbXNyX29mZnNldCk7CiAJfQogfQogCi0KLXZvaWQgcHJpbnRfbmVoYWxlbV9pbmZvKCkKK3ZvaWQgcHJpbnRfbmVoYWxlbV9pbmZvKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIG1zcjsKIAl1bnNpZ25lZCBpbnQgcmF0aW87CkBAIC01MTQsMzggKzUxMywzOCBAQAogCiB9CiAKLXZvaWQgZnJlZV9jb3VudGVyX2xpc3QoUENDICpsaXN0KQordm9pZCBmcmVlX2NvdW50ZXJfbGlzdChzdHJ1Y3QgY291bnRlcnMgKmxpc3QpCiB7Ci0JUENDICpwOworCXN0cnVjdCBjb3VudGVycyAqcDsKIAogCWZvciAocCA9IGxpc3Q7IHA7ICkgewotCQlQQ0MgKmZyZWVfbWU7CisJCXN0cnVjdCBjb3VudGVycyAqZnJlZV9tZTsKIAogCQlmcmVlX21lID0gcDsKIAkJcCA9IHAtPm5leHQ7CiAJCWZyZWUoZnJlZV9tZSk7CiAJfQotCXJldHVybjsKIH0KIAogdm9pZCBmcmVlX2FsbF9jb3VudGVycyh2b2lkKQogewotCWZyZWVfY291bnRlcl9saXN0KHBjY19ldmVuKTsKLQlwY2NfZXZlbiA9IE5VTEw7CisJZnJlZV9jb3VudGVyX2xpc3QoY250X2V2ZW4pOworCWNudF9ldmVuID0gTlVMTDsKIAotCWZyZWVfY291bnRlcl9saXN0KHBjY19vZGQpOwotCXBjY19vZGQgPSBOVUxMOworCWZyZWVfY291bnRlcl9saXN0KGNudF9vZGQpOworCWNudF9vZGQgPSBOVUxMOwogCi0JZnJlZV9jb3VudGVyX2xpc3QocGNjX2RlbHRhKTsKLQlwY2NfZGVsdGEgPSBOVUxMOworCWZyZWVfY291bnRlcl9saXN0KGNudF9kZWx0YSk7CisJY250X2RlbHRhID0gTlVMTDsKIAotCWZyZWVfY291bnRlcl9saXN0KHBjY19hdmVyYWdlKTsKLQlwY2NfYXZlcmFnZSA9IE5VTEw7CisJZnJlZV9jb3VudGVyX2xpc3QoY250X2F2ZXJhZ2UpOworCWNudF9hdmVyYWdlID0gTlVMTDsKIH0KIAotdm9pZCBpbnNlcnRfY3B1X2NvdW50ZXJzKFBDQyAqKmxpc3QsIFBDQyAqbmV3KQordm9pZCBpbnNlcnRfY291bnRlcnMoc3RydWN0IGNvdW50ZXJzICoqbGlzdCwKKwlzdHJ1Y3QgY291bnRlcnMgKm5ldykKIHsKLQlQQ0MgKnByZXY7CisJc3RydWN0IGNvdW50ZXJzICpwcmV2OwogCiAJLyoKIAkgKiBsaXN0IHdhcyBlbXB0eQpAQCAtNTk0LDE4ICs1OTMsMTYgQEAKIAkgKi8KIAluZXctPm5leHQgPSBwcmV2LT5uZXh0OwogCXByZXYtPm5leHQgPSBuZXc7Ci0KLQlyZXR1cm47CiB9CiAKLXZvaWQgYWxsb2NfbmV3X2NwdV9jb3VudGVycyhpbnQgcGtnLCBpbnQgY29yZSwgaW50IGNwdSkKK3ZvaWQgYWxsb2NfbmV3X2NvdW50ZXJzKGludCBwa2csIGludCBjb3JlLCBpbnQgY3B1KQogewotCVBDQyAqbmV3OworCXN0cnVjdCBjb3VudGVycyAqbmV3OwogCiAJaWYgKHZlcmJvc2UgPiAxKQogCQlwcmludGYoInBrZyVkIGNvcmUlZCwgY3B1JWRcbiIsIHBrZywgY29yZSwgY3B1KTsKIAotCW5ldyA9IChQQ0MgKiljYWxsb2MoMSwgc2l6ZW9mKFBDQykpOworCW5ldyA9IChzdHJ1Y3QgY291bnRlcnMgKiljYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb3VudGVycykpOwogCWlmIChuZXcgPT0gTlVMTCkgewogCQlwZXJyb3IoImNhbGxvYyIpOwogCQlleGl0KDEpOwpAQCAtNjEzLDkgKzYxMCwxMCBAQAogCW5ldy0+cGtnID0gcGtnOwogCW5ldy0+Y29yZSA9IGNvcmU7CiAJbmV3LT5jcHUgPSBjcHU7Ci0JaW5zZXJ0X2NwdV9jb3VudGVycygmcGNjX29kZCwgbmV3KTsKKwlpbnNlcnRfY291bnRlcnMoJmNudF9vZGQsIG5ldyk7CiAKLQluZXcgPSAoUENDICopY2FsbG9jKDEsIHNpemVvZihQQ0MpKTsKKwluZXcgPSAoc3RydWN0IGNvdW50ZXJzICopY2FsbG9jKDEsCisJCXNpemVvZihzdHJ1Y3QgY291bnRlcnMpKTsKIAlpZiAobmV3ID09IE5VTEwpIHsKIAkJcGVycm9yKCJjYWxsb2MiKTsKIAkJZXhpdCgxKTsKQEAgLTYyMyw5ICs2MjEsOSBAQAogCW5ldy0+cGtnID0gcGtnOwogCW5ldy0+Y29yZSA9IGNvcmU7CiAJbmV3LT5jcHUgPSBjcHU7Ci0JaW5zZXJ0X2NwdV9jb3VudGVycygmcGNjX2V2ZW4sIG5ldyk7CisJaW5zZXJ0X2NvdW50ZXJzKCZjbnRfZXZlbiwgbmV3KTsKIAotCW5ldyA9IChQQ0MgKiljYWxsb2MoMSwgc2l6ZW9mKFBDQykpOworCW5ldyA9IChzdHJ1Y3QgY291bnRlcnMgKiljYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb3VudGVycykpOwogCWlmIChuZXcgPT0gTlVMTCkgewogCQlwZXJyb3IoImNhbGxvYyIpOwogCQlleGl0KDEpOwpAQCAtNjMzLDkgKzYzMSw5IEBACiAJbmV3LT5wa2cgPSBwa2c7CiAJbmV3LT5jb3JlID0gY29yZTsKIAluZXctPmNwdSA9IGNwdTsKLQlpbnNlcnRfY3B1X2NvdW50ZXJzKCZwY2NfZGVsdGEsIG5ldyk7CisJaW5zZXJ0X2NvdW50ZXJzKCZjbnRfZGVsdGEsIG5ldyk7CiAKLQluZXcgPSAoUENDICopY2FsbG9jKDEsIHNpemVvZihQQ0MpKTsKKwluZXcgPSAoc3RydWN0IGNvdW50ZXJzICopY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY291bnRlcnMpKTsKIAlpZiAobmV3ID09IE5VTEwpIHsKIAkJcGVycm9yKCJjYWxsb2MiKTsKIAkJZXhpdCgxKTsKQEAgLTY0Myw3ICs2NDEsNyBAQAogCW5ldy0+cGtnID0gcGtnOwogCW5ldy0+Y29yZSA9IGNvcmU7CiAJbmV3LT5jcHUgPSBjcHU7Ci0JcGNjX2F2ZXJhZ2UgPSBuZXc7CisJY250X2F2ZXJhZ2UgPSBuZXc7CiB9CiAKIGludCBnZXRfcGh5c2ljYWxfcGFja2FnZV9pZChpbnQgY3B1KQpAQCAtNzE5LDcgKzcxNyw3IEBACiB7CiAJcHJpbnRmKCJ0dXJib3N0YXQ6IHRvcG9sb2d5IGNoYW5nZWQsIHJlLWluaXRpYWxpemluZy5cbiIpOwogCWZyZWVfYWxsX2NvdW50ZXJzKCk7Ci0JbnVtX2NwdXMgPSBmb3JfYWxsX2NwdXMoYWxsb2NfbmV3X2NwdV9jb3VudGVycyk7CisJbnVtX2NwdXMgPSBmb3JfYWxsX2NwdXMoYWxsb2NfbmV3X2NvdW50ZXJzKTsKIAluZWVkX3JlaW5pdGlhbGl6ZSA9IDA7CiAJcHJpbnRmKCJudW1fY3B1cyBpcyBub3cgJWRcbiIsIG51bV9jcHVzKTsKIH0KQEAgLTcyOCw3ICs3MjYsNyBAQAogLyoKICAqIGNoZWNrIHRvIHNlZSBpZiBhIGNwdSBjYW1lIG9uLWxpbmUKICAqLwotdm9pZCB2ZXJpZnlfbnVtX2NwdXMoKQordm9pZCB2ZXJpZnlfbnVtX2NwdXModm9pZCkKIHsKIAlpbnQgbmV3X251bV9jcHVzOwogCkBAIC03NDAsMTQgKzczOCwxMiBAQAogCQkJCW51bV9jcHVzLCBuZXdfbnVtX2NwdXMpOwogCQluZWVkX3JlaW5pdGlhbGl6ZSA9IDE7CiAJfQotCi0JcmV0dXJuOwogfQogCiB2b2lkIHR1cmJvc3RhdF9sb29wKCkKIHsKIHJlc3RhcnQ6Ci0JZ2V0X2NvdW50ZXJzKHBjY19ldmVuKTsKKwlnZXRfY291bnRlcnMoY250X2V2ZW4pOwogCWdldHRpbWVvZmRheSgmdHZfZXZlbiwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpOwogCiAJd2hpbGUgKDEpIHsKQEAgLTc1NywyNCArNzUzLDI0IEBACiAJCQlnb3RvIHJlc3RhcnQ7CiAJCX0KIAkJc2xlZXAoaW50ZXJ2YWxfc2VjKTsKLQkJZ2V0X2NvdW50ZXJzKHBjY19vZGQpOworCQlnZXRfY291bnRlcnMoY250X29kZCk7CiAJCWdldHRpbWVvZmRheSgmdHZfb2RkLCAoc3RydWN0IHRpbWV6b25lICopTlVMTCk7CiAKLQkJY29tcHV0ZV9kZWx0YShwY2Nfb2RkLCBwY2NfZXZlbiwgcGNjX2RlbHRhKTsKKwkJY29tcHV0ZV9kZWx0YShjbnRfb2RkLCBjbnRfZXZlbiwgY250X2RlbHRhKTsKIAkJdGltZXJzdWIoJnR2X29kZCwgJnR2X2V2ZW4sICZ0dl9kZWx0YSk7Ci0JCWNvbXB1dGVfYXZlcmFnZShwY2NfZGVsdGEsIHBjY19hdmVyYWdlKTsKLQkJcHJpbnRfY291bnRlcnMocGNjX2RlbHRhKTsKKwkJY29tcHV0ZV9hdmVyYWdlKGNudF9kZWx0YSwgY250X2F2ZXJhZ2UpOworCQlwcmludF9jb3VudGVycyhjbnRfZGVsdGEpOwogCQlpZiAobmVlZF9yZWluaXRpYWxpemUpIHsKIAkJCXJlX2luaXRpYWxpemUoKTsKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQogCQlzbGVlcChpbnRlcnZhbF9zZWMpOwotCQlnZXRfY291bnRlcnMocGNjX2V2ZW4pOworCQlnZXRfY291bnRlcnMoY250X2V2ZW4pOwogCQlnZXR0aW1lb2ZkYXkoJnR2X2V2ZW4sIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKTsKLQkJY29tcHV0ZV9kZWx0YShwY2NfZXZlbiwgcGNjX29kZCwgcGNjX2RlbHRhKTsKKwkJY29tcHV0ZV9kZWx0YShjbnRfZXZlbiwgY250X29kZCwgY250X2RlbHRhKTsKIAkJdGltZXJzdWIoJnR2X2V2ZW4sICZ0dl9vZGQsICZ0dl9kZWx0YSk7Ci0JCWNvbXB1dGVfYXZlcmFnZShwY2NfZGVsdGEsIHBjY19hdmVyYWdlKTsKLQkJcHJpbnRfY291bnRlcnMocGNjX2RlbHRhKTsKKwkJY29tcHV0ZV9hdmVyYWdlKGNudF9kZWx0YSwgY250X2F2ZXJhZ2UpOworCQlwcmludF9jb3VudGVycyhjbnRfZGVsdGEpOwogCX0KIH0KIApAQCAtODkyLDcgKzg4OCw3IEBACiAJICogdGhpcyBjaGVjayBpcyB2YWxpZCBmb3IgYm90aCBJbnRlbCBhbmQgQU1ECiAJICovCiAJYXNtKCJjcHVpZCIgOiAiPWEiIChlYXgpLCAiPWIiIChlYngpLCAiPWMiIChlY3gpLCAiPWQiIChlZHgpIDogImEiICgweDgwMDAwMDA3KSk7Ci0JaGFzX2ludmFyaWFudF90c2MgPSBlZHggJiYgKDEgPDwgOCk7CisJaGFzX2ludmFyaWFudF90c2MgPSBlZHggJiAoMSA8PCA4KTsKIAogCWlmICghaGFzX2ludmFyaWFudF90c2MpIHsKIAkJZnByaW50ZihzdGRlcnIsICJObyBpbnZhcmlhbnQgVFNDXG4iKTsKQEAgLTkwNSw3ICs5MDEsNyBAQAogCSAqLwogCiAJYXNtKCJjcHVpZCIgOiAiPWEiIChlYXgpLCAiPWIiIChlYngpLCAiPWMiIChlY3gpLCAiPWQiIChlZHgpIDogImEiICgweDYpKTsKLQloYXNfYXBlcmYgPSBlY3ggJiYgKDEgPDwgMCk7CisJaGFzX2FwZXJmID0gZWN4ICYgKDEgPDwgMCk7CiAJaWYgKCFoYXNfYXBlcmYpIHsKIAkJZnByaW50ZihzdGRlcnIsICJObyBBUEVSRiBNU1JcbiIpOwogCQlleGl0KDEpOwpAQCAtOTUyLDcgKzk0OCw3IEBACiAJY2hlY2tfZGV2X21zcigpOwogCWNoZWNrX3N1cGVyX3VzZXIoKTsKIAotCW51bV9jcHVzID0gZm9yX2FsbF9jcHVzKGFsbG9jX25ld19jcHVfY291bnRlcnMpOworCW51bV9jcHVzID0gZm9yX2FsbF9jcHVzKGFsbG9jX25ld19jb3VudGVycyk7CiAKIAlpZiAodmVyYm9zZSkKIAkJcHJpbnRfbmVoYWxlbV9pbmZvKCk7CkBAIC05NjIsNyArOTU4LDcgQEAKIHsKIAlpbnQgcmV0dmFsOwogCXBpZF90IGNoaWxkX3BpZDsKLQlnZXRfY291bnRlcnMocGNjX2V2ZW4pOworCWdldF9jb3VudGVycyhjbnRfZXZlbik7CiAJZ2V0dGltZW9mZGF5KCZ0dl9ldmVuLCAoc3RydWN0IHRpbWV6b25lICopTlVMTCk7CiAKIAljaGlsZF9waWQgPSBmb3JrKCk7CkBAIC05ODUsMTQgKzk4MSwxNCBAQAogCQkJZXhpdCgxKTsKIAkJfQogCX0KLQlnZXRfY291bnRlcnMocGNjX29kZCk7CisJZ2V0X2NvdW50ZXJzKGNudF9vZGQpOwogCWdldHRpbWVvZmRheSgmdHZfb2RkLCAoc3RydWN0IHRpbWV6b25lICopTlVMTCk7Ci0JcmV0dmFsID0gY29tcHV0ZV9kZWx0YShwY2Nfb2RkLCBwY2NfZXZlbiwgcGNjX2RlbHRhKTsKKwlyZXR2YWwgPSBjb21wdXRlX2RlbHRhKGNudF9vZGQsIGNudF9ldmVuLCBjbnRfZGVsdGEpOwogCiAJdGltZXJzdWIoJnR2X29kZCwgJnR2X2V2ZW4sICZ0dl9kZWx0YSk7Ci0JY29tcHV0ZV9hdmVyYWdlKHBjY19kZWx0YSwgcGNjX2F2ZXJhZ2UpOworCWNvbXB1dGVfYXZlcmFnZShjbnRfZGVsdGEsIGNudF9hdmVyYWdlKTsKIAlpZiAoIXJldHZhbCkKLQkJcHJpbnRfY291bnRlcnMocGNjX2RlbHRhKTsKKwkJcHJpbnRfY291bnRlcnMoY250X2RlbHRhKTsKIAogCWZwcmludGYoc3RkZXJyLCAiJS42ZiBzZWNcbiIsIHR2X2RlbHRhLnR2X3NlYyArIHR2X2RlbHRhLnR2X3VzZWMvMTAwMDAwMC4wKTs7CiAK