ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGE3ZWE4ZTMuLmQ3ODM1OWYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtNTE4LDYgKzUxOCwxNCBAQAogRTogemFiQHphYmJvLm5ldAogRDogbWFlc3RybyBwY2kgc291bmQKIAorTTogRGF2aWQgQnJvd25lbGwKK0Q6IEtlcm5lbCBlbmdpbmVlciwgbWVudG9yLCBhbmQgZnJpZW5kLiAgTWFpbnRhaW5lZCBVU0IgRUhDSSBhbmQKK0Q6IGdhZGdldCBsYXllcnMsIFNQSSBzdWJzeXN0ZW0sIEdQSU8gc3Vic3lzdGVtLCBhbmQgbW9yZSB0aGFuIGEgZmV3CitEOiBkZXZpY2UgZHJpdmVycy4gIEhpcyBlbmNvdXJhZ2VtZW50IGFsc28gaGVscGVkIG1hbnkgZW5naW5lZXJzIGdldAorRDogc3RhcnRlZCB3b3JraW5nIG9uIHRoZSBMaW51eCBrZXJuZWwuICBEYXZpZCBwYXNzZWQgYXdheSBpbiBlYXJseQorRDogMjAxMSwgYW5kIHdpbGwgYmUgZ3JlYXRseSBtaXNzZWQuCitXOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMS80LzUvMzYKKwogTjogR2FyeSBCcnViYWtlcgogRTogeGF2eWVyQGl4Lm5ldGNvbS5jb20KIEQ6IFVTQiBTZXJpYWwgRW1wZWcgRW1wZWctY2FyIE1hcmsgSS9JSSBEcml2ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtYmFja2xpZ2h0LWRyaXZlci1hZHA4ODcwIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1iYWNrbGlnaHQtZHJpdmVyLWFkcDg4NzAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExMWRiZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtYmFja2xpZ2h0LWRyaXZlci1hZHA4ODcwCkBAIC0wLDAgKzEsNTYgQEAKK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi88YW1iaWVudCBsaWdodCB6b25lPl9tYXgKK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9sMV9kYXlsaWdodF9tYXgKK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9sMl9icmlnaHRfbWF4CitXaGF0OgkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vbDNfb2ZmaWNlX21heAorV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L2w0X2luZG9vcl9tYXgKK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9sNV9kYXJrX21heAorRGF0ZToJCU1haSAyMDExCitLZXJuZWxWZXJzaW9uOgkyLjYuNDAKK0NvbnRhY3Q6CWRldmljZS1kcml2ZXJzLWRldmVsQGJsYWNrZmluLnVjbGludXgub3JnCitEZXNjcmlwdGlvbjoKKwkJQ29udHJvbCB0aGUgbWF4aW11bSBicmlnaHRuZXNzIGZvciA8YW1iaWVudCBsaWdodCB6b25lPgorCQlvbiB0aGlzIDxiYWNrbGlnaHQ+LiBWYWx1ZXMgYXJlIGJldHdlZW4gMCBhbmQgMTI3LiBUaGlzIGZpbGUKKwkJd2lsbCBhbHNvIHNob3cgdGhlIGJyaWdodG5lc3MgbGV2ZWwgc3RvcmVkIGZvciB0aGlzCisJCTxhbWJpZW50IGxpZ2h0IHpvbmU+LgorCitXaGF0OgkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vPGFtYmllbnQgbGlnaHQgem9uZT5fZGltCitXaGF0OgkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vbDJfYnJpZ2h0X2RpbQorV2hhdDoJCS9zeXMvY2xhc3MvYmFja2xpZ2h0LzxiYWNrbGlnaHQ+L2wzX29mZmljZV9kaW0KK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9sNF9pbmRvb3JfZGltCitXaGF0OgkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vbDVfZGFya19kaW0KK0RhdGU6CQlNYWkgMjAxMQorS2VybmVsVmVyc2lvbjoJMi42LjQwCitDb250YWN0OglkZXZpY2UtZHJpdmVycy1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZworRGVzY3JpcHRpb246CisJCUNvbnRyb2wgdGhlIGRpbSBicmlnaHRuZXNzIGZvciA8YW1iaWVudCBsaWdodCB6b25lPgorCQlvbiB0aGlzIDxiYWNrbGlnaHQ+LiBWYWx1ZXMgYXJlIGJldHdlZW4gMCBhbmQgMTI3LCB0eXBpY2FsbHkKKwkJc2V0IHRvIDAuIEZ1bGwgb2ZmIHdoZW4gdGhlIGJhY2tsaWdodCBpcyBkaXNhYmxlZC4KKwkJVGhpcyBmaWxlIHdpbGwgYWxzbyBzaG93IHRoZSBkaW0gYnJpZ2h0bmVzcyBsZXZlbCBzdG9yZWQgZm9yCisJCXRoaXMgPGFtYmllbnQgbGlnaHQgem9uZT4uCisKK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9hbWJpZW50X2xpZ2h0X2xldmVsCitEYXRlOgkJTWFpIDIwMTEKK0tlcm5lbFZlcnNpb246CTIuNi40MAorQ29udGFjdDoJZGV2aWNlLWRyaXZlcnMtZGV2ZWxAYmxhY2tmaW4udWNsaW51eC5vcmcKK0Rlc2NyaXB0aW9uOgorCQlHZXQgY29udmVyc2lvbiB2YWx1ZSBvZiB0aGUgbGlnaHQgc2Vuc29yLgorCQlUaGlzIHZhbHVlIGlzIHVwZGF0ZWQgZXZlcnkgODAgbXMgKHdoZW4gdGhlIGxpZ2h0IHNlbnNvcgorCQlpcyBlbmFibGVkKS4gUmV0dXJucyBpbnRlZ2VyIGJldHdlZW4gMCAoZGFyaykgYW5kCisJCTgwMDAgKG1heCBhbWJpZW50IGJyaWdodG5lc3MpCisKK1doYXQ6CQkvc3lzL2NsYXNzL2JhY2tsaWdodC88YmFja2xpZ2h0Pi9hbWJpZW50X2xpZ2h0X3pvbmUKK0RhdGU6CQlNYWkgMjAxMQorS2VybmVsVmVyc2lvbjoJMi42LjQwCitDb250YWN0OglkZXZpY2UtZHJpdmVycy1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZworRGVzY3JpcHRpb246CisJCUdldC9TZXQgY3VycmVudCBhbWJpZW50IGxpZ2h0IHpvbmUuIFJlYWRpbmcgcmV0dXJucworCQlpbnRlZ2VyIGJldHdlZW4gMS4uNSAoMSA9IGRheWxpZ2h0LCAyID0gYnJpZ2h0LCAuLi4sIDUgPSBkYXJrKS4KKwkJV3JpdGluZyBhIHZhbHVlIGJldHdlZW4gMS4uNSBmb3JjZXMgdGhlIGJhY2tsaWdodCBjb250cm9sbGVyCisJCXRvIGVudGVyIHRoZSBjb3JyZXNwb25kaW5nIGFtYmllbnQgbGlnaHQgem9uZS4KKwkJV3JpdGluZyAwIHJldHVybnMgdG8gbm9ybWFsL2F1dG9tYXRpYyBhbWJpZW50IGxpZ2h0IGxldmVsCisJCW9wZXJhdGlvbi4gVGhlIGFtYmllbnQgbGlnaHQgc2Vuc2luZyBmZWF0dXJlIG9uIHRoZXNlIGRldmljZXMKKwkJaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBBUEkgZG9jdW1lbnRlZCBpbgorCQlEb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtY2xhc3MtYmFja2xpZ2h0LgorCQlJdCBjYW4gYmUgZW5hYmxlZCBieSB3cml0aW5nIHRoZSB2YWx1ZSBzdG9yZWQgaW4KKwkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vbWF4X2JyaWdodG5lc3MgdG8KKwkJL3N5cy9jbGFzcy9iYWNrbGlnaHQvPGJhY2tsaWdodD4vYnJpZ2h0bmVzcy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvY2dyb3Vwc3RhdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL2Nncm91cHN0YXRzLnR4dAppbmRleCBlZGE0MGZkLi5kMTZhOTg0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvY2dyb3Vwc3RhdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9jZ3JvdXBzdGF0cy50eHQKQEAgLTIxLDcgKzIxLDcgQEAKIFRvIGV4dHJhY3QgY2dyb3VwIHN0YXRpc3RpY3MgYSB1dGlsaXR5IHZlcnkgc2ltaWxhciB0byBnZXRkZWxheXMuYwogaGFzIGJlZW4gZGV2ZWxvcGVkLCB0aGUgc2FtcGxlIG91dHB1dCBvZiB0aGUgdXRpbGl0eSBpcyBzaG93biBiZWxvdwogCi1+L2JhbGJpci9jZ3JvdXBzdGF0cyAjIC4vZ2V0ZGVsYXlzICAtQyAiL2Nncm91cC9hIgorfi9iYWxiaXIvY2dyb3Vwc3RhdHMgIyAuL2dldGRlbGF5cyAgLUMgIi9zeXMvZnMvY2dyb3VwL2EiCiBzbGVlcGluZyAxLCBibG9ja2VkIDAsIHJ1bm5pbmcgMSwgc3RvcHBlZCAwLCB1bmludGVycnVwdGlibGUgMAotfi9iYWxiaXIvY2dyb3Vwc3RhdHMgIyAuL2dldGRlbGF5cyAgLUMgIi9jZ3JvdXAiCit+L2JhbGJpci9jZ3JvdXBzdGF0cyAjIC4vZ2V0ZGVsYXlzICAtQyAiL3N5cy9mcy9jZ3JvdXAiCiBzbGVlcGluZyAxNTUsIGJsb2NrZWQgMCwgcnVubmluZyAxLCBzdG9wcGVkIDAsIHVuaW50ZXJydXB0aWJsZSAyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvYmxraW8tY29udHJvbGxlci50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvYmxraW8tY29udHJvbGxlci50eHQKaW5kZXggNDY1MzUxZC4uY2Q0NWM4ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Jsa2lvLWNvbnRyb2xsZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9ibGtpby1jb250cm9sbGVyLnR4dApAQCAtMjgsMTYgKzI4LDE5IEBACiAtIEVuYWJsZSBncm91cCBzY2hlZHVsaW5nIGluIENGUQogCUNPTkZJR19DRlFfR1JPVVBfSU9TQ0hFRD15CiAKLS0gQ29tcGlsZSBhbmQgYm9vdCBpbnRvIGtlcm5lbCBhbmQgbW91bnQgSU8gY29udHJvbGxlciAoYmxraW8pLgorLSBDb21waWxlIGFuZCBib290IGludG8ga2VybmVsIGFuZCBtb3VudCBJTyBjb250cm9sbGVyIChibGtpbyk7IHNlZQorICBjZ3JvdXBzLnR4dCwgV2h5IGFyZSBjZ3JvdXBzIG5lZWRlZD8uCiAKLQltb3VudCAtdCBjZ3JvdXAgLW8gYmxraW8gbm9uZSAvY2dyb3VwCisJbW91bnQgLXQgdG1wZnMgY2dyb3VwX3Jvb3QgL3N5cy9mcy9jZ3JvdXAKKwlta2RpciAvc3lzL2ZzL2Nncm91cC9ibGtpbworCW1vdW50IC10IGNncm91cCAtbyBibGtpbyBub25lIC9zeXMvZnMvY2dyb3VwL2Jsa2lvCiAKIC0gQ3JlYXRlIHR3byBjZ3JvdXBzCi0JbWtkaXIgLXAgL2Nncm91cC90ZXN0MS8gL2Nncm91cC90ZXN0MgorCW1rZGlyIC1wIC9zeXMvZnMvY2dyb3VwL2Jsa2lvL3Rlc3QxLyAvc3lzL2ZzL2Nncm91cC9ibGtpby90ZXN0MgogCiAtIFNldCB3ZWlnaHRzIG9mIGdyb3VwIHRlc3QxIGFuZCB0ZXN0MgotCWVjaG8gMTAwMCA+IC9jZ3JvdXAvdGVzdDEvYmxraW8ud2VpZ2h0Ci0JZWNobyA1MDAgPiAvY2dyb3VwL3Rlc3QyL2Jsa2lvLndlaWdodAorCWVjaG8gMTAwMCA+IC9zeXMvZnMvY2dyb3VwL2Jsa2lvL3Rlc3QxL2Jsa2lvLndlaWdodAorCWVjaG8gNTAwID4gL3N5cy9mcy9jZ3JvdXAvYmxraW8vdGVzdDIvYmxraW8ud2VpZ2h0CiAKIC0gQ3JlYXRlIHR3byBzYW1lIHNpemUgZmlsZXMgKHNheSA1MTJNQiBlYWNoKSBvbiBzYW1lIGRpc2sgKGZpbGUxLCBmaWxlMikgYW5kCiAgIGxhdW5jaCB0d28gZGQgdGhyZWFkcyBpbiBkaWZmZXJlbnQgY2dyb3VwIHRvIHJlYWQgdGhvc2UgZmlsZXMuCkBAIC00NiwxMiArNDksMTIgQEAKIAllY2hvIDMgPiAvcHJvYy9zeXMvdm0vZHJvcF9jYWNoZXMKIAogCWRkIGlmPS9tbnQvc2RiL3plcm9maWxlMSBvZj0vZGV2L251bGwgJgotCWVjaG8gJCEgPiAvY2dyb3VwL3Rlc3QxL3Rhc2tzCi0JY2F0IC9jZ3JvdXAvdGVzdDEvdGFza3MKKwllY2hvICQhID4gL3N5cy9mcy9jZ3JvdXAvYmxraW8vdGVzdDEvdGFza3MKKwljYXQgL3N5cy9mcy9jZ3JvdXAvYmxraW8vdGVzdDEvdGFza3MKIAogCWRkIGlmPS9tbnQvc2RiL3plcm9maWxlMiBvZj0vZGV2L251bGwgJgotCWVjaG8gJCEgPiAvY2dyb3VwL3Rlc3QyL3Rhc2tzCi0JY2F0IC9jZ3JvdXAvdGVzdDIvdGFza3MKKwllY2hvICQhID4gL3N5cy9mcy9jZ3JvdXAvYmxraW8vdGVzdDIvdGFza3MKKwljYXQgL3N5cy9mcy9jZ3JvdXAvYmxraW8vdGVzdDIvdGFza3MKIAogLSBBdCBtYWNybyBsZXZlbCwgZmlyc3QgZGQgc2hvdWxkIGZpbmlzaCBmaXJzdC4gVG8gZ2V0IG1vcmUgcHJlY2lzZSBkYXRhLCBrZWVwCiAgIG9uIGxvb2tpbmcgYXQgKHdpdGggdGhlIGhlbHAgb2Ygc2NyaXB0KSwgYXQgYmxraW8uZGlza190aW1lIGFuZApAQCAtNjgsMTMgKzcxLDEzIEBACiAtIEVuYWJsZSB0aHJvdHRsaW5nIGluIGJsb2NrIGxheWVyCiAJQ09ORklHX0JMS19ERVZfVEhST1RUTElORz15CiAKLS0gTW91bnQgYmxraW8gY29udHJvbGxlcgotICAgICAgICBtb3VudCAtdCBjZ3JvdXAgLW8gYmxraW8gbm9uZSAvY2dyb3VwL2Jsa2lvCistIE1vdW50IGJsa2lvIGNvbnRyb2xsZXIgKHNlZSBjZ3JvdXBzLnR4dCwgV2h5IGFyZSBjZ3JvdXBzIG5lZWRlZD8pCisgICAgICAgIG1vdW50IC10IGNncm91cCAtbyBibGtpbyBub25lIC9zeXMvZnMvY2dyb3VwL2Jsa2lvCiAKIC0gU3BlY2lmeSBhIGJhbmR3aWR0aCByYXRlIG9uIHBhcnRpY3VsYXIgZGV2aWNlIGZvciByb290IGdyb3VwLiBUaGUgZm9ybWF0CiAgIGZvciBwb2xpY3kgaXMgIjxtYWpvcj46PG1pbm9yPiAgPGJ5ZXNfcGVyX3NlY29uZD4iLgogCi0gICAgICAgIGVjaG8gIjg6MTYgIDEwNDg1NzYiID4gL2Nncm91cC9ibGtpby9ibGtpby5yZWFkX2Jwc19kZXZpY2UKKyAgICAgICAgZWNobyAiODoxNiAgMTA0ODU3NiIgPiAvc3lzL2ZzL2Nncm91cC9ibGtpby9ibGtpby5yZWFkX2Jwc19kZXZpY2UKIAogICBBYm92ZSB3aWxsIHB1dCBhIGxpbWl0IG9mIDFNQi9zZWNvbmQgb24gcmVhZHMgaGFwcGVuaW5nIGZvciByb290IGdyb3VwCiAgIG9uIGRldmljZSBoYXZpbmcgbWFqb3IvbWlub3IgbnVtYmVyIDg6MTYuCkBAIC0xMDgsNyArMTExLDcgQEAKICAgQ0ZRIGFuZCB0aHJvdHRsaW5nIHdpbGwgcHJhY3RpY2FsbHkgdHJlYXQgYWxsIGdyb3VwcyBhdCBzYW1lIGxldmVsLgogCiAJCQkJcGl2b3QKLQkJCSAgICAgLyAgfCAgIFwgIFwKKwkJCSAgICAgLyAgLyAgIFwgIFwKIAkJCXJvb3QgIHRlc3QxIHRlc3QyICB0ZXN0MwogCiAgIERvd24gdGhlIGxpbmUgd2UgY2FuIGltcGxlbWVudCBoaWVyYXJjaGljYWwgYWNjb3VudGluZy9jb250cm9sIHN1cHBvcnQKQEAgLTE0OSw3ICsxNTIsNyBAQAogCiAJICBGb2xsb3dpbmcgaXMgdGhlIGZvcm1hdC4KIAotCSAgI2VjaG8gZGV2X21hajpkZXZfbWlub3Igd2VpZ2h0ID4gL3BhdGgvdG8vY2dyb3VwL2Jsa2lvLndlaWdodF9kZXZpY2UKKwkgICMgZWNobyBkZXZfbWFqOmRldl9taW5vciB3ZWlnaHQgPiBibGtpby53ZWlnaHRfZGV2aWNlCiAJICBDb25maWd1cmUgd2VpZ2h0PTMwMCBvbiAvZGV2L3NkYiAoODoxNikgaW4gdGhpcyBjZ3JvdXAKIAkgICMgZWNobyA4OjE2IDMwMCA+IGJsa2lvLndlaWdodF9kZXZpY2UKIAkgICMgY2F0IGJsa2lvLndlaWdodF9kZXZpY2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dAppbmRleCAwZWQ5OWYwLi5jZDY3ZTkwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CkBAIC0xMzgsMTEgKzEzOCwxMSBAQAogdGhlIGFkbWluIGNhbiBlYXNpbHkgc2V0IHVwIGEgc2NyaXB0IHdoaWNoIHJlY2VpdmVzIGV4ZWMgbm90aWZpY2F0aW9ucwogYW5kIGRlcGVuZGluZyBvbiB3aG8gaXMgbGF1bmNoaW5nIHRoZSBicm93c2VyIGhlIGNhbgogCi0gICAgICAgIyBlY2hvIGJyb3dzZXJfcGlkID4gL21udC88cmVzdHlwZT4vPHVzZXJjbGFzcz4vdGFza3MKKyAgICAjIGVjaG8gYnJvd3Nlcl9waWQgPiAvc3lzL2ZzL2Nncm91cC88cmVzdHlwZT4vPHVzZXJjbGFzcz4vdGFza3MKIAogV2l0aCBvbmx5IGEgc2luZ2xlIGhpZXJhcmNoeSwgaGUgbm93IHdvdWxkIHBvdGVudGlhbGx5IGhhdmUgdG8gY3JlYXRlCiBhIHNlcGFyYXRlIGNncm91cCBmb3IgZXZlcnkgYnJvd3NlciBsYXVuY2hlZCBhbmQgYXNzb2NpYXRlIGl0IHdpdGgKLWFwcHJvcCBuZXR3b3JrIGFuZCBvdGhlciByZXNvdXJjZSBjbGFzcy4gIFRoaXMgbWF5IGxlYWQgdG8KK2FwcHJvcHJpYXRlIG5ldHdvcmsgYW5kIG90aGVyIHJlc291cmNlIGNsYXNzLiAgVGhpcyBtYXkgbGVhZCB0bwogcHJvbGlmZXJhdGlvbiBvZiBzdWNoIGNncm91cHMuCiAKIEFsc28gbGV0cyBzYXkgdGhhdCB0aGUgYWRtaW5pc3RyYXRvciB3b3VsZCBsaWtlIHRvIGdpdmUgZW5oYW5jZWQgbmV0d29yawpAQCAtMTUzLDkgKzE1Myw5IEBACiBXaXRoIGFiaWxpdHkgdG8gd3JpdGUgcGlkcyBkaXJlY3RseSB0byByZXNvdXJjZSBjbGFzc2VzLCBpdCdzIGp1c3QgYQogbWF0dGVyIG9mIDoKIAotICAgICAgICMgZWNobyBwaWQgPiAvbW50L25ldHdvcmsvPG5ld19jbGFzcz4vdGFza3MKKyAgICAgICAjIGVjaG8gcGlkID4gL3N5cy9mcy9jZ3JvdXAvbmV0d29yay88bmV3X2NsYXNzPi90YXNrcwogICAgICAgIChhZnRlciBzb21lIHRpbWUpCi0gICAgICAgIyBlY2hvIHBpZCA+IC9tbnQvbmV0d29yay88b3JpZ19jbGFzcz4vdGFza3MKKyAgICAgICAjIGVjaG8gcGlkID4gL3N5cy9mcy9jZ3JvdXAvbmV0d29yay88b3JpZ19jbGFzcz4vdGFza3MKIAogV2l0aG91dCB0aGlzIGFiaWxpdHksIGhlIHdvdWxkIGhhdmUgdG8gc3BsaXQgdGhlIGNncm91cCBpbnRvCiBtdWx0aXBsZSBzZXBhcmF0ZSBvbmVzIGFuZCB0aGVuIGFzc29jaWF0ZSB0aGUgbmV3IGNncm91cHMgd2l0aCB0aGUKQEAgLTMxMCwyMSArMzEwLDI0IEBACiBUbyBzdGFydCBhIG5ldyBqb2IgdGhhdCBpcyB0byBiZSBjb250YWluZWQgd2l0aGluIGEgY2dyb3VwLCB1c2luZwogdGhlICJjcHVzZXQiIGNncm91cCBzdWJzeXN0ZW0sIHRoZSBzdGVwcyBhcmUgc29tZXRoaW5nIGxpa2U6CiAKLSAxKSBta2RpciAvZGV2L2Nncm91cAotIDIpIG1vdW50IC10IGNncm91cCAtb2NwdXNldCBjcHVzZXQgL2Rldi9jZ3JvdXAKLSAzKSBDcmVhdGUgdGhlIG5ldyBjZ3JvdXAgYnkgZG9pbmcgbWtkaXIncyBhbmQgd3JpdGUncyAob3IgZWNobydzKSBpbgotICAgIHRoZSAvZGV2L2Nncm91cCB2aXJ0dWFsIGZpbGUgc3lzdGVtLgotIDQpIFN0YXJ0IGEgdGFzayB0aGF0IHdpbGwgYmUgdGhlICJmb3VuZGluZyBmYXRoZXIiIG9mIHRoZSBuZXcgam9iLgotIDUpIEF0dGFjaCB0aGF0IHRhc2sgdG8gdGhlIG5ldyBjZ3JvdXAgYnkgd3JpdGluZyBpdHMgcGlkIHRvIHRoZQotICAgIC9kZXYvY2dyb3VwIHRhc2tzIGZpbGUgZm9yIHRoYXQgY2dyb3VwLgotIDYpIGZvcmssIGV4ZWMgb3IgY2xvbmUgdGhlIGpvYiB0YXNrcyBmcm9tIHRoaXMgZm91bmRpbmcgZmF0aGVyIHRhc2suCisgMSkgbW91bnQgLXQgdG1wZnMgY2dyb3VwX3Jvb3QgL3N5cy9mcy9jZ3JvdXAKKyAyKSBta2RpciAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKKyAzKSBtb3VudCAtdCBjZ3JvdXAgLW9jcHVzZXQgY3B1c2V0IC9zeXMvZnMvY2dyb3VwL2NwdXNldAorIDQpIENyZWF0ZSB0aGUgbmV3IGNncm91cCBieSBkb2luZyBta2RpcidzIGFuZCB3cml0ZSdzIChvciBlY2hvJ3MpIGluCisgICAgdGhlIC9zeXMvZnMvY2dyb3VwIHZpcnR1YWwgZmlsZSBzeXN0ZW0uCisgNSkgU3RhcnQgYSB0YXNrIHRoYXQgd2lsbCBiZSB0aGUgImZvdW5kaW5nIGZhdGhlciIgb2YgdGhlIG5ldyBqb2IuCisgNikgQXR0YWNoIHRoYXQgdGFzayB0byB0aGUgbmV3IGNncm91cCBieSB3cml0aW5nIGl0cyBwaWQgdG8gdGhlCisgICAgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0L3Rhc2tzIGZpbGUgZm9yIHRoYXQgY2dyb3VwLgorIDcpIGZvcmssIGV4ZWMgb3IgY2xvbmUgdGhlIGpvYiB0YXNrcyBmcm9tIHRoaXMgZm91bmRpbmcgZmF0aGVyIHRhc2suCiAKIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIG9mIGNvbW1hbmRzIHdpbGwgc2V0dXAgYSBjZ3JvdXAKIG5hbWVkICJDaGFybGllIiwgY29udGFpbmluZyBqdXN0IENQVXMgMiBhbmQgMywgYW5kIE1lbW9yeSBOb2RlIDEsCiBhbmQgdGhlbiBzdGFydCBhIHN1YnNoZWxsICdzaCcgaW4gdGhhdCBjZ3JvdXA6CiAKLSAgbW91bnQgLXQgY2dyb3VwIGNwdXNldCAtb2NwdXNldCAvZGV2L2Nncm91cAotICBjZCAvZGV2L2Nncm91cAorICBtb3VudCAtdCB0bXBmcyBjZ3JvdXBfcm9vdCAvc3lzL2ZzL2Nncm91cAorICBta2RpciAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKKyAgbW91bnQgLXQgY2dyb3VwIGNwdXNldCAtb2NwdXNldCAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKKyAgY2QgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0CiAgIG1rZGlyIENoYXJsaWUKICAgY2QgQ2hhcmxpZQogICAvYmluL2VjaG8gMi0zID4gY3B1c2V0LmNwdXMKQEAgLTM0NSw3ICszNDgsNyBAQAogdmlydHVhbCBmaWxlc3lzdGVtLgogCiBUbyBtb3VudCBhIGNncm91cCBoaWVyYXJjaHkgd2l0aCBhbGwgYXZhaWxhYmxlIHN1YnN5c3RlbXMsIHR5cGU6Ci0jIG1vdW50IC10IGNncm91cCB4eHggL2Rldi9jZ3JvdXAKKyMgbW91bnQgLXQgY2dyb3VwIHh4eCAvc3lzL2ZzL2Nncm91cAogCiBUaGUgInh4eCIgaXMgbm90IGludGVycHJldGVkIGJ5IHRoZSBjZ3JvdXAgY29kZSwgYnV0IHdpbGwgYXBwZWFyIGluCiAvcHJvYy9tb3VudHMgc28gbWF5IGJlIGFueSB1c2VmdWwgaWRlbnRpZnlpbmcgc3RyaW5nIHRoYXQgeW91IGxpa2UuCkBAIC0zNTQsMjMgKzM1NywzMiBAQAogaWYgY3B1c2V0cyBhcmUgZW5hYmxlZCB0aGUgdXNlciB3aWxsIGhhdmUgdG8gcG9wdWxhdGUgdGhlIGNwdXMgYW5kIG1lbXMgZmlsZXMKIGZvciBlYWNoIG5ldyBjZ3JvdXAgY3JlYXRlZCBiZWZvcmUgdGhhdCBncm91cCBjYW4gYmUgdXNlZC4KIAorQXMgZXhwbGFpbmVkIGluIHNlY3Rpb24gYDEuMiBXaHkgYXJlIGNncm91cHMgbmVlZGVkPycgeW91IHNob3VsZCBjcmVhdGUKK2RpZmZlcmVudCBoaWVyYXJjaGllcyBvZiBjZ3JvdXBzIGZvciBlYWNoIHNpbmdsZSByZXNvdXJjZSBvciBncm91cCBvZgorcmVzb3VyY2VzIHlvdSB3YW50IHRvIGNvbnRyb2wuIFRoZXJlZm9yZSwgeW91IHNob3VsZCBtb3VudCBhIHRtcGZzIG9uCisvc3lzL2ZzL2Nncm91cCBhbmQgY3JlYXRlIGRpcmVjdG9yaWVzIGZvciBlYWNoIGNncm91cCByZXNvdXJjZSBvciByZXNvdXJjZQorZ3JvdXAuCisKKyMgbW91bnQgLXQgdG1wZnMgY2dyb3VwX3Jvb3QgL3N5cy9mcy9jZ3JvdXAKKyMgbWtkaXIgL3N5cy9mcy9jZ3JvdXAvcmcxCisKIFRvIG1vdW50IGEgY2dyb3VwIGhpZXJhcmNoeSB3aXRoIGp1c3QgdGhlIGNwdXNldCBhbmQgbWVtb3J5CiBzdWJzeXN0ZW1zLCB0eXBlOgotIyBtb3VudCAtdCBjZ3JvdXAgLW8gY3B1c2V0LG1lbW9yeSBoaWVyMSAvZGV2L2Nncm91cAorIyBtb3VudCAtdCBjZ3JvdXAgLW8gY3B1c2V0LG1lbW9yeSBoaWVyMSAvc3lzL2ZzL2Nncm91cC9yZzEKIAogVG8gY2hhbmdlIHRoZSBzZXQgb2Ygc3Vic3lzdGVtcyBib3VuZCB0byBhIG1vdW50ZWQgaGllcmFyY2h5LCBqdXN0CiByZW1vdW50IHdpdGggZGlmZmVyZW50IG9wdGlvbnM6Ci0jIG1vdW50IC1vIHJlbW91bnQsY3B1c2V0LGJsa2lvIGhpZXIxIC9kZXYvY2dyb3VwCisjIG1vdW50IC1vIHJlbW91bnQsY3B1c2V0LGJsa2lvIGhpZXIxIC9zeXMvZnMvY2dyb3VwL3JnMQogCiBOb3cgbWVtb3J5IGlzIHJlbW92ZWQgZnJvbSB0aGUgaGllcmFyY2h5IGFuZCBibGtpbyBpcyBhZGRlZC4KIAogTm90ZSB0aGlzIHdpbGwgYWRkIGJsa2lvIHRvIHRoZSBoaWVyYXJjaHkgYnV0IHdvbid0IHJlbW92ZSBtZW1vcnkgb3IKIGNwdXNldCwgYmVjYXVzZSB0aGUgbmV3IG9wdGlvbnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBvbGQgb25lczoKLSMgbW91bnQgLW8gcmVtb3VudCxibGtpbyAvZGV2L2Nncm91cAorIyBtb3VudCAtbyByZW1vdW50LGJsa2lvIC9zeXMvZnMvY2dyb3VwL3JnMQogCiBUbyBTcGVjaWZ5IGEgaGllcmFyY2h5J3MgcmVsZWFzZV9hZ2VudDoKICMgbW91bnQgLXQgY2dyb3VwIC1vIGNwdXNldCxyZWxlYXNlX2FnZW50PSIvc2Jpbi9jcHVzZXRfcmVsZWFzZV9hZ2VudCIgXAotICB4eHggL2Rldi9jZ3JvdXAKKyAgeHh4IC9zeXMvZnMvY2dyb3VwL3JnMQogCiBOb3RlIHRoYXQgc3BlY2lmeWluZyAncmVsZWFzZV9hZ2VudCcgbW9yZSB0aGFuIG9uY2Ugd2lsbCByZXR1cm4gZmFpbHVyZS4KIApAQCAtMzc5LDE3ICszOTEsMTcgQEAKIHRoZSBhYmlsaXR5IHRvIGFyYml0cmFyaWx5IGJpbmQvdW5iaW5kIHN1YnN5c3RlbXMgZnJvbSBhbiBleGlzdGluZwogY2dyb3VwIGhpZXJhcmNoeSBpcyBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgZnV0dXJlLgogCi1UaGVuIHVuZGVyIC9kZXYvY2dyb3VwIHlvdSBjYW4gZmluZCBhIHRyZWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUKLXRyZWUgb2YgdGhlIGNncm91cHMgaW4gdGhlIHN5c3RlbS4gRm9yIGluc3RhbmNlLCAvZGV2L2Nncm91cAorVGhlbiB1bmRlciAvc3lzL2ZzL2Nncm91cC9yZzEgeW91IGNhbiBmaW5kIGEgdHJlZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZQordHJlZSBvZiB0aGUgY2dyb3VwcyBpbiB0aGUgc3lzdGVtLiBGb3IgaW5zdGFuY2UsIC9zeXMvZnMvY2dyb3VwL3JnMQogaXMgdGhlIGNncm91cCB0aGF0IGhvbGRzIHRoZSB3aG9sZSBzeXN0ZW0uCiAKIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgcmVsZWFzZV9hZ2VudDoKLSMgZWNobyAiL3NiaW4vbmV3X3JlbGVhc2VfYWdlbnQiID4gL2Rldi9jZ3JvdXAvcmVsZWFzZV9hZ2VudAorIyBlY2hvICIvc2Jpbi9uZXdfcmVsZWFzZV9hZ2VudCIgPiAvc3lzL2ZzL2Nncm91cC9yZzEvcmVsZWFzZV9hZ2VudAogCiBJdCBjYW4gYWxzbyBiZSBjaGFuZ2VkIHZpYSByZW1vdW50LgogCi1JZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgY2dyb3VwIHVuZGVyIC9kZXYvY2dyb3VwOgotIyBjZCAvZGV2L2Nncm91cAorSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGNncm91cCB1bmRlciAvc3lzL2ZzL2Nncm91cC9yZzE6CisjIGNkIC9zeXMvZnMvY2dyb3VwL3JnMQogIyBta2RpciBteV9jZ3JvdXAKIAogTm93IHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgY2dyb3VwLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdWFjY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdWFjY3QudHh0CmluZGV4IDhiOTMwOTQuLjlhZDg1ZGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVhY2N0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1YWNjdC50eHQKQEAgLTEwLDI2ICsxMCwyNSBAQAogCiBBY2NvdW50aW5nIGdyb3VwcyBjYW4gYmUgY3JlYXRlZCBieSBmaXJzdCBtb3VudGluZyB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0uCiAKLSMgbWtkaXIgL2Nncm91cHMKLSMgbW91bnQgLXQgY2dyb3VwIC1vY3B1YWNjdCBub25lIC9jZ3JvdXBzCisjIG1vdW50IC10IGNncm91cCAtb2NwdWFjY3Qgbm9uZSAvc3lzL2ZzL2Nncm91cAogCi1XaXRoIHRoZSBhYm92ZSBzdGVwLCB0aGUgaW5pdGlhbCBvciB0aGUgcGFyZW50IGFjY291bnRpbmcgZ3JvdXAKLWJlY29tZXMgdmlzaWJsZSBhdCAvY2dyb3Vwcy4gQXQgYm9vdHVwLCB0aGlzIGdyb3VwIGluY2x1ZGVzIGFsbCB0aGUKLXRhc2tzIGluIHRoZSBzeXN0ZW0uIC9jZ3JvdXBzL3Rhc2tzIGxpc3RzIHRoZSB0YXNrcyBpbiB0aGlzIGNncm91cC4KLS9jZ3JvdXBzL2NwdWFjY3QudXNhZ2UgZ2l2ZXMgdGhlIENQVSB0aW1lIChpbiBuYW5vc2Vjb25kcykgb2J0YWluZWQgYnkKLXRoaXMgZ3JvdXAgd2hpY2ggaXMgZXNzZW50aWFsbHkgdGhlIENQVSB0aW1lIG9idGFpbmVkIGJ5IGFsbCB0aGUgdGFza3MKK1dpdGggdGhlIGFib3ZlIHN0ZXAsIHRoZSBpbml0aWFsIG9yIHRoZSBwYXJlbnQgYWNjb3VudGluZyBncm91cCBiZWNvbWVzCit2aXNpYmxlIGF0IC9zeXMvZnMvY2dyb3VwLiBBdCBib290dXAsIHRoaXMgZ3JvdXAgaW5jbHVkZXMgYWxsIHRoZSB0YXNrcyBpbgordGhlIHN5c3RlbS4gL3N5cy9mcy9jZ3JvdXAvdGFza3MgbGlzdHMgdGhlIHRhc2tzIGluIHRoaXMgY2dyb3VwLgorL3N5cy9mcy9jZ3JvdXAvY3B1YWNjdC51c2FnZSBnaXZlcyB0aGUgQ1BVIHRpbWUgKGluIG5hbm9zZWNvbmRzKSBvYnRhaW5lZAorYnkgdGhpcyBncm91cCB3aGljaCBpcyBlc3NlbnRpYWxseSB0aGUgQ1BVIHRpbWUgb2J0YWluZWQgYnkgYWxsIHRoZSB0YXNrcwogaW4gdGhlIHN5c3RlbS4KIAotTmV3IGFjY291bnRpbmcgZ3JvdXBzIGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoZSBwYXJlbnQgZ3JvdXAgL2Nncm91cHMuCitOZXcgYWNjb3VudGluZyBncm91cHMgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhlIHBhcmVudCBncm91cCAvc3lzL2ZzL2Nncm91cC4KIAotIyBjZCAvY2dyb3VwcworIyBjZCAvc3lzL2ZzL2Nncm91cAogIyBta2RpciBnMQogIyBlY2hvICQkID4gZzEKIAogVGhlIGFib3ZlIHN0ZXBzIGNyZWF0ZSBhIG5ldyBncm91cCBnMSBhbmQgbW92ZSB0aGUgY3VycmVudCBzaGVsbAogcHJvY2VzcyAoYmFzaCkgaW50byBpdC4gQ1BVIHRpbWUgY29uc3VtZWQgYnkgdGhpcyBiYXNoIGFuZCBpdHMgY2hpbGRyZW4KIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGcxL2NwdWFjY3QudXNhZ2UgYW5kIHRoZSBzYW1lIGlzIGFjY3VtdWxhdGVkIGluCi0vY2dyb3Vwcy9jcHVhY2N0LnVzYWdlIGFsc28uCisvc3lzL2ZzL2Nncm91cC9jcHVhY2N0LnVzYWdlIGFsc28uCiAKIGNwdWFjY3Quc3RhdCBmaWxlIGxpc3RzIGEgZmV3IHN0YXRpc3RpY3Mgd2hpY2ggZnVydGhlciBkaXZpZGUgdGhlCiBDUFUgdGltZSBvYnRhaW5lZCBieSB0aGUgY2dyb3VwIGludG8gdXNlciBhbmQgc3lzdGVtIHRpbWVzLiBDdXJyZW50bHkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dAppbmRleCA5OGEzMDgyLi41YjBkNzhlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0CkBAIC02NjEsMjEgKzY2MSwyMSBAQAogCiBUbyBzdGFydCBhIG5ldyBqb2IgdGhhdCBpcyB0byBiZSBjb250YWluZWQgd2l0aGluIGEgY3B1c2V0LCB0aGUgc3RlcHMgYXJlOgogCi0gMSkgbWtkaXIgL2Rldi9jcHVzZXQKLSAyKSBtb3VudCAtdCBjZ3JvdXAgLW9jcHVzZXQgY3B1c2V0IC9kZXYvY3B1c2V0CisgMSkgbWtkaXIgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0CisgMikgbW91bnQgLXQgY2dyb3VwIC1vY3B1c2V0IGNwdXNldCAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKICAzKSBDcmVhdGUgdGhlIG5ldyBjcHVzZXQgYnkgZG9pbmcgbWtkaXIncyBhbmQgd3JpdGUncyAob3IgZWNobydzKSBpbgotICAgIHRoZSAvZGV2L2NwdXNldCB2aXJ0dWFsIGZpbGUgc3lzdGVtLgorICAgIHRoZSAvc3lzL2ZzL2Nncm91cC9jcHVzZXQgdmlydHVhbCBmaWxlIHN5c3RlbS4KICA0KSBTdGFydCBhIHRhc2sgdGhhdCB3aWxsIGJlIHRoZSAiZm91bmRpbmcgZmF0aGVyIiBvZiB0aGUgbmV3IGpvYi4KICA1KSBBdHRhY2ggdGhhdCB0YXNrIHRvIHRoZSBuZXcgY3B1c2V0IGJ5IHdyaXRpbmcgaXRzIHBpZCB0byB0aGUKLSAgICAvZGV2L2NwdXNldCB0YXNrcyBmaWxlIGZvciB0aGF0IGNwdXNldC4KKyAgICAvc3lzL2ZzL2Nncm91cC9jcHVzZXQgdGFza3MgZmlsZSBmb3IgdGhhdCBjcHVzZXQuCiAgNikgZm9yaywgZXhlYyBvciBjbG9uZSB0aGUgam9iIHRhc2tzIGZyb20gdGhpcyBmb3VuZGluZyBmYXRoZXIgdGFzay4KIAogRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgY29tbWFuZHMgd2lsbCBzZXR1cCBhIGNwdXNldAogbmFtZWQgIkNoYXJsaWUiLCBjb250YWluaW5nIGp1c3QgQ1BVcyAyIGFuZCAzLCBhbmQgTWVtb3J5IE5vZGUgMSwKIGFuZCB0aGVuIHN0YXJ0IGEgc3Vic2hlbGwgJ3NoJyBpbiB0aGF0IGNwdXNldDoKIAotICBtb3VudCAtdCBjZ3JvdXAgLW9jcHVzZXQgY3B1c2V0IC9kZXYvY3B1c2V0Ci0gIGNkIC9kZXYvY3B1c2V0CisgIG1vdW50IC10IGNncm91cCAtb2NwdXNldCBjcHVzZXQgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0CisgIGNkIC9zeXMvZnMvY2dyb3VwL2NwdXNldAogICBta2RpciBDaGFybGllCiAgIGNkIENoYXJsaWUKICAgL2Jpbi9lY2hvIDItMyA+IGNwdXNldC5jcHVzCkBAIC03MTAsMTQgKzcxMCwxNCBAQAogdmlydHVhbCBmaWxlc3lzdGVtLgogCiBUbyBtb3VudCBpdCwgdHlwZToKLSMgbW91bnQgLXQgY2dyb3VwIC1vIGNwdXNldCBjcHVzZXQgL2Rldi9jcHVzZXQKKyMgbW91bnQgLXQgY2dyb3VwIC1vIGNwdXNldCBjcHVzZXQgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0CiAKLVRoZW4gdW5kZXIgL2Rldi9jcHVzZXQgeW91IGNhbiBmaW5kIGEgdHJlZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZQotdHJlZSBvZiB0aGUgY3B1c2V0cyBpbiB0aGUgc3lzdGVtLiBGb3IgaW5zdGFuY2UsIC9kZXYvY3B1c2V0CitUaGVuIHVuZGVyIC9zeXMvZnMvY2dyb3VwL2NwdXNldCB5b3UgY2FuIGZpbmQgYSB0cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCit0cmVlIG9mIHRoZSBjcHVzZXRzIGluIHRoZSBzeXN0ZW0uIEZvciBpbnN0YW5jZSwgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0CiBpcyB0aGUgY3B1c2V0IHRoYXQgaG9sZHMgdGhlIHdob2xlIHN5c3RlbS4KIAotSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGNwdXNldCB1bmRlciAvZGV2L2NwdXNldDoKLSMgY2QgL2Rldi9jcHVzZXQKK0lmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBjcHVzZXQgdW5kZXIgL3N5cy9mcy9jZ3JvdXAvY3B1c2V0OgorIyBjZCAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKICMgbWtkaXIgbXlfY3B1c2V0CiAKIE5vdyB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGlzIGNwdXNldC4KQEAgLTc2NSwxMiArNzY1LDEyIEBACiAKIFRoZSBjb21tYW5kCiAKLW1vdW50IC10IGNwdXNldCBYIC9kZXYvY3B1c2V0Cittb3VudCAtdCBjcHVzZXQgWCAvc3lzL2ZzL2Nncm91cC9jcHVzZXQKIAogaXMgZXF1aXZhbGVudCB0bwogCi1tb3VudCAtdCBjZ3JvdXAgLW9jcHVzZXQsbm9wcmVmaXggWCAvZGV2L2NwdXNldAotZWNobyAiL3NiaW4vY3B1c2V0X3JlbGVhc2VfYWdlbnQiID4gL2Rldi9jcHVzZXQvcmVsZWFzZV9hZ2VudAorbW91bnQgLXQgY2dyb3VwIC1vY3B1c2V0LG5vcHJlZml4IFggL3N5cy9mcy9jZ3JvdXAvY3B1c2V0CitlY2hvICIvc2Jpbi9jcHVzZXRfcmVsZWFzZV9hZ2VudCIgPiAvc3lzL2ZzL2Nncm91cC9jcHVzZXQvcmVsZWFzZV9hZ2VudAogCiAyLjIgQWRkaW5nL3JlbW92aW5nIGNwdXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2RldmljZXMudHh0CmluZGV4IDU3Y2E0YzguLjE2NjI0YTdmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2RldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9kZXZpY2VzLnR4dApAQCAtMjIsMTYgKzIyLDE2IEBACiBBbiBlbnRyeSBpcyBhZGRlZCB1c2luZyBkZXZpY2VzLmFsbG93LCBhbmQgcmVtb3ZlZCB1c2luZwogZGV2aWNlcy5kZW55LiAgRm9yIGluc3RhbmNlCiAKLQllY2hvICdjIDE6MyBtcicgPiAvY2dyb3Vwcy8xL2RldmljZXMuYWxsb3cKKwllY2hvICdjIDE6MyBtcicgPiAvc3lzL2ZzL2Nncm91cC8xL2RldmljZXMuYWxsb3cKIAogYWxsb3dzIGNncm91cCAxIHRvIHJlYWQgYW5kIG1rbm9kIHRoZSBkZXZpY2UgdXN1YWxseSBrbm93biBhcwogL2Rldi9udWxsLiAgRG9pbmcKIAotCWVjaG8gYSA+IC9jZ3JvdXBzLzEvZGV2aWNlcy5kZW55CisJZWNobyBhID4gL3N5cy9mcy9jZ3JvdXAvMS9kZXZpY2VzLmRlbnkKIAogd2lsbCByZW1vdmUgdGhlIGRlZmF1bHQgJ2EgKjoqIHJ3bScgZW50cnkuIERvaW5nCiAKLQllY2hvIGEgPiAvY2dyb3Vwcy8xL2RldmljZXMuYWxsb3cKKwllY2hvIGEgPiAvc3lzL2ZzL2Nncm91cC8xL2RldmljZXMuYWxsb3cKIAogd2lsbCBhZGQgdGhlICdhICo6KiByd20nIGVudHJ5IHRvIHRoZSB3aGl0ZWxpc3QuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9mcmVlemVyLXN1YnN5c3RlbS50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZnJlZXplci1zdWJzeXN0ZW0udHh0CmluZGV4IDQxZjM3ZmUuLmMyMWQ3NzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9mcmVlemVyLXN1YnN5c3RlbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2ZyZWV6ZXItc3Vic3lzdGVtLnR4dApAQCAtNTksMjggKzU5LDI4IEBACiAKICogRXhhbXBsZXMgb2YgdXNhZ2UgOgogCi0gICAjIG1rZGlyIC9jb250YWluZXJzCi0gICAjIG1vdW50IC10IGNncm91cCAtb2ZyZWV6ZXIgZnJlZXplciAgL2NvbnRhaW5lcnMKLSAgICMgbWtkaXIgL2NvbnRhaW5lcnMvMAotICAgIyBlY2hvICRzb21lX3BpZCA+IC9jb250YWluZXJzLzAvdGFza3MKKyAgICMgbWtkaXIgL3N5cy9mcy9jZ3JvdXAvZnJlZXplcgorICAgIyBtb3VudCAtdCBjZ3JvdXAgLW9mcmVlemVyIGZyZWV6ZXIgL3N5cy9mcy9jZ3JvdXAvZnJlZXplcgorICAgIyBta2RpciAvc3lzL2ZzL2Nncm91cC9mcmVlemVyLzAKKyAgICMgZWNobyAkc29tZV9waWQgPiAvc3lzL2ZzL2Nncm91cC9mcmVlemVyLzAvdGFza3MKIAogdG8gZ2V0IHN0YXR1cyBvZiB0aGUgZnJlZXplciBzdWJzeXN0ZW0gOgogCi0gICAjIGNhdCAvY29udGFpbmVycy8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgY2F0IC9zeXMvZnMvY2dyb3VwL2ZyZWV6ZXIvMC9mcmVlemVyLnN0YXRlCiAgICBUSEFXRUQKIAogdG8gZnJlZXplIGFsbCB0YXNrcyBpbiB0aGUgY29udGFpbmVyIDoKIAotICAgIyBlY2hvIEZST1pFTiA+IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQotICAgIyBjYXQgL2NvbnRhaW5lcnMvMC9mcmVlemVyLnN0YXRlCisgICAjIGVjaG8gRlJPWkVOID4gL3N5cy9mcy9jZ3JvdXAvZnJlZXplci8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgY2F0IC9zeXMvZnMvY2dyb3VwL2ZyZWV6ZXIvMC9mcmVlemVyLnN0YXRlCiAgICBGUkVFWklORwotICAgIyBjYXQgL2NvbnRhaW5lcnMvMC9mcmVlemVyLnN0YXRlCisgICAjIGNhdCAvc3lzL2ZzL2Nncm91cC9mcmVlemVyLzAvZnJlZXplci5zdGF0ZQogICAgRlJPWkVOCiAKIHRvIHVuZnJlZXplIGFsbCB0YXNrcyBpbiB0aGUgY29udGFpbmVyIDoKIAotICAgIyBlY2hvIFRIQVdFRCA+IC9jb250YWluZXJzLzAvZnJlZXplci5zdGF0ZQotICAgIyBjYXQgL2NvbnRhaW5lcnMvMC9mcmVlemVyLnN0YXRlCisgICAjIGVjaG8gVEhBV0VEID4gL3N5cy9mcy9jZ3JvdXAvZnJlZXplci8wL2ZyZWV6ZXIuc3RhdGUKKyAgICMgY2F0IC9zeXMvZnMvY2dyb3VwL2ZyZWV6ZXIvMC9mcmVlemVyLnN0YXRlCiAgICBUSEFXRUQKIAogVGhpcyBpcyB0aGUgYmFzaWMgbWVjaGFuaXNtIHdoaWNoIHNob3VsZCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIHVzZXIgc3BhY2UgdGFzawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dAppbmRleCA3YzE2MzQ3Li4wNmViNmQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dApAQCAtMSw4ICsxLDggQEAKIE1lbW9yeSBSZXNvdXJjZSBDb250cm9sbGVyCiAKLU5PVEU6IFRoZSBNZW1vcnkgUmVzb3VyY2UgQ29udHJvbGxlciBoYXMgYmVlbiBnZW5lcmljYWxseSBiZWVuIHJlZmVycmVkCi0gICAgICB0byBhcyB0aGUgbWVtb3J5IGNvbnRyb2xsZXIgaW4gdGhpcyBkb2N1bWVudC4gRG8gbm90IGNvbmZ1c2UgbWVtb3J5Ci0gICAgICBjb250cm9sbGVyIHVzZWQgaGVyZSB3aXRoIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGF0IGlzIHVzZWQgaW4gaGFyZHdhcmUuCitOT1RFOiBUaGUgTWVtb3J5IFJlc291cmNlIENvbnRyb2xsZXIgaGFzIGdlbmVyaWNhbGx5IGJlZW4gcmVmZXJyZWQgdG8gYXMgdGhlCisgICAgICBtZW1vcnkgY29udHJvbGxlciBpbiB0aGlzIGRvY3VtZW50LiBEbyBub3QgY29uZnVzZSBtZW1vcnkgY29udHJvbGxlcgorICAgICAgdXNlZCBoZXJlIHdpdGggdGhlIG1lbW9yeSBjb250cm9sbGVyIHRoYXQgaXMgdXNlZCBpbiBoYXJkd2FyZS4KIAogKEZvciBlZGl0b3JzKQogSW4gdGhpcyBkb2N1bWVudDoKQEAgLTcwLDYgKzcwLDcgQEAKIAkJCQkgKFNlZSBzeXNjdGwncyB2bS5zd2FwcGluZXNzKQogIG1lbW9yeS5tb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGUgIyBzZXQvc2hvdyBjb250cm9scyBvZiBtb3ZpbmcgY2hhcmdlcwogIG1lbW9yeS5vb21fY29udHJvbAkJICMgc2V0L3Nob3cgb29tIGNvbnRyb2xzLgorIG1lbW9yeS5udW1hX3N0YXQJCSAjIHNob3cgdGhlIG51bWJlciBvZiBtZW1vcnkgdXNhZ2UgcGVyIG51bWEgbm9kZQogCiAxLiBIaXN0b3J5CiAKQEAgLTE4MSw3ICsxODIsNyBAQAogcGFnZSB3aWxsIGV2ZW50dWFsbHkgZ2V0IGNoYXJnZWQgZm9yIGl0IChvbmNlIGl0IGlzIHVuY2hhcmdlZCBmcm9tCiB0aGUgY2dyb3VwIHRoYXQgYnJvdWdodCBpdCBpbiAtLSB0aGlzIHdpbGwgaGFwcGVuIG9uIG1lbW9yeSBwcmVzc3VyZSkuCiAKLUV4Y2VwdGlvbjogSWYgQ09ORklHX0NHUk9VUF9DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAgaXMgbm90IHVzZWQuLgorRXhjZXB0aW9uOiBJZiBDT05GSUdfQ0dST1VQX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUCBpcyBub3QgdXNlZC4KIFdoZW4geW91IGRvIHN3YXBvZmYgYW5kIG1ha2Ugc3dhcHBlZC1vdXQgcGFnZXMgb2Ygc2htZW0odG1wZnMpIHRvCiBiZSBiYWNrZWQgaW50byBtZW1vcnkgaW4gZm9yY2UsIGNoYXJnZXMgZm9yIHBhZ2VzIGFyZSBhY2NvdW50ZWQgYWdhaW5zdCB0aGUKIGNhbGxlciBvZiBzd2Fwb2ZmIHJhdGhlciB0aGFuIHRoZSB1c2VycyBvZiBzaG1lbS4KQEAgLTIxMyw3ICsyMTQsNyBAQAogT1MgcG9pbnQgb2Ygdmlldy4KIAogKiBXaGF0IGhhcHBlbnMgd2hlbiBhIGNncm91cCBoaXRzIG1lbW9yeS5tZW1zdy5saW1pdF9pbl9ieXRlcwotV2hlbiBhIGNncm91cCBoaXMgbWVtb3J5Lm1lbXN3LmxpbWl0X2luX2J5dGVzLCBpdCdzIHVzZWxlc3MgdG8gZG8gc3dhcC1vdXQKK1doZW4gYSBjZ3JvdXAgaGl0cyBtZW1vcnkubWVtc3cubGltaXRfaW5fYnl0ZXMsIGl0J3MgdXNlbGVzcyB0byBkbyBzd2FwLW91dAogaW4gdGhpcyBjZ3JvdXAuIFRoZW4sIHN3YXAtb3V0IHdpbGwgbm90IGJlIGRvbmUgYnkgY2dyb3VwIHJvdXRpbmUgYW5kIGZpbGUKIGNhY2hlcyBhcmUgZHJvcHBlZC4gQnV0IGFzIG1lbnRpb25lZCBhYm92ZSwgZ2xvYmFsIExSVSBjYW4gZG8gc3dhcG91dCBtZW1vcnkKIGZyb20gaXQgZm9yIHNhbml0eSBvZiB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RhdGUuIFlvdSBjYW4ndCBmb3JiaWQKQEAgLTI2MywxNiArMjY0LDE3IEBACiBjLiBFbmFibGUgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIKIGQuIEVuYWJsZSBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUl9TV0FQICh0byB1c2Ugc3dhcCBleHRlbnNpb24pCiAKLTEuIFByZXBhcmUgdGhlIGNncm91cHMKLSMgbWtkaXIgLXAgL2Nncm91cHMKLSMgbW91bnQgLXQgY2dyb3VwIG5vbmUgL2Nncm91cHMgLW8gbWVtb3J5CisxLiBQcmVwYXJlIHRoZSBjZ3JvdXBzIChzZWUgY2dyb3Vwcy50eHQsIFdoeSBhcmUgY2dyb3VwcyBuZWVkZWQ/KQorIyBtb3VudCAtdCB0bXBmcyBub25lIC9zeXMvZnMvY2dyb3VwCisjIG1rZGlyIC9zeXMvZnMvY2dyb3VwL21lbW9yeQorIyBtb3VudCAtdCBjZ3JvdXAgbm9uZSAvc3lzL2ZzL2Nncm91cC9tZW1vcnkgLW8gbWVtb3J5CiAKIDIuIE1ha2UgdGhlIG5ldyBncm91cCBhbmQgbW92ZSBiYXNoIGludG8gaXQKLSMgbWtkaXIgL2Nncm91cHMvMAotIyBlY2hvICQkID4gL2Nncm91cHMvMC90YXNrcworIyBta2RpciAvc3lzL2ZzL2Nncm91cC9tZW1vcnkvMAorIyBlY2hvICQkID4gL3N5cy9mcy9jZ3JvdXAvbWVtb3J5LzAvdGFza3MKIAogU2luY2Ugbm93IHdlJ3JlIGluIHRoZSAwIGNncm91cCwgd2UgY2FuIGFsdGVyIHRoZSBtZW1vcnkgbGltaXQ6Ci0jIGVjaG8gNE0gPiAvY2dyb3Vwcy8wL21lbW9yeS5saW1pdF9pbl9ieXRlcworIyBlY2hvIDRNID4gL3N5cy9mcy9jZ3JvdXAvbWVtb3J5LzAvbWVtb3J5LmxpbWl0X2luX2J5dGVzCiAKIE5PVEU6IFdlIGNhbiB1c2UgYSBzdWZmaXggKGssIEssIG0sIE0sIGcgb3IgRykgdG8gaW5kaWNhdGUgdmFsdWVzIGluIGtpbG8sCiBtZWdhIG9yIGdpZ2FieXRlcy4gKEhlcmUsIEtpbG8sIE1lZ2EsIEdpZ2EgYXJlIEtpYmlieXRlcywgTWViaWJ5dGVzLCBHaWJpYnl0ZXMuKQpAQCAtMjgwLDExICsyODIsMTEgQEAKIE5PVEU6IFdlIGNhbiB3cml0ZSAiLTEiIHRvIHJlc2V0IHRoZSAqLmxpbWl0X2luX2J5dGVzKHVubGltaXRlZCkuCiBOT1RFOiBXZSBjYW5ub3Qgc2V0IGxpbWl0cyBvbiB0aGUgcm9vdCBjZ3JvdXAgYW55IG1vcmUuCiAKLSMgY2F0IC9jZ3JvdXBzLzAvbWVtb3J5LmxpbWl0X2luX2J5dGVzCisjIGNhdCAvc3lzL2ZzL2Nncm91cC9tZW1vcnkvMC9tZW1vcnkubGltaXRfaW5fYnl0ZXMKIDQxOTQzMDQKIAogV2UgY2FuIGNoZWNrIHRoZSB1c2FnZToKLSMgY2F0IC9jZ3JvdXBzLzAvbWVtb3J5LnVzYWdlX2luX2J5dGVzCisjIGNhdCAvc3lzL2ZzL2Nncm91cC9tZW1vcnkvMC9tZW1vcnkudXNhZ2VfaW5fYnl0ZXMKIDEyMTY1MTIKIAogQSBzdWNjZXNzZnVsIHdyaXRlIHRvIHRoaXMgZmlsZSBkb2VzIG5vdCBndWFyYW50ZWUgYSBzdWNjZXNzZnVsIHNldCBvZgpAQCAtNDY0LDYgKzQ2NiwyNCBAQAogSWYgeW91IHdhbnQgdG8ga25vdyBtb3JlIGV4YWN0IG1lbW9yeSB1c2FnZSwgeW91IHNob3VsZCB1c2UgUlNTK0NBQ0hFKCtTV0FQKQogdmFsdWUgaW4gbWVtb3J5LnN0YXQoc2VlIDUuMikuCiAKKzUuNiBudW1hX3N0YXQKKworVGhpcyBpcyBzaW1pbGFyIHRvIG51bWFfbWFwcyBidXQgb3BlcmF0ZXMgb24gYSBwZXItbWVtY2cgYmFzaXMuICBUaGlzIGlzCit1c2VmdWwgZm9yIHByb3ZpZGluZyB2aXNpYmlsaXR5IGludG8gdGhlIG51bWEgbG9jYWxpdHkgaW5mb3JtYXRpb24gd2l0aGluCithbiBtZW1jZyBzaW5jZSB0aGUgcGFnZXMgYXJlIGFsbG93ZWQgdG8gYmUgYWxsb2NhdGVkIGZyb20gYW55IHBoeXNpY2FsCitub2RlLiAgT25lIG9mIHRoZSB1c2VjYXNlcyBpcyBldmFsdWF0aW5nIGFwcGxpY2F0aW9uIHBlcmZvcm1hbmNlIGJ5Citjb21iaW5pbmcgdGhpcyBpbmZvcm1hdGlvbiB3aXRoIHRoZSBhcHBsaWNhdGlvbidzIGNwdSBhbGxvY2F0aW9uLgorCitXZSBleHBvcnQgInRvdGFsIiwgImZpbGUiLCAiYW5vbiIgYW5kICJ1bmV2aWN0YWJsZSIgcGFnZXMgcGVyLW5vZGUgZm9yCitlYWNoIG1lbWNnLiAgVGhlIG91cHV0IGZvcm1hdCBvZiBtZW1vcnkubnVtYV9zdGF0IGlzOgorCit0b3RhbD08dG90YWwgcGFnZXM+IE4wPTxub2RlIDAgcGFnZXM+IE4xPTxub2RlIDEgcGFnZXM+IC4uLgorZmlsZT08dG90YWwgZmlsZSBwYWdlcz4gTjA9PG5vZGUgMCBwYWdlcz4gTjE9PG5vZGUgMSBwYWdlcz4gLi4uCithbm9uPTx0b3RhbCBhbm9uIHBhZ2VzPiBOMD08bm9kZSAwIHBhZ2VzPiBOMT08bm9kZSAxIHBhZ2VzPiAuLi4KK3VuZXZpY3RhYmxlPTx0b3RhbCBhbm9uIHBhZ2VzPiBOMD08bm9kZSAwIHBhZ2VzPiBOMT08bm9kZSAxIHBhZ2VzPiAuLi4KKworQW5kIHdlIGhhdmUgdG90YWwgPSBmaWxlICsgYW5vbiArIHVuZXZpY3RhYmxlLgorCiA2LiBIaWVyYXJjaHkgc3VwcG9ydAogCiBUaGUgbWVtb3J5IGNvbnRyb2xsZXIgc3VwcG9ydHMgYSBkZWVwIGhpZXJhcmNoeSBhbmQgaGllcmFyY2hpY2FsIGFjY291bnRpbmcuCkBAIC00NzEsMTMgKzQ5MSwxMyBAQAogY2dyb3VwIGZpbGVzeXN0ZW0uIENvbnNpZGVyIGZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNncm91cCBmaWxlc3lzdGVtCiBoaWVyYXJjaHkKIAotCQlyb290CisJICAgICAgIHJvb3QKIAkgICAgIC8gIHwgICBcCi0gICAgICAgICAgIC8JfCAgICBcCi0JICBhCWIJYwotCQkJfCBcCi0JCQl8ICBcCi0JCQlkICAgZQorICAgICAgICAgICAgLwl8ICAgIFwKKwkgICBhCWIgICAgIGMKKwkJICAgICAgfCBcCisJCSAgICAgIHwgIFwKKwkJICAgICAgZCAgIGUKIAogSW4gdGhlIGRpYWdyYW0gYWJvdmUsIHdpdGggaGllcmFyY2hpY2FsIGFjY291bnRpbmcgZW5hYmxlZCwgYWxsIG1lbW9yeQogdXNhZ2Ugb2YgZSwgaXMgYWNjb3VudGVkIHRvIGl0cyBhbmNlc3RvcnMgdXAgdW50aWwgdGhlIHJvb3QgKGkuZSwgYyBhbmQgcm9vdCksCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggMWE5NDQ2Yi4uNzJlMjM4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNDgxLDIzICs0ODEsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6ICAgbmFtZXNwYWNlIGNncm91cCAobnNfY2dyb3VwKQotV2hlbjogICAyLjYuMzgKLVdoeTogICAgVGhlIG5zX2Nncm91cCBsZWFkcyB0byBzb21lIHByb2JsZW1zOgotCSogY2dyb3VwIGNyZWF0aW9uIGlzIG91dC1vZi1jb250cm9sCi0JKiBjZ3JvdXAgbmFtZSBjYW4gY29uZmxpY3Qgd2hlbiBwaWRzIGFyZSBsb29waW5nCi0JKiBpdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhIHNpbmdsZSBwcm9jZXNzIGhhbmRsaW5nCi0JYSBsb3Qgb2YgbmFtZXNwYWNlcyB3aXRob3V0IGZhbGxpbmcgaW4gYSBleHBvbmVudGlhbCBjcmVhdGlvbiB0aW1lCi0JKiB3ZSBtYXkgd2FudCB0byBjcmVhdGUgYSBuYW1lc3BhY2Ugd2l0aG91dCBjcmVhdGluZyBhIGNncm91cAotCi0JVGhlIG5zX2Nncm91cCBpcyByZXBsYWNlZCBieSBhIGNvbXBhdGliaWxpdHkgZmxhZyAnY2xvbmVfY2hpbGRyZW4nLAotCXdoZXJlIGEgbmV3bHkgY3JlYXRlZCBjZ3JvdXAgd2lsbCBjb3B5IHRoZSBwYXJlbnQgY2dyb3VwIHZhbHVlcy4KLQlUaGUgdXNlcnNwYWNlIGhhcyB0byBtYW51YWxseSBjcmVhdGUgYSBjZ3JvdXAgYW5kIGFkZCBhIHRhc2sgdG8KLQl0aGUgJ3Rhc2tzJyBmaWxlLgotV2hvOiAgICBEYW5pZWwgTGV6Y2FubyA8ZGFuaWVsLmxlemNhbm9AZnJlZS5mcj4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0Oglpd2x3aWZpIGRpc2FibGVfaHdfc2NhbiBtb2R1bGUgcGFyYW1ldGVycwogV2hlbjoJMi42LjQwCiBXaHk6CUhhcmV3YXJlIHNjYW4gaXMgdGhlIHByZWZlciBtZXRob2QgZm9yIGl3bHdpZmkgZGV2aWNlcyBmb3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IGY0ODE3ODAuLmRiM2IxYWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtODQzLDYgKzg0Myw3IEBACiAgVEFTS0xFVDogICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgIDI5MAogICAgU0NIRUQ6ICAgICAgMjcwMzUgICAgICAyNjk4MyAgICAgIDI2OTcxICAgICAgMjY3NDYKICBIUlRJTUVSOiAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICAwCisgICAgIFJDVTogICAgICAgMTY3OCAgICAgICAxNzY5ICAgICAgIDIxNzggICAgICAgMjI1MAogCiAKIDEuMyBJREUgZGV2aWNlcyBpbiAvcHJvYy9pZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggZDlhMjAzYi4uZmQyNDhhMzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0yNTk4LDYgKzI1OTgsOCBAQAogCQkJCQl1bmxvY2sgZWplY3RhYmxlIG1lZGlhKTsKIAkJCQltID0gTUFYX1NFQ1RPUlNfNjQgKGRvbid0IHRyYW5zZmVyIG1vcmUKIAkJCQkJdGhhbiA2NCBzZWN0b3JzID0gMzIgS0IgYXQgYSB0aW1lKTsKKwkJCQluID0gSU5JVElBTF9SRUFEMTAgKGZvcmNlIGEgcmV0cnkgb2YgdGhlCisJCQkJCWluaXRpYWwgUkVBRCgxMCkgY29tbWFuZCk7CiAJCQkJbyA9IENBUEFDSVRZX09LIChhY2NlcHQgdGhlIGNhcGFjaXR5CiAJCQkJCXJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UpOwogCQkJCXIgPSBJR05PUkVfUkVTSURVRSAodGhlIGRldmljZSByZXBvcnRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ttZW1sZWFrLnR4dCBiL0RvY3VtZW50YXRpb24va21lbWxlYWsudHh0CmluZGV4IDA5MGU2ZWUuLjUxMDYzZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va21lbWxlYWsudHh0CisrKyBiL0RvY3VtZW50YXRpb24va21lbWxlYWsudHh0CkBAIC0xMSw3ICsxMSw5IEBACiByZXBvcnRlZCB2aWEgL3N5cy9rZXJuZWwvZGVidWcva21lbWxlYWsuIEEgc2ltaWxhciBtZXRob2QgaXMgdXNlZCBieSB0aGUKIFZhbGdyaW5kIHRvb2wgKG1lbWNoZWNrIC0tbGVhay1jaGVjaykgdG8gZGV0ZWN0IHRoZSBtZW1vcnkgbGVha3MgaW4KIHVzZXItc3BhY2UgYXBwbGljYXRpb25zLgotS21lbWxlYWsgaXMgc3VwcG9ydGVkIG9uIHg4NiwgYXJtLCBwb3dlcnBjLCBzcGFyYywgc2gsIG1pY3JvYmxhemUgYW5kIHRpbGUuCisKK1BsZWFzZSBjaGVjayBERUJVR19LTUVNTEVBSyBkZXBlbmRlbmNpZXMgaW4gbGliL0tjb25maWcuZGVidWcgZm9yIHN1cHBvcnRlZAorYXJjaGl0ZWN0dXJlcy4KIAogVXNhZ2UKIC0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21kLnR4dCBiL0RvY3VtZW50YXRpb24vbWQudHh0CmluZGV4IDIzNjZiMWMuLmYwZWVlODMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWQudHh0CkBAIC01NTUsNyArNTU1LDcgQEAKICAgIHN5bmNfbWluCiAgICBzeW5jX21heAogICAgICBUaGUgdHdvIHZhbHVlcywgZ2l2ZW4gYXMgbnVtYmVycyBvZiBzZWN0b3JzLCBpbmRpY2F0ZSBhIHJhbmdlCi0gICAgIHdpdGhpbmcgdGhlIGFycmF5IHdoZXJlICdjaGVjaycvJ3JlcGFpcicgd2lsbCBvcGVyYXRlLiBNdXN0IGJlCisgICAgIHdpdGhpbiB0aGUgYXJyYXkgd2hlcmUgJ2NoZWNrJy8ncmVwYWlyJyB3aWxsIG9wZXJhdGUuIE11c3QgYmUKICAgICAgYSBtdWx0aXBsZSBvZiBjaHVua19zaXplLiBXaGVuIGl0IHJlYWNoZXMgInN5bmNfbWF4IiBpdCB3aWxsCiAgICAgIHBhdXNlLCByYXRoZXIgdGhhbiBjb21wbGV0ZS4KICAgICAgWW91IGNhbiB1c2UgJ3NlbGVjdCcgb3IgJ3BvbGwnIG9uICJzeW5jX2NvbXBsZXRlZCIgdG8gd2FpdCBmb3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJpbnRrLWZvcm1hdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmludGstZm9ybWF0cy50eHQKaW5kZXggMWI1YTVkZC4uNWRmMTc2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wcmludGstZm9ybWF0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmludGstZm9ybWF0cy50eHQKQEAgLTksNyArOSwxMjEgQEAKIAkJc2l6ZV90CQkJJXp1IG9yICV6eAogCQlzc2l6ZV90CQkJJXpkIG9yICV6eAogCi1SYXcgcG9pbnRlciB2YWx1ZSBTSE9VTEQgYmUgcHJpbnRlZCB3aXRoICVwLgorUmF3IHBvaW50ZXIgdmFsdWUgU0hPVUxEIGJlIHByaW50ZWQgd2l0aCAlcC4gVGhlIGtlcm5lbCBzdXBwb3J0cwordGhlIGZvbGxvd2luZyBleHRlbmRlZCBmb3JtYXQgc3BlY2lmaWVycyBmb3IgcG9pbnRlciB0eXBlczoKKworU3ltYm9scy9GdW5jdGlvbiBQb2ludGVyczoKKworCSVwRgl2ZXJzYXRpbGVfaW5pdCsweDAvMHgxMTAKKwklcGYJdmVyc2F0aWxlX2luaXQKKwklcFMJdmVyc2F0aWxlX2luaXQrMHgwLzB4MTEwCisJJXBzCXZlcnNhdGlsZV9pbml0CisJJXBCCXByZXZfZm5fb2ZfdmVyc2F0aWxlX2luaXQrMHg4OC8weDg4CisKKwlGb3IgcHJpbnRpbmcgc3ltYm9scyBhbmQgZnVuY3Rpb24gcG9pbnRlcnMuIFRoZSAnUycgYW5kICdzJyBzcGVjaWZpZXJzCisJcmVzdWx0IGluIHRoZSBzeW1ib2wgbmFtZSB3aXRoICgnUycpIG9yIHdpdGhvdXQgKCdzJykgb2Zmc2V0cy4gV2hlcmUKKwl0aGlzIGlzIHVzZWQgb24gYSBrZXJuZWwgd2l0aG91dCBLQUxMU1lNUyAtIHRoZSBzeW1ib2wgYWRkcmVzcyBpcworCXByaW50ZWQgaW5zdGVhZC4KKworCVRoZSAnQicgc3BlY2lmaWVyIHJlc3VsdHMgaW4gdGhlIHN5bWJvbCBuYW1lIHdpdGggb2Zmc2V0cyBhbmQgc2hvdWxkIGJlCisJdXNlZCB3aGVuIHByaW50aW5nIHN0YWNrIGJhY2t0cmFjZXMuIFRoZSBzcGVjaWZpZXIgdGFrZXMgaW50bworCWNvbnNpZGVyYXRpb24gdGhlIGVmZmVjdCBvZiBjb21waWxlciBvcHRpbWlzYXRpb25zIHdoaWNoIG1heSBvY2N1cgorCXdoZW4gdGFpbC1jYWxsJ3MgYXJlIHVzZWQgYW5kIG1hcmtlZCB3aXRoIHRoZSBub3JldHVybiBHQ0MgYXR0cmlidXRlLgorCisJT24gaWE2NCwgcHBjNjQgYW5kIHBhcmlzYzY0IGFyY2hpdGVjdHVyZXMgZnVuY3Rpb24gcG9pbnRlcnMgYXJlCisJYWN0dWFsbHkgZnVuY3Rpb24gZGVzY3JpcHRvcnMgd2hpY2ggbXVzdCBmaXJzdCBiZSByZXNvbHZlZC4gVGhlICdGJyBhbmQKKwknZicgc3BlY2lmaWVycyBwZXJmb3JtIHRoaXMgcmVzb2x1dGlvbiBhbmQgdGhlbiBwcm92aWRlIHRoZSBzYW1lCisJZnVuY3Rpb25hbGl0eSBhcyB0aGUgJ1MnIGFuZCAncycgc3BlY2lmaWVycy4KKworS2VybmVsIFBvaW50ZXJzOgorCisJJXBLCTB4MDEyMzQ1Njcgb3IgMHgwMTIzNDU2Nzg5YWJjZGVmCisKKwlGb3IgcHJpbnRpbmcga2VybmVsIHBvaW50ZXJzIHdoaWNoIHNob3VsZCBiZSBoaWRkZW4gZnJvbSB1bnByaXZpbGVnZWQKKwl1c2Vycy4gVGhlIGJlaGF2aW91ciBvZiAlcEsgZGVwZW5kcyBvbiB0aGUga3B0cl9yZXN0cmljdCBzeXNjdGwgLSBzZWUKKwlEb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0IGZvciBtb3JlIGRldGFpbHMuCisKK1N0cnVjdCBSZXNvdXJjZXM6CisKKwklcHIJW21lbSAweDYwMDAwMDAwLTB4NmZmZmZmZmYgZmxhZ3MgMHgyMjAwXSBvcgorCQlbbWVtIDB4MDAwMDAwMDA2MDAwMDAwMC0weDAwMDAwMDAwNmZmZmZmZmYgZmxhZ3MgMHgyMjAwXQorCSVwUglbbWVtIDB4NjAwMDAwMDAtMHg2ZmZmZmZmZiBwcmVmXSBvcgorCQlbbWVtIDB4MDAwMDAwMDA2MDAwMDAwMC0weDAwMDAwMDAwNmZmZmZmZmYgcHJlZl0KKworCUZvciBwcmludGluZyBzdHJ1Y3QgcmVzb3VyY2VzLiBUaGUgJ1InIGFuZCAncicgc3BlY2lmaWVycyByZXN1bHQgaW4gYQorCXByaW50ZWQgcmVzb3VyY2Ugd2l0aCAoJ1InKSBvciB3aXRob3V0ICgncicpIGEgZGVjb2RlZCBmbGFncyBtZW1iZXIuCisKK01BQy9GRERJIGFkZHJlc3NlczoKKworCSVwTQkwMDowMTowMjowMzowNDowNQorCSVwTUYJMDAtMDEtMDItMDMtMDQtMDUKKwklcG0JMDAwMTAyMDMwNDA1CisKKwlGb3IgcHJpbnRpbmcgNi1ieXRlIE1BQy9GRERJIGFkZHJlc3NlcyBpbiBoZXggbm90YXRpb24uIFRoZSAnTScgYW5kICdtJworCXNwZWNpZmllcnMgcmVzdWx0IGluIGEgcHJpbnRlZCBhZGRyZXNzIHdpdGggKCdNJykgb3Igd2l0aG91dCAoJ20nKSBieXRlCisJc2VwYXJhdG9ycy4gVGhlIGRlZmF1bHQgYnl0ZSBzZXBhcmF0b3IgaXMgdGhlIGNvbG9uICgnOicpLgorCisJV2hlcmUgRkRESSBhZGRyZXNzZXMgYXJlIGNvbmNlcm5lZCB0aGUgJ0YnIHNwZWNpZmllciBjYW4gYmUgdXNlZCBhZnRlcgorCXRoZSAnTScgc3BlY2lmaWVyIHRvIHVzZSBkYXNoICgnLScpIHNlcGFyYXRvcnMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdAorCXNlcGFyYXRvci4KKworSVB2NCBhZGRyZXNzZXM6CisKKwklcEk0CTEuMi4zLjQKKwklcGk0CTAwMS4wMDIuMDAzLjAwNAorCSVwW0lpXVtobmJsXQorCisJRm9yIHByaW50aW5nIElQdjQgZG90LXNlcGFyYXRlZCBkZWNpbWFsIGFkZHJlc3Nlcy4gVGhlICdJNCcgYW5kICdpNCcKKwlzcGVjaWZpZXJzIHJlc3VsdCBpbiBhIHByaW50ZWQgYWRkcmVzcyB3aXRoICgnaTQnKSBvciB3aXRob3V0ICgnSTQnKQorCWxlYWRpbmcgemVyb3MuCisKKwlUaGUgYWRkaXRpb25hbCAnaCcsICduJywgJ2InLCBhbmQgJ2wnIHNwZWNpZmllcnMgYXJlIHVzZWQgdG8gc3BlY2lmeQorCWhvc3QsIG5ldHdvcmssIGJpZyBvciBsaXR0bGUgZW5kaWFuIG9yZGVyIGFkZHJlc3NlcyByZXNwZWN0aXZlbHkuIFdoZXJlCisJbm8gc3BlY2lmaWVyIGlzIHByb3ZpZGVkIHRoZSBkZWZhdWx0IG5ldHdvcmsvYmlnIGVuZGlhbiBvcmRlciBpcyB1c2VkLgorCitJUHY2IGFkZHJlc3NlczoKKworCSVwSTYJMDAwMTowMDAyOjAwMDM6MDAwNDowMDA1OjAwMDY6MDAwNzowMDA4CisJJXBpNgkwMDAxMDAwMjAwMDMwMDA0MDAwNTAwMDYwMDA3MDAwOAorCSVwSTZjCTE6MjozOjQ6NTo2Ojc6OAorCisJRm9yIHByaW50aW5nIElQdjYgbmV0d29yay1vcmRlciAxNi1iaXQgaGV4IGFkZHJlc3Nlcy4gVGhlICdJNicgYW5kICdpNicKKwlzcGVjaWZpZXJzIHJlc3VsdCBpbiBhIHByaW50ZWQgYWRkcmVzcyB3aXRoICgnSTYnKSBvciB3aXRob3V0ICgnaTYnKQorCWNvbG9uLXNlcGFyYXRvcnMuIExlYWRpbmcgemVyb3MgYXJlIGFsd2F5cyB1c2VkLgorCisJVGhlIGFkZGl0aW9uYWwgJ2MnIHNwZWNpZmllciBjYW4gYmUgdXNlZCB3aXRoIHRoZSAnSScgc3BlY2lmaWVyIHRvCisJcHJpbnQgYSBjb21wcmVzc2VkIElQdjYgYWRkcmVzcyBhcyBkZXNjcmliZWQgYnkKKwlodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1OTUyCisKK1VVSUQvR1VJRCBhZGRyZXNzZXM6CisKKwklcFViCTAwMDEwMjAzLTA0MDUtMDYwNy0wODA5LTBhMGIwYzBkMGUwZgorCSVwVUIJMDAwMTAyMDMtMDQwNS0wNjA3LTA4MDktMEEwQjBDMEQwRTBGCisJJXBVbAkwMzAyMDEwMC0wNTA0LTA3MDYtMDgwOS0wYTBiMGMwZTBlMGYKKwklcFVMCTAzMDIwMTAwLTA1MDQtMDcwNi0wODA5LTBBMEIwQzBFMEUwRgorCisJRm9yIHByaW50aW5nIDE2LWJ5dGUgVVVJRC9HVUlEcyBhZGRyZXNzZXMuIFRoZSBhZGRpdGlvbmFsICdsJywgJ0wnLAorCSdiJyBhbmQgJ0InIHNwZWNpZmllcnMgYXJlIHVzZWQgdG8gc3BlY2lmeSBhIGxpdHRsZSBlbmRpYW4gb3JkZXIgaW4KKwlsb3dlciAoJ2wnKSBvciB1cHBlciBjYXNlICgnTCcpIGhleCBjaGFyYWN0ZXJzIC0gYW5kIGJpZyBlbmRpYW4gb3JkZXIKKwlpbiBsb3dlciAoJ2InKSBvciB1cHBlciBjYXNlICgnQicpIGhleCBjaGFyYWN0ZXJzLgorCisJV2hlcmUgbm8gYWRkaXRpb25hbCBzcGVjaWZpZXJzIGFyZSB1c2VkIHRoZSBkZWZhdWx0IGxpdHRsZSBlbmRpYW4KKwlvcmRlciB3aXRoIGxvd2VyIGNhc2UgaGV4IGNoYXJhY3RlcnMgd2lsbCBiZSBwcmludGVkLgorCitzdHJ1Y3QgdmFfZm9ybWF0OgorCisJJXBWCisKKwlGb3IgcHJpbnRpbmcgc3RydWN0IHZhX2Zvcm1hdCBzdHJ1Y3R1cmVzLiBUaGVzZSBjb250YWluIGEgZm9ybWF0IHN0cmluZworCWFuZCB2YV9saXN0IGFzIGZvbGxvd3M6CisKKwlzdHJ1Y3QgdmFfZm9ybWF0IHsKKwkJY29uc3QgY2hhciAqZm10OworCQl2YV9saXN0ICp2YTsKKwl9OworCisJRG8gbm90IHVzZSB0aGlzIGZlYXR1cmUgd2l0aG91dCBzb21lIG1lY2hhbmlzbSB0byB2ZXJpZnkgdGhlCisJY29ycmVjdG5lc3Mgb2YgdGhlIGZvcm1hdCBzdHJpbmcgYW5kIHZhX2xpc3QgYXJndW1lbnRzLgogCiB1NjQgU0hPVUxEIGJlIHByaW50ZWQgd2l0aCAlbGx1LyVsbHgsICh1bnNpZ25lZCBsb25nIGxvbmcpOgogCkBAIC0zMiw0ICsxNDYsNSBAQAogVGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBhdHRlbnRpb24uCiAKIAotQnkgUmFuZHkgRHVubGFwIDxyZHVubGFwQHhlbm90aW1lLm5ldD4KK0J5IFJhbmR5IER1bmxhcCA8cmR1bmxhcEB4ZW5vdGltZS5uZXQ+IGFuZAorQW5kcmV3IE11cnJheSA8YW11cnJheUBtcGMtZGF0YS5jby51az4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLWRlc2lnbi1DRlMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy50eHQKaW5kZXggOTk5NjE5OS4uOTFlY2ZmMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtZGVzaWduLUNGUy50eHQKQEAgLTIyMyw5ICsyMjMsMTAgQEAKIGdyb3VwIGNyZWF0ZWQgdXNpbmcgdGhlIHBzZXVkbyBmaWxlc3lzdGVtLiAgU2VlIGV4YW1wbGUgc3RlcHMgYmVsb3cgdG8gY3JlYXRlCiB0YXNrIGdyb3VwcyBhbmQgbW9kaWZ5IHRoZWlyIENQVSBzaGFyZSB1c2luZyB0aGUgImNncm91cHMiIHBzZXVkbyBmaWxlc3lzdGVtLgogCi0JIyBta2RpciAvZGV2L2NwdWN0bAotCSMgbW91bnQgLXQgY2dyb3VwIC1vY3B1IG5vbmUgL2Rldi9jcHVjdGwKLQkjIGNkIC9kZXYvY3B1Y3RsCisJIyBtb3VudCAtdCB0bXBmcyBjZ3JvdXBfcm9vdCAvc3lzL2ZzL2Nncm91cAorCSMgbWtkaXIgL3N5cy9mcy9jZ3JvdXAvY3B1CisJIyBtb3VudCAtdCBjZ3JvdXAgLW9jcHUgbm9uZSAvc3lzL2ZzL2Nncm91cC9jcHUKKwkjIGNkIC9zeXMvZnMvY2dyb3VwL2NwdQogCiAJIyBta2RpciBtdWx0aW1lZGlhCSMgY3JlYXRlICJtdWx0aW1lZGlhIiBncm91cCBvZiB0YXNrcwogCSMgbWtkaXIgYnJvd3NlcgkJIyBjcmVhdGUgImJyb3dzZXIiIGdyb3VwIG9mIHRhc2tzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQKaW5kZXggNjA1YjBkNC4uNzFiNTRkNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXJ0LWdyb3VwLnR4dApAQCAtMTI5LDkgKzEyOSw4IEBACiBFbmFibGluZyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgbGV0cyB5b3UgZXhwbGljaXRseSBhbGxvY2F0ZSByZWFsCiBDUFUgYmFuZHdpZHRoIHRvIHRhc2sgZ3JvdXBzLgogCi1UaGlzIHVzZXMgdGhlIC9jZ3JvdXAgdmlydHVhbCBmaWxlIHN5c3RlbSBhbmQKLSIvY2dyb3VwLzxjZ3JvdXA+L2NwdS5ydF9ydW50aW1lX3VzIiB0byBjb250cm9sIHRoZSBDUFUgdGltZSByZXNlcnZlZCBmb3IgZWFjaAotY29udHJvbCBncm91cC4KK1RoaXMgdXNlcyB0aGUgY2dyb3VwIHZpcnR1YWwgZmlsZSBzeXN0ZW0gYW5kICI8Y2dyb3VwPi9jcHUucnRfcnVudGltZV91cyIKK3RvIGNvbnRyb2wgdGhlIENQVSB0aW1lIHJlc2VydmVkIGZvciBlYWNoIGNvbnRyb2wgZ3JvdXAuCiAKIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHdvcmtpbmcgd2l0aCBjb250cm9sIGdyb3VwcywgeW91IHNob3VsZCByZWFkCiBEb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgYXMgd2VsbC4KQEAgLTE1MCw3ICsxNDksNyBAQAogPT09PT09PT09PT09PT09CiAKIFRoZXJlIGlzIHdvcmsgaW4gcHJvZ3Jlc3MgdG8gbWFrZSB0aGUgc2NoZWR1bGluZyBwZXJpb2QgZm9yIGVhY2ggZ3JvdXAKLSgiL2Nncm91cC88Y2dyb3VwPi9jcHUucnRfcGVyaW9kX3VzIikgY29uZmlndXJhYmxlIGFzIHdlbGwuCisoIjxjZ3JvdXA+L2NwdS5ydF9wZXJpb2RfdXMiKSBjb25maWd1cmFibGUgYXMgd2VsbC4KIAogVGhlIGNvbnN0cmFpbnQgb24gdGhlIHBlcmlvZCBpcyB0aGF0IGEgc3ViZ3JvdXAgbXVzdCBoYXZlIGEgc21hbGxlciBvcgogZXF1YWwgcGVyaW9kIHRvIGl0cyBwYXJlbnQuIEJ1dCByZWFsaXN0aWNhbGx5IGl0cyBub3QgdmVyeSB1c2VmdWwgX3lldF8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0IGIvRG9jdW1lbnRhdGlvbi92bS9od3BvaXNvbi50eHQKaW5kZXggMTJmOWJhMi4uNTUwMDY4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9od3BvaXNvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9od3BvaXNvbi50eHQKQEAgLTEyOSwxMiArMTI5LDEyIEBACiBvZiB0aGUgbWVtY2cuCiAKIEV4YW1wbGU6Ci0gICAgICAgIG1rZGlyIC9jZ3JvdXAvaHdwb2lzb24KKyAgICAgICAgbWtkaXIgL3N5cy9mcy9jZ3JvdXAvbWVtL2h3cG9pc29uCiAKICAgICAgICAgdXNlbWVtIC1tIDEwMCAtcyAxMDAwICYKLSAgICAgICAgZWNobyBgam9icyAtcGAgPiAvY2dyb3VwL2h3cG9pc29uL3Rhc2tzCisgICAgICAgIGVjaG8gYGpvYnMgLXBgID4gL3N5cy9mcy9jZ3JvdXAvbWVtL2h3cG9pc29uL3Rhc2tzCiAKLSAgICAgICAgbWVtY2dfaW5vPSQobHMgLWlkIC9jZ3JvdXAvaHdwb2lzb24gfCBjdXQgLWYxIC1kJyAnKQorICAgICAgICBtZW1jZ19pbm89JChscyAtaWQgL3N5cy9mcy9jZ3JvdXAvbWVtL2h3cG9pc29uIHwgY3V0IC1mMSAtZCcgJykKICAgICAgICAgZWNobyAkbWVtY2dfaW5vID4gL2RlYnVnL2h3cG9pc29uL2NvcnJ1cHQtZmlsdGVyLW1lbWNnCiAKICAgICAgICAgcGFnZS10eXBlcyAtcCBgcGlkb2YgaW5pdGAgICAtLWh3cG9pc29uICAjIHNoYWxsIGRvIG5vdGhpbmcKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMjk4MDFmNy4uZjAzNThjZCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE3MzksNyArMTczOSw3IEBACiBGOglkcml2ZXJzL25ldC9lbmljLwogCiBDSVJSVVMgTE9HSUMgRVA5M1hYIEVUSEVSTkVUIERSSVZFUgotTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KK006CUhhcnRsZXkgU3dlZXRlbiA8aHN3ZWV0ZW5AdmlzaW9uZW5ncmF2ZXJzLmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTE4ODksNyArMTg4OSw2IEBACiBXOglodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrL3Byb2plY3RzL2NwdWZyZXEvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RhdmVqL2NwdWZyZXEuZ2l0CiBTOglNYWludGFpbmVkCi1GOglhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvCiBGOglkcml2ZXJzL2NwdWZyZXEvCiBGOglpbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAogCkBAIC0yMjkyLDggKzIyOTEsNyBAQAogCiBFQlRBQkxFUwogTToJQmFydCBEZSBTY2h1eW1lciA8YmFydC5kZS5zY2h1eW1lckBwYW5kb3JhLmJlPgotTDoJZWJ0YWJsZXMtdXNlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLUw6CWVidGFibGVzLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJbmV0ZmlsdGVyLWRldmVsQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2VidGFibGVzLnNvdXJjZWZvcmdlLm5ldC8KIFM6CU1haW50YWluZWQKIEY6CWluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfKi5oCkBAIC0zODIwLDYgKzM4MTgsMTIgQEAKIEY6CWRyaXZlcnMvbGVkcy8KIEY6CWluY2x1ZGUvbGludXgvbGVkcy5oCiAKK0xFR0FDWSBFRVBST00gRFJJVkVSCitNOglKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2VlcHJvbQorRjoJZHJpdmVycy9taXNjL2VlcHJvbS9lZXByb20uYworCiBMRUdPIFVTQiBUb3dlciBkcml2ZXIKIE06CUp1ZXJnZW4gU3R1YmVyIDxzdGFyYmx1ZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBMOglsZWdvdXNiLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApAQCAtNDE0NSw3ICs0MTQ5LDcgQEAKIEY6CW1tLwogCiBNRU1PUlkgUkVTT1VSQ0UgQ09OVFJPTExFUgotTToJQmFsYmlyIFNpbmdoIDxiYWxiaXJAbGludXgudm5ldC5pYm0uY29tPgorTToJQmFsYmlyIFNpbmdoIDxic2luZ2hhcm9yYUBnbWFpbC5jb20+CiBNOglEYWlzdWtlIE5pc2hpbXVyYSA8bmlzaGltdXJhQG14cC5uZXMubmVjLmNvLmpwPgogTToJS0FNRVpBV0EgSGlyb3l1a2kgPGthbWV6YXdhLmhpcm95dUBqcC5mdWppdHN1LmNvbT4KIEw6CWxpbnV4LW1tQGt2YWNrLm9yZwpAQCAtNDI1Miw4ICs0MjU2LDcgQEAKIEY6CWluY2x1ZGUvbGludXgvbW1jLwogCiBNVUxUSU1FRElBIENBUkQgKE1NQykgRVRDLiBPVkVSIFNQSQotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci1TOglPZGQgRml4ZXMKK1M6CU9ycGhhbgogRjoJZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMKIEY6CWluY2x1ZGUvbGludXgvc3BpL21tY19zcGkuaAogCkBAIC00NjAzLDcgKzQ2MDYsNiBAQAogCiBPTUFQIFVTQiBTVVBQT1JUCiBNOglGZWxpcGUgQmFsYmkgPGJhbGJpQHRpLmNvbT4KLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogTDoJbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYmFsYmkvdXNiLmdpdApAQCAtNDg5Miw3ICs0ODk0LDcgQEAKIEY6CWFyY2gvKi9pbmNsdWRlL2FzbS9wZXJjcHUuaAogCiBQRVItVEFTSyBERUxBWSBBQ0NPVU5USU5HCi1NOglCYWxiaXIgU2luZ2ggPGJhbGJpckBsaW51eC52bmV0LmlibS5jb20+CitNOglCYWxiaXIgU2luZ2ggPGJzaW5naGFyb3JhQGdtYWlsLmNvbT4KIFM6CU1haW50YWluZWQKIEY6CWluY2x1ZGUvbGludXgvZGVsYXlhY2N0LmgKIEY6CWtlcm5lbC9kZWxheWFjY3QuYwpAQCAtNDk0Nyw2ICs0OTQ5LDcgQEAKIEY6CWRyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItdW5pY29yZTMyaW8uaAogRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wdXYzLmMKIEY6CWRyaXZlcnMvdmlkZW8vZmItcHV2My5jCitGOglkcml2ZXJzL3J0Yy9ydGMtcHV2My5jCiAKIFBNQyBTSUVSUkEgTWF4UkFJRCBEUklWRVIKIE06CUFuaWwgUmF2aW5kcmFuYXRoIDxhbmlsX3JhdmluZHJhbmF0aEBwbWMtc2llcnJhLmNvbT4KQEAgLTU5ODQsNyArNTk4Nyw2IEBACiBGOglkcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeCoKIAogU1BJIFNVQlNZU1RFTQotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CiBMOglzcGktZGV2ZWwtZ2VuZXJhbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFE6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L3NwaS1kZXZlbC1nZW5lcmFsL2xpc3QvCkBAIC02MTAwLDcgKzYxMDIsNyBAQAogRjoJRG9jdW1lbnRhdGlvbi90YXJnZXQvCiAKIFRBU0tTVEFUUyBTVEFUSVNUSUNTIElOVEVSRkFDRQotTToJQmFsYmlyIFNpbmdoIDxiYWxiaXJAbGludXgudm5ldC5pYm0uY29tPgorTToJQmFsYmlyIFNpbmdoIDxic2luZ2hhcm9yYUBnbWFpbC5jb20+CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2FjY291bnRpbmcvdGFza3N0YXRzKgogRjoJaW5jbHVkZS9saW51eC90YXNrc3RhdHMqCkBAIC02NDMyLDkgKzY0MzQsOCBAQAogRjoJZHJpdmVycy91c2IvbWlzYy9yaW81MDAqCiAKIFVTQiBFSENJIERSSVZFUgotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCi1TOglPZGQgRml4ZXMKK1M6CU9ycGhhbgogRjoJRG9jdW1lbnRhdGlvbi91c2IvZWhjaS50eHQKIEY6CWRyaXZlcnMvdXNiL2hvc3QvZWhjaSoKIApAQCAtNjQ0OCw5ICs2NDQ5LDEwIEBACiBGOglkcml2ZXJzL21lZGlhL3ZpZGVvL2V0NjF4MjUxLwogCiBVU0IgR0FER0VUL1BFUklQSEVSQUwgU1VCU1lTVEVNCi1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK006CUZlbGlwZSBCYWxiaSA8YmFsYmlAdGkuY29tPgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5saW51eC11c2Iub3JnL2dhZGdldAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9iYWxiaS91c2IuZ2l0CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3VzYi9nYWRnZXQvCiBGOglpbmNsdWRlL2xpbnV4L3VzYi9nYWRnZXQqCkBAIC02NDYwLDcgKzY0NjIsNyBAQAogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qaWtvcy9oaWQuZ2l0CiBTOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9uL3VzYi9oaWRkZXYudHh0CitGOglEb2N1bWVudGF0aW9uL2hpZC9oaWRkZXYudHh0CiBGOglkcml2ZXJzL2hpZC91c2JoaWQvCiAKIFVTQiBJU1AxMTZYIERSSVZFUgpAQCAtNjQ5Miw5ICs2NDk0LDggQEAKIEY6CXNvdW5kL3VzYi9taWRpLioKIAogVVNCIE9IQ0kgRFJJVkVSCi1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU9kZCBGaXhlcworUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL3VzYi9vaGNpLnR4dAogRjoJZHJpdmVycy91c2IvaG9zdC9vaGNpKgogCkBAIC02NzIwLDYgKzY3MjEsMTQgQEAKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKIEY6CWZzL2ZhdC8KIAorVklERU9CVUYyIEZSQU1FV09SSworTToJUGF3ZWwgT3NjaWFrIDxwYXdlbEBvc2NpYWsuY29tPgorTToJTWFyZWsgU3p5cHJvd3NraSA8bS5zenlwcm93c2tpQHNhbXN1bmcuY29tPgorTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi0qCitGOglpbmNsdWRlL21lZGlhL3ZpZGVvYnVmMi0qCisKIFZJUlRJTyBDT05TT0xFIERSSVZFUgogTToJQW1pdCBTaGFoIDxhbWl0LnNoYWhAcmVkaGF0LmNvbT4KIEw6CXZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCkBAIC02OTk3LDYgKzcwMDYsMTMgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvcGxhdGZvcm0veDg2CiAKK1g4NiBNQ0UgSU5GUkFTVFJVQ1RVUkUKK006CVRvbnkgTHVjayA8dG9ueS5sdWNrQGludGVsLmNvbT4KK006CUJvcmlzbGF2IFBldGtvdiA8YnBAYW1kNjQub3JnPgorTDoJbGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWFyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrLyoKKwogWEVOIEhZUEVSVklTT1IgSU5URVJGQUNFCiBNOglKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXkuZml0emhhcmRpbmdlQGNpdHJpeC5jb20+CiBNOglLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGFmYjhlMGQuLjQxMzMwYTAgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDMKIFBBVENITEVWRUwgPSAwCiBTVUJMRVZFTCA9IDAKLUVYVFJBVkVSU0lPTiA9IC1yYzEKK0VYVFJBVkVSU0lPTiA9IC1yYzQKIE5BTUUgPSBTbmVha3kgV2Vhc2VsCiAKICMgKkRPQ1VNRU5UQVRJT04qCkBAIC0zNzgsNyArMzc4LDcgQEAKIAogIyBSZWFkIEtFUk5FTFJFTEVBU0UgZnJvbSBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZSAoaWYgaXQgZXhpc3RzKQogS0VSTkVMUkVMRUFTRSA9ICQoc2hlbGwgY2F0IGluY2x1ZGUvY29uZmlnL2tlcm5lbC5yZWxlYXNlIDI+IC9kZXYvbnVsbCkKLUtFUk5FTFZFUlNJT04gPSAkKFZFUlNJT04pLiQoUEFUQ0hMRVZFTCkuJChTVUJMRVZFTCkkKEVYVFJBVkVSU0lPTikKK0tFUk5FTFZFUlNJT04gPSAkKFZFUlNJT04pJChpZiAkKFBBVENITEVWRUwpLC4kKFBBVENITEVWRUwpJChpZiAkKFNVQkxFVkVMKSwuJChTVUJMRVZFTCkpKSQoRVhUUkFWRVJTSU9OKQogCiBleHBvcnQgVkVSU0lPTiBQQVRDSExFVkVMIFNVQkxFVkVMIEtFUk5FTFJFTEVBU0UgS0VSTkVMVkVSU0lPTgogZXhwb3J0IEFSQ0ggU1JDQVJDSCBDT05GSUdfU0hFTEwgSE9TVENDIEhPU1RDRkxBR1MgQ1JPU1NfQ09NUElMRSBBUyBMRCBDQwpAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIAogZGVmaW5lIGZpbGVjaGtfdmVyc2lvbi5oCiAJKGVjaG8gXCNkZWZpbmUgTElOVVhfVkVSU0lPTl9DT0RFICQoc2hlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlleHByICQoVkVSU0lPTikgXCogNjU1MzYgKyAkKFBBVENITEVWRUwpIFwqIDI1NiArICQoU1VCTEVWRUwpKTsgICAgIFwKKwlleHByICQoVkVSU0lPTikgXCogNjU1MzYgKyAwJChQQVRDSExFVkVMKSBcKiAyNTYgKyAwJChTVUJMRVZFTCkpOyAgICBcCiAJZWNobyAnI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSknOykKIGVuZGVmCiAKQEAgLTExMTAsMTEgKzExMTAsNiBAQAogCiBQSE9OWSArPSBfbW9kaW5zdF8KIF9tb2RpbnN0XzoKLQlAaWYgWyAteiAiYCQoREVQTU9EKSAtViAyPi9kZXYvbnVsbCB8IGdyZXAgbW9kdWxlLWluaXQtdG9vbHNgIiBdOyB0aGVuIFwKLQkJZWNobyAiV2FybmluZzogeW91IG1heSBuZWVkIHRvIGluc3RhbGwgbW9kdWxlLWluaXQtdG9vbHMiOyBcCi0JCWVjaG8gIlNlZSBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrL2RvY3MvcG9zdC1oYWxsb3dlZW4tMi42LnR4dCI7XAotCQlzbGVlcCAxOyBcCi0JZmkKIAlAcm0gLXJmICQoTU9ETElCKS9rZXJuZWwKIAlAcm0gLWYgJChNT0RMSUIpL3NvdXJjZQogCUBta2RpciAtcCAkKE1PRExJQikva2VybmVsCkBAIC0xNTMxLDEyICsxNTI2LDggQEAKIAogIyBSdW4gZGVwbW9kIG9ubHkgaWYgd2UgaGF2ZSBTeXN0ZW0ubWFwIGFuZCBkZXBtb2QgaXMgZXhlY3V0YWJsZQogcXVpZXRfY21kX2RlcG1vZCA9IERFUE1PRCAgJChLRVJORUxSRUxFQVNFKQotICAgICAgY21kX2RlcG1vZCA9IFwKLQlpZiBbIC1yIFN5c3RlbS5tYXAgLWEgLXggJChERVBNT0QpIF07IHRoZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCSQoREVQTU9EKSAtYWUgLUYgU3lzdGVtLm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCSQoaWYgJChzdHJpcCAkKElOU1RBTExfTU9EX1BBVEgpKSwgLWIgJChJTlNUQUxMX01PRF9QQVRIKSApICAgICBcCi0JCSQoS0VSTkVMUkVMRUFTRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZmkKKyAgICAgIGNtZF9kZXBtb2QgPSAkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9zY3JpcHRzL2RlcG1vZC5zaCAkKERFUE1PRCkgXAorICAgICAgICAgICAgICAgICAgICQoS0VSTkVMUkVMRUFTRSkKIAogIyBDcmVhdGUgdGVtcG9yYXJ5IGRpciBmb3IgbW9kdWxlIHN1cHBvcnQgZmlsZXMKICMgY2xlYW4gaXQgdXAgb25seSB3aGVuIGJ1aWxkaW5nIGFsbCBtb2R1bGVzCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKaW5kZXggMzc2ZjIyMS4uMzI2ZjBhMiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJbGVuID0gbmFtZWxlbjsKLQlpZiAobmFtZWxlbiA+IDMyKQorCWlmIChsZW4gPiAzMikKIAkJbGVuID0gMzI7CiAKIAlkb3duX3JlYWQoJnV0c19zZW0pOwpAQCAtNTk0LDcgKzU5NCw3IEBACiAJZG93bl9yZWFkKCZ1dHNfc2VtKTsKIAlyZXMgPSBzeXNpbmZvX3RhYmxlW29mZnNldF07CiAJbGVuID0gc3RybGVuKHJlcykrMTsKLQlpZiAobGVuID4gY291bnQpCisJaWYgKCh1bnNpZ25lZCBsb25nKWxlbiA+ICh1bnNpZ25lZCBsb25nKWNvdW50KQogCQlsZW4gPSBjb3VudDsKIAlpZiAoY29weV90b191c2VyKGJ1ZiwgcmVzLCBsZW4pKQogCQllcnIgPSAtRUZBVUxUOwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJCXJldHVybiAxOwogCiAJY2FzZSBHU0lfR0VUX0hXUlBCOgotCQlpZiAobmJ5dGVzIDwgc2l6ZW9mKCpod3JwYikpCisJCWlmIChuYnl0ZXMgPiBzaXplb2YoKmh3cnBiKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgaHdycGIsIG5ieXRlcykgIT0gMCkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTAwOCw2ICsxMDA4LDcgQEAKIHsKIAlzdHJ1Y3QgcnVzYWdlIHI7CiAJbG9uZyByZXQsIGVycjsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKIAltbV9zZWdtZW50X3Qgb2xkX2ZzOwogCiAJaWYgKCF1cikKQEAgLTEwMTYsMTMgKzEwMTcsMTUgQEAKIAlvbGRfZnMgPSBnZXRfZnMoKTsKIAkJCiAJc2V0X2ZzIChLRVJORUxfRFMpOwotCXJldCA9IHN5c193YWl0NChwaWQsIHVzdGF0dXMsIG9wdGlvbnMsIChzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqKSAmcik7CisJcmV0ID0gc3lzX3dhaXQ0KHBpZCwgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgJnN0YXR1cywgb3B0aW9ucywKKwkJCShzdHJ1Y3QgcnVzYWdlIF9fdXNlciAqKSAmcik7CiAJc2V0X2ZzIChvbGRfZnMpOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1ciwgc2l6ZW9mKCp1cikpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWVyciA9IDA7CisJZXJyIHw9IHB1dF91c2VyKHN0YXR1cywgdXN0YXR1cyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoci5ydV91dGltZS50dl9zZWMsICZ1ci0+cnVfdXRpbWUudHZfc2VjKTsKIAllcnIgfD0gX19wdXRfdXNlcihyLnJ1X3V0aW1lLnR2X3VzZWMsICZ1ci0+cnVfdXRpbWUudHZfdXNlYyk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoci5ydV9zdGltZS50dl9zZWMsICZ1ci0+cnVfc3RpbWUudHZfc2VjKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IGY5ZGE0MTkuLjk0MmZhZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtNjkxLDkgKzY5MSw5IEBACiAKIAkJLndvcmQJMHg0MTA2OTI2MAkJQCBBUk05MjZFSi1TICh2NVRFSikKIAkJLndvcmQJMHhmZjBmZmZmMAotCQliCV9fYXJtOTI2ZWpzX21tdV9jYWNoZV9vbgotCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgotCQliCV9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoCisJCVcoYikJX19hcm05MjZlanNfbW11X2NhY2hlX29uCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCVcoYikJX19hcm12NXRlal9tbXVfY2FjaGVfZmx1c2gKIAogCQkud29yZAkweDAwMDA3MDAwCQlAIEFSTTcgSURzCiAJCS53b3JkCTB4MDAwMGYwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9kYXZpbmNpX2FsbF9kZWZjb25maWcKaW5kZXggODg5OTIyYS4uNjdiNWFiYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZGF2aW5jaV9hbGxfZGVmY29uZmlnCkBAIC0xNTcsNyArMTU3LDcgQEAKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9bQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19YRlNfRlM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uZXR4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmV0eF9kZWZjb25maWcKaW5kZXggMzE2YWY1NC4uOWMwYWQ3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZXR4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL25ldHhfZGVmY29uZmlnCkBAIC02MCw3ICs2MCw3IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfUlRDX0NMQVNTPW0KK0NPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19KRkZTMl9GUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3ZpcGVyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnCmluZGV4IDhiMGM3MTcuLjFkMDFkZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvdmlwZXJfZGVmY29uZmlnCkBAIC0xNDIsNyArMTQyLDcgQEAKIENPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KIENPTkZJR19VU0JfR19TRVJJQUw9bQogQ09ORklHX1VTQl9HX1BSSU5URVI9bQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0RTMTMwNz1tCiBDT05GSUdfUlRDX0RSVl9TQTExMDA9bQogQ09ORklHX0VYVDJfRlM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKaW5kZXggNWI1NTA0MS4uNzIxODMyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3hjZXBfZGVmY29uZmlnCkBAIC03Myw3ICs3Myw3IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0NMQVNTPW0KK0NPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfU0ExMTAwPW0KIENPTkZJR19ETUFERVZJQ0VTPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvemV1c19kZWZjb25maWcKaW5kZXggOTYwZjY1NS4uNTk1NzdhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy96ZXVzX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3pldXNfZGVmY29uZmlnCkBAIC0xNTgsNyArMTU4LDcgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUPW0KIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTz1tCiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049bQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0lTTDEyMDg9bQogQ09ORklHX1JUQ19EUlZfUFhBPW0KIENPTkZJR19FWFQyX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9kZXZ0cmVlLmMgYi9hcmNoL2FybS9rZXJuZWwvZGV2dHJlZS5jCmluZGV4IGE3MDFlNDIuLjBjZGQ3YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9kZXZ0cmVlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2RldnRyZWUuYwpAQCAtNzYsNiArNzYsOSBAQAogCXVuc2lnbmVkIGxvbmcgZHRfcm9vdDsKIAljb25zdCBjaGFyICptb2RlbDsKIAorCWlmICghZHRfcGh5cykKKwkJcmV0dXJuIE5VTEw7CisKIAlkZXZ0cmVlID0gcGh5c190b192aXJ0KGR0X3BoeXMpOwogCiAJLyogY2hlY2sgZGV2aWNlIHRyZWUgdmFsaWRpdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IGU4ZDg4NTYuLjkwYzYyY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtNDM1LDYgKzQzNSwxMCBAQAogCXVzcl9lbnRyeQogCWt1c2VyX2NtcHhjaGdfY2hlY2sKIAorI2lmZGVmIENPTkZJR19JUlFTT0ZGX1RSQUNFUgorCWJsCXRyYWNlX2hhcmRpcnFzX29mZgorI2VuZGlmCisKIAlnZXRfdGhyZWFkX2luZm8gdHNrCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIAlsZHIJcjgsIFt0c2ssICNUSV9QUkVFTVBUXQkJQCBnZXQgcHJlZW1wdCBjb3VudApAQCAtNDUzLDcgKzQ1Nyw3IEBACiAjZW5kaWYKIAogCW1vdgl3aHksICMwCi0JYglyZXRfdG9fdXNlcgorCWIJcmV0X3RvX3VzZXJfZnJvbV9pcnEKICBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9faXJxX3VzcikKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IDFlN2IwNGEuLmIyYTI3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTY0LDYgKzY0LDcgQEAKIEVOVFJZKHJldF90b191c2VyKQogcmV0X3Nsb3dfc3lzY2FsbDoKIAlkaXNhYmxlX2lycQkJCQlAIGRpc2FibGUgaW50ZXJydXB0cworRU5UUlkocmV0X3RvX3VzZXJfZnJvbV9pcnEpCiAJbGRyCXIxLCBbdHNrLCAjVElfRkxBR1NdCiAJdHN0CXIxLCAjX1RJRl9XT1JLX01BU0sKIAlibmUJd29ya19wZW5kaW5nCkBAIC03NSw2ICs3Niw3IEBACiAJYXJjaF9yZXRfdG9fdXNlciByMSwgbHIKIAogCXJlc3RvcmVfdXNlcl9yZWdzIGZhc3QgPSAwLCBvZmZzZXQgPSAwCitFTkRQUk9DKHJldF90b191c2VyX2Zyb21faXJxKQogRU5EUFJPQyhyZXRfdG9fdXNlcikKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggZDUyZWVjMi4uNjgwN2NiMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCWZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7CiAKLQlmb3IgKGkgPSAtNDsgaSA8IDE7IGkrKykgeworCWZvciAoaSA9IC00OyBpIDwgMSArICEhdGh1bWI7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdmFsLCBiYWQ7CiAKIAkJaWYgKHRodW1iKQpAQCAtNTYzLDcgKzU2Myw3IEBACiAJCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCiAJCQlnb3RvIGJhZF9hY2Nlc3M7CiAJCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgJnB0bCk7Ci0JCWlmICghcHRlX3ByZXNlbnQoKnB0ZSkgfHwgIXB0ZV9kaXJ0eSgqcHRlKSkgeworCQlpZiAoIXB0ZV9wcmVzZW50KCpwdGUpIHx8ICFwdGVfd3JpdGUoKnB0ZSkgfHwgIXB0ZV9kaXJ0eSgqcHRlKSkgewogCQkJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CiAJCQlnb3RvIGJhZF9hY2Nlc3M7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCmluZGV4IDRlNjY4ODEuLmZjNGU5OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJLnJlc291cmNlCT0gZGE4NTBfbWNhc3BfcmVzb3VyY2VzLAogfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYXZpbmNpX3BjbV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYXZpbmNpX3BjbV9kZXZpY2UgPSB7CiAJLm5hbWUJPSAiZGF2aW5jaS1wY20tYXVkaW8iLAogCS5pZAk9IC0xLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy5jCmluZGV4IDhmNGY3MzYuLjgwNmEyZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGF2aW5jaV9wY21fZGV2aWNlID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGF2aW5jaV9wY21fZGV2aWNlID0gewogCS5uYW1lCQk9ICJkYXZpbmNpLXBjbS1hdWRpbyIsCiAJLmlkCQk9IC0xLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZ3Bpby5jCmluZGV4IGEwYjgzODguLmU3MjIxMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2dwaW8uYwpAQCAtMjUyLDkgKzI1MiwxMSBAQAogc3RhdGljIHZvaWQKIGdwaW9faXJxX2hhbmRsZXIodW5zaWduZWQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IGRhdmluY2lfZ3Bpb19yZWdzIF9faW9tZW0gKmcgPSBpcnEycmVncyhpcnEpOworCXN0cnVjdCBkYXZpbmNpX2dwaW9fcmVncyBfX2lvbWVtICpnOwogCXUzMiBtYXNrID0gMHhmZmZmOwogCisJZyA9IChfX2ZvcmNlIHN0cnVjdCBkYXZpbmNpX2dwaW9fcmVncyBfX2lvbWVtICopIGlycV9kZXNjX2dldF9oYW5kbGVyX2RhdGEoZGVzYyk7CisKIAkvKiB3ZSBvbmx5IGNhcmUgYWJvdXQgb25lIGJhbmsgKi8KIAlpZiAoaXJxICYgMSkKIAkJbWFzayA8PD0gMTY7CkBAIC00MjIsOCArNDI0LDcgQEAKIAogCQkvKiBzZXQgdXAgYWxsIGlycXMgaW4gdGhpcyBiYW5rICovCiAJCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKGJhbmtfaXJxLCBncGlvX2lycV9oYW5kbGVyKTsKLQkJaXJxX3NldF9jaGlwX2RhdGEoYmFua19pcnEsIChfX2ZvcmNlIHZvaWQgKilnKTsKLQkJaXJxX3NldF9oYW5kbGVyX2RhdGEoYmFua19pcnEsICh2b2lkICopaXJxKTsKKwkJaXJxX3NldF9oYW5kbGVyX2RhdGEoYmFua19pcnEsIChfX2ZvcmNlIHZvaWQgKilnKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMTYgJiYgZ3BpbyA8IG5ncGlvOyBpKyssIGlycSsrLCBncGlvKyspIHsKIAkJCWlycV9zZXRfY2hpcChpcnEsICZncGlvX2lycWNoaXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IDgyMDc5NTQuLjFkNGI2NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTQwMiwxMSArNDAyLDE1IEBACiAJfQogfTsKIAorc3RhdGljIHU2NCBlcDkzeHhfZXRoX2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X2V0aF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImVwOTN4eC1ldGgiLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZXA5M3h4X2V0aF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZXA5M3h4X2V0aF9kYXRhLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkuZG1hX21hc2sJCT0gJmVwOTN4eF9ldGhfZG1hX21hc2ssCiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXA5M3h4X2V0aF9yZXNvdXJjZSksCiAJLnJlc291cmNlCT0gZXA5M3h4X2V0aF9yZXNvdXJjZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcKaW5kZXggYjkyYzFlNS4uMTQzNWZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcKQEAgLTkxLDYgKzkxLDExIEBACiAJaGVscAogCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIHRoZSBjYW1lcmEgaW50ZXJmYWNlcy4KIAorY29uZmlnIEVYWU5PUzRfU0VUVVBfVVNCX1BIWQorCWJvb2wKKwloZWxwCisJICBDb21tb24gc2V0dXAgY29kZSBmb3IgVVNCIFBIWSBjb250cm9sbGVyCisKICMgbWFjaGluZSBzdXBwb3J0CiAKIG1lbnUgIkVYWU5PUzQgTWFjaGluZXMiCkBAIC0xNzYsNiArMTgxLDcgQEAKIAlzZWxlY3QgRVhZTk9TNF9TRVRVUF9JMkMzCiAJc2VsZWN0IEVYWU5PUzRfU0VUVVBfSTJDNQogCXNlbGVjdCBFWFlOT1M0X1NFVFVQX1NESENJCisJc2VsZWN0IEVYWU5PUzRfU0VUVVBfVVNCX1BIWQogCXNlbGVjdCBTQU1TVU5HX0RFVl9QV00KIAloZWxwCiAJICBNYWNoaW5lIHN1cHBvcnQgZm9yIFNhbXN1bmcgTW9iaWxlIE5VUkkgQm9hcmQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvTWFrZWZpbGUKaW5kZXggYTliYjk0Zi4uNjBmZTVlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9NYWtlZmlsZQpAQCAtNTYsNCArNTYsNCBAQAogb2JqLSQoQ09ORklHX0VYWU5PUzRfU0VUVVBfU0RIQ0kpCSs9IHNldHVwLXNkaGNpLm8KIG9iai0kKENPTkZJR19FWFlOT1M0X1NFVFVQX1NESENJX0dQSU8pCSs9IHNldHVwLXNkaGNpLWdwaW8ubwogCi1vYmotJChDT05GSUdfVVNCX1NVUFBPUlQpCQkrPSB1c2ItcGh5Lm8KK29iai0kKENPTkZJR19FWFlOT1M0X1NFVFVQX1VTQl9QSFkpCSs9IHNldHVwLXVzYi1waHkubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2NwdS5jCmluZGV4IDA4ODEzYTYuLjliYWJlNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvY3B1LmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfVVNCX0hTUEhZLAorCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9VU0JfSFNQSFksCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0hTUEhZKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLXVzYi1waHkuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy11c2ItcGh5LmgKaW5kZXggNzAzMTE4ZC4uYzMzN2NmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLXVzYi1waHkuaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtdXNiLXBoeS5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9fUExBVF9TNVBfUkVHU19VU0JfUEhZX0gKICNkZWZpbmUgX19QTEFUX1M1UF9SRUdTX1VTQl9QSFlfSAogCi0jZGVmaW5lIEVYWU5PUzRfSFNPVEdfUEhZUkVHKHgpCQkoKHgpICsgUzVQX1ZBX1VTQl9IU1BIWSkKKyNkZWZpbmUgRVhZTk9TNF9IU09UR19QSFlSRUcoeCkJCSgoeCkgKyBTM0NfVkFfVVNCX0hTUEhZKQogCiAjZGVmaW5lIEVYWU5PUzRfUEhZUFdSCQkJRVhZTk9TNF9IU09UR19QSFlSRUcoMHgwMCkKICNkZWZpbmUgUEhZMV9IU0lDX05PUk1BTF9NQVNLCQkoMHhmIDw8IDkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvdXNiLXBoeS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXVzYi1waHkuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1leHlub3M0L3VzYi1waHkuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXVzYi1waHkuYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC90aW1lLmMKaW5kZXggODZiOWZhMC4uZWJiOGYzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvdGltZS5jCkBAIC0yMDYsNiArMjA2LDcgQEAKIAlyZXR1cm4gKGN5Y2xlX3QpIH5fX3Jhd19yZWFkbChTM0NfVElNRVJSRUcoMHg0MCkpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCBleHlub3M0X3B3bTRfcmVzdW1lKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwY2xrOwpAQCAtMjE4LDYgKzIxOSw3IEBACiAJZXh5bm9zNF9wd21faW5pdCg0LCB+MCk7CiAJZXh5bm9zNF9wd21fc3RhcnQoNCwgMSk7CiB9CisjZW5kaWYKIAogc3RydWN0IGNsb2Nrc291cmNlIHB3bV9jbG9ja3NvdXJjZSA9IHsKIAkubmFtZQkJPSAicHdtX3RpbWVyNCIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYwppbmRleCA1ZjFmOTg2Li4xMjFhZDFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKQEAgLTEwMyw2ICsxMDMsNyBAQAogCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdChjZSwgbWVtX2ZjbGtfMjEyODUsIDUpOwogCWNlLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmLCBjZSk7CiAJY2UtPm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHgwMDAwMDQsIGNlKTsKKwljZS0+Y3B1bWFzayA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMzBiOTcxZC4uMWJlMmVlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CiAKICNlbHNlCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCS8qIEZvciBFQlNBMjg1IGRlYnVnZ2luZyAqLwogCQkuZXF1CWRjMjEyODVfaGlnaCwgQVJNQ1NSX0JBU0UgJiAweGZmMDAwMDAwCiAJCS5lcXUJZGMyMTI4NV9sb3csICBBUk1DU1JfQkFTRSAmIDB4MDBmZmZmZmYKQEAgLTM2LDggKzM3LDggQEAKIAkJLmVsc2UKIAkJbW92CVxycCwgIzAKIAkJLmVuZGlmCi0JCW9ycglccnYsIFxycCwgIzB4NDIwMDAwMDAKLQkJb3JyCVxycCwgXHJwLCAjZGMyMTI4NV9oaWdoCisJCW9ycglccnYsIFxycCwgI2RjMjEyODVfaGlnaAorCQlvcnIJXHJwLCBccnAsICMweDQyMDAwMDAwCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1tc20vdGltZXIuYwppbmRleCAzOGI5NWU5Li42MzYyMWYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS90aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL3RpbWVyLmMKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KKwogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KIApAQCAtNTUsMTAgKzU3LDEyIEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9RU0Q4WDUwKQogI2RlZmluZSBER1RfSFogKDE5MjAwMDAwIC8gNCkgLyogMTkuMiBNSHogLyA0IGJ5IGRlZmF1bHQgKi8KICNkZWZpbmUgTVNNX0RHVF9TSElGVCAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNN1gzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NU004WDYwKSB8fCBcCi0JCQkJICAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9NU004OTYwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NU003WDMwKQogI2RlZmluZSBER1RfSFogKDI0NTc2MDAwIC8gNCkgLyogMjQuNTc2IE1IeiAoTFBYTykgLyA0IGJ5IGRlZmF1bHQgKi8KICNkZWZpbmUgTVNNX0RHVF9TSElGVCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNOFg2MCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NU004OTYwKQorI2RlZmluZSBER1RfSFogKDI3MDAwMDAwIC8gNCkgLyogMjcgTUh6IChQWE8pIC8gNCBieSBkZWZhdWx0ICovCisjZGVmaW5lIE1TTV9ER1RfU0hJRlQgKDApCiAjZWxzZQogI2RlZmluZSBER1RfSFogMTkyMDAwMDAgLyogMTkuMiBNSHogb3IgNjAwIEtIeiBhZnRlciBzaGlmdCAqLwogI2RlZmluZSBNU01fREdUX1NISUZUICg1KQpAQCAtMTAwLDcgKzEwNCwxMSBAQAogewogCXN0cnVjdCBtc21fY2xvY2sgKmNsayA9IGNvbnRhaW5lcl9vZihjcywgc3RydWN0IG1zbV9jbG9jaywgY2xvY2tzb3VyY2UpOwogCi0JcmV0dXJuIHJlYWRsKGNsay0+Z2xvYmFsX2NvdW50ZXIpOworCS8qCisJICogU2hpZnQgdGltZXIgY291bnQgZG93biBieSBhIGNvbnN0YW50IGR1ZSB0byB1bnJlbGlhYmxlIGxvd2VyIGJpdHMKKwkgKiBvbiBzb21lIHRhcmdldHMuCisJICovCisJcmV0dXJuIHJlYWRsKGNsay0+Z2xvYmFsX2NvdW50ZXIpID4+IGNsay0+c2hpZnQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbXNtX2Nsb2NrICpjbG9ja2V2ZW50X3RvX2Nsb2NrKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhzL29jb3RwLmMgYi9hcmNoL2FybS9tYWNoLW14cy9vY290cC5jCmluZGV4IDY1MTU3YTMuLjU0YWRkNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL29jb3RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teHMvb2NvdHAuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CS8qIGZvciBjcHVfcmVsYXgoKSAqLworCiAjaW5jbHVkZSA8bWFjaC9teHMuaD4KIAogI2RlZmluZSBPQ09UUF9XT1JEX09GRlNFVAkJMHgyMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKaW5kZXggYWY5ODExNy4uNWIxMTRkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCkBAIC00LDE0ICs0LDE0IEBACiAKICMgQ29tbW9uIHN1cHBvcnQKIG9iai15IDo9IGlvLm8gaWQubyBzcmFtLm8gdGltZS5vIGlycS5vIG11eC5vIGZsYXNoLm8gc2VyaWFsLm8gZGV2aWNlcy5vIGRtYS5vCi1vYmoteSArPSBjbG9jay5vIGNsb2NrX2RhdGEubyBvcHBfZGF0YS5vIHJlc2V0Lm8KK29iai15ICs9IGNsb2NrLm8gY2xvY2tfZGF0YS5vIG9wcF9kYXRhLm8gcmVzZXQubyBwbV9idXMubwogCiBvYmotJChDT05GSUdfT01BUF9NQ0JTUCkgKz0gbWNic3AubwogCiBvYmotJChDT05GSUdfT01BUF8zMktfVElNRVIpCSs9IHRpbWVyMzJrLm8KIAogIyBQb3dlciBNYW5hZ2VtZW50Ci1vYmotJChDT05GSUdfUE0pICs9IHBtLm8gc2xlZXAubyBwbV9idXMubworb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KIAogIyBEU1AKIG9iai0kKENPTkZJR19PTUFQX01CT1hfRldLKQkrPSBtYWlsYm94X21hY2gubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMKaW5kZXggZDg1NTkzNC4uZjVhNTIyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jCkBAIC0yODQsMTQgKzI4NCwxNSBAQAogCWRtYV9iYXNlID0gaW9yZW1hcChyZXNbMF0uc3RhcnQsIHJlc291cmNlX3NpemUoJnJlc1swXSkpOwogCWlmICghZG1hX2Jhc2UpIHsKIAkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGlvcmVtYXBcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwogCX0KIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywgQVJSQVlfU0laRShyZXMpKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBVbmFibGUgdG8gYWRkIHJlc291cmNlcyBmb3IgJXMlZFxuIiwKIAkJCV9fZnVuY19fLCBwZGV2LT5uYW1lLCBwZGV2LT5pZCk7Ci0JCWdvdG8gZXhpdF9kZXZpY2VfZGVsOworCQlnb3RvIGV4aXRfZGV2aWNlX3B1dDsKIAl9CiAKIAlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfc3lzdGVtX2RtYV9wbGF0X2luZm8pLCBHRlBfS0VSTkVMKTsKQEAgLTI5OSw3ICszMDAsNyBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogVW5hYmxlIHRvIGFsbG9jYXRlICdwJyBmb3IgJXNcbiIsCiAJCQlfX2Z1bmNfXywgcGRldi0+bmFtZSk7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCQlnb3RvIGV4aXRfZGV2aWNlX2RlbDsKIAl9CiAKIAlkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfZG1hX2Rldl9hdHRyKSwgR0ZQX0tFUk5FTCk7CkBAIC0zODAsMTAgKzM4MSwxMCBAQAogCWtmcmVlKGQpOwogZXhpdF9yZWxlYXNlX3A6CiAJa2ZyZWUocCk7Ci1leGl0X2RldmljZV9wdXQ6Ci0JcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIGV4aXRfZGV2aWNlX2RlbDoKIAlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBkZXYpOworZXhpdF9kZXZpY2VfcHV0OgorCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbV9idXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG1fYnVzLmMKaW5kZXggZmUzMWQ5My4uMzM0ZmI4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbV9idXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtX2J1cy5jCkBAIC01Niw5ICs1NiwxMyBAQAogCQlVU0VfUExBVEZPUk1fUE1fU0xFRVBfT1BTCiAJfSwKIH07CisjZGVmaW5lIE9NQVAxX1BXUl9ET01BSU4gKCZkZWZhdWx0X3Bvd2VyX2RvbWFpbikKKyNlbHNlCisjZGVmaW5lIE9NQVAxX1BXUl9ET01BSU4gTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCiAKIHN0YXRpYyBzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrIHBsYXRmb3JtX2J1c19ub3RpZmllciA9IHsKLQkucHdyX2RvbWFpbiA9ICZkZWZhdWx0X3Bvd2VyX2RvbWFpbiwKKwkucHdyX2RvbWFpbiA9IE9NQVAxX1BXUl9ET01BSU4sCiAJLmNvbl9pZHMgPSB7ICJpY2siLCAiZmNrIiwgTlVMTCwgfSwKIH07CiAKQEAgLTcyLDQgKzc2LDQgQEAKIAlyZXR1cm4gMDsKIH0KIGNvcmVfaW5pdGNhbGwob21hcDFfcG1fcnVudGltZV9pbml0KTsKLSNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCmluZGV4IGQ1NDk2OWIuLjVkZTZlYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCkBAIC0yNiwxMyArMjYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwppbmRleCBhZTI5NjNhLi41ZGFjOTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwpAQCAtNjIyLDE5ICs2MjIsMTkgQEAKIAkJCSBPTUFQX01VWF9NT0RFMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwxX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwxX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQJCT0gMCwKIAkucGFkcwkJPSBzZXJpYWwxX3BhZHMsCiAJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWwxX3BhZHMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9IDEsCiAJLnBhZHMJCT0gc2VyaWFsMl9wYWRzLAogCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZAkJPSAyLAogCS5wYWRzCQk9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCmluZGV4IDczZmE5MGIuLjYzZGUyZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAl7IEVUSF9LUzg4NTFfSVJRLAlHUElPRl9JTiwJCSJldGhfaXJxIgl9LAogfTsKIAotc3RhdGljIGludCBvbWFwX2V0aGVybmV0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfZXRoZXJuZXRfaW5pdCh2b2lkKQogewogCWludCBzdGF0dXM7CiAKQEAgLTMyMiw2ICszMjIsNyBAQAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCiAJCS5ub25yZW1vdmFibGUgICA9IHRydWUsCiAJCS5vY3JfbWFzawk9IE1NQ19WRERfMjlfMzAsCisJCS5ub19vZmZfaW5pdAk9IHRydWUsCiAJfSwKIAl7CiAJCS5tbWMJCT0gMSwKQEAgLTY4MSwxOSArNjgyLDE5IEBACiAJCQkgT01BUF9QSU5fT1VUUFVUIHwgT01BUF9NVVhfTU9ERTApLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9IDEsCiAJLnBhZHMJCT0gc2VyaWFsMl9wYWRzLAogCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZAkJPSAyLAogCS5wYWRzCQk9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQJCT0gMywKIAkucGFkcwkJPSBzZXJpYWw0X3BhZHMsCiAJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWw0X3BhZHMpLApAQCAtNzI5LDcgKzczMCw3IEBACiAKIAlpZiAob21hcF9yZXYoKSA9PSBPTUFQNDQzMF9SRVZfRVMxXzApCiAJCXBhY2thZ2UgPSBPTUFQX1BBQ0tBR0VfQ0JMOwotCW9tYXA0X211eF9pbml0KGJvYXJkX211eCwgcGFja2FnZSk7CisJb21hcDRfbXV4X2luaXQoYm9hcmRfbXV4LCBOVUxMLCBwYWNrYWdlKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwNDQzMF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwNDQzMF9jb25maWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwppbmRleCBmM2JlYjhlLi5iMTI0YmRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwpAQCAtMjcsMTMgKzI3LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2xlZC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKaW5kZXggYzYzMTE1Yi4uNzc0NTZkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCkBAIC02Myw4ICs2Myw2IEBACiAjZGVmaW5lIFNCX1QzNV9TTVNDOTExWF9DUwk0CiAjZGVmaW5lIFNCX1QzNV9TTVNDOTExWF9HUElPCTY1CiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KICNpZiBkZWZpbmVkKENPTkZJR19TTVNDOTExWCkgfHwgZGVmaW5lZChDT05GSUdfU01TQzkxMVhfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLXNtc2M5MTF4Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKaW5kZXggMDhmMDhlOC4uYzNhOWZkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwpAQCAtNDgsNiArNDgsNyBAQAogCiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKICNpZiBkZWZpbmVkKENPTkZJR19MRURTX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfR1BJT19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGNtX3QzNTE3X2xlZHNbXSA9IHsKQEAgLTE3Nyw3ICsxNzgsNyBAQAogCS5yZXNldF9ncGlvX3BvcnRbMl0gID0gLUVJTlZBTCwKIH07CiAKLXN0YXRpYyBpbnQgY21fdDM1MTdfaW5pdF91c2JoKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjbV90MzUxN19pbml0X3VzYmgodm9pZCkKIHsKIAlpbnQgZXJyOwogCkBAIC0yMDMsOCArMjA0LDYgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX09NQVAyX01PRFVMRSkKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV90MzUxN19uYW5kX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKaW5kZXggY2Y1MjBkNy4uMzQ5NTZlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTYxLDggKzYxLDYgQEAKICNpbmNsdWRlICJ0aW1lci1ncC5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KICNkZWZpbmUgT01BUF9ETTkwMDBfR1BJT19JUlEJMjUKICNkZWZpbmUgT01BUDNfREVWS0lUX1RTX0dQSU8JMjcKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IGJlNzE0MjYuLjdmMjFkMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTU0LDggKzU0LDYgQEAKICNpbmNsdWRlICJwbS5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KIC8qCiAgKiBPTUFQMyBCZWFnbGUgcmV2aXNpb24KICAqIFJ1biB0aW1lIGRldGVjdGlvbiBvZiBCZWFnbGUgcmV2aXNpb24gaXMgZG9uZSBieSByZWFkaW5nIEdQSU8uCkBAIC0xMDYsNiArMTA0LDkgQEAKIAliZWFnbGVfcmV2ID0gZ3Bpb19nZXRfdmFsdWUoMTcxKSB8IChncGlvX2dldF92YWx1ZSgxNzIpIDw8IDEpCiAJCQl8IChncGlvX2dldF92YWx1ZSgxNzMpIDw8IDIpOwogCisJZ3Bpb19mcmVlX2FycmF5KG9tYXAzX2JlYWdsZV9yZXZfZ3Bpb3MsCisJCQlBUlJBWV9TSVpFKG9tYXAzX2JlYWdsZV9yZXZfZ3Bpb3MpKTsKKwogCXN3aXRjaCAoYmVhZ2xlX3JldikgewogCWNhc2UgNzoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDMgQmVhZ2xlIFJldjogQXgvQnhcbiIpOwpAQCAtNTc5LDYgKzU4MCw5IEBACiAJb21hcF9uYW5kX2ZsYXNoX2luaXQoTkFORF9CVVNXSURUSF8xNiwgb21hcDNiZWFnbGVfbmFuZF9wYXJ0aXRpb25zLAogCQkJICAgICBBUlJBWV9TSVpFKG9tYXAzYmVhZ2xlX25hbmRfcGFydGl0aW9ucykpOwogCisJLyogRW5zdXJlIG1zZWN1cmUgaXMgbXV4J2QgdG8gYmUgYWJsZSB0byBzZXQgdGhlIFJUQy4gKi8KKwlvbWFwX211eF9pbml0X3NpZ25hbCgic3lzX2RybV9tc2VjdXJlIiwgT01BUF9QSU5fT0ZGX09VVFBVVF9ISUdIKTsKKwogCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UwIiwgT01BUF9QSU5fT1VUUFVUKTsKIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UxIiwgT01BUF9QSU5fT1VUUFVUKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IDFkMTA3MzYuLjIzZjcxZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgpAQCAtNDEsNyArNDIsNiBAQAogCiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgpAQCAtNTcsOCArNTcsNiBAQAogI2RlZmluZSBQQU5ET1JBX1dJRklfTlJFU0VUX0dQSU8JMjMKICNkZWZpbmUgT01BUDNfUEFORE9SQV9UU19HUElPCQk5NAogCi0jZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQkJCVNaXzEyOEsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9tYXAzcGFuZG9yYV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKQEAgLTg2LDcgKzg0LDggQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSBwYW5kb3JhX25hbmRfZGF0YSA9IHsKIAkuY3MJCT0gMCwKLQkuZGV2c2l6ZQk9IDEsCS8qICcwJyBmb3IgOC1iaXQsICcxJyBmb3IgMTYtYml0IGRldmljZSAqLworCS5kZXZzaXplCT0gTkFORF9CVVNXSURUSF8xNiwKKwkueGZlcl90eXBlCT0gTkFORF9PTUFQX1BSRUZFVENIX0RNQSwKIAkucGFydHMJCT0gb21hcDNwYW5kb3JhX25hbmRfcGFydGl0aW9ucywKIAkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9uYW5kX3BhcnRpdGlvbnMpLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwppbmRleCA4Mjg3MmQ3Li41ZjY0OWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCkBAIC01Niw4ICs1Niw2IEBACiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAotI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKLQogI2RlZmluZSBPTUFQM19BQ19HUElPCQkxMzYKICNkZWZpbmUgT01BUDNfVFNfR1BJTwkJMTYyCiAjZGVmaW5lIFRCX0JMX1BXTV9USU1FUgkJOQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwppbmRleCA5MDQ4NWZjLi4wY2ZlMjAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwpAQCAtNTI2LDE5ICs1MjYsMTkgQEAKIAkJCSBPTUFQX1BJTl9PVVRQVVQgfCBPTUFQX01VWF9NT0RFMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAxLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDJfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDJfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwzX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwzX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAyLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAzLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDRfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDRfcGFkcyksCkBAIC02ODcsNyArNjg3LDcgQEAKIAogCWlmIChvbWFwX3JldigpID09IE9NQVA0NDMwX1JFVl9FUzFfMCkKIAkJcGFja2FnZSA9IE9NQVBfUEFDS0FHRV9DQkw7Ci0Jb21hcDRfbXV4X2luaXQoYm9hcmRfbXV4LCBwYWNrYWdlKTsKKwlvbWFwNF9tdXhfaW5pdChib2FyZF9tdXgsIE5VTEwsIHBhY2thZ2UpOwogCiAJaWYgKHdsMTJ4eF9zZXRfcGxhdGZvcm1fZGF0YSgmb21hcF9wYW5kYV93bGFuX2RhdGEpKQogCQlwcl9lcnIoImVycm9yIHNldHRpbmcgd2wxMnh4IGRhdGFcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCmluZGV4IDE1NTU5MTguLjE3NWUxYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8dmlkZW8vb21hcGRzcy5oPgogI2luY2x1ZGUgPHZpZGVvL29tYXAtcGFuZWwtZ2VuZXJpYy1kcGkuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CkBAIC02NSw4ICs2NSw2IEBACiAjZGVmaW5lIE9WRVJPX0dQSU9fVVNCSF9DUEVOCTE2OAogI2RlZmluZSBPVkVST19HUElPX1VTQkhfTlJFU0VUCTE4MwogCi0jZGVmaW5lIE5BTkRfQkxPQ0tfU0laRSBTWl8xMjhLCi0KICNkZWZpbmUgT1ZFUk9fU01TQzkxMVhfQ1MgICAgICA1CiAjZGVmaW5lIE9WRVJPX1NNU0M5MTFYX0dQSU8gICAgMTc2CiAjZGVmaW5lIE9WRVJPX1NNU0M5MTFYMl9DUyAgICAgNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwppbmRleCBmNjI0N2U3Li45OTAzNjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtNDg4LDYgKzQ4OCw3IEBACiAJCS5uYW1lCQkJPSAiVjI4X0EiLAogCQkubWluX3VWCQkJPSAyODAwMDAwLAogCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkuYWx3YXlzX29uCQk9IHRydWUsIC8qIGR1ZSBWSU8gbGVhayB0byBBSUMzNCBWRERzICovCiAJCS5hcHBseV91VgkJPSB0cnVlLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAogCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCkBAIC01ODIsNyArNTgzLDcgQEAKIHsKIAkvKiBGSVhNRSB0aGlzIGdwaW8gc2V0dXAgaXMganVzdCBhIHBsYWNlaG9sZGVyIGZvciBub3cgKi8KIAlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyA2LCBHUElPRl9PVVRfSU5JVF9MT1csICJiYWNrbGlnaHRfcHdtIik7Ci0JZ3Bpb19yZXF1ZXN0X29uZShncGlvICsgNywgR1BJT0ZfT1VUX0lOSVRfSElHSCwgInNwZWFrZXJfZW4iKTsKKwlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyA3LCBHUElPRl9PVVRfSU5JVF9MT1csICJzcGVha2VyX2VuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20tZGlzcGxheS5jCmluZGV4IGM3YzZiZWIuLmQ0NjgzYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLWRpc3BsYXkuYwpAQCAtMjYsNyArMjYsNyBAQAogCXsgTENEX1BBTkVMX1FWR0FfR1BJTywJR1BJT0ZfT1VUX0lOSVRfSElHSCwgImxjZCBxdmdhIgkgfSwKIH07CiAKLXN0YXRpYyB2b2lkIHpvb21fbGNkX3BhbmVsX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCB6b29tX2xjZF9wYW5lbF9pbml0KHZvaWQpCiB7CiAJem9vbV9sY2RfZ3Bpb3NbMF0uZ3BpbyA9IChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTM18wKSA/CiAJCQlMQ0RfUEFORUxfUkVTRVRfR1BJT19QUk9EIDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuYwppbmRleCBlOTQ5MDNiLi45NGNjZjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5jCkBAIC04NSwxOCArODUsMTggQEAKIAlzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKnNwaV9iaSA9ICZhZHM3ODQ2X3NwaV9ib2FyZF9pbmZvOwogCWludCBlcnI7CiAKLQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb19wZW5kb3duLCAiVFMgUGVuRG93biIpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJyKCJDb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIFRTIFBlbkRvd246ICVkXG4iLCBlcnIpOwotCQlyZXR1cm47CisJaWYgKGJvYXJkX3BkYXRhICYmIGJvYXJkX3BkYXRhLT5nZXRfcGVuZG93bl9zdGF0ZSkgeworCQllcnIgPSBncGlvX3JlcXVlc3Rfb25lKGdwaW9fcGVuZG93biwgR1BJT0ZfSU4sICJUU1BlbkRvd24iKTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCJDb3VsZG4ndCBvYnRhaW4gZ3BpbyBmb3IgVFNQZW5Eb3duOiAlZFxuIiwgZXJyKTsKKwkJCXJldHVybjsKKwkJfQorCQlncGlvX2V4cG9ydChncGlvX3BlbmRvd24sIDApOworCisJCWlmIChncGlvX2RlYm91bmNlKQorCQkJZ3Bpb19zZXRfZGVib3VuY2UoZ3Bpb19wZW5kb3duLCBncGlvX2RlYm91bmNlKTsKIAl9CiAKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX3BlbmRvd24pOwotCWdwaW9fZXhwb3J0KGdwaW9fcGVuZG93biwgMCk7Ci0KLQlpZiAoZ3Bpb19kZWJvdW5jZSkKLQkJZ3Bpb19zZXRfZGVib3VuY2UoZ3Bpb19wZW5kb3duLCBncGlvX2RlYm91bmNlKTsKLQogCWFkczc4NDZfY29uZmlnLmdwaW9fcGVuZG93biA9IGdwaW9fcGVuZG93bjsKIAogCXNwaV9iaS0+YnVzX251bQk9IGJ1c19udW07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmgKaW5kZXggZWI4MGIzYi4uNjc5NzE5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19PTUFQX0NPTU1PTl9CT0FSRF9ERVZJQ0VTX18KICNkZWZpbmUgX19PTUFQX0NPTU1PTl9CT0FSRF9ERVZJQ0VTX18KIAorI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJU1pfMTI4SworCiBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhOwogc3RydWN0IG10ZF9wYXJ0aXRpb247CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggN2I4NTU4NS4uNWI4Y2E2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAogCVdBUk4oSVNfRVJSKG9kKSwgImNvdWxkIG5vdCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXNcbiIsIG9oX25hbWUpOwogCi0JcmV0dXJuIFBUUl9FUlIob2QpOworCXJldHVybiBJU19FUlIob2QpID8gUFRSX0VSUihvZCkgOiAwOwogfQogcG9zdGNvcmVfaW5pdGNhbGwob21hcDRfbDNfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwppbmRleCBiMmYzMGJlLi42Njg2OGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIAkJCQkgaW50IHBvd2VyX29uLCBpbnQgdmRkKQogewogCXUzMiByZWc7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJaWYgKHBvd2VyX29uKSB7CiAJCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKQEAgLTE1Nyw5ICsxNTgsMTUgQEAKIAkJCU9NQVA0X01NQzFfUFdSRE5aX01BU0sgfAogCQkJT01BUDRfVVNCQzFfSUNVU0JfUFdSRE5aX01BU0spOwogCQlvbWFwNF9jdHJsX3BhZF93cml0ZWwocmVnLCBjb250cm9sX3BiaWFzX29mZnNldCk7Ci0JCS8qIDQgbWljcm9zZWMgZGVsYXkgZm9yIGNvbXBhcmF0b3IgdG8gZ2VuZXJhdGUgYW4gZXJyb3IqLwotCQl1ZGVsYXkoNCk7Ci0JCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKworCQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSk7CisJCWRvIHsKKwkJCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwkJCWlmICghKHJlZyAmIE9NQVA0X01NQzFfUEJJQVNMSVRFX1ZNT0RFX0VSUk9SX01BU0spKQorCQkJCWJyZWFrOworCQkJdXNsZWVwX3JhbmdlKDEwMCwgMjAwKTsKKwkJfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpOworCiAJCWlmIChyZWcgJiBPTUFQNF9NTUMxX1BCSUFTTElURV9WTU9ERV9FUlJPUl9NQVNLKSB7CiAJCQlwcl9lcnIoIlBiaWFzIFZvbHRhZ2UgaXMgbm90IHNhbWUgYXMgTERPXG4iKTsKIAkJCS8qIENhdXRpb24gOiBPbiBWTU9ERV9FUlJPUiBQb3dlciBEb3duIE1NQyBJTyAqLwpAQCAtMzMxLDYgKzMzOCw5IEBACiAJaWYgKGMtPm5vX29mZikKIAkJbW1jLT5zbG90c1swXS5ub19vZmYgPSAxOwogCisJaWYgKGMtPm5vX29mZl9pbml0KQorCQltbWMtPnNsb3RzWzBdLm5vX3JlZ3VsYXRvcl9vZmZfaW5pdCA9IGMtPm5vX29mZl9pbml0OworCiAJaWYgKGMtPnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCkKIAkJbW1jLT5zbG90c1swXS52Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXAgPSAxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmgKaW5kZXggZjExOTM0OC4uZjc1N2U3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaApAQCAtMTgsNiArMTgsNyBAQAogCWJvb2wJbm9ucmVtb3ZhYmxlOwkvKiBOb25yZW1vdmFibGUgZS5nLiBlTU1DICovCiAJYm9vbAlwb3dlcl9zYXZpbmc7CS8qIFRyeSB0byBzbGVlcCBvciBwb3dlciBvZmYgd2hlbiBwb3NzaWJsZSAqLwogCWJvb2wJbm9fb2ZmOwkJLyogcG93ZXJfc2F2aW5nIGFuZCBwb3dlciBpcyBub3QgdG8gZ28gb2ZmICovCisJYm9vbAlub19vZmZfaW5pdDsJLyogbm8gcG93ZXIgb2ZmIHdoZW4gbm90IGluIE1NQyBzbGVlcCBzdGF0ZSAqLwogCWJvb2wJdmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwOyAvKiBSZWd1bGF0b3Igb2ZmIHJlbWFwcGVkIHRvIHNsZWVwICovCiAJaW50CWdwaW9fY2Q7CS8qIG9yIC1FSU5WQUwgKi8KIAlpbnQJZ3Bpb193cDsJLyogb3IgLUVJTlZBTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggYTRhYjFlMy4uYzdmYjIyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC04Myw2ICs4Myw5IEBACiB2b2lkIG9tYXBfbXV4X3dyaXRlX2FycmF5KHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwKIAkJCQkgc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgpCiB7CisJaWYgKCFib2FyZF9tdXgpCisJCXJldHVybjsKKwogCXdoaWxlIChib2FyZF9tdXgtPnJlZ19vZmZzZXQgIT0gT01BUF9NVVhfVEVSTUlOQVRPUikgewogCQlvbWFwX211eF93cml0ZShwYXJ0aXRpb24sIGJvYXJkX211eC0+dmFsdWUsCiAJCQkgICAgICAgYm9hcmRfbXV4LT5yZWdfb2Zmc2V0KTsKQEAgLTkwNiw3ICs5MDksNyBAQAogdTE2IG9tYXBfbXV4X2dldF9ncGlvKGludCBncGlvKQogewogCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbjsKLQlzdHJ1Y3Qgb21hcF9tdXggKm07CisJc3RydWN0IG9tYXBfbXV4ICptID0gTlVMTDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydGl0aW9uLCAmbXV4X3BhcnRpdGlvbnMsIG5vZGUpIHsKIAkJbSA9IG9tYXBfbXV4X2dldF9ieV9ncGlvKHBhcnRpdGlvbiwgZ3Bpbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaAppbmRleCAxMzdmMzIxLi4yMTMyMzA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmgKQEAgLTMyMywxMCArMzIzLDEyIEBACiAKIC8qKgogICogb21hcDRfbXV4X2luaXQoKSAtIGluaXRpYWxpemUgbXV4IHN5c3RlbSB3aXRoIGJvYXJkIHNwZWNpZmljIHNldAotICogQGJvYXJkX211eDoJCUJvYXJkIHNwZWNpZmljIG11eCB0YWJsZQorICogQGJvYXJkX3N1YnNldDoJQm9hcmQgc3BlY2lmaWMgbXV4IHRhYmxlCisgKiBAYm9hcmRfd2t1cF9zdWJzZXQ6CUJvYXJkIHNwZWNpZmljIG11eCB0YWJsZSBmb3Igd2FrZXVwIGluc3RhbmNlCiAgKiBAZmxhZ3M6CQlPTUFQIHBhY2thZ2UgdHlwZSB1c2VkIGZvciB0aGUgYm9hcmQKICAqLwotaW50IG9tYXA0X211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4LCBpbnQgZmxhZ3MpOworaW50IG9tYXA0X211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfc3Vic2V0LAorCXN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfd2t1cF9zdWJzZXQsIGludCBmbGFncyk7CiAKIC8qKgogICogb21hcF9tdXhfaW5pdCAtIHByaXZhdGUgbXV4IGluaXQgZnVuY3Rpb24sIGRvIG5vdCBjYWxsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCmluZGV4IDlhNjY0NDUuLmY1YTc0ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCkBAIC0xMzA5LDcgKzEzMDksOCBAQAogI2RlZmluZSBvbWFwNF93a3VwX2NibF9jYnNfYmFsbCAgTlVMTAogI2VuZGlmCiAKLWludCBfX2luaXQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9zdWJzZXQsIGludCBmbGFncykKK2ludCBfX2luaXQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9zdWJzZXQsCisJc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF93a3VwX3N1YnNldCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHNfY29yZTsKIAlzdHJ1Y3Qgb21hcF9iYWxsICpwYWNrYWdlX2JhbGxzX3drdXAgPSBvbWFwNF93a3VwX2NibF9jYnNfYmFsbDsKQEAgLTEzNDcsNyArMTM0OCw3IEBACiAJCQkgICAgT01BUF9NVVhfR1BJT19JTl9NT0RFMywKIAkJCSAgICBPTUFQNF9DVFJMX01PRFVMRV9QQURfV0tVUF9NVVhfUEJBU0UsCiAJCQkgICAgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1dLVVBfTVVYX1NJWkUsCi0JCQkgICAgb21hcDRfd2t1cF9tdXhtb2RlcywgTlVMTCwgYm9hcmRfc3Vic2V0LAorCQkJICAgIG9tYXA0X3drdXBfbXV4bW9kZXMsIE5VTEwsIGJvYXJkX3drdXBfc3Vic2V0LAogCQkJICAgIHBhY2thZ2VfYmFsbHNfd2t1cCk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwppbmRleCBlMDM0Mjk0Li4yOTNmYTZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwpAQCAtMTYyOCw3ICsxNjI4LDcgQEAKIAkJCXZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG9tYXBfaHdtb2QgKnRlbXBfb2g7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICghZm4pCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCmluZGV4IGFiYzU0OGEuLmUxYzY5ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTUxMDksNyArNTEwOSw3IEBACiAJJm9tYXA0NHh4X2l2YV9zZXExX2h3bW9kLAogCiAJLyoga2JkIGNsYXNzICovCi0vKgkmb21hcDQ0eHhfa2JkX2h3bW9kLCAqLworCSZvbWFwNDR4eF9rYmRfaHdtb2QsCiAKIAkvKiBtYWlsYm94IGNsYXNzICovCiAJJm9tYXA0NHh4X21haWxib3hfaHdtb2QsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKaW5kZXggZjQ3ODEzZS4uNTg3NzVlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwpAQCAtNTYsOCArNTYsMTAgQEAKIAkvKiBQb3dlciBkb3duIHRoZSBwaHkgKi8KIAlfX3Jhd193cml0ZWwoUEhZX1BELCBjdHJsX2Jhc2UgKyBDT05UUk9MX0RFVl9DT05GKTsKIAotCWlmICghZGV2KQorCWlmICghZGV2KSB7CisJCWlvdW5tYXAoY3RybF9iYXNlKTsKIAkJcmV0dXJuIDA7CisJfQogCiAJcGh5Y2xrID0gY2xrX2dldChkZXYsICJvY3Ayc2NwX3VzYl9waHlfaWNrIik7CiAJaWYgKElTX0VSUihwaHljbGspKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKaW5kZXggYTVhODNiMy4uZTAxZGE0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAKIHN0YXRpYyBpbnQgcG1fZGJnX2luaXRfZG9uZTsKIAotc3RhdGljIGludCBfX2luaXQgcG1fZGJnX2luaXQodm9pZCk7CitzdGF0aWMgaW50IHBtX2RiZ19pbml0KHZvaWQpOwogCiBlbnVtIHsKIAlERUJVR19GSUxFX0NPVU5URVJTID0gMCwKQEAgLTU5NSw3ICs1OTUsNyBAQAogCiBERUZJTkVfU0lNUExFX0FUVFJJQlVURShwbV9kYmdfb3B0aW9uX2ZvcHMsIG9wdGlvbl9nZXQsIG9wdGlvbl9zZXQsICIlbGx1XG4iKTsKIAotc3RhdGljIGludCBfX2luaXQgcG1fZGJnX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgcG1fZGJnX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgZGVudHJ5ICpkOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHpfcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6X3BtLmMKaW5kZXggN2ZlNzQwNi4uMDk0Mjc5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHpfcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0el9wbS5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2FwbS1lbXVsYXRpb24uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQppbmRleCAwZDQ2OGU5Li44MTY5NTM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCkBAIC0xMCw3ICsxMCw2IEBACiBvYmotCQkJCTo9CiAKIG9iai0kKENPTkZJR19DUFVfUzNDMjQxMCkJKz0gczNjMjQxMC5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0MTApCSs9IGlycS5vCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0MTBfRE1BKQkrPSBkbWEubwogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwX0RNQSkJKz0gZG1hLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX1BNKQkrPSBwbS5vIHNsZWVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1NDEyOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KLQotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9wbS5oPgotCi1zdHJ1Y3Qgc3lzY29yZV9vcHMgczNjMjR4eF9pcnFfc3lzY29yZV9vcHMgPSB7Ci0JLnN1c3BlbmQJPSBzM2MyNHh4X2lycV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjMjR4eF9pcnFfcmVzdW1lLAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jcHVmcmVxLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY3B1ZnJlcS5jCmluZGV4IDIyMDQ2ZTIuLjE1M2FmOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jcHVmcmVxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2NwdWZyZXEuYwpAQCAtMTAxLDEyICsxMDEsMTQgQEAKIAl1bnNpZ25lZCBsb25nIHRtcCwgdG1wMTsKIAl2b2lkIF9faW9tZW0gKnJlZyA9IE5VTEw7CiAKLQlpZiAoY2ggPT0gRE1DMCkKKwlpZiAoY2ggPT0gRE1DMCkgewogCQlyZWcgPSAoUzVQX1ZBX0RNQzAgKyAweDMwKTsKLQllbHNlIGlmIChjaCA9PSBETUMxKQorCX0gZWxzZSBpZiAoY2ggPT0gRE1DMSkgewogCQlyZWcgPSAoUzVQX1ZBX0RNQzEgKyAweDMwKTsKLQllbHNlCisJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZmluZCBETUMgcG9ydFxuIik7CisJCXJldHVybjsKKwl9CiAKIAkvKiBGaW5kIGN1cnJlbnQgRFJBTSBmcmVxdWVuY3kgKi8KIAl0bXAgPSBzNXB2MjEwX2RyYW1fY29uZltjaF0uZnJlcTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCmluZGV4IGM5NTI1OGMuLjFlMmFiYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYwpAQCAtMzgyLDEwICszODIsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2hfc2RoaTFfcGxhdGRhdGEgPSB7Ci0JLmRtYV9zbGF2ZV90eAk9IFNIRE1BX1NMQVZFX1NESEkxX1RYLAotCS5kbWFfc2xhdmVfcngJPSBTSERNQV9TTEFWRV9TREhJMV9SWCwKIAkudG1pb19mbGFncwk9IFRNSU9fTU1DX1dSUFJPVEVDVF9ESVNBQkxFLAotCS50bWlvX2NhcHMJPSBNTUNfQ0FQX05PTlJFTU9WQUJMRSwKKwkudG1pb19jYXBzCT0gTU1DX0NBUF9OT05SRU1PVkFCTEUgfCBNTUNfQ0FQX1NESU9fSVJRLAogCS50bWlvX29jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCiAJLnNldF9wd3IJPSBhZzVldm1fc2RoaTFfc2V0X3B3ciwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKaW5kZXggNzc2ZjIwNS4uN2UxZDM3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAgKiAtLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQogICogSVJRMCAgfCBJQ1IxQS5JUlEwU0E9MDAxMCAgfCBTREhJMiBjYXJkIGRldGVjdCAgfCBMb3cKICAqIElSUTYgIHwgSUNSMUEuSVJRNlNBPTAwMTEgIHwgRXRoZXIoTEFOOTIyMCkgICAgIHwgSGlnaAotICogSVJRNyAgfCBJQ1IxQS5JUlE3U0E9MDAxMCAgfCBMQ0QgVHVjaCBQYW5lbCAgICAgfCBMb3cKKyAqIElSUTcgIHwgSUNSMUEuSVJRN1NBPTAwMTAgIHwgTENEIFRvdWNoIFBhbmVsICAgIHwgTG93CiAgKiBJUlE4ICB8IElDUjJBLklSUThTQT0wMDEwICB8IE1NQy9TRCBjYXJkIGRldGVjdCB8IExvdwogICogSVJROSAgfCBJQ1IyQS5JUlE5U0E9MDAxMCAgfCBLRVkoVENBNjQwOCkgICAgICAgfCBMb3cKICAqIElSUTIxIHwgSUNSNEEuSVJRMjFTQT0wMDExIHwgU2Vuc29yKEFEWEwzNDUpICAgIHwgSGlnaApAQCAtMTY1LDEwICsxNjUsMTAgQEAKICAqIFVTQjEgY2FuIGJlY29tZSBIb3N0IGJ5IHI4YTY2NTk3LCBhbmQgYmVjb21lIEZ1bmN0aW9uIGJ5IHJlbmVzYXNfdXNiaHMuCiAgKiBCdXQgZG9uJ3Qgc2VsZWN0IGJvdGggZHJpdmVycyBpbiBzYW1lIHRpbWUuCiAgKiBUaGVzZSB1c2VzIHNhbWUgSVJRIG51bWJlciBmb3IgcmVxdWVzdF9pcnEoKSwgYW5kIGFyZW4ndCBzdXBwb3J0aW5nCi0gKiBJUlFGX1NIQVJEIC8gSU9SRVNPVVJDRV9JUlFfU0hBUkVBQkxFLgorICogSVJRRl9TSEFSRUQgLyBJT1JFU09VUkNFX0lSUV9TSEFSRUFCTEUuCiAgKgogICogQWN0dWFsbHkgdGhlc2UgYXJlIG9sZC9uZXcgdmVyc2lvbiBvZiBVU0IgZHJpdmVyLgotICogVGhpcyBtZWFuIGl0cyByZWdpc3RlciB3aWxsIGJlIGJyb2tlbiBpZiBpdCBzdXBwb3J0cyBTSEFSRCBJUlEsCisgKiBUaGlzIG1lYW4gaXRzIHJlZ2lzdGVyIHdpbGwgYmUgYnJva2VuIGlmIGl0IHN1cHBvcnRzIHNoYXJlZCBJUlEsCiAgKi8KIAogLyoKQEAgLTU2Miw3ICs1NjIsMTIxIEBACiAJCWNsa19wdXQoaGRtaV9pY2spOwogfQogCi0vKiBVU0IxIChIb3N0KSAqLworLyogVVNCSFMwIGlzIGNvbm5lY3RlZCB0byBDTjIyIHdoaWNoIHRha2VzIGEgVVNCIE1pbmktQiBwbHVnCisgKgorICogVGhlIHNoNzM3MiBTb0MgaGFzIElSUTcgc2V0IGFzaWRlIGZvciBVU0JIUzAgaG90cGx1ZywKKyAqIGJ1dCBvbiB0aGlzIHBhcnRpY3VsYXIgYm9hcmQgSVJRNyBpcyBhbHJlYWR5IHVzZWQgYnkKKyAqIHRoZSB0b3VjaCBzY3JlZW4uIFRoaXMgbGVhdmVzIHVzIHdpdGggc29mdHdhcmUgcG9sbGluZy4KKyAqLworI2RlZmluZSBVU0JIUzBfUE9MTF9JTlRFUlZBTCAoSFogKiA1KQorCitzdHJ1Y3QgdXNiaHNfcHJpdmF0ZSB7CisJdW5zaWduZWQgaW50IHVzYnBoeWFkZHI7CisJdW5zaWduZWQgaW50IHVzYmNyY2FkZHI7CisJc3RydWN0IHJlbmVzYXNfdXNiaHNfcGxhdGZvcm1faW5mbyBpbmZvOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworfTsKKworI2RlZmluZSB1c2Joc19nZXRfcHJpdihwZGV2KQkJCQlcCisJY29udGFpbmVyX29mKHJlbmVzYXNfdXNiaHNfZ2V0X2luZm8ocGRldiksCVwKKwkJICAgICBzdHJ1Y3QgdXNiaHNfcHJpdmF0ZSwgaW5mbykKKworI2RlZmluZSB1c2Joc19pc19jb25uZWN0ZWQocHJpdikJCQlcCisJKCEoKDEgPDwgNykgJiBfX3Jhd19yZWFkdyhwcml2LT51c2JjcmNhZGRyKSkpCisKK3N0YXRpYyBpbnQgdXNiaHNfZ2V0X3ZidXMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gdXNiaHNfaXNfY29ubmVjdGVkKHVzYmhzX2dldF9wcml2KHBkZXYpKTsKK30KKworc3RhdGljIHZvaWQgdXNiaHNfcGh5X3Jlc2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYmhzX3ByaXZhdGUgKnByaXYgPSB1c2Joc19nZXRfcHJpdihwZGV2KTsKKworCS8qIGluaXQgcGh5ICovCisJX19yYXdfd3JpdGV3KDB4OGEwYSwgcHJpdi0+dXNiY3JjYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgdXNiaHMwX2dldF9pZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBVU0JIU19HQURHRVQ7Cit9CisKK3N0YXRpYyB2b2lkIHVzYmhzMF93b3JrX2Z1bmN0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdXNiaHNfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiaHNfcHJpdmF0ZSwKKwkJCQkJCSAgd29yay53b3JrKTsKKworCXJlbmVzYXNfdXNiaHNfY2FsbF9ub3RpZnlfaG90cGx1Zyhwcml2LT5wZGV2KTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPndvcmssIFVTQkhTMF9QT0xMX0lOVEVSVkFMKTsKK30KKworc3RhdGljIGludCB1c2JoczBfaGFyZHdhcmVfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2Joc19wcml2YXRlICpwcml2ID0gdXNiaHNfZ2V0X3ByaXYocGRldik7CisKKwlwcml2LT5wZGV2ID0gcGRldjsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+d29yaywgdXNiaHMwX3dvcmtfZnVuY3Rpb24pOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+d29yaywgVVNCSFMwX1BPTExfSU5URVJWQUwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2JoczBfaGFyZHdhcmVfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB1c2Joc19wcml2YXRlICpwcml2ID0gdXNiaHNfZ2V0X3ByaXYocGRldik7CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPndvcmspOworfQorCitzdGF0aWMgc3RydWN0IHVzYmhzX3ByaXZhdGUgdXNiaHMwX3ByaXZhdGUgPSB7CisJLnVzYmNyY2FkZHIJPSAweGU2MDU4MTBjLAkJLyogVVNCQ1IyICovCisJLmluZm8gPSB7CisJCS5wbGF0Zm9ybV9jYWxsYmFjayA9IHsKKwkJCS5oYXJkd2FyZV9pbml0CT0gdXNiaHMwX2hhcmR3YXJlX2luaXQsCisJCQkuaGFyZHdhcmVfZXhpdAk9IHVzYmhzMF9oYXJkd2FyZV9leGl0LAorCQkJLnBoeV9yZXNldAk9IHVzYmhzX3BoeV9yZXNldCwKKwkJCS5nZXRfaWQJCT0gdXNiaHMwX2dldF9pZCwKKwkJCS5nZXRfdmJ1cwk9IHVzYmhzX2dldF92YnVzLAorCQl9LAorCQkuZHJpdmVyX3BhcmFtID0geworCQkJLmJ1c3dhaXRfYndhaXQJPSA0LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYmhzMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIlVTQkhTMCIsCisJCS5zdGFydAk9IDB4ZTY4OTAwMDAsCisJCS5lbmQJPSAweGU2ODkwMGU2IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGV2dDJpcnEoMHgxY2EwKSAvKiBVU0IwX1VTQjBJMCAqLywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVzYmhzMF9kZXZpY2UgPSB7CisJLm5hbWUJPSAicmVuZXNhc191c2JocyIsCisJLmlkCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaHMwX3ByaXZhdGUuaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JoczBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB1c2JoczBfcmVzb3VyY2VzLAorfTsKKworLyogVVNCSFMxIGlzIGNvbm5lY3RlZCB0byBDTjMxIHdoaWNoIHRha2VzIGEgVVNCIE1pbmktQUIgcGx1ZworICoKKyAqIFVzZSBKMzAgdG8gc2VsZWN0IGJldHdlZW4gSG9zdCBhbmQgRnVuY3Rpb24uIFRoaXMgc2V0dGluZworICogY2FuIGhvd2V2ZXIgbm90IGJlIGRldGVjdGVkIGJ5IHNvZnR3YXJlLiBIb3RwbHVnIG9mIFVTQkhTMQorICogaXMgcHJvdmlkZWQgdmlhIElSUTguCisgKi8KKyNkZWZpbmUgSVJROCBldnQyaXJxKDB4MDMwMCkKKworLyogVVNCSFMxIFVTQiBIb3N0IHN1cHBvcnQgdmlhIHI4YTY2NTk3X2hjZCAqLwogc3RhdGljIHZvaWQgdXNiMV9ob3N0X3BvcnRfcG93ZXIoaW50IHBvcnQsIGludCBwb3dlcikKIHsKIAlpZiAoIXBvd2VyKSAvKiBvbmx5IHBvd2VyLW9uIGlzIHN1cHBvcnRlZCBmb3Igbm93ICovCkBAIC01NzksOSArNjkzLDkgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2IxX2hvc3RfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkubmFtZQk9ICJVU0JIUyIsCi0JCS5zdGFydAk9IDB4RTY4QjAwMDAsCi0JCS5lbmQJPSAweEU2OEIwMEU2IC0gMSwKKwkJLm5hbWUJPSAiVVNCSFMxIiwKKwkJLnN0YXJ0CT0gMHhlNjhiMDAwMCwKKwkJLmVuZAk9IDB4ZTY4YjAwZTYgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTYwMiwzNyArNzE2LDE0IEBACiAJLnJlc291cmNlCT0gdXNiMV9ob3N0X3Jlc291cmNlcywKIH07CiAKLS8qIFVTQjEgKEZ1bmN0aW9uKSAqLworLyogVVNCSFMxIFVTQiBGdW5jdGlvbiBzdXBwb3J0IHZpYSByZW5lc2FzX3VzYmhzICovCisKICNkZWZpbmUgVVNCX1BIWV9NT0RFCQkoMSA8PCA0KQogI2RlZmluZSBVU0JfUEhZX0lOVF9FTgkJKCgxIDw8IDMpIHwgKDEgPDwgMikpCiAjZGVmaW5lIFVTQl9QSFlfT04JCSgxIDw8IDEpCiAjZGVmaW5lIFVTQl9QSFlfT0ZGCQkoMSA8PCAwKQogI2RlZmluZSBVU0JfUEhZX0lOVF9DTFIJCShVU0JfUEhZX09OIHwgVVNCX1BIWV9PRkYpCiAKLXN0cnVjdCB1c2Joc19wcml2YXRlIHsKLQl1bnNpZ25lZCBpbnQgaXJxOwotCXVuc2lnbmVkIGludCB1c2JwaHlhZGRyOwotCXVuc2lnbmVkIGludCB1c2JjcmNhZGRyOwotCXN0cnVjdCByZW5lc2FzX3VzYmhzX3BsYXRmb3JtX2luZm8gaW5mbzsKLX07Ci0KLSNkZWZpbmUgdXNiaHNfZ2V0X3ByaXYocGRldikJCQkJXAotCWNvbnRhaW5lcl9vZihyZW5lc2FzX3VzYmhzX2dldF9pbmZvKHBkZXYpLAlcCi0JCSAgICAgc3RydWN0IHVzYmhzX3ByaXZhdGUsIGluZm8pCi0KLSNkZWZpbmUgdXNiaHNfaXNfY29ubmVjdGVkKHByaXYpCQkJXAotCSghKCgxIDw8IDcpICYgX19yYXdfcmVhZHcocHJpdi0+dXNiY3JjYWRkcikpKQotCi1zdGF0aWMgaW50IHVzYmhzMV9nZXRfaWQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlyZXR1cm4gVVNCSFNfR0FER0VUOwotfQotCi1zdGF0aWMgaW50IHVzYmhzMV9nZXRfdmJ1cyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXJldHVybiB1c2Joc19pc19jb25uZWN0ZWQodXNiaHNfZ2V0X3ByaXYocGRldikpOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgdXNiaHMxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkYXRhOwpAQCAtNjU0LDEyICs3NDUsMTAgQEAKIAlzdHJ1Y3QgdXNiaHNfcHJpdmF0ZSAqcHJpdiA9IHVzYmhzX2dldF9wcml2KHBkZXYpOwogCWludCByZXQ7CiAKLQlpcnFfc2V0X2lycV90eXBlKHByaXYtPmlycSwgSVJRX1RZUEVfTEVWRUxfSElHSCk7Ci0KIAkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCiAJX19yYXdfd3JpdGV3KFVTQl9QSFlfTU9ERSB8IFVTQl9QSFlfSU5UX0NMUiwgcHJpdi0+dXNicGh5YWRkcik7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShwcml2LT5pcnEsIHVzYmhzMV9pbnRlcnJ1cHQsIDAsCisJcmV0ID0gcmVxdWVzdF9pcnEoSVJROCwgdXNiaHMxX2ludGVycnVwdCwgSVJRRl9UUklHR0VSX0hJR0gsCiAJCQkgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBwZGV2KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGVyclxuIik7CkBAIC02NzksMTUgKzc2OCwxMiBAQAogCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KIAlfX3Jhd193cml0ZXcoVVNCX1BIWV9NT0RFIHwgVVNCX1BIWV9JTlRfQ0xSLCBwcml2LT51c2JwaHlhZGRyKTsKIAotCWZyZWVfaXJxKHByaXYtPmlycSwgcGRldik7CisJZnJlZV9pcnEoSVJROCwgcGRldik7CiB9CiAKLXN0YXRpYyB2b2lkIHVzYmhzMV9waHlfcmVzZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgdXNiaHMxX2dldF9pZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCB1c2Joc19wcml2YXRlICpwcml2ID0gdXNiaHNfZ2V0X3ByaXYocGRldik7Ci0KLQkvKiBpbml0IHBoeSAqLwotCV9fcmF3X3dyaXRldygweDhhMGEsIHByaXYtPnVzYmNyY2FkZHIpOworCXJldHVybiBVU0JIU19HQURHRVQ7CiB9CiAKIHN0YXRpYyB1MzIgdXNiaHMxX3BpcGVfY2ZnW10gPSB7CkBAIC03MTAsMTYgKzc5NiwxNSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Joc19wcml2YXRlIHVzYmhzMV9wcml2YXRlID0gewotCS5pcnEJCT0gZXZ0MmlycSgweDAzMDApLAkvKiBJUlE4ICovCi0JLnVzYnBoeWFkZHIJPSAweEU2MDU4MUUyLAkJLyogVVNCUEhZMUlOVEFQICovCi0JLnVzYmNyY2FkZHIJPSAweEU2MDU4MTMwLAkJLyogVVNCQ1I0ICovCisJLnVzYnBoeWFkZHIJPSAweGU2MDU4MWUyLAkJLyogVVNCUEhZMUlOVEFQICovCisJLnVzYmNyY2FkZHIJPSAweGU2MDU4MTMwLAkJLyogVVNCQ1I0ICovCiAJLmluZm8gPSB7CiAJCS5wbGF0Zm9ybV9jYWxsYmFjayA9IHsKIAkJCS5oYXJkd2FyZV9pbml0CT0gdXNiaHMxX2hhcmR3YXJlX2luaXQsCiAJCQkuaGFyZHdhcmVfZXhpdAk9IHVzYmhzMV9oYXJkd2FyZV9leGl0LAotCQkJLnBoeV9yZXNldAk9IHVzYmhzMV9waHlfcmVzZXQsCiAJCQkuZ2V0X2lkCQk9IHVzYmhzMV9nZXRfaWQsCi0JCQkuZ2V0X3ZidXMJPSB1c2JoczFfZ2V0X3ZidXMsCisJCQkucGh5X3Jlc2V0CT0gdXNiaHNfcGh5X3Jlc2V0LAorCQkJLmdldF92YnVzCT0gdXNiaHNfZ2V0X3ZidXMsCiAJCX0sCiAJCS5kcml2ZXJfcGFyYW0gPSB7CiAJCQkuYnVzd2FpdF9id2FpdAk9IDQsCkBAIC03MzEsOSArODE2LDkgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoczFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkubmFtZQk9ICJVU0JIUyIsCi0JCS5zdGFydAk9IDB4RTY4QjAwMDAsCi0JCS5lbmQJPSAweEU2OEIwMEU2IC0gMSwKKwkJLm5hbWUJPSAiVVNCSFMxIiwKKwkJLnN0YXJ0CT0gMHhlNjhiMDAwMCwKKwkJLmVuZAk9IDB4ZTY4YjAwZTYgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTc1Miw3ICs4MzcsNiBAQAogCS5yZXNvdXJjZQk9IHVzYmhzMV9yZXNvdXJjZXMsCiB9OwogCi0KIC8qIExFRCAqLwogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBtYWNrZXJlbF9sZWRzW10gPSB7CiAJewpAQCAtMTIwMyw2ICsxMjg3LDcgQEAKIAkmbm9yX2ZsYXNoX2RldmljZSwKIAkmc21jOTExeF9kZXZpY2UsCiAJJmxjZGNfZGV2aWNlLAorCSZ1c2JoczBfZGV2aWNlLAogCSZ1c2IxX2hvc3RfZGV2aWNlLAogCSZ1c2JoczFfZGV2aWNlLAogCSZsZWRzX2RldmljZSwKQEAgLTEzMDEsNiArMTM4Niw3IEBACiAKICNkZWZpbmUgR1BJT19QT1JUOUNSCTB4RTYwNTEwMDkKICNkZWZpbmUgR1BJT19QT1JUMTBDUgkweEU2MDUxMDBBCisjZGVmaW5lIEdQSU9fUE9SVDE2N0NSCTB4RTYwNTIwQTcKICNkZWZpbmUgR1BJT19QT1JUMTY4Q1IJMHhFNjA1MjBBOAogI2RlZmluZSBTUkNSNAkJMHhlNjE1ODBiYwogI2RlZmluZSBVU0NDUjEJCTB4RTYwNTgxNDQKQEAgLTEzNTQsMTcgKzE0NDAsMTcgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTUxLCBOVUxMKTsgLyogTENERE9OICovCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVDE1MSwgMSk7CiAKLQkvKiBVU0IgZW5hYmxlICovCi0JZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVkJVUzBfMSwgICAgTlVMTCk7Ci0JZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSURJTl8xXzE4LCAgTlVMTCk7Ci0JZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUFdFTl8xXzExNSwgTlVMTCk7Ci0JZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fT1ZDTl8xXzExNCwgTlVMTCk7Ci0JZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRVhUTFBfMSwgICAgTlVMTCk7Ci0JZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fT1ZDTjJfMSwgICAgTlVMTCk7Ci0JZ3Bpb19wdWxsX2Rvd24oR1BJT19QT1JUMTY4Q1IpOworCS8qIFVTQkhTMCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1ZCVVMwXzAsIE5VTEwpOworCWdwaW9fcHVsbF9kb3duKEdQSU9fUE9SVDE2OENSKTsgLyogVkJVUzBfMCBwdWxsIGRvd24gKi8KIAotCS8qIHNldHVwIFVTQiBwaHkgKi8KLQlfX3Jhd193cml0ZXcoMHg4YTBhLCAweEU2MDU4MTMwKTsJLyogVVNCQ1I0ICovCisJLyogVVNCSFMxICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVkJVUzBfMSwgTlVMTCk7CisJZ3Bpb19wdWxsX2Rvd24oR1BJT19QT1JUMTY3Q1IpOyAvKiBWQlVTMF8xIHB1bGwgZG93biAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lESU5fMV8xMTMsIE5VTEwpOworCisJLyogVVNCIHBoeSB0d2VhayB0byBtYWtlIHRoZSByOGE2NjU5N19oY2QgaG9zdCBkcml2ZXIgd29yayAqLworCV9fcmF3X3dyaXRldygweDhhMGEsIDB4ZTYwNTgxMzApOyAgICAgICAvKiBVU0JDUjQgKi8KIAogCS8qIGVuYWJsZSBGU0kyIHBvcnQgQSAoYWs0NjQzKSAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFJQlQsCU5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCmluZGV4IDVkMGUxNTAuLmE5MTFhNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3M2EwLmMKQEAgLTI1MCw2ICsyNTAsMTEgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBpbnQgc2g3M2EwX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IG9uKQoreworCXJldHVybiAwOyAvKiBhbHdheXMgYWxsb3cgd2FrZXVwICovCit9CisKIHZvaWQgX19pbml0IHNoNzNhMF9pbml0X2lycSh2b2lkKQogewogCXZvaWQgX19pb21lbSAqZ2ljX2Rpc3RfYmFzZSA9IF9faW8oMHhmMDAwMTAwMCk7CkBAIC0yNTcsNiArMjYyLDcgQEAKIAl2b2lkIF9faW9tZW0gKmludGV2dHNhID0gaW9yZW1hcF9ub2NhY2hlKDB4ZmZkMjAxMDAsIFBBR0VfU0laRSk7CiAKIAlnaWNfaW5pdCgwLCAyOSwgZ2ljX2Rpc3RfYmFzZSwgZ2ljX2NwdV9iYXNlKTsKKwlnaWNfYXJjaF9leHRuLmlycV9zZXRfd2FrZSA9IHNoNzNhMF9zZXRfd2FrZTsKIAogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y3NfZGVzYyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzY3LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM2Ny5jCmluZGV4IDJjMTAxOTAuLmU1NDYwMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzY3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNjcuYwpAQCAtMzgsNyArMzgsNyBAQAogCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkuc2NzY3IJCT0gU0NTQ1JfUkUgfCBTQ1NDUl9URSwKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fNCwKLQkudHlwZQkJPSBQT1JUX1NDSUYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKIAkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjMDApLCBldnQyaXJxKDB4YzAwKSwKIAkJCSAgICBldnQyaXJxKDB4YzAwKSwgZXZ0MmlycSgweGMwMCkgfSwKIH07CkBAIC01Nyw3ICs1Nyw3IEBACiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT180LAotCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAogCS5pcnFzCQk9IHsgZXZ0MmlycSgweGMyMCksIGV2dDJpcnEoMHhjMjApLAogCQkJICAgIGV2dDJpcnEoMHhjMjApLCBldnQyaXJxKDB4YzIwKSB9LAogfTsKQEAgLTc2LDcgKzc2LDcgQEAKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUsCiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzQsCi0JLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS50eXBlCQk9IFBPUlRfU0NJRkEsCiAJLmlycXMJCT0geyBldnQyaXJxKDB4YzQwKSwgZXZ0MmlycSgweGM0MCksCiAJCQkgICAgZXZ0MmlycSgweGM0MCksIGV2dDJpcnEoMHhjNDApIH0sCiB9OwpAQCAtOTUsNyArOTUsNyBAQAogCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkuc2NzY3IJCT0gU0NTQ1JfUkUgfCBTQ1NDUl9URSwKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fNCwKLQkudHlwZQkJPSBQT1JUX1NDSUYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKIAkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjNjApLCBldnQyaXJxKDB4YzYwKSwKIAkJCSAgICBldnQyaXJxKDB4YzYwKSwgZXZ0MmlycSgweGM2MCkgfSwKIH07CkBAIC0xMTQsNyArMTE0LDcgQEAKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnNjc2NyCQk9IFNDU0NSX1JFIHwgU0NTQ1JfVEUsCiAJLnNjYnJyX2FsZ29faWQJPSBTQ0JSUl9BTEdPXzQsCi0JLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS50eXBlCQk9IFBPUlRfU0NJRkEsCiAJLmlycXMJCT0geyBldnQyaXJxKDB4ZDIwKSwgZXZ0MmlycSgweGQyMCksCiAJCQkgICAgZXZ0MmlycSgweGQyMCksIGV2dDJpcnEoMHhkMjApIH0sCiB9OwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCS5zY3NjcgkJPSBTQ1NDUl9SRSB8IFNDU0NSX1RFLAogCS5zY2Jycl9hbGdvX2lkCT0gU0NCUlJfQUxHT180LAotCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAogCS5pcnFzCQk9IHsgZXZ0MmlycSgweGQ0MCksIGV2dDJpcnEoMHhkNDApLAogCQkJICAgIGV2dDJpcnEoMHhkNDApLCBldnQyaXJxKDB4ZDQwKSB9LAogfTsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkuc2NzY3IJCT0gU0NTQ1JfUkUgfCBTQ1NDUl9URSwKIAkuc2NicnJfYWxnb19pZAk9IFNDQlJSX0FMR09fNCwKLQkudHlwZQkJPSBQT1JUX1NDSUYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGQiwKIAkuaXJxcwkJPSB7IGV2dDJpcnEoMHhkNjApLCBldnQyaXJxKDB4ZDYwKSwKIAkJCSAgICBldnQyaXJxKDB4ZDYwKSwgZXZ0MmlycSgweGQ2MCkgfSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLWhhcm1vbnktcG93ZXIuYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS1wb3dlci5jCmluZGV4IGM4NDQ0MmMuLjVhZDhiMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS1wb3dlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS1wb3dlci5jCkBAIC0yNCw2ICsyNCw4IEBACiAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAorI2luY2x1ZGUgImJvYXJkLWhhcm1vbnkuaCIKKwogI2RlZmluZSBQTUNfQ1RSTAkJMHgwCiAjZGVmaW5lIFBNQ19DVFJMX0lOVFJfTE9XCSgxIDw8IDE3KQogCkBAIC05OCw3ICsxMDAsNyBAQAogCS5pcnFfYmFzZQk9IFRFR1JBX05SX0lSUVMsCiAJLm51bV9zdWJkZXZzCT0gQVJSQVlfU0laRSh0cHNfZGV2cyksCiAJLnN1YmRldnMJPSB0cHNfZGV2cywKLQkuZ3Bpb19iYXNlCT0gVEVHUkFfTlJfR1BJT1MsCisJLmdwaW9fYmFzZQk9IEhBUk1PTllfR1BJT19UUFM2NTg2WCgwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBoYXJtb255X3JlZ3VsYXRvcnNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LmgKaW5kZXggMWU1N2IwNy4uZDg1MTQyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LmgKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LmgKQEAgLTE3LDcgKzE3LDggQEAKICNpZm5kZWYgX01BQ0hfVEVHUkFfQk9BUkRfSEFSTU9OWV9ICiAjZGVmaW5lIF9NQUNIX1RFR1JBX0JPQVJEX0hBUk1PTllfSAogCi0jZGVmaW5lIEhBUk1PTllfR1BJT19XTTg5MDMoX3hfKQkoVEVHUkFfTlJfR1BJT1MgKyAoX3hfKSkKKyNkZWZpbmUgSEFSTU9OWV9HUElPX1RQUzY1ODZYKF94XykJKFRFR1JBX05SX0dQSU9TICsgKF94XykpCisjZGVmaW5lIEhBUk1PTllfR1BJT19XTTg5MDMoX3hfKQkoSEFSTU9OWV9HUElPX1RQUzY1ODZYKDQpICsgKF94XykpCiAKICNkZWZpbmUgVEVHUkFfR1BJT19TRDJfQ0QJCVRFR1JBX0dQSU9fUEk1CiAjZGVmaW5lIFRFR1JBX0dQSU9fU0QyX1dQCQlURUdSQV9HUElPX1BIMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suaAppbmRleCBjMzRmM2VhLi40ZjUwY2E4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suaApAQCAtMzEsNyArMzEsNyBAQAogCWJvb2wgcmVzZXQ7CiAJX191MTYgY2xrX3ZhbDsKIAlfX3M4IHVzZWNvdW50OwotCV9fdTMyIHJlc19yZWc7CisJdm9pZCBfX2lvbWVtICogcmVzX3JlZzsKIAlfX3UxNiByZXNfbWFzazsKIAogCWJvb2wgaHdfY3RybGQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3UzMDAtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC91MzAwLXJlZ3MuaAppbmRleCA4Yjg1ZGY0Li4wMzVmZGM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3UzMDAtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvdTMwMC1yZWdzLmgKQEAgLTE4LDYgKzE4LDEyIEBACiAgKiB0aGUgZGVmaW5lcyBhcmUgdXNlZCBmb3Igc2V0dGluZyB1cCB0aGUgSS9PIG1lbW9yeSBtYXBwaW5nLgogICovCiAKKyNpZmRlZiBfX0FTU0VNQkxFUl9fCisjZGVmaW5lIElPTUVNKGEpIChhKQorI2Vsc2UKKyNkZWZpbmUgSU9NRU0oYSkgKHZvaWQgX19pb21lbSAqKSBhCisjZW5kaWYKKwogLyogTkFORCBGbGFzaCBDUzAgKi8KICNkZWZpbmUgVTMwMF9OQU5EX0NTMF9QSFlTX0JBU0UJCTB4ODAwMDAwMDAKIApAQCAtNDgsMTMgKzU0LDYgQEAKICNlbmRpZgogCiAvKgotICogQWxsIHRoZSBmb2xsb3dpbmcgcGVyaXBoZXJhbHMgYXJlIHNwZWNpZmllZCBhdCB0aGVpciBQSFlTSUNBTCBhZGRyZXNzLAotICogc28gaWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZW0gKGluIHRoZSBrZXJuZWwpLCB5b3UgTVVTVCB1c2UgdGhlIG1hY3JvcwotICogZGVmaW5lZCBpbiA8YXNtL2lvLmg+IHRvIG1hcCB0byB0aGUgSU9fQUREUkVTU19BSEIoKSBJT19BRERSRVNTX0ZBU1QoKQotICogZXRjLgotICovCi0KLS8qCiAgKiBBSEIgcGVyaXBoZXJhbHMKICAqLwogCkBAIC02MywxMSArNjIsMTEgQEAKIAogLyogVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgMCwgc2VydmljaW5nIDMyIGludGVycnVwdHMgKi8KICNkZWZpbmUgVTMwMF9JTlRDT04wX0JBU0UJCShVMzAwX0FIQl9QRVJfUEhZU19CQVNFKzB4MTAwMCkKLSNkZWZpbmUgVTMwMF9JTlRDT04wX1ZCQVNFCQkoVTMwMF9BSEJfUEVSX1ZJUlRfQkFTRSsweDEwMDApCisjZGVmaW5lIFUzMDBfSU5UQ09OMF9WQkFTRQkJSU9NRU0oVTMwMF9BSEJfUEVSX1ZJUlRfQkFTRSsweDEwMDApCiAKIC8qIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIDEsIHNlcnZpY2luZyAzMiBpbnRlcnJ1cHRzICovCiAjZGVmaW5lIFUzMDBfSU5UQ09OMV9CQVNFCQkoVTMwMF9BSEJfUEVSX1BIWVNfQkFTRSsweDIwMDApCi0jZGVmaW5lIFUzMDBfSU5UQ09OMV9WQkFTRQkJKFUzMDBfQUhCX1BFUl9WSVJUX0JBU0UrMHgyMDAwKQorI2RlZmluZSBVMzAwX0lOVENPTjFfVkJBU0UJCUlPTUVNKFUzMDBfQUhCX1BFUl9WSVJUX0JBU0UrMHgyMDAwKQogCiAvKiBNZW1vcnkgU3RpY2sgUHJvIChNU1BSTykgY29udHJvbGxlciAqLwogI2RlZmluZSBVMzAwX01TUFJPX0JBU0UJCQkoVTMwMF9BSEJfUEVSX1BIWVNfQkFTRSsweDMwMDApCkBAIC0xMTUsNyArMTE0LDcgQEAKIAogLyogU1lTQ09OICovCiAjZGVmaW5lIFUzMDBfU1lTQ09OX0JBU0UJCShVMzAwX1NMT1dfUEVSX1BIWVNfQkFTRSsweDEwMDApCi0jZGVmaW5lIFUzMDBfU1lTQ09OX1ZCQVNFCQkoVTMwMF9TTE9XX1BFUl9WSVJUX0JBU0UrMHgxMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9WQkFTRQkJSU9NRU0oVTMwMF9TTE9XX1BFUl9WSVJUX0JBU0UrMHgxMDAwKQogCiAvKiBXYXRjaGRvZyAqLwogI2RlZmluZSBVMzAwX1dET0dfQkFTRQkJCShVMzAwX1NMT1dfUEVSX1BIWVNfQkFTRSsweDIwMDApCkBAIC0xMjUsNyArMTI0LDcgQEAKIAogLyogQVBQIHNpZGUgc3BlY2lhbCB0aW1lciAqLwogI2RlZmluZSBVMzAwX1RJTUVSX0FQUF9CQVNFCQkoVTMwMF9TTE9XX1BFUl9QSFlTX0JBU0UrMHg0MDAwKQotI2RlZmluZSBVMzAwX1RJTUVSX0FQUF9WQkFTRQkJKFUzMDBfU0xPV19QRVJfVklSVF9CQVNFKzB4NDAwMCkKKyNkZWZpbmUgVTMwMF9USU1FUl9BUFBfVkJBU0UJCUlPTUVNKFUzMDBfU0xPV19QRVJfVklSVF9CQVNFKzB4NDAwMCkKIAogLyogS2V5cGFkICovCiAjZGVmaW5lIFUzMDBfS0VZUEFEX0JBU0UJCShVMzAwX1NMT1dfUEVSX1BIWVNfQkFTRSsweDUwMDApCkBAIC0xODEsNSArMTgwLDQgQEAKICAqIFZpcnR1YWwgYWNjZXNzb3IgbWFjcm9zIGZvciBzdGF0aWMgZGV2aWNlcwogICovCiAKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC90aW1lci5jCmluZGV4IDg5MWNmNDQuLjE4ZDdmYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC90aW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC90aW1lci5jCkBAIC00MTEsOCArNDExLDcgQEAKIAkvKiBVc2UgZ2VuZXJhbCBwdXJwb3NlIHRpbWVyIDIgYXMgY2xvY2sgc291cmNlICovCiAJaWYgKGNsb2Nrc291cmNlX21taW9faW5pdChVMzAwX1RJTUVSX0FQUF9WQkFTRSArIFUzMDBfVElNRVJfQVBQX0dQVDJDQywKIAkJCSJHUFQyIiwgcmF0ZSwgMzAwLCAzMiwgY2xvY2tzb3VyY2VfbW1pb19yZWFkbF91cCkpCi0JCXByaW50ayhLRVJOX0VSUiAidGltZXI6IGZhaWxlZCB0byBpbml0aWFsaXplIGNsb2NrICIKLQkJICAgICAgICJzb3VyY2UgJXNcbiIsIGNsb2Nrc291cmNlX3UzMDBfMW1oei5uYW1lKTsKKwkJcHJfZXJyKCJ0aW1lcjogZmFpbGVkIHRvIGluaXRpYWxpemUgVTMwMCBjbG9jayBzb3VyY2VcbiIpOwogCiAJY2xvY2tldmVudHNfY2FsY19tdWx0X3NoaWZ0KCZjbG9ja2V2ZW50X3UzMDBfMW1oeiwKIAkJCQkgICAgcmF0ZSwgQVBQVElNRVJfTUlOX1JBTkdFKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI4NTAwLmMKaW5kZXggYzNjNDE3Ni4uNDU5OGIwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI4NTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9jcHUtZGI4NTAwLmMKQEAgLTE1OSw2ICsxNTksOSBAQAogCQkvKiBObyBjdXN0b20gZGF0YSB5ZXQgKi8KIAl9OwogCisJaWYgKGNwdV9pc191ODUwMHYyKCkpCisJCXBkYXRhLnN1cHBvcnRzX3NsZWVwbW9kZSA9IHRydWU7CisKIAlkYng1MDBfYWRkX2dwaW9zKEFSUkFZX0FORF9TSVpFKGRiODUwMF9ncGlvX2Jhc2UpLAogCQkJIElSUV9EQjg1MDBfR1BJTzAsICZwZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jIGIvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYwppbmRleCAyODVlZGNkLi45ZTZiOTNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKQEAgLTQ2LDEyICs0Niw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCB2Mm1faW5pdF9lYXJseSh2b2lkKQotewotCWN0X2Rlc2MtPmluaXRfZWFybHkoKTsKLQl2ZXJzYXRpbGVfc2NoZWRfY2xvY2tfaW5pdChNTUlPX1AyVihWMk1fU1lTXzI0TUhaKSwgMjQwMDAwMDApOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgdjJtX3RpbWVyX2luaXQodm9pZCkKIHsKIAl1MzIgc2NjdHJsOwpAQCAtMzY1LDYgKzM1OSwxMyBAQAogCX0sCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgdjJtX2luaXRfZWFybHkodm9pZCkKK3sKKwljdF9kZXNjLT5pbml0X2Vhcmx5KCk7CisJY2xrZGV2X2FkZF90YWJsZSh2Mm1fbG9va3VwcywgQVJSQVlfU0laRSh2Mm1fbG9va3VwcykpOworCXZlcnNhdGlsZV9zY2hlZF9jbG9ja19pbml0KE1NSU9fUDJWKFYyTV9TWVNfMjRNSFopLCAyNDAwMDAwMCk7Cit9CisKIHN0YXRpYyB2b2lkIHYybV9wb3dlcl9vZmYodm9pZCkKIHsKIAlpZiAodjJtX2NmZ193cml0ZShTWVNfQ0ZHX1NIVVRET1dOIHwgU1lTX0NGR19TSVRFX01CLCAwKSkKQEAgLTQxOCw4ICs0MTksNiBAQAogewogCWludCBpOwogCi0JY2xrZGV2X2FkZF90YWJsZSh2Mm1fbG9va3VwcywgQVJSQVlfU0laRSh2Mm1fbG9va3VwcykpOwotCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fcGNpZV9pMmNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnYybV9kZGNfaTJjX2RldmljZSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2Mm1fZmxhc2hfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvbnRleHQuYyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwppbmRleCA4YmZhZTk2Li5iMGVlOWJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jb250ZXh0LmMKKysrIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCkBAIC0yNCw3ICsyNCw5IEBACiAKIC8qCiAgKiBXZSBmb3JrKCllZCBhIHByb2Nlc3MsIGFuZCB3ZSBuZWVkIGEgbmV3IGNvbnRleHQgZm9yIHRoZSBjaGlsZAotICogdG8gcnVuIGluLgorICogdG8gcnVuIGluLiAgV2UgcmVzZXJ2ZSB2ZXJzaW9uIDAgZm9yIGluaXRpYWwgdGFza3Mgc28gd2Ugd2lsbAorICogYWx3YXlzIGFsbG9jYXRlIGFuIEFTSUQuIFRoZSBBU0lEIDAgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBUVEJSCisgKiByZWdpc3RlciBjaGFuZ2luZyBzZXF1ZW5jZS4KICAqLwogdm9pZCBfX2luaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewpAQCAtMzQsMTEgKzM2LDggQEAKIAogc3RhdGljIHZvaWQgZmx1c2hfY29udGV4dCh2b2lkKQogewotCXUzMiB0dGI7Ci0JLyogQ29weSBUVEJSMSBpbnRvIFRUQlIwICovCi0JYXNtIHZvbGF0aWxlKCJtcmMJcDE1LCAwLCAlMCwgYzIsIGMwLCAxXG4iCi0JCSAgICAgIm1jcglwMTUsIDAsICUwLCBjMiwgYzAsIDAiCi0JCSAgICAgOiAiPXIiICh0dGIpKTsKKwkvKiBzZXQgdGhlIHJlc2VydmVkIEFTSUQgYmVmb3JlIGZsdXNoaW5nIHRoZSBUTEIgKi8KKwlhc20oIm1jcglwMTUsIDAsICUwLCBjMTMsIGMwLCAxXG4iIDogOiAiciIgKDApKTsKIAlpc2IoKTsKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiAJaWYgKGljYWNoZV9pc192aXZ0X2FzaWRfdGFnZ2VkKCkpIHsKQEAgLTk0LDcgKzkzLDcgQEAKIAkJcmV0dXJuOwogCiAJc21wX3JtYigpOwotCWFzaWQgPSBjcHVfbGFzdF9hc2lkICsgY3B1OworCWFzaWQgPSBjcHVfbGFzdF9hc2lkICsgY3B1ICsgMTsKIAogCWZsdXNoX2NvbnRleHQoKTsKIAlzZXRfbW1fY29udGV4dChtbSwgYXNpZCk7CkBAIC0xNDQsMTMgKzE0MywxMyBAQAogCSAqIHRvIHN0YXJ0IGEgbmV3IHZlcnNpb24gYW5kIGZsdXNoIHRoZSBUTEIuCiAJICovCiAJaWYgKHVubGlrZWx5KChhc2lkICYgfkFTSURfTUFTSykgPT0gMCkpIHsKLQkJYXNpZCA9IGNwdV9sYXN0X2FzaWQgKyBzbXBfcHJvY2Vzc29yX2lkKCk7CisJCWFzaWQgPSBjcHVfbGFzdF9hc2lkICsgc21wX3Byb2Nlc3Nvcl9pZCgpICsgMTsKIAkJZmx1c2hfY29udGV4dCgpOwogI2lmZGVmIENPTkZJR19TTVAKIAkJc21wX3dtYigpOwogCQlzbXBfY2FsbF9mdW5jdGlvbihyZXNldF9jb250ZXh0LCBOVUxMLCAxKTsKICNlbmRpZgotCQljcHVfbGFzdF9hc2lkICs9IE5SX0NQVVMgLSAxOworCQljcHVfbGFzdF9hc2lkICs9IE5SX0NQVVM7CiAJfQogCiAJc2V0X21tX2NvbnRleHQobW0sIGFzaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDJjMmNjZTkuLmMxOTU3MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTMzMSw2ICszMzEsMTIgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCWlmIChwaHlzX2luaXRyZF9zaXplICYmCisJICAgICFtZW1ibG9ja19pc19yZWdpb25fbWVtb3J5KHBoeXNfaW5pdHJkX3N0YXJ0LCBwaHlzX2luaXRyZF9zaXplKSkgeworCQlwcl9lcnIoIklOSVRSRDogMHglMDhseCsweCUwOGx4IGlzIG5vdCBhIG1lbW9yeSByZWdpb24gLSBkaXNhYmxpbmcgaW5pdHJkXG4iLAorCQkgICAgICAgcGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOworCQlwaHlzX2luaXRyZF9zdGFydCA9IHBoeXNfaW5pdHJkX3NpemUgPSAwOworCX0KKwlpZiAocGh5c19pbml0cmRfc2l6ZSAmJgogCSAgICBtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQocGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpKSB7CiAJCXByX2VycigiSU5JVFJEOiAweCUwOGx4KzB4JTA4bHggb3ZlcmxhcHMgaW4tdXNlIG1lbW9yeSByZWdpb24gLSBkaXNhYmxpbmcgaW5pdHJkXG4iLAogCQkgICAgICAgcGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOwpAQCAtNjM1LDcgKzY0MSw4IEBACiAJCQkiICAgIG1vZHVsZXMgOiAweCUwOGx4IC0gMHglMDhseCAgICglNGxkIE1CKVxuIgogCQkJIiAgICAgIC5pbml0IDogMHglcCIgIiAtIDB4JXAiICIgICAoJTRkIGtCKVxuIgogCQkJIiAgICAgIC50ZXh0IDogMHglcCIgIiAtIDB4JXAiICIgICAoJTRkIGtCKVxuIgotCQkJIiAgICAgIC5kYXRhIDogMHglcCIgIiAtIDB4JXAiICIgICAoJTRkIGtCKVxuIiwKKwkJCSIgICAgICAuZGF0YSA6IDB4JXAiICIgLSAweCVwIiAiICAgKCU0ZCBrQilcbiIKKwkJCSIgICAgICAgLmJzcyA6IDB4JXAiICIgLSAweCVwIiAiICAgKCU0ZCBrQilcbiIsCiAKIAkJCU1MSyhVTChDT05GSUdfVkVDVE9SU19CQVNFKSwgVUwoQ09ORklHX1ZFQ1RPUlNfQkFTRSkgKwogCQkJCShQQUdFX1NJWkUpKSwKQEAgLTY1Nyw3ICs2NjQsOCBAQAogCiAJCQlNTEtfUk9VTkRVUChfX2luaXRfYmVnaW4sIF9faW5pdF9lbmQpLAogCQkJTUxLX1JPVU5EVVAoX3RleHQsIF9ldGV4dCksCi0JCQlNTEtfUk9VTkRVUChfc2RhdGEsIF9lZGF0YSkpOworCQkJTUxLX1JPVU5EVVAoX3NkYXRhLCBfZWRhdGEpLAorCQkJTUxLX1JPVU5EVVAoX19ic3Nfc3RhcnQsIF9fYnNzX3N0b3ApKTsKIAogI3VuZGVmIE1MSwogI3VuZGVmIE1MTQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCmluZGV4IGU0YzE2NWMuLjUzN2ZmY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQkubG9uZwkwCiAJCS5sb25nCTAKIAkJLmxvbmcJdjRfY2FjaGVfZm5zCi0JCS5zaXplCV9fYXJtN3RkbWlfcHJvY19pbmZvLCAuIC0gX19hcm03ZG1pX3Byb2NfaW5mbworCQkuc2l6ZQlfX2FybTd0ZG1pX3Byb2NfaW5mbywgLiAtIF9fYXJtN3RkbWlfcHJvY19pbmZvCiAKIAkJLnR5cGUJX190cmlzY2VuZGE3X3Byb2NfaW5mbywgI29iamVjdAogX190cmlzY2VuZGE3X3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUwppbmRleCA3YjdlYmQ0Li41NDZiNTRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJLmxvbmcJMAogCQkubG9uZwkwCiAJCS5sb25nCXY0X2NhY2hlX2ZucwotCQkuc2l6ZQlfX2FybTl0ZG1pX3Byb2NfaW5mbywgLiAtIF9fYXJtOWRtaV9wcm9jX2luZm8KKwkJLnNpemUJX19hcm05dGRtaV9wcm9jX2luZm8sIC4gLSBfX2FybTl0ZG1pX3Byb2NfaW5mbwogCiAJCS50eXBlCV9fcDIwMDFfcHJvY19pbmZvLCAjb2JqZWN0CiBfX3AyMDAxX3Byb2NfaW5mbzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwppbmRleCBiM2I1NjZlLi4zYzM4Njc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCkBAIC0xMDgsMTYgKzEwOCwxOCBAQAogI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MwogCW1jcglwMTUsIDAsIHIyLCBjNywgYzUsIDYJCUAgZmx1c2ggQlRBQy9CVEIKICNlbmRpZgotCW1yYwlwMTUsIDAsIHIyLCBjMiwgYzAsIDEJCUAgbG9hZCBUVEIgMQotCW1jcglwMTUsIDAsIHIyLCBjMiwgYzAsIDAJCUAgaW50byBUVEIgMAorI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzc1NDMyMgorCWRzYgorI2VuZGlmCisJbWNyCXAxNSwgMCwgcjIsIGMxMywgYzAsIDEJCUAgc2V0IHJlc2VydmVkIGNvbnRleHQgSUQKKwlpc2IKKzE6CW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgc2V0IFRUQiAwCiAJaXNiCiAjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNzU0MzIyCiAJZHNiCiAjZW5kaWYKIAltY3IJcDE1LCAwLCByMSwgYzEzLCBjMCwgMQkJQCBzZXQgY29udGV4dCBJRAogCWlzYgotCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgc2V0IFRUQiAwCi0JaXNiCiAjZW5kaWYKIAltb3YJcGMsIGxyCiBFTkRQUk9DKGNwdV92N19zd2l0Y2hfbW0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1kbWEuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMvcGxhdGZvcm0taW14LWRtYS5jCmluZGV4IDM1MzhiODVlLi5iMTMwZjYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzL3BsYXRmb3JtLWlteC1kbWEuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TT0NfSU1YNTEKLXN0YXRpYyBzdHJ1Y3Qgc2RtYV9zY3JpcHRfc3RhcnRfYWRkcnMgYWRkcl9pbXg1MV90bzEgPSB7CitzdGF0aWMgc3RydWN0IHNkbWFfc2NyaXB0X3N0YXJ0X2FkZHJzIGFkZHJfaW14NTEgPSB7CiAJLmFwXzJfYXBfYWRkciA9IDY0MiwKIAkudWFydF8yX21jdV9hZGRyID0gODE3LAogCS5tY3VfMl9hcHBfYWRkciA9IDc0NywKQEAgLTE5Niw3ICsxOTYsOSBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU09DX0lNWDUxKQogCWlmIChjcHVfaXNfbXg1MSgpKSB7Ci0JCWlteDUxX2lteF9zZG1hX2RhdGEucGRhdGEuc2NyaXB0X2FkZHJzID0gJmFkZHJfaW14NTFfdG8xOworCQlpbnQgdG9fdmVyc2lvbiA9IG14NTFfcmV2aXNpb24oKSA+PiA0OworCQlpbXg1MV9pbXhfc2RtYV9kYXRhLnBkYXRhLnRvX3ZlcnNpb24gPSB0b192ZXJzaW9uOworCQlpbXg1MV9pbXhfc2RtYV9kYXRhLnBkYXRhLnNjcmlwdF9hZGRycyA9ICZhZGRyX2lteDUxOwogCQlyZXQgPSBpbXhfYWRkX2lteF9zZG1hKCZpbXg1MV9pbXhfc2RtYV9kYXRhKTsKIAl9IGVsc2UKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9ncGlvLmggYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2dwaW8uaAppbmRleCBlYTE5YTViLi5kNWQ3ZTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2dwaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2dwaW8uaApAQCAtOTAsNiArOTAsNyBAQAogCWludCBudW1fZ3BpbzsKIAl1MzIgKCpnZXRfc2Vjb25kYXJ5X3N0YXR1cykodW5zaWduZWQgaW50IGJhbmspOwogCXZvaWQgKCpzZXRfaW9mb3JjZSkoYm9vbCBlbmFibGUpOworCWJvb2wgc3VwcG9ydHNfc2xlZXBtb2RlOwogfTsKIAogI2VuZGlmIC8qIF9fQVNNX1BMQVRfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmgKaW5kZXggMzA4MzE5NS4uMGQ4ODQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mbGFzaC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZmxhc2guaApAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogZXh0ZXJuIHZvaWQgb21hcDFfc2V0X3ZwcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgZW5hYmxlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvdm1tLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvdm1tLmgKaW5kZXggMzJhMmY2Yy4uZTk5MmI5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb3ZtbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW92bW0uaApAQCAtMjksOSArMjksNiBAQAogICogbG93ZXIgMTYgYml0IGlzIHVzZWQgZm9yIGgvdyBhbmQgdXBwZXIgMTYgYml0IGlzIGZvciBzL3cuCiAgKi8KICNkZWZpbmUgSU9WTUZfU1dfU0hJRlQJCTE2Ci0jZGVmaW5lIElPVk1GX0hXX1NJWkUJCSgxIDw8IElPVk1GX1NXX1NISUZUKQotI2RlZmluZSBJT1ZNRl9IV19NQVNLCQkoSU9WTUZfSFdfU0laRSAtIDEpCi0jZGVmaW5lIElPVk1GX1NXX01BU0sJCSh+SU9WTUZfSFdfTUFTSylVTAogCiAvKgogICogaW92bWE6IGgvdyBmbGFncyBkZXJpdmVkIGZyb20gY2FtIGFuZCByYW0gYXR0cmlidXRlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaAppbmRleCBmMzhmZWY5Li5jN2I4NzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmgKQEAgLTEwMSw2ICsxMDEsOSBAQAogCQkvKiBJZiB1c2luZyBwb3dlcl9zYXZpbmcgYW5kIHRoZSBNTUMgcG93ZXIgaXMgbm90IHRvIGdvIG9mZiAqLwogCQl1bnNpZ25lZCBub19vZmY6MTsKIAorCQkvKiBlTU1DIGRvZXMgbm90IGhhbmRsZSBwb3dlciBvZmYgd2hlbiBub3QgaW4gc2xlZXAgc3RhdGUgKi8KKwkJdW5zaWduZWQgbm9fcmVndWxhdG9yX29mZl9pbml0OjE7CisKIAkJLyogUmVndWxhdG9yIG9mZiByZW1hcHBlZCB0byBzbGVlcCAqLwogCQl1bnNpZ25lZCB2Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXA6MTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwppbmRleCA1MWVmNDNlLi44M2EzN2M1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwpAQCAtNjQ4LDcgKzY0OCw2IEBACiAJCQlyZXR1cm4gUFRSX0VSUih2YSk7CiAJfQogCi0JZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOwogCWZsYWdzIHw9IElPVk1GX01NSU87CiAKQEAgLTcwNiw3ICs3MDUsNiBAQAogCWlmICghdmEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOwogCWZsYWdzIHw9IElPVk1GX0FMTE9DOwogCkBAIC03OTUsNyArNzkzLDYgQEAKIAlpZiAoIXZhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZsYWdzICY9IElPVk1GX0hXX01BU0s7CiAJZmxhZ3MgfD0gSU9WTUZfTElORUFSOwogCWZsYWdzIHw9IElPVk1GX01NSU87CiAKQEAgLTg1Myw3ICs4NTAsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlwYSA9IHZpcnRfdG9fcGh5cyh2YSk7CiAKLQlmbGFncyAmPSBJT1ZNRl9IV19NQVNLOwogCWZsYWdzIHw9IElPVk1GX0xJTkVBUjsKIAlmbGFncyB8PSBJT1ZNRl9BTExPQzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL29tYXBfZGV2aWNlLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYwppbmRleCBhMzdiOGViLi40OWZjMGRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYwpAQCAtODQsNiArODQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogCiAjaW5jbHVkZSA8cGxhdC9vbWFwX2RldmljZS5oPgogI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgpAQCAtNTM5LDIwICs1NDAsMzQgQEAKIHN0YXRpYyBpbnQgX29kX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWludCByZXQ7CiAKLQlyZXR1cm4gb21hcF9kZXZpY2VfaWRsZShwZGV2KTsKKwlyZXQgPSBwbV9nZW5lcmljX3J1bnRpbWVfc3VzcGVuZChkZXYpOworCisJaWYgKCFyZXQpCisJCW9tYXBfZGV2aWNlX2lkbGUocGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9vZF9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBwbV9nZW5lcmljX3J1bnRpbWVfaWRsZShkZXYpOwogfQogCiBzdGF0aWMgaW50IF9vZF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCi0JcmV0dXJuIG9tYXBfZGV2aWNlX2VuYWJsZShwZGV2KTsKKwlvbWFwX2RldmljZV9lbmFibGUocGRldik7CisKKwlyZXR1cm4gcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZShkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IGRldl9wb3dlcl9kb21haW4gb21hcF9kZXZpY2VfcG93ZXJfZG9tYWluID0gewogCS5vcHMgPSB7CiAJCS5ydW50aW1lX3N1c3BlbmQgPSBfb2RfcnVudGltZV9zdXNwZW5kLAorCQkucnVudGltZV9pZGxlID0gX29kX3J1bnRpbWVfaWRsZSwKIAkJLnJ1bnRpbWVfcmVzdW1lID0gX29kX3J1bnRpbWVfcmVzdW1lLAogCQlVU0VfUExBVEZPUk1fUE1fU0xFRVBfT1BTCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKaW5kZXggYTNmNTBiMy4uNmFmM2QwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkJZWxzZSBpZiAoY3B1X2lzX29tYXAxNjExKCkpCiAJCQlvbWFwX3NyYW1fc2l6ZSA9IFNaXzI1Nks7CiAJCWVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZGV0ZWN0IFNSQU0gc2l6ZVxuIik7CisJCQlwcl9lcnIoIkNvdWxkIG5vdCBkZXRlY3QgU1JBTSBzaXplXG4iKTsKIAkJCW9tYXBfc3JhbV9zaXplID0gMHg0MDAwOwogCQl9CiAJfQpAQCAtMjIxLDEwICsyMjEsMTAgQEAKIAlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGggPSBST1VORF9ET1dOKG9tYXBfc3JhbV9zaXplLCBQQUdFX1NJWkUpOwogCWlvdGFibGVfaW5pdChvbWFwX3NyYW1faW9fZGVzYywgQVJSQVlfU0laRShvbWFwX3NyYW1faW9fZGVzYykpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU1JBTTogTWFwcGVkIHBhIDB4JTA4bHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKLQlfX3Bmbl90b19waHlzKG9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiksCi0Jb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCwKLQkgICAgICAgb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoKTsKKwlwcl9pbmZvKCJTUkFNOiBNYXBwZWQgcGEgMHglMDhsbHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKKwkJKGxvbmcgbG9uZykgX19wZm5fdG9fcGh5cyhvbWFwX3NyYW1faW9fZGVzY1swXS5wZm4pLAorCQlvbWFwX3NyYW1faW9fZGVzY1swXS52aXJ0dWFsLAorCQlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGgpOwogCiAJLyoKIAkgKiBOb3JtYWxseSBkZXZpY2VtYXBzX2luaXQoKSB3b3VsZCBmbHVzaCBjYWNoZXMgYW5kIHRsYiBhZnRlcgpAQCAtMjUyLDcgKzI1Miw3IEBACiB2b2lkICpvbWFwX3NyYW1fcHVzaF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAoc2l6ZSA+IChvbWFwX3NyYW1fY2VpbCAtIChvbWFwX3NyYW1fYmFzZSArIFNSQU1fQk9PVExPQURFUl9TWikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTm90IGVub3VnaCBzcGFjZSBpbiBTUkFNXG4iKTsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIHNwYWNlIGluIFNSQU1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwppbmRleCBjMTBkMTBjLi4yYWJmOTY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCkBAIC0xMTk5LDcgKzExOTksNyBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfZG1hX3N1c3BlbmRfY2hhbihzM2MyNDEwX2RtYV9jaGFuICpjcCkKK3N0YXRpYyB2b2lkIHMzYzI0MTBfZG1hX3N1c3BlbmRfY2hhbihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY3ApCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgInN1c3BlbmRpbmcgZG1hIGNoYW5uZWwgJWRcbiIsIGNwLT5udW1iZXIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKaW5kZXggOWFlZTdlMS4uZmM4YzVmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CkBAIC02NjgsMyArNjY5LDggQEAKIAogCWlycWRiZigiczNjMjQxMDogcmVnaXN0ZXJlZCBpbnRlcnJ1cHQgaGFuZGxlcnNcbiIpOwogfQorCitzdHJ1Y3Qgc3lzY29yZV9vcHMgczNjMjR4eF9pcnFfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzM2MyNHh4X2lycV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjR4eF9pcnFfcmVzdW1lLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1vbmVuYW5kLmMgYi9hcmNoL2FybS9wbGF0LXM1cC9kZXYtb25lbmFuZC5jCmluZGV4IDZkYjkyNjIuLjIwMzM2YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1vbmVuYW5kLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LW9uZW5hbmQuYwpAQCAtMTUsOCArMTUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kLmg+CiAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL21hcC5oPgpAQCAtNDUsMTMgKzQzLDMgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwX29uZW5hbmRfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBzNXBfb25lbmFuZF9yZXNvdXJjZXMsCiB9OwotCi12b2lkIHM1cF9vbmVuYW5kX3NldF9wbGF0ZGF0YShzdHJ1Y3Qgb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKLXsKLQlzdHJ1Y3Qgb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpwZDsKLQotCXBkID0ga21lbWR1cChwZGF0YSwgc2l6ZW9mKHN0cnVjdCBvbmVuYW5kX3BsYXRmb3JtX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBkKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIHBsYXRmb3JtIGRhdGFcbiIsIF9fZnVuY19fKTsKLQlzNXBfZGV2aWNlX29uZW5hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSBwZDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9tYXAtczVwLmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oCmluZGV4IGE2YzNkMzIuLmQ5NzNkMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9tYXAtczVwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L21hcC1zNXAuaApAQCAtMzksNyArMzksNyBAQAogI2RlZmluZSBTNVBfVkFfVFdECQlTNVBfVkFfQ09SRVBFUkkoMHg2MDApCiAjZGVmaW5lIFM1UF9WQV9HSUNfRElTVAkJUzVQX1ZBX0NPUkVQRVJJKDB4MTAwMCkKIAotI2RlZmluZSBTNVBfVkFfVVNCX0hTUEhZCVMzQ19BRERSKDB4MDI5MDAwMDApCisjZGVmaW5lIFMzQ19WQV9VU0JfSFNQSFkJUzNDX0FERFIoMHgwMjkwMDAwMCkKIAogI2RlZmluZSBWQV9WSUMoeCkJCShTM0NfVkFfSVJRICsgKCh4KSAqIDB4MTAwMDApKQogI2RlZmluZSBWQV9WSUMwCQkJVkFfVklDKDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LW9uZW5hbmQuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtb25lbmFuZC5jCmluZGV4IDQ1ZWM3MzIuLmY1NGFlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtb25lbmFuZC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtb25lbmFuZC5jCkBAIC0xMyw4ICsxMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CkBAIC00MywxMyArNDEsMyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2Nfb25lbmFuZF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHMzY19vbmVuYW5kX3Jlc291cmNlcywKIH07Ci0KLXZvaWQgczNjX29uZW5hbmRfc2V0X3BsYXRkYXRhKHN0cnVjdCBvbmVuYW5kX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQotewotCXN0cnVjdCBvbmVuYW5kX3BsYXRmb3JtX2RhdGEgKnBkOwotCi0JcGQgPSBrbWVtZHVwKHBkYXRhLCBzaXplb2Yoc3RydWN0IG9uZW5hbmRfcGxhdGZvcm1fZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghcGQpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeSBmb3IgcGxhdGZvcm0gZGF0YVxuIiwgX19mdW5jX18pOwotCXMzY19kZXZpY2Vfb25lbmFuZC5kZXYucGxhdGZvcm1fZGF0YSA9IHBkOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaAppbmRleCBiNjFiOGVlLi40YWYxMDhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaApAQCAtNzUsMTAgKzc1LDggQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cGMxMDBfZGV2aWNlX3NwaTI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MjEwX2RldmljZV9zcGkwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjIxMF9kZXZpY2Vfc3BpMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cDY0NDBfZGV2aWNlX3NwaTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXA2NDQwX2RldmljZV9zcGkxOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwNjQ1MF9kZXZpY2Vfc3BpMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cDY0NTBfZGV2aWNlX3NwaTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXA2NHgwX2RldmljZV9zcGkwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwNjR4MF9kZXZpY2Vfc3BpMTsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9od21vbjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9kZWZjb25maWcKaW5kZXggNmY5Y2E1Ni4uYTA2YmZjYyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZGVmY29uZmlnCkBAIC01LDYgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDBfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMF9kZWZjb25maWcKaW5kZXggN2VlY2UwYS4uZDhmMWZlOCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMF9kZWZjb25maWcKQEAgLTUsNiArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMV9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAxX2RlZmNvbmZpZwppbmRleCAzODdlYjlkLi5kNGM1YjE5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAxX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAxX2RlZmNvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfbXJtdF9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfbXJtdF9kZWZjb25maWcKaW5kZXggMTlmNmNlZS4uNzdjYTRmOSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX21ybXRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9tcm10X2RlZmNvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEwOSw3ICsxMTAsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfUlRDX0NMQVNTPW0KK0NPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfUzM1MzkwQT1tCiBDT05GSUdfUlRDX0RSVl9BVDMyQVA3MDBYPW0KIENPTkZJR19ETUFERVZJQ0VTPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9kZWZjb25maWcKaW5kZXggZjBmZTIzNy4uNmUwZGNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9kZWZjb25maWcKQEAgLTUsNiArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9ldmtsY2QxMDBfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9ldmtsY2QxMDBfZGVmY29uZmlnCmluZGV4IGU0YTdjMWQuLjdmMmEzNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZXZrbGNkMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMF9kZWZjb25maWcKQEAgLTUsNiArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9ldmtsY2QxMDFfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9ldmtsY2QxMDFfZGVmY29uZmlnCmluZGV4IDZmMzdmNzAuLjA4NWVlYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZXZrbGNkMTAxX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMV9kZWZjb25maWcKQEAgLTUsNiArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAyX2RlZmNvbmZpZwppbmRleCA0ZmIwMWY1Li5kMWE4ODdlIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAyX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAyX2RlZmNvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAzX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDNfZGVmY29uZmlnCmluZGV4IDlmYWFmOWIuLjk1NmYyODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDNfZGVmY29uZmlnCkBAIC01LDYgKzUsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDRfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwNF9kZWZjb25maWcKaW5kZXggM2QyYTVkOC4uNDBjNjlmMyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwNF9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwNF9kZWZjb25maWcKQEAgLTUsNiArNSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwNl9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDA2X2RlZmNvbmZpZwppbmRleCAxZWQ4ZjIyLi41MTFlYjhhIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDA2X2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDA2X2RlZmNvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvZmF2ci0zMl9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvZmF2ci0zMl9kZWZjb25maWcKaW5kZXggYWVhZGM5NS4uMTk5NzNiMCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2ZhdnItMzJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9mYXZyLTMyX2RlZmNvbmZpZwpAQCAtNiw2ICs2LDcgQEAKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9oYW1tZXJoZWFkX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9oYW1tZXJoZWFkX2RlZmNvbmZpZwppbmRleCAxNjkyYmVlLi42ZjQ1NjgxIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvaGFtbWVyaGVhZF9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2hhbW1lcmhlYWRfZGVmY29uZmlnCkBAIC03LDYgKzcsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL21lcmlzY19kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvbWVyaXNjX2RlZmNvbmZpZwppbmRleCA4YjY3MGE2Li4zYmVmYWI5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvbWVyaXNjX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvbWVyaXNjX2RlZmNvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvbWltYzIwMF9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvbWltYzIwMF9kZWZjb25maWcKaW5kZXggNWE1MWYyZS4uMWJlZTUxZiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL21pbWMyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9taW1jMjAwX2RlZmNvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDQ5YTg4ZjUuLjEwODUwMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTMxLDcgKzEzMSw2IEBACiAgKi8KICNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIG5ld19wYywgbmV3X3NwKQkgXAogCWRvIHsJCQkJCSBcCi0JCXNldF9mcyhVU0VSX0RTKTsJCSBcCiAJCW1lbXNldChyZWdzLCAwLCBzaXplb2YoKnJlZ3MpKTsJIFwKIAkJcmVncy0+c3IgPSBNT0RFX1VTRVI7CQkgXAogCQlyZWdzLT5wYyA9IG5ld19wYyAmIH4xOwkJIFwKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvYXQzMmFwNzAweC5jIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMKaW5kZXggYWE2NzdlMi4uN2ZiZjBkYyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMKQEAgLTEwNDMsOCArMTA0Myw5IEBACiAJCWRhdGEtPnJlZ3MgPSAodm9pZCBfX2lvbWVtICopcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CiAJfQogCisJcGRldi0+aWQgPSBsaW5lOwogCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JcGRhdGEtPm51bSA9IHBvcnRucjsKKwlwZGF0YS0+bnVtID0gbGluZTsKIAlhdDMyX3VzYXJ0c1tsaW5lXSA9IHBkZXY7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggOWM5NmExMy4uODE4MTI5MyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTMxLDggKzMxLDIwIEBACiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOTI2MygpCSgwKQogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlybCgpCSgwKQogI2RlZmluZSBjcHVfaXNfYXQ5MWNhcDkoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5X3JldkIoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFjYXA5X3JldkMoKQkoMCkKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzEwKCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcyMCgpCSgwKQogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDUoKQkoMCkKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1ZXMoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05bTEwKCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NigpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTltMTEoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzE1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWczNSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTl4MzUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzI1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXgyNSgpCSgwKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbnRjLmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2ludGMuYwppbmRleCAzZTM2NDYxLi5jOWFjMmY4IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2ludGMuYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2ludGMuYwpAQCAtMTY3LDE0ICsxNjcsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbnRjX3Jlc3VtZSh2b2lkKQorc3RhdGljIHZvaWQgaW50Y19yZXN1bWUodm9pZCkKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQogCQlpbnRjX3dyaXRlbCgmaW50YzAsIElOVFBSMCArIDQgKiBpLCBpbnRjMC5zYXZlZF9pcHJbaV0pOwotCi0JcmV0dXJuIDA7CiB9CiAjZWxzZQogI2RlZmluZSBpbnRjX3N1c3BlbmQJTlVMTApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKaW5kZXggMzFkOTU0Mi4uOWYxZDA4NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCkBAIC0xMTIsNyArMTEyLDcgQEAKIENPTkZJR19VU0JfR19QUklOVEVSPW0KIENPTkZJR19NTUM9bQogQ09ORklHX1NESF9CRklOPW0KLUNPTkZJR19SVENfQ0xBU1M9bQorQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9CRklOPW0KIENPTkZJR19FWFQyX0ZTPW0KICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcubm9tbXUgYi9hcmNoL202OGsvS2NvbmZpZy5ub21tdQppbmRleCBmYzk4ZjliLi5iMDA0ZGMxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZy5ub21tdQorKysgYi9hcmNoL202OGsvS2NvbmZpZy5ub21tdQpAQCAtMTQsNiArMTQsMzMgQEAKIAlib29sCiAJZGVmYXVsdCBuCiAKK2NvbmZpZyBNNjgwMDAKKwlib29sCisJaGVscAorCSAgVGhlIEZyZWVzY2FsZSAod2FzIE1vdG9yb2xhKSA2ODAwMCBDUFUgaXMgdGhlIGZpcnN0IGdlbmVyYXRpb24gb2YKKwkgIHRoZSB3ZWxsIGtub3duIE02OEsgZmFtaWx5IG9mIHByb2Nlc3NvcnMuIFRoZSBDUFUgY29yZSBhcyB3ZWxsIGFzCisJICBiZWluZyBhdmFpbGFibGUgYXMgYSBzdGFuZCBhbG9uZSBDUFUgd2FzIGFsc28gdXNlZCBpbiBtYW55CisJICBTeXN0ZW0tT24tQ2hpcCBkZXZpY2VzIChlZyA2ODMyOCwgNjgzMDIsIGV0YykuIEl0IGRvZXMgbm90IGNvbnRhaW4KKwkgIGEgcGFnaW5nIE1NVS4KKworY29uZmlnIE1DUFUzMgorCWJvb2wKKwloZWxwCisJICBUaGUgRnJlZXNjYWxlICh3YXMgdGhlbiBNb3Rvcm9sYSkgQ1BVMzIgaXMgYSBDUFUgY29yZSB0aGF0IGlzCisJICBiYXNlZCBvbiB0aGUgNjgwMjAgcHJvY2Vzc29yLiBGb3IgdGhlIG1vc3QgcGFydCBpdCBpcyB1c2VkIGluCisJICBTeXN0ZW0tT24tQ2hpcCBwYXJ0cywgYW5kIGRvZXMgbm90IGNvbnRhaW4gYSBwYWdpbmcgTU1VLgorCitjb25maWcgQ09MREZJUkUKKwlib29sCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCWhlbHAKKwkgIFRoZSBGcmVlc2NhbGUgQ29sZEZpcmUgZmFtaWx5IG9mIHByb2Nlc3NvcnMgaXMgYSBtb2Rlcm4gZGVyaXZpdGl2ZQorCSAgb2YgdGhlIDY4MDAwIHByb2Nlc3NvciBmYW1pbHkuIFRoZXkgYXJlIG1haW5seSB0YXJnZXRlZCBhdCBlbWJlZGRlZAorCSAgYXBwbGljYXRpb25zLCBhbmQgYXJlIGFsbCBTeXN0ZW0tT24tQ2hpcCAoU09DKSBkZXZpY2VzLCBhcyBvcHBvc2VkCisJICB0byBzdGFuZCBhbG9uZSBDUFVzLiBUaGV5IGltcGxlbWVudCBhIHN1YnNldCBvZiB0aGUgb3JpZ2luYWwgNjgwMDAKKwkgIHByb2Nlc3NvciBpbnN0cnVjdGlvbiBzZXQuCisKIGNvbmZpZyBDT0xERklSRV9TV19BNwogCWJvb2wKIAlkZWZhdWx0IG4KQEAgLTM2LDI2ICs2MywzMSBAQAogCiBjb25maWcgTTY4MzI4CiAJYm9vbCAiTUM2ODMyOCIKKwlzZWxlY3QgTTY4MDAwCiAJaGVscAogCSAgTW90b3JvbGEgNjgzMjggcHJvY2Vzc29yIHN1cHBvcnQuCiAKIGNvbmZpZyBNNjhFWjMyOAogCWJvb2wgIk1DNjhFWjMyOCIKKwlzZWxlY3QgTTY4MDAwCiAJaGVscAogCSAgTW90b3JvbGEgNjhFWDMyOCBwcm9jZXNzb3Igc3VwcG9ydC4KIAogY29uZmlnIE02OFZaMzI4CiAJYm9vbCAiTUM2OFZaMzI4IgorCXNlbGVjdCBNNjgwMDAKIAloZWxwCiAJICBNb3Rvcm9sYSA2OFZaMzI4IHByb2Nlc3NvciBzdXBwb3J0LgogCiBjb25maWcgTTY4MzYwCiAJYm9vbCAiTUM2ODM2MCIKKwlzZWxlY3QgTUNQVTMyCiAJaGVscAogCSAgTW90b3JvbGEgNjgzNjAgcHJvY2Vzc29yIHN1cHBvcnQuCiAKIGNvbmZpZyBNNTIwNgogCWJvb2wgIk1DRjUyMDYiCisJc2VsZWN0IENPTERGSVJFCiAJc2VsZWN0IENPTERGSVJFX1NXX0E3CiAJc2VsZWN0IEhBVkVfTUJBUgogCWhlbHAKQEAgLTYzLDYgKzk1LDcgQEAKIAogY29uZmlnIE01MjA2ZQogCWJvb2wgIk1DRjUyMDZlIgorCXNlbGVjdCBDT0xERklSRQogCXNlbGVjdCBDT0xERklSRV9TV19BNwogCXNlbGVjdCBIQVZFX01CQVIKIAloZWxwCkBAIC03MCw2ICsxMDMsNyBAQAogCiBjb25maWcgTTUyMHgKIAlib29sICJNQ0Y1MjB4IgorCXNlbGVjdCBDT0xERklSRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IEhBVkVfQ0FDSEVfU1BMSVQKIAloZWxwCkBAIC03Nyw2ICsxMTEsNyBAQAogCiBjb25maWcgTTUyM3gKIAlib29sICJNQ0Y1MjN4IgorCXNlbGVjdCBDT0xERklSRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IEhBVkVfQ0FDSEVfU1BMSVQKIAlzZWxlY3QgSEFWRV9JUFNCQVIKQEAgLTg1LDYgKzEyMCw3IEBACiAKIGNvbmZpZyBNNTI0OQogCWJvb2wgIk1DRjUyNDkiCisJc2VsZWN0IENPTERGSVJFCiAJc2VsZWN0IENPTERGSVJFX1NXX0E3CiAJc2VsZWN0IEhBVkVfTUJBUgogCWhlbHAKQEAgLTkyLDYgKzEyOCw3IEBACiAKIGNvbmZpZyBNNTI3MQogCWJvb2wgIk1DRjUyNzEiCisJc2VsZWN0IENPTERGSVJFCiAJc2VsZWN0IEhBVkVfQ0FDSEVfU1BMSVQKIAlzZWxlY3QgSEFWRV9JUFNCQVIKIAloZWxwCkBAIC05OSw2ICsxMzYsNyBAQAogCiBjb25maWcgTTUyNzIKIAlib29sICJNQ0Y1MjcyIgorCXNlbGVjdCBDT0xERklSRQogCXNlbGVjdCBDT0xERklSRV9TV19BNwogCXNlbGVjdCBIQVZFX01CQVIKIAloZWxwCkBAIC0xMDYsNiArMTQ0LDcgQEAKIAogY29uZmlnIE01Mjc1CiAJYm9vbCAiTUNGNTI3NSIKKwlzZWxlY3QgQ09MREZJUkUKIAlzZWxlY3QgSEFWRV9DQUNIRV9TUExJVAogCXNlbGVjdCBIQVZFX0lQU0JBUgogCWhlbHAKQEAgLTExMyw2ICsxNTIsNyBAQAogCiBjb25maWcgTTUyOHgKIAlib29sICJNQ0Y1Mjh4IgorCXNlbGVjdCBDT0xERklSRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJc2VsZWN0IEhBVkVfQ0FDSEVfU1BMSVQKIAlzZWxlY3QgSEFWRV9JUFNCQVIKQEAgLTEyMSw2ICsxNjEsNyBAQAogCiBjb25maWcgTTUzMDcKIAlib29sICJNQ0Y1MzA3IgorCXNlbGVjdCBDT0xERklSRQogCXNlbGVjdCBDT0xERklSRV9TV19BNwogCXNlbGVjdCBIQVZFX0NBQ0hFX0NCCiAJc2VsZWN0IEhBVkVfTUJBUgpAQCAtMTI5LDEyICsxNzAsMTQgQEAKIAogY29uZmlnIE01MzJ4CiAJYm9vbCAiTUNGNTMyeCIKKwlzZWxlY3QgQ09MREZJUkUKIAlzZWxlY3QgSEFWRV9DQUNIRV9DQgogCWhlbHAKIAkgIEZyZWVzY2FsZSAoTW90b3JvbGEpIENvbGRGaXJlIDUzMnggcHJvY2Vzc29yIHN1cHBvcnQuCiAKIGNvbmZpZyBNNTQwNwogCWJvb2wgIk1DRjU0MDciCisJc2VsZWN0IENPTERGSVJFCiAJc2VsZWN0IENPTERGSVJFX1NXX0E3CiAJc2VsZWN0IEhBVkVfQ0FDSEVfQ0IKIAlzZWxlY3QgSEFWRV9NQkFSCkBAIC0xNDMsNiArMTg2LDcgQEAKIAogY29uZmlnIE01NDd4CiAJYm9vbCAiTUNGNTQ3eCIKKwlzZWxlY3QgQ09MREZJUkUKIAlzZWxlY3QgSEFWRV9DQUNIRV9DQgogCXNlbGVjdCBIQVZFX01CQVIKIAloZWxwCkBAIC0xNTAsNiArMTk0LDcgQEAKIAogY29uZmlnIE01NDh4CiAJYm9vbCAiTUNGNTQ4eCIKKwlzZWxlY3QgQ09MREZJUkUKIAlzZWxlY3QgSEFWRV9DQUNIRV9DQgogCXNlbGVjdCBIQVZFX01CQVIKIAloZWxwCkBAIC0xNjgsMTMgKzIxMyw2IEBACiAJZGVwZW5kcyBvbiAoTTU0OHggfHwgTTU0N3gpCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBDT0xERklSRQotCWJvb2wKLQlkZXBlbmRzIG9uIChNNTIwNiB8fCBNNTIwNmUgfHwgTTUyMHggfHwgTTUyM3ggfHwgTTUyNDkgfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUzMDcgfHwgTTUzMnggfHwgTTU0MDcgfHwgTTU0eHgpCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTwotCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgotCWRlZmF1bHQgeQotCiBjb25maWcgQ0xPQ0tfU0VUCiAJYm9vbCAiRW5hYmxlIHNldHRpbmcgdGhlIENQVSBjbG9jayBmcmVxdWVuY3kiCiAJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL202OGtfa3N5bXMuYyBiL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCmluZGV4IDMzZjgyNzYuLjFiN2ExNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvbTY4a19rc3ltcy5jCkBAIC0xNCw4ICsxNCw3IEBACiBFWFBPUlRfU1lNQk9MKF9fbHNocmRpMyk7CiBFWFBPUlRfU1lNQk9MKF9fbXVsZGkzKTsKIAotI2lmICFkZWZpbmVkKF9fbWM2ODAyMF9fKSAmJiAhZGVmaW5lZChfX21jNjgwMzBfXykgJiYgXAotICAgICFkZWZpbmVkKF9fbWM2ODA0MF9fKSAmJiAhZGVmaW5lZChfX21jNjgwNjBfXykgJiYgIWRlZmluZWQoX19tY3B1MzJfXykKKyNpZiBkZWZpbmVkKENPTkZJR19NNjgwMDApIHx8IGRlZmluZWQoQ09ORklHX0NPTERGSVJFKQogLyoKICAqIFNpbXBsZXIgNjhrIGFuZCBDb2xkRmlyZSBwYXJ0cyBhbHNvIG5lZWQgYSBmZXcgb3RoZXIgZ2NjIGZ1bmN0aW9ucy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4Lmxkc19uby5TIGIvYXJjaC9tNjhrL2tlcm5lbC92bWxpbnV4Lmxkc19uby5TCmluZGV4IGY0ZDcxNWMuLjdkYzQwODcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdm1saW51eC5sZHNfbm8uUworKysgYi9hcmNoL202OGsva2VybmVsL3ZtbGludXgubGRzX25vLlMKQEAgLTg0LDUyICs4NCw1MiBAQAogCQkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBOb3JtYWwgc3ltYm9scyAqLwogCQkuID0gQUxJR04oNCk7CiAJCV9fc3RhcnRfX19rc3ltdGFiID0gLjsKLQkJKihfX2tzeW10YWIpCisJCSooU09SVChfX19rc3ltdGFiKyopKQogCQlfX3N0b3BfX19rc3ltdGFiID0gLjsKIAogCQkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBHUEwtb25seSBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rc3ltdGFiX2dwbCA9IC47Ci0JCSooX19rc3ltdGFiX2dwbCkKKwkJKihTT1JUKF9fX2tzeW10YWJfZ3BsKyopKQogCQlfX3N0b3BfX19rc3ltdGFiX2dwbCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHVudXNlZCBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rc3ltdGFiX3VudXNlZCA9IC47Ci0JCSooX19rc3ltdGFiX3VudXNlZCkKKwkJKihTT1JUKF9fX2tzeW10YWJfdW51c2VkKyopKQogCQlfX3N0b3BfX19rc3ltdGFiX3VudXNlZCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLW9ubHkgdW51c2VkIHN5bWJvbHMgKi8KIAkJX19zdGFydF9fX2tzeW10YWJfdW51c2VkX2dwbCA9IC47Ci0JCSooX19rc3ltdGFiX3VudXNlZF9ncGwpCisJCSooU09SVChfX19rc3ltdGFiX3VudXNlZF9ncGwrKikpCiAJCV9fc3RvcF9fX2tzeW10YWJfdW51c2VkX2dwbCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLWZ1dHVyZSBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rc3ltdGFiX2dwbF9mdXR1cmUgPSAuOwotCQkqKF9fa3N5bXRhYl9ncGxfZnV0dXJlKQorCQkqKFNPUlQoX19fa3N5bXRhYl9ncGxfZnV0dXJlKyopKQogCQlfX3N0b3BfX19rc3ltdGFiX2dwbF9mdXR1cmUgPSAuOwogCiAJCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IE5vcm1hbCBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rY3JjdGFiID0gLjsKLQkJKihfX2tjcmN0YWIpCisJCSooU09SVChfX19rY3JjdGFiKyopKQogCQlfX3N0b3BfX19rY3JjdGFiID0gLjsKIAogCQkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBHUEwtb25seSBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rY3JjdGFiX2dwbCA9IC47Ci0JCSooX19rY3JjdGFiX2dwbCkKKwkJKihTT1JUKF9fX2tjcmN0YWJfZ3BsKyopKQogCQlfX3N0b3BfX19rY3JjdGFiX2dwbCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHVudXNlZCBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rY3JjdGFiX3VudXNlZCA9IC47Ci0JCSooX19rY3JjdGFiX3VudXNlZCkKKwkJKihTT1JUKF9fX2tjcmN0YWJfdW51c2VkKyopKQogCQlfX3N0b3BfX19rY3JjdGFiX3VudXNlZCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLW9ubHkgdW51c2VkIHN5bWJvbHMgKi8KIAkJX19zdGFydF9fX2tjcmN0YWJfdW51c2VkX2dwbCA9IC47Ci0JCSooX19rY3JjdGFiX3VudXNlZF9ncGwpCisJCSooU09SVChfX19rY3JjdGFiX3VudXNlZF9ncGwrKikpCiAJCV9fc3RvcF9fX2tjcmN0YWJfdW51c2VkX2dwbCA9IC47CiAKIAkJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLWZ1dHVyZSBzeW1ib2xzICovCiAJCV9fc3RhcnRfX19rY3JjdGFiX2dwbF9mdXR1cmUgPSAuOwotCQkqKF9fa2NyY3RhYl9ncGxfZnV0dXJlKQorCQkqKFNPUlQoX19fa2NyY3RhYl9ncGxfZnV0dXJlKyopKQogCQlfX3N0b3BfX19rY3JjdGFiX2dwbF9mdXR1cmUgPSAuOwogCiAJCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IHN0cmluZ3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvbWVtY3B5LmMgYi9hcmNoL202OGsvbGliL21lbWNweS5jCmluZGV4IDYyMTgyYzguLjA2NDg4OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9saWIvbWVtY3B5LmMKKysrIGIvYXJjaC9tNjhrL2xpYi9tZW1jcHkuYwpAQCAtMzQsOCArMzQsMTAgQEAKIAlpZiAodGVtcCkgewogCQlsb25nICpsdG8gPSB0bzsKIAkJY29uc3QgbG9uZyAqbGZyb20gPSBmcm9tOwotI2lmIGRlZmluZWQoX19tYzY4MDIwX18pIHx8IGRlZmluZWQoX19tYzY4MDMwX18pIHx8IFwKLSAgICBkZWZpbmVkKF9fbWM2ODA0MF9fKSB8fCBkZWZpbmVkKF9fbWM2ODA2MF9fKSB8fCBkZWZpbmVkKF9fbWNwdTMyX18pCisjaWYgZGVmaW5lZChDT05GSUdfTTY4MDAwKSB8fCBkZWZpbmVkKENPTkZJR19DT0xERklSRSkKKwkJZm9yICg7IHRlbXA7IHRlbXAtLSkKKwkJCSpsdG8rKyA9ICpsZnJvbSsrOworI2Vsc2UKIAkJYXNtIHZvbGF0aWxlICgKIAkJCSIJbW92ZWwgJTIsJTNcbiIKIAkJCSIJYW5kdyAgIzcsJTNcbiIKQEAgLTU2LDkgKzU4LDYgQEAKIAkJCSIJanBsICAgNGIiCiAJCQk6ICI9YSIgKGxmcm9tKSwgIj1hIiAobHRvKSwgIj1kIiAodGVtcCksICI9JmQiICh0ZW1wMSkKIAkJCTogIjAiIChsZnJvbSksICIxIiAobHRvKSwgIjIiICh0ZW1wKSk7Ci0jZWxzZQotCQlmb3IgKDsgdGVtcDsgdGVtcC0tKQotCQkJKmx0bysrID0gKmxmcm9tKys7CiAjZW5kaWYKIAkJdG8gPSBsdG87CiAJCWZyb20gPSBsZnJvbTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvbWVtc2V0LmMgYi9hcmNoL202OGsvbGliL21lbXNldC5jCmluZGV4IGY2NDllNmEuLjhhNzYzOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9saWIvbWVtc2V0LmMKKysrIGIvYXJjaC9tNjhrL2xpYi9tZW1zZXQuYwpAQCAtMzIsOCArMzIsMTAgQEAKIAl0ZW1wID0gY291bnQgPj4gMjsKIAlpZiAodGVtcCkgewogCQlsb25nICpscyA9IHM7Ci0jaWYgZGVmaW5lZChfX21jNjgwMjBfXykgfHwgZGVmaW5lZChfX21jNjgwMzBfXykgfHwgXAotICAgIGRlZmluZWQoX19tYzY4MDQwX18pIHx8IGRlZmluZWQoX19tYzY4MDYwX18pIHx8IGRlZmluZWQoX19tY3B1MzJfXykKKyNpZiBkZWZpbmVkKENPTkZJR19NNjgwMDApIHx8IGRlZmluZWQoQ09ORklHX0NPTERGSVJFKQorCQlmb3IgKDsgdGVtcDsgdGVtcC0tKQorCQkJKmxzKysgPSBjOworI2Vsc2UKIAkJc2l6ZV90IHRlbXAxOwogCQlhc20gdm9sYXRpbGUgKAogCQkJIgltb3ZlbCAlMSwlMlxuIgpAQCAtNTUsOSArNTcsNiBAQAogCQkJIglqcGwgICAxYiIKIAkJCTogIj1hIiAobHMpLCAiPWQiICh0ZW1wKSwgIj0mZCIgKHRlbXAxKQogCQkJOiAiZCIgKGMpLCAiMCIgKGxzKSwgIjEiICh0ZW1wKSk7Ci0jZWxzZQotCQlmb3IgKDsgdGVtcDsgdGVtcC0tKQotCQkJKmxzKysgPSBjOwogI2VuZGlmCiAJCXMgPSBsczsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL211bGRpMy5jIGIvYXJjaC9tNjhrL2xpYi9tdWxkaTMuYwppbmRleCAwNzliYWZjLi43OWU5MjhhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbGliL211bGRpMy5jCisrKyBiL2FyY2gvbTY4ay9saWIvbXVsZGkzLmMKQEAgLTE5LDE3ICsxOSw3IEBACiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCiAKLSNpZiBkZWZpbmVkKF9fbWM2ODAyMF9fKSB8fCBkZWZpbmVkKF9fbWM2ODAzMF9fKSB8fCBcCi0gICAgZGVmaW5lZChfX21jNjgwNDBfXykgfHwgZGVmaW5lZChfX21jNjgwNjBfXykgfHwgZGVmaW5lZChfX21jcHUzMl9fKQotCi0jZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKLSAgX19hc21fXyAoIm11bHUlLmwgJTMsJTE6JTAiCQkJCQkJXAotICAgICAgICAgICA6ICI9ZCIgKChVU0l0eXBlKSh3MCkpLAkJCQkJXAotICAgICAgICAgICAgICI9ZCIgKChVU0l0eXBlKSh3MSkpCQkJCQlcCi0gICAgICAgICAgIDogIiUwIiAoKFVTSXR5cGUpKHUpKSwJCQkJCVwKLSAgICAgICAgICAgICAiZG1pIiAoKFVTSXR5cGUpKHYpKSkKLQotI2Vsc2UKKyNpZiBkZWZpbmVkKENPTkZJR19NNjgwMDApIHx8IGRlZmluZWQoQ09ORklHX0NPTERGSVJFKQogCiAjZGVmaW5lIFNJX1RZUEVfU0laRSAzMgogI2RlZmluZSBfX0JJVFM0IChTSV9UWVBFX1NJWkUgLyA0KQpAQCAtNjEsNiArNTEsMTUgQEAKICAgICAodzApID0gX19sbF9sb3dwYXJ0IChfX3gxKSAqIF9fbGxfQiArIF9fbGxfbG93cGFydCAoX194MCk7CQlcCiAgIH0gd2hpbGUgKDApCiAKKyNlbHNlCisKKyNkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikgXAorICBfX2FzbV9fICgibXVsdSUubCAlMywlMTolMCIJCQkJCQlcCisgICAgICAgICAgIDogIj1kIiAoKFVTSXR5cGUpKHcwKSksCQkJCQlcCisgICAgICAgICAgICAgIj1kIiAoKFVTSXR5cGUpKHcxKSkJCQkJCVwKKyAgICAgICAgICAgOiAiJTAiICgoVVNJdHlwZSkodSkpLAkJCQkJXAorICAgICAgICAgICAgICJkbWkiICgoVVNJdHlwZSkodikpKQorCiAjZW5kaWYKIAogI2RlZmluZSBfX3VtdWxzaWRpMyh1LCB2KSBcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnCmluZGV4IDM3ODYyYjIuLjgwN2M5N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnCkBAIC02NzgsNyArNjc4LDcgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKLUNPTkZJR19SVENfQ0xBU1M9bQorQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMPXkKIENPTkZJR19SVENfRFJWX1RFU1Q9bQogQ09ORklHX1JUQ19EUlZfRFMxMzA3PW0KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdHJhcHMuYwppbmRleCBmMDNjYjI3Li5iZDNlNWU3IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC90cmFwcy5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgpAQCAtMTU2LDcgKzE1Niw3IEBACiAKIAljYXNlIEVYQ0VQX1RSQVA6CiAJY2FzZSBFWENFUF9VTklNUElOUzoKLQkJaWYgKGdldF91c2VyKG9wY29kZSwgKHVpbnQ4X3QgX191c2VyICopcmVncy0+cGMpICE9IDApCisJCWlmIChwcm9iZV9rZXJuZWxfcmVhZCgmb3Bjb2RlLCAodTggKilyZWdzLT5wYywgMSkgPCAwKQogCQkJYnJlYWs7CiAJCWlmIChvcGNvZGUgPT0gMHhmZikgewogCQkJaWYgKG5vdGlmeV9kaWUoRElFX0JSRUFLUE9JTlQsIHN0ciwgcmVncywgY29kZSwgMCwgMCkpCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNmY3MDJhNi4uMTNjNDgxNCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDQsNiArNDQsNyBAQAogICBST19EQVRBKFBBR0VfU0laRSkKIAogICAvKiB3cml0ZWFibGUgKi8KKyAgX3NkYXRhID0gLjsgICAgIC8qIFN0YXJ0IG9mIHJ3IGRhdGEgc2VjdGlvbiAqLwogICBSV19EQVRBX1NFQ1RJT04oMzIsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAgIF9lZGF0YSA9IC47CiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9tbS9jYWNoZS1kYmctZmx1c2gtYnktcmVnLlMgYi9hcmNoL21uMTAzMDAvbW0vY2FjaGUtZGJnLWZsdXNoLWJ5LXJlZy5TCmluZGV4IDY2NTkxOWYuLmE3NzVlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9tbS9jYWNoZS1kYmctZmx1c2gtYnktcmVnLlMKKysrIGIvYXJjaC9tbjEwMzAwL21tL2NhY2hlLWRiZy1mbHVzaC1ieS1yZWcuUwpAQCAtMTIwLDE0ICsxMjAsMTQgQEAKIAkjIGNvbmRpdGlvbmFsbHkgcHVyZ2UgdGhpcyBsaW5lIGluIGFsbCB3YXlzCiAJbW92CWQxLChMMV9DQUNIRV9XQVlESVNQKjAsYTApCiAKLWRlYnVnZ2VyX2xvY2FsX2NhY2hlX2ZsdXNoaW52X25vX2RjYWNoZToKK2RlYnVnZ2VyX2xvY2FsX2NhY2hlX2ZsdXNoaW52X29uZV9ub19kY2FjaGU6CiAJIwogCSMgbm93IHRyeSB0byBmbHVzaCB0aGUgaWNhY2hlCiAJIwogCW1vdglDSENUUixhMAogCW1vdmh1CShhMCksZDAKIAlidHN0CUNIQ1RSX0lDRU4sZDAKLQliZXEJbW4xMDMwMF9sb2NhbF9pY2FjaGVfaW52X3JhbmdlX3JlZ19lbmQKKwliZXEJZGVidWdnZXJfbG9jYWxfY2FjaGVfZmx1c2hpbnZfb25lX2VuZAogCiAJTE9DQUxfQ0xJX1NBVkUoZDEpCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290Ly5naXRpZ25vcmUgYi9hcmNoL3Bvd2VycGMvYm9vdC8uZ2l0aWdub3JlCmluZGV4IDNkODBjM2UuLjEyZGE3N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290Ly5naXRpZ25vcmUKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvLmdpdGlnbm9yZQpAQCAtMSw1ICsxLDQgQEAKIGFkZG5vdGUKLWR0YwogZW1wdHkuYwogaGFjay1jb2ZmCiBpbmZibG9jay5jCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjLy5naXRpZ25vcmUgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3YzNmOTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRjLXNyYy8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1kdGMtbGV4ZXIubGV4LmMKLWR0Yy1wYXJzZXIudGFiLmMKLWR0Yy1wYXJzZXIudGFiLmgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwppbmRleCA3ZjdlNGE4Li4yMmU3MTk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCkBAIC04NSw3ICs4NSw3IEBACiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRT1tCi1DT05GSUdfUlRDX0NMQVNTPW0KK0NPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfUENGODU2Mz1tCiBDT05GSUdfRVhUMl9GUz1tCiBDT05GSUdfRVhUM19GUz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZwppbmRleCA2NDcyMzIyLi4xODVjMjkyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKQEAgLTE0MSw3ICsxNDEsNyBAQAogIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KIENPTkZJR19VU0JfU1RPUkFHRT1tCi1DT05GSUdfUlRDX0NMQVNTPW0KK0NPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfUFMzPW0KIENPTkZJR19FWFQyX0ZTPW0KIENPTkZJR19FWFQzX0ZTPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yaW8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yaW8uaAppbmRleCBkOTAyYWJkLi5iMWQyZGVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmlvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Jpby5oCkBAIC0xNCw3ICsxNCw3IEBACiAjZGVmaW5lIEFTTV9QUENfUklPX0gKIAogZXh0ZXJuIHZvaWQgcGxhdGZvcm1fcmlvX2luaXQodm9pZCk7Ci0jaWZkZWYgQ09ORklHX1JBUElESU8KKyNpZmRlZiBDT05GSUdfRlNMX1JJTwogZXh0ZXJuIGludCBmc2xfcmlvX21jaGVja19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgZnNsX3Jpb19tY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7cmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCAzNGQyNzIyLi45ZmI5MzMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0xOTc5LDcgKzE5NzksNyBAQAogCQkucHZyX3ZhbHVlCQk9IDB4ODAyNDAwMDAsCiAJCS5jcHVfbmFtZQkJPSAiZTU1MDAiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX0U1NTAwLAotCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9CT09LRSwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfQk9PS0UgfCBQUENfRkVBVFVSRV9IQVNfRlBVLAogCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV9GU0xfRSB8IE1NVV9GVFJfQklHX1BIWVMgfAogCQkJTU1VX0ZUUl9VU0VfVExCSUxYLAogCQkuaWNhY2hlX2JzaXplCQk9IDY0LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCBmMmM5MDZiLi44YzMxMTJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtODIsMTEgKzgyLDI5IEBACiB9CiBlYXJseV9wYXJhbSgibWVtIiwgZWFybHlfcGFyc2VfbWVtKTsKIAorLyoKKyAqIG92ZXJsYXBzX2luaXRyZCAtIGNoZWNrIGZvciBvdmVybGFwIHdpdGggcGFnZSBhbGlnbmVkIGV4dGVuc2lvbiBvZgorICogaW5pdHJkLgorICovCitzdGF0aWMgaW5saW5lIGludCBvdmVybGFwc19pbml0cmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCWlmICghaW5pdHJkX3N0YXJ0KQorCQlyZXR1cm4gMDsKKworCXJldHVybgkoc3RhcnQgKyBzaXplKSA+IF9BTElHTl9ET1dOKGluaXRyZF9zdGFydCwgUEFHRV9TSVpFKSAmJgorCQkJc3RhcnQgPD0gX0FMSUdOX1VQKGluaXRyZF9lbmQsIFBBR0VfU0laRSk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKIC8qKgogICogbW92ZV9kZXZpY2VfdHJlZSAtIG1vdmUgdHJlZSB0byBhbiB1bnVzZWQgYXJlYSwgaWYgbmVlZGVkLgogICoKICAqIFRoZSBkZXZpY2UgdHJlZSBtYXkgYmUgYWxsb2NhdGVkIGJleW9uZCBvdXIgbWVtb3J5IGxpbWl0LCBvciBpbnNpZGUgdGhlCi0gKiBjcmFzaCBrZXJuZWwgcmVnaW9uIGZvciBrZHVtcC4gSWYgc28sIG1vdmUgaXQgb3V0IG9mIHRoZSB3YXkuCisgKiBjcmFzaCBrZXJuZWwgcmVnaW9uIGZvciBrZHVtcCwgb3Igd2l0aGluIHRoZSBwYWdlIGFsaWduZWQgcmFuZ2Ugb2YgaW5pdHJkLgorICogSWYgc28sIG1vdmUgaXQgb3V0IG9mIHRoZSB3YXkuCiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBtb3ZlX2RldmljZV90cmVlKHZvaWQpCiB7CkBAIC05OSw3ICsxMTcsOCBAQAogCXNpemUgPSBiZTMyX3RvX2NwdShpbml0aWFsX2Jvb3RfcGFyYW1zLT50b3RhbHNpemUpOwogCiAJaWYgKChtZW1vcnlfbGltaXQgJiYgKHN0YXJ0ICsgc2l6ZSkgPiBQSFlTSUNBTF9TVEFSVCArIG1lbW9yeV9saW1pdCkgfHwKLQkJCW92ZXJsYXBzX2NyYXNoa2VybmVsKHN0YXJ0LCBzaXplKSkgeworCQkJb3ZlcmxhcHNfY3Jhc2hrZXJuZWwoc3RhcnQsIHNpemUpIHx8CisJCQlvdmVybGFwc19pbml0cmQoc3RhcnQsIHNpemUpKSB7CiAJCXAgPSBfX3ZhKG1lbWJsb2NrX2FsbG9jKHNpemUsIFBBR0VfU0laRSkpOwogCQltZW1jcHkocCwgaW5pdGlhbF9ib290X3BhcmFtcywgc2l6ZSk7CiAJCWluaXRpYWxfYm9vdF9wYXJhbXMgPSAoc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICopcDsKQEAgLTU1NSw3ICs1NzQsOSBAQAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCS8qIHRoZW4gcmVzZXJ2ZSB0aGUgaW5pdHJkLCBpZiBhbnkgKi8KIAlpZiAoaW5pdHJkX3N0YXJ0ICYmIChpbml0cmRfZW5kID4gaW5pdHJkX3N0YXJ0KSkKLQkJbWVtYmxvY2tfcmVzZXJ2ZShfX3BhKGluaXRyZF9zdGFydCksIGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQpOworCQltZW1ibG9ja19yZXNlcnZlKF9BTElHTl9ET1dOKF9fcGEoaW5pdHJkX3N0YXJ0KSwgUEFHRV9TSVpFKSwKKwkJCV9BTElHTl9VUChpbml0cmRfZW5kLCBQQUdFX1NJWkUpIC0KKwkJCV9BTElHTl9ET1dOKGluaXRyZF9zdGFydCwgUEFHRV9TSVpFKSk7CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU5JVFJEICovCiAKICNpZmRlZiBDT05GSUdfUFBDMzIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCmluZGV4IGQ2NWI1OTEuLjVkZTBmMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwpAQCAtMjIzLDIxICsyMjMsNiBAQAogI3VuZGVmIEZSRUVTRUMKIH0KIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JaWYgKHN0YXJ0IDwgZW5kKQotCQlwcmludGsgKCJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsIChlbmQgLSBzdGFydCkgPj4gMTApOwotCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCWZyZWVfcGFnZShzdGFydCk7Ci0JCXRvdGFscmFtX3BhZ2VzKys7Ci0JfQotfQotI2VuZGlmCi0KLQogI2lmZGVmIENPTkZJR184eHggLyogTm8gOHh4IHNwZWNpZmljIC5jIGZpbGUgdG8gcHV0IHRoYXQgaW4gLi4uICovCiB2b2lkIHNldHVwX2luaXRpYWxfbWVtb3J5X2xpbWl0KHBoeXNfYWRkcl90IGZpcnN0X21lbWJsb2NrX2Jhc2UsCiAJCQkJcGh5c19hZGRyX3QgZmlyc3RfbWVtYmxvY2tfc2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCmluZGV4IDYzNzRiMjEuLmY2ZGJiNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwpAQCAtOTksMjAgKzk5LDYgQEAKIAkJKCh1bnNpZ25lZCBsb25nKV9faW5pdF9lbmQgLSAodW5zaWduZWQgbG9uZylfX2luaXRfYmVnaW4pID4+IDEwKTsKIH0KIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JaWYgKHN0YXJ0IDwgZW5kKQotCQlwcmludGsgKCJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsIChlbmQgLSBzdGFydCkgPj4gMTApOwotCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOwotCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCWZyZWVfcGFnZShzdGFydCk7Ci0JCXRvdGFscmFtX3BhZ2VzKys7Ci0JfQotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHBnZF9jdG9yKHZvaWQgKmFkZHIpCiB7CiAJbWVtc2V0KGFkZHIsIDAsIFBHRF9UQUJMRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwppbmRleCA1N2U1NDViLi4yOWQ0ZGRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCkBAIC0zODIsNiArMzgyLDI1IEBACiAJbWVtX2luaXRfZG9uZSA9IDE7CiB9CiAKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK3ZvaWQgX19pbml0IGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAoc3RhcnQgPj0gZW5kKQorCQlyZXR1cm47CisKKwlzdGFydCA9IF9BTElHTl9ET1dOKHN0YXJ0LCBQQUdFX1NJWkUpOworCWVuZCA9IF9BTElHTl9VUChlbmQsIFBBR0VfU0laRSk7CisJcHJfaW5mbygiRnJlZWluZyBpbml0cmQgbWVtb3J5OiAlbGRrIGZyZWVkXG4iLCAoZW5kIC0gc3RhcnQpID4+IDEwKTsKKworCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQgKz0gUEFHRV9TSVpFKSB7CisJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShzdGFydCkpOworCQlpbml0X3BhZ2VfY291bnQodmlydF90b19wYWdlKHN0YXJ0KSk7CisJCWZyZWVfcGFnZShzdGFydCk7CisJCXRvdGFscmFtX3BhZ2VzKys7CisJfQorfQorI2VuZGlmCisKIC8qCiAgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgcGFnZSBoYXMgYmVlbiBtb2RpZmllZCBieSB0aGUga2VybmVsLgogICogSXQganVzdCBtYXJrcyB0aGUgcGFnZSBhcyBub3QgaS1jYWNoZSBjbGVhbi4gIFdlIGRvIHRoZSBpLWNhY2hlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCmluZGV4IDA2MDhiMTYuLmQ5MTc1NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jCkBAIC0xOTYsOSArMTk2LDYgQEAKIAlvdXRfYmUzMigmbGJjLT5sdGVjY3IsIExURUNDUl9DTEVBUik7CiAJb3V0X2JlMzIoJmxiYy0+bHRlZHIsIExURURSX0VOQUJMRSk7CiAKLQkvKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgYW55IGRldGVjdGVkIGV2ZW50cyAqLwotCW91dF9iZTMyKCZsYmMtPmx0ZWlyLCBMVEVJUl9FTkFCTEUpOwotCiAJLyogU2V0IHRoZSBtb25pdG9yIHRpbWVvdXQgdmFsdWUgdG8gdGhlIG1heGltdW0gZm9yIGVycmF0dW0gQTAwMSAqLwogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShub2RlLCAiZnNsLGVsYmMiKSkKIAkJY2xyc2V0Yml0c19iZTMyKCZsYmMtPmxiY3IsIExCQ1JfQk1ULCBMQkNSX0JNVFBTKTsKQEAgLTMyMiw2ICszMTksOSBAQAogCQlnb3RvIGVycjsKIAl9CiAKKwkvKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgYW55IGRldGVjdGVkIGV2ZW50cyAqLworCW91dF9iZTMyKCZmc2xfbGJjX2N0cmxfZGV2LT5yZWdzLT5sdGVpciwgTFRFSVJfRU5BQkxFKTsKKwogCXJldHVybiAwOwogCiBlcnI6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDlmYWIyYWEuLjkwZDc3YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC04OSw2ICs4OSw3IEBACiAJc2VsZWN0IEhBVkVfR0VUX1VTRVJfUEFHRVNfRkFTVAogCXNlbGVjdCBIQVZFX0FSQ0hfTVVURVhfQ1BVX1JFTEFYCiAJc2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMIGlmICFNQVJDSF9HNQorCXNlbGVjdCBIQVZFX1JDVV9UQUJMRV9GUkVFIGlmIFNNUAogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0sKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLX0JICiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fTE9DSwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggZjYzMTRhZi4uMzhlNzFlYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0xNywxNSArMTcsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCi0jZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHt9IHdoaWxlICgwKQotCiB1bnNpZ25lZCBsb25nICpjcnN0X3RhYmxlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CiB2b2lkIGNyc3RfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7Ci12b2lkIGNyc3RfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nICopOwogCiB1bnNpZ25lZCBsb25nICpwYWdlX3RhYmxlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CiB2b2lkIHBhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7Ci12b2lkIHBhZ2VfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nICopOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCit2b2lkIHBhZ2VfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tdV9nYXRoZXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKK3ZvaWQgX190bGJfcmVtb3ZlX3RhYmxlKHZvaWQgKl90YWJsZSk7CisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3RhYmxlKHVuc2lnbmVkIGxvbmcgKnMsIHVuc2lnbmVkIGxvbmcgdmFsLCBzaXplX3QgbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGU0ZWZhY2YuLjgwMWZiZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjkzLDE5ICsyOTMsNiBAQAogICogc3dhcCBwdGUgaXMgMTAxMSBhbmQgMDAwMSwgMDAxMSwgMDEwMSwgMDExMSBhcmUgaW52YWxpZC4KICAqLwogCi0vKiBQYWdlIHN0YXR1cyB0YWJsZSBiaXRzIGZvciB2aXJ0dWFsaXphdGlvbiAqLwotI2RlZmluZSBSQ1BfQUNDX0JJVFMJMHhmMDAwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgUkNQX0ZQX0JJVAkweDA4MDAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfUENMX0JJVAkweDAwODAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfSFJfQklUCTB4MDA0MDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9IQ19CSVQJMHgwMDIwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgUkNQX0dSX0JJVAkweDAwMDQwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfR0NfQklUCTB4MDAwMjAwMDAwMDAwMDAwMFVMCi0KLS8qIFVzZXIgZGlydHkgLyByZWZlcmVuY2VkIGJpdCBmb3IgS1ZNJ3MgbWlncmF0aW9uIGZlYXR1cmUgKi8KLSNkZWZpbmUgS1ZNX1VSX0JJVAkweDAwMDA4MDAwMDAwMDAwMDBVTAotI2RlZmluZSBLVk1fVUNfQklUCTB4MDAwMDQwMDAwMDAwMDAwMFVMCi0KICNpZm5kZWYgX19zMzkweF9fCiAKIC8qIEJpdHMgaW4gdGhlIHNlZ21lbnQgdGFibGUgYWRkcmVzcy1zcGFjZS1jb250cm9sLWVsZW1lbnQgKi8KQEAgLTMyNSw2ICszMTIsMTkgQEAKICNkZWZpbmUgX1NFR01FTlRfRU5UUlkJCShfU0VHTUVOVF9FTlRSWV9QVEwpCiAjZGVmaW5lIF9TRUdNRU5UX0VOVFJZX0VNUFRZCShfU0VHTUVOVF9FTlRSWV9JTlYpCiAKKy8qIFBhZ2Ugc3RhdHVzIHRhYmxlIGJpdHMgZm9yIHZpcnR1YWxpemF0aW9uICovCisjZGVmaW5lIFJDUF9BQ0NfQklUUwkweGYwMDAwMDAwVUwKKyNkZWZpbmUgUkNQX0ZQX0JJVAkweDA4MDAwMDAwVUwKKyNkZWZpbmUgUkNQX1BDTF9CSVQJMHgwMDgwMDAwMFVMCisjZGVmaW5lIFJDUF9IUl9CSVQJMHgwMDQwMDAwMFVMCisjZGVmaW5lIFJDUF9IQ19CSVQJMHgwMDIwMDAwMFVMCisjZGVmaW5lIFJDUF9HUl9CSVQJMHgwMDA0MDAwMFVMCisjZGVmaW5lIFJDUF9HQ19CSVQJMHgwMDAyMDAwMFVMCisKKy8qIFVzZXIgZGlydHkgLyByZWZlcmVuY2VkIGJpdCBmb3IgS1ZNJ3MgbWlncmF0aW9uIGZlYXR1cmUgKi8KKyNkZWZpbmUgS1ZNX1VSX0JJVAkweDAwMDA4MDAwVUwKKyNkZWZpbmUgS1ZNX1VDX0JJVAkweDAwMDA0MDAwVUwKKwogI2Vsc2UgLyogX19zMzkweF9fICovCiAKIC8qIEJpdHMgaW4gdGhlIHNlZ21lbnQvcmVnaW9uIHRhYmxlIGFkZHJlc3Mtc3BhY2UtY29udHJvbC1lbGVtZW50ICovCkBAIC0zNjcsNiArMzY3LDE5IEBACiAjZGVmaW5lIF9TRUdNRU5UX0VOVFJZX0xBUkdFCTB4NDAwCS8qIFNURS1mb3JtYXQgY29udHJvbCwgbGFyZ2UgcGFnZSAgICovCiAjZGVmaW5lIF9TRUdNRU5UX0VOVFJZX0NPCTB4MTAwCS8qIGNoYW5nZS1yZWNvcmRpbmcgb3ZlcnJpZGUgICAqLwogCisvKiBQYWdlIHN0YXR1cyB0YWJsZSBiaXRzIGZvciB2aXJ0dWFsaXphdGlvbiAqLworI2RlZmluZSBSQ1BfQUNDX0JJVFMJMHhmMDAwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUkNQX0ZQX0JJVAkweDA4MDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfUENMX0JJVAkweDAwODAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfSFJfQklUCTB4MDA0MDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9IQ19CSVQJMHgwMDIwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUkNQX0dSX0JJVAkweDAwMDQwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfR0NfQklUCTB4MDAwMjAwMDAwMDAwMDAwMFVMCisKKy8qIFVzZXIgZGlydHkgLyByZWZlcmVuY2VkIGJpdCBmb3IgS1ZNJ3MgbWlncmF0aW9uIGZlYXR1cmUgKi8KKyNkZWZpbmUgS1ZNX1VSX0JJVAkweDAwMDA4MDAwMDAwMDAwMDBVTAorI2RlZmluZSBLVk1fVUNfQklUCTB4MDAwMDQwMDAwMDAwMDAwMFVMCisKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCmluZGV4IDM1MGU3ZWUuLjE1Yzk3NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaApAQCAtMTM5LDExMCArMTM5LDQ3IEBACiAJc3RydWN0IHNsaWJlIHNsaWJlW1FESU9fTUFYX0JVRkZFUlNfUEVSX1FdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLCBhbGlnbmVkKDIwNDgpKSk7CiAKLS8qKgotICogc3RydWN0IHNiYWxfZmxhZ3MgLSBzdG9yYWdlIGJsb2NrIGFkZHJlc3MgbGlzdCBmbGFncwotICogQGxhc3Q6IGxhc3QgZW50cnkKLSAqIEBjb250OiBjb250aWd1b3VzIHN0b3JhZ2UKLSAqIEBmcmFnOiBmcmFnbWVudGF0aW9uCi0gKi8KLXN0cnVjdCBzYmFsX2ZsYWdzIHsKLQl1OAk6IDE7Ci0JdTggbGFzdCA6IDE7Ci0JdTggY29udCA6IDE7Ci0JdTgJOiAxOwotCXU4IGZyYWcgOiAyOwotCXU4CTogMjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2RlZmluZSBTQkFMX0VGTEFHU19MQVNUX0VOVFJZCQkweDQwCisjZGVmaW5lIFNCQUxfRUZMQUdTX0NPTlRJR1VPVVMJCTB4MjAKKyNkZWZpbmUgU0JBTF9FRkxBR1NfRklSU1RfRlJBRwkJMHgwNAorI2RlZmluZSBTQkFMX0VGTEFHU19NSURETEVfRlJBRwkJMHgwOAorI2RlZmluZSBTQkFMX0VGTEFHU19MQVNUX0ZSQUcJCTB4MGMKKyNkZWZpbmUgU0JBTF9FRkxBR1NfTUFTSwkJMHg2ZgogCi0jZGVmaW5lIFNCQUxfRkxBR1NfRklSU1RfRlJBRwkJMHgwNDAwMDAwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1NfTUlERExFX0ZSQUcJCTB4MDgwMDAwMDBVTAotI2RlZmluZSBTQkFMX0ZMQUdTX0xBU1RfRlJBRwkJMHgwYzAwMDAwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1NfTEFTVF9FTlRSWQkJMHg0MDAwMDAwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1NfQ09OVElHVU9VUwkJMHgyMDAwMDAwMFVMCi0KLSNkZWZpbmUgU0JBTF9GTEFHUzBfREFUQV9DT05USU5VQVRJT04JMHgyMFVMCisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9QQ0lfUkVRCQkweDQwCisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9EQVRBX0NPTlRJTlVBVElPTgkweDIwCiAKIC8qIEF3ZXNvbWUgT3BlbkZDUCBleHRlbnNpb25zICovCi0jZGVmaW5lIFNCQUxfRkxBR1MwX1RZUEVfU1RBVFVTCQkweDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9XUklURQkJMHgwOFVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX1RZUEVfUkVBRAkJMHgxMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRAkweDE4VUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfTU9SRV9TQkFMUwkJMHgwNFVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX0NPTU1BTkQJCTB4MDJVTAotI2RlZmluZSBTQkFMX0ZMQUdTMF9MQVNUX1NCQUwJCTB4MDBVTAotI2RlZmluZSBTQkFMX0ZMQUdTMF9PTkxZX1NCQUwJCVNCQUxfRkxBR1MwX0NPTU1BTkQKLSNkZWZpbmUgU0JBTF9GTEFHUzBfTUlERExFX1NCQUwJCVNCQUxfRkxBR1MwX01PUkVfU0JBTFMKLSNkZWZpbmUgU0JBTF9GTEFHUzBfRklSU1RfU0JBTCBTQkFMX0ZMQUdTMF9NT1JFX1NCQUxTIHwgU0JBTF9GTEFHUzBfQ09NTUFORAotI2RlZmluZSBTQkFMX0ZMQUdTMF9QQ0kJCQkweDQwCi0KLS8qKgotICogc3RydWN0IHNiYWxfc2JhbGZfMCAtIHNiYWwgZmxhZ3MgZm9yIHNiYWxlIDAKLSAqIEBwY2k6IFBDSSBpbmRpY2F0b3IKLSAqIEBjb250OiBkYXRhIGNvbnRpbnVhdGlvbgotICogQHNidHlwZTogc3RvcmFnZS1ibG9jayB0eXBlIChGQ1ApCi0gKi8KLXN0cnVjdCBzYmFsX3NiYWxmXzAgewotCXU4CSAgOiAxOwotCXU4IHBjaQkgIDogMTsKLQl1OCBjb250ICAgOiAxOwotCXU4IHNidHlwZSA6IDI7Ci0JdTgJICA6IDM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9zYmFsZl8xIC0gc2JhbCBmbGFncyBmb3Igc2JhbGUgMQotICogQGtleTogc3RvcmFnZSBrZXkKLSAqLwotc3RydWN0IHNiYWxfc2JhbGZfMSB7Ci0JdTggICAgIDogNDsKLQl1OCBrZXkgOiA0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IHNiYWxfc2JhbGZfMTQgLSBzYmFsIGZsYWdzIGZvciBzYmFsZSAxNAotICogQGVycmlkeDogZXJyb3IgaW5kZXgKLSAqLwotc3RydWN0IHNiYWxfc2JhbGZfMTQgewotCXU4CSAgOiA0OwotCXU4IGVycmlkeCA6IDQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9zYmFsZl8xNSAtIHNiYWwgZmxhZ3MgZm9yIHNiYWxlIDE1Ci0gKiBAcmVhc29uOiByZWFzb24gZm9yIGVycm9yIHN0YXRlCi0gKi8KLXN0cnVjdCBzYmFsX3NiYWxmXzE1IHsKLQl1OCByZWFzb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiB1bmlvbiBzYmFsX3NiYWxmIC0gc3RvcmFnZSBibG9jayBhZGRyZXNzIGxpc3QgZmxhZ3MKLSAqIEBpMDogc2JhbGYwCi0gKiBAaTE6IHNiYWxmMQotICogQGkxNDogc2JhbGYxNAotICogQGkxNTogc2JsYWYxNQotICogQHZhbHVlOiByYXcgdmFsdWUKLSAqLwotdW5pb24gc2JhbF9zYmFsZiB7Ci0Jc3RydWN0IHNiYWxfc2JhbGZfMCAgaTA7Ci0Jc3RydWN0IHNiYWxfc2JhbGZfMSAgaTE7Ci0Jc3RydWN0IHNiYWxfc2JhbGZfMTQgaTE0OwotCXN0cnVjdCBzYmFsX3NiYWxmXzE1IGkxNTsKLQl1OCB2YWx1ZTsKLX07CisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9UWVBFX1NUQVRVUwkweDAwCisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9UWVBFX1dSSVRFCQkweDA4CisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQJCTB4MTAKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEVfUkVBRAkweDE4CisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9NT1JFX1NCQUxTCQkweDA0CisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9DT01NQU5ECQkweDAyCisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9MQVNUX1NCQUwJCTB4MDAKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX09OTFlfU0JBTAkJU0JBTF9TRkxBR1MwX0NPTU1BTkQKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX01JRERMRV9TQkFMCVNCQUxfU0ZMQUdTMF9NT1JFX1NCQUxTCisjZGVmaW5lIFNCQUxfU0ZMQUdTMF9GSVJTVF9TQkFMIChTQkFMX1NGTEFHUzBfTU9SRV9TQkFMUyB8IFNCQUxfU0ZMQUdTMF9DT01NQU5EKQogCiAvKioKICAqIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50IC0gU0JBTCBlbnRyeQotICogQGZsYWdzOiBmbGFncworICogQGVmbGFnczogU0JBTCBlbnRyeSBmbGFncworICogQHNjb3VudDogU0JBTCBjb3VudAorICogQHNmbGFnczogd2hvbGUgU0JBTCBmbGFncwogICogQGxlbmd0aDogbGVuZ3RoCiAgKiBAYWRkcjogYWRkcmVzcwogKi8KIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50IHsKLQl1MzIgZmxhZ3M7CisJdTggZWZsYWdzOworCS8qIHByaXZhdGU6ICovCisJdTggcmVzMTsKKwkvKiBwdWJsaWM6ICovCisJdTggc2NvdW50OworCXU4IHNmbGFnczsKIAl1MzIgbGVuZ3RoOwogI2lmZGVmIENPTkZJR18zMkJJVAogCS8qIHByaXZhdGU6ICovCi0Jdm9pZCAqcmVzZXJ2ZWQ7CisJdm9pZCAqcmVzMjsKIAkvKiBwdWJsaWM6ICovCiAjZW5kaWYKIAl2b2lkICphZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDc3ZWVlNTQuLmM2ODdhMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTI2LDY3ICsyNiw2MCBAQAogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIHN0cnVjdCBtbXVfZ2F0aGVyIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorCXN0cnVjdCBtbXVfdGFibGVfYmF0Y2ggKmJhdGNoOworI2VuZGlmCiAJdW5zaWduZWQgaW50IGZ1bGxtbTsKLQl1bnNpZ25lZCBpbnQgbnJfcHRlczsKLQl1bnNpZ25lZCBpbnQgbnJfcHhkczsKLQl1bnNpZ25lZCBpbnQgbWF4OwotCXZvaWQgKiphcnJheTsKLQl2b2lkICpsb2NhbFs4XTsKKwl1bnNpZ25lZCBpbnQgbmVlZF9mbHVzaDsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3RsYl9hbGxvY19wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfTk9XQUlUIHwgX19HRlBfTk9XQVJOLCAwKTsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorc3RydWN0IG1tdV90YWJsZV9iYXRjaCB7CisJc3RydWN0IHJjdV9oZWFkCQlyY3U7CisJdW5zaWduZWQgaW50CQlucjsKKwl2b2lkCQkJKnRhYmxlc1swXTsKK307CiAKLQlpZiAoYWRkcikgewotCQl0bGItPmFycmF5ID0gKHZvaWQgKikgYWRkcjsKLQkJdGxiLT5tYXggPSBQQUdFX1NJWkUgLyBzaXplb2Yodm9pZCAqKTsKLQl9Ci19CisjZGVmaW5lIE1BWF9UQUJMRV9CQVRDSAkJXAorCSgoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBtbXVfdGFibGVfYmF0Y2gpKSAvIHNpemVvZih2b2lkICopKQorCitleHRlcm4gdm9pZCB0bGJfdGFibGVfZmx1c2goc3RydWN0IG1tdV9nYXRoZXIgKnRsYik7CitleHRlcm4gdm9pZCB0bGJfcmVtb3ZlX3RhYmxlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHZvaWQgKnRhYmxlKTsKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAkJCQkgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCSAgdW5zaWduZWQgaW50IGZ1bGxfbW1fZmx1c2gpCiB7CiAJdGxiLT5tbSA9IG1tOwotCXRsYi0+bWF4ID0gQVJSQVlfU0laRSh0bGItPmxvY2FsKTsKLQl0bGItPmFycmF5ID0gdGxiLT5sb2NhbDsKIAl0bGItPmZ1bGxtbSA9IGZ1bGxfbW1fZmx1c2g7CisJdGxiLT5uZWVkX2ZsdXNoID0gMDsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorCXRsYi0+YmF0Y2ggPSBOVUxMOworI2VuZGlmCiAJaWYgKHRsYi0+ZnVsbG1tKQogCQlfX3RsYl9mbHVzaF9tbShtbSk7Ci0JZWxzZQotCQlfX3RsYl9hbGxvY19wYWdlKHRsYik7Ci0JdGxiLT5ucl9wdGVzID0gMDsKLQl0bGItPm5yX3B4ZHMgPSB0bGItPm1heDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKIHsKLQlpZiAoIXRsYi0+ZnVsbG1tICYmICh0bGItPm5yX3B0ZXMgPiAwIHx8IHRsYi0+bnJfcHhkcyA8IHRsYi0+bWF4KSkKLQkJX190bGJfZmx1c2hfbW0odGxiLT5tbSk7Ci0Jd2hpbGUgKHRsYi0+bnJfcHRlcyA+IDApCi0JCXBhZ2VfdGFibGVfZnJlZV9yY3UodGxiLT5tbSwgdGxiLT5hcnJheVstLXRsYi0+bnJfcHRlc10pOwotCXdoaWxlICh0bGItPm5yX3B4ZHMgPCB0bGItPm1heCkKLQkJY3JzdF90YWJsZV9mcmVlX3JjdSh0bGItPm1tLCB0bGItPmFycmF5W3RsYi0+bnJfcHhkcysrXSk7CisJaWYgKCF0bGItPm5lZWRfZmx1c2gpCisJCXJldHVybjsKKwl0bGItPm5lZWRfZmx1c2ggPSAwOworCV9fdGxiX2ZsdXNoX21tKHRsYi0+bW0pOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCisJdGxiX3RhYmxlX2ZsdXNoKHRsYik7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHRsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsCiAJCQkJICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl0bGJfZmx1c2hfbW11KHRsYik7Ci0KLQlyY3VfdGFibGVfZnJlZWxpc3RfZmluaXNoKCk7Ci0KLQkvKiBrZWVwIHRoZSBwYWdlIHRhYmxlIGNhY2hlIHdpdGhpbiBib3VuZHMgKi8KLQljaGVja19wZ3RfY2FjaGUoKTsKLQotCWlmICh0bGItPmFycmF5ICE9IHRsYi0+bG9jYWwpCi0JCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHRsYi0+YXJyYXksIDApOwogfQogCiAvKgpAQCAtMTEyLDEyICsxMDUsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgcGd0YWJsZV90IHB0ZSwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQl0bGItPmFycmF5W3RsYi0+bnJfcHRlcysrXSA9IHB0ZTsKLQkJaWYgKHRsYi0+bnJfcHRlcyA+PSB0bGItPm5yX3B4ZHMpCi0JCQl0bGJfZmx1c2hfbW11KHRsYik7Ci0JfSBlbHNlCi0JCXBhZ2VfdGFibGVfZnJlZSh0bGItPm1tLCAodW5zaWduZWQgbG9uZyAqKSBwdGUpOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCisJaWYgKCF0bGItPmZ1bGxtbSkKKwkJcmV0dXJuIHBhZ2VfdGFibGVfZnJlZV9yY3UodGxiLCAodW5zaWduZWQgbG9uZyAqKSBwdGUpOworI2VuZGlmCisJcGFnZV90YWJsZV9mcmVlKHRsYi0+bW0sICh1bnNpZ25lZCBsb25nICopIHB0ZSk7CiB9CiAKIC8qCkBAIC0xMzMsMTIgKzEyNSwxMSBAQAogI2lmZGVmIF9fczM5MHhfXwogCWlmICh0bGItPm1tLT5jb250ZXh0LmFzY2VfbGltaXQgPD0gKDFVTCA8PCAzMSkpCiAJCXJldHVybjsKLQlpZiAoIXRsYi0+ZnVsbG1tKSB7Ci0JCXRsYi0+YXJyYXlbLS10bGItPm5yX3B4ZHNdID0gcG1kOwotCQlpZiAodGxiLT5ucl9wdGVzID49IHRsYi0+bnJfcHhkcykKLQkJCXRsYl9mbHVzaF9tbXUodGxiKTsKLQl9IGVsc2UKLQkJY3JzdF90YWJsZV9mcmVlKHRsYi0+bW0sICh1bnNpZ25lZCBsb25nICopIHBtZCk7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQlyZXR1cm4gdGxiX3JlbW92ZV90YWJsZSh0bGIsIHBtZCk7CisjZW5kaWYKKwljcnN0X3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcG1kKTsKICNlbmRpZgogfQogCkBAIC0xNTUsMTIgKzE0NiwxMSBAQAogI2lmZGVmIF9fczM5MHhfXwogCWlmICh0bGItPm1tLT5jb250ZXh0LmFzY2VfbGltaXQgPD0gKDFVTCA8PCA0MikpCiAJCXJldHVybjsKLQlpZiAoIXRsYi0+ZnVsbG1tKSB7Ci0JCXRsYi0+YXJyYXlbLS10bGItPm5yX3B4ZHNdID0gcHVkOwotCQlpZiAodGxiLT5ucl9wdGVzID49IHRsYi0+bnJfcHhkcykKLQkJCXRsYl9mbHVzaF9tbXUodGxiKTsKLQl9IGVsc2UKLQkJY3JzdF90YWJsZV9mcmVlKHRsYi0+bW0sICh1bnNpZ25lZCBsb25nICopIHB1ZCk7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQlyZXR1cm4gdGxiX3JlbW92ZV90YWJsZSh0bGIsIHB1ZCk7CisjZW5kaWYKKwljcnN0X3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcHVkKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggMzBjYTg1Yy4uNjczNDVhZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtNzMxLDYgKzczMSw3IEBACiAJfQogCW1lbWNweShmYWNpbGl0aWVzLCBTMzkwX2xvd2NvcmUuc3RmbGVfZmFjX2xpc3QsIDE2KTsKIAlmYWNpbGl0aWVzWzBdICY9IDB4ZmYwMGZmZjNmNDdjMDAwMFVMTDsKKwlmYWNpbGl0aWVzWzFdICY9IDB4MjAxYzAwMDAwMDAwMDAwMFVMTDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUyBiL2FyY2gvczM5MC9rdm0vc2llNjRhLlMKaW5kZXggYWIwZTA0MS4uNWZhYTFiMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUworKysgYi9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TCkBAIC05Myw0ICs5Myw2IEBACiAKIAkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgogCS5xdWFkCXNpZV9pbnN0LHNpZV9lcnIKKwkucXVhZAlzaWVfZXhpdCxzaWVfZXJyCisJLnF1YWQJc2llX3JlZW50ZXIsc2llX2VycgogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggYjA5NzYzZi4uMzdhMjNjMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtMjQsOTQgKzI0LDEyIEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKLXN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgewotCXN0cnVjdCByY3VfaGVhZCByY3U7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0JdW5zaWduZWQgaW50IHBndF9pbmRleDsKLQl1bnNpZ25lZCBpbnQgY3JzdF9pbmRleDsKLQl1bnNpZ25lZCBsb25nICp0YWJsZVswXTsKLX07Ci0KLSNkZWZpbmUgUkNVX0ZSRUVMSVNUX1NJWkUgXAotCSgoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QpKSBcCi0JICAvIHNpemVvZih1bnNpZ25lZCBsb25nKSkKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKiwgcmN1X3RhYmxlX2ZyZWVsaXN0KTsKLQotc3RhdGljIHZvaWQgX19wYWdlX3RhYmxlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKnRhYmxlKTsKLQotc3RhdGljIHN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKnJjdV90YWJsZV9mcmVlbGlzdF9nZXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqKmJhdGNocCA9ICZfX2dldF9jcHVfdmFyKHJjdV90YWJsZV9mcmVlbGlzdCk7Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqYmF0Y2ggPSAqYmF0Y2hwOwotCi0JaWYgKGJhdGNoKQotCQlyZXR1cm4gYmF0Y2g7Ci0JYmF0Y2ggPSAoc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JaWYgKGJhdGNoKSB7Ci0JCWJhdGNoLT5tbSA9IG1tOwotCQliYXRjaC0+cGd0X2luZGV4ID0gMDsKLQkJYmF0Y2gtPmNyc3RfaW5kZXggPSBSQ1VfRlJFRUxJU1RfU0laRTsKLQkJKmJhdGNocCA9IGJhdGNoOwotCX0KLQlyZXR1cm4gYmF0Y2g7Ci19Ci0KLXN0YXRpYyB2b2lkIHJjdV90YWJsZV9mcmVlbGlzdF9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqYmF0Y2ggPQotCQljb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCwgcmN1KTsKLQotCXdoaWxlIChiYXRjaC0+cGd0X2luZGV4ID4gMCkKLQkJX19wYWdlX3RhYmxlX2ZyZWUoYmF0Y2gtPm1tLCBiYXRjaC0+dGFibGVbLS1iYXRjaC0+cGd0X2luZGV4XSk7Ci0Jd2hpbGUgKGJhdGNoLT5jcnN0X2luZGV4IDwgUkNVX0ZSRUVMSVNUX1NJWkUpCi0JCWNyc3RfdGFibGVfZnJlZShiYXRjaC0+bW0sIGJhdGNoLT50YWJsZVtiYXRjaC0+Y3JzdF9pbmRleCsrXSk7Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBiYXRjaCk7Ci19Ci0KLXZvaWQgcmN1X3RhYmxlX2ZyZWVsaXN0X2ZpbmlzaCh2b2lkKQotewotCXN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKipiYXRjaHAgPSAmZ2V0X2NwdV92YXIocmN1X3RhYmxlX2ZyZWVsaXN0KTsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaCA9ICpiYXRjaHA7Ci0KLQlpZiAoIWJhdGNoKQotCQlnb3RvIG91dDsKLQljYWxsX3JjdSgmYmF0Y2gtPnJjdSwgcmN1X3RhYmxlX2ZyZWVsaXN0X2NhbGxiYWNrKTsKLQkqYmF0Y2hwID0gTlVMTDsKLW91dDoKLQlwdXRfY3B1X3ZhcihyY3VfdGFibGVfZnJlZWxpc3QpOwotfQotCi1zdGF0aWMgdm9pZCBzbXBfc3luYyh2b2lkICphcmcpCi17Ci19Ci0KICNpZm5kZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIEFMTE9DX09SREVSCTEKLSNkZWZpbmUgVEFCTEVTX1BFUl9QQUdFCTQKLSNkZWZpbmUgRlJBR19NQVNLCTE1VUwKLSNkZWZpbmUgU0VDT05EX0hBTFZFUwkxMFVMCi0KLXZvaWQgY2xlYXJfdGFibGVfcGdzdGVzKHVuc2lnbmVkIGxvbmcgKnRhYmxlKQotewotCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUvNCk7Ci0JbWVtc2V0KHRhYmxlICsgMjU2LCAwLCBQQUdFX1NJWkUvNCk7Ci0JY2xlYXJfdGFibGUodGFibGUgKyA1MTIsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS80KTsKLQltZW1zZXQodGFibGUgKyA3NjgsIDAsIFBBR0VfU0laRS80KTsKLX0KLQorI2RlZmluZSBGUkFHX01BU0sJMHgwZgogI2Vsc2UKICNkZWZpbmUgQUxMT0NfT1JERVIJMgotI2RlZmluZSBUQUJMRVNfUEVSX1BBR0UJMgotI2RlZmluZSBGUkFHX01BU0sJM1VMCi0jZGVmaW5lIFNFQ09ORF9IQUxWRVMJMlVMCi0KLXZvaWQgY2xlYXJfdGFibGVfcGdzdGVzKHVuc2lnbmVkIGxvbmcgKnRhYmxlKQotewotCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUvMik7Ci0JbWVtc2V0KHRhYmxlICsgMjU2LCAwLCBQQUdFX1NJWkUvMik7Ci19Ci0KKyNkZWZpbmUgRlJBR19NQVNLCTB4MDMKICNlbmRpZgogCiB1bnNpZ25lZCBsb25nIFZNQUxMT0NfU1RBUlQgPSBWTUFMTE9DX0VORCAtIFZNQUxMT0NfU0laRTsKQEAgLTE0MCwyOSArNTgsNiBAQAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHRhYmxlLCBBTExPQ19PUkRFUik7CiB9CiAKLXZvaWQgY3JzdF90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqYmF0Y2g7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlpZiAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPCAyICYmCi0JICAgIGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpIHsKLQkJY3JzdF90YWJsZV9mcmVlKG1tLCB0YWJsZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQliYXRjaCA9IHJjdV90YWJsZV9mcmVlbGlzdF9nZXQobW0pOwotCWlmICghYmF0Y2gpIHsKLQkJc21wX2NhbGxfZnVuY3Rpb24oc21wX3N5bmMsIE5VTEwsIDEpOwotCQljcnN0X3RhYmxlX2ZyZWUobW0sIHRhYmxlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWJhdGNoLT50YWJsZVstLWJhdGNoLT5jcnN0X2luZGV4XSA9IHRhYmxlOwotCWlmIChiYXRjaC0+cGd0X2luZGV4ID49IGJhdGNoLT5jcnN0X2luZGV4KQotCQlyY3VfdGFibGVfZnJlZWxpc3RfZmluaXNoKCk7Ci1vdXQ6Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLQogI2lmZGVmIENPTkZJR182NEJJVAogaW50IGNyc3RfdGFibGVfdXBncmFkZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBsaW1pdCkKIHsKQEAgLTIzOCwxMjQgKzEzMywxNzUgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdG9taWNfeG9yX2JpdHMoYXRvbWljX3QgKnYsIHVuc2lnbmVkIGludCBiaXRzKQoreworCXVuc2lnbmVkIGludCBvbGQsIG5ldzsKKworCWRvIHsKKwkJb2xkID0gYXRvbWljX3JlYWQodik7CisJCW5ldyA9IG9sZCBeIGJpdHM7CisJfSB3aGlsZSAoYXRvbWljX2NtcHhjaGcodiwgb2xkLCBuZXcpICE9IG9sZCk7CisJcmV0dXJuIG5ldzsKK30KKwogLyoKICAqIHBhZ2UgdGFibGUgZW50cnkgYWxsb2NhdGlvbi9mcmVlIHJvdXRpbmVzLgogICovCisjaWZkZWYgQ09ORklHX1BHU1RFCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKnBhZ2VfdGFibGVfYWxsb2NfcGdzdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyAqdGFibGU7CisKKwlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVCk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gTlVMTDsKKwlwZ3RhYmxlX3BhZ2VfY3RvcihwYWdlKTsKKwlhdG9taWNfc2V0KCZwYWdlLT5fbWFwY291bnQsIDMpOworCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgcGFnZV90b19waHlzKHBhZ2UpOworCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUvMik7CisJY2xlYXJfdGFibGUodGFibGUgKyBQVFJTX1BFUl9QVEUsIDAsIFBBR0VfU0laRS8yKTsKKwlyZXR1cm4gdGFibGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3RhYmxlX2ZyZWVfcGdzdGUodW5zaWduZWQgbG9uZyAqdGFibGUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gcGZuX3RvX3BhZ2UoX19wYSh0YWJsZSkgPj4gUEFHRV9TSElGVCk7CisJcGd0YWJsZV9wYWdlX2N0b3IocGFnZSk7CisJYXRvbWljX3NldCgmcGFnZS0+X21hcGNvdW50LCAtMSk7CisJX19mcmVlX3BhZ2UocGFnZSk7Cit9CisjZW5kaWYKKwogdW5zaWduZWQgbG9uZyAqcGFnZV90YWJsZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl1bnNpZ25lZCBsb25nICp0YWJsZTsKLQl1bnNpZ25lZCBsb25nIGJpdHM7CisJdW5zaWduZWQgaW50IG1hc2ssIGJpdDsKIAotCWJpdHMgPSAobW0tPmNvbnRleHQuaGFzX3Bnc3RlKSA/IDNVTCA6IDFVTDsKKyNpZmRlZiBDT05GSUdfUEdTVEUKKwlpZiAobW1faGFzX3Bnc3RlKG1tKSkKKwkJcmV0dXJuIHBhZ2VfdGFibGVfYWxsb2NfcGdzdGUobW0pOworI2VuZGlmCisJLyogQWxsb2NhdGUgZnJhZ21lbnRzIG9mIGEgNEsgcGFnZSBhcyAxSy8ySyBwYWdlIHRhYmxlICovCiAJc3Bpbl9sb2NrX2JoKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwotCXBhZ2UgPSBOVUxMOworCW1hc2sgPSBGUkFHX01BU0s7CiAJaWYgKCFsaXN0X2VtcHR5KCZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpKSB7CiAJCXBhZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QsCiAJCQkJCXN0cnVjdCBwYWdlLCBscnUpOwotCQlpZiAoKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSA9PSAoKDFVTCA8PCBUQUJMRVNfUEVSX1BBR0UpIC0gMSkpCi0JCQlwYWdlID0gTlVMTDsKKwkJdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSBwYWdlX3RvX3BoeXMocGFnZSk7CisJCW1hc2sgPSBhdG9taWNfcmVhZCgmcGFnZS0+X21hcGNvdW50KTsKKwkJbWFzayA9IG1hc2sgfCAobWFzayA+PiA0KTsKIAl9Ci0JaWYgKCFwYWdlKSB7CisJaWYgKChtYXNrICYgRlJBR19NQVNLKSA9PSBGUkFHX01BU0spIHsKIAkJc3Bpbl91bmxvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKIAkJaWYgKCFwYWdlKQogCQkJcmV0dXJuIE5VTEw7CiAJCXBndGFibGVfcGFnZV9jdG9yKHBhZ2UpOwotCQlwYWdlLT5mbGFncyAmPSB+RlJBR19NQVNLOworCQlhdG9taWNfc2V0KCZwYWdlLT5fbWFwY291bnQsIDEpOwogCQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2VfdG9fcGh5cyhwYWdlKTsKLQkJaWYgKG1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkKLQkJCWNsZWFyX3RhYmxlX3Bnc3Rlcyh0YWJsZSk7Ci0JCWVsc2UKLQkJCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUpOworCQljbGVhcl90YWJsZSh0YWJsZSwgX1BBR0VfVFlQRV9FTVBUWSwgUEFHRV9TSVpFKTsKIAkJc3Bpbl9sb2NrX2JoKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKKwl9IGVsc2UgeworCQlmb3IgKGJpdCA9IDE7IG1hc2sgJiBiaXQ7IGJpdCA8PD0gMSkKKwkJCXRhYmxlICs9IFBUUlNfUEVSX1BURTsKKwkJbWFzayA9IGF0b21pY194b3JfYml0cygmcGFnZS0+X21hcGNvdW50LCBiaXQpOworCQlpZiAoKG1hc2sgJiBGUkFHX01BU0spID09IEZSQUdfTUFTSykKKwkJCWxpc3RfZGVsKCZwYWdlLT5scnUpOwogCX0KLQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2VfdG9fcGh5cyhwYWdlKTsKLQl3aGlsZSAocGFnZS0+ZmxhZ3MgJiBiaXRzKSB7Ci0JCXRhYmxlICs9IDI1NjsKLQkJYml0cyA8PD0gMTsKLQl9Ci0JcGFnZS0+ZmxhZ3MgfD0gYml0czsKLQlpZiAoKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSA9PSAoKDFVTCA8PCBUQUJMRVNfUEVSX1BBR0UpIC0gMSkpCi0JCWxpc3RfbW92ZV90YWlsKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwogCXJldHVybiB0YWJsZTsKIH0KIAotc3RhdGljIHZvaWQgX19wYWdlX3RhYmxlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKnRhYmxlKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgYml0czsKLQotCWJpdHMgPSAoKHVuc2lnbmVkIGxvbmcpIHRhYmxlKSAmIDE1OwotCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikoKCh1bnNpZ25lZCBsb25nKSB0YWJsZSkgXiBiaXRzKTsKLQlwYWdlID0gcGZuX3RvX3BhZ2UoX19wYSh0YWJsZSkgPj4gUEFHRV9TSElGVCk7Ci0JcGFnZS0+ZmxhZ3MgXj0gYml0czsKLQlpZiAoIShwYWdlLT5mbGFncyAmIEZSQUdfTUFTSykpIHsKLQkJcGd0YWJsZV9wYWdlX2R0b3IocGFnZSk7Ci0JCV9fZnJlZV9wYWdlKHBhZ2UpOwotCX0KLX0KLQogdm9pZCBwYWdlX3RhYmxlX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKnRhYmxlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgYml0czsKKwl1bnNpZ25lZCBpbnQgYml0LCBtYXNrOwogCi0JYml0cyA9IChtbS0+Y29udGV4dC5oYXNfcGdzdGUpID8gM1VMIDogMVVMOwotCWJpdHMgPDw9IChfX3BhKHRhYmxlKSAmIChQQUdFX1NJWkUgLSAxKSkgLyAyNTYgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7CisjaWZkZWYgQ09ORklHX1BHU1RFCisJaWYgKG1tX2hhc19wZ3N0ZShtbSkpCisJCXJldHVybiBwYWdlX3RhYmxlX2ZyZWVfcGdzdGUodGFibGUpOworI2VuZGlmCisJLyogRnJlZSAxSy8ySyBwYWdlIHRhYmxlIGZyYWdtZW50IG9mIGEgNEsgcGFnZSAqLwogCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKKwliaXQgPSAxIDw8ICgoX19wYSh0YWJsZSkgJiB+UEFHRV9NQVNLKS8oUFRSU19QRVJfUFRFKnNpemVvZihwdGVfdCkpKTsKIAlzcGluX2xvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JcGFnZS0+ZmxhZ3MgXj0gYml0czsKLQlpZiAocGFnZS0+ZmxhZ3MgJiBGUkFHX01BU0spIHsKLQkJLyogUGFnZSBub3cgaGFzIHNvbWUgZnJlZSBwZ3RhYmxlIGZyYWdtZW50cy4gKi8KLQkJaWYgKCFsaXN0X2VtcHR5KCZwYWdlLT5scnUpKQotCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwotCQlwYWdlID0gTlVMTDsKLQl9IGVsc2UKLQkJLyogQWxsIGZyYWdtZW50cyBvZiB0aGUgNEsgcGFnZSBoYXZlIGJlZW4gZnJlZWQuICovCisJaWYgKChhdG9taWNfcmVhZCgmcGFnZS0+X21hcGNvdW50KSAmIEZSQUdfTUFTSykgIT0gRlJBR19NQVNLKQogCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKKwltYXNrID0gYXRvbWljX3hvcl9iaXRzKCZwYWdlLT5fbWFwY291bnQsIGJpdCk7CisJaWYgKG1hc2sgJiBGUkFHX01BU0spCisJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZtbS0+Y29udGV4dC5saXN0X2xvY2spOwotCWlmIChwYWdlKSB7CisJaWYgKG1hc2sgPT0gMCkgewogCQlwZ3RhYmxlX3BhZ2VfZHRvcihwYWdlKTsKKwkJYXRvbWljX3NldCgmcGFnZS0+X21hcGNvdW50LCAtMSk7CiAJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCX0KIH0KIAotdm9pZCBwYWdlX3RhYmxlX2ZyZWVfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nICp0YWJsZSkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQl1bnNpZ25lZCBsb25nIGJpdHM7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKIAotCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA8IDIgJiYKLQkgICAgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkgewotCQlwYWdlX3RhYmxlX2ZyZWUobW0sIHRhYmxlKTsKLQkJZ290byBvdXQ7CitzdGF0aWMgdm9pZCBfX3BhZ2VfdGFibGVfZnJlZV9yY3Uodm9pZCAqdGFibGUsIHVuc2lnbmVkIGJpdCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworI2lmZGVmIENPTkZJR19QR1NURQorCWlmIChiaXQgPT0gRlJBR19NQVNLKQorCQlyZXR1cm4gcGFnZV90YWJsZV9mcmVlX3Bnc3RlKHRhYmxlKTsKKyNlbmRpZgorCS8qIEZyZWUgMUsvMksgcGFnZSB0YWJsZSBmcmFnbWVudCBvZiBhIDRLIHBhZ2UgKi8KKwlwYWdlID0gcGZuX3RvX3BhZ2UoX19wYSh0YWJsZSkgPj4gUEFHRV9TSElGVCk7CisJaWYgKGF0b21pY194b3JfYml0cygmcGFnZS0+X21hcGNvdW50LCBiaXQpID09IDApIHsKKwkJcGd0YWJsZV9wYWdlX2R0b3IocGFnZSk7CisJCWF0b21pY19zZXQoJnBhZ2UtPl9tYXBjb3VudCwgLTEpOworCQlfX2ZyZWVfcGFnZShwYWdlKTsKIAl9Ci0JYmF0Y2ggPSByY3VfdGFibGVfZnJlZWxpc3RfZ2V0KG1tKTsKLQlpZiAoIWJhdGNoKSB7Ci0JCXNtcF9jYWxsX2Z1bmN0aW9uKHNtcF9zeW5jLCBOVUxMLCAxKTsKLQkJcGFnZV90YWJsZV9mcmVlKG1tLCB0YWJsZSk7Ci0JCWdvdG8gb3V0OworfQorCit2b2lkIHBhZ2VfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdW5zaWduZWQgbG9uZyAqdGFibGUpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgaW50IGJpdCwgbWFzazsKKworCW1tID0gdGxiLT5tbTsKKyNpZmRlZiBDT05GSUdfUEdTVEUKKwlpZiAobW1faGFzX3Bnc3RlKG1tKSkgeworCQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIChfX3BhKHRhYmxlKSB8IEZSQUdfTUFTSyk7CisJCXRsYl9yZW1vdmVfdGFibGUodGxiLCB0YWJsZSk7CisJCXJldHVybjsKIAl9Ci0JYml0cyA9IChtbS0+Y29udGV4dC5oYXNfcGdzdGUpID8gM1VMIDogMVVMOwotCWJpdHMgPDw9IChfX3BhKHRhYmxlKSAmIChQQUdFX1NJWkUgLSAxKSkgLyAyNTYgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7CisjZW5kaWYKKwliaXQgPSAxIDw8ICgoX19wYSh0YWJsZSkgJiB+UEFHRV9NQVNLKSAvIChQVFJTX1BFUl9QVEUqc2l6ZW9mKHB0ZV90KSkpOwogCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKIAlzcGluX2xvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JLyogRGVsYXllZCBmcmVlaW5nIHdpdGggcmN1IHByZXZlbnRzIHJldXNlIG9mIHBndGFibGUgZnJhZ21lbnRzICovCi0JbGlzdF9kZWxfaW5pdCgmcGFnZS0+bHJ1KTsKKwlpZiAoKGF0b21pY19yZWFkKCZwYWdlLT5fbWFwY291bnQpICYgRlJBR19NQVNLKSAhPSBGUkFHX01BU0spCisJCWxpc3RfZGVsKCZwYWdlLT5scnUpOworCW1hc2sgPSBhdG9taWNfeG9yX2JpdHMoJnBhZ2UtPl9tYXBjb3VudCwgYml0IHwgKGJpdCA8PCA0KSk7CisJaWYgKG1hc2sgJiBGUkFHX01BU0spCisJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSgoKHVuc2lnbmVkIGxvbmcpIHRhYmxlKSB8IGJpdHMpOwotCWJhdGNoLT50YWJsZVtiYXRjaC0+cGd0X2luZGV4KytdID0gdGFibGU7Ci0JaWYgKGJhdGNoLT5wZ3RfaW5kZXggPj0gYmF0Y2gtPmNyc3RfaW5kZXgpCi0JCXJjdV90YWJsZV9mcmVlbGlzdF9maW5pc2goKTsKLW91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOworCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgKF9fcGEodGFibGUpIHwgKGJpdCA8PCA0KSk7CisJdGxiX3JlbW92ZV90YWJsZSh0bGIsIHRhYmxlKTsKIH0KIAordm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqX3RhYmxlKQoreworCXZvaWQgKnRhYmxlID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpIF90YWJsZSAmIFBBR0VfTUFTSyk7CisJdW5zaWduZWQgdHlwZSA9ICh1bnNpZ25lZCBsb25nKSBfdGFibGUgJiB+UEFHRV9NQVNLOworCisJaWYgKHR5cGUpCisJCV9fcGFnZV90YWJsZV9mcmVlX3JjdSh0YWJsZSwgdHlwZSk7CisJZWxzZQorCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSB0YWJsZSwgQUxMT0NfT1JERVIpOworfQorCisjZW5kaWYKKwogLyoKICAqIHN3aXRjaCBvbiBwZ3N0ZXMgZm9yIGl0cyB1c2Vyc3BhY2UgcHJvY2VzcyAoZm9yIGt2bSkKICAqLwpAQCAtMzY5LDcgKzMxNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogRG8gd2UgaGF2ZSBwZ3N0ZXM/IGlmIHllcywgd2UgYXJlIGRvbmUgKi8KLQlpZiAodHNrLT5tbS0+Y29udGV4dC5oYXNfcGdzdGUpCisJaWYgKG1tX2hhc19wZ3N0ZSh0c2stPm1tKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBsZXRzIGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIHJlcGxhY2UgdGhlIG1tICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggM2EzMjc0MS4uNTEzY2IxYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvcjhhNjY1OTcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvcmVuZXNhc191c2Jocy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90c2MyMDA3Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgpAQCAtMjMyLDYgKzIzMyw1MiBAQAogCS5yZXNvdXJjZQk9IHVzYjFfY29tbW9uX3Jlc291cmNlcywKIH07CiAKKy8qCisgKiBVU0JIUworICovCitzdGF0aWMgaW50IHVzYmhzX2dldF9pZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX1BUQjMpOworfQorCitzdGF0aWMgc3RydWN0IHJlbmVzYXNfdXNiaHNfcGxhdGZvcm1faW5mbyB1c2Joc19pbmZvID0geworCS5wbGF0Zm9ybV9jYWxsYmFjayA9IHsKKwkJLmdldF9pZAkJPSB1c2Joc19nZXRfaWQsCisJfSwKKwkuZHJpdmVyX3BhcmFtID0geworCQkuYnVzd2FpdF9id2FpdAkJPSA0LAorCQkuZGV0ZWN0aW9uX2RlbGF5CT0gNSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2Joc19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4YTRkOTAwMDAsCisJCS5lbmQJPSAweGE0ZDkwMTI0IC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDY2LAorCQkuZW5kCT0gNjYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1c2Joc19kZXZpY2UgPSB7CisJLm5hbWUJPSAicmVuZXNhc191c2JocyIsCisJLmlkCT0gMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sJCT0gTlVMTCwgICAgICAgICAvKiAgbm90IHVzZSBkbWEgKi8KKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYmhzX2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXNiaHNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB1c2Joc19yZXNvdXJjZXMsCisJLmFyY2hkYXRhID0geworCQkuaHdibGtfaWQgPSBIV0JMS19VU0IxLAorCX0sCit9OworCiAvKiBMQ0RDICovCiBjb25zdCBzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBlY292ZWNfbGNkX21vZGVzW10gPSB7CiAJewpAQCAtODk3LDYgKzk0NCw3IEBACiAJJnNoX2V0aF9kZXZpY2UsCiAJJnVzYjBfaG9zdF9kZXZpY2UsCiAJJnVzYjFfY29tbW9uX2RldmljZSwKKwkmdXNiaHNfZGV2aWNlLAogCSZsY2RjX2RldmljZSwKIAkmY2V1MF9kZXZpY2UsCiAJJmNldTFfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA3ODBlMDgzLi4yM2JjODQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMjcsOCArMjcsNiBAQAogCQkJJChDT05GSUdfQk9PVF9MSU5LX09GRlNFVCldJykKIGVuZGlmCiAKLUxJQkdDQwk6PSAkKHNoZWxsICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLXByaW50LWxpYmdjYy1maWxlLW5hbWUpCi0KIGlmZXEgKCQoQ09ORklHX01DT1VOVCkseSkKIE9SSUdfQ0ZMQUdTIDo9ICQoS0JVSUxEX0NGTEFHUykKIEtCVUlMRF9DRkxBR1MgPSAkKHN1YnN0IC1wZywgLCAkKE9SSUdfQ0ZMQUdTKSkKQEAgLTM3LDcgKzM1LDI1IEBACiBMREZMQUdTX3ZtbGludXggOj0gLS1vZm9ybWF0ICQobGQtYmZkKSAtVHRleHQgJChJTUFHRV9PRkZTRVQpIC1lIHN0YXJ0dXAgXAogCQkgICAtVCAkKG9iaikvLi4vLi4va2VybmVsL3ZtbGludXgubGRzCiAKLSQob2JqKS92bWxpbnV4OiAkKE9CSkVDVFMpICQob2JqKS9waWdneS5vICQoTElCR0NDKSBGT1JDRQorIworIyBQdWxsIGluIHRoZSBuZWNlc3NhcnkgbGliZ2NjIGJpdHMgZnJvbSB0aGUgaW4ta2VybmVsIGltcGxlbWVudGF0aW9uLgorIworbGliMWZ1bmNzLSQoQ09ORklHX1NVUEVSSDMyKQk6PSBhc2hpZnRydC5TIGFzaGxkaTMuYyBhc2hyc2kzLlMgYXNobHNpMy5TIFwKKwkJCQkgICBsc2hyc2kzLlMKK2xpYjFmdW5jcy1vYmoJCQk6PSBcCisJJChhZGRzdWZmaXggLm8sICQoYmFzZW5hbWUgJChhZGRwcmVmaXggJChvYmopLywgJChsaWIxZnVuY3MteSkpKSkKKworbGliMWZ1bmNzLWRpcgkJOj0gJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvbGliCitpZmVxICgkKEJJVFMpLDY0KQorCWxpYjFmdW5jcy1kaXIgCTo9ICQoYWRkc3VmZml4ICQoQklUUyksICQobGliMWZ1bmNzLWRpcikpCitlbmRpZgorCitLQlVJTERfQ0ZMQUdTICs9IC1JJChsaWIxZnVuY3MtZGlyKQorCiskKGFkZHByZWZpeCAkKG9iaikvLCQobGliMWZ1bmNzLXkpKTogJChvYmopLyU6ICQobGliMWZ1bmNzLWRpcikvJSBGT1JDRQorCSQoY2FsbCBjbWQsc2hpcHBlZCkKKworJChvYmopL3ZtbGludXg6ICQoT0JKRUNUUykgJChvYmopL3BpZ2d5Lm8gJChsaWIxZnVuY3Mtb2JqKSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQogCUA6CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCmluZGV4IDBmNTU4OTEuLmUyY2JkOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZwpAQCAtMjI3LDcgKzIyNyw3IEBACiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTY9bQogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KLUNPTkZJR19SVENfQ0xBU1M9bQorQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9TSD1tCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctZ3JiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2NtcHhjaGctZ3JiLmgKaW5kZXggNDY3NmJmNS4uZjg0OGRlYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jbXB4Y2hnLWdyYi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vY21weGNoZy1ncmIuaApAQCAtMTUsOCArMTUsOSBAQAogCQkiICAgbW92LmwgICAlMiwgICBAJTEgICAgIFxuXHQiIC8qIHN0b3JlIG5ldyB2YWx1ZSAqLwogCQkiMTogbW92ICAgICByMSwgICByMTUgICAgIFxuXHQiIC8qIExPR09VVCAqLwogCQk6ICI9JnIiIChyZXR2YWwpLAotCQkgICIrciIgIChtKQotCQk6ICJyIiAgICh2YWwpCisJCSAgIityIiAgKG0pLAorCQkgICIrciIgICh2YWwpCQkvKiBpbmhpYml0IHIxNSBvdmVybG9hZGluZyAqLworCQk6CiAJCTogIm1lbW9yeSIsICJyMCIsICJyMSIpOwogCiAJcmV0dXJuIHJldHZhbDsKQEAgLTM2LDggKzM3LDkgQEAKIAkJIiAgIG1vdi5iICAgJTIsICAgQCUxICAgICBcblx0IiAvKiBzdG9yZSBuZXcgdmFsdWUgKi8KIAkJIjE6IG1vdiAgICAgcjEsICAgcjE1ICAgICBcblx0IiAvKiBMT0dPVVQgKi8KIAkJOiAiPSZyIiAocmV0dmFsKSwKLQkJICAiK3IiICAobSkKLQkJOiAiciIgICAodmFsKQorCQkgICIrciIgIChtKSwKKwkJICAiK3IiICAodmFsKQkJLyogaW5oaWJpdCByMTUgb3ZlcmxvYWRpbmcgKi8KKwkJOgogCQk6ICJtZW1vcnkiICwgInIwIiwgInIxIik7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTQsMTMgKzU2LDE0IEBACiAJCSIgICBub3AgICAgICAgICAgICAgICAgICAgXG5cdCIKIAkJIiAgIG1vdiAgICByMTUsICAgcjEgICAgICBcblx0IiAvKiByMSA9IHNhdmVkIHNwICovCiAJCSIgICBtb3YgICAgIy04LCAgIHIxNSAgICAgXG5cdCIgLyogTE9HSU4gKi8KLQkJIiAgIG1vdi5sICBAJTEsICAgJTAgICAgICBcblx0IiAvKiBsb2FkICBvbGQgdmFsdWUgKi8KLQkJIiAgIGNtcC9lcSAgJTAsICAgJTIgICAgICBcblx0IgorCQkiICAgbW92LmwgIEAlMywgICAlMCAgICAgIFxuXHQiIC8qIGxvYWQgIG9sZCB2YWx1ZSAqLworCQkiICAgY21wL2VxICAlMCwgICAlMSAgICAgIFxuXHQiCiAJCSIgICBiZiAgICAgICAgICAgIDFmICAgICAgXG5cdCIgLyogaWYgbm90IGVxdWFsICovCi0JCSIgICBtb3YubCAgICUzLCAgIEAlMSAgICAgXG5cdCIgLyogc3RvcmUgbmV3IHZhbHVlICovCisJCSIgICBtb3YubCAgICUyLCAgIEAlMyAgICAgXG5cdCIgLyogc3RvcmUgbmV3IHZhbHVlICovCiAJCSIxOiBtb3YgICAgIHIxLCAgIHIxNSAgICAgXG5cdCIgLyogTE9HT1VUICovCi0JCTogIj0mciIgKHJldHZhbCkKLQkJOiAgInIiICAobSksICJyIiAgKG9sZCksICJyIiAgKG5ldykKKwkJOiAiPSZyIiAocmV0dmFsKSwKKwkJICAiK3IiICAob2xkKSwgIityIiAgKG5ldykgLyogb2xkIG9yIG5ldyBjYW4gYmUgcjE1ICovCisJCTogICJyIiAgKG0pCiAJCTogIm1lbW9yeSIgLCAicjAiLCAicjEiLCAidCIpOwogCiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl82NC5oCmluZGV4IDJhNTQxZGQuLmUyNWM0YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzY0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfNjQuaApAQCAtMTUwLDcgKzE1MCw2IEBACiAjZGVmaW5lIFNSX1VTRVIgKFNSX01NVSB8IFNSX0ZEKQogCiAjZGVmaW5lIHN0YXJ0X3RocmVhZChfcmVncywgbmV3X3BjLCBuZXdfc3ApCQkJXAotCXNldF9mcyhVU0VSX0RTKTsJCQkJCVwKIAlfcmVncy0+c3IgPSBTUl9VU0VSOwkvKiBVc2VyIG1vZGUuICovCQlcCiAJX3JlZ3MtPnBjID0gbmV3X3BjIC0gNDsJLyogQ29tcGVuc2F0ZSBzeXNjYWxsIGV4aXQgKi8JXAogCV9yZWdzLT5wYyB8PSAxOwkJLyogU2V0IFNIbWVkaWEgISAqLwkJXApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyNC5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzcyNC5oCmluZGV4IDNkYWVmOGUuLmNiYzQ3ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3MjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3NzI0LmgKQEAgLTI5OCw2ICsyOTgsMTQgQEAKIAlTSERNQV9TTEFWRV9TQ0lGNF9SWCwKIAlTSERNQV9TTEFWRV9TQ0lGNV9UWCwKIAlTSERNQV9TTEFWRV9TQ0lGNV9SWCwKKwlTSERNQV9TTEFWRV9VU0IwRDBfVFgsCisJU0hETUFfU0xBVkVfVVNCMEQwX1JYLAorCVNIRE1BX1NMQVZFX1VTQjBEMV9UWCwKKwlTSERNQV9TTEFWRV9VU0IwRDFfUlgsCisJU0hETUFfU0xBVkVfVVNCMUQwX1RYLAorCVNIRE1BX1NMQVZFX1VTQjFEMF9SWCwKKwlTSERNQV9TTEFWRV9VU0IxRDFfVFgsCisJU0hETUFfU0xBVkVfVVNCMUQxX1JYLAogCVNIRE1BX1NMQVZFX1NESEkwX1RYLAogCVNIRE1BX1NMQVZFX1NESEkwX1JYLAogCVNIRE1BX1NMQVZFX1NESEkxX1RYLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwppbmRleCAwMzMzZmU5Li4xMzRhMzk3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwpAQCAtOTMsNiArOTMsNDYgQEAKIAkJLmNoY3IJCT0gRE1fSU5DIHwgU01fRklYIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl84QklUKSwKIAkJLm1pZF9yaWQJPSAweDM2LAogCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfVVNCMEQwX1RYLAorCQkuYWRkcgkJPSAweEE0RDgwMTAwLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweDczLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfVVNCMEQwX1JYLAorCQkuYWRkcgkJPSAweEE0RDgwMTAwLAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweDczLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfVVNCMEQxX1RYLAorCQkuYWRkcgkJPSAweEE0RDgwMTIwLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweDc3LAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfVVNCMEQxX1JYLAorCQkuYWRkcgkJPSAweEE0RDgwMTIwLAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweDc3LAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfVVNCMUQwX1RYLAorCQkuYWRkcgkJPSAweEE0RDkwMTAwLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweGFiLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfVVNCMUQwX1JYLAorCQkuYWRkcgkJPSAweEE0RDkwMTAwLAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweGFiLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfVVNCMUQxX1RYLAorCQkuYWRkcgkJPSAweEE0RDkwMTIwLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweGFmLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfVVNCMUQxX1JYLAorCQkuYWRkcgkJPSAweEE0RDkwMTIwLAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweGFmLAorCX0sIHsKIAkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0RISTBfVFgsCiAJCS5hZGRyCQk9IDB4MDRjZTAwMzAsCiAJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMTZCSVQpLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IGI0NzNmMGMuLmFhZjZkNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTEwMiw4ICsxMDIsNiBAQAogdm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgbmV3X3BjLAogCQkgIHVuc2lnbmVkIGxvbmcgbmV3X3NwKQogewotCXNldF9mcyhVU0VSX0RTKTsKLQogCXJlZ3MtPnByID0gMDsKIAlyZWdzLT5zciA9IFNSX0ZEOwogCXJlZ3MtPnBjID0gbmV3X3BjOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMgYi9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYwppbmRleCA1MjQxMTQ2Li4xMTU3MjUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLWRlYnVnZnMuYwpAQCAtMjYsOSArMjYsOSBAQAogewogCXVuc2lnbmVkIGludCBjYWNoZV90eXBlID0gKHVuc2lnbmVkIGludClmaWxlLT5wcml2YXRlOwogCXN0cnVjdCBjYWNoZV9pbmZvICpjYWNoZTsKLQl1bnNpZ25lZCBpbnQgd2F5c2l6ZSwgd2F5LCBjYWNoZV9zaXplOwotCXVuc2lnbmVkIGxvbmcgY2NyLCBiYXNlOwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIGFkZHJzdGFydCA9IDA7CisJdW5zaWduZWQgaW50IHdheXNpemUsIHdheTsKKwl1bnNpZ25lZCBsb25nIGNjcjsKKwl1bnNpZ25lZCBsb25nIGFkZHJzdGFydCA9IDA7CiAKIAkvKgogCSAqIEdvIHVuY2FjaGVkIGltbWVkaWF0ZWx5IHNvIHdlIGRvbid0IHNrZXcgdGhlIHJlc3VsdHMgYW55CkBAIC00NSwyOCArNDUsMTMgQEAKIAl9CiAKIAlpZiAoY2FjaGVfdHlwZSA9PSBDQUNIRV9UWVBFX0RDQUNIRSkgewotCQliYXNlID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWTsKKwkJYWRkcnN0YXJ0ID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWTsKIAkJY2FjaGUgPSAmY3VycmVudF9jcHVfZGF0YS5kY2FjaGU7CiAJfSBlbHNlIHsKLQkJYmFzZSA9IENBQ0hFX0lDX0FERFJFU1NfQVJSQVk7CisJCWFkZHJzdGFydCA9IENBQ0hFX0lDX0FERFJFU1NfQVJSQVk7CiAJCWNhY2hlID0gJmN1cnJlbnRfY3B1X2RhdGEuaWNhY2hlOwogCX0KIAotCS8qCi0JICogRHVlIHRvIHRoZSBhbW91bnQgb2YgZGF0YSB3cml0dGVuIG91dCAoZGVwZW5kaW5nIG9uIHRoZSBjYWNoZSBzaXplKSwKLQkgKiB3ZSBtYXkgYmUgaXRlcmF0ZWQgb3ZlciBtdWx0aXBsZSB0aW1lcy4gSW4gdGhpcyBjYXNlLCBrZWVwIHRyYWNrIG9mCi0JICogdGhlIGVudHJ5IHBvc2l0aW9uIGluIGFkZHJzdGFydCwgYW5kIHJld2luZCBpdCB3aGVuIHdlJ3ZlIGhpdCB0aGUKLQkgKiBlbmQgb2YgdGhlIGNhY2hlLgotCSAqCi0JICogTGlrZXdpc2UsIHRoZSBzYW1lIGNvZGUgaXMgdXNlZCBmb3IgbXVsdGlwbGUgY2FjaGVzLCBzbyBjYXJlIG11c3QKLQkgKiBiZSB0YWtlbiBmb3IgYm91bmNpbmcgYWRkcnN0YXJ0IGJhY2sgYW5kIGZvcnRoIHNvIHRoZSBhcHByb3ByaWF0ZQotCSAqIGNhY2hlIGlzIGhpdC4KLQkgKi8KLQljYWNoZV9zaXplID0gY2FjaGUtPndheXMgKiBjYWNoZS0+c2V0cyAqIGNhY2hlLT5saW5lc3o7Ci0JaWYgKCgoYWRkcnN0YXJ0ICYgMHhmZjAwMDAwMCkgIT0gYmFzZSkgfHwKLQkgICAgIChhZGRyc3RhcnQgJiAweDAwZmZmZmZmKSA+IGNhY2hlX3NpemUpCi0JCWFkZHJzdGFydCA9IGJhc2U7Ci0KIAl3YXlzaXplID0gY2FjaGUtPnNldHM7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IGFmMzJlMTcuLjI1Mzk4NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTI2LDcgKzI2LDYgQEAKIAlzZWxlY3QgSEFWRV9ETUFfQVBJX0RFQlVHCiAJc2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMCiAJc2VsZWN0IEhBVkVfR0VORVJJQ19IQVJESVJRUwotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX0RFUFJFQ0FURUQKIAlzZWxlY3QgR0VORVJJQ19JUlFfU0hPVwogCXNlbGVjdCBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpZiBTTVAKIApAQCAtNTI4LDYgKzUyNywyMyBAQAogY29uZmlnIFBDSV9TWVNDQUxMCiAJZGVmX2Jvb2wgUENJCiAKK2NvbmZpZyBQQ0lDX1BDSQorCWJvb2wKKwlkZXBlbmRzIG9uIFBDSSAmJiBTUEFSQzMyICYmICFTUEFSQ19MRU9OCisJZGVmYXVsdCB5CisKK2NvbmZpZyBMRU9OX1BDSQorCWJvb2wKKwlkZXBlbmRzIG9uIFBDSSAmJiBTUEFSQ19MRU9OCisJZGVmYXVsdCB5CisKK2NvbmZpZyBHUlBDSTIKKwlib29sICJHUlBDSTIgSG9zdCBCcmlkZ2UgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIExFT05fUENJCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHRoZSBHUlBDSTIgSG9zdCBCcmlkZ2UgRHJpdmVyLgorCiBzb3VyY2UgImRyaXZlcnMvcGNpL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9wY21jaWEvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV8zMi5oCmluZGV4IDQ4MmM3OWUuLjc0NDA5MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfMzIuaApAQCAtMTM4LDcgKzEzOCw3IEBACiAJCXJldHVybiBzdW5fZmRjLT5kYXRhXzgyMDcyOwogCWNhc2UgNzogLyogRkRfRElSICovCiAJCXJldHVybiBzdW5fcmVhZF9kaXIoKTsKLQl9OworCX0KIAlwYW5pYygic3VuXzgyMDcyX2ZkX2luYjogSG93IGRpZCBJIGdldCBoZXJlPyIpOwogfQogCkBAIC0xNjEsNyArMTYxLDcgQEAKIAljYXNlIDQ6IC8qIEZEX1NUQVRVUyAqLwogCQlzdW5fZmRjLT5zdGF0dXNfODIwNzIgPSB2YWx1ZTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJcmV0dXJuOwogfQogCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJcmV0dXJuIHN1bl9mZGMtPmRhdGFfODIwNzc7CiAJY2FzZSA3OiAvKiBGRF9ESVIgKi8KIAkJcmV0dXJuIHN1bl9yZWFkX2RpcigpOwotCX07CisJfQogCXBhbmljKCJzdW5fODIwNzdfZmRfaW5iOiBIb3cgZGlkIEkgZ2V0IGhlcmU/Iik7CiB9CiAKQEAgLTIxMiw3ICsyMTIsNyBAQAogCWNhc2UgMzogLyogRkRfVERSICovCiAJCXN1bl9mZGMtPnRhcGVjdGxfODIwNzcgPSB2YWx1ZTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfNjQuaAppbmRleCA2NTk3Y2U4Li5iY2VmMWY1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzY0LmgKQEAgLTExMSw3ICsxMTEsNyBAQAogCWNhc2UgNzogLyogRkRfRElSICovCiAJCS8qIFhYWDogSXMgRENMIG9uIDB4ODAgaW4gc3VuNG0/ICovCiAJCXJldHVybiBzYnVzX3JlYWRiKCZzdW5fZmRjLT5kaXJfODIwNzcpOwotCX07CisJfQogCXBhbmljKCJzdW5fODIwNzJfZmRfaW5iOiBIb3cgZGlkIEkgZ2V0IGhlcmU/Iik7CiB9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQAogCWNhc2UgNDogLyogRkRfU1RBVFVTICovCiAJCXNidXNfd3JpdGViKHZhbHVlLCAmc3VuX2ZkYy0+c3RhdHVzXzgyMDc3KTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbi5oCmluZGV4IDZiZGFmMWUuLmE0ZTQ1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbi5oCkBAIC0zMTgsNiArMzE4LDkgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbGVvbl9idWlsZF9kZXZpY2VfaXJxKHVuc2lnbmVkIGludCByZWFsX2lycSwKIAkJCQkJICAgaXJxX2Zsb3dfaGFuZGxlcl90IGZsb3dfaGFuZGxlciwKIAkJCQkJICAgY29uc3QgY2hhciAqbmFtZSwgaW50IGRvX2Fjayk7CitleHRlcm4gdm9pZCBsZW9uX3VwZGF0ZV92aXJxX2hhbmRsaW5nKHVuc2lnbmVkIGludCB2aXJxLAorCQkJICAgICAgaXJxX2Zsb3dfaGFuZGxlcl90IGZsb3dfaGFuZGxlciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBkb19hY2spOwogZXh0ZXJuIHZvaWQgbGVvbl9jbGVhcl9jbG9ja19pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBsZW9uX2xvYWRfcHJvZmlsZV9pcnEoaW50IGNwdSwgdW5zaWduZWQgaW50IGxpbWl0KTsKIGV4dGVybiB2b2lkIGxlb25faW5pdF90aW1lcnMoaXJxX2hhbmRsZXJfdCBjb3VudGVyX2ZuKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9wY2kuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmI0YjMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uX3BjaS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBhc20vbGVvbl9wY2kuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZXJvZmxleCBHYWlzbGVyIEFCLCBEYW5pZWwgSGVsbHN0cm9tCisgKi8KKworI2lmbmRlZiBfQVNNX0xFT05fUENJX0hfCisjZGVmaW5lIF9BU01fTEVPTl9QQ0lfSF8KKworLyogUENJIHJlbGF0ZWQgZGVmaW5pdGlvbnMgKi8KK3N0cnVjdCBsZW9uX3BjaV9pbmZvIHsKKwlzdHJ1Y3QgcGNpX29wcyAqb3BzOworCXN0cnVjdCByZXNvdXJjZQlpb19zcGFjZTsKKwlzdHJ1Y3QgcmVzb3VyY2UJbWVtX3NwYWNlOworCWludCAoKm1hcF9pcnEpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbik7Cit9OworCitleHRlcm4gdm9pZCBsZW9uX3BjaV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2LAorCQkJCXN0cnVjdCBsZW9uX3BjaV9pbmZvICppbmZvKTsKKworI2VuZGlmIC8qIF9BU01fTEVPTl9QQ0lfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV8zMi5oCmluZGV4IDMzMmFjOWEuLjg2MmUzY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfMzIuaApAQCAtNDcsNyArNDcsMzEgQEAKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAorI2lmbmRlZiBDT05GSUdfTEVPTl9QQ0kKIC8qIGdlbmVyaWMgcGNpIHN0dWZmICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLmg+CisjZWxzZQorLyoKKyAqIE9uIExFT04gUENJIE1lbW9yeSBzcGFjZSBpcyBtYXBwZWQgMToxIHdpdGggcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS4KKyAqCisgKiBJL08gc3BhY2UgaXMgbG9jYXRlZCBhdCBsb3cgNjRLYnl0ZXMgaW4gUENJIEkvTyBzcGFjZS4gVGhlIEkvTyBhZGRyZXNzZXMKKyAqIGFyZSBjb252ZXJ0ZWQgaW50byBDUFUgYWRkcmVzc2VzIHRvIHZpcnR1YWwgYWRkcmVzc2VzIHRoYXQgYXJlIG1hcHBlZCB3aXRoCisgKiBNTVUgdG8gdGhlIFBDSSBIb3N0IFBDSSBJL08gc3BhY2Ugd2luZG93IHdoaWNoIGFyZSB0cmFuc2xhdGVkIHRvIHRoZSBsb3cKKyAqIDY0S2J5dGVzIGJ5IHRoZSBIb3N0IGNvbnRyb2xsZXIuCisgKi8KKworZXh0ZXJuIHZvaWQKK3BjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uLAorCQkJc3RydWN0IHJlc291cmNlICpyZXMpOworCitleHRlcm4gdm9pZAorcGNpYmlvc19idXNfdG9fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbik7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIFBDSV9JUlFfTk9ORTsKK30KKyNlbmRpZgogCiAjZW5kaWYgLyogX19TUEFSQ19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2ljLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaWMuaAppbmRleCA3ZWI1ZDc4Li42Njc2Y2JjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaWMuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaWMuaApAQCAtMjksNyArMjksNyBAQAogCWludAkJCXBjaWNfaW1kaW07CiB9OwogCi0jaWZkZWYgQ09ORklHX1BDSQorI2lmZGVmIENPTkZJR19QQ0lDX1BDSQogZXh0ZXJuIGludCBwY2ljX3ByZXNlbnQodm9pZCk7CiBleHRlcm4gaW50IHBjaWNfcHJvYmUodm9pZCk7CiBleHRlcm4gdm9pZCBwY2lfdGltZV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKaW5kZXggNDdhN2U4Ni4uYWJhMTYwOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCkBAIC0yMjAsNyArMjIwLDcgQEAKIAlzd2l0Y2ggKHNpemUpIHsKIAljYXNlIDQ6CiAJCXJldHVybiB4Y2hnX3UzMihwdHIsIHgpOwotCX07CisJfQogCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOwogCXJldHVybiB4OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKaW5kZXggM2M5NmQzYi4uMTBiY2FiYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCkBAIC0yMzQsNyArMjM0LDcgQEAKIAkJcmV0dXJuIHhjaGczMihwdHIsIHgpOwogCWNhc2UgODoKIAkJcmV0dXJuIHhjaGc2NChwdHIsIHgpOwotCX07CisJfQogCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOwogCXJldHVybiB4OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZQppbmRleCA5Y2ZmMjcwLi5iOTBiNGExIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9NYWtlZmlsZQpAQCAtNzMsNyArNzMsOSBAQAogCiBvYmoteSAgICAgICAgICAgICAgICAgICAgICs9IGRtYS5vCiAKLW9iai0kKENPTkZJR19TUEFSQzMyX1BDSSkgKz0gcGNpYy5vCitvYmotJChDT05GSUdfUENJQ19QQ0kpICAgICs9IHBjaWMubworb2JqLSQoQ09ORklHX0xFT05fUENJKSAgICArPSBsZW9uX3BjaS5vCitvYmotJChDT05GSUdfR1JQQ0kyKSAgICAgICs9IGxlb25fcGNpX2dycGNpMi5vCiAKIG9iai0kKENPTkZJR19TTVApICAgICAgICAgKz0gdHJhbXBvbGluZV8kKEJJVFMpLm8gc21wXyQoQklUUykubwogb2JqLSQoQ09ORklHX1NQQVJDMzJfU01QKSArPSBzdW40bV9zbXAubyBzdW40ZF9zbXAubyBsZW9uX3NtcC5vCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2FwYy5jCmluZGV4IDFlMzRmMjkuLmNhZWY5ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2FwYy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2FwYy5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwotCX07CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9hdXhpb18zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvYXV4aW9fMzIuYwppbmRleCA4NTA1ZTBhLi5hY2Y1MTUxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9hdXhpb18zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvXzMyLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwYW5pYygiQ2FuJ3Qgc2V0IEFVWElPIHJlZ2lzdGVyIG9uIHRoaXMgbWFjaGluZS4iKTsKLQl9OworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXhpb19sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9hdXhpbyk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9jaG1jLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9jaG1jLmMKaW5kZXggNjY4YzdiZS4uNWY0NTAyNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvY2htYy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2NobWMuYwpAQCAtNjY0LDcgKzY2NCw3IEBACiAJY2FzZSAweDA6CiAJCWJwLT5pbnRlcmxlYXZlID0gMTY7CiAJCWJyZWFrOwotCX07CisJfQogCiAJLyogVUtbMTBdIGlzIHJlc2VydmVkLCBhbmQgVUtbMTFdIGlzIG5vdCBzZXQgZm9yIHRoZSBTRFJBTQogCSAqIGJhbmsgc2l6ZSBkZWZpbml0aW9uLgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKaW5kZXggODM0MTk2My4uOWZlMDhhMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCkBAIC0yMjksNyArMjI5LDcgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJLmdsb2JsCXBhdGNobWVfbWF5YmVfc21wX21zZwogCi0JY21wCSVsNywgMTIKKwljbXAJJWw3LCAxMQogcGF0Y2htZV9tYXliZV9zbXBfbXNnOgogCWJndQltYXliZV9zbXA0bV9tc2cKIAkgbm9wCkBAIC0yOTMsNyArMjkzLDcgQEAKIAlXUklURV9QQVVTRQogCXdyCSVsNCwgUFNSX0VULCAlcHNyCiAJV1JJVEVfUEFVU0UKLQlzbGwJJW8yLCAyOCwgJW8yCQkhIHNoaWZ0IGZvciBzaW1wbGVyIGNoZWNrcyBiZWxvdworCXNsbAklbzMsIDI4LCAlbzIJCSEgc2hpZnQgZm9yIHNpbXBsZXIgY2hlY2tzIGJlbG93CiBtYXliZV9zbXA0bV9tc2dfY2hlY2tfc2luZ2xlOgogCWFuZGNjCSVvMiwgMHgxLCAlZzAKIAliZXEsYQltYXliZV9zbXA0bV9tc2dfY2hlY2tfbWFzawpAQCAtMTYwNCw3ICsxNjA0LDcgQEAKIAlyZXRsCiAJIG5vcAogCi0jaWZkZWYgQ09ORklHX1BDSQorI2lmZGVmIENPTkZJR19QQ0lDX1BDSQogI2luY2x1ZGUgPGFzbS9wY2ljLmg+CiAKIAkuYWxpZ24JNApAQCAtMTY1MCw3ICsxNjUwLDcgQEAKIAkgcmQJJXBzciwgJWwwCiAJLndvcmQJMAogCi0jZW5kaWYgLyogQ09ORklHX1BDSSAqLworI2VuZGlmIC8qIENPTkZJR19QQ0lDX1BDSSAqLwogCiAJLmdsb2JsCWZsdXNod19hbGwKIGZsdXNod19hbGw6CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9rZXJuZWwuYwppbmRleCAyZjUzOGFjLi5kMTcyNTVhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMKQEAgLTIzNiw2ICsyMzYsMjEgQEAKIAlyZXR1cm4gbGVvbl9idWlsZF9kZXZpY2VfaXJxKHJlYWxfaXJxLCBoYW5kbGVfc2ltcGxlX2lycSwgImVkZ2UiLCAwKTsKIH0KIAordm9pZCBsZW9uX3VwZGF0ZV92aXJxX2hhbmRsaW5nKHVuc2lnbmVkIGludCB2aXJxLAorCQkJICAgICAgaXJxX2Zsb3dfaGFuZGxlcl90IGZsb3dfaGFuZGxlciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBkb19hY2spCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gKHVuc2lnbmVkIGxvbmcpaXJxX2dldF9jaGlwX2RhdGEodmlycSk7CisKKwltYXNrICY9IH5MRU9OX0RPX0FDS19IVzsKKwlpZiAoZG9fYWNrKQorCQltYXNrIHw9IExFT05fRE9fQUNLX0hXOworCisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUodmlycSwgJmxlb25faXJxLAorCQkJCSAgICAgIGZsb3dfaGFuZGxlciwgbmFtZSk7CisJaXJxX3NldF9jaGlwX2RhdGEodmlycSwgKHZvaWQgKiltYXNrKTsKK30KKwogdm9pZCBfX2luaXQgbGVvbl9pbml0X3RpbWVycyhpcnFfaGFuZGxlcl90IGNvdW50ZXJfZm4pCiB7CiAJaW50IGlycSwgZWlycTsKQEAgLTM2MSw2ICszNzYsMjIgQEAKIAkJcHJvbV9oYWx0KCk7CiAJfQogCisjaWZkZWYgQ09ORklHX1NNUAorCXsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkvKgorCQkgKiBJbiBTTVAsIHN1bjRtIGFkZHMgYSBJUEkgaGFuZGxlciB0byBJUlEgdHJhcCBoYW5kbGVyIHRoYXQKKwkJICogTEVPTiBuZXZlciBtdXN0IHRha2UsIHN1bjRkIGFuZCBMRU9OIG92ZXJ3cml0ZXMgdGhlIGJyYW5jaAorCQkgKiB3aXRoIGEgTk9QLgorCQkgKi8KKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlwYXRjaG1lX21heWJlX3NtcF9tc2dbMF0gPSAweDAxMDAwMDAwOyAvKiBOT1Agb3V0IHRoZSBicmFuY2ggKi8KKwkJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKCk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisjZW5kaWYKKwogCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lW2xlb24zX2dwdGltZXJfaWR4XS5jdHJsLAogCQkJICAgICAgTEVPTjNfR1BUSU1FUl9FTiB8CiAJCQkgICAgICBMRU9OM19HUFRJTUVSX1JMIHwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fcGNpLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTlhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaS5jCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogbGVvbl9wY2kuYzogTEVPTiBIb3N0IFBDSSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFlcm9mbGV4IEdhaXNsZXIgQUIsIERhbmllbCBIZWxsc3Ryb20KKyAqCisgKiBDb2RlIGlzIHBhcnRpYWxseSBkZXJpdmVkIGZyb20gcGNpYy5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9sZW9uLmg+CisjaW5jbHVkZSA8YXNtL2xlb25fcGNpLmg+CisKKy8qIFRoZSBMRU9OIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCByZWx5IG9uIGEgQklPUyBvciBib290bG9hZGVyIHRvIHNldHVwCisgKiBQQ0kgZm9yIHVzLiBUaGUgTGludXggZ2VuZXJpYyByb3V0aW5lcyBhcmUgdXNlZCB0byBzZXR1cCByZXNvdXJjZXMsCisgKiByZXNldCB2YWx1ZXMgb2YgY29uZnVyYXRpb24tc3BhY2UgcmVnaXN0ZXJzIHNldHRpbmdzIGFlIHByZXNldmVkLgorICovCit2b2lkIGxlb25fcGNpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYsIHN0cnVjdCBsZW9uX3BjaV9pbmZvICppbmZvKQoreworCXN0cnVjdCBwY2lfYnVzICpyb290X2J1czsKKworCXJvb3RfYnVzID0gcGNpX3NjYW5fYnVzX3BhcmVudGVkKCZvZmRldi0+ZGV2LCAwLCBpbmZvLT5vcHMsIGluZm8pOworCWlmIChyb290X2J1cykgeworCQlyb290X2J1cy0+cmVzb3VyY2VbMF0gPSAmaW5mby0+aW9fc3BhY2U7CisJCXJvb3RfYnVzLT5yZXNvdXJjZVsxXSA9ICZpbmZvLT5tZW1fc3BhY2U7CisJCXJvb3RfYnVzLT5yZXNvdXJjZVsyXSA9IE5VTEw7CisKKwkJLyogSW5pdCBhbGwgUENJIGRldmljZXMgaW50byBQQ0kgdHJlZSAqLworCQlwY2lfYnVzX2FkZF9kZXZpY2VzKHJvb3RfYnVzKTsKKworCQkvKiBTZXR1cCBJUlFzIG9mIGFsbCBkZXZpY2VzIHVzaW5nIGN1c3RvbSByb3V0aW5lcyAqLworCQlwY2lfZml4dXBfaXJxcyhwY2lfY29tbW9uX3N3aXp6bGUsIGluZm8tPm1hcF9pcnEpOworCisJCS8qIEFzc2lnbiBkZXZpY2VzIHdpdGggcmVzb3VyY2VzICovCisJCXBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXMoKTsKKwl9Cit9CisKKy8qIFBDSSBNZW1vcnkgYW5kIFByZWZldGNoYWJsZSBNZW1vcnkgaXMgZGlyZWN0LW1hcHBlZC4gSG93ZXZlciBJL08gU3BhY2UgaXMKKyAqIGFjY2Vzc2VkIHRocm91Z2ggYSBXaW5kb3cgd2hpY2ggaXMgdHJhbnNsYXRlZCB0byBsb3cgNjRLQiBpbiBQQ0kgc3BhY2UsIHRoZQorICogZmlyc3QgNEtCIGlzIG5vdCB1c2VkIHNvIDYwS0IgaXMgYXZhaWxhYmxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBnZW5lcmljIGNvZGUgdG8gdHJhbnNsYXRlIHJlc291cmNlIGFkZHJlc3NlcyBpbnRvCisgKiBQQ0kgYWRkcmVzc2VzLgorICovCit2b2lkIHBjaWJpb3NfcmVzb3VyY2VfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uLAorCQkJICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3QgbGVvbl9wY2lfaW5mbyAqaW5mbyA9IGRldi0+YnVzLT5zeXNkYXRhOworCisJcmVnaW9uLT5zdGFydCA9IHJlcy0+c3RhcnQ7CisJcmVnaW9uLT5lbmQgPSByZXMtPmVuZDsKKworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgeworCQlyZWdpb24tPnN0YXJ0IC09IChpbmZvLT5pb19zcGFjZS5zdGFydCAtIDB4MTAwMCk7CisJCXJlZ2lvbi0+ZW5kIC09IChpbmZvLT5pb19zcGFjZS5zdGFydCAtIDB4MTAwMCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChwY2liaW9zX3Jlc291cmNlX3RvX2J1cyk7CisKKy8qIHNlZSBwY2liaW9zX3Jlc291cmNlX3RvX2J1cygpIGNvbW1lbnQgKi8KK3ZvaWQgcGNpYmlvc19idXNfdG9fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkgICAgIHN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uKQoreworCXN0cnVjdCBsZW9uX3BjaV9pbmZvICppbmZvID0gZGV2LT5idXMtPnN5c2RhdGE7CisKKwlyZXMtPnN0YXJ0ID0gcmVnaW9uLT5zdGFydDsKKwlyZXMtPmVuZCA9IHJlZ2lvbi0+ZW5kOworCisJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSB7CisJCXJlcy0+c3RhcnQgKz0gKGluZm8tPmlvX3NwYWNlLnN0YXJ0IC0gMHgxMDAwKTsKKwkJcmVzLT5lbmQgKz0gKGluZm8tPmlvX3NwYWNlLnN0YXJ0IC0gMHgxMDAwKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKTsKKwordm9pZCBfX2RldmluaXQgcGNpYmlvc19maXh1cF9idXMoc3RydWN0IHBjaV9idXMgKnBidXMpCit7CisJc3RydWN0IGxlb25fcGNpX2luZm8gKmluZm8gPSBwYnVzLT5zeXNkYXRhOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJaW50IGksIGhhc19pbywgaGFzX21lbTsKKwl1MTYgY21kOworCisJLyogR2VuZXJpYyBQQ0kgYnVzIHByb2Jpbmcgc2V0cyB0aGVzZSB0byBwb2ludCBhdAorCSAqICZpb3twb3J0LG1lbX1fcmVzb3VjZSB3aGljaCBpcyB3cm9uZyBmb3IgdXMuCisJICovCisJaWYgKHBidXMtPnNlbGYgPT0gTlVMTCkgeworCQlwYnVzLT5yZXNvdXJjZVswXSA9ICZpbmZvLT5pb19zcGFjZTsKKwkJcGJ1cy0+cmVzb3VyY2VbMV0gPSAmaW5mby0+bWVtX3NwYWNlOworCQlwYnVzLT5yZXNvdXJjZVsyXSA9IE5VTEw7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZwYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQkvKgorCQkgKiBXZSBjYW4gbm90IHJlbHkgb24gdGhhdCB0aGUgYm9vdGxvYWRlciBoYXMgZW5hYmxlZCBJL08KKwkJICogb3IgbWVtb3J5IGFjY2VzcyB0byBQQ0kgZGV2aWNlcy4gSW5zdGVhZCB3ZSBlbmFibGUgaXQgaGVyZQorCQkgKiBpZiB0aGUgZGV2aWNlIGhhcyBCQVJzIG9mIHJlc3BlY3RpdmUgdHlwZS4KKwkJICovCisJCWhhc19pbyA9IGhhc19tZW0gPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgUENJX1JPTV9SRVNPVVJDRTsgaSsrKSB7CisJCQl1bnNpZ25lZCBsb25nIGYgPSBkZXYtPnJlc291cmNlW2ldLmZsYWdzOworCQkJaWYgKGYgJiBJT1JFU09VUkNFX0lPKQorCQkJCWhhc19pbyA9IDE7CisJCQllbHNlIGlmIChmICYgSU9SRVNPVVJDRV9NRU0pCisJCQkJaGFzX21lbSA9IDE7CisJCX0KKwkJLyogUk9NIEJBUnMgYXJlIG1hcHBlZCBpbnRvIDMyLWJpdCBtZW1vcnkgc3BhY2UgKi8KKwkJaWYgKGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZW5kICE9IDApIHsKKwkJCWRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgfD0KKwkJCQkJCQlJT1JFU09VUkNFX1JPTV9FTkFCTEU7CisJCQloYXNfbWVtID0gMTsKKwkJfQorCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGJ1cywgZGV2LT5kZXZmbiwgUENJX0NPTU1BTkQsICZjbWQpOworCQlpZiAoaGFzX2lvICYmICEoY21kICYgUENJX0NPTU1BTkRfSU8pKSB7CisjaWZkZWYgQ09ORklHX1BDSV9ERUJVRworCQkJcHJpbnRrKEtFUk5fSU5GTyAiTEVPTlBDSTogRW5hYmxpbmcgSS9PIGZvciBkZXYgJXNcbiIsCisJCQkJCSBwY2lfbmFtZShkZXYpKTsKKyNlbmRpZgorCQkJY21kIHw9IFBDSV9DT01NQU5EX0lPOworCQkJcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwYnVzLCBkZXYtPmRldmZuLCBQQ0lfQ09NTUFORCwKKwkJCQkJCQkJCWNtZCk7CisJCX0KKwkJaWYgKGhhc19tZW0gJiYgIShjbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7CisjaWZkZWYgQ09ORklHX1BDSV9ERUJVRworCQkJcHJpbnRrKEtFUk5fSU5GTyAiTEVPTlBDSTogRW5hYmxpbmcgTUVNT1JZIGZvciBkZXYiCisJCQkJCSAiJXNcbiIsIHBjaV9uYW1lKGRldikpOworI2VuZGlmCisJCQljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZOworCQkJcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwYnVzLCBkZXYtPmRldmZuLCBQQ0lfQ09NTUFORCwKKwkJCQkJCQkJCWNtZCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBPdGhlciBhcmNocyBwYXJzZSBhcmd1bWVudHMgaGVyZS4KKyAqLworY2hhciAqIF9fZGV2aW5pdCBwY2liaW9zX3NldHVwKGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gc3RyOworfQorCityZXNvdXJjZV9zaXplX3QgcGNpYmlvc19hbGlnbl9yZXNvdXJjZSh2b2lkICpkYXRhLCBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlyZXNvdXJjZV9zaXplX3Qgc2l6ZSwgcmVzb3VyY2Vfc2l6ZV90IGFsaWduKQoreworCXJldHVybiByZXMtPnN0YXJ0OworfQorCitpbnQgcGNpYmlvc19lbmFibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBtYXNrKQoreworCXJldHVybiBwY2lfZW5hYmxlX3Jlc291cmNlcyhkZXYsIG1hc2spOworfQorCitzdHJ1Y3QgZGV2aWNlX25vZGUgKnBjaV9kZXZpY2VfdG9fT0Zfbm9kZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwkvKgorCSAqIEN1cnJlbnRseSB0aGUgT3BlbkJvb3Qgbm9kZXMgYXJlIG5vdCBjb25uZWN0ZWQgd2l0aCB0aGUgUENJIGRldmljZSwKKwkgKiB0aGlzIGlzIGJlY2F1c2UgdGhlIExFT04gUFJPTSBkb2VzIG5vdCBjcmVhdGUgUENJIG5vZGVzLiBFdmVudHVhbGx5CisJICogdGhpcyB3aWxsIGNoYW5nZSBhbmQgdGhlIHNhbWUgYXBwcm9hY2ggYXMgcGNpYy5jIGNhbiBiZSB1c2VkIHRvCisJICogbWF0Y2ggUFJPTSBub2RlcyB3aXRoIHBjaSBkZXZpY2VzLgorCSAqLworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChwY2lfZGV2aWNlX3RvX09GX25vZGUpOworCit2b2lkIF9fZGV2aW5pdCBwY2liaW9zX3VwZGF0ZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlycSkKK3sKKyNpZmRlZiBDT05GSUdfUENJX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIkxFT05QQ0k6IEFzc2lnbmluZyBJUlEgJTAyZCB0byAlc1xuIiwgaXJxLAorCQlwY2lfbmFtZShkZXYpKTsKKyNlbmRpZgorCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgaXJxKTsKK30KKworLyogaW4vb3V0IHJvdXRpbmVzIHRha2VuIGZyb20gcGNpYy5jCisgKgorICogVGhpcyBwcm9iYWJseSBiZWxvbmdzIGhlcmUgcmF0aGVyIHRoYW4gaW9wb3J0LmMgYmVjYXVzZQorICogd2UgZG8gbm90IHdhbnQgdGhpcyBjcnVkIGxpbmtlZCBpbnRvIFNCdXMga2VybmVscy4KKyAqIEFsc28sIHRoaW5rIGZvciBhIG1vbWVudCBhYm91dCBsaWtlcyBvZiBmbG9wcHkuYyB0aGF0CisgKiBpbmNsdWRlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBwYXJ0cy4gVGhleSBtYXkgd2FudCB0byByZWRlZmluZSBpbnMvb3V0cy4KKyAqCisgKiBXZSBkbyBub3QgdXNlIGhvcnJpYmxlIG1hY3JvcyBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0bworICogYWR2YW5jZSBwb2ludGVyIGJ5IHNpemVvZihzaXplKS4KKyAqLwordm9pZCBvdXRzYih1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQpIHsKKwkJY291bnQgLT0gMTsKKwkJb3V0YigqKGNvbnN0IGNoYXIgKilzcmMsIGFkZHIpOworCQlzcmMgKz0gMTsKKwkJLyogYWRkciArPSAxOyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0wob3V0c2IpOworCit2b2lkIG91dHN3KHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXdoaWxlIChjb3VudCkgeworCQljb3VudCAtPSAyOworCQlvdXR3KCooY29uc3Qgc2hvcnQgKilzcmMsIGFkZHIpOworCQlzcmMgKz0gMjsKKwkJLyogYWRkciArPSAyOyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0wob3V0c3cpOworCit2b2lkIG91dHNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXdoaWxlIChjb3VudCkgeworCQljb3VudCAtPSA0OworCQlvdXRsKCooY29uc3QgbG9uZyAqKXNyYywgYWRkcik7CisJCXNyYyArPSA0OworCQkvKiBhZGRyICs9IDQ7ICovCisJfQorfQorRVhQT1JUX1NZTUJPTChvdXRzbCk7CisKK3ZvaWQgaW5zYih1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQpIHsKKwkJY291bnQgLT0gMTsKKwkJKih1bnNpZ25lZCBjaGFyICopZHN0ID0gaW5iKGFkZHIpOworCQlkc3QgKz0gMTsKKwkJLyogYWRkciArPSAxOyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0woaW5zYik7CisKK3ZvaWQgaW5zdyh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQpIHsKKwkJY291bnQgLT0gMjsKKwkJKih1bnNpZ25lZCBzaG9ydCAqKWRzdCA9IGludyhhZGRyKTsKKwkJZHN0ICs9IDI7CisJCS8qIGFkZHIgKz0gMjsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MKGluc3cpOworCit2b2lkIGluc2wodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJd2hpbGUgKGNvdW50KSB7CisJCWNvdW50IC09IDQ7CisJCS8qCisJCSAqIFhYWCBJIGFtIHN1cmUgd2UgYXJlIGluIGZvciBhbiB1bmFsaWduZWQgdHJhcCBoZXJlLgorCQkgKi8KKwkJKih1bnNpZ25lZCBsb25nICopZHN0ID0gaW5sKGFkZHIpOworCQlkc3QgKz0gNDsKKwkJLyogYWRkciArPSA0OyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0woaW5zbCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaV9ncnBjaTIuYyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fcGNpX2dycGNpMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZGMwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaV9ncnBjaTIuYwpAQCAtMCwwICsxLDg5NyBAQAorLyoKKyAqIGxlb25fcGNpX2dycGNpMi5jOiBHUlBDSTIgSG9zdCBQQ0kgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFlcm9mbGV4IEdhaXNsZXIgQUIsIERhbmllbCBIZWxsc3Ryb20KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2xlb24uaD4KKyNpbmNsdWRlIDxhc20vdmFkZHJzLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL2xlb25fcGNpLmg+CisKKyNpbmNsdWRlICJpcnEuaCIKKworc3RydWN0IGdycGNpMl9iYXJjZmcgeworCXVuc2lnbmVkIGxvbmcgcGNpYWRyOwkvKiBQQ0kgU3BhY2UgQWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgYWhiYWRyOwkvKiBQQ0kgQmFzZSBhZGRyZXNzIG1hcHBlZCB0byB0aGlzIEFIQiBhZGRyICovCit9OworCisvKiBEZXZpY2UgTm9kZSBDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgKiAgLSBiYXJjZmdzICAgIDogQ3VzdG9tIENvbmZpZ3VyYXRpb24gb2YgSG9zdCdzIDYgdGFyZ2V0IEJBUnMKKyAqICAtIGlycV9tYXNrICAgOiBMaW1pdCB3aGljaCBQQ0kgaW50ZXJydXB0cyBhcmUgZW5hYmxlZAorICogIC0gZG9fcmVzZXQgICA6IEZvcmNlIFBDSSBSZXNldCBvbiBzdGFydHVwCisgKgorICogYmFyY2ZncworICogPT09PT09PQorICoKKyAqIE9wdGlvbmFsIGN1c3RvbSBUYXJnZXQgQkFSIGNvbmZpZ3VyYXRpb24gKHNlZSBzdHJ1Y3QgZ3JwY2kyX2JhcmNmZykuIEFsbAorICogYWRkcmVzc2VzIGFyZSBwaHlzaWNhbC4gQXJyYXkgYWx3YXlzIGNvbnRhaW5zIDYgZWxlbWVudHMgKGxlbj0yKjQqNiBieXRlcykKKyAqCisgKiAtMSBtZWFucyBub3QgY29uZmlndXJlZCAobGV0IGhvc3QgZHJpdmVyIGRvIGRlZmF1bHQgc2V0dXApLgorICoKKyAqIFtpKjIrMF0gPSBQQ0kgQWRkcmVzcyBvZiBCQVJbaV0gb24gdGFyZ2V0IGludGVyZmFjZQorICogW2kqMisxXSA9IEFjY2Vzc2luZyBQQ0kgYWRkcmVzcyBvZiBCQVJbaV0gcmVzdWx0IGluIHRoaXMgQU1CQSBhZGRyZXNzCisgKgorICoKKyAqIGlycV9tYXNrCisgKiA9PT09PT09PQorICoKKyAqIExpbWl0IHdoaWNoIFBDSSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLiAwPURpc2FibGUsIDE9RW5hYmxlLiBCeSBkZWZhdWx0CisgKiBhbGwgYXJlIGVuYWJsZWQuIFVzZSB0aGlzIHdoZW4gUENJIGludGVycnVwdCBwaW5zIGFyZSBmbG9hdGluZyBvbiBQQ0IuCisgKiBpbnQsIGxlbj00LgorICogIGJpdDAgPSBQQ0kgSU5UQSMKKyAqICBiaXQxID0gUENJIElOVEIjCisgKiAgYml0MiA9IFBDSSBJTlRDIworICogIGJpdDMgPSBQQ0kgSU5URCMKKyAqCisgKgorICogcmVzZXQKKyAqID09PT09CisgKgorICogRm9yY2UgUENJIHJlc2V0IG9uIHN0YXJ0dXAuIGludCwgbGVuPTQKKyAqLworCisvKiBFbmFibGUgRGVidWdnaW5nIENvbmZpZ3VyYXRpb24gU3BhY2UgQWNjZXNzICovCisjdW5kZWYgR1JQQ0kyX0RFQlVHX0NGR0FDQ0VTUworCisvKgorICogR1JQQ0kyIEFQQiBSZWdpc3RlciBNQVAKKyAqLworc3RydWN0IGdycGNpMl9yZWdzIHsKKwl1bnNpZ25lZCBpbnQgY3RybDsJCS8qIDB4MDAgQ29udHJvbCAqLworCXVuc2lnbmVkIGludCBzdHNfY2FwOwkJLyogMHgwNCBTdGF0dXMgLyBDYXBhYmlsaXRpZXMgKi8KKwlpbnQgcmVzMTsJCQkvKiAweDA4ICovCisJdW5zaWduZWQgaW50IGlvX21hcDsJCS8qIDB4MEMgSS9PIE1hcCBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IGRtYV9jdHJsOwkJLyogMHgxMCBETUEgKi8KKwl1bnNpZ25lZCBpbnQgZG1hX2JkYmFzZTsJLyogMHgxNCBETUEgKi8KKwlpbnQgcmVzMlsyXTsJCQkvKiAweDE4ICovCisJdW5zaWduZWQgaW50IGJhcnNbNl07CQkvKiAweDIwIHJlYWQtb25seSBQQ0kgQkFScyAqLworCWludCByZXMzWzJdOwkJCS8qIDB4MzggKi8KKwl1bnNpZ25lZCBpbnQgYWhibXN0X21hcFsxNl07CS8qIDB4NDAgQUhCLT5QQ0kgTWFwIHBlciBBSEIgTWFzdGVyICovCisKKwkvKiBQQ0kgVHJhY2UgQnVmZmVyIFJlZ2lzdGVycyAoT1BUSU9OQUwpICovCisJdW5zaWduZWQgaW50IHRfY3RybDsJCS8qIDB4ODAgKi8KKwl1bnNpZ25lZCBpbnQgdF9jbnQ7CQkvKiAweDg0ICovCisJdW5zaWduZWQgaW50IHRfYWRwYXQ7CQkvKiAweDg4ICovCisJdW5zaWduZWQgaW50IHRfYWRtYXNrOwkJLyogMHg4QyAqLworCXVuc2lnbmVkIGludCB0X3NpZ3BhdDsJCS8qIDB4OTAgKi8KKwl1bnNpZ25lZCBpbnQgdF9zaWdtYXNrOwkJLyogMHg5NCAqLworCXVuc2lnbmVkIGludCB0X2Fkc3RhdGU7CQkvKiAweDk4ICovCisJdW5zaWduZWQgaW50IHRfc2lnc3RhdGU7CS8qIDB4OUMgKi8KK307CisKKyNkZWZpbmUgUkVHTE9BRChhKQkoYmUzMl90b19jcHUoX19yYXdfcmVhZGwoJihhKSkpKQorI2RlZmluZSBSRUdTVE9SRShhLCB2KQkoX19yYXdfd3JpdGVsKGNwdV90b19iZTMyKHYpLCAmKGEpKSkKKworI2RlZmluZSBDVFJMX0JVU19CSVQgMTYKKworI2RlZmluZSBDVFJMX1JFU0VUICgxPDwzMSkKKyNkZWZpbmUgQ1RSTF9TSSAoMTw8MjcpCisjZGVmaW5lIENUUkxfUEUgKDE8PDI2KQorI2RlZmluZSBDVFJMX0VJICgxPDwyNSkKKyNkZWZpbmUgQ1RSTF9FUiAoMTw8MjQpCisjZGVmaW5lIENUUkxfQlVTICgweGZmPDxDVFJMX0JVU19CSVQpCisjZGVmaW5lIENUUkxfSE9TVElOVCAweGYKKworI2RlZmluZSBTVFNfSE9TVF9CSVQJMzEKKyNkZWZpbmUgU1RTX01TVF9CSVQJMzAKKyNkZWZpbmUgU1RTX1RBUl9CSVQJMjkKKyNkZWZpbmUgU1RTX0RNQV9CSVQJMjgKKyNkZWZpbmUgU1RTX0RJX0JJVAkyNworI2RlZmluZSBTVFNfSElfQklUCTI2CisjZGVmaW5lIFNUU19JUlFNT0RFX0JJVAkyNAorI2RlZmluZSBTVFNfVFJBQ0VfQklUCTIzCisjZGVmaW5lIFNUU19DRkdFUlJWQUxJRF9CSVQgMjAKKyNkZWZpbmUgU1RTX0NGR0VSUl9CSVQJMTkKKyNkZWZpbmUgU1RTX0lOVFRZUEVfQklUCTEyCisjZGVmaW5lIFNUU19JTlRTVFNfQklUCTgKKyNkZWZpbmUgU1RTX0ZERVBUSF9CSVQJMgorI2RlZmluZSBTVFNfRk5VTV9CSVQJMAorCisjZGVmaW5lIFNUU19IT1NUCSgxPDxTVFNfSE9TVF9CSVQpCisjZGVmaW5lIFNUU19NU1QJCSgxPDxTVFNfTVNUX0JJVCkKKyNkZWZpbmUgU1RTX1RBUgkJKDE8PFNUU19UQVJfQklUKQorI2RlZmluZSBTVFNfRE1BCQkoMTw8U1RTX0RNQV9CSVQpCisjZGVmaW5lIFNUU19ESQkJKDE8PFNUU19ESV9CSVQpCisjZGVmaW5lIFNUU19ISQkJKDE8PFNUU19ISV9CSVQpCisjZGVmaW5lIFNUU19JUlFNT0RFCSgweDM8PFNUU19JUlFNT0RFX0JJVCkKKyNkZWZpbmUgU1RTX1RSQUNFCSgxPDxTVFNfVFJBQ0VfQklUKQorI2RlZmluZSBTVFNfQ0ZHRVJSVkFMSUQJKDE8PFNUU19DRkdFUlJWQUxJRF9CSVQpCisjZGVmaW5lIFNUU19DRkdFUlIJKDE8PFNUU19DRkdFUlJfQklUKQorI2RlZmluZSBTVFNfSU5UVFlQRQkoMHgzZjw8U1RTX0lOVFRZUEVfQklUKQorI2RlZmluZSBTVFNfSU5UU1RTCSgweGY8PFNUU19JTlRTVFNfQklUKQorI2RlZmluZSBTVFNfRkRFUFRICSgweDc8PFNUU19GREVQVEhfQklUKQorI2RlZmluZSBTVFNfRk5VTQkoMHgzPDxTVFNfRk5VTV9CSVQpCisKKyNkZWZpbmUgU1RTX0lTWVNFUlIJKDE8PDE3KQorI2RlZmluZSBTVFNfSURNQQkoMTw8MTYpCisjZGVmaW5lIFNUU19JRE1BRVJSCSgxPDwxNSkKKyNkZWZpbmUgU1RTX0lNU1RBQlJUCSgxPDwxNCkKKyNkZWZpbmUgU1RTX0lUR1RBQlJUCSgxPDwxMykKKyNkZWZpbmUgU1RTX0lQQVJFUlIJKDE8PDEyKQorCisjZGVmaW5lIFNUU19FUlJfSVJRIChTVFNfSVNZU0VSUiB8IFNUU19JTVNUQUJSVCB8IFNUU19JVEdUQUJSVCB8IFNUU19JUEFSRVJSKQorCitzdHJ1Y3QgZ3JwY2kyX2JkX2NoYW4geworCXVuc2lnbmVkIGludCBjdHJsOwkvKiAweDAwIERNQSBDb250cm9sICovCisJdW5zaWduZWQgaW50IG5jaGFuOwkvKiAweDA0IE5leHQgRE1BIENoYW5uZWwgQWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBuYmQ7CS8qIDB4MDggTmV4dCBEYXRhIERlc2NyaXB0b3IgaW4gY2hhbiAqLworCXVuc2lnbmVkIGludCByZXM7CS8qIDB4MEMgUmVzZXJ2ZWQgKi8KK307CisKKyNkZWZpbmUgQkRfQ0hBTl9FTgkJMHg4MDAwMDAwMAorI2RlZmluZSBCRF9DSEFOX1RZUEUJCTB4MDAzMDAwMDAKKyNkZWZpbmUgQkRfQ0hBTl9CRENOVAkJMHgwMDAwZmZmZgorI2RlZmluZSBCRF9DSEFOX0VOX0JJVAkJMzEKKyNkZWZpbmUgQkRfQ0hBTl9UWVBFX0JJVAkyMAorI2RlZmluZSBCRF9DSEFOX0JEQ05UX0JJVAkwCisKK3N0cnVjdCBncnBjaTJfYmRfZGF0YSB7CisJdW5zaWduZWQgaW50IGN0cmw7CS8qIDB4MDAgRE1BIERhdGEgQ29udHJvbCAqLworCXVuc2lnbmVkIGludCBwY2lfYWRyOwkvKiAweDA0IFBDSSBTdGFydCBBZGRyZXNzICovCisJdW5zaWduZWQgaW50IGFoYl9hZHI7CS8qIDB4MDggQUhCIFN0YXJ0IGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgbmV4dDsJLyogMHgwQyBOZXh0IERhdGEgRGVzY3JpcHRvciBpbiBjaGFuICovCit9OworCisjZGVmaW5lIEJEX0RBVEFfRU4JCTB4ODAwMDAwMDAKKyNkZWZpbmUgQkRfREFUQV9JRQkJMHg0MDAwMDAwMAorI2RlZmluZSBCRF9EQVRBX0RSCQkweDIwMDAwMDAwCisjZGVmaW5lIEJEX0RBVEFfVFlQRQkJMHgwMDMwMDAwMAorI2RlZmluZSBCRF9EQVRBX0VSCQkweDAwMDgwMDAwCisjZGVmaW5lIEJEX0RBVEFfTEVOCQkweDAwMDBmZmZmCisjZGVmaW5lIEJEX0RBVEFfRU5fQklUCQkzMQorI2RlZmluZSBCRF9EQVRBX0lFX0JJVAkJMzAKKyNkZWZpbmUgQkRfREFUQV9EUl9CSVQJCTI5CisjZGVmaW5lIEJEX0RBVEFfVFlQRV9CSVQJMjAKKyNkZWZpbmUgQkRfREFUQV9FUl9CSVQJCTE5CisjZGVmaW5lIEJEX0RBVEFfTEVOX0JJVAkJMAorCisvKiBHUlBDSTIgQ2FwYWJpbGl0eSAqLworc3RydWN0IGdycGNpMl9jYXBfZmlyc3QgeworCXVuc2lnbmVkIGludCBjdHJsOworCXVuc2lnbmVkIGludCBwY2kyYWhiX21hcFs2XTsKKwl1bnNpZ25lZCBpbnQgZXh0MmFoYl9tYXA7CisJdW5zaWduZWQgaW50IGlvX21hcDsKKwl1bnNpZ25lZCBpbnQgcGNpYmFyX3NpemVbNl07Cit9OworI2RlZmluZSBDQVA5X0NUUkxfT0ZTIDAKKyNkZWZpbmUgQ0FQOV9CQVJfT0ZTIDB4NAorI2RlZmluZSBDQVA5X0lPTUFQX09GUyAweDIwCisjZGVmaW5lIENBUDlfQkFSU0laRV9PRlMgMHgyNAorCitzdHJ1Y3QgZ3JwY2kyX3ByaXYgeworCXN0cnVjdCBsZW9uX3BjaV9pbmZvCWluZm87IC8qIG11c3QgYmUgb24gdG9wIG9mIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0IGdycGNpMl9yZWdzCSpyZWdzOworCWNoYXIJCQlpcnE7CisJY2hhcgkJCWlycV9tb2RlOyAvKiBJUlEgTW9kZSBmcm9tIENBUFNUUyBSRUcgKi8KKwljaGFyCQkJYnRfZW5hYmxlZDsKKwljaGFyCQkJZG9fcmVzZXQ7CisJY2hhcgkJCWlycV9tYXNrOworCXUzMgkJCXBjaWlkOyAvKiBQQ0kgSUQgb2YgSG9zdCAqLworCXVuc2lnbmVkIGNoYXIJCWlycV9tYXBbNF07CisKKwkvKiBWaXJ0dWFsIElSUSBudW1iZXJzICovCisJdW5zaWduZWQgaW50CQl2aXJxX2VycjsKKwl1bnNpZ25lZCBpbnQJCXZpcnFfZG1hOworCisJLyogQUhCIFBDSSBXaW5kb3dzICovCisJdW5zaWduZWQgbG9uZwkJcGNpX2FyZWE7CS8qIE1FTU9SWSAqLworCXVuc2lnbmVkIGxvbmcJCXBjaV9hcmVhX2VuZDsKKwl1bnNpZ25lZCBsb25nCQlwY2lfaW87CQkvKiBJL08gKi8KKwl1bnNpZ25lZCBsb25nCQlwY2lfY29uZjsJLyogQ09ORklHVVJBVElPTiAqLworCXVuc2lnbmVkIGxvbmcJCXBjaV9jb25mX2VuZDsKKwl1bnNpZ25lZCBsb25nCQlwY2lfaW9fdmE7CisKKwlzdHJ1Y3QgZ3JwY2kyX2JhcmNmZwl0Z3RiYXJzWzZdOworfTsKKworREVGSU5FX1NQSU5MT0NLKGdycGNpMl9kZXZfbG9jayk7CitzdHJ1Y3QgZ3JwY2kyX3ByaXYgKmdycGNpMnByaXY7CisKK2ludCBncnBjaTJfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZGV2LT5idXMtPnN5c2RhdGE7CisJaW50IGlycV9ncm91cDsKKworCS8qIFVzZSBkZWZhdWx0IElSUSBkZWNvZGluZyBvbiBQQ0kgQlVTMCBhY2NvcmRpbmcgc2xvdCBudW1iZXJpbmcgKi8KKwlpcnFfZ3JvdXAgPSBzbG90ICYgMHgzOworCXBpbiA9ICgocGluIC0gMSkgKyBpcnFfZ3JvdXApICYgMHgzOworCisJcmV0dXJuIHByaXYtPmlycV9tYXBbcGluXTsKK30KKworc3RhdGljIGludCBncnBjaTJfY2ZnX3IzMihzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBidXMsCisJCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHUzMiAqdmFsKQoreworCXVuc2lnbmVkIGludCAqcGNpX2NvbmY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdG1wOworCisJaWYgKHdoZXJlICYgMHgzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChidXMgPT0gMCAmJiBQQ0lfU0xPVChkZXZmbikgIT0gMCkKKwkJZGV2Zm4gKz0gKDB4OCAqIDYpOworCisJLyogU2VsZWN0IGJ1cyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZncnBjaTJfZGV2X2xvY2ssIGZsYWdzKTsKKwlSRUdTVE9SRShwcml2LT5yZWdzLT5jdHJsLCAoUkVHTE9BRChwcml2LT5yZWdzLT5jdHJsKSAmIH4oMHhmZiA8PCAxNikpIHwKKwkJCQkgICAoYnVzIDw8IDE2KSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7CisKKwkvKiBjbGVhciBvbGQgc3RhdHVzICovCisJUkVHU1RPUkUocHJpdi0+cmVncy0+c3RzX2NhcCwgKFNUU19DRkdFUlIgfCBTVFNfQ0ZHRVJSVkFMSUQpKTsKKworCXBjaV9jb25mID0gKHVuc2lnbmVkIGludCAqKSAocHJpdi0+cGNpX2NvbmYgfAorCQkJCQkJKGRldmZuIDw8IDgpIHwgKHdoZXJlICYgMHhmYykpOworCXRtcCA9IExFT04zX0JZUEFTU19MT0FEX1BBKHBjaV9jb25mKTsKKworCS8qIFdhaXQgdW50aWwgR1JQQ0kyIHNpZ25hbHMgdGhhdCBDRkcgYWNjZXNzIGlzIGRvbmUsIGl0IHNob3VsZCBiZQorCSAqIGRvbmUgaW5zdGFudGFuZW91c2x5IHVubGVzcyBhIERNQSBvcGVyYXRpb24gaXMgb25nb2luZy4uLgorCSAqLworCXdoaWxlICgoUkVHTE9BRChwcml2LT5yZWdzLT5zdHNfY2FwKSAmIFNUU19DRkdFUlJWQUxJRCkgPT0gMCkKKwkJOworCisJaWYgKFJFR0xPQUQocHJpdi0+cmVncy0+c3RzX2NhcCkgJiBTVFNfQ0ZHRVJSKSB7CisJCSp2YWwgPSAweGZmZmZmZmZmOworCX0gZWxzZSB7CisJCS8qIEJ1cyBhbHdheXMgbGl0dGxlIGVuZGlhbiAodW5hZmZlY3RlZCBieSBieXRlLXN3YXBwaW5nKSAqLworCQkqdmFsID0gZmxpcF9kd29yZCh0bXApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdycGNpMl9jZmdfcjE2KHN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGJ1cywKKwkJCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgdTMyICp2YWwpCit7CisJdTMyIHY7CisJaW50IHJldDsKKworCWlmICh3aGVyZSAmIDB4MSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gZ3JwY2kyX2NmZ19yMzIocHJpdiwgYnVzLCBkZXZmbiwgd2hlcmUgJiB+MHgzLCAmdik7CisJKnZhbCA9IDB4ZmZmZiAmICh2ID4+ICg4ICogKHdoZXJlICYgMHgzKSkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JwY2kyX2NmZ19yOChzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBidXMsCisJCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHUzMiAqdmFsKQoreworCXUzMiB2OworCWludCByZXQ7CisKKwlyZXQgPSBncnBjaTJfY2ZnX3IzMihwcml2LCBidXMsIGRldmZuLCB3aGVyZSAmIH4weDMsICZ2KTsKKwkqdmFsID0gMHhmZiAmICh2ID4+ICg4ICogKHdoZXJlICYgMykpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JwY2kyX2NmZ193MzIoc3RydWN0IGdycGNpMl9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgYnVzLAorCQkJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MzIgdmFsKQoreworCXVuc2lnbmVkIGludCAqcGNpX2NvbmY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh3aGVyZSAmIDB4MykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYnVzID09IDAgJiYgUENJX1NMT1QoZGV2Zm4pICE9IDApCisJCWRldmZuICs9ICgweDggKiA2KTsKKworCS8qIFNlbGVjdCBidXMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7CisJUkVHU1RPUkUocHJpdi0+cmVncy0+Y3RybCwgKFJFR0xPQUQocHJpdi0+cmVncy0+Y3RybCkgJiB+KDB4ZmYgPDwgMTYpKSB8CisJCQkJICAgKGJ1cyA8PCAxNikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworCisJLyogY2xlYXIgb2xkIHN0YXR1cyAqLworCVJFR1NUT1JFKHByaXYtPnJlZ3MtPnN0c19jYXAsIChTVFNfQ0ZHRVJSIHwgU1RTX0NGR0VSUlZBTElEKSk7CisKKwlwY2lfY29uZiA9ICh1bnNpZ25lZCBpbnQgKikgKHByaXYtPnBjaV9jb25mIHwKKwkJCQkJCShkZXZmbiA8PCA4KSB8ICh3aGVyZSAmIDB4ZmMpKTsKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEocGNpX2NvbmYsIGZsaXBfZHdvcmQodmFsKSk7CisKKwkvKiBXYWl0IHVudGlsIEdSUENJMiBzaWduYWxzIHRoYXQgQ0ZHIGFjY2VzcyBpcyBkb25lLCBpdCBzaG91bGQgYmUKKwkgKiBkb25lIGluc3RhbnRhbmVvdXNseSB1bmxlc3MgYSBETUEgb3BlcmF0aW9uIGlzIG9uZ29pbmcuLi4KKwkgKi8KKwl3aGlsZSAoKFJFR0xPQUQocHJpdi0+cmVncy0+c3RzX2NhcCkgJiBTVFNfQ0ZHRVJSVkFMSUQpID09IDApCisJCTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdycGNpMl9jZmdfdzE2KHN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGJ1cywKKwkJCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgdTMyIHZhbCkKK3sKKwlpbnQgcmV0OworCXUzMiB2OworCisJaWYgKHdoZXJlICYgMHgxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSBncnBjaTJfY2ZnX3IzMihwcml2LCBidXMsIGRldmZuLCB3aGVyZSZ+MywgJnYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJdiA9ICh2ICYgfigweGZmZmYgPDwgKDggKiAod2hlcmUgJiAweDMpKSkpIHwKKwkgICAgKCgweGZmZmYgJiB2YWwpIDw8ICg4ICogKHdoZXJlICYgMHgzKSkpOworCXJldHVybiBncnBjaTJfY2ZnX3czMihwcml2LCBidXMsIGRldmZuLCB3aGVyZSAmIH4weDMsIHYpOworfQorCitzdGF0aWMgaW50IGdycGNpMl9jZmdfdzgoc3RydWN0IGdycGNpMl9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgYnVzLAorCQkJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MzIgdmFsKQoreworCWludCByZXQ7CisJdTMyIHY7CisKKwlyZXQgPSBncnBjaTJfY2ZnX3IzMihwcml2LCBidXMsIGRldmZuLCB3aGVyZSAmIH4weDMsICZ2KTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisJdiA9ICh2ICYgfigweGZmIDw8ICg4ICogKHdoZXJlICYgMHgzKSkpKSB8CisJICAgICgoMHhmZiAmIHZhbCkgPDwgKDggKiAod2hlcmUgJiAweDMpKSk7CisJcmV0dXJuIGdycGNpMl9jZmdfdzMyKHByaXYsIGJ1cywgZGV2Zm4sIHdoZXJlICYgfjB4Mywgdik7Cit9CisKKy8qIFJlYWQgZnJvbSBDb25maWd1cmF0aW9uIFNwYWNlLiBXaGVuIGVudGVyaW5nIGhlcmUgdGhlIFBDSSBsYXllciBoYXMgdGFrZW4KKyAqIHRoZSBwY2lfbG9jayBzcGlubG9jayBhbmQgSVJRIGlzIG9mZi4KKyAqLworc3RhdGljIGludCBncnBjaTJfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCit7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZ3JwY2kycHJpdjsKKwl1bnNpZ25lZCBpbnQgYnVzbm8gPSBidXMtPm51bWJlcjsKKwlpbnQgcmV0OworCisJaWYgKFBDSV9TTE9UKGRldmZuKSA+IDE1IHx8IChQQ0lfU0xPVChkZXZmbikgPT0gMCAmJiBidXNubyA9PSAwKSkgeworCQkqdmFsID0gfjA7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJcmV0ID0gZ3JwY2kyX2NmZ19yOChwcml2LCBidXNubywgZGV2Zm4sIHdoZXJlLCB2YWwpOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldCA9IGdycGNpMl9jZmdfcjE2KHByaXYsIGJ1c25vLCBkZXZmbiwgd2hlcmUsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcmV0ID0gZ3JwY2kyX2NmZ19yMzIocHJpdiwgYnVzbm8sIGRldmZuLCB3aGVyZSwgdmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisjaWZkZWYgR1JQQ0kyX0RFQlVHX0NGR0FDQ0VTUworCXByaW50ayhLRVJOX0lORk8gImdycGNpMl9yZWFkX2NvbmZpZzogWyUwMng6JTAyeDoleF0gb2ZzPSVkIHZhbD0leCAiCisJCSJzaXplPSVkXG4iLCBidXNubywgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbiksIHdoZXJlLAorCQkqdmFsLCBzaXplKTsKKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KKworLyogV3JpdGUgdG8gQ29uZmlndXJhdGlvbiBTcGFjZS4gV2hlbiBlbnRlcmluZyBoZXJlIHRoZSBQQ0kgbGF5ZXIgaGFzIHRha2VuCisgKiB0aGUgcGNpX2xvY2sgc3BpbmxvY2sgYW5kIElSUSBpcyBvZmYuCisgKi8KK3N0YXRpYyBpbnQgZ3JwY2kyX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICAgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYgPSBncnBjaTJwcml2OworCXVuc2lnbmVkIGludCBidXNubyA9IGJ1cy0+bnVtYmVyOworCisJaWYgKFBDSV9TTE9UKGRldmZuKSA+IDE1IHx8IChQQ0lfU0xPVChkZXZmbikgPT0gMCAmJiBidXNubyA9PSAwKSkKKwkJcmV0dXJuIDA7CisKKyNpZmRlZiBHUlBDSTJfREVCVUdfQ0ZHQUNDRVNTCisJcHJpbnRrKEtFUk5fSU5GTyAiZ3JwY2kyX3dyaXRlX2NvbmZpZzogWyUwMng6JTAyeDoleF0gb2ZzPSVkIHNpemU9JWQgIgorCQkidmFsPSV4XG4iLCBidXNubywgUENJX1NMT1QoZGV2Zm4pLCBQQ0lfRlVOQyhkZXZmbiksCisJCXdoZXJlLCBzaXplLCB2YWwpOworI2VuZGlmCisKKwlzd2l0Y2ggKHNpemUpIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIDE6CisJCXJldHVybiBncnBjaTJfY2ZnX3c4KHByaXYsIGJ1c25vLCBkZXZmbiwgd2hlcmUsIHZhbCk7CisJY2FzZSAyOgorCQlyZXR1cm4gZ3JwY2kyX2NmZ193MTYocHJpdiwgYnVzbm8sIGRldmZuLCB3aGVyZSwgdmFsKTsKKwljYXNlIDQ6CisJCXJldHVybiBncnBjaTJfY2ZnX3czMihwcml2LCBidXNubywgZGV2Zm4sIHdoZXJlLCB2YWwpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIGdycGNpMl9vcHMgPSB7CisJLnJlYWQgPQkJZ3JwY2kyX3JlYWRfY29uZmlnLAorCS53cml0ZSA9CWdycGNpMl93cml0ZV9jb25maWcsCit9OworCisvKiBHRU5JUlEgSVJRIGNoaXAgaW1wbGVtZW50YXRpb24gZm9yIEdSUENJMiBpcnFtb2RlPTAuLjIuIEluIGNvbmZpZ3VyYXRpb24KKyAqIDMgd2hlcmUgYWxsIFBDSSBJbnRlcnJ1cHRzIGhhcyBhIHNlcGFyYXRlIElSUSBvbiB0aGUgc3lzdGVtIElSUSBjb250cm9sbGVyCisgKiB0aGlzIGlzIG5vdCBuZWVkZWQgYW5kIHRoZSBzdGFuZGFyZCBJUlEgY29udHJvbGxlciBjYW4gYmUgdXNlZC4KKyAqLworCitzdGF0aWMgdm9pZCBncnBjaTJfbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGlycWlkeDsKKwlzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYgPSBncnBjaTJwcml2OworCisJaXJxaWR4ID0gKHVuc2lnbmVkIGludClkYXRhLT5jaGlwX2RhdGEgLSAxOworCWlmIChpcnFpZHggPiAzKSAvKiBvbmx5IG1hc2sgUENJIGludGVycnVwdHMgaGVyZSAqLworCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7CisJUkVHU1RPUkUocHJpdi0+cmVncy0+Y3RybCwgUkVHTE9BRChwcml2LT5yZWdzLT5jdHJsKSAmIH4oMSA8PCBpcnFpZHgpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncnBjaTJfZGV2X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgZ3JwY2kyX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGlycWlkeDsKKwlzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYgPSBncnBjaTJwcml2OworCisJaXJxaWR4ID0gKHVuc2lnbmVkIGludClkYXRhLT5jaGlwX2RhdGEgLSAxOworCWlmIChpcnFpZHggPiAzKSAvKiBvbmx5IHVubWFzayBQQ0kgaW50ZXJydXB0cyBoZXJlICovCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncnBjaTJfZGV2X2xvY2ssIGZsYWdzKTsKKwlSRUdTVE9SRShwcml2LT5yZWdzLT5jdHJsLCBSRUdMT0FEKHByaXYtPnJlZ3MtPmN0cmwpIHwgKDEgPDwgaXJxaWR4KSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3JwY2kyX3N0YXJ0dXBfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlncnBjaTJfdW5tYXNrX2lycShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ3JwY2kyX3NodXRkb3duX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZ3JwY2kyX21hc2tfaXJxKGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdycGNpMl9pcnEgPSB7CisJLm5hbWUJCT0gImdycGNpMiIsCisJLmlycV9zdGFydHVwCT0gZ3JwY2kyX3N0YXJ0dXBfaXJxLAorCS5pcnFfc2h1dGRvd24JPSBncnBjaTJfc2h1dGRvd25faXJxLAorCS5pcnFfbWFzawk9IGdycGNpMl9tYXNrX2lycSwKKwkuaXJxX3VubWFzawk9IGdycGNpMl91bm1hc2tfaXJxLAorfTsKKworLyogSGFuZGxlIG9uZSBvciBtdWx0aXBsZSBJUlFzIGZyb20gdGhlIFBDSSBjb3JlICovCitzdGF0aWMgdm9pZCBncnBjaTJfcGNpX2Zsb3dfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYgPSBncnBjaTJwcml2OworCWludCBpLCBhY2sgPSAwOworCXVuc2lnbmVkIGludCBjdHJsLCBzdHNfY2FwLCBwY2lfaW50czsKKworCWN0cmwgPSBSRUdMT0FEKHByaXYtPnJlZ3MtPmN0cmwpOworCXN0c19jYXAgPSBSRUdMT0FEKHByaXYtPnJlZ3MtPnN0c19jYXApOworCisJLyogRXJyb3IgSW50ZXJydXB0PyAqLworCWlmIChzdHNfY2FwICYgU1RTX0VSUl9JUlEpIHsKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKHByaXYtPnZpcnFfZXJyKTsKKwkJYWNrID0gMTsKKwl9CisKKwkvKiBQQ0kgSW50ZXJydXB0PyAqLworCXBjaV9pbnRzID0gKCh+c3RzX2NhcCkgPj4gU1RTX0lOVFNUU19CSVQpICYgY3RybCAmIENUUkxfSE9TVElOVDsKKwlpZiAocGNpX2ludHMpIHsKKwkJLyogQ2FsbCByZXNwZWN0aXZlIFBDSSBJbnRlcnJ1cHQgaGFuZGxlciAqLworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlpZiAocGNpX2ludHMgJiAoMSA8PCBpKSkKKwkJCQlnZW5lcmljX2hhbmRsZV9pcnEocHJpdi0+aXJxX21hcFtpXSk7CisJCX0KKwkJYWNrID0gMTsKKwl9CisKKwkvKgorCSAqIERlY29kZSBETUEgSW50ZXJydXB0IG9ubHkgd2hlbiBzaGFyZWQgd2l0aCBFcnIgYW5kIFBDSSBJTlRYIywgd2hlbgorCSAqIHRoZSBETUEgaXMgYSB1bmlxdWUgSVJRIHRoZSBETUEgaW50ZXJydXB0cyBkb2Vzbid0IGVuZCB1cCBoZXJlLCB0aGV5CisJICogZ29lcyBkaXJlY3RseSB0byBETUEgSVNSLgorCSAqLworCWlmICgocHJpdi0+aXJxX21vZGUgPT0gMCkgJiYgKHN0c19jYXAgJiAoU1RTX0lETUEgfCBTVFNfSURNQUVSUikpKSB7CisJCWdlbmVyaWNfaGFuZGxlX2lycShwcml2LT52aXJxX2RtYSk7CisJCWFjayA9IDE7CisJfQorCisJLyoKKwkgKiBDYWxsICJmaXJzdCBsZXZlbCIgSVJRIGNoaXAgZW5kLW9mLWlycSBoYW5kbGVyLiBJdCB3aWxsIEFDSyBMRU9OIElSUQorCSAqIENvbnRyb2xsZXIsIHRoaXMgbXVzdCBiZSBkb25lIGFmdGVyIElSUSBzb3VyY2VzIGhhdmUgYmVlbiBoYW5kbGVkIHRvCisJICogYXZvaWQgZG91YmxlIElSUSBnZW5lcmF0aW9uCisJICovCisJaWYgKGFjaykKKwkJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2VvaSgmZGVzYy0+aXJxX2RhdGEpOworfQorCisvKiBDcmVhdGUgYSB2aXJ0dWFsIElSUSAqLworc3RhdGljIHVuc2lnbmVkIGludCBncnBjaTJfYnVpbGRfZGV2aWNlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCB2aXJxID0gMCwgcGlsOworCisJcGlsID0gMSA8PCA4OworCXZpcnEgPSBpcnFfYWxsb2MoaXJxLCBwaWwpOworCWlmICh2aXJxID09IDApCisJCWdvdG8gb3V0OworCisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUodmlycSwgJmdycGNpMl9pcnEsIGhhbmRsZV9zaW1wbGVfaXJxLAorCQkJCSAgICAgICJwY2lsdmwiKTsKKwlpcnFfc2V0X2NoaXBfZGF0YSh2aXJxLCAodm9pZCAqKWlycSk7CisKK291dDoKKwlyZXR1cm4gdmlycTsKK30KKwordm9pZCBncnBjaTJfaHdfaW5pdChzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYpCit7CisJdTMyIGFoYmFkciwgcGNpYWRyLCBiYXJfc3osIGNhcHB0ciwgaW9fbWFwLCBkYXRhOworCXN0cnVjdCBncnBjaTJfcmVncyAqcmVncyA9IHByaXYtPnJlZ3M7CisJaW50IGk7CisJc3RydWN0IGdycGNpMl9iYXJjZmcgKmJhcmNmZyA9IHByaXYtPnRndGJhcnM7CisKKwkvKiBSZXNldCBhbnkgZWFybGllciBzZXR1cCAqLworCWlmIChwcml2LT5kb19yZXNldCkgeworCQlwcmludGsoS0VSTl9JTkZPICJHUlBDSTI6IFJlc2V0dGluZyBQQ0kgYnVzXG4iKTsKKwkJUkVHU1RPUkUocmVncy0+Y3RybCwgQ1RSTF9SRVNFVCk7CisJCXNzbGVlcCgxKTsgLyogV2FpdCBmb3IgYm9hcmRzIHRvIHNldHRsZSAqLworCX0KKwlSRUdTVE9SRShyZWdzLT5jdHJsLCAwKTsKKwlSRUdTVE9SRShyZWdzLT5zdHNfY2FwLCB+MCk7IC8qIENsZWFyIFN0YXR1cyAqLworCVJFR1NUT1JFKHJlZ3MtPmRtYV9jdHJsLCAwKTsKKwlSRUdTVE9SRShyZWdzLT5kbWFfYmRiYXNlLCAwKTsKKworCS8qIFRyYW5zbGF0ZSBJL08gYWNjZXNzZXMgdG8gMCwgSS9PIFNwYWNlIGFsd2F5cyBAIFBDSSBsb3cgNjRLYnl0ZXMgKi8KKwlSRUdTVE9SRShyZWdzLT5pb19tYXAsIFJFR0xPQUQocmVncy0+aW9fbWFwKSAmIDB4MDAwMGZmZmYpOworCisJLyogc2V0IDE6MSBtYXBwaW5nIGJldHdlZW4gQUhCIC0+IFBDSSBtZW1vcnkgc3BhY2UsIGZvciBhbGwgTWFzdGVycworCSAqIEVhY2ggQUhCIG1hc3RlciBoYXMgaXQncyBvd24gbWFwcGluZyByZWdpc3RlcnMuIE1heCAxNiBBSEIgbWFzdGVycy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJUkVHU1RPUkUocmVncy0+YWhibXN0X21hcFtpXSwgcHJpdi0+cGNpX2FyZWEpOworCisJLyogR2V0IHRoZSBHUlBDSTIgSG9zdCBQQ0kgSUQgKi8KKwlncnBjaTJfY2ZnX3IzMihwcml2LCAwLCAwLCBQQ0lfVkVORE9SX0lELCAmcHJpdi0+cGNpaWQpOworCisJLyogR2V0IGFkZHJlc3MgdG8gZmlyc3QgKGFsd2F5cyBkZWZpbmVkKSBjYXBhYmlsaXR5IHN0cnVjdHVyZSAqLworCWdycGNpMl9jZmdfcjgocHJpdiwgMCwgMCwgUENJX0NBUEFCSUxJVFlfTElTVCwgJmNhcHB0cik7CisKKwkvKiBFbmFibGUvRGlzYWJsZSBCeXRlIHR3aXN0aW5nICovCisJZ3JwY2kyX2NmZ19yMzIocHJpdiwgMCwgMCwgY2FwcHRyK0NBUDlfSU9NQVBfT0ZTLCAmaW9fbWFwKTsKKwlpb19tYXAgPSAoaW9fbWFwICYgfjB4MSkgfCAocHJpdi0+YnRfZW5hYmxlZCA/IDEgOiAwKTsKKwlncnBjaTJfY2ZnX3czMihwcml2LCAwLCAwLCBjYXBwdHIrQ0FQOV9JT01BUF9PRlMsIGlvX21hcCk7CisKKwkvKiBTZXR1cCB0aGUgSG9zdCdzIFBDSSBUYXJnZXQgQkFScyBmb3Igb3RoZXIgcGVyaXBoZXJhbHMgdG8gYWNjZXNzLAorCSAqIGFuZCBkbyBETUEgdG8gdGhlIGhvc3QncyBtZW1vcnkuIFRoZSB0YXJnZXQgQkFScyBjYW4gYmUgc2l6ZWQgYW5kCisJICogZW5hYmxlZCBpbmRpdmlkdWFsbHkuCisJICoKKwkgKiBVc2VyIG1heSBzZXQgY3VzdG9tIHRhcmdldCBCQVJzLCBidXQgZGVmYXVsdCBpczoKKwkgKiBUaGUgZmlyc3QgQkFScyBpcyB1c2VkIHRvIG1hcCBrZXJuZWwgbG93IChETUEgaXMgcGFydCBvZiBub3JtYWwKKwkgKiByZWdpb24gb24gc3BhcmMgd2hpY2ggaXMgU1JNTVVfTUFYTUVNIGJpZykgbWFpbiBtZW1vcnkgMToxIHRvIHRoZQorCSAqIFBDSSBidXMsIHRoZSBvdGhlciBCQVJzIGFyZSBkaXNhYmxlZC4gV2UgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IEJBUgorCSAqIGlzIGFsd2F5cyBhdmFpbGFibGUuCisJICovCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlpZiAoYmFyY2ZnW2ldLnBjaWFkciAhPSB+MCAmJiBiYXJjZmdbaV0uYWhiYWRyICE9IH4wKSB7CisJCQkvKiBUYXJnZXQgQkFScyBtdXN0IGhhdmUgdGhlIHByb3BlciBhbGlnbm1lbnQgKi8KKwkJCWFoYmFkciA9IGJhcmNmZ1tpXS5haGJhZHI7CisJCQlwY2lhZHIgPSBiYXJjZmdbaV0ucGNpYWRyOworCQkJYmFyX3N6ID0gKChwY2lhZHIgLSAxKSAmIH5wY2lhZHIpICsgMTsKKwkJfSBlbHNlIHsKKwkJCWlmIChpID09IDApIHsKKwkJCQkvKiBNYXAgbWFpbiBtZW1vcnkgKi8KKwkJCQliYXJfc3ogPSAweGYwMDAwMDA4OyAvKiAyNTZNQiBwcmVmZXRjaGFibGUgKi8KKwkJCQlhaGJhZHIgPSAweGYwMDAwMDAwICYgKHUzMilfX3BhKFBBR0VfQUxJR04oCisJCQkJCSh1bnNpZ25lZCBsb25nKSAmX2VuZCkpOworCQkJCXBjaWFkciA9IGFoYmFkcjsKKwkJCX0gZWxzZSB7CisJCQkJYmFyX3N6ID0gMDsKKwkJCQlhaGJhZHIgPSAwOworCQkJCXBjaWFkciA9IDA7CisJCQl9CisJCX0KKwkJZ3JwY2kyX2NmZ193MzIocHJpdiwgMCwgMCwgY2FwcHRyK0NBUDlfQkFSU0laRV9PRlMraSo0LCBiYXJfc3opOworCQlncnBjaTJfY2ZnX3czMihwcml2LCAwLCAwLCBQQ0lfQkFTRV9BRERSRVNTXzAraSo0LCBwY2lhZHIpOworCQlncnBjaTJfY2ZnX3czMihwcml2LCAwLCAwLCBjYXBwdHIrQ0FQOV9CQVJfT0ZTK2kqNCwgYWhiYWRyKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgICBUR1QgQkFSWyVkXTogMHglMDh4IChQQ0kpLT4gMHglMDh4XG4iLAorCQkJaSwgcGNpYWRyLCBhaGJhZHIpOworCX0KKworCS8qIHNldCBhcyBidXMgbWFzdGVyIGFuZCBlbmFibGUgcGNpIG1lbW9yeSByZXNwb25zZXMgKi8KKwlncnBjaTJfY2ZnX3IzMihwcml2LCAwLCAwLCBQQ0lfQ09NTUFORCwgJmRhdGEpOworCWRhdGEgfD0gKFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUik7CisJZ3JwY2kyX2NmZ193MzIocHJpdiwgMCwgMCwgUENJX0NPTU1BTkQsIGRhdGEpOworCisJLyogRW5hYmxlIEVycm9yIHJlc3BvbmUgKENQVS1UUkFQKSBvbiBpbGxlZ2FsIG1lbW9yeSBhY2Nlc3MuICovCisJUkVHU1RPUkUocmVncy0+Y3RybCwgQ1RSTF9FUiB8IENUUkxfUEUpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3JwY2kyX2p1bXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogSnVtcCBJUlEgaGFwcGVuZWRcbiIpOworCXJldHVybiBJUlFfTk9ORTsKK30KKworLyogSGFuZGxlIEdSUENJMiBFcnJvciBJbnRlcnJ1cHQgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBncnBjaTJfZXJyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gYXJnOworCXN0cnVjdCBncnBjaTJfcmVncyAqcmVncyA9IHByaXYtPnJlZ3M7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCXN0YXR1cyA9IFJFR0xPQUQocmVncy0+c3RzX2NhcCk7CisJaWYgKChzdGF0dXMgJiBTVFNfRVJSX0lSUSkgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKHN0YXR1cyAmIFNUU19JUEFSRVJSKQorCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogUGFyaXR5IEVycm9yXG4iKTsKKworCWlmIChzdGF0dXMgJiBTVFNfSVRHVEFCUlQpCisJCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBUYXJnZXQgQWJvcnRcbiIpOworCisJaWYgKHN0YXR1cyAmIFNUU19JTVNUQUJSVCkKKwkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IE1hc3RlciBBYm9ydFxuIik7CisKKwlpZiAoc3RhdHVzICYgU1RTX0lTWVNFUlIpCisJCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBTeXN0ZW0gRXJyb3JcbiIpOworCisJLyogQ2xlYXIgaGFuZGxlZCBJTlQgVFlQRSBJUlFzICovCisJUkVHU1RPUkUocmVncy0+c3RzX2NhcCwgc3RhdHVzICYgU1RTX0VSUl9JUlEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBncnBjaTJfb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IGdycGNpMl9yZWdzICpyZWdzOworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdjsKKwlpbnQgZXJyLCBpLCBsZW47CisJY29uc3QgaW50ICp0bXA7CisJdW5zaWduZWQgaW50IGNhcGFiaWxpdHk7CisKKwlpZiAoZ3JwY2kycHJpdikgeworCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogb25seSBvbmUgR1JQQ0kyIGNvcmUgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKG9mZGV2LT5udW1fcmVzb3VyY2VzIDwgMykgeworCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogbm90IGVub3VnaCBBUEIvQUhCIHJlc291cmNlc1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIEZpbmQgRGV2aWNlIEFkZHJlc3MgKi8KKwlyZWdzID0gb2ZfaW9yZW1hcCgmb2ZkZXYtPnJlc291cmNlWzBdLCAwLAorCQkJICByZXNvdXJjZV9zaXplKCZvZmRldi0+cmVzb3VyY2VbMF0pLAorCQkJICAiZ3JsaWItZ3JwY2kyIHJlZ3MiKTsKKwlpZiAocmVncyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBpb3JlbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qCisJICogQ2hlY2sgdGhhdCB3ZSdyZSBpbiBIb3N0IFNsb3QgYW5kIHRoYXQgd2UgY2FuIGFjdCBhcyBhIEhvc3QgQnJpZGdlCisJICogYW5kIG5vdCBvbmx5IGFzIHRhcmdldC4KKwkgKi8KKwljYXBhYmlsaXR5ID0gUkVHTE9BRChyZWdzLT5zdHNfY2FwKTsKKwlpZiAoKGNhcGFiaWxpdHkgJiBTVFNfSE9TVCkgfHwgIShjYXBhYmlsaXR5ICYgU1RTX01TVCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiR1JQQ0kyOiBub3QgaW4gaG9zdCBzeXN0ZW0gc2xvdFxuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyMTsKKwl9CisKKwlwcml2ID0gZ3JwY2kycHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBncnBjaTJfcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChncnBjaTJwcml2ID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnIxOworCX0KKwltZW1zZXQoZ3JwY2kycHJpdiwgMCwgc2l6ZW9mKCpncnBjaTJwcml2KSk7CisJcHJpdi0+cmVncyA9IHJlZ3M7CisJcHJpdi0+aXJxID0gb2ZkZXYtPmFyY2hkYXRhLmlycXNbMF07IC8qIEJBU0UgSVJRICovCisJcHJpdi0+aXJxX21vZGUgPSAoY2FwYWJpbGl0eSAmIFNUU19JUlFNT0RFKSA+PiBTVFNfSVJRTU9ERV9CSVQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJHUlBDSTI6IGhvc3QgZm91bmQgYXQgJXAsIGlycSVkXG4iLCByZWdzLCBwcml2LT5pcnEpOworCisJLyogQnl0ZSB0d2lzdGluZyBzaG91bGQgYmUgbWFkZSBjb25maWd1cmFibGUgZnJvbSBrZXJuZWwgY29tbWFuZCBsaW5lICovCisJcHJpdi0+YnRfZW5hYmxlZCA9IDE7CisKKwkvKiBMZXQgdXNlciBkbyBjdXN0b20gVGFyZ2V0IEJBUiBhc3NpZ25tZW50ICovCisJdG1wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5kZXYub2Zfbm9kZSwgImJhcmNmZyIsICZsZW4pOworCWlmICh0bXAgJiYgKGxlbiA9PSAyKjQqNikpCisJCW1lbWNweShwcml2LT50Z3RiYXJzLCB0bXAsIDIqNCo2KTsKKwllbHNlCisJCW1lbXNldChwcml2LT50Z3RiYXJzLCAtMSwgMio0KjYpOworCisJLyogTGltaXQgSVJRIHVubWFza2luZyBpbiBpcnFfbW9kZSAyIGFuZCAzICovCisJdG1wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5kZXYub2Zfbm9kZSwgImlycV9tYXNrIiwgJmxlbik7CisJaWYgKHRtcCAmJiAobGVuID09IDQpKQorCQlwcml2LT5kb19yZXNldCA9ICp0bXA7CisJZWxzZQorCQlwcml2LT5pcnFfbWFzayA9IDB4ZjsKKworCS8qIE9wdGlvbmFsIFBDSSByZXNldC4gRm9yY2UgUENJIHJlc2V0IG9uIHN0YXJ0dXAgKi8KKwl0bXAgPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPmRldi5vZl9ub2RlLCAicmVzZXQiLCAmbGVuKTsKKwlpZiAodG1wICYmIChsZW4gPT0gNCkpCisJCXByaXYtPmRvX3Jlc2V0ID0gKnRtcDsKKwllbHNlCisJCXByaXYtPmRvX3Jlc2V0ID0gMDsKKworCS8qIEZpbmQgUENJIE1lbW9yeSwgSS9PIGFuZCBDb25maWd1cmF0aW9uIFNwYWNlIFdpbmRvd3MgKi8KKwlwcml2LT5wY2lfYXJlYSA9IG9mZGV2LT5yZXNvdXJjZVsxXS5zdGFydDsKKwlwcml2LT5wY2lfYXJlYV9lbmQgPSBvZmRldi0+cmVzb3VyY2VbMV0uZW5kKzE7CisJcHJpdi0+cGNpX2lvID0gb2ZkZXYtPnJlc291cmNlWzJdLnN0YXJ0OworCXByaXYtPnBjaV9jb25mID0gb2ZkZXYtPnJlc291cmNlWzJdLnN0YXJ0ICsgMHgxMDAwMDsKKwlwcml2LT5wY2lfY29uZl9lbmQgPSBwcml2LT5wY2lfY29uZiArIDB4MTAwMDA7CisJcHJpdi0+cGNpX2lvX3ZhID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChwcml2LT5wY2lfaW8sIDB4MTAwMDApOworCWlmICghcHJpdi0+cGNpX2lvX3ZhKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyMjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPCisJCSJHUlBDSTI6IE1FTU9SWSBTUEFDRSBbMHglMDhseCAtIDB4JTA4bHhdXG4iCisJCSIgICAgICAgIEkvTyAgICBTUEFDRSBbMHglMDhseCAtIDB4JTA4bHhdXG4iCisJCSIgICAgICAgIENPTkZJRyBTUEFDRSBbMHglMDhseCAtIDB4JTA4bHhdXG4iLAorCQlwcml2LT5wY2lfYXJlYSwgcHJpdi0+cGNpX2FyZWFfZW5kLTEsCisJCXByaXYtPnBjaV9pbywgcHJpdi0+cGNpX2NvbmYtMSwKKwkJcHJpdi0+cGNpX2NvbmYsIHByaXYtPnBjaV9jb25mX2VuZC0xKTsKKworCS8qCisJICogSS9PIFNwYWNlIHJlc291cmNlcyBpbiBJL08gV2luZG93IG1hcHBlZCBpbnRvIFZpcnR1YWwgQWRyIFNwYWNlCisJICogV2UgbmV2ZXIgdXNlIGxvdyA0S0IgYmVjYXVzZSBzb21lIGRldmljZXMgc2VlbSBoYXZlIHByb2JsZW1zIHVzaW5nCisJICogYWRkcmVzcyAwLgorCSAqLworCW1lbXNldCgmcHJpdi0+aW5mby5pb19zcGFjZSwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOworCXByaXYtPmluZm8uaW9fc3BhY2UubmFtZSA9ICJHUlBDSTIgUENJIEkvTyBTcGFjZSI7CisJcHJpdi0+aW5mby5pb19zcGFjZS5zdGFydCA9IHByaXYtPnBjaV9pb192YSArIDB4MTAwMDsKKwlwcml2LT5pbmZvLmlvX3NwYWNlLmVuZCA9IHByaXYtPnBjaV9pb192YSArIDB4MTAwMDAgLSAxOworCXByaXYtPmluZm8uaW9fc3BhY2UuZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCisJLyoKKwkgKiBHUlBDSTIgaGFzIG5vIHByZWZldGNoYWJsZSBtZW1vcnksIG1hcCBldmVyeXRoaW5nIGFzCisJICogbm9uLXByZWZldGNoYWJsZSBtZW1vcnkKKwkgKi8KKwltZW1zZXQoJnByaXYtPmluZm8ubWVtX3NwYWNlLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJcHJpdi0+aW5mby5tZW1fc3BhY2UubmFtZSA9ICJHUlBDSTIgUENJIE1FTSBTcGFjZSI7CisJcHJpdi0+aW5mby5tZW1fc3BhY2Uuc3RhcnQgPSBwcml2LT5wY2lfYXJlYTsKKwlwcml2LT5pbmZvLm1lbV9zcGFjZS5lbmQgPSBwcml2LT5wY2lfYXJlYV9lbmQgLSAxOworCXByaXYtPmluZm8ubWVtX3NwYWNlLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZwcml2LT5pbmZvLm1lbV9zcGFjZSkgPCAwKQorCQlnb3RvIGVycjM7CisJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnByaXYtPmluZm8uaW9fc3BhY2UpIDwgMCkKKwkJZ290byBlcnI0OworCisJZ3JwY2kyX2h3X2luaXQocHJpdik7CisKKwkvKgorCSAqIEdldCBQQ0kgSW50ZXJydXB0IHRvIFN5c3RlbSBJUlEgbWFwcGluZyBhbmQgc2V0dXAgSVJRIGhhbmRsaW5nCisJICogRXJyb3IgSVJRIGFsd2F5cyBvbiBQQ0kgSU5UQS4KKwkgKi8KKwlpZiAocHJpdi0+aXJxX21vZGUgPCAyKSB7CisJCS8qIEFsbCBQQ0kgaW50ZXJydXB0cyBhcmUgc2hhcmVkIHVzaW5nIHRoZSBzYW1lIHN5c3RlbSBJUlEgKi8KKwkJbGVvbl91cGRhdGVfdmlycV9oYW5kbGluZyhwcml2LT5pcnEsIGdycGNpMl9wY2lfZmxvd19pcnEsCisJCQkJCSAicGNpbHZsIiwgMCk7CisKKwkJcHJpdi0+aXJxX21hcFswXSA9IGdycGNpMl9idWlsZF9kZXZpY2VfaXJxKDEpOworCQlwcml2LT5pcnFfbWFwWzFdID0gZ3JwY2kyX2J1aWxkX2RldmljZV9pcnEoMik7CisJCXByaXYtPmlycV9tYXBbMl0gPSBncnBjaTJfYnVpbGRfZGV2aWNlX2lycSgzKTsKKwkJcHJpdi0+aXJxX21hcFszXSA9IGdycGNpMl9idWlsZF9kZXZpY2VfaXJxKDQpOworCisJCXByaXYtPnZpcnFfZXJyID0gZ3JwY2kyX2J1aWxkX2RldmljZV9pcnEoNSk7CisJCWlmIChwcml2LT5pcnFfbW9kZSAmIDEpCisJCQlwcml2LT52aXJxX2RtYSA9IG9mZGV2LT5hcmNoZGF0YS5pcnFzWzFdOworCQllbHNlCisJCQlwcml2LT52aXJxX2RtYSA9IGdycGNpMl9idWlsZF9kZXZpY2VfaXJxKDYpOworCisJCS8qIEVuYWJsZSBJUlFzIG9uIExFT04gSVJRIGNvbnRyb2xsZXIgKi8KKwkJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+aXJxLCBncnBjaTJfanVtcF9pbnRlcnJ1cHQsIDAsCisJCQkJCSJHUlBDSTJfSlVNUCIsIHByaXYpOworCQlpZiAoZXJyKQorCQkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IEVSUiBJUlEgcmVxdWVzdCBmYWlsZWRcbiIpOworCX0gZWxzZSB7CisJCS8qIEFsbCBQQ0kgaW50ZXJydXB0cyBoYXZlIGFuIHVuaXF1ZSBJUlEgaW50ZXJydXB0ICovCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCS8qIE1ha2UgTEVPTiBJUlEgbGF5ZXIgaGFuZGxlIGxldmVsIElSUSBieSBhY2tpbmcgKi8KKwkJCWxlb25fdXBkYXRlX3ZpcnFfaGFuZGxpbmcob2ZkZXYtPmFyY2hkYXRhLmlycXNbaV0sCisJCQkJCQkgaGFuZGxlX2Zhc3Rlb2lfaXJxLCAicGNpbHZsIiwKKwkJCQkJCSAxKTsKKwkJCXByaXYtPmlycV9tYXBbaV0gPSBvZmRldi0+YXJjaGRhdGEuaXJxc1tpXTsKKwkJfQorCQlwcml2LT52aXJxX2VyciA9IHByaXYtPmlycV9tYXBbMF07CisJCWlmIChwcml2LT5pcnFfbW9kZSAmIDEpCisJCQlwcml2LT52aXJxX2RtYSA9IG9mZGV2LT5hcmNoZGF0YS5pcnFzWzRdOworCQllbHNlCisJCQlwcml2LT52aXJxX2RtYSA9IHByaXYtPmlycV9tYXBbMF07CisKKwkJLyogVW5tYXNrIGFsbCBQQ0kgaW50ZXJydXB0cywgcmVxdWVzdF9pcnEgd2lsbCBub3QgZG8gdGhhdCAqLworCQlSRUdTVE9SRShyZWdzLT5jdHJsLCBSRUdMT0FEKHJlZ3MtPmN0cmwpfChwcml2LT5pcnFfbWFzayYweGYpKTsKKwl9CisKKwkvKiBTZXR1cCBJUlEgaGFuZGxlciBmb3Igbm9uLWNvbmZpZ3VyYXRpb24gc3BhY2UgYWNjZXNzIGVycm9ycyAqLworCWVyciA9IHJlcXVlc3RfaXJxKHByaXYtPnZpcnFfZXJyLCBncnBjaTJfZXJyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkJIkdSUENJMl9FUlIiLCBwcml2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJHUlBDSTI6IEVSUiBWSVJRIHJlcXVlc3QgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnI1OworCX0KKworCS8qCisJICogRW5hYmxlIEVycm9yIEludGVycnVwdHMuIFBDSSBpbnRlcnJ1cHRzIGFyZSB1bm1hc2tlZCBvbmNlIHJlcXVlc3RfaXJxCisJICogaXMgY2FsbGVkIGJ5IHRoZSBQQ0kgRGV2aWNlIGRyaXZlcnMKKwkgKi8KKwlSRUdTVE9SRShyZWdzLT5jdHJsLCBSRUdMT0FEKHJlZ3MtPmN0cmwpIHwgQ1RSTF9FSSB8IENUUkxfU0kpOworCisJLyogSW5pdCBjb21tb24gbGF5ZXIgYW5kIHNjYW4gYnVzZXMgKi8KKwlwcml2LT5pbmZvLm9wcyA9ICZncnBjaTJfb3BzOworCXByaXYtPmluZm8ubWFwX2lycSA9IGdycGNpMl9tYXBfaXJxOworCWxlb25fcGNpX2luaXQob2ZkZXYsICZwcml2LT5pbmZvKTsKKworCXJldHVybiAwOworCitlcnI1OgorCXJlbGVhc2VfcmVzb3VyY2UoJnByaXYtPmluZm8uaW9fc3BhY2UpOworZXJyNDoKKwlyZWxlYXNlX3Jlc291cmNlKCZwcml2LT5pbmZvLm1lbV9zcGFjZSk7CitlcnIzOgorCWVyciA9IC1FTk9NRU07CisJaW91bm1hcCgodm9pZCAqKXByaXYtPnBjaV9pb192YSk7CitlcnIyOgorCWtmcmVlKHByaXYpOworZXJyMToKKwlvZl9pb3VubWFwKCZvZmRldi0+cmVzb3VyY2VbMF0sIHJlZ3MsCisJCXJlc291cmNlX3NpemUoJm9mZGV2LT5yZXNvdXJjZVswXSkpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGdycGNpMl9vZl9tYXRjaFtdID0geworCXsKKwkgLm5hbWUgPSAiR0FJU0xFUl9HUlBDSTIiLAorCSB9LAorCXsKKwkgLm5hbWUgPSAiMDFfMDdjIiwKKwkgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdycGNpMl9vZl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiZ3JwY2kyIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IGdycGNpMl9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IGdycGNpMl9vZl9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdycGNpMl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZ3JwY2kyX29mX2RyaXZlcik7Cit9CisKK3N1YnN5c19pbml0Y2FsbChncnBjaTJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jCmluZGV4IDhkMzQ4YzQuLjk5YmE1YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJCSAgICAgICBtZS0+bmFtZSwKIAkJCSAgICAgICAoaW50KSAoRUxGX1JfVFlQRShyZWxbaV0ucl9pbmZvKSAmIDB4ZmYpKTsKIAkJCXJldHVybiAtRU5PRVhFQzsKLQkJfTsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9jb21tb24uYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9jb21tb24uYwppbmRleCA2ZTM4NzRiLi5hNjg5NTk4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfY29tbW9uLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jCkBAIC0yODEsNyArMjgxLDcgQEAKIAljYXNlIDQ6CiAJCSp2YWx1ZSA9IHJldCAmIDB4ZmZmZmZmZmY7CiAJCWJyZWFrOwotCX07CisJfQogCiAKIAlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJfQogCiAJaWYgKCFzYXdfaW8gfHwgIXNhd19tZW0pIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYwppbmRleCAyODNmYmMzLi5mMDMwYjAyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAkJZGVmYXVsdDoKIAkJCXR5cGVfc3RyaW5nID0gIkVDQyBFcnJvciI7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCQlwcmludGsoIiVzOiBJT01NVSBFcnJvciwgdHlwZVslc11cbiIsCiAJCSAgICAgICBwYm0tPm5hbWUsIHR5cGVfc3RyaW5nKTsKIApAQCAtMzE5LDcgKzMxOSw3IEBACiAJCQlkZWZhdWx0OgogCQkJCXR5cGVfc3RyaW5nID0gIkVDQyBFcnJvciI7CiAJCQkJYnJlYWs7Ci0JCQl9OworCQkJfQogCQkJcHJpbnRrKCIlczogSU9NTVUgVEFHKCVkKVtlcnJvciglcykgY3R4KCV4KSB3ciglZCkgc3RyKCVkKSAiCiAJCQkgICAgICAgInN6KCVkSykgdnBnKCUwOGx4KV1cbiIsCiAJCQkgICAgICAgcGJtLT5uYW1lLCBpLCB0eXBlX3N0cmluZywKQEAgLTEzMjgsNyArMTMyOCw3IEBACiAJZGVmYXVsdDoKIAkJY2hpcHNldF9uYW1lID0gIlNDSElaTyI7CiAJCWJyZWFrOwotCX07CisJfQogCiAJLyogRm9yIFNDSElaTywgdGhyZWUgT0JQIHJlZ3M6CiAJICogMSkgUEJNIGNvbnRyb2xsZXIgcmVncwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9pcnF0cmFucy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9pcnF0cmFucy5jCmluZGV4IDU3MGI5OGYuLjQwZTQ5MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21faXJxdHJhbnMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2lycXRyYW5zLmMKQEAgLTY5NCw3ICs2OTQsNyBAQAogCQljYXNlIDM6CiAJCQlpY2xyID0gcmVnX2Jhc2UgKyBTWVNJT19JQ0xSX1NMT1QzOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogCQlpY2xyICs9ICgodW5zaWduZWQgbG9uZylzYnVzX2xldmVsIC0gMVVMKSAqIDhVTDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wc3ljaG9fY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wc3ljaG9fY29tbW9uLmMKaW5kZXggZmUyYWY2Ni4uOGRiNDhlOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BzeWNob19jb21tb24uYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJCWRlZmF1bHQ6CiAJCQl0eXBlX3N0ciA9ICJFQ0MgRXJyb3IiOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSU9NTVUgRXJyb3IsIHR5cGVbJXNdXG4iLAogCQkgICAgICAgcGJtLT5uYW1lLCB0eXBlX3N0cik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NidXMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NidXMuYwppbmRleCAyY2EzMmQxLi5hMTYxYjljIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zYnVzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2J1cy5jCkBAIC05Nyw3ICs5Nyw3IEBACiAKIAlkZWZhdWx0OgogCQlyZXR1cm47Ci0JfTsKKwl9CiAKIAl2YWwgPSB1cGFfcmVhZHEoY2ZnX3JlZyk7CiAJaWYgKHZhbCAmICgxVUwgPDwgMTRVTCkpIHsKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQljYXNlIDM6CiAJCQlpY2xyID0gcmVnX2Jhc2UgKyBTWVNJT19JQ0xSX1NMT1QzOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAogCQlpY2xyICs9ICgodW5zaWduZWQgbG9uZylzYnVzX2xldmVsIC0gMVVMKSAqIDhVTDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYwppbmRleCAzMjQ5ZDNmLi5kMjZlMWY2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCWRlZmF1bHQ6CiAJCXByaW50aygiVU5LTk9XTiFcbiIpOwogCQlicmVhazsKLQl9OworCX0KIAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCBmM2I2ODUwLi5jNGRkMDk5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCQlkZWZhdWx0OgogCQkJcHJvbV9wcmludGYoIlVua25vd24gY3B1IHR5cGUsIGhhbHRpbmcuXG4iKTsKIAkJCXByb21faGFsdCgpOwotCQl9OworCQl9CiAKIAkJKih1bnNpZ25lZCBpbnQgKikgKGFkZHIgKyAgMCkgPSBpbnNuc1swXTsKIAkJd21iKCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCmluZGV4IGQ1YjM5NTguLjIxYjEyNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAkJcHJpbnRrKCJVTktOT1dOIVxuIik7CiAJCUJVRygpOwogCQlicmVhazsKLQl9OworCX0KIH0KIAogdm9pZCBjcHVfcGFuaWModm9pZCkKQEAgLTM3NCw3ICszNzQsNyBAQAogCQlwcmludGsoIlVOS05PV04hXG4iKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwotCX07CisJfQogfQogCiAvKiBTZXQgdGhpcyB1cCBlYXJseSBzbyB0aGF0IHRoaW5ncyBsaWtlIHRoZSBzY2hlZHVsZXIgY2FuIGluaXQKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCQlwcmludGsoIlVOS05PV04hXG4iKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwotCX07CisJfQogCiAJaWYgKCFyZXQpIHsKIAkJY3B1bWFza19zZXRfY3B1KGNwdSwgJnNtcF9jb21tZW5jZWRfbWFzayk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCmluZGV4IGE5ZWE2MGUuLjFkMTNjNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX2lycS5jCkBAIC0xMDMsMTAgKzEwMyw5IEBACiAKIAlzYmlsID0gKHNidXNsIDw8IDIpOwogCS8qIExvb3AgZm9yIGVhY2ggcGVuZGluZyBTQkkgKi8KLQlmb3IgKHNiaW5vID0gMDsgYnVzX21hc2s7IHNiaW5vKyspIHsKKwlmb3IgKHNiaW5vID0gMDsgYnVzX21hc2s7IHNiaW5vKyssIGJ1c19tYXNrID4+PSAxKSB7CiAJCXVuc2lnbmVkIGludCBpZHgsIG1hc2s7CiAKLQkJYnVzX21hc2sgPj49IDE7CiAJCWlmICghKGJ1c19tYXNrICYgMSkpCiAJCQljb250aW51ZTsKIAkJLyogWFhYIFRoaXMgc2VlbXMgdG8gQUNLIHRoZSBpcnEgdHdpY2UuICBhY3F1aXJlX3NiaSgpCkBAIC0xMTgsMTkgKzExNywxNiBAQAogCQltYXNrICY9ICgweGYgPDwgc2JpbCk7CiAKIAkJLyogTG9vcCBmb3IgZWFjaCBwZW5kaW5nIFNCSSBzbG90ICovCi0JCWlkeCA9IDA7CiAJCXNsb3QgPSAoMSA8PCBzYmlsKTsKLQkJd2hpbGUgKG1hc2sgIT0gMCkgeworCQlmb3IgKGlkeCA9IDA7IG1hc2sgIT0gMDsgaWR4KyssIHNsb3QgPDw9IDEpIHsKIAkJCXVuc2lnbmVkIGludCBwaWw7CiAJCQlzdHJ1Y3QgaXJxX2J1Y2tldCAqcDsKIAotCQkJaWR4Kys7Ci0JCQlzbG90IDw8PSAxOwogCQkJaWYgKCEobWFzayAmIHNsb3QpKQogCQkJCWNvbnRpbnVlOwogCiAJCQltYXNrICY9IH5zbG90OwotCQkJcGlsID0gc3VuNGRfZW5jb2RlX2lycShzYmlubywgc2JpbCwgaWR4KTsKKwkJCXBpbCA9IHN1bjRkX2VuY29kZV9pcnEoc2Jpbm8sIHNidXNsLCBpZHgpOwogCiAJCQlwID0gaXJxX21hcFtwaWxdOwogCQkJd2hpbGUgKHApIHsKQEAgLTIxOCwxMCArMjE0LDEwIEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN1bjRkX2ltc2tfbG9jaywgZmxhZ3MpOwotCWNjX3NldF9pbXNrX290aGVyKGNwdWlkLCBjY19nZXRfaW1za19vdGhlcihjcHVpZCkgfCB+KDEgPDwgcmVhbF9pcnEpKTsKKwljY19zZXRfaW1za19vdGhlcihjcHVpZCwgY2NfZ2V0X2ltc2tfb3RoZXIoY3B1aWQpICYgfigxIDw8IHJlYWxfaXJxKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VuNGRfaW1za19sb2NrLCBmbGFncyk7CiAjZWxzZQotCWNjX3NldF9pbXNrKGNjX2dldF9pbXNrKCkgfCB+KDEgPDwgcmVhbF9pcnEpKTsKKwljY19zZXRfaW1zayhjY19nZXRfaW1zaygpICYgfigxIDw8IHJlYWxfaXJxKSk7CiAjZW5kaWYKIH0KIApAQCAtMjk5LDU4ICsyOTUsMTkgQEAKIAl9CiB9CiAKLXVuc2lnbmVkIGludCBzdW40ZF9idWlsZF9kZXZpY2VfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlYWxfaXJxKQordW5zaWduZWQgaW50IF9zdW40ZF9idWlsZF9kZXZpY2VfaXJxKHVuc2lnbmVkIGludCByZWFsX2lycSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGlsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBib2FyZCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPmRldi5vZl9ub2RlOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaW9fdW5pdCwgKnNiaSA9IGRwLT5wYXJlbnQ7Ci0JY29uc3Qgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdzOwogCXN0cnVjdCBzdW40ZF9oYW5kbGVyX2RhdGEgKmhhbmRsZXJfZGF0YTsKLQl1bnNpZ25lZCBpbnQgcGlsOwogCXVuc2lnbmVkIGludCBpcnE7Ci0JaW50IGJvYXJkLCBzbG90OwotCWludCBzYnVzbDsKLQotCWlycSA9IDA7Ci0Jd2hpbGUgKHNiaSkgewotCQlpZiAoIXN0cmNtcChzYmktPm5hbWUsICJzYmkiKSkKLQkJCWJyZWFrOwotCi0JCXNiaSA9IHNiaS0+cGFyZW50OwotCX0KLQlpZiAoIXNiaSkKLQkJZ290byBlcnJfb3V0OwotCi0JcmVncyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCWlmICghcmVncykKLQkJZ290byBlcnJfb3V0OwotCi0Jc2xvdCA9IHJlZ3MtPndoaWNoX2lvOwotCi0JLyoKLQkgKiAgSWYgU0JJJ3MgcGFyZW50IGlzIG5vdCBpby11bml0IG9yIHRoZSBpby11bml0IGxhY2tzCi0JICogYSAiYm9hcmQjIiBwcm9wZXJ0eSwgc29tZXRoaW5nIGlzIHZlcnkgd3JvbmcuCi0JICovCi0JaWYgKCFzYmktPnBhcmVudCB8fCBzdHJjbXAoc2JpLT5wYXJlbnQtPm5hbWUsICJpby11bml0IikpIHsKLQkJcHJpbnRrKCIlczogRXJyb3IsIHBhcmVudCBpcyBub3QgaW8tdW5pdC5cbiIsIHNiaS0+ZnVsbF9uYW1lKTsKLQkJZ290byBlcnJfb3V0OwotCX0KLQlpb191bml0ID0gc2JpLT5wYXJlbnQ7Ci0JYm9hcmQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoaW9fdW5pdCwgImJvYXJkIyIsIC0xKTsKLQlpZiAoYm9hcmQgPT0gLTEpIHsKLQkJcHJpbnRrKCIlczogRXJyb3IsIGxhY2tzIGJvYXJkIyBwcm9wZXJ0eS5cbiIsIGlvX3VuaXQtPmZ1bGxfbmFtZSk7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0KLQlzYnVzbCA9IHBpbF90b19zYnVzW3JlYWxfaXJxXTsKLQlpZiAoc2J1c2wpCi0JCXBpbCA9IHN1bjRkX2VuY29kZV9pcnEoYm9hcmQsIHNidXNsLCBzbG90KTsKLQllbHNlCi0JCXBpbCA9IHJlYWxfaXJxOwogCiAJaXJxID0gaXJxX2FsbG9jKHJlYWxfaXJxLCBwaWwpOwotCWlmIChpcnEgPT0gMCkKKwlpZiAoaXJxID09IDApIHsKKwkJcHJvbV9wcmludGYoIklSUTogYWxsb2NhdGUgZm9yICVkICVkICVkIGZhaWxlZFxuIiwKKwkJCXJlYWxfaXJxLCBwaWwsIGJvYXJkKTsKIAkJZ290byBlcnJfb3V0OworCX0KIAogCWhhbmRsZXJfZGF0YSA9IGlycV9nZXRfaGFuZGxlcl9kYXRhKGlycSk7CiAJaWYgKHVubGlrZWx5KGhhbmRsZXJfZGF0YSkpCkBAIC0zNjgsOSArMzI1LDgwIEBACiAJaXJxX3NldF9oYW5kbGVyX2RhdGEoaXJxLCBoYW5kbGVyX2RhdGEpOwogCiBlcnJfb3V0OgotCXJldHVybiByZWFsX2lycTsKKwlyZXR1cm4gaXJxOwogfQogCisKKwordW5zaWduZWQgaW50IHN1bjRkX2J1aWxkX2RldmljZV9pcnEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVhbF9pcnEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmJvYXJkX3BhcmVudCwgKmJ1cyA9IGRwLT5wYXJlbnQ7CisJY2hhciAqYnVzX2Nvbm5lY3Rpb247CisJY29uc3Qgc3RydWN0IGxpbnV4X3Byb21fcmVnaXN0ZXJzICpyZWdzOworCXVuc2lnbmVkIGludCBwaWw7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgYm9hcmQsIHNsb3Q7CisJaW50IHNidXNsOworCisJaXJxID0gcmVhbF9pcnE7CisJd2hpbGUgKGJ1cykgeworCQlpZiAoIXN0cmNtcChidXMtPm5hbWUsICJzYmkiKSkgeworCQkJYnVzX2Nvbm5lY3Rpb24gPSAiaW8tdW5pdCI7CisJCQlicmVhazsKKwkJfQorCisJCWlmICghc3RyY21wKGJ1cy0+bmFtZSwgImJvb3RidXMiKSkgeworCQkJYnVzX2Nvbm5lY3Rpb24gPSAiY3B1LXVuaXQiOworCQkJYnJlYWs7CisJCX0KKworCQlidXMgPSBidXMtPnBhcmVudDsKKwl9CisJaWYgKCFidXMpCisJCWdvdG8gZXJyX291dDsKKworCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAoIXJlZ3MpCisJCWdvdG8gZXJyX291dDsKKworCXNsb3QgPSByZWdzLT53aGljaF9pbzsKKworCS8qCisJICogSWYgQnVzIG5vZGVzIHBhcmVudCBpcyBub3QgaW8tdW5pdC9jcHUtdW5pdCBvciB0aGUgaW8tdW5pdC9jcHUtdW5pdAorCSAqIGxhY2tzIGEgImJvYXJkIyIgcHJvcGVydHksIHNvbWV0aGluZyBpcyB2ZXJ5IHdyb25nLgorCSAqLworCWlmICghYnVzLT5wYXJlbnQgfHwgc3RyY21wKGJ1cy0+cGFyZW50LT5uYW1lLCBidXNfY29ubmVjdGlvbikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IsIHBhcmVudCBpcyBub3QgJXMuXG4iLAorCQkJYnVzLT5mdWxsX25hbWUsIGJ1c19jb25uZWN0aW9uKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlib2FyZF9wYXJlbnQgPSBidXMtPnBhcmVudDsKKwlib2FyZCA9IG9mX2dldGludHByb3BfZGVmYXVsdChib2FyZF9wYXJlbnQsICJib2FyZCMiLCAtMSk7CisJaWYgKGJvYXJkID09IC0xKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yLCBsYWNrcyBib2FyZCMgcHJvcGVydHkuXG4iLAorCQkJYm9hcmRfcGFyZW50LT5mdWxsX25hbWUpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJc2J1c2wgPSBwaWxfdG9fc2J1c1tyZWFsX2lycV07CisJaWYgKHNidXNsKQorCQlwaWwgPSBzdW40ZF9lbmNvZGVfaXJxKGJvYXJkLCBzYnVzbCwgc2xvdCk7CisJZWxzZQorCQlwaWwgPSByZWFsX2lycTsKKworCWlycSA9IF9zdW40ZF9idWlsZF9kZXZpY2VfaXJxKHJlYWxfaXJxLCBwaWwsIGJvYXJkKTsKK2Vycl9vdXQ6CisJcmV0dXJuIGlycTsKK30KKwordW5zaWduZWQgaW50IHN1bjRkX2J1aWxkX3RpbWVyX2lycSh1bnNpZ25lZCBpbnQgYm9hcmQsIHVuc2lnbmVkIGludCByZWFsX2lycSkKK3sKKwlyZXR1cm4gX3N1bjRkX2J1aWxkX2RldmljZV9pcnEocmVhbF9pcnEsIHJlYWxfaXJxLCBib2FyZCk7Cit9CisKKwogc3RhdGljIHZvaWQgX19pbml0IHN1bjRkX2ZpeHVwX3RyYXBfdGFibGUodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfU01QCkBAIC00MDIsNiArNDMwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogCWNvbnN0IHUzMiAqcmVnOwogCWludCBlcnI7CisJaW50IGJvYXJkOwogCiAJZHAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiY3B1LXVuaXQiKTsKIAlpZiAoIWRwKSB7CkBAIC00MTQsMTIgKzQ0MywxOSBAQAogCSAqIGJvb3RidXMuCiAJICovCiAJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7Ci0Jb2Zfbm9kZV9wdXQoZHApOwogCWlmICghcmVnKSB7CiAJCXByb21fcHJpbnRmKCJzdW40ZF9pbml0X3RpbWVyczogTm8gcmVnIHByb3BlcnR5XG4iKTsKIAkJcHJvbV9oYWx0KCk7CiAJfQogCisJYm9hcmQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoZHAsICJib2FyZCMiLCAtMSk7CisJaWYgKGJvYXJkID09IC0xKSB7CisJCXByb21fcHJpbnRmKCJzdW40ZF9pbml0X3RpbWVyczogTm8gYm9hcmQjIHByb3BlcnR5IG9uIGNwdS11bml0XG4iKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCisJb2Zfbm9kZV9wdXQoZHApOworCiAJcmVzLnN0YXJ0ID0gcmVnWzFdOwogCXJlcy5lbmQgPSByZWdbMl0gLSAxOwogCXJlcy5mbGFncyA9IHJlZ1swXSAmIDB4ZmY7CkBAIC00MzQsNyArNDcwLDcgQEAKIAogCW1hc3Rlcl9sMTBfY291bnRlciA9ICZzdW40ZF90aW1lcnMtPmwxMF9jdXJfY291bnQ7CiAKLQlpcnEgPSBzdW40ZF9idWlsZF9kZXZpY2VfaXJxKE5VTEwsIFNVTjREX1RJTUVSX0lSUSk7CisJaXJxID0gc3VuNGRfYnVpbGRfdGltZXJfaXJxKGJvYXJkLCBTVU40RF9USU1FUl9JUlEpOwogCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgY291bnRlcl9mbiwgSVJRRl9USU1FUiwgInRpbWVyIiwgTlVMTCk7CiAJaWYgKGVycikgewogCQlwcm9tX3ByaW50Zigic3VuNGRfaW5pdF90aW1lcnM6IHJlcXVlc3RfaXJxKCkgZmFpbGVkIHdpdGggJWRcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmMzMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjMzIuYwppbmRleCA2ZGIxOGM2Li4xNzBjZDhlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmMzMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYzMyLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9TWVM7Ci0JfTsKKwl9CiAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmMKaW5kZXggOTYwODJkMy4uOTA4YjQ3YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCQlkZWZhdWx0OgogCQkJZXJyID0gLUVOT1NZUzsKIAkJCWdvdG8gb3V0OwotCQl9OworCQl9CiAJfQogCWlmIChjYWxsIDw9IE1TR0NUTCkgewogCQlzd2l0Y2ggKGNhbGwpIHsKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCQlkZWZhdWx0OgogCQkJZXJyID0gLUVOT1NZUzsKIAkJCWdvdG8gb3V0OwotCQl9OworCQl9CiAJfQogCWlmIChjYWxsIDw9IFNITUNUTCkgewogCQlzd2l0Y2ggKGNhbGwpIHsKQEAgLTUwNyw3ICs1MDcsNyBAQAogCQlkZWZhdWx0OgogCQkJZXJyID0gLUVOT1NZUzsKIAkJCWdvdG8gb3V0OwotCQl9OworCQl9CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVOT1NZUzsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKaW5kZXggMmI4ZDU0Yi4uMWRiNmIxOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYwpAQCAtNzA4LDcgKzcwOCw3IEBACiAJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CiAJCVdBUk5fT04oMSk7CiAJCWJyZWFrOwotCX07CisJfQogfQogCiBzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBzcGFyYzY0X2Nsb2NrZXZlbnQgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90cmFwc182NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfNjQuYwppbmRleCAxZWQ1NDdiLi4wY2JkYWE0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90cmFwc182NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzXzY0LmMKQEAgLTE4MDQsNyArMTgwNCw3IEBACiAJCXJldHVybiAid2FybmluZyByZXN1bWFibGUiOwogCWRlZmF1bHQ6CiAJCXJldHVybiAidW5rbm93biI7Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHN1bjR2X2xvZ19lcnJvcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHN1bjR2X2Vycm9yX2VudHJ5ICplbnQsIGludCBjcHUsIGNvbnN0IGNoYXIgKnBmeCwgYXRvbWljX3QgKm9jbnQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF82NC5jCmluZGV4IGM3NTJjNGMuLmIyYjAxOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF82NC5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAl9CiAJcmV0dXJuIF9fZG9faW50X3N0b3JlKGRzdF9hZGRyLCBzaXplLCBzcmNfdmFsLCBhc2kpOwogfQpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCWNhc2UgQVNJX1NORkw6CiAJCQlhc2kgJj0gfjB4MDg7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCQlzd2l0Y2ggKGRpcikgewogCQljYXNlIGxvYWQ6CiAJCQlyZWdfYWRkciA9IGZldGNoX3JlZ19hZGRyKCgoaW5zbj4+MjUpJjB4MWYpLCByZWdzKTsKQEAgLTM1MSw3ICszNTEsNyBAQAogCQkJCWRlZmF1bHQ6CiAJCQkJCUJVRygpOwogCQkJCQlicmVhazsKLQkJCQl9OworCQkJCX0KIAkJCQkqcmVnX2FkZHIgPSB2YWxfaW47CiAJCQl9CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3VzMmVfY3B1ZnJlcS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdXMyZV9jcHVmcmVxLmMKaW5kZXggNTMxZDU0Zi4uNDg5ZmMxNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdXMyZV9jcHVmcmVxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdXMyZV9jcHVmcmVxLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiAJZGVmYXVsdDoKIAkJQlVHKCk7Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZGV4X3RvX2Rpdmlzb3IodW5zaWduZWQgaW50IGluZGV4KQpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIAlkZWZhdWx0OgogCQlCVUcoKTsKLQl9OworCX0KIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZXN0YXJfdG9fZGl2aXNvcih1bnNpZ25lZCBsb25nIGVzdGFyKQpAQCAtMjI0LDcgKzIyNCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwotCX07CisJfQogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3VzM19jcHVmcmVxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91czNfY3B1ZnJlcS5jCmluZGV4IDlhOGNlYjcuLmViMTYyNGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VzM19jcHVmcmVxLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdXMzX2NwdWZyZXEuYwpAQCAtNzEsNyArNzEsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKLQl9OworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMjUsNyArMTI1LDcgQEAKIAogCWRlZmF1bHQ6CiAJCUJVRygpOwotCX07CisJfQogCiAJcmVnID0gcmVhZF9zYWZhcmlfY2ZnKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Zpb2hzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC92aW9ocy5jCmluZGV4IGFhNmFjNzAuLjI5MzQ4ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Zpb2hzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlvaHMuYwpAQCAtMzYzLDcgKzM2Myw3IEBACiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gaGFuZHNoYWtlX2ZhaWx1cmUodmlvKTsKLQl9OworCX0KIH0KIAogc3RhdGljIGludCBwcm9jZXNzX2F0dHIoc3RydWN0IHZpb19kcml2ZXJfc3RhdGUgKnZpbywgdm9pZCAqcGt0KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCmluZGV4IDlkZmQyZWIuLjM2MzU3NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCQlsZWZ0ID0gZWRnZTMyX3RhYl9sWyhyczEgPj4gMikgJiAweDFdLmxlZnQ7CiAJCXJpZ2h0ID0gZWRnZTMyX3RhYl9sWyhyczIgPj4gMikgJiAweDFdLnJpZ2h0OwogCQlicmVhazsKLQl9OworCX0KIAogCWlmICgocnMxICYgfjB4N1VMKSA9PSAocnMyICYgfjB4N1VMKSkKIAkJcmRfdmFsID0gcmlnaHQgJiBsZWZ0OwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCXRzdGF0ZSA9IHJlZ3MtPnRzdGF0ZSAmIH4oVFNUQVRFX1hDQyB8IFRTVEFURV9JQ0MpOwogCQlyZWdzLT50c3RhdGUgPSB0c3RhdGUgfCAoY2NyIDw8IDMyVUwpOwogCX0KLQl9OworCX0KIH0KIAogc3RhdGljIHZvaWQgYXJyYXkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnNuLCB1bnNpZ25lZCBpbnQgb3BmKQpAQCAtMzkyLDcgKzM5Miw3IEBACiAKIAljYXNlIEFSUkFZMzJfT1BGOgogCQlyZF92YWwgPDw9IDI7Ci0JfTsKKwl9CiAKIAlzdG9yZV9yZWcocmVncywgcmRfdmFsLCBSRChpbnNuKSk7CiB9CkBAIC01NzcsNyArNTc3LDcgQEAKIAkJKmZwZF9yZWdhZGRyKGYsIFJEKGluc24pKSA9IHJkX3ZhbDsKIAkJYnJlYWs7CiAJfQotCX07CisJfQogfQogCiBzdGF0aWMgdm9pZCBwbXVsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbiwgdW5zaWduZWQgaW50IG9wZikKQEAgLTY5Myw3ICs2OTMsNyBAQAogCQkqZnBkX3JlZ2FkZHIoZiwgUkQoaW5zbikpID0gcmRfdmFsOwogCQlicmVhazsKIAl9Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHBjbXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpbnNuLCB1bnNpZ25lZCBpbnQgb3BmKQpAQCAtNzg2LDcgKzc4Niw3IEBACiAJCQkJcmRfdmFsIHw9IDEgPDwgaTsKIAkJfQogCQlicmVhazsKLQl9OworCX0KIAogCW1heWJlX2ZsdXNoX3dpbmRvd3MoMCwgMCwgUkQoaW5zbiksIDApOwogCXN0b3JlX3JlZyhyZWdzLCByZF92YWwsIFJEKGluc24pKTsKQEAgLTg4NSw3ICs4ODUsNyBAQAogCWNhc2UgQlNIVUZGTEVfT1BGOgogCQlic2h1ZmZsZShyZWdzLCBpbnNuKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAlyZWdzLT50cGMgPSByZWdzLT50bnBjOwogCXJlZ3MtPnRucGMgKz0gNDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwppbmRleCBiMTBhYzRkLi43NTQzZGRiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAogCWRlZmF1bHQ6CiAJCWJyZWFrOwotCX07CisJfQogCiAJbWVtc2V0KCZyZWdzLCAwLCBzaXplb2YgKHJlZ3MpKTsKIAlyZWdzLnBjID0gcGM7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfMzIuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jCmluZGV4IGNhMjE3MzIuLjdiMDBkZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF8zMi5jCkBAIC0zNDAsNyArMzQwLDcgQEAKIAkJcHJvbV9wcmludGYoInBhZ2luZ19pbml0OiBzcGFyY19jcHVfbW9kZWwgPSAlZFxuIiwgc3BhcmNfY3B1X21vZGVsKTsKIAkJcHJvbV9wcmludGYoInBhZ2luZ19pbml0OiBIYWx0aW5nLi4uXG4iKTsKIAkJcHJvbV9oYWx0KCk7Ci0JfTsKKwl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBwcm90ZWN0aW9uIG1hcCB3aXRoIG5vbi1jb25zdGFudCwgTU1VIGRlcGVuZGVudCB2YWx1ZXMuICovCiAJcHJvdGVjdGlvbl9tYXBbMF0gPSBQQUdFX05PTkU7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCmluZGV4IGUxMGNkMDMuLjNmZDhlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaW5pdF82NC5jCkBAIC0xNjI1LDcgKzE2MjUsNyBAQAogCQlrdHNiX2Rlc2NyWzBdLnBnc3pfaWR4ID0gSFZfUEdTWl9JRFhfNE1COwogCQlrdHNiX2Rlc2NyWzBdLnBnc3pfbWFzayA9IEhWX1BHU1pfTUFTS180TUI7CiAJCWJyZWFrOwotCX07CisJfQogCiAJa3RzYl9kZXNjclswXS5hc3NvYyA9IDE7CiAJa3RzYl9kZXNjclswXS5udW1fdHRlcyA9IEtFUk5FTF9UU0JfTkVOVFJJRVM7CkBAIC0yMjY2LDcgKzIyNjYsNyBAQAogCQkJcmV0dXJuIF9QQUdFX1NaNTEyS180VjsKIAkJY2FzZSA0ICogMTAyNCAqIDEwMjQ6CiAJCQlyZXR1cm4gX1BBR0VfU1o0TUJfNFY7Ci0JCX07CisJCX0KIAl9IGVsc2UgewogCQlzd2l0Y2ggKHN6KSB7CiAJCWNhc2UgOCAqIDEwMjQ6CkBAIC0yMjc4LDcgKzIyNzgsNyBAQAogCQkJcmV0dXJuIF9QQUdFX1NaNTEyS180VTsKIAkJY2FzZSA0ICogMTAyNCAqIDEwMjQ6CiAJCQlyZXR1cm4gX1BBR0VfU1o0TUJfNFU7Ci0JCX07CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwppbmRleCBmZTA5ZmQ4Li5jYmVmNzRlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL3NybW11LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCkBAIC0xNjY1LDcgKzE2NjUsNyBAQAogCWRlZmF1bHQ6CiAJCXNybW11X21vZHR5cGUgPSBTd2lmdF9vazsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfY2FjaGVfYWxsLCBzd2lmdF9mbHVzaF9jYWNoZV9hbGwsIEJURklYVVBDQUxMX05PUk0pOwogCUJURklYVVBTRVRfQ0FMTChmbHVzaF9jYWNoZV9tbSwgc3dpZnRfZmx1c2hfY2FjaGVfbW0sIEJURklYVVBDQUxMX05PUk0pOwpAQCAtMjA2OSw3ICsyMDY5LDcgQEAKIAkJCS8qIFNvbWUgb3RoZXIgQ3lwcmVzcyByZXZpc2lvbiwgYXNzdW1lIGEgNjA1LiAqLwogCQkJaW5pdF9jeXByZXNzXzYwNShtb2RfcmV2KTsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJCXJldHVybjsKIAl9CiAJCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3N1bjRjLmMgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKaW5kZXggYTIzNTBiNS4uMWNmNGYxOSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3VuNGMuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCXByb21fcHJpbnRmKCJwcm9iZV92YWM6IERpZG4ndCBleHBlY3QgdmFjLWxpbmVzaXplIG9mICVkLCBoYWx0aW5nXG4iLAogCQkJICAgIHN1bjRjX3ZhY2luZm8ubGluZXNpemUpOwogCQlwcm9tX2hhbHQoKTsKLQl9OworCX0KIAogCXN1bjRjX2ZsdXNoX2FsbCgpOwogCXN1bjRjX2VuYWJsZV92YWMoKTsKQEAgLTM2NCw3ICszNjQsNyBAQAogCQkJcHJvbV9wcmludGYoIlVuaGFuZGxlZCBudW1iZXIgb2Ygc2VnbWFwczogJWRcbiIsCiAJCQkJICAgIG51bV9zZWdtYXBzKTsKIAkJCXByb21faGFsdCgpOwotCX07CisJfQogCXN3aXRjaCAobnVtX2NvbnRleHRzKSB7CiAJCWNhc2UgODoKIAkJCS8qIERlZmF1bHQsIG5vdGhpbmcgdG8gZG8uICovCkBAIC0zNzcsNyArMzc3LDcgQEAKIAkJCXByb21fcHJpbnRmKCJVbmhhbmRsZWQgbnVtYmVyIG9mIGNvbnRleHRzOiAlZFxuIiwKIAkJCQkgICAgbnVtX2NvbnRleHRzKTsKIAkJCXByb21faGFsdCgpOwotCX07CisJfQogCiAJaWYgKHN1bjRjX3ZhY2luZm8uZG9faHdmbHVzaGVzICE9IDApIHsKIAkJUEFUQ0hfSU5TTih2YWNfaHdmbHVzaF9wYXRjaDFfb24sIHZhY19od2ZsdXNoX3BhdGNoMSk7CkBAIC0zOTQsNyArMzk0LDcgQEAKIAkJCXByb21fcHJpbnRmKCJJbXBvc3NpYmxlIFZBQyBsaW5lc2l6ZSAlZCwgaGFsdGluZy4uLlxuIiwKIAkJCQkgICAgc3VuNGNfdmFjaW5mby5saW5lc2l6ZSk7CiAJCQlwcm9tX2hhbHQoKTsKLQkJfTsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS90c2IuYyBiL2FyY2gvc3BhcmMvbW0vdHNiLmMKaW5kZXggOTQ4NDYxNS4uYTVmNTFiMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS90c2IuYworKysgYi9hcmNoL3NwYXJjL21tL3RzYi5jCkBAIC0xODAsNyArMTgwLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJUU0JbJXM6JWRdOiBJbXBvc3NpYmxlIFRTQiBzaXplICVsdSwga2lsbGluZyBwcm9jZXNzLlxuIiwKIAkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgdHNiX2J5dGVzKTsKIAkJZG9fZXhpdChTSUdTRUdWKTsKLQl9OworCX0KIAl0dGUgfD0gcHRlX3N6X2JpdHMocGFnZV9zeik7CiAKIAlpZiAodGxiX3R5cGUgPT0gY2hlZXRhaF9wbHVzIHx8IHRsYl90eXBlID09IGh5cGVydmlzb3IpIHsKQEAgLTIxNSw3ICsyMTUsNyBAQAogI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQlCVUcoKTsKLQkJfTsKKwkJfQogCQlocC0+YXNzb2MgPSAxOwogCQlocC0+bnVtX3R0ZXMgPSB0c2JfYnl0ZXMgLyAxNjsKIAkJaHAtPmN0eF9pZHggPSAwOwpAQCAtMjMwLDcgKzIzMCw3IEBACiAjZW5kaWYKIAkJZGVmYXVsdDoKIAkJCUJVRygpOwotCQl9OworCQl9CiAJCWhwLT50c2JfYmFzZSA9IHRzYl9wYWRkcjsKIAkJaHAtPnJlc3YgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzMyLmMgYi9hcmNoL3NwYXJjL3Byb20vY29uc29sZV8zMi5jCmluZGV4IGIwNWUzZGIuLmEwMGY0N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfMzIuYwpAQCAtMzgsNyArMzgsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKLQl9OworCX0KIAlyZXN0b3JlX2N1cnJlbnQoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9tX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gaTsgLyogVWdoLCB3ZSBjb3VsZCBzcGluIGZvcmV2ZXIgb24gdW5zdXBwb3J0ZWQgcHJvbXMgOyggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMgYi9hcmNoL3NwYXJjL3Byb20vaW5pdF8zMi5jCmluZGV4IDBhNjAxYjMuLjI2YzY0Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL2luaXRfMzIuYwpAQCAtNTMsNyArNTMsNyBAQAogCQkJICAgIHJvbXZlYy0+cHZfcm9tdmVycyk7CiAJCXByb21faGFsdCgpOwogCQlicmVhazsKLQl9OworCX0KIAogCXByb21fcmV2ID0gcm9tdmVjLT5wdl9wbHVnaW5fcmV2aXNpb247CiAJcHJvbV9wcmV2ID0gcm9tdmVjLT5wdl9wcmludHJldjsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9tcC5jIGIvYXJjaC9zcGFyYy9wcm9tL21wLmMKaW5kZXggOTdjNDRjOS4uMGRhODI1NiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL21wLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL21wLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAljYXNlIFBST01fVjM6CiAJCXJldCA9ICgqKHJvbXZlYy0+djNfY3B1c3RhcnQpKShjcHVub2RlLCAoaW50KSBjdGFibGVfcmVnLCBjdHgsIHBjKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJcmVzdG9yZV9jdXJyZW50KCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvbV9sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL0tjb25maWcgYi9hcmNoL3VuaWNvcmUzMi9LY29uZmlnCmluZGV4IGQzYTMwMzIuLmU1N2RjY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL0tjb25maWcKKysrIGIvYXJjaC91bmljb3JlMzIvS2NvbmZpZwpAQCAtMjMxLDEwICsyMzEsNiBAQAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBOQjA5MTYgUFdNIGNvbnRyb2xsZXJzCiAKLWNvbmZpZyBQVVYzX1JUQwotCXRyaXN0YXRlICJQS1VuaXR5IHYzIFJUQyBTdXBwb3J0IgotCWRlcGVuZHMgb24gIUFSQ0hfRlBHQQotCiBpZiBQVVYzX05CMDkxNgogCiBtZW51ICJQS1VuaXR5IE5ldEJvb2stMDkxNiBGZWF0dXJlcyIKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL01ha2VmaWxlIGIvYXJjaC91bmljb3JlMzIvTWFrZWZpbGUKaW5kZXggNzZhOGJlZS4uNmFmNGJjNCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIvTWFrZWZpbGUKKysrIGIvYXJjaC91bmljb3JlMzIvTWFrZWZpbGUKQEAgLTQwLDQyICs0MCwxMCBAQAogCiBsaWJzLXkJCQkrPSBhcmNoL3VuaWNvcmUzMi9saWIvCiAKLUFTTV9HRU5FUkFURURfRElSCTo9ICQoc3JjdHJlZSkvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9nZW5lcmF0ZWQKLUxJTlVYSU5DTFVERQkJKz0gLUkkKEFTTV9HRU5FUkFURURfRElSKQotCi1BU01fR0VORVJJQ19IRUFERVJTCTo9IGF0b21pYy5oIGF1eHZlYy5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGJpdHNwZXJsb25nLmggYnVnLmggYnVncy5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGNwdXRpbWUuaCBjdXJyZW50LmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gZGV2aWNlLmggZGl2NjQuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBlbWVyZ2VuY3ktcmVzdGFydC5oIGVycm5vLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gZmIuaCBmY250bC5oIGZ0cmFjZS5oIGZ1dGV4LmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gaGFyZGlycS5oIGh3X2lycS5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGlvY3RsLmggaW9jdGxzLmggaXBjYnVmLmggaXJxX3JlZ3MuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBrZGVidWcuaCBrbWFwX3R5cGVzLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gbG9jYWwuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBtbWFuLmggbW9kdWxlLmggbXNnYnVmLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gcGFyYW0uaCBwYXJwb3J0LmggcGVyY3B1LmggcG9sbC5oIHBvc2l4X3R5cGVzLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gcmVzb3VyY2UuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBzY2F0dGVybGlzdC5oIHNlY3Rpb25zLmggc2VnbWVudC5oIHNlbWJ1Zi5oIHNlcmlhbC5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IHNldHVwLmggc2htYnVmLmggc2htcGFyYW0uaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBzaWdpbmZvLmggc2lnbmFsLmggc2l6ZXMuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBzb2NrZXQuaCBzb2NraW9zLmggc3RhdC5oIHN0YXRmcy5oIHN3YWIuaCBzeXNjYWxscy5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IHRlcm1iaXRzLmggdGVybWlvcy5oIHRvcG9sb2d5LmggdHlwZXMuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSB1Y29udGV4dC5oIHVuYWxpZ25lZC5oIHVzZXIuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSB2Z2EuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSB4b3IuaAotCi1hcmNocHJlcGFyZToKLWlmbmVxICgkKEFTTV9HRU5FUkFURURfRElSKSwgJCh3aWxkY2FyZCAkKEFTTV9HRU5FUkFURURfRElSKSkpCi0JJChRKW1rZGlyIC1wICQoQVNNX0dFTkVSQVRFRF9ESVIpL2FzbQotCSQoUSkkKGZvcmVhY2ggYSwgJChBU01fR0VORVJJQ19IRUFERVJTKSwJXAotCQllY2hvICcjaW5jbHVkZSA8YXNtLWdlbmVyaWMvJGE+JwlcCi0JCQk+ICQoQVNNX0dFTkVSQVRFRF9ESVIpL2FzbS8kYTsgKQotZW5kaWYKLQogYm9vdAkJCTo9IGFyY2gvdW5pY29yZTMyL2Jvb3QKIAotIyBEZWZhdWx0IHRhcmdldCB3aGVuIGV4ZWN1dGluZyBwbGFpbiBtYWtlCisjIERlZmF1bHQgZGVmY29uZmlnIGFuZCB0YXJnZXQgd2hlbiBleGVjdXRpbmcgcGxhaW4gbWFrZQorS0JVSUxEX0RFRkNPTkZJRwk6PSAkKEFSQ0gpX2RlZmNvbmZpZwogS0JVSUxEX0lNQUdFCQk6PSB6SW1hZ2UKIAogYWxsOgkkKEtCVUlMRF9JTUFHRSkKQEAgLTgzLDggKzUxLDYgQEAKIHpJbWFnZSBJbWFnZSB1SW1hZ2U6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoYm9vdCkvJEAKIAotTVJQUk9QRVJfRElSUwkJKz0gJChBU01fR0VORVJBVEVEX0RJUikKLQogYXJjaGNsZWFuOgogCSQoUSkkKE1BS0UpICQoY2xlYW4pPSQoYm9vdCkKIApkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC91bmljb3JlMzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDk1MzczNDIuLmIwOTU0YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3VuaWNvcmUzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTU5LDcgKzU5LDcgQEAKICMgV2Ugbm93IGhhdmUgYSBQSUMgZGVjb21wcmVzc29yIGltcGxlbWVudGF0aW9uLiAgRGVjb21wcmVzc29ycyBydW5uaW5nCiAjIGZyb20gUkFNIHNob3VsZCBub3QgZGVmaW5lIFpURVhUQUREUi4gIERlY29tcHJlc3NvcnMgcnVubmluZyBkaXJlY3RseQogIyBmcm9tIFJPTSBvciBGbGFzaCBtdXN0IGRlZmluZSBaVEVYVEFERFIgKHByZWZlcmFibHkgdmlhIHRoZSBjb25maWcpCi1aVEVYVEFERFIJOj0gMAorWlRFWFRBRERSCTo9IDB4MDMwMDAwMDAKIFpCU1NBRERSCTo9IEFMSUdOKDQpCiAKIFNFREZMQUdTX2xkcwk9IHMvVEVYVF9TVEFSVC8kKFpURVhUQUREUikvO3MvQlNTX1NUQVJULyQoWkJTU0FERFIpLwpkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIvY29uZmlncy9kZWJ1Z19kZWZjb25maWcgYi9hcmNoL3VuaWNvcmUzMi9jb25maWdzL3VuaWNvcmUzMl9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC91bmljb3JlMzIvY29uZmlncy9kZWJ1Z19kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvdW5pY29yZTMyL2NvbmZpZ3MvdW5pY29yZTMyX2RlZmNvbmZpZwppbmRleCBiNWZiZGU5Li5jOWRkMzE5IDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9jb25maWdzL2RlYnVnX2RlZmNvbmZpZworKysgYi9hcmNoL3VuaWNvcmUzMi9jb25maWdzL3VuaWNvcmUzMl9kZWZjb25maWcKQEAgLTEsNiArMSw2IEBACiAjIyMgR2VuZXJhbCBzZXR1cAogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DQUxWRVJTSU9OPSItZGVidWciCitDT05GSUdfTE9DQUxWRVJTSU9OPSItdW5pY29yZTMyIgogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC02NCw3ICs2NCw2IEBACiBDT05GSUdfSTJDX0VFUFJPTV9BVDI0PW4KIENPTkZJR19MQ0RfQkFDS0xJR0hUPW4KIAotQ09ORklHX1BVVjNfUlRDPXkKIENPTkZJR19QVVYzX1VNQUw9eQogQ09ORklHX1BVVjNfTVVTQj1uCiBDT05GSUdfUFVWM19BQzk3PW4KQEAgLTE2Nyw4ICsxNjYsOSBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogCiAjCVJlYWwgVGltZSBDbG9jawotQ09ORklHX1JUQ19MSUI9bQotQ09ORklHX1JUQ19DTEFTUz1tCitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfRFJWX1BVVjM9eQogCiAjIyMgRmlsZSBzeXN0ZW1zCiBDT05GSUdfRVhUMl9GUz1tCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9LYnVpbGQgYi9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9LYnVpbGQKaW5kZXggYjIwMGZkYS4uY2ExMTNkNiAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vS2J1aWxkCisrKyBiL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL0tidWlsZApAQCAtMSwyICsxLDYxIEBACiBpbmNsdWRlIGluY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQogCitnZW5lcmljLXkgKz0gYXRvbWljLmgKK2dlbmVyaWMteSArPSBhdXh2ZWMuaAorZ2VuZXJpYy15ICs9IGJpdHNwZXJsb25nLmgKK2dlbmVyaWMteSArPSBidWcuaAorZ2VuZXJpYy15ICs9IGJ1Z3MuaAorZ2VuZXJpYy15ICs9IGNwdXRpbWUuaAorZ2VuZXJpYy15ICs9IGN1cnJlbnQuaAorZ2VuZXJpYy15ICs9IGRldmljZS5oCitnZW5lcmljLXkgKz0gZGl2NjQuaAorZ2VuZXJpYy15ICs9IGVtZXJnZW5jeS1yZXN0YXJ0LmgKK2dlbmVyaWMteSArPSBlcnJuby5oCitnZW5lcmljLXkgKz0gZmIuaAorZ2VuZXJpYy15ICs9IGZjbnRsLmgKK2dlbmVyaWMteSArPSBmdHJhY2UuaAorZ2VuZXJpYy15ICs9IGZ1dGV4LmgKK2dlbmVyaWMteSArPSBoYXJkaXJxLmgKK2dlbmVyaWMteSArPSBod19pcnEuaAorZ2VuZXJpYy15ICs9IGlvY3RsLmgKK2dlbmVyaWMteSArPSBpb2N0bHMuaAorZ2VuZXJpYy15ICs9IGlwY2J1Zi5oCitnZW5lcmljLXkgKz0gaXJxX3JlZ3MuaAorZ2VuZXJpYy15ICs9IGtkZWJ1Zy5oCitnZW5lcmljLXkgKz0ga21hcF90eXBlcy5oCitnZW5lcmljLXkgKz0gbG9jYWwuaAorZ2VuZXJpYy15ICs9IG1tYW4uaAorZ2VuZXJpYy15ICs9IG1vZHVsZS5oCitnZW5lcmljLXkgKz0gbXNnYnVmLmgKK2dlbmVyaWMteSArPSBwYXJhbS5oCitnZW5lcmljLXkgKz0gcGFycG9ydC5oCitnZW5lcmljLXkgKz0gcGVyY3B1LmgKK2dlbmVyaWMteSArPSBwb2xsLmgKK2dlbmVyaWMteSArPSBwb3NpeF90eXBlcy5oCitnZW5lcmljLXkgKz0gcmVzb3VyY2UuaAorZ2VuZXJpYy15ICs9IHNjYXR0ZXJsaXN0LmgKK2dlbmVyaWMteSArPSBzZWN0aW9ucy5oCitnZW5lcmljLXkgKz0gc2VnbWVudC5oCitnZW5lcmljLXkgKz0gc2VtYnVmLmgKK2dlbmVyaWMteSArPSBzZXJpYWwuaAorZ2VuZXJpYy15ICs9IHNldHVwLmgKK2dlbmVyaWMteSArPSBzaG1idWYuaAorZ2VuZXJpYy15ICs9IHNobXBhcmFtLmgKK2dlbmVyaWMteSArPSBzaWdpbmZvLmgKK2dlbmVyaWMteSArPSBzaWduYWwuaAorZ2VuZXJpYy15ICs9IHNpemVzLmgKK2dlbmVyaWMteSArPSBzb2NrZXQuaAorZ2VuZXJpYy15ICs9IHNvY2tpb3MuaAorZ2VuZXJpYy15ICs9IHN0YXQuaAorZ2VuZXJpYy15ICs9IHN0YXRmcy5oCitnZW5lcmljLXkgKz0gc3dhYi5oCitnZW5lcmljLXkgKz0gc3lzY2FsbHMuaAorZ2VuZXJpYy15ICs9IHRlcm1iaXRzLmgKK2dlbmVyaWMteSArPSB0ZXJtaW9zLmgKK2dlbmVyaWMteSArPSB0b3BvbG9neS5oCitnZW5lcmljLXkgKz0gdHlwZXMuaAorZ2VuZXJpYy15ICs9IHVjb250ZXh0LmgKK2dlbmVyaWMteSArPSB1bmFsaWduZWQuaAorZ2VuZXJpYy15ICs9IHVzZXIuaAorZ2VuZXJpYy15ICs9IHZnYS5oCitnZW5lcmljLXkgKz0geG9yLmgKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9NYWtlZmlsZQppbmRleCBlYzIzYTJmLi5hZWIwZjE4IDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC91bmljb3JlMzIva2VybmVsL01ha2VmaWxlCkBAIC0xNiw3ICsxNiw2IEBACiBvYmotJChDT05GSUdfQVJDSF9QVVYzKQkJKz0gY2xvY2subyBpcnEubyB0aW1lLm8KIAogb2JqLSQoQ09ORklHX1BVVjNfR1BJTykJCSs9IGdwaW8ubwotb2JqLSQoQ09ORklHX1BVVjNfUlRDKQkJKz0gcnRjLm8KIG9iai0kKENPTkZJR19QVVYzX1BXTSkJCSs9IHB3bS5vCiBvYmotJChDT05GSUdfUFVWM19QTSkJCSs9IHBtLm8gc2xlZXAubwogb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkrPSBoaWJlcm5hdGUubyBoaWJlcm5hdGVfYXNtLm8KZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC91bmljb3JlMzIva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggOWJmN2Y3YS4uNzdlNDA3ZSAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC91bmljb3JlMzIva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTMwLDcgKzMwLDcgQEAKIAlIRUFEX1RFWFRfU0VDVElPTgogCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKIAlJTklUX0RBVEFfU0VDVElPTigxNikKLQlQRVJDUFUoTDFfQ0FDSEVfQllURVMsIFBBR0VfU0laRSkKKwlQRVJDUFVfU0VDVElPTihMMV9DQUNIRV9CWVRFUykKIAlfX2luaXRfZW5kID0gLjsKIAogCV9zdGV4dCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1ibG9jay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWVtYmxvY2suaAppbmRleCAxOWFlMTRiLi4wY2QzODAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tZW1ibG9jay5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21lbWJsb2NrLmgKQEAgLTQsNyArNCw2IEBACiAjZGVmaW5lIEFSQ0hfRElTQ0FSRF9NRU1CTE9DSwogCiB1NjQgbWVtYmxvY2tfeDg2X2ZpbmRfaW5fcmFuZ2Vfc2l6ZSh1NjQgc3RhcnQsIHU2NCAqc2l6ZXAsIHU2NCBhbGlnbik7Ci12b2lkIG1lbWJsb2NrX3g4Nl90b19ib290bWVtKHU2NCBzdGFydCwgdTY0IGVuZCk7CiAKIHZvaWQgbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lKTsKIHZvaWQgbWVtYmxvY2tfeDg2X2ZyZWVfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgZW5kKTsKQEAgLTE5LDUgKzE4LDYgQEAKIHU2NCBtZW1ibG9ja194ODZfZmluZF9pbl9yYW5nZV9ub2RlKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsIHU2NCBhbGlnbik7CiB1NjQgbWVtYmxvY2tfeDg2X2ZyZWVfbWVtb3J5X2luX3JhbmdlKHU2NCBhZGRyLCB1NjQgbGltaXQpOwogdTY0IG1lbWJsb2NrX3g4Nl9tZW1vcnlfaW5fcmFuZ2UodTY0IGFkZHIsIHU2NCBsaW1pdCk7Citib29sIG1lbWJsb2NrX3g4Nl9jaGVja19yZXNlcnZlZF9zaXplKHU2NCAqYWRkcnAsIHU2NCAqc2l6ZXAsIHU2NCBhbGlnbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHZjbG9jay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHZjbG9jay5oCmluZGV4IDMxZDg0YWMuLmE1MThjMGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B2Y2xvY2suaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdmNsb2NrLmgKQEAgLTIyLDYgKzIyLDggQEAKIAl1NjQgcHJvZHVjdDsKICNpZmRlZiBfX2kzODZfXwogCXUzMiB0bXAxLCB0bXAyOworI2Vsc2UKKwl1bG9uZyB0bXA7CiAjZW5kaWYKIAogCWlmIChzaGlmdCA8IDApCkBAIC00Miw4ICs0NCwxMSBAQAogCQk6ICJhIiAoKHUzMilkZWx0YSksICIxIiAoKHUzMikoZGVsdGEgPj4gMzIpKSwgIjIiIChtdWxfZnJhYykgKTsKICNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKIAlfX2FzbV9fICgKLQkJIm11bCAlJXJkeCA7IHNocmQgJDMyLCUlcmR4LCUlcmF4IgotCQk6ICI9YSIgKHByb2R1Y3QpIDogIjAiIChkZWx0YSksICJkIiAoKHU2NCltdWxfZnJhYykgKTsKKwkJIm11bCAlW211bF9mcmFjXSA7IHNocmQgJDMyLCAlW2hpXSwgJVtsb10iCisJCTogW2xvXSI9YSIocHJvZHVjdCksCisJCSAgW2hpXSI9ZCIodG1wKQorCQk6ICIwIihkZWx0YSksCisJCSAgW211bF9mcmFjXSJybSIoKHU2NCltdWxfZnJhYykpOwogI2Vsc2UKICNlcnJvciBpbXBsZW1lbnQgbWUhCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCBjZDhjYmViLi43YzNhOTVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdV9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXVfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYW1kX2lvbW11Lmg+CkBAIC0xNTQsNiArMTU1LDEwIEBACiAJcGRldiA9IHBjaV9nZXRfYnVzX2FuZF9zbG90KFBDSV9CVVMoYWxpYXMpLCBhbGlhcyAmIDB4ZmYpOwogCWlmIChwZGV2KQogCQlkZXZfZGF0YS0+YWxpYXMgPSAmcGRldi0+ZGV2OworCWVsc2UgeworCQlrZnJlZShkZXZfZGF0YSk7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQogCiAJYXRvbWljX3NldCgmZGV2X2RhdGEtPmJpbmQsIDApOwogCkBAIC0xNjMsNiArMTY4LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGlvbW11X2lnbm9yZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXUxNiBkZXZpZCwgYWxpYXM7CisKKwlkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKKwlhbGlhcyA9IGFtZF9pb21tdV9hbGlhc190YWJsZVtkZXZpZF07CisKKwltZW1zZXQoJmFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLCAwLCBzaXplb2Yoc3RydWN0IGRldl90YWJsZV9lbnRyeSkpOworCW1lbXNldCgmYW1kX2lvbW11X2Rldl90YWJsZVthbGlhc10sIDAsIHNpemVvZihzdHJ1Y3QgZGV2X3RhYmxlX2VudHJ5KSk7CisKKwlhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF0gPSBOVUxMOworCWFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2FsaWFzXSA9IE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIGlvbW11X3VuaW5pdF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewogCWtmcmVlKGRldi0+YXJjaGRhdGEuaW9tbXUpOwpAQCAtMTkyLDcgKzIxMSw5IEBACiAJCQljb250aW51ZTsKIAogCQlyZXQgPSBpb21tdV9pbml0X2RldmljZSgmcGRldi0+ZGV2KTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCA9PSAtRU5PVFNVUFApCisJCQlpb21tdV9pZ25vcmVfZGV2aWNlKCZwZGV2LT5kZXYpOworCQllbHNlIGlmIChyZXQpCiAJCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMjM4Myw2ICsyNDA0LDIzIEBACiAJLmRtYV9zdXBwb3J0ZWQgPSBhbWRfaW9tbXVfZG1hX3N1cHBvcnRlZCwKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBkZXZpY2VfZG1hX29wc19pbml0KHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXVuc2lnbmVkIHVuaGFuZGxlZCA9IDA7CisKKwlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKKwkJaWYgKCFjaGVja19kZXZpY2UoJnBkZXYtPmRldikpIHsKKwkJCXVuaGFuZGxlZCArPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlwZGV2LT5kZXYuYXJjaGRhdGEuZG1hX29wcyA9ICZhbWRfaW9tbXVfZG1hX29wczsKKwl9CisKKwlyZXR1cm4gdW5oYW5kbGVkOworfQorCiAvKgogICogVGhlIGZ1bmN0aW9uIHdoaWNoIGNsdWVzIHRoZSBBTUQgSU9NTVUgZHJpdmVyIGludG8gZG1hX29wcy4KICAqLwpAQCAtMjM5NSw3ICsyNDMzLDcgQEAKIGludCBfX2luaXQgYW1kX2lvbW11X2luaXRfZG1hX29wcyh2b2lkKQogewogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwotCWludCByZXQ7CisJaW50IHJldCwgdW5oYW5kbGVkOwogCiAJLyoKIAkgKiBmaXJzdCBhbGxvY2F0ZSBhIGRlZmF1bHQgcHJvdGVjdGlvbiBkb21haW4gZm9yIGV2ZXJ5IElPTU1VIHdlCkBAIC0yNDIxLDcgKzI0NTksMTEgQEAKIAlzd2lvdGxiID0gMDsKIAogCS8qIE1ha2UgdGhlIGRyaXZlciBmaW5hbGx5IHZpc2libGUgdG8gdGhlIGRyaXZlcnMgKi8KLQlkbWFfb3BzID0gJmFtZF9pb21tdV9kbWFfb3BzOworCXVuaGFuZGxlZCA9IGRldmljZV9kbWFfb3BzX2luaXQoKTsKKwlpZiAodW5oYW5kbGVkICYmIG1heF9wZm4gPiBNQVhfRE1BMzJfUEZOKSB7CisJCS8qIFRoZXJlIGFyZSB1bmhhbmRsZWQgZGV2aWNlcyAtIGluaXRpYWxpemUgc3dpb3RsYiBmb3IgdGhlbSAqLworCQlzd2lvdGxiID0gMTsKKwl9CiAKIAlhbWRfaW9tbXVfc3RhdHNfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCmluZGV4IDkxNzljMjEuLmJmYzg0NTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCkBAIC03MzEsOCArNzMxLDggQEAKIHsKIAl1OCAqcCA9ICh1OCAqKWg7CiAJdTggKmVuZCA9IHAsIGZsYWdzID0gMDsKLQl1MTYgZGV2X2ksIGRldmlkID0gMCwgZGV2aWRfc3RhcnQgPSAwLCBkZXZpZF90byA9IDA7Ci0JdTMyIGV4dF9mbGFncyA9IDA7CisJdTE2IGRldmlkID0gMCwgZGV2aWRfc3RhcnQgPSAwLCBkZXZpZF90byA9IDA7CisJdTMyIGRldl9pLCBleHRfZmxhZ3MgPSAwOwogCWJvb2wgYWxpYXMgPSBmYWxzZTsKIAlzdHJ1Y3QgaXZoZF9lbnRyeSAqZTsKIApAQCAtODg3LDcgKzg4Nyw3IEBACiAvKiBJbml0aWFsaXplcyB0aGUgZGV2aWNlLT5pb21tdSBtYXBwaW5nIGZvciB0aGUgZHJpdmVyICovCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2lvbW11X2RldmljZXMoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpCiB7Ci0JdTE2IGk7CisJdTMyIGk7CiAKIAlmb3IgKGkgPSBpb21tdS0+Zmlyc3RfZGV2aWNlOyBpIDw9IGlvbW11LT5sYXN0X2RldmljZTsgKytpKQogCQlzZXRfaW9tbXVfZm9yX2RldmljZShpb21tdSwgaSk7CkBAIC0xMTc3LDcgKzExNzcsNyBAQAogICovCiBzdGF0aWMgdm9pZCBpbml0X2RldmljZV90YWJsZSh2b2lkKQogewotCXUxNiBkZXZpZDsKKwl1MzIgZGV2aWQ7CiAKIAlmb3IgKGRldmlkID0gMDsgZGV2aWQgPD0gYW1kX2lvbW11X2xhc3RfYmRmOyArK2RldmlkKSB7CiAJCXNldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfVkFMSUQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCmluZGV4IGI5NjFhZjguLmI5MzM4YjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTM5MCw3ICszOTAsOCBAQAogCiAvKgogICogSWYgbWFzaz0xLCB0aGUgTFZUIGVudHJ5IGRvZXMgbm90IGdlbmVyYXRlIGludGVycnVwdHMgd2hpbGUgbWFzaz0wCi0gKiBlbmFibGVzIHRoZSB2ZWN0b3IuIFNlZSBhbHNvIHRoZSBCS0RHcy4KKyAqIGVuYWJsZXMgdGhlIHZlY3Rvci4gU2VlIGFsc28gdGhlIEJLREdzLiBNdXN0IGJlIGNhbGxlZCB3aXRoCisgKiBwcmVlbXB0aW9uIGRpc2FibGVkLgogICovCiAKIGludCBzZXR1cF9BUElDX2VpbHZ0KHU4IG9mZnNldCwgdTggdmVjdG9yLCB1OCBtc2dfdHlwZSwgdTggbWFzaykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCmluZGV4IGI1MTFhMDEuLmFkYzY2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwpAQCAtNjMyLDE0ICs2MzIsMTQgQEAKIAogLyogRGlyZWN0IExlZ2FjeSBWR0EgSS9PIHRyYWZmaWMgdG8gZGVzaWduYXRlZCBJT0ggKi8KIGludCB1dl9zZXRfdmdhX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIGRlY29kZSwKLQkJICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmRfYml0cywgYm9vbCBjaGFuZ2VfYnJpZGdlKQorCQkgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9iaXRzLCB1MzIgZmxhZ3MpCiB7CiAJaW50IGRvbWFpbiwgYnVzLCByYzsKIAotCVBSX0RFVkVMKCJkZXZmbiAleCBkZWNvZGUgJWQgY21kICV4IGNoZ19icmRnICVkXG4iLAotCQkJcGRldi0+ZGV2Zm4sIGRlY29kZSwgY29tbWFuZF9iaXRzLCBjaGFuZ2VfYnJpZGdlKTsKKwlQUl9ERVZFTCgiZGV2Zm4gJXggZGVjb2RlICVkIGNtZCAleCBmbGFncyAlZFxuIiwKKwkJCXBkZXYtPmRldmZuLCBkZWNvZGUsIGNvbW1hbmRfYml0cywgZmxhZ3MpOwogCi0JaWYgKCFjaGFuZ2VfYnJpZGdlKQorCWlmICghKGZsYWdzICYgUENJX1ZHQV9TVEFURV9DSEFOR0VfQlJJREdFKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoKGNvbW1hbmRfYml0cyAmIFBDSV9DT01NQU5EX0lPKSA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYyBiL2FyY2gveDg2L2tlcm5lbC9kZXZpY2V0cmVlLmMKaW5kZXggNjkwYmM4NC4uOWFlYjc4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZGV2aWNldHJlZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogCiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KICNpbmNsdWRlIDxhc20vaXJxX2NvbnRyb2xsZXIuaD4KQEAgLTk4LDYgKzk5LDE2IEBACiAJcmV0dXJuIF9fYWxsb2NfYm9vdG1lbShzaXplLCBhbGlnbiwgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKIH0KIAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9zZXR1cF9pbml0cmRfYXJjaCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShzdGFydCk7CisJaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKV9fdmEoZW5kKTsKKwlpbml0cmRfYmVsb3dfc3RhcnRfb2sgPSAxOworfQorI2VuZGlmCisKIHZvaWQgX19pbml0IGFkZF9kdGIodTY0IGRhdGEpCiB7CiAJaW5pdGlhbF9kdGIgPSBkYXRhICsgb2Zmc2V0b2Yoc3RydWN0IHNldHVwX2RhdGEsIGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMmU0OTI4ZC4uZTFiYThjYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMzcsNyArMzM3LDcgQEAKICAqIFBvd2VybWFuYWdlbWVudCBpZGxlIGZ1bmN0aW9uLCBpZiBhbnkuLgogICovCiB2b2lkICgqcG1faWRsZSkodm9pZCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVBNX01PRFVMRSkgJiYgZGVmaW5lZChDT05GSUdfQVBNX0NQVV9JRExFKQorI2lmZGVmIENPTkZJR19BUE1fTU9EVUxFCiBFWFBPUlRfU1lNQk9MKHBtX2lkbGUpOwogI2VuZGlmCiAKQEAgLTM5OSw3ICszOTksNyBAQAogCQljcHVfcmVsYXgoKTsKIAl9CiB9Ci0jaWYgZGVmaW5lZChDT05GSUdfQVBNX01PRFVMRSkgJiYgZGVmaW5lZChDT05GSUdfQVBNX0NQVV9JRExFKQorI2lmZGVmIENPTkZJR19BUE1fTU9EVUxFCiBFWFBPUlRfU1lNQk9MKGRlZmF1bHRfaWRsZSk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggOGQxMjg3OC4uYTNkMGRjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0yNDUsNyArMjQ1LDYgQEAKIHsKIAlzZXRfdXNlcl9ncyhyZWdzLCAwKTsKIAlyZWdzLT5mcwkJPSAwOwotCXNldF9mcyhVU0VSX0RTKTsKIAlyZWdzLT5kcwkJPSBfX1VTRVJfRFM7CiAJcmVncy0+ZXMJCT0gX19VU0VSX0RTOwogCXJlZ3MtPnNzCQk9IF9fVVNFUl9EUzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IDZjOWRkOTIuLmNhNmY3YWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMzM4LDcgKzMzOCw2IEBACiAJcmVncy0+Y3MJCT0gX2NzOwogCXJlZ3MtPnNzCQk9IF9zczsKIAlyZWdzLT5mbGFncwkJPSBYODZfRUZMQUdTX0lGOwotCXNldF9mcyhVU0VSX0RTKTsKIAkvKgogCSAqIEZyZWUgdGhlIG9sZCBGUCBhbmQgb3RoZXIgZXh0ZW5kZWQgc3RhdGUKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDMzYTBjMTEuLjlmZDMxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMjg1LDYgKzI4NSwxOSBAQAogCXBlcl9jcHUoY3B1X3N0YXRlLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0gQ1BVX09OTElORTsKIAl4ODZfcGxhdGZvcm0ubm1pX2luaXQoKTsKIAorCS8qCisJICogV2FpdCB1bnRpbCB0aGUgY3B1IHdoaWNoIGJyb3VnaHQgdGhpcyBvbmUgdXAgbWFya2VkIGl0CisJICogb25saW5lIGJlZm9yZSBlbmFibGluZyBpbnRlcnJ1cHRzLiBJZiB3ZSBkb24ndCBkbyB0aGF0IHRoZW4KKwkgKiB3ZSBjYW4gZW5kIHVwIHdha2luZyB1cCB0aGUgc29mdGlycSB0aHJlYWQgYmVmb3JlIHRoaXMgY3B1CisJICogcmVhY2hlZCB0aGUgYWN0aXZlIHN0YXRlLCB3aGljaCBtYWtlcyB0aGUgc2NoZWR1bGVyIHVuaGFwcHkKKwkgKiBhbmQgc2NoZWR1bGUgdGhlIHNvZnRpcnEgdGhyZWFkIG9uIHRoZSB3cm9uZyBjcHUuIFRoaXMgaXMKKwkgKiBvbmx5IG9ic2VydmFibGUgd2l0aCBmb3JjZWQgdGhyZWFkZWQgaW50ZXJydXB0cywgYnV0IGluCisJICogdGhlb3J5IGl0IGNvdWxkIGFsc28gaGFwcGVuIHcvbyB0aGVtLiBJdCdzIGp1c3Qgd2F5IGhhcmRlcgorCSAqIHRvIGFjaGlldmUuCisJICovCisJd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X2FjdGl2ZV9tYXNrKSkKKwkJY3B1X3JlbGF4KCk7CisKIAkvKiBlbmFibGUgbG9jYWwgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKaW5kZXggZDZlMjQ3Ny4uNmRmODhjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCkBAIC00NywzOCArNDcsNDAgQEAKICNkZWZpbmUgRHN0REkgICAgICAgKDU8PDEpCS8qIERlc3RpbmF0aW9uIGlzIGluIEVTOihFKURJICovCiAjZGVmaW5lIERzdE1lbTY0ICAgICg2PDwxKQkvKiA2NGJpdCBtZW1vcnkgb3BlcmFuZCAqLwogI2RlZmluZSBEc3RJbW1VQnl0ZSAoNzw8MSkJLyogOC1iaXQgdW5zaWduZWQgaW1tZWRpYXRlIG9wZXJhbmQgKi8KLSNkZWZpbmUgRHN0TWFzayAgICAgKDc8PDEpCisjZGVmaW5lIERzdERYICAgICAgICg4PDwxKQkvKiBEZXN0aW5hdGlvbiBpcyBpbiBEWCByZWdpc3RlciAqLworI2RlZmluZSBEc3RNYXNrICAgICAoMHhmPDwxKQogLyogU291cmNlIG9wZXJhbmQgdHlwZS4gKi8KLSNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDQpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NCkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDQpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NCkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCi0jZGVmaW5lIFNyY01lbTMyICAgICg0PDw0KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KLSNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDQpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NCkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjT25lICAgICAgKDc8PDQpCS8qIEltcGxpZWQgJzEnICovCi0jZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw0KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NCkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KLSNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NCkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KLSNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NCkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLwotI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw0KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCi0jZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDQpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLwotI2RlZmluZSBTcmNJbW1VMTYgICAoMHhlPDw0KSAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQsIDE2IGJpdHMgKi8KLSNkZWZpbmUgU3JjTWFzayAgICAgKDB4Zjw8NCkKKyNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDUpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NSkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDUpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NSkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCisjZGVmaW5lIFNyY01lbTMyICAgICg0PDw1KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KKyNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDUpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NSkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjT25lICAgICAgKDc8PDUpCS8qIEltcGxpZWQgJzEnICovCisjZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw1KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NSkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KKyNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NSkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KKyNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NSkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLworI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw1KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCisjZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDUpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLworI2RlZmluZSBTcmNJbW1VMTYgICAoMHhlPDw1KSAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQsIDE2IGJpdHMgKi8KKyNkZWZpbmUgU3JjRFggICAgICAgKDB4Zjw8NSkJLyogU291cmNlIGlzIGluIERYIHJlZ2lzdGVyICovCisjZGVmaW5lIFNyY01hc2sgICAgICgweGY8PDUpCiAvKiBHZW5lcmljIE1vZFJNIGRlY29kZS4gKi8KLSNkZWZpbmUgTW9kUk0gICAgICAgKDE8PDgpCisjZGVmaW5lIE1vZFJNICAgICAgICgxPDw5KQogLyogRGVzdGluYXRpb24gaXMgb25seSB3cml0dGVuOyBuZXZlciByZWFkLiAqLwotI2RlZmluZSBNb3YgICAgICAgICAoMTw8OSkKLSNkZWZpbmUgQml0T3AgICAgICAgKDE8PDEwKQotI2RlZmluZSBNZW1BYnMgICAgICAoMTw8MTEpICAgICAgLyogTWVtb3J5IG9wZXJhbmQgaXMgYWJzb2x1dGUgZGlzcGxhY2VtZW50ICovCi0jZGVmaW5lIFN0cmluZyAgICAgICgxPDwxMikgICAgIC8qIFN0cmluZyBpbnN0cnVjdGlvbiAocmVwIGNhcGFibGUpICovCi0jZGVmaW5lIFN0YWNrICAgICAgICgxPDwxMykgICAgIC8qIFN0YWNrIGluc3RydWN0aW9uIChwdXNoL3BvcCkgKi8KLSNkZWZpbmUgR3JvdXBNYXNrICAgKDc8PDE0KSAgICAgLyogT3Bjb2RlIHVzZXMgb25lIG9mIHRoZSBncm91cCBtZWNoYW5pc21zICovCi0jZGVmaW5lIEdyb3VwICAgICAgICgxPDwxNCkgICAgIC8qIEJpdHMgMzo1IG9mIG1vZHJtIGJ5dGUgZXh0ZW5kIG9wY29kZSAqLwotI2RlZmluZSBHcm91cER1YWwgICAoMjw8MTQpICAgICAvKiBBbHRlcm5hdGUgZGVjb2Rpbmcgb2YgbW9kID09IDMgKi8KLSNkZWZpbmUgUHJlZml4ICAgICAgKDM8PDE0KSAgICAgLyogSW5zdHJ1Y3Rpb24gdmFyaWVzIHdpdGggNjYvZjIvZjMgcHJlZml4ICovCi0jZGVmaW5lIFJNRXh0ICAgICAgICg0PDwxNCkgICAgIC8qIE9wY29kZSBleHRlbnNpb24gaW4gTW9kUk0gci9tIGlmIG1vZCA9PSAzICovCi0jZGVmaW5lIFNzZSAgICAgICAgICgxPDwxNykgICAgIC8qIFNTRSBWZWN0b3IgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgTW92ICAgICAgICAgKDE8PDEwKQorI2RlZmluZSBCaXRPcCAgICAgICAoMTw8MTEpCisjZGVmaW5lIE1lbUFicyAgICAgICgxPDwxMikgICAgICAvKiBNZW1vcnkgb3BlcmFuZCBpcyBhYnNvbHV0ZSBkaXNwbGFjZW1lbnQgKi8KKyNkZWZpbmUgU3RyaW5nICAgICAgKDE8PDEzKSAgICAgLyogU3RyaW5nIGluc3RydWN0aW9uIChyZXAgY2FwYWJsZSkgKi8KKyNkZWZpbmUgU3RhY2sgICAgICAgKDE8PDE0KSAgICAgLyogU3RhY2sgaW5zdHJ1Y3Rpb24gKHB1c2gvcG9wKSAqLworI2RlZmluZSBHcm91cE1hc2sgICAoNzw8MTUpICAgICAvKiBPcGNvZGUgdXNlcyBvbmUgb2YgdGhlIGdyb3VwIG1lY2hhbmlzbXMgKi8KKyNkZWZpbmUgR3JvdXAgICAgICAgKDE8PDE1KSAgICAgLyogQml0cyAzOjUgb2YgbW9kcm0gYnl0ZSBleHRlbmQgb3Bjb2RlICovCisjZGVmaW5lIEdyb3VwRHVhbCAgICgyPDwxNSkgICAgIC8qIEFsdGVybmF0ZSBkZWNvZGluZyBvZiBtb2QgPT0gMyAqLworI2RlZmluZSBQcmVmaXggICAgICAoMzw8MTUpICAgICAvKiBJbnN0cnVjdGlvbiB2YXJpZXMgd2l0aCA2Ni9mMi9mMyBwcmVmaXggKi8KKyNkZWZpbmUgUk1FeHQgICAgICAgKDQ8PDE1KSAgICAgLyogT3Bjb2RlIGV4dGVuc2lvbiBpbiBNb2RSTSByL20gaWYgbW9kID09IDMgKi8KKyNkZWZpbmUgU3NlICAgICAgICAgKDE8PDE4KSAgICAgLyogU1NFIFZlY3RvciBpbnN0cnVjdGlvbiAqLwogLyogTWlzYyBmbGFncyAqLwogI2RlZmluZSBQcm90ICAgICAgICAoMTw8MjEpIC8qIGluc3RydWN0aW9uIGdlbmVyYXRlcyAjVUQgaWYgbm90IGluIHByb3QtbW9kZSAqLwogI2RlZmluZSBWZW5kb3JTcGVjaWZpYyAoMTw8MjIpIC8qIFZlbmRvciBzcGVjaWZpYyBpbnN0cnVjdGlvbiAqLwpAQCAtMzE1NCw4ICszMTU2LDggQEAKIAlJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgU3JjMkltbSwgZW1faW11bF8zb3ApLAogCUkoU3JjSW1tQnl0ZSB8IE1vdiB8IFN0YWNrLCBlbV9wdXNoKSwKIAlJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgU3JjMkltbUJ5dGUsIGVtX2ltdWxfM29wKSwKLQlEMmJ2SVAoRHN0REkgfCBNb3YgfCBTdHJpbmcsIGlucywgY2hlY2tfcGVybV9pbiksIC8qIGluc2IsIGluc3cvaW5zZCAqLwotCUQyYnZJUChTcmNTSSB8IEltcGxpY2l0T3BzIHwgU3RyaW5nLCBvdXRzLCBjaGVja19wZXJtX291dCksIC8qIG91dHNiLCBvdXRzdy9vdXRzZCAqLworCUQyYnZJUChEc3RESSB8IFNyY0RYIHwgTW92IHwgU3RyaW5nLCBpbnMsIGNoZWNrX3Blcm1faW4pLCAvKiBpbnNiLCBpbnN3L2luc2QgKi8KKwlEMmJ2SVAoU3JjU0kgfCBEc3REWCB8IFN0cmluZywgb3V0cywgY2hlY2tfcGVybV9vdXQpLCAvKiBvdXRzYiwgb3V0c3cvb3V0c2QgKi8KIAkvKiAweDcwIC0gMHg3RiAqLwogCVgxNihEKFNyY0ltbUJ5dGUpKSwKIAkvKiAweDgwIC0gMHg4NyAqLwpAQCAtMzIxMiw4ICszMjE0LDggQEAKIAkvKiAweEU4IC0gMHhFRiAqLwogCUQoU3JjSW1tIHwgU3RhY2spLCBEKFNyY0ltbSB8IEltcGxpY2l0T3BzKSwKIAlEKFNyY0ltbUZBZGRyIHwgTm82NCksIEQoU3JjSW1tQnl0ZSB8IEltcGxpY2l0T3BzKSwKLQlEMmJ2SVAoU3JjTm9uZSB8IERzdEFjYywgICAgIGluLCAgY2hlY2tfcGVybV9pbiksCi0JRDJidklQKFNyY0FjYyB8IEltcGxpY2l0T3BzLCBvdXQsIGNoZWNrX3Blcm1fb3V0KSwKKwlEMmJ2SVAoU3JjRFggfCBEc3RBY2MsIGluLCAgY2hlY2tfcGVybV9pbiksCisJRDJidklQKFNyY0FjYyB8IERzdERYLCBvdXQsIGNoZWNrX3Blcm1fb3V0KSwKIAkvKiAweEYwIC0gMHhGNyAqLwogCU4sIERJKEltcGxpY2l0T3BzLCBpY2VicCksIE4sIE4sCiAJREkoSW1wbGljaXRPcHMgfCBQcml2LCBobHQpLCBEKEltcGxpY2l0T3BzKSwKQEAgLTM2MTMsNiArMzYxNSwxMiBAQAogCQltZW1vcC5ieXRlcyA9IGMtPm9wX2J5dGVzICsgMjsKIAkJZ290byBzcmNtZW1fY29tbW9uOwogCQlicmVhazsKKwljYXNlIFNyY0RYOgorCQljLT5zcmMudHlwZSA9IE9QX1JFRzsKKwkJYy0+c3JjLmJ5dGVzID0gMjsKKwkJYy0+c3JjLmFkZHIucmVnID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWZldGNoX3JlZ2lzdGVyX29wZXJhbmQoJmMtPnNyYyk7CisJCWJyZWFrOwogCX0KIAogCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQpAQCAtMzY4Miw2ICszNjkwLDEyIEBACiAJCWMtPmRzdC5hZGRyLm1lbS5zZWcgPSBWQ1BVX1NSRUdfRVM7CiAJCWMtPmRzdC52YWwgPSAwOwogCQlicmVhazsKKwljYXNlIERzdERYOgorCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKKwkJYy0+ZHN0LmJ5dGVzID0gMjsKKwkJYy0+ZHN0LmFkZHIucmVnID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWZldGNoX3JlZ2lzdGVyX29wZXJhbmQoJmMtPmRzdCk7CisJCWJyZWFrOwogCWNhc2UgSW1wbGljaXRPcHM6CiAJCS8qIFNwZWNpYWwgaW5zdHJ1Y3Rpb25zIGRvIHRoZWlyIG93biBvcGVyYW5kIGRlY29kaW5nLiAqLwogCWRlZmF1bHQ6CkBAIC00MDI3LDcgKzQwNDEsNiBAQAogCQlicmVhazsKIAljYXNlIDB4ZWM6IC8qIGluIGFsLGR4ICovCiAJY2FzZSAweGVkOiAvKiBpbiAoZS9yKWF4LGR4ICovCi0JCWMtPnNyYy52YWwgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOwogCWRvX2lvX2luOgogCQlpZiAoIXBpb19pbl9lbXVsYXRlZChjdHh0LCBvcHMsIGMtPmRzdC5ieXRlcywgYy0+c3JjLnZhbCwKIAkJCQkgICAgICZjLT5kc3QudmFsKSkKQEAgLTQwMzUsNyArNDA0OCw2IEBACiAJCWJyZWFrOwogCWNhc2UgMHhlZTogLyogb3V0IGR4LGFsICovCiAJY2FzZSAweGVmOiAvKiBvdXQgZHgsKGUvcilheCAqLwotCQljLT5kc3QudmFsID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXTsKIAlkb19pb19vdXQ6CiAJCW9wcy0+cGlvX291dF9lbXVsYXRlZChjdHh0LCBjLT5zcmMuYnl0ZXMsIGMtPmRzdC52YWwsCiAJCQkJICAgICAgJmMtPnNyYy52YWwsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS5jCmluZGV4IGJkMTRiYjQuLmFlZTM4NjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11LmMKQEAgLTU2NSw3ICs1NjUsNyBAQAogCiBzdGF0aWMgYm9vbCBtYXBwaW5nX2xldmVsX2RpcnR5X2JpdG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGxhcmdlX2dmbikKIHsKLQlyZXR1cm4gZ2ZuX3RvX21lbXNsb3RfZGlydHlfYml0bWFwKHZjcHUsIGxhcmdlX2dmbiwgdHJ1ZSk7CisJcmV0dXJuICFnZm5fdG9fbWVtc2xvdF9kaXJ0eV9iaXRtYXAodmNwdSwgbGFyZ2VfZ2ZuLCB0cnVlKTsKIH0KIAogc3RhdGljIGludCBtYXBwaW5nX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgbGFyZ2VfZ2ZuKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmggYi9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaAppbmRleCA2YzRkYzAxLi45ZDAzYWQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaAorKysgYi9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaApAQCAtMTIxLDcgKzEyMSw3IEBACiAJCQkJICAgIGd2YV90IGFkZHIsIHUzMiBhY2Nlc3MpCiB7CiAJcHRfZWxlbWVudF90IHB0ZTsKLQlwdF9lbGVtZW50X3QgX191c2VyICpwdGVwX3VzZXI7CisJcHRfZWxlbWVudF90IF9fdXNlciAqdW5pbml0aWFsaXplZF92YXIocHRlcF91c2VyKTsKIAlnZm5fdCB0YWJsZV9nZm47CiAJdW5zaWduZWQgaW5kZXgsIHB0X2FjY2VzcywgdW5pbml0aWFsaXplZF92YXIocHRlX2FjY2Vzcyk7CiAJZ3BhX3QgcHRlX2dwYTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguYyBiL2FyY2gveDg2L2t2bS92bXguYwppbmRleCA0YzNmYTBmLi5kNDhlYzYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC0yMDQ3LDcgKzIwNDcsOCBAQAogCQkJCQl1bnNpZ25lZCBsb25nIGNyMCwKIAkJCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXZteF9kZWNhY2hlX2NyMyh2Y3B1KTsKKwlpZiAoIXRlc3RfYml0KFZDUFVfRVhSRUdfQ1IzLCAodWxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKSkKKwkJdm14X2RlY2FjaGVfY3IzKHZjcHUpOwogCWlmICghKGNyMCAmIFg4Nl9DUjBfUEcpKSB7CiAJCS8qIEZyb20gcGFnaW5nL3N0YXJ0aW5nIHRvIG5vbnBhZ2luZyAqLwogCQl2bWNzX3dyaXRlMzIoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21lbWJsb2NrLmMgYi9hcmNoL3g4Ni9tbS9tZW1ibG9jay5jCmluZGV4IGFhMTE2OTMuLjk5MmRhNWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21lbWJsb2NrLmMKKysrIGIvYXJjaC94ODYvbW0vbWVtYmxvY2suYwpAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yYW5nZS5oPgogCiAvKiBDaGVjayBmb3IgYWxyZWFkeSByZXNlcnZlZCBhcmVhcyAqLwotc3RhdGljIGJvb2wgX19pbml0IGNoZWNrX3dpdGhfbWVtYmxvY2tfcmVzZXJ2ZWRfc2l6ZSh1NjQgKmFkZHJwLCB1NjQgKnNpemVwLCB1NjQgYWxpZ24pCitib29sIF9faW5pdCBtZW1ibG9ja194ODZfY2hlY2tfcmVzZXJ2ZWRfc2l6ZSh1NjQgKmFkZHJwLCB1NjQgKnNpemVwLCB1NjQgYWxpZ24pCiB7CiAJc3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcjsKIAl1NjQgYWRkciA9ICphZGRycCwgbGFzdDsKQEAgLTU5LDcgKzU5LDcgQEAKIAkJaWYgKGFkZHIgPj0gZWlfbGFzdCkKIAkJCWNvbnRpbnVlOwogCQkqc2l6ZXAgPSBlaV9sYXN0IC0gYWRkcjsKLQkJd2hpbGUgKGNoZWNrX3dpdGhfbWVtYmxvY2tfcmVzZXJ2ZWRfc2l6ZSgmYWRkciwgc2l6ZXAsIGFsaWduKSkKKwkJd2hpbGUgKG1lbWJsb2NrX3g4Nl9jaGVja19yZXNlcnZlZF9zaXplKCZhZGRyLCBzaXplcCwgYWxpZ24pKQogCQkJOwogCiAJCWlmICgqc2l6ZXApCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCmluZGV4IDlmZDhhNTYuLjljYmI3MTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX2FtZC5jCkBAIC02MDksMTYgKzYwOSwyMSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVGhpcyBydW5zIG9ubHkgb24gdGhlIGN1cnJlbnQgY3B1LiBXZSB0cnkgdG8gZmluZCBhbiBMVlQgb2Zmc2V0IGFuZAorICogc2V0dXAgdGhlIGxvY2FsIEFQSUMuIEZvciB0aGlzIHdlIG11c3QgZGlzYWJsZSBwcmVlbXB0aW9uLiBPbgorICogc3VjY2VzcyB3ZSBpbml0aWFsaXplIGFsbCBub2RlcyB3aXRoIHRoaXMgb2Zmc2V0LiBUaGlzIHVwZGF0ZXMgdGhlbgorICogdGhlIG9mZnNldCBpbiB0aGUgSUJTX0NUTCBwZXItbm9kZSBtc3IuIFRoZSBwZXItY29yZSBBUElDIHNldHVwIG9mCisgKiB0aGUgSUJTIGludGVycnVwdCB2ZWN0b3IgaXMgY2FsbGVkIGZyb20gb3BfYW1kX3NldHVwX2N0cnMoKS9vcF8tCisgKiBhbWRfY3B1X3NodXRkb3duKCkgdXNpbmcgdGhlIG5ldyBvZmZzZXQuCisgKi8KIHN0YXRpYyBpbnQgZm9yY2VfaWJzX2VpbHZ0X3NldHVwKHZvaWQpCiB7CiAJaW50IG9mZnNldDsKIAlpbnQgcmV0OwogCi0JLyoKLQkgKiBmaW5kIHRoZSBuZXh0IGZyZWUgYXZhaWxhYmxlIEVJTFZUIGVudHJ5LCBza2lwIG9mZnNldCAwLAotCSAqIHBpbiBzZWFyY2ggdG8gdGhpcyBjcHUKLQkgKi8KIAlwcmVlbXB0X2Rpc2FibGUoKTsKKwkvKiBmaW5kIHRoZSBuZXh0IGZyZWUgYXZhaWxhYmxlIEVJTFZUIGVudHJ5LCBza2lwIG9mZnNldCAwICovCiAJZm9yIChvZmZzZXQgPSAxOyBvZmZzZXQgPCBBUElDX0VJTFZUX05SX01BWDsgb2Zmc2V0KyspIHsKIAkJaWYgKGdldF9laWx2dChvZmZzZXQpKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMKaW5kZXggMGQzYTRmYS4uNDc0MzU2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYwpAQCAtMzEwLDE0ICszMTAsMzEgQEAKIAogCWZvciAocCA9IG1lbW1hcC5tYXA7IHAgPCBtZW1tYXAubWFwX2VuZDsgcCArPSBtZW1tYXAuZGVzY19zaXplKSB7CiAJCWVmaV9tZW1vcnlfZGVzY190ICptZCA9IHA7Ci0JCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydCA9IG1kLT5waHlzX2FkZHI7Ci0JCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplID0gbWQtPm51bV9wYWdlcyA8PCBFRklfUEFHRV9TSElGVDsKKwkJdTY0IHN0YXJ0ID0gbWQtPnBoeXNfYWRkcjsKKwkJdTY0IHNpemUgPSBtZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUOwogCiAJCWlmIChtZC0+dHlwZSAhPSBFRklfQk9PVF9TRVJWSUNFU19DT0RFICYmCiAJCSAgICBtZC0+dHlwZSAhPSBFRklfQk9PVF9TRVJWSUNFU19EQVRBKQogCQkJY29udGludWU7Ci0KLQkJbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgc2l6ZSwgIkVGSSBCb290Iik7CisJCS8qIE9ubHkgcmVzZXJ2ZSB3aGVyZSBwb3NzaWJsZToKKwkJICogLSBOb3Qgd2l0aGluIGFueSBhbHJlYWR5IGFsbG9jYXRlZCBhcmVhcworCQkgKiAtIE5vdCBvdmVyIGFueSBtZW1vcnkgYXJlYSAocmVhbGx5IG5lZWRlZCwgaWYgYWJvdmU/KQorCQkgKiAtIE5vdCB3aXRoaW4gYW55IHBhcnQgb2YgdGhlIGtlcm5lbAorCQkgKiAtIE5vdCB0aGUgYmlvcyByZXNlcnZlZCBhcmVhCisJCSovCisJCWlmICgoc3RhcnQrc2l6ZSA+PSB2aXJ0X3RvX3BoeXMoX3RleHQpCisJCQkJJiYgc3RhcnQgPD0gdmlydF90b19waHlzKF9lbmQpKSB8fAorCQkJIWU4MjBfYWxsX21hcHBlZChzdGFydCwgc3RhcnQrc2l6ZSwgRTgyMF9SQU0pIHx8CisJCQltZW1ibG9ja194ODZfY2hlY2tfcmVzZXJ2ZWRfc2l6ZSgmc3RhcnQsICZzaXplLAorCQkJCQkJCTE8PEVGSV9QQUdFX1NISUZUKSkgeworCQkJLyogQ291bGQgbm90IHJlc2VydmUsIHNraXAgaXQgKi8KKwkJCW1kLT5udW1fcGFnZXMgPSAwOworCQkJbWVtYmxvY2tfZGJnKFBGWCAiQ291bGQgbm90IHJlc2VydmUgYm9vdCByYW5nZSAiCisJCQkJCSJbMHglMDEwbGx4LTB4JTAxMGxseF1cbiIsCisJCQkJCQlzdGFydCwgc3RhcnQrc2l6ZS0xKTsKKwkJfSBlbHNlCisJCQltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShzdGFydCwgc3RhcnQrc2l6ZSwKKwkJCQkJCQkiRUZJIEJvb3QiKTsKIAl9CiB9CiAKQEAgLTMzNCw2ICszNTEsMTAgQEAKIAkJICAgIG1kLT50eXBlICE9IEVGSV9CT09UX1NFUlZJQ0VTX0RBVEEpCiAJCQljb250aW51ZTsKIAorCQkvKiBDb3VsZCBub3QgcmVzZXJ2ZSBib290IGFyZWEgKi8KKwkJaWYgKCFzaXplKQorCQkJY29udGludWU7CisKIAkJZnJlZV9ib290bWVtX2xhdGUoc3RhcnQsIHNpemUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCBkZDdiODhmLi41NTI1MTYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC0xMDMzLDYgKzEwMzMsMTMgQEAKIAl4ZW5fcmVib290KFNIVVRET1dOX3Bvd2Vyb2ZmKTsKIH0KIAorc3RhdGljIHZvaWQgeGVuX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisJaWYgKHBtX3Bvd2VyX29mZikKKwkJcG1fcG93ZXJfb2ZmKCk7CisJeGVuX3JlYm9vdChTSFVURE9XTl9wb3dlcm9mZik7Cit9CisKIHN0YXRpYyB2b2lkIHhlbl9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl4ZW5fcmVib290KFNIVVRET1dOX2NyYXNoKTsKQEAgLTEwNTgsNyArMTA2NSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG1hY2hpbmVfb3BzIHhlbl9tYWNoaW5lX29wcyBfX2luaXRjb25zdCA9IHsKIAkucmVzdGFydCA9IHhlbl9yZXN0YXJ0LAogCS5oYWx0ID0geGVuX21hY2hpbmVfaGFsdCwKLQkucG93ZXJfb2ZmID0geGVuX21hY2hpbmVfaGFsdCwKKwkucG93ZXJfb2ZmID0geGVuX21hY2hpbmVfcG93ZXJfb2ZmLAogCS5zaHV0ZG93biA9IHhlbl9tYWNoaW5lX2hhbHQsCiAJLmNyYXNoX3NodXRkb3duID0geGVuX2NyYXNoX3NodXRkb3duLAogCS5lbWVyZ2VuY3lfcmVzdGFydCA9IHhlbl9lbWVyZ2VuY3lfcmVzdGFydCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCBkYzcwOGRjLi42NzNlOTY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpbmNsdWRlIDxhc20veGVuL2h5cGVyY2FsbC5oPgogI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgpAQCAtMTIzMSw3ICsxMjMyLDcgQEAKIHsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgbW11ZXh0X29wIG9wOwotCQlERUNMQVJFX0JJVE1BUChtYXNrLCBOUl9DUFVTKTsKKwkJREVDTEFSRV9CSVRNQVAobWFzaywgbnVtX3Byb2Nlc3NvcnMpOwogCX0gKmFyZ3M7CiAJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7CiAKQEAgLTE1OTksNiArMTYwMCwxMSBAQAogCQlmb3IgKHB0ZWlkeCA9IDA7IHB0ZWlkeCA8IFBUUlNfUEVSX1BURTsgcHRlaWR4KyssIHBmbisrKSB7CiAJCQlwdGVfdCBwdGU7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJCQlpZiAocGZuID4gbWF4X3Bmbl9tYXBwZWQpCisJCQkJbWF4X3Bmbl9tYXBwZWQgPSBwZm47CisjZW5kaWYKKwogCQkJaWYgKCFwdGVfbm9uZShwdGVfcGFnZVtwdGVpZHhdKSkKIAkJCQljb250aW51ZTsKIApAQCAtMTc2Niw3ICsxNzcyLDkgQEAKIAlpbml0aWFsX2tlcm5lbF9wbWQgPQogCQlleHRlbmRfYnJrKHNpemVvZihwbWRfdCkgKiBQVFJTX1BFUl9QTUQsIFBBR0VfU0laRSk7CiAKLQltYXhfcGZuX21hcHBlZCA9IFBGTl9ET1dOKF9fcGEoeGVuX3N0YXJ0X2luZm8tPm1mbl9saXN0KSk7CisJbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihfX3BhKHhlbl9zdGFydF9pbmZvLT5wdF9iYXNlKSArCisJCQkJICB4ZW5fc3RhcnRfaW5mby0+bnJfcHRfZnJhbWVzICogUEFHRV9TSVpFICsKKwkJCQkgIDUxMioxMDI0KTsKIAogCWtlcm5lbF9wbWQgPSBtMnYocGdkW0tFUk5FTF9QR0RfQk9VTkRBUlldLnBnZCk7CiAJbWVtY3B5KGluaXRpYWxfa2VybmVsX3BtZCwga2VybmVsX3BtZCwgc2l6ZW9mKHBtZF90KSAqIFBUUlNfUEVSX1BNRCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jIGIvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYwppbmRleCA4YmZmN2U3Li4xYjJiNzNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jCisrKyBiL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMKQEAgLTE4OSwxMCArMTg5LDEwIEBACiAJdW5zaWduZWQgYXJnaWR4ID0gcm91bmR1cChiLT5hcmdpZHgsIHNpemVvZih1NjQpKTsKIAogCUJVR19PTihwcmVlbXB0aWJsZSgpKTsKLQlCVUdfT04oYi0+YXJnaWR4ID4gTUNfQVJHUyk7CisJQlVHX09OKGItPmFyZ2lkeCA+PSBNQ19BUkdTKTsKIAogCWlmIChiLT5tY2lkeCA9PSBNQ19CQVRDSCB8fAotCSAgICAoYXJnaWR4ICsgYXJncykgPiBNQ19BUkdTKSB7CisJICAgIChhcmdpZHggKyBhcmdzKSA+PSBNQ19BUkdTKSB7CiAJCW1jX3N0YXRzX2ZsdXNoKGItPm1jaWR4ID09IE1DX0JBVENIID8gRkxfU0xPVFMgOiBGTF9BUkdTKTsKIAkJeGVuX21jX2ZsdXNoKCk7CiAJCWFyZ2lkeCA9IHJvdW5kdXAoYi0+YXJnaWR4LCBzaXplb2YodTY0KSk7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAlyZXQuYXJncyA9ICZiLT5hcmdzW2FyZ2lkeF07CiAJYi0+YXJnaWR4ID0gYXJnaWR4ICsgYXJnczsKIAotCUJVR19PTihiLT5hcmdpZHggPiBNQ19BUkdTKTsKKwlCVUdfT04oYi0+YXJnaWR4ID49IE1DX0FSR1MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIxNiw3ICsyMTYsNyBAQAogCXN0cnVjdCBtdWx0aWNhbGxfc3BhY2UgcmV0ID0geyBOVUxMLCBOVUxMIH07CiAKIAlCVUdfT04ocHJlZW1wdGlibGUoKSk7Ci0JQlVHX09OKGItPmFyZ2lkeCA+IE1DX0FSR1MpOworCUJVR19PTihiLT5hcmdpZHggPj0gTUNfQVJHUyk7CiAKIAlpZiAoYi0+bWNpZHggPT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTIyNCwxNCArMjI0LDE0IEBACiAJaWYgKGItPmVudHJpZXNbYi0+bWNpZHggLSAxXS5vcCAhPSBvcCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgoYi0+YXJnaWR4ICsgc2l6ZSkgPiBNQ19BUkdTKQorCWlmICgoYi0+YXJnaWR4ICsgc2l6ZSkgPj0gTUNfQVJHUykKIAkJcmV0dXJuIHJldDsKIAogCXJldC5tYyA9ICZiLT5lbnRyaWVzW2ItPm1jaWR4IC0gMV07CiAJcmV0LmFyZ3MgPSAmYi0+YXJnc1tiLT5hcmdpZHhdOwogCWItPmFyZ2lkeCArPSBzaXplOwogCi0JQlVHX09OKGItPmFyZ2lkeCA+IE1DX0FSR1MpOworCUJVR19PTihiLT5hcmdpZHggPj0gTUNfQVJHUyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NldHVwLmMgYi9hcmNoL3g4Ni94ZW4vc2V0dXAuYwppbmRleCBiZTFhNDY0Li42MGFlZWI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc2V0dXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc2V0dXAuYwpAQCAtMjI3LDExICsyMjcsNyBAQAogCiAJbWVtY3B5KG1hcF9yYXcsIG1hcCwgc2l6ZW9mKG1hcCkpOwogCWU4MjAubnJfbWFwID0gMDsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAJeGVuX2V4dHJhX21lbV9zdGFydCA9IG1lbV9lbmQ7Ci0jZWxzZQotCXhlbl9leHRyYV9tZW1fc3RhcnQgPSBtYXgoKDFVTEwgPDwgMzIpLCBtZW1fZW5kKTsKLSNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBtZW1tYXAubnJfZW50cmllczsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmQ7CiAKQEAgLTI2Niw2ICsyNjIsMTIgQEAKIAkJaWYgKG1hcFtpXS5zaXplID4gMCkKIAkJCWU4MjBfYWRkX3JlZ2lvbihtYXBbaV0uYWRkciwgbWFwW2ldLnNpemUsIG1hcFtpXS50eXBlKTsKIAl9CisJLyogQWxpZ24gdGhlIGJhbGxvb24gYXJlYSBzbyB0aGF0IG1heF9sb3dfcGZuIGRvZXMgbm90IGdldCBzZXQKKwkgKiB0byBiZSBhdCB0aGUgX2VuZF8gb2YgdGhlIFBDSSBnYXAgYXQgdGhlIGZhciBlbmQgKGZlZTAxMDAwKS4KKwkgKiBOb3RlIHRoYXQgeGVuX2V4dHJhX21lbV9zdGFydCBnZXRzIHNldCBpbiB0aGUgbG9vcCBhYm92ZSB0byBiZQorCSAqIHBhc3QgdGhlIGxhc3QgRTgyMCByZWdpb24uICovCisJaWYgKHhlbl9pbml0aWFsX2RvbWFpbigpICYmICh4ZW5fZXh0cmFfbWVtX3N0YXJ0IDwgKDFVTEw8PDMyKSkpCisJCXhlbl9leHRyYV9tZW1fc3RhcnQgPSAoMVVMTDw8MzIpOwogCiAJLyoKIAkgKiBJbiBkb21VLCB0aGUgSVNBIHJlZ2lvbiBpcyBub3JtYWwsIHVzYWJsZSBtZW1vcnksIGJ1dCB3ZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NtcC5jIGIvYXJjaC94ODYveGVuL3NtcC5jCmluZGV4IDQxMDM4YzAuLmI0NTMzYTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zbXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc21wLmMKQEAgLTIwNSwxMSArMjA1LDE4IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3NtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewogCXVuc2lnbmVkIGNwdTsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCXhlbl9pbml0X2xvY2tfY3B1KDApOwogCiAJc21wX3N0b3JlX2NwdV9pbmZvKDApOwogCWNwdV9kYXRhKDApLng4Nl9tYXhfY29yZXMgPSAxOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJemFsbG9jX2NwdW1hc2tfdmFyKCZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSksIEdGUF9LRVJORUwpOworCQl6YWxsb2NfY3B1bWFza192YXIoJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBpKSwgR0ZQX0tFUk5FTCk7CisJCXphbGxvY19jcHVtYXNrX3ZhcigmcGVyX2NwdShjcHVfbGxjX3NoYXJlZF9tYXAsIGkpLCBHRlBfS0VSTkVMKTsKKwl9CiAJc2V0X2NwdV9zaWJsaW5nX21hcCgwKTsKIAogCWlmICh4ZW5fc21wX2ludHJfaW5pdCgwKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKaW5kZXggZGZiNmU5ZC4uN2YwOTlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKQEAgLTI4MDIsMTAgKzI4MDIsMTEgQEAKIAl9CiAKIAkvKgotCSAqIFNvbWUgY29udHJvbGxlcnMgY2FuJ3QgYmUgZnJvemVuIHZlcnkgd2VsbCBhbmQgbWF5IHNldAotCSAqIHNwdXJ1aW91cyBlcnJvciBjb25kaXRpb25zIGR1cmluZyByZXNldC4gIENsZWFyIGFjY3VtdWxhdGVkCi0JICogZXJyb3IgaW5mb3JtYXRpb24uICBBcyByZXNldCBpcyB0aGUgZmluYWwgcmVjb3ZlcnkgYWN0aW9uLAotCSAqIG5vdGhpbmcgaXMgbG9zdCBieSBkb2luZyB0aGlzLgorCSAqIFNvbWUgY29udHJvbGxlcnMgY2FuJ3QgYmUgZnJvemVuIHZlcnkgd2VsbCBhbmQgbWF5IHNldCBzcHVyaW91cworCSAqIGVycm9yIGNvbmRpdGlvbnMgZHVyaW5nIHJlc2V0LiAgQ2xlYXIgYWNjdW11bGF0ZWQgZXJyb3IKKwkgKiBpbmZvcm1hdGlvbiBhbmQgcmUtdGhhdyB0aGUgcG9ydCBpZiBmcm96ZW4uICBBcyByZXNldCBpcyB0aGUKKwkgKiBmaW5hbCByZWNvdmVyeSBhY3Rpb24gYW5kIHdlIGNyb3NzIGNoZWNrIGxpbmsgb25saW5lbmVzcyBhZ2FpbnN0CisJICogZGV2aWNlIGNsYXNzaWZpY2F0aW9uIGxhdGVyLCBubyBob3RwbHVnIGV2ZW50IGlzIGxvc3QgYnkgdGhpcy4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZShsaW5rLT5hcC0+bG9jaywgZmxhZ3MpOwogCW1lbXNldCgmbGluay0+ZWhfaW5mbywgMCwgc2l6ZW9mKGxpbmstPmVoX2luZm8pKTsKQEAgLTI4MTQsNiArMjgxNSw5IEBACiAJYXAtPnBmbGFncyAmPSB+QVRBX1BGTEFHX0VIX1BFTkRJTkc7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsaW5rLT5hcC0+bG9jaywgZmxhZ3MpOwogCisJaWYgKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKQorCQlhdGFfZWhfdGhhd19wb3J0KGFwKTsKKwogCS8qCiAJICogTWFrZSBzdXJlIG9ubGluZW5lc3MgYW5kIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCBjb3JyZXNwb25kLgogCSAqIEhvdHBsdWcgY291bGQgaGF2ZSBoYXBwZW5lZCBkdXJpbmcgcmVzZXQgYW5kIHNvbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYwppbmRleCBjMGRkMDlkLi5lYWE4YTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvY2xvY2tfb3BzLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2Nsb2NrX29wcy5jCkBAIC0yOTEsNyArMjkxLDcgQEAKIHsKIAlzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrICpjbGtuYjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOwotCWNoYXIgKmNvbl9pZDsKKwljaGFyICoqY29uX2lkOwogCWludCBlcnJvcjsKIAogCWRldl9kYmcoZGV2LCAiJXMoKSAlbGRcbiIsIF9fZnVuY19fLCBhY3Rpb24pOwpAQCAtMzA5LDggKzMwOSw4IEBACiAKIAkJZGV2LT5wd3JfZG9tYWluID0gY2xrbmItPnB3cl9kb21haW47CiAJCWlmIChjbGtuYi0+Y29uX2lkc1swXSkgewotCQkJZm9yIChjb25faWQgPSBjbGtuYi0+Y29uX2lkc1swXTsgKmNvbl9pZDsgY29uX2lkKyspCi0JCQkJcG1fcnVudGltZV9jbGtfYWRkKGRldiwgY29uX2lkKTsKKwkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHM7ICpjb25faWQ7IGNvbl9pZCsrKQorCQkJCXBtX3J1bnRpbWVfY2xrX2FkZChkZXYsICpjb25faWQpOwogCQl9IGVsc2UgewogCQkJcG1fcnVudGltZV9jbGtfYWRkKGRldiwgTlVMTCk7CiAJCX0KQEAgLTM4MCw3ICszODAsNyBAQAogewogCXN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgKmNsa25iOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7Ci0JY2hhciAqY29uX2lkOworCWNoYXIgKipjb25faWQ7CiAKIAlkZXZfZGJnKGRldiwgIiVzKCkgJWxkXG4iLCBfX2Z1bmNfXywgYWN0aW9uKTsKIApAQCAtMzg5LDE2ICszODksMTYgQEAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQlVTX05PVElGWV9BRERfREVWSUNFOgogCQlpZiAoY2xrbmItPmNvbl9pZHNbMF0pIHsKLQkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHNbMF07ICpjb25faWQ7IGNvbl9pZCsrKQotCQkJCWVuYWJsZV9jbG9jayhkZXYsIGNvbl9pZCk7CisJCQlmb3IgKGNvbl9pZCA9IGNsa25iLT5jb25faWRzOyAqY29uX2lkOyBjb25faWQrKykKKwkJCQllbmFibGVfY2xvY2soZGV2LCAqY29uX2lkKTsKIAkJfSBlbHNlIHsKIAkJCWVuYWJsZV9jbG9jayhkZXYsIE5VTEwpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQlVTX05PVElGWV9ERUxfREVWSUNFOgogCQlpZiAoY2xrbmItPmNvbl9pZHNbMF0pIHsKLQkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHNbMF07ICpjb25faWQ7IGNvbl9pZCsrKQotCQkJCWRpc2FibGVfY2xvY2soZGV2LCBjb25faWQpOworCQkJZm9yIChjb25faWQgPSBjbGtuYi0+Y29uX2lkczsgKmNvbl9pZDsgY29uX2lkKyspCisJCQkJZGlzYWJsZV9jbG9jayhkZXYsICpjb25faWQpOwogCQl9IGVsc2UgewogCQkJZGlzYWJsZV9jbG9jayhkZXYsIE5VTEwpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZGVidWdmcy5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2RlYnVnZnMuYwppbmRleCBmZDYzMDViLi44ZWNmNGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kZWJ1Z2ZzLmMKQEAgLTY0LDYgKzY0LDggQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXN1bHQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlwcml2LT5idG1ydmxfZGV2LmhzY2ZnY21kID0gcmVzdWx0OwogCkBAIC0xMDgsNiArMTEwLDggQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXN1bHQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlwcml2LT5idG1ydmxfZGV2LnBzbW9kZSA9IHJlc3VsdDsKIApAQCAtMTQ3LDYgKzE1MSw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVzdWx0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcHJpdi0+YnRtcnZsX2Rldi5wc2NtZCA9IHJlc3VsdDsKIApAQCAtMTkxLDYgKzE5Nyw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDE2LCAmcmVzdWx0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcHJpdi0+YnRtcnZsX2Rldi5ncGlvX2dhcCA9IHJlc3VsdDsKIApAQCAtMjMwLDYgKzIzOCw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVzdWx0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcHJpdi0+YnRtcnZsX2Rldi5oc2NtZCA9IHJlc3VsdDsKIAlpZiAocHJpdi0+YnRtcnZsX2Rldi5oc2NtZCkgewpAQCAtMjcyLDYgKzI4Miw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVzdWx0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcHJpdi0+YnRtcnZsX2Rldi5oc21vZGUgPSByZXN1bHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ocGV0LmMgYi9kcml2ZXJzL2NoYXIvaHBldC5jCmluZGV4IDA1MTQ3NGMuLjM0ZDZhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ocGV0LmMKKysrIGIvZHJpdmVycy9jaGFyL2hwZXQuYwpAQCAtMTYzLDExICsxNjMsMzIgQEAKIAkgKiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIHRyZWF0aW5nIG5vbi1wZXJpb2RpYyBsaWtlIHBlcmlvZGljLgogCSAqLwogCWlmICgoZGV2cC0+aGRfZmxhZ3MgJiAoSFBFVF9JRSB8IEhQRVRfUEVSSU9ESUMpKSA9PSBIUEVUX0lFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbSwgdDsKKwkJdW5zaWduZWQgbG9uZyBtLCB0LCBtYywgYmFzZSwgazsKKwkJc3RydWN0IGhwZXQgX19pb21lbSAqaHBldCA9IGRldnAtPmhkX2hwZXQ7CisJCXN0cnVjdCBocGV0cyAqaHBldHAgPSBkZXZwLT5oZF9ocGV0czsKIAogCQl0ID0gZGV2cC0+aGRfaXJlcWZyZXE7CiAJCW0gPSByZWFkX2NvdW50ZXIoJmRldnAtPmhkX3RpbWVyLT5ocGV0X2NvbXBhcmUpOwotCQl3cml0ZV9jb3VudGVyKHQgKyBtLCAmZGV2cC0+aGRfdGltZXItPmhwZXRfY29tcGFyZSk7CisJCW1jID0gcmVhZF9jb3VudGVyKCZocGV0LT5ocGV0X21jKTsKKwkJLyogVGhlIHRpbWUgZm9yIHRoZSBuZXh0IGludGVycnVwdCB3b3VsZCBsb2dpY2FsbHkgYmUgdCArIG0sCisJCSAqIGhvd2V2ZXIsIGlmIHdlIGFyZSB2ZXJ5IHVubHVja3kgYW5kIHRoZSBpbnRlcnJ1cHQgaXMgZGVsYXllZAorCQkgKiBmb3IgbG9uZ2VyIHRoYW4gdCB0aGVuIHdlIHdpbGwgY29tcGxldGVseSBtaXNzIHRoZSBuZXh0CisJCSAqIGludGVycnVwdCBpZiB3ZSBzZXQgdCArIG0gYW5kIGFuIGFwcGxpY2F0aW9uIHdpbGwgaGFuZy4KKwkJICogVGhlcmVmb3JlIHdlIG5lZWQgdG8gbWFrZSBhIG1vcmUgY29tcGxleCBjb21wdXRhdGlvbiBhc3N1bWluZworCQkgKiB0aGF0IHRoZXJlIGV4aXN0cyBhIGsgZm9yIHdoaWNoIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKwkJICogayAqIHQgKyBiYXNlIDwgbWMgKyBkZWx0YQorCQkgKiAoayArIDEpICogdCArIGJhc2UgPiBtYyArIGRlbHRhCisJCSAqIHdoZXJlIHQgaXMgdGhlIGludGVydmFsIGluIGhwZXQgdGlja3MgZm9yIHRoZSBnaXZlbiBmcmVxLAorCQkgKiBiYXNlIGlzIHRoZSB0aGVvcmV0aWNhbCBzdGFydCB2YWx1ZSAwIDwgYmFzZSA8IHQsCisJCSAqIG1jIGlzIHRoZSBtYWluIGNvdW50ZXIgdmFsdWUgYXQgdGhlIHRpbWUgb2YgdGhlIGludGVycnVwdCwKKwkJICogZGVsdGEgaXMgdGhlIHRpbWUgaXQgdGFrZXMgdG8gd3JpdGUgdGhlIGEgdmFsdWUgdG8gdGhlCisJCSAqIGNvbXBhcmF0b3IuCisJCSAqIGsgbWF5IHRoZW4gYmUgY29tcHV0ZWQgYXMgKG1jIC0gYmFzZSArIGRlbHRhKSAvIHQgLgorCQkgKi8KKwkJYmFzZSA9IG1jICUgdDsKKwkJayA9IChtYyAtIGJhc2UgKyBocGV0cC0+aHBfZGVsdGEpIC8gdDsKKwkJd3JpdGVfY291bnRlcih0ICogKGsgKyAxKSArIGJhc2UsCisJCQkgICAgICAmZGV2cC0+aGRfdGltZXItPmhwZXRfY29tcGFyZSk7CiAJfQogCiAJaWYgKGRldnAtPmhkX2ZsYWdzICYgSFBFVF9TSEFSRURfSVJRKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKaW5kZXggYjYwYTRjMi4uZmFmN2M1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCkBAIC0yOTgsMTEgKzI5OCwxMyBAQAogCW9sZF9pbmRleCA9IHN0YXQtPmxhc3RfaW5kZXg7CiAJbmV3X2luZGV4ID0gZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RhdCwgZnJlcS0+bmV3KTsKIAotCWNwdWZyZXFfc3RhdHNfdXBkYXRlKGZyZXEtPmNwdSk7Ci0JaWYgKG9sZF9pbmRleCA9PSBuZXdfaW5kZXgpCisJLyogV2UgY2FuJ3QgZG8gc3RhdC0+dGltZV9pbl9zdGF0ZVstMV09IC4uICovCisJaWYgKG9sZF9pbmRleCA9PSAtMSB8fCBuZXdfaW5kZXggPT0gLTEpCiAJCXJldHVybiAwOwogCi0JaWYgKG9sZF9pbmRleCA9PSAtMSB8fCBuZXdfaW5kZXggPT0gLTEpCisJY3B1ZnJlcV9zdGF0c191cGRhdGUoZnJlcS0+Y3B1KTsKKworCWlmIChvbGRfaW5kZXggPT0gbmV3X2luZGV4KQogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9jaygmY3B1ZnJlcV9zdGF0c19sb2NrKTsKQEAgLTM4Nyw2ICszODksNyBAQAogCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZjcHVmcmVxX3N0YXRfY3B1X25vdGlmaWVyKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQljcHVmcmVxX3N0YXRzX2ZyZWVfdGFibGUoY3B1KTsKKwkJY3B1ZnJlcV9zdGF0c19mcmVlX3N5c2ZzKGNwdSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2RyaXZlcnMvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDgzNDc5YjYuLmJjZTU3NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC0xMDc5LDYgKzEwNzksOSBAQAogCX0KIAogCXJlcyA9IHRyYW5zaXRpb25fZmlkX3ZpZChkYXRhLCBmaWQsIHZpZCk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKwogCWZyZXFzLm5ldyA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9maWQoZGF0YS0+Y3VycmZpZCk7CiAKIAlmb3JfZWFjaF9jcHUoaSwgZGF0YS0+YXZhaWxhYmxlX2NvcmVzKSB7CkBAIC0xMTAxLDcgKzExMDQsOCBAQAogCS8qIGdldCBNU1IgaW5kZXggZm9yIGhhcmR3YXJlIHBzdGF0ZSB0cmFuc2l0aW9uICovCiAJcHN0YXRlID0gaW5kZXggJiBIV19QU1RBVEVfTUFTSzsKIAlpZiAocHN0YXRlID4gZGF0YS0+bWF4X2h3X3BzdGF0ZSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUlOVkFMOworCiAJZnJlcXMub2xkID0gZmluZF9raHpfZnJlcV9mcm9tX3BzdGF0ZShkYXRhLT5wb3dlcm5vd190YWJsZSwKIAkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWZyZXFzLm5ldyA9IGZpbmRfa2h6X2ZyZXFfZnJvbV9wc3RhdGUoZGF0YS0+cG93ZXJub3dfdGFibGUsIHBzdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5jIGIvZHJpdmVycy9kbWEvc2hkbWEuYwppbmRleCAyYTYzOGY5Li4wMjgzMzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKQEAgLTEyMjEsNiArMTIyMSwxMSBAQAogCX0gZWxzZSB7CiAJCWRvIHsKIAkJCWZvciAoaSA9IGNoYW5pcnFfcmVzLT5zdGFydDsgaSA8PSBjaGFuaXJxX3Jlcy0+ZW5kOyBpKyspIHsKKwkJCQlpZiAoaXJxX2NudCA+PSBTSF9ETUFDX01BWF9DSEFOTkVMUykgeworCQkJCQlpcnFfY2FwID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCiAJCQkJaWYgKChlcnJpcnFfcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfQklUUykgPT0KIAkJCQkgICAgSU9SRVNPVVJDRV9JUlFfU0hBUkVBQkxFKQogCQkJCQljaGFuX2ZsYWdbaXJxX2NudF0gPSBJUlFGX1NIQVJFRDsKQEAgLTEyMzAsMTUgKzEyMzUsMTEgQEAKIAkJCQkJIkZvdW5kIElSUSAlZCBmb3IgY2hhbm5lbCAlZFxuIiwKIAkJCQkJaSwgaXJxX2NudCk7CiAJCQkJY2hhbl9pcnFbaXJxX2NudCsrXSA9IGk7Ci0KLQkJCQlpZiAoaXJxX2NudCA+PSBTSF9ETUFDX01BWF9DSEFOTkVMUykKLQkJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWlmIChpcnFfY250ID49IFNIX0RNQUNfTUFYX0NIQU5ORUxTKSB7Ci0JCQkJaXJxX2NhcCA9IDE7CisJCQlpZiAoaXJxX2NudCA+PSBTSF9ETUFDX01BWF9DSEFOTkVMUykKIAkJCQlicmVhazsKLQkJCX0KKwogCQkJY2hhbmlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwKIAkJCQkJCUlPUkVTT1VSQ0VfSVJRLCArK2lycXJlcyk7CiAJCX0gd2hpbGUgKGlycV9jbnQgPCBwZGF0YS0+Y2hhbm5lbF9udW0gJiYgY2hhbmlycV9yZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKaW5kZXggZjAzMmU0NC4uYmZlNzIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCkBAIC0xMDgsNyArMTA4LDkgQEAKICAqLwogdW5zaWduZWQgbG9uZyBfX2luaXQgZmluZF9pYmZ0X3JlZ2lvbih1bnNpZ25lZCBsb25nICpzaXplcCkKIHsKKyNpZmRlZiBDT05GSUdfQUNQSQogCWludCBpOworI2VuZGlmCiAJaWJmdF9hZGRyID0gTlVMTDsKIAogI2lmZGVmIENPTkZJR19BQ1BJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCmluZGV4IDRhN2Y2MzEuLjI5NjcwMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCkBAIC04NywzMiArODcsMjAgQEAKIAkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IEdQSU8gZnVuY3Rpb25hbGl0eSBvZiBJVDg3NjFFIHN1cGVyIEkvTyBjaGlwLgogCiBjb25maWcgR1BJT19FWFlOT1M0Ci0JYm9vbCAiU2Ftc3VuZyBFeHlub3M0IEdQSU8gbGlicmFyeSBzdXBwb3J0IgotCWRlZmF1bHQgeSBpZiBDUFVfRVhZTk9TNDIxMAotCWRlcGVuZHMgb24gQVJNCi0JaGVscAotCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgU2Ftc3VuZyBFeHlub3M0IHNlcmllcyBTb0NzIEdQSU8gbGlicmFyeQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIENQVV9FWFlOT1M0MjEwCiAKIGNvbmZpZyBHUElPX1BMQVRfU0FNU1VORwotCWJvb2wgIlNhbXN1bmcgU29DcyBHUElPIGxpYnJhcnkgc3VwcG9ydCIKLQlkZWZhdWx0IHkgaWYgU0FNU1VOR19HUElPTElCXzRCSVQKLQlkZXBlbmRzIG9uIEFSTQotCWhlbHAKLQkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IFNhbXN1bmcgU29DcyBHUElPIGxpYnJhcnkKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBTQU1TVU5HX0dQSU9MSUJfNEJJVAogCiBjb25maWcgR1BJT19TNVBDMTAwCi0JYm9vbCAiU2Ftc3VuZyBTNVBDMTAwIEdQSU8gbGlicmFyeSBzdXBwb3J0IgotCWRlZmF1bHQgeSBpZiBDUFVfUzVQQzEwMAotCWRlcGVuZHMgb24gQVJNCi0JaGVscAotCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgU2Ftc3VuZyBTNVBDMTAwIFNvQ3MgR1BJTyBsaWJyYXJ5CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQ1BVX1M1UEMxMDAKIAogY29uZmlnIEdQSU9fUzVQVjIxMAotCWJvb2wgIlNhbXN1bmcgUzVQVjIxMC9TNVBDMTEwIEdQSU8gbGlicmFyeSBzdXBwb3J0IgotCWRlZmF1bHQgeSBpZiBDUFVfUzVQVjIxMAotCWRlcGVuZHMgb24gQVJNCi0JaGVscAotCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgU2Ftc3VuZyBTNVBWMjEwL1M1UEMxMTAgU29DcyBHUElPIGxpYnJhcnkKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBDUFVfUzVQVjIxMAogCiBjb25maWcgR1BJT19QTDA2MQogCWJvb2wgIlByaW1lQ2VsbCBQTDA2MSBHUElPIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1leHlub3M0LmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1leHlub3M0LmMKaW5kZXggZDU0Y2E2YS4uOTAyOTgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZXh5bm9zNC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWV4eW5vczQuYwpAQCAtMjEsMTYgKzIxLDM3IEBACiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmctaGVscGVycy5oPgogCitpbnQgczNjX2dwaW9fc2V0cHVsbF9leHlub3M0KHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCXVuc2lnbmVkIGludCBvZmYsIHMzY19ncGlvX3B1bGxfdCBwdWxsKQoreworCWlmIChwdWxsID09IFMzQ19HUElPX1BVTExfVVApCisJCXB1bGwgPSAzOworCisJcmV0dXJuIHMzY19ncGlvX3NldHB1bGxfdXBkb3duKGNoaXAsIG9mZiwgcHVsbCk7Cit9CisKK3MzY19ncGlvX3B1bGxfdCBzM2NfZ3Bpb19nZXRwdWxsX2V4eW5vczQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJCQl1bnNpZ25lZCBpbnQgb2ZmKQoreworCXMzY19ncGlvX3B1bGxfdCBwdWxsOworCisJcHVsbCA9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duKGNoaXAsIG9mZik7CisJaWYgKHB1bGwgPT0gMykKKwkJcHVsbCA9IFMzQ19HUElPX1BVTExfVVA7CisKKwlyZXR1cm4gcHVsbDsKK30KKwogc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jZmcgZ3Bpb19jZmcgPSB7CiAJLnNldF9jb25maWcJPSBzM2NfZ3Bpb19zZXRjZmdfczNjNjR4eF80Yml0LAotCS5zZXRfcHVsbAk9IHMzY19ncGlvX3NldHB1bGxfdXBkb3duLAotCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAorCS5zZXRfcHVsbAk9IHMzY19ncGlvX3NldHB1bGxfZXh5bm9zNCwKKwkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX2V4eW5vczQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvX2NmZ19ub2ludCA9IHsKIAkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQsCi0JLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCi0JLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF9leHlub3M0LAorCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfZXh5bm9zNCwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1ub21hZGlrLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1ub21hZGlrLmMKaW5kZXggNDk2MWVmOS4uMmMyMTJjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tbm9tYWRpay5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW5vbWFkaWsuYwpAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IFNUTWljcm9lbGVjdHJvbmljcwogICogQ29weXJpZ2h0IChDKSAyMDA5IEFsZXNzYW5kcm8gUnViaW5pIDxydWJpbmlAdW5pcHYuaXQ+CiAgKiAgIFJld3JpdHRlbiBiYXNlZCBvbiB3b3JrIGJ5IFByYWZ1bGxhIFdBREFTS0FSIDxwcmFmdWxsYS53YWRhc2thckBzdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtNDksNiArNTAsNyBAQAogCXUzMiAoKmdldF9zZWNvbmRhcnlfc3RhdHVzKSh1bnNpZ25lZCBpbnQgYmFuayk7CiAJdm9pZCAoKnNldF9pb2ZvcmNlKShib29sIGVuYWJsZSk7CiAJc3BpbmxvY2tfdCBsb2NrOworCWJvb2wgc2xlZXBtb2RlOwogCS8qIEtlZXAgdHJhY2sgb2YgY29uZmlndXJlZCBlZGdlcyAqLwogCXUzMiBlZGdlX3Jpc2luZzsKIAl1MzIgZWRnZV9mYWxsaW5nOwpAQCAtMzkzLDE0ICszOTUsMjUgQEAKICAqIEBncGlvOiBwaW4gbnVtYmVyCiAgKiBAbW9kZTogTk1LX0dQSU9fU0xQTV9JTlBVVCBvciBOTUtfR1BJT19TTFBNX05PQ0hBTkdFLAogICoKLSAqIFNldHMgdGhlIHNsZWVwIG1vZGUgb2YgYSBwaW4uICBJZiBAbW9kZSBpcyBOTUtfR1BJT19TTFBNX0lOUFVULCB0aGUgcGluIGlzCi0gKiBjaGFuZ2VkIHRvIGFuIGlucHV0ICh3aXRoIHB1bGx1cC9kb3duIGVuYWJsZWQpIGluIHNsZWVwIGFuZCBkZWVwIHNsZWVwLiAgSWYKLSAqIEBtb2RlIGlzIE5NS19HUElPX1NMUE1fTk9DSEFOR0UsIHRoZSBwaW4gcmVtYWlucyBpbiB0aGUgc3RhdGUgaXQgd2FzCi0gKiBjb25maWd1cmVkIGV2ZW4gd2hlbiBpbiBzbGVlcCBhbmQgZGVlcCBzbGVlcC4KKyAqIFRoaXMgcmVnaXN0ZXIgaXMgYWN0dWFsbHkgaW4gdGhlIHBpbm11eCBsYXllciwgbm90IHRoZSBHUElPIGJsb2NrIGl0c2VsZi4KKyAqIFRoZSBHUElPMUJfU0xQTSByZWdpc3RlciBkZWZpbmVzIHRoZSBHUElPIG1vZGUgd2hlbiBTTEVFUC9ERUVQLVNMRUVQCisgKiBtb2RlIGlzIGVudGVyZWQgKGkuZS4gd2hlbiBzaWduYWwgSU9GT1JDRSBpcyBISUdIIGJ5IHRoZSBwbGF0Zm9ybSBjb2RlKS4KKyAqIEVhY2ggR1BJTyBjYW4gYmUgY29uZmlndXJlZCB0byBiZSBmb3JjZWQgaW50byBHUElPIG1vZGUgd2hlbiBJT0ZPUkNFIGlzCisgKiBISUdILCBvdmVycmlkaW5nIHRoZSBub3JtYWwgc2V0dGluZyBkZWZpbmVkIGJ5IEdQSU9fQUZTRUx4IHJlZ2lzdGVycy4KKyAqIFdoZW4gSU9GT1JDRSByZXR1cm5zIExPVyAoYnkgc29mdHdhcmUsIGFmdGVyIFNMRUVQL0RFRVAtU0xFRVAgZXhpdCksCisgKiB0aGUgR1BJT3MgcmV0dXJuIHRvIHRoZSBub3JtYWwgc2V0dGluZyBkZWZpbmVkIGJ5IEdQSU9fQUZTRUx4IHJlZ2lzdGVycy4KICAqCi0gKiBPbiBEQjg1MDB2MiBvbndhcmRzLCB0aGlzIHNldHRpbmcgbG9zZXMgdGhlIHByZXZpb3VzIG1lYW5pbmcgYW5kIGluc3RlYWQKLSAqIGluZGljYXRlcyBpZiB3YWtldXAgZGV0ZWN0aW9uIGlzIGVuYWJsZWQgb24gdGhlIHBpbi4gIE5vdGUgdGhhdAotICogZW5hYmxlX2lycV93YWtlKCkgd2lsbCBhdXRvbWF0aWNhbGx5IGVuYWJsZSB3YWtldXAgZGV0ZWN0aW9uLgorICogSWYgQG1vZGUgaXMgTk1LX0dQSU9fU0xQTV9JTlBVVCwgdGhlIGNvcnJlc3BvbmRpbmcgR1BJTyBpcyBzd2l0Y2hlZCB0byBHUElPCisgKiBtb2RlIHdoZW4gc2lnbmFsIElPRk9SQ0UgaXMgSElHSCAoaS5lLiB3aGVuIFNMRUVQL0RFRVAtU0xFRVAgbW9kZSBpcworICogZW50ZXJlZCkgcmVnYXJkbGVzcyBvZiB0aGUgYWx0ZnVuY3Rpb24gc2VsZWN0ZWQuIEFsc28gd2FrZS11cCBkZXRlY3Rpb24gaXMKKyAqIEVOQUJMRUQuCisgKgorICogSWYgQG1vZGUgaXMgTk1LX0dQSU9fU0xQTV9OT0NIQU5HRSwgdGhlIGNvcnJlc3BvbmRpbmcgR1BJTyByZW1haW5zCisgKiBjb250cm9sbGVkIGJ5IE5NS19HUElPX0RBVEMsIE5NS19HUElPX0RBVFMsIE5NS19HUElPX0RJUiwgTk1LX0dQSU9fUERJUworICogKGZvciBhbHRmdW5jdGlvbiBHUElPKSBvciByZXNwZWN0aXZlIG9uLWNoaXAgcGVyaXBoZXJhbHMgKGZvciBvdGhlcgorICogYWx0ZnVuY3MpIHdoZW4gSU9GT1JDRSBpcyBISUdILiBBbHNvIHdha2UtdXAgZGV0ZWN0aW9uIERJU0FCTEVELgorICoKKyAqIE5vdGUgdGhhdCBlbmFibGVfaXJxX3dha2UoKSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5hYmxlIHdha2V1cCBkZXRlY3Rpb24uCiAgKi8KIGludCBubWtfZ3Bpb19zZXRfc2xwbShpbnQgZ3BpbywgZW51bSBubWtfZ3Bpb19zbHBtIG1vZGUpCiB7CkBAIC01NTEsNiArNTY0LDEyIEBACiBzdGF0aWMgdm9pZCBfX25ta19ncGlvX3NldF93YWtlKHN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCwKIAkJCQlpbnQgZ3BpbywgYm9vbCBvbikKIHsKKwlpZiAobm1rX2NoaXAtPnNsZWVwbW9kZSkgeworCQlfX25ta19ncGlvX3NldF9zbHBtKG5ta19jaGlwLCBncGlvIC0gbm1rX2NoaXAtPmNoaXAuYmFzZSwKKwkJCQkgICAgb24gPyBOTUtfR1BJT19TTFBNX1dBS0VVUF9FTkFCTEUKKwkJCQkgICAgOiBOTUtfR1BJT19TTFBNX1dBS0VVUF9ESVNBQkxFKTsKKwl9CisKIAlfX25ta19ncGlvX2lycV9tb2RpZnkobm1rX2NoaXAsIGdwaW8sIFdBS0UsIG9uKTsKIH0KIApAQCAtOTAxLDcgKzkyMCw3IEBACiAJCXdyaXRlbChjaGlwLT5md2ltc2MgJiBjaGlwLT5yZWFsX3dha2UsCiAJCSAgICAgICBjaGlwLT5hZGRyICsgTk1LX0dQSU9fRldJTVNDKTsKIAotCQlpZiAoY3B1X2lzX3U4NTAwdjIoKSkgeworCQlpZiAoY2hpcC0+c2xlZXBtb2RlKSB7CiAJCQljaGlwLT5zbHBtID0gcmVhZGwoY2hpcC0+YWRkciArIE5NS19HUElPX1NMUEMpOwogCiAJCQkvKiAwIC0+IHdha2V1cCBlbmFibGUgKi8KQEAgLTkyMyw3ICs5NDIsNyBAQAogCQl3cml0ZWwoY2hpcC0+cndpbXNjLCBjaGlwLT5hZGRyICsgTk1LX0dQSU9fUldJTVNDKTsKIAkJd3JpdGVsKGNoaXAtPmZ3aW1zYywgY2hpcC0+YWRkciArIE5NS19HUElPX0ZXSU1TQyk7CiAKLQkJaWYgKGNwdV9pc191ODUwMHYyKCkpCisJCWlmIChjaGlwLT5zbGVlcG1vZGUpCiAJCQl3cml0ZWwoY2hpcC0+c2xwbSwgY2hpcC0+YWRkciArIE5NS19HUElPX1NMUEMpOwogCX0KIH0KQEAgLTEwMTAsNiArMTAyOSw3IEBACiAJbm1rX2NoaXAtPnNlY29uZGFyeV9wYXJlbnRfaXJxID0gc2Vjb25kYXJ5X2lycTsKIAlubWtfY2hpcC0+Z2V0X3NlY29uZGFyeV9zdGF0dXMgPSBwZGF0YS0+Z2V0X3NlY29uZGFyeV9zdGF0dXM7CiAJbm1rX2NoaXAtPnNldF9pb2ZvcmNlID0gcGRhdGEtPnNldF9pb2ZvcmNlOworCW5ta19jaGlwLT5zbGVlcG1vZGUgPSBwZGF0YS0+c3VwcG9ydHNfc2xlZXBtb2RlOwogCXNwaW5fbG9ja19pbml0KCZubWtfY2hpcC0+bG9jayk7CiAKIAljaGlwID0gJm5ta19jaGlwLT5jaGlwOwpAQCAtMTA2NSw1ICsxMDg1LDMgQEAKIE1PRFVMRV9BVVRIT1IoIlByYWZ1bGxhIFdBREFTS0FSIGFuZCBBbGVzc2FuZHJvIFJ1YmluaSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJOb21hZGlrIEdQSU8gRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jCmluZGV4IDZjNTExOTEuLjM1YmViZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMKQEAgLTQzMiw3ICs0MzIsNiBAQAogewogCXZvaWQgX19pb21lbSAqYmFzZSA9IGJhbmstPmJhc2U7CiAJdTMyIGdwaW9fYml0ID0gMSA8PCBncGlvOwotCXUzMiB2YWw7CiAKIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKIAkJTU9EX1JFR19CSVQoT01BUDRfR1BJT19MRVZFTERFVEVDVDAsIGdwaW9fYml0LApAQCAtNDU1LDE1ICs0NTQsOCBAQAogCX0KIAlpZiAobGlrZWx5KCEoYmFuay0+bm9uX3dha2V1cF9ncGlvcyAmIGdwaW9fYml0KSkpIHsKIAkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCQlpZiAodHJpZ2dlciAhPSAwKQotCQkJCV9fcmF3X3dyaXRlbCgxIDw8IGdwaW8sIGJhbmstPmJhc2UrCi0JCQkJCQlPTUFQNF9HUElPX0lSUVdBS0VOMCk7Ci0JCQllbHNlIHsKLQkJCQl2YWwgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKLQkJCQkJCQlPTUFQNF9HUElPX0lSUVdBS0VOMCk7Ci0JCQkJX19yYXdfd3JpdGVsKHZhbCAmICh+KDEgPDwgZ3BpbykpLCBiYW5rLT5iYXNlICsKLQkJCQkJCQkgT01BUDRfR1BJT19JUlFXQUtFTjApOwotCQkJfQorCQkJTU9EX1JFR19CSVQoT01BUDRfR1BJT19JUlFXQUtFTjAsIGdwaW9fYml0LAorCQkJCXRyaWdnZXIgIT0gMCk7CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogR1BJTyB3YWtldXAgcmVxdWVzdCBjYW4gb25seSBiZSBnZW5lcmF0ZWQgb24gZWRnZQpAQCAtNDc3LDggKzQ2OSw5IEBACiAJCQkJCSsgT01BUDI0WFhfR1BJT19DTEVBUldLVUVOQSk7CiAJCX0KIAl9Ci0JLyogVGhpcyBwYXJ0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIGFsd2F5cyBmb3IgT01BUDM0eHggKi8KLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgKGJhbmstPm5vbl93YWtldXBfZ3Bpb3MgJiBncGlvX2JpdCkpIHsKKwkvKiBUaGlzIHBhcnQgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgYWx3YXlzIGZvciBPTUFQezM0eHgsIDQ0eHh9ICovCisJaWYgKGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpIHx8CisJCQkoYmFuay0+bm9uX3dha2V1cF9ncGlvcyAmIGdwaW9fYml0KSkgewogCQkvKgogCQkgKiBMb2cgdGhlIGVkZ2UgZ3BpbyBhbmQgbWFudWFsbHkgdHJpZ2dlciB0aGUgSVJRCiAJCSAqIGFmdGVyIHJlc3VtZSBpZiB0aGUgaW5wdXQgbGV2ZWwgY2hhbmdlcwpAQCAtMTEzNCw4ICsxMTI3LDExIEBACiB7CiAJdW5zaWduZWQgaW50IGdwaW8gPSBkLT5pcnEgLSBJSF9HUElPX0JBU0U7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCV9yZXNldF9ncGlvKGJhbmssIGdwaW8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZ3Bpb19hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKQEAgLTExNTAsOSArMTE0NiwxMiBAQAogewogCXVuc2lnbmVkIGludCBncGlvID0gZC0+aXJxIC0gSUhfR1BJT19CQVNFOwogCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAlfc2V0X2dwaW9faXJxZW5hYmxlKGJhbmssIGdwaW8sIDApOwogCV9zZXRfZ3Bpb190cmlnZ2VyaW5nKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCBJUlFfVFlQRV9OT05FKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGdwaW9fdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCkBAIC0xMTYxLDcgKzExNjAsOSBAQAogCXN0cnVjdCBncGlvX2JhbmsgKmJhbmsgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAl1bnNpZ25lZCBpbnQgaXJxX21hc2sgPSAxIDw8IGdldF9ncGlvX2luZGV4KGdwaW8pOwogCXUzMiB0cmlnZ2VyID0gaXJxZF9nZXRfdHJpZ2dlcl90eXBlKGQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCWlmICh0cmlnZ2VyKQogCQlfc2V0X2dwaW9fdHJpZ2dlcmluZyhiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgdHJpZ2dlcik7CiAKQEAgLTExNzMsNiArMTE3NCw3IEBACiAJfQogCiAJX3NldF9ncGlvX2lycWVuYWJsZShiYW5rLCBncGlvLCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ3Bpb19pcnFfY2hpcCA9IHsKQEAgLTE1MjQsNyArMTUyNiw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF9ncGlvX2NoaXBfaW5pdChzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rKQorc3RhdGljIHZvaWQgX19kZXZpbml0IG9tYXBfZ3Bpb19jaGlwX2luaXQoc3RydWN0IGdwaW9fYmFuayAqYmFuaykKIHsKIAlpbnQgajsKIAlzdGF0aWMgaW50IGdwaW87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jCmluZGV4IDNlMjU3YTUuLjYxZTFlZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jCkBAIC00NiwxMCArNDYsMTEgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tYXBsaXN0LCBoZWFkKSB7CiAJCS8qCiAJCSAqIEJlY2F1c2UgdGhlIGtlcm5lbC11c2Vyc3BhY2UgQUJJIGlzIGZpeGVkIGF0IGEgMzItYml0IG9mZnNldAotCQkgKiB3aGlsZSBQQ0kgcmVzb3VyY2VzIG1heSBsaXZlIGFib3ZlIHRoYXQsIHdlIGlnbm9yZSB0aGUgbWFwCi0JCSAqIG9mZnNldCBmb3IgbWFwcyBvZiB0eXBlIF9EUk1fRlJBTUVCVUZGRVIgb3IgX0RSTV9SRUdJU1RFUlMuCi0JCSAqIEl0IGlzIGFzc3VtZWQgdGhhdCBlYWNoIGRyaXZlciB3aWxsIGhhdmUgb25seSBvbmUgcmVzb3VyY2Ugb2YKLQkJICogZWFjaCB0eXBlLgorCQkgKiB3aGlsZSBQQ0kgcmVzb3VyY2VzIG1heSBsaXZlIGFib3ZlIHRoYXQsIHdlIG9ubHkgY29tcGFyZSB0aGUKKwkJICogbG93ZXIgMzIgYml0cyBvZiB0aGUgbWFwIG9mZnNldCBmb3IgbWFwcyBvZiB0eXBlCisJCSAqIF9EUk1fRlJBTUVCVUZGRVIgb3IgX0RSTV9SRUdJU1RFUlMuCisJCSAqIEl0IGlzIGFzc3VtZWQgdGhhdCBpZiBhIGRyaXZlciBoYXZlIG1vcmUgdGhhbiBvbmUgcmVzb3VyY2UKKwkJICogb2YgZWFjaCB0eXBlLCB0aGUgbG93ZXIgMzIgYml0cyBhcmUgZGlmZmVyZW50LgogCQkgKi8KIAkJaWYgKCFlbnRyeS0+bWFwIHx8CiAJCSAgICBtYXAtPnR5cGUgIT0gZW50cnktPm1hcC0+dHlwZSB8fApAQCAtNTksOSArNjAsMTIgQEAKIAkJY2FzZSBfRFJNX1NITToKIAkJCWlmIChtYXAtPmZsYWdzICE9IF9EUk1fQ09OVEFJTlNfTE9DSykKIAkJCQlicmVhazsKKwkJCXJldHVybiBlbnRyeTsKIAkJY2FzZSBfRFJNX1JFR0lTVEVSUzoKIAkJY2FzZSBfRFJNX0ZSQU1FX0JVRkZFUjoKLQkJCXJldHVybiBlbnRyeTsKKwkJCWlmICgoZW50cnktPm1hcC0+b2Zmc2V0ICYgMHhmZmZmZmZmZikgPT0KKwkJCSAgICAobWFwLT5vZmZzZXQgJiAweGZmZmZmZmZmKSkKKwkJCQlyZXR1cm4gZW50cnk7CiAJCWRlZmF1bHQ6IC8qIE1ha2UgZ2NjIGhhcHB5ICovCiAJCQk7CiAJCX0KQEAgLTE4Myw5ICsxODcsNiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KICNlbmRpZgotI2lmZGVmIF9fYWxwaGFfXwotCQltYXAtPm9mZnNldCArPSBkZXYtPmhvc2UtPm1lbV9zcGFjZS0+c3RhcnQ7Ci0jZW5kaWYKIAkJLyogU29tZSBkcml2ZXJzIHByZWluaXRpYWxpemUgc29tZSBtYXBzLCB3aXRob3V0IHRoZSBYIFNlcnZlcgogCQkgKiBuZWVkaW5nIHRvIGJlIGF3YXJlIG9mIGl0LiAgVGhlcmVmb3JlLCB3ZSBqdXN0IHJldHVybiBzdWNjZXNzCiAJCSAqIHdoZW4gdGhlIHNlcnZlciB0cmllcyB0byBjcmVhdGUgYSBkdXBsaWNhdGUgbWFwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwppbmRleCA4NzI3NDdjLi4yMTA1OGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtMTExMyw3ICsxMTEzLDcgQEAKIAlpZiAoY2FyZF9yZXMtPmNvdW50X2ZicyA+PSBmYl9jb3VudCkgewogCQljb3BpZWQgPSAwOwogCQlmYl9pZCA9ICh1aW50MzJfdCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljYXJkX3Jlcy0+ZmJfaWRfcHRyOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZiLCAmZmlsZV9wcml2LT5mYnMsIGhlYWQpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmYiwgJmZpbGVfcHJpdi0+ZmJzLCBmaWxwX2hlYWQpIHsKIAkJCWlmIChwdXRfdXNlcihmYi0+YmFzZS5pZCwgZmJfaWQgKyBjb3BpZWQpKSB7CiAJCQkJcmV0ID0gLUVGQVVMVDsKIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggMGE5MzU3Yy4uMDkyOTIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTE4NCw5ICsxODQsOSBAQAogCiBiYWQ6CiAJaWYgKHJhd19lZGlkKSB7Ci0JCURSTV9FUlJPUigiUmF3IEVESUQ6XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJSYXcgRURJRDpcbiIpOwogCQlwcmludF9oZXhfZHVtcF9ieXRlcyhLRVJOX0VSUiwgRFVNUF9QUkVGSVhfTk9ORSwgcmF3X2VkaWQsIEVESURfTEVOR1RIKTsKLQkJcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjU4LDYgKzI1OCwxNyBAQAogCXJldHVybiByZXQgPT0gMiA/IDAgOiAtMTsKIH0KIAorc3RhdGljIGJvb2wgZHJtX2VkaWRfaXNfemVybyh1OCAqaW5fZWRpZCwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKwl1MzIgKnJhd19lZGlkID0gKHUzMiAqKWluX2VkaWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoIC8gNDsgaSsrKQorCQlpZiAoKihyYXdfZWRpZCArIGkpICE9IDApCisJCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyB1OCAqCiBkcm1fZG9fZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewpAQCAtMjczLDYgKzI4NCwxMCBAQAogCQkJZ290byBvdXQ7CiAJCWlmIChkcm1fZWRpZF9ibG9ja192YWxpZChibG9jaykpCiAJCQlicmVhazsKKwkJaWYgKGkgPT0gMCAmJiBkcm1fZWRpZF9pc196ZXJvKGJsb2NrLCBFRElEX0xFTkdUSCkpIHsKKwkJCWNvbm5lY3Rvci0+bnVsbF9lZGlkX2NvdW50ZXIrKzsKKwkJCWdvdG8gY2FycDsKKwkJfQogCX0KIAlpZiAoaSA9PSA0KQogCQlnb3RvIGNhcnA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMKaW5kZXggZDYxZDE4NS4uNGEwNThjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYwpAQCAtMjgsNiArMjgsNyBAQAogICogSU4gVEhFIFNPRlRXQVJFLgogICovCiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2NvcmUuaCIKQEAgLTI1MywxMCArMjU0LDEwIEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJbTMyLmhhbmRsZSA9ICh1bnNpZ25lZCBsb25nKWhhbmRsZTsKLQlpZiAobTMyLmhhbmRsZSAhPSAodW5zaWduZWQgbG9uZyloYW5kbGUgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9FUlIgImNvbXBhdF9kcm1fYWRkbWFwIHRydW5jYXRlZCBoYW5kbGUiCi0JCSAgICAgICAiICVwIGZvciB0eXBlICVkIG9mZnNldCAleFxuIiwKLQkJICAgICAgIGhhbmRsZSwgbTMyLnR5cGUsIG0zMi5vZmZzZXQpOworCWlmIChtMzIuaGFuZGxlICE9ICh1bnNpZ25lZCBsb25nKWhhbmRsZSkKKwkJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fRVJSICJjb21wYXRfZHJtX2FkZG1hcCB0cnVuY2F0ZWQgaGFuZGxlIgorCQkJCSAgICIgJXAgZm9yIHR5cGUgJWQgb2Zmc2V0ICV4XG4iLAorCQkJCSAgIGhhbmRsZSwgbTMyLnR5cGUsIG0zMi5vZmZzZXQpOwogCiAJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmbTMyLCBzaXplb2YobTMyKSkpCiAJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wY2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGNpLmMKaW5kZXggZTFhZWU0Zi4uYjZhMTljYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wY2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3BjaS5jCkBAIC0yNTEsNyArMjUxLDcgQEAKIH0KIAogCi1pbnQgZHJtX3BjaV9pcnFfYnlfYnVzaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9pcnFfYnVzaWQgKnApCitzdGF0aWMgaW50IGRybV9wY2lfaXJxX2J5X2J1c2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1faXJxX2J1c2lkICpwKQogewogCWlmICgocC0+YnVzbnVtID4+IDgpICE9IGRybV9nZXRfcGNpX2RvbWFpbihkZXYpIHx8CiAJICAgIChwLT5idXNudW0gJiAweGZmKSAhPSBkZXYtPnBkZXYtPmJ1cy0+bnVtYmVyIHx8CkBAIC0yOTIsNiArMjkyLDcgQEAKIAkuZ2V0X25hbWUgPSBkcm1fcGNpX2dldF9uYW1lLAogCS5zZXRfYnVzaWQgPSBkcm1fcGNpX3NldF9idXNpZCwKIAkuc2V0X3VuaXF1ZSA9IGRybV9wY2lfc2V0X3VuaXF1ZSwKKwkuaXJxX2J5X2J1c2lkID0gZHJtX3BjaV9pcnFfYnlfYnVzaWQsCiAJLmFncF9pbml0ID0gZHJtX3BjaV9hZ3BfaW5pdCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYwppbmRleCAyYzNmY2JkLi41ZGI5NmQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYwpAQCAtNTI2LDcgKzUyNiw3IEBACiBzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IGRybV9jb3JlX2dldF9yZWdfb2ZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgX19hbHBoYV9fCi0JcmV0dXJuIGRldi0+aG9zZS0+ZGVuc2VfbWVtX2Jhc2UgLSBkZXYtPmhvc2UtPm1lbV9zcGFjZS0+c3RhcnQ7CisJcmV0dXJuIGRldi0+aG9zZS0+ZGVuc2VfbWVtX2Jhc2U7CiAjZWxzZQogCXJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCmluZGV4IDUxYzIyNTcuLjRkNDY0NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC03NzYsNyArNzc2LDcgQEAKIAlzZXFfcHJpbnRmKG0sICIgIElOU1RQTTogMHglMDh4XG4iLCBlcnJvci0+aW5zdHBtKTsKIAlzZXFfcHJpbnRmKG0sICIgIHNlcW5vOiAweCUwOHhcbiIsIGVycm9yLT5zZXFubyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzOyBpKyspCiAJCXNlcV9wcmludGYobSwgIiAgZmVuY2VbJWRdID0gJTA4bGx4XG4iLCBpLCBlcnJvci0+ZmVuY2VbaV0pOwogCiAJaWYgKGVycm9yLT5hY3RpdmVfYm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBlZTY2MDM1Li5mNjNlZTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTcxNiw2ICs3MTYsNyBAQAogCXN0cnVjdCBpbnRlbF9mYmRldiAqZmJkZXY7CiAKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpicm9hZGNhc3RfcmdiX3Byb3BlcnR5OworCXN0cnVjdCBkcm1fcHJvcGVydHkgKmZvcmNlX2F1ZGlvX3Byb3BlcnR5OwogCiAJYXRvbWljX3QgZm9yY2V3YWtlX2NvdW50OwogfSBkcm1faTkxNV9wcml2YXRlX3Q7CkBAIC05MDksMTMgKzkxMCw2IEBACiAJfSBtbTsKIH07CiAKLWVudW0gaW50ZWxfY2hpcF9mYW1pbHkgewotCUNISVBfSThYWCA9IDB4MDEsCi0JQ0hJUF9JOVhYID0gMHgwMiwKLQlDSElQX0k5MTUgPSAweDA0LAotCUNISVBfSTk2NSA9IDB4MDgsCi19OwotCiAjZGVmaW5lIElOVEVMX0lORk8oZGV2KQkoKChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqKSAoZGV2KS0+ZGV2X3ByaXZhdGUpLT5pbmZvKQogCiAjZGVmaW5lIElTX0k4MzAoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MzU3NykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDBiMmUxNjcuLjk0Yzg0ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMzU0LDcgKzM1NCw3IEBACiAJCSAqIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChQQUdFX1NJWkUtMSk7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgocGFnZV9vZmZzZXQgKyByZW1haW4pID4gUEFHRV9TSVpFKQogCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKQEAgLTQ1Myw5ICs0NTMsOSBAQAogCQkgKiBkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGggZGF0YV9wYWdlX2luZGV4IHBhZ2UuCiAJCSAqIHBhZ2VfbGVuZ3RoID0gYnl0ZXMgdG8gY29weSBmb3IgdGhpcyBwYWdlCiAJCSAqLwotCQlzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldCAmIH5QQUdFX01BU0s7CisJCXNobWVtX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7Ci0JCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CisJCWRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhX3B0cik7CiAKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgoc2htZW1fcGFnZV9vZmZzZXQgKyBwYWdlX2xlbmd0aCkgPiBQQUdFX1NJWkUpCkBAIC00NjUsOCArNDY1LDEwIEBACiAKIAkJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZV9nZnAobWFwcGluZywgb2Zmc2V0ID4+IFBBR0VfU0hJRlQsCiAJCQkJCSAgIEdGUF9ISUdIVVNFUiB8IF9fR0ZQX1JFQ0xBSU1BQkxFKTsKLQkJaWYgKElTX0VSUihwYWdlKSkKLQkJCXJldHVybiBQVFJfRVJSKHBhZ2UpOworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHBhZ2UpOworCQkJZ290byBvdXQ7CisJCX0KIAogCQlpZiAoZG9fYml0MTdfc3dpenpsaW5nKSB7CiAJCQlzbG93X3NobWVtX2JpdDE3X2NvcHkocGFnZSwKQEAgLTYzOCw4ICs2NDAsOCBAQAogCQkgKiBwYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZQogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJcGFnZV9iYXNlID0gKG9mZnNldCAmIH4oUEFHRV9TSVpFLTEpKTsKLQkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFLTEpOworCQlwYWdlX2Jhc2UgPSBvZmZzZXQgJiBQQUdFX01BU0s7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgocGFnZV9vZmZzZXQgKyByZW1haW4pID4gUEFHRV9TSVpFKQogCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKQEAgLTY1MCw3ICs2NTIsNiBAQAogCQkgKi8KIAkJaWYgKGZhc3RfdXNlcl93cml0ZShkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcsIHBhZ2VfYmFzZSwKIAkJCQkgICAgcGFnZV9vZmZzZXQsIHVzZXJfZGF0YSwgcGFnZV9sZW5ndGgpKQotCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CkBAIC03MzAsOSArNzMxLDkgQEAKIAkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKIAkJICovCiAJCWd0dF9wYWdlX2Jhc2UgPSBvZmZzZXQgJiBQQUdFX01BU0s7Ci0JCWd0dF9wYWdlX29mZnNldCA9IG9mZnNldCAmIH5QQUdFX01BU0s7CisJCWd0dF9wYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CiAJCWRhdGFfcGFnZV9pbmRleCA9IGRhdGFfcHRyIC8gUEFHRV9TSVpFIC0gZmlyc3RfZGF0YV9wYWdlOwotCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gZGF0YV9wdHIgJiB+UEFHRV9NQVNLOworCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZGF0YV9wdHIpOwogCiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKGd0dF9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKQEAgLTc5MSw3ICs3OTIsNyBAQAogCQkgKiBwYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZQogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFLTEpOworCQlwYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKHBhZ2Vfb2Zmc2V0ICsgcmVtYWluKSA+IFBBR0VfU0laRSkKIAkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CkBAIC04OTYsOSArODk3LDkgQEAKIAkJICogZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoIGRhdGFfcGFnZV9pbmRleCBwYWdlLgogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiB+UEFHRV9NQVNLOworCQlzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CiAJCWRhdGFfcGFnZV9pbmRleCA9IGRhdGFfcHRyIC8gUEFHRV9TSVpFIC0gZmlyc3RfZGF0YV9wYWdlOwotCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gZGF0YV9wdHIgJiB+UEFHRV9NQVNLOworCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZGF0YV9wdHIpOwogCiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKHNobWVtX3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQpAQCAtMTQ1MCw4ICsxNDUxLDkgQEAKIAkgKiBlZGdlIG9mIGFuIGV2ZW4gdGlsZSByb3cgKHdoZXJlIHRpbGUgcm93cyBhcmUgY291bnRlZCBhcyBpZiB0aGUgYm8gaXMKIAkgKiBwbGFjZWQgaW4gYSBmZW5jZWQgZ3R0IHJlZ2lvbikuCiAJICovCi0JaWYgKElTX0dFTjIoZGV2KSB8fAotCSAgICAob2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZICYmIEhBU18xMjhfQllURV9ZX1RJTElORyhkZXYpKSkKKwlpZiAoSVNfR0VOMihkZXYpKQorCQl0aWxlX2hlaWdodCA9IDE2OworCWVsc2UgaWYgKG9iai0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSAmJiBIQVNfMTI4X0JZVEVfWV9USUxJTkcoZGV2KSkKIAkJdGlsZV9oZWlnaHQgPSAzMjsKIAllbHNlCiAJCXRpbGVfaGVpZ2h0ID0gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IGI3OTYxOWEuLjllMzRhMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtNTE3LDcgKzUxNyw3IEBACiAJaWYgKGRlX2lpciAmIERFX1BJUEVBX1ZCTEFOS19JVkIpCiAJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAKLQlpZiAoZGVfaWlyICYgREVfUElQRUJfVkJMQU5LX0lWQik7CisJaWYgKGRlX2lpciAmIERFX1BJUEVCX1ZCTEFOS19JVkIpCiAJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSk7CiAKIAkvKiBjaGVjayBldmVudCBmcm9tIFBDSCAqLwpAQCAtMTc0MCw2ICsxNzQwLDE2IEBACiAJCUlOSVRfV09SSygmZGV2X3ByaXYtPnJwc193b3JrLCBnZW42X3BtX3Jwc193b3JrKTsKIAogCUk5MTVfV1JJVEUoSFdTVEFNLCAweGVmZmUpOworCWlmIChJU19HRU42KGRldikpIHsKKwkJLyogV29ya2Fyb3VuZCBzdGFsbHMgb2JzZXJ2ZWQgb24gU2FuZHkgQnJpZGdlIEdQVXMgYnkKKwkJICogbWFraW5nIHRoZSBibGl0dGVyIGNvbW1hbmQgc3RyZWFtZXIgZ2VuZXJhdGUgYQorCQkgKiB3cml0ZSB0byB0aGUgSGFyZHdhcmUgU3RhdHVzIFBhZ2UgZm9yCisJCSAqIE1JX1VTRVJfSU5URVJSVVBULiAgVGhpcyBhcHBlYXJzIHRvIHNlcmlhbGl6ZSB0aGUKKwkJICogcHJldmlvdXMgc2Vxbm8gd3JpdGUgb3V0IGJlZm9yZSB0aGUgaW50ZXJydXB0CisJCSAqIGhhcHBlbnMuCisJCSAqLworCQlJOTE1X1dSSVRFKEdFTjZfQkxJVFRFUl9IV1NUQU0sIH5HRU42X0JMSVRURVJfVVNFUl9JTlRFUlJVUFQpOworCX0KIAogCS8qIFhYWCBob3RwbHVnIGZyb20gUENIICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKaW5kZXggZTkzZjkzYy4uMDk3OWQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKQEAgLTI4OCw2ICsyODgsOCBAQAogCQkgKiBUaGlzIG1heSBiZSBhIERWSS1JIGNvbm5lY3RvciB3aXRoIGEgc2hhcmVkIEREQwogCQkgKiBsaW5rIGJldHdlZW4gYW5hbG9nIGFuZCBkaWdpdGFsIG91dHB1dHMsIHNvIHdlCiAJCSAqIGhhdmUgdG8gY2hlY2sgdGhlIEVESUQgaW5wdXQgc3BlYyBvZiB0aGUgYXR0YWNoZWQgZGV2aWNlLgorCQkgKgorCQkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgd2hhdCBzaG91bGQgd2UgZG8gaWYgaXQgaXMgYSBicm9rZW4gRURJRD8KIAkJICovCiAJCWlmIChlZGlkICE9IE5VTEwpIHsKIAkJCWlzX2RpZ2l0YWwgPSBlZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUw7CkBAIC0yOTgsNiArMzAwLDggQEAKIAkJaWYgKCFpc19kaWdpdGFsKSB7CiAJCQlEUk1fREVCVUdfS01TKCJDUlQgZGV0ZWN0ZWQgdmlhIEREQzoweDUwIFtFRElEXVxuIik7CiAJCQlyZXR1cm4gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCURSTV9ERUJVR19LTVMoIkNSVCBub3QgZGV0ZWN0ZWQgdmlhIEREQzoweDUwIFtFRElEIHJlcG9ydHMgYSBkaWdpdGFsIHBhbmVsXVxuIik7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBmNTUzZGRmZC4uODFhOTA1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwpAQCAtMzk4Myw1NCArMzk4Myw2IEBACiAjZGVmaW5lIElMS19MUDBfUExBTkVfTEFURU5DWQkJNzAwCiAjZGVmaW5lIElMS19MUDBfQ1VSU09SX0xBVEVOQ1kJCTEzMDAKIAotc3RhdGljIGJvb2wgaXJvbmxha2VfY29tcHV0ZV93bTAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkgaW50IHBpcGUsCi0JCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zICpkaXNwbGF5LAotCQkJCSBpbnQgZGlzcGxheV9sYXRlbmN5X25zLAotCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyAqY3Vyc29yLAotCQkJCSBpbnQgY3Vyc29yX2xhdGVuY3lfbnMsCi0JCQkJIGludCAqcGxhbmVfd20sCi0JCQkJIGludCAqY3Vyc29yX3dtKQotewotCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlpbnQgaHRvdGFsLCBoZGlzcGxheSwgY2xvY2ssIHBpeGVsX3NpemU7Ci0JaW50IGxpbmVfdGltZV91cywgbGluZV9jb3VudDsKLQlpbnQgZW50cmllcywgdGxiX21pc3M7Ci0KLQljcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2LCBwaXBlKTsKLQlpZiAoY3J0Yy0+ZmIgPT0gTlVMTCB8fCAhY3J0Yy0+ZW5hYmxlZCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaHRvdGFsID0gY3J0Yy0+bW9kZS5odG90YWw7Ci0JaGRpc3BsYXkgPSBjcnRjLT5tb2RlLmhkaXNwbGF5OwotCWNsb2NrID0gY3J0Yy0+bW9kZS5jbG9jazsKLQlwaXhlbF9zaXplID0gY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKLQotCS8qIFVzZSB0aGUgc21hbGwgYnVmZmVyIG1ldGhvZCB0byBjYWxjdWxhdGUgcGxhbmUgd2F0ZXJtYXJrICovCi0JZW50cmllcyA9ICgoY2xvY2sgKiBwaXhlbF9zaXplIC8gMTAwMCkgKiBkaXNwbGF5X2xhdGVuY3lfbnMpIC8gMTAwMDsKLQl0bGJfbWlzcyA9IGRpc3BsYXktPmZpZm9fc2l6ZSpkaXNwbGF5LT5jYWNoZWxpbmVfc2l6ZSAtIGhkaXNwbGF5ICogODsKLQlpZiAodGxiX21pc3MgPiAwKQotCQllbnRyaWVzICs9IHRsYl9taXNzOwotCWVudHJpZXMgPSBESVZfUk9VTkRfVVAoZW50cmllcywgZGlzcGxheS0+Y2FjaGVsaW5lX3NpemUpOwotCSpwbGFuZV93bSA9IGVudHJpZXMgKyBkaXNwbGF5LT5ndWFyZF9zaXplOwotCWlmICgqcGxhbmVfd20gPiAoaW50KWRpc3BsYXktPm1heF93bSkKLQkJKnBsYW5lX3dtID0gZGlzcGxheS0+bWF4X3dtOwotCi0JLyogVXNlIHRoZSBsYXJnZSBidWZmZXIgbWV0aG9kIHRvIGNhbGN1bGF0ZSBjdXJzb3Igd2F0ZXJtYXJrICovCi0JbGluZV90aW1lX3VzID0gKChodG90YWwgKiAxMDAwKSAvIGNsb2NrKTsKLQlsaW5lX2NvdW50ID0gKGN1cnNvcl9sYXRlbmN5X25zIC8gbGluZV90aW1lX3VzICsgMTAwMCkgLyAxMDAwOwotCWVudHJpZXMgPSBsaW5lX2NvdW50ICogNjQgKiBwaXhlbF9zaXplOwotCXRsYl9taXNzID0gY3Vyc29yLT5maWZvX3NpemUqY3Vyc29yLT5jYWNoZWxpbmVfc2l6ZSAtIGhkaXNwbGF5ICogODsKLQlpZiAodGxiX21pc3MgPiAwKQotCQllbnRyaWVzICs9IHRsYl9taXNzOwotCWVudHJpZXMgPSBESVZfUk9VTkRfVVAoZW50cmllcywgY3Vyc29yLT5jYWNoZWxpbmVfc2l6ZSk7Ci0JKmN1cnNvcl93bSA9IGVudHJpZXMgKyBjdXJzb3ItPmd1YXJkX3NpemU7Ci0JaWYgKCpjdXJzb3Jfd20gPiAoaW50KWN1cnNvci0+bWF4X3dtKQotCQkqY3Vyc29yX3dtID0gKGludCljdXJzb3ItPm1heF93bTsKLQotCXJldHVybiB0cnVlOwotfQotCiAvKgogICogQ2hlY2sgdGhlIHdtIHJlc3VsdC4KICAqCkBAIC00MTM5LDEyICs0MDkxLDEyIEBACiAJdW5zaWduZWQgaW50IGVuYWJsZWQ7CiAKIAllbmFibGVkID0gMDsKLQlpZiAoaXJvbmxha2VfY29tcHV0ZV93bTAoZGV2LCAwLAotCQkJCSAmaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLAotCQkJCSBJTEtfTFAwX1BMQU5FX0xBVEVOQ1ksCi0JCQkJICZpcm9ubGFrZV9jdXJzb3Jfd21faW5mbywKLQkJCQkgSUxLX0xQMF9DVVJTT1JfTEFURU5DWSwKLQkJCQkgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgeworCWlmIChnNHhfY29tcHV0ZV93bTAoZGV2LCAwLAorCQkJICAgICZpcm9ubGFrZV9kaXNwbGF5X3dtX2luZm8sCisJCQkgICAgSUxLX0xQMF9QTEFORV9MQVRFTkNZLAorCQkJICAgICZpcm9ubGFrZV9jdXJzb3Jfd21faW5mbywKKwkJCSAgICBJTEtfTFAwX0NVUlNPUl9MQVRFTkNZLAorCQkJICAgICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKIAkJSTkxNV9XUklURShXTTBfUElQRUFfSUxLLAogCQkJICAgKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BMQU5FX1NISUZUKSB8IGN1cnNvcl93bSk7CiAJCURSTV9ERUJVR19LTVMoIkZJRk8gd2F0ZXJtYXJrcyBGb3IgcGlwZSBBIC0iCkBAIC00MTUzLDEyICs0MTA1LDEyIEBACiAJCWVuYWJsZWQgfD0gMTsKIAl9CiAKLQlpZiAoaXJvbmxha2VfY29tcHV0ZV93bTAoZGV2LCAxLAotCQkJCSAmaXJvbmxha2VfZGlzcGxheV93bV9pbmZvLAotCQkJCSBJTEtfTFAwX1BMQU5FX0xBVEVOQ1ksCi0JCQkJICZpcm9ubGFrZV9jdXJzb3Jfd21faW5mbywKLQkJCQkgSUxLX0xQMF9DVVJTT1JfTEFURU5DWSwKLQkJCQkgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgeworCWlmIChnNHhfY29tcHV0ZV93bTAoZGV2LCAxLAorCQkJICAgICZpcm9ubGFrZV9kaXNwbGF5X3dtX2luZm8sCisJCQkgICAgSUxLX0xQMF9QTEFORV9MQVRFTkNZLAorCQkJICAgICZpcm9ubGFrZV9jdXJzb3Jfd21faW5mbywKKwkJCSAgICBJTEtfTFAwX0NVUlNPUl9MQVRFTkNZLAorCQkJICAgICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKIAkJSTkxNV9XUklURShXTTBfUElQRUJfSUxLLAogCQkJICAgKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BMQU5FX1NISUZUKSB8IGN1cnNvcl93bSk7CiAJCURSTV9ERUJVR19LTVMoIkZJRk8gd2F0ZXJtYXJrcyBGb3IgcGlwZSBCIC0iCkBAIC00MjIzLDEwICs0MTc1LDEwIEBACiAJdW5zaWduZWQgaW50IGVuYWJsZWQ7CiAKIAllbmFibGVkID0gMDsKLQlpZiAoaXJvbmxha2VfY29tcHV0ZV93bTAoZGV2LCAwLAotCQkJCSAmc2FuZHlicmlkZ2VfZGlzcGxheV93bV9pbmZvLCBsYXRlbmN5LAotCQkJCSAmc2FuZHlicmlkZ2VfY3Vyc29yX3dtX2luZm8sIGxhdGVuY3ksCi0JCQkJICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKKwlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgMCwKKwkJCSAgICAmc2FuZHlicmlkZ2VfZGlzcGxheV93bV9pbmZvLCBsYXRlbmN5LAorCQkJICAgICZzYW5keWJyaWRnZV9jdXJzb3Jfd21faW5mbywgbGF0ZW5jeSwKKwkJCSAgICAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CiAJCUk5MTVfV1JJVEUoV00wX1BJUEVBX0lMSywKIAkJCSAgIChwbGFuZV93bSA8PCBXTTBfUElQRV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pOwogCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3MgRm9yIHBpcGUgQSAtIgpAQCAtNDIzNSwxMCArNDE4NywxMCBAQAogCQllbmFibGVkIHw9IDE7CiAJfQogCi0JaWYgKGlyb25sYWtlX2NvbXB1dGVfd20wKGRldiwgMSwKLQkJCQkgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywgbGF0ZW5jeSwKLQkJCQkgJnNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvLCBsYXRlbmN5LAotCQkJCSAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CisJaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIDEsCisJCQkgICAgJnNhbmR5YnJpZGdlX2Rpc3BsYXlfd21faW5mbywgbGF0ZW5jeSwKKwkJCSAgICAmc2FuZHlicmlkZ2VfY3Vyc29yX3dtX2luZm8sIGxhdGVuY3ksCisJCQkgICAgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgewogCQlJOTE1X1dSSVRFKFdNMF9QSVBFQl9JTEssCiAJCQkgICAocGxhbmVfd20gPDwgV00wX1BJUEVfUExBTkVfU0hJRlQpIHwgY3Vyc29yX3dtKTsKIAkJRFJNX0RFQlVHX0tNUygiRklGTyB3YXRlcm1hcmtzIEZvciBwaXBlIEIgLSIKQEAgLTc2NzUsNiArNzYyNyw3IEBACiAJCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBOVUxMOwogCQl9IGVsc2UKIAkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IHBpbmV2aWV3X3VwZGF0ZV93bTsKKwkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdF9jbG9ja19nYXRpbmcgPSBnZW4zX2luaXRfY2xvY2tfZ2F0aW5nOwogCX0gZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gZzR4X3VwZGF0ZV93bTsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdF9jbG9ja19nYXRpbmcgPSBnNHhfaW5pdF9jbG9ja19nYXRpbmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwppbmRleCBhNGQ4MDMxLi4zOTFiNTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTU5LDggKzU5LDYgQEAKIAlib29sIGlzX3BjaF9lZHA7CiAJdWludDhfdAl0cmFpbl9zZXRbNF07CiAJdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKLQotCXN0cnVjdCBkcm1fcHJvcGVydHkgKmZvcmNlX2F1ZGlvX3Byb3BlcnR5OwogfTsKIAogLyoqCkBAIC0xNzAyLDcgKzE3MDAsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAocHJvcGVydHkgPT0gaW50ZWxfZHAtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CisJaWYgKHByb3BlcnR5ID09IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewogCQlpbnQgaSA9IHZhbDsKIAkJYm9vbCBoYXNfYXVkaW87CiAKQEAgLTE4NDEsMTYgKzE4MzksNyBAQAogc3RhdGljIHZvaWQKIGludGVsX2RwX2FkZF9wcm9wZXJ0aWVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwotCi0JaW50ZWxfZHAtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5ID0KLQkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsICJmb3JjZV9hdWRpbyIsIDIpOwotCWlmIChpbnRlbF9kcC0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKLQkJaW50ZWxfZHAtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LT52YWx1ZXNbMF0gPSAtMTsKLQkJaW50ZWxfZHAtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LT52YWx1ZXNbMV0gPSAxOwotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSwgMCk7Ci0JfQotCisJaW50ZWxfYXR0YWNoX2ZvcmNlX2F1ZGlvX3Byb3BlcnR5KGNvbm5lY3Rvcik7CiAJaW50ZWxfYXR0YWNoX2Jyb2FkY2FzdF9yZ2JfcHJvcGVydHkoY29ubmVjdG9yKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCA4MzFkN2E0Li45ZmZhNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMjM2LDYgKzIzNiw3IEBACiBpbnQgaW50ZWxfZGRjX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqYywgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBib29sIGludGVsX2RkY19wcm9iZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlciwgaW50IGRkY19idXMpOwogCitleHRlcm4gdm9pZCBpbnRlbF9hdHRhY2hfZm9yY2VfYXVkaW9fcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiBleHRlcm4gdm9pZCBpbnRlbF9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIAogZXh0ZXJuIHZvaWQgaW50ZWxfY3J0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKaW5kZXggZjI4OWI4Ni4uYWEwYThlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwpAQCAtNDUsNyArNDUsNiBAQAogCWJvb2wgaGFzX2hkbWlfc2luazsKIAlib29sIGhhc19hdWRpbzsKIAlpbnQgZm9yY2VfYXVkaW87Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqZm9yY2VfYXVkaW9fcHJvcGVydHk7CiB9OwogCiBzdGF0aWMgc3RydWN0IGludGVsX2hkbWkgKmVuY190b19pbnRlbF9oZG1pKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTE5NCw3ICsxOTMsNyBAQAogCWlmIChtb2RlLT5jbG9jayA+IDE2NTAwMCkKIAkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKIAlpZiAobW9kZS0+Y2xvY2sgPCAyMDAwMCkKLQkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOwogCiAJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQogCQlyZXR1cm4gTU9ERV9OT19EQkxFU0NBTjsKQEAgLTI4Nyw3ICsyODYsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAocHJvcGVydHkgPT0gaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKKwlpZiAocHJvcGVydHkgPT0gZGV2X3ByaXYtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CiAJCWludCBpID0gdmFsOwogCQlib29sIGhhc19hdWRpbzsKIApAQCAtMzY1LDE2ICszNjQsNyBAQAogc3RhdGljIHZvaWQKIGludGVsX2hkbWlfYWRkX3Byb3BlcnRpZXMoc3RydWN0IGludGVsX2hkbWkgKmludGVsX2hkbWksIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwotCi0JaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW9fcHJvcGVydHkgPQotCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9SQU5HRSwgImZvcmNlX2F1ZGlvIiwgMik7Ci0JaWYgKGludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7Ci0JCWludGVsX2hkbWktPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LT52YWx1ZXNbMF0gPSAtMTsKLQkJaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW9fcHJvcGVydHktPnZhbHVlc1sxXSA9IDE7Ci0JCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwgaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW9fcHJvcGVydHksIDApOwotCX0KLQorCWludGVsX2F0dGFjaF9mb3JjZV9hdWRpb19wcm9wZXJ0eShjb25uZWN0b3IpOwogCWludGVsX2F0dGFjaF9icm9hZGNhc3RfcmdiX3Byb3BlcnR5KGNvbm5lY3Rvcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKaW5kZXggZDNiOTAzYi4uZDk4Y2VlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKQEAgLTQwMSw4ICs0MDEsNyBAQAogCQlidXMtPnJlZzAgPSBpIHwgR01CVVNfUkFURV8xMDBLSFo7CiAKIAkJLyogWFhYIGZvcmNlIGJpdCBiYW5naW5nIHVudGlsIEdNQlVTIGlzIGZ1bGx5IGRlYnVnZ2VkICovCi0JCWlmIChJU19HRU4yKGRldikpCi0JCQlidXMtPmZvcmNlX2JpdCA9IGludGVsX2dwaW9fY3JlYXRlKGRldl9wcml2LCBpKTsKKwkJYnVzLT5mb3JjZV9iaXQgPSBpbnRlbF9ncGlvX2NyZWF0ZShkZXZfcHJpdiwgaSk7CiAJfQogCiAJaW50ZWxfaTJjX3Jlc2V0KGRldl9wcml2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IDY3Y2IwNzYuLmIyOGY3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTcyNyw2ICs3MjcsMTQgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVTgwMCIpLAogCQl9LAogCX0sCisJeworCQkuY2FsbGJhY2sgPSBpbnRlbF9ub19sdmRzX2RtaV9jYWxsYmFjaywKKwkJLmlkZW50ID0gIkFzdXMgRWVlQm94IFBDIEVCMTAwNyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQVNVU1RlSyBDb21wdXRlciBJTkMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkVCMTAwNyIpLAorCQl9LAorCX0sCiAKIAl7IH0JLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYwppbmRleCA5MDM0ZGQ4Zi4uM2IyNmEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCkBAIC04MSw2ICs4MSwzNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JjZV9hdWRpb19uYW1lc1tdID0geworCSJvZmYiLAorCSJhdXRvIiwKKwkib24iLAorfTsKKwordm9pZAoraW50ZWxfYXR0YWNoX2ZvcmNlX2F1ZGlvX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKKwlpbnQgaTsKKworCXByb3AgPSBkZXZfcHJpdi0+Zm9yY2VfYXVkaW9fcHJvcGVydHk7CisJaWYgKHByb3AgPT0gTlVMTCkgeworCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfRU5VTSwKKwkJCQkJICAgImF1ZGlvIiwKKwkJCQkJICAgQVJSQVlfU0laRShmb3JjZV9hdWRpb19uYW1lcykpOworCQlpZiAocHJvcCA9PSBOVUxMKQorCQkJcmV0dXJuOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcmNlX2F1ZGlvX25hbWVzKTsgaSsrKQorCQkJZHJtX3Byb3BlcnR5X2FkZF9lbnVtKHByb3AsIGksIGktMSwgZm9yY2VfYXVkaW9fbmFtZXNbaV0pOworCisJCWRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSA9IHByb3A7CisJfQorCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwgcHJvcCwgMCk7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyICpicm9hZGNhc3RfcmdiX25hbWVzW10gPSB7CiAJIkZ1bGwiLAogCSJMaW1pdGVkIDE2OjIzNSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKaW5kZXggNzU0MDg2Zi4uMzBmZTU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwpAQCAtMTQ4LDggKzE0OCw2IEBACiAJaW50ICAgZm9ybWF0X3N1cHBvcnRlZF9udW07CiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfZm9ybWF0OwogCi0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqZm9yY2VfYXVkaW9fcHJvcGVydHk7Ci0KIAkvKiBhZGQgdGhlIHByb3BlcnR5IGZvciB0aGUgU0RWTy1UViAqLwogCXN0cnVjdCBkcm1fcHJvcGVydHkgKmxlZnQ7CiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqcmlnaHQ7CkBAIC0xNzEyLDcgKzE3MTAsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAocHJvcGVydHkgPT0gaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CisJaWYgKHByb3BlcnR5ID09IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewogCQlpbnQgaSA9IHZhbDsKIAkJYm9vbCBoYXNfYXVkaW87CiAKQEAgLTIwMzcsMTUgKzIwMzUsNyBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmJhc2UuYmFzZS5kZXY7CiAKLQljb25uZWN0b3ItPmZvcmNlX2F1ZGlvX3Byb3BlcnR5ID0KLQkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsICJmb3JjZV9hdWRpbyIsIDIpOwotCWlmIChjb25uZWN0b3ItPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7Ci0JCWNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHktPnZhbHVlc1swXSA9IC0xOwotCQljb25uZWN0b3ItPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LT52YWx1ZXNbMV0gPSAxOwotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLmJhc2UsCi0JCQkJCSAgICAgIGNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHksIDApOwotCX0KLQorCWludGVsX2F0dGFjaF9mb3JjZV9hdWRpb19wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLmJhc2UpOwogCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0ICYmIElTX01PQklMRShkZXYpKQogCQlpbnRlbF9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLmJhc2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaAppbmRleCAxMDg0ZmE0Li41NDU1OGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaApAQCAtMTk1LDI5ICsxOTUsMTAgQEAKIAogI2RlZmluZSBtZ2FfZmx1c2hfd3JpdGVfY29tYmluZSgpCURSTV9XUklURU1FTU9SWUJBUlJJRVIoKQogCi0jaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19hbHBoYV9fKQotI2RlZmluZSBNR0FfQkFTRShyZWcpCQkoKHVuc2lnbmVkIGxvbmcpKGRldl9wcml2LT5tbWlvLT5oYW5kbGUpKQotI2RlZmluZSBNR0FfQUREUihyZWcpCQkoTUdBX0JBU0UocmVnKSArIHJlZykKLQotI2RlZmluZSBNR0FfREVSRUYocmVnKQkJKCoodm9sYXRpbGUgdTMyICopTUdBX0FERFIocmVnKSkKLSNkZWZpbmUgTUdBX0RFUkVGOChyZWcpCQkoKih2b2xhdGlsZSB1OCAqKU1HQV9BRERSKHJlZykpCi0KLSNkZWZpbmUgTUdBX1JFQUQocmVnKQkJKF9NR0FfUkVBRCgodTMyICopTUdBX0FERFIocmVnKSkpCi0jZGVmaW5lIE1HQV9SRUFEOChyZWcpCQkoX01HQV9SRUFEKCh1OCAqKU1HQV9BRERSKHJlZykpKQotI2RlZmluZSBNR0FfV1JJVEUocmVnLCB2YWwpCWRvIHsgRFJNX1dSSVRFTUVNT1JZQkFSUklFUigpOyBNR0FfREVSRUYocmVnKSA9IHZhbDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUdBX1dSSVRFOChyZWcsIHZhbCkJZG8geyBEUk1fV1JJVEVNRU1PUllCQVJSSUVSKCk7IE1HQV9ERVJFRjgocmVnKSA9IHZhbDsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGlubGluZSB1MzIgX01HQV9SRUFEKHUzMiAqYWRkcikKLXsKLQlEUk1fTUVNT1JZQkFSUklFUigpOwotCXJldHVybiAqKHZvbGF0aWxlIHUzMiAqKWFkZHI7Ci19Ci0jZWxzZQogI2RlZmluZSBNR0FfUkVBRDgocmVnKQkJRFJNX1JFQUQ4KGRldl9wcml2LT5tbWlvLCAocmVnKSkKICNkZWZpbmUgTUdBX1JFQUQocmVnKQkJRFJNX1JFQUQzMihkZXZfcHJpdi0+bW1pbywgKHJlZykpCiAjZGVmaW5lIE1HQV9XUklURTgocmVnLCB2YWwpCURSTV9XUklURTgoZGV2X3ByaXYtPm1taW8sIChyZWcpLCAodmFsKSkKICNkZWZpbmUgTUdBX1dSSVRFKHJlZywgdmFsKQlEUk1fV1JJVEUzMihkZXZfcHJpdi0+bW1pbywgKHJlZyksICh2YWwpKQotI2VuZGlmCiAKICNkZWZpbmUgRFdHUkVHMAkJMHgxYzAwCiAjZGVmaW5lIERXR1JFRzBfRU5ECTB4MWRmZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9hY3BpLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYwppbmRleCBmMGQ0NTliLi41MjU3NDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYwpAQCAtMjYyLDcgKzI2Miw2IEBACiAJCXZnYV9jb3VudCsrOwogCiAJCXJldHZhbCA9IG5vdXZlYXVfZHNtX3BjaV9wcm9iZShwZGV2KTsKLQkJcHJpbnRrKCJyZXQgdmFsIGlzICVkXG4iLCByZXR2YWwpOwogCQlpZiAocmV0dmFsICYgTk9VVkVBVV9EU01fSEFTX01VWCkKIAkJCWhhc19kc20gfD0gMTsKIAkJaWYgKHJldHZhbCAmIE5PVVZFQVVfRFNNX0hBU19PUFQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZlbmNlLmMKaW5kZXggNGI5ZjQ0OS4uNzM0NzA3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mZW5jZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmVuY2UuYwpAQCAtMzM5LDExICszMzksMTIgQEAKIAlpbnQgcmV0OwogCiAJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHg4NCkgewotCQlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIDMpOworCQlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIDQpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQlCRUdJTl9SSU5HKGNoYW4sIE52U3ViU3csIE5WX1NXX1NFTUFQSE9SRV9PRkZTRVQsIDIpOworCQlCRUdJTl9SSU5HKGNoYW4sIE52U3ViU3csIE5WX1NXX0RNQV9TRU1BUEhPUkUsIDMpOworCQlPVVRfUklORyAgKGNoYW4sIE52U2VtYSk7CiAJCU9VVF9SSU5HICAoY2hhbiwgc2VtYS0+bWVtLT5zdGFydCk7CiAJCU9VVF9SSU5HICAoY2hhbiwgMSk7CiAJfSBlbHNlCkBAIC0zNTEsMTAgKzM1MiwxMiBAQAogCQlzdHJ1Y3Qgbm91dmVhdV92bWEgKnZtYSA9ICZkZXZfcHJpdi0+ZmVuY2UuYm8tPnZtYTsKIAkJdTY0IG9mZnNldCA9IHZtYS0+b2Zmc2V0ICsgc2VtYS0+bWVtLT5zdGFydDsKIAotCQlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIDUpOworCQlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIDcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAorCQlCRUdJTl9SSU5HKGNoYW4sIE52U3ViU3csIE5WX1NXX0RNQV9TRU1BUEhPUkUsIDEpOworCQlPVVRfUklORyAgKGNoYW4sIGNoYW4tPnZyYW1faGFuZGxlKTsKIAkJQkVHSU5fUklORyhjaGFuLCBOdlN1YlN3LCAweDAwMTAsIDQpOwogCQlPVVRfUklORyAgKGNoYW4sIHVwcGVyXzMyX2JpdHMob2Zmc2V0KSk7CiAJCU9VVF9SSU5HICAoY2hhbiwgbG93ZXJfMzJfYml0cyhvZmZzZXQpKTsKQEAgLTM5NCwxMSArMzk3LDEyIEBACiAJaW50IHJldDsKIAogCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4ODQpIHsKLQkJcmV0ID0gUklOR19TUEFDRShjaGFuLCA0KTsKKwkJcmV0ID0gUklOR19TUEFDRShjaGFuLCA1KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJQkVHSU5fUklORyhjaGFuLCBOdlN1YlN3LCBOVl9TV19TRU1BUEhPUkVfT0ZGU0VULCAxKTsKKwkJQkVHSU5fUklORyhjaGFuLCBOdlN1YlN3LCBOVl9TV19ETUFfU0VNQVBIT1JFLCAyKTsKKwkJT1VUX1JJTkcgIChjaGFuLCBOdlNlbWEpOwogCQlPVVRfUklORyAgKGNoYW4sIHNlbWEtPm1lbS0+c3RhcnQpOwogCQlCRUdJTl9SSU5HKGNoYW4sIE52U3ViU3csIE5WX1NXX1NFTUFQSE9SRV9SRUxFQVNFLCAxKTsKIAkJT1VUX1JJTkcgIChjaGFuLCAxKTsKQEAgLTQwNywxMCArNDExLDEyIEBACiAJCXN0cnVjdCBub3V2ZWF1X3ZtYSAqdm1hID0gJmRldl9wcml2LT5mZW5jZS5iby0+dm1hOwogCQl1NjQgb2Zmc2V0ID0gdm1hLT5vZmZzZXQgKyBzZW1hLT5tZW0tPnN0YXJ0OwogCi0JCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgNSk7CisJCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgNyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCisJCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJTdywgTlZfU1dfRE1BX1NFTUFQSE9SRSwgMSk7CisJCU9VVF9SSU5HICAoY2hhbiwgY2hhbi0+dnJhbV9oYW5kbGUpOwogCQlCRUdJTl9SSU5HKGNoYW4sIE52U3ViU3csIDB4MDAxMCwgNCk7CiAJCU9VVF9SSU5HICAoY2hhbiwgdXBwZXJfMzJfYml0cyhvZmZzZXQpKTsKIAkJT1VUX1JJTkcgIChjaGFuLCBsb3dlcl8zMl9iaXRzKG9mZnNldCkpOwpAQCAtNTA0LDIyICs1MTAsMjIgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKm9iaiA9IE5VTEw7CiAJaW50IHJldDsKIAotCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WX0MwKQotCQlnb3RvIG91dF9pbml0aWFsaXNlZDsKKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA8IE5WX0MwKSB7CisJCS8qIENyZWF0ZSBhbiBOVl9TVyBvYmplY3QgZm9yIHZhcmlvdXMgc3luYyBwdXJwb3NlcyAqLworCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9ncl9uZXcoY2hhbiwgTnZTdywgTlZfU1cpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKIAotCS8qIENyZWF0ZSBhbiBOVl9TVyBvYmplY3QgZm9yIHZhcmlvdXMgc3luYyBwdXJwb3NlcyAqLwotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX2dyX25ldyhjaGFuLCBOdlN3LCBOVl9TVyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJcmV0ID0gUklOR19TUEFDRShjaGFuLCAyKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAKLQkvKiB3ZSBsZWF2ZSBzdWJjaGFubmVsIGVtcHR5IGZvciBudmMwICovCi0JcmV0ID0gUklOR19TUEFDRShjaGFuLCAyKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJTdywgMCwgMSk7Ci0JT1VUX1JJTkcoY2hhbiwgTnZTdyk7CisJCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJTdywgMCwgMSk7CisJCU9VVF9SSU5HICAoY2hhbiwgTnZTdyk7CisJCUZJUkVfUklORyAoY2hhbik7CisJfQogCi0JLyogQ3JlYXRlIGEgRE1BIG9iamVjdCBmb3IgdGhlIHNoYXJlZCBjcm9zcy1jaGFubmVsIHN5bmMgYXJlYS4gKi8KKwkvKiBTZXR1cCBhcmVhIG9mIG1lbW9yeSBzaGFyZWQgYmV0d2VlbiBhbGwgY2hhbm5lbHMgZm9yIHgtY2hhbiBzeW5jICovCiAJaWYgKFVTRV9TRU1BKGRldikgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweDg0KSB7CiAJCXN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtID0gJmRldl9wcml2LT5mZW5jZS5iby0+Ym8ubWVtOwogCkBAIC01MzQsMjMgKzU0MCw4IEBACiAJCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmb2JqKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0KLQkJcmV0ID0gUklOR19TUEFDRShjaGFuLCAyKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJTdywgTlZfU1dfRE1BX1NFTUFQSE9SRSwgMSk7Ci0JCU9VVF9SSU5HKGNoYW4sIE52U2VtYSk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gUklOR19TUEFDRShjaGFuLCAyKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JCUJFR0lOX1JJTkcoY2hhbiwgTnZTdWJTdywgTlZfU1dfRE1BX1NFTUFQSE9SRSwgMSk7Ci0JCU9VVF9SSU5HICAoY2hhbiwgY2hhbi0+dnJhbV9oYW5kbGUpOyAvKiB3aG9sZSBWTSAqLwogCX0KIAotCUZJUkVfUklORyhjaGFuKTsKLQotb3V0X2luaXRpYWxpc2VkOgogCUlOSVRfTElTVF9IRUFEKCZjaGFuLT5mZW5jZS5wZW5kaW5nKTsKIAlzcGluX2xvY2tfaW5pdCgmY2hhbi0+ZmVuY2UubG9jayk7CiAJYXRvbWljX3NldCgmY2hhbi0+ZmVuY2UubGFzdF9zZXF1ZW5jZV9pcnEsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ody5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ody5jCmluZGV4IDA1M2VkZjkuLmJhODk2ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaHcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMKQEAgLTkwMCw2ICs5MDAsNyBAQAogCX0KIAkvKiBOVjExIGFuZCBOVjIwIGRvbid0IGhhdmUgdGhpcywgdGhleSBzdG9wIGF0IDB4NTIuICovCiAJaWYgKG52X2dmNF9kaXNwX2FyY2goZGV2KSkgeworCQlyZF9jaW9fc3RhdGUoZGV2LCBoZWFkLCByZWdwLCBOVl9DSU9fQ1JFXzQyKTsKIAkJcmRfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV81Myk7CiAJCXJkX2Npb19zdGF0ZShkZXYsIGhlYWQsIHJlZ3AsIE5WX0NJT19DUkVfNTQpOwogCkBAIC0xMDAzLDYgKzEwMDQsNyBAQAogCQkJbm91dmVhdV93YWl0X2VxKGRldiwgNjUwMDAwMDAwLCBOVl9QUk1DSU9fSU5QMF9fQ09MT1IsIDB4OCwgMHgwKTsKIAkJfQogCisJCXdyX2Npb19zdGF0ZShkZXYsIGhlYWQsIHJlZ3AsIE5WX0NJT19DUkVfNDIpOwogCQl3cl9jaW9fc3RhdGUoZGV2LCBoZWFkLCByZWdwLCBOVl9DSU9fQ1JFXzUzKTsKIAkJd3JfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV81NCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCmluZGV4IDI5NjBmNTguLjVlZTE0ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJCWlmIChwY2lfZG1hX3N1cHBvcnRlZChkZXYtPnBkZXYsIERNQV9CSVRfTUFTSyg0MCkpKQogCQkJZG1hX2JpdHMgPSA0MDsKIAl9IGVsc2UKLQlpZiAoZHJtX3BjaV9kZXZpY2VfaXNfcGNpZShkZXYpICYmCisJaWYgKDAgJiYgZHJtX3BjaV9kZXZpY2VfaXNfcGNpZShkZXYpICYmCiAJICAgIGRldl9wcml2LT5jaGlwc2V0ICA+IDB4NDAgJiYKIAkgICAgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0NSkgewogCQlpZiAocGNpX2RtYV9zdXBwb3J0ZWQoZGV2LT5wZGV2LCBETUFfQklUX01BU0soMzkpKSkKQEAgLTg2OCw3ICs4NjgsOSBAQAogCQlub3V2ZWF1X3ZtX3VubWFwKCZub2RlLT50bXBfdm1hKTsKIAkJbm91dmVhdV92bV9wdXQoJm5vZGUtPnRtcF92bWEpOwogCX0KKwogCW1lbS0+bW1fbm9kZSA9IE5VTEw7CisJa2ZyZWUobm9kZSk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wZXJmLmMKaW5kZXggOTIyZmI2Yi4uZWY5ZGVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wZXJmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wZXJmLmMKQEAgLTE4Miw2ICsxODIsMTEgQEAKIAkJZW50cmllcyAgID0gcGVyZlsyXTsKIAl9CiAKKwlpZiAoZW50cmllcyA+IE5PVVZFQVVfUE1fTUFYX0xFVkVMKSB7CisJCU5WX0RFQlVHKGRldiwgInBlcmYgdGFibGUgaGFzIHRvbyBtYW55IGVudHJpZXMgLSBidWdneSB2Ymlvcz9cbiIpOworCQllbnRyaWVzID0gTk9VVkVBVV9QTV9NQVhfTEVWRUw7CisJfQorCiAJZW50cnkgPSBwZXJmICsgaGVhZGVybGVuOwogCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKIAkJc3RydWN0IG5vdXZlYXVfcG1fbGV2ZWwgKnBlcmZsdmwgPSAmcG0tPnBlcmZsdmxbcG0tPm5yX3BlcmZsdmxdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCmluZGV4IGM3NzExMWUuLjgyZmFkOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCQlkZXZfcHJpdi0+Z2FydF9pbmZvLnR5cGUgPSBOT1VWRUFVX0dBUlRfSFc7CiAJCWRldl9wcml2LT5nYXJ0X2luZm8uZnVuYyA9ICZudjUwX3NnZG1hX2JhY2tlbmQ7CiAJfSBlbHNlCi0JaWYgKGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgorCWlmICgwICYmIGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgogCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA+IDB4NDAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0NSkgewogCQlpZiAobnY0NF9ncmFwaF9jbGFzcyhkZXYpKSB7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmZ1bmMgPSAmbnY0NF9zZ2RtYV9iYWNrZW5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCmluZGV4IDM4ZWE2NjIuLjE0NGY3OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKQEAgLTM3MSw2ICszNzEsNyBAQAogCQllbmdpbmUtPnZyYW0uZmxhZ3NfdmFsaWQJPSBudjUwX3ZyYW1fZmxhZ3NfdmFsaWQ7CiAJCWJyZWFrOwogCWNhc2UgMHhDMDoKKwljYXNlIDB4RDA6CiAJCWVuZ2luZS0+aW5zdG1lbS5pbml0CQk9IG52YzBfaW5zdG1lbV9pbml0OwogCQllbmdpbmUtPmluc3RtZW0udGFrZWRvd24JPSBudmMwX2luc3RtZW1fdGFrZWRvd247CiAJCWVuZ2luZS0+aW5zdG1lbS5zdXNwZW5kCQk9IG52YzBfaW5zdG1lbV9zdXNwZW5kOwpAQCAtNTYzLDY4ICs1NjQsNjggQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF90aW1lcjsKIAotCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgewotCWNhc2UgTlZfMDQ6Ci0JCW52MDRfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfMTA6Ci0JCW52MTBfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfMjA6Ci0JY2FzZSBOVl8zMDoKLQkJbnYyMF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl80MDoKLQkJbnY0MF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl81MDoKLQkJbnY1MF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBOVl9DMDoKLQkJbnZjMF9ncmFwaF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCWNhc2UgMHg4NDoKLQljYXNlIDB4ODY6Ci0JY2FzZSAweDkyOgotCWNhc2UgMHg5NDoKLQljYXNlIDB4OTY6Ci0JY2FzZSAweGEwOgotCQludjg0X2NyeXB0X2NyZWF0ZShkZXYpOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGRldl9wcml2LT5jYXJkX3R5cGUpIHsKLQljYXNlIE5WXzUwOgotCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JCWNhc2UgMHhhMzoKLQkJY2FzZSAweGE1OgotCQljYXNlIDB4YTg6Ci0JCWNhc2UgMHhhZjoKLQkJCW52YTNfY29weV9jcmVhdGUoZGV2KTsKKwlpZiAoIW5vdXZlYXVfbm9hY2NlbCkgeworCQlzd2l0Y2ggKGRldl9wcml2LT5jYXJkX3R5cGUpIHsKKwkJY2FzZSBOVl8wNDoKKwkJCW52MDRfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl8xMDoKKwkJCW52MTBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl8yMDoKKwkJY2FzZSBOVl8zMDoKKwkJCW52MjBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl80MDoKKwkJCW52NDBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl81MDoKKwkJCW52NTBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJY2FzZSBOVl9DMDoKKwkJCW52YzBfZ3JhcGhfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCWNhc2UgTlZfQzA6Ci0JCW52YzBfY29weV9jcmVhdGUoZGV2LCAwKTsKLQkJbnZjMF9jb3B5X2NyZWF0ZShkZXYsIDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CiAKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl80MCkKLQkJbnY0MF9tcGVnX2NyZWF0ZShkZXYpOwotCWVsc2UKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCAmJgotCSAgICAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApKQotCQludjUwX21wZWdfY3JlYXRlKGRldik7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDg0OgorCQljYXNlIDB4ODY6CisJCWNhc2UgMHg5MjoKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCWNhc2UgMHhhMDoKKwkJCW52ODRfY3J5cHRfY3JlYXRlKGRldik7CisJCQlicmVhazsKKwkJfQogCi0JaWYgKCFub3V2ZWF1X25vYWNjZWwpIHsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7CisJCWNhc2UgTlZfNTA6CisJCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJCQljYXNlIDB4YTM6CisJCQljYXNlIDB4YTU6CisJCQljYXNlIDB4YTg6CisJCQljYXNlIDB4YWY6CisJCQkJbnZhM19jb3B5X2NyZWF0ZShkZXYpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgTlZfQzA6CisJCQludmMwX2NvcHlfY3JlYXRlKGRldiwgMCk7CisJCQludmMwX2NvcHlfY3JlYXRlKGRldiwgMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNDApCisJCQludjQwX21wZWdfY3JlYXRlKGRldik7CisJCWVsc2UKKwkJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTAgJiYKKwkJICAgIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4OTggfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHhhMCkpCisJCQludjUwX21wZWdfY3JlYXRlKGRldik7CisKIAkJZm9yIChlID0gMDsgZSA8IE5WT0JKX0VOR0lORV9OUjsgZSsrKSB7CiAJCQlpZiAoZGV2X3ByaXYtPmVuZ1tlXSkgewogCQkJCXJldCA9IGRldl9wcml2LT5lbmdbZV0tPmluaXQoZGV2LCBlKTsKQEAgLTg4MCw4ICs4ODEsOCBAQAogCiAjaWZkZWYgX19CSUdfRU5ESUFOCiAJLyogUHV0IHRoZSBjYXJkIGluIEJFIG1vZGUgaWYgaXQncyBub3QgKi8KLQlpZiAobnZfcmQzMihkZXYsIE5WMDNfUE1DX0JPT1RfMSkpCi0JCW52X3dyMzIoZGV2LCBOVjAzX1BNQ19CT09UXzEsIDB4MDAwMDAwMDEpOworCWlmIChudl9yZDMyKGRldiwgTlYwM19QTUNfQk9PVF8xKSAhPSAweDAxMDAwMDAxKQorCQludl93cjMyKGRldiwgTlYwM19QTUNfQk9PVF8xLCAweDAxMDAwMDAxKTsKIAogCURSTV9NRU1PUllCQVJSSUVSKCk7CiAjZW5kaWYKQEAgLTkyMiw2ICs5MjMsNyBAQAogCQlkZXZfcHJpdi0+Y2FyZF90eXBlID0gTlZfNTA7CiAJCWJyZWFrOwogCWNhc2UgMHhjMDoKKwljYXNlIDB4ZDA6CiAJCWRldl9wcml2LT5jYXJkX3R5cGUgPSBOVl9DMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdm0uYwppbmRleCAwMDU5ZTZmLi41MTlhNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV92bS5jCkBAIC01OCw2ICs1OCw3IEBACiAJCQludW0gLT0gbGVuOwogCQkJcHRlICs9IGxlbjsKIAkJCWlmICh1bmxpa2VseShlbmQgPj0gbWF4KSkgeworCQkJCXBoeXMgKz0gbGVuIDw8IChiaXRzICsgMTIpOwogCQkJCXBkZSsrOwogCQkJCXB0ZSA9IDA7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCmluZGV4IDNjNzhiYzguLmYxYTNhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfY3J0Yy5jCkBAIC0zNzYsNyArMzc2LDEwIEBACiAJICovCiAKIAkvKiBmcmFtZWJ1ZmZlciBjYW4gYmUgbGFyZ2VyIHRoYW4gY3J0YyBzY2Fub3V0IGFyZWEuICovCi0JcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX1JQQzBfSU5ERVhdID0gWExBVEUoZmItPnBpdGNoIC8gOCwgOCwgTlZfQ0lPX0NSRV9SUEMwX09GRlNFVF8xMF84KTsKKwlyZWdwLT5DUlRDW05WX0NJT19DUkVfUlBDMF9JTkRFWF0gPQorCQlYTEFURShmYi0+cGl0Y2ggLyA4LCA4LCBOVl9DSU9fQ1JFX1JQQzBfT0ZGU0VUXzEwXzgpOworCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV80Ml0gPQorCQlYTEFURShmYi0+cGl0Y2ggLyA4LCAxMSwgTlZfQ0lPX0NSRV80Ml9PRkZTRVRfMTEpOwogCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV9SUEMxX0lOREVYXSA9IG1vZGUtPmNydGNfaGRpc3BsYXkgPCAxMjgwID8KIAkJCQkJICAgIE1BU0soTlZfQ0lPX0NSRV9SUEMxX0xBUkdFKSA6IDB4MDA7CiAJcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX0xTUl9JTkRFWF0gPSBYTEFURShob3JpekJsYW5rRW5kLCA2LCBOVl9DSU9fQ1JFX0xTUl9IQkVfNikgfApAQCAtODI0LDggKzgyNywxMSBAQAogCXJlZ3AtPkNSVENbTlZfQ0lPX0NSX09GRlNFVF9JTkRFWF0gPSBkcm1fZmItPnBpdGNoID4+IDM7CiAJcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX1JQQzBfSU5ERVhdID0KIAkJWExBVEUoZHJtX2ZiLT5waXRjaCA+PiAzLCA4LCBOVl9DSU9fQ1JFX1JQQzBfT0ZGU0VUXzEwXzgpOworCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV80Ml0gPQorCQlYTEFURShkcm1fZmItPnBpdGNoIC8gOCwgMTEsIE5WX0NJT19DUkVfNDJfT0ZGU0VUXzExKTsKIAljcnRjX3dyX2Npb19zdGF0ZShjcnRjLCByZWdwLCBOVl9DSU9fQ1JFX1JQQzBfSU5ERVgpOwogCWNydGNfd3JfY2lvX3N0YXRlKGNydGMsIHJlZ3AsIE5WX0NJT19DUl9PRkZTRVRfSU5ERVgpOworCWNydGNfd3JfY2lvX3N0YXRlKGNydGMsIHJlZ3AsIE5WX0NJT19DUkVfNDIpOwogCiAJLyogVXBkYXRlIHRoZSBmcmFtZWJ1ZmZlciBsb2NhdGlvbi4gKi8KIAlyZWdwLT5mYl9zdGFydCA9IG52X2NydGMtPmZiLm9mZnNldCAmIH4zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYwppbmRleCA3NGEzZjY4Li4wOGRhNDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqZXZvID0gZGlzcGMtPnN5bmM7CiAJaW50IHJldDsKIAotCXJldCA9IFJJTkdfU1BBQ0UoZXZvLCAyNCk7CisJcmV0ID0gUklOR19TUEFDRShldm8sIGNoYW4gPyAyNSA6IDI3KTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDU4LDggKzQ1OCwxOSBAQAogCS8qIHF1ZXVlIHRoZSBmbGlwIG9uIHRoZSBjcnRjJ3MgImRpc3BsYXkgc3luYyIgY2hhbm5lbCAqLwogCUJFR0lOX1JJTkcoZXZvLCAwLCAweDAxMDAsIDEpOwogCU9VVF9SSU5HICAoZXZvLCAweGZmZmUwMDAwKTsKLQlCRUdJTl9SSU5HKGV2bywgMCwgMHgwMDg0LCA1KTsKLQlPVVRfUklORyAgKGV2bywgY2hhbiA/IDB4MDAwMDAxMDAgOiAweDAwMDAwMDEwKTsKKwlpZiAoY2hhbikgeworCQlCRUdJTl9SSU5HKGV2bywgMCwgMHgwMDg0LCAxKTsKKwkJT1VUX1JJTkcgIChldm8sIDB4MDAwMDAxMDApOworCX0gZWxzZSB7CisJCUJFR0lOX1JJTkcoZXZvLCAwLCAweDAwODQsIDEpOworCQlPVVRfUklORyAgKGV2bywgMHgwMDAwMDAxMCk7CisJCS8qIGFsbG93cyBnYW1tYSBzb21laG93LCBQRElTUCB3aWxsIGJpdGNoIGF0IHlvdSBpZgorCQkgKiB5b3UgZG9uJ3Qgd2FpdCBmb3IgdmJsYW5rIGJlZm9yZSBjaGFuZ2luZyB0aGlzLi4KKwkJICovCisJCUJFR0lOX1JJTkcoZXZvLCAwLCAweDAwZTAsIDEpOworCQlPVVRfUklORyAgKGV2bywgMHg0MDAwMDAwMCk7CisJfQorCUJFR0lOX1JJTkcoZXZvLCAwLCAweDAwODgsIDQpOwogCU9VVF9SSU5HICAoZXZvLCBkaXNwYy0+c2VtLm9mZnNldCk7CiAJT1VUX1JJTkcgIChldm8sIDB4ZjAwZDAwMDAgfCBkaXNwYy0+c2VtLnZhbHVlKTsKIAlPVVRfUklORyAgKGV2bywgMHg3NGIxZTAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udnJlZy5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZyZWcuaAppbmRleCBmZTBmMjUzLi5iYmZiMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udnJlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252cmVnLmgKQEAgLTI3Nyw2ICsyNzcsOCBAQAogIwkJZGVmaW5lIE5WX0NJT19DUkVfRUJSX1ZERV8xMQkJMjoyCiAjCQlkZWZpbmUgTlZfQ0lPX0NSRV9FQlJfVlJTXzExCQk0OjQKICMJCWRlZmluZSBOVl9DSU9fQ1JFX0VCUl9WQlNfMTEJCTY6NgorIwlkZWZpbmUgTlZfQ0lPX0NSRV80MgkJCTB4NDIKKyMJCWRlZmluZSBOVl9DSU9fQ1JFXzQyX09GRlNFVF8xMQkJNjo2CiAjCWRlZmluZSBOVl9DSU9fQ1JFXzQzCQkJMHg0MwogIwlkZWZpbmUgTlZfQ0lPX0NSRV80NAkJCTB4NDQJLyogaGVhZCBjb250cm9sICovCiAjCWRlZmluZSBOVl9DSU9fQ1JFX0NTQgkJCTB4NDUJLyogY29sb3VyIHNhdHVyYXRpb24gYm9vc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZwppbmRleCA5NzQ2ZmVlLi5lYTkyYmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnCkBAIC0yOCwxMSArMjgsNCBAQAogCSAgVGhlIGtlcm5lbCB3aWxsIGFsc28gcGVyZm9ybSBzZWN1cml0eSBjaGVjayBvbiBjb21tYW5kIHN0cmVhbQogCSAgcHJvdmlkZWQgYnkgdGhlIHVzZXIsIHdlIHdhbnQgdG8gY2F0Y2ggYW5kIGZvcmJpZCBhbnkgaWxsZWdhbCB1c2UKIAkgIG9mIHRoZSBHUFUgc3VjaCBhcyBETUEgaW50byByYW5kb20gc3lzdGVtIG1lbW9yeSBvciBpbnRvIG1lbW9yeQotCSAgbm90IG93bmVkIGJ5IHRoZSBwcm9jZXNzIHN1cHBseWluZyB0aGUgY29tbWFuZCBzdHJlYW0uIFRoaXMgcGFydAotCSAgb2YgdGhlIGNvZGUgaXMgc3RpbGwgaW5jb21wbGV0ZSBhbmQgdGhpcyB3aHkgd2UgcHJvcG9zZSB0aGF0IHBhdGNoCi0JICBhcyBhIHN0YWdpbmcgZHJpdmVyIGFkZGl0aW9uLCBmdXR1cmUgc2VjdXJpdHkgbWlnaHQgZm9yYmlkIGN1cnJlbnQKLQkgIGV4cGVyaW1lbnRhbCB1c2Vyc3BhY2UgdG8gcnVuLgotCi0JICBUaGlzIGNvZGUgc3VwcG9ydCB0aGUgZm9sbG93aW5nIGhhcmR3YXJlIDogUjFYWCxSMlhYLFIzWFgsUjRYWCxSNVhYCi0JICAocmFkZW9uIHVwIHRvIFgxOTUwKS4gV29ya3MgaXMgdW5kZXJ3YXkgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBSNlhYLAotCSAgUjdYWCBhbmQgbmV3ZXIgaGFyZHdhcmUgKHJhZGVvbiBmcm9tIEhEMlhYWCB0byBIRDRYWFgpLgorCSAgbm90IG93bmVkIGJ5IHRoZSBwcm9jZXNzIHN1cHBseWluZyB0aGUgY29tbWFuZCBzdHJlYW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKaW5kZXggNDk2MTFlMi4uMWI1MGFkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaApAQCAtMTIwMCw2ICsxMjAwLDcgQEAKICNkZWZpbmUgRVhURVJOQUxfRU5DT0RFUl9BQ1RJT05fVjNfRU5DT0RFUl9CTEFOS0lOR19PRkYgICAweDEwCiAjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQUNUSU9OX1YzX0VOQ09ERVJfQkxBTktJTkcgICAgICAgMHgxMQogI2RlZmluZSBFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19EQUNMT0FEX0RFVEVDVElPTiAgICAgIDB4MTIKKyNkZWZpbmUgRVhURVJOQUxfRU5DT0RFUl9BQ1RJT05fVjNfRERDX1NFVFVQICAgICAgICAgICAgICAweDE0CiAKIC8vIHVjQ29uZmlnCiAjZGVmaW5lIEVYVEVSTkFMX0VOQ09ERVJfQ09ORklHX1YzX0RQTElOS1JBVEVfTUFTSwkJCQkweDAzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IGVjODQ4NzguLjk1NDE5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC02NzEsNiArNjcxLDEzIEBACiAJCQkJCQkJCURJU1BQTExfQ09ORklHX0RVQUxfTElOSzsKIAkJCQkJfQogCQkJCX0KKwkJCQlpZiAocmFkZW9uX2VuY29kZXJfaXNfZHBfYnJpZGdlKGVuY29kZXIpKSB7CisJCQkJCXN0cnVjdCBkcm1fZW5jb2RlciAqZXh0X2VuY29kZXIgPSByYWRlb25fYXRvbV9nZXRfZXh0ZXJuYWxfZW5jb2RlcihlbmNvZGVyKTsKKwkJCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpleHRfcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihleHRfZW5jb2Rlcik7CisJCQkJCWFyZ3MudjMuc0lucHV0LnVjRXh0VHJhbnNtaXR0ZXJJRCA9IGV4dF9yYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZDsKKwkJCQl9IGVsc2UKKwkJCQkJYXJncy52My5zSW5wdXQudWNFeHRUcmFuc21pdHRlcklEID0gMDsKKwogCQkJCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LAogCQkJCQkJICAgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIAkJCQlhZGp1c3RlZF9jbG9jayA9IGxlMzJfdG9fY3B1KGFyZ3MudjMuc091dHB1dC51bERpc3BQbGxGcmVxKSAqIDEwOwpAQCAtMTA0NSw3ICsxMDUyLDcgQEAKIAl1aW50NjRfdCBmYl9sb2NhdGlvbjsKIAl1aW50MzJfdCBmYl9mb3JtYXQsIGZiX3BpdGNoX3BpeGVscywgdGlsaW5nX2ZsYWdzOwogCXUzMiBmYl9zd2FwID0gRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoRVZFUkdSRUVOX0dSUEhfRU5ESUFOX05PTkUpOwotCXUzMiB0bXA7CisJdTMyIHRtcCwgdmlld3BvcnRfdywgdmlld3BvcnRfaDsKIAlpbnQgcjsKIAogCS8qIG5vIGZiIGJvdW5kICovCkBAIC0xMTcxLDggKzExNzgsMTAgQEAKIAl5ICY9IH4xOwogCVdSRUczMihFVkVSR1JFRU5fVklFV1BPUlRfU1RBUlQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh4IDw8IDE2KSB8IHkpOworCXZpZXdwb3J0X3cgPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCXZpZXdwb3J0X2ggPSAoY3J0Yy0+bW9kZS52ZGlzcGxheSArIDEpICYgfjE7CiAJV1JFRzMyKEVWRVJHUkVFTl9WSUVXUE9SVF9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCSAgICAgICAoY3J0Yy0+bW9kZS5oZGlzcGxheSA8PCAxNikgfCBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKKwkgICAgICAgKHZpZXdwb3J0X3cgPDwgMTYpIHwgdmlld3BvcnRfaCk7CiAKIAkvKiBwYWdlZmxpcCBzZXR1cCAqLwogCS8qIG1ha2Ugc3VyZSBmbGlwIGlzIGF0IHZiIHJhdGhlciB0aGFuIGhiICovCkBAIC0xMjEzLDcgKzEyMjIsNyBAQAogCXVpbnQ2NF90IGZiX2xvY2F0aW9uOwogCXVpbnQzMl90IGZiX2Zvcm1hdCwgZmJfcGl0Y2hfcGl4ZWxzLCB0aWxpbmdfZmxhZ3M7CiAJdTMyIGZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl9OT05FOwotCXUzMiB0bXA7CisJdTMyIHRtcCwgdmlld3BvcnRfdywgdmlld3BvcnRfaDsKIAlpbnQgcjsKIAogCS8qIG5vIGZiIGJvdW5kICovCkBAIC0xMzM4LDggKzEzNDcsMTAgQEAKIAl5ICY9IH4xOwogCVdSRUczMihBVklWT19EMU1PREVfVklFV1BPUlRfU1RBUlQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh4IDw8IDE2KSB8IHkpOworCXZpZXdwb3J0X3cgPSBjcnRjLT5tb2RlLmhkaXNwbGF5OworCXZpZXdwb3J0X2ggPSAoY3J0Yy0+bW9kZS52ZGlzcGxheSArIDEpICYgfjE7CiAJV1JFRzMyKEFWSVZPX0QxTU9ERV9WSUVXUE9SVF9TSVpFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCSAgICAgICAoY3J0Yy0+bW9kZS5oZGlzcGxheSA8PCAxNikgfCBjcnRjLT5tb2RlLnZkaXNwbGF5KTsKKwkgICAgICAgKHZpZXdwb3J0X3cgPDwgMTYpIHwgdmlld3BvcnRfaCk7CiAKIAkvKiBwYWdlZmxpcCBzZXR1cCAqLwogCS8qIG1ha2Ugc3VyZSBmbGlwIGlzIGF0IHZiIHJhdGhlciB0aGFuIGhiICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5jCmluZGV4IGUxNDhhYjAuLjdiNGVlYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5jCkBAIC0zOSwxNyArMzksMzM1IEBACiAKIGNvbnN0IHUzMiBjYXltYW5fZGVmYXVsdF9zdGF0ZVtdID0KIHsKLQkvKiBYWFggZmlsbCBpbiBhZGRpdGlvbmFsIGJsaXQgc3RhdGUgKi8KKwkweGMwMDY2OTAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDA2MCwgLyogREJfUkVOREVSX0NPTlRST0wgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9DT1VOVF9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogREJfREVQVEhfVklFVyAqLworCTB4MDAwMDAwMmEsIC8qIERCX1JFTkRFUl9PVkVSUklERSAqLworCTB4MDAwMDAwMDAsIC8qIERCX1JFTkRFUl9PVkVSUklERTIgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9IVElMRV9EQVRBX0JBU0UgKi8KIAogCTB4YzAwMjY5MDAsCi0JMHgwMDAwMDMxNiwKLQkweDAwMDAwMDBlLCAvKiBWR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwgKi8KLQkweDAwMDAwMDEwLCAvKiAgKi8KKwkweDAwMDAwMDBhLAorCTB4MDAwMDAwMDAsIC8qIERCX1NURU5DSUxfQ0xFQVIgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9ERVBUSF9DTEVBUiAqLworCisJMHhjMDAzNjkwMCwKKwkweDAwMDAwMDBmLAorCTB4MDAwMDAwMDAsIC8qIERCX0RFUFRIX0lORk8gKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9aX0lORk8gKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9TVEVOQ0lMX0lORk8gKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDA4MCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19XSU5ET1dfT0ZGU0VUICovCisKKwkweGMwMGQ2OTAwLAorCTB4MDAwMDAwODMsCisJMHgwMDAwZmZmZiwgLyogUEFfU0NfQ0xJUFJFQ1RfUlVMRSAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0NMSVBSRUNUXzBfVEwgKi8KKwkweDIwMDAyMDAwLCAvKiBQQV9TQ19DTElQUkVDVF8wX0JSICovCisJMHgwMDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4MDAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDAwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHhhYWFhYWFhYSwgLyogUEFfU0NfRURHRVJVTEUgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9IQVJEV0FSRV9TQ1JFRU5fT0ZGU0VUICovCisJMHgwMDAwMDAwZiwgLyogQ0JfVEFSR0VUX01BU0sgKi8KKwkweDAwMDAwMDBmLCAvKiBDQl9TSEFERVJfTUFTSyAqLworCisJMHhjMDIyNjkwMCwKKwkweDAwMDAwMDk0LAorCTB4ODAwMDAwMDAsIC8qIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMF9UTCAqLworCTB4MjAwMDIwMDAsIC8qIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMF9CUiAqLworCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4MDAwMDAwMDAsIC8qIFBBX1NDX1ZQT1JUX1pNSU5fMCAqLworCTB4M2Y4MDAwMDAsIC8qIFBBX1NDX1ZQT1JUX1pNQVhfMCAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMGQ0LAorCTB4MDAwMDAwMDAsIC8qIFNYX01JU0MgKi8KIAogCTB4YzAwMjY5MDAsCiAJMHgwMDAwMDBkOSwKIAkweDAwMDAwMDAwLCAvKiBDUF9SSU5HSUQgKi8KIAkweDAwMDAwMDAwLCAvKiBDUF9WTUlEICovCisKKwkweGMwMDk2OTAwLAorCTB4MDAwMDAxMDAsCisJMHgwMGZmZmZmZiwgLyogVkdUX01BWF9WVFhfSU5EWCAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9NSU5fVlRYX0lORFggKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSU5EWF9PRkZTRVQgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfTVVMVElfUFJJTV9JQl9SRVNFVF9JTkRYICovCisJMHgwMDAwMDAwMCwgLyogU1hfQUxQSEFfVEVTVF9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfUkVEICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfR1JFRU4gKi8KKwkweDAwMDAwMDAwLCAvKiBDQl9CTEVORF9CTFVFICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfQUxQSEEgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDE4NywKKwkweDAwMDAwMTAwLCAvKiBTUElfVlNfT1VUX0lEXzAgKi8KKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDE5MSwKKwkweDAwMDAwMTAwLCAvKiBTUElfUFNfSU5QVVRfQ05UTF8wICovCisJMHgwMDAwMDEwMSwgLyogU1BJX1BTX0lOUFVUX0NOVExfMSAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWIxLAorCTB4MDAwMDAwMDAsIC8qIFNQSV9WU19PVVRfQ09ORklHICovCisKKwkweGMwMTA2OTAwLAorCTB4MDAwMDAxYjMsCisJMHgyMDAwMDAwMSwgLyogU1BJX1BTX0lOX0NPTlRST0xfMCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9QU19JTl9DT05UUk9MXzEgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfSU5URVJQX0NPTlRST0xfMCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9JTlBVVF9aICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0ZPR19DTlRMICovCisJMHgwMDEwMDAwMCwgLyogU1BJX0JBUllDX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfUFNfSU5fQ09OVFJPTF8yICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0NPTVBVVEVfSU5QVVRfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX05VTV9USFJFQURfWCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX05VTV9USFJFQURfWSAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX05VTV9USFJFQURfWiAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9HUFJfTUdNVCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9MRFNfTUdNVCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9TVEFDS19NR01UICovCisJMHgwMDAwMDAwMCwgLyogU1BJX1dBVkVfTUdNVF8xICovCisJMHgwMDAwMDAwMCwgLyogU1BJX1dBVkVfTUdNVF8yICovCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxZTAsCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkQwX0NPTlRST0wgKi8KKworCTB4YzAwZTY5MDAsCisJMHgwMDAwMDIwMCwKKwkweDAwMDAwMDAwLCAvKiBEQl9ERVBUSF9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogREJfRVFBQSAqLworCTB4MDBjYzAwMTAsIC8qIENCX0NPTE9SX0NPTlRST0wgKi8KKwkweDAwMDAwMjEwLCAvKiBEQl9TSEFERVJfQ09OVFJPTCAqLworCTB4MDAwMTAwMDAsIC8qIFBBX0NMX0NMSVBfQ05UTCAqLworCTB4MDAwMDAwMDQsIC8qIFBBX1NVX1NDX01PREVfQ05UTCAqLworCTB4MDAwMDAxMDAsIC8qIFBBX0NMX1ZURV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfQ0xfVlNfT1VUX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9DTF9OQU5JTkZfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX0xJTkVfU1RJUFBMRV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfTElORV9TVElQUExFX1NDQUxFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUFJJTV9GSUxURVJfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qICAqLworCTB4MDAwMDAwMDAsIC8qICAqLworCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMjI5LAorCTB4MDAwMDAwMDAsIC8qIFNRX1BHTV9TVEFSVF9GUyAqLworCTB4MDAwMDAwMDAsCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyM2IsCisJMHgwMDAwMDAwMCwgLyogU1FfTERTX0FMTE9DX1BTICovCisKKwkweGMwMDY2OTAwLAorCTB4MDAwMDAyNDAsCisJMHgwMDAwMDAwMCwgLyogU1FfRVNHU19SSU5HX0lURU1TSVpFICovCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCisJMHhjMDA0NjkwMCwKKwkweDAwMDAwMjQ3LAorCTB4MDAwMDAwMDAsIC8qIFNRX0dTX1ZFUlRfSVRFTVNJWkUgKi8KKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKworCTB4YzAxMTY5MDAsCisJMHgwMDAwMDI4MCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0lOVF9TSVpFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9JTlRfTUlOTUFYICovCisJMHgwMDAwMDAwOCwgLyogUEFfU1VfTElORV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTElORV9TVElQUExFICovCisJMHgwMDAwMDAwMCwgLyogVkdUX09VVFBVVF9QQVRIX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfSE9TX0NOVEwgKi8KKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIC8qIFZHVF9HU19NT0RFICovCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAyOTIsCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTU9ERV9DTlRMXzAgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19NT0RFX0NOVExfMSAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmExLAorCTB4MDAwMDAwMDAsIC8qIFZHVF9QUklNSVRJVkVJRF9FTiAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmE1LAorCTB4MDAwMDAwMDAsIC8qIFZHVF9NVUxUSV9QUklNX0lCX1JFU0VUX0VOICovCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAyYTgsCisJMHgwMDAwMDAwMCwgLyogVkdUX0lOU1RBTkNFX1NURVBfUkFURV8wICovCisJMHgwMDAwMDAwMCwKKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDJhZCwKKwkweDAwMDAwMDAwLCAvKiBWR1RfUkVVU0VfT0ZGICovCisJMHgwMDAwMDAwMCwKKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJkNSwKKwkweDAwMDAwMDAwLCAvKiBWR1RfU0hBREVSX1NUQUdFU19FTiAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMmRjLAorCTB4MDAwMGFhMDAsIC8qIERCX0FMUEhBX1RPX01BU0sgKi8KKworCTB4YzAwNjY5MDAsCisJMHgwMDAwMDJkZSwKKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9QT0xZX09GRlNFVF9EQl9GTVRfQ05UTCAqLworCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDJlNSwKKwkweDAwMDAwMDAwLCAvKiBWR1RfU1RSTU9VVF9DT05GSUcgKi8KKwkweDAwMDAwMDAwLAorCisJMHhjMDFiNjkwMCwKKwkweDAwMDAwMmY1LAorCTB4NzY1NDMyMTAsIC8qIFBBX1NDX0NFTlRST0lEX1BSSU9SSVRZXzAgKi8KKwkweGZlZGNiYTk4LCAvKiBQQV9TQ19DRU5UUk9JRF9QUklPUklUWV8xICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTElORV9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfQUFfQ09ORklHICovCisJMHgwMDAwMDAwNSwgLyogUEFfU1VfVlRYX0NOVEwgKi8KKwkweDNmODAwMDAwLCAvKiBQQV9DTF9HQl9WRVJUX0NMSVBfQURKICovCisJMHgzZjgwMDAwMCwgLyogUEFfQ0xfR0JfVkVSVF9ESVNDX0FESiAqLworCTB4M2Y4MDAwMDAsIC8qIFBBX0NMX0dCX0hPUlpfQ0xJUF9BREogKi8KKwkweDNmODAwMDAwLCAvKiBQQV9DTF9HQl9IT1JaX0RJU0NfQURKICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfQUFfU0FNUExFX0xPQ1NfUElYRUxfWDBZMF8wICovCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHhmZmZmZmZmZiwgLyogUEFfU0NfQUFfTUFTS19YMFkwX1gxWTAgKi8KKwkweGZmZmZmZmZmLAorCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMzE2LAorCTB4MDAwMDAwMGUsIC8qIFZHVF9WRVJURVhfUkVVU0VfQkxPQ0tfQ05UTCAqLworCTB4MDAwMDAwMTAsIC8qICAqLwogfTsKIAorY29uc3QgdTMyIGNheW1hbl92c1tdID0KK3sKKwkweDAwMDAwMDA0LAorCTB4ODA0MDA0MDAsCisJMHgwMDAwYTAzYywKKwkweDk1MDAwNjg4LAorCTB4MDAwMDQwMDAsCisJMHgxNTAwMDY4OCwKKwkweDAwMDAwMDAwLAorCTB4ODgwMDAwMDAsCisJMHgwNDAwMDAwMCwKKwkweDY3OTYxMDAxLAorI2lmZGVmIF9fQklHX0VORElBTgorCTB4MDAwMjAwMDAsCisjZWxzZQorCTB4MDAwMDAwMDAsCisjZW5kaWYKKwkweDAwMDAwMDAwLAorCTB4MDQwMDAwMDAsCisJMHg2Nzk2MTAwMCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMDIwMDA4LAorI2Vsc2UKKwkweDAwMDAwMDA4LAorI2VuZGlmCisJMHgwMDAwMDAwMCwKK307CisKK2NvbnN0IHUzMiBjYXltYW5fcHNbXSA9Cit7CisJMHgwMDAwMDAwNCwKKwkweGEwMGMwMDAwLAorCTB4MDAwMDAwMDgsCisJMHg4MDQwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4OTUwMDA2ODgsCisJMHgwMDAwMDAwMCwKKwkweDg4MDAwMDAwLAorCTB4MDAzODA0MDAsCisJMHgwMDE0NmIxMCwKKwkweDAwMzgwMDAwLAorCTB4MjAxNDZiMTAsCisJMHgwMDM4MDQwMCwKKwkweDQwMTQ2YjAwLAorCTB4ODAzODAwMDAsCisJMHg2MDE0NmIwMCwKKwkweDAwMDAwMDEwLAorCTB4MDAwZDEwMDAsCisJMHhiMDgwMDAwMCwKKwkweDAwMDAwMDAwLAorfTsKKworY29uc3QgdTMyIGNheW1hbl9wc19zaXplID0gQVJSQVlfU0laRShjYXltYW5fcHMpOworY29uc3QgdTMyIGNheW1hbl92c19zaXplID0gQVJSQVlfU0laRShjYXltYW5fdnMpOwogY29uc3QgdTMyIGNheW1hbl9kZWZhdWx0X3NpemUgPSBBUlJBWV9TSVpFKGNheW1hbl9kZWZhdWx0X3N0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jYXltYW5fYmxpdF9zaGFkZXJzLmgKaW5kZXggMzNiNzVlNWQuLmY1ZDBlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oCkBAIC0yNSw4ICsyNSwxMSBAQAogI2lmbmRlZiBDQVlNQU5fQkxJVF9TSEFERVJTX0gKICNkZWZpbmUgQ0FZTUFOX0JMSVRfU0hBREVSU19ICiAKK2V4dGVybiBjb25zdCB1MzIgY2F5bWFuX3BzW107CitleHRlcm4gY29uc3QgdTMyIGNheW1hbl92c1tdOwogZXh0ZXJuIGNvbnN0IHUzMiBjYXltYW5fZGVmYXVsdF9zdGF0ZVtdOwogCitleHRlcm4gY29uc3QgdTMyIGNheW1hbl9wc19zaXplLCBjYXltYW5fdnNfc2l6ZTsKIGV4dGVybiBjb25zdCB1MzIgY2F5bWFuX2RlZmF1bHRfc2l6ZTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYwppbmRleCA3YzM3NjM4Li40NDVhZjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKQEAgLTg4LDIxICs4OCw0MCBAQAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwogaW50IGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1MzIgdGVtcCA9IChSUkVHMzIoQ0dfTVVMVF9USEVSTUFMX1NUQVRVUykgJiBBU0lDX1RfTUFTSykgPj4KLQkJQVNJQ19UX1NISUZUOwotCXUzMiBhY3R1YWxfdGVtcCA9IDA7CisJdTMyIHRlbXAsIHRvZmZzZXQ7CisJaW50IGFjdHVhbF90ZW1wID0gMDsKIAotCWlmICh0ZW1wICYgMHg0MDApCi0JCWFjdHVhbF90ZW1wID0gLTI1NjsKLQllbHNlIGlmICh0ZW1wICYgMHgyMDApCi0JCWFjdHVhbF90ZW1wID0gMjU1OwotCWVsc2UgaWYgKHRlbXAgJiAweDEwMCkgewotCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweDFmZjsKLQkJYWN0dWFsX3RlbXAgfD0gfjB4MWZmOwotCX0gZWxzZQotCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweGZmOworCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9KVU5JUEVSKSB7CisJCXRvZmZzZXQgPSAoUlJFRzMyKENHX1RIRVJNQUxfQ1RSTCkgJiBUT0ZGU0VUX01BU0spID4+CisJCQlUT0ZGU0VUX1NISUZUOworCQl0ZW1wID0gKFJSRUczMihDR19UUzBfU1RBVFVTKSAmIFRTMF9BRENfRE9VVF9NQVNLKSA+PgorCQkJVFMwX0FEQ19ET1VUX1NISUZUOwogCi0JcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKKwkJaWYgKHRvZmZzZXQgJiAweDEwMCkKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAvIDIgLSAoMHgyMDAgLSB0b2Zmc2V0KTsKKwkJZWxzZQorCQkJYWN0dWFsX3RlbXAgPSB0ZW1wIC8gMiArIHRvZmZzZXQ7CisKKwkJYWN0dWFsX3RlbXAgPSBhY3R1YWxfdGVtcCAqIDEwMDA7CisKKwl9IGVsc2UgeworCQl0ZW1wID0gKFJSRUczMihDR19NVUxUX1RIRVJNQUxfU1RBVFVTKSAmIEFTSUNfVF9NQVNLKSA+PgorCQkJQVNJQ19UX1NISUZUOworCisJCWlmICh0ZW1wICYgMHg0MDApCisJCQlhY3R1YWxfdGVtcCA9IC0yNTY7CisJCWVsc2UgaWYgKHRlbXAgJiAweDIwMCkKKwkJCWFjdHVhbF90ZW1wID0gMjU1OworCQllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4MWZmOworCQkJYWN0dWFsX3RlbXAgfD0gfjB4MWZmOworCQl9IGVsc2UKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAmIDB4ZmY7CisKKwkJYWN0dWFsX3RlbXAgPSAoYWN0dWFsX3RlbXAgKiAxMDAwKSAvIDI7CisJfQorCisJcmV0dXJuIGFjdHVhbF90ZW1wOwogfQogCiBpbnQgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTEyMSwxMSArMTQwLDE3IEBACiAJc3RydWN0IHJhZGVvbl92b2x0YWdlICp2b2x0YWdlID0gJnBzLT5jbG9ja19pbmZvW3JlcV9jbV9pZHhdLnZvbHRhZ2U7CiAKIAlpZiAodm9sdGFnZS0+dHlwZSA9PSBWT0xUQUdFX1NXKSB7CisJCS8qIDB4ZmYwMSBpcyBhIGZsYWcgcmF0aGVyIHRoZW4gYW4gYWN0dWFsIHZvbHRhZ2UgKi8KKwkJaWYgKHZvbHRhZ2UtPnZvbHRhZ2UgPT0gMHhmZjAxKQorCQkJcmV0dXJuOwogCQlpZiAodm9sdGFnZS0+dm9sdGFnZSAmJiAodm9sdGFnZS0+dm9sdGFnZSAhPSByZGV2LT5wbS5jdXJyZW50X3ZkZGMpKSB7CiAJCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCB2b2x0YWdlLT52b2x0YWdlLCBTRVRfVk9MVEFHRV9UWVBFX0FTSUNfVkREQyk7CiAJCQlyZGV2LT5wbS5jdXJyZW50X3ZkZGMgPSB2b2x0YWdlLT52b2x0YWdlOwogCQkJRFJNX0RFQlVHKCJTZXR0aW5nOiB2ZGRjOiAlZFxuIiwgdm9sdGFnZS0+dm9sdGFnZSk7CiAJCX0KKwkJLyogMHhmZjAxIGlzIGEgZmxhZyByYXRoZXIgdGhlbiBhbiBhY3R1YWwgdm9sdGFnZSAqLworCQlpZiAodm9sdGFnZS0+dmRkY2kgPT0gMHhmZjAxKQorCQkJcmV0dXJuOwogCQlpZiAodm9sdGFnZS0+dmRkY2kgJiYgKHZvbHRhZ2UtPnZkZGNpICE9IHJkZXYtPnBtLmN1cnJlbnRfdmRkY2kpKSB7CiAJCQlyYWRlb25fYXRvbV9zZXRfdm9sdGFnZShyZGV2LCB2b2x0YWdlLT52ZGRjaSwgU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZERENJKTsKIAkJCXJkZXYtPnBtLmN1cnJlbnRfdmRkY2kgPSB2b2x0YWdlLT52ZGRjaTsKQEAgLTE0MTUsNiArMTQ0MCw4IEBACiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9SRURXT09EOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfVFVSS1M6CiAJY2FzZSBDSElQX0NBSUNPUzoKIAkJZm9yY2Vfbm9fc3dpenpsZSA9IGZhbHNlOwpAQCAtMTU0NCw2ICsxNTcxLDggQEAKIAljYXNlIENISVBfUkVEV09PRDoKIAljYXNlIENISVBfQ0VEQVI6CiAJY2FzZSBDSElQX1BBTE06CisJY2FzZSBDSElQX1NVTU86CisJY2FzZSBDSElQX1NVTU8yOgogCWNhc2UgQ0hJUF9UVVJLUzoKIAljYXNlIENISVBfQ0FJQ09TOgogCWRlZmF1bHQ6CkBAIC0xNjg5LDYgKzE3MTgsNTQgQEAKIAkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOwogCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSA9IDB4MTMwOwogCQlicmVhazsKKwljYXNlIENISVBfU1VNTzoKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzID0gMTsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfcGlwZXMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aWxlX3BpcGVzID0gMjsKKwkJaWYgKHJkZXYtPnBkZXYtPmRldmljZSA9PSAweDk2NDgpCisJCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zaW1kcyA9IDM7CisJCWVsc2UgaWYgKChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NjQ3KSB8fAorCQkJIChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NjRhKSkKKwkJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3NpbWRzID0gNDsKKwkJZWxzZQorCQkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfc2ltZHMgPSA1OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9iYWNrZW5kcyA9IDIgKiByZGV2LT5jb25maWcuZXZlcmdyZWVuLm51bV9zZXM7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2dwcnMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RocmVhZHMgPSAyNDg7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2dzX3RocmVhZHMgPSAzMjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9udW1fb2Zfc2V0cyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zaXplID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfcG9zX3NpemUgPSA2NDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTkyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9od19jb250ZXh0cyA9IDg7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3FfbnVtX2NmX2luc3RzID0gMjsKKworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX3ByaW1fZmlmb19zaXplID0gMHg0MDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSA9IDB4MTMwOworCQlicmVhazsKKwljYXNlIENISVBfU1VNTzI6CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGlsZV9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3NpbWRzID0gMjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfYmFja2VuZHMgPSAxICogcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9ncHJzID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aHJlYWRzID0gMjQ4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9nc190aHJlYWRzID0gMzI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3N0YWNrX2VudHJpZXMgPSA1MTI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbnVtX29mX3NldHMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gNjQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDE5MjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNxX251bV9jZl9pbnN0cyA9IDI7CisKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4NDA7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUgPSAweDEzMDsKKwkJYnJlYWs7CiAJY2FzZSBDSElQX0JBUlRTOgogCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm51bV9zZXMgPSAyOwogCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9waXBlcyA9IDQ7CkBAIC0yMDM5LDYgKzIxMTYsOCBAQAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfQ0FJQ09TOgogCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KIAkJc3FfY29uZmlnICY9IH5WQ19FTkFCTEU7CkBAIC0yMDYwLDYgKzIxMzksOCBAQAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAkJcHNfdGhyZWFkX2NvdW50ID0gOTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yMDk5LDYgKzIxODAsOCBAQAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfQ0FJQ09TOgogCQl2Z3RfY2FjaGVfaW52YWxpZGF0aW9uID0gQ0FDSEVfSU5WQUxJREFUSU9OKFRDX09OTFkpOwogCQlicmVhazsKQEAgLTI2MTgsMjggKzI3MDEsMjUgQEAKIAogaW50IGV2ZXJncmVlbl9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1MzIgd3B0ciA9IGV2ZXJncmVlbl9nZXRfaWhfd3B0cihyZGV2KTsKLQl1MzIgcnB0ciA9IHJkZXYtPmloLnJwdHI7CisJdTMyIHdwdHI7CisJdTMyIHJwdHI7CiAJdTMyIHNyY19pZCwgc3JjX2RhdGE7CiAJdTMyIHJpbmdfaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIHF1ZXVlX2hvdHBsdWcgPSBmYWxzZTsKIAotCURSTV9ERUJVRygicjYwMF9pcnFfcHJvY2VzcyBzdGFydDogcnB0ciAlZCwgd3B0ciAlZFxuIiwgcnB0ciwgd3B0cik7Ci0JaWYgKCFyZGV2LT5paC5lbmFibGVkKQorCWlmICghcmRldi0+aWguZW5hYmxlZCB8fCByZGV2LT5zaHV0ZG93bikKIAkJcmV0dXJuIElSUV9OT05FOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJkZXYtPmloLmxvY2ssIGZsYWdzKTsKKwl3cHRyID0gZXZlcmdyZWVuX2dldF9paF93cHRyKHJkZXYpOworCXJwdHIgPSByZGV2LT5paC5ycHRyOworCURSTV9ERUJVRygicjYwMF9pcnFfcHJvY2VzcyBzdGFydDogcnB0ciAlZCwgd3B0ciAlZFxuIiwgcnB0ciwgd3B0cik7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRldi0+aWgubG9jaywgZmxhZ3MpOwogCWlmIChycHRyID09IHdwdHIpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+aWgubG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQotCWlmIChyZGV2LT5zaHV0ZG93bikgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZGV2LT5paC5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBJUlFfTk9ORTsKLQl9Ci0KIHJlc3RhcnRfaWg6CiAJLyogZGlzcGxheSBpbnRlcnJ1cHRzICovCiAJZXZlcmdyZWVuX2lycV9hY2socmRldik7CkBAIC0yODY4LDcgKzI5NDgsNyBAQAogCQkJcmFkZW9uX2ZlbmNlX3Byb2Nlc3MocmRldik7CiAJCQlicmVhazsKIAkJY2FzZSAyMzM6IC8qIEdVSSBJRExFICovCi0JCQlEUk1fREVCVUcoIklIOiBDUCBFT1BcbiIpOworCQkJRFJNX0RFQlVHKCJJSDogR1VJIGlkbGVcbiIpOwogCQkJcmRldi0+cG0uZ3VpX2lkbGUgPSB0cnVlOwogCQkJd2FrZV91cCgmcmRldi0+aXJxLmlkbGVfcXVldWUpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYwppbmRleCBiYTA2YTY5Li41N2YzYmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgImV2ZXJncmVlbmQuaCIKICNpbmNsdWRlICJldmVyZ3JlZW5fYmxpdF9zaGFkZXJzLmgiCisjaW5jbHVkZSAiY2F5bWFuX2JsaXRfc2hhZGVycy5oIgogCiAjZGVmaW5lIERJX1BUX1JFQ1RMSVNUICAgICAgICAweDExCiAjZGVmaW5lIERJX0lOREVYX1NJWkVfMTZfQklUICAweDAKQEAgLTE1Miw2ICsxNTMsOCBAQAogCiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9TVU1PKSB8fAorCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfU1VNTzIpIHx8CiAJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQUlDT1MpKQogCQljcF9zZXRfc3VyZmFjZV9zeW5jKHJkZXYsCiAJCQkJICAgIFBBQ0tFVDNfVENfQUNUSU9OX0VOQSwgNDgsIGdwdV9hZGRyKTsKQEAgLTE5OSw2ICsyMDIsMTYgQEAKIHNldF9zY2lzc29ycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHgxLCBpbnQgeTEsCiAJICAgICBpbnQgeDIsIGludCB5MikKIHsKKwkvKiB3b3JrYXJvdW5kIHNvbWUgaHcgYnVncyAqLworCWlmICh4MiA9PSAwKQorCQl4MSA9IDE7CisJaWYgKHkyID09IDApCisJCXkxID0gMTsKKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfQ0FZTUFOKSB7CisJCWlmICgoeDIgPT0gMSkgJiYgKHkyID09IDEpKQorCQkJeDIgPSAyOworCX0KKwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDIpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoUEFfU0NfU0NSRUVOX1NDSVNTT1JfVEwgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19TVEFSVCkgPj4gMik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKHgxIDw8IDApIHwgKHkxIDw8IDE2KSk7CkBAIC0yNTUsMjM4ICsyNjgsMjg0IEBACiAJdTY0IGdwdV9hZGRyOwogCWludCBkd29yZHM7CiAKLQlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewotCWNhc2UgQ0hJUF9DRURBUjoKLQlkZWZhdWx0OgotCQludW1fcHNfZ3BycyA9IDkzOwotCQludW1fdnNfZ3BycyA9IDQ2OwotCQludW1fdGVtcF9ncHJzID0gNDsKLQkJbnVtX2dzX2dwcnMgPSAzMTsKLQkJbnVtX2VzX2dwcnMgPSAzMTsKLQkJbnVtX2hzX2dwcnMgPSAyMzsKLQkJbnVtX2xzX2dwcnMgPSAyMzsKLQkJbnVtX3BzX3RocmVhZHMgPSA5NjsKLQkJbnVtX3ZzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2dzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2VzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2hzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2xzX3RocmVhZHMgPSAxNjsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX1JFRFdPT0Q6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX0pVTklQRVI6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX0NZUFJFU1M6Ci0JY2FzZSBDSElQX0hFTUxPQ0s6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX1BBTE06Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDk2OwotCQludW1fdnNfdGhyZWFkcyA9IDE2OwotCQludW1fZ3NfdGhyZWFkcyA9IDE2OwotCQludW1fZXNfdGhyZWFkcyA9IDE2OwotCQludW1faHNfdGhyZWFkcyA9IDE2OwotCQludW1fbHNfdGhyZWFkcyA9IDE2OwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQlicmVhazsKLQljYXNlIENISVBfQkFSVFM6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX1RVUktTOgotCQludW1fcHNfZ3BycyA9IDkzOwotCQludW1fdnNfZ3BycyA9IDQ2OwotCQludW1fdGVtcF9ncHJzID0gNDsKLQkJbnVtX2dzX2dwcnMgPSAzMTsKLQkJbnVtX2VzX2dwcnMgPSAzMTsKLQkJbnVtX2hzX2dwcnMgPSAyMzsKLQkJbnVtX2xzX2dwcnMgPSAyMzsKLQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7Ci0JCW51bV92c190aHJlYWRzID0gMjA7Ci0JCW51bV9nc190aHJlYWRzID0gMjA7Ci0JCW51bV9lc190aHJlYWRzID0gMjA7Ci0JCW51bV9oc190aHJlYWRzID0gMjA7Ci0JCW51bV9sc190aHJlYWRzID0gMjA7Ci0JCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCWJyZWFrOwotCWNhc2UgQ0hJUF9DQUlDT1M6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAxMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikgfHwKLQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHx8Ci0JICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQUlDT1MpKQotCQlzcV9jb25maWcgPSAwOwotCWVsc2UKLQkJc3FfY29uZmlnID0gVkNfRU5BQkxFOwotCi0Jc3FfY29uZmlnIHw9IChFWFBPUlRfU1JDX0MgfAotCQkgICAgICBDU19QUklPKDApIHwKLQkJICAgICAgTFNfUFJJTygwKSB8Ci0JCSAgICAgIEhTX1BSSU8oMCkgfAotCQkgICAgICBQU19QUklPKDApIHwKLQkJICAgICAgVlNfUFJJTygxKSB8Ci0JCSAgICAgIEdTX1BSSU8oMikgfAotCQkgICAgICBFU19QUklPKDMpKTsKLQotCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX0dQUlMobnVtX3BzX2dwcnMpIHwKLQkJCQkgIE5VTV9WU19HUFJTKG51bV92c19ncHJzKSB8Ci0JCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUyhudW1fdGVtcF9ncHJzKSk7Ci0Jc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfR1BSUyhudW1fZ3NfZ3BycykgfAotCQkJCSAgTlVNX0VTX0dQUlMobnVtX2VzX2dwcnMpKTsKLQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8zID0gKE5VTV9IU19HUFJTKG51bV9oc19ncHJzKSB8Ci0JCQkJICBOVU1fTFNfR1BSUyhudW1fbHNfZ3BycykpOwotCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gKE5VTV9QU19USFJFQURTKG51bV9wc190aHJlYWRzKSB8Ci0JCQkJICAgTlVNX1ZTX1RIUkVBRFMobnVtX3ZzX3RocmVhZHMpIHwKLQkJCQkgICBOVU1fR1NfVEhSRUFEUyhudW1fZ3NfdGhyZWFkcykgfAotCQkJCSAgIE5VTV9FU19USFJFQURTKG51bV9lc190aHJlYWRzKSk7Ci0Jc3FfdGhyZWFkX3Jlc291cmNlX21nbXRfMiA9IChOVU1fSFNfVEhSRUFEUyhudW1faHNfdGhyZWFkcykgfAotCQkJCSAgICAgTlVNX0xTX1RIUkVBRFMobnVtX2xzX3RocmVhZHMpKTsKLQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX1NUQUNLX0VOVFJJRVMobnVtX3BzX3N0YWNrX2VudHJpZXMpIHwKLQkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMobnVtX3ZzX3N0YWNrX2VudHJpZXMpKTsKLQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX1NUQUNLX0VOVFJJRVMobnVtX2dzX3N0YWNrX2VudHJpZXMpIHwKLQkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMobnVtX2VzX3N0YWNrX2VudHJpZXMpKTsKLQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzMgPSAoTlVNX0hTX1NUQUNLX0VOVFJJRVMobnVtX2hzX3N0YWNrX2VudHJpZXMpIHwKLQkJCQkgICAgTlVNX0xTX1NUQUNLX0VOVFJJRVMobnVtX2xzX3N0YWNrX2VudHJpZXMpKTsKLQogCS8qIHNldCBjbGVhciBjb250ZXh0IHN0YXRlICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0NMRUFSX1NUQVRFLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CiAKLQkvKiBkaXNhYmxlIGR5biBncHJzICovCi0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0RZTl9HUFJfQ05UTF9QU19GTFVTSF9SRVEgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKSA+PiAyKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pIHsKKwkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwkJY2FzZSBDSElQX0NFREFSOgorCQlkZWZhdWx0OgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDk2OworCQkJbnVtX3ZzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9nc190aHJlYWRzID0gMTY7CisJCQludW1fZXNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2hzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9sc190aHJlYWRzID0gMTY7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1JFRFdPT0Q6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX0pVTklQRVI6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gODU7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX0NZUFJFU1M6CisJCWNhc2UgQ0hJUF9IRU1MT0NLOgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDEyODsKKwkJCW51bV92c190aHJlYWRzID0gMjA7CisJCQludW1fZ3NfdGhyZWFkcyA9IDIwOworCQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9oc190aHJlYWRzID0gMjA7CisJCQludW1fbHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV92c19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9oc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9QQUxNOgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDk2OworCQkJbnVtX3ZzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9nc190aHJlYWRzID0gMTY7CisJCQludW1fZXNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2hzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9sc190aHJlYWRzID0gMTY7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1NVTU86CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gOTY7CisJCQludW1fdnNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2dzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9lc190aHJlYWRzID0gMjU7CisJCQludW1faHNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2xzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQljYXNlIENISVBfU1VNTzI6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gOTY7CisJCQludW1fdnNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2dzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9lc190aHJlYWRzID0gMjU7CisJCQludW1faHNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2xzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCWJyZWFrOworCQljYXNlIENISVBfQkFSVFM6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gODU7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1RVUktTOgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDEyODsKKwkJCW51bV92c190aHJlYWRzID0gMjA7CisJCQludW1fZ3NfdGhyZWFkcyA9IDIwOworCQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9oc190aHJlYWRzID0gMjA7CisJCQludW1fbHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9DQUlDT1M6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAxMDsKKwkJCW51bV9nc190aHJlYWRzID0gMTA7CisJCQludW1fZXNfdGhyZWFkcyA9IDEwOworCQkJbnVtX2hzX3RocmVhZHMgPSAxMDsKKwkJCW51bV9sc190aHJlYWRzID0gMTA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJfQogCi0JLyogU1EgY29uZmlnICovCi0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxMSkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9DT05GSUcgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKSA+PiAyKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9jb25maWcpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzEpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzMpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210KTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdF8yKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzEpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMik7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8zKTsKKwkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikgfHwKKwkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9QQUxNKSB8fAorCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1NVTU8pIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfU1VNTzIpIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfQ0FJQ09TKSkKKwkJCXNxX2NvbmZpZyA9IDA7CisJCWVsc2UKKwkJCXNxX2NvbmZpZyA9IFZDX0VOQUJMRTsKKworCQlzcV9jb25maWcgfD0gKEVYUE9SVF9TUkNfQyB8CisJCQkgICAgICBDU19QUklPKDApIHwKKwkJCSAgICAgIExTX1BSSU8oMCkgfAorCQkJICAgICAgSFNfUFJJTygwKSB8CisJCQkgICAgICBQU19QUklPKDApIHwKKwkJCSAgICAgIFZTX1BSSU8oMSkgfAorCQkJICAgICAgR1NfUFJJTygyKSB8CisJCQkgICAgICBFU19QUklPKDMpKTsKKworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKE5VTV9QU19HUFJTKG51bV9wc19ncHJzKSB8CisJCQkJCSAgTlVNX1ZTX0dQUlMobnVtX3ZzX2dwcnMpIHwKKwkJCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUyhudW1fdGVtcF9ncHJzKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX0dQUlMobnVtX2dzX2dwcnMpIHwKKwkJCQkJICBOVU1fRVNfR1BSUyhudW1fZXNfZ3BycykpOworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8zID0gKE5VTV9IU19HUFJTKG51bV9oc19ncHJzKSB8CisJCQkJCSAgTlVNX0xTX0dQUlMobnVtX2xzX2dwcnMpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoTlVNX1BTX1RIUkVBRFMobnVtX3BzX3RocmVhZHMpIHwKKwkJCQkJICAgTlVNX1ZTX1RIUkVBRFMobnVtX3ZzX3RocmVhZHMpIHwKKwkJCQkJICAgTlVNX0dTX1RIUkVBRFMobnVtX2dzX3RocmVhZHMpIHwKKwkJCQkJICAgTlVNX0VTX1RIUkVBRFMobnVtX2VzX3RocmVhZHMpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXRfMiA9IChOVU1fSFNfVEhSRUFEUyhudW1faHNfdGhyZWFkcykgfAorCQkJCQkgICAgIE5VTV9MU19USFJFQURTKG51bV9sc190aHJlYWRzKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfU1RBQ0tfRU5UUklFUyhudW1fcHNfc3RhY2tfZW50cmllcykgfAorCQkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMobnVtX3ZzX3N0YWNrX2VudHJpZXMpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19TVEFDS19FTlRSSUVTKG51bV9nc19zdGFja19lbnRyaWVzKSB8CisJCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUyhudW1fZXNfc3RhY2tfZW50cmllcykpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzMgPSAoTlVNX0hTX1NUQUNLX0VOVFJJRVMobnVtX2hzX3N0YWNrX2VudHJpZXMpIHwKKwkJCQkJICAgIE5VTV9MU19TVEFDS19FTlRSSUVTKG51bV9sc19zdGFja19lbnRyaWVzKSk7CisKKwkJLyogZGlzYWJsZSBkeW4gZ3BycyAqLworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDEpKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0RZTl9HUFJfQ05UTF9QU19GTFVTSF9SRVEgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKSA+PiAyKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisKKwkJLyogU1EgY29uZmlnICovCisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMTEpKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0NPTkZJRyAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RBUlQpID4+IDIpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9jb25maWcpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9ncHJfcmVzb3VyY2VfbWdtdF8xKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzMpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210KTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXRfMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMyk7CisJfQogCiAJLyogQ09OVEVYVF9DT05UUk9MICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhjMDAxMjgwMCk7CkBAIC01NjAsNyArNjE5LDEwIEBACiAJbXV0ZXhfaW5pdCgmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKIAlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ID0gMDsKIAotCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gPSBldmVyZ3JlZW5fZGVmYXVsdF9zaXplOworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikKKwkJcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiA9IGV2ZXJncmVlbl9kZWZhdWx0X3NpemU7CisJZWxzZQorCQlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gY2F5bWFuX2RlZmF1bHRfc2l6ZTsKIAogCWR3b3JkcyA9IHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW47CiAJd2hpbGUgKGR3b3JkcyAmIDB4ZikgewpAQCAtNTcyLDExICs2MzQsMTcgQEAKIAlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOwogCiAJcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCA9IG9ial9zaXplOwotCW9ial9zaXplICs9IGV2ZXJncmVlbl92c19zaXplICogNDsKKwlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pCisJCW9ial9zaXplICs9IGV2ZXJncmVlbl92c19zaXplICogNDsKKwllbHNlCisJCW9ial9zaXplICs9IGNheW1hbl92c19zaXplICogNDsKIAlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOwogCiAJcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCA9IG9ial9zaXplOwotCW9ial9zaXplICs9IGV2ZXJncmVlbl9wc19zaXplICogNDsKKwlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pCisJCW9ial9zaXplICs9IGV2ZXJncmVlbl9wc19zaXplICogNDsKKwllbHNlCisJCW9ial9zaXplICs9IGNheW1hbl9wc19zaXplICogNDsKIAlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOwogCiAJciA9IHJhZGVvbl9ib19jcmVhdGUocmRldiwgb2JqX3NpemUsIFBBR0VfU0laRSwgdHJ1ZSwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTU5OSwxNiArNjY3LDI5IEBACiAJCXJldHVybiByOwogCX0KIAotCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQsCi0JCSAgICBldmVyZ3JlZW5fZGVmYXVsdF9zdGF0ZSwgcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpOworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikgeworCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0LAorCQkJICAgIGV2ZXJncmVlbl9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CiAKLQlpZiAobnVtX3BhY2tldDJzKQotCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKLQkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7Ci0JZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl92c19zaXplOyBpKyspCi0JCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihldmVyZ3JlZW5fdnNbaV0pOwotCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fcHNfc2l6ZTsgaSsrKQotCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIoZXZlcmdyZWVuX3BzW2ldKTsKKwkJaWYgKG51bV9wYWNrZXQycykKKwkJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgKyAocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpLAorCQkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7CisJCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fdnNfc2l6ZTsgaSsrKQorCQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGV2ZXJncmVlbl92c1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fcHNfc2l6ZTsgaSsrKQorCQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGV2ZXJncmVlbl9wc1tpXSk7CisJfSBlbHNlIHsKKwkJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCwKKwkJCSAgICBjYXltYW5fZGVmYXVsdF9zdGF0ZSwgcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpOworCisJCWlmIChudW1fcGFja2V0MnMpCisJCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKKwkJCQkgICAgcGFja2V0MnMsIG51bV9wYWNrZXQycyAqIDQpOworCQlmb3IgKGkgPSAwOyBpIDwgY2F5bWFuX3ZzX3NpemU7IGkrKykKKwkJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihjYXltYW5fdnNbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgY2F5bWFuX3BzX3NpemU7IGkrKykKKwkJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihjYXltYW5fcHNbaV0pOworCX0KIAlyYWRlb25fYm9fa3VubWFwKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaAppbmRleCBmMzdlOTFlLi4xNjM2ZTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaApAQCAtMTY4LDEwICsxNjgsMTYgQEAKICNkZWZpbmUJCVNFX0RCX0JVU1kJCQkJCSgxIDw8IDMwKQogI2RlZmluZQkJU0VfQ0JfQlVTWQkJCQkJKDEgPDwgMzEpCiAvKiBldmVyZ3JlZW4gKi8KKyNkZWZpbmUJQ0dfVEhFUk1BTF9DVFJMCQkJCQkweDcyYworI2RlZmluZQkJVE9GRlNFVF9NQVNLCQkJICAgICAgICAweDAwMDAzRkUwCisjZGVmaW5lCQlUT0ZGU0VUX1NISUZUCQkJICAgICAgICA1CiAjZGVmaW5lCUNHX01VTFRfVEhFUk1BTF9TVEFUVVMJCQkJMHg3NDAKICNkZWZpbmUJCUFTSUNfVCh4KQkJCSAgICAgICAgKCh4KSA8PCAxNikKLSNkZWZpbmUJCUFTSUNfVF9NQVNLCQkJICAgICAgICAweDdGRjAwMDAKKyNkZWZpbmUJCUFTSUNfVF9NQVNLCQkJICAgICAgICAweDA3RkYwMDAwCiAjZGVmaW5lCQlBU0lDX1RfU0hJRlQJCQkgICAgICAgIDE2CisjZGVmaW5lCUNHX1RTMF9TVEFUVVMJCQkJCTB4NzYwCisjZGVmaW5lCQlUUzBfQURDX0RPVVRfTUFTSwkJCTB4MDAwMDAzRkYKKyNkZWZpbmUJCVRTMF9BRENfRE9VVF9TSElGVAkJCTAKIC8qIEFQVSAqLwogI2RlZmluZQlDR19USEVSTUFMX1NUQVRVUwkJCSAgICAgICAgMHg2NzgKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCmluZGV4IGIyMDViYTEuLjE2Y2FhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKQEAgLTEzODcsMTQgKzEzODcsMTIgQEAKIAkJcmV0dXJuIHI7CiAJY2F5bWFuX2dwdV9pbml0KHJkZXYpOwogCi0jaWYgMAotCXIgPSBjYXltYW5fYmxpdF9pbml0KHJkZXYpOworCXIgPSBldmVyZ3JlZW5fYmxpdF9pbml0KHJkZXYpOwogCWlmIChyKSB7Ci0JCWNheW1hbl9ibGl0X2ZpbmkocmRldik7CisJCWV2ZXJncmVlbl9ibGl0X2ZpbmkocmRldik7CiAJCXJkZXYtPmFzaWMtPmNvcHkgPSBOVUxMOwogCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgYmxpdHRlciAoJWQpIGZhbGxpbmcgYmFjayB0byBtZW1jcHlcbiIsIHIpOwogCX0KLSNlbmRpZgogCiAJLyogYWxsb2NhdGUgd2IgYnVmZmVyICovCiAJciA9IHJhZGVvbl93Yl9pbml0KHJkZXYpOwpAQCAtMTQ1Miw3ICsxNDUwLDcgQEAKIAogaW50IGNheW1hbl9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCS8qIGludCByOyAqLworCWludCByOwogCiAJLyogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciByaW5nIHRvIGJlIGVtcHR5ICovCiAJY2F5bWFuX2NwX2VuYWJsZShyZGV2LCBmYWxzZSk7CkBAIC0xNDYxLDE0ICsxNDU5LDEzIEBACiAJcmFkZW9uX3diX2Rpc2FibGUocmRldik7CiAJY2F5bWFuX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwogCi0jaWYgMAogCS8qIHVucGluIHNoYWRlcnMgYm8gKi8KIAlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosIGZhbHNlKTsKIAlpZiAobGlrZWx5KHIgPT0gMCkpIHsKIAkJcmFkZW9uX2JvX3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CiAJfQotI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU4MCw3ICsxNTc3LDcgQEAKIAogdm9pZCBjYXltYW5fZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQkvKiBjYXltYW5fYmxpdF9maW5pKHJkZXYpOyAqLworCWV2ZXJncmVlbl9ibGl0X2ZpbmkocmRldik7CiAJY2F5bWFuX2NwX2ZpbmkocmRldik7CiAJcjYwMF9pcnFfZmluaShyZGV2KTsKIAlyYWRlb25fd2JfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggMmZlZjlkZS4uNjg2ZjlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKQEAgLTYzLDcgKzYzLDcgQEAKIAl1bnNpZ25lZAkJCW51bV9hcnJheXM7CiAJdW5zaWduZWQJCQltYXhfaW5keDsKIAl1bnNpZ25lZAkJCWNvbG9yX2NoYW5uZWxfbWFzazsKLQlzdHJ1Y3QgcjEwMF9jc190cmFja19hcnJheQlhcnJheXNbMTFdOworCXN0cnVjdCByMTAwX2NzX3RyYWNrX2FycmF5CWFycmF5c1sxNl07CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCWNiW1IzMDBfTUFYX0NCXTsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja19jYiAJemI7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCWFhOwpAQCAtMTQ2LDYgKzE0NiwxMiBAQAogCWliID0gcC0+aWItPnB0cjsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCWMgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCsrKSAmIDB4MUY7CisJaWYgKGMgPiAxNikgeworCSAgICBEUk1fRVJST1IoIk9ubHkgMTYgdmVydGV4IGJ1ZmZlcnMgYXJlIGFsbG93ZWQgJWRcbiIsCisJCSAgICAgIHBrdC0+b3Bjb2RlKTsKKwkgICAgcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCSAgICByZXR1cm4gLUVJTlZBTDsKKwl9CiAJdHJhY2stPm51bV9hcnJheXMgPSBjOwogCWZvciAoaSA9IDA7IGkgPCAoYyAtIDEpOyBpKz0yLCBpZHgrPTMpIHsKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKaW5kZXggNmYyNzU5My4uZjc5ZDJjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKQEAgLTg3LDYgKzg3LDEwIEBACiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9QQUxNX3BmcC5iaW4iKTsKIE1PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1BBTE1fbWUuYmluIik7CiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9TVU1PX3JsYy5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU9fcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vU1VNT19tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU8yX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU8yX21lLmJpbiIpOwogCiBpbnQgcjYwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKQEAgLTU4Niw2ICs1OTAsOSBAQAogCXN0cnVjdCByYWRlb25fdm9sdGFnZSAqdm9sdGFnZSA9ICZwcy0+Y2xvY2tfaW5mb1tyZXFfY21faWR4XS52b2x0YWdlOwogCiAJaWYgKCh2b2x0YWdlLT50eXBlID09IFZPTFRBR0VfU1cpICYmIHZvbHRhZ2UtPnZvbHRhZ2UpIHsKKwkJLyogMHhmZjAxIGlzIGEgZmxhZyByYXRoZXIgdGhlbiBhbiBhY3R1YWwgdm9sdGFnZSAqLworCQlpZiAodm9sdGFnZS0+dm9sdGFnZSA9PSAweGZmMDEpCisJCQlyZXR1cm47CiAJCWlmICh2b2x0YWdlLT52b2x0YWdlICE9IHJkZXYtPnBtLmN1cnJlbnRfdmRkYykgewogCQkJcmFkZW9uX2F0b21fc2V0X3ZvbHRhZ2UocmRldiwgdm9sdGFnZS0+dm9sdGFnZSwgU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZEREMpOwogCQkJcmRldi0+cG0uY3VycmVudF92ZGRjID0gdm9sdGFnZS0+dm9sdGFnZTsKQEAgLTIwMjQsNiArMjAzMSwxNCBAQAogCQljaGlwX25hbWUgPSAiUEFMTSI7CiAJCXJsY19jaGlwX25hbWUgPSAiU1VNTyI7CiAJCWJyZWFrOworCWNhc2UgQ0hJUF9TVU1POgorCQljaGlwX25hbWUgPSAiU1VNTyI7CisJCXJsY19jaGlwX25hbWUgPSAiU1VNTyI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9TVU1PMjoKKwkJY2hpcF9uYW1lID0gIlNVTU8yIjsKKwkJcmxjX2NoaXBfbmFtZSA9ICJTVU1PIjsKKwkJYnJlYWs7CiAJZGVmYXVsdDogQlVHKCk7CiAJfQogCkBAIC0zMjgyLDI3ICszMjk3LDI2IEBACiAKIGludCByNjAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXUzMiB3cHRyID0gcjYwMF9nZXRfaWhfd3B0cihyZGV2KTsKLQl1MzIgcnB0ciA9IHJkZXYtPmloLnJwdHI7CisJdTMyIHdwdHI7CisJdTMyIHJwdHI7CiAJdTMyIHNyY19pZCwgc3JjX2RhdGE7CiAJdTMyIHJpbmdfaW5kZXg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIHF1ZXVlX2hvdHBsdWcgPSBmYWxzZTsKIAotCURSTV9ERUJVRygicjYwMF9pcnFfcHJvY2VzcyBzdGFydDogcnB0ciAlZCwgd3B0ciAlZFxuIiwgcnB0ciwgd3B0cik7Ci0JaWYgKCFyZGV2LT5paC5lbmFibGVkKQorCWlmICghcmRldi0+aWguZW5hYmxlZCB8fCByZGV2LT5zaHV0ZG93bikKIAkJcmV0dXJuIElSUV9OT05FOwogCisJd3B0ciA9IHI2MDBfZ2V0X2loX3dwdHIocmRldik7CisJcnB0ciA9IHJkZXYtPmloLnJwdHI7CisJRFJNX0RFQlVHKCJyNjAwX2lycV9wcm9jZXNzIHN0YXJ0OiBycHRyICVkLCB3cHRyICVkXG4iLCBycHRyLCB3cHRyKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZyZGV2LT5paC5sb2NrLCBmbGFncyk7CiAKIAlpZiAocnB0ciA9PSB3cHRyKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkZXYtPmloLmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KLQlpZiAocmRldi0+c2h1dGRvd24pIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+aWgubG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQogCiByZXN0YXJ0X2loOgogCS8qIGRpc3BsYXkgaW50ZXJydXB0cyAqLwpAQCAtMzQzMiw3ICszNDQ2LDcgQEAKIAkJCXJhZGVvbl9mZW5jZV9wcm9jZXNzKHJkZXYpOwogCQkJYnJlYWs7CiAJCWNhc2UgMjMzOiAvKiBHVUkgSURMRSAqLwotCQkJRFJNX0RFQlVHKCJJSDogQ1AgRU9QXG4iKTsKKwkJCURSTV9ERUJVRygiSUg6IEdVSSBpZGxlXG4iKTsKIAkJCXJkZXYtPnBtLmd1aV9pZGxlID0gdHJ1ZTsKIAkJCXdha2VfdXAoJnJkZXYtPmlycS5pZGxlX3F1ZXVlKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwppbmRleCBmZDE4YmU5Li45MDliZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwpAQCAtNzEsMjAgKzcxLDIxIEBACiAJdTY0CQkJZGJfYm9fbWM7CiB9OwogCi0jZGVmaW5lIEZNVF84X0JJVChmbXQsIHZjKSBbZm10XSA9IHsgMSwgMSwgMSwgdmMgfQotI2RlZmluZSBGTVRfMTZfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCAyLCB2YyB9Ci0jZGVmaW5lIEZNVF8yNF9CSVQoZm10KSBbZm10XSA9IHsgMSwgMSwgMywgMCB9Ci0jZGVmaW5lIEZNVF8zMl9CSVQoZm10LCB2YykgW2ZtdF0gPSB7IDEsIDEsIDQsIHZjIH0KLSNkZWZpbmUgRk1UXzQ4X0JJVChmbXQpIFtmbXRdID0geyAxLCAxLCA2LCAwIH0KLSNkZWZpbmUgRk1UXzY0X0JJVChmbXQsIHZjKSBbZm10XSA9IHsgMSwgMSwgOCwgdmMgfQotI2RlZmluZSBGTVRfOTZfQklUKGZtdCkgW2ZtdF0gPSB7IDEsIDEsIDEyLCAwIH0KLSNkZWZpbmUgRk1UXzEyOF9CSVQoZm10LCB2YykgW2ZtdF0gPSB7IDEsIDEsIDE2LCB2YyB9CisjZGVmaW5lIEZNVF84X0JJVChmbXQsIHZjKSAgIFtmbXRdID0geyAxLCAxLCAxLCB2YywgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzE2X0JJVChmbXQsIHZjKSAgW2ZtdF0gPSB7IDEsIDEsIDIsIHZjLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfMjRfQklUKGZtdCkgICAgICBbZm10XSA9IHsgMSwgMSwgMywgIDAsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF8zMl9CSVQoZm10LCB2YykgIFtmbXRdID0geyAxLCAxLCA0LCB2YywgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzQ4X0JJVChmbXQpICAgICAgW2ZtdF0gPSB7IDEsIDEsIDYsICAwLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfNjRfQklUKGZtdCwgdmMpICBbZm10XSA9IHsgMSwgMSwgOCwgdmMsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF85Nl9CSVQoZm10KSAgICAgIFtmbXRdID0geyAxLCAxLCAxMiwgMCwgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzEyOF9CSVQoZm10LCB2YykgW2ZtdF0gPSB7IDEsIDEsIDE2LHZjLCBDSElQX1I2MDAgfQogCiBzdHJ1Y3QgZ3B1X2Zvcm1hdHMgewogCXVuc2lnbmVkIGJsb2Nrd2lkdGg7CiAJdW5zaWduZWQgYmxvY2toZWlnaHQ7CiAJdW5zaWduZWQgYmxvY2tzaXplOwogCXVuc2lnbmVkIHZhbGlkX2NvbG9yOworCWVudW0gcmFkZW9uX2ZhbWlseSBtaW5fZmFtaWx5OwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBncHVfZm9ybWF0cyBjb2xvcl9mb3JtYXRzX3RhYmxlW10gPSB7CkBAIC0xNTQsNyArMTU1LDExIEBACiAJW1ZfMDM4MDA0X0ZNVF9CQzNdID0geyA0LCA0LCAxNiwgMCB9LAogCVtWXzAzODAwNF9GTVRfQkM0XSA9IHsgNCwgNCwgOCwgMCB9LAogCVtWXzAzODAwNF9GTVRfQkM1XSA9IHsgNCwgNCwgMTYsIDB9LAorCVtWXzAzODAwNF9GTVRfQkM2XSA9IHsgNCwgNCwgMTYsIDAsIENISVBfQ0VEQVJ9LCAvKiBFdmVyZ3JlZW4tb25seSAqLworCVtWXzAzODAwNF9GTVRfQkM3XSA9IHsgNCwgNCwgMTYsIDAsIENISVBfQ0VEQVJ9LCAvKiBFdmVyZ3JlZW4tb25seSAqLwogCisJLyogVGhlIG90aGVyIEV2ZXJncmVlbiBmb3JtYXRzICovCisJW1ZfMDM4MDA0X0ZNVF8zMl9BU18zMl8zMl8zMl8zMl0gPSB7IDEsIDEsIDQsIDAsIENISVBfQ0VEQVJ9LAogfTsKIAogc3RhdGljIGlubGluZSBib29sIGZtdF9pc192YWxpZF9jb2xvcih1MzIgZm9ybWF0KQpAQCAtMTY4LDExICsxNzMsMTQgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmbXRfaXNfdmFsaWRfdGV4dHVyZSh1MzIgZm9ybWF0KQorc3RhdGljIGlubGluZSBib29sIGZtdF9pc192YWxpZF90ZXh0dXJlKHUzMiBmb3JtYXQsIGVudW0gcmFkZW9uX2ZhbWlseSBmYW1pbHkpCiB7CiAJaWYgKGZvcm1hdCA+PSBBUlJBWV9TSVpFKGNvbG9yX2Zvcm1hdHNfdGFibGUpKQogCQlyZXR1cm4gZmFsc2U7CiAJCisJaWYgKGZhbWlseSA8IGNvbG9yX2Zvcm1hdHNfdGFibGVbZm9ybWF0XS5taW5fZmFtaWx5KQorCQlyZXR1cm4gZmFsc2U7CisKIAlpZiAoY29sb3JfZm9ybWF0c190YWJsZVtmb3JtYXRdLmJsb2Nrd2lkdGggPiAwKQogCQlyZXR1cm4gdHJ1ZTsKIApAQCAtMTMyNSw3ICsxMzMzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWZvcm1hdCA9IEdfMDM4MDA0X0RBVEFfRk9STUFUKHdvcmQxKTsKLQlpZiAoIWZtdF9pc192YWxpZF90ZXh0dXJlKGZvcm1hdCkpIHsKKwlpZiAoIWZtdF9pc192YWxpZF90ZXh0dXJlKGZvcm1hdCwgcC0+ZmFtaWx5KSkgewogCQlkZXZfd2FybihwLT5kZXYsICIlczolZCB0ZXh0dXJlIGludmFsaWQgZm9ybWF0ICVkXG4iLAogCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgZm9ybWF0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKaW5kZXggYjJiOTQ0Yi4uZjE0MGEwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaApAQCAtMTMwOSw2ICsxMzA5LDkgQEAKICNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCiAjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfQkM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAogI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UX0JDNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CQzYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfQkM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UXzMyX0FTXzMyXzMyXzMyXzMyICAgICAgICAgICAgIDB4MDAwMDAwMzgKICNkZWZpbmUgUl8wMzgwMTBfU1FfVEVYX1JFU09VUkNFX1dPUkQ0XzAgICAgICAgICAgICAgMHgwMzgwMTAKICNkZWZpbmUgICBTXzAzODAxMF9GT1JNQVRfQ09NUF9YKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKICNkZWZpbmUgICBHXzAzODAxMF9GT1JNQVRfQ09NUF9YKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCmluZGV4IGJhNjQzYjUuLjI3ZjQ1NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaApAQCAtMTY1LDYgKzE2NSw3IEBACiAJdWludDMyX3QgZGVmYXVsdF9zY2xrOwogCXVpbnQzMl90IGRlZmF1bHRfZGlzcGNsazsKIAl1aW50MzJfdCBkcF9leHRjbGs7CisJdWludDMyX3QgbWF4X3BpeGVsX2Nsb2NrOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwppbmRleCBkOTQ4MjY1Li5iMjQ0OTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCkBAIC05MDYsOSArOTA2LDkgQEAKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJmV2ZXJncmVlbl9nZXRfdmJsYW5rX2NvdW50ZXIsCiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyNjAwX2ZlbmNlX3JpbmdfZW1pdCwKIAkuY3NfcGFyc2UgPSAmZXZlcmdyZWVuX2NzX3BhcnNlLAotCS5jb3B5X2JsaXQgPSBOVUxMLAotCS5jb3B5X2RtYSA9IE5VTEwsCi0JLmNvcHkgPSBOVUxMLAorCS5jb3B5X2JsaXQgPSAmZXZlcmdyZWVuX2NvcHlfYmxpdCwKKwkuY29weV9kbWEgPSAmZXZlcmdyZWVuX2NvcHlfYmxpdCwKKwkuY29weSA9ICZldmVyZ3JlZW5fY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKIAkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLApAQCAtOTM4LDYgKzkzOCwxMyBAQAogaW50IHJhZGVvbl9hc2ljX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmFkZW9uX3JlZ2lzdGVyX2FjY2Vzc29yX2luaXQocmRldik7CisKKwkvKiBzZXQgdGhlIG51bWJlciBvZiBjcnRjcyAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykKKwkJcmRldi0+bnVtX2NydGMgPSAxOworCWVsc2UKKwkJcmRldi0+bnVtX2NydGMgPSAyOworCiAJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKIAljYXNlIENISVBfUjEwMDoKIAljYXNlIENISVBfUlYxMDA6CkBAIC0xMDE3LDE4ICsxMDI0LDMyIEBACiAJY2FzZSBDSElQX0pVTklQRVI6CiAJY2FzZSBDSElQX0NZUFJFU1M6CiAJY2FzZSBDSElQX0hFTUxPQ0s6CisJCS8qIHNldCBudW0gY3J0Y3MgKi8KKwkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX0NFREFSKQorCQkJcmRldi0+bnVtX2NydGMgPSA0OworCQllbHNlCisJCQlyZGV2LT5udW1fY3J0YyA9IDY7CiAJCXJkZXYtPmFzaWMgPSAmZXZlcmdyZWVuX2FzaWM7CiAJCWJyZWFrOwogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAkJcmRldi0+YXNpYyA9ICZzdW1vX2FzaWM7CiAJCWJyZWFrOwogCWNhc2UgQ0hJUF9CQVJUUzoKIAljYXNlIENISVBfVFVSS1M6CiAJY2FzZSBDSElQX0NBSUNPUzoKKwkJLyogc2V0IG51bSBjcnRjcyAqLworCQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfQ0FJQ09TKQorCQkJcmRldi0+bnVtX2NydGMgPSA0OworCQllbHNlCisJCQlyZGV2LT5udW1fY3J0YyA9IDY7CiAJCXJkZXYtPmFzaWMgPSAmYnRjX2FzaWM7CiAJCWJyZWFrOwogCWNhc2UgQ0hJUF9DQVlNQU46CiAJCXJkZXYtPmFzaWMgPSAmY2F5bWFuX2FzaWM7CisJCS8qIHNldCBudW0gY3J0Y3MgKi8KKwkJcmRldi0+bnVtX2NydGMgPSA2OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBGSVhNRTogbm90IHN1cHBvcnRlZCB5ZXQgKi8KQEAgLTEwNDAsMTggKzEwNjEsNiBAQAogCQlyZGV2LT5hc2ljLT5zZXRfbWVtb3J5X2Nsb2NrID0gTlVMTDsKIAl9CiAKLQkvKiBzZXQgdGhlIG51bWJlciBvZiBjcnRjcyAqLwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykKLQkJcmRldi0+bnVtX2NydGMgPSAxOwotCWVsc2UgewotCQlpZiAoQVNJQ19JU19EQ0U0MShyZGV2KSkKLQkJCXJkZXYtPm51bV9jcnRjID0gMjsKLQkJZWxzZSBpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQotCQkJcmRldi0+bnVtX2NydGMgPSA2OwotCQllbHNlCi0JCQlyZGV2LT5udW1fY3J0YyA9IDI7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCmluZGV4IDkwZGZiMmIuLjFlNzI1ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwpAQCAtMTI0Niw2ICsxMjQ2LDEwIEBACiAJCX0KIAkJKmRjcGxsID0gKnAxcGxsOwogCisJCXJkZXYtPmNsb2NrLm1heF9waXhlbF9jbG9jayA9IGxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm8udXNNYXhQaXhlbENsb2NrKTsKKwkJaWYgKHJkZXYtPmNsb2NrLm1heF9waXhlbF9jbG9jayA9PSAwKQorCQkJcmRldi0+Y2xvY2subWF4X3BpeGVsX2Nsb2NrID0gNDAwMDA7CisKIAkJcmV0dXJuIHRydWU7CiAJfQogCkBAIC0yNjAzLDYgKzI2MDcsMTAgQEAKIAlpZiAoIWF0b21fcGFyc2VfY21kX2hlYWRlcihyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgJmZyZXYsICZjcmV2KSkKIAkJcmV0dXJuOwogCisJLyogMHhmZjAxIGlzIGEgZmxhZyByYXRoZXIgdGhlbiBhbiBhY3R1YWwgdm9sdGFnZSAqLworCWlmICh2b2x0YWdlX2xldmVsID09IDB4ZmYwMSkKKwkJcmV0dXJuOworCiAJc3dpdGNoIChjcmV2KSB7CiAJY2FzZSAxOgogCQlhcmdzLnYxLnVjVm9sdGFnZVR5cGUgPSB2b2x0YWdlX3R5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jbG9ja3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCmluZGV4IDUyNDlhZjguLjJkNDhlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAlwMXBsbC0+cmVmZXJlbmNlX2RpdiA9IFJSRUczMl9QTEwoUkFERU9OX1BQTExfUkVGX0RJVikgJiAweDNmZjsKIAlpZiAocDFwbGwtPnJlZmVyZW5jZV9kaXYgPCAyKQogCQlwMXBsbC0+cmVmZXJlbmNlX2RpdiA9IDEyOwotCXAycGxsLT5yZWZlcmVuY2VfZGl2ID0gcDFwbGwtPnJlZmVyZW5jZV9kaXY7CQorCXAycGxsLT5yZWZlcmVuY2VfZGl2ID0gcDFwbGwtPnJlZmVyZW5jZV9kaXY7CiAKIAkvKiBUaGVzZSBhcmVuJ3QgaW4gdGhlIGRldmljZS10cmVlICovCiAJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I0MjApIHsKQEAgLTEzOSw2ICsxMzksOCBAQAogCQlwMnBsbC0+cGxsX291dF9taW4gPSAxMjUwMDsKIAkJcDJwbGwtPnBsbF9vdXRfbWF4ID0gMzUwMDA7CiAJfQorCS8qIG5vdCBzdXJlIHdoYXQgdGhlIG1heCBzaG91bGQgYmUgaW4gYWxsIGNhc2VzICovCisJcmRldi0+Y2xvY2subWF4X3BpeGVsX2Nsb2NrID0gMzUwMDA7CiAKIAlzcGxsLT5yZWZlcmVuY2VfZnJlcSA9IG1wbGwtPnJlZmVyZW5jZV9mcmVxID0gcDFwbGwtPnJlZmVyZW5jZV9mcmVxOwogCXNwbGwtPnJlZmVyZW5jZV9kaXYgPSBtcGxsLT5yZWZlcmVuY2VfZGl2ID0KQEAgLTE1MSw3ICsxNTMsNyBAQAogCWVsc2UKIAkJcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrID0KIAkJCXJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhyZGV2KTsKLQkJCQorCiAJdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAiQVRZLE1DTEsiLCBOVUxMKTsKIAlpZiAodmFsICYmICp2YWwpCiAJCXJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsayA9ICgqdmFsKSAvIDEwOwpAQCAtMTYwLDcgKzE2Miw3IEBACiAJCQlyYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2socmRldik7CiAKIAlEUk1fSU5GTygiVXNpbmcgZGV2aWNlLXRyZWUgY2xvY2sgaW5mb1xuIik7Ci0JCisKIAlyZXR1cm4gdHJ1ZTsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKaW5kZXggNWI5OTFmNy4uZTQ1OTQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYwpAQCAtODY2LDYgKzg2NiwxMSBAQAogCQlyZGV2LT5jbG9jay5kZWZhdWx0X3NjbGsgPSBzY2xrOwogCQlyZGV2LT5jbG9jay5kZWZhdWx0X21jbGsgPSBtY2xrOwogCisJCWlmIChSQklPUzMyKHBsbF9pbmZvICsgMHgxNikpCisJCQlyZGV2LT5jbG9jay5tYXhfcGl4ZWxfY2xvY2sgPSBSQklPUzMyKHBsbF9pbmZvICsgMHgxNik7CisJCWVsc2UKKwkJCXJkZXYtPmNsb2NrLm1heF9waXhlbF9jbG9jayA9IDM1MDAwOyAvKiBtaWdodCBuZWVkIHNvbWV0aGluZyBhc2ljIHNwZWNpZmljICovCisKIAkJcmV0dXJuIHRydWU7CiAJfQogCXJldHVybiBmYWxzZTsKQEAgLTE1NDgsMTAgKzE1NTMsMTIgQEAKIAkJCSAgIChyZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4NGE0OCkpIHsKIAkJCS8qIE1hYyBYODAwICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfTUFDX1g4MDA7Ci0JCX0gZWxzZSBpZiAoKHJkZXYtPnBkZXYtPmRldmljZSA9PSAweDQxNTApICYmCisJCX0gZWxzZSBpZiAoKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDIiKSB8fAorCQkJICAgIG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWM3LDMiKSkgJiYKKwkJCSAgIChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg0MTUwKSAmJgogCQkJICAgKHJkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDAyKSAmJgogCQkJICAgKHJkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHg0MTUwKSkgewotCQkJLyogTWFjIEc1IDk2MDAgKi8KKwkJCS8qIE1hYyBHNSB0b3dlciA5NjAwICovCiAJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfTUFDX0c1Xzk2MDA7CiAJCX0gZWxzZQogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IGVlMWRjY2IuLmNiZmNhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTQ0LDYgKzQ0LDggQEAKIHJhZGVvbl9sZWdhY3lfYmFja2xpZ2h0X2luaXQoc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciwKIAkJCSAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmRybV9jb25uZWN0b3IpOwogCitib29sIHJhZGVvbl9jb25uZWN0b3JfZW5jb2Rlcl9pc19kcF9icmlkZ2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisKIHZvaWQgcmFkZW9uX2Nvbm5lY3Rvcl9ob3RwbHVnKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwpAQCAtNjI2LDggKzYyOCwxNCBAQAogc3RhdGljIGludCByYWRlb25fdmdhX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKIAkvKiBYWFggY2hlY2sgbW9kZSBiYW5kd2lkdGggKi8KLQkvKiBYWFggdmVyaWZ5IGFnYWluc3QgbWF4IERBQyBvdXRwdXQgZnJlcXVlbmN5ICovCisKKwlpZiAoKG1vZGUtPmNsb2NrIC8gMTApID4gcmRldi0+Y2xvY2subWF4X3BpeGVsX2Nsb2NrKQorCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCiAJcmV0dXJuIE1PREVfT0s7CiB9CiAKQEAgLTgzMCw2ICs4MzgsMTMgQEAKIAkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CiAJCQlEUk1fRVJST1IoIiVzOiBwcm9iZWQgYSBtb25pdG9yIGJ1dCBub3xpbnZhbGlkIEVESURcbiIsCiAJCQkJCWRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CisJCQkvKiByczY5MCBzZWVtcyB0byBoYXZlIGEgcHJvYmxlbSB3aXRoIGNvbm5lY3RvcnMgbm90IGV4aXN0aW5nIGFuZCBhbHdheXMKKwkJCSAqIHJldHVybiBhIGJsb2NrIG9mIDAncy4gSWYgd2Ugc2VlIHRoaXMganVzdCBzdG9wIHBvbGxpbmcgb24gdGhpcyBvdXRwdXQgKi8KKwkJCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlM2OTAgfHwgcmRldi0+ZmFtaWx5ID09IENISVBfUlM3NDApICYmIHJhZGVvbl9jb25uZWN0b3ItPmJhc2UubnVsbF9lZGlkX2NvdW50ZXIpIHsKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJCQlEUk1fRVJST1IoIiVzOiBkZXRlY3RlZCBSUzY5MCBmbG9hdGluZyBidXMgYnVnLCBzdG9wcGluZyBkZGMgZGV0ZWN0XG4iLCBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSBOVUxMOworCQkJfQogCQl9IGVsc2UgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSAhIShyYWRlb25fY29ubmVjdG9yLT5lZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUwpOwogCkBAIC0xMDE1LDYgKzEwMzAsMTEgQEAKIAkJfSBlbHNlCiAJCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwogCX0KKworCS8qIGNoZWNrIGFnYWluc3QgdGhlIG1heCBwaXhlbCBjbG9jayAqLworCWlmICgobW9kZS0+Y2xvY2sgLyAxMCkgPiByZGV2LT5jbG9jay5tYXhfcGl4ZWxfY2xvY2spCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisKIAlyZXR1cm4gTU9ERV9PSzsKIH0KIApAQCAtMTA1MiwxMCArMTA3MiwxMSBAQAogewogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICpyYWRlb25fZGlnX2Nvbm5lY3RvciA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CiAJaW50IHJldDsKIAotCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApIHsKLQkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCWlmICgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKSB8fAorCSAgICAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUykpIHsKIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CiAKIAkJaWYgKCFyYWRlb25fZGlnX2Nvbm5lY3Rvci0+ZWRwX29uKQpAQCAtMTA2Nyw3ICsxMDg4LDYgQEAKIAkJCQkJCSAgICAgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fUE9XRVJfT0ZGKTsKIAogCQlpZiAocmV0ID4gMCkgewotCQkJZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CiAJCQlpZiAoZW5jb2RlcikgewogCQkJCXJhZGVvbl9maXh1cF9sdmRzX25hdGl2ZV9tb2RlKGVuY29kZXIsIGNvbm5lY3Rvcik7CiAJCQkJLyogYWRkIHNjYWxlZCBtb2RlcyAqLwpAQCAtMTA5MSw4ICsxMTExLDE0IEBACiAJCQkvKiBhZGQgc2NhbGVkIG1vZGVzICovCiAJCQlyYWRlb25fYWRkX2NvbW1vbl9tb2RlcyhlbmNvZGVyLCBjb25uZWN0b3IpOwogCQl9Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJLyogbmVlZCB0byBzZXR1cCBkZGMgb24gdGhlIGJyaWRnZSAqLworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvcl9lbmNvZGVyX2lzX2RwX2JyaWRnZShjb25uZWN0b3IpKSB7CisJCQlpZiAoZW5jb2RlcikKKwkJCQlyYWRlb25fYXRvbV9leHRfZW5jb2Rlcl9zZXR1cF9kZGMoZW5jb2Rlcik7CisJCX0KIAkJcmV0ID0gcmFkZW9uX2RkY19nZXRfbW9kZXMocmFkZW9uX2Nvbm5lY3Rvcik7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExNzYsMTQgKzEyMDIsMTUgQEAKIAlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICpyYWRlb25fZGlnX2Nvbm5lY3RvciA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CiAKIAlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgewogCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CiAJfQogCi0JaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkgewotCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSByYWRlb25fYmVzdF9zaW5nbGVfZW5jb2Rlcihjb25uZWN0b3IpOworCWlmICgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKSB8fAorCSAgICAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUykpIHsKIAkJaWYgKGVuY29kZXIpIHsKIAkJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CkBAIC0xMjAzLDYgKzEyMzAsMTEgQEAKIAkJCWF0b21iaW9zX3NldF9lZHBfcGFuZWxfcG93ZXIoY29ubmVjdG9yLAogCQkJCQkJICAgICBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9QT1dFUl9PRkYpOwogCX0gZWxzZSB7CisJCS8qIG5lZWQgdG8gc2V0dXAgZGRjIG9uIHRoZSBicmlkZ2UgKi8KKwkJaWYgKHJhZGVvbl9jb25uZWN0b3JfZW5jb2Rlcl9pc19kcF9icmlkZ2UoY29ubmVjdG9yKSkgeworCQkJaWYgKGVuY29kZXIpCisJCQkJcmFkZW9uX2F0b21fZXh0X2VuY29kZXJfc2V0dXBfZGRjKGVuY29kZXIpOworCQl9CiAJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5kcF9zaW5rX3R5cGUgPSByYWRlb25fZHBfZ2V0c2lua3R5cGUocmFkZW9uX2Nvbm5lY3Rvcik7CiAJCWlmIChyYWRlb25faHBkX3NlbnNlKHJkZXYsIHJhZGVvbl9jb25uZWN0b3ItPmhwZC5ocGQpKSB7CiAJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKQEAgLTEyMTcsNiArMTI0OSwxNiBAQAogCQkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIAkJCX0KIAkJfQorCisJCWlmICgocmV0ID09IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSAmJgorCQkgICAgcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0KSB7CisJCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSByYWRlb25fYmVzdF9zaW5nbGVfZW5jb2Rlcihjb25uZWN0b3IpOworCQkJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9mdW5jczsKKwkJCWlmIChlbmNvZGVyKSB7CisJCQkJZW5jb2Rlcl9mdW5jcyA9IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCQkJCXJldCA9IGVuY29kZXJfZnVuY3MtPmRldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpOworCQkJfQorCQl9CiAJfQogCiAJcmFkZW9uX2Nvbm5lY3Rvcl91cGRhdGVfc2NyYXRjaF9yZWdzKGNvbm5lY3RvciwgcmV0KTsKQEAgLTEyMzEsNyArMTI3Myw4IEBACiAKIAkvKiBYWFggY2hlY2sgbW9kZSBiYW5kd2lkdGggKi8KIAotCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApIHsKKwlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkgfHwKKwkgICAgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFMpKSB7CiAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CiAKIAkJaWYgKChtb2RlLT5oZGlzcGxheSA8IDMyMCkgfHwgKG1vZGUtPnZkaXNwbGF5IDwgMjQwKSkKQEAgLTEyNDEsNyArMTI4NCw3IEBACiAJCQlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOwogCi0JCS8qIEFWSVZPIGhhcmR3YXJlIHN1cHBvcnRzIGRvd25zY2FsaW5nIG1vZGVzIGxhcmdlciB0aGFuIHRoZSBwYW5lbAorCQkJLyogQVZJVk8gaGFyZHdhcmUgc3VwcG9ydHMgZG93bnNjYWxpbmcgbW9kZXMgbGFyZ2VyIHRoYW4gdGhlIHBhbmVsCiAJCQkgKiB0byB0aGUgcGFuZWwgc2l6ZSwgYnV0IEknbSBub3Qgc3VyZSB0aGlzIGlzIGRlc2lyYWJsZS4KIAkJCSAqLwogCQkJaWYgKChtb2RlLT5oZGlzcGxheSA+IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkgfHwKQEAgLTEzOTAsNiArMTQzMywxMCBAQAogCQlkZWZhdWx0OgogCQkJY29ubmVjdG9yLT5pbnRlcmxhY2VfYWxsb3dlZCA9IHRydWU7CiAJCQljb25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCA9IHRydWU7CisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOworCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCisJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCisJCQkJCQkgICAgICAxKTsKIAkJCWJyZWFrOwogCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgogCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgpAQCAtMTQxMSw2ICsxNDU4LDEyIEBACiAJCQkJY29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQgPSB0cnVlOwogCQkJZWxzZQogCQkJCWNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2VkID0gZmFsc2U7CisJCQlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpIHsKKwkJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOworCQkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKKwkJCQkJCQkgICAgICAxKTsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOgogCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwppbmRleCA4YzE5MTY5Li5mYWUwMGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKQEAgLTIyOCw2ICsyMjgsNyBAQAogCXBhcnNlci5maWxwID0gZmlscDsKIAlwYXJzZXIucmRldiA9IHJkZXY7CiAJcGFyc2VyLmRldiA9IHJkZXYtPmRldjsKKwlwYXJzZXIuZmFtaWx5ID0gcmRldi0+ZmFtaWx5OwogCXIgPSByYWRlb25fY3NfcGFyc2VyX2luaXQoJnBhcnNlciwgZGF0YSk7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXIgIVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IDViNjEzNjQuLjdjZmFhN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCkBAIC04Miw2ICs4Miw4IEBACiAJIkNZUFJFU1MiLAogCSJIRU1MT0NLIiwKIAkiUEFMTSIsCisJIlNVTU8iLAorCSJTVU1PMiIsCiAJIkJBUlRTIiwKIAkiVFVSS1MiLAogCSJDQUlDT1MiLApAQCAtMjEzLDYgKzIxNSw4IEBACiAJCXJldHVybiByOwogCX0KIAorCS8qIGNsZWFyIHdiIG1lbW9yeSAqLworCW1lbXNldCgoY2hhciAqKXJkZXYtPndiLndiLCAwLCBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAJLyogZGlzYWJsZSBldmVudF93cml0ZSBmZW5jZXMgKi8KIAlyZGV2LT53Yi51c2VfZXZlbnQgPSBmYWxzZTsKIAkvKiBkaXNhYmxlZCB2aWEgbW9kdWxlIHBhcmFtICovCkBAIC03NTIsNiArNzU2LDcgQEAKIAlkbWFfYml0cyA9IHJkZXYtPm5lZWRfZG1hMzIgPyAzMiA6IDQwOwogCXIgPSBwY2lfc2V0X2RtYV9tYXNrKHJkZXYtPnBkZXYsIERNQV9CSVRfTUFTSyhkbWFfYml0cykpOwogCWlmIChyKSB7CisJCXJkZXYtPm5lZWRfZG1hMzIgPSB0cnVlOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJyYWRlb246IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCBhZTI0N2VlLi4yOTJmNzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC0yNjQsNiArMjY0LDggQEAKIAkJcmFkZW9uX2JvX3VucmVzZXJ2ZSh3b3JrLT5vbGRfcmJvKTsKIAl9IGVsc2UKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVzZXJ2ZSBidWZmZXIgYWZ0ZXIgZmxpcFxuIik7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmd29yay0+b2xkX3Jiby0+Z2VtX2Jhc2UpOwogCWtmcmVlKHdvcmspOwogfQogCkBAIC0zNzEsNiArMzczLDggQEAKIAluZXdfcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKIAkvKiBzY2hlZHVsZSB1bnBpbiBvZiB0aGUgb2xkIGJ1ZmZlciAqLwogCW9iaiA9IG9sZF9yYWRlb25fZmItPm9iajsKKwkvKiB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBvbGQgb2JqZWN0ICovCisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CiAJcmJvID0gZ2VtX3RvX3JhZGVvbl9ibyhvYmopOwogCXdvcmstPm9sZF9yYm8gPSByYm87CiAJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCByYWRlb25fdW5waW5fd29ya19mdW5jKTsKQEAgLTM3OCwxMiArMzgyLDkgQEAKIAkvKiBXZSBib3Jyb3cgdGhlIGV2ZW50IHNwaW4gbG9jayBmb3IgcHJvdGVjdGluZyB1bnBpbl93b3JrICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmIChyYWRlb25fY3J0Yy0+dW5waW5fd29yaykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKLQkJa2ZyZWUod29yayk7Ci0JCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwotCiAJCURSTV9ERUJVR19EUklWRVIoImZsaXAgcXVldWU6IGNydGMgYWxyZWFkeSBidXN5XG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJciA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2tfZnJlZTsKIAl9CiAJcmFkZW9uX2NydGMtPnVucGluX3dvcmsgPSB3b3JrOwogCXJhZGVvbl9jcnRjLT5kZWZlcnJlZF9mbGlwX2NvbXBsZXRpb24gPSAwOwpAQCAtNDk3LDYgKzQ5OCw4IEBACiBwZmxpcF9jbGVhbnVwOgogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAlyYWRlb25fY3J0Yy0+dW5waW5fd29yayA9IE5VTEw7Cit1bmxvY2tfZnJlZToKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvbGRfcmFkZW9uX2ZiLT5vYmopOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwogCWtmcmVlKHdvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCAxZDMzMDYwLi43M2RmYmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtMTEzLDcgKzExMyw3IEBACiBpbnQgcmFkZW9uX3Rlc3RpbmcgPSAwOwogaW50IHJhZGVvbl9jb25uZWN0b3JfdGFibGUgPSAwOwogaW50IHJhZGVvbl90diA9IDE7Ci1pbnQgcmFkZW9uX2F1ZGlvID0gMTsKK2ludCByYWRlb25fYXVkaW8gPSAwOwogaW50IHJhZGVvbl9kaXNwX3ByaW9yaXR5ID0gMDsKIGludCByYWRlb25faHdfaTJjID0gMDsKIGludCByYWRlb25fcGNpZV9nZW4yID0gMDsKQEAgLTE1MSw3ICsxNTEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyh0diwgIlRWIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQodHYsIHJhZGVvbl90diwgaW50LCAwNDQ0KTsKIAotTU9EVUxFX1BBUk1fREVTQyhhdWRpbywgIkF1ZGlvIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7CitNT0RVTEVfUEFSTV9ERVNDKGF1ZGlvLCAiQXVkaW8gZW5hYmxlICgxID0gZW5hYmxlKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGF1ZGlvLCByYWRlb25fYXVkaW8sIGludCwgMDQ0NCk7CiAKIE1PRFVMRV9QQVJNX0RFU0MoZGlzcF9wcmlvcml0eSwgIkRpc3BsYXkgUHJpb3JpdHkgKDAgPSBhdXRvLCAxID0gbm9ybWFsLCAyID0gaGlnaCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDFiNTU3NTUuLmIyOTM0ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMzY3LDcgKzM2Nyw4IEBACiAJfQogCiAJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSAmJgotCSAgICAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQgfCBBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpKSB7CisJICAgICgocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQgfCBBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHx8CisJICAgICByYWRlb25fZW5jb2Rlcl9pc19kcF9icmlkZ2UoZW5jb2RlcikpKSB7CiAJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2RlcihlbmNvZGVyKTsKIAkJcmFkZW9uX2RwX3NldF9saW5rX2NvbmZpZyhjb25uZWN0b3IsIG1vZGUpOwogCX0KQEAgLTY2MCwyMSArNjYxLDE2IEBACiAJaWYgKHJhZGVvbl9lbmNvZGVyX2lzX2RwX2JyaWRnZShlbmNvZGVyKSkKIAkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RQOwogCisJLyogRFZPIGlzIGFsd2F5cyBEVk8gKi8KKwlpZiAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQgPT0gQVRPTV9FTkNPREVSX01PREVfRFZPKQorCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZPOworCiAJY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoZW5jb2Rlcik7Ci0JaWYgKCFjb25uZWN0b3IpIHsKLQkJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewotCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWToKLQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxOgotCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTI6Ci0JCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0xWVE1BOgotCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EVk8xOgotCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKLQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMToKLQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMjoKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9DUlQ7Ci0JCX0KLQl9CisJLyogaWYgd2UgZG9uJ3QgaGF2ZSBhbiBhY3RpdmUgZGV2aWNlIHlldCwganVzdCB1c2Ugb25lIG9mCisJICogdGhlIGNvbm5lY3RvcnMgdGllZCB0byB0aGUgZW5jb2Rlci4KKwkgKi8KKwlpZiAoIWNvbm5lY3RvcikKKwkJY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXJfaW5pdChlbmNvZGVyKTsKIAlyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogCiAJc3dpdGNoIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSB7CkBAIC05NTQsMTAgKzk1MCwxNSBAQAogCWludCBkcF9sYW5lX2NvdW50ID0gMDsKIAlpbnQgY29ubmVjdG9yX29iamVjdF9pZCA9IDA7CiAJaW50IGlncF9sYW5lX2luZm8gPSAwOworCWludCBkaWdfZW5jb2RlciA9IGRpZy0+ZGlnX2VuY29kZXI7CiAKLQlpZiAoYWN0aW9uID09IEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0lOSVQpCisJaWYgKGFjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9JTklUKSB7CiAJCWNvbm5lY3RvciA9IHJhZGVvbl9nZXRfY29ubmVjdG9yX2Zvcl9lbmNvZGVyX2luaXQoZW5jb2Rlcik7Ci0JZWxzZQorCQkvKiBqdXN0IG5lZWRlZCB0byBhdm9pZCBiYWlsaW5nIGluIHRoZSBlbmNvZGVyIGNoZWNrLiAgdGhlIGVuY29kZXIKKwkJICogaXNuJ3QgdXNlZCBmb3IgaW5pdAorCQkgKi8KKwkJZGlnX2VuY29kZXIgPSAwOworCX0gZWxzZQogCQljb25uZWN0b3IgPSByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2RlcihlbmNvZGVyKTsKIAogCWlmIChjb25uZWN0b3IpIHsKQEAgLTk3Myw3ICs5NzQsNyBAQAogCX0KIAogCS8qIG5vIGRpZyBlbmNvZGVyIGFzc2lnbmVkICovCi0JaWYgKGRpZy0+ZGlnX2VuY29kZXIgPT0gLTEpCisJaWYgKGRpZ19lbmNvZGVyID09IC0xKQogCQlyZXR1cm47CiAKIAlpZiAoYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkKQEAgLTEwMjMsNyArMTAyNCw3IEBACiAKIAkJaWYgKGRpZy0+bGlua2IpCiAJCQlhcmdzLnYzLmFjQ29uZmlnLnVjTGlua1NlbCA9IDE7Ci0JCWlmIChkaWctPmRpZ19lbmNvZGVyICYgMSkKKwkJaWYgKGRpZ19lbmNvZGVyICYgMSkKIAkJCWFyZ3MudjMuYWNDb25maWcudWNFbmNvZGVyU2VsID0gMTsKIAogCQkvKiBTZWxlY3QgdGhlIFBMTCBmb3IgdGhlIFBIWQpAQCAtMTA3Myw3ICsxMDc0LDcgQEAKIAkJCQlhcmdzLnYzLmFjQ29uZmlnLmZEdWFsTGlua0Nvbm5lY3RvciA9IDE7CiAJCX0KIAl9IGVsc2UgaWYgKEFTSUNfSVNfRENFMzIocmRldikpIHsKLQkJYXJncy52Mi5hY0NvbmZpZy51Y0VuY29kZXJTZWwgPSBkaWctPmRpZ19lbmNvZGVyOworCQlhcmdzLnYyLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IGRpZ19lbmNvZGVyOwogCQlpZiAoZGlnLT5saW5rYikKIAkJCWFyZ3MudjIuYWNDb25maWcudWNMaW5rU2VsID0gMTsKIApAQCAtMTA4OSw5ICsxMDkwLDEwIEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChpc19kcCkKKwkJaWYgKGlzX2RwKSB7CiAJCQlhcmdzLnYyLmFjQ29uZmlnLmZDb2hlcmVudE1vZGUgPSAxOwotCQllbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpIHsKKwkJCWFyZ3MudjIuYWNDb25maWcuZkRQQ29ubmVjdG9yID0gMTsKKwkJfSBlbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpIHsKIAkJCWlmIChkaWctPmNvaGVyZW50X21vZGUpCiAJCQkJYXJncy52Mi5hY0NvbmZpZy5mQ29oZXJlbnRNb2RlID0gMTsKIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApCkBAIC0xMTAwLDcgKzExMDIsNyBAQAogCX0gZWxzZSB7CiAJCWFyZ3MudjEudWNDb25maWcgPSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19DTEtTUkNfUFBMTDsKIAotCQlpZiAoZGlnLT5kaWdfZW5jb2RlcikKKwkJaWYgKGRpZ19lbmNvZGVyKQogCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcyX0VOQ09ERVI7CiAJCWVsc2UKIAkJCWFyZ3MudjEudWNDb25maWcgfD0gQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfRElHMV9FTkNPREVSOwpAQCAtMTQzMCw3ICsxNDMyLDExIEBACiAJaWYgKGlzX2RpZykgewogCQlzd2l0Y2ggKG1vZGUpIHsKIAkJY2FzZSBEUk1fTU9ERV9EUE1TX09OOgotCQkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRV9PVVRQVVQsIDAsIDApOworCQkJLyogc29tZSBlYXJseSBkY2UzLjIgYm9hcmRzIGhhdmUgYSBidWcgaW4gdGhlaXIgdHJhbnNtaXR0ZXIgY29udHJvbCB0YWJsZSAqLworCQkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjcxMCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzMwKSkKKwkJCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFLCAwLCAwKTsKKwkJCWVsc2UKKwkJCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFX09VVFBVVCwgMCwgMCk7CiAJCQlpZiAoYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgewogCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2RlcihlbmNvZGVyKTsKIApAQCAtMTUyMSwyNiArMTUyNywyOSBAQAogCX0KIAogCWlmIChleHRfZW5jb2RlcikgewotCQlpbnQgYWN0aW9uOwotCiAJCXN3aXRjaCAobW9kZSkgewogCQljYXNlIERSTV9NT0RFX0RQTVNfT046CiAJCWRlZmF1bHQ6Ci0JCQlpZiAoQVNJQ19JU19EQ0U0MShyZGV2KSkKLQkJCQlhY3Rpb24gPSBFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19FTkFCTEVfT1VUUFVUOwotCQkJZWxzZQotCQkJCWFjdGlvbiA9IEFUT01fRU5BQkxFOworCQkJaWYgKEFTSUNfSVNfRENFNDEocmRldikpIHsKKwkJCQlhdG9tYmlvc19leHRlcm5hbF9lbmNvZGVyX3NldHVwKGVuY29kZXIsIGV4dF9lbmNvZGVyLAorCQkJCQkJCQlFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19FTkFCTEVfT1VUUFVUKTsKKwkJCQlhdG9tYmlvc19leHRlcm5hbF9lbmNvZGVyX3NldHVwKGVuY29kZXIsIGV4dF9lbmNvZGVyLAorCQkJCQkJCQlFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19FTkNPREVSX0JMQU5LSU5HX09GRik7CisJCQl9IGVsc2UKKwkJCQlhdG9tYmlvc19leHRlcm5hbF9lbmNvZGVyX3NldHVwKGVuY29kZXIsIGV4dF9lbmNvZGVyLCBBVE9NX0VOQUJMRSk7CiAJCQlicmVhazsKIAkJY2FzZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlk6CiAJCWNhc2UgRFJNX01PREVfRFBNU19TVVNQRU5EOgogCQljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgotCQkJaWYgKEFTSUNfSVNfRENFNDEocmRldikpCi0JCQkJYWN0aW9uID0gRVhURVJOQUxfRU5DT0RFUl9BQ1RJT05fVjNfRElTQUJMRV9PVVRQVVQ7Ci0JCQllbHNlCi0JCQkJYWN0aW9uID0gQVRPTV9ESVNBQkxFOworCQkJaWYgKEFTSUNfSVNfRENFNDEocmRldikpIHsKKwkJCQlhdG9tYmlvc19leHRlcm5hbF9lbmNvZGVyX3NldHVwKGVuY29kZXIsIGV4dF9lbmNvZGVyLAorCQkJCQkJCQlFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19FTkNPREVSX0JMQU5LSU5HKTsKKwkJCQlhdG9tYmlvc19leHRlcm5hbF9lbmNvZGVyX3NldHVwKGVuY29kZXIsIGV4dF9lbmNvZGVyLAorCQkJCQkJCQlFWFRFUk5BTF9FTkNPREVSX0FDVElPTl9WM19ESVNBQkxFX09VVFBVVCk7CisJCQl9IGVsc2UKKwkJCQlhdG9tYmlvc19leHRlcm5hbF9lbmNvZGVyX3NldHVwKGVuY29kZXIsIGV4dF9lbmNvZGVyLCBBVE9NX0RJU0FCTEUpOwogCQkJYnJlYWs7CiAJCX0KLQkJYXRvbWJpb3NfZXh0ZXJuYWxfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBleHRfZW5jb2RlciwgYWN0aW9uKTsKIAl9CiAKIAlyYWRlb25fYXRvbWJpb3NfZW5jb2Rlcl9kcG1zX3NjcmF0Y2hfcmVncyhlbmNvZGVyLCAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSA/IHRydWUgOiBmYWxzZSk7CkBAIC0xOTk5LDYgKzIwMDgsNjUgQEAKIAlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiB9CiAKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCityYWRlb25fYXRvbV9kaWdfZGV0ZWN0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlciwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IgPSB0b19yYWRlb25fY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9lbmNvZGVyICpleHRfZW5jb2RlciA9IHJhZGVvbl9hdG9tX2dldF9leHRlcm5hbF9lbmNvZGVyKGVuY29kZXIpOworCXUzMiBiaW9zXzBfc2NyYXRjaDsKKworCWlmICghQVNJQ19JU19EQ0U0KHJkZXYpKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOworCisJaWYgKCFleHRfZW5jb2RlcikKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKKworCWlmICgocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVF9TVVBQT1JUKSA9PSAwKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOworCisJLyogbG9hZCBkZXRlY3Qgb24gdGhlIGRwIGJyaWRnZSAqLworCWF0b21iaW9zX2V4dGVybmFsX2VuY29kZXJfc2V0dXAoZW5jb2RlciwgZXh0X2VuY29kZXIsCisJCQkJCUVYVEVSTkFMX0VOQ09ERVJfQUNUSU9OX1YzX0RBQ0xPQURfREVURUNUSU9OKTsKKworCWJpb3NfMF9zY3JhdGNoID0gUlJFRzMyKFI2MDBfQklPU18wX1NDUkFUQ0gpOworCisJRFJNX0RFQlVHX0tNUygiQmlvcyAwIHNjcmF0Y2ggJXggJTA4eFxuIiwgYmlvc18wX3NjcmF0Y2gsIHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzKTsKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGV2aWNlcyAmIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCkgeworCQlpZiAoYmlvc18wX3NjcmF0Y2ggJiBBVE9NX1MwX0NSVDFfTUFTSykKKwkJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwl9CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgJiBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQpIHsKKwkJaWYgKGJpb3NfMF9zY3JhdGNoICYgQVRPTV9TMF9DUlQyX01BU0spCisJCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJfQorCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkgeworCQlpZiAoYmlvc18wX3NjcmF0Y2ggJiAoQVRPTV9TMF9DVl9NQVNLfEFUT01fUzBfQ1ZfTUFTS19BKSkKKwkJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwl9CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgJiBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkgeworCQlpZiAoYmlvc18wX3NjcmF0Y2ggJiAoQVRPTV9TMF9UVjFfQ09NUE9TSVRFIHwgQVRPTV9TMF9UVjFfQ09NUE9TSVRFX0EpKQorCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOyAvKiBDVFYgKi8KKwkJZWxzZSBpZiAoYmlvc18wX3NjcmF0Y2ggJiAoQVRPTV9TMF9UVjFfU1ZJREVPIHwgQVRPTV9TMF9UVjFfU1ZJREVPX0EpKQorCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOyAvKiBTVFYgKi8KKwl9CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCit2b2lkCityYWRlb25fYXRvbV9leHRfZW5jb2Rlcl9zZXR1cF9kZGMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZXh0X2VuY29kZXIgPSByYWRlb25fYXRvbV9nZXRfZXh0ZXJuYWxfZW5jb2RlcihlbmNvZGVyKTsKKworCWlmIChleHRfZW5jb2RlcikKKwkJLyogZGRjX3NldHVwIG9uIHRoZSBkcCBicmlkZ2UgKi8KKwkJYXRvbWJpb3NfZXh0ZXJuYWxfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBleHRfZW5jb2RlciwKKwkJCQkJCUVYVEVSTkFMX0VOQ09ERVJfQUNUSU9OX1YzX0REQ19TRVRVUCk7CisKK30KKwogc3RhdGljIHZvaWQgcmFkZW9uX2F0b21fZW5jb2Rlcl9wcmVwYXJlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CkBAIC0yMTYyLDcgKzIyMzAsNyBAQAogCS5tb2RlX3NldCA9IHJhZGVvbl9hdG9tX2VuY29kZXJfbW9kZV9zZXQsCiAJLmNvbW1pdCA9IHJhZGVvbl9hdG9tX2VuY29kZXJfY29tbWl0LAogCS5kaXNhYmxlID0gcmFkZW9uX2F0b21fZW5jb2Rlcl9kaXNhYmxlLAotCS8qIG5vIGRldGVjdCBmb3IgVE1EUy9MVkRTIHlldCAqLworCS5kZXRlY3QgPSByYWRlb25fYXRvbV9kaWdfZGV0ZWN0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgcmFkZW9uX2F0b21fZGFjX2hlbHBlcl9mdW5jcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmFtaWx5LmgKaW5kZXggNmYxZDllNS4uZWMyZjFlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmFtaWx5LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmFtaWx5LmgKQEAgLTgxLDYgKzgxLDggQEAKIAlDSElQX0NZUFJFU1MsCiAJQ0hJUF9IRU1MT0NLLAogCUNISVBfUEFMTSwKKwlDSElQX1NVTU8sCisJQ0hJUF9TVU1PMiwKIAlDSElQX0JBUlRTLAogCUNISVBfVFVSS1MsCiAJQ0hJUF9DQUlDT1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmVuY2UuYwppbmRleCAxZjgyMjk0Li4wMjFkMmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mZW5jZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZlbmNlLmMKQEAgLTQwLDYgKzQwLDM1IEBACiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAicmFkZW9uX3RyYWNlLmgiCiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9mZW5jZV93cml0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHNlcSkKK3sKKwlpZiAocmRldi0+d2IuZW5hYmxlZCkgeworCQl1MzIgc2NyYXRjaF9pbmRleDsKKwkJaWYgKHJkZXYtPndiLnVzZV9ldmVudCkKKwkJCXNjcmF0Y2hfaW5kZXggPSBSNjAwX1dCX0VWRU5UX09GRlNFVCArIHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZyAtIHJkZXYtPnNjcmF0Y2gucmVnX2Jhc2U7CisJCWVsc2UKKwkJCXNjcmF0Y2hfaW5kZXggPSBSQURFT05fV0JfU0NSQVRDSF9PRkZTRVQgKyByZGV2LT5mZW5jZV9kcnYuc2NyYXRjaF9yZWcgLSByZGV2LT5zY3JhdGNoLnJlZ19iYXNlOworCQlyZGV2LT53Yi53YltzY3JhdGNoX2luZGV4LzRdID0gY3B1X3RvX2xlMzIoc2VxKTs7CisJfSBlbHNlCisJCVdSRUczMihyZGV2LT5mZW5jZV9kcnYuc2NyYXRjaF9yZWcsIHNlcSk7Cit9CisKK3N0YXRpYyB1MzIgcmFkZW9uX2ZlbmNlX3JlYWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIHNlcTsKKworCWlmIChyZGV2LT53Yi5lbmFibGVkKSB7CisJCXUzMiBzY3JhdGNoX2luZGV4OworCQlpZiAocmRldi0+d2IudXNlX2V2ZW50KQorCQkJc2NyYXRjaF9pbmRleCA9IFI2MDBfV0JfRVZFTlRfT0ZGU0VUICsgcmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnIC0gcmRldi0+c2NyYXRjaC5yZWdfYmFzZTsKKwkJZWxzZQorCQkJc2NyYXRjaF9pbmRleCA9IFJBREVPTl9XQl9TQ1JBVENIX09GRlNFVCArIHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZyAtIHJkZXYtPnNjcmF0Y2gucmVnX2Jhc2U7CisJCXNlcSA9IGxlMzJfdG9fY3B1KHJkZXYtPndiLndiW3NjcmF0Y2hfaW5kZXgvNF0pOworCX0gZWxzZQorCQlzZXEgPSBSUkVHMzIocmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnKTsKKwlyZXR1cm4gc2VxOworfQorCiBpbnQgcmFkZW9uX2ZlbmNlX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewogCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwpAQCAtNTAsMTIgKzc5LDEyIEBACiAJCXJldHVybiAwOwogCX0KIAlmZW5jZS0+c2VxID0gYXRvbWljX2FkZF9yZXR1cm4oMSwgJnJkZXYtPmZlbmNlX2Rydi5zZXEpOwotCWlmICghcmRldi0+Y3AucmVhZHkpIHsKKwlpZiAoIXJkZXYtPmNwLnJlYWR5KQogCQkvKiBGSVhNRTogY3AgaXMgbm90IHJ1bm5pbmcgYXNzdW1lIGV2ZXJ5dGhpbmdzIGlzIGRvbmUgcmlnaHQKIAkJICogYXdheQogCQkgKi8KLQkJV1JFRzMyKHJkZXYtPmZlbmNlX2Rydi5zY3JhdGNoX3JlZywgZmVuY2UtPnNlcSk7Ci0JfSBlbHNlCisJCXJhZGVvbl9mZW5jZV93cml0ZShyZGV2LCBmZW5jZS0+c2VxKTsKKwllbHNlCiAJCXJhZGVvbl9mZW5jZV9yaW5nX2VtaXQocmRldiwgZmVuY2UpOwogCiAJdHJhY2VfcmFkZW9uX2ZlbmNlX2VtaXQocmRldi0+ZGRldiwgZmVuY2UtPnNlcSk7CkBAIC03MywxNSArMTAyLDcgQEAKIAlib29sIHdha2UgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIGNqaWZmaWVzOwogCi0JaWYgKHJkZXYtPndiLmVuYWJsZWQpIHsKLQkJdTMyIHNjcmF0Y2hfaW5kZXg7Ci0JCWlmIChyZGV2LT53Yi51c2VfZXZlbnQpCi0JCQlzY3JhdGNoX2luZGV4ID0gUjYwMF9XQl9FVkVOVF9PRkZTRVQgKyByZGV2LT5mZW5jZV9kcnYuc2NyYXRjaF9yZWcgLSByZGV2LT5zY3JhdGNoLnJlZ19iYXNlOwotCQllbHNlCi0JCQlzY3JhdGNoX2luZGV4ID0gUkFERU9OX1dCX1NDUkFUQ0hfT0ZGU0VUICsgcmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnIC0gcmRldi0+c2NyYXRjaC5yZWdfYmFzZTsKLQkJc2VxID0gbGUzMl90b19jcHUocmRldi0+d2Iud2Jbc2NyYXRjaF9pbmRleC80XSk7Ci0JfSBlbHNlCi0JCXNlcSA9IFJSRUczMihyZGV2LT5mZW5jZV9kcnYuc2NyYXRjaF9yZWcpOworCXNlcSA9IHJhZGVvbl9mZW5jZV9yZWFkKHJkZXYpOwogCWlmIChzZXEgIT0gcmRldi0+ZmVuY2VfZHJ2Lmxhc3Rfc2VxKSB7CiAJCXJkZXYtPmZlbmNlX2Rydi5sYXN0X3NlcSA9IHNlcTsKIAkJcmRldi0+ZmVuY2VfZHJ2Lmxhc3RfamlmZmllcyA9IGppZmZpZXM7CkBAIC0yNTEsNyArMjcyLDcgQEAKIAkJCXIgPSByYWRlb25fZ3B1X3Jlc2V0KHJkZXYpOwogCQkJaWYgKHIpCiAJCQkJcmV0dXJuIHI7Ci0JCQlXUkVHMzIocmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnLCBmZW5jZS0+c2VxKTsKKwkJCXJhZGVvbl9mZW5jZV93cml0ZShyZGV2LCBmZW5jZS0+c2VxKTsKIAkJCXJkZXYtPmdwdV9sb2NrdXAgPSBmYWxzZTsKIAkJfQogCQl0aW1lb3V0ID0gUkFERU9OX0ZFTkNFX0pJRkZJRVNfVElNRU9VVDsKQEAgLTM1MSw3ICszNzIsNyBAQAogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcmRldi0+ZmVuY2VfZHJ2LmxvY2ssIGlycV9mbGFncyk7CiAJCXJldHVybiByOwogCX0KLQlXUkVHMzIocmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnLCAwKTsKKwlyYWRlb25fZmVuY2Vfd3JpdGUocmRldiwgMCk7CiAJYXRvbWljX3NldCgmcmRldi0+ZmVuY2VfZHJ2LnNlcSwgMCk7CiAJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPmZlbmNlX2Rydi5jcmVhdGVkKTsKIAlJTklUX0xJU1RfSEVBRCgmcmRldi0+ZmVuY2VfZHJ2LmVtaXRlZCk7CkBAIC0zOTEsNyArNDEyLDcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZTsKIAogCXNlcV9wcmludGYobSwgIkxhc3Qgc2lnbmFsZWQgZmVuY2UgMHglMDhYXG4iLAotCQkgICBSUkVHMzIocmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnKSk7CisJCSAgIHJhZGVvbl9mZW5jZV9yZWFkKHJkZXYpKTsKIAlpZiAoIWxpc3RfZW1wdHkoJnJkZXYtPmZlbmNlX2Rydi5lbWl0ZWQpKSB7CiAJCSAgIGZlbmNlID0gbGlzdF9lbnRyeShyZGV2LT5mZW5jZV9kcnYuZW1pdGVkLnByZXYsCiAJCQkJICAgICAgc3RydWN0IHJhZGVvbl9mZW5jZSwgbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggOTc3YTM0MS4uNmRmNGUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtNDgzLDYgKzQ4Myw4IEBACiBleHRlcm4gdm9pZCBhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCQkgICBpbnQgYWN0aW9uLCB1aW50OF90IGxhbmVfbnVtLAogCQkJCQkgICB1aW50OF90IGxhbmVfc2V0KTsKK2V4dGVybiB2b2lkIHJhZGVvbl9hdG9tX2V4dF9lbmNvZGVyX3NldHVwX2RkYyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOworZXh0ZXJuIHN0cnVjdCBkcm1fZW5jb2RlciAqcmFkZW9uX2F0b21fZ2V0X2V4dGVybmFsX2VuY29kZXIoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsKIGV4dGVybiBpbnQgcmFkZW9uX2RwX2kyY19hdXhfY2goc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgbW9kZSwKIAkJCQl1OCB3cml0ZV9ieXRlLCB1OCAqcmVhZF9ieXRlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKaW5kZXggODZlZGExZS4uYWFhMTlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCkBAIC00ODcsNiArNDg3LDcgQEAKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjZYWDoKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjc3MDoKIAljYXNlIFRIRVJNQUxfVFlQRV9FVkVSR1JFRU46CisJY2FzZSBUSEVSTUFMX1RZUEVfTkk6CiAJY2FzZSBUSEVSTUFMX1RZUEVfU1VNTzoKIAkJcmRldi0+cG0uaW50X2h3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihyZGV2LT5kZXYpOwogCQlpZiAoSVNfRVJSKHJkZXYtPnBtLmludF9od21vbl9kZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKaW5kZXggOTJmMTkwMC4uZWE0OTc1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjYwMApAQCAtNzU4LDYgKzc1OCw1IEBACiAweDAwMDA5NzE0IFZDX0VOSEFOQ0UKIDB4MDAwMDk4MzAgREJfREVCVUcKIDB4MDAwMDk4MzggREJfV0FURVJNQVJLUwotMHgwMDAyOEQyOCBEQl9TUkVTVUxUU19DT01QQVJFX1NUQVRFMAogMHgwMDAyOEQ0NCBEQl9BTFBIQV9UT19NQVNLCiAweDAwMDA5NzAwIFZDX0NOVEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCBlZjhhNWJhLi42ZjUwOGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC0xMDUsNiArMTA1LDkgQEAKIAlzdHJ1Y3QgcmFkZW9uX3ZvbHRhZ2UgKnZvbHRhZ2UgPSAmcHMtPmNsb2NrX2luZm9bcmVxX2NtX2lkeF0udm9sdGFnZTsKIAogCWlmICgodm9sdGFnZS0+dHlwZSA9PSBWT0xUQUdFX1NXKSAmJiB2b2x0YWdlLT52b2x0YWdlKSB7CisJCS8qIDB4ZmYwMSBpcyBhIGZsYWcgcmF0aGVyIHRoZW4gYW4gYWN0dWFsIHZvbHRhZ2UgKi8KKwkJaWYgKHZvbHRhZ2UtPnZvbHRhZ2UgPT0gMHhmZjAxKQorCQkJcmV0dXJuOwogCQlpZiAodm9sdGFnZS0+dm9sdGFnZSAhPSByZGV2LT5wbS5jdXJyZW50X3ZkZGMpIHsKIAkJCXJhZGVvbl9hdG9tX3NldF92b2x0YWdlKHJkZXYsIHZvbHRhZ2UtPnZvbHRhZ2UsIFNFVF9WT0xUQUdFX1RZUEVfQVNJQ19WRERDKTsKIAkJCXJkZXYtPnBtLmN1cnJlbnRfdmRkYyA9IHZvbHRhZ2UtPnZvbHRhZ2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9iY2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCmluZGV4IGJmNWY4M2UuLmNiMWVlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCkBAIC02NDcsOSArNjQ3LDYgQEAKIAlyZXQgPSBkcm1fYWRkbWFwKGRldiwgYXBlcnR1cmVfYmFzZSwgU0FWQUdFX0FQRVJUVVJFX1NJWkUsCiAJCQkgX0RSTV9GUkFNRV9CVUZGRVIsIF9EUk1fV1JJVEVfQ09NQklOSU5HLAogCQkJICZkZXZfcHJpdi0+YXBlcnR1cmUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwppbmRleCA2N2QyYTc1Li4zNmNhNDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL0tjb25maWcKQEAgLTMwNSw2ICszMDUsNyBAQAogCSAgLSAzTSBQQ1QgdG91Y2ggc2NyZWVucwogCSAgLSBBY3Rpb25TdGFyIGR1YWwgdG91Y2ggcGFuZWxzCiAJICAtIENhbmRvIGR1YWwgdG91Y2ggcGFuZWxzCisJICAtIENodW5naHdhIHBhbmVscwogCSAgLSBDVlRvdWNoIHBhbmVscwogCSAgLSBDeXByZXNzIFRydWVUb3VjaCBwYW5lbHMKIAkgIC0gRWxvIFRvdWNoU3lzdGVtcyBJbnRlbGxpVG91Y2ggUGx1cyBwYW5lbHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IGM5NTdjNGIuLmY3NDQwZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMTM1OSw2ICsxMzU5LDcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0hFUlJZLCBVU0JfREVWSUNFX0lEX0NIRVJSWV9DWU1PVElPTl9TT0xBUikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0hJQ09OWSwgVVNCX0RFVklDRV9JRF9DSElDT05ZX1RBQ1RJQ0FMX1BBRCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0hJQ09OWSwgVVNCX0RFVklDRV9JRF9DSElDT05ZX1dJUkVMRVNTKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSFVOR0hXQVQsIFVTQl9ERVZJQ0VfSURfQ0hVTkdIV0FUX01VTFRJVE9VQ0gpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NSRUFUSVZFTEFCUywgVVNCX0RFVklDRV9JRF9QUk9ESUtFWVNfUENNSURJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DVlRPVUNILCBVU0JfREVWSUNFX0lEX0NWVE9VQ0hfU0NSRUVOKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DWVBSRVNTLCBVU0JfREVWSUNFX0lEX0NZUFJFU1NfQkFSQ09ERV8xKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCmluZGV4IDBiMzc0YTYuLmFlY2I1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAorKysgYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKQEAgLTE3Myw2ICsxNzMsOSBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0NISUNPTllfTVVMVElfVE9VQ0gJMHhiMTlkCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hJQ09OWV9XSVJFTEVTUwkweDA2MTgKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX0NIVU5HSFdBVAkJMHgyMjQ3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQ0hVTkdIV0FUX01VTFRJVE9VQ0gJMHgwMDAxCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9DSURDCQkweDE2NzcKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0NNRURJQQkJMHgwZDhjCkBAIC02MjIsNiArNjI1LDcgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9VQ0xPR0lDCQkweDU1NDMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9VQ0xPR0lDX1RBQkxFVF9QRjEyMDkJMHgwMDQyCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfS05BNQkweDYwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9VQ0xPR0lDX1RBQkxFVF9UV0E2MAkweDAwNjQKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9VQ0xPR0lDX1RBQkxFVF9XUDQwMzBVCTB4MDAwMwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1VDTE9HSUNfVEFCTEVUX1dQNTU0MFUJMHgwMDA0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfV1A4MDYwVQkweDAwMDUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMgYi9kcml2ZXJzL2hpZC9oaWQtbWFnaWNtb3VzZS5jCmluZGV4IGE1ZWRhNGMuLjBlYzkxYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1tYWdpY21vdXNlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1hZ2ljbW91c2UuYwpAQCAtNTAxLDE3ICs1MDEsOSBAQAogCX0KIAlyZXBvcnQtPnNpemUgPSA2OwogCi0JLyoKLQkgKiBUaGUgZGV2aWNlIHJlcG9uZHMgd2l0aCAnaW52YWxpZCByZXBvcnQgaWQnIHdoZW4gZmVhdHVyZQotCSAqIHJlcG9ydCBzd2l0Y2hpbmcgaXQgaW50byBtdWx0aXRvdWNoIG1vZGUgaXMgc2VudCB0byBpdC4KLQkgKgotCSAqIFRoaXMgcmVzdWx0cyBpbiAtRUlPIGZyb20gdGhlIF9yYXcgbG93LWxldmVsIHRyYW5zcG9ydCBjYWxsYmFjaywKLQkgKiBidXQgdGhlcmUgc2VlbXMgdG8gYmUgbm8gb3RoZXIgd2F5IG9mIHN3aXRjaGluZyB0aGUgbW9kZS4KLQkgKiBUaHVzIHRoZSBzdXBlci11Z2x5IGhhY2t5IHN1Y2Nlc3MgY2hlY2sgYmVsb3cuCi0JICovCiAJcmV0ID0gaGRldi0+aGlkX291dHB1dF9yYXdfcmVwb3J0KGhkZXYsIGZlYXR1cmUsIHNpemVvZihmZWF0dXJlKSwKIAkJCUhJRF9GRUFUVVJFX1JFUE9SVCk7Ci0JaWYgKHJldCAhPSAtRUlPKSB7CisJaWYgKHJldCAhPSBzaXplb2YoZmVhdHVyZSkpIHsKIAkJaGlkX2VycihoZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgdG91Y2ggZGF0YSAoJWQpXG4iLCByZXQpOwogCQlnb3RvIGVycl9zdG9wX2h3OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tdWx0aXRvdWNoLmMgYi9kcml2ZXJzL2hpZC9oaWQtbXVsdGl0b3VjaC5jCmluZGV4IGVjZDRkMmRiLi4wYjJkY2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbXVsdGl0b3VjaC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1tdWx0aXRvdWNoLmMKQEAgLTY0LDYgKzY0LDcgQEAKIAlzdHJ1Y3QgbXRfY2xhc3MgKm10Y2xhc3M7CS8qIG91ciBtdCBkZXZpY2UgY2xhc3MgKi8KIAl1bnNpZ25lZCBsYXN0X2ZpZWxkX2luZGV4OwkvKiBsYXN0IGZpZWxkIGluZGV4IG9mIHRoZSByZXBvcnQgKi8KIAl1bnNpZ25lZCBsYXN0X3Nsb3RfZmllbGQ7CS8qIHRoZSBsYXN0IGZpZWxkIG9mIGEgc2xvdCAqLworCWludCBsYXN0X210X2NvbGxlY3Rpb247CS8qIGxhc3Qga25vd24gbXQtcmVsYXRlZCBjb2xsZWN0aW9uICovCiAJX19zOCBpbnB1dG1vZGU7CQkvKiBJbnB1dE1vZGUgSElEIGZlYXR1cmUsIC0xIGlmIG5vbi1leGlzdGVudCAqLwogCV9fdTggbnVtX3JlY2VpdmVkOwkvKiBob3cgbWFueSBjb250YWN0cyB3ZSByZWNlaXZlZCAqLwogCV9fdTggbnVtX2V4cGVjdGVkOwkvKiBleHBlY3RlZCBsYXN0IGNvbnRhY3QgaW5kZXggKi8KQEAgLTIyNSw4ICsyMjYsMTAgQEAKIAkJCQljbHMtPnNuX21vdmUpOwogCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCiAJCQlzZXRfYWJzKGhpLT5pbnB1dCwgQUJTX1gsIGZpZWxkLCBjbHMtPnNuX21vdmUpOwotCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7Ci0JCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5pbmRleDsKKwkJCWlmICh0ZC0+bGFzdF9tdF9jb2xsZWN0aW9uID09IHVzYWdlLT5jb2xsZWN0aW9uX2luZGV4KSB7CisJCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7CisJCQkJdGQtPmxhc3RfZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CisJCQl9CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSBISURfR0RfWToKIAkJCWlmIChxdWlya3MgJiBNVF9RVUlSS19FR0FMQVhfWFlaX0ZJWFVQKQpAQCAtMjM3LDggKzI0MCwxMCBAQAogCQkJCWNscy0+c25fbW92ZSk7CiAJCQkvKiB0b3VjaHNjcmVlbiBlbXVsYXRpb24gKi8KIAkJCXNldF9hYnMoaGktPmlucHV0LCBBQlNfWSwgZmllbGQsIGNscy0+c25fbW92ZSk7Ci0JCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKLQkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OworCQkJaWYgKHRkLT5sYXN0X210X2NvbGxlY3Rpb24gPT0gdXNhZ2UtPmNvbGxlY3Rpb25faW5kZXgpIHsKKwkJCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKKwkJCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5pbmRleDsKKwkJCX0KIAkJCXJldHVybiAxOwogCQl9CiAJCXJldHVybiAwOwpAQCAtMjQ2LDMxICsyNTEsNDAgQEAKIAljYXNlIEhJRF9VUF9ESUdJVElaRVI6CiAJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewogCQljYXNlIEhJRF9ER19JTlJBTkdFOgotCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7Ci0JCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5pbmRleDsKKwkJCWlmICh0ZC0+bGFzdF9tdF9jb2xsZWN0aW9uID09IHVzYWdlLT5jb2xsZWN0aW9uX2luZGV4KSB7CisJCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7CisJCQkJdGQtPmxhc3RfZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CisJCQl9CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSBISURfREdfQ09ORklERU5DRToKLQkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOwotCQkJdGQtPmxhc3RfZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CisJCQlpZiAodGQtPmxhc3RfbXRfY29sbGVjdGlvbiA9PSB1c2FnZS0+Y29sbGVjdGlvbl9pbmRleCkgeworCQkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOworCQkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OworCQkJfQogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0RHX1RJUFNXSVRDSDoKIAkJCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCBCVE5fVE9VQ0gpOwogCQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaGktPmlucHV0LCBFVl9LRVksIEJUTl9UT1VDSCk7Ci0JCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKLQkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OworCQkJaWYgKHRkLT5sYXN0X210X2NvbGxlY3Rpb24gPT0gdXNhZ2UtPmNvbGxlY3Rpb25faW5kZXgpIHsKKwkJCQl0ZC0+bGFzdF9zbG90X2ZpZWxkID0gdXNhZ2UtPmhpZDsKKwkJCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5pbmRleDsKKwkJCX0KIAkJCXJldHVybiAxOwogCQljYXNlIEhJRF9ER19DT05UQUNUSUQ6CiAJCQlpbnB1dF9tdF9pbml0X3Nsb3RzKGhpLT5pbnB1dCwgdGQtPm1heGNvbnRhY3RzKTsKIAkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOwogCQkJdGQtPmxhc3RfZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CisJCQl0ZC0+bGFzdF9tdF9jb2xsZWN0aW9uID0gdXNhZ2UtPmNvbGxlY3Rpb25faW5kZXg7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSBISURfREdfV0lEVEg6CiAJCQloaWRfbWFwX3VzYWdlKGhpLCB1c2FnZSwgYml0LCBtYXgsCiAJCQkJCUVWX0FCUywgQUJTX01UX1RPVUNIX01BSk9SKTsKIAkJCXNldF9hYnMoaGktPmlucHV0LCBBQlNfTVRfVE9VQ0hfTUFKT1IsIGZpZWxkLAogCQkJCWNscy0+c25fd2lkdGgpOwotCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7Ci0JCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5pbmRleDsKKwkJCWlmICh0ZC0+bGFzdF9tdF9jb2xsZWN0aW9uID09IHVzYWdlLT5jb2xsZWN0aW9uX2luZGV4KSB7CisJCQkJdGQtPmxhc3Rfc2xvdF9maWVsZCA9IHVzYWdlLT5oaWQ7CisJCQkJdGQtPmxhc3RfZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CisJCQl9CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSBISURfREdfSEVJR0hUOgogCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LApAQCAtMjc5LDggKzI5MywxMCBAQAogCQkJCWNscy0+c25faGVpZ2h0KTsKIAkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGhpLT5pbnB1dCwKIAkJCQkJQUJTX01UX09SSUVOVEFUSU9OLCAwLCAxLCAwLCAwKTsKLQkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOwotCQkJdGQtPmxhc3RfZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CisJCQlpZiAodGQtPmxhc3RfbXRfY29sbGVjdGlvbiA9PSB1c2FnZS0+Y29sbGVjdGlvbl9pbmRleCkgeworCQkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOworCQkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OworCQkJfQogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0RHX1RJUFBSRVNTVVJFOgogCQkJaWYgKHF1aXJrcyAmIE1UX1FVSVJLX0VHQUxBWF9YWVpfRklYVVApCkBAIC0yOTIsMTYgKzMwOCwyMCBAQAogCQkJLyogdG91Y2hzY3JlZW4gZW11bGF0aW9uICovCiAJCQlzZXRfYWJzKGhpLT5pbnB1dCwgQUJTX1BSRVNTVVJFLCBmaWVsZCwKIAkJCQljbHMtPnNuX3ByZXNzdXJlKTsKLQkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOwotCQkJdGQtPmxhc3RfZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CisJCQlpZiAodGQtPmxhc3RfbXRfY29sbGVjdGlvbiA9PSB1c2FnZS0+Y29sbGVjdGlvbl9pbmRleCkgeworCQkJCXRkLT5sYXN0X3Nsb3RfZmllbGQgPSB1c2FnZS0+aGlkOworCQkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OworCQkJfQogCQkJcmV0dXJuIDE7CiAJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKLQkJCXRkLT5sYXN0X2ZpZWxkX2luZGV4ID0gZmllbGQtPmluZGV4OworCQkJaWYgKHRkLT5sYXN0X210X2NvbGxlY3Rpb24gPT0gdXNhZ2UtPmNvbGxlY3Rpb25faW5kZXgpCisJCQkJdGQtPmxhc3RfZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSBISURfREdfQ09OVEFDVE1BWDoKIAkJCS8qIHdlIGRvbid0IHNldCB0ZC0+bGFzdF9zbG90X2ZpZWxkIGFzIGNvbnRhY3Rjb3VudCBhbmQKIAkJCSAqIGNvbnRhY3QgbWF4IGFyZSBnbG9iYWwgdG8gdGhlIHJlcG9ydCAqLwotCQkJdGQtPmxhc3RfZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CisJCQlpZiAodGQtPmxhc3RfbXRfY29sbGVjdGlvbiA9PSB1c2FnZS0+Y29sbGVjdGlvbl9pbmRleCkKKwkJCQl0ZC0+bGFzdF9maWVsZF9pbmRleCA9IGZpZWxkLT5pbmRleDsKIAkJCXJldHVybiAtMTsKIAkJfQogCQkvKiBsZXQgaGlkLWlucHV0IGRlY2lkZSBmb3IgdGhlIG90aGVycyAqLwpAQCAtNTE2LDYgKzUzNiw3IEBACiAJfQogCXRkLT5tdGNsYXNzID0gbXRjbGFzczsKIAl0ZC0+aW5wdXRtb2RlID0gLTE7CisJdGQtPmxhc3RfbXRfY29sbGVjdGlvbiA9IC0xOwogCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCB0ZCk7CiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CkBAIC01OTMsNiArNjE0LDExIEBACiAJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ0FORE8sCiAJCQlVU0JfREVWSUNFX0lEX0NBTkRPX01VTFRJX1RPVUNIXzE1XzYpIH0sCiAKKwkvKiBDaHVuZ2h3YSBUZWxlY29tIHRvdWNoIHBhbmVscyAqLworCXsgIC5kcml2ZXJfZGF0YSA9IE1UX0NMU19ERUZBVUxULAorCQlISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NIVU5HSFdBVCwKKwkJCVVTQl9ERVZJQ0VfSURfQ0hVTkdIV0FUX01VTFRJVE9VQ0gpIH0sCisKIAkvKiBDVlRvdWNoIHBhbmVscyAqLwogCXsgLmRyaXZlcl9kYXRhID0gTVRfQ0xTX0RFRkFVTFQsCiAJCUhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ1ZUT1VDSCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCmluZGV4IDBlMzBiMTQuLjYyMTk1OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwpAQCAtNzQsNiArNzQsNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9VQ0xPR0lDLCBVU0JfREVWSUNFX0lEX1VDTE9HSUNfVEFCTEVUX1BGMTIwOSwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1VDTE9HSUMsIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfV1A0MDMwVSwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCiAJeyBVU0JfVkVORE9SX0lEX1VDTE9HSUMsIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfS05BNSwgSElEX1FVSVJLX01VTFRJX0lOUFVUIH0sCisJeyBVU0JfVkVORE9SX0lEX1VDTE9HSUMsIFVTQl9ERVZJQ0VfSURfVUNMT0dJQ19UQUJMRVRfVFdBNjAsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9VQ0xPR0lDLCBVU0JfREVWSUNFX0lEX1VDTE9HSUNfVEFCTEVUX1dQNTU0MFUsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9VQ0xPR0lDLCBVU0JfREVWSUNFX0lEX1VDTE9HSUNfVEFCTEVUX1dQODA2MFUsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XQUxUT1AsIFVTQl9ERVZJQ0VfSURfV0FMVE9QX01FRElBX1RBQkxFVF8xMF82X0lOQ0gsIEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IGZmM2M2NDQuLjdjMTE4OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTI0OCwxMiArMjQ4LDE1IEBACiAJCQl1c2JoaWRfY2xvc2UobGlzdC0+aGlkZGV2LT5oaWQpOwogCQkJdXNiaGlkX3B1dF9wb3dlcihsaXN0LT5oaWRkZXYtPmhpZCk7CiAJCX0gZWxzZSB7CisJCQltdXRleF91bmxvY2soJmxpc3QtPmhpZGRldi0+ZXhpc3RhbmNlbG9jayk7CiAJCQlrZnJlZShsaXN0LT5oaWRkZXYpOworCQkJa2ZyZWUobGlzdCk7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAotCWtmcmVlKGxpc3QpOwogCW11dGV4X3VubG9jaygmbGlzdC0+aGlkZGV2LT5leGlzdGFuY2Vsb2NrKTsKKwlrZnJlZShsaXN0KTsKIAogCXJldHVybiAwOwogfQpAQCAtOTIzLDEwICs5MjYsMTEgQEAKIAl1c2JfZGVyZWdpc3Rlcl9kZXYodXNiaGlkLT5pbnRmLCAmaGlkZGV2X2NsYXNzKTsKIAogCWlmIChoaWRkZXYtPm9wZW4pIHsKKwkJbXV0ZXhfdW5sb2NrKCZoaWRkZXYtPmV4aXN0YW5jZWxvY2spOwogCQl1c2JoaWRfY2xvc2UoaGlkZGV2LT5oaWQpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmhpZGRldi0+d2FpdCk7CiAJfSBlbHNlIHsKKwkJbXV0ZXhfdW5sb2NrKCZoaWRkZXYtPmV4aXN0YW5jZWxvY2spOwogCQlrZnJlZShoaWRkZXYpOwogCX0KLQltdXRleF91bmxvY2soJmhpZGRldi0+ZXhpc3RhbmNlbG9jayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jIGIvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYwppbmRleCBiNWU4OTIwLi5kY2I3OGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKQEAgLTI2OCw2ICsyNjgsNyBAQAogc3RhdGljIHZvaWQgYXRrX2luaXRfYXR0cmlidXRlKHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpuYW1lLAogCQlzeXNmc19zaG93X2Z1bmMgc2hvdykKIHsKKwlzeXNmc19hdHRyX2luaXQoJmF0dHItPmF0dHIpOwogCWF0dHItPmF0dHIubmFtZSA9IG5hbWU7CiAJYXR0ci0+YXR0ci5tb2RlID0gMDQ0NDsKIAlhdHRyLT5zaG93ID0gc2hvdzsKQEAgLTExODgsMTkgKzExODksMTUgQEAKIAlpbnQgZXJyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmZGF0YS0+c2Vuc29yX2xpc3QsIGxpc3QpIHsKLQkJc3lzZnNfYXR0cl9pbml0KCZzLT5pbnB1dF9hdHRyLmF0dHIpOwogCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGF0YS0+aHdtb25fZGV2LCAmcy0+aW5wdXRfYXR0cik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQlzeXNmc19hdHRyX2luaXQoJnMtPmxhYmVsX2F0dHIuYXR0cik7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkYXRhLT5od21vbl9kZXYsICZzLT5sYWJlbF9hdHRyKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXN5c2ZzX2F0dHJfaW5pdCgmcy0+bGltaXQxX2F0dHIuYXR0cik7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkYXRhLT5od21vbl9kZXYsICZzLT5saW1pdDFfYXR0cik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQlzeXNmc19hdHRyX2luaXQoJnMtPmxpbWl0Ml9hdHRyLmF0dHIpOwogCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGF0YS0+aHdtb25fZGV2LCAmcy0+bGltaXQyX2F0dHIpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYyBiL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYwppbmRleCBkZTNkMjQ2Li4wMDcwZDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKKysrIGIvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCkBAIC05Nyw5ICs5Nyw3IEBACiBzdHJ1Y3QgcGRldl9lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0JdW5zaWduZWQgaW50IGNwdTsKIAl1MTYgcGh5c19wcm9jX2lkOwotCXUxNiBjcHVfY29yZV9pZDsKIH07CiAKIHN0YXRpYyBMSVNUX0hFQUQocGRldl9saXN0KTsKQEAgLTI5Niw3ICsyOTQsNyBAQAogCQkgKiBJZiB0aGUgVGpNYXggaXMgbm90IHBsYXVzaWJsZSwgYW4gYXNzdW1wdGlvbgogCQkgKiB3aWxsIGJlIHVzZWQKIAkJICovCi0JCWlmICh2YWwgPiA4MCAmJiB2YWwgPCAxMjApIHsKKwkJaWYgKHZhbCkgewogCQkJZGV2X2luZm8oZGV2LCAiVGpNYXggaXMgJWQgQy5cbiIsIHZhbCk7CiAJCQlyZXR1cm4gdmFsICogMTAwMDsKIAkJfQpAQCAtMzA0LDI0ICszMDIsOSBAQAogCiAJLyoKIAkgKiBBbiBhc3N1bXB0aW9uIGlzIG1hZGUgZm9yIGVhcmx5IENQVXMgYW5kIHVucmVhZGFibGUgTVNSLgotCSAqIE5PVEU6IHRoZSBnaXZlbiB2YWx1ZSBtYXkgbm90IGJlIGNvcnJlY3QuCisJICogTk9URTogdGhlIGNhbGN1bGF0ZWQgdmFsdWUgbWF5IG5vdCBiZSBjb3JyZWN0LgogCSAqLwotCi0Jc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKLQljYXNlIDB4ZToKLQljYXNlIDB4ZjoKLQljYXNlIDB4MTY6Ci0JY2FzZSAweDFhOgotCQlkZXZfd2FybihkZXYsICJUak1heCBpcyBhc3N1bWVkIGFzIDEwMCBDIVxuIik7Ci0JCXJldHVybiAxMDAwMDA7Ci0JY2FzZSAweDE3OgotCWNhc2UgMHgxYzoJCS8qIEF0b20gQ1BVcyAqLwotCQlyZXR1cm4gYWRqdXN0X3RqbWF4KGMsIGlkLCBkZXYpOwotCWRlZmF1bHQ6Ci0JCWRldl93YXJuKGRldiwgIkNQVSAobW9kZWw9MHgleCkgaXMgbm90IHN1cHBvcnRlZCB5ZXQsIgotCQkJIiB1c2luZyBkZWZhdWx0IFRqTWF4IG9mIDEwMEMuXG4iLCBjLT54ODZfbW9kZWwpOwotCQlyZXR1cm4gMTAwMDAwOwotCX0KKwlyZXR1cm4gYWRqdXN0X3RqbWF4KGMsIGlkLCBkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZ2V0X3Vjb2RlX3Jldl9vbl9jcHUodm9pZCAqZWR4KQpAQCAtMzQxLDcgKzMyNCw3IEBACiAJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCBNU1JfSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQsICZlYXgsICZlZHgpOwogCWlmICghZXJyKSB7CiAJCXZhbCA9IChlYXggPj4gMTYpICYgMHhmZjsKLQkJaWYgKHZhbCA+IDgwICYmIHZhbCA8IDEyMCkKKwkJaWYgKHZhbCkKIAkJCXJldHVybiB2YWwgKiAxMDAwOwogCX0KIAlkZXZfd2FybihkZXYsICJVbmFibGUgdG8gcmVhZCBQa2ctVGpNYXggZnJvbSBDUFU6JXVcbiIsIGNwdSk7CkBAIC02NjgsOSArNjUxLDcgQEAKIAl9CiAKIAlwZGV2X2VudHJ5LT5wZGV2ID0gcGRldjsKLQlwZGV2X2VudHJ5LT5jcHUgPSBjcHU7CiAJcGRldl9lbnRyeS0+cGh5c19wcm9jX2lkID0gVE9fUEhZU19JRChjcHUpOwotCXBkZXZfZW50cnktPmNwdV9jb3JlX2lkID0gVE9fQ09SRV9JRChjcHUpOwogCiAJbGlzdF9hZGRfdGFpbCgmcGRldl9lbnRyeS0+bGlzdCwgJnBkZXZfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pYm1hZW0uYyBiL2RyaXZlcnMvaHdtb24vaWJtYWVtLmMKaW5kZXggNTM3NDA5ZC4uMWE0MDljNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pYm1hZW0uYworKysgYi9kcml2ZXJzL2h3bW9uL2libWFlbS5jCkBAIC05NDcsNiArOTQ3LDcgQEAKIAogCS8qIFNldCB1cCByZWFkLW9ubHkgc2Vuc29ycyAqLwogCXdoaWxlIChyby0+bGFiZWwpIHsKKwkJc3lzZnNfYXR0cl9pbml0KCZzZW5zb3JzLT5kZXZfYXR0ci5hdHRyKTsKIAkJc2Vuc29ycy0+ZGV2X2F0dHIuYXR0ci5uYW1lID0gcm8tPmxhYmVsOwogCQlzZW5zb3JzLT5kZXZfYXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCQlzZW5zb3JzLT5kZXZfYXR0ci5zaG93ID0gcm8tPnNob3c7CkBAIC05NjMsNiArOTY0LDcgQEAKIAogCS8qIFNldCB1cCByZWFkLXdyaXRlIHNlbnNvcnMgKi8KIAl3aGlsZSAocnctPmxhYmVsKSB7CisJCXN5c2ZzX2F0dHJfaW5pdCgmc2Vuc29ycy0+ZGV2X2F0dHIuYXR0cik7CiAJCXNlbnNvcnMtPmRldl9hdHRyLmF0dHIubmFtZSA9IHJ3LT5sYWJlbDsKIAkJc2Vuc29ycy0+ZGV2X2F0dHIuYXR0ci5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1I7CiAJCXNlbnNvcnMtPmRldl9hdHRyLnNob3cgPSBydy0+c2hvdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMgYi9kcml2ZXJzL2h3bW9uL2libXBleC5jCmluZGV4IDA2ZDRlYWYuLjQxZGJmODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaWJtcGV4LmMKKysrIGIvZHJpdmVycy9od21vbi9pYm1wZXguYwpAQCAtMzU4LDYgKzM1OCw3IEBACiAJZWxzZSBpZiAodHlwZSA9PSBQT1dFUl9TRU5TT1IpCiAJCXNwcmludGYobiwgcG93ZXJfc2Vuc29yX25hbWVfdGVtcGxhdGVzW2Z1bmNdLCAicG93ZXIiLCBjb3VudGVyKTsKIAorCXN5c2ZzX2F0dHJfaW5pdCgmZGF0YS0+c2Vuc29yc1tzZW5zb3JdLmF0dHJbZnVuY10uZGV2X2F0dHIuYXR0cik7CiAJZGF0YS0+c2Vuc29yc1tzZW5zb3JdLmF0dHJbZnVuY10uZGV2X2F0dHIuYXR0ci5uYW1lID0gbjsKIAlkYXRhLT5zZW5zb3JzW3NlbnNvcl0uYXR0cltmdW5jXS5kZXZfYXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCWRhdGEtPnNlbnNvcnNbc2Vuc29yXS5hdHRyW2Z1bmNdLmRldl9hdHRyLnNob3cgPSBpYm1wZXhfc2hvd19zZW5zb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL21heDY2NDIuYyBiL2RyaXZlcnMvaHdtb24vbWF4NjY0Mi5jCmluZGV4IDBmOWZjNDAuLmU4NTVkM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbWF4NjY0Mi5jCisrKyBiL2RyaXZlcnMvaHdtb24vbWF4NjY0Mi5jCkBAIC0xMzYsMTUgKzEzNiwyOSBAQAogCWlmIChtYW5faWQgIT0gMHg0RCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwNCkgIT0gMHg0RAorCSAgICB8fCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDA2KSAhPSAweDRECisJICAgIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4ZmYpICE9IDB4NEQpCisJCXJldHVybiAtRU5PREVWOworCiAJLyoKIAkgKiBXZSByZWFkIHRoZSBjb25maWcgYW5kIHN0YXR1cyByZWdpc3RlciwgdGhlIDQgbG93ZXIgYml0cyBpbiB0aGUKIAkgKiBjb25maWcgcmVnaXN0ZXIgc2hvdWxkIGJlIHplcm8gYW5kIGJpdCA1LCAzLCAxIGFuZCAwIHNob3VsZCBiZQogCSAqIHplcm8gaW4gdGhlIHN0YXR1cyByZWdpc3Rlci4KIAkgKi8KIAlyZWdfY29uZmlnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUFYNjY0Ml9SRUdfUl9DT05GSUcpOworCWlmICgocmVnX2NvbmZpZyAmIDB4MGYpICE9IDB4MDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogaW4gYmV0d2VlbiwgYW5vdGhlciByb3VuZCBvZiBzYW5pdHkgY2hlY2tzICovCisJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDQpICE9IHJlZ19jb25maWcKKwkgICAgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwNikgIT0gcmVnX2NvbmZpZworCSAgICB8fCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweGZmKSAhPSByZWdfY29uZmlnKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJlZ19zdGF0dXMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBNQVg2NjQyX1JFR19SX1NUQVRVUyk7Ci0JaWYgKCgocmVnX2NvbmZpZyAmIDB4MGYpICE9IDB4MDApIHx8Ci0JICAgICgocmVnX3N0YXR1cyAmIDB4MmIpICE9IDB4MDApKQorCWlmICgocmVnX3N0YXR1cyAmIDB4MmIpICE9IDB4MDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJc3RybGNweShpbmZvLT50eXBlLCAibWF4NjY0MiIsIEkyQ19OQU1FX1NJWkUpOwpAQCAtMjQ2LDcgKzI2MCw3IEBACiAJCQkgICAgc2V0X3RlbXBfbWF4LCAwLCBNQVg2NjQyX1JFR19XX0xPQ0FMX0hJR0gpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAyX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9tYXgsCiAJCQkgICAgc2V0X3RlbXBfbWF4LCAxLCBNQVg2NjQyX1JFR19XX1JFTU9URV9ISUdIKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcF9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2ZhdWx0LCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA2KTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA0KTsKIApAQCAtMjU2LDcgKzI3MCw3IEBACiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAogCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wX2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9mYXVsdC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAlOVUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jIGIvZHJpdmVycy9od21vbi9zM2MtaHdtb24uYwppbmRleCA5MmI0MmRiLi5iMzlmNTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMKQEAgLTIzMiw2ICsyMzIsNyBAQAogCiAJYXR0ciA9ICZhdHRycy0+aW47CiAJYXR0ci0+aW5kZXggPSBjaGFubmVsOworCXN5c2ZzX2F0dHJfaW5pdCgmYXR0ci0+ZGV2X2F0dHIuYXR0cik7CiAJYXR0ci0+ZGV2X2F0dHIuYXR0ci5uYW1lICA9IGF0dHJzLT5pbl9uYW1lOwogCWF0dHItPmRldl9hdHRyLmF0dHIubW9kZSAgPSBTX0lSVUdPOwogCWF0dHItPmRldl9hdHRyLnNob3cgPSBzM2NfaHdtb25fY2hfc2hvdzsKQEAgLTI0OSw2ICsyNTAsNyBAQAogCiAJCWF0dHIgPSAmYXR0cnMtPmxhYmVsOwogCQlhdHRyLT5pbmRleCA9IGNoYW5uZWw7CisJCXN5c2ZzX2F0dHJfaW5pdCgmYXR0ci0+ZGV2X2F0dHIuYXR0cik7CiAJCWF0dHItPmRldl9hdHRyLmF0dHIubmFtZSAgPSBhdHRycy0+bGFiZWxfbmFtZTsKIAkJYXR0ci0+ZGV2X2F0dHIuYXR0ci5tb2RlICA9IFNfSVJVR087CiAJCWF0dHItPmRldl9hdHRyLnNob3cgPSBzM2NfaHdtb25fbGFiZWxfc2hvdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggMTQ0ZDI3Mi4uMDRiMDk1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTc3OCw3ICs3NzgsOCBAQAogCQkJCQlzZWN0b3JfdCBibG9jaykKIHsKIAlzdHJ1Y3QgaWRlX2NtZCBjbWQ7Ci0JaW50IHVwdG9kYXRlID0gMCwgbnNlY3RvcnM7CisJaW50IHVwdG9kYXRlID0gMDsKKwl1bnNpZ25lZCBpbnQgbnNlY3RvcnM7CiAKIAlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJjbWQ6IDB4JXgsIGJsb2NrOiAlbGx1IiwKIAkJCQkgIHJxLT5jbWRbMF0sICh1bnNpZ25lZCBsb25nIGxvbmcpYmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IGJlMDkyMWUuLjRjZjI1MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTExMSw3ICsxMTEsOCBAQAogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmV2ZGV2LT53YWl0KTsKKwlpZiAodHlwZSA9PSBFVl9TWU4gJiYgY29kZSA9PSBTWU5fUkVQT1JUKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmV2ZGV2LT53YWl0KTsKIH0KIAogc3RhdGljIGludCBldmRldl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCmluZGV4IDc1ZTExYzcuLmRhMzhkOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKQEAgLTE3NTYsNyArMTc1Niw3IEBACiAJfSBlbHNlIGlmICh0ZXN0X2JpdChBQlNfTVRfVFJBQ0tJTkdfSUQsIGRldi0+YWJzYml0KSkgewogCQltdF9zbG90cyA9IGRldi0+YWJzaW5mb1tBQlNfTVRfVFJBQ0tJTkdfSURdLm1heGltdW0gLQogCQkJICAgZGV2LT5hYnNpbmZvW0FCU19NVF9UUkFDS0lOR19JRF0ubWluaW11bSArIDEsCi0JCWNsYW1wKG10X3Nsb3RzLCAyLCAzMik7CisJCW10X3Nsb3RzID0gY2xhbXAobXRfc2xvdHMsIDIsIDMyKTsKIAl9IGVsc2UgaWYgKHRlc3RfYml0KEFCU19NVF9QT1NJVElPTl9YLCBkZXYtPmFic2JpdCkpIHsKIAkJbXRfc2xvdHMgPSAyOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMKaW5kZXggZjIzYTc0My4uMzNkMGJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwLWtleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYwpAQCAtMjA5LDYgKzIwOSw3IEBACiAjZW5kaWYKIAkJfQogCX0KKwlpbnB1dF9zeW5jKG9tYXBfa3BfZGF0YS0+aW5wdXQpOwogCW1lbWNweShrZXlwYWRfc3RhdGUsIG5ld19zdGF0ZSwgc2l6ZW9mKGtleXBhZF9zdGF0ZSkpOwogCiAJaWYgKGtleV9kb3duKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKaW5kZXggODM0Y2Y5OC4uNjg3NjcwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwpAQCAtMzIsNyArMzIsNyBAQAogCVtTSF9LRVlTQ19NT0RFXzNdID0geyAyLCA0LCA3IH0sCiAJW1NIX0tFWVNDX01PREVfNF0gPSB7IDMsIDYsIDYgfSwKIAlbU0hfS0VZU0NfTU9ERV81XSA9IHsgNCwgNiwgNyB9LAotCVtTSF9LRVlTQ19NT0RFXzZdID0geyA1LCA3LCA3IH0sCisJW1NIX0tFWVNDX01PREVfNl0gPSB7IDUsIDgsIDggfSwKIH07CiAKIHN0cnVjdCBzaF9rZXlzY19wcml2IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCAyNTdlMDMzLi4wMTEwYjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJaWYgKHNpemUgPT0gMCkKIAkJCXNpemUgPSB4cmVzID8gOiAxOwogCi0JCWNsYW1wKHZhbHVlLCBtaW4sIG1heCk7CisJCXZhbHVlID0gY2xhbXAodmFsdWUsIG1pbiwgbWF4KTsKIAogCQltb3VzZWRldi0+cGFja2V0LnggPSAoKHZhbHVlIC0gbWluKSAqIHhyZXMpIC8gc2l6ZTsKIAkJbW91c2VkZXYtPnBhY2tldC5hYnNfZXZlbnQgPSAxOwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJCWlmIChzaXplID09IDApCiAJCQlzaXplID0geXJlcyA/IDogMTsKIAotCQljbGFtcCh2YWx1ZSwgbWluLCBtYXgpOworCQl2YWx1ZSA9IGNsYW1wKHZhbHVlLCBtaW4sIG1heCk7CiAKIAkJbW91c2VkZXYtPnBhY2tldC55ID0geXJlcyAtICgodmFsdWUgLSBtaW4pICogeXJlcykgLyBzaXplOwogCQltb3VzZWRldi0+cGFja2V0LmFic19ldmVudCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCmluZGV4IDU5ZGU2MzguLmUzNTA1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2ludGVyZmFjZS5jCkBAIC0xNTYsOCArMTU2LDEwIEBACiAJaWYgKCFjcyB8fCAhdHJ5X21vZHVsZV9nZXQoY3MtPmRyaXZlci0+b3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNzLT5tdXRleCkpCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3MtPm11dGV4KSkgeworCQltb2R1bGVfcHV0KGNzLT5kcml2ZXItPm93bmVyKTsKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CiAJdHR5LT5kcml2ZXJfZGF0YSA9IGNzOwogCiAJKytjcy0+b3Blbl9jb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCmluZGV4IDNjY2JmZjEuLjcxYThlYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwpAQCAtMjgzLDYgKzI4Myw3IEBACiAJX3F1ZXVlX2RhdGEoJmRjaC0+ZGV2LkQsIE1QSF9JTkZPUk1BVElPTl9JTkQsIE1JU0ROX0lEX0FOWSwKIAkJc2l6ZW9mKHN0cnVjdCBwaF9pbmZvX2RjaCkgKyBkY2gtPmRldi5ucmJjaGFuICoKIAkJc2l6ZW9mKHN0cnVjdCBwaF9pbmZvX2NoKSwgcGhpLCBHRlBfQVRPTUlDKTsKKwlrZnJlZShwaGkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCAyM2YwZDVlLi43MTNkNDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMSwzICsxLDEwIEBACitjb25maWcgTEVEU19HUElPX1JFR0lTVEVSCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHRoZSBmdW5jdGlvbiBncGlvX2xlZF9yZWdpc3Rlcl9kZXZpY2UuCisJICBBcyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgYXJjaCBjb2RlIGl0IG11c3Qgbm90IGJlIGNvbXBpbGVkIGFzIGEKKwkgIG1vZHVsZS4KKwogbWVudWNvbmZpZyBORVdfTEVEUwogCWJvb2wgIkxFRCBTdXBwb3J0IgogCWhlbHAKQEAgLTcsMjIgKzE0LDE0IEBACiAJICBUaGlzIGlzIG5vdCByZWxhdGVkIHRvIHN0YW5kYXJkIGtleWJvYXJkIExFRHMgd2hpY2ggYXJlIGNvbnRyb2xsZWQKIAkgIHZpYSB0aGUgaW5wdXQgc3lzdGVtLgogCitpZiBORVdfTEVEUworCiBjb25maWcgTEVEU19DTEFTUwogCWJvb2wgIkxFRCBDbGFzcyBTdXBwb3J0IgotCWRlcGVuZHMgb24gTkVXX0xFRFMKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBsZWQgc3lzZnMgY2xhc3MgaW4gL3N5cy9jbGFzcy9sZWRzLiAgWW91J2xsCiAJICBuZWVkIHRoaXMgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGggTEVEcy4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBMRURTX0dQSU9fUkVHSVNURVIKLQlib29sCi0JaGVscAotCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgdGhlIGZ1bmN0aW9uIGdwaW9fbGVkX3JlZ2lzdGVyX2RldmljZS4KLQkgIEFzIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBhcmNoIGNvZGUgaXQgbXVzdCBub3QgYmUgY29tcGlsZWQgYXMgYQotCSAgbW9kdWxlLgotCi1pZiBORVdfTEVEUwotCiBjb21tZW50ICJMRUQgZHJpdmVycyIKIAogY29uZmlnIExFRFNfODhQTTg2MFgKQEAgLTM5MSw2ICszOTAsNyBAQAogCiBjb25maWcgTEVEU19BU0lDMwogCWJvb2wgIkxFRCBzdXBwb3J0IGZvciB0aGUgSFRDIEFTSUMzIgorCWRlcGVuZHMgb24gTEVEU19DTEFTUwogCWRlcGVuZHMgb24gTUZEX0FTSUMzCiAJZGVmYXVsdCB5CiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuYyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKaW5kZXggNzBiZDczOC4uNTc0YjA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuYworKysgYi9kcml2ZXJzL21kL2JpdG1hcC5jCkBAIC01MzQsNiArNTM0LDgyIEBACiAJa3VubWFwX2F0b21pYyhzYiwgS01fVVNFUjApOwogfQogCisvKgorICogYml0bWFwX25ld19kaXNrX3NiCisgKiBAYml0bWFwCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBzb21ld2hhdCB0aGUgcmV2ZXJzZSBvZiBiaXRtYXBfcmVhZF9zYi4gIGJpdG1hcF9yZWFkX3NiCisgKiByZWFkcyBhbmQgdmVyaWZpZXMgdGhlIG9uLWRpc2sgYml0bWFwIHN1cGVyYmxvY2sgYW5kIHBvcHVsYXRlcyBiaXRtYXBfaW5mby4KKyAqIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgJ2JpdG1hcF9pbmZvJyBhbmQgcG9wdWxhdGVzIHRoZSBvbi1kaXNrIGJpdG1hcAorICogc3RydWN0dXJlLCB3aGljaCBpcyB0byBiZSB3cml0dGVuIHRvIGRpc2suCisgKgorICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtRXh4eCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IGJpdG1hcF9uZXdfZGlza19zYihzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJYml0bWFwX3N1cGVyX3QgKnNiOworCXVuc2lnbmVkIGxvbmcgY2h1bmtzaXplLCBkYWVtb25fc2xlZXAsIHdyaXRlX2JlaGluZDsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWJpdG1hcC0+c2JfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihiaXRtYXAtPnNiX3BhZ2UpKSB7CisJCWVyciA9IFBUUl9FUlIoYml0bWFwLT5zYl9wYWdlKTsKKwkJYml0bWFwLT5zYl9wYWdlID0gTlVMTDsKKwkJcmV0dXJuIGVycjsKKwl9CisJYml0bWFwLT5zYl9wYWdlLT5pbmRleCA9IDA7CisKKwlzYiA9IGttYXBfYXRvbWljKGJpdG1hcC0+c2JfcGFnZSwgS01fVVNFUjApOworCisJc2ItPm1hZ2ljID0gY3B1X3RvX2xlMzIoQklUTUFQX01BR0lDKTsKKwlzYi0+dmVyc2lvbiA9IGNwdV90b19sZTMyKEJJVE1BUF9NQUpPUl9ISSk7CisKKwljaHVua3NpemUgPSBiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5jaHVua3NpemU7CisJQlVHX09OKCFjaHVua3NpemUpOworCWlmICghaXNfcG93ZXJfb2ZfMihjaHVua3NpemUpKSB7CisJCWt1bm1hcF9hdG9taWMoc2IsIEtNX1VTRVIwKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJiaXRtYXAgY2h1bmtzaXplIG5vdCBhIHBvd2VyIG9mIDJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc2ItPmNodW5rc2l6ZSA9IGNwdV90b19sZTMyKGNodW5rc2l6ZSk7CisKKwlkYWVtb25fc2xlZXAgPSBiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5kYWVtb25fc2xlZXA7CisJaWYgKCFkYWVtb25fc2xlZXAgfHwKKwkgICAgKGRhZW1vbl9zbGVlcCA8IDEpIHx8IChkYWVtb25fc2xlZXAgPiBNQVhfU0NIRURVTEVfVElNRU9VVCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ2hvb3NpbmcgZGFlbW9uX3NsZWVwIGRlZmF1bHQgKDUgc2VjKVxuIik7CisJCWRhZW1vbl9zbGVlcCA9IDUgKiBIWjsKKwl9CisJc2ItPmRhZW1vbl9zbGVlcCA9IGNwdV90b19sZTMyKGRhZW1vbl9zbGVlcCk7CisJYml0bWFwLT5tZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwID0gZGFlbW9uX3NsZWVwOworCisJLyoKKwkgKiBGSVhNRTogd3JpdGVfYmVoaW5kIGZvciBSQUlEMS4gIElmIG5vdCBzcGVjaWZpZWQsIHdoYXQKKwkgKiBpcyBhIGdvb2QgY2hvaWNlPyAgV2UgY2hvb3NlIENPVU5URVJfTUFYIC8gMiBhcmJpdHJhcmlseS4KKwkgKi8KKwl3cml0ZV9iZWhpbmQgPSBiaXRtYXAtPm1kZGV2LT5iaXRtYXBfaW5mby5tYXhfd3JpdGVfYmVoaW5kOworCWlmICh3cml0ZV9iZWhpbmQgPiBDT1VOVEVSX01BWCkKKwkJd3JpdGVfYmVoaW5kID0gQ09VTlRFUl9NQVggLyAyOworCXNiLT53cml0ZV9iZWhpbmQgPSBjcHVfdG9fbGUzMih3cml0ZV9iZWhpbmQpOworCWJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLm1heF93cml0ZV9iZWhpbmQgPSB3cml0ZV9iZWhpbmQ7CisKKwkvKiBrZWVwIHRoZSBhcnJheSBzaXplIGZpZWxkIG9mIHRoZSBiaXRtYXAgc3VwZXJibG9jayB1cCB0byBkYXRlICovCisJc2ItPnN5bmNfc2l6ZSA9IGNwdV90b19sZTY0KGJpdG1hcC0+bWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyk7CisKKwltZW1jcHkoc2ItPnV1aWQsIGJpdG1hcC0+bWRkZXYtPnV1aWQsIDE2KTsKKworCWJpdG1hcC0+ZmxhZ3MgfD0gQklUTUFQX1NUQUxFOworCXNiLT5zdGF0ZSB8PSBjcHVfdG9fbGUzMihCSVRNQVBfU1RBTEUpOworCWJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPSBiaXRtYXAtPm1kZGV2LT5ldmVudHM7CisJc2ItPmV2ZW50c19jbGVhcmVkID0gY3B1X3RvX2xlNjQoYml0bWFwLT5tZGRldi0+ZXZlbnRzKTsKKworCWJpdG1hcC0+ZmxhZ3MgfD0gQklUTUFQX0hPU1RFTkRJQU47CisJc2ItPnZlcnNpb24gPSBjcHVfdG9fbGUzMihCSVRNQVBfTUFKT1JfSE9TVEVORElBTik7CisKKwlrdW5tYXBfYXRvbWljKHNiLCBLTV9VU0VSMCk7CisKKwlyZXR1cm4gMDsKK30KKwogLyogcmVhZCB0aGUgc3VwZXJibG9jayBmcm9tIHRoZSBiaXRtYXAgZmlsZSBhbmQgaW5pdGlhbGl6ZSBzb21lIGJpdG1hcCBmaWVsZHMgKi8KIHN0YXRpYyBpbnQgYml0bWFwX3JlYWRfc2Ioc3RydWN0IGJpdG1hcCAqYml0bWFwKQogewpAQCAtNTc1LDcgKzY1MSw3IEBACiAJCXJlYXNvbiA9ICJ1bnJlY29nbml6ZWQgc3VwZXJibG9jayB2ZXJzaW9uIjsKIAllbHNlIGlmIChjaHVua3NpemUgPCA1MTIpCiAJCXJlYXNvbiA9ICJiaXRtYXAgY2h1bmtzaXplIHRvbyBzbWFsbCI7Ci0JZWxzZSBpZiAoKDEgPDwgZmZ6KH5jaHVua3NpemUpKSAhPSBjaHVua3NpemUpCisJZWxzZSBpZiAoIWlzX3Bvd2VyX29mXzIoY2h1bmtzaXplKSkKIAkJcmVhc29uID0gImJpdG1hcCBjaHVua3NpemUgbm90IGEgcG93ZXIgb2YgMiI7CiAJZWxzZSBpZiAoZGFlbW9uX3NsZWVwIDwgMSB8fCBkYWVtb25fc2xlZXAgPiBNQVhfU0NIRURVTEVfVElNRU9VVCkKIAkJcmVhc29uID0gImRhZW1vbiBzbGVlcCBwZXJpb2Qgb3V0IG9mIHJhbmdlIjsKQEAgLTEwNzYsOCArMTE1Miw4IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGJpdG1hcCBpbml0aWFsaXplZCBmcm9tIGRpc2s6ICIKLQkJInJlYWQgJWx1LyVsdSBwYWdlcywgc2V0ICVsdSBiaXRzXG4iLAotCQlibW5hbWUoYml0bWFwKSwgYml0bWFwLT5maWxlX3BhZ2VzLCBudW1fcGFnZXMsIGJpdF9jbnQpOworCSAgICAgICAicmVhZCAlbHUvJWx1IHBhZ2VzLCBzZXQgJWx1IG9mICVsdSBiaXRzXG4iLAorCSAgICAgICBibW5hbWUoYml0bWFwKSwgYml0bWFwLT5maWxlX3BhZ2VzLCBudW1fcGFnZXMsIGJpdF9jbnQsIGNodW5rcyk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTMzMiw3ICsxNDA4LDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJaWYgKHVubGlrZWx5KCgqYm1jICYgQ09VTlRFUl9NQVgpID09IENPVU5URVJfTUFYKSkgeworCQlpZiAodW5saWtlbHkoQ09VTlRFUigqYm1jKSA9PSBDT1VOVEVSX01BWCkpIHsKIAkJCURFRklORV9XQUlUKF9fd2FpdCk7CiAJCQkvKiBub3RlIHRoYXQgaXQgaXMgc2FmZSB0byBkbyB0aGUgcHJlcGFyZV90b193YWl0CiAJCQkgKiBhZnRlciB0aGUgdGVzdCBhcyBsb25nIGFzIHdlIGRvIGl0IGJlZm9yZSBkcm9wcGluZwpAQCAtMTQwNCwxMCArMTQ4MCwxMCBAQAogCQkJc3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKGJpdG1hcC0+c3lzZnNfY2FuX2NsZWFyKTsKIAkJfQogCi0JCWlmICghc3VjY2VzcyAmJiAhICgqYm1jICYgTkVFREVEX01BU0spKQorCQlpZiAoIXN1Y2Nlc3MgJiYgIU5FRURFRCgqYm1jKSkKIAkJCSpibWMgfD0gTkVFREVEX01BU0s7CiAKLQkJaWYgKCgqYm1jICYgQ09VTlRFUl9NQVgpID09IENPVU5URVJfTUFYKQorCQlpZiAoQ09VTlRFUigqYm1jKSA9PSBDT1VOVEVSX01BWCkKIAkJCXdha2VfdXAoJmJpdG1hcC0+b3ZlcmZsb3dfd2FpdCk7CiAKIAkJKCpibWMpLS07CkBAIC0xNzI4LDkgKzE4MDQsMTYgQEAKIAkJdmZzX2ZzeW5jKGZpbGUsIDEpOwogCX0KIAkvKiByZWFkIHN1cGVyYmxvY2sgZnJvbSBiaXRtYXAgZmlsZSAodGhpcyBzZXRzIG1kZGV2LT5iaXRtYXBfaW5mby5jaHVua3NpemUpICovCi0JaWYgKCFtZGRldi0+Yml0bWFwX2luZm8uZXh0ZXJuYWwpCi0JCWVyciA9IGJpdG1hcF9yZWFkX3NiKGJpdG1hcCk7Ci0JZWxzZSB7CisJaWYgKCFtZGRldi0+Yml0bWFwX2luZm8uZXh0ZXJuYWwpIHsKKwkJLyoKKwkJICogSWYgJ01EX0FSUkFZX0ZJUlNUX1VTRScgaXMgc2V0LCB0aGVuIGRldmljZS1tYXBwZXIgaXMKKwkJICogaW5zdHJ1Y3RpbmcgdXMgdG8gY3JlYXRlIGEgbmV3IG9uLWRpc2sgYml0bWFwIGluc3RhbmNlLgorCQkgKi8KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNRF9BUlJBWV9GSVJTVF9VU0UsICZtZGRldi0+ZmxhZ3MpKQorCQkJZXJyID0gYml0bWFwX25ld19kaXNrX3NiKGJpdG1hcCk7CisJCWVsc2UKKwkJCWVyciA9IGJpdG1hcF9yZWFkX3NiKGJpdG1hcCk7CisJfSBlbHNlIHsKIAkJZXJyID0gMDsKIAkJaWYgKG1kZGV2LT5iaXRtYXBfaW5mby5jaHVua3NpemUgPT0gMCB8fAogCQkgICAgbWRkZXYtPmJpdG1hcF9pbmZvLmRhZW1vbl9zbGVlcCA9PSAwKQpAQCAtMTc1NCw5ICsxODM3LDYgQEAKIAliaXRtYXAtPmNodW5rcyA9IGNodW5rczsKIAliaXRtYXAtPnBhZ2VzID0gcGFnZXM7CiAJYml0bWFwLT5taXNzaW5nX3BhZ2VzID0gcGFnZXM7Ci0JYml0bWFwLT5jb3VudGVyX2JpdHMgPSBDT1VOVEVSX0JJVFM7Ci0KLQliaXRtYXAtPnN5bmNjaHVuayA9IH4wVUw7CiAKICNpZmRlZiBJTkpFQ1RfRkFUQUxfRkFVTFRfMQogCWJpdG1hcC0+YnAgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9iaXRtYXAuaCBiL2RyaXZlcnMvbWQvYml0bWFwLmgKaW5kZXggZDBhZWFmNC4uYjJhMTI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9iaXRtYXAuaAorKysgYi9kcml2ZXJzL21kL2JpdG1hcC5oCkBAIC04NSw3ICs4NSw2IEBACiB0eXBlZGVmIF9fdTE2IGJpdG1hcF9jb3VudGVyX3Q7CiAjZGVmaW5lIENPVU5URVJfQklUUyAxNgogI2RlZmluZSBDT1VOVEVSX0JJVF9TSElGVCA0Ci0jZGVmaW5lIENPVU5URVJfQllURV9SQVRJTyAoQ09VTlRFUl9CSVRTIC8gOCkKICNkZWZpbmUgQ09VTlRFUl9CWVRFX1NISUZUIChDT1VOVEVSX0JJVF9TSElGVCAtIDMpCiAKICNkZWZpbmUgTkVFREVEX01BU0sgKChiaXRtYXBfY291bnRlcl90KSAoMSA8PCAoQ09VTlRFUl9CSVRTIC0gMSkpKQpAQCAtMTk2LDE5ICsxOTUsMTAgQEAKIAogCW1kZGV2X3QgKm1kZGV2OyAvKiB0aGUgbWQgZGV2aWNlIHRoYXQgdGhlIGJpdG1hcCBpcyBmb3IgKi8KIAotCWludCBjb3VudGVyX2JpdHM7IC8qIGhvdyBtYW55IGJpdHMgcGVyIGJsb2NrIGNvdW50ZXIgKi8KLQogCS8qIGJpdG1hcCBjaHVua3NpemUgLS0gaG93IG11Y2ggZGF0YSBkb2VzIGVhY2ggYml0IHJlcHJlc2VudD8gKi8KIAl1bnNpZ25lZCBsb25nIGNodW5rc2hpZnQ7IC8qIGNodW5rc2l6ZSA9IDJeY2h1bmtzaGlmdCAoZm9yIGJpdG9wcykgKi8KIAl1bnNpZ25lZCBsb25nIGNodW5rczsgLyogdG90YWwgbnVtYmVyIG9mIGRhdGEgY2h1bmtzIGZvciB0aGUgYXJyYXkgKi8KIAotCS8qIFdlIGhvbGQgYSBjb3VudCBvbiB0aGUgY2h1bmsgY3VycmVudGx5IGJlaW5nIHN5bmNlZCwgYW5kIGRyb3AKLQkgKiBpdCB3aGVuIHRoZSBsYXN0IGJsb2NrIGlzIHN0YXJ0ZWQuICBJZiB0aGUgcmVzeW5jIGlzIGFib3J0ZWQKLQkgKiBtaWR3YXksIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBkcm9wIHRoYXQgY291bnQsIHNvIHdlIHJlbWVtYmVyCi0JICogdGhlIGNvdW50ZWQgY2h1bmsuLgotCSAqLwotCXVuc2lnbmVkIGxvbmcgc3luY2NodW5rOwotCiAJX191NjQJZXZlbnRzX2NsZWFyZWQ7CiAJaW50IG5lZWRfc3luYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IGFhNjQwYTguLjQzMzJmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTM1MSw2ICszNTEsOSBAQAogCW1kZGV2LT5zdXNwZW5kZWQgPSAwOwogCXdha2VfdXAoJm1kZGV2LT5zYl93YWl0KTsKIAltZGRldi0+cGVycy0+cXVpZXNjZShtZGRldiwgMCk7CisKKwltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnN5bmNfdGhyZWFkKTsgLyogcG9zc2libHkga2ljayBvZmYgYSByZXNoYXBlICovCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9yZXN1bWUpOwogCkBAIC0xNzUwLDYgKzE3NTMsMTggQEAKIAl9LAogfTsKIAorc3RhdGljIHZvaWQgc3luY19zdXBlcihtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldikKK3sKKwlpZiAobWRkZXYtPnN5bmNfc3VwZXIpIHsKKwkJbWRkZXYtPnN5bmNfc3VwZXIobWRkZXYsIHJkZXYpOworCQlyZXR1cm47CisJfQorCisJQlVHX09OKG1kZGV2LT5tYWpvcl92ZXJzaW9uID49IEFSUkFZX1NJWkUoc3VwZXJfdHlwZXMpKTsKKworCXN1cGVyX3R5cGVzW21kZGV2LT5tYWpvcl92ZXJzaW9uXS5zeW5jX3N1cGVyKG1kZGV2LCByZGV2KTsKK30KKwogc3RhdGljIGludCBtYXRjaF9tZGRldl91bml0cyhtZGRldl90ICptZGRldjEsIG1kZGV2X3QgKm1kZGV2MikKIHsKIAltZGtfcmRldl90ICpyZGV2LCAqcmRldjI7CkBAIC0xNzgxLDggKzE3OTYsOCBAQAogCiAJaWYgKGxpc3RfZW1wdHkoJm1kZGV2LT5kaXNrcykpCiAJCXJldHVybiAwOyAvKiBub3RoaW5nIHRvIGRvICovCi0JaWYgKGJsa19nZXRfaW50ZWdyaXR5KG1kZGV2LT5nZW5kaXNrKSkKLQkJcmV0dXJuIDA7IC8qIGFscmVhZHkgcmVnaXN0ZXJlZCAqLworCWlmICghbWRkZXYtPmdlbmRpc2sgfHwgYmxrX2dldF9pbnRlZ3JpdHkobWRkZXYtPmdlbmRpc2spKQorCQlyZXR1cm4gMDsgLyogc2hvdWxkbid0IHJlZ2lzdGVyLCBvciBhbHJlYWR5IGlzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgewogCQkvKiBza2lwIHNwYXJlcyBhbmQgbm9uLWZ1bmN0aW9uYWwgZGlza3MgKi8KIAkJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKQEAgLTIxNjgsOCArMjE4Myw3IEBACiAJCQkvKiBEb24ndCB1cGRhdGUgdGhpcyBzdXBlcmJsb2NrICovCiAJCQlyZGV2LT5zYl9sb2FkZWQgPSAyOwogCQl9IGVsc2UgewotCQkJc3VwZXJfdHlwZXNbbWRkZXYtPm1ham9yX3ZlcnNpb25dLgotCQkJCXN5bmNfc3VwZXIobWRkZXYsIHJkZXYpOworCQkJc3luY19zdXBlcihtZGRldiwgcmRldik7CiAJCQlyZGV2LT5zYl9sb2FkZWQgPSAxOwogCQl9CiAJfQpAQCAtMjQ2Miw3ICsyNDc2LDcgQEAKIAkJaWYgKHJkZXYtPnJhaWRfZGlzayA9PSAtMSkKIAkJCXJldHVybiAtRUVYSVNUOwogCQkvKiBwZXJzb25hbGl0eSBkb2VzIGFsbCBuZWVkZWQgY2hlY2tzICovCi0JCWlmIChyZGV2LT5tZGRldi0+cGVycy0+aG90X2FkZF9kaXNrID09IE5VTEwpCisJCWlmIChyZGV2LT5tZGRldi0+cGVycy0+aG90X3JlbW92ZV9kaXNrID09IE5VTEwpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJZXJyID0gcmRldi0+bWRkZXYtPnBlcnMtPgogCQkJaG90X3JlbW92ZV9kaXNrKHJkZXYtPm1kZGV2LCByZGV2LT5yYWlkX2Rpc2spOwpAQCAtNDYxOSw5ICs0NjMzLDYgQEAKIAlpZiAobWRkZXYtPmZsYWdzKQogCQltZF91cGRhdGVfc2IobWRkZXYsIDApOwogCi0JbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKLQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT5zeW5jX3RocmVhZCk7IC8qIHBvc3NpYmx5IGtpY2sgb2ZmIGEgcmVzaGFwZSAqLwotCiAJbWRfbmV3X2V2ZW50KG1kZGV2KTsKIAlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUobWRkZXYtPnN5c2ZzX3N0YXRlKTsKIAlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUobWRkZXYtPnN5c2ZzX2FjdGlvbik7CkBAIC00NjQyLDYgKzQ2NTMsMTAgQEAKIAkJYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwogCQlnb3RvIG91dDsKIAl9CisKKwltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnN5bmNfdGhyZWFkKTsgLyogcG9zc2libHkga2ljayBvZmYgYSByZXNoYXBlICovCisKIAlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAlyZXZhbGlkYXRlX2Rpc2sobWRkZXYtPmdlbmRpc2spOwogCW1kZGV2LT5jaGFuZ2VkID0gMTsKQEAgLTUyNTksNiArNTI3NCw4IEBACiAJCWlmIChtZGRldi0+ZGVncmFkZWQpCiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX1JFQ09WRVIsICZtZGRldi0+cmVjb3ZlcnkpOwogCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CisJCWlmICghZXJyKQorCQkJbWRfbmV3X2V2ZW50KG1kZGV2KTsKIAkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC02ODY2LDggKzY4ODMsOCBAQAogCSAqIFR1bmUgcmVjb25zdHJ1Y3Rpb246CiAJICovCiAJd2luZG93ID0gMzIqKFBBR0VfU0laRS81MTIpOwotCXByaW50ayhLRVJOX0lORk8gIm1kOiB1c2luZyAlZGsgd2luZG93LCBvdmVyIGEgdG90YWwgb2YgJWxsdSBibG9ja3MuXG4iLAotCQl3aW5kb3cvMiwodW5zaWduZWQgbG9uZyBsb25nKSBtYXhfc2VjdG9ycy8yKTsKKwlwcmludGsoS0VSTl9JTkZPICJtZDogdXNpbmcgJWRrIHdpbmRvdywgb3ZlciBhIHRvdGFsIG9mICVsbHVrLlxuIiwKKwkJd2luZG93LzIsICh1bnNpZ25lZCBsb25nIGxvbmcpbWF4X3NlY3RvcnMvMik7CiAKIAlhdG9taWNfc2V0KCZtZGRldi0+cmVjb3ZlcnlfYWN0aXZlLCAwKTsKIAlsYXN0X2NoZWNrID0gMDsKQEAgLTcwNDUsNyArNzA2Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZF9kb19zeW5jKTsKIAotCiBzdGF0aWMgaW50IHJlbW92ZV9hbmRfYWRkX3NwYXJlcyhtZGRldl90ICptZGRldikKIHsKIAltZGtfcmRldl90ICpyZGV2OwpAQCAtNzE1Nyw2ICs3MTczLDkgQEAKICAqLwogdm9pZCBtZF9jaGVja19yZWNvdmVyeShtZGRldl90ICptZGRldikKIHsKKwlpZiAobWRkZXYtPnN1c3BlbmRlZCkKKwkJcmV0dXJuOworCiAJaWYgKG1kZGV2LT5iaXRtYXApCiAJCWJpdG1hcF9kYWVtb25fd29yayhtZGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCAwYjFmZDNmLi4xYzI2YzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKKysrIGIvZHJpdmVycy9tZC9tZC5oCkBAIC0xMjQsNiArMTI0LDcgQEAKICNkZWZpbmUgTURfQ0hBTkdFX0RFVlMJMAkvKiBTb21lIGRldmljZSBzdGF0dXMgaGFzIGNoYW5nZWQgKi8KICNkZWZpbmUgTURfQ0hBTkdFX0NMRUFOIDEJLyogdHJhbnNpdGlvbiB0byBvciBmcm9tICdjbGVhbicgKi8KICNkZWZpbmUgTURfQ0hBTkdFX1BFTkRJTkcgMgkvKiBzd2l0Y2ggZnJvbSAnY2xlYW4nIHRvICdhY3RpdmUnIGluIHByb2dyZXNzICovCisjZGVmaW5lIE1EX0FSUkFZX0ZJUlNUX1VTRSAzICAgIC8qIEZpcnN0IHVzZSBvZiBhcnJheSwgbmVlZHMgaW5pdGlhbGl6YXRpb24gKi8KIAogCWludAkJCQlzdXNwZW5kZWQ7CiAJYXRvbWljX3QJCQlhY3RpdmVfaW87CkBAIC0zMzAsNiArMzMxLDcgQEAKIAlhdG9taWNfdCBmbHVzaF9wZW5kaW5nOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmbHVzaF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBldmVudF93b3JrOwkvKiB1c2VkIGJ5IGRtIHRvIHJlcG9ydCBmYWlsdXJlIGV2ZW50ICovCisJdm9pZCAoKnN5bmNfc3VwZXIpKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IDVkMDk2MDkuLmY3NDMxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTQ5NywyMSArNDk3LDE5IEBACiAJcmV0dXJuIGJlc3RfZGlzazsKIH0KIAotc3RhdGljIGludCByYWlkMV9jb25nZXN0ZWQodm9pZCAqZGF0YSwgaW50IGJpdHMpCitpbnQgbWRfcmFpZDFfY29uZ2VzdGVkKG1kZGV2X3QgKm1kZGV2LCBpbnQgYml0cykKIHsKLQltZGRldl90ICptZGRldiA9IGRhdGE7CiAJY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGksIHJldCA9IDA7CiAKLQlpZiAobWRkZXZfY29uZ2VzdGVkKG1kZGV2LCBiaXRzKSkKLQkJcmV0dXJuIDE7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSA8IG1kZGV2LT5yYWlkX2Rpc2tzOyBpKyspIHsKIAkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2ldLnJkZXYpOwogCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7CiAJCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKHJkZXYtPmJkZXYpOwogCisJCQlCVUdfT04oIXEpOworCiAJCQkvKiBOb3RlIHRoZSAnfHwgMScgLSB3aGVuIHJlYWRfYmFsYW5jZSBwcmVmZXJzCiAJCQkgKiBub24tY29uZ2VzdGVkIHRhcmdldHMsIGl0IGNhbiBiZSByZW1vdmVkCiAJCQkgKi8KQEAgLTUyNCw3ICs1MjIsMTUgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwobWRfcmFpZDFfY29uZ2VzdGVkKTsKIAorc3RhdGljIGludCByYWlkMV9jb25nZXN0ZWQodm9pZCAqZGF0YSwgaW50IGJpdHMpCit7CisJbWRkZXZfdCAqbWRkZXYgPSBkYXRhOworCisJcmV0dXJuIG1kZGV2X2Nvbmdlc3RlZChtZGRldiwgYml0cykgfHwKKwkJbWRfcmFpZDFfY29uZ2VzdGVkKG1kZGV2LCBiaXRzKTsKK30KIAogc3RhdGljIHZvaWQgZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZl90ICpjb25mKQogewpAQCAtMTk3Miw2ICsxOTc4LDggQEAKIAkJcmV0dXJuIFBUUl9FUlIoY29uZik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CisJCWlmICghbWRkZXYtPmdlbmRpc2spCisJCQljb250aW51ZTsKIAkJZGlza19zdGFja19saW1pdHMobWRkZXYtPmdlbmRpc2ssIHJkZXYtPmJkZXYsCiAJCQkJICByZGV2LT5kYXRhX29mZnNldCA8PCA5KTsKIAkJLyogYXMgd2UgZG9uJ3QgaG9ub3VyIG1lcmdlX2J2ZWNfZm4sIHdlIG11c3QgbmV2ZXIgcmlzawpAQCAtMjAxMyw4ICsyMDIxLDEwIEBACiAKIAltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDFfc2l6ZShtZGRldiwgMCwgMCkpOwogCi0JbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQxX2Nvbmdlc3RlZDsKLQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2RhdGEgPSBtZGRldjsKKwlpZiAobWRkZXYtPnF1ZXVlKSB7CisJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSByYWlkMV9jb25nZXN0ZWQ7CisJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZGF0YSA9IG1kZGV2OworCX0KIAlyZXR1cm4gbWRfaW50ZWdyaXR5X3JlZ2lzdGVyKG1kZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5oIGIvZHJpdmVycy9tZC9yYWlkMS5oCmluZGV4IDVmYzRjYTEuLmU3NDNhNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuaAorKysgYi9kcml2ZXJzL21kL3JhaWQxLmgKQEAgLTEyNiw0ICsxMjYsNiBAQAogICovCiAjZGVmaW5lCVIxQklPX1JldHVybmVkIDYKIAorZXh0ZXJuIGludCBtZF9yYWlkMV9jb25nZXN0ZWQobWRkZXZfdCAqbWRkZXYsIGludCBiaXRzKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggMzQ2ZTY5Yi4uYjcyZWRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYWlkNV9zZXRfYmlfaHdfc2VnbWVudHMoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgY250KQogewotCWJpby0+YmlfcGh5c19zZWdtZW50cyA9IHJhaWQ1X2JpX3BoeXNfc2VnbWVudHMoYmlvKSB8fCAoY250IDw8IDE2KTsKKwliaW8tPmJpX3BoeXNfc2VnbWVudHMgPSByYWlkNV9iaV9waHlzX3NlZ21lbnRzKGJpbykgfCAoY250IDw8IDE2KTsKIH0KIAogLyogRmluZCBmaXJzdCBkYXRhIGRpc2sgaW4gYSByYWlkNiBzdHJpcGUgKi8KQEAgLTUxNCw3ICs1MTQsNyBAQAogCQliaSA9ICZzaC0+ZGV2W2ldLnJlcTsKIAogCQliaS0+YmlfcncgPSBydzsKLQkJaWYgKHJ3ID09IFdSSVRFKQorCQlpZiAocncgJiBXUklURSkKIAkJCWJpLT5iaV9lbmRfaW8gPSByYWlkNV9lbmRfd3JpdGVfcmVxdWVzdDsKIAkJZWxzZQogCQkJYmktPmJpX2VuZF9pbyA9IHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3Q7CkBAIC01NDgsMTMgKzU0OCwxMyBAQAogCQkJYmktPmJpX2lvX3ZlY1swXS5idl9vZmZzZXQgPSAwOwogCQkJYmktPmJpX3NpemUgPSBTVFJJUEVfU0laRTsKIAkJCWJpLT5iaV9uZXh0ID0gTlVMTDsKLQkJCWlmIChydyA9PSBXUklURSAmJgorCQkJaWYgKChydyAmIFdSSVRFKSAmJgogCQkJICAgIHRlc3RfYml0KFI1X1JlV3JpdGUsICZzaC0+ZGV2W2ldLmZsYWdzKSkKIAkJCQlhdG9taWNfYWRkKFNUUklQRV9TRUNUT1JTLAogCQkJCQkmcmRldi0+Y29ycmVjdGVkX2Vycm9ycyk7CiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaSk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAocncgPT0gV1JJVEUpCisJCQlpZiAocncgJiBXUklURSkKIAkJCQlzZXRfYml0KFNUUklQRV9ERUdSQURFRCwgJnNoLT5zdGF0ZSk7CiAJCQlwcl9kZWJ1Zygic2tpcCBvcCAlbGQgb24gZGlzYyAlZCBmb3Igc2VjdG9yICVsbHVcbiIsCiAJCQkJYmktPmJpX3J3LCBpLCAodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IpOwpAQCAtNTg1LDcgKzU4NSw3IEBACiAJaW5pdF9hc3luY19zdWJtaXQoJnN1Ym1pdCwgZmxhZ3MsIHR4LCBOVUxMLCBOVUxMLCBOVUxMKTsKIAogCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2bCwgYmlvLCBpKSB7Ci0JCWludCBsZW4gPSBiaW9faW92ZWNfaWR4KGJpbywgaSktPmJ2X2xlbjsKKwkJaW50IGxlbiA9IGJ2bC0+YnZfbGVuOwogCQlpbnQgY2xlbjsKIAkJaW50IGJfb2Zmc2V0ID0gMDsKIApAQCAtNjAxLDggKzYwMSw4IEBACiAJCQljbGVuID0gbGVuOwogCiAJCWlmIChjbGVuID4gMCkgewotCQkJYl9vZmZzZXQgKz0gYmlvX2lvdmVjX2lkeChiaW8sIGkpLT5idl9vZmZzZXQ7Ci0JCQliaW9fcGFnZSA9IGJpb19pb3ZlY19pZHgoYmlvLCBpKS0+YnZfcGFnZTsKKwkJCWJfb2Zmc2V0ICs9IGJ2bC0+YnZfb2Zmc2V0OworCQkJYmlvX3BhZ2UgPSBidmwtPmJ2X3BhZ2U7CiAJCQlpZiAoZnJvbWJpbykKIAkJCQl0eCA9IGFzeW5jX21lbWNweShwYWdlLCBiaW9fcGFnZSwgcGFnZV9vZmZzZXQsCiAJCQkJCQkgIGJfb2Zmc2V0LCBjbGVuLCAmc3VibWl0KTsKQEAgLTQ4NTgsNyArNDg1OCw3IEBACiAJCQlwcmludGsoS0VSTl9JTkZPICJtZC9yYWlkOiVzOiBkZXZpY2UgJXMgb3BlcmF0aW9uYWwgYXMgcmFpZCIKIAkJCSAgICAgICAiIGRpc2sgJWRcbiIsCiAJCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgYmRldm5hbWUocmRldi0+YmRldiwgYiksIHJhaWRfZGlzayk7Ci0JCX0gZWxzZQorCQl9IGVsc2UgaWYgKHJkZXYtPnNhdmVkX3JhaWRfZGlzayAhPSByYWlkX2Rpc2spCiAJCQkvKiBDYW5ub3QgcmVseSBvbiBiaXRtYXAgdG8gY29tcGxldGUgcmVjb3ZlcnkgKi8KIAkJCWNvbmYtPmZ1bGxzeW5jID0gMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwppbmRleCA0ZGMxY2EzLi43YzMyN2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKQEAgLTYwLDggKzYwLDYgQEAKIAlpbnQgYWN0X2xlbiwgcmV0OwogCXU4IGJ1Zls2NF07CiAKLQlpZiAoc2xlbiA+IHNpemVvZihidWYpKQotCQlzbGVuID0gc2l6ZW9mKGJ1Zik7CiAJbWVtY3B5KCZidWZbMF0sIHNidWYsIHNsZW4pOwogCWJ1Zls2MF0gPSBzdGF0ZS0+c2VxKys7CiAKQEAgLTE4MCwzMCArMTc4LDM3IEBACiB7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKIAlpbnQgcmV0ID0gMCwgaW5jLCBpID0gMDsKKwl1OCBidWZbNTJdOyAvKiA0ICsgNDggKEkyQyBXUiBVU0IgY29tbWFuZCBoZWFkZXIgKyBJMkMgV1IgbWF4KSAqLwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCiAJd2hpbGUgKGkgPCBudW0pIHsKIAkJaWYgKG51bSA+IGkgKyAxICYmIChtc2dbaSsxXS5mbGFncyAmIEkyQ19NX1JEKSkgewotCQkJdTggYnVmWzZdOworCQkJaWYgKG1zZ1tpXS5sZW4gPiAyIHx8IG1zZ1tpKzFdLmxlbiA+IDYwKSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlidWZbMF0gPSBDTURfSTJDX1JFQUQ7CiAJCQlidWZbMV0gPSAobXNnW2ldLmFkZHIgPDwgMSkgfCAweDAxOwogCQkJYnVmWzJdID0gbXNnW2ldLmJ1ZlswXTsKIAkJCWJ1ZlszXSA9IG1zZ1tpXS5idWZbMV07CiAJCQlidWZbNF0gPSBtc2dbaV0ubGVuLTE7CiAJCQlidWZbNV0gPSBtc2dbaSsxXS5sZW47Ci0JCQlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCBzaXplb2YoYnVmKSwgbXNnW2krMV0uYnVmLAorCQkJcmV0ID0gYW55c2VlX2N0cmxfbXNnKGQsIGJ1ZiwgNiwgbXNnW2krMV0uYnVmLAogCQkJCW1zZ1tpKzFdLmxlbik7CiAJCQlpbmMgPSAyOwogCQl9IGVsc2UgewotCQkJdTggYnVmWzQrbXNnW2ldLmxlbl07CisJCQlpZiAobXNnW2ldLmxlbiA+IDQ4KSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlidWZbMF0gPSBDTURfSTJDX1dSSVRFOwogCQkJYnVmWzFdID0gKG1zZ1tpXS5hZGRyIDw8IDEpOwogCQkJYnVmWzJdID0gbXNnW2ldLmxlbjsKIAkJCWJ1ZlszXSA9IDB4MDE7CiAJCQltZW1jcHkoJmJ1Zls0XSwgbXNnW2ldLmJ1ZiwgbXNnW2ldLmxlbik7Ci0JCQlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCBzaXplb2YoYnVmKSwgTlVMTCwgMCk7CisJCQlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCA0ICsgbXNnW2ldLmxlbiwgTlVMTCwgMCk7CiAJCQlpbmMgPSAxOwogCQl9CiAJCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL21lZGlhLWRldm5vZGUuYyBiL2RyaXZlcnMvbWVkaWEvbWVkaWEtZGV2bm9kZS5jCmluZGV4IGFmNTI2M2MuLjdiNDJhY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvbWVkaWEtZGV2bm9kZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvbWVkaWEtZGV2bm9kZS5jCkBAIC0yMTMsMTQgKzIxMywxNCBAQAogCiAJLyogUGFydCAxOiBGaW5kIGEgZnJlZSBtaW5vciBudW1iZXIgKi8KIAltdXRleF9sb2NrKCZtZWRpYV9kZXZub2RlX2xvY2spOwotCW1pbm9yID0gZmluZF9uZXh0X3plcm9fYml0KG1lZGlhX2Rldm5vZGVfbnVtcywgMCwgTUVESUFfTlVNX0RFVklDRVMpOworCW1pbm9yID0gZmluZF9uZXh0X3plcm9fYml0KG1lZGlhX2Rldm5vZGVfbnVtcywgTUVESUFfTlVNX0RFVklDRVMsIDApOwogCWlmIChtaW5vciA9PSBNRURJQV9OVU1fREVWSUNFUykgewogCQltdXRleF91bmxvY2soJm1lZGlhX2Rldm5vZGVfbG9jayk7CiAJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IGdldCBhIGZyZWUgbWlub3JcbiIpOwogCQlyZXR1cm4gLUVORklMRTsKIAl9CiAKLQlzZXRfYml0KG1kZXYtPm1pbm9yLCBtZWRpYV9kZXZub2RlX251bXMpOworCXNldF9iaXQobWlub3IsIG1lZGlhX2Rldm5vZGVfbnVtcyk7CiAJbXV0ZXhfdW5sb2NrKCZtZWRpYV9kZXZub2RlX2xvY2spOwogCiAJbWRldi0+bWlub3IgPSBtaW5vcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IDIzNTQzMzYuLjkzNDE4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bWVkaWEvY3gyNTg0MC5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8c3RhZ2luZy9hbHRlcmEuaD4KIAorI2luY2x1ZGUgIi4uLy4uLy4uL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS5oIgogI2luY2x1ZGUgImN4MjM4ODUuaCIKICNpbmNsdWRlICJ0dW5lci14YzIwMjguaCIKICNpbmNsdWRlICJuZXR1cC1pbml0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYjlkOTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb2Fyc2VfZXhwb19hdXRvZ2Fpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiBBdXRvIGdhaW4gYWxnb3JpdGhtIGZvciBjYW1lcmEncyB3aXRoIGEgY29hcnNlIGV4cG9zdXJlIGNvbnRyb2wKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotLyogQXV0b2dhaW4gKyBleHBvc3VyZSBhbGdvcml0aG0gZm9yIGNhbWVyYXMgd2l0aCBhIGNvYXJzZSBleHBvc3VyZSBjb250cm9sCi0gICAodXN1YWxseSB0aGlzIG1lYW5zIHdlIGNhbiBvbmx5IGNvbnRyb2wgdGhlIGNsb2NrZGl2IHRvIGNoYW5nZSBleHBvc3VyZSkKLSAgIEFzIGNoYW5naW5nIHRoZSBjbG9ja2RpdiBzbyB0aGF0IHRoZSBmcHMgZHJvcHMgZnJvbSAzMCB0byAxNSBmcHMgZm9yCi0gICBleGFtcGxlLCB3aWxsIGxlYWQgdG8gYSBodWdlIGV4cG9zdXJlIGNoYW5nZSAoaXQgZWZmZWN0aXZlbHkgZG91YmxlcyksCi0gICB0aGlzIGFsZ29yaXRobSBub3JtYWxseSB0cmllcyB0byBvbmx5IGFkanVzdCB0aGUgZ2FpbiAoYmV0d2VlbiA0MCBhbmQKLSAgIDgwICUpIGFuZCBpZiB0aGF0IGRvZXMgbm90IGhlbHAsIG9ubHkgdGhlbiBjaGFuZ2VzIGV4cG9zdXJlLiBUaGlzIGxlYWRzCi0gICB0byBhIG11Y2ggbW9yZSBzdGFibGUgaW1hZ2UgdGhlbiB1c2luZyB0aGUga25lZSBhbGdvcml0aG0gd2hpY2ggYXQKLSAgIGNlcnRhaW4gcG9pbnRzIG9mIHRoZSBrbmVlIGdyYXBoIHdpbGwgb25seSB0cnkgdG8gYWRqdXN0IGV4cG9zdXJlLAotICAgd2hpY2ggbGVhZHMgdG8gb3NjaWxhdGluZyBhcyBvbmUgZXhwb3N1cmUgc3RlcCBpcyBodWdlLgotCi0gICBOb3RlIHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBzZCBzdHJ1Y3QgZm9yIHRoZSBjYW0gaW4gcXVlc3Rpb24gaGFzCi0gICBleHBfdG9vX2hpZ2hfY250IGFuZCBleHBfdG9vX2hpZ2hfY250IGludCBtZW1iZXJzIGZvciB1c2UgYnkgdGhpcyBmdW5jdGlvbi4KLQotICAgUmV0dXJucyAwIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLCAxIGlmIHRoZSBnYWluIGFuZCBvciBleHBvc3VyZSBzZXR0aW5ncwotICAgd2hlcmUgY2hhbmdlZC4gKi8KLXN0YXRpYyBpbnQgZ3NwY2FfY29hcnNlX2dyYWluZWRfZXhwb19hdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JaW50IGF2Z19sdW0sIGludCBkZXNpcmVkX2F2Z19sdW0sIGludCBkZWFkem9uZSkKLXsKLQlpbnQgaSwgc3RlcHMsIGdhaW4sIG9yaWdfZ2FpbiwgZXhwb3N1cmUsIG9yaWdfZXhwb3N1cmU7Ci0JaW50IGdhaW5fbG93LCBnYWluX2hpZ2g7Ci0JY29uc3Qgc3RydWN0IGN0cmwgKmdhaW5fY3RybCA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IGN0cmwgKmV4cG9zdXJlX2N0cmwgPSBOVUxMOwotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5jdHJsczsgaSsrKSB7Ci0JCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgaSkpCi0JCQljb250aW51ZTsKLQkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV0ucWN0cmwuaWQgPT0gVjRMMl9DSURfR0FJTikKLQkJCWdhaW5fY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOwotCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9FWFBPU1VSRSkKLQkJCWV4cG9zdXJlX2N0cmwgPSAmZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXTsKLQl9Ci0JaWYgKCFnYWluX2N0cmwgfHwgIWV4cG9zdXJlX2N0cmwpIHsKLQkJUERFQlVHKERfRVJSLCAiRXJyb3I6IGdzcGNhX2NvYXJzZV9ncmFpbmVkX2V4cG9fYXV0b2dhaW4gIgotCQkJImNhbGxlZCBvbiBjYW0gd2l0aG91dCBnYWluIG9yIGV4cG9zdXJlIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChnYWluX2N0cmwtPmdldChnc3BjYV9kZXYsICZnYWluKSB8fAotCSAgICBleHBvc3VyZV9jdHJsLT5nZXQoZ3NwY2FfZGV2LCAmZXhwb3N1cmUpKQotCQlyZXR1cm4gMDsKLQotCW9yaWdfZ2FpbiA9IGdhaW47Ci0Jb3JpZ19leHBvc3VyZSA9IGV4cG9zdXJlOwotCWdhaW5fbG93ID0KLQkJKGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSAtIGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkgLyA1ICogMjsKLQlnYWluX2xvdyArPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07Ci0JZ2Fpbl9oaWdoID0KLQkJKGdhaW5fY3RybC0+cWN0cmwubWF4aW11bSAtIGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkgLyA1ICogNDsKLQlnYWluX2hpZ2ggKz0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtOwotCi0JLyogSWYgd2UgYXJlIG9mIGEgbXVsdGlwbGUgb2YgZGVhZHpvbmUsIGRvIG11bHRpcGxlIHN0ZXBzIHRvIHJlYWNoIHRoZQotCSAgIGRlc2lyZWQgbHVtaW5hdGlvbiBmYXN0ICh3aXRoIHRoZSByaXNjIG9mIGEgc2xpZ2h0IG92ZXJzaG9vdCkgKi8KLQlzdGVwcyA9IChkZXNpcmVkX2F2Z19sdW0gLSBhdmdfbHVtKSAvIGRlYWR6b25lOwotCi0JUERFQlVHKERfRlJBTSwgImF1dG9nYWluOiBsdW06ICVkLCBkZXNpcmVkOiAlZCwgc3RlcHM6ICVkIiwKLQkJYXZnX2x1bSwgZGVzaXJlZF9hdmdfbHVtLCBzdGVwcyk7Ci0KLQlpZiAoKGdhaW4gKyBzdGVwcykgPiBnYWluX2hpZ2ggJiYKLQkgICAgc2QtPmV4cG9zdXJlIDwgZXhwb3N1cmVfY3RybC0+cWN0cmwubWF4aW11bSkgewotCQlnYWluID0gZ2Fpbl9oaWdoOwotCQlzZC0+ZXhwX3Rvb19sb3dfY250Kys7Ci0JfSBlbHNlIGlmICgoZ2FpbiArIHN0ZXBzKSA8IGdhaW5fbG93ICYmCi0JCSAgIHNkLT5leHBvc3VyZSA+IGV4cG9zdXJlX2N0cmwtPnFjdHJsLm1pbmltdW0pIHsKLQkJZ2FpbiA9IGdhaW5fbG93OwotCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCsrOwotCX0gZWxzZSB7Ci0JCWdhaW4gKz0gc3RlcHM7Ci0JCWlmIChnYWluID4gZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtKQotCQkJZ2FpbiA9IGdhaW5fY3RybC0+cWN0cmwubWF4aW11bTsKLQkJZWxzZSBpZiAoZ2FpbiA8IGdhaW5fY3RybC0+cWN0cmwubWluaW11bSkKLQkJCWdhaW4gPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07Ci0JCXNkLT5leHBfdG9vX2hpZ2hfY250ID0gMDsKLQkJc2QtPmV4cF90b29fbG93X2NudCA9IDA7Ci0JfQotCi0JaWYgKHNkLT5leHBfdG9vX2hpZ2hfY250ID4gMykgewotCQlleHBvc3VyZS0tOwotCQlzZC0+ZXhwX3Rvb19oaWdoX2NudCA9IDA7Ci0JfSBlbHNlIGlmIChzZC0+ZXhwX3Rvb19sb3dfY250ID4gMykgewotCQlleHBvc3VyZSsrOwotCQlzZC0+ZXhwX3Rvb19sb3dfY250ID0gMDsKLQl9Ci0KLQlpZiAoZ2FpbiAhPSBvcmlnX2dhaW4pIHsKLQkJZ2Fpbl9jdHJsLT5zZXQoZ3NwY2FfZGV2LCBnYWluKTsKLQkJcmV0dmFsID0gMTsKLQl9Ci0JaWYgKGV4cG9zdXJlICE9IG9yaWdfZXhwb3N1cmUpIHsKLQkJZXhwb3N1cmVfY3RybC0+c2V0KGdzcGNhX2RldiwgZXhwb3N1cmUpOwotCQlyZXR2YWwgPSAxOwotCX0KLQotCXJldHVybiByZXR2YWw7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggMzZhNDZmYy4uMDU3ZTI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtNjA5LDcgKzYwOSw3IEBACiAgKiBidWZmZXJzLCB0aGVyZSBhcmUgc29tZSBwcmV0dHkgc3RyaWN0IHJlYWwgdGltZSBjb25zdHJhaW50cyBmb3IKICAqIGlzb2Nocm9ub3VzIHRyYW5zZmVyIGZvciBsYXJnZXIgZnJhbWUgc2l6ZXMpLgogICovCi0vKmpmbTogdGhpcyB2YWx1ZSB3b3JrcyB3ZWxsIGZvciAxNjAweDEyMDAsIGJ1dCBub3QgODAweDYwMCAtIHNlZSBpc29jX2luaXQgKi8KKy8qamZtOiB0aGlzIHZhbHVlIGRvZXMgbm90IHdvcmsgZm9yIDgwMHg2MDAgLSBzZWUgaXNvY19pbml0ICovCiAjZGVmaW5lIE9WRlgyX0JVTEtfU0laRSAoMTMgKiA0MDk2KQogCiAvKiBJMkMgcmVnaXN0ZXJzICovCkBAIC0zMzA3LDYgKzMzMDcsNyBAQAogCiAJZ3NwY2FfZGV2LT5jYW0uY3RybHMgPSBzZC0+Y3RybHM7CiAJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKKwlzZC0+ZnJhbWVfcmF0ZSA9IDE1OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNDY5LDcgKzM0NzAsNiBAQAogCQkJCUFSUkFZX1NJWkUoaW5pdF81MTlfb3Y3NjYwKSk7CiAJCXdyaXRlX2kyY19yZWd2YWxzKHNkLCBub3JtXzc2NjAsIEFSUkFZX1NJWkUobm9ybV83NjYwKSk7CiAJCXNkLT5nc3BjYV9kZXYuY3Vycl9tb2RlID0gMTsJLyogNjQweDQ4MCAqLwotCQlzZC0+ZnJhbWVfcmF0ZSA9IDE1OwogCQlvdjUxOV9zZXRfbW9kZShzZCk7CiAJCW92NTE5X3NldF9mcihzZCk7CiAJCXNkLT5jdHJsc1tDT0xPUlNdLm1heCA9IDQ7CS8qIDAuLjQgKi8KQEAgLTM1MTEsNyArMzUxMSw3IEBACiAKIAlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKIAljYXNlIEJSSURHRV9PVkZYMjoKLQkJaWYgKGdzcGNhX2Rldi0+d2lkdGggPT0gMTYwMCkKKwkJaWYgKGdzcGNhX2Rldi0+d2lkdGggIT0gODAwKQogCQkJZ3NwY2FfZGV2LT5jYW0uYnVsa19zaXplID0gT1ZGWDJfQlVMS19TSVpFOwogCQllbHNlCiAJCQlnc3BjYV9kZXYtPmNhbS5idWxrX3NpemUgPSA3ICogNDA5NjsKQEAgLTQ0NzgsNyArNDQ3OCw3IEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOwogCiAJLyogQSBzaG9ydCByZWFkIHNpZ25hbHMgRU9GICovCi0JaWYgKGxlbiA8IE9WRlgyX0JVTEtfU0laRSkgeworCWlmIChsZW4gPCBnc3BjYV9kZXYtPmNhbS5idWxrX3NpemUpIHsKIAkJLyogSWYgdGhlIGZyYW1lIGlzIHNob3J0LCBhbmQgaXQgaXMgb25lIG9mIHRoZSBmaXJzdCBvbmVzCiAJCSAgIHRoZSBzZW5zb3IgYW5kIGJyaWRnZSBhcmUgc3RpbGwgc3luY2luZywgc28gZHJvcCBpdC4gKi8KIAkJaWYgKHNkLT5maXJzdF9mcmFtZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKaW5kZXggNjQxNWFmZi4uODFiOGE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCkBAIC02MCw3ICs2MCw3IEBACiAKIAl1MzIgcGt0c3o7CQkJLyogKHVzZWQgYnkgcGt0X3NjYW4pICovCiAJdTE2IG5wa3Q7Ci0JdTggbmNoZzsKKwlzOCBuY2hnOwogCXM4IHNob3J0X21hcms7CiAKIAl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaAppbmRleCBiNTM4ZGNlLi5hMTRhODRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCkBAIC0xMjUsNyArMTI1LDcgQEAKICNkZWZpbmUgSERDU19TTEVFUF9NT0RFCQkoMSA8PCAxKQogCiAjZGVmaW5lIEhEQ1NfREVGQVVMVF9FWFBPU1VSRQk0OAotI2RlZmluZSBIRENTX0RFRkFVTFRfR0FJTgkxMjgKKyNkZWZpbmUgSERDU19ERUZBVUxUX0dBSU4JNTAKIAogc3RhdGljIGludCBoZGNzX3Byb2JlXzF4MDAoc3RydWN0IHNkICpzZCk7CiBzdGF0aWMgaW50IGhkY3NfcHJvYmVfMTAyMChzdHJ1Y3Qgc2QgKnNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKaW5kZXggYTRlNGRmZC4uMGZiNzU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMKQEAgLTEzMjgsNiArMTMyOCw4IEBACiAJaWYgKCFpdHYtPmhhc19jeDIzNDE1KQogCQl3cml0ZV9yZWdfc3luYygweDAzLCBJVlRWX1JFR19ETUFDT05UUk9MKTsKIAorCWl2dHZfc19zdGRfZW5jKGl0diwgJml0di0+dHVuZXJfc3RkKTsKKwogCS8qIERlZmF1bHQgaW50ZXJydXB0cyBlbmFibGVkLiBGb3IgdGhlIFBWUjM1MCB0aGlzIGluY2x1ZGVzIHRoZQogCSAgIGRlY29kZXIgVlNZTkMgaW50ZXJydXB0LCB3aGljaCBpcyBhbHdheXMgb24uIEl0IGlzIG5vdCBvbmx5IHVzZWQKIAkgICBkdXJpbmcgZGVjb2RpbmcgYnV0IGFsc28gYnkgdGhlIE9TRC4KQEAgLTEzMzYsMTIgKzEzMzgsMTAgQEAKIAlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkgewogCQlpdnR2X2NsZWFyX2lycV9tYXNrKGl0diwgSVZUVl9JUlFfTUFTS19JTklUIHwgSVZUVl9JUlFfREVDX1ZTWU5DKTsKIAkJaXZ0dl9zZXRfb3NkX2FscGhhKGl0dik7Ci0JfQotCWVsc2UKKwkJaXZ0dl9zX3N0ZF9kZWMoaXR2LCAmaXR2LT50dW5lcl9zdGQpOworCX0gZWxzZSB7CiAJCWl2dHZfY2xlYXJfaXJxX21hc2soaXR2LCBJVlRWX0lSUV9NQVNLX0lOSVQpOwotCi0JLyogRm9yIGNhcmRzIHdpdGggdmlkZW8gb3V0LCB0aGlzIGNhbGwgbmVlZHMgaW50ZXJydXB0cyBlbmFibGVkICovCi0JaXZ0dl9zX3N0ZChOVUxMLCAmZmgsICZpdHYtPnR1bmVyX3N0ZCk7CisJfQogCiAJLyogU2V0dXAgaW5pdGlhbCBjb250cm9scyAqLwogCWN4MjM0MXhfaGFuZGxlcl9zZXR1cCgmaXR2LT5jeGhkbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwppbmRleCAxNGExY2VhLi4wMmM1YWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKQEAgLTI4MCw4ICsyODAsNiBAQAogewogCWludCByYyA9IDA7CiAJdjRsMl9zdGRfaWQgc3RkOwotCXN0cnVjdCBpdnR2X29wZW5faWQgZmg7Ci0JZmguaXR2ID0gaXR2OwogCiAJaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpCiAJCS8qIERpc3BsYXkgdGVzdCBpbWFnZSBkdXJpbmcgcmVzdGFydCAqLwpAQCAtMzAxLDE0ICsyOTksMTkgQEAKIAkvKiBBbGxvdyBzZXR0aW5ncyB0byByZWxvYWQgKi8KIAlpdnR2X21haWxib3hfY2FjaGVfaW52YWxpZGF0ZShpdHYpOwogCi0JLyogUmVzdG9yZSB2aWRlbyBzdGFuZGFyZCAqLworCS8qIFJlc3RvcmUgZW5jb2RlciB2aWRlbyBzdGFuZGFyZCAqLwogCXN0ZCA9IGl0di0+c3RkOwogCWl0di0+c3RkID0gMDsKLQlpdnR2X3Nfc3RkKE5VTEwsICZmaCwgJnN0ZCk7CisJaXZ0dl9zX3N0ZF9lbmMoaXR2LCAmc3RkKTsKIAogCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSB7CiAJCWl2dHZfaW5pdF9tcGVnX2RlY29kZXIoaXR2KTsKIAorCQkvKiBSZXN0b3JlIGRlY29kZXIgdmlkZW8gc3RhbmRhcmQgKi8KKwkJc3RkID0gaXR2LT5zdGRfb3V0OworCQlpdHYtPnN0ZF9vdXQgPSAwOworCQlpdnR2X3Nfc3RkX2RlYyhpdHYsICZzdGQpOworCiAJCS8qIFJlc3RvcmUgZnJhbWVidWZmZXIgaWYgYWN0aXZlICovCiAJCWlmIChpdHYtPml2dHZmYl9yZXN0b3JlKQogCQkJaXR2LT5pdnR2ZmJfcmVzdG9yZShpdHYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKaW5kZXggMTY4OTc4My4uZjllMzQ3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCkBAIC0xMDcxLDI4ICsxMDcxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGl2dHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqc3RkKQordm9pZCBpdnR2X3Nfc3RkX2VuYyhzdHJ1Y3QgaXZ0diAqaXR2LCB2NGwyX3N0ZF9pZCAqc3RkKQogewotCURFRklORV9XQUlUKHdhaXQpOwotCXN0cnVjdCBpdnR2ICppdHYgPSBmaDJpZChmaCktPml0djsKLQlzdHJ1Y3QgeXV2X3BsYXliYWNrX2luZm8gKnlpID0gJml0di0+eXV2X2luZm87Ci0JaW50IGY7Ci0KLQlpZiAoKCpzdGQgJiBWNEwyX1NURF9BTEwpID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCpzdGQgPT0gaXR2LT5zdGQpCi0JCXJldHVybiAwOwotCi0JaWYgKHRlc3RfYml0KElWVFZfRl9JX1JBRElPX1VTRVIsICZpdHYtPmlfZmxhZ3MpIHx8Ci0JICAgIGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPiAwIHx8Ci0JICAgIGF0b21pY19yZWFkKCZpdHYtPmRlY29kaW5nKSA+IDApIHsKLQkJLyogU3dpdGNoaW5nIHN0YW5kYXJkIHdvdWxkIHR1cm4gb2ZmIHRoZSByYWRpbyBvciBtZXNzCi0JCSAgIHdpdGggYWxyZWFkeSBydW5uaW5nIHN0cmVhbXMsIHByZXZlbnQgdGhhdCBieQotCQkgICByZXR1cm5pbmcgRUJVU1kuICovCi0JCXJldHVybiAtRUJVU1k7Ci0JfQotCiAJaXR2LT5zdGQgPSAqc3RkOwogCWl0di0+aXNfNjBoeiA9ICgqc3RkICYgVjRMMl9TVERfNTI1XzYwKSA/IDEgOiAwOwogCWl0di0+aXNfNTBoeiA9ICFpdHYtPmlzXzYwaHo7CkBAIC0xMTA2LDQ4ICsxMDg2LDc5IEBACiAJaWYgKGl0di0+aHdfZmxhZ3MgJiBJVlRWX0hXX0NYMjU4NDApCiAJCWl0di0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSA9IGl0di0+aXNfNjBoeiA/IDI3MiA6IDI4NDsKIAotCUlWVFZfREVCVUdfSU5GTygiU3dpdGNoaW5nIHN0YW5kYXJkIHRvICVsbHguXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWl0di0+c3RkKTsKLQogCS8qIFR1bmVyICovCiAJaXZ0dl9jYWxsX2FsbChpdHYsIGNvcmUsIHNfc3RkLCBpdHYtPnN0ZCk7Cit9CiAKLQlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkgewotCQkvKiBzZXQgZGlzcGxheSBzdGFuZGFyZCAqLwotCQlpdHYtPnN0ZF9vdXQgPSAqc3RkOwotCQlpdHYtPmlzX291dF82MGh6ID0gaXR2LT5pc182MGh6OwotCQlpdHYtPmlzX291dF81MGh6ID0gaXR2LT5pc181MGh6OwotCQlpdnR2X2NhbGxfYWxsKGl0diwgdmlkZW8sIHNfc3RkX291dHB1dCwgaXR2LT5zdGRfb3V0KTsKK3ZvaWQgaXZ0dl9zX3N0ZF9kZWMoc3RydWN0IGl2dHYgKml0diwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgeXV2X3BsYXliYWNrX2luZm8gKnlpID0gJml0di0+eXV2X2luZm87CisJREVGSU5FX1dBSVQod2FpdCk7CisJaW50IGY7CiAKLQkJLyoKLQkJICogVGhlIG5leHQgZmlybXdhcmUgY2FsbCBpcyB0aW1lIHNlbnNpdGl2ZS4gVGltZSBpdCB0bwotCQkgKiBhdm9pZCByaXNrIG9mIGEgaGFyZCBsb2NrLCBieSB0cnlpbmcgdG8gZW5zdXJlIHRoZSBjYWxsCi0JCSAqIGhhcHBlbnMgd2l0aGluIHRoZSBmaXJzdCAxMDAgbGluZXMgb2YgdGhlIHRvcCBmaWVsZC4KLQkJICogTWFrZSA0IGF0dGVtcHRzIHRvIHN5bmMgdG8gdGhlIGRlY29kZXIgYmVmb3JlIGdpdmluZyB1cC4KLQkJICovCi0JCWZvciAoZiA9IDA7IGYgPCA0OyBmKyspIHsKLQkJCXByZXBhcmVfdG9fd2FpdCgmaXR2LT52c3luY193YWl0cSwgJndhaXQsCi0JCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCWlmICgocmVhZF9yZWcoSVZUVl9SRUdfREVDX0xJTkVfRklFTEQpID4+IDE2KSA8IDEwMCkKLQkJCQlicmVhazsKLQkJCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygyNSkpOwotCQl9Ci0JCWZpbmlzaF93YWl0KCZpdHYtPnZzeW5jX3dhaXRxLCAmd2FpdCk7CisJLyogc2V0IGRpc3BsYXkgc3RhbmRhcmQgKi8KKwlpdHYtPnN0ZF9vdXQgPSAqc3RkOworCWl0di0+aXNfb3V0XzYwaHogPSAoKnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyAxIDogMDsKKwlpdHYtPmlzX291dF81MGh6ID0gIWl0di0+aXNfb3V0XzYwaHo7CisJaXZ0dl9jYWxsX2FsbChpdHYsIHZpZGVvLCBzX3N0ZF9vdXRwdXQsIGl0di0+c3RkX291dCk7CiAKLQkJaWYgKGYgPT0gNCkKLQkJCUlWVFZfV0FSTigiTW9kZSBjaGFuZ2UgZmFpbGVkIHRvIHN5bmMgdG8gZGVjb2RlclxuIik7Ci0KLQkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9ERUNfU0VUX1NUQU5EQVJELCAxLCBpdHYtPmlzX291dF81MGh6KTsKLQkJaXR2LT5tYWluX3JlY3QubGVmdCA9IGl0di0+bWFpbl9yZWN0LnRvcCA9IDA7Ci0JCWl0di0+bWFpbl9yZWN0LndpZHRoID0gNzIwOwotCQlpdHYtPm1haW5fcmVjdC5oZWlnaHQgPSBpdHYtPmN4aGRsLmhlaWdodDsKLQkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9PU0RfU0VUX0ZSQU1FQlVGRkVSX1dJTkRPVywgNCwKLQkJCTcyMCwgaXR2LT5tYWluX3JlY3QuaGVpZ2h0LCAwLCAwKTsKLQkJeWktPm1haW5fcmVjdCA9IGl0di0+bWFpbl9yZWN0OwotCQlpZiAoIWl0di0+b3NkX2luZm8pIHsKLQkJCXlpLT5vc2RfZnVsbF93ID0gNzIwOwotCQkJeWktPm9zZF9mdWxsX2ggPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOwotCQl9CisJLyoKKwkgKiBUaGUgbmV4dCBmaXJtd2FyZSBjYWxsIGlzIHRpbWUgc2Vuc2l0aXZlLiBUaW1lIGl0IHRvCisJICogYXZvaWQgcmlzayBvZiBhIGhhcmQgbG9jaywgYnkgdHJ5aW5nIHRvIGVuc3VyZSB0aGUgY2FsbAorCSAqIGhhcHBlbnMgd2l0aGluIHRoZSBmaXJzdCAxMDAgbGluZXMgb2YgdGhlIHRvcCBmaWVsZC4KKwkgKiBNYWtlIDQgYXR0ZW1wdHMgdG8gc3luYyB0byB0aGUgZGVjb2RlciBiZWZvcmUgZ2l2aW5nIHVwLgorCSAqLworCWZvciAoZiA9IDA7IGYgPCA0OyBmKyspIHsKKwkJcHJlcGFyZV90b193YWl0KCZpdHYtPnZzeW5jX3dhaXRxLCAmd2FpdCwKKwkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCWlmICgocmVhZF9yZWcoSVZUVl9SRUdfREVDX0xJTkVfRklFTEQpID4+IDE2KSA8IDEwMCkKKwkJCWJyZWFrOworCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMjUpKTsKIAl9CisJZmluaXNoX3dhaXQoJml0di0+dnN5bmNfd2FpdHEsICZ3YWl0KTsKKworCWlmIChmID09IDQpCisJCUlWVFZfV0FSTigiTW9kZSBjaGFuZ2UgZmFpbGVkIHRvIHN5bmMgdG8gZGVjb2RlclxuIik7CisKKwlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfU1RBTkRBUkQsIDEsIGl0di0+aXNfb3V0XzUwaHopOworCWl0di0+bWFpbl9yZWN0LmxlZnQgPSAwOworCWl0di0+bWFpbl9yZWN0LnRvcCA9IDA7CisJaXR2LT5tYWluX3JlY3Qud2lkdGggPSA3MjA7CisJaXR2LT5tYWluX3JlY3QuaGVpZ2h0ID0gaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKKwlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX09TRF9TRVRfRlJBTUVCVUZGRVJfV0lORE9XLCA0LAorCQk3MjAsIGl0di0+bWFpbl9yZWN0LmhlaWdodCwgMCwgMCk7CisJeWktPm1haW5fcmVjdCA9IGl0di0+bWFpbl9yZWN0OworCWlmICghaXR2LT5vc2RfaW5mbykgeworCQl5aS0+b3NkX2Z1bGxfdyA9IDcyMDsKKwkJeWktPm9zZF9mdWxsX2ggPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOworCX0KK30KKworaW50IGl2dHZfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCBpdnR2ICppdHYgPSBmaDJpZChmaCktPml0djsKKworCWlmICgoKnN0ZCAmIFY0TDJfU1REX0FMTCkgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKnN0ZCA9PSBpdHYtPnN0ZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodGVzdF9iaXQoSVZUVl9GX0lfUkFESU9fVVNFUiwgJml0di0+aV9mbGFncykgfHwKKwkgICAgYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA+IDAgfHwKKwkgICAgYXRvbWljX3JlYWQoJml0di0+ZGVjb2RpbmcpID4gMCkgeworCQkvKiBTd2l0Y2hpbmcgc3RhbmRhcmQgd291bGQgbWVzcyB3aXRoIGFscmVhZHkgcnVubmluZworCQkgICBzdHJlYW1zLCBwcmV2ZW50IHRoYXQgYnkgcmV0dXJuaW5nIEVCVVNZLiAqLworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCUlWVFZfREVCVUdfSU5GTygiU3dpdGNoaW5nIHN0YW5kYXJkIHRvICVsbHguXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWl0di0+c3RkKTsKKworCWl2dHZfc19zdGRfZW5jKGl0diwgc3RkKTsKKwlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkKKwkJaXZ0dl9zX3N0ZF9kZWMoaXR2LCBzdGQpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5oCmluZGV4IDU4ZjAwMzQuLjg5MTg1Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuaApAQCAtMjcsNyArMjcsOCBAQAogdm9pZCBpdnR2X3NldF9vc2RfYWxwaGEoc3RydWN0IGl2dHYgKml0dik7CiBpbnQgaXZ0dl9zZXRfc3BlZWQoc3RydWN0IGl2dHYgKml0diwgaW50IHNwZWVkKTsKIHZvaWQgaXZ0dl9zZXRfZnVuY3Moc3RydWN0IHZpZGVvX2RldmljZSAqdmRldik7Ci1pbnQgaXZ0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpzdGQpOwordm9pZCBpdnR2X3Nfc3RkX2VuYyhzdHJ1Y3QgaXZ0diAqaXR2LCB2NGwyX3N0ZF9pZCAqc3RkKTsKK3ZvaWQgaXZ0dl9zX3N0ZF9kZWMoc3RydWN0IGl2dHYgKml0diwgdjRsMl9zdGRfaWQgKnN0ZCk7CiBpbnQgaXZ0dl9zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqdmYpOwogaW50IGl2dHZfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnApOwogbG9uZyBpdnR2X3Y0bDJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwppbmRleCA5NDI2ODMzLi5lNzc5NGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCkBAIC01ODksNyArNTg5LDcgQEAKIAkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX2F1ZGlvLCBhdWRpbywgc19zdHJlYW0sIDEpOwogCQkvKiBBdm9pZCB1bnByZWRpY3RhYmxlIFBDSSBidXMgaGFuZyAtIGRpc2FibGUgdmlkZW8gY2xvY2tzICovCiAJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIHNfc3RyZWFtLCAwKTsKLQkJaXZ0dl9tc2xlZXBfdGltZW91dCgzMDAsIDEpOworCQlpdnR2X21zbGVlcF90aW1lb3V0KDMwMCwgMCk7CiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX0lOSVRJQUxJWkVfSU5QVVQsIDApOwogCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIHZpZGVvLCBzX3N0cmVhbSwgMSk7CiAJfQpAQCAtODM0LDcgKzgzNCw3IEBACiAJCX0KIAogCQkvKiBIYW5kbGUgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCQlpdnR2X21zbGVlcF90aW1lb3V0KDEwMCwgMSk7CisJCWl2dHZfbXNsZWVwX3RpbWVvdXQoMTAwLCAwKTsKIAl9CiAKIAlhdG9taWNfZGVjKCZpdHYtPmNhcHR1cmluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCmluZGV4IGI2ZWI1MWMuLjI5M2RiODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCkBAIC03MSw3ICs3MSw3IEBACiAJICAgVHVybmluZyB0aGlzIHNpZ25hbCBvbiBhbmQgb2ZmIGNhbiBjb25mdXNlIGNlcnRhaW4KIAkgICBUVnMuIEFzIGZhciBhcyBJIGNhbiB0ZWxsIHRoZXJlIGlzIG5vIHJlYXNvbiBub3QgdG8KIAkgICB0cmFuc21pdCB0aGlzIHNpZ25hbC4gKi8KLQlpZiAoKGl0di0+c3RkICYgVjRMMl9TVERfNjI1XzUwKSAmJiAhZW5hYmxlZCkgeworCWlmICgoaXR2LT5zdGRfb3V0ICYgVjRMMl9TVERfNjI1XzUwKSAmJiAhZW5hYmxlZCkgewogCQllbmFibGVkID0gMTsKIAkJbW9kZSA9IDB4MDg7ICAvKiA0eDMgZnVsbCBmb3JtYXQgKi8KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKaW5kZXggMTcyNDc0NS4uNmI3YzljOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAKIHN0YXRpYyBpbnQgaXZ0dmZiX3NldF9kaXNwbGF5X3dpbmRvdyhzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgdjRsMl9yZWN0ICppdnR2X3dpbmRvdykKIHsKLQlpbnQgb3NkX2hlaWdodF9saW1pdCA9IGl0di0+aXNfNTBoeiA/IDU3NiA6IDQ4MDsKKwlpbnQgb3NkX2hlaWdodF9saW1pdCA9IGl0di0+aXNfb3V0XzUwaHogPyA1NzYgOiA0ODA7CiAKIAkvKiBPbmx5IGZhaWwgaWYgcmVzb2x1dGlvbiB0b28gaGlnaCwgb3RoZXJ3aXNlIGZ1ZGdlIHRoZSBzdGFydCBjb29yZHMuICovCiAJaWYgKChpdnR2X3dpbmRvdy0+aGVpZ2h0ID4gb3NkX2hlaWdodF9saW1pdCkgfHwgKGl2dHZfd2luZG93LT53aWR0aCA+IElWVFZfT1NEX01BWF9XSURUSCkpCkBAIC00NzEsOSArNDcxLDkgQEAKIAkJCXZibGFuay5mbGFncyA9IEZCX1ZCTEFOS19IQVZFX0NPVU5UIHxGQl9WQkxBTktfSEFWRV9WQ09VTlQgfAogCQkJCQlGQl9WQkxBTktfSEFWRV9WU1lOQzsKIAkJCXRyYWNlID0gcmVhZF9yZWcoSVZUVl9SRUdfREVDX0xJTkVfRklFTEQpID4+IDE2OwotCQkJaWYgKGl0di0+aXNfNTBoeiAmJiB0cmFjZSA+IDMxMikKKwkJCWlmIChpdHYtPmlzX291dF81MGh6ICYmIHRyYWNlID4gMzEyKQogCQkJCXRyYWNlIC09IDMxMjsKLQkJCWVsc2UgaWYgKGl0di0+aXNfNjBoeiAmJiB0cmFjZSA+IDI2MikKKwkJCWVsc2UgaWYgKGl0di0+aXNfb3V0XzYwaHogJiYgdHJhY2UgPiAyNjIpCiAJCQkJdHJhY2UgLT0gMjYyOwogCQkJaWYgKHRyYWNlID09IDEpCiAJCQkJdmJsYW5rLmZsYWdzIHw9IEZCX1ZCTEFOS19WU1lOQ0lORzsKQEAgLTY1Niw3ICs2NTYsNyBAQAogCUlWVFZGQl9ERUJVR19JTkZPKCJpdnR2ZmJfY2hlY2tfdmFyXG4iKTsKIAogCS8qIFNldCBiYXNlIHJlZmVyZW5jZXMgZm9yIG1vZGUgY2FsY3MuICovCi0JaWYgKGl0di0+aXNfNTBoeikgeworCWlmIChpdHYtPmlzX291dF81MGh6KSB7CiAJCXBpeGNsb2NrID0gODQzMTY7CiAJCWhsaW1pdCA9IDc3NjsKIAkJdmxpbWl0ID0gNTkxOwpAQCAtNzg0LDEyICs3ODQsMTIgQEAKIAkgICBJZiB0aGUgbWFyZ2lucyBhcmUgdG9vIGxhcmdlLCBqdXN0IGNlbnRlciB0aGUgc2NyZWVuCiAJICAgKGVuZm9yY2luZyBtYXJnaW5zIGNhdXNlcyB0b28gbWFueSBwcm9ibGVtcykgKi8KIAotCWlmICh2YXItPmxlZnRfbWFyZ2luICsgdmFyLT54cmVzID4gSVZUVl9PU0RfTUFYX1dJRFRIICsgMSkgeworCWlmICh2YXItPmxlZnRfbWFyZ2luICsgdmFyLT54cmVzID4gSVZUVl9PU0RfTUFYX1dJRFRIICsgMSkKIAkJdmFyLT5sZWZ0X21hcmdpbiA9IDEgKyAoKElWVFZfT1NEX01BWF9XSURUSCAtIHZhci0+eHJlcykgLyAyKTsKLQl9Ci0JaWYgKHZhci0+dXBwZXJfbWFyZ2luICsgdmFyLT55cmVzID4gKGl0di0+aXNfNTBoeiA/IDU3NyA6IDQ4MSkpIHsKLQkJdmFyLT51cHBlcl9tYXJnaW4gPSAxICsgKCgoaXR2LT5pc181MGh6ID8gNTc2IDogNDgwKSAtIHZhci0+eXJlcykgLyAyKTsKLQl9CisKKwlpZiAodmFyLT51cHBlcl9tYXJnaW4gKyB2YXItPnlyZXMgPiAoaXR2LT5pc19vdXRfNTBoeiA/IDU3NyA6IDQ4MSkpCisJCXZhci0+dXBwZXJfbWFyZ2luID0gMSArICgoKGl0di0+aXNfb3V0XzUwaHogPyA1NzYgOiA0ODApIC0KKwkJCXZhci0+eXJlcykgLyAyKTsKIAogCS8qIE1haW50YWluIG92ZXJhbGwgJ3NpemUnIGZvciBhIGNvbnN0YW50IHJlZnJlc2ggcmF0ZSAqLwogCXZhci0+cmlnaHRfbWFyZ2luID0gaGxpbWl0IC0gdmFyLT5sZWZ0X21hcmdpbiAtIHZhci0+eHJlczsKQEAgLTgzNiw3ICs4MzYsMTIgQEAKIAl1MzIgb3NkX3Bhbl9pbmRleDsKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gKHN0cnVjdCBpdnR2ICopIGluZm8tPnBhcjsKIAotCW9zZF9wYW5faW5kZXggPSAodmFyLT54b2Zmc2V0ICsgKHZhci0+eW9mZnNldCAqIHZhci0+eHJlc192aXJ0dWFsKSkqdmFyLT5iaXRzX3Blcl9waXhlbC84OworCWlmICh2YXItPnlvZmZzZXQgKyBpbmZvLT52YXIueXJlcyA+IGluZm8tPnZhci55cmVzX3ZpcnR1YWwgfHwKKwkgICAgdmFyLT54b2Zmc2V0ICsgaW5mby0+dmFyLnhyZXMgPiBpbmZvLT52YXIueHJlc192aXJ0dWFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9zZF9wYW5faW5kZXggPSB2YXItPnlvZmZzZXQgKiBpbmZvLT5maXgubGluZV9sZW5ndGgKKwkJICAgICAgKyB2YXItPnhvZmZzZXQgKiBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgLyA4OwogCXdyaXRlX3JlZyhvc2RfcGFuX2luZGV4LCAweDAyQTBDKTsKIAogCS8qIFBhc3MgdGhpcyBpbmZvIGJhY2sgdGhlIHl1diBoYW5kbGVyICovCkBAIC0xMDAzLDE5ICsxMDA4LDIxIEBACiAJLyogSGFyZHdhcmUgY29vcmRzIHN0YXJ0IGF0IDAsIHVzZXIgY29vcmRzIHN0YXJ0IGF0IDEuICovCiAJb3NkX2xlZnQtLTsKIAotCXN0YXJ0X3dpbmRvdy5sZWZ0ID0gb3NkX2xlZnQgPj0gMCA/IG9zZF9sZWZ0IDogKChJVlRWX09TRF9NQVhfV0lEVEggLSBzdGFydF93aW5kb3cud2lkdGgpIC8gMik7CisJc3RhcnRfd2luZG93LmxlZnQgPSBvc2RfbGVmdCA+PSAwID8KKwkJIG9zZF9sZWZ0IDogKChJVlRWX09TRF9NQVhfV0lEVEggLSBzdGFydF93aW5kb3cud2lkdGgpIC8gMik7CiAKIAlvaS0+ZGlzcGxheV9ieXRlX3N0cmlkZSA9CiAJCQlzdGFydF93aW5kb3cud2lkdGggKiBvaS0+Ynl0ZXNfcGVyX3BpeGVsOwogCiAJLyogVmVydGljYWwgc2l6ZSAmIHBvc2l0aW9uICovCiAKLQltYXhfaGVpZ2h0ID0gaXR2LT5pc181MGh6ID8gNTc2IDogNDgwOworCW1heF9oZWlnaHQgPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOwogCiAJaWYgKG9zZF95cmVzID4gbWF4X2hlaWdodCkKIAkJb3NkX3lyZXMgPSBtYXhfaGVpZ2h0OwogCi0Jc3RhcnRfd2luZG93LmhlaWdodCA9IG9zZF95cmVzID8gb3NkX3lyZXMgOiBpdHYtPmlzXzUwaHogPyA0ODAgOiA0MDA7CisJc3RhcnRfd2luZG93LmhlaWdodCA9IG9zZF95cmVzID8KKwkJb3NkX3lyZXMgOiBpdHYtPmlzX291dF81MGh6ID8gNDgwIDogNDAwOwogCiAJLyogQ2hlY2sgdmVydGljYWwgc3RhcnQgKG9zZF91cHBlcikuICovCiAJaWYgKG9zZF91cHBlciArIHN0YXJ0X3dpbmRvdy5oZWlnaHQgPiBtYXhfaGVpZ2h0ICsgMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMKaW5kZXggNDcyYTY5My4uYzlmZDA0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIAl9OwogCWludCBpOwogCi0JZGV2X2RiZyhpc3AtPmRldiwgIiIpOworCWRldl9kYmcoaXNwLT5kZXYsICJJU1AgSVJROiAiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5hbWUpOyBpKyspIHsKIAkJaWYgKCgxIDw8IGkpICYgaXJxc3RhdHVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwppbmRleCAzOTg4NjQzLi40ZTRkNDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYwpAQCAtMTUxMiw3ICsxNTEyLDcgQEAKICAqLwogc3RhdGljIGludCBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewotCXN0cnVjdCBkZXZpY2VfdHlwZSAqdHlwZSA9IGljZC0+dmRldi0+ZGV2LnR5cGU7CisJY29uc3Qgc3RydWN0IGRldmljZV90eXBlICp0eXBlID0gaWNkLT52ZGV2LT5kZXYudHlwZTsKIAlpbnQgcmV0OwogCiAJaWYgKCFpY2QtPmRldi5wYXJlbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZW50aXR5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZW50aXR5LmMKaW5kZXggZWRlNzg1Mi4uYzNhYjBjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2VudGl0eS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19lbnRpdHkuYwpAQCAtMzAsNyArMzAsNyBAQAogCXN0cnVjdCB1dmNfZW50aXR5ICpyZW1vdGU7CiAJdW5zaWduZWQgaW50IGk7CiAJdTggcmVtb3RlX3BhZDsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGVudGl0eS0+bnVtX3BhZHM7ICsraSkgewogCQlzdHJ1Y3QgbWVkaWFfZW50aXR5ICpzb3VyY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvYXBkczk5MHguYyBiL2RyaXZlcnMvbWlzYy9hcGRzOTkweC5jCmluZGV4IDIwMDMxMWYuLmUyYTUyZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9hcGRzOTkweC5jCisrKyBiL2RyaXZlcnMvbWlzYy9hcGRzOTkweC5jCkBAIC02MDksNiArNjA5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUE0pIHx8IGRlZmluZWQoQ09ORklHX1BNX1JVTlRJTUUpCiBzdGF0aWMgaW50IGFwZHM5OTB4X2NoaXBfb24oc3RydWN0IGFwZHM5OTB4X2NoaXAgKmNoaXApCiB7CiAJaW50IGVycgkgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShjaGlwLT5yZWdzKSwKQEAgLTYyNCw2ICs2MjUsNyBAQAogCWFwZHM5OTB4X21vZGVfb24oY2hpcCk7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogc3RhdGljIGludCBhcGRzOTkweF9jaGlwX29mZihzdHJ1Y3QgYXBkczk5MHhfY2hpcCAqY2hpcCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9jczU1MzUtbWZncHQuYyBiL2RyaXZlcnMvbWlzYy9jczU1MzUtbWZncHQuYwppbmRleCBlMDFlMDhjLi5iYzY4NWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMKKysrIGIvZHJpdmVycy9taXNjL2NzNTUzNS1tZmdwdC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkJdGltZXJfbnIgPSB0IDwgbWF4ID8gKGludCkgdCA6IC0xOwogCX0gZWxzZSB7CiAJCS8qIGNoZWNrIGlmIHRoZSByZXF1ZXN0ZWQgdGltZXIncyBhdmFpbGFibGUgKi8KLQkJaWYgKHRlc3RfYml0KHRpbWVyX25yLCBtZmdwdC0+YXZhaWwpKQorCQlpZiAoIXRlc3RfYml0KHRpbWVyX25yLCBtZmdwdC0+YXZhaWwpKQogCQkJdGltZXJfbnIgPSAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBuZXQuYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBuZXQuYwppbmRleCBlZTUxMDlhLi40MmYwNjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwbmV0LmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cG5ldC5jCkBAIC00OTUsMTQgKzQ5NSwxNCBAQAogCQl9CiAJfQogCisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwogCWlmIChhdG9taWNfZGVjX3JldHVybigmcXVldWVkX21zZy0+dXNlX2NvdW50KSA9PSAwKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJa2ZyZWUocXVldWVkX21zZyk7CiAJfQogCi0JZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zcGVhcjEzeHhfcGNpZV9nYWRnZXQuYyBiL2RyaXZlcnMvbWlzYy9zcGVhcjEzeHhfcGNpZV9nYWRnZXQuYwppbmRleCA3YWRlZDkwLi5jZmJkZGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc3BlYXIxM3h4X3BjaWVfZ2FkZ2V0LmMKKysrIGIvZHJpdmVycy9taXNjL3NwZWFyMTN4eF9wY2llX2dhZGdldC5jCkBAIC04NDUsNyArODQ1LDcgQEAKIGVycl9pb3VubWFwX2FwcDoKIAlpb3VubWFwKGNvbmZpZy0+dmFfYXBwX2Jhc2UpOwogZXJyX2t6YWxsb2M6Ci0Ja2ZyZWUoY29uZmlnKTsKKwlrZnJlZSh0YXJnZXQpOwogZXJyX3JlbF9yZXM6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlczEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlczEpKTsKIGVycl9yZWxfcmVzMDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKaW5kZXggNWRhNWJlYS4uNzcyMWRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKQEAgLTExNDQsOSArMTE0NCwxNyBAQAogCQllbHNlIGlmIChyZXQgIT0gLUVOT1NZUykKIAkJCWdvdG8gZXJyX2dwaW9fY2Q7CiAKKwkJLyoKKwkJICogQSBncGlvIHBpbiB0aGF0IHdpbGwgZGV0ZWN0IGNhcmRzIHdoZW4gaW5zZXJ0ZWQgYW5kIHJlbW92ZWQKKwkJICogd2lsbCBtb3N0IGxpa2VseSB3YW50IHRvIHRyaWdnZXIgb24gdGhlIGVkZ2VzIGlmIGl0IGlzCisJCSAqIDAgd2hlbiBlamVjdGVkIGFuZCAxIHdoZW4gaW5zZXJ0ZWQgKG9yIG11dGF0aXMgbXV0YW5kaXMKKwkJICogZm9yIHRoZSBpbnZlcnRlZCBjYXNlKSBzbyB3ZSByZXF1ZXN0IHRyaWdnZXJzIG9uIGJvdGgKKwkJICogZWRnZXMuCisJCSAqLwogCQlyZXQgPSByZXF1ZXN0X2FueV9jb250ZXh0X2lycShncGlvX3RvX2lycShwbGF0LT5ncGlvX2NkKSwKLQkJCQkJICAgICAgbW1jaV9jZF9pcnEsIDAsCi0JCQkJCSAgICAgIERSSVZFUl9OQU1FICIgKGNkKSIsIGhvc3QpOworCQkJCW1tY2lfY2RfaXJxLAorCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQlEUklWRVJfTkFNRSAiIChjZCkiLCBob3N0KTsKIAkJaWYgKHJldCA+PSAwKQogCQkJaG9zdC0+Z3Bpb19jZF9pcnEgPSBncGlvX3RvX2lycShwbGF0LT5ncGlvX2NkKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCmluZGV4IDI1OWVjZTAuLjViMmUyMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCkBAIC00MzUsNiArNDM1LDkgQEAKIAkJcmVnID0gcmVndWxhdG9yX2dldChob3N0LT5kZXYsICJ2bW1jX2F1eCIpOwogCQlob3N0LT52Y2NfYXV4ID0gSVNfRVJSKHJlZykgPyBOVUxMIDogcmVnOwogCisJCS8qIEZvciBlTU1DIGRvIG5vdCBwb3dlciBvZmYgd2hlbiBub3QgaW4gc2xlZXAgc3RhdGUgKi8KKwkJaWYgKG1tY19zbG90KGhvc3QpLm5vX3JlZ3VsYXRvcl9vZmZfaW5pdCkKKwkJCXJldHVybiAwOwogCQkvKgogCQkqIFVHTFkgSEFDSzogIHdvcmthcm91bmQgcmVndWxhdG9yIGZyYW1ld29yayBidWdzLgogCQkqIFdoZW4gdGhlIGJvb3Rsb2FkZXIgbGVhdmVzIGEgc3VwcGx5IGFjdGl2ZSwgaXQncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDMuYyBiL2RyaXZlcnMvbmV0LzNjNTAzLmMKaW5kZXggNTU0YTI2Yy4uODRlNjhmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDMuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMy5jCkBAIC00MTMsNyArNDEzLDcgQEAKIAkJb3V0Yl9wKDB4MDQgPDwgKCgqaXJxcCA9PSA5KSA/IDIgOiAqaXJxcCksIEUzM0dfSURDRlIpOwogCQlvdXRiX3AoMHgwMCwgRTMzR19JRENGUik7CiAJCW1zbGVlcCgxKTsKLQkJZnJlZV9pcnEoKmlycXAsIGVsMl9wcm9iZV9pbnRlcnJ1cHQpOworCQlmcmVlX2lycSgqaXJxcCwgJnNlZW4pOwogCQlpZiAoIXNlZW4pCiAJCQljb250aW51ZTsKIApAQCAtNDIzLDYgKzQyMyw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQlnb3RvIGVycl9kaXNhYmxlOworCQlicmVhazsKIAl9IHdoaWxlICgqKytpcnFwKTsKIAogCWlmICgqaXJxcCA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKaW5kZXggMGM5MjE3Zi4uN2IzZTIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwpAQCAtNTAsNyArNTAsNyBAQAogI2lmZGVmIF9fYXJtX18KIHN0YXRpYyB2b2lkIHdyaXRlX3JyZWcodV9sb25nIGJhc2UsIHVfaW50IHJlZywgdV9pbnQgdmFsKQogewotCV9fYXNtX18oCisJYXNtIHZvbGF0aWxlKAogCSJzdHIlP2gJJTEsIFslMl0JQCBORVRfUkFQXG5cdCIKIAkic3RyJT9oCSUwLCBbJTIsICMtNF0JQCBORVRfUkRQIgogCToKQEAgLTYwLDcgKzYwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgcmVhZF9ycmVnKHVfbG9uZyBiYXNlX2FkZHIsIHVfaW50IHJlZykKIHsKIAl1bnNpZ25lZCBzaG9ydCB2OwotCV9fYXNtX18oCisJYXNtIHZvbGF0aWxlKAogCSJzdHIlP2gJJTEsIFslMl0JQCBORVRfUkFQXG5cdCIKIAkibGRyJT9oCSUwLCBbJTIsICMtNF0JQCBORVRfUkRQIgogCTogIj1yIiAodikKQEAgLTcwLDcgKzcwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2lyZWcodV9sb25nIGJhc2UsIHVfaW50IHJlZywgdV9pbnQgdmFsKQogewotCV9fYXNtX18oCisJYXNtIHZvbGF0aWxlKAogCSJzdHIlP2gJJTEsIFslMl0JQCBORVRfUkFQXG5cdCIKIAkic3RyJT9oCSUwLCBbJTIsICM4XQlAIE5FVF9JRFAiCiAJOgpAQCAtODAsNyArODAsNyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkX2lyZWcodV9sb25nIGJhc2VfYWRkciwgdV9pbnQgcmVnKQogewogCXVfc2hvcnQgdjsKLQlfX2FzbV9fKAorCWFzbSB2b2xhdGlsZSgKIAkic3RyJT9oCSUxLCBbJTJdCUAgTkFUX1JBUFxuXHQiCiAJImxkciU/aAklMCwgWyUyLCAjOF0JQCBORVRfSURQXG5cdCIKIAk6ICI9ciIgKHYpCkBAIC05MSw0NyArOTEsNDggQEAKICNkZWZpbmUgYW1fd3JpdGV3b3JkKGRldixvZmYsdmFsKSBfX3Jhd193cml0ZXcodmFsLCBJU0FNRU1fQkFTRSArICgob2ZmKSA8PCAxKSkKICNkZWZpbmUgYW1fcmVhZHdvcmQoZGV2LG9mZikgICAgICBfX3Jhd19yZWFkdyhJU0FNRU1fQkFTRSArICgob2ZmKSA8PCAxKSkKIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogYW1fd3JpdGVidWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9pbnQgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAJb2Zmc2V0ID0gSVNBTUVNX0JBU0UgKyAob2Zmc2V0IDw8IDEpOwogCWxlbmd0aCA9IChsZW5ndGggKyAxKSAmIH4xOwogCWlmICgoaW50KWJ1ZiAmIDIpIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0ciU/aAklMiwgWyUwXSwgIzQiCisJCWFzbSB2b2xhdGlsZSgic3RyJT9oCSUyLCBbJTBdLCAjNCIKIAkJIDogIj0mciIgKG9mZnNldCkgOiAiMCIgKG9mZnNldCksICJyIiAoYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KSkpOwogCQlidWYgKz0gMjsKIAkJbGVuZ3RoIC09IDI7CiAJfQogCXdoaWxlIChsZW5ndGggPiA4KSB7Ci0JCXVuc2lnbmVkIGludCB0bXAsIHRtcDI7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkJImxkbSU/aWEJJTEhLCB7JTIsICUzfVxuXHQiCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCB0bXAgYXNtKCJyMiIpLCB0bXAyIGFzbSgicjMiKTsKKwkJYXNtIHZvbGF0aWxlKAorCQkJImxkbSU/aWEJJTAhLCB7JTEsICUyfSIKKwkJCTogIityIiAoYnVmKSwgIj0mciIgKHRtcCksICI9JnIiICh0bXAyKSk7CisJCWxlbmd0aCAtPSA4OworCQlhc20gdm9sYXRpbGUoCisJCQkic3RyJT9oCSUxLCBbJTBdLCAjNFxuXHQiCisJCQkibW92JT8JJTEsICUxLCBsc3IgIzE2XG5cdCIKKwkJCSJzdHIlP2gJJTEsIFslMF0sICM0XG5cdCIKIAkJCSJzdHIlP2gJJTIsIFslMF0sICM0XG5cdCIKIAkJCSJtb3YlPwklMiwgJTIsIGxzciAjMTZcblx0IgotCQkJInN0ciU/aAklMiwgWyUwXSwgIzRcblx0IgotCQkJInN0ciU/aAklMywgWyUwXSwgIzRcblx0IgotCQkJIm1vdiU/CSUzLCAlMywgbHNyICMxNlxuXHQiCi0JCQkic3RyJT9oCSUzLCBbJTBdLCAjNCIKLQkJOiAiPSZyIiAob2Zmc2V0KSwgIj0mciIgKGJ1ZiksICI9ciIgKHRtcCksICI9ciIgKHRtcDIpCi0JCTogIjAiIChvZmZzZXQpLCAiMSIgKGJ1ZikpOwotCQlsZW5ndGggLT0gODsKKwkJCSJzdHIlP2gJJTIsIFslMF0sICM0IgorCQk6ICIrciIgKG9mZnNldCksICI9JnIiICh0bXApLCAiPSZyIiAodG1wMikpOwogCX0KIAl3aGlsZSAobGVuZ3RoID4gMCkgewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RyJT9oCSUyLCBbJTBdLCAjNCIKKwkJYXNtIHZvbGF0aWxlKCJzdHIlP2gJJTIsIFslMF0sICM0IgogCQkgOiAiPSZyIiAob2Zmc2V0KSA6ICIwIiAob2Zmc2V0KSwgInIiIChidWZbMF0gfCAoYnVmWzFdIDw8IDgpKSk7CiAJCWJ1ZiArPSAyOwogCQlsZW5ndGggLT0gMjsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIGFtX3JlYWRidWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9pbnQgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAJb2Zmc2V0ID0gSVNBTUVNX0JBU0UgKyAob2Zmc2V0IDw8IDEpOwogCWxlbmd0aCA9IChsZW5ndGggKyAxKSAmIH4xOwogCWlmICgoaW50KWJ1ZiAmIDIpIHsKIAkJdW5zaWduZWQgaW50IHRtcDsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCWFzbSB2b2xhdGlsZSgKIAkJCSJsZHIlP2gJJTIsIFslMF0sICM0XG5cdCIKIAkJCSJzdHIlP2IJJTIsIFslMV0sICMxXG5cdCIKIAkJCSJtb3YlPwklMiwgJTIsIGxzciAjOFxuXHQiCkBAIC0xNDAsMTIgKzE0MSwxMiBAQAogCQlsZW5ndGggLT0gMjsKIAl9CiAJd2hpbGUgKGxlbmd0aCA+IDgpIHsKLQkJdW5zaWduZWQgaW50IHRtcCwgdG1wMiwgdG1wMzsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCB0bXAgYXNtKCJyMiIpLCB0bXAyIGFzbSgicjMiKSwgdG1wMzsKKwkJYXNtIHZvbGF0aWxlKAogCQkJImxkciU/aAklMiwgWyUwXSwgIzRcblx0IgorCQkJImxkciU/aAklNCwgWyUwXSwgIzRcblx0IgogCQkJImxkciU/aAklMywgWyUwXSwgIzRcblx0IgotCQkJIm9yciU/CSUyLCAlMiwgJTMsIGxzbCAjMTZcblx0IgotCQkJImxkciU/aAklMywgWyUwXSwgIzRcblx0IgorCQkJIm9yciU/CSUyLCAlMiwgJTQsIGxzbCAjMTZcblx0IgogCQkJImxkciU/aAklNCwgWyUwXSwgIzRcblx0IgogCQkJIm9yciU/CSUzLCAlMywgJTQsIGxzbCAjMTZcblx0IgogCQkJInN0bSU/aWEJJTEhLCB7JTIsICUzfSIKQEAgLTE1NSw3ICsxNTYsNyBAQAogCX0KIAl3aGlsZSAobGVuZ3RoID4gMCkgewogCQl1bnNpZ25lZCBpbnQgdG1wOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJYXNtIHZvbGF0aWxlKAogCQkJImxkciU/aAklMiwgWyUwXSwgIzRcblx0IgogCQkJInN0ciU/YgklMiwgWyUxXSwgIzFcblx0IgogCQkJIm1vdiU/CSUyLCAlMiwgbHNyICM4XG5cdCIKQEAgLTE5Niw2ICsxOTcsNDIgQEAKIAlyZXR1cm4gZXJyb3Jjb3VudDsKIH0KIAorc3RhdGljIHZvaWQgYW03OWM5NjFfbWNfaGFzaChjaGFyICphZGRyLCB1MTYgKmhhc2gpCit7CisJaWYgKGFkZHJbMF0gJiAweDAxKSB7CisJCWludCBpZHgsIGJpdDsKKwkJdTMyIGNyYzsKKworCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGFkZHIpOworCisJCWlkeCA9IGNyYyA+PiAzMDsKKwkJYml0ID0gKGNyYyA+PiAyNikgJiAxNTsKKworCQloYXNoW2lkeF0gfD0gMSA8PCBiaXQ7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFtNzljOTYxX2dldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiAqaGFzaCkKK3sKKwl1bnNpZ25lZCBpbnQgbW9kZSA9IE1PREVfUE9SVF8xMEJUOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQltb2RlIHw9IE1PREVfUFJPTUlTQzsKKwkJbWVtc2V0KGhhc2gsIDB4ZmYsIDQgKiBzaXplb2YoKmhhc2gpKTsKKwl9IGVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJbWVtc2V0KGhhc2gsIDB4ZmYsIDQgKiBzaXplb2YoKmhhc2gpKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCisJCW1lbXNldChoYXNoLCAwLCA0ICogc2l6ZW9mKCpoYXNoKSk7CisKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikKKwkJCWFtNzljOTYxX21jX2hhc2goaGEtPmFkZHIsIGhhc2gpOworCX0KKworCXJldHVybiBtb2RlOworfQorCiBzdGF0aWMgdm9pZAogYW03OWM5NjFfaW5pdF9mb3Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMjAzLDYgKzI0MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyICpwOwogCXVfaW50IGhkcl9hZGRyLCBmaXJzdF9mcmVlX2FkZHI7CisJdTE2IG11bHRpX2hhc2hbNF0sIG1vZGUgPSBhbTc5Yzk2MV9nZXRfcnhfbW9kZShkZXYsIG11bHRpX2hhc2gpOwogCWludCBpOwogCiAJLyoKQEAgLTIxOCwxNiArMjU2LDEyIEBACiAJd3JpdGVfaXJlZyAoZGV2LT5iYXNlX2FkZHIsIDIsIDB4MDAwMCk7IC8qIE1PREUgcmVnaXN0ZXIgc2VsZWN0cyBtZWRpYSAqLwogCiAJZm9yIChpID0gTEFEUkw7IGkgPD0gTEFEUkg7IGkrKykKLQkJd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIGksIDApOworCQl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgaSwgbXVsdGlfaGFzaFtpIC0gTEFEUkxdKTsKIAogCWZvciAoaSA9IFBBRFJMLCBwID0gZGV2LT5kZXZfYWRkcjsgaSA8PSBQQURSSDsgaSsrLCBwICs9IDIpCiAJCXdyaXRlX3JyZWcgKGRldi0+YmFzZV9hZGRyLCBpLCBwWzBdIHwgKHBbMV0gPDwgOCkpOwogCi0JaSA9IE1PREVfUE9SVF8xMEJUOwotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCWkgfD0gTU9ERV9QUk9NSVNDOwotCi0Jd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIE1PREUsIGkpOworCXdyaXRlX3JyZWcgKGRldi0+YmFzZV9hZGRyLCBNT0RFLCBtb2RlKTsKIAl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgUE9MTElOVCwgMCk7CiAJd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIFNJWkVSWFIsIC1SWF9CVUZGRVJTKTsKIAl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgU0laRVRYUiwgLVRYX0JVRkZFUlMpOwpAQCAtMzQwLDIxICszNzQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhbTc5Yzk2MV9tY19oYXNoKGNoYXIgKmFkZHIsIHVuc2lnbmVkIHNob3J0ICpoYXNoKQotewotCWlmIChhZGRyWzBdICYgMHgwMSkgewotCQlpbnQgaWR4LCBiaXQ7Ci0JCXUzMiBjcmM7Ci0KLQkJY3JjID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBhZGRyKTsKLQotCQlpZHggPSBjcmMgPj4gMzA7Ci0JCWJpdCA9IChjcmMgPj4gMjYpICYgMTU7Ci0KLQkJaGFzaFtpZHhdIHw9IDEgPDwgYml0OwotCX0KLX0KLQogLyoKICAqIFNldCBvciBjbGVhciBwcm9taXNjdW91cy9tdWx0aWNhc3QgbW9kZSBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRlci4KICAqLwpAQCAtMzYyLDI0ICszODEsOSBAQAogewogCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzaG9ydCBtdWx0aV9oYXNoWzRdLCBtb2RlOworCXUxNiBtdWx0aV9oYXNoWzRdLCBtb2RlID0gYW03OWM5NjFfZ2V0X3J4X21vZGUoZGV2LCBtdWx0aV9oYXNoKTsKIAlpbnQgaSwgc3RvcHBlZDsKIAotCW1vZGUgPSBNT0RFX1BPUlRfMTBCVDsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJbW9kZSB8PSBNT0RFX1BST01JU0M7Ci0JfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCW1lbXNldChtdWx0aV9oYXNoLCAweGZmLCBzaXplb2YobXVsdGlfaGFzaCkpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0KLQkJbWVtc2V0KG11bHRpX2hhc2gsIDB4MDAsIHNpemVvZihtdWx0aV9oYXNoKSk7Ci0KLQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikKLQkJCWFtNzljOTYxX21jX2hhc2goaGEtPmFkZHIsIG11bHRpX2hhc2gpOwotCX0KLQogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5jaGlwX2xvY2ssIGZsYWdzKTsKIAogCXN0b3BwZWQgPSByZWFkX3JyZWcoZGV2LT5iYXNlX2FkZHIsIENTUjApICYgQ1NSMF9TVE9QOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKaW5kZXggYTE2N2FkZC4uNDMxN2FmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCkBAIC0yODQsMTAgKzI4NCwxNCBAQAogCiAJCXNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoICsgMik7CiAJCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7CisJCQlzdHJ1Y3QgZXA5M3h4X3JkZXNjICpyeGQgPSAmZXAtPmRlc2NzLT5yZGVzY1tlbnRyeV07CiAJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoTlVMTCwgZXAtPmRlc2NzLT5yZGVzY1tlbnRyeV0uYnVmX2FkZHIsCisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYtPmRldi5wYXJlbnQsIHJ4ZC0+YnVmX2FkZHIsCiAJCQkJCQlsZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CiAJCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIGVwLT5yeF9idWZbZW50cnldLCBsZW5ndGgpOworCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LT5kZXYucGFyZW50LAorCQkJCQkJICAgcnhkLT5idWZfYWRkciwgbGVuZ3RoLAorCQkJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKIAkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIApAQCAtMzQ5LDYgKzM1Myw3IEBACiBzdGF0aWMgaW50IGVwOTN4eF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVwOTN4eF90ZGVzYyAqdHhkOwogCWludCBlbnRyeTsKIAogCWlmICh1bmxpa2VseShza2ItPmxlbiA+IE1BWF9QS1RfU0laRSkpIHsKQEAgLTM2MCwxMSArMzY1LDE0IEBACiAJZW50cnkgPSBlcC0+dHhfcG9pbnRlcjsKIAllcC0+dHhfcG9pbnRlciA9IChlcC0+dHhfcG9pbnRlciArIDEpICYgKFRYX1FVRVVFX0VOVFJJRVMgLSAxKTsKIAotCWVwLT5kZXNjcy0+dGRlc2NbZW50cnldLnRkZXNjMSA9Ci0JCVRERVNDMV9FT0YgfCAoZW50cnkgPDwgMTYpIHwgKHNrYi0+bGVuICYgMHhmZmYpOworCXR4ZCA9ICZlcC0+ZGVzY3MtPnRkZXNjW2VudHJ5XTsKKworCXR4ZC0+dGRlc2MxID0gVERFU0MxX0VPRiB8IChlbnRyeSA8PCAxNikgfCAoc2tiLT5sZW4gJiAweGZmZik7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LT5kZXYucGFyZW50LCB0eGQtPmJ1Zl9hZGRyLCBza2ItPmxlbiwKKwkJCQlETUFfVE9fREVWSUNFKTsKIAlza2JfY29weV9hbmRfY3N1bV9kZXYoc2tiLCBlcC0+dHhfYnVmW2VudHJ5XSk7Ci0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoTlVMTCwgZXAtPmRlc2NzLT50ZGVzY1tlbnRyeV0uYnVmX2FkZHIsCi0JCQkJc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldi0+ZGV2LnBhcmVudCwgdHhkLT5idWZfYWRkciwgc2tiLT5sZW4sCisJCQkJICAgRE1BX1RPX0RFVklDRSk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJc3Bpbl9sb2NrX2lycSgmZXAtPnR4X3BlbmRpbmdfbG9jayk7CkBAIC00NTgsODkgKzQ2Niw4MCBAQAogCiBzdGF0aWMgdm9pZCBlcDkzeHhfZnJlZV9idWZmZXJzKHN0cnVjdCBlcDkzeHhfcHJpdiAqZXApCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZXAtPmRldi0+ZGV2LnBhcmVudDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBSWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CiAJCWRtYV9hZGRyX3QgZDsKIAogCQlkID0gZXAtPmRlc2NzLT5yZGVzY1tpXS5idWZfYWRkcjsKIAkJaWYgKGQpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIGQsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkLCBQS1RfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJaWYgKGVwLT5yeF9idWZbaV0gIT0gTlVMTCkKLQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyllcC0+cnhfYnVmW2ldKTsKKwkJCWtmcmVlKGVwLT5yeF9idWZbaV0pOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBUWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgVFhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CiAJCWRtYV9hZGRyX3QgZDsKIAogCQlkID0gZXAtPmRlc2NzLT50ZGVzY1tpXS5idWZfYWRkcjsKIAkJaWYgKGQpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIGQsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZCwgUEtUX0JVRl9TSVpFLCBETUFfVE9fREVWSUNFKTsKIAogCQlpZiAoZXAtPnR4X2J1ZltpXSAhPSBOVUxMKQotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWVwLT50eF9idWZbaV0pOworCQkJa2ZyZWUoZXAtPnR4X2J1ZltpXSk7CiAJfQogCi0JZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBlcDkzeHhfZGVzY3MpLCBlcC0+ZGVzY3MsCisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IGVwOTN4eF9kZXNjcyksIGVwLT5kZXNjcywKIAkJCQkJCQllcC0+ZGVzY3NfZG1hX2FkZHIpOwogfQogCi0vKgotICogVGhlIGhhcmR3YXJlIGVuZm9yY2VzIGEgc3ViLTJLIG1heGltdW0gcGFja2V0IHNpemUsIHNvIHdlIHB1dAotICogdHdvIGJ1ZmZlcnMgb24gZXZlcnkgaGFyZHdhcmUgcGFnZS4KLSAqLwogc3RhdGljIGludCBlcDkzeHhfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwKQogeworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGVwLT5kZXYtPmRldi5wYXJlbnQ7CiAJaW50IGk7CiAKLQllcC0+ZGVzY3MgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBlcDkzeHhfZGVzY3MpLAotCQkJCSZlcC0+ZGVzY3NfZG1hX2FkZHIsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwllcC0+ZGVzY3MgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IGVwOTN4eF9kZXNjcyksCisJCQkJJmVwLT5kZXNjc19kbWFfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVwLT5kZXNjcyA9PSBOVUxMKQogCQlyZXR1cm4gMTsKIAotCWZvciAoaSA9IDA7IGkgPCBSWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKLQkJdm9pZCAqcGFnZTsKKwlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CisJCXZvaWQgKmJ1ZjsKIAkJZG1hX2FkZHJfdCBkOwogCi0JCXBhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JCWlmIChwYWdlID09IE5VTEwpCisJCWJ1ZiA9IGttYWxsb2MoUEtUX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkJZ290byBlcnI7CiAKLQkJZCA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHBhZ2UsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKE5VTEwsIGQpKSB7Ci0JCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZSk7CisJCWQgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGJ1ZiwgUEtUX0JVRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkKSkgeworCQkJa2ZyZWUoYnVmKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAKLQkJZXAtPnJ4X2J1ZltpXSA9IHBhZ2U7CisJCWVwLT5yeF9idWZbaV0gPSBidWY7CiAJCWVwLT5kZXNjcy0+cmRlc2NbaV0uYnVmX2FkZHIgPSBkOwogCQllcC0+ZGVzY3MtPnJkZXNjW2ldLnJkZXNjMSA9IChpIDw8IDE2KSB8IFBLVF9CVUZfU0laRTsKLQotCQllcC0+cnhfYnVmW2kgKyAxXSA9IHBhZ2UgKyBQS1RfQlVGX1NJWkU7Ci0JCWVwLT5kZXNjcy0+cmRlc2NbaSArIDFdLmJ1Zl9hZGRyID0gZCArIFBLVF9CVUZfU0laRTsKLQkJZXAtPmRlc2NzLT5yZGVzY1tpICsgMV0ucmRlc2MxID0gKChpICsgMSkgPDwgMTYpIHwgUEtUX0JVRl9TSVpFOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBUWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKLQkJdm9pZCAqcGFnZTsKKwlmb3IgKGkgPSAwOyBpIDwgVFhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CisJCXZvaWQgKmJ1ZjsKIAkJZG1hX2FkZHJfdCBkOwogCi0JCXBhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JCWlmIChwYWdlID09IE5VTEwpCisJCWJ1ZiA9IGttYWxsb2MoUEtUX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkJZ290byBlcnI7CiAKLQkJZCA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHBhZ2UsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7Ci0JCWlmIChkbWFfbWFwcGluZ19lcnJvcihOVUxMLCBkKSkgewotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBhZ2UpOworCQlkID0gZG1hX21hcF9zaW5nbGUoZGV2LCBidWYsIFBLVF9CVUZfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGQpKSB7CisJCQlrZnJlZShidWYpOwogCQkJZ290byBlcnI7CiAJCX0KIAotCQllcC0+dHhfYnVmW2ldID0gcGFnZTsKKwkJZXAtPnR4X2J1ZltpXSA9IGJ1ZjsKIAkJZXAtPmRlc2NzLT50ZGVzY1tpXS5idWZfYWRkciA9IGQ7Ci0KLQkJZXAtPnR4X2J1ZltpICsgMV0gPSBwYWdlICsgUEtUX0JVRl9TSVpFOwotCQllcC0+ZGVzY3MtPnRkZXNjW2kgKyAxXS5idWZfYWRkciA9IGQgKyBQS1RfQlVGX1NJWkU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04MzAsNiArODI5LDcgQEAKIAl9CiAJZXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWVwLT5kZXYgPSBkZXY7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAluZXRpZl9uYXBpX2FkZChkZXYsICZlcC0+bmFwaSwgZXA5M3h4X3BvbGwsIDY0KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZmluX21hYy5jIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwppbmRleCA2OGQ0NWJhLi42YzAxOWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZmluX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKQEAgLTUyLDEzICs1MiwxMyBAQAogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpiZmluX21hYyIpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQkZJTl9NQUNfVVNFX0wxKQotIyBkZWZpbmUgYmZpbl9tYWNfYWxsb2MoZG1hX2hhbmRsZSwgc2l6ZSkgIGwxX2RhdGFfc3JhbV96YWxsb2Moc2l6ZSkKLSMgZGVmaW5lIGJmaW5fbWFjX2ZyZWUoZG1hX2hhbmRsZSwgcHRyKSAgICBsMV9kYXRhX3NyYW1fZnJlZShwdHIpCisjIGRlZmluZSBiZmluX21hY19hbGxvYyhkbWFfaGFuZGxlLCBzaXplLCBudW0pICBsMV9kYXRhX3NyYW1femFsbG9jKHNpemUqbnVtKQorIyBkZWZpbmUgYmZpbl9tYWNfZnJlZShkbWFfaGFuZGxlLCBwdHIsIG51bSkgICAgbDFfZGF0YV9zcmFtX2ZyZWUocHRyKQogI2Vsc2UKLSMgZGVmaW5lIGJmaW5fbWFjX2FsbG9jKGRtYV9oYW5kbGUsIHNpemUpIFwKLQlkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgc2l6ZSwgZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCkKLSMgZGVmaW5lIGJmaW5fbWFjX2ZyZWUoZG1hX2hhbmRsZSwgcHRyKSBcCi0JZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKCpwdHIpLCBwdHIsIGRtYV9oYW5kbGUpCisjIGRlZmluZSBiZmluX21hY19hbGxvYyhkbWFfaGFuZGxlLCBzaXplLCBudW0pIFwKKwlkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgc2l6ZSpudW0sIGRtYV9oYW5kbGUsIEdGUF9LRVJORUwpCisjIGRlZmluZSBiZmluX21hY19mcmVlKGRtYV9oYW5kbGUsIHB0ciwgbnVtKSBcCisJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKCpwdHIpKm51bSwgcHRyLCBkbWFfaGFuZGxlKQogI2VuZGlmCiAKICNkZWZpbmUgUEtUX0JVRl9TWiAxNTgwCkBAIC05NSw3ICs5NSw3IEBACiAJCQkJdCA9IHQtPm5leHQ7CiAJCQl9CiAJCX0KLQkJYmZpbl9tYWNfZnJlZShkbWFfaGFuZGxlLCB0eF9kZXNjKTsKKwkJYmZpbl9tYWNfZnJlZShkbWFfaGFuZGxlLCB0eF9kZXNjLCBDT05GSUdfQkZJTl9UWF9ERVNDX05VTSk7CiAJfQogCiAJaWYgKHJ4X2Rlc2MpIHsKQEAgLTEwOSw3ICsxMDksNyBAQAogCQkJCXIgPSByLT5uZXh0OwogCQkJfQogCQl9Ci0JCWJmaW5fbWFjX2ZyZWUoZG1hX2hhbmRsZSwgcnhfZGVzYyk7CisJCWJmaW5fbWFjX2ZyZWUoZG1hX2hhbmRsZSwgcnhfZGVzYywgQ09ORklHX0JGSU5fUlhfREVTQ19OVU0pOwogCX0KIH0KIApAQCAtMTI2LDEzICsxMjYsMTMgQEAKICNlbmRpZgogCiAJdHhfZGVzYyA9IGJmaW5fbWFjX2FsbG9jKCZkbWFfaGFuZGxlLAotCQkJCXNpemVvZihzdHJ1Y3QgbmV0X2RtYV9kZXNjX3R4KSAqCisJCQkJc2l6ZW9mKHN0cnVjdCBuZXRfZG1hX2Rlc2NfdHgpLAogCQkJCUNPTkZJR19CRklOX1RYX0RFU0NfTlVNKTsKIAlpZiAodHhfZGVzYyA9PSBOVUxMKQogCQlnb3RvIGluaXRfZXJyb3I7CiAKIAlyeF9kZXNjID0gYmZpbl9tYWNfYWxsb2MoJmRtYV9oYW5kbGUsCi0JCQkJc2l6ZW9mKHN0cnVjdCBuZXRfZG1hX2Rlc2NfcngpICoKKwkJCQlzaXplb2Yoc3RydWN0IG5ldF9kbWFfZGVzY19yeCksCiAJCQkJQ09ORklHX0JGSU5fUlhfREVTQ19OVU0pOwogCWlmIChyeF9kZXNjID09IE5VTEwpCiAJCWdvdG8gaW5pdF9lcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDA3ZTg2NmQuLmQxMTcyODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtMzc4LDYgKzM3OCw4IEBACiAJcmV0dXJuIG5leHQ7CiB9CiAKKyNkZWZpbmUgYm9uZF9xdWV1ZV9tYXBwaW5nKHNrYikgKCoodTE2ICopKChza2IpLT5jYikpCisKIC8qKgogICogYm9uZF9kZXZfcXVldWVfeG1pdCAtIFByZXBhcmUgc2tiIGZvciB4bWl0LgogICoKQEAgLTM5MCw2ICszOTIsOSBAQAogewogCXNrYi0+ZGV2ID0gc2xhdmVfZGV2OwogCXNrYi0+cHJpb3JpdHkgPSAxOworCisJc2tiLT5xdWV1ZV9tYXBwaW5nID0gYm9uZF9xdWV1ZV9tYXBwaW5nKHNrYik7CisKIAlpZiAodW5saWtlbHkobmV0cG9sbF90eF9ydW5uaW5nKHNsYXZlX2RldikpKQogCQlib25kX25ldHBvbGxfc2VuZF9za2IoYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIHNsYXZlX2RldiksIHNrYik7CiAJZWxzZQpAQCAtMTI3NSw2ICsxMjgwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlucC0+ZGV2ID0gc2xhdmUtPmRldjsKKwlzdHJsY3B5KG5wLT5kZXZfbmFtZSwgc2xhdmUtPmRldi0+bmFtZSwgSUZOQU1TSVopOwogCWVyciA9IF9fbmV0cG9sbF9zZXR1cChucCk7CiAJaWYgKGVycikgewogCQlrZnJlZShucCk7CkBAIC00MTg4LDYgKzQxOTQsNyBAQAogCXJldHVybiByZXM7CiB9CiAKKwogc3RhdGljIHUxNiBib25kX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qCkBAIC00MTk4LDYgKzQyMDUsMTEgQEAKIAkgKi8KIAl1MTYgdHhxID0gc2tiX3J4X3F1ZXVlX3JlY29yZGVkKHNrYikgPyBza2JfZ2V0X3J4X3F1ZXVlKHNrYikgOiAwOwogCisJLyoKKwkgKiBTYXZlIHRoZSBvcmlnaW5hbCB0eHEgdG8gcmVzdG9yZSBiZWZvcmUgcGFzc2luZyB0byB0aGUgZHJpdmVyCisJICovCisJYm9uZF9xdWV1ZV9tYXBwaW5nKHNrYikgPSBza2ItPnF1ZXVlX21hcHBpbmc7CisKIAlpZiAodW5saWtlbHkodHhxID49IGRldi0+cmVhbF9udW1fdHhfcXVldWVzKSkgewogCQlkbyB7CiAJCQl0eHEgLT0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbDJrLmMgYi9kcml2ZXJzL25ldC9kbDJrLmMKaW5kZXggYzQ0NTQ1Ny4uMjMxNzlkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGwyay5jCisrKyBiL2RyaXZlcnMvbmV0L2RsMmsuYwpAQCAtMzQ2LDcgKzM0Niw3IEBACiAJaWYgKG5wLT5wZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9ETElOSykgewkvKiBELUxpbmsgT25seSAqLwogCQkvKiBDaGVjayBDUkMgKi8KIAkJY3JjID0gfmV0aGVyX2NyY19sZSAoMjU2IC0gNCwgc3JvbWRhdGEpOwotCQlpZiAocHNyb20tPmNyYyAhPSBjcmMpIHsKKwkJaWYgKHBzcm9tLT5jcmMgIT0gY3B1X3RvX2xlMzIoY3JjKSkgewogCQkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IEVFUFJPTSBkYXRhIENSQyBlcnJvci5cbiIsCiAJCQkJCWRldi0+bmFtZSk7CiAJCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCmluZGV4IDdhODRlNDUuLjc1ODNhOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkJZ290byBvdXRfZXA7CiAKIAlmZXAtPmZjYy5tZW0gPSAodm9pZCBfX2lvbWVtICopY3BtMl9pbW1yOwotCWZwaS0+ZHByYW1fb2Zmc2V0ID0gY3BtX2RwYWxsb2MoMTI4LCA4KTsKKwlmcGktPmRwcmFtX29mZnNldCA9IGNwbV9kcGFsbG9jKDEyOCwgMzIpOwogCWlmIChJU19FUlJfVkFMVUUoZnBpLT5kcHJhbV9vZmZzZXQpKSB7CiAJCXJldCA9IGZwaS0+ZHByYW1fb2Zmc2V0OwogCQlnb3RvIG91dF9mY2NjcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCBkZWY3ZjdlLi5kYzBhN2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhCiAgKiBNb2RpZmllcjogU2FuZGVlcCBHb3BhbHBldCA8c2FuZGVlcC5rdW1hckBmcmVlc2NhbGUuY29tPgogICoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDAyLTIwMDksIDIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqIENvcHlyaWdodCAyMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTQ3NSw5ICs0NzUsNiBAQAogI2VuZGlmCiB9OwogCi11bnNpZ25lZCBpbnQgZnRwX3JxZnByW01BWF9GSUxFUl9JRFggKyAxXTsKLXVuc2lnbmVkIGludCBmdHBfcnFmY3JbTUFYX0ZJTEVSX0lEWCArIDFdOwotCiB2b2lkIGxvY2tfcnhfcXMoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdikKIHsKIAlpbnQgaSA9IDB4MDsKQEAgLTg3MiwyOCArODY5LDI4IEBACiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ0xFIHwgUlFGQ1JfUElEX01BU0sgfCBSUUZDUl9DTVBfRVhBQ1Q7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwotCWZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CisJcHJpdi0+ZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ01QX05PTUFUQ0g7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwotCWZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CisJcHJpdi0+ZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ01QX0VYQUNUIHwgUlFGQ1JfUElEX1BBUlNFIHwgUlFGQ1JfQ0xFIHwgUlFGQ1JfQU5EOwogCXJxZnByID0gY2xhc3M7Ci0JZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwotCWZ0cF9ycWZwcltycWZhcl0gPSBycWZwcjsKKwlwcml2LT5mdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7CisJcHJpdi0+ZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ01QX0VYQUNUIHwgUlFGQ1JfUElEX01BU0sgfCBSUUZDUl9BTkQ7CiAJcnFmcHIgPSBjbGFzczsKLQlmdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOworCXByaXYtPmZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CiAJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBycWZhciwgcnFmY3IsIHJxZnByKTsKIAogCXJldHVybiBycWZhcjsKQEAgLTkwOCw4ICs5MDUsOCBAQAogCiAJLyogRGVmYXVsdCBydWxlICovCiAJcnFmY3IgPSBSUUZDUl9DTVBfTUFUQ0g7Ci0JZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwotCWZ0cF9ycWZwcltycWZhcl0gPSBycWZwcjsKKwlwcml2LT5mdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7CisJcHJpdi0+ZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhciA9IGNsdXN0ZXJfZW50cnlfcGVyX2NsYXNzKHByaXYsIHJxZmFyLCBSUUZQUl9JUFY2KTsKQEAgLTkyNSw4ICs5MjIsOCBAQAogCS8qIFJlc3QgYXJlIG1hc2tlZCBydWxlcyAqLwogCXJxZmNyID0gUlFGQ1JfQ01QX05PTUFUQ0g7CiAJZm9yIChpID0gMDsgaSA8IHJxZmFyOyBpKyspIHsKLQkJZnRwX3JxZmNyW2ldID0gcnFmY3I7Ci0JCWZ0cF9ycWZwcltpXSA9IHJxZnByOworCQlwcml2LT5mdHBfcnFmY3JbaV0gPSBycWZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW2ldID0gcnFmcHI7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgaSwgcnFmY3IsIHJxZnByKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggYTRlNjkwYS4uNzZmMTRkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtOSw3ICs5LDcgQEAKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEKICAqIE1vZGlmaWVyOiBTYW5kZWVwIEdvcGFscGV0IDxzYW5kZWVwLmt1bWFyQGZyZWVzY2FsZS5jb20+CiAgKgotICogQ29weXJpZ2h0IDIwMDItMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMDItMjAwOSwgMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0xMTIyLDEwICsxMTIyLDEyIEBACiAJLyogSFcgdGltZSBzdGFtcGluZyBlbmFibGVkIGZsYWcgKi8KIAlpbnQgaHd0c19yeF9lbjsKIAlpbnQgaHd0c190eF9lbjsKKworCS8qRmlsZXIgdGFibGUqLworCXVuc2lnbmVkIGludCBmdHBfcnFmcHJbTUFYX0ZJTEVSX0lEWCArIDFdOworCXVuc2lnbmVkIGludCBmdHBfcnFmY3JbTUFYX0ZJTEVSX0lEWCArIDFdOwogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBmdHBfcnFmcHJbTUFYX0ZJTEVSX0lEWCArIDFdOwotZXh0ZXJuIHVuc2lnbmVkIGludCBmdHBfcnFmY3JbTUFYX0ZJTEVSX0lEWCArIDFdOwogCiBzdGF0aWMgaW5saW5lIGludCBnZmFyX2hhc19lcnJhdGEoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiwKIAkJCQkgIGVudW0gZ2Zhcl9lcnJhdGEgZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCAwNTEwMzM2Li4yZWNkYzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtOSw3ICs5LDcgQEAKICAqICBNYWludGFpbmVyOiBLdW1hciBHYWxhCiAgKiAgTW9kaWZpZXI6IFNhbmRlZXAgR29wYWxwZXQgPHNhbmRlZXAua3VtYXJAZnJlZXNjYWxlLmNvbT4KICAqCi0gKiAgQ29weXJpZ2h0IDIwMDMtMjAwNiwgMjAwOC0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiAgQ29weXJpZ2h0IDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0bwogICogIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsIGluY29ycG9yYXRlZCBoZXJlaW4KQEAgLTYxMCwxNSArNjEwLDE1IEBACiAJaWYgKGV0aGZsb3cgJiBSWEhfTDJEQSkgewogCQlmY3IgPSBSUUZDUl9QSURfREFIIHxSUUZDUl9DTVBfTk9NQVRDSCB8CiAJCQlSUUZDUl9IQVNIIHwgUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAKIAkJZmNyID0gUlFGQ1JfUElEX0RBTCB8IFJRRkNSX0FORCB8IFJRRkNSX0NNUF9OT01BVENIIHwKIAkJCQlSUUZDUl9IQVNIIHwgUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQpAQCAtNjI3LDE2ICs2MjcsMTYgQEAKIAkJZmNyID0gUlFGQ1JfUElEX1ZJRCB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQkJUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsIGZjciwgZnByKTsKLQkJZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CisJCXByaXYtPmZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKKwkJcHJpdi0+ZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQogCiAJaWYgKGV0aGZsb3cgJiBSWEhfSVBfU1JDKSB7CiAJCWZjciA9IFJRRkNSX1BJRF9TSUEgfCBSUUZDUl9DTVBfTk9NQVRDSCB8IFJRRkNSX0hBU0ggfAogCQkJUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQpAQCAtNjQ0LDggKzY0NCw4IEBACiAJaWYgKGV0aGZsb3cgJiAoUlhIX0lQX0RTVCkpIHsKIAkJZmNyID0gUlFGQ1JfUElEX0RJQSB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQlSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKLQkJZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBwcml2LT5jdXJfZmlsZXJfaWR4LCBmY3IsIGZwcik7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAl9CkBAIC02NTMsOCArNjUzLDggQEAKIAlpZiAoZXRoZmxvdyAmIFJYSF9MM19QUk9UTykgewogCQlmY3IgPSBSUUZDUl9QSURfTDRQIHwgUlFGQ1JfQ01QX05PTUFUQ0ggfCBSUUZDUl9IQVNIIHwKIAkJCVJRRkNSX0FORCB8IFJRRkNSX0hBU0hUQkxfMDsKLQkJZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CisJCXByaXYtPmZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKKwkJcHJpdi0+ZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsIGZjciwgZnByKTsKIAkJcHJpdi0+Y3VyX2ZpbGVyX2lkeCA9IHByaXYtPmN1cl9maWxlcl9pZHggLSAxOwogCX0KQEAgLTY2Miw4ICs2NjIsOCBAQAogCWlmIChldGhmbG93ICYgUlhIX0w0X0JfMF8xKSB7CiAJCWZjciA9IFJRRkNSX1BJRF9TUFQgfCBSUUZDUl9DTVBfTk9NQVRDSCB8IFJRRkNSX0hBU0ggfAogCQkJUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQpAQCAtNjcxLDggKzY3MSw4IEBACiAJaWYgKGV0aGZsb3cgJiBSWEhfTDRfQl8yXzMpIHsKIAkJZmNyID0gUlFGQ1JfUElEX0RQVCB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQlSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKLQkJZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBwcml2LT5jdXJfZmlsZXJfaWR4LCBmY3IsIGZwcik7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAl9CkBAIC03MDYsMTIgKzcwNiwxMiBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRklMRVJfSURYICsgMTsgaSsrKSB7Ci0JCWxvY2FsX3JxZnByW2pdID0gZnRwX3JxZnByW2ldOwotCQlsb2NhbF9ycWZjcltqXSA9IGZ0cF9ycWZjcltpXTsKKwkJbG9jYWxfcnFmcHJbal0gPSBwcml2LT5mdHBfcnFmcHJbaV07CisJCWxvY2FsX3JxZmNyW2pdID0gcHJpdi0+ZnRwX3JxZmNyW2ldOwogCQlqLS07Ci0JCWlmICgoZnRwX3JxZmNyW2ldID09IChSUUZDUl9QSURfUEFSU0UgfAorCQlpZiAoKHByaXYtPmZ0cF9ycWZjcltpXSA9PSAoUlFGQ1JfUElEX1BBUlNFIHwKIAkJCVJRRkNSX0NMRSB8UlFGQ1JfQU5EKSkgJiYKLQkJCShmdHBfcnFmcHJbaV0gPT0gY21wX3JxZnByKSkKKwkJCShwcml2LT5mdHBfcnFmcHJbaV0gPT0gY21wX3JxZnByKSkKIAkJCWJyZWFrOwogCX0KIApAQCAtNzI0LDIwICs3MjQsMjIgQEAKIAkgKiBpZiBpdCB3YXMgYWxyZWFkeSBwcm9ncmFtbWVkLCB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGVzZSBydWxlcwogCSAqLwogCWZvciAobCA9IGkrMTsgbCA8IE1BWF9GSUxFUl9JRFg7IGwrKykgewotCQlpZiAoKGZ0cF9ycWZjcltsXSAmIFJRRkNSX0NMRSkgJiYKLQkJCSEoZnRwX3JxZmNyW2xdICYgUlFGQ1JfQU5EKSkgewotCQkJZnRwX3JxZmNyW2xdID0gUlFGQ1JfQ0xFIHwgUlFGQ1JfQ01QX0VYQUNUIHwKKwkJaWYgKChwcml2LT5mdHBfcnFmY3JbbF0gJiBSUUZDUl9DTEUpICYmCisJCQkhKHByaXYtPmZ0cF9ycWZjcltsXSAmIFJRRkNSX0FORCkpIHsKKwkJCXByaXYtPmZ0cF9ycWZjcltsXSA9IFJRRkNSX0NMRSB8IFJRRkNSX0NNUF9FWEFDVCB8CiAJCQkJUlFGQ1JfSEFTSFRCTF8wIHwgUlFGQ1JfUElEX01BU0s7Ci0JCQlmdHBfcnFmcHJbbF0gPSBGUFJfRklMRVJfTUFTSzsKLQkJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgbCwgZnRwX3JxZmNyW2xdLCBmdHBfcnFmcHJbbF0pOworCQkJcHJpdi0+ZnRwX3JxZnByW2xdID0gRlBSX0ZJTEVSX01BU0s7CisJCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIGwsIHByaXYtPmZ0cF9ycWZjcltsXSwKKwkJCQlwcml2LT5mdHBfcnFmcHJbbF0pOwogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoIShmdHBfcnFmY3JbbF0gJiBSUUZDUl9DTEUpICYmIChmdHBfcnFmY3JbbF0gJiBSUUZDUl9BTkQpKQorCQlpZiAoIShwcml2LT5mdHBfcnFmY3JbbF0gJiBSUUZDUl9DTEUpICYmCisJCQkocHJpdi0+ZnRwX3JxZmNyW2xdICYgUlFGQ1JfQU5EKSkKIAkJCWNvbnRpbnVlOwogCQllbHNlIHsKLQkJCWxvY2FsX3JxZnByW2pdID0gZnRwX3JxZnByW2xdOwotCQkJbG9jYWxfcnFmY3Jbal0gPSBmdHBfcnFmY3JbbF07CisJCQlsb2NhbF9ycWZwcltqXSA9IHByaXYtPmZ0cF9ycWZwcltsXTsKKwkJCWxvY2FsX3JxZmNyW2pdID0gcHJpdi0+ZnRwX3JxZmNyW2xdOwogCQkJai0tOwogCQl9CiAJfQpAQCAtNzUwLDggKzc1Miw4IEBACiAKIAkvKiBXcml0ZSBiYWNrIHRoZSBwb3BwZWQgb3V0IHJ1bGVzIGFnYWluICovCiAJZm9yIChrID0gaisxOyBrIDwgTUFYX0ZJTEVSX0lEWDsgaysrKSB7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGxvY2FsX3JxZnByW2tdOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBsb2NhbF9ycWZjcltrXTsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gbG9jYWxfcnFmcHJba107CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGxvY2FsX3JxZmNyW2tdOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsCiAJCQkJbG9jYWxfcnFmY3Jba10sIGxvY2FsX3JxZnByW2tdKTsKIAkJaWYgKCFwcml2LT5jdXJfZmlsZXJfaWR4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHAxMDAuYyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKaW5kZXggOGUxMGQyZi4uYzNlY2IxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHAxMDAuYworKysgYi9kcml2ZXJzL25ldC9ocDEwMC5jCkBAIC0xNTgwLDEyICsxNTgwLDEyIEBACiAJaHAxMDBfb3V0bChyaW5ncHRyLT5wZGxfcGFkZHIsIFRYX1BEQV9MKTsJLyogTG93IFByaW8uIFF1ZXVlICovCiAKIAlscC0+dHhyY29tbWl0Kys7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotCS8qIFVwZGF0ZSBzdGF0aXN0aWNzICovCiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBkcm9wOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaHBsYW5jZS5jIGIvZHJpdmVycy9uZXQvaHBsYW5jZS5jCmluZGV4IGI2MDYwZjcuLmE5MDBkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9ocGxhbmNlLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogfQogCiAvKiBJbml0aWFsaXNlIGEgc2luZ2xlIGxhbmNlIGJvYXJkIGF0IHRoZSBnaXZlbiBESU8gZGV2aWNlICovCi1zdGF0aWMgdm9pZCBfX2luaXQgaHBsYW5jZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkaW9fZGV2ICpkKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGhwbGFuY2VfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGlvX2RldiAqZCkKIHsKICAgICAgICAgdW5zaWduZWQgbG9uZyB2YSA9IChkLT5yZXNvdXJjZS5zdGFydCArIERJT19WSVJBRERSQkFTRSk7CiAgICAgICAgIHN0cnVjdCBocGxhbmNlX3ByaXZhdGUgKmxwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCBjMmU5NjcwLi5mZDY0YzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMjM3Miw2ICsyMzcyLDkgQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BDSV9JT1YgKi8KIAlhZGFwdGVyLT5yc3NfcXVldWVzID0gbWluX3QodTMyLCBJR0JfTUFYX1JYX1FVRVVFUywgbnVtX29ubGluZV9jcHVzKCkpOworCS8qIGkzNTAgY2Fubm90IGRvIFJTUyBhbmQgU1ItSU9WIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX2kzNTAgJiYgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJYWRhcHRlci0+cnNzX3F1ZXVlcyA9IDE7CiAKIAkvKgogCSAqIGlmIHJzc19xdWV1ZXMgPiA0IG9yIHZmcyBhcmUgZ29pbmcgdG8gYmUgYWxsb2NhdGVkIHdpdGggcnNzX3F1ZXVlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDY4NGNhY2UuLjMwZjQxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTE5NjYsMTEgKzE5NjYsMTEgQEAKIAogCW5ldHhlbl90c29fY2hlY2sobmV0ZGV2LCB0eF9yaW5nLCBmaXJzdF9kZXNjLCBza2IpOwogCi0JbmV0eGVuX25pY191cGRhdGVfY21kX3Byb2R1Y2VyKGFkYXB0ZXIsIHR4X3JpbmcpOwotCiAJYWRhcHRlci0+c3RhdHMudHhieXRlcyArPSBza2ItPmxlbjsKIAlhZGFwdGVyLT5zdGF0cy54bWl0Y2FsbGVkKys7CiAKKwluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgdHhfcmluZyk7CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBkcm9wX3BhY2tldDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKaW5kZXggMzkyYTZjNC4uYTcwMjQ0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKQEAgLTU4LDYgKzU4LDcgQEAKIAogY29uZmlnIEJDTTYzWFhfUEhZCiAJdHJpc3RhdGUgIkRyaXZlcnMgZm9yIEJyb2FkY29tIDYzeHggU09DcyBpbnRlcm5hbCBQSFkiCisJZGVwZW5kcyBvbiBCQ002M1hYCiAJLS0taGVscC0tLQogCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSA2MzQ4IGFuZCA2MzU4IFBIWXMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmMgYi9kcml2ZXJzL25ldC9waHkvZHA4MzY0MC5jCmluZGV4IGIwYzk1MjIuLjJjZDhkYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9kcDgzNjQwLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2RwODM2NDAuYwpAQCAtNTQzLDExICs1NDMsMjAgQEAKIAogLyogdGltZSBzdGFtcGluZyBtZXRob2RzICovCiAKLXN0YXRpYyB2b2lkIGRlY29kZV9ldm50KHN0cnVjdCBkcDgzNjQwX3ByaXZhdGUgKmRwODM2NDAsCi0JCQlzdHJ1Y3QgcGh5X3R4dHMgKnBoeV90eHRzLCB1MTYgZXN0cykKK3N0YXRpYyBpbnQgZGVjb2RlX2V2bnQoc3RydWN0IGRwODM2NDBfcHJpdmF0ZSAqZHA4MzY0MCwKKwkJICAgICAgIHZvaWQgKmRhdGEsIHUxNiBlc3RzKQogeworCXN0cnVjdCBwaHlfdHh0cyAqcGh5X3R4dHM7CiAJc3RydWN0IHB0cF9jbG9ja19ldmVudCBldmVudDsKIAlpbnQgd29yZHMgPSAoZXN0cyA+PiBFVk5UX1RTX0xFTl9TSElGVCkgJiBFVk5UX1RTX0xFTl9NQVNLOworCXUxNiBleHRfc3RhdHVzID0gMDsKKworCWlmIChlc3RzICYgTVVMVF9FVk5UKSB7CisJCWV4dF9zdGF0dXMgPSAqKHUxNiAqKSBkYXRhOworCQlkYXRhICs9IHNpemVvZihleHRfc3RhdHVzKTsKKwl9CisKKwlwaHlfdHh0cyA9IGRhdGE7CiAKIAlzd2l0Y2ggKHdvcmRzKSB7IC8qIGZhbGwgdGhyb3VnaCBpbiBldmVyeSBjYXNlICovCiAJY2FzZSAzOgpAQCAtNTY1LDYgKzU3NCw5IEBACiAJZXZlbnQudGltZXN0YW1wID0gcGh5MnR4dHMoJmRwODM2NDAtPmVkYXRhKTsKIAogCXB0cF9jbG9ja19ldmVudChkcDgzNjQwLT5jbG9jay0+cHRwX2Nsb2NrLCAmZXZlbnQpOworCisJd29yZHMgPSBleHRfc3RhdHVzID8gd29yZHMgKyAyIDogd29yZHMgKyAxOworCXJldHVybiB3b3JkcyAqIHNpemVvZih1MTYpOwogfQogCiBzdGF0aWMgdm9pZCBkZWNvZGVfcnh0cyhzdHJ1Y3QgZHA4MzY0MF9wcml2YXRlICpkcDgzNjQwLApAQCAtNjQzLDkgKzY1NSw3IEBACiAKIAkJfSBlbHNlIGlmIChQU0ZfRVZOVCA9PSB0eXBlICYmIGxlbiA+PSBzaXplb2YoKnBoeV90eHRzKSkgewogCi0JCQlwaHlfdHh0cyA9IChzdHJ1Y3QgcGh5X3R4dHMgKikgcHRyOwotCQkJZGVjb2RlX2V2bnQoZHA4MzY0MCwgcGh5X3R4dHMsIGVzdHMpOwotCQkJc2l6ZSA9IHNpemVvZigqcGh5X3R4dHMpOworCQkJc2l6ZSA9IGRlY29kZV9ldm50KGRwODM2NDAsIHB0ciwgZXN0cyk7CiAKIAkJfSBlbHNlIHsKIAkJCXNpemUgPSAwOwpAQCAtMTAzNCw4ICsxMDQ0LDggQEAKIAogCWlmIChpc19zdGF0dXNfZnJhbWUoc2tiLCB0eXBlKSkgewogCQlkZWNvZGVfc3RhdHVzX2ZyYW1lKGRwODM2NDAsIHNrYik7Ci0JCS8qIExldCB0aGUgc3RhY2sgZHJvcCB0aGlzIGZyYW1lLiAqLwotCQlyZXR1cm4gZmFsc2U7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKIAlTS0JfUFRQX1RZUEUoc2tiKSA9IHR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCmluZGV4IDY0MzZiYTkuLmM2YmE2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCkBAIC01MjQsNyArNTI0LDcgQEAKICNkZWZpbmUgUFVUX0JZVEUoYXAsIGJ1ZiwgYywgaXNsY3ApCWRvIHsJCVwKIAlpZiAoKGlzbGNwICYmIGMgPCAweDIwKSB8fCAoYXAtPnhhY2NtW2MgPj4gNV0gJiAoMSA8PCAoYyAmIDB4MWYpKSkpIHtcCiAJCSpidWYrKyA9IFBQUF9FU0NBUEU7CQkJXAotCQkqYnVmKysgPSBjIF4gMHgyMDsJCQlcCisJCSpidWYrKyA9IGMgXiBQUFBfVFJBTlM7CQkJXAogCX0gZWxzZQkJCQkJCVwKIAkJKmJ1ZisrID0gYzsJCQkJXAogfSB3aGlsZSAoMCkKQEAgLTg5Nyw3ICs4OTcsNyBAQAogCQkJCXNwID0gc2tiX3B1dChza2IsIG4pOwogCQkJCW1lbWNweShzcCwgYnVmLCBuKTsKIAkJCQlpZiAoYXAtPnN0YXRlICYgU0NfRVNDQVBFKSB7Ci0JCQkJCXNwWzBdIF49IDB4MjA7CisJCQkJCXNwWzBdIF49IFBQUF9UUkFOUzsKIAkJCQkJYXAtPnN0YXRlICY9IH5TQ19FU0NBUEU7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHhhMTY4X2V0aC5jIGIvZHJpdmVycy9uZXQvcHhhMTY4X2V0aC5jCmluZGV4IGUyMjQ3NDAuLjFmOTdkYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3B4YTE2OF9ldGguYworKysgYi9kcml2ZXJzL25ldC9weGExNjhfZXRoLmMKQEAgLTEyNzYsNyArMTI3Niw3IEBACiAJd21iKCk7CiAJd3JsKHBlcCwgU0RNQV9DTUQsIFNETUFfQ01EX1RYREggfCBTRE1BX0NNRF9FUkQpOwogCi0Jc3RhdHMtPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCXN0YXRzLT50eF9ieXRlcyArPSBsZW5ndGg7CiAJc3RhdHMtPnR4X3BhY2tldHMrKzsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlpZiAocGVwLT50eF9yaW5nX3NpemUgLSBwZXAtPnR4X2Rlc2NfY291bnQgPD0gMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jCmluZGV4IGU5NjU2NjEuLmE1ZDlmYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2h3LmMKQEAgLTE0MDYsNiArMTQwNiw3IEBACiAKIAlmb3IgKGxvb3AgPSAwOyBsb29wIDwgcXVlLT5ub19vcHM7IGxvb3ArKykgewogCQlRTENOSUNfV1JfRFVNUF9SRUcocXVlLT5zZWxfYWRkciwgYmFzZSwgcXVlX2lkKTsKKwkJYWRkciA9IHF1ZS0+cmVhZF9hZGRyOwogCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKIAkJCVFMQ05JQ19SRF9EVU1QX1JFRyhhZGRyLCBiYXNlLCAmZGF0YSk7CiAJCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKaW5kZXggM2FiN2QyYy4uMGY2YWY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKQEAgLTIxNTksNiArMjE1OSw3IEBACiAKIAluZiA9ICZwYnVmLT5mcmFnX2FycmF5WzBdOwogCXBjaV91bm1hcF9zaW5nbGUocGRldiwgbmYtPmRtYSwgc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisJcGJ1Zi0+c2tiID0gTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCBiYzViYjM3Li5mOGM0NDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTE2MzUsNyArMTYzNSw3IEBACiAJICoKIAkgKiAoUlRMX1IzMihUeENvbmZpZykgJiAweDcwMDAwMCkgPT0gMHgyMDAwMDAgPyA4MTAxRWIgOiA4MTAxRWMKIAkgKi8KLQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9tYWNfaW5mbyB7CiAJCXUzMiBtYXNrOwogCQl1MzIgdmFsOwogCQlpbnQgbWFjX3ZlcnNpb247CkBAIC0xNzAzLDcgKzE3MDMsOCBAQAogCiAJCS8qIENhdGNoLWFsbCAqLwogCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCVJUTF9HSUdBX01BQ19OT05FICAgfQotCX0sICpwID0gbWFjX2luZm87CisJfTsKKwljb25zdCBzdHJ1Y3QgcnRsX21hY19pbmZvICpwID0gbWFjX2luZm87CiAJdTMyIHJlZzsKIAogCXJlZyA9IFJUTF9SMzIoVHhDb25maWcpOwpAQCAtMzc5OSw3ICszODAwLDcgQEAKIAogc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHZvaWQgX19pb21lbSAqaW9hZGRyLCB1bnNpZ25lZCBtYWNfdmVyc2lvbikKIHsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jZmcyX2luZm8gewogCQl1MzIgbWFjX3ZlcnNpb247CiAJCXUzMiBjbGs7CiAJCXUzMiB2YWw7CkBAIC0zODA4LDcgKzM4MDksOCBAQAogCQl7IFJUTF9HSUdBX01BQ19WRVJfMDUsIFBDSV9DbG9ja182Nk1IeiwgMHgwMDBmZmZmZiB9LAogCQl7IFJUTF9HSUdBX01BQ19WRVJfMDYsIFBDSV9DbG9ja18zM01IeiwgMHgwMGZmZmYwMCB9LCAvLyA4MTEwU0NlCiAJCXsgUlRMX0dJR0FfTUFDX1ZFUl8wNiwgUENJX0Nsb2NrXzY2TUh6LCAweDAwZmZmZmZmIH0KLQl9LCAqcCA9IGNmZzJfaW5mbzsKKwl9OworCWNvbnN0IHN0cnVjdCBydGxfY2ZnMl9pbmZvICpwID0gY2ZnMl9pbmZvOwogCXVuc2lnbmVkIGludCBpOwogCXUzMiBjbGs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggZGM0ODA1Zi4uZjYyODU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTI0MDAsOCArMjQwMCwxMCBAQAogCXsgLmNvbXBhdGlibGUgPSAic21zYyxsYW45MWM5NCIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzbXNjLGxhbjkxYzExMSIsIH0sCiAJe30sCi19Cit9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc21jOTF4X21hdGNoKTsKKyNlbHNlCisjZGVmaW5lIHNtYzkxeF9tYXRjaCBOVUxMCiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNtY19kcnZfcG1fb3BzID0gewpAQCAtMjQxNiw5ICsyNDE4LDcgQEAKIAkJLm5hbWUJPSBDQVJETkFNRSwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5wbQk9ICZzbWNfZHJ2X3BtX29wcywKLSNpZmRlZiBDT05GSUdfT0YKIAkJLm9mX21hdGNoX3RhYmxlID0gc21jOTF4X21hdGNoLAotI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bi5jIGIvZHJpdmVycy9uZXQvdHVuLmMKaW5kZXggNGRhYjg1ZS4uOWE2YjM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVuLmMKKysrIGIvZHJpdmVycy9uZXQvdHVuLmMKQEAgLTQ2MCw3ICs0NjAsMjMgQEAKIAogCXJldHVybiAoZmVhdHVyZXMgJiB0dW4tPnNldF9mZWF0dXJlcykgfCAoZmVhdHVyZXMgJiB+VFVOX1VTRVJfRkVBVFVSRVMpOwogfQotCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKK3N0YXRpYyB2b2lkIHR1bl9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwkvKgorCSAqIFR1biBvbmx5IHJlY2VpdmVzIGZyYW1lcyB3aGVuOgorCSAqIDEpIHRoZSBjaGFyIGRldmljZSBlbmRwb2ludCBnZXRzIGRhdGEgZnJvbSB1c2VyIHNwYWNlCisJICogMikgdGhlIHR1biBzb2NrZXQgZ2V0cyBhIHNlbmRtc2cgY2FsbCBmcm9tIHVzZXIgc3BhY2UKKwkgKiBTaW5jZSBib3RoIG9mIHRob3NlIGFyZSBzeW5jcm9ub3VzIG9wZXJhdGlvbnMsIHdlIGFyZSBndWFyYW50ZWVkCisJICogbmV2ZXIgdG8gaGF2ZSBwZW5kaW5nIGRhdGEgd2hlbiB3ZSBwb2xsIGZvciBpdAorCSAqIHNvIHRoZXJlcyBub3RoaW5nIHRvIGRvIGhlcmUgYnV0IHJldHVybi4KKwkgKiBXZSBuZWVkIHRoaXMgdGhvdWdoIHNvIG5ldHBvbGwgcmVjb2duaXplcyB1cyBhcyBhbiBpbnRlcmZhY2UgdGhhdAorCSAqIHN1cHBvcnRzIHBvbGxpbmcsIHdoaWNoIGVuYWJsZXMgYnJpZGdlIGRldmljZXMgaW4gdmlydCBzZXR1cHMgdG8KKwkgKiBzdGlsbCB1c2UgbmV0Y29uc29sZQorCSAqLworCXJldHVybjsKK30KKyNlbmRpZgogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0dW5fbmV0ZGV2X29wcyA9IHsKIAkubmRvX3VuaW5pdAkJPSB0dW5fbmV0X3VuaW5pdCwKIAkubmRvX29wZW4JCT0gdHVuX25ldF9vcGVuLApAQCAtNDY4LDYgKzQ4NCw5IEBACiAJLm5kb19zdGFydF94bWl0CQk9IHR1bl9uZXRfeG1pdCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gdHVuX25ldF9jaGFuZ2VfbXR1LAogCS5uZG9fZml4X2ZlYXR1cmVzCT0gdHVuX25ldF9maXhfZmVhdHVyZXMsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHR1bl9wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdGFwX25ldGRldl9vcHMgPSB7CkBAIC00ODAsNiArNDk5LDkgQEAKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHR1bl9uZXRfbWNsaXN0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB0dW5fcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCiB9OwogCiAvKiBJbml0aWFsaXplIG5ldCBkZXZpY2UuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnCmluZGV4IDlkNGY5MTEuLjg0ZDQ2MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnCkBAIC0zODUsNiArMzg1LDE2IEBACiAJICByb3V0ZXIgd2l0aCBVU0IgZXRoZXJuZXQgcG9ydC4gVGhpcyBkcml2ZXIgaXMgZm9yIHJvdXRlcnMgb25seSwKIAkgIGl0IHdpbGwgbm90IHdvcmsgd2l0aCBBRFNMIG1vZGVtcyAodXNlIGN4YWNydSBkcml2ZXIgaW5zdGVhZCkuCiAKK2NvbmZpZyBVU0JfTkVUX0tBTE1JQQorCXRyaXN0YXRlICJTYW1zdW5nIEthbG1pYSBiYXNlZCBMVEUgVVNCIG1vZGVtIgorCWRlcGVuZHMgb24gVVNCX1VTQk5FVAorCWhlbHAKKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFNhbXN1bmcgS2FsbWlhIGJhc2VkIFVTQiBtb2RlbQorCSAgYXMgU2Ftc3VuZyBHVC1CMzczMC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQga2FsbWlhLgorCiBjb25maWcgVVNCX0hTTwogCXRyaXN0YXRlICJPcHRpb24gVVNCIEhpZ2ggU3BlZWQgTW9iaWxlIERldmljZXMiCiAJZGVwZW5kcyBvbiBVU0IgJiYgUkZLSUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC91c2IvTWFrZWZpbGUKaW5kZXggYzdlYzhhNS4uYzIwM2ZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZQpAQCAtMjMsNiArMjMsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9VU0JORVQpCSs9IHVzYm5ldC5vCiBvYmotJChDT05GSUdfVVNCX05FVF9JTlQ1MVgxKQkrPSBpbnQ1MXgxLm8KIG9iai0kKENPTkZJR19VU0JfQ0RDX1BIT05FVCkJKz0gY2RjLXBob25ldC5vCitvYmotJChDT05GSUdfVVNCX05FVF9LQUxNSUEpCSs9IGthbG1pYS5vCiBvYmotJChDT05GSUdfVVNCX0lQSEVUSCkJKz0gaXBoZXRoLm8KIG9iai0kKENPTkZJR19VU0JfU0lFUlJBX05FVCkJKz0gc2llcnJhX25ldC5vCiBvYmotJChDT05GSUdfVVNCX05FVF9DWDgyMzEwX0VUSCkJKz0gY3g4MjMxMF9ldGgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2thbG1pYS5jIGIvZHJpdmVycy9uZXQvdXNiL2thbG1pYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NjVmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC91c2Iva2FsbWlhLmMKQEAgLTAsMCArMSwzODQgQEAKKy8qCisgKiBVU0IgbmV0d29yayBpbnRlcmZhY2UgZHJpdmVyIGZvciBTYW1zdW5nIEthbG1pYSBiYXNlZCBMVEUgVVNCIG1vZGVtIGxpa2UgdGhlCisgKiBTYW1zdW5nIEdULUIzNzMwIGFuZCBHVC1CMzcxMC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTWFyaXVzIEJqb2VybnN0YWQgS290c2JhayA8bWFyaXVzQGtvdHNiYWsuY29tPgorICoKKyAqIFNwb25zb3JlZCBieSBRdWlja2xpbmsgVmlkZW8gRGlzdHJpYnV0aW9uIFNlcnZpY2VzIEx0ZC4KKyAqCisgKiBCYXNlZCBvbiB0aGUgY2RjX2VlbSBtb2R1bGUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VzYm5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorCisvKgorICogVGhlIFNhbXN1bmcgS2FsbWlhIGJhc2VkIExURSBVU0IgbW9kZW1zIGhhdmUgYSBDREMgQUNNIHBvcnQgZm9yIG1vZGVtIGNvbnRyb2wKKyAqIGhhbmRsZWQgYnkgdGhlICJvcHRpb24iIG1vZHVsZSBhbmQgYW4gZXRoZXJuZXQgZGF0YSBwb3J0IGhhbmRsZWQgYnkgdGhpcworICogbW9kdWxlLgorICoKKyAqIFRoZSBzdGljayBtdXN0IGZpcnN0IGJlIHN3aXRjaGVkIGludG8gbW9kZW0gbW9kZSBieSB1c2JfbW9kZXN3aXRjaAorICogb3Igc2ltaWxhciB0b29sLiBUaGVuIHRoZSBtb2RlbSBnZXRzIHNlbnQgdHdvIGluaXRpYWxpemF0aW9uIHBhY2tldHMgYnkKKyAqIHRoaXMgbW9kdWxlLCB3aGljaCBnaXZlcyB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGRldmljZS4gVXNlciBzcGFjZSBjYW4gdGhlbgorICogY29ubmVjdCB0aGUgbW9kZW0gdXNpbmcgQVQgY29tbWFuZHMgdGhyb3VnaCB0aGUgQUNNIHBvcnQgYW5kIHRoZW4gdXNlCisgKiBESENQIG9uIHRoZSBuZXR3b3JrIGludGVyZmFjZSBleHBvc2VkIGJ5IHRoaXMgbW9kdWxlLiBOZXR3b3JrIHBhY2tldHMgYXJlCisgKiBzZW50IHRvIGFuZCBmcm9tIHRoZSBtb2RlbSBpbiBhIHByb3ByaWV0YXJ5IGZvcm1hdCBkaXNjb3ZlcmVkIGFmdGVyIHdhdGNoaW5nCisgKiB0aGUgYmVoYXZpb3Igb2YgdGhlIHdpbmRvd3MgZHJpdmVyIGZvciB0aGUgbW9kZW0uCisgKgorICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlIG9mIHRoZSBtb2RlbSBpcyBhdmFpbGFibGUgaW4gdXNiX21vZGVzd2l0Y2gKKyAqIGZvcnVtIGFuZCB0aGUgcHJvamVjdCBwYWdlOgorICoKKyAqIGh0dHA6Ly93d3cuZHJhaXNiZXJnaG9mLmRlL3VzYl9tb2Rlc3dpdGNoL2JiL3ZpZXd0b3BpYy5waHA/dD00NjUKKyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ta290c2Jhay9TYW1zdW5nLUdULUIzNzMwLWxpbnV4LWRyaXZlcgorICovCisKKy8qICNkZWZpbmUJREVCVUcgKi8KKy8qICNkZWZpbmUJVkVSQk9TRSAqLworCisjZGVmaW5lIEtBTE1JQV9IRUFERVJfTEVOR1RIIDYKKyNkZWZpbmUgS0FMTUlBX0FMSUdOX1NJWkUgNAorI2RlZmluZSBLQUxNSUFfVVNCX1RJTUVPVVQgMTAwMDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAora2FsbWlhX3NlbmRfaW5pdF9wYWNrZXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCAqaW5pdF9tc2csIHU4IGluaXRfbXNnX2xlbiwKKwl1OCAqYnVmZmVyLCB1OCBleHBlY3RlZF9sZW4pCit7CisJaW50IGFjdF9sZW47CisJaW50IHN0YXR1czsKKworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJTZW5kaW5nIGluaXQgcGFja2V0Iik7CisKKwlzdGF0dXMgPSB1c2JfYnVsa19tc2coZGV2LT51ZGV2LCB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCAweDAyKSwKKwkJaW5pdF9tc2csIGluaXRfbXNnX2xlbiwgJmFjdF9sZW4sIEtBTE1JQV9VU0JfVElNRU9VVCk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsCisJCQkiRXJyb3Igc2VuZGluZyBpbml0IHBhY2tldC4gU3RhdHVzICVpLCBsZW5ndGggJWlcbiIsCisJCQlzdGF0dXMsIGFjdF9sZW4pOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwllbHNlIGlmIChhY3RfbGVuICE9IGluaXRfbXNnX2xlbikgeworCQluZXRkZXZfZXJyKGRldi0+bmV0LAorCQkJIkRpZCBub3Qgc2VuZCBhbGwgb2YgaW5pdCBwYWNrZXQuIEJ5dGVzIHNlbnQ6ICVpIiwKKwkJCWFjdF9sZW4pOworCX0KKwllbHNlIHsKKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgIlN1Y2Nlc3NmdWxseSBzZW50IGluaXQgcGFja2V0LiIpOworCX0KKworCXN0YXR1cyA9IHVzYl9idWxrX21zZyhkZXYtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIDB4ODEpLAorCQlidWZmZXIsIGV4cGVjdGVkX2xlbiwgJmFjdF9sZW4sIEtBTE1JQV9VU0JfVElNRU9VVCk7CisKKwlpZiAoc3RhdHVzICE9IDApCisJCW5ldGRldl9lcnIoZGV2LT5uZXQsCisJCQkiRXJyb3IgcmVjZWl2aW5nIGluaXQgcmVzdWx0LiBTdGF0dXMgJWksIGxlbmd0aCAlaVxuIiwKKwkJCXN0YXR1cywgYWN0X2xlbik7CisJZWxzZSBpZiAoYWN0X2xlbiAhPSBleHBlY3RlZF9sZW4pCisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJVbmV4cGVjdGVkIGluaXQgcmVzdWx0IGxlbmd0aDogJWlcbiIsCisJCQlhY3RfbGVuKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQKK2thbG1pYV9pbml0X2FuZF9nZXRfZXRoZXJuZXRfYWRkcihzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4ICpldGhlcm5ldF9hZGRyKQoreworCWNoYXIgaW5pdF9tc2dfMVtdID0KKwkJeyAweDU3LCAweDUwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLAorCQkweDAwLCAweDAwIH07CisJY2hhciBpbml0X21zZ18yW10gPQorCQl7IDB4NTcsIDB4NTAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4ZjQsCisJCTB4MDAsIDB4MDAgfTsKKwljaGFyIHJlY2VpdmVfYnVmWzI4XTsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0ga2FsbWlhX3NlbmRfaW5pdF9wYWNrZXQoZGV2LCBpbml0X21zZ18xLCBzaXplb2YoaW5pdF9tc2dfMSkKKwkJLyBzaXplb2YoaW5pdF9tc2dfMVswXSksIHJlY2VpdmVfYnVmLCAyNCk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJc3RhdHVzID0ga2FsbWlhX3NlbmRfaW5pdF9wYWNrZXQoZGV2LCBpbml0X21zZ18yLCBzaXplb2YoaW5pdF9tc2dfMikKKwkJLyBzaXplb2YoaW5pdF9tc2dfMlswXSksIHJlY2VpdmVfYnVmLCAyOCk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJbWVtY3B5KGV0aGVybmV0X2FkZHIsIHJlY2VpdmVfYnVmICsgMTAsIEVUSF9BTEVOKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQKK2thbG1pYV9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJdTggc3RhdHVzOworCXU4IGV0aGVybmV0X2FkZHJbRVRIX0FMRU5dOworCisJLyogRG9uJ3QgYmluZCB0byBBVCBjb21tYW5kIGludGVyZmFjZSAqLworCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gVVNCX0NMQVNTX1ZFTkRPUl9TUEVDKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldi0+aW4gPSB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCAweDgxICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwlkZXYtPm91dCA9IHVzYl9zbmRidWxrcGlwZShkZXYtPnVkZXYsIDB4MDIgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCWRldi0+c3RhdHVzID0gTlVMTDsKKworCWRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW4gKz0gS0FMTUlBX0hFQURFUl9MRU5HVEg7CisJZGV2LT5oYXJkX210dSA9IDE0MDA7CisJZGV2LT5yeF91cmJfc2l6ZSA9IGRldi0+aGFyZF9tdHUgKiAxMDsgLy8gRm91bmQgYXMgb3B0aW1hbCBhZnRlciB0ZXN0aW5nCisKKwlzdGF0dXMgPSBrYWxtaWFfaW5pdF9hbmRfZ2V0X2V0aGVybmV0X2FkZHIoZGV2LCBldGhlcm5ldF9hZGRyKTsKKworCWlmIChzdGF0dXMgPCAwKSB7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoZHJpdmVyX29mKGludGYpLCBpbnRmKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwltZW1jcHkoZGV2LT5uZXQtPmRldl9hZGRyLCBldGhlcm5ldF9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGRldi0+bmV0LT5wZXJtX2FkZHIsIGV0aGVybmV0X2FkZHIsIEVUSF9BTEVOKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCitrYWxtaWFfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IE5VTEw7CisJdTE2IGNvbnRlbnRfbGVuOworCXVuc2lnbmVkIGNoYXIgKmhlYWRlcl9zdGFydDsKKwl1bnNpZ25lZCBjaGFyIGV0aGVyX3R5cGVfMSwgZXRoZXJfdHlwZV8yOworCXU4IHJlbWFpbmRlciwgcGFkbGVuID0gMDsKKworCWlmICghc2tiX2Nsb25lZChza2IpKSB7CisJCWludCBoZWFkcm9vbSA9IHNrYl9oZWFkcm9vbShza2IpOworCQlpbnQgdGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTsKKworCQlpZiAoKHRhaWxyb29tID49IEtBTE1JQV9BTElHTl9TSVpFKSAmJiAoaGVhZHJvb20KKwkJCT49IEtBTE1JQV9IRUFERVJfTEVOR1RIKSkKKwkJCWdvdG8gZG9uZTsKKworCQlpZiAoKGhlYWRyb29tICsgdGFpbHJvb20pID4gKEtBTE1JQV9IRUFERVJfTEVOR1RICisJCQkrIEtBTE1JQV9BTElHTl9TSVpFKSkgeworCQkJc2tiLT5kYXRhID0gbWVtbW92ZShza2ItPmhlYWQgKyBLQUxNSUFfSEVBREVSX0xFTkdUSCwKKwkJCQlza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCXNrYl9zZXRfdGFpbF9wb2ludGVyKHNrYiwgc2tiLT5sZW4pOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJc2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IsIEtBTE1JQV9IRUFERVJfTEVOR1RILAorCQlLQUxNSUFfQUxJR05fU0laRSwgZmxhZ3MpOworCWlmICghc2tiMikKKwkJcmV0dXJuIE5VTEw7CisKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCXNrYiA9IHNrYjI7CisKKwlkb25lOiBoZWFkZXJfc3RhcnQgPSBza2JfcHVzaChza2IsIEtBTE1JQV9IRUFERVJfTEVOR1RIKTsKKwlldGhlcl90eXBlXzEgPSBoZWFkZXJfc3RhcnRbS0FMTUlBX0hFQURFUl9MRU5HVEggKyAxMl07CisJZXRoZXJfdHlwZV8yID0gaGVhZGVyX3N0YXJ0W0tBTE1JQV9IRUFERVJfTEVOR1RIICsgMTNdOworCisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgIlNlbmRpbmcgZXRoZXJUeXBlOiAlMDJ4JTAyeCIsIGV0aGVyX3R5cGVfMSwKKwkJZXRoZXJfdHlwZV8yKTsKKworCS8qIEFjY29yZGluZyB0byBlbXBpcmljIGRhdGEgZm9yIGRhdGEgcGFja2FnZXMgKi8KKwloZWFkZXJfc3RhcnRbMF0gPSAweDU3OworCWhlYWRlcl9zdGFydFsxXSA9IDB4NDQ7CisJY29udGVudF9sZW4gPSBza2ItPmxlbiAtIEtBTE1JQV9IRUFERVJfTEVOR1RIOworCWhlYWRlcl9zdGFydFsyXSA9IChjb250ZW50X2xlbiAmIDB4ZmYpOyAvKiBsb3cgYnl0ZSAqLworCWhlYWRlcl9zdGFydFszXSA9IChjb250ZW50X2xlbiA+PiA4KTsgLyogaGlnaCBieXRlICovCisKKwloZWFkZXJfc3RhcnRbNF0gPSBldGhlcl90eXBlXzE7CisJaGVhZGVyX3N0YXJ0WzVdID0gZXRoZXJfdHlwZV8yOworCisJLyogQWxpZ24gdG8gNCBieXRlcyBieSBwYWRkaW5nIHdpdGggemVyb3MgKi8KKwlyZW1haW5kZXIgPSBza2ItPmxlbiAlIEtBTE1JQV9BTElHTl9TSVpFOworCWlmIChyZW1haW5kZXIgPiAwKSB7CisJCXBhZGxlbiA9IEtBTE1JQV9BTElHTl9TSVpFIC0gcmVtYWluZGVyOworCQltZW1zZXQoc2tiX3B1dChza2IsIHBhZGxlbiksIDAsIHBhZGxlbik7CisJfQorCisJbmV0ZGV2X2RiZygKKwkJZGV2LT5uZXQsCisJCSJTZW5kaW5nIHBhY2thZ2Ugd2l0aCBsZW5ndGggJWkgYW5kIHBhZGRpbmcgJWkuIEhlYWRlcjogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnguIiwKKwkJY29udGVudF9sZW4sIHBhZGxlbiwgaGVhZGVyX3N0YXJ0WzBdLCBoZWFkZXJfc3RhcnRbMV0sCisJCWhlYWRlcl9zdGFydFsyXSwgaGVhZGVyX3N0YXJ0WzNdLCBoZWFkZXJfc3RhcnRbNF0sCisJCWhlYWRlcl9zdGFydFs1XSk7CisKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgaW50CitrYWxtaWFfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCS8qCisJICogT3VyIHRhc2sgaGVyZSBpcyB0byBzdHJpcCBvZmYgZnJhbWluZywgbGVhdmluZyBza2Igd2l0aCBvbmUKKwkgKiBkYXRhIGZyYW1lIGZvciB0aGUgdXNibmV0IGZyYW1ld29yayBjb2RlIHRvIHByb2Nlc3MuCisJICovCisJY29uc3QgdTggSEVBREVSX0VORF9PRl9VU0JfUEFDS0VUW10gPQorCQl7IDB4NTcsIDB4NWEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAgfTsKKwljb25zdCB1OCBFWFBFQ1RFRF9VTktOT1dOX0hFQURFUl8xW10gPQorCQl7IDB4NTcsIDB4NDMsIDB4MWUsIDB4MDAsIDB4MTUsIDB4MDIgfTsKKwljb25zdCB1OCBFWFBFQ1RFRF9VTktOT1dOX0hFQURFUl8yW10gPQorCQl7IDB4NTcsIDB4NTAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwl1OCBpID0gMDsKKworCS8qIGluY29tcGxldGUgaGVhZGVyPyAqLworCWlmIChza2ItPmxlbiA8IEtBTE1JQV9IRUFERVJfTEVOR1RIKQorCQlyZXR1cm4gMDsKKworCWRvIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBOVUxMOworCQl1OCAqaGVhZGVyX3N0YXJ0OworCQl1MTYgdXNiX3BhY2tldF9sZW5ndGgsIGV0aGVyX3BhY2tldF9sZW5ndGg7CisJCWludCBpc19sYXN0OworCisJCWhlYWRlcl9zdGFydCA9IHNrYi0+ZGF0YTsKKworCQlpZiAodW5saWtlbHkoaGVhZGVyX3N0YXJ0WzBdICE9IDB4NTcgfHwgaGVhZGVyX3N0YXJ0WzFdICE9IDB4NDQpKSB7CisJCQlpZiAoIW1lbWNtcChoZWFkZXJfc3RhcnQsIEVYUEVDVEVEX1VOS05PV05fSEVBREVSXzEsCisJCQkJc2l6ZW9mKEVYUEVDVEVEX1VOS05PV05fSEVBREVSXzEpKSB8fCAhbWVtY21wKAorCQkJCWhlYWRlcl9zdGFydCwgRVhQRUNURURfVU5LTk9XTl9IRUFERVJfMiwKKwkJCQlzaXplb2YoRVhQRUNURURfVU5LTk9XTl9IRUFERVJfMikpKSB7CisJCQkJbmV0ZGV2X2RiZygKKwkJCQkJZGV2LT5uZXQsCisJCQkJCSJSZWNlaXZlZCBleHBlY3RlZCB1bmtub3duIGZyYW1lIGhlYWRlcjogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnguIFBhY2thZ2UgbGVuZ3RoOiAlaVxuIiwKKwkJCQkJaGVhZGVyX3N0YXJ0WzBdLCBoZWFkZXJfc3RhcnRbMV0sCisJCQkJCWhlYWRlcl9zdGFydFsyXSwgaGVhZGVyX3N0YXJ0WzNdLAorCQkJCQloZWFkZXJfc3RhcnRbNF0sIGhlYWRlcl9zdGFydFs1XSwKKwkJCQkJc2tiLT5sZW4gLSBLQUxNSUFfSEVBREVSX0xFTkdUSCk7CisJCQl9CisJCQllbHNlIHsKKwkJCQluZXRkZXZfZXJyKAorCQkJCQlkZXYtPm5ldCwKKwkJCQkJIlJlY2VpdmVkIHVua25vd24gZnJhbWUgaGVhZGVyOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeC4gUGFja2FnZSBsZW5ndGg6ICVpXG4iLAorCQkJCQloZWFkZXJfc3RhcnRbMF0sIGhlYWRlcl9zdGFydFsxXSwKKwkJCQkJaGVhZGVyX3N0YXJ0WzJdLCBoZWFkZXJfc3RhcnRbM10sCisJCQkJCWhlYWRlcl9zdGFydFs0XSwgaGVhZGVyX3N0YXJ0WzVdLAorCQkJCQlza2ItPmxlbiAtIEtBTE1JQV9IRUFERVJfTEVOR1RIKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQllbHNlCisJCQluZXRkZXZfZGJnKAorCQkJCWRldi0+bmV0LAorCQkJCSJSZWNlaXZlZCBoZWFkZXI6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LiBQYWNrYWdlIGxlbmd0aDogJWlcbiIsCisJCQkJaGVhZGVyX3N0YXJ0WzBdLCBoZWFkZXJfc3RhcnRbMV0sIGhlYWRlcl9zdGFydFsyXSwKKwkJCQloZWFkZXJfc3RhcnRbM10sIGhlYWRlcl9zdGFydFs0XSwgaGVhZGVyX3N0YXJ0WzVdLAorCQkJCXNrYi0+bGVuIC0gS0FMTUlBX0hFQURFUl9MRU5HVEgpOworCisJCS8qIHN1YnRyYWN0IHN0YXJ0IGhlYWRlciBhbmQgZW5kIGhlYWRlciAqLworCQl1c2JfcGFja2V0X2xlbmd0aCA9IHNrYi0+bGVuIC0gKDIgKiBLQUxNSUFfSEVBREVSX0xFTkdUSCk7CisJCWV0aGVyX3BhY2tldF9sZW5ndGggPSBoZWFkZXJfc3RhcnRbMl0gKyAoaGVhZGVyX3N0YXJ0WzNdIDw8IDgpOworCQlza2JfcHVsbChza2IsIEtBTE1JQV9IRUFERVJfTEVOR1RIKTsKKworCQkvKiBTb21lIHNtYWxsIHBhY2tldHMgbWlzc2VzIGVuZCBtYXJrZXIgKi8KKwkJaWYgKHVzYl9wYWNrZXRfbGVuZ3RoIDwgZXRoZXJfcGFja2V0X2xlbmd0aCkgeworCQkJZXRoZXJfcGFja2V0X2xlbmd0aCA9IHVzYl9wYWNrZXRfbGVuZ3RoCisJCQkJKyBLQUxNSUFfSEVBREVSX0xFTkdUSDsKKwkJCWlzX2xhc3QgPSB0cnVlOworCQl9CisJCWVsc2UgeworCQkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgIkNvcnJlY3QgcGFja2FnZSBsZW5ndGggIyVpIiwgaQorCQkJCSsgMSk7CisKKwkJCWlzX2xhc3QgPSAobWVtY21wKHNrYi0+ZGF0YSArIGV0aGVyX3BhY2tldF9sZW5ndGgsCisJCQkJSEVBREVSX0VORF9PRl9VU0JfUEFDS0VULAorCQkJCXNpemVvZihIRUFERVJfRU5EX09GX1VTQl9QQUNLRVQpKSA9PSAwKTsKKwkJCWlmICghaXNfbGFzdCkgeworCQkJCWhlYWRlcl9zdGFydCA9IHNrYi0+ZGF0YSArIGV0aGVyX3BhY2tldF9sZW5ndGg7CisJCQkJbmV0ZGV2X2RiZygKKwkJCQkJZGV2LT5uZXQsCisJCQkJCSJFbmQgaGVhZGVyOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeC4gUGFja2FnZSBsZW5ndGg6ICVpXG4iLAorCQkJCQloZWFkZXJfc3RhcnRbMF0sIGhlYWRlcl9zdGFydFsxXSwKKwkJCQkJaGVhZGVyX3N0YXJ0WzJdLCBoZWFkZXJfc3RhcnRbM10sCisJCQkJCWhlYWRlcl9zdGFydFs0XSwgaGVhZGVyX3N0YXJ0WzVdLAorCQkJCQlza2ItPmxlbiAtIEtBTE1JQV9IRUFERVJfTEVOR1RIKTsKKwkJCX0KKwkJfQorCisJCWlmIChpc19sYXN0KSB7CisJCQlza2IyID0gc2tiOworCQl9CisJCWVsc2UgeworCQkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCQkJaWYgKHVubGlrZWx5KCFza2IyKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCisJCXNrYl90cmltKHNrYjIsIGV0aGVyX3BhY2tldF9sZW5ndGgpOworCisJCWlmIChpc19sYXN0KSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCQllbHNlIHsKKwkJCXVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiMik7CisJCQlza2JfcHVsbChza2IsIGV0aGVyX3BhY2tldF9sZW5ndGgpOworCQl9CisKKwkJaSsrOworCX0KKwl3aGlsZSAoc2tiLT5sZW4pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8ga2FsbWlhX2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0gIlNhbXN1bmcgS2FsbWlhIExURSBVU0IgZG9uZ2xlIiwKKwkuZmxhZ3MgPSBGTEFHX1dXQU4sCisJLmJpbmQgPSBrYWxtaWFfYmluZCwKKwkucnhfZml4dXAgPSBrYWxtaWFfcnhfZml4dXAsCisJLnR4X2ZpeHVwID0ga2FsbWlhX3R4X2ZpeHVwCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgcHJvZHVjdHNbXSA9IHsKKwkvKiBUaGUgdW5zd2l0Y2hlZCBVU0IgSUQsIHRvIGdldCB0aGUgbW9kdWxlIGF1dG8gbG9hZGVkOiAqLworCXsgVVNCX0RFVklDRSgweDA0ZTgsIDB4Njg5YSkgfSwKKwkvKiBUaGUgc3RpY2sgc3dpdGhlZCBpbnRvIG1vZGVtIChieSBlLmcuIHVzYl9tb2Rlc3dpdGNoKTogKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGU4LCAweDY4ODkpLAorCQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmthbG1pYV9pbmZvLCB9LAorCXsgLyogRU1QVFkgPT0gZW5kIG9mIGxpc3QgKi99IH07CitNT0RVTEVfREVWSUNFX1RBQkxFKCB1c2IsIHByb2R1Y3RzKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGthbG1pYV9kcml2ZXIgPSB7CisJLm5hbWUgPSAia2FsbWlhIiwKKwkuaWRfdGFibGUgPSBwcm9kdWN0cywKKwkucHJvYmUgPSB1c2JuZXRfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB1c2JuZXRfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9IHVzYm5ldF9zdXNwZW5kLAorCS5yZXN1bWUgPSB1c2JuZXRfcmVzdW1lCit9OworCitzdGF0aWMgaW50IF9faW5pdCBrYWxtaWFfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmthbG1pYV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoIGthbG1pYV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGthbG1pYV9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmthbG1pYV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoIGthbG1pYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWFyaXVzIEJqb2VybnN0YWQgS290c2JhayA8bWFyaXVzQGtvdHNiYWsuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIEthbG1pYSBVU0IgbmV0d29yayBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCmluZGV4IDFlYmEwNmYuLjBmMjdmNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwpAQCAtMjIwNCw4ICsyMjA0LDEwIEBACiAKIAlpZiAocG9ydC0+bW9kZSAhPSBGU1RfUkFXKSB7CiAJCWVyciA9IGhkbGNfb3BlbihkZXYpOwotCQlpZiAoZXJyKQorCQlpZiAoZXJyKSB7CisJCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIAkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKIAlmc3Rfb3BlbnBvcnQocG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUuYwppbmRleCAzYTAyMmJjLi45Y2Y5NmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LmMKQEAgLTEyMTYsMTAgKzEyMTYsMTAgQEAKIAkgKiByZWNlaXZlIGNvbW1pdF9yeG9uIHJlcXVlc3QKIAkgKiBhYm9ydCBhbnkgcHJldmlvdXMgY2hhbm5lbCBzd2l0Y2ggaWYgc3RpbGwgaW4gcHJvY2VzcwogCSAqLwotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgJiYKLQkgICAgKHByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgIT0gY3R4LT5zdGFnaW5nLmNoYW5uZWwpKSB7CisJaWYgKHRlc3RfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSAmJgorCSAgICAocHJpdi0+c3dpdGNoX2NoYW5uZWwgIT0gY3R4LT5zdGFnaW5nLmNoYW5uZWwpKSB7CiAJCUlXTF9ERUJVR18xMUgocHJpdiwgImFib3J0IGNoYW5uZWwgc3dpdGNoIG9uICVkXG4iLAotCQkgICAgICBsZTE2X3RvX2NwdShwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsKSk7CisJCSAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN3aXRjaF9jaGFubmVsKSk7CiAJCWl3bF9sZWdhY3lfY2hzd2l0Y2hfZG9uZShwcml2LCBmYWxzZSk7CiAJfQogCkBAIC0xNDAyLDkgKzE0MDIsNiBAQAogCQlyZXR1cm4gcmM7CiAJfQogCi0JcHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCA9IGNtZC5jaGFubmVsOwotCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IHRydWU7Ci0KIAlyZXR1cm4gaXdsX2xlZ2FjeV9zZW5kX2NtZF9wZHUocHJpdiwKIAkJCSBSRVBMWV9DSEFOTkVMX1NXSVRDSCwgc2l6ZW9mKGNtZCksICZjbWQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMKaW5kZXggNDJkZjgzMi4uM2JlNzZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jCkBAIC04NTksMTIgKzg1OSw4IEBACiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKLQlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKSB7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCWllZWU4MDIxMV9jaHN3aXRjaF9kb25lKGN0eC0+dmlmLCBpc19zdWNjZXNzKTsKLQkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JfQogfQogRVhQT1JUX1NZTUJPTChpd2xfbGVnYWN5X2Noc3dpdGNoX2RvbmUpOwogCkBAIC04NzYsMTkgKzg3MiwxOSBAQAogCXN0cnVjdCBpd2xfcnhvbl9jb250ZXh0ICpjdHggPSAmcHJpdi0+Y29udGV4dHNbSVdMX1JYT05fQ1RYX0JTU107CiAJc3RydWN0IGl3bF9sZWdhY3lfcnhvbl9jbWQgKnJ4b24gPSAodm9pZCAqKSZjdHgtPmFjdGl2ZTsKIAotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MpIHsKLQkJaWYgKCFsZTMyX3RvX2NwdShjc2EtPnN0YXR1cykgJiYKLQkJICAgIChjc2EtPmNoYW5uZWwgPT0gcHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCkpIHsKLQkJCXJ4b24tPmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci0JCQljdHgtPnN0YWdpbmcuY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKLQkJCUlXTF9ERUJVR18xMUgocHJpdiwgIkNTQSBub3RpZjogY2hhbm5lbCAlZFxuIiwKKwlpZiAoIXRlc3RfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJaWYgKCFsZTMyX3RvX2NwdShjc2EtPnN0YXR1cykgJiYgY3NhLT5jaGFubmVsID09IHByaXYtPnN3aXRjaF9jaGFubmVsKSB7CisJCXJ4b24tPmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7CisJCWN0eC0+c3RhZ2luZy5jaGFubmVsID0gY3NhLT5jaGFubmVsOworCQlJV0xfREVCVUdfMTFIKHByaXYsICJDU0Egbm90aWY6IGNoYW5uZWwgJWRcbiIsCiAJCQkgICAgICBsZTE2X3RvX2NwdShjc2EtPmNoYW5uZWwpKTsKLQkJCWl3bF9sZWdhY3lfY2hzd2l0Y2hfZG9uZShwcml2LCB0cnVlKTsKLQkJfSBlbHNlIHsKLQkJCUlXTF9FUlIocHJpdiwgIkNTQSBub3RpZiAoZmFpbCkgOiBjaGFubmVsICVkXG4iLAotCQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSk7Ci0JCQlpd2xfbGVnYWN5X2Noc3dpdGNoX2RvbmUocHJpdiwgZmFsc2UpOwotCQl9CisJCWl3bF9sZWdhY3lfY2hzd2l0Y2hfZG9uZShwcml2LCB0cnVlKTsKKwl9IGVsc2UgeworCQlJV0xfRVJSKHByaXYsICJDU0Egbm90aWYgKGZhaWwpIDogY2hhbm5lbCAlZFxuIiwKKwkJCWxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCkpOworCQlpd2xfbGVnYWN5X2Noc3dpdGNoX2RvbmUocHJpdiwgZmFsc2UpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woaXdsX2xlZ2FjeV9yeF9jc2EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmgKaW5kZXggYmM2NmM2MC4uYzVmYmRhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5oCkBAIC01NjAsNyArNTYwLDcgQEAKICNkZWZpbmUgU1RBVFVTX1NDQU5fSFcJCTE1CiAjZGVmaW5lIFNUQVRVU19QT1dFUl9QTUkJMTYKICNkZWZpbmUgU1RBVFVTX0ZXX0VSUk9SCQkxNwotCisjZGVmaW5lIFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HIDE4CiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9sZWdhY3lfaXNfcmVhZHkoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oCmluZGV4IDQxNjQ0OGEuLjBhOGQwN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmgKQEAgLTg1NiwxNyArODU2LDYgQEAKIH07CiAKIC8qCi0gKiBpd2xfc3dpdGNoX3J4b246ICJjaGFubmVsIHN3aXRjaCIgc3RydWN0dXJlCi0gKgotICogQCBzd2l0Y2hfaW5fcHJvZ3Jlc3M6IGNoYW5uZWwgc3dpdGNoIGluIHByb2dyZXNzCi0gKiBAIGNoYW5uZWw6IG5ldyBjaGFubmVsCi0gKi8KLXN0cnVjdCBpd2xfc3dpdGNoX3J4b24gewotCWJvb2wgc3dpdGNoX2luX3Byb2dyZXNzOwotCV9fbGUxNiBjaGFubmVsOwotfTsKLQotLyoKICAqIHNjaGVkdWxlIHRoZSB0aW1lciB0byB3YWtlIHVwIGV2ZXJ5IFVDT0RFX1RSQUNFX1BFUklPRCBtaWxsaXNlY29uZHMKICAqIHRvIHBlcmZvcm0gY29udGludW91cyB1Q29kZSBldmVudCBsb2dnaW5nIG9wZXJhdGlvbiBpZiBlbmFibGVkCiAgKi8KQEAgLTExMTYsNyArMTEwNSw3IEBACiAKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCBjb250ZXh0c1tOVU1fSVdMX1JYT05fQ1RYXTsKIAotCXN0cnVjdCBpd2xfc3dpdGNoX3J4b24gc3dpdGNoX3J4b247CisJX19sZTE2IHN3aXRjaF9jaGFubmVsOwogCiAJLyogMXN0IHJlc3BvbnNlcyBmcm9tIGluaXRpYWxpemUgYW5kIHJ1bnRpbWUgdUNvZGUgaW1hZ2VzLgogCSAqIF80OTY1J3MgaW5pdGlhbGl6ZSBhbGl2ZSByZXNwb25zZSBjb250YWlucyBzb21lIGNhbGlicmF0aW9uIGRhdGEuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2w0OTY1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCmluZGV4IGFmMmFlMjIuLjcxNTdiYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCkBAIC0yODYxLDE2ICsyODYxLDEzIEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8Ci0JICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpCisJICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykgfHwKKwkgICAgdGVzdF9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlnb3RvIG91dDsKIAogCWlmICghaXdsX2xlZ2FjeV9pc19hc3NvY2lhdGVkX2N0eChjdHgpKQogCQlnb3RvIG91dDsKIAotCS8qIGNoYW5uZWwgc3dpdGNoIGluIHByb2dyZXNzICovCi0JaWYgKHByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9PSB0cnVlKQotCQlnb3RvIG91dDsKLQogCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5zZXRfY2hhbm5lbF9zd2l0Y2gpIHsKIAogCQljaCA9IGNoYW5uZWwtPmh3X3ZhbHVlOwpAQCAtMjkxOSwxNSArMjkxNiwxOCBAQAogCQkJICogYXQgdGhpcyBwb2ludCwgc3RhZ2luZ19yeG9uIGhhcyB0aGUKIAkJCSAqIGNvbmZpZ3VyYXRpb24gZm9yIGNoYW5uZWwgc3dpdGNoCiAJCQkgKi8KLQkJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5zZXRfY2hhbm5lbF9zd2l0Y2gocHJpdiwKLQkJCQkJCQkJICAgIGNoX3N3aXRjaCkpCi0JCQkJcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gZmFsc2U7CisJCQlzZXRfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKKwkJCXByaXYtPnN3aXRjaF9jaGFubmVsID0gY3B1X3RvX2xlMTYoY2gpOworCQkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9jaGFubmVsX3N3aXRjaChwcml2LCBjaF9zd2l0Y2gpKSB7CisJCQkJY2xlYXJfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLAorCQkJCQkgICZwcml2LT5zdGF0dXMpOworCQkJCXByaXYtPnN3aXRjaF9jaGFubmVsID0gMDsKKwkJCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgZmFsc2UpOworCQkJfQogCQl9CiAJfQogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCWlmICghcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKQotCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgZmFsc2UpOwogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmMKaW5kZXggNjYwODMxYy4uNjg3YzFmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jZmc4MDIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY2ZnODAyMTEuYwpAQCAtMTI4OCw2ICsxMjg4LDggQEAKIAogCSoodW5zaWduZWQgbG9uZyAqKSB3ZGV2X3ByaXYgPSAodW5zaWduZWQgbG9uZykgcHJpdjsKIAorCXNldF93aXBoeV9kZXYod2Rldi0+d2lwaHksIChzdHJ1Y3QgZGV2aWNlICopIHByaXYtPmFkYXB0ZXItPmRldik7CisKIAlyZXQgPSB3aXBoeV9yZWdpc3Rlcih3ZGV2LT53aXBoeSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICIlczogcmVnaXN0ZXJpbmcgY2ZnODAyMTEgZGV2aWNlXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKaW5kZXggOGZmNDNjMi4uZDYzM2VkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCkBAIC0yNDc1LDYgKzI0NzUsNyBAQAogICogZmFzdGVyIGNsaWVudC4KICAqLwogI2RlZmluZSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0VOQUJMRV9MSUZFX1RJTUVfRVhQSVJZCTB4MDAwMDA0MDAKKyNkZWZpbmUgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19HRU5FUkFURV9DQ01QX0hEUgkweDAwMDAwMjAwCiAjZGVmaW5lIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVF9ERUNSX01HTVQJCTB4MDAwMDAwODAKICNkZWZpbmUgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NURk9STV9QUk9CRVJFU1AJMHgwMDAwMDAyMAogI2RlZmluZSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RGT1JNX0JFQUNPTgkJMHgwMDAwMDAxMApAQCAtMjUxMSw3ICsyNTEyLDggQEAKIAljbWQtPmZsYWdzID0gY3B1X3RvX2xlMzIoTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NUX0RFQ1JfTUdNVCB8CiAJCQkJIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVEZPUk1fUFJPQkVSRVNQIHwKIAkJCQkgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NURk9STV9CRUFDT04gfAotCQkJCSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0VOQUJMRV9MSUZFX1RJTUVfRVhQSVJZKTsKKwkJCQkgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19FTkFCTEVfTElGRV9USU1FX0VYUElSWSB8CisJCQkJIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfR0VORVJBVEVfQ0NNUF9IRFIpOwogCWNtZC0+bnVtX3R4X2Rlc2NfcGVyX3F1ZXVlID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhfREVTQ1MpOwogCWNtZC0+dG90YWxfcnhkID0gY3B1X3RvX2xlMzIoTVdMOEtfUlhfREVTQ1MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwppbmRleCBmYzQ0MDA1Li5lNTAyZGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKQEAgLTY3MCw2ICs2NzAsMTkgQEAKIAkJCQkJCQkgJnJ4X3N0YXR1cywKIAkJCQkJCQkgKHU4ICopIHBkZXNjLCBza2IpOwogCisJCQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihydGxwY2ktPnJ4YnVmZmVyc2l6ZSk7CisJCQlpZiAodW5saWtlbHkoIW5ld19za2IpKSB7CisJCQkJUlRfVFJBQ0UocnRscHJpdiwgKENPTVBfSU5UUiB8IENPTVBfUkVDViksCisJCQkJCSBEQkdfRE1FU0csCisJCQkJCSAoImNhbid0IGFsbG9jIHNrYiBmb3IgcnhcbiIpKTsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCXBjaV91bm1hcF9zaW5nbGUocnRscGNpLT5wZGV2LAorCQkJCQkgKigoZG1hX2FkZHJfdCAqKSBza2ItPmNiKSwKKwkJCQkJIHJ0bHBjaS0+cnhidWZmZXJzaXplLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwogCQkJc2tiX3B1dChza2IsIHJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfZGVzYygodTggKikgcGRlc2MsCiAJCQkJCQkJIGZhbHNlLAogCQkJCQkJCSBIV19ERVNDX1JYUEtUX0xFTikpOwpAQCAtNjg2LDIxICs2OTksNiBAQAogCQkJaGRyID0gcnRsX2dldF9oZHIoc2tiKTsKIAkJCWZjID0gcnRsX2dldF9mYyhza2IpOwogCi0JCQkvKiB0cnkgZm9yIG5ldyBidWZmZXIgLSBpZiBhbGxvY2F0aW9uIGZhaWxzLCBkcm9wCi0JCQkgKiBmcmFtZSBhbmQgcmV1c2Ugb2xkIGJ1ZmZlcgotCQkJICovCi0JCQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihydGxwY2ktPnJ4YnVmZmVyc2l6ZSk7Ci0JCQlpZiAodW5saWtlbHkoIW5ld19za2IpKSB7Ci0JCQkJUlRfVFJBQ0UocnRscHJpdiwgKENPTVBfSU5UUiB8IENPTVBfUkVDViksCi0JCQkJCSBEQkdfRE1FU0csCi0JCQkJCSAoImNhbid0IGFsbG9jIHNrYiBmb3IgcnhcbiIpKTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHJ0bHBjaS0+cGRldiwKLQkJCQkJICooKGRtYV9hZGRyX3QgKikgc2tiLT5jYiksCi0JCQkJCSBydGxwY2ktPnJ4YnVmZmVyc2l6ZSwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0KIAkJCWlmICghc3RhdHMuY3JjICYmICFzdGF0cy5od2Vycm9yKSB7CiAJCQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmcnhfc3RhdHVzLAogCQkJCSAgICAgICBzaXplb2Yocnhfc3RhdHVzKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKaW5kZXggYTM5ODRmNC4uZjM0YjViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwpAQCAtMTQxLDYgKzE0MSwxMyBAQAogCS5ub3RpZmllcl9jYWxsID0gbW9kdWxlX2xvYWRfbm90aWZ5LAogfTsKIAorc3RhdGljIHZvaWQgZnJlZV9hbGxfdGFza3Modm9pZCkKK3sKKwkvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgbGVhayB0YXNrIHN0cnVjdHMgKi8KKwlwcm9jZXNzX3Rhc2tfbW9ydHVhcnkoKTsKKwlwcm9jZXNzX3Rhc2tfbW9ydHVhcnkoKTsKK30KKwogaW50IHN5bmNfc3RhcnQodm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtMTQ4LDggKzE1NSw2IEBACiAJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJm1hcmtlZF9jcHVzLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdXRleF9sb2NrKCZidWZmZXJfbXV0ZXgpOwotCiAJZXJyID0gdGFza19oYW5kb2ZmX3JlZ2lzdGVyKCZ0YXNrX2ZyZWVfbmIpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0MTsKQEAgLTE2Niw3ICsxNzEsNiBAQAogCXN0YXJ0X2NwdV93b3JrKCk7CiAKIG91dDoKLQltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CiAJcmV0dXJuIGVycjsKIG91dDQ6CiAJcHJvZmlsZV9ldmVudF91bnJlZ2lzdGVyKFBST0ZJTEVfTVVOTUFQLCAmbXVubWFwX25iKTsKQEAgLTE3NCw2ICsxNzgsNyBAQAogCXByb2ZpbGVfZXZlbnRfdW5yZWdpc3RlcihQUk9GSUxFX1RBU0tfRVhJVCwgJnRhc2tfZXhpdF9uYik7CiBvdXQyOgogCXRhc2tfaGFuZG9mZl91bnJlZ2lzdGVyKCZ0YXNrX2ZyZWVfbmIpOworCWZyZWVfYWxsX3Rhc2tzKCk7CiBvdXQxOgogCWZyZWVfY3B1bWFza192YXIobWFya2VkX2NwdXMpOwogCWdvdG8gb3V0OwpAQCAtMTgyLDIwICsxODcsMTYgQEAKIAogdm9pZCBzeW5jX3N0b3Aodm9pZCkKIHsKLQkvKiBmbHVzaCBidWZmZXJzICovCi0JbXV0ZXhfbG9jaygmYnVmZmVyX211dGV4KTsKIAllbmRfY3B1X3dvcmsoKTsKIAl1bnJlZ2lzdGVyX21vZHVsZV9ub3RpZmllcigmbW9kdWxlX2xvYWRfbmIpOwogCXByb2ZpbGVfZXZlbnRfdW5yZWdpc3RlcihQUk9GSUxFX01VTk1BUCwgJm11bm1hcF9uYik7CiAJcHJvZmlsZV9ldmVudF91bnJlZ2lzdGVyKFBST0ZJTEVfVEFTS19FWElULCAmdGFza19leGl0X25iKTsKIAl0YXNrX2hhbmRvZmZfdW5yZWdpc3RlcigmdGFza19mcmVlX25iKTsKLQltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CisJYmFycmllcigpOwkJCS8qIGRvIGFsbCBvZiB0aGUgYWJvdmUgZmlyc3QgKi8KKwogCWZsdXNoX2NwdV93b3JrKCk7CiAKLQkvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgbGVhayB0YXNrIHN0cnVjdHMgKi8KLQlwcm9jZXNzX3Rhc2tfbW9ydHVhcnkoKTsKLQlwcm9jZXNzX3Rhc2tfbW9ydHVhcnkoKTsKLQorCWZyZWVfYWxsX3Rhc2tzKCk7CiAJZnJlZV9jcHVtYXNrX3ZhcihtYXJrZWRfY3B1cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggYzg1Zjc0NC4uMDk0MzA4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTUxLDYgKzUxLDcgQEAKIG9iai0kKENPTkZJR19NTjEwMzAwKSArPSBzZXR1cC1idXMubwogb2JqLSQoQ09ORklHX01JQ1JPQkxBWkUpICs9IHNldHVwLWJ1cy5vCiBvYmotJChDT05GSUdfVElMRSkgKz0gc2V0dXAtYnVzLm8gc2V0dXAtaXJxLm8KK29iai0kKENPTkZJR19TUEFSQ19MRU9OKSArPSBzZXR1cC1idXMubyBzZXR1cC1pcnEubwogCiAjCiAjIEFDUEkgUmVsYXRlZCBQQ0kgRlcgRnVuY3Rpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCA1OWYxN2FjLi5mMDJjMzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTMzODgsNyArMzM4OCw3IEBACiB9CiAKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBpbml0X2lvbW11X3BtX29wcyh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2lvbW11X3BtX29wcyh2b2lkKSB7fQogI2VuZGlmCS8qIENPTkZJR19QTSAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA1NjA5OGIzLi41ZjEwYzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMzI3MSwxMSArMzI3MSwxMSBAQAogfQogCiBzdGF0aWMgaW50IHBjaV9zZXRfdmdhX3N0YXRlX2FyY2goc3RydWN0IHBjaV9kZXYgKmRldiwgYm9vbCBkZWNvZGUsCi0JCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIGJvb2wgY2hhbmdlX2JyaWRnZSkKKwkJICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmRfYml0cywgdTMyIGZsYWdzKQogewogCWlmIChhcmNoX3NldF92Z2Ffc3RhdGUpCiAJCXJldHVybiBhcmNoX3NldF92Z2Ffc3RhdGUoZGV2LCBkZWNvZGUsIGNvbW1hbmRfYml0cywKLQkJCQkJCWNoYW5nZV9icmlkZ2UpOworCQkJCQkJZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdnBhYzI3MC5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZwYWMyNzAuYwppbmRleCA0MzUwMDJkLi43MTJiYWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfdnBhYzI3MC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF92cGFjMjcwLmMKQEAgLTExLDYgKzExLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wdHAvcHRwX2NoYXJkZXYuYyBiL2RyaXZlcnMvcHRwL3B0cF9jaGFyZGV2LmMKaW5kZXggYThkMDNhZS4uZTdmMzAxZGEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3B0cC9wdHBfY2hhcmRldi5jCisrKyBiL2RyaXZlcnMvcHRwL3B0cF9jaGFyZGV2LmMKQEAgLTQ2LDcgKzQ2LDggQEAKIAkJY2Fwcy5uX2V4dF90cyA9IHB0cC0+aW5mby0+bl9leHRfdHM7CiAJCWNhcHMubl9wZXJfb3V0ID0gcHRwLT5pbmZvLT5uX3Blcl9vdXQ7CiAJCWNhcHMucHBzID0gcHRwLT5pbmZvLT5wcHM7Ci0JCWVyciA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZjYXBzLCBzaXplb2YoY2FwcykpOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmNhcHMsIHNpemVvZihjYXBzKSkpCisJCQllcnIgPSAtRUZBVUxUOwogCQlicmVhazsKIAogCWNhc2UgUFRQX0VYVFRTX1JFUVVFU1Q6CkBAIC0xMjksOCArMTMwLDEwIEBACiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQogCi0JaWYgKHB0cC0+ZGVmdW5jdCkKKwlpZiAocHRwLT5kZWZ1bmN0KSB7CisJCW11dGV4X3VubG9jaygmcHRwLT50c2V2cV9tdXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWUtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTUwLDEwICsxNTMsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwdHAtPnRzZXZxX211eCk7CiAKLQlpZiAoY29weV90b191c2VyKGJ1ZiwgZXZlbnQsIGNudCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZwdHAtPnRzZXZxX211eCk7CisJaWYgKGNvcHlfdG9fdXNlcihidWYsIGV2ZW50LCBjbnQpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKIAlyZXR1cm4gY250OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggZjgyMmUxMy4uY2UyYWFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0xMDUxLDQgKzEwNTEsMTMgQEAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgTGludXggZHJpdmVyIHNpZGUgb2YgdGhlIFRpbGVyYQogCSAgaHlwZXJ2aXNvcidzIHJlYWwtdGltZSBjbG9jayBpbnRlcmZhY2UuCiAKK2NvbmZpZyBSVENfRFJWX1BVVjMKKwl0cmlzdGF0ZSAiUEtVbml0eSB2MyBSVEMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfUFVWMworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgUlRDIGluIHRoZSBQS1VuaXR5LXYzIFNvQ3MuCisKKwkgIFRoaXMgZHJpdmUgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtcHV2My4KKwogZW5kaWYgIyBSVENfQ0xBU1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggMjEzZDcyNS4uMGZmZWZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTc4LDYgKzc4LDcgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX1BMMDMwKQkrPSBydGMtcGwwMzAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUEwwMzEpCSs9IHJ0Yy1wbDAzMS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QUzMpCSs9IHJ0Yy1wczMubworb2JqLSQoQ09ORklHX1JUQ19EUlZfUFVWMykJKz0gcnRjLXB1djMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUFhBKQkrPSBydGMtcHhhLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1I5NzAxKQkrPSBydGMtcjk3MDEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUlA1QzAxKQkrPSBydGMtcnA1YzAxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKaW5kZXggZWY2MzE2YS4uZGY2ODYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRjX3JlYWRfYWxhcm0pOwogCi1pbnQgX19ydGNfc2V0X2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3N0YXRpYyBpbnQgX19ydGNfc2V0X2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAJbG9uZyBub3csIHNjaGVkdWxlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwppbmRleCBkMGUwNmVkLi5jYWNlNmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCkBAIC00MjEsNyArNDIxLDggQEAKIAkJCWVyciA9IG9wcy0+aW9jdGwocnRjLT5kZXYucGFyZW50LCBjbWQsIGFyZyk7CiAJCQlpZiAoZXJyID09IC1FTk9JT0NUTENNRCkKIAkJCQllcnIgPSAtRU5PVFRZOwotCQl9CisJCX0gZWxzZQorCQkJZXJyID0gLUVOT1RUWTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDkzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDkzLmMKaW5kZXggMWE4NGIzZS4uNzMxN2QzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00MXQ5My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTMuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IG00MXQ5M19yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoc3BpKTsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CiAKIAlpZiAocnRjKQogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9ydGMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wdXYzLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC91bmljb3JlMzIva2VybmVsL3J0Yy5jCnJlbmFtZSB0byBkcml2ZXJzL3J0Yy9ydGMtcHV2My5jCmluZGV4IDhjYWQ3MGIuLjQ2ZjE0YjggMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9ydGMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHV2My5jCkBAIC0xLDcgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2FyY2gvdW5pY29yZTMyL2tlcm5lbC9ydGMuYwotICoKLSAqIENvZGUgc3BlY2lmaWMgdG8gUEtVbml0eSBTb0MgYW5kIFVuaUNvcmUgSVNBCisgKiBSVEMgZHJpdmVyIGNvZGUgc3BlY2lmaWMgdG8gUEtVbml0eSBTb0MgYW5kIFVuaUNvcmUgSVNBCiAgKgogICoJTWFpbnRhaW5lZCBieSBHVUFOIFh1ZS10YW8gPGd4dEBtcHJjLnBrdS5lZHUuY24+CiAgKglDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBHdWFuIFh1ZXRhbwpAQCAtMzYsNyArMzQsNiBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhwdXYzX3J0Y19waWVfbG9jayk7CiAKIC8qIElSUSBIYW5kbGVycyAqLwotCiBzdGF0aWMgaXJxcmV0dXJuX3QgcHV2M19ydGNfYWxhcm1pcnEoaW50IGlycSwgdm9pZCAqaWQpCiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJkZXYgPSBpZDsKQEAgLTg5LDcgKzg2LDYgQEAKIH0KIAogLyogVGltZSByZWFkL3dyaXRlICovCi0KIHN0YXRpYyBpbnQgcHV2M19ydGNfZ2V0dGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqcnRjX3RtKQogewogCXJ0Y190aW1lX3RvX3RtKHJlYWRsKFJUQ19SQ05SKSwgcnRjX3RtKTsKQEAgLTE5Niw3ICsxOTIsNiBAQAogCXN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAkvKiBkbyBub3QgY2xlYXIgQUlFIGhlcmUsIGl0IG1heSBiZSBuZWVkZWQgZm9yIHdha2UgKi8KLQogCXB1djNfcnRjX3NldHBpZShkZXYsIDApOwogCWZyZWVfaXJxKHB1djNfcnRjX2FsYXJtbm8sIHJ0Y19kZXYpOwogCWZyZWVfaXJxKHB1djNfcnRjX3RpY2tubywgcnRjX2Rldik7CkBAIC0yMTgsNyArMjEzLDYgQEAKIAkJd3JpdGVsKHJlYWRsKFJUQ19SVFNSKSAmIH5SVENfUlRTUl9IWkUsIFJUQ19SVFNSKTsKIAl9IGVsc2UgewogCQkvKiByZS1lbmFibGUgdGhlIGRldmljZSwgYW5kIGNoZWNrIGl0IGlzIG9rICovCi0KIAkJaWYgKChyZWFkbChSVENfUlRTUikgJiBSVENfUlRTUl9IWkUpID09IDApIHsKIAkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJydGMgZGlzYWJsZWQsIHJlLWVuYWJsaW5nXG4iKTsKIAkJCXdyaXRlbChyZWFkbChSVENfUlRTUikgfCBSVENfUlRTUl9IWkUsIFJUQ19SVFNSKTsKQEAgLTI1MSw3ICsyNDUsNiBAQAogCXByX2RlYnVnKCIlczogcHJvYmU9JXBcbiIsIF9fZnVuY19fLCBwZGV2KTsKIAogCS8qIGZpbmQgdGhlIElSUXMgKi8KLQogCXB1djNfcnRjX3RpY2tubyA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CiAJaWYgKHB1djNfcnRjX3RpY2tubyA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBydGMgdGlja1xuIik7CkBAIC0yNjgsNyArMjYxLDYgQEAKIAkJIHB1djNfcnRjX3RpY2tubywgcHV2M19ydGNfYWxhcm1ubyk7CiAKIAkvKiBnZXQgdGhlIG1lbW9yeSByZWdpb24gKi8KLQogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CkBAIC0yODgsNyArMjgwLDYgQEAKIAlwdXYzX3J0Y19lbmFibGUocGRldiwgMSk7CiAKIAkvKiByZWdpc3RlciBSVEMgYW5kIGV4aXQgKi8KLQogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInBrdW5pdHkiLCAmcGRldi0+ZGV2LCAmcHV2M19ydGNvcHMsCiAJCQkJICBUSElTX01PRFVMRSk7CiAKQEAgLTMxNSw4ICszMDYsNiBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLS8qIFJUQyBQb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wgKi8KLQogc3RhdGljIGludCB0aWNudF9zYXZlOwogCiBzdGF0aWMgaW50IHB1djNfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpAQCAtMzY4LDQgKzM1NywzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlJUQyBEcml2ZXIgZm9yIHRoZSBQS1VuaXR5IHYzIGNoaXAiKTsKIE1PRFVMRV9BVVRIT1IoIkh1IERvbmdsaWFuZyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCA1NWU4ZjcyLi41NzBkNGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTQxNiw3ICs0MTYsNyBAQAogCiAJLyogc3BlY2lhbCBoYW5kbGluZyBmb3Igbm8gdGFyZ2V0IGJ1ZmZlciBlbXB0eSAqLwogCWlmICgoIXEtPmlzX2lucHV0X3EgJiYKLQkgICAgKHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpID09IDB4MTApKSB7CisJICAgIChxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNV0uc2ZsYWdzKSA9PSAweDEwKSkgewogCQlxcGVyZl9pbmMocSwgdGFyZ2V0X2Z1bGwpOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiT1VURlVMTCBGVEM6JTAyeCIsCiAJCQkgICAgICBxLT5maXJzdF90b19jaGVjayk7CkBAIC00MjcsOCArNDI3LDggQEAKIAlEQkZfRVJST1IoKHEtPmlzX2lucHV0X3EpID8gIklOOiUyZCIgOiAiT1VUOiUyZCIsIHEtPm5yKTsKIAlEQkZfRVJST1IoIkZUQzolM2QgQzolM2QiLCBxLT5maXJzdF90b19jaGVjaywgY291bnQpOwogCURCRl9FUlJPUigiRjE0OiUyeCBGMTU6JTJ4IiwKLQkJICBxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNF0uZmxhZ3MgJiAweGZmLAotCQkgIHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpOworCQkgIHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE0XS5zZmxhZ3MsCisJCSAgcS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTVdLnNmbGFncyk7CiAKIAkvKgogCSAqIEludGVycnVwdHMgbWF5IGJlIGF2b2lkZWQgYXMgbG9uZyBhcyB0aGUgZXJyb3IgaXMgcHJlc2VudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKaW5kZXggNTVjNmFhMS4uZDNjZWUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCkBAIC0zNjEsNyArMzYxLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgcWV0aF9pc19sYXN0X3NiYWxlKHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZSkKIHsKLQlyZXR1cm4gKHNiYWxlLT5mbGFncyAmIFNCQUxfRkxBR1NfTEFTVF9FTlRSWSk7CisJcmV0dXJuIChzYmFsZS0+ZWZsYWdzICYgU0JBTF9FRkxBR1NfTEFTVF9FTlRSWSk7CiB9CiAKIGVudW0gcWV0aF9xZGlvX2J1ZmZlcl9zdGF0ZXMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCmluZGV4IDUwMzY3OGEuLmRkMDhmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKQEAgLTg5MCw3ICs4OTAsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAkvKiBpcyBQQ0kgZmxhZyBzZXQgb24gYnVmZmVyPyAqLwotCWlmIChidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5mbGFncyAmIDB4NDApCisJaWYgKGJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLnNmbGFncyAmIFNCQUxfU0ZMQUdTMF9QQ0lfUkVRKQogCQlhdG9taWNfZGVjKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCk7CiAKIAlza2IgPSBza2JfZGVxdWV1ZSgmYnVmLT5za2JfbGlzdCk7CkBAIC05MDYsOSArOTA2LDExIEBACiAJCWJ1Zi0+aXNfaGVhZGVyW2ldID0gMDsKIAkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0ubGVuZ3RoID0gMDsKIAkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uYWRkciA9IE5VTEw7Ci0JCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmZsYWdzID0gMDsKKwkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZWZsYWdzID0gMDsKKwkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uc2ZsYWdzID0gMDsKIAl9Ci0JYnVmLT5idWZmZXItPmVsZW1lbnRbMTVdLmZsYWdzID0gMDsKKwlidWYtPmJ1ZmZlci0+ZWxlbWVudFsxNV0uZWZsYWdzID0gMDsKKwlidWYtPmJ1ZmZlci0+ZWxlbWVudFsxNV0uc2ZsYWdzID0gMDsKIAlidWYtPm5leHRfZWxlbWVudF90b19maWxsID0gMDsKIAlhdG9taWNfc2V0KCZidWYtPnN0YXRlLCBRRVRIX1FESU9fQlVGX0VNUFRZKTsKIH0KQEAgLTIzNjgsOSArMjM3MCwxMCBAQAogCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5sZW5ndGggPSBQQUdFX1NJWkU7CiAJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmFkZHIgPSAgcG9vbF9lbnRyeS0+ZWxlbWVudHNbaV07CiAJCWlmIChpID09IFFFVEhfTUFYX0JVRkZFUl9FTEVNRU5UUyhjYXJkKSAtIDEpCi0JCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKKwkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmVmbGFncyA9IFNCQUxfRUZMQUdTX0xBU1RfRU5UUlk7CiAJCWVsc2UKLQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmZsYWdzID0gMDsKKwkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmVmbGFncyA9IDA7CisJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLnNmbGFncyA9IDA7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjcxOCwxMSArMjcyMSwxMSBAQAogCWlmIChxZGlvX2Vycm9yKSB7CiAJCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsIGRiZnRleHQpOwogCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgIiBGMTU9JTAyWCIsCi0JCQkgICAgICAgYnVmLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmYpOworCQkJICAgICAgIGJ1Zi0+ZWxlbWVudFsxNV0uc2ZsYWdzKTsKIAkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICIgRjE0PSUwMlgiLAotCQkJICAgICAgIGJ1Zi0+ZWxlbWVudFsxNF0uZmxhZ3MgJiAweGZmKTsKKwkJCSAgICAgICBidWYtPmVsZW1lbnRbMTRdLnNmbGFncyk7CiAJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiIHFlcnI9JVgiLCBxZGlvX2Vycm9yKTsKLQkJaWYgKChidWYtPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZikgPT0gMHgxMikgeworCQlpZiAoKGJ1Zi0+ZWxlbWVudFsxNV0uc2ZsYWdzKSA9PSAweDEyKSB7CiAJCQljYXJkLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlCkBAIC0yNzk4LDcgKzI4MDEsNyBAQAogc3RhdGljIGludCBxZXRoX2hhbmRsZV9zZW5kX2Vycm9yKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCiAJCXN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgcWRpb19lcnIpCiB7Ci0JaW50IHNiYWxmMTUgPSBidWZmZXItPmJ1ZmZlci0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmOworCWludCBzYmFsZjE1ID0gYnVmZmVyLT5idWZmZXItPmVsZW1lbnRbMTVdLnNmbGFnczsKIAogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDYsICJoZHNuZGVyciIpOwogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CkBAIC0yOTA3LDggKzI5MTAsOCBAQAogCiAJZm9yIChpID0gaW5kZXg7IGkgPCBpbmRleCArIGNvdW50OyArK2kpIHsKIAkJYnVmID0gJnF1ZXVlLT5idWZzW2kgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKLQkJYnVmLT5idWZmZXItPmVsZW1lbnRbYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCAtIDFdLmZsYWdzIHw9Ci0JCQkJU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsIC0gMV0uZWZsYWdzIHw9CisJCQkJU0JBTF9FRkxBR1NfTEFTVF9FTlRSWTsKIAogCQlpZiAocXVldWUtPmNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpCiAJCQljb250aW51ZTsKQEAgLTI5MjEsNyArMjkyNCw3IEBACiAJCQkJLyogaXQncyBsaWtlbHkgdGhhdCB3ZSdsbCBnbyB0byBwYWNraW5nCiAJCQkJICogbW9kZSBzb29uICovCiAJCQkJYXRvbWljX2luYygmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpOwotCQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLmZsYWdzIHw9IDB4NDA7CisJCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uc2ZsYWdzIHw9IFNCQUxfU0ZMQUdTMF9QQ0lfUkVROwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKCFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKSB7CkBAIC0yOTM0LDcgKzI5MzcsNyBAQAogCQkJCSAqIGZ1cnRoZXIgc2VuZCB3YXMgcmVxdWVzdGVkIGJ5IHRoZSBzdGFjawogCQkJCSAqLwogCQkJCWF0b21pY19pbmMoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KTsKLQkJCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5mbGFncyB8PSAweDQwOworCQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLnNmbGFncyB8PSBTQkFMX1NGTEFHUzBfUENJX1JFUTsKIAkJCX0KIAkJfQogCX0KQEAgLTMxODAsMjAgKzMxODMsMjAgQEAKIAkJaWYgKCFsZW5ndGgpIHsKIAkJCWlmIChmaXJzdF9sYXApCiAJCQkJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpCi0JCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQkJCQlTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7CisJCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPQorCQkJCQkJU0JBTF9FRkxBR1NfRklSU1RfRlJBRzsKIAkJCQllbHNlCi0JCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9IDA7CisJCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPSAwOwogCQkJZWxzZQotCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQkJICAgIFNCQUxfRkxBR1NfTUlERExFX0ZSQUc7CisJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9CisJCQkJICAgIFNCQUxfRUZMQUdTX01JRERMRV9GUkFHOwogCQl9IGVsc2UgewogCQkJaWYgKGZpcnN0X2xhcCkKLQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJCSAgICBTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7CisJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9CisJCQkJICAgIFNCQUxfRUZMQUdTX0ZJUlNUX0ZSQUc7CiAJCQllbHNlCi0JCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KLQkJCQkgICAgU0JBTF9GTEFHU19NSURETEVfRlJBRzsKKwkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0KKwkJCQkgICAgU0JBTF9FRkxBR1NfTUlERExFX0ZSQUc7CiAJCX0KIAkJZGF0YSArPSBsZW5ndGhfaGVyZTsKIAkJZWxlbWVudCsrOwpAQCAtMzIwNSwxMiArMzIwOCwxMiBAQAogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IChjaGFyICopcGFnZV90b19waHlzKGZyYWctPnBhZ2UpCiAJCQkrIGZyYWctPnBhZ2Vfb2Zmc2V0OwogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0ubGVuZ3RoID0gZnJhZy0+c2l6ZTsKLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0gU0JBTF9GTEFHU19NSURETEVfRlJBRzsKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9IFNCQUxfRUZMQUdTX01JRERMRV9GUkFHOwogCQllbGVtZW50Kys7CiAJfQogCi0JaWYgKGJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50IC0gMV0uZmxhZ3MpCi0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50IC0gMV0uZmxhZ3MgPSBTQkFMX0ZMQUdTX0xBU1RfRlJBRzsKKwlpZiAoYnVmZmVyLT5lbGVtZW50W2VsZW1lbnQgLSAxXS5lZmxhZ3MpCisJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50IC0gMV0uZWZsYWdzID0gU0JBTF9FRkxBR1NfTEFTVF9GUkFHOwogCSpuZXh0X2VsZW1lbnRfdG9fZmlsbCA9IGVsZW1lbnQ7CiB9CiAKQEAgLTMyMzQsNyArMzIzNyw3IEBACiAJCS8qZmlsbCBmaXJzdCBidWZmZXIgZW50cnkgb25seSB3aXRoIGhlYWRlciBpbmZvcm1hdGlvbiAqLwogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IHNrYi0+ZGF0YTsKIAkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmxlbmd0aCA9IGhkcl9sZW47Ci0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9IFNCQUxfRkxBR1NfRklSU1RfRlJBRzsKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9IFNCQUxfRUZMQUdTX0ZJUlNUX0ZSQUc7CiAJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwrKzsKIAkJc2tiLT5kYXRhICs9IGhkcl9sZW47CiAJCXNrYi0+bGVuICAtPSBoZHJfbGVuOwpAQCAtMzI0Niw3ICszMjQ5LDcgQEAKIAkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmFkZHIgPSBoZHI7CiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKSArCiAJCQkJCQkJaGRfbGVuOwotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSBTQkFMX0ZMQUdTX0ZJUlNUX0ZSQUc7CisJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPSBTQkFMX0VGTEFHU19GSVJTVF9GUkFHOwogCQlidWYtPmlzX2hlYWRlcltlbGVtZW50XSA9IDE7CiAJCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwrKzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCA4NTEyYjVjLi4wMjJmYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTY0MCw3ICs2NDAsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9mc2ZfcmVxX2NyZWF0ZShzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAotCQkJCQkJdTMyIGZzZl9jbWQsIHUzMiBzYnR5cGUsCisJCQkJCQl1MzIgZnNmX2NtZCwgdTggc2J0eXBlLAogCQkJCQkJbWVtcG9vbF90ICpwb29sKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxZGlvLT5hZGFwdGVyOwpAQCAtODQxLDcgKzg0MSw3IEBACiAJaWYgKHpmY3BfcWRpb19zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7CiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9BQk9SVF9GQ1BfQ01ORCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLnNjc2lfYWJvcnQpOwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXEgPSBOVUxMOwpAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX1NFTkRfR0VORVJJQywKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwgcG9vbCk7CisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9XUklURV9SRUFELCBwb29sKTsKIAogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXQgPSBQVFJfRVJSKHJlcSk7CkBAIC0xMTEwLDcgKzExMTAsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfU0VORF9FTFMsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsIE5VTEwpOworCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwgTlVMTCk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0ID0gUFRSX0VSUihyZXEpOwpAQCAtMTE1Niw3ICsxMTU2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0VYQ0hBTkdFX0NPTkZJR19EQVRBLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTExOTgsNyArMTE5OCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEEsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsIE5VTEwpOworCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwgTlVMTCk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwpAQCAtMTI1MCw3ICsxMjUwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0VYQ0hBTkdFX1BPUlRfREFUQSwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xMjk2LDcgKzEyOTYsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0VYQ0hBTkdFX1BPUlRfREFUQSwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwgTlVMTCk7CisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELCBOVUxMKTsKIAogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CkBAIC0xNDEyLDcgKzE0MTIsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfT1BFTl9QT1JUX1dJVEhfRElELAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTE0NzgsNyArMTQ3OCw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9DTE9TRV9QT1JULAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTE1NTMsNyArMTU1Myw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTYwNiw3ICsxNjA2LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX1BPUlQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTY5OCw3ICsxNjk4LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX1BIWVNJQ0FMX1BPUlQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTgxMiw3ICsxODEyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX09QRU5fTFVOLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIGFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTE5MDEsNyArMTkwMSw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9DTE9TRV9MVU4sCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMjE2MSw3ICsyMTYxLDcgQEAKIHsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CiAJc3RydWN0IGZjcF9jbW5kICpmY3BfY21uZDsKLQl1bnNpZ25lZCBpbnQgc2J0eXBlID0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOworCXU4IHNidHlwZSA9IFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQ7CiAJaW50IHJlYWxfYnl0ZXMsIHJldHZhbCA9IC1FSU8sIGRpeF9ieXRlcyA9IDA7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gc2NzaV9jbW5kLT5kZXZpY2U7CiAJc3RydWN0IHpmY3Bfc2NzaV9kZXYgKnpmY3Bfc2RldiA9IHNkZXZfdG9femZjcChzZGV2KTsKQEAgLTIxODEsNyArMjE4MSw3IEBACiAJfQogCiAJaWYgKHNjc2lfY21uZC0+c2NfZGF0YV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKLQkJc2J0eXBlID0gU0JBTF9GTEFHUzBfVFlQRV9XUklURTsKKwkJc2J0eXBlID0gU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEU7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0ZDUF9DTU5ELAogCQkJCSAgc2J0eXBlLCBhZGFwdGVyLT5wb29sLnNjc2lfcmVxKTsKQEAgLTIyODAsNyArMjI4MCw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9GQ1BfQ01ORCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfV1JJVEUsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9XUklURSwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuc2NzaV9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0yMzI4LDE3ICsyMzI4LDE4IEBACiAJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IGFkYXB0ZXItPnFkaW87CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxID0gTlVMTDsKIAlzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX3N1cHBvcnQgKmJvdHRvbTsKLQlpbnQgZGlyZWN0aW9uLCByZXR2YWwgPSAtRUlPLCBieXRlczsKKwlpbnQgcmV0dmFsID0gLUVJTywgYnl0ZXM7CisJdTggZGlyZWN0aW9uOwogCiAJaWYgKCEoYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0NGREMpKQogCQlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7CiAKIAlzd2l0Y2ggKGZzZl9jZmRjLT5jb21tYW5kKSB7CiAJY2FzZSBGU0ZfUVRDQl9ET1dOTE9BRF9DT05UUk9MX0ZJTEU6Ci0JCWRpcmVjdGlvbiA9IFNCQUxfRkxBR1MwX1RZUEVfV1JJVEU7CisJCWRpcmVjdGlvbiA9IFNCQUxfU0ZMQUdTMF9UWVBFX1dSSVRFOwogCQlicmVhazsKIAljYXNlIEZTRl9RVENCX1VQTE9BRF9DT05UUk9MX0ZJTEU6Ci0JCWRpcmVjdGlvbiA9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKKwkJZGlyZWN0aW9uID0gU0JBTF9TRkxBR1MwX1RZUEVfUkVBRDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC0yNDEzLDcgKzI0MTQsNyBAQAogCQlmc2ZfcmVxLT5xZGlvX3JlcS5zYmFsX3Jlc3BvbnNlID0gc2JhbF9pZHg7CiAJCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShmc2ZfcmVxKTsKIAotCQlpZiAobGlrZWx5KHNiYWxlLT5mbGFncyAmIFNCQUxfRkxBR1NfTEFTVF9FTlRSWSkpCisJCWlmIChsaWtlbHkoc2JhbGUtPmVmbGFncyAmIFNCQUxfRUZMQUdTX0xBU1RfRU5UUlkpKQogCQkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCA5OGU5N2Q5Li5kOWM0MGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAKIAkvKiBzZXQgbGFzdCBlbnRyeSBmbGFnIGluIGN1cnJlbnQgU0JBTEUgb2YgY3VycmVudCBTQkFMICovCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCBxX3JlcSk7Ci0Jc2JhbGUtPmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKKwlzYmFsZS0+ZWZsYWdzIHw9IFNCQUxfRUZMQUdTX0xBU1RfRU5UUlk7CiAKIAkvKiBkb24ndCBleGNlZWQgbGFzdCBhbGxvd2VkIFNCQUwgKi8KIAlpZiAocV9yZXEtPnNiYWxfbGFzdCA9PSBxX3JlcS0+c2JhbF9saW1pdCkKQEAgLTEzMiw3ICsxMzIsNyBAQAogCiAJLyogc2V0IGNoYWluaW5nIGZsYWcgaW4gZmlyc3QgU0JBTEUgb2YgY3VycmVudCBTQkFMICovCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sIHFfcmVxKTsKLQlzYmFsZS0+ZmxhZ3MgfD0gU0JBTF9GTEFHUzBfTU9SRV9TQkFMUzsKKwlzYmFsZS0+c2ZsYWdzIHw9IFNCQUxfU0ZMQUdTMF9NT1JFX1NCQUxTOwogCiAJLyogY2FsY3VsYXRlIGluZGV4IG9mIG5leHQgU0JBTCAqLwogCXFfcmVxLT5zYmFsX2xhc3QrKzsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCiAJLyogc2V0IHN0b3JhZ2UtYmxvY2sgdHlwZSBmb3IgbmV3IFNCQUwgKi8KIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sIHFfcmVxKTsKLQlzYmFsZS0+ZmxhZ3MgfD0gcV9yZXEtPnNidHlwZTsKKwlzYmFsZS0+c2ZsYWdzIHw9IHFfcmVxLT5zYnR5cGU7CiAKIAlyZXR1cm4gc2JhbGU7CiB9CkBAIC0xNzcsNyArMTc3LDcgQEAKIAogCS8qIHNldCBzdG9yYWdlLWJsb2NrIHR5cGUgZm9yIHRoaXMgcmVxdWVzdCAqLwogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCBxX3JlcSk7Ci0Jc2JhbGUtPmZsYWdzIHw9IHFfcmVxLT5zYnR5cGU7CisJc2JhbGUtPnNmbGFncyB8PSBxX3JlcS0+c2J0eXBlOwogCiAJZm9yICg7IHNnOyBzZyA9IHNnX25leHQoc2cpKSB7CiAJCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX25leHQocWRpbywgcV9yZXEpOwpAQCAtMzg0LDcgKzM4NCw4IEBACiAJZm9yIChjYyA9IDA7IGNjIDwgUURJT19NQVhfQlVGRkVSU19QRVJfUTsgY2MrKykgewogCQlzYmFsZSA9ICYocWRpby0+cmVzX3FbY2NdLT5lbGVtZW50WzBdKTsKIAkJc2JhbGUtPmxlbmd0aCA9IDA7Ci0JCXNiYWxlLT5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKKwkJc2JhbGUtPmVmbGFncyA9IFNCQUxfRUZMQUdTX0xBU1RfRU5UUlk7CisJCXNiYWxlLT5zZmxhZ3MgPSAwOwogCQlzYmFsZS0+YWRkciA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oCmluZGV4IDIyOTdkOGQuLjU0ZTIyYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oCkBAIC02Nyw3ICs2Nyw3IEBACiAgKiBAcWRpb19vdXRiX3VzYWdlOiB1c2FnZSBvZiBvdXRib3VuZCBxdWV1ZQogICovCiBzdHJ1Y3QgemZjcF9xZGlvX3JlcSB7Ci0JdTMyCXNidHlwZTsKKwl1OAlzYnR5cGU7CiAJdTgJc2JhbF9udW1iZXI7CiAJdTgJc2JhbF9maXJzdDsKIAl1OAlzYmFsX2xhc3Q7CkBAIC0xMTYsNyArMTE2LDcgQEAKICAqLwogc3RhdGljIGlubGluZQogdm9pZCB6ZmNwX3FkaW9fcmVxX2luaXQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcWRpb19yZXEgKnFfcmVxLAotCQkJdW5zaWduZWQgbG9uZyByZXFfaWQsIHUzMiBzYnR5cGUsIHZvaWQgKmRhdGEsIHUzMiBsZW4pCisJCQl1bnNpZ25lZCBsb25nIHJlcV9pZCwgdTggc2J0eXBlLCB2b2lkICpkYXRhLCB1MzIgbGVuKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlpbnQgY291bnQgPSBtaW4oYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xX2ZyZWUpLApAQCAtMTMxLDcgKzEzMSw4IEBACiAKIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgcV9yZXEpOwogCXNiYWxlLT5hZGRyID0gKHZvaWQgKikgcmVxX2lkOwotCXNiYWxlLT5mbGFncyA9IFNCQUxfRkxBR1MwX0NPTU1BTkQgfCBzYnR5cGU7CisJc2JhbGUtPmVmbGFncyA9IDA7CisJc2JhbGUtPnNmbGFncyA9IFNCQUxfU0ZMQUdTMF9DT01NQU5EIHwgc2J0eXBlOwogCiAJaWYgKHVubGlrZWx5KCFkYXRhKSkKIAkJcmV0dXJuOwpAQCAtMTczLDcgKzE3NCw3IEBACiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCBxX3JlcSk7Ci0Jc2JhbGUtPmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKKwlzYmFsZS0+ZWZsYWdzIHw9IFNCQUxfRUZMQUdTX0xBU1RfRU5UUlk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9jbGsvY29yZS5jIGIvZHJpdmVycy9zaC9jbGsvY29yZS5jCmluZGV4IDRmNjQxODMuLjdlOWMzOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvY2xrL2NvcmUuYworKysgYi9kcml2ZXJzL3NoL2Nsay9jb3JlLmMKQEAgLTYzNSw3ICs2MzUsNyBAQAogCXN0cnVjdCBjbGsgKmNsa3A7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja19saXN0LCBub2RlKSB7Ci0JCWlmIChsaWtlbHkoY2xrcC0+b3BzKSkgeworCQlpZiAobGlrZWx5KGNsa3AtPnVzZWNvdW50ICYmIGNsa3AtPm9wcykpIHsKIAkJCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa3AtPnJhdGU7CiAKIAkJCWlmIChsaWtlbHkoY2xrcC0+b3BzLT5zZXRfcGFyZW50KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwppbmRleCA2YTllNThkLi5kMThjZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKKysrIGIvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCkBAIC0xODYxLDYgKzE4NjEsNyBAQAogCX0KIAlpZiAoKGNsa19mcmVxLmNwc2R2c3IgPCBDUFNEVlJfTUlOKQogCSAgICB8fCAoY2xrX2ZyZXEuY3BzZHZzciA+IENQU0RWUl9NQVgpKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCWRldl9lcnIoJnNwaS0+ZGV2LAogCQkJImNwc2R2c3IgaXMgY29uZmlndXJlZCBpbmNvcnJlY3RseVxuIik7CiAJCWdvdG8gZXJyX2NvbmZpZ19wYXJhbXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwppbmRleCA2Zjg2YmEwLi45NjljZGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogCXVuc2lnbmVkIGludAkJY291bnQsIGM7CiAJdW5zaWduZWQgbG9uZwkJYmFzZSwgdHhfcmVnLCByeF9yZWc7CiAJaW50CQkJd29yZF9sZW4sIGRhdGFfdHlwZSwgZWxlbWVudF9jb3VudDsKLQlpbnQJCQllbGVtZW50czsKKwlpbnQJCQllbGVtZW50cyA9IDA7CiAJdTMyCQkJbDsKIAl1OAkJCSogcng7CiAJY29uc3QgdTgJCSogdHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwppbmRleCBmNzA2ZGJhLi5jYzg4MGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKQEAgLTY4MSwxMyArNjgxLDE0IEBACiAJZHJ2X2RhdGEtPmNzX2NoYW5nZSA9IHRyYW5zZmVyLT5jc19jaGFuZ2U7CiAKIAkvKiBCaXRzIHBlciB3b3JkIHNldHVwICovCi0JYml0c19wZXJfd29yZCA9IHRyYW5zZmVyLT5iaXRzX3Blcl93b3JkID8gOiBtZXNzYWdlLT5zcGktPmJpdHNfcGVyX3dvcmQ7Ci0JaWYgKChiaXRzX3Blcl93b3JkID4gMCkgJiYgKGJpdHNfcGVyX3dvcmQgJSAxNiA9PSAwKSkgeworCWJpdHNfcGVyX3dvcmQgPSB0cmFuc2Zlci0+Yml0c19wZXJfd29yZCA/IDoKKwkJbWVzc2FnZS0+c3BpLT5iaXRzX3Blcl93b3JkID8gOiA4OworCWlmIChiaXRzX3Blcl93b3JkICUgMTYgPT0gMCkgewogCQlkcnZfZGF0YS0+bl9ieXRlcyA9IGJpdHNfcGVyX3dvcmQvODsKIAkJZHJ2X2RhdGEtPmxlbiA9ICh0cmFuc2Zlci0+bGVuKSA+PiAxOwogCQljcl93aWR0aCA9IEJJVF9DVExfV09SRFNJWkU7CiAJCWRydl9kYXRhLT5vcHMgPSAmYmZpbl9iZmluX3NwaV90cmFuc2Zlcl9vcHNfdTE2OwotCX0gZWxzZSBpZiAoKGJpdHNfcGVyX3dvcmQgPiAwKSAmJiAoYml0c19wZXJfd29yZCAlIDggPT0gMCkpIHsKKwl9IGVsc2UgaWYgKGJpdHNfcGVyX3dvcmQgJSA4ID09IDApIHsKIAkJZHJ2X2RhdGEtPm5fYnl0ZXMgPSBiaXRzX3Blcl93b3JkLzg7CiAJCWRydl9kYXRhLT5sZW4gPSB0cmFuc2Zlci0+bGVuOwogCQljcl93aWR0aCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCmluZGV4IGRmYzE2ZjkuLjE5NjI4NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnCkBAIC0yNCwyMyArMjQsNiBAQAogCiBpZiBTVEFHSU5HCiAKLWNvbmZpZyBTVEFHSU5HX0VYQ0xVREVfQlVJTEQKLQlib29sICJFeGNsdWRlIFN0YWdpbmcgZHJpdmVycyBmcm9tIGJlaW5nIGJ1aWx0IiBpZiBTVEFHSU5HCi0JZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgQXJlIHlvdSBzdXJlIHlvdSByZWFsbHkgd2FudCB0byBidWlsZCB0aGUgc3RhZ2luZyBkcml2ZXJzPwotCSAgVGhleSB0YWludCB5b3VyIGtlcm5lbCwgZG9uJ3QgbGl2ZSB1cCB0byB0aGUgbm9ybWFsIExpbnV4Ci0JICBrZXJuZWwgcXVhbGl0eSBzdGFuZGFyZHMsIGFyZSBhIGJpdCBjcnVmdHkgYXJvdW5kIHRoZSBlZGdlcywKLQkgIGFuZCBtaWdodCBnbyBvZmYgYW5kIGtpY2sgeW91ciBkb2cgd2hlbiB5b3UgYXJlbid0IHBheWluZwotCSAgYXR0ZW50aW9uLgotCi0JICBTYXkgTiBoZXJlIHRvIGJlIGFibGUgdG8gc2VsZWN0IGFuZCBidWlsZCB0aGUgU3RhZ2luZyBkcml2ZXJzLgotCSAgVGhpcyBvcHRpb24gaXMgcHJpbWFyaWx5IGhlcmUgdG8gcHJldmVudCB0aGVtIGZyb20gYmVpbmcgYnVpbHQKLQkgIHdoZW4gc2VsZWN0aW5nICdtYWtlIGFsbHllc2NvbmZnJyBhbmQgJ21ha2UgYWxsbW9kY29uZmlnJyBzbwotCSAgZG9uJ3QgYmUgYWxsIHRoYXQgcHV0IG9mZiwgeW91ciBkb2cgd2lsbCBiZSBqdXN0IGZpbmUuCi0KLWlmICFTVEFHSU5HX0VYQ0xVREVfQlVJTEQKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdHR5L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2dlbmVyaWNfc2VyaWFsL0tjb25maWciCkBAIC0xNzcsNSArMTYwLDQgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbnZlYy9LY29uZmlnIgogCi1lbmRpZiAjICFTVEFHSU5HX0VYQ0xVREVfQlVJTEQKIGVuZGlmICMgU1RBR0lORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEtanRhZy5jIGIvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEtanRhZy5jCmluZGV4IDg3NjMwODguLjhiMTYyMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLWp0YWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS1qdGFnLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPHN0YWdpbmcvYWx0ZXJhLmg+CisjaW5jbHVkZSAiYWx0ZXJhLmgiCiAjaW5jbHVkZSAiYWx0ZXJhLWV4cHJ0LmgiCiAjaW5jbHVkZSAiYWx0ZXJhLWp0YWcuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmMKaW5kZXggMDVhYWQzNS4uOWNkNWU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8c3RhZ2luZy9hbHRlcmEuaD4KKyNpbmNsdWRlICJhbHRlcmEuaCIKICNpbmNsdWRlICJhbHRlcmEtZXhwcnQuaCIKICNpbmNsdWRlICJhbHRlcmEtanRhZy5oIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3N0YWdpbmcvYWx0ZXJhLmggYi9kcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL3N0YWdpbmcvYWx0ZXJhLmgKcmVuYW1lIHRvIGRyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvS2NvbmZpZwppbmRleCAxZjE1ZTFmLi5hZmQ2Y2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIEFUSDZLX0xFR0FDWQogCXRyaXN0YXRlICJBdGhlcm9zIEFSNjAwMyBzdXBwb3J0IChub24gbWFjODAyMTEpIgogICAgICAgICBkZXBlbmRzIG9uIE1NQyAmJiBXTEFOCisJZGVwZW5kcyBvbiBDRkc4MDIxMQogICAgICAgICBzZWxlY3QgV0lSRUxFU1NfRVhUCiAgICAgICAgIHNlbGVjdCBXRVhUX1BSSVYKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2NmZzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2NmZzgwMjExLmMKaW5kZXggNzdkZmI0MC4uZDNhNzc0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9jZmc4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvY2ZnODAyMTEuYwpAQCAtODcwLDcgKzg3MCw4IEBACiAgICAgaWYoYXItPnNjYW5fcmVxdWVzdCkKICAgICB7CiAgICAgICAgIC8qIFRyYW5zbGF0ZSBkYXRhIHRvIGNmZzgwMjExIG1nbXQgZm9ybWF0ICovCi0gICAgICAgIHdtaV9pdGVyYXRlX25vZGVzKGFyLT5hcldtaSwgYXI2a19jZmc4MDIxMV9zY2FuX25vZGUsIGFyLT53ZGV2LT53aXBoeSk7CisJaWYgKGFyLT5hcldtaSkKKwkJd21pX2l0ZXJhdGVfbm9kZXMoYXItPmFyV21pLCBhcjZrX2NmZzgwMjExX3NjYW5fbm9kZSwgYXItPndkZXYtPndpcGh5KTsKIAogICAgICAgICBjZmc4MDIxMV9zY2FuX2RvbmUoYXItPnNjYW5fcmVxdWVzdCwKICAgICAgICAgICAgICgoc3RhdHVzICYgQV9FQ0FOQ0VMRUQpIHx8IChzdGF0dXMgJiBBX0VCVVNZKSkgPyB0cnVlIDogZmFsc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy93bF9pdy5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy93bF9pdy5jCmluZGV4IGU1Y2YzMDkuLjM1ZWVjOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfaXcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL3dsX2l3LmMKQEAgLTY1LDggKzY1LDYgQEAKIGV4dGVybiBib29sIHdsX2l3X2Nvbm5fc3RhdHVzX3N0cih1MzIgZXZlbnRfdHlwZSwgdTMyIHN0YXR1cywKIAkJCQkgIHUzMiByZWFzb24sIGNoYXIgKnN0cmluZ0J1ZiwgdWludCBidWZsZW4pOwogCi11aW50IHdsX21zZ19sZXZlbCA9IFdMX0VSUk9SX1ZBTDsKLQogI2RlZmluZSBNQVhfV0xJV19JT0NUTF9MRU4gMTAyNAogCiAjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuYwppbmRleCAxYzQ1YzExLi5hYTg3YjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9kcnYuYwpAQCAtNTQyLDYgKzU0Miw4IEBACiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAl1aW50MzJfdCB0dF9wYWdlczsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0OwogCiAJZGV2X3ByaXYgPSBremFsbG9jKHNpemVvZigqZGV2X3ByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2X3ByaXYgPT0gTlVMTCkKQEAgLTY2Myw3ICs2NjUsMTggQEAKIAkJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRldik7CiAJfQogCi0JcmV0ID0gcHNiX2JhY2tsaWdodF9pbml0KGRldik7CisJLyogT25seSBhZGQgYmFja2xpZ2h0IHN1cHBvcnQgaWYgd2UgaGF2ZSBMVkRTIG91dHB1dCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwKKwkJCSAgICBoZWFkKSB7CisJCXBzYl9pbnRlbF9vdXRwdXQgPSB0b19wc2JfaW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisKKwkJc3dpdGNoIChwc2JfaW50ZWxfb3V0cHV0LT50eXBlKSB7CisJCWNhc2UgSU5URUxfT1VUUFVUX0xWRFM6CisJCQlyZXQgPSBwc2JfYmFja2xpZ2h0X2luaXQoZGV2KTsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKICNpZiAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9mYi5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmIuYwppbmRleCA5OWMwM2EyLi4wODRjMzZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9mYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ZiLmMKQEAgLTQ0MSw2ICs0NDEsMTYgQEAKIAlpbmZvLT5zY3JlZW5fc2l6ZSA9IHNpemU7CiAJbWVtc2V0KGluZm8tPnNjcmVlbl9iYXNlLCAwLCBzaXplKTsKIAorCWlmIChkZXZfcHJpdi0+cGctPnN0b2xlbl9zaXplKSB7CisJCWluZm8tPmFwZXJ0dXJlcyA9IGFsbG9jX2FwZXJ0dXJlcygxKTsKKwkJaWYgKCFpbmZvLT5hcGVydHVyZXMpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dF9lcnIwOworCQl9CisJCWluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLmJhc2UgPSBkZXYtPm1vZGVfY29uZmlnLmZiX2Jhc2U7CisJCWluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLnNpemUgPSBkZXZfcHJpdi0+cGctPnN0b2xlbl9zaXplOworCX0KKwogCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoLCBmYi0+ZGVwdGgpOwogCWRybV9mYl9oZWxwZXJfZmlsbF92YXIoaW5mbywgJmZiZGV2LT5wc2JfZmJfaGVscGVyLAogCQkJCXNpemVzLT5mYl93aWR0aCwgc2l6ZXMtPmZiX2hlaWdodCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9iaW9zLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9iaW9zLmMKaW5kZXggNDhhYzhiYS4uNDE3OTY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfYmlvcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2Jpb3MuYwpAQCAtMTU0LDEwICsxNTQsMTUgQEAKIAogCWZpbGxfZGV0YWlsX3RpbWluZ19kYXRhKHBhbmVsX2ZpeGVkX21vZGUsIGR2b190aW1pbmcpOwogCi0JZGV2X3ByaXYtPmxmcF9sdmRzX3ZidF9tb2RlID0gcGFuZWxfZml4ZWRfbW9kZTsKLQotCURSTV9ERUJVRygiRm91bmQgcGFuZWwgbW9kZSBpbiBCSU9TIFZCVCB0YWJsZXM6XG4iKTsKLQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHBhbmVsX2ZpeGVkX21vZGUpOworCWlmIChwYW5lbF9maXhlZF9tb2RlLT5odG90YWwgPiAwICYmIHBhbmVsX2ZpeGVkX21vZGUtPnZ0b3RhbCA+IDApIHsKKwkJZGV2X3ByaXYtPmxmcF9sdmRzX3ZidF9tb2RlID0gcGFuZWxfZml4ZWRfbW9kZTsKKwkJRFJNX0RFQlVHKCJGb3VuZCBwYW5lbCBtb2RlIGluIEJJT1MgVkJUIHRhYmxlczpcbiIpOworCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHBhbmVsX2ZpeGVkX21vZGUpOworCX0gZWxzZSB7CisJCURSTV9ERUJVRygiSWdub3JpbmcgYm9ndXMgTFZEUyBWQlQgbW9kZS5cbiIpOworCQlkZXZfcHJpdi0+bHZkc192YnQgPSAwOworCQlrZnJlZShwYW5lbF9maXhlZF9tb2RlKTsKKwl9CiAKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMS5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDEuaAppbmRleCAwYjliODU0Li40Y2MxYTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAxLmgKQEAgLTgxLDcgKzgxLDYgQEAKIAogaW50IGFkaXMxNjIwMV9zZXRfaXJxKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIGJvb2wgZW5hYmxlKTsKIAotI2lmZGVmIENPTkZJR19JSU9fUklOR19CVUZGRVIKIGVudW0gYWRpczE2MjAxX3NjYW4gewogCUFESVMxNjIwMV9TQ0FOX1NVUFBMWSwKIAlBRElTMTYyMDFfU0NBTl9BQ0NfWCwKQEAgLTkyLDYgKzkxLDcgQEAKIAlBRElTMTYyMDFfU0NBTl9JTkNMSV9ZLAogfTsKIAorI2lmZGVmIENPTkZJR19JSU9fUklOR19CVUZGRVIKIHZvaWQgYWRpczE2MjAxX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogaW50IGFkaXMxNjIwMV9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMy5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDMuaAppbmRleCA4YmI4Y2U1Li4xNzVlMjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwMy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjAzLmgKQEAgLTc2LDcgKzc2LDYgQEAKIAogaW50IGFkaXMxNjIwM19zZXRfaXJxKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIGJvb2wgZW5hYmxlKTsKIAotI2lmZGVmIENPTkZJR19JSU9fUklOR19CVUZGRVIKIGVudW0gYWRpczE2MjAzX3NjYW4gewogCUFESVMxNjIwM19TQ0FOX1NVUFBMWSwKIAlBRElTMTYyMDNfU0NBTl9BVVhfQURDLApAQCAtODUsNiArODQsNyBAQAogCUFESVMxNjIwM19TQ0FOX0lOQ0xJX1ksCiB9OwogCisjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogdm9pZCBhZGlzMTYyMDNfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiBpbnQgYWRpczE2MjAzX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZGFjL21heDUxNy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvbWF4NTE3LmMKaW5kZXggODgxNzY4ZC4uMmZlMzRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvbWF4NTE3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvbWF4NTE3LmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBtYXg1MThfaW5mbyA9IHsKLQkuYXR0cnMgPSAmbWF4NTE3X2F0dHJpYnV0ZV9ncm91cCwKKwkuYXR0cnMgPSAmbWF4NTE4X2F0dHJpYnV0ZV9ncm91cCwKIAkuZHJpdmVyX21vZHVsZSA9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMKaW5kZXggMjU4OWE3ZS4uMzYxMjM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jCkBAIC0xMzcsMTMgKzEzNywxMyBAQAogCQlpZiAoc3QtPnZhcmlhbnQtPmZsYWdzICYgQURJUzE2NDAwX05PX0JVUlNUKSB7CiAJCQlyZXQgPSBhZGlzMTYzNTBfc3BpX3JlYWRfYWxsKCZpbmRpb19kZXYtPmRldiwgc3QtPnJ4KTsKIAkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7CisJCQkJZ290byBlcnI7CiAJCQlmb3IgKDsgaSA8IHJpbmctPnNjYW5fY291bnQ7IGkrKykKIAkJCQlkYXRhW2ldCT0gKihzMTYgKikoc3QtPnJ4ICsgaSoyKTsKIAkJfSBlbHNlIHsKIAkJCXJldCA9IGFkaXMxNjQwMF9zcGlfcmVhZF9idXJzdCgmaW5kaW9fZGV2LT5kZXYsIHN0LT5yeCk7CiAJCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OworCQkJCWdvdG8gZXJyOwogCQkJZm9yICg7IGkgPCBpbmRpb19kZXYtPnJpbmctPnNjYW5fY291bnQ7IGkrKykgewogCQkJCWogPSBfX2ZmcyhtYXNrKTsKIAkJCQltYXNrICY9IH4oMSA8PCBqKTsKQEAgLTE1OCw5ICsxNTgsMTMgQEAKIAlyaW5nLT5hY2Nlc3MtPnN0b3JlX3RvKGluZGlvX2Rldi0+cmluZywgKHU4ICopIGRhdGEsIHBmLT50aW1lc3RhbXApOwogCiAJaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoaW5kaW9fZGV2LT50cmlnKTsKLQlrZnJlZShkYXRhKTsKIAorCWtmcmVlKGRhdGEpOwogCXJldHVybiBJUlFfSEFORExFRDsKKworZXJyOgorCWtmcmVlKGRhdGEpOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgYWRpczE2NDAwX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYwppbmRleCA2MTU5MDIzLi5kNTA0YWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jCkBAIC0yOTQsNiArMjk0LDcgQEAKIAlwZi0+aCA9IGg7CiAJcGYtPnRocmVhZCA9IHRocmVhZDsKIAlwZi0+dHlwZSA9IHR5cGU7CisJcGYtPnByaXZhdGVfZGF0YSA9IHByaXZhdGU7CiAKIAlyZXR1cm4gcGY7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpL2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW5pdC5jCmluZGV4IDI4MTg4NTEuLmQxZmZhMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW5pdC5jCkBAIC0yMDUsMTAgKzIwNSwxMCBAQAogCQkJImhvc3RfaHdfc3RhdGUgPSAweCUwOHgsIG1lX2h3X3N0YXRlID0gMHglMDh4LlxuIiwKIAkJCWRldi0+aG9zdF9od19zdGF0ZSwgZGV2LT5tZV9od19zdGF0ZSk7CiAKLQkJaWYgKCEoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9SRFkpICE9IEhfUkRZKQorCQlpZiAoIShkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX1JEWSkpCiAJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgImhvc3QgdHVybiBvZmYgSF9SRFkuXG4iKTsKIAotCQlpZiAoIShkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkgIT0gTUVfUkRZX0hSQSkKKwkJaWYgKCEoZGV2LT5tZV9od19zdGF0ZSAmIE1FX1JEWV9IUkEpKQogCQkJZGV2X2RiZygmZGV2LT5wZGV2LT5kZXYsICJNRSB0dXJuIG9mZiBNRV9SRFkuXG4iKTsKIAogCQlwcmludGsoS0VSTl9FUlIgIm1laTogbGluayBsYXllciBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vS2NvbmZpZwppbmRleCBiMDUzMDY3Li5mZTQwZTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCXRyaXN0YXRlICJPbmUgTGFwdG9wIFBlciBDaGlsZCBEaXNwbGF5IENPTnRyb2xsZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE9MUEMgJiYgRkIKIAlzZWxlY3QgSTJDCisJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAktLS1oZWxwLS0tCiAJICBBZGQgc3VwcG9ydCBmb3IgdGhlIE9MUEMgWE8gRENPTiBjb250cm9sbGVyLiAgVGhpcyBjb250cm9sbGVyIGlzCiAJICBvbmx5IGF2YWlsYWJsZSBvbiBPTFBDIHBsYXRmb3Jtcy4gICBVbmxlc3MgeW91IGhhdmUgb25lIG9mIHRoZXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMKaW5kZXggYmRkYjAzMS4uY2RhZTQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYwpAQCAtMjMyOCw3ICsyMzI4LDcgQEAKIAogCQkJcmV0dmFsID0gc2Rfc2VuZF9jbWRfZ2V0X3JzcChjaGlwLCBJT19TRU5EX09QX0NPTkQsIDAsIFNEX1JTUF9UWVBFX1I0LCByc3AsIDUpOwogCQkJaWYgKHJldHZhbCA9PSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCWludCBmdW5jX251bSA9IChyc3BbMV0gPj4gNCkgJiYgMHgwNzsKKwkJCQlpbnQgZnVuY19udW0gPSAocnNwWzFdID4+IDQpICYgMHgwNzsKIAkJCQlpZiAoZnVuY19udW0pIHsKIAkJCQkJUlRTWF9ERUJVR1AoIlNEX0lPIGNhcmQgKEZ1bmN0aW9uIG51bWJlcjogJWQpIVxuIiwgZnVuY19udW0pOwogCQkJCQljaGlwLT5zZF9pbyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCmluZGV4IDZlOTllYzguLjhjYmVhNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCkBAIC0yNiw2ICsyNiw4IEBACiBzdGF0aWMgaW50IHN0dWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKIAkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIHN0YXRpYyB2b2lkIHN0dWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK3N0YXRpYyBpbnQgc3R1Yl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitzdGF0aWMgaW50IHN0dWJfcG9zdF9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKIAogLyoKICAqIERlZmluZSBkZXZpY2UgSURzIGhlcmUgaWYgeW91IHdhbnQgdG8gZXhwbGljaXRseSBsaW1pdCBleHBvcnRhYmxlIGRldmljZXMuCkBAIC01OSw2ICs2MSw4IEBACiAJLnByb2JlCQk9IHN0dWJfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSBzdHViX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlCT0gc3R1Yl90YWJsZSwKKwkucHJlX3Jlc2V0CT0gc3R1Yl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQJPSBzdHViX3Bvc3RfcmVzZXQsCiB9OwogCiAvKgpAQCAtNTQxLDMgKzU0NSwyMCBAQAogCQlkZWxfbWF0Y2hfYnVzaWQoKGNoYXIgKil1ZGV2X2J1c2lkKTsKIAl9CiB9CisKKy8qIAorICogUHJlc2VuY2Ugb2YgcHJlX3Jlc2V0IGFuZCBwb3N0X3Jlc2V0IHByZXZlbnRzIHRoZSBkcml2ZXIgZnJvbSBiZWluZyB1bmJvdW5kCisgKiB3aGVuIHRoZSBkZXZpY2UgaXMgYmVpbmcgcmVzZXQKKyAqLworIAoraW50IHN0dWJfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJZGV2X2RiZygmaW50ZXJmYWNlLT5kZXYsICJwcmVfcmVzZXRcbiIpOworCXJldHVybiAwOworfQorCitpbnQgc3R1Yl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJZGV2X2RiZygmaW50ZXJmYWNlLT5kZXYsICJwb3N0X3Jlc2V0XG4iKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCmluZGV4IGE1YzFmYTEuLmJjNTc4NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYwpAQCAtMTc1LDE2ICsxNzUsMTggQEAKIAlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInVzYl9xdWV1ZV9yZXNldF9kZXZpY2VcbiIpOwogCiAJLyoKLQkgKiB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0IGNhdXNlZCBhIGRlYWRsb2NrOiBpdCBjYXVzZXMgdGhlIGRyaXZlcgotCSAqIHRvIHVuYmluZC4gSW4gdGhlIHNodXRkb3duIHRoZSByeCB0aHJlYWQgaXMgc2lnbmFsbGVkIHRvIHNodXQgZG93bgotCSAqIGJ1dCB0aGlzIHRocmVhZCBpcyBwZW5kaW5nIGluIHRoZSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0LgotCSAqCi0JICogSW5zdGVhZCBxdWV1ZSB0aGUgcmVzZXQuCi0JICoKLQkgKiBVbmZvcnR1bmF0bHkgYW4gZXhpc3RpbmcgdXNiaXAgY29ubmVjdGlvbiB3aWxsIGJlIGRyb3BwZWQgZHVlIHRvCi0JICogZHJpdmVyIHVuYmluZGluZy4KKwkgKiBXaXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBwcmVfcmVzZXQgYW5kIHBvc3RfcmVzZXQgdGhlIGRyaXZlciBubyAKKwkgKiBsb25nZXIgdW5iaW5kcy4gVGhpcyBhbGxvd3MgdGhlIHVzZSBvZiBzeW5jaHJvbm91cyByZXNldC4KIAkgKi8KLQl1c2JfcXVldWVfcmVzZXRfZGV2aWNlKHNkZXYtPmludGVyZmFjZSk7CisKKwlpZiAodXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldChzZGV2LT51ZGV2LCBzZGV2LT5pbnRlcmZhY2UpPDApCisJeworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiY291bGQgbm90IG9idGFpbiBsb2NrIHRvIHJlc2V0IGRldmljZVxuIik7CisJCXJldHVybiAwOworCX0KKwl1c2JfcmVzZXRfZGV2aWNlKHNkZXYtPnVkZXYpOworCXVzYl91bmxvY2tfZGV2aWNlKHNkZXYtPnVkZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9wY2hfdWFydC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMKaW5kZXggZjJjYjc1MC4uNDY1MjEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3BjaF91YXJ0LmMKQEAgLTEzOTcsNiArMTM5Nyw3IEBACiAJaW50IGZpZm9zaXplLCBiYXNlX2JhdWQ7CiAJaW50IHBvcnRfdHlwZTsKIAlzdHJ1Y3QgcGNoX3VhcnRfZHJpdmVyX2RhdGEgKmJvYXJkOworCWNvbnN0IGNoYXIgKmJvYXJkX25hbWU7CiAKIAlib2FyZCA9ICZkcnZfZGF0W2lkLT5kcml2ZXJfZGF0YV07CiAJcG9ydF90eXBlID0gYm9hcmQtPnBvcnRfdHlwZTsKQEAgLTE0MTIsNyArMTQxMyw4IEBACiAJYmFzZV9iYXVkID0gMTg0MzIwMDsgLyogMS44NDMyTUh6ICovCiAKIAkvKiBxdWlyayBmb3IgQ00taVRDIGJvYXJkICovCi0JaWYgKHN0cnN0cihkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKSwgIkNNLWlUQyIpKQorCWJvYXJkX25hbWUgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKTsKKwlpZiAoYm9hcmRfbmFtZSAmJiBzdHJzdHIoYm9hcmRfbmFtZSwgIkNNLWlUQyIpKQogCQliYXNlX2JhdWQgPSAxOTIwMDAwMDA7IC8qIDE5Mi4wTUh6ICovCiAKIAlzd2l0Y2ggKHBvcnRfdHlwZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jIGIvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jCmluZGV4IGYxYTc5MTguLjZjOWI3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL3R0eS90dHlfYnVmZmVyLmMKQEAgLTQxMyw4ICs0MTMsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncykpIHsKLQkJc3RydWN0IHR0eV9idWZmZXIgKmhlYWQsICp0YWlsID0gdHR5LT5idWYudGFpbDsKLQkJaW50IHNlZW5fdGFpbCA9IDA7CisJCXN0cnVjdCB0dHlfYnVmZmVyICpoZWFkOwogCQl3aGlsZSAoKGhlYWQgPSB0dHktPmJ1Zi5oZWFkKSAhPSBOVUxMKSB7CiAJCQlpbnQgY291bnQ7CiAJCQljaGFyICpjaGFyX2J1ZjsKQEAgLTQyNCwxNSArNDIzLDYgQEAKIAkJCWlmICghY291bnQpIHsKIAkJCQlpZiAoaGVhZC0+bmV4dCA9PSBOVUxMKQogCQkJCQlicmVhazsKLQkJCQkvKgotCQkJCSAgVGhlcmUncyBhIHBvc3NpYmlsaXR5IHR0eSBtaWdodCBnZXQgbmV3IGJ1ZmZlcgotCQkJCSAgYWRkZWQgZHVyaW5nIHRoZSB1bmxvY2sgd2luZG93IGJlbG93LiBXZSBjb3VsZAotCQkJCSAgZW5kIHVwIHNwaW5uaW5nIGluIGhlcmUgZm9yZXZlciBob2dnaW5nIHRoZSBDUFUKLQkJCQkgIGNvbXBsZXRlbHkuIFRvIGF2b2lkIHRoaXMgbGV0J3MgaGF2ZSBhIHJlc3QgZWFjaAotCQkJCSAgdGltZSB3ZSBwcm9jZXNzZWQgdGhlIHRhaWwgYnVmZmVyLgotCQkJCSovCi0JCQkJaWYgKHRhaWwgPT0gaGVhZCkKLQkJCQkJc2Vlbl90YWlsID0gMTsKIAkJCQl0dHktPmJ1Zi5oZWFkID0gaGVhZC0+bmV4dDsKIAkJCQl0dHlfYnVmZmVyX2ZyZWUodHR5LCBoZWFkKTsKIAkJCQljb250aW51ZTsKQEAgLTQ0Miw3ICs0MzIsNyBAQAogCQkJICAgbGluZSBkaXNjaXBsaW5lIGFzIHdlIHdhbnQgdG8gZW1wdHkgdGhlIHF1ZXVlICovCiAJCQlpZiAodGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpKQogCQkJCWJyZWFrOwotCQkJaWYgKCF0dHktPnJlY2VpdmVfcm9vbSB8fCBzZWVuX3RhaWwpCisJCQlpZiAoIXR0eS0+cmVjZWl2ZV9yb29tKQogCQkJCWJyZWFrOwogCQkJaWYgKGNvdW50ID4gdHR5LT5yZWNlaXZlX3Jvb20pCiAJCQkJY291bnQgPSB0dHktPnJlY2VpdmVfcm9vbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCAzOTVhMzQ3Li5kYWM3Njc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC0xNTMwLDYgKzE1MzAsOCBAQAogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDA0Y2UpLCB9LCAvKiBOb2tpYSBFOTAgKi8KIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMWQ0KSwgfSwgLyogTm9raWEgRTU1ICovCiAJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDMwMiksIH0sIC8qIE5va2lhIE44ICovCisJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDMzNSksIH0sIC8qIE5va2lhIEU3ICovCisJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDNjZCksIH0sIC8qIE5va2lhIEM3ICovCiAJeyBTQU1TVU5HX1BDU1VJVEVfQUNNX0lORk8oMHg2NjUxKSwgfSwgLyogU2Ftc3VuZyBHVGk4NTEwIChJTk5PVjgpICovCiAKIAkvKiBOT1RFOiBub24tTm9raWEgQ09NTS9BQ00vMHhmZiBpcyBsaWtlbHkgTVNGVCBSTkRJUy4uLiBOT1QgYSBtb2RlbSEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDc5YTU4YzMuLjkwYWUxNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMzM5LDcgKzMzOSw4IEBACiB7CiAJaW50IGksIHN0YXR1cyA9IC1FVElNRURPVVQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmIHN0YXR1cyA9PSAtRVRJTUVET1VUOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmCisJCQkoc3RhdHVzID09IC1FVElNRURPVVQgfHwgc3RhdHVzID09IC1FUElQRSk7IGkrKykgewogCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAogCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCBVU0JfRElSX0lOIHwgVVNCX1JUX0hVQiwgMCwgMCwKIAkJCWRhdGEsIHNpemVvZigqZGF0YSksIFVTQl9TVFNfVElNRU9VVCk7CkBAIC0zNTUsNyArMzU2LDggQEAKIHsKIAlpbnQgaSwgc3RhdHVzID0gLUVUSU1FRE9VVDsKIAotCWZvciAoaSA9IDA7IGkgPCBVU0JfU1RTX1JFVFJJRVMgJiYgc3RhdHVzID09IC1FVElNRURPVVQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBVU0JfU1RTX1JFVFJJRVMgJiYKKwkJCShzdGF0dXMgPT0gLUVUSU1FRE9VVCB8fCBzdGF0dXMgPT0gLUVQSVBFKTsgaSsrKSB7CiAJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhoZGV2LCB1c2JfcmN2Y3RybHBpcGUoaGRldiwgMCksCiAJCQlVU0JfUkVRX0dFVF9TVEFUVVMsIFVTQl9ESVJfSU4gfCBVU0JfUlRfUE9SVCwgMCwgcG9ydDEsCiAJCQlkYXRhLCBzaXplb2YoKmRhdGEpLCBVU0JfU1RTX1RJTUVPVVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IDFiMTI1YzIuLjIyNzhkYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTM4OSw3ICszODksNiBAQAogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyb3IpCiAJCWRfZGVsZXRlKGRlbnRyeSk7Ci0JZHB1dChkZW50cnkpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCA1ODQ1NmQxLi4wMjllMjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNjMyLDEzICs2MzIsMTAgQEAKIAogZW5kY2hvaWNlCiAKKyMgU2VsZWN0ZWQgYnkgVURDIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGhpZ2gtc3BlZWQgb3BlcmF0aW9uLgogY29uZmlnIFVTQl9HQURHRVRfRFVBTFNQRUVECiAJYm9vbAogCWRlcGVuZHMgb24gVVNCX0dBREdFVAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIE1lYW5zIHRoYXQgZ2FkZ2V0IGRyaXZlcnMgc2hvdWxkIGluY2x1ZGUgZXh0cmEgZGVzY3JpcHRvcnMKLQkgIGFuZCBjb2RlIHRvIGhhbmRsZSBkdWFsLXNwZWVkIGNvbnRyb2xsZXJzLgogCiAjCiAjIFVTQiBHYWRnZXQgRHJpdmVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKaW5kZXggNmU0MmFhYi4uOTVlODEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKaW5kZXggNDFkYzA5My4uZjQ2OTBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDYxZmY5MjcuLmQzZGNhYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTE5MDYsNiArMTkwNiw3IEBACiAJaWYgKCFoY2QpCiAJCXJldHVybiAtRU5PTUVNOwogCXRoZV9jb250cm9sbGVyID0gaGNkX3RvX2R1bW15IChoY2QpOworCWhjZC0+aGFzX3R0ID0gMTsKIAogCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgMCwgMCk7CiAJaWYgKHJldHZhbCAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IGEwMTM4M2YuLmE1Njg3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC00MzEsOCArNDMxLDEwIEBACiAKIAkvKiBoYWx0IGFueSBlbmRwb2ludCBieSBkb2luZyBhICJ3cm9uZyBkaXJlY3Rpb24iIGkvbyBjYWxsICovCiAJaWYgKCF1c2JfZW5kcG9pbnRfZGlyX2luKCZkYXRhLT5kZXNjKSkgewotCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYygmZGF0YS0+ZGVzYykpCisJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZkYXRhLT5kZXNjKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCURCRyAoZGF0YS0+ZGV2LCAiJXMgaGFsdFxuIiwgZGF0YS0+bmFtZSk7CiAJCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOwogCQlpZiAobGlrZWx5IChkYXRhLT5lcCAhPSBOVUxMKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKaW5kZXggYjYyYjI2NC4uYjFhODE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKQEAgLTIwODMsNyArMjA4Myw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgbXZfdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBtdl91ZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBtdl91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOwogCkBAIC0yMDkyLDcgKzIwOTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG12X3VkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldikKK3N0YXRpYyBpbnQgbXZfdWRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBtdl91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOwogCWludCByZXR2YWw7CkBAIC0yMTAwLDcgKzIxMDAsNyBAQAogCXJldHZhbCA9IG12X3VkY19waHlfaW5pdCh1ZGMtPnBoeV9yZWdzKTsKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIoX2RldiwgInBoeSBpbml0aWFsaXphdGlvbiBlcnJvciAlZFxuIiwgcmV0dmFsKTsKLQkJZ290byBlcnJvcjsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAJdWRjX3Jlc2V0KHVkYyk7CiAJZXAwX3Jlc2V0KHVkYyk7CkBAIC0yMTIyLDcgKzIxMjIsNyBAQAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAicHhhLXUybyIsCiAjaWZkZWYgQ09ORklHX1BNCi0JCS5wbQk9IG12X3VkY19wbV9vcHMsCisJCS5wbQk9ICZtdl91ZGNfcG1fb3BzLAogI2VuZGlmCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCAyNDY5NmY3Li40NzZkODhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYwppbmRleCAzNjVjMDJmLi43NzQ1NDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKQEAgLTIyMTYsNyArMjIxNiw2IEBACiAJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJcHJfZXJyKCIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAogCQkJCWRyaXZlcl9uYW1lLCBMVUJCT0NLX1VTQl9ESVNDX0lSUSwgcmV0dmFsKTsKLWx1YmJvY2tfZmFpbDA6CiAJCQlnb3RvIGVycl9pcnFfbHViOwogCQl9CiAJCXJldHZhbCA9IHJlcXVlc3RfaXJxKExVQkJPQ0tfVVNCX0lSUSwKQEAgLTIyMjYsNyArMjIyNSw2IEBACiAJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJcHJfZXJyKCIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAogCQkJCWRyaXZlcl9uYW1lLCBMVUJCT0NLX1VTQl9JUlEsIHJldHZhbCk7Ci0JCQlmcmVlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSwgZGV2KTsKIAkJCWdvdG8gbHViYm9ja19mYWlsMDsKIAkJfQogCX0gZWxzZQpAQCAtMjIzNiwxMCArMjIzNCwxMSBAQAogCXJldHVybiAwOwogCiAjaWZkZWYJQ09ORklHX0FSQ0hfTFVCQk9DSworbHViYm9ja19mYWlsMDoKIAlmcmVlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSwgZGV2KTsKICBlcnJfaXJxX2x1YjoKLSNlbmRpZgogCWZyZWVfaXJxKGlycSwgZGV2KTsKKyNlbmRpZgogIGVycl9pcnExOgogCWlmIChncGlvX2lzX3ZhbGlkKGRldi0+bWFjaC0+Z3Bpb19wdWxsdXApKQogCQlncGlvX2ZyZWUoZGV2LT5tYWNoLT5ncGlvX3B1bGx1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKaW5kZXggYWNiOWNjNC4uMGRmZWUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYwpAQCAtMjY4MCw5ICsyNjgwLDkgQEAKIAogCXdyaXRlbCgwLCBoc290Zy0+cmVncyArIFMzQ19EQUlOVE1TSyk7CiAKLQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiRVAwOiBESUVQQ1RMMD0weCUwOHgsIERPRVBDVEwwPTB4JTA4eFxuIiwKLQkJIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RJRVBDVEwwKSwKLQkJIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RPRVBDVEwwKSk7CisJZGV2X2RiZyhoc290Zy0+ZGV2LCAiRVAwOiBESUVQQ1RMMD0weCUwOHgsIERPRVBDVEwwPTB4JTA4eFxuIiwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRElFUENUTDApLAorCQlyZWFkbChoc290Zy0+cmVncyArIFMzQ19ET0VQQ1RMMCkpOwogCiAJLyogZW5hYmxlIGluIGFuZCBvdXQgZW5kcG9pbnQgaW50ZXJydXB0cyAqLwogCXMzY19oc290Z19lbl9nc2ludChoc290ZywgUzNDX0dJTlRTVFNfT0VQSW50IHwgUzNDX0dJTlRTVFNfSUVQSW50KTsKQEAgLTI3MDEsNyArMjcwMSw3IEBACiAJdWRlbGF5KDEwKTsgIC8qIHNlZSBvcGVuaWJvb3QgKi8KIAlfX2JpYzMyKGhzb3RnLT5yZWdzICsgUzNDX0RDVEwsIFMzQ19EQ1RMX1BXUk9uUHJnRG9uZSk7CiAKLQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiRENUTD0weCUwOHhcbiIsIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RDVEwpKTsKKwlkZXZfZGJnKGhzb3RnLT5kZXYsICJEQ1RMPTB4JTA4eFxuIiwgcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRENUTCkpOwogCiAJLyogUzNDX0R4RVBDVExfVVNCQWN0RXAgc2F5cyBSTyBpbiBtYW51YWwsIGJ1dCBzZWVtcyB0byBiZSBzZXQgYnkKIAkgICB3cml0aW5nIHRvIHRoZSBFUENUTCByZWdpc3Rlci4uICovCkBAIC0yNzIxLDkgKzI3MjEsOSBAQAogCiAJczNjX2hzb3RnX2VucXVldWVfc2V0dXAoaHNvdGcpOwogCi0JZGV2X2luZm8oaHNvdGctPmRldiwgIkVQMDogRElFUENUTDA9MHglMDh4LCBET0VQQ1RMMD0weCUwOHhcbiIsCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ESUVQQ1RMMCksCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ET0VQQ1RMMCkpOworCWRldl9kYmcoaHNvdGctPmRldiwgIkVQMDogRElFUENUTDA9MHglMDh4LCBET0VQQ1RMMD0weCUwOHhcbiIsCisJCXJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RJRVBDVEwwKSwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRE9FUENUTDApKTsKIAogCS8qIGNsZWFyIGdsb2JhbCBOQUtzICovCiAJd3JpdGVsKFMzQ19EQ1RMX0NHT1VUTmFrIHwgUzNDX0RDVExfQ0dOUEluTkFLLApAQCAtMjkyMSw5ICsyOTIxLDkgQEAKIAogCS8qIHNldHVwIGZpZm9zICovCiAKLQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiR1JYRlNJWj0weCUwOHgsIEdOUFRYRlNJWj0weCUwOHhcbiIsCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19HUlhGU0laKSwKLQkJIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0dOUFRYRlNJWikpOworCWRldl9kYmcoaHNvdGctPmRldiwgIkdSWEZTSVo9MHglMDh4LCBHTlBUWEZTSVo9MHglMDh4XG4iLAorCQlyZWFkbChoc290Zy0+cmVncyArIFMzQ19HUlhGU0laKSwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfR05QVFhGU0laKSk7CiAKIAlzM2NfaHNvdGdfaW5pdF9maWZvKGhzb3RnKTsKIApAQCAtMjk0NSw2ICsyOTQ1LDcgQEAKIAogc3RhdGljIHZvaWQgczNjX2hzb3RnX2R1bXAoc3RydWN0IHMzY19oc290ZyAqaHNvdGcpCiB7CisjaWZkZWYgREVCVUcKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoc290Zy0+ZGV2OwogCXZvaWQgX19pb21lbSAqcmVncyA9IGhzb3RnLT5yZWdzOwogCXUzMiB2YWw7CkBAIC0yOTg3LDYgKzI5ODgsNyBAQAogCiAJZGV2X2luZm8oZGV2LCAiRFZCVVNESVM9MHglMDh4LCBEVkJVU1BVTFNFPSUwOHhcbiIsCiAJCSByZWFkbChyZWdzICsgUzNDX0RWQlVTRElTKSwgcmVhZGwocmVncyArIFMzQ19EVkJVU1BVTFNFKSk7CisjZW5kaWYKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMKaW5kZXggY2ZlM2NmNS4uZDVlM2UxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHN1ZGMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC91ZGMuaD4KQEAgLTEzMDEsNyArMTMwMiw4IEBACiAJaHN1ZGMtPnVjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2ItZGV2aWNlIik7CiAJaWYgKElTX0VSUihoc3VkYy0+dWNsaykpIHsKIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCB1c2ItZGV2aWNlIGNsb2NrIHNvdXJjZVxuIik7Ci0JCXJldHVybiBQVFJfRVJSKGhzdWRjLT51Y2xrKTsKKwkJcmV0ID0gUFRSX0VSUihoc3VkYy0+dWNsayk7CisJCWdvdG8gZXJyX2NsazsKIAl9CiAJY2xrX2VuYWJsZShoc3VkYy0+dWNsayk7CiAKQEAgLTEzMTAsNyArMTMxMiw4IEBACiAJZGlzYWJsZV9pcnEoaHN1ZGMtPmlycSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXJldHVybiAwOwotCitlcnJfY2xrOgorCWZyZWVfaXJxKGhzdWRjLT5pcnEsIGhzdWRjKTsKIGVycl9pcnE6CiAJaW91bm1hcChoc3VkYy0+cmVncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKaW5kZXggNmQ4YjA0MC4uMTAwZjI2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCmluZGV4IGFmZWY3YjAuLjgwYmU1NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKQEAgLTMxMiw4ICszMTIsMTAgQEAKIAkJcmV0dXJuIFBUUl9FUlIodXNiX2Nsayk7CiAKIAloY2QgPSB1c2JfY3JlYXRlX2hjZCAoZHJpdmVyLCAmcGRldi0+ZGV2LCAicHhhMjd4Iik7Ci0JaWYgKCFoY2QpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghaGNkKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyMDsKKwl9CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXIpIHsKQEAgLTM2OCw2ICszNzAsNyBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogIGVycjE6CiAJdXNiX3B1dF9oY2QoaGNkKTsKKyBlcnIwOgogCWNsa19wdXQodXNiX2Nsayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYwppbmRleCAyZTA0ODYxLi4xZjUwYjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCkBAIC00MzgsMTMgKzQzOCwxMyBAQAogCXN0cnVjdCB4aGNpX3Nsb3RfY3R4ICpzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIGN0eCk7CiAKIAlzd2l0Y2ggKEdFVF9TTE9UX1NUQVRFKGxlMzJfdG9fY3B1KHNsb3RfY3R4LT5kZXZfc3RhdGUpKSkgewotCWNhc2UgMDoKKwljYXNlIFNMT1RfU1RBVEVfRU5BQkxFRDoKIAkJcmV0dXJuICJlbmFibGVkL2Rpc2FibGVkIjsKLQljYXNlIDE6CisJY2FzZSBTTE9UX1NUQVRFX0RFRkFVTFQ6CiAJCXJldHVybiAiZGVmYXVsdCI7Ci0JY2FzZSAyOgorCWNhc2UgU0xPVF9TVEFURV9BRERSRVNTRUQ6CiAJCXJldHVybiAiYWRkcmVzc2VkIjsKLQljYXNlIDM6CisJY2FzZSBTTE9UX1NUQVRFX0NPTkZJR1VSRUQ6CiAJCXJldHVybiAiY29uZmlndXJlZCI7CiAJZGVmYXVsdDoKIAkJcmV0dXJuICJyZXNlcnZlZCI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKaW5kZXggMjZjYWJhNC4uMGY4ZTFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwpAQCAtOTg1LDkgKzk4NSwxOSBAQAogCWludGVydmFsID0gY2xhbXBfdmFsKGVwLT5kZXNjLmJJbnRlcnZhbCwgMSwgMTYpIC0gMTsKIAlpZiAoaW50ZXJ2YWwgIT0gZXAtPmRlc2MuYkludGVydmFsIC0gMSkKIAkJZGV2X3dhcm4oJnVkZXYtPmRldiwKLQkJCSAiZXAgJSN4IC0gcm91bmRpbmcgaW50ZXJ2YWwgdG8gJWQgbWljcm9mcmFtZXNcbiIsCisJCQkgImVwICUjeCAtIHJvdW5kaW5nIGludGVydmFsIHRvICVkICVzZnJhbWVzXG4iLAogCQkJIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCi0JCQkgMSA8PCBpbnRlcnZhbCk7CisJCQkgMSA8PCBpbnRlcnZhbCwKKwkJCSB1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfRlVMTCA/ICIiIDogIm1pY3JvIik7CisKKwlpZiAodWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpIHsKKwkJLyoKKwkJICogRnVsbCBzcGVlZCBpc29jIGVuZHBvaW50cyBzcGVjaWZ5IGludGVydmFsIGluIGZyYW1lcywKKwkJICogbm90IG1pY3JvZnJhbWVzLiBXZSBhcmUgdXNpbmcgbWljcm9mcmFtZXMgZXZlcnl3aGVyZSwKKwkJICogc28gYWRqdXN0IGFjY29yZGluZ2x5LgorCQkgKi8KKwkJaW50ZXJ2YWwgKz0gMzsJLyogMSBmcmFtZSA9IDJeMyB1ZnJhbWVzICovCisJfQogCiAJcmV0dXJuIGludGVydmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCmluZGV4IGM0MDhlOWYuLjE3NTQxZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKQEAgLTEwNiwxMiArMTA2LDIyIEBACiAKIAkvKiBMb29rIGZvciB2ZW5kb3Itc3BlY2lmaWMgcXVpcmtzICovCiAJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0ZSRVNDT19MT0dJQyAmJgotCQkJcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRlJFU0NPX0xPR0lDX1BESyAmJgotCQkJcGRldi0+cmV2aXNpb24gPT0gMHgwKSB7CisJCQlwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9GUkVTQ09fTE9HSUNfUERLKSB7CisJCWlmIChwZGV2LT5yZXZpc2lvbiA9PSAweDApIHsKIAkJCXhoY2ktPnF1aXJrcyB8PSBYSENJX1JFU0VUX0VQX1FVSVJLOwogCQkJeGhjaV9kYmcoeGhjaSwgIlFVSVJLOiBGcmVzY28gTG9naWMgeEhDIG5lZWRzIGNvbmZpZ3VyZSIKIAkJCQkJIiBlbmRwb2ludCBjbWQgYWZ0ZXIgcmVzZXQgZW5kcG9pbnRcbiIpOworCQl9CisJCS8qIEZyZXNjbyBMb2dpYyBjb25maXJtczogYWxsIHJldmlzaW9ucyBvZiB0aGlzIGNoaXAgZG8gbm90CisJCSAqIHN1cHBvcnQgTVNJLCBldmVuIHRob3VnaCBzb21lIG9mIHRoZW0gY2xhaW0gdG8gaW4gdGhlaXIgUENJCisJCSAqIGNhcGFiaWxpdGllcy4KKwkJICovCisJCXhoY2ktPnF1aXJrcyB8PSBYSENJX0JST0tFTl9NU0k7CisJCXhoY2lfZGJnKHhoY2ksICJRVUlSSzogRnJlc2NvIExvZ2ljIHJldmlzaW9uICV1ICIKKwkJCQkiaGFzIGJyb2tlbiBNU0kgaW1wbGVtZW50YXRpb25cbiIsCisJCQkJcGRldi0+cmV2aXNpb24pOwogCX0KKwogCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9ORUMpCiAJCXhoY2ktPnF1aXJrcyB8PSBYSENJX05FQ19IT1NUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwppbmRleCBjYzE0ODViLi44MDBmNDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKQEAgLTE3ODIsNyArMTc4Miw3IEBACiAJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmZyYW1lOwogCWludCBpZHg7CiAKLQllcF9yaW5nID0geGhjaV9kbWFfdG9fdHJhbnNmZXJfcmluZyhlcCwgZXZlbnQtPmJ1ZmZlcik7CisJZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGxlNjRfdG9fY3B1KGV2ZW50LT5idWZmZXIpKTsKIAl1cmJfcHJpdiA9IHRkLT51cmItPmhjcHJpdjsKIAlpZHggPSB1cmJfcHJpdi0+dGRfY250OwogCWZyYW1lID0gJnRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCmluZGV4IGQ5NjYwZWIuLjA2ZTcwMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCkBAIC00MzAsMTIgKzQzMCwxOSBAQAogCQlmcmVlX2lycShoY2QtPmlycSwgaGNkKTsKIAloY2QtPmlycSA9IC0xOwogCisJLyogU29tZSBGcmVzY28gTG9naWMgaG9zdCBjb250cm9sbGVycyBhZHZlcnRpc2UgTVNJLCBidXQgZmFpbCB0bworCSAqIGdlbmVyYXRlIGludGVycnVwdHMuICBEb24ndCBldmVuIHRyeSB0byBlbmFibGUgTVNJLgorCSAqLworCWlmICh4aGNpLT5xdWlya3MgJiBYSENJX0JST0tFTl9NU0kpCisJCWdvdG8gbGVnYWN5X2lycTsKKwogCXJldCA9IHhoY2lfc2V0dXBfbXNpeCh4aGNpKTsKIAlpZiAocmV0KQogCQkvKiBmYWxsIGJhY2sgdG8gbXNpKi8KIAkJcmV0ID0geGhjaV9zZXR1cF9tc2koeGhjaSk7CiAKIAlpZiAocmV0KSB7CitsZWdhY3lfaXJxOgogCQkvKiBmYWxsIGJhY2sgdG8gbGVnYWN5IGludGVycnVwdCovCiAJCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgJnVzYl9oY2RfaXJxLCBJUlFGX1NIQVJFRCwKIAkJCQkJaGNkLT5pcnFfZGVzY3IsIGhjZCk7CkBAIC0xODQ5LDggKzE4NTYsOCBAQAogCiAJLyogRnJlZSBhbnkgcmluZ3MgdGhhdCB3ZXJlIGRyb3BwZWQsIGJ1dCBub3QgY2hhbmdlZC4gKi8KIAlmb3IgKGkgPSAxOyBpIDwgMzE7ICsraSkgewotCQlpZiAoKGN0cmxfY3R4LT5kcm9wX2ZsYWdzICYgKDEgPDwgKGkgKyAxKSkpICYmCi0JCQkJIShjdHJsX2N0eC0+YWRkX2ZsYWdzICYgKDEgPDwgKGkgKyAxKSkpKQorCQlpZiAoKGxlMzJfdG9fY3B1KGN0cmxfY3R4LT5kcm9wX2ZsYWdzKSAmICgxIDw8IChpICsgMSkpKSAmJgorCQkgICAgIShsZTMyX3RvX2NwdShjdHJsX2N0eC0+YWRkX2ZsYWdzKSAmICgxIDw8IChpICsgMSkpKSkKIAkJCXhoY2lfZnJlZV9vcl9jYWNoZV9lbmRwb2ludF9yaW5nKHhoY2ksIHZpcnRfZGV2LCBpKTsKIAl9CiAJeGhjaV96ZXJvX2luX2N0eCh4aGNpLCB2aXJ0X2Rldik7CkBAIC0yNDY3LDYgKzI0NzQsNyBAQAogCXN0cnVjdCB4aGNpX2NvbW1hbmQgKnJlc2V0X2RldmljZV9jbWQ7CiAJaW50IHRpbWVsZWZ0OwogCWludCBsYXN0X2ZyZWVkX2VuZHBvaW50OworCXN0cnVjdCB4aGNpX3Nsb3RfY3R4ICpzbG90X2N0eDsKIAogCXJldCA9IHhoY2lfY2hlY2tfYXJncyhoY2QsIHVkZXYsIE5VTEwsIDAsIGZhbHNlLCBfX2Z1bmNfXyk7CiAJaWYgKHJldCA8PSAwKQpAQCAtMjQ5OSw2ICsyNTA3LDEyIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBJZiBkZXZpY2UgaXMgbm90IHNldHVwLCB0aGVyZSBpcyBubyBwb2ludCBpbiByZXNldHRpbmcgaXQgKi8KKwlzbG90X2N0eCA9IHhoY2lfZ2V0X3Nsb3RfY3R4KHhoY2ksIHZpcnRfZGV2LT5vdXRfY3R4KTsKKwlpZiAoR0VUX1NMT1RfU1RBVEUobGUzMl90b19jcHUoc2xvdF9jdHgtPmRldl9zdGF0ZSkpID09CisJCQkJCQlTTE9UX1NUQVRFX0RJU0FCTEVEKQorCQlyZXR1cm4gMDsKKwogCXhoY2lfZGJnKHhoY2ksICJSZXNldHRpbmcgZGV2aWNlIHdpdGggc2xvdCBJRCAldVxuIiwgc2xvdF9pZCk7CiAJLyogQWxsb2NhdGUgdGhlIGNvbW1hbmQgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIHN0cnVjdCBjb21wbGV0aW9uLgogCSAqIEFzc3VtZSB3ZSdyZSBpbiBwcm9jZXNzIGNvbnRleHQsIHNpbmNlIHRoZSBub3JtYWwgZGV2aWNlIHJlc2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCmluZGV4IGFjMDE5NmUuLjdkMWVhM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCkBAIC01NjAsNiArNTYwLDExIEBACiAjZGVmaW5lIFNMT1RfU1RBVEUJKDB4MWYgPDwgMjcpCiAjZGVmaW5lIEdFVF9TTE9UX1NUQVRFKHApCSgoKHApICYgKDB4MWYgPDwgMjcpKSA+PiAyNykKIAorI2RlZmluZSBTTE9UX1NUQVRFX0RJU0FCTEVECTAKKyNkZWZpbmUgU0xPVF9TVEFURV9FTkFCTEVECVNMT1RfU1RBVEVfRElTQUJMRUQKKyNkZWZpbmUgU0xPVF9TVEFURV9ERUZBVUxUCTEKKyNkZWZpbmUgU0xPVF9TVEFURV9BRERSRVNTRUQJMgorI2RlZmluZSBTTE9UX1NUQVRFX0NPTkZJR1VSRUQJMwogCiAvKioKICAqIHN0cnVjdCB4aGNpX2VwX2N0eApAQCAtMTMwMiw2ICsxMzA3LDcgQEAKICAqIGNvbW1hbmRzLgogICovCiAjZGVmaW5lIFhIQ0lfRVBfTElNSVRfUVVJUksJKDEgPDwgNSkKKyNkZWZpbmUgWEhDSV9CUk9LRU5fTVNJCQkoMSA8PCA2KQogCXVuc2lnbmVkIGludAkJbnVtX2FjdGl2ZV9lcHM7CiAJdW5zaWduZWQgaW50CQlsaW1pdF9hY3RpdmVfZXBzOwogCS8qIFRoZXJlIGFyZSB0d28gcm9vdGh1YnMgdG8ga2VlcCB0cmFjayBvZiBidXMgc3VzcGVuZCBpbmZvIGZvciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggYWI4ZTEwMC4uYzcxYjAzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC05Niw2ICs5Niw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvbW9kX2dhZGdldC5jCmluZGV4IDIwNmNmYWIuLjU0NzQ4NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvbW9kX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL3JlbmVzYXNfdXNiaHMvbW9kX2dhZGdldC5jCkBAIC0xMzgwLDUgKzEzODAsNiBAQAogewogCXN0cnVjdCB1c2Joc2dfZ3ByaXYgKmdwcml2ID0gdXNiaHNnX3ByaXZfdG9fZ3ByaXYocHJpdik7CiAKKwlrZnJlZShncHJpdi0+dWVwKTsKIAlrZnJlZShncHJpdik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IGU4ZGJkZTUuLjE2MjcyODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC02NDcsNiArNjQ3LDcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEVWRVJfRUNPX1BST19DRFMpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzROX0dBTEFYWV9ERV8xX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfNE5fR0FMQVhZX0RFXzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV80Tl9HQUxBWFlfREVfM19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBYU0VOU19DT05WRVJURVJfMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBYU0VOU19DT05WRVJURVJfMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBYU0VOU19DT05WRVJURVJfMl9QSUQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKaW5kZXggMWQ5NDZjZC4uYWIxZmNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaApAQCAtMzUxLDYgKzM1MSw3IEBACiAgKi8KICNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMV9QSUQJMHhGM0MwCiAjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzJfUElECTB4RjNDMQorI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8zX1BJRAkweEYzQzIKIAogLyoKICAqIExpbnggVGVjaG5vbG9naWVzIHByb2R1Y3QgaWRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggMzE4ZGQwMC4uNjBiMjVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMzExLDEwICszMTEsNiBAQAogI2RlZmluZSBaVEVfUFJPRFVDVF9BQzI3MjYJCQkweGZmZjUKICNkZWZpbmUgWlRFX1BST0RVQ1RfQUM4NzEwVAkJCTB4ZmZmZgogCi0vKiBaVEUgUFJPRFVDVFMgLS0gYWx0ZXJuYXRlIHZlbmRvciBJRCAqLwotI2RlZmluZSBaVEVfVkVORE9SX0lEMgkJCQkweDFkNmIKLSNkZWZpbmUgWlRFX1BST0RVQ1RfTUZfMzMwCQkJMHgwMDAyCi0KICNkZWZpbmUgQkVOUV9WRU5ET1JfSUQJCQkJMHgwNGE1CiAjZGVmaW5lIEJFTlFfUFJPRFVDVF9IMTAJCQkweDQwNjgKIApAQCAtMzQwLDExICszMzYsMTIgQEAKICNkZWZpbmUgVE9TSElCQV9QUk9EVUNUX0c0NTAJCQkweDBkNDUKIAogI2RlZmluZSBBTElOS19WRU5ET1JfSUQJCQkJMHgxZTBlCisjZGVmaW5lIEFMSU5LX1BST0RVQ1RfUEgzMDAJCQkweDkxMDAKICNkZWZpbmUgQUxJTktfUFJPRFVDVF8zR1UJCQkweDkyMDAKIAogLyogQUxDQVRFTCBQUk9EVUNUUyAqLwogI2RlZmluZSBBTENBVEVMX1ZFTkRPUl9JRAkJCTB4MWJiYgotI2RlZmluZSBBTENBVEVMX1BST0RVQ1RfWDA2MFMJCQkweDAwMDAKKyNkZWZpbmUgQUxDQVRFTF9QUk9EVUNUX1gwNjBTX1gyMDAJCTB4MDAwMAogCiAjZGVmaW5lIFBJUkVMTElfVkVORE9SX0lECQkJMHgxMjY2CiAjZGVmaW5lIFBJUkVMTElfUFJPRFVDVF9DMTAwXzEJCQkweDEwMDIKQEAgLTM3OSw2ICszNzYsOSBAQAogICogSXQgc2VlbXMgdG8gY29udGFpbiBhIFF1YWxjb21tIFFTQzYyNDAvNjI5MCBjaGlwc2V0ICAgICAgICAgICAgKi8KICNkZWZpbmUgRk9VUl9HX1NZU1RFTVNfUFJPRFVDVF9XMTQJCTB4OTYwMwogCisvKiBab29tICovCisjZGVmaW5lIFpPT01fUFJPRFVDVF80NTk3CQkJMHg5NjA3CisKIC8qIEhhaWVyIHByb2R1Y3RzICovCiAjZGVmaW5lIEhBSUVSX1ZFTkRPUl9JRAkJCQkweDIwMWUKICNkZWZpbmUgSEFJRVJfUFJPRFVDVF9DRTEwMAkJCTB4MjAwOQpAQCAtNDMyLDYgKzQzMiwyMCBAQAogCS5yZWFzb24gPSBPUFRJT05fQkxBQ0tMSVNUX1NFTkRTRVRVUAogfTsKIAorc3RhdGljIGNvbnN0IHU4IGFsY2F0ZWxfeDIwMF9ub19zZW5kc2V0dXBbXSA9IHsgMCwgMSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb25fYmxhY2tsaXN0X2luZm8gYWxjYXRlbF94MjAwX2JsYWNrbGlzdCA9IHsKKwkuaW5mb2xlbiA9IEFSUkFZX1NJWkUoYWxjYXRlbF94MjAwX25vX3NlbmRzZXR1cCksCisJLmlmYWNlaW5mbyA9IGFsY2F0ZWxfeDIwMF9ub19zZW5kc2V0dXAsCisJLnJlYXNvbiA9IE9QVElPTl9CTEFDS0xJU1RfU0VORFNFVFVQCit9OworCitzdGF0aWMgY29uc3QgdTggenRlX2szNzY1X3pfbm9fc2VuZHNldHVwW10gPSB7IDAsIDEsIDIgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvIHp0ZV9rMzc2NV96X2JsYWNrbGlzdCA9IHsKKwkuaW5mb2xlbiA9IEFSUkFZX1NJWkUoenRlX2szNzY1X3pfbm9fc2VuZHNldHVwKSwKKwkuaWZhY2VpbmZvID0genRlX2szNzY1X3pfbm9fc2VuZHNldHVwLAorCS5yZWFzb24gPSBPUFRJT05fQkxBQ0tMSVNUX1NFTkRTRVRVUAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09MVCkgfSwKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfUklDT0xBKSB9LApAQCAtOTE2LDEzICs5MzAsMTMgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MDA3MywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MDEzMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MDE0MSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKLQl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MjAwMiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MjAwMiwgMHhmZiwKKwkgIDB4ZmYsIDB4ZmYpLCAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnp0ZV9rMzc2NV96X2JsYWNrbGlzdCB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgMHgyMDAzLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQ0RNQV9URUNILCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQUM4NzEwLCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQUMyNzI2LCAweGZmLCAweGZmLCAweGZmKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oWlRFX1ZFTkRPUl9JRCwgWlRFX1BST0RVQ1RfQUM4NzEwVCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKLQl7IFVTQl9ERVZJQ0UoWlRFX1ZFTkRPUl9JRDIsIFpURV9QUk9EVUNUX01GXzMzMCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkVOUV9WRU5ET1JfSUQsIEJFTlFfUFJPRFVDVF9IMTApIH0sCiAJeyBVU0JfREVWSUNFKERMSU5LX1ZFTkRPUl9JRCwgRExJTktfUFJPRFVDVF9EV01fNjUyKSB9LAogCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIERMSU5LX1BST0RVQ1RfRFdNXzY1Ml9VNSkgfSwgLyogWWVzLCBBTElOS19WRU5ET1JfSUQgKi8KQEAgLTkzNSwxMyArOTQ5LDE3IEBACiAJeyBVU0JfREVWSUNFKFRPU0hJQkFfVkVORE9SX0lELCBUT1NISUJBX1BST0RVQ1RfRzQ1MCkgfSwKIAl7IFVTQl9ERVZJQ0UoVE9TSElCQV9WRU5ET1JfSUQsIFRPU0hJQkFfUFJPRFVDVF9IU0RQQV9NSU5JQ0FSRCApIH0sIC8qIFRvc2hpYmEgM0cgSFNEUEEgPT0gTm92YXRlbCBFeHBlZGl0ZSBFVTg3MEQgTWluaUNhcmQgKi8KIAl7IFVTQl9ERVZJQ0UoQUxJTktfVkVORE9SX0lELCAweDkwMDApIH0sCisJeyBVU0JfREVWSUNFKEFMSU5LX1ZFTkRPUl9JRCwgQUxJTktfUFJPRFVDVF9QSDMwMCkgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEFMSU5LX1ZFTkRPUl9JRCwgQUxJTktfUFJPRFVDVF8zR1UsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCi0JeyBVU0JfREVWSUNFKEFMQ0FURUxfVkVORE9SX0lELCBBTENBVEVMX1BST0RVQ1RfWDA2MFMpIH0sCisJeyBVU0JfREVWSUNFKEFMQ0FURUxfVkVORE9SX0lELCBBTENBVEVMX1BST0RVQ1RfWDA2MFNfWDIwMCksCisJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmFsY2F0ZWxfeDIwMF9ibGFja2xpc3QKKwl9LAogCXsgVVNCX0RFVklDRShBSVJQTFVTX1ZFTkRPUl9JRCwgQUlSUExVU19QUk9EVUNUX01DRDY1MCkgfSwKIAl7IFVTQl9ERVZJQ0UoVExBWVRFQ0hfVkVORE9SX0lELCBUTEFZVEVDSF9QUk9EVUNUX1RFVTgwMCkgfSwKIAl7IFVTQl9ERVZJQ0UoTE9OR0NIRUVSX1ZFTkRPUl9JRCwgRk9VUl9HX1NZU1RFTVNfUFJPRFVDVF9XMTQpLAogICAJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZvdXJfZ193MTRfYmxhY2tsaXN0CiAgIAl9LAorCXsgVVNCX0RFVklDRShMT05HQ0hFRVJfVkVORE9SX0lELCBaT09NX1BST0RVQ1RfNDU5NykgfSwKIAl7IFVTQl9ERVZJQ0UoSEFJRVJfVkVORE9SX0lELCBIQUlFUl9QUk9EVUNUX0NFMTAwKSB9LAogCS8qIFBpcmVsbGkgICovCiAJeyBVU0JfREVWSUNFKFBJUkVMTElfVkVORE9SX0lELCBQSVJFTExJX1BST0RVQ1RfQzEwMF8xKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCAwMDQxODk5Li5lOGFlMjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTgxOSw2ICs4MTksMzUgQEAKIAkJfQogCX0KIAorCS8qCisJICogU29tZSBkZXZpY2VzIGRvbid0IHdvcmsgb3IgcmV0dXJuIGluY29ycmVjdCBkYXRhIHRoZSBmaXJzdAorCSAqIHRpbWUgdGhleSBnZXQgYSBSRUFEKDEwKSBjb21tYW5kLCBvciBmb3IgdGhlIGZpcnN0IFJFQUQoMTApCisJICogYWZ0ZXIgYSBtZWRpYSBjaGFuZ2UuICBJZiB0aGUgSU5JVElBTF9SRUFEMTAgZmxhZyBpcyBzZXQsCisJICoga2VlcCB0cmFjayBvZiB3aGV0aGVyIFJFQUQoMTApIGNvbW1hbmRzIHN1Y2NlZWQuICBJZiB0aGUKKwkgKiBwcmV2aW91cyBvbmUgc3VjY2VlZGVkIGFuZCB0aGlzIG9uZSBmYWlsZWQsIHNldCB0aGUgUkVET19SRUFEMTAKKwkgKiBmbGFnIHRvIGZvcmNlIGEgcmV0cnkuCisJICovCisJaWYgKHVubGlrZWx5KCh1cy0+ZmZsYWdzICYgVVNfRkxfSU5JVElBTF9SRUFEMTApICYmCisJCQlzcmItPmNtbmRbMF0gPT0gUkVBRF8xMCkpIHsKKwkJaWYgKHNyYi0+cmVzdWx0ID09IFNBTV9TVEFUX0dPT0QpIHsKKwkJCXNldF9iaXQoVVNfRkxJRFhfUkVBRDEwX1dPUktFRCwgJnVzLT5kZmxhZ3MpOworCQl9IGVsc2UgaWYgKHRlc3RfYml0KFVTX0ZMSURYX1JFQUQxMF9XT1JLRUQsICZ1cy0+ZGZsYWdzKSkgeworCQkJY2xlYXJfYml0KFVTX0ZMSURYX1JFQUQxMF9XT1JLRUQsICZ1cy0+ZGZsYWdzKTsKKwkJCXNldF9iaXQoVVNfRkxJRFhfUkVET19SRUFEMTAsICZ1cy0+ZGZsYWdzKTsKKwkJfQorCisJCS8qCisJCSAqIE5leHQsIGlmIHRoZSBSRURPX1JFQUQxMCBmbGFnIGlzIHNldCwgcmV0dXJuIGEgcmVzdWx0CisJCSAqIGNvZGUgdGhhdCB3aWxsIGNhdXNlIHRoZSBTQ1NJIGNvcmUgdG8gcmV0cnkgdGhlIFJFQUQoMTApCisJCSAqIGNvbW1hbmQgaW1tZWRpYXRlbHkuCisJCSAqLworCQlpZiAodGVzdF9iaXQoVVNfRkxJRFhfUkVET19SRUFEMTAsICZ1cy0+ZGZsYWdzKSkgeworCQkJY2xlYXJfYml0KFVTX0ZMSURYX1JFRE9fUkVBRDEwLCAmdXMtPmRmbGFncyk7CisJCQlzcmItPnJlc3VsdCA9IERJRF9JTU1fUkVUUlkgPDwgMTY7CisJCQlzcmItPnNlbnNlX2J1ZmZlclswXSA9IDA7CisJCX0KKwl9CisKIAkvKiBEaWQgd2UgdHJhbnNmZXIgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIGFtb3VudCByZXF1aXJlZD8gKi8KIAlpZiAoKHNyYi0+cmVzdWx0ID09IFNBTV9TVEFUX0dPT0QgfHwgc3JiLT5zZW5zZV9idWZmZXJbMl0gPT0gMCkgJiYKIAkJCXNjc2lfYnVmZmxlbihzcmIpIC0gc2NzaV9nZXRfcmVzaWQoc3JiKSA8IHNyYi0+dW5kZXJmbG93KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggYzE2MDJiOC4uY2NmZjM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0xMTE0LDYgKzExMTQsMTYgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfRklYX0NBUEFDSVRZICksCiAKKy8qIFJlcG9ydGVkIGJ5IFBhdWwgSGFydG1hbiA8cGF1bC5oYXJ0bWFuK2xpbnV4QGdtYWlsLmNvbT4KKyAqIFRoaXMgY2FyZCByZWFkZXIgcmV0dXJucyAiSWxsZWdhbCBSZXF1ZXN0LCBMb2dpY2FsIEJsb2NrIEFkZHJlc3MKKyAqIE91dCBvZiBSYW5nZSIgZm9yIHRoZSBmaXJzdCBSRUFEKDEwKSBhZnRlciBhIG5ldyBjYXJkIGlzIGluc2VydGVkLgorICovCitVTlVTVUFMX0RFViggIDB4MDkwYywgMHg2MDAwLCAweDAxMDAsIDB4MDEwMCwKKwkJIkZlaXlhIiwKKwkJIlNEL1NESEMgQ2FyZCBSZWFkZXIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JTklUSUFMX1JFQUQxMCApLAorCiAvKiBUaGlzIFBlbnRheCBzdGlsbCBjYW1lcmEgaXMgbm90IGNvbmZvcm1hbnQKICAqIHRvIHRoZSBVU0Igc3RvcmFnZSBzcGVjaWZpY2F0aW9uOiAtCiAgKiAtIEl0IGRvZXMgbm90IGxpa2UgdGhlIElOUVVJUlkgY29tbWFuZC4gU28gd2UgbXVzdCBoYW5kbGUgdGhpcyBjb21tYW5kCkBAIC0xODg4LDYgKzE4OTgsMTUgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9fUkVBRF9ESVNDX0lORk8gKSwKIAorLyogUmVwb3J0ZWQgYnkgU3ZlbiBHZWdndXMgPHN2ZW4tdXNic3RAZ2VnZ3VzLm5ldD4KKyAqIFRoaXMgZW5jcnlwdGVkIHBlbiBkcml2ZSByZXR1cm5zIGJvZ3VzIGRhdGEgZm9yIHRoZSBpbml0aWFsIFJFQUQoMTApLgorICovCitVTlVTVUFMX0RFViggIDB4MWIxYywgMHgxYWI1LCAweDAyMDAsIDB4MDIwMCwKKwkJIkNvcnNhaXIiLAorCQkiUGFkbG9jayB2MiIsCisJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0lOSVRJQUxfUkVBRDEwICksCisKIC8qIFBhdGNoIGJ5IFJpY2hhcmQgU2No/HR6IDxyLnNjaHR6QHQtb25saW5lLmRlPgogICogVGhpcyBleHRlcm5hbCBoYXJkIGRyaXZlIGVuY2xvc3VyZSB1c2VzIGEgSk1pY3JvbiBjaGlwIHdoaWNoCiAgKiBuZWVkcyB0aGUgVVNfRkxfSUdOT1JFX1JFU0lEVUUgZmxhZyB0byB3b3JrIHByb3Blcmx5LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKaW5kZXggNWVlN2FjNC4uMGNhMDk1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCkBAIC00NDAsNyArNDQwLDggQEAKIAkJCVVTX0ZMX05PVF9MT0NLQUJMRSB8IFVTX0ZMX01BWF9TRUNUT1JTXzY0IHwKIAkJCVVTX0ZMX0NBUEFDSVRZX09LIHwgVVNfRkxfSUdOT1JFX1JFU0lEVUUgfAogCQkJVVNfRkxfU0lOR0xFX0xVTiB8IFVTX0ZMX05PX1dQX0RFVEVDVCB8Ci0JCQlVU19GTF9OT19SRUFEX0RJU0NfSU5GTyB8IFVTX0ZMX05PX1JFQURfQ0FQQUNJVFlfMTYpOworCQkJVVNfRkxfTk9fUkVBRF9ESVNDX0lORk8gfCBVU19GTF9OT19SRUFEX0NBUEFDSVRZXzE2IHwKKwkJCVVTX0ZMX0lOSVRJQUxfUkVBRDEwKTsKIAogCXAgPSBxdWlya3M7CiAJd2hpbGUgKCpwKSB7CkBAIC00OTAsNiArNDkxLDkgQEAKIAkJY2FzZSAnbSc6CiAJCQlmIHw9IFVTX0ZMX01BWF9TRUNUT1JTXzY0OwogCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJZiB8PSBVU19GTF9JTklUSUFMX1JFQUQxMDsKKwkJCWJyZWFrOwogCQljYXNlICdvJzoKIAkJCWYgfD0gVVNfRkxfQ0FQQUNJVFlfT0s7CiAJCQlicmVhazsKQEAgLTk1Myw2ICs5NTcsMTMgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKIAorCS8qCisJICogSWYgdGhlIGRldmljZSByZXR1cm5zIGludmFsaWQgZGF0YSBmb3IgdGhlIGZpcnN0IFJFQUQoMTApCisJICogY29tbWFuZCwgaW5kaWNhdGUgdGhlIGNvbW1hbmQgc2hvdWxkIGJlIHJldHJpZWQuCisJICovCisJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9JTklUSUFMX1JFQUQxMCkKKwkJc2V0X2JpdChVU19GTElEWF9SRURPX1JFQUQxMCwgJnVzLT5kZmxhZ3MpOworCiAJLyogQWNxdWlyZSBhbGwgdGhlIG90aGVyIHJlc291cmNlcyBhbmQgYWRkIHRoZSBob3N0ICovCiAJcmVzdWx0ID0gdXNiX3N0b3JfYWNxdWlyZV9yZXNvdXJjZXModXMpOwogCWlmIChyZXN1bHQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAppbmRleCA4OWQzYmZmLi43YjBmMjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKQEAgLTczLDYgKzczLDggQEAKICNkZWZpbmUgVVNfRkxJRFhfUkVTRVRUSU5HCTQJLyogZGV2aWNlIHJlc2V0IGluIHByb2dyZXNzICovCiAjZGVmaW5lIFVTX0ZMSURYX1RJTUVEX09VVAk1CS8qIFNDU0kgbWlkbGF5ZXIgdGltZWQgb3V0ICAqLwogI2RlZmluZSBVU19GTElEWF9ET05UX1NDQU4JNgkvKiBkb24ndCBzY2FuIChkaXNjb25uZWN0KSAgKi8KKyNkZWZpbmUgVVNfRkxJRFhfUkVET19SRUFEMTAJNwkvKiByZWRvIFJFQUQoMTApIGNvbW1hbmQgICAgKi8KKyNkZWZpbmUgVVNfRkxJRFhfUkVBRDEwX1dPUktFRAk4CS8qIHByZXZpb3VzIFJFQUQoMTApIHN1Y2NlZWRlZCAqLwogCiAjZGVmaW5lIFVTQl9TVE9SX1NUUklOR19MRU4gMzIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hcmNmYi5jIGIvZHJpdmVycy92aWRlby9hcmNmYi5jCmluZGV4IDNlYzQ5MjMuLmMyMmU4ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKQEAgLTUxNSwxMSArNTE1LDEwIEBACiAKIAkvKiBXZSBuZWVkIGEgZmxhdCBiYWNraW5nIHN0b3JlIGZvciB0aGUgQXJjJ3MKIAkgICBsZXNzLWZsYXQgYWN0dWFsIHBhZ2VkIGZyYW1lYnVmZmVyICovCi0JaWYgKCEodmlkZW9tZW1vcnkgPSB2bWFsbG9jKHZpZGVvbWVtb3J5c2l6ZSkpKQorCXZpZGVvbWVtb3J5ID0gdnphbGxvYyh2aWRlb21lbW9yeXNpemUpOworCWlmICghdmlkZW9tZW1vcnkpCiAJCXJldHVybiByZXR2YWw7CiAKLQltZW1zZXQodmlkZW9tZW1vcnksIDAsIHZpZGVvbWVtb3J5c2l6ZSk7Ci0KIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBhcmNmYl9wYXIpLCAmZGV2LT5kZXYpOwogCWlmICghaW5mbykKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKaW5kZXggZWJiODkzYy4uZDdhYWVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwpAQCAtMjQ4LDEwICsyNDgsNiBAQAogCiBzdGF0aWMgaW50IGF0eV9pbml0KHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIAotI2lmZGVmIENPTkZJR19BVEFSSQotc3RhdGljIGludCBzdG9yZV92aWRlb19wYXIoY2hhciAqdmlkZW9wYXIsIHVuc2lnbmVkIGNoYXIgbTY0X251bSk7Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgYXR5X2dldF9jcnRjKGNvbnN0IHN0cnVjdCBhdHlmYl9wYXIgKnBhciwgc3RydWN0IGNydGMgKmNydGMpOwogCiBzdGF0aWMgdm9pZCBhdHlfc2V0X2NydGMoY29uc3Qgc3RydWN0IGF0eWZiX3BhciAqcGFyLCBjb25zdCBzdHJ1Y3QgY3J0YyAqY3J0Yyk7CkBAIC0yMjY4LDExICsyMjY0LDEzIEBACiAJcmV0dXJuOwogfQogCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHZvaWQgYXR5X2JsX2V4aXQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewogCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihiZCk7CiAJcHJpbnRrKCJhdHk6IEJhY2tsaWdodCB1bmxvYWRlZFxuIik7CiB9CisjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAjZW5kaWYgLyogQ09ORklHX0ZCX0FUWV9CQUNLTElHSFQgKi8KIApAQCAtMjc4OSw3ICsyNzg3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWZkZWYgQ09ORklHX0FUQVJJCisjaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpICYmICFkZWZpbmVkKE1PRFVMRSkKIHN0YXRpYyBpbnQgX19kZXZpbml0IHN0b3JlX3ZpZGVvX3BhcihjaGFyICp2aWRlb19zdHIsIHVuc2lnbmVkIGNoYXIgbTY0X251bSkKIHsKIAljaGFyICpwOwpAQCAtMjgxOCw3ICsyODE2LDcgQEAKIAlwaHlzX3ZtZW1iYXNlW202NF9udW1dID0gMDsKIAlyZXR1cm4gLTE7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0FUQVJJICovCisjZW5kaWYgLyogQ09ORklHX0FUQVJJICYmICFNT0RVTEUgKi8KIAogLyoKICAqIEJsYW5rIHRoZSBkaXNwbGF5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggMGM5MzczYi4uMmQ5M2M4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC0zMDIsNiArMzAyLDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKIAkgIGJlIGNhbGxlZCBhZHA4ODYwX2JsLgogCitjb25maWcgQkFDS0xJR0hUX0FEUDg4NzAKKwl0cmlzdGF0ZSAiQmFja2xpZ2h0IERyaXZlciBmb3IgQURQODg3MCB1c2luZyBXTEVEIgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBJMkMKKwlzZWxlY3QgTkVXX0xFRFMKKwlzZWxlY3QgTEVEU19DTEFTUworCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgTENEIGJhY2tsaWdodCBjb25uZWN0ZWQgdG8gdGhlIEFEUDg4NzAsCisJICBzYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgYWRwODg3MF9ibC4KKwogY29uZmlnIEJBQ0tMSUdIVF84OFBNODYwWAogCXRyaXN0YXRlICJCYWNrbGlnaHQgRHJpdmVyIGZvciA4OFBNODYwNiB1c2luZyBXTEVEIgogCWRlcGVuZHMgb24gTUZEXzg4UE04NjBYCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCmluZGV4IGI5Y2E4NDkuLmVlNzJhZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCkBAIC0zNCw2ICszNCw3IEBACiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0FEWCkgICAgKz0gYWR4X2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfQURQNTUyMCkJKz0gYWRwNTUyMF9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0FEUDg4NjApCSs9IGFkcDg4NjBfYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODcwKQkrPSBhZHA4ODcwX2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfODhQTTg2MFgpICs9IDg4cG04NjB4X2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfUENGNTA2MzMpCSs9IHBjZjUwNjMzLWJhY2tsaWdodC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NzBfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2FkcDg4NzBfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE4ODMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwODg3MF9ibC5jCkBAIC0wLDAgKzEsMTAxMiBAQAorLyoKKyAqIEJhY2tsaWdodCBkcml2ZXIgZm9yIEFuYWxvZyBEZXZpY2VzIEFEUDg4NzAgQmFja2xpZ2h0IERldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2kyYy9hZHA4ODcwLmg+CisjZGVmaW5lIEFEUDg4NzBfRVhUX0ZFQVRVUkVTCisjZGVmaW5lIEFEUDg4NzBfVVNFX0xFRFMKKworCisjZGVmaW5lIEFEUDg4NzBfTUZEVklECTB4MDAgIC8qIE1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEICovCisjZGVmaW5lIEFEUDg4NzBfTURDUgkweDAxICAvKiBEZXZpY2UgbW9kZSBhbmQgc3RhdHVzICovCisjZGVmaW5lIEFEUDg4NzBfSU5UX1NUQVQgMHgwMiAgLyogSW50ZXJydXB0cyBzdGF0dXMgKi8KKyNkZWZpbmUgQURQODg3MF9JTlRfRU4JMHgwMyAgLyogSW50ZXJydXB0cyBlbmFibGUgKi8KKyNkZWZpbmUgQURQODg3MF9DRkdSCTB4MDQgIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURQODg3MF9CTFNFTAkweDA1ICAvKiBTaW5rIGVuYWJsZSBiYWNrbGlnaHQgb3IgaW5kZXBlbmRlbnQgKi8KKyNkZWZpbmUgQURQODg3MF9QV01MRUQJMHgwNiAgLyogUFdNIEVuYWJsZSBTZWxlY3Rpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURQODg3MF9CTE9GRgkweDA3ICAvKiBCYWNrbGlnaHQgb2ZmIHRpbWVvdXQgKi8KKyNkZWZpbmUgQURQODg3MF9CTERJTQkweDA4ICAvKiBCYWNrbGlnaHQgZGltIHRpbWVvdXQgKi8KKyNkZWZpbmUgQURQODg3MF9CTEZSCTB4MDkgIC8qIEJhY2tsaWdodCBmYWRlIGluIGFuZCBvdXQgcmF0ZXMgKi8KKyNkZWZpbmUgQURQODg3MF9CTE1YMQkweDBBICAvKiBCYWNrbGlnaHQgKEJyaWdodG5lc3MgTGV2ZWwgMS1kYXlsaWdodCkgbWF4aW11bSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxETTEJMHgwQiAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDEtZGF5bGlnaHQpIGRpbSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxNWDIJMHgwQyAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDItYnJpZ2h0KSBtYXhpbXVtIGN1cnJlbnQgKi8KKyNkZWZpbmUgQURQODg3MF9CTERNMgkweDBEICAvKiBCYWNrbGlnaHQgKEJyaWdodG5lc3MgTGV2ZWwgMi1icmlnaHQpIGRpbSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxNWDMJMHgwRSAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDMtb2ZmaWNlKSBtYXhpbXVtIGN1cnJlbnQgKi8KKyNkZWZpbmUgQURQODg3MF9CTERNMwkweDBGICAvKiBCYWNrbGlnaHQgKEJyaWdodG5lc3MgTGV2ZWwgMy1vZmZpY2UpIGRpbSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxNWDQJMHgxMCAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDQtaW5kb29yKSBtYXhpbXVtIGN1cnJlbnQgKi8KKyNkZWZpbmUgQURQODg3MF9CTERNNAkweDExICAvKiBCYWNrbGlnaHQgKEJyaWdodG5lc3MgTGV2ZWwgNC1pbmRvb3IpIGRpbSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxNWDUJMHgxMiAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDUtZGFyaykgbWF4aW11bSBjdXJyZW50ICovCisjZGVmaW5lIEFEUDg4NzBfQkxETTUJMHgxMyAgLyogQmFja2xpZ2h0IChCcmlnaHRuZXNzIExldmVsIDUtZGFyaykgZGltIGN1cnJlbnQgKi8KKyNkZWZpbmUgQURQODg3MF9JU0NMQVcJMHgxQSAgLyogSW5kZXBlbmRlbnQgc2luayBjdXJyZW50IGZhZGUgbGF3IHJlZ2lzdGVyICovCisjZGVmaW5lIEFEUDg4NzBfSVNDQwkweDFCICAvKiBJbmRlcGVuZGVudCBzaW5rIGN1cnJlbnQgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBBRFA4ODcwX0lTQ1QxCTB4MUMgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBUaW1lciBSZWdpc3RlciBMRURbNzo1XSAqLworI2RlZmluZSBBRFA4ODcwX0lTQ1QyCTB4MUQgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBUaW1lciBSZWdpc3RlciBMRURbNDoxXSAqLworI2RlZmluZSBBRFA4ODcwX0lTQ0YJMHgxRSAgLyogSW5kZXBlbmRlbnQgc2luayBjdXJyZW50IGZhZGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURQODg3MF9JU0MxCTB4MUYgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBMRUQxICovCisjZGVmaW5lIEFEUDg4NzBfSVNDMgkweDIwICAvKiBJbmRlcGVuZGVudCBTaW5rIEN1cnJlbnQgTEVEMiAqLworI2RlZmluZSBBRFA4ODcwX0lTQzMJMHgyMSAgLyogSW5kZXBlbmRlbnQgU2luayBDdXJyZW50IExFRDMgKi8KKyNkZWZpbmUgQURQODg3MF9JU0M0CTB4MjIgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBMRUQ0ICovCisjZGVmaW5lIEFEUDg4NzBfSVNDNQkweDIzICAvKiBJbmRlcGVuZGVudCBTaW5rIEN1cnJlbnQgTEVENSAqLworI2RlZmluZSBBRFA4ODcwX0lTQzYJMHgyNCAgLyogSW5kZXBlbmRlbnQgU2luayBDdXJyZW50IExFRDYgKi8KKyNkZWZpbmUgQURQODg3MF9JU0M3CTB4MjUgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBMRUQ3IChCcmlnaHRuZXNzIExldmVsIDEtZGF5bGlnaHQpICovCisjZGVmaW5lIEFEUDg4NzBfSVNDN19MMgkweDI2ICAvKiBJbmRlcGVuZGVudCBTaW5rIEN1cnJlbnQgTEVENyAoQnJpZ2h0bmVzcyBMZXZlbCAyLWJyaWdodCkgKi8KKyNkZWZpbmUgQURQODg3MF9JU0M3X0wzCTB4MjcgIC8qIEluZGVwZW5kZW50IFNpbmsgQ3VycmVudCBMRUQ3IChCcmlnaHRuZXNzIExldmVsIDMtb2ZmaWNlKSAqLworI2RlZmluZSBBRFA4ODcwX0lTQzdfTDQJMHgyOCAgLyogSW5kZXBlbmRlbnQgU2luayBDdXJyZW50IExFRDcgKEJyaWdodG5lc3MgTGV2ZWwgNC1pbmRvb3IpICovCisjZGVmaW5lIEFEUDg4NzBfSVNDN19MNQkweDI5ICAvKiBJbmRlcGVuZGVudCBTaW5rIEN1cnJlbnQgTEVENyAoQnJpZ2h0bmVzcyBMZXZlbCA1LWRhcmspICovCisjZGVmaW5lIEFEUDg4NzBfQ01QX0NUTAkweDJEICAvKiBBTFMgQ29tcGFyYXRvciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEUDg4NzBfQUxTMV9FTgkweDJFICAvKiBNYWluIEFMUyBjb21wYXJhdG9yIGxldmVsIGVuYWJsZSAqLworI2RlZmluZSBBRFA4ODcwX0FMUzJfRU4JMHgyRiAgLyogU2Vjb25kIEFMUyBjb21wYXJhdG9yIGxldmVsIGVuYWJsZSAqLworI2RlZmluZSBBRFA4ODcwX0FMUzFfU1RBVCAweDMwICAvKiBNYWluIEFMUyBDb21wYXJhdG9yIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBBRFA4ODcwX0FMUzJfU1RBVCAweDMxICAvKiBTZWNvbmQgQUxTIENvbXBhcmF0b3IgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEFEUDg4NzBfTDJUUlAJMHgzMiAgLyogTDIgY29tcGFyYXRvciByZWZlcmVuY2UgKi8KKyNkZWZpbmUgQURQODg3MF9MMkhZUwkweDMzICAvKiBMMiBoeXN0ZXJlc2lzICovCisjZGVmaW5lIEFEUDg4NzBfTDNUUlAJMHgzNCAgLyogTDMgY29tcGFyYXRvciByZWZlcmVuY2UgKi8KKyNkZWZpbmUgQURQODg3MF9MM0hZUwkweDM1ICAvKiBMMyBoeXN0ZXJlc2lzICovCisjZGVmaW5lIEFEUDg4NzBfTDRUUlAJMHgzNiAgLyogTDQgY29tcGFyYXRvciByZWZlcmVuY2UgKi8KKyNkZWZpbmUgQURQODg3MF9MNEhZUwkweDM3ICAvKiBMNCBoeXN0ZXJlc2lzICovCisjZGVmaW5lIEFEUDg4NzBfTDVUUlAJMHgzOCAgLyogTDUgY29tcGFyYXRvciByZWZlcmVuY2UgKi8KKyNkZWZpbmUgQURQODg3MF9MNUhZUwkweDM5ICAvKiBMNSBoeXN0ZXJlc2lzICovCisjZGVmaW5lIEFEUDg4NzBfUEgxTEVWTAkweDQwICAvKiBGaXJzdCBwaG90b3RyYW5zaXN0b3IgYW1iaWVudCBsaWdodCBsZXZlbC1sb3cgYnl0ZSByZWdpc3RlciAqLworI2RlZmluZSBBRFA4ODcwX1BIMUxFVkgJMHg0MSAgLyogRmlyc3QgcGhvdG90cmFuc2lzdG9yIGFtYmllbnQgbGlnaHQgbGV2ZWwtaGlnaCBieXRlIHJlZ2lzdGVyICovCisjZGVmaW5lIEFEUDg4NzBfUEgyTEVWTAkweDQyICAvKiBTZWNvbmQgcGhvdG90cmFuc2lzdG9yIGFtYmllbnQgbGlnaHQgbGV2ZWwtbG93IGJ5dGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQURQODg3MF9QSDJMRVZICTB4NDMgIC8qIFNlY29uZCBwaG90b3RyYW5zaXN0b3IgYW1iaWVudCBsaWdodCBsZXZlbC1oaWdoIGJ5dGUgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBBRFA4ODcwX01BTlVGSUQJCTB4MyAgLyogQW5hbG9nIERldmljZXMgQUQ4ODcwIE1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEICovCisjZGVmaW5lIEFEUDg4NzBfREVWSUQoeCkJKCh4KSAmIDB4RikKKyNkZWZpbmUgQURQODg3MF9NQU5JRCh4KQkoKHgpID4+IDQpCisKKy8qIE1EQ1IgRGV2aWNlIG1vZGUgYW5kIHN0YXR1cyAqLworI2RlZmluZSBEN0FMU0VOCQkJKDEgPDwgNykKKyNkZWZpbmUgSU5UX0NGRwkJCSgxIDw8IDYpCisjZGVmaW5lIE5TVEJZCQkJKDEgPDwgNSkKKyNkZWZpbmUgRElNX0VOCQkJKDEgPDwgNCkKKyNkZWZpbmUgR0RXTl9ESVMJCSgxIDw8IDMpCisjZGVmaW5lIFNJU19FTgkJCSgxIDw8IDIpCisjZGVmaW5lIENNUF9BVVRPRU4JCSgxIDw8IDEpCisjZGVmaW5lIEJMRU4JCQkoMSA8PCAwKQorCisvKiBBRFA4ODcwX0FMUzFfRU4gTWFpbiBBTFMgY29tcGFyYXRvciBsZXZlbCBlbmFibGUgKi8KKyNkZWZpbmUgTDVfRU4JCQkoMSA8PCAzKQorI2RlZmluZSBMNF9FTgkJCSgxIDw8IDIpCisjZGVmaW5lIEwzX0VOCQkJKDEgPDwgMSkKKyNkZWZpbmUgTDJfRU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIENGR1JfQkxWX1NISUZUCQkzCisjZGVmaW5lIENGR1JfQkxWX01BU0sJCTB4NworI2RlZmluZSBBRFA4ODcwX0ZMQUdfTEVEX01BU0sJMHhGRgorCisjZGVmaW5lIEZBREVfVkFMKGluLCBvdXQpCSgoMHhGICYgKGluKSkgfCAoKDB4RiAmIChvdXQpKSA8PCA0KSkKKyNkZWZpbmUgQkxfQ0ZHUl9WQUwobGF3LCBibHYpCSgoKChibHYpICYgQ0ZHUl9CTFZfTUFTSykgPDwgQ0ZHUl9CTFZfU0hJRlQpIHwgKCgweDMgJiAobGF3KSkgPDwgMSkpCisjZGVmaW5lIEFMU19DTVBSX0NGR19WQUwoZmlsdCkJKCgweDcgJiAoZmlsdCkpIDw8IDEpCisKK3N0cnVjdCBhZHA4ODcwX2JsIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibDsKKwlzdHJ1Y3QgYWRwODg3MF9sZWQgKmxlZDsKKwlzdHJ1Y3QgYWRwODg3MF9iYWNrbGlnaHRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IG11dGV4IGxvY2s7CisJdW5zaWduZWQgbG9uZyBjYWNoZWRfZGF5bGlnaHRfbWF4OworCWludCBpZDsKKwlpbnQgcmV2aWQ7CisJaW50IGN1cnJlbnRfYnJpZ2h0bmVzczsKK307CisKK3N0cnVjdCBhZHA4ODcwX2xlZCB7CisJc3RydWN0IGxlZF9jbGFzc2RldgljZGV2OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7CisJZW51bSBsZWRfYnJpZ2h0bmVzcwluZXdfYnJpZ2h0bmVzczsKKwlpbnQJCQlpZDsKKwlpbnQJCQlmbGFnczsKK307CisKK3N0YXRpYyBpbnQgYWRwODg3MF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCByZWcsIHVpbnQ4X3QgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCByZWFkaW5nIGF0IDB4JTAyeFxuIiwgcmVnKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkqdmFsID0gcmV0OworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgYWRwODg3MF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbCkKK3sKKwlpbnQgcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byB3cml0ZVxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkcDg4NzBfc2V0X2JpdHMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywgdWludDhfdCBiaXRfbWFzaykKK3sKKwlzdHJ1Y3QgYWRwODg3MF9ibCAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisKKwlyZXQgPSBhZHA4ODcwX3JlYWQoY2xpZW50LCByZWcsICZyZWdfdmFsKTsKKworCWlmICghcmV0ICYmICgocmVnX3ZhbCAmIGJpdF9tYXNrKSA9PSAwKSkgeworCQlyZWdfdmFsIHw9IGJpdF9tYXNrOworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgcmVnLCByZWdfdmFsKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWRwODg3MF9jbHJfYml0cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnLCB1aW50OF90IGJpdF9tYXNrKQoreworCXN0cnVjdCBhZHA4ODcwX2JsICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdWludDhfdCByZWdfdmFsOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKworCXJldCA9IGFkcDg4NzBfcmVhZChjbGllbnQsIHJlZywgJnJlZ192YWwpOworCisJaWYgKCFyZXQgJiYgKHJlZ192YWwgJiBiaXRfbWFzaykpIHsKKwkJcmVnX3ZhbCAmPSB+Yml0X21hc2s7CisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCByZWcsIHJlZ192YWwpOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEluZGVwZW5kZW50IHNpbmsgLyBMRUQKKyAqLworI2lmIGRlZmluZWQoQURQODg3MF9VU0VfTEVEUykKK3N0YXRpYyB2b2lkIGFkcDg4NzBfbGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhZHA4ODcwX2xlZCAqbGVkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZHA4ODcwX2xlZCwgd29yayk7CisJYWRwODg3MF93cml0ZShsZWQtPmNsaWVudCwgQURQODg3MF9JU0MxICsgbGVkLT5pZCAtIDEsCisJCQkgbGVkLT5uZXdfYnJpZ2h0bmVzcyA+PiAxKTsKK30KKworc3RhdGljIHZvaWQgYWRwODg3MF9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYWRwODg3MF9sZWQgKmxlZDsKKworCWxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGFkcDg4NzBfbGVkLCBjZGV2KTsKKwlsZWQtPm5ld19icmlnaHRuZXNzID0gdmFsdWU7CisJLyoKKwkgKiBVc2Ugd29ya3F1ZXVlIGZvciBJTyBzaW5jZSBJMkMgb3BlcmF0aW9ucyBjYW4gc2xlZXAuCisJICovCisJc2NoZWR1bGVfd29yaygmbGVkLT53b3JrKTsKK30KKworc3RhdGljIGludCBhZHA4ODcwX2xlZF9zZXR1cChzdHJ1Y3QgYWRwODg3MF9sZWQgKmxlZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gbGVkLT5jbGllbnQ7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9JU0MxICsgbGVkLT5pZCAtIDEsIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhZHA4ODcwX3NldF9iaXRzKGNsaWVudCwgQURQODg3MF9JU0NDLCAxIDw8IChsZWQtPmlkIC0gMSkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAobGVkLT5pZCA+IDQpCisJCXJldCA9IGFkcDg4NzBfc2V0X2JpdHMoY2xpZW50LCBBRFA4ODcwX0lTQ1QxLAorCQkJCShsZWQtPmZsYWdzICYgMHgzKSA8PCAoKGxlZC0+aWQgLSA1KSAqIDIpKTsKKwllbHNlCisJCXJldCA9IGFkcDg4NzBfc2V0X2JpdHMoY2xpZW50LCBBRFA4ODcwX0lTQ1QyLAorCQkJCShsZWQtPmZsYWdzICYgMHgzKSA8PCAoKGxlZC0+aWQgLSAxKSAqIDIpKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkcDg4NzBfbGVkX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkcDg4NzBfYmFja2xpZ2h0X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYWRwODg3MF9ibCAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBhZHA4ODcwX2xlZCAqbGVkLCAqbGVkX2RhdDsKKwlzdHJ1Y3QgbGVkX2luZm8gKmN1cl9sZWQ7CisJaW50IHJldCwgaTsKKworCisJbGVkID0ga2NhbGxvYyhwZGF0YS0+bnVtX2xlZHMsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxlZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0lTQ0xBVywgcGRhdGEtPmxlZF9mYWRlX2xhdyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKKworCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0lTQ1QxLAorCQkJKHBkYXRhLT5sZWRfb25fdGltZSAmIDB4MykgPDwgNik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZTsKKworCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0lTQ0YsCisJCQlGQURFX1ZBTChwZGF0YS0+bGVkX2ZhZGVfaW4sIHBkYXRhLT5sZWRfZmFkZV9vdXQpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fbGVkczsgKytpKSB7CisJCWN1cl9sZWQgPSAmcGRhdGEtPmxlZHNbaV07CisJCWxlZF9kYXQgPSAmbGVkW2ldOworCisJCWxlZF9kYXQtPmlkID0gY3VyX2xlZC0+ZmxhZ3MgJiBBRFA4ODcwX0ZMQUdfTEVEX01BU0s7CisKKwkJaWYgKGxlZF9kYXQtPmlkID4gNyB8fCBsZWRfZGF0LT5pZCA8IDEpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiSW52YWxpZCBMRUQgSUQgJWRcbiIsCisJCQkJbGVkX2RhdC0+aWQpOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAocGRhdGEtPmJsX2xlZF9hc3NpZ24gJiAoMSA8PCAobGVkX2RhdC0+aWQgLSAxKSkpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiTEVEICVkIHVzZWQgYnkgQmFja2xpZ2h0XG4iLAorCQkJCWxlZF9kYXQtPmlkKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJbGVkX2RhdC0+Y2Rldi5uYW1lID0gY3VyX2xlZC0+bmFtZTsKKwkJbGVkX2RhdC0+Y2Rldi5kZWZhdWx0X3RyaWdnZXIgPSBjdXJfbGVkLT5kZWZhdWx0X3RyaWdnZXI7CisJCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzc19zZXQgPSBhZHA4ODcwX2xlZF9zZXQ7CisJCWxlZF9kYXQtPmNkZXYuYnJpZ2h0bmVzcyA9IExFRF9PRkY7CisJCWxlZF9kYXQtPmZsYWdzID0gY3VyX2xlZC0+ZmxhZ3MgPj4gRkxBR19PRkZUX1NISUZUOworCQlsZWRfZGF0LT5jbGllbnQgPSBjbGllbnQ7CisJCWxlZF9kYXQtPm5ld19icmlnaHRuZXNzID0gTEVEX09GRjsKKwkJSU5JVF9XT1JLKCZsZWRfZGF0LT53b3JrLCBhZHA4ODcwX2xlZF93b3JrKTsKKworCQlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2LCAmbGVkX2RhdC0+Y2Rldik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIExFRCAlZFxuIiwKKwkJCQlsZWRfZGF0LT5pZCk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXJldCA9IGFkcDg4NzBfbGVkX3NldHVwKGxlZF9kYXQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byB3cml0ZVxuIik7CisJCQlpKys7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCWRhdGEtPmxlZCA9IGxlZDsKKworCXJldHVybiAwOworCisgZXJyOgorCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IC0taSkgeworCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkW2ldLmNkZXYpOworCQljYW5jZWxfd29ya19zeW5jKCZsZWRbaV0ud29yayk7CisJfQorCisgZXJyX2ZyZWU6CisJa2ZyZWUobGVkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkcDg4NzBfbGVkX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBhZHA4ODcwX2JhY2tsaWdodF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCWNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2xlZHM7IGkrKykgeworCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmZGF0YS0+bGVkW2ldLmNkZXYpOworCQljYW5jZWxfd29ya19zeW5jKCZkYXRhLT5sZWRbaV0ud29yayk7CisJfQorCisJa2ZyZWUoZGF0YS0+bGVkKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA4ODcwX2xlZF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHA4ODcwX2xlZF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGFkcDg4NzBfYmxfc2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCwgaW50IGJyaWdodG5lc3MpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkYXRhLT5wZGF0YS0+ZW5fYW1ibF9zZW5zKSB7CisJCWlmICgoYnJpZ2h0bmVzcyA+IDApICYmIChicmlnaHRuZXNzIDwgQURQODg3MF9NQVhfQlJJR0hUTkVTUykpIHsKKwkJCS8qIERpc2FibGUgQW1iaWVudCBMaWdodCBhdXRvIGFkanVzdCAqLworCQkJcmV0ID0gYWRwODg3MF9jbHJfYml0cyhjbGllbnQsIEFEUDg4NzBfTURDUiwKKwkJCQkJQ01QX0FVVE9FTik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YMSwgYnJpZ2h0bmVzcyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogTUFYX0JSSUdIVE5FU1MgLT4gRW5hYmxlIEFtYmllbnQgTGlnaHQgYXV0byBhZGp1c3QKKwkJCSAqIHJlc3RvcmUgZGF5bGlnaHQgbDEgc3lzZnMgYnJpZ2h0bmVzcworCQkJICovCisJCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YMSwKKwkJCQkJIGRhdGEtPmNhY2hlZF9kYXlsaWdodF9tYXgpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlyZXQgPSBhZHA4ODcwX3NldF9iaXRzKGNsaWVudCwgQURQODg3MF9NRENSLAorCQkJCQkgQ01QX0FVVE9FTik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YMSwgYnJpZ2h0bmVzcyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgJiYgYnJpZ2h0bmVzcyA9PSAwKQorCQlyZXQgPSBhZHA4ODcwX3NldF9iaXRzKGNsaWVudCwKKwkJCQlBRFA4ODcwX01EQ1IsIERJTV9FTik7CisJZWxzZSBpZiAoZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID09IDAgJiYgYnJpZ2h0bmVzcykKKwkJcmV0ID0gYWRwODg3MF9jbHJfYml0cyhjbGllbnQsCisJCQkJQURQODg3MF9NRENSLCBESU1fRU4pOworCisJaWYgKCFyZXQpCisJCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkcDg4NzBfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJaW50IGJyaWdodG5lc3MgPSBibC0+cHJvcHMuYnJpZ2h0bmVzczsKKwlpZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCXJldHVybiBhZHA4ODcwX2JsX3NldChibCwgYnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyBpbnQgYWRwODg3MF9ibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisKKwlyZXR1cm4gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgYWRwODg3MF9ibF9vcHMgPSB7CisJLnVwZGF0ZV9zdGF0dXMJPSBhZHA4ODcwX2JsX3VwZGF0ZV9zdGF0dXMsCisJLmdldF9icmlnaHRuZXNzCT0gYWRwODg3MF9ibF9nZXRfYnJpZ2h0bmVzcywKK307CisKK3N0YXRpYyBpbnQgYWRwODg3MF9ibF9zZXR1cChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlzdHJ1Y3QgYWRwODg3MF9iYWNrbGlnaHRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkYXRhLT5wZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0JMU0VMLCB+cGRhdGEtPmJsX2xlZF9hc3NpZ24pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9QV01MRUQsIHBkYXRhLT5wd21fYXNzaWduKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYWRwODg3MF93cml0ZShjbGllbnQsIEFEUDg4NzBfQkxNWDEsIHBkYXRhLT5sMV9kYXlsaWdodF9tYXgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTERNMSwgcGRhdGEtPmwxX2RheWxpZ2h0X2RpbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwZGF0YS0+ZW5fYW1ibF9zZW5zKSB7CisJCWRhdGEtPmNhY2hlZF9kYXlsaWdodF9tYXggPSBwZGF0YS0+bDFfZGF5bGlnaHRfbWF4OworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YMiwKKwkJCQkJCXBkYXRhLT5sMl9icmlnaHRfbWF4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0JMRE0yLAorCQkJCQkJcGRhdGEtPmwyX2JyaWdodF9kaW0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YMywKKwkJCQkJCXBkYXRhLT5sM19vZmZpY2VfbWF4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0JMRE0zLAorCQkJCQkJcGRhdGEtPmwzX29mZmljZV9kaW0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTE1YNCwKKwkJCQkJCXBkYXRhLT5sNF9pbmRvb3JfbWF4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gYWRwODg3MF93cml0ZShjbGllbnQsIEFEUDg4NzBfQkxETTQsCisJCQkJCQlwZGF0YS0+bDRfaW5kb3JfZGltKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gYWRwODg3MF93cml0ZShjbGllbnQsIEFEUDg4NzBfQkxNWDUsCisJCQkJCQlwZGF0YS0+bDVfZGFya19tYXgpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTERNNSwKKwkJCQkJCXBkYXRhLT5sNV9kYXJrX2RpbSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0wyVFJQLCBwZGF0YS0+bDJfdHJpcCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0wySFlTLCBwZGF0YS0+bDJfaHlzdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0wzVFJQLCBwZGF0YS0+bDNfdHJpcCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0wzSFlTLCBwZGF0YS0+bDNfaHlzdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0w0VFJQLCBwZGF0YS0+bDRfdHJpcCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0w0SFlTLCBwZGF0YS0+bDRfaHlzdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0w1VFJQLCBwZGF0YS0+bDVfdHJpcCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0w1SFlTLCBwZGF0YS0+bDVfaHlzdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0FMUzFfRU4sIEw1X0VOIHwgTDRfRU4gfAorCQkJCQkJTDNfRU4gfCBMMl9FTik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IGFkcDg4NzBfd3JpdGUoY2xpZW50LCBBRFA4ODcwX0NNUF9DVEwsCisJCQlBTFNfQ01QUl9DRkdfVkFMKHBkYXRhLT5hYm1sX2ZpbHQpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gYWRwODg3MF93cml0ZShjbGllbnQsIEFEUDg4NzBfQ0ZHUiwKKwkJCUJMX0NGR1JfVkFMKHBkYXRhLT5ibF9mYWRlX2xhdywgMCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhZHA4ODcwX3dyaXRlKGNsaWVudCwgQURQODg3MF9CTEZSLCBGQURFX1ZBTChwZGF0YS0+YmxfZmFkZV9pbiwKKwkJCXBkYXRhLT5ibF9mYWRlX291dCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJLyoKKwkgKiBBRFA4ODcwIFJldjAgcmVxdWlyZXMgR0RXTl9ESVMgYml0IHNldAorCSAqLworCisJcmV0ID0gYWRwODg3MF9zZXRfYml0cyhjbGllbnQsIEFEUDg4NzBfTURDUiwgQkxFTiB8IERJTV9FTiB8IE5TVEJZIHwKKwkJCShkYXRhLT5yZXZpZCA9PSAwID8gR0RXTl9ESVMgOiAwKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCByZWcpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyb3I7CisJdWludDhfdCByZWdfdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBhZHA4ODcwX3JlYWQoZGF0YS0+Y2xpZW50LCByZWcsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHJlZ192YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJIHNpemVfdCBjb3VudCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgYWRwODg3MF9ibCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJYWRwODg3MF93cml0ZShkYXRhLT5jbGllbnQsIHJlZywgdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2w1X2RhcmtfbWF4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA4ODcwX3Nob3coZGV2LCBidWYsIEFEUDg4NzBfQkxNWDUpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2w1X2RhcmtfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhZHA4ODcwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQODg3MF9CTE1YNSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobDVfZGFya19tYXgsIDA2NjQsIGFkcDg4NzBfYmxfbDVfZGFya19tYXhfc2hvdywKKwkJCWFkcDg4NzBfYmxfbDVfZGFya19tYXhfc3RvcmUpOworCisKK3N0YXRpYyBzc2l6ZV90IGFkcDg4NzBfYmxfbDRfaW5kb29yX21heF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWRwODg3MF9zaG93KGRldiwgYnVmLCBBRFA4ODcwX0JMTVg0KTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sNF9pbmRvb3JfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhZHA4ODcwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQODg3MF9CTE1YNCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobDRfaW5kb29yX21heCwgMDY2NCwgYWRwODg3MF9ibF9sNF9pbmRvb3JfbWF4X3Nob3csCisJCQlhZHA4ODcwX2JsX2w0X2luZG9vcl9tYXhfc3RvcmUpOworCisKK3N0YXRpYyBzc2l6ZV90IGFkcDg4NzBfYmxfbDNfb2ZmaWNlX21heF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDg4NzBfc2hvdyhkZXYsIGJ1ZiwgQURQODg3MF9CTE1YMyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDg4NzBfYmxfbDNfb2ZmaWNlX21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwODg3MF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDg4NzBfQkxNWDMpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobDNfb2ZmaWNlX21heCwgMDY2NCwgYWRwODg3MF9ibF9sM19vZmZpY2VfbWF4X3Nob3csCisJCQlhZHA4ODcwX2JsX2wzX29mZmljZV9tYXhfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2wyX2JyaWdodF9tYXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDg4NzBfc2hvdyhkZXYsIGJ1ZiwgQURQODg3MF9CTE1YMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDg4NzBfYmxfbDJfYnJpZ2h0X21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwODg3MF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDg4NzBfQkxNWDIpOworfQorc3RhdGljIERFVklDRV9BVFRSKGwyX2JyaWdodF9tYXgsIDA2NjQsIGFkcDg4NzBfYmxfbDJfYnJpZ2h0X21heF9zaG93LAorCQkJYWRwODg3MF9ibF9sMl9icmlnaHRfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sMV9kYXlsaWdodF9tYXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA4ODcwX3Nob3coZGV2LCBidWYsIEFEUDg4NzBfQkxNWDEpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2wxX2RheWxpZ2h0X21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWRwODg3MF9ibCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBhZHA4ODcwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQODg3MF9CTE1YMSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobDFfZGF5bGlnaHRfbWF4LCAwNjY0LCBhZHA4ODcwX2JsX2wxX2RheWxpZ2h0X21heF9zaG93LAorCQkJYWRwODg3MF9ibF9sMV9kYXlsaWdodF9tYXhfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2w1X2RhcmtfZGltX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWRwODg3MF9zaG93KGRldiwgYnVmLCBBRFA4ODcwX0JMRE01KTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sNV9kYXJrX2RpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBhZHA4ODcwX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgQURQODg3MF9CTERNNSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobDVfZGFya19kaW0sIDA2NjQsIGFkcDg4NzBfYmxfbDVfZGFya19kaW1fc2hvdywKKwkJCWFkcDg4NzBfYmxfbDVfZGFya19kaW1fc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2w0X2luZG9vcl9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA4ODcwX3Nob3coZGV2LCBidWYsIEFEUDg4NzBfQkxETTQpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2w0X2luZG9vcl9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwODg3MF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDg4NzBfQkxETTQpOworfQorc3RhdGljIERFVklDRV9BVFRSKGw0X2luZG9vcl9kaW0sIDA2NjQsIGFkcDg4NzBfYmxfbDRfaW5kb29yX2RpbV9zaG93LAorCQkJYWRwODg3MF9ibF9sNF9pbmRvb3JfZGltX3N0b3JlKTsKKworCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2wzX29mZmljZV9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA4ODcwX3Nob3coZGV2LCBidWYsIEFEUDg4NzBfQkxETTMpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2wzX29mZmljZV9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwODg3MF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDg4NzBfQkxETTMpOworfQorc3RhdGljIERFVklDRV9BVFRSKGwzX29mZmljZV9kaW0sIDA2NjQsIGFkcDg4NzBfYmxfbDNfb2ZmaWNlX2RpbV9zaG93LAorCQkJYWRwODg3MF9ibF9sM19vZmZpY2VfZGltX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sMl9icmlnaHRfZGltX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWRwODg3MF9zaG93KGRldiwgYnVmLCBBRFA4ODcwX0JMRE0yKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sMl9icmlnaHRfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFkcDg4NzBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBBRFA4ODcwX0JMRE0yKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihsMl9icmlnaHRfZGltLCAwNjY0LCBhZHA4ODcwX2JsX2wyX2JyaWdodF9kaW1fc2hvdywKKwkJCWFkcDg4NzBfYmxfbDJfYnJpZ2h0X2RpbV9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFkcDg4NzBfYmxfbDFfZGF5bGlnaHRfZGltX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gYWRwODg3MF9zaG93KGRldiwgYnVmLCBBRFA4ODcwX0JMRE0xKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwODg3MF9ibF9sMV9kYXlsaWdodF9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwODg3MF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIEFEUDg4NzBfQkxETTEpOworfQorc3RhdGljIERFVklDRV9BVFRSKGwxX2RheWxpZ2h0X2RpbSwgMDY2NCwgYWRwODg3MF9ibF9sMV9kYXlsaWdodF9kaW1fc2hvdywKKwkJCWFkcDg4NzBfYmxfbDFfZGF5bGlnaHRfZGltX3N0b3JlKTsKKworI2lmZGVmIEFEUDg4NzBfRVhUX0ZFQVRVUkVTCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2FtYmllbnRfbGlnaHRfbGV2ZWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhZHA4ODcwX2JsICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGVycm9yOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwl1aW50MTZfdCByZXRfdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBhZHA4ODcwX3JlYWQoZGF0YS0+Y2xpZW50LCBBRFA4ODcwX1BIMUxFVkwsICZyZWdfdmFsKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJCXJldHVybiBlcnJvcjsKKwl9CisJcmV0X3ZhbCA9IHJlZ192YWw7CisJZXJyb3IgPSBhZHA4ODcwX3JlYWQoZGF0YS0+Y2xpZW50LCBBRFA4ODcwX1BIMUxFVkgsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJLyogUmV0dXJuIDEzLWJpdCBjb252ZXJzaW9uIHZhbHVlIGZvciB0aGUgZmlyc3QgbGlnaHQgc2Vuc29yICovCisJcmV0X3ZhbCArPSAocmVnX3ZhbCAmIDB4MUYpIDw8IDg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcmV0X3ZhbCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoYW1iaWVudF9saWdodF9sZXZlbCwgMDQ0NCwKKwkJYWRwODg3MF9ibF9hbWJpZW50X2xpZ2h0X2xldmVsX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2FtYmllbnRfbGlnaHRfem9uZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyb3I7CisJdWludDhfdCByZWdfdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBhZHA4ODcwX3JlYWQoZGF0YS0+Y2xpZW50LCBBRFA4ODcwX0NGR1IsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsCisJCSgocmVnX3ZhbCA+PiBDRkdSX0JMVl9TSElGVCkgJiBDRkdSX0JMVl9NQVNLKSArIDEpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA4ODcwX2JsX2FtYmllbnRfbGlnaHRfem9uZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhZHA4ODcwX2JsICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJdWludDhfdCByZWdfdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHZhbCA9PSAwKSB7CisJCS8qIEVuYWJsZSBhdXRvbWF0aWMgYW1iaWVudCBsaWdodCBzZW5zaW5nICovCisJCWFkcDg4NzBfc2V0X2JpdHMoZGF0YS0+Y2xpZW50LCBBRFA4ODcwX01EQ1IsIENNUF9BVVRPRU4pOworCX0gZWxzZSBpZiAoKHZhbCA+IDApICYmICh2YWwgPCA2KSkgeworCQkvKiBEaXNhYmxlIGF1dG9tYXRpYyBhbWJpZW50IGxpZ2h0IHNlbnNpbmcgKi8KKwkJYWRwODg3MF9jbHJfYml0cyhkYXRhLT5jbGllbnQsIEFEUDg4NzBfTURDUiwgQ01QX0FVVE9FTik7CisKKwkJLyogU2V0IHVzZXIgc3VwcGxpZWQgYW1iaWVudCBsaWdodCB6b25lICovCisJCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCQlhZHA4ODcwX3JlYWQoZGF0YS0+Y2xpZW50LCBBRFA4ODcwX0NGR1IsICZyZWdfdmFsKTsKKwkJcmVnX3ZhbCAmPSB+KENGR1JfQkxWX01BU0sgPDwgQ0ZHUl9CTFZfU0hJRlQpOworCQlyZWdfdmFsIHw9ICh2YWwgLSAxKSA8PCBDRkdSX0JMVl9TSElGVDsKKwkJYWRwODg3MF93cml0ZShkYXRhLT5jbGllbnQsIEFEUDg4NzBfQ0ZHUiwgcmVnX3ZhbCk7CisJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorc3RhdGljIERFVklDRV9BVFRSKGFtYmllbnRfbGlnaHRfem9uZSwgMDY2NCwKKwkJYWRwODg3MF9ibF9hbWJpZW50X2xpZ2h0X3pvbmVfc2hvdywKKwkJYWRwODg3MF9ibF9hbWJpZW50X2xpZ2h0X3pvbmVfc3RvcmUpOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHA4ODcwX2JsX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfbDVfZGFya19tYXguYXR0ciwKKwkmZGV2X2F0dHJfbDVfZGFya19kaW0uYXR0ciwKKwkmZGV2X2F0dHJfbDRfaW5kb29yX21heC5hdHRyLAorCSZkZXZfYXR0cl9sNF9pbmRvb3JfZGltLmF0dHIsCisJJmRldl9hdHRyX2wzX29mZmljZV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfbDNfb2ZmaWNlX2RpbS5hdHRyLAorCSZkZXZfYXR0cl9sMl9icmlnaHRfbWF4LmF0dHIsCisJJmRldl9hdHRyX2wyX2JyaWdodF9kaW0uYXR0ciwKKwkmZGV2X2F0dHJfbDFfZGF5bGlnaHRfbWF4LmF0dHIsCisJJmRldl9hdHRyX2wxX2RheWxpZ2h0X2RpbS5hdHRyLAorI2lmZGVmIEFEUDg4NzBfRVhUX0ZFQVRVUkVTCisJJmRldl9hdHRyX2FtYmllbnRfbGlnaHRfbGV2ZWwuYXR0ciwKKwkmZGV2X2F0dHJfYW1iaWVudF9saWdodF96b25lLmF0dHIsCisjZW5kaWYKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHA4ODcwX2JsX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gYWRwODg3MF9ibF9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWRwODg3MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibDsKKwlzdHJ1Y3QgYWRwODg3MF9ibCAqZGF0YTsKKwlzdHJ1Y3QgYWRwODg3MF9iYWNrbGlnaHRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCQljbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVpbnQ4X3QgcmVnX3ZhbDsKKwlpbnQgcmV0OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJTTUJVUyBCeXRlIERhdGEgbm90IFN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGFkcDg4NzBfcmVhZChjbGllbnQsIEFEUDg4NzBfTUZEVklELCAmcmVnX3ZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKEFEUDg4NzBfTUFOSUQocmVnX3ZhbCkgIT0gQURQODg3MF9NQU5VRklEKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHByb2JlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT5yZXZpZCA9IEFEUDg4NzBfREVWSUQocmVnX3ZhbCk7CisJZGF0YS0+Y2xpZW50ID0gY2xpZW50OworCWRhdGEtPnBkYXRhID0gcGRhdGE7CisJZGF0YS0+aWQgPSBpZC0+ZHJpdmVyX2RhdGE7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCisJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHByb3BzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CisJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBwcm9wcy5icmlnaHRuZXNzID0gQURQODg3MF9NQVhfQlJJR0hUTkVTUzsKKwlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoZGV2X2RyaXZlcl9zdHJpbmcoJmNsaWVudC0+ZGV2KSwKKwkJCSZjbGllbnQtPmRldiwgZGF0YSwgJmFkcDg4NzBfYmxfb3BzLCAmcHJvcHMpOworCWlmIChJU19FUlIoYmwpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7CisJCXJldCA9IFBUUl9FUlIoYmwpOworCQlnb3RvIG91dDI7CisJfQorCisJZGF0YS0+YmwgPSBibDsKKworCWlmIChwZGF0YS0+ZW5fYW1ibF9zZW5zKQorCQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmJsLT5kZXYua29iaiwKKwkJCSZhZHA4ODcwX2JsX2F0dHJfZ3JvdXApOworCisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBzeXNmc1xuIik7CisJCWdvdG8gb3V0MTsKKwl9CisKKwlyZXQgPSBhZHA4ODcwX2JsX3NldHVwKGJsKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJsKTsKKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIlJldi4lZCBCYWNrbGlnaHRcbiIsIGRhdGEtPnJldmlkKTsKKworCWlmIChwZGF0YS0+bnVtX2xlZHMpCisJCWFkcDg4NzBfbGVkX3Byb2JlKGNsaWVudCk7CisKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChkYXRhLT5wZGF0YS0+ZW5fYW1ibF9zZW5zKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRhdGEtPmJsLT5kZXYua29iaiwKKwkJCSZhZHA4ODcwX2JsX2F0dHJfZ3JvdXApOworb3V0MToKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmwpOworb3V0MjoKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkcDg4NzBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkcDg4NzBfYmwgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWFkcDg4NzBfY2xyX2JpdHMoY2xpZW50LCBBRFA4ODcwX01EQ1IsIE5TVEJZKTsKKworCWlmIChkYXRhLT5sZWQpCisJCWFkcDg4NzBfbGVkX3JlbW92ZShjbGllbnQpOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGF0YS0+YmwtPmRldi5rb2JqLAorCQkJJmFkcDg4NzBfYmxfYXR0cl9ncm91cCk7CisKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+YmwpOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWRwODg3MF9pMmNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlhZHA4ODcwX2Nscl9iaXRzKGNsaWVudCwgQURQODg3MF9NRENSLCBOU1RCWSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHA4ODcwX2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlhZHA4ODcwX3NldF9iaXRzKGNsaWVudCwgQURQODg3MF9NRENSLCBOU1RCWSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGFkcDg4NzBfaTJjX3N1c3BlbmQgTlVMTAorI2RlZmluZSBhZHA4ODcwX2kyY19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZHA4ODcwX2lkW10gPSB7CisJeyAiYWRwODg3MCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWRwODg3MF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZHA4ODcwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAorCX0sCisJLnByb2JlICAgID0gYWRwODg3MF9wcm9iZSwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChhZHA4ODcwX3JlbW92ZSksCisJLnN1c3BlbmQgPSBhZHA4ODcwX2kyY19zdXNwZW5kLAorCS5yZXN1bWUgID0gYWRwODg3MF9pMmNfcmVzdW1lLAorCS5pZF90YWJsZSA9IGFkcDg4NzBfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZHA4ODcwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmFkcDg4NzBfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFkcDg4NzBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHA4ODcwX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmYWRwODg3MF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWRwODg3MF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQURQODg3MCBCYWNrbGlnaHQgZHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmFkcDg4NzAtYmFja2xpZ2h0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMgYi9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMKaW5kZXggNDdjMjFmYi4uYmVhNTNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYwpAQCAtNzg5LDYgKzc4OSw3IEBACiAJaTJjX2FkZF9kcml2ZXIoJmFkNTI4MF9kcml2ZXIpOwogCiAJbWVtc2V0KCZwcm9wcywgMCwgc2l6ZW9mKHByb3BzKSk7CisJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CiAJcHJvcHMubWF4X2JyaWdodG5lc3MgPSBNQVhfQlJJR0hFTkVTUzsKIAlibF9kZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJiZjUzNy1ibCIsIE5VTEwsIE5VTEwsCiAJCQkJCSAgICZiZmluX2xxMDM1ZmJfYmxfb3BzLCAmcHJvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMKaW5kZXggZWJkYTY4Ny4uMzc3ZGRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5jCkBAIC0xMTAxLDEyICsxMTAxLDEwIEBACiAKIAl2aWRlb21lbW9yeXNpemUgPSByb3VuZHVwKChkcHl3KmRweWgpLCBQQUdFX1NJWkUpOwogCi0JdmlkZW9tZW1vcnkgPSB2bWFsbG9jKHZpZGVvbWVtb3J5c2l6ZSk7CisJdmlkZW9tZW1vcnkgPSB2emFsbG9jKHZpZGVvbWVtb3J5c2l6ZSk7CiAJaWYgKCF2aWRlb21lbW9yeSkKIAkJZ290byBlcnJfZmJfcmVsOwogCi0JbWVtc2V0KHZpZGVvbWVtb3J5LCAwLCB2aWRlb21lbW9yeXNpemUpOwotCiAJaW5mby0+c2NyZWVuX2Jhc2UgPSAoY2hhciAqKXZpZGVvbWVtb3J5OwogCWluZm8tPmZib3BzID0gJmJyb2Fkc2hlZXRmYl9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZWZpZmIuYyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwppbmRleCBmYjIwNTg0Li43ODQxMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lZmlmYi5jCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAKK3N0YXRpYyBib29sIHJlcXVlc3RfbWVtX3N1Y2NlZWRlZCA9IGZhbHNlOworCiBzdGF0aWMgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGVmaWZiX2RlZmluZWQgX19kZXZpbml0ZGF0YSA9IHsKIAkuYWN0aXZhdGUJCT0gRkJfQUNUSVZBVEVfTk9XLAogCS5oZWlnaHQJCQk9IC0xLApAQCAtMjgxLDcgKzI4Myw5IEBACiB7CiAJaWYgKGluZm8tPnNjcmVlbl9iYXNlKQogCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uYmFzZSwgaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSk7CisJaWYgKHJlcXVlc3RfbWVtX3N1Y2NlZWRlZCkKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLmJhc2UsCisJCQkJICAgaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSk7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIH0KIApAQCAtMzI2LDE0ICszMzAsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgZWZpZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgZWZpZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCBlcnI7CiAJdW5zaWduZWQgaW50IHNpemVfdm1vZGU7CiAJdW5zaWduZWQgaW50IHNpemVfcmVtYXA7CiAJdW5zaWduZWQgaW50IHNpemVfdG90YWw7Ci0JaW50IHJlcXVlc3Rfc3VjY2VlZGVkID0gMDsKIAogCWlmICghc2NyZWVuX2luZm8ubGZiX2RlcHRoKQogCQlzY3JlZW5faW5mby5sZmJfZGVwdGggPSAzMjsKQEAgLTM4Nyw3ICszOTAsNyBAQAogCWVmaWZiX2ZpeC5zbWVtX2xlbiA9IHNpemVfcmVtYXA7CiAKIAlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBzaXplX3JlbWFwLCAiZWZpZmIiKSkgewotCQlyZXF1ZXN0X3N1Y2NlZWRlZCA9IDE7CisJCXJlcXVlc3RfbWVtX3N1Y2NlZWRlZCA9IHRydWU7CiAJfSBlbHNlIHsKIAkJLyogV2UgY2Fubm90IG1ha2UgdGhpcyBmYXRhbC4gU29tZXRpbWVzIHRoaXMgY29tZXMgZnJvbSBtYWdpYwogCQkgICBzcGFjZXMgb3VyIHJlc291cmNlIGhhbmRsZXJzIHNpbXBseSBkb24ndCBrbm93IGFib3V0ICovCkBAIC00MTMsNyArNDE2LDcgQEAKIAlpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5iYXNlID0gZWZpZmJfZml4LnNtZW1fc3RhcnQ7CiAJaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uc2l6ZSA9IHNpemVfcmVtYXA7CiAKLQlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoZWZpZmJfZml4LnNtZW1fc3RhcnQsIGVmaWZiX2ZpeC5zbWVtX2xlbik7CisJaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX3djKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBlZmlmYl9maXguc21lbV9sZW4pOwogCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlZmlmYjogYWJvcnQsIGNhbm5vdCBpb3JlbWFwIHZpZGVvIG1lbW9yeSAiCiAJCQkJIjB4JXggQCAweCVseFxuIiwKQEAgLTQ5MSwxMyArNDk0LDEyIEBACiBlcnJfcmVsZWFzZV9mYjoKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogZXJyX3JlbGVhc2VfbWVtOgotCWlmIChyZXF1ZXN0X3N1Y2NlZWRlZCkKKwlpZiAocmVxdWVzdF9tZW1fc3VjY2VlZGVkKQogCQlyZWxlYXNlX21lbV9yZWdpb24oZWZpZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVmaWZiX2RyaXZlciA9IHsKLQkucHJvYmUJPSBlZmlmYl9wcm9iZSwKIAkuZHJpdmVyCT0gewogCQkubmFtZQk9ICJlZmlmYiIsCiAJfSwKQEAgLTUyOCwxMyArNTMwLDIxIEBACiAJaWYgKCFzY3JlZW5faW5mby5sZmJfbGluZWxlbmd0aCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmVmaWZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlZmlmYl9kZXZpY2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlpZiAoIXJldCkgewotCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVmaWZiX2RldmljZSk7Ci0JCWlmIChyZXQpCi0JCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZWZpZmJfZHJpdmVyKTsKKwkvKgorCSAqIFRoaXMgaXMgbm90IGp1c3QgYW4gb3B0aW1pemF0aW9uLiAgV2Ugd2lsbCBpbnRlcmZlcmUKKwkgKiB3aXRoIGEgcmVhbCBkcml2ZXIgaWYgd2UgZ2V0IHJlcHJvYmVkLCBzbyBkb24ndCBhbGxvdworCSAqIGl0LgorCSAqLworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmZWZpZmJfZHJpdmVyLCBlZmlmYl9wcm9iZSk7CisJaWYgKHJldCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZWZpZmJfZGV2aWNlKTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogbW9kdWxlX2luaXQoZWZpZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2hlY3ViYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2hlY3ViYWZiLmMKaW5kZXggMWI5NDY0My4uZmJlZjE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9oZWN1YmFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaGVjdWJhZmIuYwpAQCAtMjMxLDExICsyMzEsMTAgQEAKIAogCXZpZGVvbWVtb3J5c2l6ZSA9IChEUFlfVypEUFlfSCkvODsKIAotCWlmICghKHZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpKSkKKwl2aWRlb21lbW9yeSA9IHZ6YWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwlpZiAoIXZpZGVvbWVtb3J5KQogCQlyZXR1cm4gcmV0dmFsOwogCi0JbWVtc2V0KHZpZGVvbWVtb3J5LCAwLCB2aWRlb21lbW9yeXNpemUpOwotCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgaGVjdWJhZmJfcGFyKSwgJmRldi0+ZGV2KTsKIAlpZiAoIWluZm8pCiAJCWdvdG8gZXJyX2ZiYWxsb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKaW5kZXggZDJjY2ZkNi4uZjEzNWRiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbXhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtODU2LDEwICs4NTYsMTAgQEAKIAkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKCZwZGV2LT5kZXYsZmJpLT5tYXBfc2l6ZSxmYmktPm1hcF9jcHUsCiAJCQlmYmktPm1hcF9kbWEpOwogZmFpbGVkX21hcDoKLQljbGtfcHV0KGZiaS0+Y2xrKTsKLWZhaWxlZF9nZXRjbG9jazoKIAlpb3VubWFwKGZiaS0+cmVncyk7CiBmYWlsZWRfaW9yZW1hcDoKKwljbGtfcHV0KGZiaS0+Y2xrKTsKK2ZhaWxlZF9nZXRjbG9jazoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGZhaWxlZF9yZXE6CiAJa2ZyZWUoaW5mby0+cHNldWRvX3BhbGV0dGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jIGIvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jCmluZGV4IGVkNjRlZGYuLjk3ZDQ1ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMKQEAgLTYyOCwxMiArNjI4LDEwIEBACiAJLyogd2UgbmVlZCB0byBhZGQgYSBzcGFyZSBwYWdlIGJlY2F1c2Ugb3VyIGNzdW0gY2FjaGluZyBzY2hlbWUgd2Fsa3MKIAkgKiB0byB0aGUgZW5kIG9mIHRoZSBwYWdlICovCiAJdmlkZW9tZW1vcnlzaXplID0gUEFHRV9TSVpFICsgKGZ3ICogZmgpOwotCXZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpOworCXZpZGVvbWVtb3J5ID0gdnphbGxvYyh2aWRlb21lbW9yeXNpemUpOwogCWlmICghdmlkZW9tZW1vcnkpCiAJCWdvdG8gZXJyX2ZiX3JlbDsKIAotCW1lbXNldCh2aWRlb21lbW9yeSwgMCwgdmlkZW9tZW1vcnlzaXplKTsKLQogCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgX19mb3JjZSBfX2lvbWVtICopdmlkZW9tZW1vcnk7CiAJaW5mby0+ZmJvcHMgPSAmbWV0cm9ub21lZmJfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jIGIvZHJpdmVycy92aWRlby9tb2RlZGIuYwppbmRleCA0OGMzZWE4Li5jYjE3NWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKQEAgLTExMjgsMyArMTEyOCw0IEBACiBFWFBPUlRfU1lNQk9MKGZiX2ZpbmRfbmVhcmVzdF9tb2RlKTsKIEVYUE9SVF9TWU1CT0woZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KTsKIEVYUE9SVF9TWU1CT0woZmJfZmluZF9tb2RlKTsKK0VYUE9SVF9TWU1CT0woZmJfZmluZF9tb2RlX2N2dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMKaW5kZXggMzVmNjFkZC4uYmI5NWVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGExNjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYwpAQCAtNjIzLDE5ICs2MjMsMjEgQEAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBJTyBtZW1vcnkgZGVmaW5lZFxuIik7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGZhaWxlZF9wdXRfY2xrOwogCX0KIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gSVJRIGRlZmluZWRcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBmYWlsZWRfcHV0X2NsazsKIAl9CiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBweGExNjhmYl9pbmZvKSwgJnBkZXYtPmRldik7CiAJaWYgKGluZm8gPT0gTlVMTCkgewotCQljbGtfcHV0KGNsayk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZF9wdXRfY2xrOwogCX0KIAogCS8qIEluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCkBAIC02NzEsNyArNjczLDcgQEAKIAlmYmktPnJlZ19iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKGZiaS0+cmVnX2Jhc2UgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxlZDsKKwkJZ290byBmYWlsZWRfZnJlZV9pbmZvOwogCX0KIAogCS8qCkBAIC02ODMsNyArNjg1LDcgQEAKIAkJCQkJCSZmYmktPmZiX3N0YXJ0X2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGluZm8tPnNjcmVlbl9iYXNlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gZmFpbGVkX2ZyZWVfaW5mbzsKIAl9CiAKIAlpbmZvLT5maXguc21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWZiaS0+ZmJfc3RhcnRfZG1hOwpAQCAtNzcyLDggKzc3NCw5IEBACiBmYWlsZWRfZnJlZV9mYm1lbToKIAlkbWFfZnJlZV9jb2hlcmVudChmYmktPmRldiwgaW5mby0+Zml4LnNtZW1fbGVuLAogCQkJaW5mby0+c2NyZWVuX2Jhc2UsIGZiaS0+ZmJfc3RhcnRfZG1hKTsKLWZhaWxlZDoKK2ZhaWxlZF9mcmVlX2luZm86CiAJa2ZyZWUoaW5mbyk7CitmYWlsZWRfcHV0X2NsazoKIAljbGtfcHV0KGNsayk7CiAKIAlkZXZfZXJyKCZwZGV2LT5kZXYsICJmcmFtZSBidWZmZXIgZGV2aWNlIGluaXQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYwppbmRleCAwMzUyYWZhLi40YWVjZjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMKQEAgLTIzNSwxMyArMjM1LDEyIEBACiAJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHMzY19mYl93aW4gKndpbiA9IGluZm8tPnBhcjsKLQlzdHJ1Y3QgczNjX2ZiX3BkX3dpbiAqd2luZGF0YSA9IHdpbi0+d2luZGF0YTsKIAlzdHJ1Y3QgczNjX2ZiICpzZmIgPSB3aW4tPnBhcmVudDsKIAogCWRldl9kYmcoc2ZiLT5kZXYsICJjaGVja2luZyBwYXJhbWV0ZXJzXG4iKTsKIAotCXZhci0+eHJlc192aXJ0dWFsID0gbWF4KCh1bnNpZ25lZCBpbnQpd2luZGF0YS0+dmlydHVhbF94LCB2YXItPnhyZXMpOwotCXZhci0+eXJlc192aXJ0dWFsID0gbWF4KCh1bnNpZ25lZCBpbnQpd2luZGF0YS0+dmlydHVhbF95LCB2YXItPnlyZXMpOworCXZhci0+eHJlc192aXJ0dWFsID0gbWF4KHZhci0+eHJlc192aXJ0dWFsLCB2YXItPnhyZXMpOworCXZhci0+eXJlc192aXJ0dWFsID0gbWF4KHZhci0+eXJlc192aXJ0dWFsLCB2YXItPnlyZXMpOwogCiAJaWYgKCFzM2NfZmJfdmFsaWRhdGVfd2luX2JwcCh3aW4sIHZhci0+Yml0c19wZXJfcGl4ZWwpKSB7CiAJCWRldl9kYmcoc2ZiLT5kZXYsICJ3aW4gJWQ6IHVuc3VwcG9ydGVkIGJwcCAlZFxuIiwKQEAgLTU1OCw2ICs1NTcsMTMgQEAKIAl2aWRvc2Rfc2V0X2FscGhhKHdpbiwgYWxwaGEpOwogCXZpZG9zZF9zZXRfc2l6ZSh3aW4sIGRhdGEpOwogCisJLyogRW5hYmxlIERNQSBjaGFubmVsIGZvciB0aGlzIHdpbmRvdyAqLworCWlmIChzZmItPnZhcmlhbnQuaGFzX3NoYWRvd2NvbikgeworCQlkYXRhID0gcmVhZGwoc2ZiLT5yZWdzICsgU0hBRE9XQ09OKTsKKwkJZGF0YSB8PSBTSEFET1dDT05fQ0h4X0VOQUJMRSh3aW5fbm8pOworCQl3cml0ZWwoZGF0YSwgc2ZiLT5yZWdzICsgU0hBRE9XQ09OKTsKKwl9CisKIAlkYXRhID0gV0lOQ09OeF9FTldJTjsKIAogCS8qIG5vdGUsIHNpbmNlIHdlIGhhdmUgdG8gcm91bmQgdXAgdGhlIGJpdHMtcGVyLXBpeGVsLCB3ZSBlbmQgdXAKQEAgLTYzNywxMyArNjQzLDYgQEAKIAl3cml0ZWwoZGF0YSwgcmVncyArIHNmYi0+dmFyaWFudC53aW5jb24gKyAod2luX25vICogNCkpOwogCXdyaXRlbCgweDAsIHJlZ3MgKyBzZmItPnZhcmlhbnQud2lubWFwICsgKHdpbl9ubyAqIDQpKTsKIAotCS8qIEVuYWJsZSBETUEgY2hhbm5lbCBmb3IgdGhpcyB3aW5kb3cgKi8KLQlpZiAoc2ZiLT52YXJpYW50Lmhhc19zaGFkb3djb24pIHsKLQkJZGF0YSA9IHJlYWRsKHNmYi0+cmVncyArIFNIQURPV0NPTik7Ci0JCWRhdGEgfD0gU0hBRE9XQ09OX0NIeF9FTkFCTEUod2luX25vKTsKLQkJd3JpdGVsKGRhdGEsIHNmYi0+cmVncyArIFNIQURPV0NPTik7Ci0JfQotCiAJc2hhZG93X3Byb3RlY3Rfd2luKHdpbiwgMCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE0ODcsMTEgKzE0ODYsMTAgQEAKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihzZmItPnJlZ3NfcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShzZmItPnJlZ3NfcmVzKSk7CiAKLQlrZnJlZShzZmIpOwotCiAJcG1fcnVudGltZV9wdXRfc3luYyhzZmItPmRldik7CiAJcG1fcnVudGltZV9kaXNhYmxlKHNmYi0+ZGV2KTsKIAorCWtmcmVlKHNmYik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKaW5kZXggM2I3ZjJmNS4uNGRlNTQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKKysrIGIvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMKQEAgLTIyMzcsNiArMjIzNywyMiBAQAogCQkJCSAmaW5mby0+bW9kZWxpc3QpOwogI2VuZGlmCiAJaW5mby0+dmFyID0gc2F2YWdlZmJfdmFyODAweDYwMHg4OworCS8qIGlmIGEgcGFuZWwgd2FzIGRldGVjdGVkLCBkZWZhdWx0IHRvIGEgQ1ZUIG1vZGUgaW5zdGVhZCAqLworCWlmIChwYXItPlNhdmFnZVBhbmVsV2lkdGgpIHsKKwkJc3RydWN0IGZiX3ZpZGVvbW9kZSBjdnRfbW9kZTsKKworCQltZW1zZXQoJmN2dF9tb2RlLCAwLCBzaXplb2YoY3Z0X21vZGUpKTsKKwkJY3Z0X21vZGUueHJlcyA9IHBhci0+U2F2YWdlUGFuZWxXaWR0aDsKKwkJY3Z0X21vZGUueXJlcyA9IHBhci0+U2F2YWdlUGFuZWxIZWlnaHQ7CisJCWN2dF9tb2RlLnJlZnJlc2ggPSA2MDsKKwkJLyogRklYTUU6IGlmIHdlIGtub3cgdGhlcmUgaXMgb25seSB0aGUgcGFuZWwKKwkJICogd2UgY2FuIGVuYWJsZSByZWR1Y2VkIGJsYW5raW5nIGFzIHdlbGwgKi8KKwkJaWYgKGZiX2ZpbmRfbW9kZV9jdnQoJmN2dF9tb2RlLCAwLCAwKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIENWVCBtb2RlIGZvdW5kIGZvciBwYW5lbFxuIik7CisJCWVsc2UgaWYgKGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBOVUxMLCBOVUxMLCAwLAorCQkJCSAgICAgICZjdnRfbW9kZSwgMCkgIT0gMykKKwkJCWluZm8tPnZhciA9IHNhdmFnZWZiX3ZhcjgwMHg2MDB4ODsKKwl9CiAKIAlpZiAobW9kZV9vcHRpb24pIHsKIAkJZmJfZmluZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sIG1vZGVfb3B0aW9uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jCmluZGV4IDZhZTQwYjYuLjdkNTRlMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMKQEAgLTExMjcsMjMgKzExMjcsMTYgQEAKIAkJc3RydWN0IGZiX2luZm8gKmluZm8gPSBoZG1pLT5pbmZvOwogCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gMCwgaGRtaV9yYXRlOwogCi0JCS8qIEEgZGV2aWNlIGhhcyBiZWVuIHBsdWdnZWQgaW4gKi8KLQkJcG1fcnVudGltZV9nZXRfc3luYyhoZG1pLT5kZXYpOwotCiAJCXJldCA9IHNoX2hkbWlfcmVhZF9lZGlkKGhkbWksICZoZG1pX3JhdGUsICZwYXJlbnRfcmF0ZSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwbV9ydW50aW1lX3B1dChoZG1pLT5kZXYpOworCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwotCQl9CiAKIAkJaGRtaS0+aHBfc3RhdGUgPSBIRE1JX0hPVFBMVUdfRURJRF9ET05FOwogCiAJCS8qIFJlY29uZmlndXJlIHRoZSBjbG9jayAqLwogCQlyZXQgPSBzaF9oZG1pX2Nsa19jb25maWd1cmUoaGRtaSwgaGRtaV9yYXRlLCBwYXJlbnRfcmF0ZSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwbV9ydW50aW1lX3B1dChoZG1pLT5kZXYpOworCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwotCQl9CiAKIAkJbXNsZWVwKDEwKTsKIAkJc2hfaGRtaV9jb25maWd1cmUoaGRtaSk7CkBAIC0xMTkxLDcgKzExODQsNiBAQAogCQlmYl9zZXRfc3VzcGVuZChoZG1pLT5pbmZvLCAxKTsKIAogCQljb25zb2xlX3VubG9jaygpOwotCQlwbV9ydW50aW1lX3B1dChoZG1pLT5kZXYpOwogCX0KIAogb3V0OgpAQCAtMTMxMiw3ICsxMzA0LDcgQEAKIAlJTklUX0RFTEFZRURfV09SSygmaGRtaS0+ZWRpZF93b3JrLCBzaF9oZG1pX2VkaWRfd29ya19mbik7CiAKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKLQlwbV9ydW50aW1lX3Jlc3VtZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOwogCiAJLyogUHJvZHVjdCBhbmQgcmV2aXNpb24gSURzIGFyZSAwIGluIHNoLW1vYmlsZSB2ZXJzaW9uICovCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRldGVjdGVkIEhETUkgY29udHJvbGxlciAweCV4OjB4JXhcbiIsCkBAIC0xMzQwLDcgKzEzMzIsNyBAQAogZWNvZGVjOgogCWZyZWVfaXJxKGlycSwgaGRtaSk7CiBlcmVxaXJxOgotCXBtX3J1bnRpbWVfc3VzcGVuZCgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dCgmcGRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAJaW91bm1hcChoZG1pLT5iYXNlKTsKIGVtYXA6CkBAIC0xMzc3LDcgKzEzNjksNyBAQAogCWZyZWVfaXJxKGlycSwgaGRtaSk7CiAJLyogV2FpdCBmb3IgYWxyZWFkeSBzY2hlZHVsZWQgd29yayAqLwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaGRtaS0+ZWRpZF93b3JrKTsKLQlwbV9ydW50aW1lX3N1c3BlbmQoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9wdXQoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogCWNsa19kaXNhYmxlKGhkbWktPmhkbWlfY2xrKTsKIAljbGtfcHV0KGhkbWktPmhkbWlfY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggNDA0YzAzYi4uMDE5ZGJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgdG1wOwogCWludCBicHAgPSAwOwogCXVuc2lnbmVkIGxvbmcgbGRkZHNyOwotCWludCBrLCBtOworCWludCBrLCBtLCByZXQ7CiAKIAkvKiBlbmFibGUgY2xvY2tzIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGhhcmR3YXJlICovCiAJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUocHJpdi0+Y2gpOyBrKyspIHsKQEAgLTU0MCw3ICs1NDAsNyBAQAogCiAJCWJvYXJkX2NmZyA9ICZjaC0+Y2ZnLmJvYXJkX2NmZzsKIAkJaWYgKGJvYXJkX2NmZy0+c2V0dXBfc3lzKSB7Ci0JCQlpbnQgcmV0ID0gYm9hcmRfY2ZnLT5zZXR1cF9zeXMoYm9hcmRfY2ZnLT5ib2FyZF9kYXRhLAorCQkJcmV0ID0gYm9hcmRfY2ZnLT5zZXR1cF9zeXMoYm9hcmRfY2ZnLT5ib2FyZF9kYXRhLAogCQkJCQkJY2gsICZzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCmluZGV4IDUzYjJjNWEuLjMwNWM5NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmdhMTZmYi5jCkBAIC0xMjY1LDkgKzEyNjUsMTEgQEAKIAogc3RhdGljIHZvaWQgdmdhMTZmYl9kZXN0cm95KHN0cnVjdCBmYl9pbmZvICppbmZvKQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihpbmZvLT5kZXZpY2UsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CiAJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIAkvKiBYWFggdW5zaGFyZSBWR0EgcmVnaW9ucyAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jIGIvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCmluZGV4IGEyMDIxOGMuLmJlYWM1MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYworKysgYi9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMKQEAgLTM5NSwxMCArMzk1LDkgQEAKIAlzcGluX2xvY2tfaW5pdCgmaW5mby0+ZGlydHlfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmluZm8tPnJlc2l6ZV9sb2NrKTsKIAotCWluZm8tPmZiID0gdm1hbGxvYyhmYl9zaXplKTsKKwlpbmZvLT5mYiA9IHZ6YWxsb2MoZmJfc2l6ZSk7CiAJaWYgKGluZm8tPmZiID09IE5VTEwpCiAJCWdvdG8gZXJyb3Jfbm9tZW07Ci0JbWVtc2V0KGluZm8tPmZiLCAwLCBmYl9zaXplKTsKIAogCWluZm8tPm5yX3BhZ2VzID0gKGZiX3NpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvS2NvbmZpZyBiL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCmluZGV4IDAwZDYxNWQuLjk3OWQ2ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9LY29uZmlnCkBAIC00Miw3ICs0Miw3IEBACiAKIGNvbmZpZyBXMV9NQVNURVJfRFMxV00KIAl0cmlzdGF0ZSAiTWF4aW0gRFMxV00gMS13aXJlIGJ1c21hc3RlciIKLQlkZXBlbmRzIG9uIFcxCisJZGVwZW5kcyBvbiBXMSAmJiBHRU5FUklDX0hBUkRJUlFTCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIERTMVdNIDEtd2lyZSBkcml2ZXIsIHN1Y2ggYXMgdGhhdAogCSAgaW4gSFAgaVBBUSBkZXZpY2VzIGxpa2UgaDV4eHgsIGgyMjAwLCBhbmQgQVNJQzMtYmFzZWQgbGlrZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwppbmRleCAzZmY4MjJiLi4zMGRmODVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMuYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwpAQCAtMzk1LDkgKzM5NSw5IEBACiBzdGF0aWMgdm9pZCB4ZW5faXJxX2luaXQodW5zaWduZWQgaXJxKQogewogCXN0cnVjdCBpcnFfaW5mbyAqaW5mbzsKKyNpZmRlZiBDT05GSUdfU01QCiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAotI2lmZGVmIENPTkZJR19TTVAKIAkvKiBCeSBkZWZhdWx0IGFsbCBldmVudCBjaGFubmVscyBub3RpZnkgQ1BVIzAuICovCiAJY3B1bWFza19jb3B5KGRlc2MtPmlycV9kYXRhLmFmZmluaXR5LCBjcHVtYXNrX29mKDApKTsKICNlbmRpZgpAQCAtNjI2LDYgKzYyNiw5IEBACiAgKgogICogTm90ZTogV2UgZG9uJ3QgYXNzaWduIGFuIGV2ZW50IGNoYW5uZWwgdW50aWwgdGhlIGlycSBhY3R1YWxseSBzdGFydGVkCiAgKiB1cC4gIFJldHVybiBhbiBleGlzdGluZyBpcnEgaWYgd2UndmUgYWxyZWFkeSBnb3Qgb25lIGZvciB0aGUgZ3NpLgorICoKKyAqIFNoYXJlYWJsZSBpbXBsaWVzIGxldmVsIHRyaWdnZXJlZCwgbm90IHNoYXJlYWJsZSBpbXBsaWVzIGVkZ2UKKyAqIHRyaWdnZXJlZCBoZXJlLgogICovCiBpbnQgeGVuX2JpbmRfcGlycV9nc2lfdG9faXJxKHVuc2lnbmVkIGdzaSwKIAkJCSAgICAgdW5zaWduZWQgcGlycSwgaW50IHNoYXJlYWJsZSwgY2hhciAqbmFtZSkKQEAgLTY2NCwxNiArNjY3LDEzIEBACiAKIAlwaXJxX3F1ZXJ5X3VubWFzayhpcnEpOwogCS8qIFdlIHRyeSB0byB1c2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2VtYW50aWMgZm9yIHRoZQotCSAqIHR5cGUgb2YgaW50ZXJydXB0OiBpZiB0aGUgaW50ZXJydXB0IGRvZXNuJ3QgbmVlZCBhbiBlb2kKLQkgKiAocGlycV9uZWVkc19lb2kgcmV0dXJucyBmYWxzZSksIHdlIHRyZWF0IGl0IGxpa2UgYW4gZWRnZQotCSAqIHRyaWdnZXJlZCBpbnRlcnJ1cHQgc28gd2UgdXNlIGhhbmRsZV9lZGdlX2lycS4KLQkgKiBBcyBhIG1hdHRlciBvZiBmYWN0IHRoaXMgb25seSBoYXBwZW5zIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcKLQkgKiBwaHlzaWNhbCBpbnRlcnJ1cHQgaXMgZWRnZSB0cmlnZ2VyZWQgb3IgYW4gbXNpLgorCSAqIHR5cGUgb2YgaW50ZXJydXB0OiBpZiB0aGUgaW50ZXJydXB0IGlzIGFuIGVkZ2UgdHJpZ2dlcmVkCisJICogaW50ZXJydXB0IHdlIHVzZSBoYW5kbGVfZWRnZV9pcnEuCiAJICoKLQkgKiBPbiB0aGUgb3RoZXIgaGFuZCBpZiB0aGUgaW50ZXJydXB0IG5lZWRzIGFuIGVvaSAocGlycV9uZWVkc19lb2kKLQkgKiByZXR1cm5zIHRydWUpIHdlIHRyZWF0IGl0IGxpa2UgYSBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0IHNvIHdlCi0JICogdXNlIGhhbmRsZV9mYXN0ZW9pX2lycSBsaWtlIHRoZSBuYXRpdmUgY29kZSBkb2VzIGZvciB0aGlzIGtpbmQgb2YKKwkgKiBPbiB0aGUgb3RoZXIgaGFuZCBpZiB0aGUgaW50ZXJydXB0IGlzIGxldmVsIHRyaWdnZXJlZCB3ZSB1c2UKKwkgKiBoYW5kbGVfZmFzdGVvaV9pcnEgbGlrZSB0aGUgbmF0aXZlIGNvZGUgZG9lcyBmb3IgdGhpcyBraW5kIG9mCiAJICogaW50ZXJydXB0cy4KKwkgKgogCSAqIERlcGVuZGluZyBvbiB0aGUgWGVuIHZlcnNpb24sIHBpcnFfbmVlZHNfZW9pIG1pZ2h0IHJldHVybiB0cnVlCiAJICogbm90IG9ubHkgZm9yIGxldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIGJ1dCBmb3IgZWRnZSB0cmlnZ2VyZWQKIAkgKiBpbnRlcnJ1cHRzIHRvby4gSW4gYW55IGNhc2UgWGVuIGFsd2F5cyBob25vcnMgdGhlIGVvaSBtZWNoYW5pc20sCkBAIC02ODEsNyArNjgxLDcgQEAKIAkgKiBoYXNuJ3QgcmVjZWl2ZWQgYW4gZW9pIHlldC4gVGhlcmVmb3JlIHVzaW5nIHRoZSBmYXN0ZW9pIGhhbmRsZXIKIAkgKiBpcyB0aGUgcmlnaHQgY2hvaWNlIGVpdGhlciB3YXkuCiAJICovCi0JaWYgKHBpcnFfbmVlZHNfZW9pKGlycSkpCisJaWYgKHNoYXJlYWJsZSkKIAkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmeGVuX3BpcnFfY2hpcCwKIAkJCQloYW5kbGVfZmFzdGVvaV9pcnEsIG5hbWUpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3N3aW90bGIteGVuLmMgYi9kcml2ZXJzL3hlbi9zd2lvdGxiLXhlbi5jCmluZGV4IDY1ZWEyMWEuLjZlOGMxNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3N3aW90bGIteGVuLmMKKysrIGIvZHJpdmVycy94ZW4vc3dpb3RsYi14ZW4uYwpAQCAtMTQ3LDkgKzE0NywxNSBAQAogewogCXVuc2lnbmVkIGxvbmcgYnl0ZXM7CiAJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgbnJfdGJsOwogCi0JeGVuX2lvX3RsYl9uc2xhYnMgPSAoNjQgKiAxMDI0ICogMTAyNCA+PiBJT19UTEJfU0hJRlQpOwotCXhlbl9pb190bGJfbnNsYWJzID0gQUxJR04oeGVuX2lvX3RsYl9uc2xhYnMsIElPX1RMQl9TRUdTSVpFKTsKKwlucl90YmwgPSBzd2lvbHRiX25yX3RibCgpOworCWlmIChucl90YmwpCisJCXhlbl9pb190bGJfbnNsYWJzID0gbnJfdGJsOworCWVsc2UgeworCQl4ZW5faW9fdGxiX25zbGFicyA9ICg2NCAqIDEwMjQgKiAxMDI0ID4+IElPX1RMQl9TSElGVCk7CisJCXhlbl9pb190bGJfbnNsYWJzID0gQUxJR04oeGVuX2lvX3RsYl9uc2xhYnMsIElPX1RMQl9TRUdTSVpFKTsKKwl9CiAKIAlieXRlcyA9IHhlbl9pb190bGJfbnNsYWJzIDw8IElPX1RMQl9TSElGVDsKIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpci5jIGIvZnMvYWZzL2Rpci5jCmluZGV4IDIwYzEwNmYuLjFiMGIxOTUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9kaXIuYworKysgYi9mcy9hZnMvZGlyLmMKQEAgLTU4NCwxMSArNTg0LDExIEBACiAKIHN1Y2Nlc3M6CiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7Ci0JX2xlYXZlKCIgPSAwIHsgdm49JXUgdT0ldSB9IC0+IHsgaW5vPSVsdSB2PSVsbHUgfSIsCisJX2xlYXZlKCIgPSAwIHsgdm49JXUgdT0ldSB9IC0+IHsgaW5vPSVsdSB2PSV1IH0iLAogCSAgICAgICBmaWQudm5vZGUsCiAJICAgICAgIGZpZC51bmlxdWUsCiAJICAgICAgIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGVudHJ5LT5kX2lub2RlLT5pX3ZlcnNpb24pOworCSAgICAgICBkZW50cnktPmRfaW5vZGUtPmlfZ2VuZXJhdGlvbik7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTY3MSwxMCArNjcxLDEwIEBACiAJCSAqIGJlZW4gZGVsZXRlZCBhbmQgcmVwbGFjZWQsIGFuZCB0aGUgb3JpZ2luYWwgdm5vZGUgSUQgaGFzCiAJCSAqIGJlZW4gcmV1c2VkICovCiAJCWlmIChmaWQudW5pcXVlICE9IHZub2RlLT5maWQudW5pcXVlKSB7Ci0JCQlfZGVidWcoIiVzOiBmaWxlIGRlbGV0ZWQgKHVxICV1IC0+ICV1IEk6JWxsdSkiLAorCQkJX2RlYnVnKCIlczogZmlsZSBkZWxldGVkICh1cSAldSAtPiAldSBJOiV1KSIsCiAJCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZmlkLnVuaXF1ZSwKIAkJCSAgICAgICB2bm9kZS0+ZmlkLnVuaXF1ZSwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRlbnRyeS0+ZF9pbm9kZS0+aV92ZXJzaW9uKTsKKwkJCSAgICAgICBkZW50cnktPmRfaW5vZGUtPmlfZ2VuZXJhdGlvbik7CiAJCQlzcGluX2xvY2soJnZub2RlLT5sb2NrKTsKIAkJCXNldF9iaXQoQUZTX1ZOT0RFX0RFTEVURUQsICZ2bm9kZS0+ZmxhZ3MpOwogCQkJc3Bpbl91bmxvY2soJnZub2RlLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9mc2NsaWVudC5jIGIvZnMvYWZzL2ZzY2xpZW50LmMKaW5kZXggNGJkMDIxOC4uMzQ2ZTMyOCAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZzY2xpZW50LmMKKysrIGIvZnMvYWZzL2ZzY2xpZW50LmMKQEAgLTg5LDcgKzg5LDcgQEAKIAkJCWlfc2l6ZV93cml0ZSgmdm5vZGUtPnZmc19pbm9kZSwgc2l6ZSk7CiAJCQl2bm9kZS0+dmZzX2lub2RlLmlfdWlkID0gc3RhdHVzLT5vd25lcjsKIAkJCXZub2RlLT52ZnNfaW5vZGUuaV9naWQgPSBzdGF0dXMtPmdyb3VwOwotCQkJdm5vZGUtPnZmc19pbm9kZS5pX3ZlcnNpb24gPSB2bm9kZS0+ZmlkLnVuaXF1ZTsKKwkJCXZub2RlLT52ZnNfaW5vZGUuaV9nZW5lcmF0aW9uID0gdm5vZGUtPmZpZC51bmlxdWU7CiAJCQl2bm9kZS0+dmZzX2lub2RlLmlfbmxpbmsgPSBzdGF0dXMtPm5saW5rOwogCiAJCQltb2RlID0gdm5vZGUtPnZmc19pbm9kZS5pX21vZGU7CkBAIC0xMDIsNiArMTAyLDcgQEAKIAkJdm5vZGUtPnZmc19pbm9kZS5pX2N0aW1lLnR2X3NlYwk9IHN0YXR1cy0+bXRpbWVfc2VydmVyOwogCQl2bm9kZS0+dmZzX2lub2RlLmlfbXRpbWUJPSB2bm9kZS0+dmZzX2lub2RlLmlfY3RpbWU7CiAJCXZub2RlLT52ZnNfaW5vZGUuaV9hdGltZQk9IHZub2RlLT52ZnNfaW5vZGUuaV9jdGltZTsKKwkJdm5vZGUtPnZmc19pbm9kZS5pX3ZlcnNpb24JPSBkYXRhX3ZlcnNpb247CiAJfQogCiAJZXhwZWN0ZWRfdmVyc2lvbiA9IHN0YXR1cy0+ZGF0YV92ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCBkYjY2YzUyLi4wZmRhYjZlIDEwMDY0NAotLS0gYS9mcy9hZnMvaW5vZGUuYworKysgYi9mcy9hZnMvaW5vZGUuYwpAQCAtNzUsNyArNzUsOCBAQAogCWlub2RlLT5pX2N0aW1lLnR2X25zZWMJPSAwOwogCWlub2RlLT5pX2F0aW1lCQk9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWU7CiAJaW5vZGUtPmlfYmxvY2tzCQk9IDA7Ci0JaW5vZGUtPmlfdmVyc2lvbgk9IHZub2RlLT5maWQudW5pcXVlOworCWlub2RlLT5pX2dlbmVyYXRpb24JPSB2bm9kZS0+ZmlkLnVuaXF1ZTsKKwlpbm9kZS0+aV92ZXJzaW9uCT0gdm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb247CiAJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMJPSAmYWZzX2ZzX2FvcHM7CiAKIAkvKiBjaGVjayB0byBzZWUgd2hldGhlciBhIHN5bWJvbGljIGxpbmsgaXMgcmVhbGx5IGEgbW91bnRwb2ludCAqLwpAQCAtMTAwLDcgKzEwMSw3IEBACiAJc3RydWN0IGFmc19pZ2V0X2RhdGEgKmRhdGEgPSBvcGFxdWU7CiAKIAlyZXR1cm4gaW5vZGUtPmlfaW5vID09IGRhdGEtPmZpZC52bm9kZSAmJgotCQlpbm9kZS0+aV92ZXJzaW9uID09IGRhdGEtPmZpZC51bmlxdWU7CisJCWlub2RlLT5pX2dlbmVyYXRpb24gPT0gZGF0YS0+ZmlkLnVuaXF1ZTsKIH0KIAogLyoKQEAgLTEyMiw3ICsxMjMsNyBAQAogCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0koaW5vZGUpOwogCiAJaW5vZGUtPmlfaW5vID0gZGF0YS0+ZmlkLnZub2RlOwotCWlub2RlLT5pX3ZlcnNpb24gPSBkYXRhLT5maWQudW5pcXVlOworCWlub2RlLT5pX2dlbmVyYXRpb24gPSBkYXRhLT5maWQudW5pcXVlOwogCXZub2RlLT5maWQgPSBkYXRhLT5maWQ7CiAJdm5vZGUtPnZvbHVtZSA9IGRhdGEtPnZvbHVtZTsKIApAQCAtMzgwLDggKzM4MSw3IEBACiAKIAlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAotCV9lbnRlcigieyBpbm89JWx1IHY9JWxsdSB9IiwgaW5vZGUtPmlfaW5vLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLT5pX3ZlcnNpb24pOworCV9lbnRlcigieyBpbm89JWx1IHY9JXUgfSIsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfZ2VuZXJhdGlvbik7CiAKIAlnZW5lcmljX2ZpbGxhdHRyKGlub2RlLCBzdGF0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9zdXBlci5jIGIvZnMvYWZzL3N1cGVyLmMKaW5kZXggZmIyNDBlOC4uMzU2ZGNmMCAxMDA2NDQKLS0tIGEvZnMvYWZzL3N1cGVyLmMKKysrIGIvZnMvYWZzL3N1cGVyLmMKQEAgLTMxLDggKzMxLDggQEAKIHN0YXRpYyB2b2lkIGFmc19pX2luaXRfb25jZSh2b2lkICpmb28pOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmFmc19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAkJICAgICAgaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSk7CitzdGF0aWMgdm9pZCBhZnNfa2lsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmFmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKLXN0YXRpYyB2b2lkIGFmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBzdGF0aWMgdm9pZCBhZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHN0YXRpYyBpbnQgYWZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpOwogCkBAIC00MCw3ICs0MCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZnMiLAogCS5tb3VudAkJPSBhZnNfbW91bnQsCi0JLmtpbGxfc2IJPSBraWxsX2Fub25fc3VwZXIsCisJLmtpbGxfc2IJPSBhZnNfa2lsbF9zdXBlciwKIAkuZnNfZmxhZ3MJPSAwLAogfTsKIApAQCAtNTAsNyArNTAsNiBAQAogCS5kcm9wX2lub2RlCT0gYWZzX2Ryb3BfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBhZnNfZGVzdHJveV9pbm9kZSwKIAkuZXZpY3RfaW5vZGUJPSBhZnNfZXZpY3RfaW5vZGUsCi0JLnB1dF9zdXBlcgk9IGFmc19wdXRfc3VwZXIsCiAJLnNob3dfb3B0aW9ucwk9IGdlbmVyaWNfc2hvd19vcHRpb25zLAogfTsKIApAQCAtMjgyLDE5ICsyODEsMjUgQEAKICAqLwogc3RhdGljIGludCBhZnNfdGVzdF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBhZnNfbW91bnRfcGFyYW1zICpwYXJhbXMgPSBkYXRhOworCXN0cnVjdCBhZnNfc3VwZXJfaW5mbyAqYXMxID0gZGF0YTsKIAlzdHJ1Y3QgYWZzX3N1cGVyX2luZm8gKmFzID0gc2ItPnNfZnNfaW5mbzsKIAotCXJldHVybiBhcy0+dm9sdW1lID09IHBhcmFtcy0+dm9sdW1lOworCXJldHVybiBhcy0+dm9sdW1lID09IGFzMS0+dm9sdW1lOworfQorCitzdGF0aWMgaW50IGFmc19zZXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSkKK3sKKwlzYi0+c19mc19pbmZvID0gZGF0YTsKKwlyZXR1cm4gc2V0X2Fub25fc3VwZXIoc2IsIE5VTEwpOwogfQogCiAvKgogICogZmlsbCBpbiB0aGUgc3VwZXJibG9jawogICovCi1zdGF0aWMgaW50IGFmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGFmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgIHN0cnVjdCBhZnNfbW91bnRfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IGFmc19tb3VudF9wYXJhbXMgKnBhcmFtcyA9IGRhdGE7Ci0Jc3RydWN0IGFmc19zdXBlcl9pbmZvICphcyA9IE5VTEw7CisJc3RydWN0IGFmc19zdXBlcl9pbmZvICphcyA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IGFmc19maWQgZmlkOwogCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBOVUxMOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwpAQCAtMzAyLDIzICszMDcsMTMgQEAKIAogCV9lbnRlcigiIik7CiAKLQkvKiBhbGxvY2F0ZSBhIHN1cGVyYmxvY2sgaW5mbyByZWNvcmQgKi8KLQlhcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZnNfc3VwZXJfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghYXMpIHsKLQkJX2xlYXZlKCIgPSAtRU5PTUVNIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWFmc19nZXRfdm9sdW1lKHBhcmFtcy0+dm9sdW1lKTsKLQlhcy0+dm9sdW1lID0gcGFyYW1zLT52b2x1bWU7Ci0KIAkvKiBmaWxsIGluIHRoZSBzdXBlcmJsb2NrICovCiAJc2ItPnNfYmxvY2tzaXplCQk9IFBBR0VfQ0FDSEVfU0laRTsKIAlzYi0+c19ibG9ja3NpemVfYml0cwk9IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJc2ItPnNfbWFnaWMJCT0gQUZTX0ZTX01BR0lDOwogCXNiLT5zX29wCQk9ICZhZnNfc3VwZXJfb3BzOwotCXNiLT5zX2ZzX2luZm8JCT0gYXM7CiAJc2ItPnNfYmRpCQk9ICZhcy0+dm9sdW1lLT5iZGk7CisJc3RybGNweShzYi0+c19pZCwgYXMtPnZvbHVtZS0+dmxvY2F0aW9uLT52bGRiLm5hbWUsIHNpemVvZihzYi0+c19pZCkpOwogCiAJLyogYWxsb2NhdGUgdGhlIHJvb3QgaW5vZGUgYW5kIGRlbnRyeSAqLwogCWZpZC52aWQJCT0gYXMtPnZvbHVtZS0+dmlkOwpAQCAtMzI2LDcgKzMyMSw3IEBACiAJZmlkLnVuaXF1ZQk9IDE7CiAJaW5vZGUgPSBhZnNfaWdldChzYiwgcGFyYW1zLT5rZXksICZmaWQsIE5VTEwsIE5VTEwpOwogCWlmIChJU19FUlIoaW5vZGUpKQotCQlnb3RvIGVycm9yX2lub2RlOworCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7CiAKIAlpZiAocGFyYW1zLT5hdXRvY2VsbCkKIAkJc2V0X2JpdChBRlNfVk5PREVfQVVUT0NFTEwsICZBRlNfRlNfSShpbm9kZSktPmZsYWdzKTsKQEAgLTM0MiwxNiArMzM3LDggQEAKIAlfbGVhdmUoIiA9IDAiKTsKIAlyZXR1cm4gMDsKIAotZXJyb3JfaW5vZGU6Ci0JcmV0ID0gUFRSX0VSUihpbm9kZSk7Ci0JaW5vZGUgPSBOVUxMOwogZXJyb3I6CiAJaXB1dChpbm9kZSk7Ci0JYWZzX3B1dF92b2x1bWUoYXMtPnZvbHVtZSk7Ci0Ja2ZyZWUoYXMpOwotCi0Jc2ItPnNfZnNfaW5mbyA9IE5VTEw7Ci0KIAlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzY3LDYgKzM1NCw3IEBACiAJc3RydWN0IGFmc192b2x1bWUgKnZvbDsKIAlzdHJ1Y3Qga2V5ICprZXk7CiAJY2hhciAqbmV3X29wdHMgPSBrc3RyZHVwKG9wdGlvbnMsIEdGUF9LRVJORUwpOworCXN0cnVjdCBhZnNfc3VwZXJfaW5mbyAqYXM7CiAJaW50IHJldDsKIAogCV9lbnRlcigiLCwlcywlcCIsIGRldl9uYW1lLCBvcHRpb25zKTsKQEAgLTM5OSwxMiArMzg3LDIyIEBACiAJCXJldCA9IFBUUl9FUlIodm9sKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JcGFyYW1zLnZvbHVtZSA9IHZvbDsKKworCS8qIGFsbG9jYXRlIGEgc3VwZXJibG9jayBpbmZvIHJlY29yZCAqLworCWFzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFmc19zdXBlcl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlhZnNfcHV0X3ZvbHVtZSh2b2wpOworCQlnb3RvIGVycm9yOworCX0KKwlhcy0+dm9sdW1lID0gdm9sOwogCiAJLyogYWxsb2NhdGUgYSBkZXZpY2VsZXNzIHN1cGVyYmxvY2sgKi8KLQlzYiA9IHNnZXQoZnNfdHlwZSwgYWZzX3Rlc3Rfc3VwZXIsIHNldF9hbm9uX3N1cGVyLCAmcGFyYW1zKTsKKwlzYiA9IHNnZXQoZnNfdHlwZSwgYWZzX3Rlc3Rfc3VwZXIsIGFmc19zZXRfc3VwZXIsIGFzKTsKIAlpZiAoSVNfRVJSKHNiKSkgewogCQlyZXQgPSBQVFJfRVJSKHNiKTsKKwkJYWZzX3B1dF92b2x1bWUodm9sKTsKKwkJa2ZyZWUoYXMpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNDIyLDE2ICs0MjAsMTYgQEAKIAl9IGVsc2UgewogCQlfZGVidWcoInJldXNlIik7CiAJCUFTU0VSVENNUChzYi0+c19mbGFncywgJiwgTVNfQUNUSVZFKTsKKwkJYWZzX3B1dF92b2x1bWUodm9sKTsKKwkJa2ZyZWUoYXMpOwogCX0KIAotCWFmc19wdXRfdm9sdW1lKHBhcmFtcy52b2x1bWUpOwogCWFmc19wdXRfY2VsbChwYXJhbXMuY2VsbCk7CiAJa2ZyZWUobmV3X29wdHMpOwogCV9sZWF2ZSgiID0gMCBbJXBdIiwgc2IpOwogCXJldHVybiBkZ2V0KHNiLT5zX3Jvb3QpOwogCiBlcnJvcjoKLQlhZnNfcHV0X3ZvbHVtZShwYXJhbXMudm9sdW1lKTsKIAlhZnNfcHV0X2NlbGwocGFyYW1zLmNlbGwpOwogCWtleV9wdXQocGFyYW1zLmtleSk7CiAJa2ZyZWUobmV3X29wdHMpOwpAQCAtNDM5LDE4ICs0MzcsMTIgQEAKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi0vKgotICogZmluaXNoIHRoZSB1bm1vdW50aW5nIHByb2Nlc3Mgb24gdGhlIHN1cGVyYmxvY2sKLSAqLwotc3RhdGljIHZvaWQgYWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorc3RhdGljIHZvaWQgYWZzX2tpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgYWZzX3N1cGVyX2luZm8gKmFzID0gc2ItPnNfZnNfaW5mbzsKLQotCV9lbnRlcigiIik7Ci0KKwlraWxsX2Fub25fc3VwZXIoc2IpOwogCWFmc19wdXRfdm9sdW1lKGFzLT52b2x1bWUpOwotCi0JX2xlYXZlKCIiKTsKKwlrZnJlZShhcyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9hZnMvd3JpdGUuYyBiL2ZzL2Fmcy93cml0ZS5jCmluZGV4IDc4OWIzYWYuLmI4MDYyODUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy93cml0ZS5jCisrKyBiL2ZzL2Fmcy93cml0ZS5jCkBAIC04NCwyMyArODQsMjEgQEAKICAqIHBhcnRseSBvciB3aG9sbHkgZmlsbCBhIHBhZ2UgdGhhdCdzIHVuZGVyIHByZXBhcmF0aW9uIGZvciB3cml0aW5nCiAgKi8KIHN0YXRpYyBpbnQgYWZzX2ZpbGxfcGFnZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGtleSAqa2V5LAotCQkJIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgc3RydWN0IHBhZ2UgKnBhZ2UpCisJCQkgbG9mZl90IHBvcywgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJbG9mZl90IGlfc2l6ZTsKLQl1bnNpZ25lZCBlb2Y7CiAJaW50IHJldDsKKwlpbnQgbGVuOwogCi0JX2VudGVyKCIsLCVsbHUsJXUiLCAodW5zaWduZWQgbG9uZyBsb25nKXBvcywgbGVuKTsKLQotCUFTU0VSVENNUChsZW4sIDw9LCBQQUdFX0NBQ0hFX1NJWkUpOworCV9lbnRlcigiLCwlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylwb3MpOwogCiAJaV9zaXplID0gaV9zaXplX3JlYWQoJnZub2RlLT52ZnNfaW5vZGUpOwotCWlmIChwb3MgKyBsZW4gPiBpX3NpemUpCi0JCWVvZiA9IGlfc2l6ZTsKKwlpZiAocG9zICsgUEFHRV9DQUNIRV9TSVpFID4gaV9zaXplKQorCQlsZW4gPSBpX3NpemUgLSBwb3M7CiAJZWxzZQotCQllb2YgPSBQQUdFX0NBQ0hFX1NJWkU7CisJCWxlbiA9IFBBR0VfQ0FDSEVfU0laRTsKIAotCXJldCA9IGFmc192bm9kZV9mZXRjaF9kYXRhKHZub2RlLCBrZXksIDAsIGVvZiwgcGFnZSk7CisJcmV0ID0gYWZzX3Zub2RlX2ZldGNoX2RhdGEodm5vZGUsIGtleSwgcG9zLCBsZW4sIHBhZ2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCWlmIChyZXQgPT0gLUVOT0VOVCkgewogCQkJX2RlYnVnKCJnb3QgTk9FTlQgZnJvbSBzZXJ2ZXIiCkBAIC0xNTMsOSArMTUxLDggQEAKIAkqcGFnZXAgPSBwYWdlOwogCS8qIHBhZ2Ugd29uJ3QgbGVhayBpbiBlcnJvciBjYXNlOiBpdCBldmVudHVhbGx5IGdldHMgY2xlYW5lZCBvZmYgTFJVICovCiAKLQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewotCQlfZGVidWcoIm5vdCB1cCB0byBkYXRlIik7Ci0JCXJldCA9IGFmc19maWxsX3BhZ2Uodm5vZGUsIGtleSwgcG9zLCBsZW4sIHBhZ2UpOworCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpICYmIGxlbiAhPSBQQUdFX0NBQ0hFX1NJWkUpIHsKKwkJcmV0ID0gYWZzX2ZpbGxfcGFnZSh2bm9kZSwga2V5LCBpbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZULCBwYWdlKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWtmcmVlKGNhbmRpZGF0ZSk7CiAJCQlfbGVhdmUoIiA9ICVkIFtwcmVwXSIsIHJldCk7CmRpZmYgLS1naXQgYS9mcy9iYWRfaW5vZGUuYyBiL2ZzL2JhZF9pbm9kZS5jCmluZGV4IDlhZDIzNjkuLmJmY2IxOGYgMTAwNjQ0Ci0tLSBhL2ZzL2JhZF9pbm9kZS5jCisrKyBiL2ZzL2JhZF9pbm9kZS5jCkBAIC0yMzEsOSArMjMxLDYgQEAKIAogc3RhdGljIGludCBiYWRfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewotCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQotCQlyZXR1cm4gLUVDSElMRDsKLQogCXJldHVybiAtRUlPOwogfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9idHJmc19pbm9kZS5oIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaAppbmRleCA5M2IxYWE5Li41MmQ3ZWNhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9idHJmc19pbm9kZS5oCisrKyBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKQEAgLTEyMSw5ICsxMjEsNiBAQAogCSAqLwogCXU2NCBpbmRleF9jbnQ7CiAKLQkvKiB0aGUgc3RhcnQgb2YgYmxvY2sgZ3JvdXAgcHJlZmVycmVkIGZvciBhbGxvY2F0aW9ucy4gKi8KLQl1NjQgYmxvY2tfZ3JvdXA7Ci0KIAkvKiB0aGUgZnN5bmMgbG9nIGhhcyBzb21lIGNvcm5lciBjYXNlcyB0aGF0IG1lYW4gd2UgaGF2ZSB0byBjaGVjawogCSAqIGRpcmVjdG9yaWVzIHRvIHNlZSBpZiBhbnkgdW5saW5rcyBoYXZlIGJlZW4gZG9uZSBiZWZvcmUKIAkgKiB0aGUgZGlyZWN0b3J5IHdhcyBsb2dnZWQuICBTZWUgdHJlZS1sb2cuYyBmb3IgYWxsIHRoZQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuYyBiL2ZzL2J0cmZzL2N0cmVlLmMKaW5kZXggYjBlMThkOTguLjJlNjY3ODYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmMKKysrIGIvZnMvYnRyZnMvY3RyZWUuYwpAQCAtNDMsOCArNDMsNiBAQAogewogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCXBhdGggPSBrbWVtX2NhY2hlX3phbGxvYyhidHJmc19wYXRoX2NhY2hlcCwgR0ZQX05PRlMpOwotCWlmIChwYXRoKQotCQlwYXRoLT5yZWFkYSA9IDE7CiAJcmV0dXJuIHBhdGg7CiB9CiAKQEAgLTEyMjQsMTEgKzEyMjIsMTMgQEAKIAl1NjQgc2VhcmNoOwogCXU2NCB0YXJnZXQ7CiAJdTY0IG5yZWFkID0gMDsKKwl1NjQgZ2VuOwogCWludCBkaXJlY3Rpb24gPSBwYXRoLT5yZWFkYTsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWI7CiAJdTMyIG5yOwogCXUzMiBibG9ja3NpemU7CiAJdTMyIG5zY2FuID0gMDsKKwlib29sIG1hcCA9IHRydWU7CiAKIAlpZiAobGV2ZWwgIT0gMSkKIAkJcmV0dXJuOwpAQCAtMTI1MCw3ICsxMjUwLDE5IEBACiAKIAlucml0ZW1zID0gYnRyZnNfaGVhZGVyX25yaXRlbXMobm9kZSk7CiAJbnIgPSBzbG90OworCWlmIChub2RlLT5tYXBfdG9rZW4gfHwgcGF0aC0+c2tpcF9sb2NraW5nKQorCQltYXAgPSBmYWxzZTsKKwogCXdoaWxlICgxKSB7CisJCWlmIChtYXAgJiYgIW5vZGUtPm1hcF90b2tlbikgeworCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBidHJmc19ub2RlX2tleV9wdHJfb2Zmc2V0KG5yKTsKKwkJCW1hcF9wcml2YXRlX2V4dGVudF9idWZmZXIobm9kZSwgb2Zmc2V0LAorCQkJCQkJICBzaXplb2Yoc3RydWN0IGJ0cmZzX2tleV9wdHIpLAorCQkJCQkJICAmbm9kZS0+bWFwX3Rva2VuLAorCQkJCQkJICAmbm9kZS0+a2FkZHIsCisJCQkJCQkgICZub2RlLT5tYXBfc3RhcnQsCisJCQkJCQkgICZub2RlLT5tYXBfbGVuLCBLTV9VU0VSMSk7CisJCX0KIAkJaWYgKGRpcmVjdGlvbiA8IDApIHsKIAkJCWlmIChuciA9PSAwKQogCQkJCWJyZWFrOwpAQCAtMTI2OCwxNCArMTI4MCwyMyBAQAogCQlzZWFyY2ggPSBidHJmc19ub2RlX2Jsb2NrcHRyKG5vZGUsIG5yKTsKIAkJaWYgKChzZWFyY2ggPD0gdGFyZ2V0ICYmIHRhcmdldCAtIHNlYXJjaCA8PSA2NTUzNikgfHwKIAkJICAgIChzZWFyY2ggPiB0YXJnZXQgJiYgc2VhcmNoIC0gdGFyZ2V0IDw9IDY1NTM2KSkgewotCQkJcmVhZGFoZWFkX3RyZWVfYmxvY2socm9vdCwgc2VhcmNoLCBibG9ja3NpemUsCi0JCQkJICAgICBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKG5vZGUsIG5yKSk7CisJCQlnZW4gPSBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKG5vZGUsIG5yKTsKKwkJCWlmIChtYXAgJiYgbm9kZS0+bWFwX3Rva2VuKSB7CisJCQkJdW5tYXBfZXh0ZW50X2J1ZmZlcihub2RlLCBub2RlLT5tYXBfdG9rZW4sCisJCQkJCQkgICAgS01fVVNFUjEpOworCQkJCW5vZGUtPm1hcF90b2tlbiA9IE5VTEw7CisJCQl9CisJCQlyZWFkYWhlYWRfdHJlZV9ibG9jayhyb290LCBzZWFyY2gsIGJsb2Nrc2l6ZSwgZ2VuKTsKIAkJCW5yZWFkICs9IGJsb2Nrc2l6ZTsKIAkJfQogCQluc2NhbisrOwogCQlpZiAoKG5yZWFkID4gNjU1MzYgfHwgbnNjYW4gPiAzMikpCiAJCQlicmVhazsKIAl9CisJaWYgKG1hcCAmJiBub2RlLT5tYXBfdG9rZW4pIHsKKwkJdW5tYXBfZXh0ZW50X2J1ZmZlcihub2RlLCBub2RlLT5tYXBfdG9rZW4sIEtNX1VTRVIxKTsKKwkJbm9kZS0+bWFwX3Rva2VuID0gTlVMTDsKKwl9CiB9CiAKIC8qCkBAIC0xNjQ4LDkgKzE2NjksNiBAQAogCQl9CiBjb3dfZG9uZToKIAkJQlVHX09OKCFjb3cgJiYgaW5zX2xlbik7Ci0JCWlmIChsZXZlbCAhPSBidHJmc19oZWFkZXJfbGV2ZWwoYikpCi0JCQlXQVJOX09OKDEpOwotCQlsZXZlbCA9IGJ0cmZzX2hlYWRlcl9sZXZlbChiKTsKIAogCQlwLT5ub2Rlc1tsZXZlbF0gPSBiOwogCQlpZiAoIXAtPnNraXBfbG9ja2luZykKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IDZjMDkzZmE5Li4zMDA2Mjg3IDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTkzMCw3ICs5MzAsNiBAQAogCSAqIGlzIHJlcXVpcmVkIGluc3RlYWQgb2YgdGhlIGZhc3RlciBzaG9ydCBmc3luYyBsb2cgY29tbWl0cwogCSAqLwogCXU2NCBsYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdDsKLQl1NjQgb3Blbl9pb2N0bF90cmFuczsKIAl1bnNpZ25lZCBsb25nIG1vdW50X29wdDoyMDsKIAl1bnNpZ25lZCBsb25nIGNvbXByZXNzX3R5cGU6NDsKIAl1NjQgbWF4X2lubGluZTsKQEAgLTk0Nyw3ICs5NDYsNiBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJc3RydWN0IGlub2RlICpidHJlZV9pbm9kZTsKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBiZGk7Ci0Jc3RydWN0IG11dGV4IHRyYW5zX211dGV4OwogCXN0cnVjdCBtdXRleCB0cmVlX2xvZ19tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggdHJhbnNhY3Rpb25fa3RocmVhZF9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggY2xlYW5lcl9tdXRleDsKQEAgLTk2OCw2ICs5NjYsMTMgQEAKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIHN1YnZvbF9zZW07CiAJc3RydWN0IHNyY3Vfc3RydWN0IHN1YnZvbF9zcmN1OwogCisJc3BpbmxvY2tfdCB0cmFuc19sb2NrOworCS8qCisJICogdGhlIHJlbG9jIG11dGV4IGdvZXMgd2l0aCB0aGUgdHJhbnMgbG9jaywgaXQgaXMgdGFrZW4KKwkgKiBkdXJpbmcgY29tbWl0IHRvIHByb3RlY3QgdXMgZnJvbSB0aGUgcmVsb2NhdGlvbiBjb2RlCisJICovCisJc3RydWN0IG11dGV4IHJlbG9jX211dGV4OworCiAJc3RydWN0IGxpc3RfaGVhZCB0cmFuc19saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgaGFzaGVyczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlYWRfcm9vdHM7CkBAIC05ODAsNiArOTg1LDcgQEAKIAlhdG9taWNfdCBhc3luY19zdWJtaXRfZHJhaW5pbmc7CiAJYXRvbWljX3QgbnJfYXN5bmNfYmlvczsKIAlhdG9taWNfdCBhc3luY19kZWxhbGxvY19wYWdlczsKKwlhdG9taWNfdCBvcGVuX2lvY3RsX3RyYW5zOwogCiAJLyoKIAkgKiB0aGlzIGlzIHVzZWQgYnkgdGhlIGJhbGFuY2luZyBjb2RlIHRvIHdhaXQgZm9yIGFsbCB0aGUgcGVuZGluZwpAQCAtMTA0NCw2ICsxMDUwLDcgQEAKIAlpbnQgY2xvc2luZzsKIAlpbnQgbG9nX3Jvb3RfcmVjb3ZlcmluZzsKIAlpbnQgZW5vc3BjX3VubGluazsKKwlpbnQgdHJhbnNfbm9fam9pbjsKIAogCXU2NCB0b3RhbF9waW5uZWQ7CiAKQEAgLTEwNjUsNyArMTA3Miw2IEBACiAJc3RydWN0IHJlbG9jX2NvbnRyb2wgKnJlbG9jX2N0bDsKIAogCXNwaW5sb2NrX3QgZGVsYWxsb2NfbG9jazsKLQlzcGlubG9ja190IG5ld190cmFuc19sb2NrOwogCXU2NCBkZWxhbGxvY19ieXRlczsKIAogCS8qIGRhdGFfYWxsb2NfY2x1c3RlciBpcyBvbmx5IHVzZWQgaW4gc3NkIG1vZGUgKi8KQEAgLTExNzIsNiArMTE3OCwxNCBAQAogCXUzMiB0eXBlOwogCiAJdTY0IGhpZ2hlc3Rfb2JqZWN0aWQ7CisKKwkvKiBidHJmc19yZWNvcmRfcm9vdF9pbl90cmFucyBpcyBhIG11bHRpLXN0ZXAgcHJvY2VzcywKKwkgKiBhbmQgaXQgY2FuIHJhY2Ugd2l0aCB0aGUgYmFsYW5jaW5nIGNvZGUuICAgQnV0IHRoZQorCSAqIHJhY2UgaXMgdmVyeSBzbWFsbCwgYW5kIG9ubHkgdGhlIGZpcnN0IHRpbWUgdGhlIHJvb3QKKwkgKiBpcyBhZGRlZCB0byBlYWNoIHRyYW5zYWN0aW9uLiAgU28gaW5fdHJhbnNfc2V0dXAKKwkgKiBpcyB1c2VkIHRvIHRlbGwgdXMgd2hlbiBtb3JlIGNoZWNrcyBhcmUgcmVxdWlyZWQKKwkgKi8KKwl1bnNpZ25lZCBsb25nIGluX3RyYW5zX3NldHVwOwogCWludCByZWZfY293czsKIAlpbnQgdHJhY2tfZGlydHk7CiAJaW50IGluX3JhZGl4OwpAQCAtMTE4MSw3ICsxMTk1LDYgQEAKIAlzdHJ1Y3QgYnRyZnNfa2V5IGRlZnJhZ19tYXg7CiAJaW50IGRlZnJhZ19ydW5uaW5nOwogCWNoYXIgKm5hbWU7Ci0JaW50IGluX3N5c2ZzOwogCiAJLyogdGhlIGRpcnR5IGxpc3QgaXMgb25seSB1c2VkIGJ5IG5vbi1yZWZlcmVuY2UgY291bnRlZCByb290cyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZGlydHlfbGlzdDsKQEAgLTEzNDAsNiArMTM1Myw3IEBACiAjZGVmaW5lIEJUUkZTX01PVU5UX1VTRVJfU1VCVk9MX1JNX0FMTE9XRUQgKDEgPDwgMTQpCiAjZGVmaW5lIEJUUkZTX01PVU5UX0VOT1NQQ19ERUJVRwkgKDEgPDwgMTUpCiAjZGVmaW5lIEJUUkZTX01PVU5UX0FVVE9fREVGUkFHCQkoMSA8PCAxNikKKyNkZWZpbmUgQlRSRlNfTU9VTlRfSU5PREVfTUFQX0NBQ0hFCSgxIDw8IDE3KQogCiAjZGVmaW5lIGJ0cmZzX2NsZWFyX29wdChvLCBvcHQpCQkoKG8pICY9IH5CVFJGU19NT1VOVF8jI29wdCkKICNkZWZpbmUgYnRyZnNfc2V0X29wdChvLCBvcHQpCQkoKG8pIHw9IEJUUkZTX01PVU5UXyMjb3B0KQpAQCAtMjIzOCw2ICsyMjUyLDkgQEAKIHZvaWQgYnRyZnNfYmxvY2tfcnN2X3JlbGVhc2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkgICAgIHN0cnVjdCBidHJmc19ibG9ja19yc3YgKmJsb2NrX3JzdiwKIAkJCSAgICAgdTY0IG51bV9ieXRlcyk7CitpbnQgYnRyZnNfdHJ1bmNhdGVfcmVzZXJ2ZV9tZXRhZGF0YShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJICAgIHN0cnVjdCBidHJmc19ibG9ja19yc3YgKnJzdik7CiBpbnQgYnRyZnNfc2V0X2Jsb2NrX2dyb3VwX3JvKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICBzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlKTsKIGludCBidHJmc19zZXRfYmxvY2tfZ3JvdXBfcncoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCkBAIC0yMzUwLDYgKzIzNjcsMTUgQEAKIAkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJc3RydWN0IGV4dGVudF9idWZmZXIgKm5vZGUsCiAJCQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcGFyZW50KTsKK3N0YXRpYyBpbmxpbmUgaW50IGJ0cmZzX2ZzX2Nsb3Npbmcoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8pCit7CisJLyoKKwkgKiBHZXQgc3luY2VkIHdpdGggY2xvc2VfY3RyZWUoKQorCSAqLworCXNtcF9tYigpOworCXJldHVybiBmc19pbmZvLT5jbG9zaW5nOworfQorCiAvKiByb290LWl0ZW0uYyAqLwogaW50IGJ0cmZzX2ZpbmRfcm9vdF9yZWYoc3RydWN0IGJ0cmZzX3Jvb3QgKnRyZWVfcm9vdCwKIAkJCXN0cnVjdCBidHJmc19wYXRoICpwYXRoLApAQCAtMjUxMiw4ICsyNTM4LDcgQEAKIGludCBidHJmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGludCBidHJmc19jcmVhdGVfc3Vidm9sX3Jvb3Qoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpuZXdfcm9vdCwKLQkJCSAgICAgdTY0IG5ld19kaXJpZCwgdTY0IGFsbG9jX2hpbnQpOworCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqbmV3X3Jvb3QsIHU2NCBuZXdfZGlyaWQpOwogaW50IGJ0cmZzX21lcmdlX2Jpb19ob29rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCSBzaXplX3Qgc2l6ZSwgc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBsb25nIGJpb19mbGFncyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2RlbGF5ZWQtaW5vZGUuYyBiL2ZzL2J0cmZzL2RlbGF5ZWQtaW5vZGUuYwppbmRleCAwMWUyOTUwLi5mMWNiZDAyIDEwMDY0NAotLS0gYS9mcy9idHJmcy9kZWxheWVkLWlub2RlLmMKKysrIGIvZnMvYnRyZnMvZGVsYXllZC1pbm9kZS5jCkBAIC0yOTcsNyArMjk3LDYgQEAKIAkJaXRlbS0+ZGF0YV9sZW4gPSBkYXRhX2xlbjsKIAkJaXRlbS0+aW5zX29yX2RlbCA9IDA7CiAJCWl0ZW0tPmJ5dGVzX3Jlc2VydmVkID0gMDsKLQkJaXRlbS0+YmxvY2tfcnN2ID0gTlVMTDsKIAkJaXRlbS0+ZGVsYXllZF9ub2RlID0gTlVMTDsKIAkJYXRvbWljX3NldCgmaXRlbS0+cmVmcywgMSk7CiAJfQpAQCAtNTkzLDEwICs1OTIsOCBAQAogCiAJbnVtX2J5dGVzID0gYnRyZnNfY2FsY190cmFuc19tZXRhZGF0YV9zaXplKHJvb3QsIDEpOwogCXJldCA9IGJ0cmZzX2Jsb2NrX3Jzdl9taWdyYXRlKHNyY19yc3YsIGRzdF9yc3YsIG51bV9ieXRlcyk7Ci0JaWYgKCFyZXQpIHsKKwlpZiAoIXJldCkKIAkJaXRlbS0+Ynl0ZXNfcmVzZXJ2ZWQgPSBudW1fYnl0ZXM7Ci0JCWl0ZW0tPmJsb2NrX3JzdiA9IGRzdF9yc3Y7Ci0JfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTYwNCwxMCArNjAxLDEzIEBACiBzdGF0aWMgdm9pZCBidHJmc19kZWxheWVkX2l0ZW1fcmVsZWFzZV9tZXRhZGF0YShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkJCXN0cnVjdCBidHJmc19kZWxheWVkX2l0ZW0gKml0ZW0pCiB7CisJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqcnN2OworCiAJaWYgKCFpdGVtLT5ieXRlc19yZXNlcnZlZCkKIAkJcmV0dXJuOwogCi0JYnRyZnNfYmxvY2tfcnN2X3JlbGVhc2Uocm9vdCwgaXRlbS0+YmxvY2tfcnN2LAorCXJzdiA9ICZyb290LT5mc19pbmZvLT5nbG9iYWxfYmxvY2tfcnN2OworCWJ0cmZzX2Jsb2NrX3Jzdl9yZWxlYXNlKHJvb3QsIHJzdiwKIAkJCQlpdGVtLT5ieXRlc19yZXNlcnZlZCk7CiB9CiAKQEAgLTY3OCw2ICs2NzgsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZoZWFkKTsKIAogCW5leHQgPSBpdGVtOworCW5pdGVtcyA9IDA7CiAKIAkvKgogCSAqIGNvdW50IHRoZSBudW1iZXIgb2YgdGhlIGNvbnRpbnVvdXMgaXRlbXMgdGhhdCB3ZSBjYW4gaW5zZXJ0IGluIGJhdGNoCkBAIC0xMDEzLDYgKzEwMTQsNyBAQAogCXN0cnVjdCBidHJmc19kZWxheWVkX3Jvb3QgKmRlbGF5ZWRfcm9vdDsKIAlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9ub2RlICpjdXJyX25vZGUsICpwcmV2X25vZGU7CiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CisJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqYmxvY2tfcnN2OwogCWludCByZXQgPSAwOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKQEAgLTEwMjAsNiArMTAyMiw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAorCWJsb2NrX3JzdiA9IHRyYW5zLT5ibG9ja19yc3Y7CisJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5nbG9iYWxfYmxvY2tfcnN2OworCiAJZGVsYXllZF9yb290ID0gYnRyZnNfZ2V0X2RlbGF5ZWRfcm9vdChyb290KTsKIAogCWN1cnJfbm9kZSA9IGJ0cmZzX2ZpcnN0X2RlbGF5ZWRfbm9kZShkZWxheWVkX3Jvb3QpOwpAQCAtMTA0NCw2ICsxMDQ5LDcgQEAKIAl9CiAKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJdHJhbnMtPmJsb2NrX3JzdiA9IGJsb2NrX3JzdjsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMDUxLDYgKzEwNTcsNyBAQAogCQkJCQkgICAgICBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9ub2RlICpub2RlKQogewogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOworCXN0cnVjdCBidHJmc19ibG9ja19yc3YgKmJsb2NrX3JzdjsKIAlpbnQgcmV0OwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKQEAgLTEwNTgsNiArMTA2NSw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAorCWJsb2NrX3JzdiA9IHRyYW5zLT5ibG9ja19yc3Y7CisJdHJhbnMtPmJsb2NrX3JzdiA9ICZub2RlLT5yb290LT5mc19pbmZvLT5nbG9iYWxfYmxvY2tfcnN2OworCiAJcmV0ID0gYnRyZnNfaW5zZXJ0X2RlbGF5ZWRfaXRlbXModHJhbnMsIHBhdGgsIG5vZGUtPnJvb3QsIG5vZGUpOwogCWlmICghcmV0KQogCQlyZXQgPSBidHJmc19kZWxldGVfZGVsYXllZF9pdGVtcyh0cmFucywgcGF0aCwgbm9kZS0+cm9vdCwgbm9kZSk7CkBAIC0xMDY1LDYgKzEwNzUsNyBAQAogCQlyZXQgPSBidHJmc191cGRhdGVfZGVsYXllZF9pbm9kZSh0cmFucywgbm9kZS0+cm9vdCwgcGF0aCwgbm9kZSk7CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCisJdHJhbnMtPmJsb2NrX3JzdiA9IGJsb2NrX3JzdjsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTE1LDYgKzExMjYsNyBAQAogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCXN0cnVjdCBidHJmc19kZWxheWVkX25vZGUgKmRlbGF5ZWRfbm9kZSA9IE5VTEw7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3Q7CisJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqYmxvY2tfcnN2OwogCXVuc2lnbmVkIGxvbmcgbnIgPSAwOwogCWludCBuZWVkX3JlcXVldWUgPSAwOwogCWludCByZXQ7CkBAIC0xMTI5LDEwICsxMTQxLDEzIEBACiAJZGVsYXllZF9ub2RlID0gYXN5bmNfbm9kZS0+ZGVsYXllZF9ub2RlOwogCXJvb3QgPSBkZWxheWVkX25vZGUtPnJvb3Q7CiAKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKQogCQlnb3RvIGZyZWVfcGF0aDsKIAorCWJsb2NrX3JzdiA9IHRyYW5zLT5ibG9ja19yc3Y7CisJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5nbG9iYWxfYmxvY2tfcnN2OworCiAJcmV0ID0gYnRyZnNfaW5zZXJ0X2RlbGF5ZWRfaXRlbXModHJhbnMsIHBhdGgsIHJvb3QsIGRlbGF5ZWRfbm9kZSk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IGJ0cmZzX2RlbGV0ZV9kZWxheWVkX2l0ZW1zKHRyYW5zLCBwYXRoLCByb290LApAQCAtMTE3NSw2ICsxMTkwLDcgQEAKIAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCisJdHJhbnMtPmJsb2NrX3JzdiA9IGJsb2NrX3JzdjsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fZG1ldGEodHJhbnMsIHJvb3QpOwogCV9fYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiBmcmVlX3BhdGg6CkBAIC0xMjIxLDYgKzEyMzcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBidHJmc19hc3NlcnRfZGVsYXllZF9yb290X2VtcHR5KHN0cnVjdCBidHJmc19yb290ICpyb290KQoreworCXN0cnVjdCBidHJmc19kZWxheWVkX3Jvb3QgKmRlbGF5ZWRfcm9vdDsKKwlkZWxheWVkX3Jvb3QgPSBidHJmc19nZXRfZGVsYXllZF9yb290KHJvb3QpOworCVdBUk5fT04oYnRyZnNfZmlyc3RfZGVsYXllZF9ub2RlKGRlbGF5ZWRfcm9vdCkpOworfQorCiB2b2lkIGJ0cmZzX2JhbGFuY2VfZGVsYXllZF9pdGVtcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKIAlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yb290ICpkZWxheWVkX3Jvb3Q7CkBAIC0xNTcyLDggKzE1OTUsNyBAQAogCWJ0cmZzX3NldF9zdGFja19pbm9kZV90cmFuc2lkKGlub2RlX2l0ZW0sIHRyYW5zLT50cmFuc2lkKTsKIAlidHJmc19zZXRfc3RhY2tfaW5vZGVfcmRldihpbm9kZV9pdGVtLCBpbm9kZS0+aV9yZGV2KTsKIAlidHJmc19zZXRfc3RhY2tfaW5vZGVfZmxhZ3MoaW5vZGVfaXRlbSwgQlRSRlNfSShpbm9kZSktPmZsYWdzKTsKLQlidHJmc19zZXRfc3RhY2tfaW5vZGVfYmxvY2tfZ3JvdXAoaW5vZGVfaXRlbSwKLQkJCQkJICBCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXApOworCWJ0cmZzX3NldF9zdGFja19pbm9kZV9ibG9ja19ncm91cChpbm9kZV9pdGVtLCAwKTsKIAogCWJ0cmZzX3NldF9zdGFja190aW1lc3BlY19zZWMoYnRyZnNfaW5vZGVfYXRpbWUoaW5vZGVfaXRlbSksCiAJCQkJICAgICBpbm9kZS0+aV9hdGltZS50dl9zZWMpOwpAQCAtMTU5NSw3ICsxNjE3LDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9ub2RlICpkZWxheWVkX25vZGU7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWRlbGF5ZWRfbm9kZSA9IGJ0cmZzX2dldF9vcl9jcmVhdGVfZGVsYXllZF9ub2RlKGlub2RlKTsKIAlpZiAoSVNfRVJSKGRlbGF5ZWRfbm9kZSkpCmRpZmYgLS1naXQgYS9mcy9idHJmcy9kZWxheWVkLWlub2RlLmggYi9mcy9idHJmcy9kZWxheWVkLWlub2RlLmgKaW5kZXggZWI3ZDI0MC4uZDFhNmEyOSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGVsYXllZC1pbm9kZS5oCisrKyBiL2ZzL2J0cmZzL2RlbGF5ZWQtaW5vZGUuaApAQCAtNzUsNyArNzUsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgdHJlZV9saXN0OwkvKiB1c2VkIGZvciBiYXRjaCBpbnNlcnQvZGVsZXRlIGl0ZW1zICovCiAJc3RydWN0IGxpc3RfaGVhZCByZWFkZGlyX2xpc3Q7CS8qIHVzZWQgZm9yIHJlYWRkaXIgaXRlbXMgKi8KIAl1NjQgYnl0ZXNfcmVzZXJ2ZWQ7Ci0Jc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqYmxvY2tfcnN2OwogCXN0cnVjdCBidHJmc19kZWxheWVkX25vZGUgKmRlbGF5ZWRfbm9kZTsKIAlhdG9taWNfdCByZWZzOwogCWludCBpbnNfb3JfZGVsOwpAQCAtMTM4LDQgKzEzNyw4IEBACiAvKiBmb3IgaW5pdCAqLwogaW50IF9faW5pdCBidHJmc19kZWxheWVkX2lub2RlX2luaXQodm9pZCk7CiB2b2lkIGJ0cmZzX2RlbGF5ZWRfaW5vZGVfZXhpdCh2b2lkKTsKKworLyogZm9yIGRlYnVnZ2luZyAqLwordm9pZCBidHJmc19hc3NlcnRfZGVsYXllZF9yb290X2VtcHR5KHN0cnVjdCBidHJmc19yb290ICpyb290KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggOThiNmE3MS4uMWFjOGRiNWQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTEwNDQsNyArMTA0NCw2IEBACiAJcm9vdC0+bGFzdF90cmFucyA9IDA7CiAJcm9vdC0+aGlnaGVzdF9vYmplY3RpZCA9IDA7CiAJcm9vdC0+bmFtZSA9IE5VTEw7Ci0Jcm9vdC0+aW5fc3lzZnMgPSAwOwogCXJvb3QtPmlub2RlX3RyZWUgPSBSQl9ST09UOwogCUlOSVRfUkFESVhfVFJFRSgmcm9vdC0+ZGVsYXllZF9ub2Rlc190cmVlLCBHRlBfQVRPTUlDKTsKIAlyb290LT5ibG9ja19yc3YgPSBOVUxMOwpAQCAtMTMwMCwxOSArMTI5OSwyMSBAQAogCQlyZXR1cm4gcm9vdDsKIAogCXJvb3QtPmZyZWVfaW5vX2N0bCA9IGt6YWxsb2Moc2l6ZW9mKCpyb290LT5mcmVlX2lub19jdGwpLCBHRlBfTk9GUyk7Ci0JaWYgKCFyb290LT5mcmVlX2lub19jdGwpCi0JCWdvdG8gZmFpbDsKIAlyb290LT5mcmVlX2lub19waW5uZWQgPSBremFsbG9jKHNpemVvZigqcm9vdC0+ZnJlZV9pbm9fcGlubmVkKSwKIAkJCQkJR0ZQX05PRlMpOwotCWlmICghcm9vdC0+ZnJlZV9pbm9fcGlubmVkKQorCWlmICghcm9vdC0+ZnJlZV9pbm9fcGlubmVkIHx8ICFyb290LT5mcmVlX2lub19jdGwpIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsOworCX0KIAogCWJ0cmZzX2luaXRfZnJlZV9pbm9fY3RsKHJvb3QpOwogCW11dGV4X2luaXQoJnJvb3QtPmZzX2NvbW1pdF9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnJvb3QtPmNhY2hlX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJvb3QtPmNhY2hlX3dhaXQpOwogCi0Jc2V0X2Fub25fc3VwZXIoJnJvb3QtPmFub25fc3VwZXIsIE5VTEwpOworCXJldCA9IHNldF9hbm9uX3N1cGVyKCZyb290LT5hbm9uX3N1cGVyLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CiAKIAlpZiAoYnRyZnNfcm9vdF9yZWZzKCZyb290LT5yb290X2l0ZW0pID09IDApIHsKIAkJcmV0ID0gLUVOT0VOVDsKQEAgLTE1MDUsMjQgKzE1MDYsMjQgQEAKIAkJdmZzX2NoZWNrX2Zyb3plbihyb290LT5mc19pbmZvLT5zYiwgU0JfRlJFRVpFX1dSSVRFKTsKIAkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fa3RocmVhZF9tdXRleCk7CiAKLQkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CisJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJCWN1ciA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247CiAJCWlmICghY3VyKSB7Ci0JCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQkJZ290byBzbGVlcDsKIAkJfQogCiAJCW5vdyA9IGdldF9zZWNvbmRzKCk7CiAJCWlmICghY3VyLT5ibG9ja2VkICYmCiAJCSAgICAobm93IDwgY3VyLT5zdGFydF90aW1lIHx8IG5vdyAtIGN1ci0+c3RhcnRfdGltZSA8IDMwKSkgewotCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJCWRlbGF5ID0gSFogKiA1OwogCQkJZ290byBzbGVlcDsKIAkJfQogCQl0cmFuc2lkID0gY3VyLT50cmFuc2lkOwotCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJaWYgKHRyYW5zaWQgPT0gdHJhbnMtPnRyYW5zaWQpIHsKIAkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CkBAIC0xNjEzLDExICsxNjE0LDEyIEBACiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPm9yZGVyZWRfb3BlcmF0aW9ucyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPmNhY2hpbmdfYmxvY2tfZ3JvdXBzKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmZzX2luZm8tPnJlZl9jYWNoZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXhfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmZzX2luZm8tPmRlbGF5ZWRfaXB1dF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+ZGVmcmFnX2lub2Rlc19sb2NrKTsKKwltdXRleF9pbml0KCZmc19pbmZvLT5yZWxvY19tdXRleCk7CiAKIAlpbml0X2NvbXBsZXRpb24oJmZzX2luZm8tPmtvYmpfdW5yZWdpc3Rlcik7CiAJZnNfaW5mby0+dHJlZV9yb290ID0gdHJlZV9yb290OwpAQCAtMTY0NSw2ICsxNjQ3LDcgQEAKIAlmc19pbmZvLT5tYXhfaW5saW5lID0gODE5MiAqIDEwMjQ7CiAJZnNfaW5mby0+bWV0YWRhdGFfcmF0aW8gPSAwOwogCWZzX2luZm8tPmRlZnJhZ19pbm9kZXMgPSBSQl9ST09UOworCWZzX2luZm8tPnRyYW5zX25vX2pvaW4gPSAwOwogCiAJZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsCiAJCQkJCSAgbnVtX29ubGluZV9jcHVzKCkgKyAyLCA4KTsKQEAgLTE2NjcsOCArMTY3MCw2IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZnNfaW5mby0+c2NydWJfcGF1c2Vfd2FpdCk7CiAJaW5pdF9yd3NlbSgmZnNfaW5mby0+c2NydWJfc3VwZXJfbG9jayk7CiAJZnNfaW5mby0+c2NydWJfd29ya2Vyc19yZWZjbnQgPSAwOwotCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+c2NydWJfd29ya2VycywgInNjcnViIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAKIAlzYi0+c19ibG9ja3NpemUgPSA0MDk2OwogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gYmxrc2l6ZV9iaXRzKDQwOTYpOwpAQCAtMTcwOSw3ICsxNzEwLDYgQEAKIAlmc19pbmZvLT5kb19iYXJyaWVycyA9IDE7CiAKIAotCW11dGV4X2luaXQoJmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT5vcmRlcmVkX29wZXJhdGlvbnNfbXV0ZXgpOwogCW11dGV4X2luaXQoJmZzX2luZm8tPnRyZWVfbG9nX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT5jaHVua19tdXRleCk7CkBAIC0yNDc5LDEzICsyNDc5LDEzIEBACiAJZG93bl93cml0ZSgmcm9vdC0+ZnNfaW5mby0+Y2xlYW51cF93b3JrX3NlbSk7CiAJdXBfd3JpdGUoJnJvb3QtPmZzX2luZm8tPmNsZWFudXBfd29ya19zZW0pOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJQlVHX09OKHJldCk7CiAJLyogcnVuIGNvbW1pdCBhZ2FpbiB0byBkcm9wIHRoZSBvcmlnaW5hbCBzbmFwc2hvdCAqLwotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpCiAJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwpAQCAtMjkxMSw5ICsyOTExLDggQEAKIAogCUlOSVRfTElTVF9IRUFEKCZzcGxpY2UpOwogCi0JbGlzdF9zcGxpY2VfaW5pdCgmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfaW5vZGVzLCAmc3BsaWNlKTsKLQogCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfaW5vZGVzLCAmc3BsaWNlKTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmc3BsaWNlKSkgewogCQlidHJmc19pbm9kZSA9IGxpc3RfZW50cnkoc3BsaWNlLm5leHQsIHN0cnVjdCBidHJmc19pbm9kZSwKQEAgLTMwMjQsMTAgKzMwMjMsMTMgQEAKIAogCVdBUk5fT04oMSk7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fa3RocmVhZF9tdXRleCk7CiAKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCWxpc3Rfc3BsaWNlX2luaXQoJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xpc3QsICZsaXN0KTsKKwlyb290LT5mc19pbmZvLT50cmFuc19ub19qb2luID0gMTsKKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmxpc3QpKSB7CiAJCXQgPSBsaXN0X2VudHJ5KGxpc3QubmV4dCwgc3RydWN0IGJ0cmZzX3RyYW5zYWN0aW9uLCBsaXN0KTsKIAkJaWYgKCF0KQpAQCAtMzA1MiwyMyArMzA1NCwxOCBAQAogCQl0LT5ibG9ja2VkID0gMDsKIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQpKQogCQkJd2FrZV91cCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCk7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCi0JCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJdC0+Y29tbWl0X2RvbmUgPSAxOwogCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmdC0+Y29tbWl0X3dhaXQpKQogCQkJd2FrZV91cCgmdC0+Y29tbWl0X3dhaXQpOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAkJYnRyZnNfZGVzdHJveV9wZW5kaW5nX3NuYXBzaG90cyh0KTsKIAogCQlidHJmc19kZXN0cm95X2RlbGFsbG9jX2lub2Rlcyhyb290KTsKIAotCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbiA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAogCQlidHJmc19kZXN0cm95X21hcmtlZF9leHRlbnRzKHJvb3QsICZ0LT5kaXJ0eV9wYWdlcywKIAkJCQkJICAgICBFWFRFTlRfRElSVFkpOwpAQCAtMzA4Miw4ICszMDc5LDEwIEBACiAJCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc2FjdGlvbl9jYWNoZXAsIHQpOwogCX0KIAorCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisJcm9vdC0+ZnNfaW5mby0+dHJhbnNfbm9fam9pbiA9IDA7CisJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fa3RocmVhZF9tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCmluZGV4IDE2OWJkNjIuLjFmNjFiZjUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJICovCiAJcGF0aC0+c2tpcF9sb2NraW5nID0gMTsKIAlwYXRoLT5zZWFyY2hfY29tbWl0X3Jvb3QgPSAxOwotCXBhdGgtPnJlYWRhID0gMjsKKwlwYXRoLT5yZWFkYSA9IDE7CiAKIAlrZXkub2JqZWN0aWQgPSBsYXN0OwogCWtleS5vZmZzZXQgPSAwOwpAQCAtMzY2LDggKzM2Niw3IEBACiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpOwogCiAJd2hpbGUgKDEpIHsKLQkJc21wX21iKCk7Ci0JCWlmIChmc19pbmZvLT5jbG9zaW5nID4gMSkgeworCQlpZiAoYnRyZnNfZnNfY2xvc2luZyhmc19pbmZvKSA+IDEpIHsKIAkJCWxhc3QgPSAodTY0KS0xOwogCQkJYnJlYWs7CiAJCX0KQEAgLTM3OSwxNSArMzc4LDE4IEBACiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCi0JCQljYWNoaW5nX2N0bC0+cHJvZ3Jlc3MgPSBsYXN0OwotCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHBhdGgpOwotCQkJdXBfcmVhZCgmZnNfaW5mby0+ZXh0ZW50X2NvbW1pdF9zZW0pOwotCQkJbXV0ZXhfdW5sb2NrKCZjYWNoaW5nX2N0bC0+bXV0ZXgpOwotCQkJaWYgKGJ0cmZzX3RyYW5zYWN0aW9uX2luX2NvbW1pdChmc19pbmZvKSkKLQkJCQlzY2hlZHVsZV90aW1lb3V0KDEpOwotCQkJZWxzZQorCQkJaWYgKG5lZWRfcmVzY2hlZCgpIHx8CisJCQkgICAgYnRyZnNfbmV4dF9sZWFmKGV4dGVudF9yb290LCBwYXRoKSkgeworCQkJCWNhY2hpbmdfY3RsLT5wcm9ncmVzcyA9IGxhc3Q7CisJCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHBhdGgpOworCQkJCXVwX3JlYWQoJmZzX2luZm8tPmV4dGVudF9jb21taXRfc2VtKTsKKwkJCQltdXRleF91bmxvY2soJmNhY2hpbmdfY3RsLT5tdXRleCk7CiAJCQkJY29uZF9yZXNjaGVkKCk7Ci0JCQlnb3RvIGFnYWluOworCQkJCWdvdG8gYWdhaW47CisJCQl9CisJCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07CisJCQlucml0ZW1zID0gYnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZik7CisJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChrZXkub2JqZWN0aWQgPCBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkKSB7CkBAIC0zMDY1LDcgKzMwNjcsNyBAQAogCQkJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOwogYWxsb2M6CiAJCQlhbGxvY190YXJnZXQgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCAxKTsKLQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJCWlmIChJU19FUlIodHJhbnMpKQogCQkJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIApAQCAtMzA4NywxMyArMzA4OSwyMSBAQAogCQkJfQogCQkJZ290byBhZ2FpbjsKIAkJfQorCisJCS8qCisJCSAqIElmIHdlIGhhdmUgbGVzcyBwaW5uZWQgYnl0ZXMgdGhhbiB3ZSB3YW50IHRvIGFsbG9jYXRlIHRoZW4KKwkJICogZG9uJ3QgYm90aGVyIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uLCBpdCB3b24ndCBoZWxwIHVzLgorCQkgKi8KKwkJaWYgKGRhdGFfc2luZm8tPmJ5dGVzX3Bpbm5lZCA8IGJ5dGVzKQorCQkJY29tbWl0dGVkID0gMTsKIAkJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOwogCiAJCS8qIGNvbW1pdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgdHJ5IGFnYWluICovCiBjb21taXRfdHJhbnM6Ci0JCWlmICghY29tbWl0dGVkICYmICFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSB7CisJCWlmICghY29tbWl0dGVkICYmCisJCSAgICAhYXRvbWljX3JlYWQoJnJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpKSB7CiAJCQljb21taXR0ZWQgPSAxOwotCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCQkJaWYgKElTX0VSUih0cmFucykpCiAJCQkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKQEAgLTMzMDQsMTAgKzMzMTQsNiBAQAogCWlmIChyZXNlcnZlZCA9PSAwKQogCQlyZXR1cm4gMDsKIAotCS8qIG5vdGhpbmcgdG8gc2hyaW5rIC0gbm90aGluZyB0byByZWNsYWltICovCi0JaWYgKHJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2J5dGVzID09IDApCi0JCXJldHVybiAwOwotCiAJbWF4X3JlY2xhaW0gPSBtaW4ocmVzZXJ2ZWQsIHRvX3JlY2xhaW0pOwogCiAJd2hpbGUgKGxvb3BzIDwgMTAyNCkgewpAQCAtMzQ3Miw3ICszNDc4LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSAtRU5PU1BDOwotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpCiAJCWdvdG8gb3V0OwogCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CkBAIC0zNjk5LDcgKzM3MDUsNyBAQAogCQlpZiAodHJhbnMpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAotCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQlyZXR1cm4gMDsKQEAgLTM4MzcsNiArMzg0MywzNyBAQAogCVdBUk5fT04oZnNfaW5mby0+Y2h1bmtfYmxvY2tfcnN2LnJlc2VydmVkID4gMCk7CiB9CiAKK2ludCBidHJmc190cnVuY2F0ZV9yZXNlcnZlX21ldGFkYXRhKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqcnN2KQoreworCXN0cnVjdCBidHJmc19ibG9ja19yc3YgKnRyYW5zX3JzdiA9ICZyb290LT5mc19pbmZvLT50cmFuc19ibG9ja19yc3Y7CisJdTY0IG51bV9ieXRlczsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBUcnVuY2F0ZSBzaG91bGQgYmUgZnJlZWluZyBkYXRhLCBidXQgZ2l2ZSB1cyAyIGl0ZW1zIGp1c3QgaW4gY2FzZSBpdAorCSAqIG5lZWRzIHRvIHVzZSBzb21lIHNwYWNlLiAgV2UgbWF5IHdhbnQgdG8gYmUgc21hcnRlciBhYm91dCB0aGlzIGluIHRoZQorCSAqIGZ1dHVyZS4KKwkgKi8KKwludW1fYnl0ZXMgPSBidHJmc19jYWxjX3RyYW5zX21ldGFkYXRhX3NpemUocm9vdCwgMik7CisKKwkvKiBXZSBhbHJlYWR5IGhhdmUgZW5vdWdoIGJ5dGVzLCBqdXN0IHJldHVybiAqLworCWlmIChyc3YtPnJlc2VydmVkID49IG51bV9ieXRlcykKKwkJcmV0dXJuIDA7CisKKwludW1fYnl0ZXMgLT0gcnN2LT5yZXNlcnZlZDsKKworCS8qCisJICogWW91IHNob3VsZCBoYXZlIHJlc2VydmVkIGVub3VnaCBzcGFjZSBiZWZvcmUgaGFuZCB0byBkbyB0aGlzLCBzbyB0aGlzCisJICogc2hvdWxkIG5vdCBmYWlsLgorCSAqLworCXJldCA9IGJsb2NrX3Jzdl9taWdyYXRlX2J5dGVzKHRyYW5zX3JzdiwgcnN2LCBudW1fYnl0ZXMpOworCUJVR19PTihyZXQpOworCisJcmV0dXJuIDA7Cit9CisKIGludCBidHJmc190cmFuc19yZXNlcnZlX21ldGFkYXRhKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkgaW50IG51bV9pdGVtcykKQEAgLTM4NzcsMjMgKzM5MTQsMTggQEAKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICpkc3RfcnN2ID0gcm9vdC0+b3JwaGFuX2Jsb2NrX3JzdjsKIAogCS8qCi0JICogb25lIGZvciBkZWxldGluZyBvcnBoYW4gaXRlbSwgb25lIGZvciB1cGRhdGluZyBpbm9kZSBhbmQKLQkgKiB0d28gZm9yIGNhbGxpbmcgYnRyZnNfdHJ1bmNhdGVfaW5vZGVfaXRlbXMuCi0JICoKLQkgKiBidHJmc190cnVuY2F0ZV9pbm9kZV9pdGVtcyBpcyBhIGRlbGV0ZSBvcGVyYXRpb24sIGl0IGZyZWVzCi0JICogbW9yZSBzcGFjZSB0aGFuIGl0IHVzZXMgaW4gbW9zdCBjYXNlcy4gU28gdHdvIHVuaXRzIG9mCi0JICogbWV0YWRhdGEgc3BhY2Ugc2hvdWxkIGJlIGVub3VnaCBmb3IgY2FsbGluZyBpdCBtYW55IHRpbWVzLgotCSAqIElmIGFsbCBvZiB0aGUgbWV0YWRhdGEgc3BhY2UgaXMgdXNlZCwgd2UgY2FuIGNvbW1pdAotCSAqIHRyYW5zYWN0aW9uIGFuZCB1c2Ugc3BhY2UgaXQgZnJlZWQuCisJICogV2UgbmVlZCB0byBob2xkIHNwYWNlIGluIG9yZGVyIHRvIGRlbGV0ZSBvdXIgb3JwaGFuIGl0ZW0gb25jZSB3ZSd2ZQorCSAqIGFkZGVkIGl0LCBzbyB0aGlzIHRha2VzIHRoZSByZXNlcnZhdGlvbiBzbyB3ZSBjYW4gcmVsZWFzZSBpdCBsYXRlcgorCSAqIHdoZW4gd2UgYXJlIHRydWx5IGRvbmUgd2l0aCB0aGUgb3JwaGFuIGl0ZW0uCiAJICovCi0JdTY0IG51bV9ieXRlcyA9IGJ0cmZzX2NhbGNfdHJhbnNfbWV0YWRhdGFfc2l6ZShyb290LCA0KTsKKwl1NjQgbnVtX2J5dGVzID0gYnRyZnNfY2FsY190cmFuc19tZXRhZGF0YV9zaXplKHJvb3QsIDEpOwogCXJldHVybiBibG9ja19yc3ZfbWlncmF0ZV9ieXRlcyhzcmNfcnN2LCBkc3RfcnN2LCBudW1fYnl0ZXMpOwogfQogCiB2b2lkIGJ0cmZzX29ycGhhbl9yZWxlYXNlX21ldGFkYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKLQl1NjQgbnVtX2J5dGVzID0gYnRyZnNfY2FsY190cmFuc19tZXRhZGF0YV9zaXplKHJvb3QsIDQpOworCXU2NCBudW1fYnl0ZXMgPSBidHJmc19jYWxjX3RyYW5zX21ldGFkYXRhX3NpemUocm9vdCwgMSk7CiAJYnRyZnNfYmxvY2tfcnN2X3JlbGVhc2Uocm9vdCwgcm9vdC0+b3JwaGFuX2Jsb2NrX3JzdiwgbnVtX2J5dGVzKTsKIH0KIApAQCAtNDk4Nyw2ICs1MDE5LDE1IEBACiAJCWlmICh1bmxpa2VseShibG9ja19ncm91cC0+cm8pKQogCQkJZ290byBsb29wOwogCisJCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsLT50cmVlX2xvY2spOworCQlpZiAoY2FjaGVkICYmCisJCSAgICBibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9jdGwtPmZyZWVfc3BhY2UgPAorCQkgICAgbnVtX2J5dGVzICsgZW1wdHlfc2l6ZSkgeworCQkJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2N0bC0+dHJlZV9sb2NrKTsKKwkJCWdvdG8gbG9vcDsKKwkJfQorCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsLT50cmVlX2xvY2spOworCiAJCS8qCiAJCSAqIE9rIHdlIHdhbnQgdG8gdHJ5IGFuZCB1c2UgdGhlIGNsdXN0ZXIgYWxsb2NhdG9yLCBzbyBsZXRzIGxvb2sKIAkJICogdGhlcmUsIHVubGVzcyB3ZSBhcmUgb24gTE9PUF9OT19FTVBUWV9TSVpFLCBzaW5jZSB3ZSB3aWxsCkBAIC01MTUwLDYgKzUxOTEsNyBAQAogCQkJYnRyZnNfYWRkX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIG9mZnNldCwKIAkJCQkJICAgICBzZWFyY2hfc3RhcnQgLSBvZmZzZXQpOwogCQlCVUdfT04ob2Zmc2V0ID4gc2VhcmNoX3N0YXJ0KTsKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAkJYnJlYWs7CiBsb29wOgogCQlmYWlsZWRfY2x1c3Rlcl9yZWZpbGwgPSBmYWxzZTsKQEAgLTUxNzIsOSArNTIxNCw3IEBACiAJICogTE9PUF9OT19FTVBUWV9TSVpFLCBzZXQgZW1wdHlfc2l6ZSBhbmQgZW1wdHlfY2x1c3RlciB0byAwIGFuZCB0cnkKIAkgKgkJCWFnYWluCiAJICovCi0JaWYgKCFpbnMtPm9iamVjdGlkICYmIGxvb3AgPCBMT09QX05PX0VNUFRZX1NJWkUgJiYKLQkgICAgKGZvdW5kX3VuY2FjaGVkX2JnIHx8IGVtcHR5X3NpemUgfHwgZW1wdHlfY2x1c3RlciB8fAotCSAgICAgYWxsb3dlZF9jaHVua19hbGxvYykpIHsKKwlpZiAoIWlucy0+b2JqZWN0aWQgJiYgbG9vcCA8IExPT1BfTk9fRU1QVFlfU0laRSkgewogCQlpbmRleCA9IDA7CiAJCWlmIChsb29wID09IExPT1BfRklORF9JREVBTCAmJiBmb3VuZF91bmNhY2hlZF9iZykgewogCQkJZm91bmRfdW5jYWNoZWRfYmcgPSBmYWxzZTsKQEAgLTUyMTQsNDIgKzUyNTQsMzkgQEAKIAkJCWdvdG8gc2VhcmNoOwogCQl9CiAKLQkJaWYgKGxvb3AgPCBMT09QX0NBQ0hJTkdfV0FJVCkgewotCQkJbG9vcCsrOwotCQkJZ290byBzZWFyY2g7Ci0JCX0KKwkJbG9vcCsrOwogCiAJCWlmIChsb29wID09IExPT1BfQUxMT0NfQ0hVTkspIHsKKwkJICAgICAgIGlmIChhbGxvd2VkX2NodW5rX2FsbG9jKSB7CisJCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCisJCQkJCQkgICAgIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwKKwkJCQkJCSAgICAgQ0hVTktfQUxMT0NfTElNSVRFRCk7CisJCQkJYWxsb3dlZF9jaHVua19hbGxvYyA9IDA7CisJCQkJaWYgKHJldCA9PSAxKQorCQkJCQlkb25lX2NodW5rX2FsbG9jID0gMTsKKwkJCX0gZWxzZSBpZiAoIWRvbmVfY2h1bmtfYWxsb2MgJiYKKwkJCQkgICBzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9PQorCQkJCSAgIENIVU5LX0FMTE9DX05PX0ZPUkNFKSB7CisJCQkJc3BhY2VfaW5mby0+Zm9yY2VfYWxsb2MgPSBDSFVOS19BTExPQ19MSU1JVEVEOworCQkJfQorCisJCSAgICAgICAvKgorCQkJKiBXZSBkaWRuJ3QgYWxsb2NhdGUgYSBjaHVuaywgZ28gYWhlYWQgYW5kIGRyb3AgdGhlCisJCQkqIGVtcHR5IHNpemUgYW5kIGxvb3AgYWdhaW4uCisJCQkqLworCQkgICAgICAgaWYgKCFkb25lX2NodW5rX2FsbG9jKQorCQkJICAgICAgIGxvb3AgPSBMT09QX05PX0VNUFRZX1NJWkU7CisJCX0KKworCQlpZiAobG9vcCA9PSBMT09QX05PX0VNUFRZX1NJWkUpIHsKIAkJCWVtcHR5X3NpemUgPSAwOwogCQkJZW1wdHlfY2x1c3RlciA9IDA7CiAJCX0KIAotCQlpZiAoYWxsb3dlZF9jaHVua19hbGxvYykgewotCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCi0JCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLAotCQkJCQkgICAgIENIVU5LX0FMTE9DX0xJTUlURUQpOwotCQkJYWxsb3dlZF9jaHVua19hbGxvYyA9IDA7Ci0JCQlkb25lX2NodW5rX2FsbG9jID0gMTsKLQkJfSBlbHNlIGlmICghZG9uZV9jaHVua19hbGxvYyAmJgotCQkJICAgc3BhY2VfaW5mby0+Zm9yY2VfYWxsb2MgPT0gQ0hVTktfQUxMT0NfTk9fRk9SQ0UpIHsKLQkJCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfTElNSVRFRDsKLQkJfQotCi0JCWlmIChsb29wIDwgTE9PUF9OT19FTVBUWV9TSVpFKSB7Ci0JCQlsb29wKys7Ci0JCQlnb3RvIHNlYXJjaDsKLQkJfQotCQlyZXQgPSAtRU5PU1BDOworCQlnb3RvIHNlYXJjaDsKIAl9IGVsc2UgaWYgKCFpbnMtPm9iamVjdGlkKSB7CiAJCXJldCA9IC1FTk9TUEM7Ci0JfQotCi0JLyogd2UgZm91bmQgd2hhdCB3ZSBuZWVkZWQgKi8KLQlpZiAoaW5zLT5vYmplY3RpZCkgewotCQlpZiAoIShkYXRhICYgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSkpCi0JCQl0cmFucy0+YmxvY2tfZ3JvdXAgPSBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkOwotCi0JCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CisJfSBlbHNlIGlmIChpbnMtPm9iamVjdGlkKSB7CiAJCXJldCA9IDA7CiAJfQogCkBAIC02NTI2LDcgKzY1NjMsNyBAQAogCiAJQlVHX09OKGNhY2hlLT5ybyk7CiAKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCWFsbG9jX2ZsYWdzID0gdXBkYXRlX2Jsb2NrX2dyb3VwX2ZsYWdzKHJvb3QsIGNhY2hlLT5mbGFncyk7CkBAIC02ODgyLDYgKzY5MTksNyBAQAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKKwlwYXRoLT5yZWFkYSA9IDE7CiAKIAljYWNoZV9nZW4gPSBidHJmc19zdXBlcl9jYWNoZV9nZW5lcmF0aW9uKCZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KTsKIAlpZiAoY2FjaGVfZ2VuICE9IDAgJiYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggYzVkOWZiYi4uNzA1NWQxMSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTE0NzYsNyArMTQ3Niw3IEBACiAJCQlpZiAodG90YWxfYnl0ZXMgPj0gbWF4X2J5dGVzKQogCQkJCWJyZWFrOwogCQkJaWYgKCFmb3VuZCkgewotCQkJCSpzdGFydCA9IHN0YXRlLT5zdGFydDsKKwkJCQkqc3RhcnQgPSBtYXgoY3VyX3N0YXJ0LCBzdGF0ZS0+c3RhcnQpOwogCQkJCWZvdW5kID0gMTsKIAkJCX0KIAkJCWxhc3QgPSBzdGF0ZS0+ZW5kOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmggYi9mcy9idHJmcy9leHRlbnRfaW8uaAppbmRleCA0ZTg0NDVhLi5hMTFhOTJlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uaAorKysgYi9mcy9idHJmcy9leHRlbnRfaW8uaApAQCAtMTI2LDkgKzEyNiw5IEBACiAJdW5zaWduZWQgbG9uZyBtYXBfbGVuOwogCXN0cnVjdCBwYWdlICpmaXJzdF9wYWdlOwogCXVuc2lnbmVkIGxvbmcgYmZsYWdzOwotCWF0b21pY190IHJlZnM7CiAJc3RydWN0IGxpc3RfaGVhZCBsZWFrX2xpc3Q7CiAJc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOworCWF0b21pY190IHJlZnM7CiAKIAkvKiB0aGUgc3BpbmxvY2sgaXMgdXNlZCB0byBwcm90ZWN0IG1vc3Qgb3BlcmF0aW9ucyAqLwogCXNwaW5sb2NrX3QgbG9jazsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUuYyBiL2ZzL2J0cmZzL2ZpbGUuYwppbmRleCBjNmEyMmQ3Li5mYTRlZjE4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9maWxlLmMKKysrIGIvZnMvYnRyZnMvZmlsZS5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIEFVVE9fREVGUkFHKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocm9vdC0+ZnNfaW5mby0+Y2xvc2luZykKKwlpZiAoYnRyZnNfZnNfY2xvc2luZyhyb290LT5mc19pbmZvKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoQlRSRlNfSShpbm9kZSktPmluX2RlZnJhZykKQEAgLTE0NCw3ICsxNDQsNyBAQAogCWlmICghZGVmcmFnKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRlZnJhZy0+aW5vID0gaW5vZGUtPmlfaW5vOworCWRlZnJhZy0+aW5vID0gYnRyZnNfaW5vKGlub2RlKTsKIAlkZWZyYWctPnRyYW5zaWQgPSB0cmFuc2lkOwogCWRlZnJhZy0+cm9vdCA9IHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkOwogCkBAIC0yMjksNyArMjI5LDcgQEAKIAkJZmlyc3RfaW5vID0gZGVmcmFnLT5pbm8gKyAxOwogCQlyYl9lcmFzZSgmZGVmcmFnLT5yYl9ub2RlLCAmZnNfaW5mby0+ZGVmcmFnX2lub2Rlcyk7CiAKLQkJaWYgKGZzX2luZm8tPmNsb3NpbmcpCisJCWlmIChidHJmc19mc19jbG9zaW5nKGZzX2luZm8pKQogCQkJZ290byBuZXh0X2ZyZWU7CiAKIAkJc3Bpbl91bmxvY2soJmZzX2luZm8tPmRlZnJhZ19pbm9kZXNfbG9jayk7CkBAIC0xNDgwLDE0ICsxNDgwLDEyIEBACiAJICogdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHdlIGNhbiBiYWlsIG91dCBub3cgd2l0aG91dCBhbnkKIAkgKiBzeW5jaW5nCiAJICovCi0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXNtcF9tYigpOwogCWlmIChCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA8PQogCSAgICByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCkgewogCQlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IDA7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlnb3RvIG91dDsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAkvKgogCSAqIG9rIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHRoZSB0cmFuc2FjdGlvbiB5ZXQsIGxldHMgZG8gYSBjb21taXQKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwppbmRleCA3MGQ0NTc5Li45Zjk4NWE0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKKysrIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCkBAIC05OCw3ICs5OCw3IEBACiAJCXJldHVybiBpbm9kZTsKIAogCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPmxvY2spOwotCWlmICghcm9vdC0+ZnNfaW5mby0+Y2xvc2luZykgeworCWlmICghYnRyZnNfZnNfY2xvc2luZyhyb290LT5mc19pbmZvKSkgewogCQlibG9ja19ncm91cC0+aW5vZGUgPSBpZ3JhYihpbm9kZSk7CiAJCWJsb2NrX2dyb3VwLT5pcmVmID0gMTsKIAl9CkBAIC0yNTAsNyArMjUwLDcgQEAKIAlwZ29mZl90IGluZGV4ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2Vfb2Zmc2V0OwogCWludCBudW1fY2hlY2tzdW1zOwotCWludCByZXQgPSAwLCByZXQyOworCWludCByZXQgPSAwOwogCiAJSU5JVF9MSVNUX0hFQUQoJmJpdG1hcHMpOwogCkBAIC00MDIsNyArNDAyLDE0IEBACiAJCQkJc3Bpbl9sb2NrKCZjdGwtPnRyZWVfbG9jayk7CiAJCQkJcmV0ID0gbGlua19mcmVlX3NwYWNlKGN0bCwgZSk7CiAJCQkJc3Bpbl91bmxvY2soJmN0bC0+dHJlZV9sb2NrKTsKLQkJCQlCVUdfT04ocmV0KTsKKwkJCQlpZiAocmV0KSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiRHVwbGljYXRlIGVudHJpZXMgaW4gIgorCQkJCQkgICAgICAgImZyZWUgc3BhY2UgY2FjaGUsIGR1bXBpbmdcbiIpOworCQkJCQlrdW5tYXAocGFnZSk7CisJCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQkJCWdvdG8gZnJlZV9jYWNoZTsKKwkJCQl9CiAJCQl9IGVsc2UgewogCQkJCWUtPmJpdG1hcCA9IGt6YWxsb2MoUEFHRV9DQUNIRV9TSVpFLCBHRlBfTk9GUyk7CiAJCQkJaWYgKCFlLT5iaXRtYXApIHsKQEAgLTQxNCwxMCArNDIxLDE4IEBACiAJCQkJCWdvdG8gZnJlZV9jYWNoZTsKIAkJCQl9CiAJCQkJc3Bpbl9sb2NrKCZjdGwtPnRyZWVfbG9jayk7Ci0JCQkJcmV0MiA9IGxpbmtfZnJlZV9zcGFjZShjdGwsIGUpOworCQkJCXJldCA9IGxpbmtfZnJlZV9zcGFjZShjdGwsIGUpOwogCQkJCWN0bC0+dG90YWxfYml0bWFwcysrOwogCQkJCWN0bC0+b3AtPnJlY2FsY190aHJlc2hvbGRzKGN0bCk7CiAJCQkJc3Bpbl91bmxvY2soJmN0bC0+dHJlZV9sb2NrKTsKKwkJCQlpZiAocmV0KSB7CisJCQkJCXByaW50ayhLRVJOX0VSUiAiRHVwbGljYXRlIGVudHJpZXMgaW4gIgorCQkJCQkgICAgICAgImZyZWUgc3BhY2UgY2FjaGUsIGR1bXBpbmdcbiIpOworCQkJCQlrdW5tYXAocGFnZSk7CisJCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQkJCWdvdG8gZnJlZV9jYWNoZTsKKwkJCQl9CiAJCQkJbGlzdF9hZGRfdGFpbCgmZS0+bGlzdCwgJmJpdG1hcHMpOwogCQkJfQogCkBAIC00NzgsOCArNDkzLDcgQEAKIAkgKiBJZiB3ZSdyZSB1bm1vdW50aW5nIHRoZW4ganVzdCByZXR1cm4sIHNpbmNlIHRoaXMgZG9lcyBhIHNlYXJjaCBvbiB0aGUKIAkgKiBub3JtYWwgcm9vdCBhbmQgbm90IHRoZSBjb21taXQgcm9vdCBhbmQgd2UgY291bGQgZGVhZGxvY2suCiAJICovCi0Jc21wX21iKCk7Ci0JaWYgKGZzX2luZm8tPmNsb3NpbmcpCisJaWYgKGJ0cmZzX2ZzX2Nsb3NpbmcoZnNfaW5mbykpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTU3NSwxMCArNTg5LDI1IEBACiAKIAludW1fcGFnZXMgPSAoaV9zaXplX3JlYWQoaW5vZGUpICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4KIAkJUEFHRV9DQUNIRV9TSElGVDsKKworCS8qIFNpbmNlIHRoZSBmaXJzdCBwYWdlIGhhcyBhbGwgb2Ygb3VyIGNoZWNrc3VtcyBhbmQgb3VyIGdlbmVyYXRpb24gd2UKKwkgKiBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IGludG8gdGhlIHBhZ2UgdGhhdCB3ZSBjYW4gc3RhcnQgd3JpdGluZworCSAqIG91ciBlbnRyaWVzLgorCSAqLworCWZpcnN0X3BhZ2Vfb2Zmc2V0ID0gKHNpemVvZih1MzIpICogbnVtX3BhZ2VzKSArIHNpemVvZih1NjQpOworCiAJZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKIAlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIGlub2RlLT5pX3NpemUgJgogCQkJCSB+KHJvb3QtPnNlY3RvcnNpemUgLSAxKSwgKHU2NCktMSk7CiAKKwkvKiBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcmZsb3cgdGhhdCBmaXJzdCBwYWdlICovCisJaWYgKGZpcnN0X3BhZ2Vfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2VudHJ5KSA+PSBQQUdFX0NBQ0hFX1NJWkUpIHsKKwkJLyogdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcnVubmluZyBvdXQgb2Ygc3BhY2UsIHdoZXJlIHdlIGFsc28gcmV0dXJuIDAgKi8KKwkJcHJpbnRrKEtFUk5fQ1JJVCAiQnRyZnM6IGZyZWUgc3BhY2UgY2FjaGUgd2FzIHRvbyBiaWcgZm9yIHRoZSBjcmMgcGFnZVxuIik7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0X3VwZGF0ZTsKKwl9CisKIAkvKiBXZSBuZWVkIGEgY2hlY2tzdW0gcGVyIHBhZ2UuICovCiAJY3JjID0gY2hlY2tzdW1zID0ga3phbGxvYyhzaXplb2YodTMyKSAqIG51bV9wYWdlcywgR0ZQX05PRlMpOwogCWlmICghY3JjKQpAQCAtNTkwLDEyICs2MTksNiBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JLyogU2luY2UgdGhlIGZpcnN0IHBhZ2UgaGFzIGFsbCBvZiBvdXIgY2hlY2tzdW1zIGFuZCBvdXIgZ2VuZXJhdGlvbiB3ZQotCSAqIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUgcGFnZSB0aGF0IHdlIGNhbiBzdGFydCB3cml0aW5nCi0JICogb3VyIGVudHJpZXMuCi0JICovCi0JZmlyc3RfcGFnZV9vZmZzZXQgPSAoc2l6ZW9mKHUzMikgKiBudW1fcGFnZXMpICsgc2l6ZW9mKHU2NCk7Ci0KIAkvKiBHZXQgdGhlIGNsdXN0ZXIgZm9yIHRoaXMgYmxvY2tfZ3JvdXAgaWYgaXQgZXhpc3RzICovCiAJaWYgKGJsb2NrX2dyb3VwICYmICFsaXN0X2VtcHR5KCZibG9ja19ncm91cC0+Y2x1c3Rlcl9saXN0KSkKIAkJY2x1c3RlciA9IGxpc3RfZW50cnkoYmxvY2tfZ3JvdXAtPmNsdXN0ZXJfbGlzdC5uZXh0LApAQCAtODU3LDEyICs4ODAsMTQgQEAKIAlyZXQgPSAxOwogCiBvdXRfZnJlZToKKwlrZnJlZShjaGVja3N1bXMpOworCWtmcmVlKHBhZ2VzKTsKKworb3V0X3VwZGF0ZToKIAlpZiAocmV0ICE9IDEpIHsKIAkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgMCwgaW5kZXgpOwogCQlCVFJGU19JKGlub2RlKS0+Z2VuZXJhdGlvbiA9IDA7CiAJfQotCWtmcmVlKGNoZWNrc3Vtcyk7Ci0Ja2ZyZWUocGFnZXMpOwogCWJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCXJldHVybiByZXQ7CiB9CkBAIC05NjMsMTAgKzk4OCwxNiBAQAogCQkJICogbG9naWNhbGx5LgogCQkJICovCiAJCQlpZiAoYml0bWFwKSB7Ci0JCQkJV0FSTl9PTihpbmZvLT5iaXRtYXApOworCQkJCWlmIChpbmZvLT5iaXRtYXApIHsKKwkJCQkJV0FSTl9PTl9PTkNFKDEpOworCQkJCQlyZXR1cm4gLUVFWElTVDsKKwkJCQl9CiAJCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKIAkJCX0gZWxzZSB7Ci0JCQkJV0FSTl9PTighaW5mby0+Yml0bWFwKTsKKwkJCQlpZiAoIWluZm8tPmJpdG1hcCkgeworCQkJCQlXQVJOX09OX09OQ0UoMSk7CisJCQkJCXJldHVybiAtRUVYSVNUOworCQkJCX0KIAkJCQlwID0gJigqcCktPnJiX2xlZnQ7CiAJCQl9CiAJCX0KQEAgLTEzODYsNiArMTQxNywyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTY0IGFkZF9ieXRlc190b19iaXRtYXAoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwsCisJCQkgICAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm8sIHU2NCBvZmZzZXQsCisJCQkgICAgICAgdTY0IGJ5dGVzKQoreworCXU2NCBieXRlc190b19zZXQgPSAwOworCXU2NCBlbmQ7CisKKwllbmQgPSBpbmZvLT5vZmZzZXQgKyAodTY0KShCSVRTX1BFUl9CSVRNQVAgKiBjdGwtPnVuaXQpOworCisJYnl0ZXNfdG9fc2V0ID0gbWluKGVuZCAtIG9mZnNldCwgYnl0ZXMpOworCisJYml0bWFwX3NldF9iaXRzKGN0bCwgaW5mbywgb2Zmc2V0LCBieXRlc190b19zZXQpOworCisJcmV0dXJuIGJ5dGVzX3RvX3NldDsKKworfQorCiBzdGF0aWMgYm9vbCB1c2VfYml0bWFwKHN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2N0bCAqY3RsLAogCQkgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbykKIHsKQEAgLTE0MjIsMTIgKzE0NzAsMTggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlX29wIGZyZWVfc3BhY2Vfb3AgPSB7CisJLnJlY2FsY190aHJlc2hvbGRzCT0gcmVjYWxjdWxhdGVfdGhyZXNob2xkcywKKwkudXNlX2JpdG1hcAkJPSB1c2VfYml0bWFwLAorfTsKKwogc3RhdGljIGludCBpbnNlcnRfaW50b19iaXRtYXAoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwsCiAJCQkgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbykKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYml0bWFwX2luZm87CisJc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCA9IE5VTEw7CiAJaW50IGFkZGVkID0gMDsKLQl1NjQgYnl0ZXMsIG9mZnNldCwgZW5kOworCXU2NCBieXRlcywgb2Zmc2V0LCBieXRlc19hZGRlZDsKIAlpbnQgcmV0OwogCiAJYnl0ZXMgPSBpbmZvLT5ieXRlczsKQEAgLTE0MzYsNyArMTQ5MCw0OSBAQAogCWlmICghY3RsLT5vcC0+dXNlX2JpdG1hcChjdGwsIGluZm8pKQogCQlyZXR1cm4gMDsKIAorCWlmIChjdGwtPm9wID09ICZmcmVlX3NwYWNlX29wKQorCQlibG9ja19ncm91cCA9IGN0bC0+cHJpdmF0ZTsKIGFnYWluOgorCS8qCisJICogU2luY2Ugd2UgbGluayBiaXRtYXBzIHJpZ2h0IGludG8gdGhlIGNsdXN0ZXIgd2UgbmVlZCB0byBzZWUgaWYgd2UKKwkgKiBoYXZlIGEgY2x1c3RlciBoZXJlLCBhbmQgaWYgc28gYW5kIGl0IGhhcyBvdXIgYml0bWFwIHdlIG5lZWQgdG8gYWRkCisJICogdGhlIGZyZWUgc3BhY2UgdG8gdGhhdCBiaXRtYXAuCisJICovCisJaWYgKGJsb2NrX2dyb3VwICYmICFsaXN0X2VtcHR5KCZibG9ja19ncm91cC0+Y2x1c3Rlcl9saXN0KSkgeworCQlzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyOworCQlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwkJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmVudHJ5OworCisJCWNsdXN0ZXIgPSBsaXN0X2VudHJ5KGJsb2NrX2dyb3VwLT5jbHVzdGVyX2xpc3QubmV4dCwKKwkJCQkgICAgIHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIsCisJCQkJICAgICBibG9ja19ncm91cF9saXN0KTsKKwkJc3Bpbl9sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwkJbm9kZSA9IHJiX2ZpcnN0KCZjbHVzdGVyLT5yb290KTsKKwkJaWYgKCFub2RlKSB7CisJCQlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CisJCQlnb3RvIG5vX2NsdXN0ZXJfYml0bWFwOworCQl9CisKKwkJZW50cnkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgb2Zmc2V0X2luZGV4KTsKKwkJaWYgKCFlbnRyeS0+Yml0bWFwKSB7CisJCQlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CisJCQlnb3RvIG5vX2NsdXN0ZXJfYml0bWFwOworCQl9CisKKwkJaWYgKGVudHJ5LT5vZmZzZXQgPT0gb2Zmc2V0X3RvX2JpdG1hcChjdGwsIG9mZnNldCkpIHsKKwkJCWJ5dGVzX2FkZGVkID0gYWRkX2J5dGVzX3RvX2JpdG1hcChjdGwsIGVudHJ5LAorCQkJCQkJCSAgb2Zmc2V0LCBieXRlcyk7CisJCQlieXRlcyAtPSBieXRlc19hZGRlZDsKKwkJCW9mZnNldCArPSBieXRlc19hZGRlZDsKKwkJfQorCQlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CisJCWlmICghYnl0ZXMpIHsKKwkJCXJldCA9IDE7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworbm9fY2x1c3Rlcl9iaXRtYXA6CiAJYml0bWFwX2luZm8gPSB0cmVlX3NlYXJjaF9vZmZzZXQoY3RsLCBvZmZzZXRfdG9fYml0bWFwKGN0bCwgb2Zmc2V0KSwKIAkJCQkJIDEsIDApOwogCWlmICghYml0bWFwX2luZm8pIHsKQEAgLTE0NDQsMTkgKzE1NDAsMTAgQEAKIAkJZ290byBuZXdfYml0bWFwOwogCX0KIAotCWVuZCA9IGJpdG1hcF9pbmZvLT5vZmZzZXQgKyAodTY0KShCSVRTX1BFUl9CSVRNQVAgKiBjdGwtPnVuaXQpOwotCi0JaWYgKG9mZnNldCA+PSBiaXRtYXBfaW5mby0+b2Zmc2V0ICYmIG9mZnNldCArIGJ5dGVzID4gZW5kKSB7Ci0JCWJpdG1hcF9zZXRfYml0cyhjdGwsIGJpdG1hcF9pbmZvLCBvZmZzZXQsIGVuZCAtIG9mZnNldCk7Ci0JCWJ5dGVzIC09IGVuZCAtIG9mZnNldDsKLQkJb2Zmc2V0ID0gZW5kOwotCQlhZGRlZCA9IDA7Ci0JfSBlbHNlIGlmIChvZmZzZXQgPj0gYml0bWFwX2luZm8tPm9mZnNldCAmJiBvZmZzZXQgKyBieXRlcyA8PSBlbmQpIHsKLQkJYml0bWFwX3NldF9iaXRzKGN0bCwgYml0bWFwX2luZm8sIG9mZnNldCwgYnl0ZXMpOwotCQlieXRlcyA9IDA7Ci0JfSBlbHNlIHsKLQkJQlVHKCk7Ci0JfQorCWJ5dGVzX2FkZGVkID0gYWRkX2J5dGVzX3RvX2JpdG1hcChjdGwsIGJpdG1hcF9pbmZvLCBvZmZzZXQsIGJ5dGVzKTsKKwlieXRlcyAtPSBieXRlc19hZGRlZDsKKwlvZmZzZXQgKz0gYnl0ZXNfYWRkZWQ7CisJYWRkZWQgPSAwOwogCiAJaWYgKCFieXRlcykgewogCQlyZXQgPSAxOwpAQCAtMTczNSwxMSArMTgyMiw2IEBACiAJICAgICAgICJcbiIsIGNvdW50KTsKIH0KIAotc3RhdGljIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlX29wIGZyZWVfc3BhY2Vfb3AgPSB7Ci0JLnJlY2FsY190aHJlc2hvbGRzCT0gcmVjYWxjdWxhdGVfdGhyZXNob2xkcywKLQkudXNlX2JpdG1hcAkJPSB1c2VfYml0bWFwLAotfTsKLQogdm9pZCBidHJmc19pbml0X2ZyZWVfc3BhY2VfY3RsKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXApCiB7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwgPSBibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9jdGw7CkBAIC0yMTExLDkgKzIxOTMsMTEgQEAKIC8qCiAgKiBUaGlzIHNlYXJjaGVzIHRoZSBibG9jayBncm91cCBmb3IganVzdCBleHRlbnRzIHRvIGZpbGwgdGhlIGNsdXN0ZXIgd2l0aC4KICAqLwotc3RhdGljIGludCBzZXR1cF9jbHVzdGVyX25vX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJCSAgIHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIsCi0JCQkJICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzLCB1NjQgbWluX2J5dGVzKQorc3RhdGljIG5vaW5saW5lIGludAorc2V0dXBfY2x1c3Rlcl9ub19iaXRtYXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCXN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIsCisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpiaXRtYXBzLCB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsCisJCQl1NjQgbWluX2J5dGVzKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2N0bCAqY3RsID0gYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsOwogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpmaXJzdCA9IE5VTEw7CkBAIC0yMTM1LDYgKzIyMTksOCBAQAogCSAqIGV4dGVudCBlbnRyeS4KIAkgKi8KIAl3aGlsZSAoZW50cnktPmJpdG1hcCkgeworCQlpZiAobGlzdF9lbXB0eSgmZW50cnktPmxpc3QpKQorCQkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsIGJpdG1hcHMpOwogCQlub2RlID0gcmJfbmV4dCgmZW50cnktPm9mZnNldF9pbmRleCk7CiAJCWlmICghbm9kZSkKIAkJCXJldHVybiAtRU5PU1BDOwpAQCAtMjE1NCw4ICsyMjQwLDEyIEBACiAJCQlyZXR1cm4gLUVOT1NQQzsKIAkJZW50cnkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgb2Zmc2V0X2luZGV4KTsKIAotCQlpZiAoZW50cnktPmJpdG1hcCkKKwkJaWYgKGVudHJ5LT5iaXRtYXApIHsKKwkJCWlmIChsaXN0X2VtcHR5KCZlbnRyeS0+bGlzdCkpCisJCQkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsIGJpdG1hcHMpOwogCQkJY29udGludWU7CisJCX0KKwogCQkvKgogCQkgKiB3ZSBoYXZlbid0IGZpbGxlZCB0aGUgZW1wdHkgc2l6ZSBhbmQgdGhlIHdpbmRvdyBpcwogCQkgKiB2ZXJ5IGxhcmdlLiAgcmVzZXQgYW5kIHRyeSBhZ2FpbgpAQCAtMjIwNyw5ICsyMjk3LDExIEBACiAgKiBUaGlzIHNwZWNpZmljYWxseSBsb29rcyBmb3IgYml0bWFwcyB0aGF0IG1heSB3b3JrIGluIHRoZSBjbHVzdGVyLCB3ZSBhc3N1bWUKICAqIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGZhaWxlZCB0byBmaW5kIGV4dGVudHMgdGhhdCB3aWxsIHdvcmsuCiAgKi8KLXN0YXRpYyBpbnQgc2V0dXBfY2x1c3Rlcl9iaXRtYXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCQlzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyLAotCQkJCXU2NCBvZmZzZXQsIHU2NCBieXRlcywgdTY0IG1pbl9ieXRlcykKK3N0YXRpYyBub2lubGluZSBpbnQKK3NldHVwX2NsdXN0ZXJfYml0bWFwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwKKwkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiaXRtYXBzLCB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsCisJCSAgICAgdTY0IG1pbl9ieXRlcykKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCA9IGJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2N0bDsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZW50cnk7CkBAIC0yMjE5LDEwICsyMzExLDM5IEBACiAJaWYgKGN0bC0+dG90YWxfYml0bWFwcyA9PSAwKQogCQlyZXR1cm4gLUVOT1NQQzsKIAorCS8qCisJICogRmlyc3QgY2hlY2sgb3VyIGNhY2hlZCBsaXN0IG9mIGJpdG1hcHMgYW5kIHNlZSBpZiB0aGVyZSBpcyBhbiBlbnRyeQorCSAqIGhlcmUgdGhhdCB3aWxsIHdvcmsuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgYml0bWFwcywgbGlzdCkgeworCQlpZiAoZW50cnktPmJ5dGVzIDwgbWluX2J5dGVzKQorCQkJY29udGludWU7CisJCXJldCA9IGJ0cmZzX2JpdG1hcF9jbHVzdGVyKGJsb2NrX2dyb3VwLCBlbnRyeSwgY2x1c3Rlciwgb2Zmc2V0LAorCQkJCQkgICBieXRlcywgbWluX2J5dGVzKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRvIGhhdmUgZW50cmllcyBvbiBvdXIgbGlzdCBhbmQgd2UgYXJlIGhlcmUgdGhlbiB3ZSBkaWRuJ3QgZmluZAorCSAqIGFueXRoaW5nLCBzbyBnbyBhaGVhZCBhbmQgZ2V0IHRoZSBuZXh0IGVudHJ5IGFmdGVyIHRoZSBsYXN0IGVudHJ5IGluCisJICogdGhpcyBsaXN0IGFuZCBzdGFydCB0aGUgc2VhcmNoIGZyb20gdGhlcmUuCisJICovCisJaWYgKCFsaXN0X2VtcHR5KGJpdG1hcHMpKSB7CisJCWVudHJ5ID0gbGlzdF9lbnRyeShiaXRtYXBzLT5wcmV2LCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwKKwkJCQkgICBsaXN0KTsKKwkJbm9kZSA9IHJiX25leHQoJmVudHJ5LT5vZmZzZXRfaW5kZXgpOworCQlpZiAoIW5vZGUpCisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJZW50cnkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgb2Zmc2V0X2luZGV4KTsKKwkJZ290byBzZWFyY2g7CisJfQorCiAJZW50cnkgPSB0cmVlX3NlYXJjaF9vZmZzZXQoY3RsLCBvZmZzZXRfdG9fYml0bWFwKGN0bCwgb2Zmc2V0KSwgMCwgMSk7CiAJaWYgKCFlbnRyeSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKK3NlYXJjaDoKIAlub2RlID0gJmVudHJ5LT5vZmZzZXRfaW5kZXg7CiAJZG8gewogCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOwpAQCAtMjI1Myw2ICsyMzc0LDggQEAKIAkJCSAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzLCB1NjQgZW1wdHlfc2l6ZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCA9IGJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2N0bDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJpdG1hcHM7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmVudHJ5LCAqdG1wOwogCXU2NCBtaW5fYnl0ZXM7CiAJaW50IHJldDsKIApAQCAtMjI5MSwxMSArMjQxNCwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBzZXR1cF9jbHVzdGVyX25vX2JpdG1hcChibG9ja19ncm91cCwgY2x1c3Rlciwgb2Zmc2V0LCBieXRlcywKLQkJCQkgICAgICBtaW5fYnl0ZXMpOworCUlOSVRfTElTVF9IRUFEKCZiaXRtYXBzKTsKKwlyZXQgPSBzZXR1cF9jbHVzdGVyX25vX2JpdG1hcChibG9ja19ncm91cCwgY2x1c3RlciwgJmJpdG1hcHMsIG9mZnNldCwKKwkJCQkgICAgICBieXRlcywgbWluX2J5dGVzKTsKIAlpZiAocmV0KQotCQlyZXQgPSBzZXR1cF9jbHVzdGVyX2JpdG1hcChibG9ja19ncm91cCwgY2x1c3Rlciwgb2Zmc2V0LAotCQkJCQkgICBieXRlcywgbWluX2J5dGVzKTsKKwkJcmV0ID0gc2V0dXBfY2x1c3Rlcl9iaXRtYXAoYmxvY2tfZ3JvdXAsIGNsdXN0ZXIsICZiaXRtYXBzLAorCQkJCQkgICBvZmZzZXQsIGJ5dGVzLCBtaW5fYnl0ZXMpOworCisJLyogQ2xlYXIgb3VyIHRlbXBvcmFyeSBsaXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZiaXRtYXBzLCBsaXN0KQorCQlsaXN0X2RlbF9pbml0KCZlbnRyeS0+bGlzdCk7CiAKIAlpZiAoIXJldCkgewogCQlhdG9taWNfaW5jKCZibG9ja19ncm91cC0+Y291bnQpOwpAQCAtMjQ4MSw3ICsyNjA5LDcgQEAKIAkJcmV0dXJuIGlub2RlOwogCiAJc3Bpbl9sb2NrKCZyb290LT5jYWNoZV9sb2NrKTsKLQlpZiAoIXJvb3QtPmZzX2luZm8tPmNsb3NpbmcpCisJaWYgKCFidHJmc19mc19jbG9zaW5nKHJvb3QtPmZzX2luZm8pKQogCQlyb290LT5jYWNoZV9pbm9kZSA9IGlncmFiKGlub2RlKTsKIAlzcGluX3VubG9jaygmcm9vdC0+Y2FjaGVfbG9jayk7CiAKQEAgLTI1MDQsMTIgKzI2MzIsMTQgQEAKIAlpbnQgcmV0ID0gMDsKIAl1NjQgcm9vdF9nZW4gPSBidHJmc19yb290X2dlbmVyYXRpb24oJnJvb3QtPnJvb3RfaXRlbSk7CiAKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybiAwOworCiAJLyoKIAkgKiBJZiB3ZSdyZSB1bm1vdW50aW5nIHRoZW4ganVzdCByZXR1cm4sIHNpbmNlIHRoaXMgZG9lcyBhIHNlYXJjaCBvbiB0aGUKIAkgKiBub3JtYWwgcm9vdCBhbmQgbm90IHRoZSBjb21taXQgcm9vdCBhbmQgd2UgY291bGQgZGVhZGxvY2suCiAJICovCi0Jc21wX21iKCk7Ci0JaWYgKGZzX2luZm8tPmNsb3NpbmcpCisJaWYgKGJ0cmZzX2ZzX2Nsb3NpbmcoZnNfaW5mbykpCiAJCXJldHVybiAwOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKQEAgLTI1NDMsNiArMjY3Myw5IEBACiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgcmV0OwogCisJaWYgKCFidHJmc190ZXN0X29wdChyb290LCBJTk9ERV9NQVBfQ0FDSEUpKQorCQlyZXR1cm4gMDsKKwogCWlub2RlID0gbG9va3VwX2ZyZWVfaW5vX2lub2RlKHJvb3QsIHBhdGgpOwogCWlmIChJU19FUlIoaW5vZGUpKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLW1hcC5jIGIvZnMvYnRyZnMvaW5vZGUtbWFwLmMKaW5kZXggMzI2MmNkMS4uYjQwODdlMCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUtbWFwLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUtbWFwLmMKQEAgLTM4LDYgKzM4LDkgQEAKIAlpbnQgc2xvdDsKIAlpbnQgcmV0OwogCisJaWYgKCFidHJmc190ZXN0X29wdChyb290LCBJTk9ERV9NQVBfQ0FDSEUpKQorCQlyZXR1cm4gMDsKKwogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTU5LDggKzYyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAl3aGlsZSAoMSkgewotCQlzbXBfbWIoKTsKLQkJaWYgKGZzX2luZm8tPmNsb3NpbmcpCisJCWlmIChidHJmc19mc19jbG9zaW5nKGZzX2luZm8pKQogCQkJZ290byBvdXQ7CiAKIAkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwpAQCAtMTQxLDYgKzE0Myw5IEBACiAJaW50IHJldDsKIAl1NjQgb2JqZWN0aWQ7CiAKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybjsKKwogCXNwaW5fbG9jaygmcm9vdC0+Y2FjaGVfbG9jayk7CiAJaWYgKHJvb3QtPmNhY2hlZCAhPSBCVFJGU19DQUNIRV9OTykgewogCQlzcGluX3VubG9jaygmcm9vdC0+Y2FjaGVfbG9jayk7CkBAIC0xNzgsNiArMTgzLDkgQEAKIAogaW50IGJ0cmZzX2ZpbmRfZnJlZV9pbm8oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCAqb2JqZWN0aWQpCiB7CisJaWYgKCFidHJmc190ZXN0X29wdChyb290LCBJTk9ERV9NQVBfQ0FDSEUpKQorCQlyZXR1cm4gYnRyZnNfZmluZF9mcmVlX29iamVjdGlkKHJvb3QsIG9iamVjdGlkKTsKKwogYWdhaW46CiAJKm9iamVjdGlkID0gYnRyZnNfZmluZF9pbm9fZm9yX2FsbG9jKHJvb3QpOwogCkBAIC0yMDEsNiArMjA5LDEwIEBACiB7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwgPSByb290LT5mcmVlX2lub19jdGw7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpwaW5uZWQgPSByb290LT5mcmVlX2lub19waW5uZWQ7CisKKwlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIElOT0RFX01BUF9DQUNIRSkpCisJCXJldHVybjsKKwogYWdhaW46CiAJaWYgKHJvb3QtPmNhY2hlZCA9PSBCVFJGU19DQUNIRV9GSU5JU0hFRCkgewogCQlfX2J0cmZzX2FkZF9mcmVlX3NwYWNlKGN0bCwgb2JqZWN0aWQsIDEpOwpAQCAtMjUwLDYgKzI2Miw5IEBACiAJc3RydWN0IHJiX25vZGUgKm47CiAJdTY0IGNvdW50OwogCisJaWYgKCFidHJmc190ZXN0X29wdChyb290LCBJTk9ERV9NQVBfQ0FDSEUpKQorCQlyZXR1cm47CisKIAl3aGlsZSAoMSkgewogCQluID0gcmJfZmlyc3QocmJyb290KTsKIAkJaWYgKCFuKQpAQCAtMzg4LDkgKzQwMywyNCBAQAogCWludCBwcmVhbGxvYzsKIAlib29sIHJldHJ5ID0gZmFsc2U7CiAKKwkvKiBvbmx5IGZzIHRyZWUgYW5kIHN1YnZvbC9zbmFwIG5lZWRzIGlubyBjYWNoZSAqLworCWlmIChyb290LT5yb290X2tleS5vYmplY3RpZCAhPSBCVFJGU19GU19UUkVFX09CSkVDVElEICYmCisJICAgIChyb290LT5yb290X2tleS5vYmplY3RpZCA8IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQgfHwKKwkgICAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkID4gQlRSRlNfTEFTVF9GUkVFX09CSkVDVElEKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBEb24ndCBzYXZlIGlub2RlIGNhY2hlIGlmIHdlIGFyZSBkZWxldGluZyB0aGlzIHJvb3QgKi8KKwlpZiAoYnRyZnNfcm9vdF9yZWZzKCZyb290LT5yb290X2l0ZW0pID09IDAgJiYKKwkgICAgcm9vdCAhPSByb290LT5mc19pbmZvLT50cmVlX3Jvb3QpCisJCXJldHVybiAwOworCisJaWYgKCFidHJmc190ZXN0X29wdChyb290LCBJTk9ERV9NQVBfQ0FDSEUpKQorCQlyZXR1cm4gMDsKKwogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKKwogYWdhaW46CiAJaW5vZGUgPSBsb29rdXBfZnJlZV9pbm9faW5vZGUocm9vdCwgcGF0aCk7CiAJaWYgKElTX0VSUihpbm9kZSkgJiYgUFRSX0VSUihpbm9kZSkgIT0gLUVOT0VOVCkgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggMzlhOWQ1Ny4uMGE5YjEwYyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC0xMzgsNyArMTM4LDYgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7Ci0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAKIAlrZXkub2JqZWN0aWQgPSBidHJmc19pbm8oaW5vZGUpOwogCWtleS5vZmZzZXQgPSBzdGFydDsKQEAgLTQyNiw5ICs0MjUsOCBAQAogCQl9CiAJfQogCWlmIChzdGFydCA9PSAwKSB7Ci0JCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7Ci0JCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCQl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAogCQkvKiBsZXRzIHRyeSB0byBtYWtlIGFuIGlubGluZSBleHRlbnQgKi8KQEAgLTYyMyw4ICs2MjEsOSBAQAogCQkJICAgIGFzeW5jX2V4dGVudC0+c3RhcnQgKyBhc3luY19leHRlbnQtPnJhbV9zaXplIC0gMSwKIAkJCSAgICBHRlBfTk9GUyk7CiAKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJCUJVR19PTihJU19FUlIodHJhbnMpKTsKKwkJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAJCXJldCA9IGJ0cmZzX3Jlc2VydmVfZXh0ZW50KHRyYW5zLCByb290LAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKIAkJCQkJICAgYXN5bmNfZXh0ZW50LT5jb21wcmVzc2VkX3NpemUsCkBAIC03OTMsOSArNzkyLDggQEAKIAlpbnQgcmV0ID0gMDsKIAogCUJVR19PTihpc19mcmVlX3NwYWNlX2lub2RlKHJvb3QsIGlub2RlKSk7Ci0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlCVUdfT04oSVNfRVJSKHRyYW5zKSk7Ci0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAKIAludW1fYnl0ZXMgPSAoZW5kIC0gc3RhcnQgKyBibG9ja3NpemUpICYgfihibG9ja3NpemUgLSAxKTsKQEAgLTEwNzcsMTAgKzEwNzUsMTIgQEAKIAlub2xvY2sgPSBpc19mcmVlX3NwYWNlX2lub2RlKHJvb3QsIGlub2RlKTsKIAogCWlmIChub2xvY2spCi0JCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCwgMSk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCk7CiAJZWxzZQotCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKKwogCUJVR19PTihJU19FUlIodHJhbnMpKTsKKwl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIAogCWNvd19zdGFydCA9ICh1NjQpLTE7CiAJY3VyX29mZnNldCA9IHN0YXJ0OwpAQCAtMTUxOSw4ICsxNTE5LDYgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9zdW0gKnN1bTsKIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdW0sIGxpc3QsIGxpc3QpIHsKIAkJYnRyZnNfY3N1bV9maWxlX2Jsb2Nrcyh0cmFucywKIAkJICAgICAgIEJUUkZTX0koaW5vZGUpLT5yb290LT5mc19pbmZvLT5jc3VtX3Jvb3QsIHN1bSk7CkBAIC0xNzM1LDExICsxNzMzLDEwIEBACiAJCXJldCA9IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShpbm9kZSwgMCwgb3JkZXJlZF9leHRlbnQpOwogCQlpZiAoIXJldCkgewogCQkJaWYgKG5vbG9jaykKLQkJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHJvb3QsIDEpOworCQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCk7CiAJCQllbHNlCi0JCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJCUJVR19PTihJU19FUlIodHJhbnMpKTsKLQkJCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCQkJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAJCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAkJCUJVR19PTihyZXQpOwpAQCAtMTc1MiwxMSArMTc0OSwxMCBAQAogCQkJIDAsICZjYWNoZWRfc3RhdGUsIEdGUF9OT0ZTKTsKIAogCWlmIChub2xvY2spCi0JCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCwgMSk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCk7CiAJZWxzZQotCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlCVUdfT04oSVNfRVJSKHRyYW5zKSk7Ci0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJdHJhbnMtPmJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAKIAlpZiAodGVzdF9iaXQoQlRSRlNfT1JERVJFRF9DT01QUkVTU0VELCAmb3JkZXJlZF9leHRlbnQtPmZsYWdzKSkKQEAgLTE5OTAsNyArMTk4Niw3IEBACiAJfQogCiAJaWYgKEJUUkZTX0koaW5vZGUpLT5mbGFncyAmIEJUUkZTX0lOT0RFX05PREFUQVNVTSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gZ29vZDsKIAogCWlmIChyb290LT5yb290X2tleS5vYmplY3RpZCA9PSBCVFJGU19EQVRBX1JFTE9DX1RSRUVfT0JKRUNUSUQgJiYKIAkgICAgdGVzdF9yYW5nZV9iaXQoaW9fdHJlZSwgc3RhcnQsIGVuZCwgRVhURU5UX05PREFUQVNVTSwgMSwgTlVMTCkpIHsKQEAgLTI0MzEsNyArMjQyNyw3IEBACiAJCQkJCSh1NjQpLTEpOwogCiAJaWYgKHJvb3QtPm9ycGhhbl9ibG9ja19yc3YgfHwgcm9vdC0+b3JwaGFuX2l0ZW1faW5zZXJ0ZWQpIHsKLQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJCWlmICghSVNfRVJSKHRyYW5zKSkKIAkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJfQpAQCAtMjUxMSwxMiArMjUwNywxMiBAQAogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IGJ0cmZzX2tleSBsb2NhdGlvbjsKIAlpbnQgbWF5YmVfYWNsczsKLQl1NjQgYWxsb2NfZ3JvdXBfYmxvY2s7CiAJdTMyIHJkZXY7CiAJaW50IHJldDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJQlVHX09OKCFwYXRoKTsKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJbWVtY3B5KCZsb2NhdGlvbiwgJkJUUkZTX0koaW5vZGUpLT5sb2NhdGlvbiwgc2l6ZW9mKGxvY2F0aW9uKSk7CiAKIAlyZXQgPSBidHJmc19sb29rdXBfaW5vZGUoTlVMTCwgcm9vdCwgcGF0aCwgJmxvY2F0aW9uLCAwKTsKQEAgLTI1MjYsNiArMjUyMiwxMiBAQAogCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKIAlpbm9kZV9pdGVtID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sCiAJCQkJICAgIHN0cnVjdCBidHJmc19pbm9kZV9pdGVtKTsKKwlpZiAoIWxlYWYtPm1hcF90b2tlbikKKwkJbWFwX3ByaXZhdGVfZXh0ZW50X2J1ZmZlcihsZWFmLCAodW5zaWduZWQgbG9uZylpbm9kZV9pdGVtLAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgYnRyZnNfaW5vZGVfaXRlbSksCisJCQkJCSAgJmxlYWYtPm1hcF90b2tlbiwgJmxlYWYtPmthZGRyLAorCQkJCQkgICZsZWFmLT5tYXBfc3RhcnQsICZsZWFmLT5tYXBfbGVuLAorCQkJCQkgIEtNX1VTRVIxKTsKIAogCWlub2RlLT5pX21vZGUgPSBidHJmc19pbm9kZV9tb2RlKGxlYWYsIGlub2RlX2l0ZW0pOwogCWlub2RlLT5pX25saW5rID0gYnRyZnNfaW5vZGVfbmxpbmsobGVhZiwgaW5vZGVfaXRlbSk7CkBAIC0yNTU1LDggKzI1NTcsNiBAQAogCUJUUkZTX0koaW5vZGUpLT5pbmRleF9jbnQgPSAodTY0KS0xOwogCUJUUkZTX0koaW5vZGUpLT5mbGFncyA9IGJ0cmZzX2lub2RlX2ZsYWdzKGxlYWYsIGlub2RlX2l0ZW0pOwogCi0JYWxsb2NfZ3JvdXBfYmxvY2sgPSBidHJmc19pbm9kZV9ibG9ja19ncm91cChsZWFmLCBpbm9kZV9pdGVtKTsKLQogCS8qCiAJICogdHJ5IHRvIHByZWNhY2hlIGEgTlVMTCBhY2wgZW50cnkgZm9yIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZQogCSAqIGFueSB4YXR0cnMgb3IgYWNscwpAQCAtMjU2Niw4ICsyNTY2LDExIEBACiAJaWYgKCFtYXliZV9hY2xzKQogCQljYWNoZV9ub19hY2woaW5vZGUpOwogCi0JQlRSRlNfSShpbm9kZSktPmJsb2NrX2dyb3VwID0gYnRyZnNfZmluZF9ibG9ja19ncm91cChyb290LCAwLAotCQkJCQkJYWxsb2NfZ3JvdXBfYmxvY2ssIDApOworCWlmIChsZWFmLT5tYXBfdG9rZW4pIHsKKwkJdW5tYXBfZXh0ZW50X2J1ZmZlcihsZWFmLCBsZWFmLT5tYXBfdG9rZW4sIEtNX1VTRVIxKTsKKwkJbGVhZi0+bWFwX3Rva2VuID0gTlVMTDsKKwl9CisKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJaW5vZGVfaXRlbSA9IE5VTEw7CiAKQEAgLTI2NDcsNyArMjY1MCw3IEBACiAJYnRyZnNfc2V0X2lub2RlX3RyYW5zaWQobGVhZiwgaXRlbSwgdHJhbnMtPnRyYW5zaWQpOwogCWJ0cmZzX3NldF9pbm9kZV9yZGV2KGxlYWYsIGl0ZW0sIGlub2RlLT5pX3JkZXYpOwogCWJ0cmZzX3NldF9pbm9kZV9mbGFncyhsZWFmLCBpdGVtLCBCVFJGU19JKGlub2RlKS0+ZmxhZ3MpOwotCWJ0cmZzX3NldF9pbm9kZV9ibG9ja19ncm91cChsZWFmLCBpdGVtLCBCVFJGU19JKGlub2RlKS0+YmxvY2tfZ3JvdXApOworCWJ0cmZzX3NldF9pbm9kZV9ibG9ja19ncm91cChsZWFmLCBpdGVtLCAwKTsKIAogCWlmIChsZWFmLT5tYXBfdG9rZW4pIHsKIAkJdW5tYXBfZXh0ZW50X2J1ZmZlcihsZWFmLCBsZWFmLT5tYXBfdG9rZW4sIEtNX1VTRVIxKTsKQEAgLTMwMDQsOCArMzAwNyw2IEBACiAJaWYgKElTX0VSUih0cmFucykpCiAJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKLQogCWJ0cmZzX3JlY29yZF91bmxpbmtfZGlyKHRyYW5zLCBkaXIsIGRlbnRyeS0+ZF9pbm9kZSwgMCk7CiAKIAlyZXQgPSBidHJmc191bmxpbmtfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwgZGVudHJ5LT5kX2lub2RlLApAQCAtMzA3NSw2ICszMDc2LDcgQEAKIAlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGRpcik7CiAJQlVHX09OKHJldCk7CiAKKwlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwOTQsOCArMzA5Niw2IEBACiAJaWYgKElTX0VSUih0cmFucykpCiAJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKLQogCWlmICh1bmxpa2VseShidHJmc19pbm8oaW5vZGUpID09IEJUUkZTX0VNUFRZX1NVQlZPTF9ESVJfT0JKRUNUSUQpKSB7CiAJCWVyciA9IGJ0cmZzX3VubGlua19zdWJ2b2wodHJhbnMsIHJvb3QsIGRpciwKIAkJCQkJICBCVFJGU19JKGlub2RlKS0+bG9jYXRpb24ub2JqZWN0aWQsCkBAIC0zNTE0LDcgKzM1MTQsNiBAQAogCQkJCWVyciA9IFBUUl9FUlIodHJhbnMpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAKIAkJCWVyciA9IGJ0cmZzX2Ryb3BfZXh0ZW50cyh0cmFucywgaW5vZGUsIGN1cl9vZmZzZXQsCiAJCQkJCQkgY3VyX29mZnNldCArIGhvbGVfc2l6ZSwKQEAgLTM2NDgsOSArMzY0Nyw4IEBACiAJYnRyZnNfaV9zaXplX3dyaXRlKGlub2RlLCAwKTsKIAogCXdoaWxlICgxKSB7Ci0JCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJQlVHX09OKElTX0VSUih0cmFucykpOwotCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAkJdHJhbnMtPmJsb2NrX3JzdiA9IHJvb3QtPm9ycGhhbl9ibG9ja19yc3Y7CiAKIAkJcmV0ID0gYnRyZnNfYmxvY2tfcnN2X2NoZWNrKHRyYW5zLCByb290LApAQCAtNDEzMyw3ICs0MTMxLDggQEAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcGF0aC0+cmVhZGEgPSAyOworCisJcGF0aC0+cmVhZGEgPSAxOwogCiAJaWYgKGtleV90eXBlID09IEJUUkZTX0RJUl9JTkRFWF9LRVkpIHsKIAkJSU5JVF9MSVNUX0hFQUQoJmluc19saXN0KTsKQEAgLTQyNjgsMTggKzQyNjcsMTYgQEAKIAlpZiAoQlRSRlNfSShpbm9kZSktPmR1bW15X2lub2RlKQogCQlyZXR1cm4gMDsKIAotCXNtcF9tYigpOwotCWlmIChyb290LT5mc19pbmZvLT5jbG9zaW5nICYmIGlzX2ZyZWVfc3BhY2VfaW5vZGUocm9vdCwgaW5vZGUpKQorCWlmIChidHJmc19mc19jbG9zaW5nKHJvb3QtPmZzX2luZm8pICYmIGlzX2ZyZWVfc3BhY2VfaW5vZGUocm9vdCwgaW5vZGUpKQogCQlub2xvY2sgPSB0cnVlOwogCiAJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKSB7CiAJCWlmIChub2xvY2spCi0JCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHJvb3QsIDEpOworCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhyb290KTsKIAkJZWxzZQotCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCQlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKLQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCWlmIChub2xvY2spCiAJCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb25fbm9sb2NrKHRyYW5zLCByb290KTsKIAkJZWxzZQpAQCAtNDMwMyw5ICs0MzAwLDggQEAKIAlpZiAoQlRSRlNfSShpbm9kZSktPmR1bW15X2lub2RlKQogCQlyZXR1cm47CiAKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCUJVR19PTihJU19FUlIodHJhbnMpKTsKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAogCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCWlmIChyZXQgJiYgcmV0ID09IC1FTk9TUEMpIHsKQEAgLTQzMTksNyArNDMxNSw2IEBACiAJCQkJICAgICAgIFBUUl9FUlIodHJhbnMpKTsKIAkJCXJldHVybjsKIAkJfQotCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAogCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAkJaWYgKHJldCkgewpAQCAtNDQxOCw4ICs0NDEzLDggQEAKIAkJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSAgICAgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZV9sZW4sCi0JCQkJICAgICB1NjQgcmVmX29iamVjdGlkLCB1NjQgb2JqZWN0aWQsCi0JCQkJICAgICB1NjQgYWxsb2NfaGludCwgaW50IG1vZGUsIHU2NCAqaW5kZXgpCisJCQkJICAgICB1NjQgcmVmX29iamVjdGlkLCB1NjQgb2JqZWN0aWQsIGludCBtb2RlLAorCQkJCSAgICAgdTY0ICppbmRleCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBidHJmc19pbm9kZV9pdGVtICppbm9kZV9pdGVtOwpAQCAtNDQ3Miw4ICs0NDY3LDYgQEAKIAkJb3duZXIgPSAwOwogCWVsc2UKIAkJb3duZXIgPSAxOwotCUJUUkZTX0koaW5vZGUpLT5ibG9ja19ncm91cCA9Ci0JCQlidHJmc19maW5kX2Jsb2NrX2dyb3VwKHJvb3QsIDAsIGFsbG9jX2hpbnQsIG93bmVyKTsKIAogCWtleVswXS5vYmplY3RpZCA9IG9iamVjdGlkOwogCWJ0cmZzX3NldF9rZXlfdHlwZSgma2V5WzBdLCBCVFJGU19JTk9ERV9JVEVNX0tFWSk7CkBAIC00NjI5LDE1ICs0NjIyLDEzIEBACiAJaWYgKElTX0VSUih0cmFucykpCiAJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKLQogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9pbm8ocm9vdCwgJm9iamVjdGlkKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlpbm9kZSA9IGJ0cmZzX25ld19pbm9kZSh0cmFucywgcm9vdCwgZGlyLCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCWRlbnRyeS0+ZF9uYW1lLmxlbiwgYnRyZnNfaW5vKGRpciksIG9iamVjdGlkLAotCQkJCUJUUkZTX0koZGlyKS0+YmxvY2tfZ3JvdXAsIG1vZGUsICZpbmRleCk7CisJCQkJbW9kZSwgJmluZGV4KTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNDY0OSw3ICs0NjQwLDYgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCWVyciA9IGJ0cmZzX2FkZF9ub25kaXIodHJhbnMsIGRpciwgZGVudHJ5LCBpbm9kZSwgMCwgaW5kZXgpOwogCWlmIChlcnIpCiAJCWRyb3BfaW5vZGUgPSAxOwpAQCAtNDY1OCw4ICs0NjQ4LDYgQEAKIAkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCByZGV2KTsKIAkJYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJfQotCWJ0cmZzX3VwZGF0ZV9pbm9kZV9ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwotCWJ0cmZzX3VwZGF0ZV9pbm9kZV9ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIG91dF91bmxvY2s6CiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKQEAgLTQ2OTIsMTUgKzQ2ODAsMTMgQEAKIAlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwotCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX2lubyhyb290LCAmb2JqZWN0aWQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlub2RlID0gYnRyZnNfbmV3X2lub2RlKHRyYW5zLCByb290LCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJZGVudHJ5LT5kX25hbWUubGVuLCBidHJmc19pbm8oZGlyKSwgb2JqZWN0aWQsCi0JCQkJQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCwgbW9kZSwgJmluZGV4KTsKKwkJCQltb2RlLCAmaW5kZXgpOwogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC00NzEyLDcgKzQ2OTgsNiBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJZXJyID0gYnRyZnNfYWRkX25vbmRpcih0cmFucywgZGlyLCBkZW50cnksIGlub2RlLCAwLCBpbmRleCk7CiAJaWYgKGVycikKIAkJZHJvcF9pbm9kZSA9IDE7CkBAIC00NzIzLDggKzQ3MDgsNiBAQAogCQlpbm9kZS0+aV9vcCA9ICZidHJmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiAJCUJUUkZTX0koaW5vZGUpLT5pb190cmVlLm9wcyA9ICZidHJmc19leHRlbnRfaW9fb3BzOwogCX0KLQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKLQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiBvdXRfdW5sb2NrOgogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CkBAIC00NzcxLDggKzQ3NTQsNiBAQAogCiAJYnRyZnNfaW5jX25saW5rKGlub2RlKTsKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAlpaG9sZChpbm9kZSk7CiAKIAllcnIgPSBidHJmc19hZGRfbm9uZGlyKHRyYW5zLCBkaXIsIGRlbnRyeSwgaW5vZGUsIDEsIGluZGV4KTsKQEAgLTQ3ODEsNyArNDc2Miw2IEBACiAJCWRyb3BfaW5vZGUgPSAxOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7Ci0JCWJ0cmZzX3VwZGF0ZV9pbm9kZV9ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAkJZXJyID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CiAJCUJVR19PTihlcnIpOwogCQlidHJmc19sb2dfbmV3X25hbWUodHJhbnMsIGlub2RlLCBOVUxMLCBwYXJlbnQpOwpAQCAtNDgxOCw3ICs0Nzk4LDYgQEAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDUpOwogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7Ci0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX2lubyhyb290LCAmb2JqZWN0aWQpOwogCWlmIChlcnIpCkBAIC00ODI2LDggKzQ4MDUsNyBAQAogCiAJaW5vZGUgPSBidHJmc19uZXdfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQlkZW50cnktPmRfbmFtZS5sZW4sIGJ0cmZzX2lubyhkaXIpLCBvYmplY3RpZCwKLQkJCQlCVFJGU19JKGRpciktPmJsb2NrX2dyb3VwLCBTX0lGRElSIHwgbW9kZSwKLQkJCQkmaW5kZXgpOworCQkJCVNfSUZESVIgfCBtb2RlLCAmaW5kZXgpOwogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQlnb3RvIG91dF9mYWlsOwpAQCAtNDg0MSw3ICs0ODE5LDYgQEAKIAogCWlub2RlLT5pX29wID0gJmJ0cmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCWlub2RlLT5pX2ZvcCA9ICZidHJmc19kaXJfZmlsZV9vcGVyYXRpb25zOwotCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgaW5vZGUpOwogCiAJYnRyZnNfaV9zaXplX3dyaXRlKGlub2RlLCAwKTsKIAllcnIgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKQEAgLTQ4NTUsOCArNDgzMiw2IEBACiAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCWRyb3Bfb25fZXJyID0gMDsKLQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKLQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKIG91dF9mYWlsOgogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwpAQCAtNDk4OSw3ICs0OTY0LDE1IEBACiAKIAlpZiAoIXBhdGgpIHsKIAkJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKLQkJQlVHX09OKCFwYXRoKTsKKwkJaWYgKCFwYXRoKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJLyoKKwkJICogQ2hhbmNlcyBhcmUgd2UnbGwgYmUgY2FsbGVkIGFnYWluLCBzbyBnbyBhaGVhZCBhbmQgZG8KKwkJICogcmVhZGFoZWFkCisJCSAqLworCQlwYXRoLT5yZWFkYSA9IDE7CiAJfQogCiAJcmV0ID0gYnRyZnNfbG9va3VwX2ZpbGVfZXh0ZW50KHRyYW5zLCByb290LCBwYXRoLApAQCAtNTEzMCw4ICs1MTEzLDEwIEBACiAJCQkJa3VubWFwKHBhZ2UpOwogCQkJCWZyZWVfZXh0ZW50X21hcChlbSk7CiAJCQkJZW0gPSBOVUxMOworCiAJCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHBhdGgpOwotCQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CisKIAkJCQlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJCQkJcmV0dXJuIEVSUl9DQVNUKHRyYW5zKTsKIAkJCQlnb3RvIGFnYWluOwpAQCAtNTM3NSw3ICs1MzYwLDcgQEAKIAkJYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoaW5vZGUsIHN0YXJ0LCBzdGFydCArIGxlbiAtIDEsIDApOwogCX0KIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpCiAJCXJldHVybiBFUlJfQ0FTVCh0cmFucyk7CiAKQEAgLTU2MTEsNyArNTU5Niw3IEBACiAJCSAqIHRvIG1ha2Ugc3VyZSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBzdGF5cyBvcGVuCiAJCSAqIHdoaWxlIHdlIGxvb2sgZm9yIG5vY293IGNyb3NzIHJlZnMKIAkJICovCi0JCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKKwkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCQlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJCWdvdG8gbXVzdF9jb3c7CiAKQEAgLTU3NTAsNyArNTczNSw3IEBACiAKIAlCVUdfT04oIW9yZGVyZWQpOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAlpZiAoSVNfRVJSKHRyYW5zKSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTY1MDAsNiArNjQ4NSw3IEBACiBzdGF0aWMgaW50IGJ0cmZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKwlzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICpyc3Y7CiAJaW50IHJldDsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKQEAgLTY1MTMsMjggKzY0OTksODAgQEAKIAlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIGlub2RlLT5pX3NpemUgJiAofm1hc2spLCAodTY0KS0xKTsKIAlidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoaW5vZGUsIGlub2RlLT5pX3NpemUsIE5VTEwpOwogCi0JdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCA1KTsKLQlpZiAoSVNfRVJSKHRyYW5zKSkKLQkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCS8qCisJICogWWVzIGxhZGllcyBhbmQgZ2VudGVsbWVudCwgdGhpcyBpcyBpbmRlZWQgdWdseS4gIFRoZSBmYWN0IGlzIHdlIGhhdmUKKwkgKiAzIHRoaW5ncyBnb2luZyBvbiBoZXJlCisJICoKKwkgKiAxKSBXZSBuZWVkIHRvIHJlc2VydmUgc3BhY2UgZm9yIG91ciBvcnBoYW4gaXRlbSBhbmQgdGhlIHNwYWNlIHRvCisJICogZGVsZXRlIG91ciBvcnBoYW4gaXRlbS4gIExvcmQga25vd3Mgd2UgZG9uJ3Qgd2FudCB0byBoYXZlIGEgZGFuZ2xpbmcKKwkgKiBvcnBoYW4gaXRlbSBiZWNhdXNlIHdlIGRpZG4ndCByZXNlcnZlIHNwYWNlIHRvIHJlbW92ZSBpdC4KKwkgKgorCSAqIDIpIFdlIG5lZWQgdG8gcmVzZXJ2ZSBzcGFjZSB0byB1cGRhdGUgb3VyIGlub2RlLgorCSAqCisJICogMykgV2UgbmVlZCB0byBoYXZlIHNvbWV0aGluZyB0byBjYWNoZSBhbGwgdGhlIHNwYWNlIHRoYXQgaXMgZ29pbmcgdG8KKwkgKiBiZSBmcmVlJ2QgdXAgYnkgdGhlIHRydW5jYXRlIG9wZXJhdGlvbiwgYnV0IGFsc28gaGF2ZSBzb21lIHNsYWNrCisJICogc3BhY2UgcmVzZXJ2ZWQgaW4gY2FzZSBpdCB1c2VzIHNwYWNlIGR1cmluZyB0aGUgdHJ1bmNhdGUgKHRoYW5rIHlvdQorCSAqIHZlcnkgbXVjaCBzbmFwc2hvdHRpbmcpLgorCSAqCisJICogQW5kIHdlIG5lZWQgdGhlc2UgdG8gYWxsIGJlIHNlcGVyYXRlLiAgVGhlIGZhY3QgaXMgd2UgY2FuIHVzZSBhbG90IG9mCisJICogc3BhY2UgZG9pbmcgdGhlIHRydW5jYXRlLCBhbmQgd2UgaGF2ZSBubyBlYXJ0aGx5IGlkZWEgaG93IG11Y2ggc3BhY2UKKwkgKiB3ZSB3aWxsIHVzZSwgc28gd2UgbmVlZCB0aGUgdHJ1bmNhdGUgcmVzZXJ2YXRpb24gdG8gYmUgc2VwZXJhdGUgc28gaXQKKwkgKiBkb2Vzbid0IGVuZCB1cCB1c2luZyBzcGFjZSByZXNlcnZlZCBmb3IgdXBkYXRpbmcgdGhlIGlub2RlIG9yCisJICogcmVtb3ZpbmcgdGhlIG9ycGhhbiBpdGVtLiAgV2UgYWxzbyBuZWVkIHRvIGJlIGFibGUgdG8gc3RvcCB0aGUKKwkgKiB0cmFuc2FjdGlvbiBhbmQgc3RhcnQgYSBuZXcgb25lLCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8KKwkgKiB1cGRhdGUgdGhlIGlub2RlIHNldmVyYWwgdGltZXMsIGFuZCB3ZSBoYXZlIG5vIGlkZWEgb2Yga25vd2luZyBob3cKKwkgKiBtYW55IHRpbWVzIHRoYXQgd2lsbCBiZSwgc28gd2UgY2FuJ3QganVzdCByZXNlcnZlIDEgaXRlbSBmb3IgdGhlCisJICogZW50aXJldHkgb2YgdGhlIG9wcmF0aW9uLCBzbyB0aGF0IGhhcyB0byBiZSBkb25lIHNlcGVyYXRlbHkgYXMgd2VsbC4KKwkgKiBUaGVuIHRoZXJlIGlzIHRoZSBvcnBoYW4gaXRlbSwgd2hpY2ggZG9lcyBpbmRlZWQgbmVlZCB0byBiZSBoZWxkIG9uCisJICogdG8gZm9yIHRoZSB3aG9sZSBvcGVyYXRpb24sIGFuZCB3ZSBuZWVkIG5vYm9keSB0byB0b3VjaCB0aGlzIHJlc2VydmVkCisJICogc3BhY2UgZXhjZXB0IHRoZSBvcnBoYW4gY29kZS4KKwkgKgorCSAqIFNvIHRoYXQgbGVhdmVzIHVzIHdpdGgKKwkgKgorCSAqIDEpIHJvb3QtPm9ycGhhbl9ibG9ja19yc3YgLSBmb3IgdGhlIG9ycGhhbiBkZWxldGlvbi4KKwkgKiAyKSByc3YgLSBmb3IgdGhlIHRydW5jYXRlIHJlc2VydmF0aW9uLCB3aGljaCB3ZSB3aWxsIHN0ZWFsIGZyb20gdGhlCisJICogdHJhbnNhY3Rpb24gcmVzZXJ2YXRpb24uCisJICogMykgZnNfaW5mby0+dHJhbnNfYmxvY2tfcnN2IC0gdGhpcyB3aWxsIGhhdmUgMSBpdGVtcyB3b3J0aCBsZWZ0IGZvcgorCSAqIHVwZGF0aW5nIHRoZSBpbm9kZS4KKwkgKi8KKwlyc3YgPSBidHJmc19hbGxvY19ibG9ja19yc3Yocm9vdCk7CisJaWYgKCFyc3YpCisJCXJldHVybiAtRU5PTUVNOworCWJ0cmZzX2FkZF9kdXJhYmxlX2Jsb2NrX3Jzdihyb290LT5mc19pbmZvLCByc3YpOwogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CisJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCA0KTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBSZXNlcnZlIHNwYWNlIGZvciB0aGUgdHJ1bmNhdGUgcHJvY2Vzcy4gIFRydW5jYXRlIHNob3VsZCBiZSBhZGRpbmcKKwkgKiBzcGFjZSwgYnV0IGlmIHRoZXJlIGFyZSBzbmFwc2hvdHMgaXQgbWF5IGVuZCB1cCB1c2luZyBzcGFjZS4KKwkgKi8KKwlyZXQgPSBidHJmc190cnVuY2F0ZV9yZXNlcnZlX21ldGFkYXRhKHRyYW5zLCByb290LCByc3YpOworCUJVR19PTihyZXQpOwogCiAJcmV0ID0gYnRyZnNfb3JwaGFuX2FkZCh0cmFucywgaW5vZGUpOwogCWlmIChyZXQpIHsKIAkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXQ7CiAJfQogCiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKIAotCS8qIE5vdyBzdGFydCBhIHRyYW5zYWN0aW9uIGZvciB0aGUgdHJ1bmNhdGUgKi8KLQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOwotCWlmIChJU19FUlIodHJhbnMpKQotCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7Ci0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JdHJhbnMtPmJsb2NrX3JzdiA9IHJvb3QtPm9ycGhhbl9ibG9ja19yc3Y7CisJLyoKKwkgKiBPayBzbyB3ZSd2ZSBhbHJlYWR5IG1pZ3JhdGVkIG91ciBieXRlcyBvdmVyIGZvciB0aGUgdHJ1bmNhdGUsIHNvIGhlcmUKKwkgKiBqdXN0IHJlc2VydmUgdGhlIG9uZSBzbG90IHdlIG5lZWQgZm9yIHVwZGF0aW5nIHRoZSBpbm9kZS4KKwkgKi8KKwl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWVyciA9IFBUUl9FUlIodHJhbnMpOworCQlnb3RvIG91dDsKKwl9CisJdHJhbnMtPmJsb2NrX3JzdiA9IHJzdjsKIAogCS8qCiAJICogc2V0YXR0ciBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgb3JkZXJlZF9kYXRhX2Nsb3NlIGZsYWcsCkBAIC02NTU4LDI0ICs2NTk2LDE3IEBACiAKIAl3aGlsZSAoMSkgewogCQlpZiAoIXRyYW5zKSB7Ci0JCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOwotCQkJaWYgKElTX0VSUih0cmFucykpCi0JCQkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwotCQkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7Ci0JCQl0cmFucy0+YmxvY2tfcnN2ID0gcm9vdC0+b3JwaGFuX2Jsb2NrX3JzdjsKLQkJfQorCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAzKTsKKwkJCWlmIChJU19FUlIodHJhbnMpKSB7CisJCQkJZXJyID0gUFRSX0VSUih0cmFucyk7CisJCQkJZ290byBvdXQ7CisJCQl9CiAKLQkJcmV0ID0gYnRyZnNfYmxvY2tfcnN2X2NoZWNrKHRyYW5zLCByb290LAotCQkJCQkgICAgcm9vdC0+b3JwaGFuX2Jsb2NrX3JzdiwgMCwgNSk7Ci0JCWlmIChyZXQgPT0gLUVBR0FJTikgewotCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCXRyYW5zID0gTlVMTDsKLQkJCWNvbnRpbnVlOwotCQl9IGVsc2UgaWYgKHJldCkgewotCQkJZXJyID0gcmV0OwotCQkJYnJlYWs7CisJCQlyZXQgPSBidHJmc190cnVuY2F0ZV9yZXNlcnZlX21ldGFkYXRhKHRyYW5zLCByb290LAorCQkJCQkJCSAgICAgIHJzdik7CisJCQlCVUdfT04ocmV0KTsKKworCQkJdHJhbnMtPmJsb2NrX3JzdiA9IHJzdjsKIAkJfQogCiAJCXJldCA9IGJ0cmZzX3RydW5jYXRlX2lub2RlX2l0ZW1zKHRyYW5zLCByb290LCBpbm9kZSwKQEAgLTY1ODYsNiArNjYxNyw3IEBACiAJCQlicmVhazsKIAkJfQogCisJCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfYmxvY2tfcnN2OwogCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAkJaWYgKHJldCkgewogCQkJZXJyID0gcmV0OwpAQCAtNjU5OSw2ICs2NjMxLDcgQEAKIAl9CiAKIAlpZiAocmV0ID09IDAgJiYgaW5vZGUtPmlfbmxpbmsgPiAwKSB7CisJCXRyYW5zLT5ibG9ja19yc3YgPSByb290LT5vcnBoYW5fYmxvY2tfcnN2OwogCQlyZXQgPSBidHJmc19vcnBoYW5fZGVsKHRyYW5zLCBpbm9kZSk7CiAJCWlmIChyZXQpCiAJCQllcnIgPSByZXQ7CkBAIC02NjEwLDE1ICs2NjQzLDIwIEBACiAJCXJldCA9IGJ0cmZzX29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpOwogCX0KIAorCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfYmxvY2tfcnN2OwogCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCWlmIChyZXQgJiYgIWVycikKIAkJZXJyID0gcmV0OwogCiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKKwlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKKworb3V0OgorCWJ0cmZzX2ZyZWVfYmxvY2tfcnN2KHJvb3QsIHJzdik7CisKIAlpZiAocmV0ICYmICFlcnIpCiAJCWVyciA9IHJldDsKLQlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHJvb3QsIG5yKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC02NjI3LDE1ICs2NjY1LDE0IEBACiAgKiBjcmVhdGUgYSBuZXcgc3Vidm9sdW1lIGRpcmVjdG9yeS9pbm9kZSAoaGVscGVyIGZvciB0aGUgaW9jdGwpLgogICovCiBpbnQgYnRyZnNfY3JlYXRlX3N1YnZvbF9yb290KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqbmV3X3Jvb3QsCi0JCQkgICAgIHU2NCBuZXdfZGlyaWQsIHU2NCBhbGxvY19oaW50KQorCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqbmV3X3Jvb3QsIHU2NCBuZXdfZGlyaWQpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgZXJyOwogCXU2NCBpbmRleCA9IDA7CiAKIAlpbm9kZSA9IGJ0cmZzX25ld19pbm9kZSh0cmFucywgbmV3X3Jvb3QsIE5VTEwsICIuLiIsIDIsIG5ld19kaXJpZCwKLQkJCQluZXdfZGlyaWQsIGFsbG9jX2hpbnQsIFNfSUZESVIgfCAwNzAwLCAmaW5kZXgpOworCQkJCW5ld19kaXJpZCwgU19JRkRJUiB8IDA3MDAsICZpbmRleCk7CiAJaWYgKElTX0VSUihpbm9kZSkpCiAJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKIAlpbm9kZS0+aV9vcCA9ICZidHJmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTY3NDgsMjEgKzY3ODUsNiBAQAogCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9leHRlbnRfbG9jayk7CiAJfQogCi0JaWYgKHJvb3QgPT0gcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290KSB7Ci0JCXN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXA7Ci0KLQkJYmxvY2tfZ3JvdXAgPSBidHJmc19sb29rdXBfYmxvY2tfZ3JvdXAocm9vdC0+ZnNfaW5mbywKLQkJCQkJCUJUUkZTX0koaW5vZGUpLT5ibG9ja19ncm91cCk7Ci0JCWlmIChibG9ja19ncm91cCAmJiBibG9ja19ncm91cC0+aW5vZGUgPT0gaW5vZGUpIHsKLQkJCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPmxvY2spOwotCQkJYmxvY2tfZ3JvdXAtPmlub2RlID0gTlVMTDsKLQkJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+bG9jayk7Ci0JCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwotCQl9IGVsc2UgaWYgKGJsb2NrX2dyb3VwKSB7Ci0JCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwotCQl9Ci0JfQotCiAJc3Bpbl9sb2NrKCZyb290LT5vcnBoYW5fbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZCVFJGU19JKGlub2RlKS0+aV9vcnBoYW4pKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIkJUUkZTOiBpbm9kZSAlbGx1IHN0aWxsIG9uIHRoZSBvcnBoYW4gbGlzdFxuIiwKQEAgLTY5NDgsOCArNjk3MCw2IEBACiAgICAgICAgICAgICAgICAgZ290byBvdXRfbm90cmFuczsKICAgICAgICAgfQogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBuZXdfZGlyKTsKLQogCWlmIChkZXN0ICE9IHJvb3QpCiAJCWJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKHRyYW5zLCBkZXN0KTsKIApAQCAtNzEzMSwxNiArNzE1MSwxMyBAQAogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7Ci0KIAllcnIgPSBidHJmc19maW5kX2ZyZWVfaW5vKHJvb3QsICZvYmplY3RpZCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJaW5vZGUgPSBidHJmc19uZXdfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQlkZW50cnktPmRfbmFtZS5sZW4sIGJ0cmZzX2lubyhkaXIpLCBvYmplY3RpZCwKLQkJCQlCVFJGU19JKGRpciktPmJsb2NrX2dyb3VwLCBTX0lGTE5LfFNfSVJXWFVHTywKLQkJCQkmaW5kZXgpOworCQkJCVNfSUZMTkt8U19JUldYVUdPLCAmaW5kZXgpOwogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC03MTUyLDcgKzcxNjksNiBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJZXJyID0gYnRyZnNfYWRkX25vbmRpcih0cmFucywgZGlyLCBkZW50cnksIGlub2RlLCAwLCBpbmRleCk7CiAJaWYgKGVycikKIAkJZHJvcF9pbm9kZSA9IDE7CkBAIC03MTYzLDggKzcxNzksNiBAQAogCQlpbm9kZS0+aV9vcCA9ICZidHJmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiAJCUJUUkZTX0koaW5vZGUpLT5pb190cmVlLm9wcyA9ICZidHJmc19leHRlbnRfaW9fb3BzOwogCX0KLQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKLQlidHJmc191cGRhdGVfaW5vZGVfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAJaWYgKGRyb3BfaW5vZGUpCiAJCWdvdG8gb3V0X3VubG9jazsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggODVlODE4Yy4uYTNjNDc1MSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYworKysgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJaXAtPmZsYWdzICY9IH4oQlRSRlNfSU5PREVfQ09NUFJFU1MgfCBCVFJGU19JTk9ERV9OT0NPTVBSRVNTKTsKIAl9CiAKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwpAQCAtNDE0LDggKzQxNCw3IEBACiAKIAlidHJmc19yZWNvcmRfcm9vdF9pbl90cmFucyh0cmFucywgbmV3X3Jvb3QpOwogCi0JcmV0ID0gYnRyZnNfY3JlYXRlX3N1YnZvbF9yb290KHRyYW5zLCBuZXdfcm9vdCwgbmV3X2RpcmlkLAotCQkJCSAgICAgICBCVFJGU19JKGRpciktPmJsb2NrX2dyb3VwKTsKKwlyZXQgPSBidHJmc19jcmVhdGVfc3Vidm9sX3Jvb3QodHJhbnMsIG5ld19yb290LCBuZXdfZGlyaWQpOwogCS8qCiAJICogaW5zZXJ0IHRoZSBkaXJlY3RvcnkgaXRlbQogCSAqLwpAQCAtNDgzLDggKzQ4MiwxMCBAQAogCXJldCA9IGJ0cmZzX3NuYXBfcmVzZXJ2ZV9tZXRhZGF0YSh0cmFucywgcGVuZGluZ19zbmFwc2hvdCk7CiAJQlVHX09OKHJldCk7CiAKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCWxpc3RfYWRkKCZwZW5kaW5nX3NuYXBzaG90LT5saXN0LAogCQkgJnRyYW5zLT50cmFuc2FjdGlvbi0+cGVuZGluZ19zbmFwc2hvdHMpOworCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAlpZiAoYXN5bmNfdHJhbnNpZCkgewogCQkqYXN5bmNfdHJhbnNpZCA9IHRyYW5zLT50cmFuc2lkOwogCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb25fYXN5bmModHJhbnMsCkBAIC03MDcsMTYgKzcwOCwxNyBAQAogCXN0cnVjdCBidHJmc19maWxlX2V4dGVudF9pdGVtICpleHRlbnQ7CiAJaW50IHR5cGU7CiAJaW50IHJldDsKKwl1NjQgaW5vID0gYnRyZnNfaW5vKGlub2RlKTsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1pbl9rZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87CisJbWluX2tleS5vYmplY3RpZCA9IGlubzsKIAltaW5fa2V5LnR5cGUgPSBCVFJGU19FWFRFTlRfREFUQV9LRVk7CiAJbWluX2tleS5vZmZzZXQgPSAqb2ZmOwogCi0JbWF4X2tleS5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKKwltYXhfa2V5Lm9iamVjdGlkID0gaW5vOwogCW1heF9rZXkudHlwZSA9ICh1OCktMTsKIAltYXhfa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAKQEAgLTcyNyw3ICs3MjksNyBAQAogCQkJCQkgICBwYXRoLCAwLCBuZXdlcl90aGFuKTsKIAkJaWYgKHJldCAhPSAwKQogCQkJZ290byBub25lOwotCQlpZiAobWluX2tleS5vYmplY3RpZCAhPSBpbm9kZS0+aV9pbm8pCisJCWlmIChtaW5fa2V5Lm9iamVjdGlkICE9IGlubykKIAkJCWdvdG8gbm9uZTsKIAkJaWYgKG1pbl9rZXkudHlwZSAhPSBCVFJGU19FWFRFTlRfREFUQV9LRVkpCiAJCQlnb3RvIG5vbmU7CkBAIC0yMDU0LDI5ICsyMDU2LDM0IEBACiAKIHN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX2ZzX2luZm8oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHZvaWQgX191c2VyICphcmcpCiB7Ci0Jc3RydWN0IGJ0cmZzX2lvY3RsX2ZzX2luZm9fYXJncyBmaV9hcmdzOworCXN0cnVjdCBidHJmc19pb2N0bF9mc19pbmZvX2FyZ3MgKmZpX2FyZ3M7CiAJc3RydWN0IGJ0cmZzX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBidHJmc19kZXZpY2UgKm5leHQ7CiAJc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKmZzX2RldmljZXMgPSByb290LT5mc19pbmZvLT5mc19kZXZpY2VzOworCWludCByZXQgPSAwOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZmlfYXJncy5udW1fZGV2aWNlcyA9IGZzX2RldmljZXMtPm51bV9kZXZpY2VzOwotCWZpX2FyZ3MubWF4X2lkID0gMDsKLQltZW1jcHkoJmZpX2FyZ3MuZnNpZCwgcm9vdC0+ZnNfaW5mby0+ZnNpZCwgc2l6ZW9mKGZpX2FyZ3MuZnNpZCkpOworCWZpX2FyZ3MgPSBremFsbG9jKHNpemVvZigqZmlfYXJncyksIEdGUF9LRVJORUwpOworCWlmICghZmlfYXJncykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmaV9hcmdzLT5udW1fZGV2aWNlcyA9IGZzX2RldmljZXMtPm51bV9kZXZpY2VzOworCW1lbWNweSgmZmlfYXJncy0+ZnNpZCwgcm9vdC0+ZnNfaW5mby0+ZnNpZCwgc2l6ZW9mKGZpX2FyZ3MtPmZzaWQpKTsKIAogCW11dGV4X2xvY2soJmZzX2RldmljZXMtPmRldmljZV9saXN0X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2aWNlLCBuZXh0LCAmZnNfZGV2aWNlcy0+ZGV2aWNlcywgZGV2X2xpc3QpIHsKLQkJaWYgKGRldmljZS0+ZGV2aWQgPiBmaV9hcmdzLm1heF9pZCkKLQkJCWZpX2FyZ3MubWF4X2lkID0gZGV2aWNlLT5kZXZpZDsKKwkJaWYgKGRldmljZS0+ZGV2aWQgPiBmaV9hcmdzLT5tYXhfaWQpCisJCQlmaV9hcmdzLT5tYXhfaWQgPSBkZXZpY2UtPmRldmlkOwogCX0KIAltdXRleF91bmxvY2soJmZzX2RldmljZXMtPmRldmljZV9saXN0X211dGV4KTsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZmlfYXJncywgc2l6ZW9mKGZpX2FyZ3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfdG9fdXNlcihhcmcsIGZpX2FyZ3MsIHNpemVvZigqZmlfYXJncykpKQorCQlyZXQgPSAtRUZBVUxUOwogCi0JcmV0dXJuIDA7CisJa2ZyZWUoZmlfYXJncyk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfZGV2X2luZm8oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHZvaWQgX191c2VyICphcmcpCkBAIC0yNDg5LDEyICsyNDk2LDEwIEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0Jcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucysrOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCWF0b21pY19pbmMoJnJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpOwogCiAJcmV0ID0gLUVOT01FTTsKLQl0cmFucyA9IGJ0cmZzX3N0YXJ0X2lvY3RsX3RyYW5zYWN0aW9uKHJvb3QsIDApOworCXRyYW5zID0gYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24ocm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKQEAgLTI1MDIsOSArMjUwNyw3IEBACiAJcmV0dXJuIDA7CiAKIG91dF9kcm9wOgotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQlyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zLS07Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJYXRvbWljX2RlYygmcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucyk7CiAJbW50X2Ryb3Bfd3JpdGUoZmlsZS0+Zl9wYXRoLm1udCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKQEAgLTI3MzgsOSArMjc0MSw3IEBACiAKIAlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCi0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMtLTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwlhdG9taWNfZGVjKCZyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKTsKIAogCW1udF9kcm9wX3dyaXRlKGZpbGUtPmZfcGF0aC5tbnQpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCmluZGV4IGNhMzhlY2EuLjVlMGEzZGMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYworKysgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKQEAgLTY3Nyw2ICs2NzcsOCBAQAogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CisJcGF0aDEtPnJlYWRhID0gMTsKKwlwYXRoMi0+cmVhZGEgPSAyOwogCiAJbm9kZSA9IGFsbG9jX2JhY2tyZWZfbm9kZShjYWNoZSk7CiAJaWYgKCFub2RlKSB7CkBAIC0xMzY2LDcgKzEzNjgsNyBAQAogCWludCByZXQ7CiAKIAlpZiAoIXJvb3QtPnJlbG9jX3Jvb3QpCi0JCXJldHVybiAwOworCQlnb3RvIG91dDsKIAogCXJlbG9jX3Jvb3QgPSByb290LT5yZWxvY19yb290OwogCXJvb3RfaXRlbSA9ICZyZWxvY19yb290LT5yb290X2l0ZW07CkBAIC0xMzg4LDYgKzEzOTAsOCBAQAogCXJldCA9IGJ0cmZzX3VwZGF0ZV9yb290KHRyYW5zLCByb290LT5mc19pbmZvLT50cmVlX3Jvb3QsCiAJCQkJJnJlbG9jX3Jvb3QtPnJvb3Rfa2V5LCByb290X2l0ZW0pOwogCUJVR19PTihyZXQpOworCitvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5OTksNiArMjAwMyw3IEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOworCXBhdGgtPnJlYWRhID0gMTsKIAogCXJlbG9jX3Jvb3QgPSByb290LT5yZWxvY19yb290OwogCXJvb3RfaXRlbSA9ICZyZWxvY19yb290LT5yb290X2l0ZW07CkBAIC0yMTM5LDEwICsyMTQ0LDExIEBACiAJdTY0IG51bV9ieXRlcyA9IDA7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5yZWxvY19tdXRleCk7CiAJcmMtPm1lcmdpbmdfcnN2X3NpemUgKz0gcm9vdC0+bm9kZXNpemUgKiAoQlRSRlNfTUFYX0xFVkVMIC0gMSkgKiAyOwogCXJjLT5tZXJnaW5nX3Jzdl9zaXplICs9IHJjLT5ub2Rlc19yZWxvY2F0ZWQgKiAyOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+cmVsb2NfbXV0ZXgpOworCiBhZ2FpbjoKIAlpZiAoIWVycikgewogCQludW1fYnl0ZXMgPSByYy0+bWVyZ2luZ19yc3Zfc2l6ZTsKQEAgLTIxNTIsNyArMjE1OCw3IEBACiAJCQllcnIgPSByZXQ7CiAJfQogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpIHsKIAkJaWYgKCFlcnIpCiAJCQlidHJmc19ibG9ja19yc3ZfcmVsZWFzZShyYy0+ZXh0ZW50X3Jvb3QsCkBAIC0yMjExLDkgKzIyMTcsMTYgQEAKIAlpbnQgcmV0OwogYWdhaW46CiAJcm9vdCA9IHJjLT5leHRlbnRfcm9vdDsKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisKKwkvKgorCSAqIHRoaXMgc2VyaWFsaXplcyB1cyB3aXRoIGJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zYWN0aW9uLAorCSAqIHdlIGhhdmUgdG8gbWFrZSBzdXJlIG5vYm9keSBpcyBpbiB0aGUgbWlkZGxlIG9mCisJICogYWRkaW5nIHRoZWlyIHJvb3RzIHRvIHRoZSBsaXN0IHdoaWxlIHdlIGFyZQorCSAqIGRvaW5nIHRoaXMgc3BsaWNlCisJICovCisJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+cmVsb2NfbXV0ZXgpOwogCWxpc3Rfc3BsaWNlX2luaXQoJnJjLT5yZWxvY19yb290cywgJnJlbG9jX3Jvb3RzKTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnJlbG9jX211dGV4KTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmcmVsb2Nfcm9vdHMpKSB7CiAJCWZvdW5kID0gMTsKQEAgLTMyMzYsNyArMzI0OSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpIHsKIAkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCQlyZXQgPSBQVFJfRVJSKHRyYW5zKTsKQEAgLTMzMDAsNiArMzMxMyw3IEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOworCXBhdGgtPnJlYWRhID0gMTsKIAogCXJvb3QgPSByZWFkX2ZzX3Jvb3QocmMtPmV4dGVudF9yb290LT5mc19pbmZvLCByZWZfcm9vdCk7CiAJaWYgKElTX0VSUihyb290KSkgewpAQCAtMzU4NiwxNyArMzYwMCwxOSBAQAogc3RhdGljIHZvaWQgc2V0X3JlbG9jX2NvbnRyb2woc3RydWN0IHJlbG9jX2NvbnRyb2wgKnJjKQogewogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gcmMtPmV4dGVudF9yb290LT5mc19pbmZvOwotCW11dGV4X2xvY2soJmZzX2luZm8tPnRyYW5zX211dGV4KTsKKworCW11dGV4X2xvY2soJmZzX2luZm8tPnJlbG9jX211dGV4KTsKIAlmc19pbmZvLT5yZWxvY19jdGwgPSByYzsKLQltdXRleF91bmxvY2soJmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwltdXRleF91bmxvY2soJmZzX2luZm8tPnJlbG9jX211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgdW5zZXRfcmVsb2NfY29udHJvbChzdHJ1Y3QgcmVsb2NfY29udHJvbCAqcmMpCiB7CiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8gPSByYy0+ZXh0ZW50X3Jvb3QtPmZzX2luZm87Ci0JbXV0ZXhfbG9jaygmZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCisJbXV0ZXhfbG9jaygmZnNfaW5mby0+cmVsb2NfbXV0ZXgpOwogCWZzX2luZm8tPnJlbG9jX2N0bCA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT50cmFuc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT5yZWxvY19tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfZXh0ZW50X2ZsYWdzKHU2NCBmbGFncykKQEAgLTM2NDUsNyArMzY2MSw3IEBACiAJcmMtPmNyZWF0ZV9yZWxvY190cmVlID0gMTsKIAlzZXRfcmVsb2NfY29udHJvbChyYyk7CiAKLQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKKwl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290KTsKIAlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOwogCXJldHVybiAwOwpAQCAtMzY2OCw2ICszNjg0LDcgQEAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CisJcGF0aC0+cmVhZGEgPSAxOwogCiAJcmV0ID0gcHJlcGFyZV90b19yZWxvY2F0ZShyYyk7CiAJaWYgKHJldCkgewpAQCAtMzgzNCw3ICszODUxLDcgQEAKIAlidHJmc19ibG9ja19yc3ZfcmVsZWFzZShyYy0+ZXh0ZW50X3Jvb3QsIHJjLT5ibG9ja19yc3YsICh1NjQpLTEpOwogCiAJLyogZ2V0IHJpZCBvZiBwaW5uZWQgZXh0ZW50cyAqLwotCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QpOwogCWlmIChJU19FUlIodHJhbnMpKQogCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKIAllbHNlCkBAIC00MDkzLDYgKzQxMTAsNyBAQAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKKwlwYXRoLT5yZWFkYSA9IC0xOwogCiAJa2V5Lm9iamVjdGlkID0gQlRSRlNfVFJFRV9SRUxPQ19PQkpFQ1RJRDsKIAlrZXkudHlwZSA9IEJUUkZTX1JPT1RfSVRFTV9LRVk7CkBAIC00MTU5LDcgKzQxNzcsNyBAQAogCiAJc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpIHsKIAkJdW5zZXRfcmVsb2NfY29udHJvbChyYyk7CiAJCWVyciA9IFBUUl9FUlIodHJhbnMpOwpAQCAtNDE5Myw3ICs0MjExLDcgQEAKIAogCXVuc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCi0JdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCk7CiAJaWYgKElTX0VSUih0cmFucykpCiAJCWVyciA9IFBUUl9FUlIodHJhbnMpOwogCWVsc2UKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3NjcnViLmMgYi9mcy9idHJmcy9zY3J1Yi5jCmluZGV4IDZkZmVkMGMuLmE4ZDAzZDUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3NjcnViLmMKKysrIGIvZnMvYnRyZnMvc2NydWIuYwpAQCAtMTYsMTMgKzE2LDcgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgImN0cmVlLmgiCiAjaW5jbHVkZSAidm9sdW1lcy5oIgogI2luY2x1ZGUgImRpc2staW8uaCIKQEAgLTExNywzMyArMTExLDM3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzY3J1Yl9mcmVlX2JpbyhzdHJ1Y3QgYmlvICpiaW8pCit7CisJaW50IGk7CisJc3RydWN0IHBhZ2UgKmxhc3RfcGFnZSA9IE5VTEw7CisKKwlpZiAoIWJpbykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGJpby0+YmlfdmNudDsgKytpKSB7CisJCWlmIChiaW8tPmJpX2lvX3ZlY1tpXS5idl9wYWdlID09IGxhc3RfcGFnZSkKKwkJCWNvbnRpbnVlOworCQlsYXN0X3BhZ2UgPSBiaW8tPmJpX2lvX3ZlY1tpXS5idl9wYWdlOworCQlfX2ZyZWVfcGFnZShsYXN0X3BhZ2UpOworCX0KKwliaW9fcHV0KGJpbyk7Cit9CisKIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBzY3J1Yl9mcmVlX2RldihzdHJ1Y3Qgc2NydWJfZGV2ICpzZGV2KQogewogCWludCBpOwotCWludCBqOwotCXN0cnVjdCBwYWdlICpsYXN0X3BhZ2U7CiAKIAlpZiAoIXNkZXYpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBTQ1JVQl9CSU9TX1BFUl9ERVY7ICsraSkgewogCQlzdHJ1Y3Qgc2NydWJfYmlvICpzYmlvID0gc2Rldi0+Ymlvc1tpXTsKLQkJc3RydWN0IGJpbyAqYmlvOwogCiAJCWlmICghc2JpbykKIAkJCWJyZWFrOwogCi0JCWJpbyA9IHNiaW8tPmJpbzsKLQkJaWYgKGJpbykgewotCQkJbGFzdF9wYWdlID0gTlVMTDsKLQkJCWZvciAoaiA9IDA7IGogPCBiaW8tPmJpX3ZjbnQ7ICsraikgewotCQkJCWlmIChiaW8tPmJpX2lvX3ZlY1tqXS5idl9wYWdlID09IGxhc3RfcGFnZSkKLQkJCQkJY29udGludWU7Ci0JCQkJbGFzdF9wYWdlID0gYmlvLT5iaV9pb192ZWNbal0uYnZfcGFnZTsKLQkJCQlfX2ZyZWVfcGFnZShsYXN0X3BhZ2UpOwotCQkJfQotCQkJYmlvX3B1dChiaW8pOwotCQl9CisJCXNjcnViX2ZyZWVfYmlvKHNiaW8tPmJpbyk7CiAJCWtmcmVlKHNiaW8pOwogCX0KIApAQCAtMTU2LDggKzE1NCw2IEBACiB7CiAJc3RydWN0IHNjcnViX2RldiAqc2RldjsKIAlpbnQJCWk7Ci0JaW50CQlqOwotCWludAkJcmV0OwogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gZGV2LT5kZXZfcm9vdC0+ZnNfaW5mbzsKIAogCXNkZXYgPSBremFsbG9jKHNpemVvZigqc2RldiksIEdGUF9OT0ZTKTsKQEAgLTE2NSw3ICsxNjEsNiBAQAogCQlnb3RvIG5vbWVtOwogCXNkZXYtPmRldiA9IGRldjsKIAlmb3IgKGkgPSAwOyBpIDwgU0NSVUJfQklPU19QRVJfREVWOyArK2kpIHsKLQkJc3RydWN0IGJpbyAqYmlvOwogCQlzdHJ1Y3Qgc2NydWJfYmlvICpzYmlvOwogCiAJCXNiaW8gPSBremFsbG9jKHNpemVvZigqc2JpbyksIEdGUF9OT0ZTKTsKQEAgLTE3MywzMiArMTY4LDEwIEBACiAJCQlnb3RvIG5vbWVtOwogCQlzZGV2LT5iaW9zW2ldID0gc2JpbzsKIAotCQliaW8gPSBiaW9fa21hbGxvYyhHRlBfTk9GUywgU0NSVUJfUEFHRVNfUEVSX0JJTyk7Ci0JCWlmICghYmlvKQotCQkJZ290byBub21lbTsKLQogCQlzYmlvLT5pbmRleCA9IGk7CiAJCXNiaW8tPnNkZXYgPSBzZGV2OwotCQlzYmlvLT5iaW8gPSBiaW87CiAJCXNiaW8tPmNvdW50ID0gMDsKIAkJc2Jpby0+d29yay5mdW5jID0gc2NydWJfY2hlY2tzdW07Ci0JCWJpby0+YmlfcHJpdmF0ZSA9IHNkZXYtPmJpb3NbaV07Ci0JCWJpby0+YmlfZW5kX2lvID0gc2NydWJfYmlvX2VuZF9pbzsKLQkJYmlvLT5iaV9zZWN0b3IgPSAwOwotCQliaW8tPmJpX2JkZXYgPSBkZXYtPmJkZXY7Ci0JCWJpby0+Ymlfc2l6ZSA9IDA7Ci0KLQkJZm9yIChqID0gMDsgaiA8IFNDUlVCX1BBR0VTX1BFUl9CSU87ICsraikgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfTk9GUyk7Ci0JCQlpZiAoIXBhZ2UpCi0JCQkJZ290byBub21lbTsKLQotCQkJcmV0ID0gYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgUEFHRV9TSVpFLCAwKTsKLQkJCWlmICghcmV0KQotCQkJCWdvdG8gbm9tZW07Ci0JCX0KLQkJV0FSTl9PTihiaW8tPmJpX3ZjbnQgIT0gU0NSVUJfUEFHRVNfUEVSX0JJTyk7CiAKIAkJaWYgKGkgIT0gU0NSVUJfQklPU19QRVJfREVWLTEpCiAJCQlzZGV2LT5iaW9zW2ldLT5uZXh0X2ZyZWUgPSBpICsgMTsKQEAgLTM2OSw5ICszNDIsNiBAQAogCWludCByZXQ7CiAJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcGxldGUpOwogCi0JLyogd2UgYXJlIGdvaW5nIHRvIHdhaXQgb24gdGhpcyBJTyAqLwotCXJ3IHw9IFJFUV9TWU5DOwotCiAJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0ZTLCAxKTsKIAliaW8tPmJpX2JkZXYgPSBiZGV2OwogCWJpby0+Ymlfc2VjdG9yID0gc2VjdG9yOwpAQCAtMzgwLDYgKzM1MCw3IEBACiAJYmlvLT5iaV9wcml2YXRlID0gJmNvbXBsZXRlOwogCXN1Ym1pdF9iaW8ocncsIGJpbyk7CiAKKwkvKiB0aGlzIHdpbGwgYWxzbyB1bnBsdWcgdGhlIHF1ZXVlICovCiAJd2FpdF9mb3JfY29tcGxldGlvbigmY29tcGxldGUpOwogCiAJcmV0ID0gIXRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOwpAQCAtMzk0LDYgKzM2NSw3IEBACiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8gPSBzZGV2LT5kZXYtPmRldl9yb290LT5mc19pbmZvOwogCiAJc2Jpby0+ZXJyID0gZXJyOworCXNiaW8tPmJpbyA9IGJpbzsKIAogCWJ0cmZzX3F1ZXVlX3dvcmtlcigmZnNfaW5mby0+c2NydWJfd29ya2VycywgJnNiaW8tPndvcmspOwogfQpAQCAtNDUzLDYgKzQyNSw4IEBACiAJfQogCiBvdXQ6CisJc2NydWJfZnJlZV9iaW8oc2Jpby0+YmlvKTsKKwlzYmlvLT5iaW8gPSBOVUxMOwogCXNwaW5fbG9jaygmc2Rldi0+bGlzdF9sb2NrKTsKIAlzYmlvLT5uZXh0X2ZyZWUgPSBzZGV2LT5maXJzdF9mcmVlOwogCXNkZXYtPmZpcnN0X2ZyZWUgPSBzYmlvLT5pbmRleDsKQEAgLTU4MywyNSArNTU3LDUwIEBACiBzdGF0aWMgaW50IHNjcnViX3N1Ym1pdChzdHJ1Y3Qgc2NydWJfZGV2ICpzZGV2KQogewogCXN0cnVjdCBzY3J1Yl9iaW8gKnNiaW87CisJc3RydWN0IGJpbyAqYmlvOworCWludCBpOwogCiAJaWYgKHNkZXYtPmN1cnIgPT0gLTEpCiAJCXJldHVybiAwOwogCiAJc2JpbyA9IHNkZXYtPmJpb3Nbc2Rldi0+Y3Vycl07CiAKLQlzYmlvLT5iaW8tPmJpX3NlY3RvciA9IHNiaW8tPnBoeXNpY2FsID4+IDk7Ci0Jc2Jpby0+YmlvLT5iaV9zaXplID0gc2Jpby0+Y291bnQgKiBQQUdFX1NJWkU7Ci0Jc2Jpby0+YmlvLT5iaV9uZXh0ID0gTlVMTDsKLQlzYmlvLT5iaW8tPmJpX2ZsYWdzIHw9IDEgPDwgQklPX1VQVE9EQVRFOwotCXNiaW8tPmJpby0+YmlfY29tcF9jcHUgPSAtMTsKLQlzYmlvLT5iaW8tPmJpX2JkZXYgPSBzZGV2LT5kZXYtPmJkZXY7CisJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0ZTLCBzYmlvLT5jb3VudCk7CisJaWYgKCFiaW8pCisJCWdvdG8gbm9tZW07CisKKwliaW8tPmJpX3ByaXZhdGUgPSBzYmlvOworCWJpby0+YmlfZW5kX2lvID0gc2NydWJfYmlvX2VuZF9pbzsKKwliaW8tPmJpX2JkZXYgPSBzZGV2LT5kZXYtPmJkZXY7CisJYmlvLT5iaV9zZWN0b3IgPSBzYmlvLT5waHlzaWNhbCA+PiA5OworCisJZm9yIChpID0gMDsgaSA8IHNiaW8tPmNvdW50OyArK2kpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCWludCByZXQ7CisKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX05PRlMpOworCQlpZiAoIXBhZ2UpCisJCQlnb3RvIG5vbWVtOworCisJCXJldCA9IGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIFBBR0VfU0laRSwgMCk7CisJCWlmICghcmV0KSB7CisJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJCWdvdG8gbm9tZW07CisJCX0KKwl9CisKIAlzYmlvLT5lcnIgPSAwOwogCXNkZXYtPmN1cnIgPSAtMTsKIAlhdG9taWNfaW5jKCZzZGV2LT5pbl9mbGlnaHQpOwogCi0Jc3VibWl0X2JpbygwLCBzYmlvLT5iaW8pOworCXN1Ym1pdF9iaW8oUkVBRCwgYmlvKTsKIAogCXJldHVybiAwOworCitub21lbToKKwlzY3J1Yl9mcmVlX2JpbyhiaW8pOworCisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBpbnQgc2NydWJfcGFnZShzdHJ1Y3Qgc2NydWJfZGV2ICpzZGV2LCB1NjQgbG9naWNhbCwgdTY0IGxlbiwKQEAgLTYzMyw3ICs2MzIsMTEgQEAKIAkJc2Jpby0+bG9naWNhbCA9IGxvZ2ljYWw7CiAJfSBlbHNlIGlmIChzYmlvLT5waHlzaWNhbCArIHNiaW8tPmNvdW50ICogUEFHRV9TSVpFICE9IHBoeXNpY2FsIHx8CiAJCSAgIHNiaW8tPmxvZ2ljYWwgKyBzYmlvLT5jb3VudCAqIFBBR0VfU0laRSAhPSBsb2dpY2FsKSB7Ci0JCXNjcnViX3N1Ym1pdChzZGV2KTsKKwkJaW50IHJldDsKKworCQlyZXQgPSBzY3J1Yl9zdWJtaXQoc2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCQlnb3RvIGFnYWluOwogCX0KIAlzYmlvLT5zcGFnW3NiaW8tPmNvdW50XS5mbGFncyA9IGZsYWdzOwpAQCAtNjQ1LDggKzY0OCwxMyBAQAogCQltZW1jcHkoc2Jpby0+c3BhZ1tzYmlvLT5jb3VudF0uY3N1bSwgY3N1bSwgc2Rldi0+Y3N1bV9zaXplKTsKIAl9CiAJKytzYmlvLT5jb3VudDsKLQlpZiAoc2Jpby0+Y291bnQgPT0gU0NSVUJfUEFHRVNfUEVSX0JJTyB8fCBmb3JjZSkKLQkJc2NydWJfc3VibWl0KHNkZXYpOworCWlmIChzYmlvLT5jb3VudCA9PSBTQ1JVQl9QQUdFU19QRVJfQklPIHx8IGZvcmNlKSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gc2NydWJfc3VibWl0KHNkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcyNyw2ICs3MzUsNyBAQAogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gZnNfaW5mby0+ZXh0ZW50X3Jvb3Q7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKmNzdW1fcm9vdCA9IGZzX2luZm8tPmNzdW1fcm9vdDsKIAlzdHJ1Y3QgYnRyZnNfZXh0ZW50X2l0ZW0gKmV4dGVudDsKKwlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAl1NjQgZmxhZ3M7CiAJaW50IHJldDsKIAlpbnQgc2xvdDsKQEAgLTc4OSwxOCArNzk4LDEyIEBACiAKIAkJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgcm9vdCwgJmtleSwgcGF0aCwgMCwgMCk7CiAJCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9ub3BsdWc7CiAKLQkJbCA9IHBhdGgtPm5vZGVzWzBdOwotCQlzbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShsLCAma2V5LCBzbG90KTsKLQkJaWYgKGtleS5vYmplY3RpZCAhPSBsb2dpY2FsKSB7Ci0JCQlyZXQgPSBidHJmc19wcmV2aW91c19pdGVtKHJvb3QsIHBhdGgsIDAsCi0JCQkJCQkgIEJUUkZTX0VYVEVOVF9JVEVNX0tFWSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlnb3RvIG91dDsKLQkJfQotCisJCS8qCisJCSAqIHdlIG1pZ2h0IG1pc3MgaGFsZiBhbiBleHRlbnQgaGVyZSwgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIsCisJCSAqIGFzIGl0J3Mgb25seSB0aGUgcHJlZmV0Y2gKKwkJICovCiAJCXdoaWxlICgxKSB7CiAJCQlsID0gcGF0aC0+bm9kZXNbMF07CiAJCQlzbG90ID0gcGF0aC0+c2xvdHNbMF07CkBAIC04MDksNyArODEyLDcgQEAKIAkJCQlpZiAocmV0ID09IDApCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChyZXQgPCAwKQotCQkJCQlnb3RvIG91dDsKKwkJCQkJZ290byBvdXRfbm9wbHVnOwogCiAJCQkJYnJlYWs7CiAJCQl9CkBAIC04MzEsNiArODM0LDcgQEAKIAkgKiB0aGUgc2NydWIuIFRoaXMgbWlnaHQgY3VycmVudGx5IChjcmMzMikgZW5kIHVwIHRvIGJlIGFib3V0IDFNQgogCSAqLwogCXN0YXJ0X3N0cmlwZSA9IDA7CisJYmxrX3N0YXJ0X3BsdWcoJnBsdWcpOwogYWdhaW46CiAJbG9naWNhbCA9IGJhc2UgKyBvZmZzZXQgKyBzdGFydF9zdHJpcGUgKiBpbmNyZW1lbnQ7CiAJZm9yIChpID0gc3RhcnRfc3RyaXBlOyBpIDwgbnN0cmlwZXM7ICsraSkgewpAQCAtODkwLDE1ICs4OTQsMjAgQEAKIAkJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgcm9vdCwgJmtleSwgcGF0aCwgMCwgMCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7Ci0KLQkJbCA9IHBhdGgtPm5vZGVzWzBdOwotCQlzbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShsLCAma2V5LCBzbG90KTsKLQkJaWYgKGtleS5vYmplY3RpZCAhPSBsb2dpY2FsKSB7CisJCWlmIChyZXQgPiAwKSB7CiAJCQlyZXQgPSBidHJmc19wcmV2aW91c19pdGVtKHJvb3QsIHBhdGgsIDAsCiAJCQkJCQkgIEJUUkZTX0VYVEVOVF9JVEVNX0tFWSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlnb3RvIG91dDsKKwkJCWlmIChyZXQgPiAwKSB7CisJCQkJLyogdGhlcmUncyBubyBzbWFsbGVyIGl0ZW0sIHNvIHN0aWNrIHdpdGggdGhlCisJCQkJICogbGFyZ2VyIG9uZSAqLworCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChwYXRoKTsKKwkJCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LAorCQkJCQkJCXBhdGgsIDAsIDApOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KIAkJfQogCiAJCXdoaWxlICgxKSB7CkBAIC05NzIsNiArOTgxLDggQEAKIAlzY3J1Yl9zdWJtaXQoc2Rldik7CiAKIG91dDoKKwlibGtfZmluaXNoX3BsdWcoJnBsdWcpOworb3V0X25vcGx1ZzoKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwogfQpAQCAtMTA0Nyw4ICsxMDU4LDE1IEBACiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgcm9vdCwgJmtleSwgcGF0aCwgMCwgMCk7CiAJCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXJldCA9IDA7CisJCQlicmVhazsKKwkJaWYgKHJldCA+IDApIHsKKwkJCWlmIChwYXRoLT5zbG90c1swXSA+PQorCQkJICAgIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHBhdGgtPm5vZGVzWzBdKSkgeworCQkJCXJldCA9IGJ0cmZzX25leHRfbGVhZihyb290LCBwYXRoKTsKKwkJCQlpZiAocmV0KQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQogCiAJCWwgPSBwYXRoLT5ub2Rlc1swXTsKIAkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwpAQCAtMTA1OCw3ICsxMDc2LDcgQEAKIAkJaWYgKGZvdW5kX2tleS5vYmplY3RpZCAhPSBzZGV2LT5kZXYtPmRldmlkKQogCQkJYnJlYWs7CiAKLQkJaWYgKGJ0cmZzX2tleV90eXBlKCZrZXkpICE9IEJUUkZTX0RFVl9FWFRFTlRfS0VZKQorCQlpZiAoYnRyZnNfa2V5X3R5cGUoJmZvdW5kX2tleSkgIT0gQlRSRlNfREVWX0VYVEVOVF9LRVkpCiAJCQlicmVhazsKIAogCQlpZiAoZm91bmRfa2V5Lm9mZnNldCA+PSBlbmQpCkBAIC0xMDg3LDcgKzExMDUsNyBAQAogCQljYWNoZSA9IGJ0cmZzX2xvb2t1cF9ibG9ja19ncm91cChmc19pbmZvLCBjaHVua19vZmZzZXQpOwogCQlpZiAoIWNhY2hlKSB7CiAJCQlyZXQgPSAtRU5PRU5UOwotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJfQogCQlyZXQgPSBzY3J1Yl9jaHVuayhzZGV2LCBjaHVua190cmVlLCBjaHVua19vYmplY3RpZCwKIAkJCQkgIGNodW5rX29mZnNldCwgbGVuZ3RoKTsKQEAgLTEwOTksOSArMTExNywxMyBAQAogCQlidHJmc19yZWxlYXNlX3BhdGgocGF0aCk7CiAJfQogCi1vdXQ6CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCXJldHVybiByZXQ7CisKKwkvKgorCSAqIHJldCBjYW4gc3RpbGwgYmUgMSBmcm9tIHNlYXJjaF9zbG90IG9yIG5leHRfbGVhZiwKKwkgKiB0aGF0J3Mgbm90IGFuIGVycm9yCisJICovCisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwogfQogCiBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBzY3J1Yl9zdXBlcnMoc3RydWN0IHNjcnViX2RldiAqc2RldikKQEAgLTExMzgsOCArMTE2MCwxMiBAQAogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gcm9vdC0+ZnNfaW5mbzsKIAogCW11dGV4X2xvY2soJmZzX2luZm8tPnNjcnViX2xvY2spOwotCWlmIChmc19pbmZvLT5zY3J1Yl93b3JrZXJzX3JlZmNudCA9PSAwKQorCWlmIChmc19pbmZvLT5zY3J1Yl93b3JrZXJzX3JlZmNudCA9PSAwKSB7CisJCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+c2NydWJfd29ya2VycywgInNjcnViIiwKKwkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CisJCWZzX2luZm8tPnNjcnViX3dvcmtlcnMuaWRsZV90aHJlc2ggPSA0OwogCQlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5zY3J1Yl93b3JrZXJzLCAxKTsKKwl9CiAJKytmc19pbmZvLT5zY3J1Yl93b3JrZXJzX3JlZmNudDsKIAltdXRleF91bmxvY2soJmZzX2luZm8tPnNjcnViX2xvY2spOwogCkBAIC0xMTY2LDcgKzExOTIsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IGJ0cmZzX2RldmljZSAqZGV2OwogCi0JaWYgKHJvb3QtPmZzX2luZm8tPmNsb3NpbmcpCisJaWYgKGJ0cmZzX2ZzX2Nsb3Npbmcocm9vdC0+ZnNfaW5mbykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDliMmU3ZTUuLjBiYjRlYmIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtMTYxLDcgKzE2MSw4IEBACiAJT3B0X2NvbXByZXNzX3R5cGUsIE9wdF9jb21wcmVzc19mb3JjZSwgT3B0X2NvbXByZXNzX2ZvcmNlX3R5cGUsCiAJT3B0X25vdHJlZWxvZywgT3B0X3JhdGlvLCBPcHRfZmx1c2hvbmNvbW1pdCwgT3B0X2Rpc2NhcmQsCiAJT3B0X3NwYWNlX2NhY2hlLCBPcHRfY2xlYXJfY2FjaGUsIE9wdF91c2VyX3N1YnZvbF9ybV9hbGxvd2VkLAotCU9wdF9lbm9zcGNfZGVidWcsIE9wdF9zdWJ2b2xyb290aWQsIE9wdF9kZWZyYWcsIE9wdF9lcnIsCisJT3B0X2Vub3NwY19kZWJ1ZywgT3B0X3N1YnZvbHJvb3RpZCwgT3B0X2RlZnJhZywKKwlPcHRfaW5vZGVfY2FjaGUsIE9wdF9lcnIsCiB9OwogCiBzdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CkBAIC0xOTMsNiArMTk0LDcgQEAKIAl7T3B0X2Vub3NwY19kZWJ1ZywgImVub3NwY19kZWJ1ZyJ9LAogCXtPcHRfc3Vidm9scm9vdGlkLCAic3Vidm9scm9vdGlkPSVkIn0sCiAJe09wdF9kZWZyYWcsICJhdXRvZGVmcmFnIn0sCisJe09wdF9pbm9kZV9jYWNoZSwgImlub2RlX2NhY2hlIn0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtMzYxLDYgKzM2MywxMCBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnM6IGVuYWJsaW5nIGRpc2sgc3BhY2UgY2FjaGluZ1xuIik7CiAJCQlidHJmc19zZXRfb3B0KGluZm8tPm1vdW50X29wdCwgU1BBQ0VfQ0FDSEUpOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2lub2RlX2NhY2hlOgorCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnM6IGVuYWJsaW5nIGlub2RlIG1hcCBjYWNoaW5nXG4iKTsKKwkJCWJ0cmZzX3NldF9vcHQoaW5mby0+bW91bnRfb3B0LCBJTk9ERV9NQVBfQ0FDSEUpOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2NsZWFyX2NhY2hlOgogCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnM6IGZvcmNlIGNsZWFyaW5nIG9mIGRpc2sgY2FjaGVcbiIpOwogCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIENMRUFSX0NBQ0hFKTsKQEAgLTgxOSw3ICs4MjUsNyBAQAogCX0gZWxzZSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCQlzLT5zX2ZsYWdzID0gZmxhZ3M7CisJCXMtPnNfZmxhZ3MgPSBmbGFncyB8IE1TX05PU0VDOwogCQlzdHJsY3B5KHMtPnNfaWQsIGJkZXZuYW1lKGJkZXYsIGIpLCBzaXplb2Yocy0+c19pZCkpOwogCQllcnJvciA9IGJ0cmZzX2ZpbGxfc3VwZXIocywgZnNfZGV2aWNlcywgZGF0YSwKIAkJCQkJIGZsYWdzICYgTVNfU0lMRU5UID8gMSA6IDApOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3lzZnMuYyBiL2ZzL2J0cmZzL3N5c2ZzLmMKaW5kZXggYzNjMjIzYS4uZGFhYzlhZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3lzZnMuYworKysgYi9mcy9idHJmcy9zeXNmcy5jCkBAIC0yOCwxNTIgKzI4LDYgQEAKICNpbmNsdWRlICJkaXNrLWlvLmgiCiAjaW5jbHVkZSAidHJhbnNhY3Rpb24uaCIKIAotc3RhdGljIHNzaXplX3Qgcm9vdF9ibG9ja3NfdXNlZF9zaG93KHN0cnVjdCBidHJmc19yb290ICpyb290LCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWxsdVxuIiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZylidHJmc19yb290X3VzZWQoJnJvb3QtPnJvb3RfaXRlbSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCByb290X2Jsb2NrX2xpbWl0X3Nob3coc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGx1XG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWJ0cmZzX3Jvb3RfbGltaXQoJnJvb3QtPnJvb3RfaXRlbSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdXBlcl9ibG9ja3NfdXNlZF9zaG93KHN0cnVjdCBidHJmc19mc19pbmZvICpmcywgY2hhciAqYnVmKQotewotCi0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWxsdVxuIiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZylidHJmc19zdXBlcl9ieXRlc191c2VkKCZmcy0+c3VwZXJfY29weSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdXBlcl90b3RhbF9ibG9ja3Nfc2hvdyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGx1XG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWJ0cmZzX3N1cGVyX3RvdGFsX2J5dGVzKCZmcy0+c3VwZXJfY29weSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzdXBlcl9ibG9ja3NpemVfc2hvdyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGx1XG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWJ0cmZzX3N1cGVyX3NlY3RvcnNpemUoJmZzLT5zdXBlcl9jb3B5KSk7Ci19Ci0KLS8qIHRoaXMgaXMgZm9yIHJvb3QgYXR0cnMgKHN1YnZvbHMvc25hcHNob3RzKSAqLwotc3RydWN0IGJ0cmZzX3Jvb3RfYXR0ciB7Ci0Jc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwotCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgYnRyZnNfcm9vdCAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGJ0cmZzX3Jvb3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwotfTsKLQotI2RlZmluZSBST09UX0FUVFIobmFtZSwgbW9kZSwgc2hvdywgc3RvcmUpIFwKLXN0YXRpYyBzdHJ1Y3QgYnRyZnNfcm9vdF9hdHRyIGJ0cmZzX3Jvb3RfYXR0cl8jI25hbWUgPSBfX0FUVFIobmFtZSwgbW9kZSwgXAotCQkJCQkJCSAgICAgIHNob3csIHN0b3JlKQotCi1ST09UX0FUVFIoYmxvY2tzX3VzZWQsCTA0NDQsCXJvb3RfYmxvY2tzX3VzZWRfc2hvdywJTlVMTCk7Ci1ST09UX0FUVFIoYmxvY2tfbGltaXQsCTA2NDQsCXJvb3RfYmxvY2tfbGltaXRfc2hvdywJTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpidHJmc19yb290X2F0dHJzW10gPSB7Ci0JJmJ0cmZzX3Jvb3RfYXR0cl9ibG9ja3NfdXNlZC5hdHRyLAotCSZidHJmc19yb290X2F0dHJfYmxvY2tfbGltaXQuYXR0ciwKLQlOVUxMLAotfTsKLQotLyogdGhpcyBpcyBmb3Igc3VwZXIgYXR0cnMgKGFjdHVhbCBmdWxsIGZzKSAqLwotc3RydWN0IGJ0cmZzX3N1cGVyX2F0dHIgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGJ0cmZzX2ZzX2luZm8gKiwgY2hhciAqKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBidHJmc19mc19pbmZvICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKLX07Ci0KLSNkZWZpbmUgU1VQRVJfQVRUUihuYW1lLCBtb2RlLCBzaG93LCBzdG9yZSkgXAotc3RhdGljIHN0cnVjdCBidHJmc19zdXBlcl9hdHRyIGJ0cmZzX3N1cGVyX2F0dHJfIyNuYW1lID0gX19BVFRSKG5hbWUsIG1vZGUsIFwKLQkJCQkJCQkJc2hvdywgc3RvcmUpCi0KLVNVUEVSX0FUVFIoYmxvY2tzX3VzZWQsCQkwNDQ0LAlzdXBlcl9ibG9ja3NfdXNlZF9zaG93LAkJTlVMTCk7Ci1TVVBFUl9BVFRSKHRvdGFsX2Jsb2NrcywJMDQ0NCwJc3VwZXJfdG90YWxfYmxvY2tzX3Nob3csCU5VTEwpOwotU1VQRVJfQVRUUihibG9ja3NpemUsCQkwNDQ0LAlzdXBlcl9ibG9ja3NpemVfc2hvdywJCU5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYnRyZnNfc3VwZXJfYXR0cnNbXSA9IHsKLQkmYnRyZnNfc3VwZXJfYXR0cl9ibG9ja3NfdXNlZC5hdHRyLAotCSZidHJmc19zdXBlcl9hdHRyX3RvdGFsX2Jsb2Nrcy5hdHRyLAotCSZidHJmc19zdXBlcl9hdHRyX2Jsb2Nrc2l6ZS5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3NpemVfdCBidHJmc19zdXBlcl9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnMgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGJ0cmZzX2ZzX2luZm8sCi0JCQkJCQlzdXBlcl9rb2JqKTsKLQlzdHJ1Y3QgYnRyZnNfc3VwZXJfYXR0ciAqYSA9IGNvbnRhaW5lcl9vZihhdHRyLAotCQkJCQkJICBzdHJ1Y3QgYnRyZnNfc3VwZXJfYXR0ciwKLQkJCQkJCSAgYXR0cik7Ci0KLQlyZXR1cm4gYS0+c2hvdyA/IGEtPnNob3coZnMsIGJ1ZikgOiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBidHJmc19zdXBlcl9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnMgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGJ0cmZzX2ZzX2luZm8sCi0JCQkJCQlzdXBlcl9rb2JqKTsKLQlzdHJ1Y3QgYnRyZnNfc3VwZXJfYXR0ciAqYSA9IGNvbnRhaW5lcl9vZihhdHRyLAotCQkJCQkJICBzdHJ1Y3QgYnRyZnNfc3VwZXJfYXR0ciwKLQkJCQkJCSAgYXR0cik7Ci0KLQlyZXR1cm4gYS0+c3RvcmUgPyBhLT5zdG9yZShmcywgYnVmLCBsZW4pIDogMDsKLX0KLQotc3RhdGljIHNzaXplX3QgYnRyZnNfcm9vdF9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgYnRyZnNfcm9vdCwKLQkJCQkJCXJvb3Rfa29iaik7Ci0Jc3RydWN0IGJ0cmZzX3Jvb3RfYXR0ciAqYSA9IGNvbnRhaW5lcl9vZihhdHRyLAotCQkJCQkJIHN0cnVjdCBidHJmc19yb290X2F0dHIsCi0JCQkJCQkgYXR0cik7Ci0KLQlyZXR1cm4gYS0+c2hvdyA/IGEtPnNob3cocm9vdCwgYnVmKSA6IDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGJ0cmZzX3Jvb3RfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGJ0cmZzX3Jvb3QsCi0JCQkJCQlyb290X2tvYmopOwotCXN0cnVjdCBidHJmc19yb290X2F0dHIgKmEgPSBjb250YWluZXJfb2YoYXR0ciwKLQkJCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdF9hdHRyLAotCQkJCQkJIGF0dHIpOwotCXJldHVybiBhLT5zdG9yZSA/IGEtPnN0b3JlKHJvb3QsIGJ1ZiwgbGVuKSA6IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ0cmZzX3N1cGVyX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCi17Ci0Jc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBidHJmc19mc19pbmZvLAotCQkJCQkJc3VwZXJfa29iaik7Ci0JY29tcGxldGUoJmZzLT5rb2JqX3VucmVnaXN0ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBidHJmc19yb290X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCi17Ci0Jc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGJ0cmZzX3Jvb3QsCi0JCQkJCQlyb290X2tvYmopOwotCWNvbXBsZXRlKCZyb290LT5rb2JqX3VucmVnaXN0ZXIpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBidHJmc19zdXBlcl9hdHRyX29wcyA9IHsKLQkuc2hvdwk9IGJ0cmZzX3N1cGVyX2F0dHJfc2hvdywKLQkuc3RvcmUJPSBidHJmc19zdXBlcl9hdHRyX3N0b3JlLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgYnRyZnNfcm9vdF9hdHRyX29wcyA9IHsKLQkuc2hvdwk9IGJ0cmZzX3Jvb3RfYXR0cl9zaG93LAotCS5zdG9yZQk9IGJ0cmZzX3Jvb3RfYXR0cl9zdG9yZSwKLX07Ci0KIC8qIC9zeXMvZnMvYnRyZnMvIGVudHJ5ICovCiBzdGF0aWMgc3RydWN0IGtzZXQgKmJ0cmZzX2tzZXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCmluZGV4IGRjODBmNzEuLjUxZGNlYzggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtMzUsNiArMzUsNyBAQAogewogCVdBUk5fT04oYXRvbWljX3JlYWQoJnRyYW5zYWN0aW9uLT51c2VfY291bnQpID09IDApOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0cmFuc2FjdGlvbi0+dXNlX2NvdW50KSkgeworCQlCVUdfT04oIWxpc3RfZW1wdHkoJnRyYW5zYWN0aW9uLT5saXN0KSk7CiAJCW1lbXNldCh0cmFuc2FjdGlvbiwgMCwgc2l6ZW9mKCp0cmFuc2FjdGlvbikpOwogCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfdHJhbnNhY3Rpb25fY2FjaGVwLCB0cmFuc2FjdGlvbik7CiAJfQpAQCAtNDksNDYgKzUwLDcyIEBACiAvKgogICogZWl0aGVyIGFsbG9jYXRlIGEgbmV3IHRyYW5zYWN0aW9uIG9yIGhvcCBpbnRvIHRoZSBleGlzdGluZyBvbmUKICAqLwotc3RhdGljIG5vaW5saW5lIGludCBqb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290KQorc3RhdGljIG5vaW5saW5lIGludCBqb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgbm9mYWlsKQogewogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqY3VyX3RyYW5zOworCisJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKKwlpZiAocm9vdC0+ZnNfaW5mby0+dHJhbnNfbm9fam9pbikgeworCQlpZiAoIW5vZmFpbCkgeworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKwogCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247Ci0JaWYgKCFjdXJfdHJhbnMpIHsKLQkJY3VyX3RyYW5zID0ga21lbV9jYWNoZV9hbGxvYyhidHJmc190cmFuc2FjdGlvbl9jYWNoZXAsCi0JCQkJCSAgICAgR0ZQX05PRlMpOwotCQlpZiAoIWN1cl90cmFucykKLQkJCXJldHVybiAtRU5PTUVNOwotCQlyb290LT5mc19pbmZvLT5nZW5lcmF0aW9uKys7Ci0JCWF0b21pY19zZXQoJmN1cl90cmFucy0+bnVtX3dyaXRlcnMsIDEpOwotCQljdXJfdHJhbnMtPm51bV9qb2luZWQgPSAwOwotCQljdXJfdHJhbnMtPnRyYW5zaWQgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KTsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmY3VyX3RyYW5zLT5jb21taXRfd2FpdCk7Ci0JCWN1cl90cmFucy0+aW5fY29tbWl0ID0gMDsKLQkJY3VyX3RyYW5zLT5ibG9ja2VkID0gMDsKLQkJYXRvbWljX3NldCgmY3VyX3RyYW5zLT51c2VfY291bnQsIDEpOwotCQljdXJfdHJhbnMtPmNvbW1pdF9kb25lID0gMDsKLQkJY3VyX3RyYW5zLT5zdGFydF90aW1lID0gZ2V0X3NlY29uZHMoKTsKLQotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5yb290ID0gUkJfUk9PVDsKLQkJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMubnVtX2VudHJpZXMgPSAwOwotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1faGVhZHNfcmVhZHkgPSAwOwotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1faGVhZHMgPSAwOwotCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5mbHVzaGluZyA9IDA7Ci0JCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLnJ1bl9kZWxheWVkX3N0YXJ0ID0gMDsKLQkJc3Bpbl9sb2NrX2luaXQoJmN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmxvY2spOwotCi0JCUlOSVRfTElTVF9IRUFEKCZjdXJfdHJhbnMtPnBlbmRpbmdfc25hcHNob3RzKTsKLQkJbGlzdF9hZGRfdGFpbCgmY3VyX3RyYW5zLT5saXN0LCAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbGlzdCk7Ci0JCWV4dGVudF9pb190cmVlX2luaXQoJmN1cl90cmFucy0+ZGlydHlfcGFnZXMsCi0JCQkJICAgICByb290LT5mc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nKTsKLQkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7Ci0JCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24gPSBjdXJfdHJhbnM7Ci0JCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7Ci0JfSBlbHNlIHsKKwlpZiAoY3VyX3RyYW5zKSB7CisJCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKIAkJYXRvbWljX2luYygmY3VyX3RyYW5zLT5udW1fd3JpdGVycyk7CiAJCWN1cl90cmFucy0+bnVtX2pvaW5lZCsrOworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisJCXJldHVybiAwOwogCX0KKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisKKwljdXJfdHJhbnMgPSBrbWVtX2NhY2hlX2FsbG9jKGJ0cmZzX3RyYW5zYWN0aW9uX2NhY2hlcCwgR0ZQX05PRlMpOworCWlmICghY3VyX3RyYW5zKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCWlmIChyb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uKSB7CisJCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc2FjdGlvbl9jYWNoZXAsIGN1cl90cmFucyk7CisJCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247CisJCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKKwkJYXRvbWljX2luYygmY3VyX3RyYW5zLT5udW1fd3JpdGVycyk7CisJCWN1cl90cmFucy0+bnVtX2pvaW5lZCsrOworCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisJCXJldHVybiAwOworCX0KKwlhdG9taWNfc2V0KCZjdXJfdHJhbnMtPm51bV93cml0ZXJzLCAxKTsKKwljdXJfdHJhbnMtPm51bV9qb2luZWQgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN1cl90cmFucy0+Y29tbWl0X3dhaXQpOworCWN1cl90cmFucy0+aW5fY29tbWl0ID0gMDsKKwljdXJfdHJhbnMtPmJsb2NrZWQgPSAwOworCS8qCisJICogT25lIGZvciB0aGlzIHRyYW5zIGhhbmRsZSwgb25lIHNvIGl0IHdpbGwgbGl2ZSBvbiB1bnRpbCB3ZQorCSAqIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb24uCisJICovCisJYXRvbWljX3NldCgmY3VyX3RyYW5zLT51c2VfY291bnQsIDIpOworCWN1cl90cmFucy0+Y29tbWl0X2RvbmUgPSAwOworCWN1cl90cmFucy0+c3RhcnRfdGltZSA9IGdldF9zZWNvbmRzKCk7CisKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5yb290ID0gUkJfUk9PVDsKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1fZW50cmllcyA9IDA7CisJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMubnVtX2hlYWRzX3JlYWR5ID0gMDsKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1faGVhZHMgPSAwOworCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nID0gMDsKKwljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5ydW5fZGVsYXllZF9zdGFydCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJmN1cl90cmFucy0+Y29tbWl0X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZjdXJfdHJhbnMtPnBlbmRpbmdfc25hcHNob3RzKTsKKwlsaXN0X2FkZF90YWlsKCZjdXJfdHJhbnMtPmxpc3QsICZyb290LT5mc19pbmZvLT50cmFuc19saXN0KTsKKwlleHRlbnRfaW9fdHJlZV9pbml0KCZjdXJfdHJhbnMtPmRpcnR5X3BhZ2VzLAorCQkJICAgICByb290LT5mc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nKTsKKwlyb290LT5mc19pbmZvLT5nZW5lcmF0aW9uKys7CisJY3VyX3RyYW5zLT50cmFuc2lkID0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbjsKKwlyb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uID0gY3VyX3RyYW5zOworCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTksMzYgKzEyNiw4MiBAQAogICogdG8gbWFrZSBzdXJlIHRoZSBvbGQgcm9vdCBmcm9tIGJlZm9yZSB3ZSBqb2luZWQgdGhlIHRyYW5zYWN0aW9uIGlzIGRlbGV0ZWQKICAqIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGNvbW1pdHMKICAqLwotc3RhdGljIG5vaW5saW5lIGludCByZWNvcmRfcm9vdF9pbl90cmFucyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290KQorc3RhdGljIGludCByZWNvcmRfcm9vdF9pbl90cmFucyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKIAlpZiAocm9vdC0+cmVmX2Nvd3MgJiYgcm9vdC0+bGFzdF90cmFucyA8IHRyYW5zLT50cmFuc2lkKSB7CiAJCVdBUk5fT04ocm9vdCA9PSByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCk7CiAJCVdBUk5fT04ocm9vdC0+Y29tbWl0X3Jvb3QgIT0gcm9vdC0+bm9kZSk7CiAKKwkJLyoKKwkJICogc2VlIGJlbG93IGZvciBpbl90cmFuc19zZXR1cCB1c2FnZSBydWxlcworCQkgKiB3ZSBoYXZlIHRoZSByZWxvYyBtdXRleCBoZWxkIG5vdywgc28gdGhlcmUKKwkJICogaXMgb25seSBvbmUgd3JpdGVyIGluIHRoaXMgZnVuY3Rpb24KKwkJICovCisJCXJvb3QtPmluX3RyYW5zX3NldHVwID0gMTsKKworCQkvKiBtYWtlIHN1cmUgcmVhZGVycyBmaW5kIGluX3RyYW5zX3NldHVwIGJlZm9yZQorCQkgKiB0aGV5IGZpbmQgb3VyIHJvb3QtPmxhc3RfdHJhbnMgdXBkYXRlCisJCSAqLworCQlzbXBfd21iKCk7CisKKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5mc19yb290c19yYWRpeF9sb2NrKTsKKwkJaWYgKHJvb3QtPmxhc3RfdHJhbnMgPT0gdHJhbnMtPnRyYW5zaWQpIHsKKwkJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5mc19yb290c19yYWRpeF9sb2NrKTsKKwkJCXJldHVybiAwOworCQl9CiAJCXJhZGl4X3RyZWVfdGFnX3NldCgmcm9vdC0+ZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXgsCiAJCQkgICAodW5zaWduZWQgbG9uZylyb290LT5yb290X2tleS5vYmplY3RpZCwKIAkJCSAgIEJUUkZTX1JPT1RfVFJBTlNfVEFHKTsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4X2xvY2spOwogCQlyb290LT5sYXN0X3RyYW5zID0gdHJhbnMtPnRyYW5zaWQ7CisKKwkJLyogdGhpcyBpcyBwcmV0dHkgdHJpY2t5LiAgV2UgZG9uJ3Qgd2FudCB0bworCQkgKiB0YWtlIHRoZSByZWxvY2F0aW9uIGxvY2sgaW4gYnRyZnNfcmVjb3JkX3Jvb3RfaW5fdHJhbnMKKwkJICogdW5sZXNzIHdlJ3JlIHJlYWxseSBkb2luZyB0aGUgZmlyc3Qgc2V0dXAgZm9yIHRoaXMgcm9vdCBpbgorCQkgKiB0aGlzIHRyYW5zYWN0aW9uLgorCQkgKgorCQkgKiBOb3JtYWxseSB3ZSdkIHVzZSByb290LT5sYXN0X3RyYW5zIGFzIGEgZmxhZyB0byBkZWNpZGUKKwkJICogaWYgd2Ugd2FudCB0byB0YWtlIHRoZSBleHBlbnNpdmUgbXV0ZXguCisJCSAqCisJCSAqIEJ1dCwgd2UgaGF2ZSB0byBzZXQgcm9vdC0+bGFzdF90cmFucyBiZWZvcmUgd2UKKwkJICogaW5pdCB0aGUgcmVsb2NhdGlvbiByb290LCBvdGhlcndpc2UsIHdlIHRyaXAgb3ZlciB3YXJuaW5ncworCQkgKiBpbiBjdHJlZS5jLiAgVGhlIHNvbHV0aW9uIHVzZWQgaGVyZSBpcyB0byBmbGFnIG91cnNlbHZlcworCQkgKiB3aXRoIHJvb3QtPmluX3RyYW5zX3NldHVwLiAgV2hlbiB0aGlzIGlzIDEsIHdlJ3JlIHN0aWxsCisJCSAqIGZpeGluZyB1cCB0aGUgcmVsb2MgdHJlZXMgYW5kIGV2ZXJ5b25lIG11c3Qgd2FpdC4KKwkJICoKKwkJICogV2hlbiB0aGlzIGlzIHplcm8sIHRoZXkgY2FuIHRydXN0IHJvb3QtPmxhc3RfdHJhbnMgYW5kIGZseQorCQkgKiB0aHJvdWdoIGJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zIHdpdGhvdXQgaGF2aW5nIHRvIHRha2UgdGhlCisJCSAqIGxvY2suICBzbXBfd21iKCkgbWFrZXMgc3VyZSB0aGF0IGFsbCB0aGUgd3JpdGVzIGFib3ZlIGFyZQorCQkgKiBkb25lIGJlZm9yZSB3ZSBwb3AgaW4gdGhlIHplcm8gYmVsb3cKKwkJICovCiAJCWJ0cmZzX2luaXRfcmVsb2Nfcm9vdCh0cmFucywgcm9vdCk7CisJCXNtcF93bWIoKTsKKwkJcm9vdC0+aW5fdHJhbnNfc2V0dXAgPSAwOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorCiBpbnQgYnRyZnNfcmVjb3JkX3Jvb3RfaW5fdHJhbnMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7CiAJaWYgKCFyb290LT5yZWZfY293cykKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0JaWYgKHJvb3QtPmxhc3RfdHJhbnMgPT0gdHJhbnMtPnRyYW5zaWQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJLyoKKwkgKiBzZWUgcmVjb3JkX3Jvb3RfaW5fdHJhbnMgZm9yIGNvbW1lbnRzIGFib3V0IGluX3RyYW5zX3NldHVwIHVzYWdlCisJICogYW5kIGJhcnJpZXJzCisJICovCisJc21wX3JtYigpOworCWlmIChyb290LT5sYXN0X3RyYW5zID09IHRyYW5zLT50cmFuc2lkICYmCisJICAgICFyb290LT5pbl90cmFuc19zZXR1cCkKIAkJcmV0dXJuIDA7Ci0JfQogCisJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+cmVsb2NfbXV0ZXgpOwogCXJlY29yZF9yb290X2luX3RyYW5zKHRyYW5zLCByb290KTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnJlbG9jX211dGV4KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNDAsMjEgKzIxMywyMyBAQAogewogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqY3VyX3RyYW5zOwogCisJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAljdXJfdHJhbnMgPSByb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uOwogCWlmIChjdXJfdHJhbnMgJiYgY3VyX3RyYW5zLT5ibG9ja2VkKSB7CiAJCURFRklORV9XQUlUKHdhaXQpOwogCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAkJd2hpbGUgKDEpIHsKIAkJCXByZXBhcmVfdG9fd2FpdCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCwgJndhaXQsCiAJCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJCWlmICghY3VyX3RyYW5zLT5ibG9ja2VkKQogCQkJCWJyZWFrOwotCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCQlzY2hlZHVsZSgpOwotCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQl9CiAJCWZpbmlzaF93YWl0KCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl93YWl0LCAmd2FpdCk7CiAJCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOworCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAl9CiB9CiAKQEAgLTE2NywxMCArMjQyLDE2IEBACiAKIHN0YXRpYyBpbnQgbWF5X3dhaXRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCB0eXBlKQogewotCWlmICghcm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfcmVjb3ZlcmluZyAmJgotCSAgICAoKHR5cGUgPT0gVFJBTlNfU1RBUlQgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpIHx8Ci0JICAgICB0eXBlID09IFRSQU5TX1VTRVJTUEFDRSkpCisJaWYgKHJvb3QtPmZzX2luZm8tPmxvZ19yb290X3JlY292ZXJpbmcpCisJCXJldHVybiAwOworCisJaWYgKHR5cGUgPT0gVFJBTlNfVVNFUlNQQUNFKQogCQlyZXR1cm4gMTsKKworCWlmICh0eXBlID09IFRSQU5TX1NUQVJUICYmCisJICAgICFhdG9taWNfcmVhZCgmcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucykpCisJCXJldHVybiAxOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NCwzNiArMjY1LDQ0IEBACiAKIAlpZiAocm9vdC0+ZnNfaW5mby0+ZnNfc3RhdGUgJiBCVFJGU19TVVBFUl9GTEFHX0VSUk9SKQogCQlyZXR1cm4gRVJSX1BUUigtRVJPRlMpOworCisJaWYgKGN1cnJlbnQtPmpvdXJuYWxfaW5mbykgeworCQlXQVJOX09OKHR5cGUgIT0gVFJBTlNfSk9JTiAmJiB0eXBlICE9IFRSQU5TX0pPSU5fTk9MT0NLKTsKKwkJaCA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKKwkJaC0+dXNlX2NvdW50Kys7CisJCWgtPm9yaWdfcnN2ID0gaC0+YmxvY2tfcnN2OworCQloLT5ibG9ja19yc3YgPSBOVUxMOworCQlnb3RvIGdvdF9pdDsKKwl9CiBhZ2FpbjoKIAloID0ga21lbV9jYWNoZV9hbGxvYyhidHJmc190cmFuc19oYW5kbGVfY2FjaGVwLCBHRlBfTk9GUyk7CiAJaWYgKCFoKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWlmICh0eXBlICE9IFRSQU5TX0pPSU5fTk9MT0NLKQotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJaWYgKG1heV93YWl0X3RyYW5zYWN0aW9uKHJvb3QsIHR5cGUpKQogCQl3YWl0X2N1cnJlbnRfdHJhbnMocm9vdCk7CiAKLQlyZXQgPSBqb2luX3RyYW5zYWN0aW9uKHJvb3QpOworCWRvIHsKKwkJcmV0ID0gam9pbl90cmFuc2FjdGlvbihyb290LCB0eXBlID09IFRSQU5TX0pPSU5fTk9MT0NLKTsKKwkJaWYgKHJldCA9PSAtRUJVU1kpCisJCQl3YWl0X2N1cnJlbnRfdHJhbnMocm9vdCk7CisJfSB3aGlsZSAocmV0ID09IC1FQlVTWSk7CisKIAlpZiAocmV0IDwgMCkgewogCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfdHJhbnNfaGFuZGxlX2NhY2hlcCwgaCk7Ci0JCWlmICh0eXBlICE9IFRSQU5TX0pPSU5fTk9MT0NLKQotCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQogCiAJY3VyX3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbjsKLQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7Ci0JaWYgKHR5cGUgIT0gVFJBTlNfSk9JTl9OT0xPQ0spCi0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCiAJaC0+dHJhbnNpZCA9IGN1cl90cmFucy0+dHJhbnNpZDsKIAloLT50cmFuc2FjdGlvbiA9IGN1cl90cmFuczsKIAloLT5ibG9ja3NfdXNlZCA9IDA7Ci0JaC0+YmxvY2tfZ3JvdXAgPSAwOwogCWgtPmJ5dGVzX3Jlc2VydmVkID0gMDsKIAloLT5kZWxheWVkX3JlZl91cGRhdGVzID0gMDsKKwloLT51c2VfY291bnQgPSAxOwogCWgtPmJsb2NrX3JzdiA9IE5VTEw7CisJaC0+b3JpZ19yc3YgPSBOVUxMOwogCiAJc21wX21iKCk7CiAJaWYgKGN1cl90cmFucy0+YmxvY2tlZCAmJiBtYXlfd2FpdF90cmFuc2FjdGlvbihyb290LCB0eXBlKSkgewpAQCAtMjQxLDExICszMzAsOCBAQAogCQl9CiAJfQogCi0JaWYgKHR5cGUgIT0gVFJBTlNfSk9JTl9OT0xPQ0spCi0JCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQlyZWNvcmRfcm9vdF9pbl90cmFucyhoLCByb290KTsKLQlpZiAodHlwZSAhPSBUUkFOU19KT0lOX05PTE9DSykKLQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Citnb3RfaXQ6CisJYnRyZnNfcmVjb3JkX3Jvb3RfaW5fdHJhbnMoaCwgcm9vdCk7CiAKIAlpZiAoIWN1cnJlbnQtPmpvdXJuYWxfaW5mbyAmJiB0eXBlICE9IFRSQU5TX1VTRVJTUEFDRSkKIAkJY3VycmVudC0+am91cm5hbF9pbmZvID0gaDsKQEAgLTI1NywyMiArMzQzLDE5IEBACiB7CiAJcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9pdGVtcywgVFJBTlNfU1RBUlQpOwogfQotc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfam9pbl90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJCSAgIGludCBudW1fYmxvY2tzKQorc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfam9pbl90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKIAlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCwgVFJBTlNfSk9JTik7CiB9CiAKLXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQkJCSAgaW50IG51bV9ibG9ja3MpCitzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uX25vbG9jayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKIAlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCwgVFJBTlNfSk9JTl9OT0xPQ0spOwogfQogCi1zdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfcm9vdCAqciwKLQkJCQkJCQkgaW50IG51bV9ibG9ja3MpCitzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKLQlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ociwgMCwgVFJBTlNfVVNFUlNQQUNFKTsKKwlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCwgVFJBTlNfVVNFUlNQQUNFKTsKIH0KIAogLyogd2FpdCBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgdG8gYmUgZnVsbHkgY29tcGxldGUgKi8KQEAgLTI4MCwxNyArMzYzLDEzIEBACiAJCQkJICAgIHN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqY29tbWl0KQogewogCURFRklORV9XQUlUKHdhaXQpOwotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAl3aGlsZSAoIWNvbW1pdC0+Y29tbWl0X2RvbmUpIHsKIAkJcHJlcGFyZV90b193YWl0KCZjb21taXQtPmNvbW1pdF93YWl0LCAmd2FpdCwKIAkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCWlmIChjb21taXQtPmNvbW1pdF9kb25lKQogCQkJYnJlYWs7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJfQotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCWZpbmlzaF93YWl0KCZjb21taXQtPmNvbW1pdF93YWl0LCAmd2FpdCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMDAsNTkgKzM3OSw1NiBAQAogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqY3VyX3RyYW5zID0gTlVMTCwgKnQ7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQogCXJldCA9IDA7CiAJaWYgKHRyYW5zaWQpIHsKIAkJaWYgKHRyYW5zaWQgPD0gcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQpCi0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlnb3RvIG91dDsKIAogCQkvKiBmaW5kIHNwZWNpZmllZCB0cmFuc2FjdGlvbiAqLworCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZyb290LT5mc19pbmZvLT50cmFuc19saXN0LCBsaXN0KSB7CiAJCQlpZiAodC0+dHJhbnNpZCA9PSB0cmFuc2lkKSB7CiAJCQkJY3VyX3RyYW5zID0gdDsKKwkJCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAodC0+dHJhbnNpZCA+IHRyYW5zaWQpCiAJCQkJYnJlYWs7CiAJCX0KKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQlyZXQgPSAtRUlOVkFMOwogCQlpZiAoIWN1cl90cmFucykKLQkJCWdvdG8gb3V0X3VubG9jazsgIC8qIGJhZCB0cmFuc2lkICovCisJCQlnb3RvIG91dDsgIC8qIGJhZCB0cmFuc2lkICovCiAJfSBlbHNlIHsKIAkJLyogZmluZCBuZXdlc3QgdHJhbnNhY3Rpb24gdGhhdCBpcyBjb21taXR0aW5nIHwgY29tbWl0dGVkICovCisJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh0LCAmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbGlzdCwKIAkJCQkJICAgIGxpc3QpIHsKIAkJCWlmICh0LT5pbl9jb21taXQpIHsKIAkJCQlpZiAodC0+Y29tbWl0X2RvbmUpCi0JCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCQkJYnJlYWs7CiAJCQkJY3VyX3RyYW5zID0gdDsKKwkJCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQlpZiAoIWN1cl90cmFucykKLQkJCWdvdG8gb3V0X3VubG9jazsgIC8qIG5vdGhpbmcgY29tbWl0dGluZ3xjb21taXR0ZWQgKi8KKwkJCWdvdG8gb3V0OyAgLyogbm90aGluZyBjb21taXR0aW5nfGNvbW1pdHRlZCAqLwogCX0KIAotCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKLQogCXdhaXRfZm9yX2NvbW1pdChyb290LCBjdXJfdHJhbnMpOwogCi0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwogCXJldCA9IDA7Ci1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgYnRyZnNfdGhyb3R0bGUoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCiB7Ci0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCWlmICghcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucykKKwlpZiAoIWF0b21pY19yZWFkKCZyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSkKIAkJd2FpdF9jdXJyZW50X3RyYW5zKHJvb3QpOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IHNob3VsZF9lbmRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCkBAIC0zNzAsNiArNDQ2LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24gKmN1cl90cmFucyA9IHRyYW5zLT50cmFuc2FjdGlvbjsKIAlpbnQgdXBkYXRlczsKIAorCXNtcF9tYigpOwogCWlmIChjdXJfdHJhbnMtPmJsb2NrZWQgfHwgY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMuZmx1c2hpbmcpCiAJCXJldHVybiAxOwogCkBAIC0zODgsNiArNDY1LDExIEBACiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSByb290LT5mc19pbmZvOwogCWludCBjb3VudCA9IDA7CiAKKwlpZiAoLS10cmFucy0+dXNlX2NvdW50KSB7CisJCXRyYW5zLT5ibG9ja19yc3YgPSB0cmFucy0+b3JpZ19yc3Y7CisJCXJldHVybiAwOworCX0KKwogCXdoaWxlIChjb3VudCA8IDQpIHsKIAkJdW5zaWduZWQgbG9uZyBjdXIgPSB0cmFucy0+ZGVsYXllZF9yZWZfdXBkYXRlczsKIAkJdHJhbnMtPmRlbGF5ZWRfcmVmX3VwZGF0ZXMgPSAwOwpAQCAtNDEwLDkgKzQ5MiwxMSBAQAogCiAJYnRyZnNfdHJhbnNfcmVsZWFzZV9tZXRhZGF0YSh0cmFucywgcm9vdCk7CiAKLQlpZiAobG9jayAmJiAhcm9vdC0+ZnNfaW5mby0+b3Blbl9pb2N0bF90cmFucyAmJgotCSAgICBzaG91bGRfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KSkKKwlpZiAobG9jayAmJiAhYXRvbWljX3JlYWQoJnJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpICYmCisJICAgIHNob3VsZF9lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpKSB7CiAJCXRyYW5zLT50cmFuc2FjdGlvbi0+YmxvY2tlZCA9IDE7CisJCXNtcF93bWIoKTsKKwl9CiAKIAlpZiAobG9jayAmJiBjdXJfdHJhbnMtPmJsb2NrZWQgJiYgIWN1cl90cmFucy0+aW5fY29tbWl0KSB7CiAJCWlmICh0aHJvdHRsZSkKQEAgLTcwMyw5ICs3ODcsOSBAQAogICovCiBpbnQgYnRyZnNfYWRkX2RlYWRfcm9vdChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAlsaXN0X2FkZCgmcm9vdC0+cm9vdF9saXN0LCAmcm9vdC0+ZnNfaW5mby0+ZGVhZF9yb290cyk7Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC03MjEsNiArODA1LDcgQEAKIAlpbnQgcmV0OwogCWludCBlcnIgPSAwOwogCisJc3Bpbl9sb2NrKCZmc19pbmZvLT5mc19yb290c19yYWRpeF9sb2NrKTsKIAl3aGlsZSAoMSkgewogCQlyZXQgPSByYWRpeF90cmVlX2dhbmdfbG9va3VwX3RhZygmZnNfaW5mby0+ZnNfcm9vdHNfcmFkaXgsCiAJCQkJCQkgKHZvaWQgKiopZ2FuZywgMCwKQEAgLTczMyw2ICs4MTgsNyBAQAogCQkJcmFkaXhfdHJlZV90YWdfY2xlYXIoJmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4LAogCQkJCQkodW5zaWduZWQgbG9uZylyb290LT5yb290X2tleS5vYmplY3RpZCwKIAkJCQkJQlRSRlNfUk9PVF9UUkFOU19UQUcpOworCQkJc3Bpbl91bmxvY2soJmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4X2xvY2spOwogCiAJCQlidHJmc19mcmVlX2xvZyh0cmFucywgcm9vdCk7CiAJCQlidHJmc191cGRhdGVfcmVsb2Nfcm9vdCh0cmFucywgcm9vdCk7CkBAIC03NTMsMTAgKzgzOSwxMiBAQAogCQkJZXJyID0gYnRyZnNfdXBkYXRlX3Jvb3QodHJhbnMsIGZzX2luZm8tPnRyZWVfcm9vdCwKIAkJCQkJCSZyb290LT5yb290X2tleSwKIAkJCQkJCSZyb290LT5yb290X2l0ZW0pOworCQkJc3Bpbl9sb2NrKCZmc19pbmZvLT5mc19yb290c19yYWRpeF9sb2NrKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7CiAJCX0KIAl9CisJc3Bpbl91bmxvY2soJmZzX2luZm8tPmZzX3Jvb3RzX3JhZGl4X2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTc4Niw3ICs4NzQsNyBAQAogCQlidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KGluZm8tPnRyZWVfcm9vdCwgbnIpOwogCQljb25kX3Jlc2NoZWQoKTsKIAotCQlpZiAocm9vdC0+ZnNfaW5mby0+Y2xvc2luZyB8fCByZXQgIT0gLUVBR0FJTikKKwkJaWYgKGJ0cmZzX2ZzX2Nsb3Npbmcocm9vdC0+ZnNfaW5mbykgfHwgcmV0ICE9IC1FQUdBSU4pCiAJCQlicmVhazsKIAl9CiAJcm9vdC0+ZGVmcmFnX3J1bm5pbmcgPSAwOwpAQCAtODY5LDYgKzk1NywxNSBAQAogCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcGFyZW50X3Jvb3QsIHBhcmVudF9pbm9kZSk7CiAJQlVHX09OKHJldCk7CiAKKwkvKgorCSAqIHB1bGwgaW4gdGhlIGRlbGF5ZWQgZGlyZWN0b3J5IHVwZGF0ZQorCSAqIGFuZCB0aGUgZGVsYXllZCBpbm9kZSBpdGVtCisJICogb3RoZXJ3aXNlIHdlIGNvcnJ1cHQgdGhlIEZTIGR1cmluZworCSAqIHNuYXBzaG90CisJICovCisJcmV0ID0gYnRyZnNfcnVuX2RlbGF5ZWRfaXRlbXModHJhbnMsIHJvb3QpOworCUJVR19PTihyZXQpOworCiAJcmVjb3JkX3Jvb3RfaW5fdHJhbnModHJhbnMsIHJvb3QpOwogCWJ0cmZzX3NldF9yb290X2xhc3Rfc25hcHNob3QoJnJvb3QtPnJvb3RfaXRlbSwgdHJhbnMtPnRyYW5zaWQpOwogCW1lbWNweShuZXdfcm9vdF9pdGVtLCAmcm9vdC0+cm9vdF9pdGVtLCBzaXplb2YoKm5ld19yb290X2l0ZW0pKTsKQEAgLTkzMCwxNCArMTAyNyw2IEBACiAJaW50IHJldDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGVuZGluZywgaGVhZCwgbGlzdCkgewotCQkvKgotCQkgKiBXZSBtdXN0IGRlYWwgd2l0aCB0aGUgZGVsYXllZCBpdGVtcyBiZWZvcmUgY3JlYXRpbmcKLQkJICogc25hcHNob3RzLCBvciB3ZSB3aWxsIGNyZWF0ZSBhIHNuYXB0aG90IHdpdGggaW5jb25zaXN0ZW50Ci0JCSAqIGluZm9ybWF0aW9uLgotCQkqLwotCQlyZXQgPSBidHJmc19ydW5fZGVsYXllZF9pdGVtcyh0cmFucywgZnNfaW5mby0+ZnNfcm9vdCk7Ci0JCUJVR19PTihyZXQpOwotCiAJCXJldCA9IGNyZWF0ZV9wZW5kaW5nX3NuYXBzaG90KHRyYW5zLCBmc19pbmZvLCBwZW5kaW5nKTsKIAkJQlVHX09OKHJldCk7CiAJfQpAQCAtOTY3LDIwICsxMDU2LDIwIEBACiBpbnQgYnRyZnNfdHJhbnNhY3Rpb25faW5fY29tbWl0KHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvKQogewogCWludCByZXQgPSAwOwotCXNwaW5fbG9jaygmaW5mby0+bmV3X3RyYW5zX2xvY2spOworCXNwaW5fbG9jaygmaW5mby0+dHJhbnNfbG9jayk7CiAJaWYgKGluZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24pCiAJCXJldCA9IGluZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPmluX2NvbW1pdDsKLQlzcGluX3VubG9jaygmaW5mby0+bmV3X3RyYW5zX2xvY2spOworCXNwaW5fdW5sb2NrKCZpbmZvLT50cmFuc19sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgYnRyZnNfdHJhbnNhY3Rpb25fYmxvY2tlZChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbykKIHsKIAlpbnQgcmV0ID0gMDsKLQlzcGluX2xvY2soJmluZm8tPm5ld190cmFuc19sb2NrKTsKKwlzcGluX2xvY2soJmluZm8tPnRyYW5zX2xvY2spOwogCWlmIChpbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uKQogCQlyZXQgPSBpbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uLT5ibG9ja2VkOwotCXNwaW5fdW5sb2NrKCZpbmZvLT5uZXdfdHJhbnNfbG9jayk7CisJc3Bpbl91bmxvY2soJmluZm8tPnRyYW5zX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMDQsOSArMTA5Myw3IEBACiAJCQkJICAgICZ3YWl0KTsKIAkJCWJyZWFrOwogCQl9Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlzY2hlZHVsZSgpOwotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWZpbmlzaF93YWl0KCZyb290LT5mc19pbmZvLT50cmFuc2FjdGlvbl9ibG9ja2VkX3dhaXQsICZ3YWl0KTsKIAl9CiB9CkBAIC0xMDMyLDkgKzExMTksNyBAQAogCQkJCSAgICAmd2FpdCk7CiAJCQlicmVhazsKIAkJfQotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJc2NoZWR1bGUoKTsKLQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlmaW5pc2hfd2FpdCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCwKIAkJCSAgICAmd2FpdCk7CiAJfQpAQCAtMTA3Miw3ICsxMTU3LDcgQEAKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZhYy0+d29yaywgZG9fYXN5bmNfY29tbWl0KTsKIAlhYy0+cm9vdCA9IHJvb3Q7Ci0JYWMtPm5ld3RyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAwKTsKKwlhYy0+bmV3dHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCWlmIChJU19FUlIoYWMtPm5ld3RyYW5zKSkgewogCQlpbnQgZXJyID0gUFRSX0VSUihhYy0+bmV3dHJhbnMpOwogCQlrZnJlZShhYyk7CkBAIC0xMDgwLDIzICsxMTY1LDIyIEBACiAJfQogCiAJLyogdGFrZSB0cmFuc2FjdGlvbiByZWZlcmVuY2UgKi8KLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJY3VyX3RyYW5zID0gdHJhbnMtPnRyYW5zYWN0aW9uOwogCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhYy0+d29yaywgMCk7CiAKIAkvKiB3YWl0IGZvciB0cmFuc2FjdGlvbiB0byBzdGFydCBhbmQgdW5ibG9jayAqLwotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlpZiAod2FpdF9mb3JfdW5ibG9jaykKIAkJd2FpdF9jdXJyZW50X3RyYW5zX2NvbW1pdF9zdGFydF9hbmRfdW5ibG9jayhyb290LCBjdXJfdHJhbnMpOwogCWVsc2UKIAkJd2FpdF9jdXJyZW50X3RyYW5zX2NvbW1pdF9zdGFydChyb290LCBjdXJfdHJhbnMpOwotCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwotCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCisJaWYgKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9PSB0cmFucykKKwkJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKKworCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTM5LDM4ICsxMjIzLDQxIEBACiAJcmV0ID0gYnRyZnNfcnVuX2RlbGF5ZWRfcmVmcyh0cmFucywgcm9vdCwgMCk7CiAJQlVHX09OKHJldCk7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl9sb2NrKCZjdXJfdHJhbnMtPmNvbW1pdF9sb2NrKTsKIAlpZiAoY3VyX3RyYW5zLT5pbl9jb21taXQpIHsKKwkJc3Bpbl91bmxvY2soJmN1cl90cmFucy0+Y29tbWl0X2xvY2spOwogCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCiAJCXJldCA9IHdhaXRfZm9yX2NvbW1pdChyb290LCBjdXJfdHJhbnMpOwogCQlCVUdfT04ocmV0KTsKIAotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCQlyZXR1cm4gMDsKIAl9CiAKIAl0cmFucy0+dHJhbnNhY3Rpb24tPmluX2NvbW1pdCA9IDE7CiAJdHJhbnMtPnRyYW5zYWN0aW9uLT5ibG9ja2VkID0gMTsKKwlzcGluX3VubG9jaygmY3VyX3RyYW5zLT5jb21taXRfbG9jayk7CiAJd2FrZV91cCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fYmxvY2tlZF93YWl0KTsKIAorCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAJaWYgKGN1cl90cmFucy0+bGlzdC5wcmV2ICE9ICZyb290LT5mc19pbmZvLT50cmFuc19saXN0KSB7CiAJCXByZXZfdHJhbnMgPSBsaXN0X2VudHJ5KGN1cl90cmFucy0+bGlzdC5wcmV2LAogCQkJCQlzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24sIGxpc3QpOwogCQlpZiAoIXByZXZfdHJhbnMtPmNvbW1pdF9kb25lKSB7CiAJCQlhdG9taWNfaW5jKCZwcmV2X3RyYW5zLT51c2VfY291bnQpOwotCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CisJCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CiAKIAkJCXdhaXRfZm9yX2NvbW1pdChyb290LCBwcmV2X3RyYW5zKTsKIAotCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCQkJcHV0X3RyYW5zYWN0aW9uKHByZXZfdHJhbnMpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCQl9CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOwogCX0KIAogCWlmIChub3cgPCBjdXJfdHJhbnMtPnN0YXJ0X3RpbWUgfHwgbm93IC0gY3VyX3RyYW5zLT5zdGFydF90aW1lIDwgMSkKQEAgLTExNzgsMTIgKzEyNjUsMTIgQEAKIAogCWRvIHsKIAkJaW50IHNuYXBfcGVuZGluZyA9IDA7CisKIAkJam9pbmVkID0gY3VyX3RyYW5zLT5udW1fam9pbmVkOwogCQlpZiAoIWxpc3RfZW1wdHkoJnRyYW5zLT50cmFuc2FjdGlvbi0+cGVuZGluZ19zbmFwc2hvdHMpKQogCQkJc25hcF9wZW5kaW5nID0gMTsKIAogCQlXQVJOX09OKGN1cl90cmFucyAhPSB0cmFucy0+dHJhbnNhY3Rpb24pOwotCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCQlpZiAoZmx1c2hfb25fY29tbWl0IHx8IHNuYXBfcGVuZGluZykgewogCQkJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QsIDEpOwpAQCAtMTIwNiwyNiArMTI5Myw0OCBAQAogCQlwcmVwYXJlX3RvX3dhaXQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQsICZ3YWl0LAogCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAotCQlzbXBfbWIoKTsKIAkJaWYgKGF0b21pY19yZWFkKCZjdXJfdHJhbnMtPm51bV93cml0ZXJzKSA+IDEpCiAJCQlzY2hlZHVsZV90aW1lb3V0KE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKIAkJZWxzZSBpZiAoc2hvdWxkX2dyb3cpCiAJCQlzY2hlZHVsZV90aW1lb3V0KDEpOwogCi0JCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJZmluaXNoX3dhaXQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQsICZ3YWl0KTsKIAl9IHdoaWxlIChhdG9taWNfcmVhZCgmY3VyX3RyYW5zLT5udW1fd3JpdGVycykgPiAxIHx8CiAJCSAoc2hvdWxkX2dyb3cgJiYgY3VyX3RyYW5zLT5udW1fam9pbmVkICE9IGpvaW5lZCkpOwogCi0JcmV0ID0gY3JlYXRlX3BlbmRpbmdfc25hcHNob3RzKHRyYW5zLCByb290LT5mc19pbmZvKTsKLQlCVUdfT04ocmV0KTsKKwkvKgorCSAqIE9rIG5vdyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBibG9jayBvdXQgYW55IG90aGVyIGpvaW5zIHdoaWxlIHdlCisJICogY29tbWl0IHRoZSB0cmFuc2FjdGlvbi4gIFdlIGNvdWxkIGhhdmUgc3RhcnRlZCBhIGpvaW4gYmVmb3JlIHNldHRpbmcKKwkgKiBub19qb2luIHNvIG1ha2Ugc3VyZSB0byB3YWl0IGZvciBudW1fd3JpdGVycyB0byA9PSAxIGFnYWluLgorCSAqLworCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisJcm9vdC0+ZnNfaW5mby0+dHJhbnNfbm9fam9pbiA9IDE7CisJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCXdhaXRfZXZlbnQoY3VyX3RyYW5zLT53cml0ZXJfd2FpdCwKKwkJICAgYXRvbWljX3JlYWQoJmN1cl90cmFucy0+bnVtX3dyaXRlcnMpID09IDEpOworCisJLyoKKwkgKiB0aGUgcmVsb2MgbXV0ZXggbWFrZXMgc3VyZSB0aGF0IHdlIHN0b3AKKwkgKiB0aGUgYmFsYW5jaW5nIGNvZGUgZnJvbSBjb21pbmcgaW4gYW5kIG1vdmluZworCSAqIGV4dGVudHMgYXJvdW5kIGluIHRoZSBtaWRkbGUgb2YgdGhlIGNvbW1pdAorCSAqLworCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnJlbG9jX211dGV4KTsKIAogCXJldCA9IGJ0cmZzX3J1bl9kZWxheWVkX2l0ZW1zKHRyYW5zLCByb290KTsKIAlCVUdfT04ocmV0KTsKIAorCXJldCA9IGNyZWF0ZV9wZW5kaW5nX3NuYXBzaG90cyh0cmFucywgcm9vdC0+ZnNfaW5mbyk7CisJQlVHX09OKHJldCk7CisKIAlyZXQgPSBidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCAodW5zaWduZWQgbG9uZyktMSk7CiAJQlVHX09OKHJldCk7CiAKKwkvKgorCSAqIG1ha2Ugc3VyZSBub25lIG9mIHRoZSBjb2RlIGFib3ZlIG1hbmFnZWQgdG8gc2xpcCBpbiBhCisJICogZGVsYXllZCBpdGVtCisJICovCisJYnRyZnNfYXNzZXJ0X2RlbGF5ZWRfcm9vdF9lbXB0eShyb290KTsKKwogCVdBUk5fT04oY3VyX3RyYW5zICE9IHRyYW5zLT50cmFuc2FjdGlvbik7CiAKIAlidHJmc19zY3J1Yl9wYXVzZShyb290KTsKQEAgLTEyNTgsOSArMTM2Nyw2IEBACiAJYnRyZnNfcHJlcGFyZV9leHRlbnRfY29tbWl0KHRyYW5zLCByb290KTsKIAogCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247Ci0Jc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7Ci0Jcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbiA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm5ld190cmFuc19sb2NrKTsKIAogCWJ0cmZzX3NldF9yb290X25vZGUoJnJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdC0+cm9vdF9pdGVtLAogCQkJICAgIHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdC0+bm9kZSk7CkBAIC0xMjgxLDEwICsxMzg3LDE0IEBACiAJICAgICAgIHNpemVvZihyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KSk7CiAKIAl0cmFucy0+dHJhbnNhY3Rpb24tPmJsb2NrZWQgPSAwOworCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbG9jayk7CisJcm9vdC0+ZnNfaW5mby0+cnVubmluZ190cmFuc2FjdGlvbiA9IE5VTEw7CisJcm9vdC0+ZnNfaW5mby0+dHJhbnNfbm9fam9pbiA9IDA7CisJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xvY2spOworCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+cmVsb2NfbXV0ZXgpOwogCiAJd2FrZV91cCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCk7CiAKLQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlyZXQgPSBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJQlVHX09OKHJldCk7CiAJd3JpdGVfY3RyZWVfc3VwZXIodHJhbnMsIHJvb3QsIDApOwpAQCAtMTI5NywyMiArMTQwNywyMSBAQAogCiAJYnRyZnNfZmluaXNoX2V4dGVudF9jb21taXQodHJhbnMsIHJvb3QpOwogCi0JbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCiAJY3VyX3RyYW5zLT5jb21taXRfZG9uZSA9IDE7CiAKIAlyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCA9IGN1cl90cmFucy0+dHJhbnNpZDsKIAogCXdha2VfdXAoJmN1cl90cmFucy0+Y29tbWl0X3dhaXQpOwogCisJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKIAlsaXN0X2RlbF9pbml0KCZjdXJfdHJhbnMtPmxpc3QpOworCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19sb2NrKTsKKwogCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwogCXB1dF90cmFuc2FjdGlvbihjdXJfdHJhbnMpOwogCiAJdHJhY2VfYnRyZnNfdHJhbnNhY3Rpb25fY29tbWl0KHJvb3QpOwogCi0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0KIAlidHJmc19zY3J1Yl9jb250aW51ZShyb290KTsKIAogCWlmIChjdXJyZW50LT5qb3VybmFsX2luZm8gPT0gdHJhbnMpCkBAIC0xMzM0LDkgKzE0NDMsOSBAQAogCUxJU1RfSEVBRChsaXN0KTsKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IHJvb3QtPmZzX2luZm87CiAKLQltdXRleF9sb2NrKCZmc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl9sb2NrKCZmc19pbmZvLT50cmFuc19sb2NrKTsKIAlsaXN0X3NwbGljZV9pbml0KCZmc19pbmZvLT5kZWFkX3Jvb3RzLCAmbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT50cmFuc19tdXRleCk7CisJc3Bpbl91bmxvY2soJmZzX2luZm8tPnRyYW5zX2xvY2spOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZsaXN0KSkgewogCQlyb290ID0gbGlzdF9lbnRyeShsaXN0Lm5leHQsIHN0cnVjdCBidHJmc19yb290LCByb290X2xpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaCBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKaW5kZXggODA0Yzg4Ni4uMDI1NjRlNiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaAorKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCkBAIC0yOCwxMCArMjgsMTIgQEAKIAkgKiB0cmFuc2FjdGlvbiBjYW4gZW5kCiAJICovCiAJYXRvbWljX3QgbnVtX3dyaXRlcnM7CisJYXRvbWljX3QgdXNlX2NvdW50OwogCiAJdW5zaWduZWQgbG9uZyBudW1fam9pbmVkOworCisJc3BpbmxvY2tfdCBjb21taXRfbG9jazsKIAlpbnQgaW5fY29tbWl0OwotCWF0b21pY190IHVzZV9jb3VudDsKIAlpbnQgY29tbWl0X2RvbmU7CiAJaW50IGJsb2NrZWQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtNDUsMTMgKzQ3LDE0IEBACiAKIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgewogCXU2NCB0cmFuc2lkOwotCXU2NCBibG9ja19ncm91cDsKIAl1NjQgYnl0ZXNfcmVzZXJ2ZWQ7CisJdW5zaWduZWQgbG9uZyB1c2VfY291bnQ7CiAJdW5zaWduZWQgbG9uZyBibG9ja3NfcmVzZXJ2ZWQ7CiAJdW5zaWduZWQgbG9uZyBibG9ja3NfdXNlZDsKIAl1bnNpZ25lZCBsb25nIGRlbGF5ZWRfcmVmX3VwZGF0ZXM7CiAJc3RydWN0IGJ0cmZzX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICpibG9ja19yc3Y7CisJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqb3JpZ19yc3Y7CiB9OwogCiBzdHJ1Y3QgYnRyZnNfcGVuZGluZ19zbmFwc2hvdCB7CkBAIC02NiwxOSArNjksNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXRyYW5zLT5ibG9ja19ncm91cCA9IEJUUkZTX0koaW5vZGUpLT5ibG9ja19ncm91cDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJ0cmZzX3VwZGF0ZV9pbm9kZV9ibG9ja19ncm91cCgKLQkJCQkJICBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCUJUUkZTX0koaW5vZGUpLT5ibG9ja19ncm91cCA9IHRyYW5zLT5ibG9ja19ncm91cDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGJ0cmZzX3NldF9pbm9kZV9sYXN0X3RyYW5zKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtOTIsMTIgKzgyLDkgQEAKIAkJCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJCQkgICBpbnQgbnVtX2l0ZW1zKTsKLXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCQkgIGludCBudW1fYmxvY2tzKTsKLXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQkJCSAgaW50IG51bV9ibG9ja3MpOwotc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnIsCi0JCQkJCQkJIGludCBudW1fYmxvY2tzKTsKK3N0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2soc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogaW50IGJ0cmZzX3dhaXRfZm9yX2NvbW1pdChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IHRyYW5zaWQpOwogaW50IGJ0cmZzX3dyaXRlX2FuZF93YWl0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuYyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKaW5kZXggNTkyMzk2Yy4uNGNlOGE5ZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuYworKysgYi9mcy9idHJmcy90cmVlLWxvZy5jCkBAIC0zMTc3LDcgKzMxNzcsNyBAQAogCQl0bXBfa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAKIAkJd2MucmVwbGF5X2Rlc3QgPSBidHJmc19yZWFkX2ZzX3Jvb3Rfbm9fbmFtZShmc19pbmZvLCAmdG1wX2tleSk7Ci0JCUJVR19PTighd2MucmVwbGF5X2Rlc3QpOworCQlCVUdfT04oSVNfRVJSX09SX05VTEwod2MucmVwbGF5X2Rlc3QpKTsKIAogCQl3Yy5yZXBsYXlfZGVzdC0+bG9nX3Jvb3QgPSBsb2c7CiAJCWJ0cmZzX3JlY29yZF9yb290X2luX3RyYW5zKHRyYW5zLCB3Yy5yZXBsYXlfZGVzdCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggYzQ4MjE0ZS4uMWVmYTU2ZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtNTA0LDcgKzUwNCw3IEBACiAJCUJVR19PTighbmV3X2RldmljZSk7CiAJCW1lbWNweShuZXdfZGV2aWNlLCBkZXZpY2UsIHNpemVvZigqbmV3X2RldmljZSkpOwogCQluZXdfZGV2aWNlLT5uYW1lID0ga3N0cmR1cChkZXZpY2UtPm5hbWUsIEdGUF9OT0ZTKTsKLQkJQlVHX09OKCFuZXdfZGV2aWNlLT5uYW1lKTsKKwkJQlVHX09OKGRldmljZS0+bmFtZSAmJiAhbmV3X2RldmljZS0+bmFtZSk7CiAJCW5ld19kZXZpY2UtPmJkZXYgPSBOVUxMOwogCQluZXdfZGV2aWNlLT53cml0ZWFibGUgPSAwOwogCQluZXdfZGV2aWNlLT5pbl9mc19tZXRhZGF0YSA9IDA7CkBAIC02ODksMTIgKzY4OSw4IEBACiAJdHJhbnNpZCA9IGJ0cmZzX3N1cGVyX2dlbmVyYXRpb24oZGlza19zdXBlcik7CiAJaWYgKGRpc2tfc3VwZXItPmxhYmVsWzBdKQogCQlwcmludGsoS0VSTl9JTkZPICJkZXZpY2UgbGFiZWwgJXMgIiwgZGlza19zdXBlci0+bGFiZWwpOwotCWVsc2UgewotCQkvKiBGSVhNRSwgbWFrZSBhIHJlYWRsIHV1aWQgcGFyc2VyICovCi0JCXByaW50ayhLRVJOX0lORk8gImRldmljZSBmc2lkICVsbHgtJWxseCAiLAotCQkgICAgICAgKih1bnNpZ25lZCBsb25nIGxvbmcgKilkaXNrX3N1cGVyLT5mc2lkLAotCQkgICAgICAgKih1bnNpZ25lZCBsb25nIGxvbmcgKikoZGlza19zdXBlci0+ZnNpZCArIDgpKTsKLQl9CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPICJkZXZpY2UgZnNpZCAlcFUgIiwgZGlza19zdXBlci0+ZnNpZCk7CiAJcHJpbnRrKEtFUk5fQ09OVCAiZGV2aWQgJWxsdSB0cmFuc2lkICVsbHUgJXNcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZGV2aWQsICh1bnNpZ25lZCBsb25nIGxvbmcpdHJhbnNpZCwgcGF0aCk7CiAJcmV0ID0gZGV2aWNlX2xpc3RfYWRkKHBhdGgsIGRpc2tfc3VwZXIsIGRldmlkLCBmc19kZXZpY2VzX3JldCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy94YXR0ci5jIGIvZnMvYnRyZnMveGF0dHIuYwppbmRleCBmMzEwN2U0Li41MzY2ZmU0IDEwMDY0NAotLS0gYS9mcy9idHJmcy94YXR0ci5jCisrKyBiL2ZzL2J0cmZzL3hhdHRyLmMKQEAgLTE1OCw4ICsxNTgsNiBAQAogCWlmIChJU19FUlIodHJhbnMpKQogCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAKLQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKLQogCXJldCA9IGRvX3NldHhhdHRyKHRyYW5zLCBpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggNDljOWFhZC4uMWE4MGIwNCAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTE5MDIsMTAgKzE5MDIsOCBAQAogCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZSgqd2FpdF9iaCkpCiAJCQllcnIgPSAtRUlPOwogCX0KLQlpZiAodW5saWtlbHkoZXJyKSkgeworCWlmICh1bmxpa2VseShlcnIpKQogCQlwYWdlX3plcm9fbmV3X2J1ZmZlcnMocGFnZSwgZnJvbSwgdG8pOwotCQlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKLQl9CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woX19ibG9ja193cml0ZV9iZWdpbik7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2FkZHIuYyBiL2ZzL2NlcGgvYWRkci5jCmluZGV4IDMzZGE0OWQuLjVhMzk1M2QgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvYWRkci5jCisrKyBiL2ZzL2NlcGgvYWRkci5jCkBAIC00NTMsNyArNDUzLDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCUJVR19PTighaW5vZGUpOwotCWlncmFiKGlub2RlKTsKKwlpaG9sZChpbm9kZSk7CiAJZXJyID0gd3JpdGVwYWdlX25vdW5sb2NrKHBhZ2UsIHdiYyk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJaXB1dChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2NhcHMuYyBiL2ZzL2NlcGgvY2Fwcy5jCmluZGV4IDFmNzJiMDAuLmY2MDU3NTMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvY2Fwcy5jCisrKyBiL2ZzL2NlcGgvY2Fwcy5jCkBAIC0yOTQwLDE0ICsyOTQwLDEyIEBACiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZtZHNjLT5jYXBfZGlydHkpKSB7CiAJCWNpID0gbGlzdF9maXJzdF9lbnRyeSgmbWRzYy0+Y2FwX2RpcnR5LCBzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvLAogCQkJCSAgICAgIGlfZGlydHlfaXRlbSk7Ci0JCWlub2RlID0gaWdyYWIoJmNpLT52ZnNfaW5vZGUpOworCQlpbm9kZSA9ICZjaS0+dmZzX2lub2RlOworCQlpaG9sZChpbm9kZSk7CiAJCWRvdXQoImZsdXNoX2RpcnR5X2NhcHMgJXBcbiIsIGlub2RlKTsKIAkJc3Bpbl91bmxvY2soJm1kc2MtPmNhcF9kaXJ0eV9sb2NrKTsKLQkJaWYgKGlub2RlKSB7Ci0JCQljZXBoX2NoZWNrX2NhcHMoY2ksIENIRUNLX0NBUFNfTk9ERUxBWXxDSEVDS19DQVBTX0ZMVVNILAotCQkJCQlOVUxMKTsKLQkJCWlwdXQoaW5vZGUpOwotCQl9CisJCWNlcGhfY2hlY2tfY2FwcyhjaSwgQ0hFQ0tfQ0FQU19OT0RFTEFZfENIRUNLX0NBUFNfRkxVU0gsIE5VTEwpOworCQlpcHV0KGlub2RlKTsKIAkJc3Bpbl9sb2NrKCZtZHNjLT5jYXBfZGlydHlfbG9jayk7CiAJfQogCXNwaW5fdW5sb2NrKCZtZHNjLT5jYXBfZGlydHlfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuYwppbmRleCAzMzcyOWU4Li5lZjhmMDhjIDEwMDY0NAotLS0gYS9mcy9jZXBoL2Rpci5jCisrKyBiL2ZzL2NlcGgvZGlyLmMKQEAgLTMwOCw3ICszMDgsOCBAQAogCQlyZXEgPSBjZXBoX21kc2NfY3JlYXRlX3JlcXVlc3QobWRzYywgb3AsIFVTRV9BVVRIX01EUyk7CiAJCWlmIChJU19FUlIocmVxKSkKIAkJCXJldHVybiBQVFJfRVJSKHJlcSk7Ci0JCXJlcS0+cl9pbm9kZSA9IGlncmFiKGlub2RlKTsKKwkJcmVxLT5yX2lub2RlID0gaW5vZGU7CisJCWlob2xkKGlub2RlKTsKIAkJcmVxLT5yX2RlbnRyeSA9IGRnZXQoZmlscC0+Zl9kZW50cnkpOwogCQkvKiBoaW50cyB0byByZXF1ZXN0IC0+IG1kcyBzZWxlY3Rpb24gY29kZSAqLwogCQlyZXEtPnJfZGlyZWN0X21vZGUgPSBVU0VfQVVUSF9NRFM7CkBAIC03ODcsMTAgKzc4OCwxMiBAQAogCXJlcS0+cl9kZW50cnlfZHJvcCA9IENFUEhfQ0FQX0ZJTEVfU0hBUkVEOwogCXJlcS0+cl9kZW50cnlfdW5sZXNzID0gQ0VQSF9DQVBfRklMRV9FWENMOwogCWVyciA9IGNlcGhfbWRzY19kb19yZXF1ZXN0KG1kc2MsIGRpciwgcmVxKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKIAkJZF9kcm9wKGRlbnRyeSk7Ci0JZWxzZSBpZiAoIXJlcS0+cl9yZXBseV9pbmZvLmhlYWQtPmlzX2RlbnRyeSkKLQkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlncmFiKG9sZF9kZW50cnktPmRfaW5vZGUpKTsKKwl9IGVsc2UgaWYgKCFyZXEtPnJfcmVwbHlfaW5mby5oZWFkLT5pc19kZW50cnkpIHsKKwkJaWhvbGQob2xkX2RlbnRyeS0+ZF9pbm9kZSk7CisJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBvbGRfZGVudHJ5LT5kX2lub2RlKTsKKwl9CiAJY2VwaF9tZHNjX3B1dF9yZXF1ZXN0KHJlcSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZXhwb3J0LmMgYi9mcy9jZXBoL2V4cG9ydC5jCmluZGV4IGE2MTBkM2QuLmY2N2I2ODcgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZXhwb3J0LmMKKysrIGIvZnMvY2VwaC9leHBvcnQuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAJCWVyciA9IGNlcGhfbWRzY19kb19yZXF1ZXN0KG1kc2MsIE5VTEwsIHJlcSk7CiAJCWlub2RlID0gcmVxLT5yX3RhcmdldF9pbm9kZTsKIAkJaWYgKGlub2RlKQotCQkJaWdyYWIoaW5vZGUpOworCQkJaWhvbGQoaW5vZGUpOwogCQljZXBoX21kc2NfcHV0X3JlcXVlc3QocmVxKTsKIAkJaWYgKCFpbm9kZSkKIAkJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCWVyciA9IGNlcGhfbWRzY19kb19yZXF1ZXN0KG1kc2MsIE5VTEwsIHJlcSk7CiAJCWlub2RlID0gcmVxLT5yX3RhcmdldF9pbm9kZTsKIAkJaWYgKGlub2RlKQotCQkJaWdyYWIoaW5vZGUpOworCQkJaWhvbGQoaW5vZGUpOwogCQljZXBoX21kc2NfcHV0X3JlcXVlc3QocmVxKTsKIAkJaWYgKCFpbm9kZSkKIAkJCXJldHVybiBFUlJfUFRSKGVyciA/IGVyciA6IC1FU1RBTEUpOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuYwppbmRleCAyMDMyNTJkLi45NTQyZjA3IDEwMDY0NAotLS0gYS9mcy9jZXBoL2ZpbGUuYworKysgYi9mcy9jZXBoL2ZpbGUuYwpAQCAtMTkxLDcgKzE5MSw4IEBACiAJCWVyciA9IFBUUl9FUlIocmVxKTsKIAkJZ290byBvdXQ7CiAJfQotCXJlcS0+cl9pbm9kZSA9IGlncmFiKGlub2RlKTsKKwlyZXEtPnJfaW5vZGUgPSBpbm9kZTsKKwlpaG9sZChpbm9kZSk7CiAJcmVxLT5yX251bV9jYXBzID0gMTsKIAllcnIgPSBjZXBoX21kc2NfZG9fcmVxdWVzdChtZHNjLCBwYXJlbnRfaW5vZGUsIHJlcSk7CiAJaWYgKCFlcnIpCkBAIC0yODIsNyArMjgzLDcgQEAKIHN0YXRpYyBpbnQgc3RyaXBlZF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQl1NjQgb2ZmLCB1NjQgbGVuLAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bV9wYWdlcywKLQkJCWludCAqY2hlY2tlb2YsIGJvb2wgYWxpZ25fdG9fcGFnZXMsCisJCQlpbnQgKmNoZWNrZW9mLCBib29sIG9fZGlyZWN0LAogCQkJdW5zaWduZWQgbG9uZyBidWZfYWxpZ24pCiB7CiAJc3RydWN0IGNlcGhfZnNfY2xpZW50ICpmc2MgPSBjZXBoX2lub2RlX3RvX2NsaWVudChpbm9kZSk7CkBAIC0zMDcsNyArMzA4LDcgQEAKIAlpb19hbGlnbiA9IG9mZiAmIH5QQUdFX01BU0s7CiAKIG1vcmU6Ci0JaWYgKGFsaWduX3RvX3BhZ2VzKQorCWlmIChvX2RpcmVjdCkKIAkJcGFnZV9hbGlnbiA9IChwb3MgLSBpb19hbGlnbiArIGJ1Zl9hbGlnbikgJiB+UEFHRV9NQVNLOwogCWVsc2UKIAkJcGFnZV9hbGlnbiA9IHBvcyAmIH5QQUdFX01BU0s7CkBAIC0zMTcsMTAgKzMxOCwxMCBAQAogCQkJCSAgY2ktPmlfdHJ1bmNhdGVfc2VxLAogCQkJCSAgY2ktPmlfdHJ1bmNhdGVfc2l6ZSwKIAkJCQkgIHBhZ2VfcG9zLCBwYWdlc19sZWZ0LCBwYWdlX2FsaWduKTsKLQloaXRfc3RyaXBlID0gdGhpc19sZW4gPCBsZWZ0OwotCXdhc19zaG9ydCA9IHJldCA+PSAwICYmIHJldCA8IHRoaXNfbGVuOwogCWlmIChyZXQgPT0gLUVOT0VOVCkKIAkJcmV0ID0gMDsKKwloaXRfc3RyaXBlID0gdGhpc19sZW4gPCBsZWZ0OworCXdhc19zaG9ydCA9IHJldCA+PSAwICYmIHJldCA8IHRoaXNfbGVuOwogCWRvdXQoInN0cmlwZWRfcmVhZCAlbGx1fiV1IChyZWFkICV1KSBnb3QgJWQlcyVzXG4iLCBwb3MsIGxlZnQsIHJlYWQsCiAJICAgICByZXQsIGhpdF9zdHJpcGUgPyAiIEhJVFNUUklQRSIgOiAiIiwgd2FzX3Nob3J0ID8gIiBTSE9SVCIgOiAiIik7CiAKQEAgLTM0NSwyMCArMzQ2LDIyIEBACiAJfQogCiAJaWYgKHdhc19zaG9ydCkgewotCQkvKiB3YXMgb3JpZ2luYWwgZXh0ZW50IGZ1bGx5IGluc2lkZSBpX3NpemU/ICovCi0JCWlmIChwb3MgKyBsZWZ0IDw9IGlub2RlLT5pX3NpemUpIHsKLQkJCWRvdXQoInplcm8gdGFpbFxuIik7Ci0JCQljZXBoX3plcm9fcGFnZV92ZWN0b3JfcmFuZ2UocGFnZV9vZmYgKyByZWFkLCBsZW4gLSByZWFkLAotCQkJCQkJICAgIHBhZ2VzKTsKLQkJCXJlYWQgPSBsZW47Ci0JCQlnb3RvIG91dDsKLQkJfQorCQkvKiBkaWQgd2UgYm91bmNlIG9mZiBlb2Y/ICovCisJCWlmIChwb3MgKyBsZWZ0ID4gaW5vZGUtPmlfc2l6ZSkKKwkJCSpjaGVja2VvZiA9IDE7CiAKLQkJLyogY2hlY2sgaV9zaXplICovCi0JCSpjaGVja2VvZiA9IDE7CisJCS8qIHplcm8gdHJhaWxpbmcgYnl0ZXMgKGluc2lkZSBpX3NpemUpICovCisJCWlmIChsZWZ0ID4gMCAmJiBwb3MgPCBpbm9kZS0+aV9zaXplKSB7CisJCQlpZiAocG9zICsgbGVmdCA+IGlub2RlLT5pX3NpemUpCisJCQkJbGVmdCA9IGlub2RlLT5pX3NpemUgLSBwb3M7CisKKwkJCWRvdXQoInplcm8gdGFpbCAlZFxuIiwgbGVmdCk7CisJCQljZXBoX3plcm9fcGFnZV92ZWN0b3JfcmFuZ2UocGFnZV9vZmYgKyByZWFkLCBsZWZ0LAorCQkJCQkJICAgIHBhZ2VzKTsKKwkJCXJlYWQgKz0gbGVmdDsKKwkJfQogCX0KIAotb3V0OgogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gcmVhZDsKIAlkb3V0KCJzdHJpcGVkX3JlYWQgcmV0dXJucyAlZFxuIiwgcmV0KTsKQEAgLTY1OCw3ICs2NjEsNyBAQAogCiAJCS8qIGhpdCBFT0Ygb3IgaG9sZT8gKi8KIAkJaWYgKHN0YXRyZXQgPT0gMCAmJiAqcHBvcyA8IGlub2RlLT5pX3NpemUpIHsKLQkJCWRvdXQoImFpb19yZWFkIHN5bmNfcmVhZCBoaXQgaG9sZSwgcmVhZGluZyBtb3JlXG4iKTsKKwkJCWRvdXQoImFpb19yZWFkIHN5bmNfcmVhZCBoaXQgaG9sZSwgcHBvcyAlbGxkIDwgc2l6ZSAlbGxkLCByZWFkaW5nIG1vcmVcbiIsICpwcG9zLCBpbm9kZS0+aV9zaXplKTsKIAkJCXJlYWQgKz0gcmV0OwogCQkJYmFzZSArPSByZXQ7CiAJCQlsZW4gLT0gcmV0OwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9pbm9kZS5jIGIvZnMvY2VwaC9pbm9kZS5jCmluZGV4IDcwYjZhNDguLmQ4ODU4ZTkgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvaW5vZGUuYworKysgYi9mcy9jZXBoL2lub2RlLmMKQEAgLTExMDEsMTAgKzExMDEsMTAgQEAKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCQlyZXEtPnJfZGVudHJ5ID0gZG47ICAvKiBtYXkgaGF2ZSBzcGxpY2VkICovCi0JCQlpZ3JhYihpbik7CisJCQlpaG9sZChpbik7CiAJCX0gZWxzZSBpZiAoY2VwaF9pbm8oaW4pID09IHZpbm8uaW5vICYmCiAJCQkgICBjZXBoX3NuYXAoaW4pID09IHZpbm8uc25hcCkgewotCQkJaWdyYWIoaW4pOworCQkJaWhvbGQoaW4pOwogCQl9IGVsc2UgewogCQkJZG91dCgiICVwIGxpbmtzIHRvICVwICVsbHguJWxseCwgbm90ICVsbHguJWxseFxuIiwKIAkJCSAgICAgZG4sIGluLCBjZXBoX2lubyhpbiksIGNlcGhfc25hcChpbiksCkBAIC0xMTQ0LDcgKzExNDQsNyBAQAogCQkJZ290byBkb25lOwogCQl9CiAJCXJlcS0+cl9kZW50cnkgPSBkbjsgIC8qIG1heSBoYXZlIHNwbGljZWQgKi8KLQkJaWdyYWIoaW4pOworCQlpaG9sZChpbik7CiAJCXJpbmZvLT5oZWFkLT5pc19kZW50cnkgPSAxOyAgLyogZm9vbCBub3RyYWNlIGhhbmRsZXJzICovCiAJfQogCkBAIC0xMzI4LDcgKzEzMjgsNyBAQAogCWlmIChxdWV1ZV93b3JrKGNlcGhfaW5vZGVfdG9fY2xpZW50KGlub2RlKS0+d2Jfd3EsCiAJCSAgICAgICAmY2VwaF9pbm9kZShpbm9kZSktPmlfd2Jfd29yaykpIHsKIAkJZG91dCgiY2VwaF9xdWV1ZV93cml0ZWJhY2sgJXBcbiIsIGlub2RlKTsKLQkJaWdyYWIoaW5vZGUpOworCQlpaG9sZChpbm9kZSk7CiAJfSBlbHNlIHsKIAkJZG91dCgiY2VwaF9xdWV1ZV93cml0ZWJhY2sgJXAgZmFpbGVkXG4iLCBpbm9kZSk7CiAJfQpAQCAtMTM1Myw3ICsxMzUzLDcgQEAKIAlpZiAocXVldWVfd29yayhjZXBoX2lub2RlX3RvX2NsaWVudChpbm9kZSktPnBnX2ludl93cSwKIAkJICAgICAgICZjZXBoX2lub2RlKGlub2RlKS0+aV9wZ19pbnZfd29yaykpIHsKIAkJZG91dCgiY2VwaF9xdWV1ZV9pbnZhbGlkYXRlICVwXG4iLCBpbm9kZSk7Ci0JCWlncmFiKGlub2RlKTsKKwkJaWhvbGQoaW5vZGUpOwogCX0gZWxzZSB7CiAJCWRvdXQoImNlcGhfcXVldWVfaW52YWxpZGF0ZSAlcCBmYWlsZWRcbiIsIGlub2RlKTsKIAl9CkBAIC0xNDc3LDcgKzE0NzcsNyBAQAogCWlmIChxdWV1ZV93b3JrKGNlcGhfc2JfdG9fY2xpZW50KGlub2RlLT5pX3NiKS0+dHJ1bmNfd3EsCiAJCSAgICAgICAmY2ktPmlfdm10cnVuY2F0ZV93b3JrKSkgewogCQlkb3V0KCJjZXBoX3F1ZXVlX3ZtdHJ1bmNhdGUgJXBcbiIsIGlub2RlKTsKLQkJaWdyYWIoaW5vZGUpOworCQlpaG9sZChpbm9kZSk7CiAJfSBlbHNlIHsKIAkJZG91dCgiY2VwaF9xdWV1ZV92bXRydW5jYXRlICVwIGZhaWxlZCwgcGVuZGluZz0lZFxuIiwKIAkJICAgICBpbm9kZSwgY2ktPmlfdHJ1bmNhdGVfcGVuZGluZyk7CkBAIC0xNzM4LDcgKzE3MzgsOCBAQAogCQlfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIGlub2RlX2RpcnR5X2ZsYWdzKTsKIAogCWlmIChtYXNrKSB7Ci0JCXJlcS0+cl9pbm9kZSA9IGlncmFiKGlub2RlKTsKKwkJcmVxLT5yX2lub2RlID0gaW5vZGU7CisJCWlob2xkKGlub2RlKTsKIAkJcmVxLT5yX2lub2RlX2Ryb3AgPSByZWxlYXNlOwogCQlyZXEtPnJfYXJncy5zZXRhdHRyLm1hc2sgPSBjcHVfdG9fbGUzMihtYXNrKTsKIAkJcmVxLT5yX251bV9jYXBzID0gMTsKQEAgLTE3NzksNyArMTc4MCw4IEBACiAJcmVxID0gY2VwaF9tZHNjX2NyZWF0ZV9yZXF1ZXN0KG1kc2MsIENFUEhfTURTX09QX0dFVEFUVFIsIFVTRV9BTllfTURTKTsKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7Ci0JcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCWlob2xkKGlub2RlKTsKIAlyZXEtPnJfbnVtX2NhcHMgPSAxOwogCXJlcS0+cl9hcmdzLmdldGF0dHIubWFzayA9IGNwdV90b19sZTMyKG1hc2spOwogCWVyciA9IGNlcGhfbWRzY19kb19yZXF1ZXN0KG1kc2MsIE5VTEwsIHJlcSk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2lvY3RsLmMgYi9mcy9jZXBoL2lvY3RsLmMKaW5kZXggODg4OGM5YmEuLmVmMGI1ZjQgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvaW9jdGwuYworKysgYi9mcy9jZXBoL2lvY3RsLmMKQEAgLTczLDcgKzczLDggQEAKIAkJCQkgICAgICAgVVNFX0FVVEhfTURTKTsKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7Ci0JcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCWlob2xkKGlub2RlKTsKIAlyZXEtPnJfaW5vZGVfZHJvcCA9IENFUEhfQ0FQX0ZJTEVfU0hBUkVEIHwgQ0VQSF9DQVBfRklMRV9FWENMOwogCiAJcmVxLT5yX2FyZ3Muc2V0bGF5b3V0LmxheW91dC5mbF9zdHJpcGVfdW5pdCA9CkBAIC0xMzUsNyArMTM2LDggQEAKIAogCWlmIChJU19FUlIocmVxKSkKIAkJcmV0dXJuIFBUUl9FUlIocmVxKTsKLQlyZXEtPnJfaW5vZGUgPSBpZ3JhYihpbm9kZSk7CisJcmVxLT5yX2lub2RlID0gaW5vZGU7CisJaWhvbGQoaW5vZGUpOwogCiAJcmVxLT5yX2FyZ3Muc2V0bGF5b3V0LmxheW91dC5mbF9zdHJpcGVfdW5pdCA9CiAJCQljcHVfdG9fbGUzMihsLnN0cmlwZV91bml0KTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbG9ja3MuYyBiL2ZzL2NlcGgvbG9ja3MuYwppbmRleCA0NzZiMzI5Li44MDU3NmQwIDEwMDY0NAotLS0gYS9mcy9jZXBoL2xvY2tzLmMKKysrIGIvZnMvY2VwaC9sb2Nrcy5jCkBAIC0yMyw3ICsyMyw4IEBACiAJcmVxID0gY2VwaF9tZHNjX2NyZWF0ZV9yZXF1ZXN0KG1kc2MsIG9wZXJhdGlvbiwgVVNFX0FVVEhfTURTKTsKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7Ci0JcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCWlob2xkKGlub2RlKTsKIAogCS8qIG1kcyByZXF1aXJlcyBzdGFydCBhbmQgbGVuZ3RoIHJhdGhlciB0aGFuIHN0YXJ0IGFuZCBlbmQgKi8KIAlpZiAoTExPTkdfTUFYID09IGZsLT5mbF9lbmQpCkBAIC0zMiwxMSArMzMsMTAgQEAKIAkJbGVuZ3RoID0gZmwtPmZsX2VuZCAtIGZsLT5mbF9zdGFydCArIDE7CiAKIAlkb3V0KCJjZXBoX2xvY2tfbWVzc2FnZTogcnVsZTogJWQsIG9wOiAlZCwgcGlkOiAlbGx1LCBzdGFydDogJWxsdSwgIgotCSAgICAgImxlbmd0aDogJWxsdSwgd2FpdDogJWQsIHR5cGVgOiAlZCIsIChpbnQpbG9ja190eXBlLAorCSAgICAgImxlbmd0aDogJWxsdSwgd2FpdDogJWQsIHR5cGU6ICVkIiwgKGludClsb2NrX3R5cGUsCiAJICAgICAoaW50KW9wZXJhdGlvbiwgKHU2NClmbC0+ZmxfcGlkLCBmbC0+Zmxfc3RhcnQsCiAJICAgICBsZW5ndGgsIHdhaXQsIGZsLT5mbF90eXBlKTsKIAotCiAJcmVxLT5yX2FyZ3MuZmlsZWxvY2tfY2hhbmdlLnJ1bGUgPSBsb2NrX3R5cGU7CiAJcmVxLT5yX2FyZ3MuZmlsZWxvY2tfY2hhbmdlLnR5cGUgPSBjbWQ7CiAJcmVxLT5yX2FyZ3MuZmlsZWxvY2tfY2hhbmdlLnBpZCA9IGNwdV90b19sZTY0KCh1NjQpZmwtPmZsX3BpZCk7CkBAIC03MCw3ICs3MCw3IEBACiAJfQogCWNlcGhfbWRzY19wdXRfcmVxdWVzdChyZXEpOwogCWRvdXQoImNlcGhfbG9ja19tZXNzYWdlOiBydWxlOiAlZCwgb3A6ICVkLCBwaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCAiCi0JICAgICAibGVuZ3RoOiAlbGx1LCB3YWl0OiAlZCwgdHlwZWA6ICVkLCBlcnIgY29kZSAlZCIsIChpbnQpbG9ja190eXBlLAorCSAgICAgImxlbmd0aDogJWxsdSwgd2FpdDogJWQsIHR5cGU6ICVkLCBlcnIgY29kZSAlZCIsIChpbnQpbG9ja190eXBlLAogCSAgICAgKGludClvcGVyYXRpb24sICh1NjQpZmwtPmZsX3BpZCwgZmwtPmZsX3N0YXJ0LAogCSAgICAgbGVuZ3RoLCB3YWl0LCBmbC0+ZmxfdHlwZSwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtMTA5LDE2ICsxMDksMjAgQEAKIAkJCWRvdXQoIm1kcyBsb2NrZWQsIGxvY2tpbmcgbG9jYWxseSIpOwogCQkJZXJyID0gcG9zaXhfbG9ja19maWxlKGZpbGUsIGZsLCBOVUxMKTsKIAkJCWlmIChlcnIgJiYgKENFUEhfTURTX09QX1NFVEZJTEVMT0NLID09IG9wKSkgewotCQkJCS8qIHVuZG8hIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBrZXJuZWwgZGV0ZWN0cwotCQkJCSAqIGxvY2FsIGRlYWRsb2NrLiAqLworCQkJCS8qIHVuZG8hIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmCisJCQkJICogdGhlIGtlcm5lbCBkZXRlY3RzIGxvY2FsCisJCQkJICogZGVhZGxvY2suICovCiAJCQkJY2VwaF9sb2NrX21lc3NhZ2UoQ0VQSF9MT0NLX0ZDTlRMLCBvcCwgZmlsZSwKIAkJCQkJCSAgQ0VQSF9MT0NLX1VOTE9DSywgMCwgZmwpOwotCQkJCWRvdXQoImdvdCAlZCBvbiBwb3NpeF9sb2NrX2ZpbGUsIHVuZGlkIGxvY2siLCBlcnIpOworCQkJCWRvdXQoImdvdCAlZCBvbiBwb3NpeF9sb2NrX2ZpbGUsIHVuZGlkIGxvY2siLAorCQkJCSAgICAgZXJyKTsKIAkJCX0KIAkJfQogCi0JfSBlbHNlIHsKLQkJZG91dCgibWRzIHJldHVybmVkIGVycm9yIGNvZGUgJWQiLCBlcnIpOworCX0gZWxzZSBpZiAoZXJyID09IC1FUkVTVEFSVFNZUykgeworCQlkb3V0KCJ1bmRvaW5nIGxvY2tcbiIpOworCQljZXBoX2xvY2tfbWVzc2FnZShDRVBIX0xPQ0tfRkNOVEwsIG9wLCBmaWxlLAorCQkJCSAgQ0VQSF9MT0NLX1VOTE9DSywgMCwgZmwpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpAQCAtMTU1LDggKzE1OSwxMSBAQAogCQkJCQkgIGZpbGUsIENFUEhfTE9DS19VTkxPQ0ssIDAsIGZsKTsKIAkJCWRvdXQoImdvdCAlZCBvbiBmbG9ja19sb2NrX2ZpbGVfd2FpdCwgdW5kaWQgbG9jayIsIGVycik7CiAJCX0KLQl9IGVsc2UgewotCQlkb3V0KCJtZHMgZXJyb3IgY29kZSAlZCIsIGVycik7CisJfSBlbHNlIGlmIChlcnIgPT0gLUVSRVNUQVJUU1lTKSB7CisJCWRvdXQoInVuZG9pbmcgbG9ja1xuIik7CisJCWNlcGhfbG9ja19tZXNzYWdlKENFUEhfTE9DS19GTE9DSywKKwkJCQkgIENFUEhfTURTX09QX1NFVEZJTEVMT0NLLAorCQkJCSAgZmlsZSwgQ0VQSF9MT0NLX1VOTE9DSywgMCwgZmwpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zbmFwLmMgYi9mcy9jZXBoL3NuYXAuYwppbmRleCAyNDA2N2Q2Li41NGIxNGRlIDEwMDY0NAotLS0gYS9mcy9jZXBoL3NuYXAuYworKysgYi9mcy9jZXBoL3NuYXAuYwpAQCAtNzIyLDcgKzcyMiw3IEBACiAJCWNpID0gbGlzdF9maXJzdF9lbnRyeSgmbWRzYy0+c25hcF9mbHVzaF9saXN0LAogCQkJCXN0cnVjdCBjZXBoX2lub2RlX2luZm8sIGlfc25hcF9mbHVzaF9pdGVtKTsKIAkJaW5vZGUgPSAmY2ktPnZmc19pbm9kZTsKLQkJaWdyYWIoaW5vZGUpOworCQlpaG9sZChpbm9kZSk7CiAJCXNwaW5fdW5sb2NrKCZtZHNjLT5zbmFwX2ZsdXNoX2xvY2spOwogCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCQlfX2NlcGhfZmx1c2hfc25hcHMoY2ksICZzZXNzaW9uLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgveGF0dHIuYyBiL2ZzL2NlcGgveGF0dHIuYwppbmRleCBmMmI2Mjg2Li5mNDJkNzMwIDEwMDY0NAotLS0gYS9mcy9jZXBoL3hhdHRyLmMKKysrIGIvZnMvY2VwaC94YXR0ci5jCkBAIC02NjUsNyArNjY1LDggQEAKIAkJZXJyID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9Ci0JcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCWlob2xkKGlub2RlKTsKIAlyZXEtPnJfaW5vZGVfZHJvcCA9IENFUEhfQ0FQX1hBVFRSX1NIQVJFRDsKIAlyZXEtPnJfbnVtX2NhcHMgPSAxOwogCXJlcS0+cl9hcmdzLnNldHhhdHRyLmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwpAQCAtNzk1LDcgKzc5Niw4IEBACiAJCQkJICAgICAgIFVTRV9BVVRIX01EUyk7CiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwotCXJlcS0+cl9pbm9kZSA9IGlncmFiKGlub2RlKTsKKwlyZXEtPnJfaW5vZGUgPSBpbm9kZTsKKwlpaG9sZChpbm9kZSk7CiAJcmVxLT5yX2lub2RlX2Ryb3AgPSBDRVBIX0NBUF9YQVRUUl9TSEFSRUQ7CiAJcmVxLT5yX251bV9jYXBzID0gMTsKIAlyZXEtPnJfcGF0aDIgPSBrc3RyZHVwKG5hbWUsIEdGUF9OT0ZTKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCAxY2Q0YzNhLi41M2VkMWFkIDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC03LDYgKzcsNyBAQAogCXNlbGVjdCBDUllQVE9fTUQ1CiAJc2VsZWN0IENSWVBUT19ITUFDCiAJc2VsZWN0IENSWVBUT19BUkM0CisJc2VsZWN0IENSWVBUT19FQ0IKIAlzZWxlY3QgQ1JZUFRPX0RFUwogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGNsaWVudCBWRlMgbW9kdWxlIGZvciB0aGUgQ29tbW9uIEludGVybmV0IEZpbGUgU3lzdGVtCkBAIC0xNDgsNyArMTQ5LDcgQEAKIAogY29uZmlnIENJRlNfQUNMCiAJICBib29sICJQcm92aWRlIENJRlMgQUNMIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBDSUZTX1hBVFRSCisJICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBDSUZTX1hBVFRSICYmIEtFWVMKIAkgIGhlbHAKIAkgICAgQWxsb3dzIHRvIGZldGNoIENJRlMvTlRGUyBBQ0wgZnJvbSB0aGUgc2VydmVyLiAgVGhlIERBQ0wgYmxvYgogCSAgICBpcyBoYW5kZWQgb3ZlciB0byB0aGUgYXBwbGljYXRpb24vY2FsbGVyLgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jYWNoZS5jIGIvZnMvY2lmcy9jYWNoZS5jCmluZGV4IGRkODU4NGQuLjU0NTUwOWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2FjaGUuYworKysgYi9mcy9jaWZzL2NhY2hlLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQljRVJST1IoMSwgIkNJRlM6IFVua25vd24gbmV0d29yayBmYW1pbHkgJyVkJyIsIHNhLT5zYV9mYW1pbHkpOworCQljRVJST1IoMSwgIlVua25vd24gbmV0d29yayBmYW1pbHkgJyVkJyIsIHNhLT5zYV9mYW1pbHkpOwogCQlrZXlfbGVuID0gMDsKIAkJYnJlYWs7CiAJfQpAQCAtMTUyLDcgKzE1Miw3IEBACiAKIAlzaGFyZW5hbWUgPSBleHRyYWN0X3NoYXJlbmFtZSh0Y29uLT50cmVlTmFtZSk7CiAJaWYgKElTX0VSUihzaGFyZW5hbWUpKSB7Ci0JCWNGWUkoMSwgIkNJRlM6IGNvdWxkbid0IGV4dHJhY3Qgc2hhcmVuYW1lXG4iKTsKKwkJY0ZZSSgxLCAiJXM6IGNvdWxkbid0IGV4dHJhY3Qgc2hhcmVuYW1lXG4iLCBfX2Z1bmNfXyk7CiAJCXNoYXJlbmFtZSA9IE5VTEw7CiAJCXJldHVybiAwOwogCX0KQEAgLTMwMiw3ICszMDIsNyBAQAogCXBhZ2V2ZWNfaW5pdCgmcHZlYywgMCk7CiAJZmlyc3QgPSAwOwogCi0JY0ZZSSgxLCAiY2lmcyBpbm9kZSAweCVwIG5vdyB1bmNhY2hlZCIsIGNpZnNpKTsKKwljRllJKDEsICIlczogY2lmcyBpbm9kZSAweCVwIG5vdyB1bmNhY2hlZCIsIF9fZnVuY19fLCBjaWZzaSk7CiAKIAlmb3IgKDs7KSB7CiAJCW5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXAoJnB2ZWMsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKaW5kZXggZGZiZDlmMS4uNWEwZWU3ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJaWYgKGNpZnNfcGR1ID09IE5VTEwgfHwgc2VydmVyID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNpZnNfcGR1LT5Db21tYW5kID09IFNNQl9DT01fTkVHT1RJQVRFKQorCWlmICghc2VydmVyLT5zZXNzaW9uX2VzdGFiKQogCQlyZXR1cm4gMDsKIAogCWlmIChjaWZzX3BkdS0+Q29tbWFuZCA9PSBTTUJfQ09NX0xPQ0tJTkdfQU5EWCkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggOTg5NDQyZC4uMmYwYzU4NiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC0yNTcsOSArMjU3LDYgQEAKIHsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCi0JaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCi0JCXJldHVybiAtRUNISUxEOwotCiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCiAJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT19QRVJNKSB7CkBAIC0zNTIsNiArMzQ5LDM3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZAorY2lmc19zaG93X3NlY3VyaXR5KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKQoreworCXNlcV9wcmludGYocywgIixzZWM9Iik7CisKKwlzd2l0Y2ggKHNlcnZlci0+c2VjVHlwZSkgeworCWNhc2UgTEFOTUFOOgorCQlzZXFfcHJpbnRmKHMsICJsYW5tYW4iKTsKKwkJYnJlYWs7CisJY2FzZSBOVExNdjI6CisJCXNlcV9wcmludGYocywgIm50bG12MiIpOworCQlicmVhazsKKwljYXNlIE5UTE06CisJCXNlcV9wcmludGYocywgIm50bG0iKTsKKwkJYnJlYWs7CisJY2FzZSBLZXJiZXJvczoKKwkJc2VxX3ByaW50ZihzLCAia3JiNSIpOworCQlicmVhazsKKwljYXNlIFJhd05UTE1TU1A6CisJCXNlcV9wcmludGYocywgIm50bG1zc3AiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogc2hvdWxkbid0IGV2ZXIgaGFwcGVuICovCisJCXNlcV9wcmludGYocywgInVua25vd24iKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNlcnZlci0+c2VjX21vZGUgJiAoU0VDTU9ERV9TSUdOX1JFUVVJUkVEIHwgU0VDTU9ERV9TSUdOX0VOQUJMRUQpKQorCQlzZXFfcHJpbnRmKHMsICJpIik7Cit9CisKIC8qCiAgKiBjaWZzX3Nob3dfb3B0aW9ucygpIGlzIGZvciBkaXNwbGF5aW5nIG1vdW50IG9wdGlvbnMgaW4gL3Byb2MvbW91bnRzLgogICogTm90IGFsbCBzZXR0YWJsZSBvcHRpb25zIGFyZSBkaXNwbGF5ZWQgYnV0IG1vc3Qgb2YgdGhlIGltcG9ydGFudApAQCAtMzY1LDYgKzM5Myw4IEBACiAJc3RydWN0IHNvY2thZGRyICpzcmNhZGRyOwogCXNyY2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnRjb24tPnNlcy0+c2VydmVyLT5zcmNhZGRyOwogCisJY2lmc19zaG93X3NlY3VyaXR5KHMsIHRjb24tPnNlcy0+c2VydmVyKTsKKwogCXNlcV9wcmludGYocywgIix1bmM9JXMiLCB0Y29uLT50cmVlTmFtZSk7CiAKIAlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01VTFRJVVNFUikKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IDY0MzEzZjcuLjA5MDBlMTYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtMTI5LDUgKzEyOSw1IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGNpZnNfZXhwb3J0X29wczsKICNlbmRpZiAvKiBDSUZTX05GU0RfRVhQT1JUICovCiAKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNzIiCisjZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjczIgogI2VuZGlmCQkJCS8qIF9DSUZTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCA2ZDg4YjgyLi4xMmNmNzJkIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKIAl9CiAKLQl3aGlsZSAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05lZWRSZWNvbm5lY3QpIHsKKwlkbyB7CiAJCXRyeV90b19mcmVlemUoKTsKIAogCQkvKiB3ZSBzaG91bGQgdHJ5IG9ubHkgdGhlIHBvcnQgd2UgY29ubmVjdGVkIHRvIGJlZm9yZSAqLwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCQkJc2VydmVyLT50Y3BTdGF0dXMgPSBDaWZzTmVlZE5lZ290aWF0ZTsKIAkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJCX0KLQl9CisJfSB3aGlsZSAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05lZWRSZWNvbm5lY3QpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtNzg0LDcgKzc4NCw3IEBACiAJCQkgc3RydWN0IHNtYl92b2wgKnZvbCkKIHsKIAljaGFyICp2YWx1ZSwgKmRhdGEsICplbmQ7Ci0JY2hhciAqbW91bnRkYXRhX2NvcHksICpvcHRpb25zOworCWNoYXIgKm1vdW50ZGF0YV9jb3B5ID0gTlVMTCwgKm9wdGlvbnM7CiAJdW5zaWduZWQgaW50ICB0ZW1wX2xlbiwgaSwgajsKIAljaGFyIHNlcGFyYXRvclsyXTsKIAlzaG9ydCBpbnQgb3ZlcnJpZGVfdWlkID0gLTE7CkBAIC0xMzkxLDcgKzEzOTEsNyBAQAogCQkJCSIvcHJvYy9mcy9jaWZzL0xvb2t1cENhY2hlRW5hYmxlZCB0byAwXG4iKTsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAiZnNjIiwgMykgPT0gMCkgewogI2lmbmRlZiBDT05GSUdfQ0lGU19GU0NBQ0hFCi0JCQljRVJST1IoMSwgIkZTLUNhY2hlIHN1cHBvcnQgbmVlZHMgQ09ORklHX0NJRlNfRlNDQUNIRSIKKwkJCWNFUlJPUigxLCAiRlMtQ2FjaGUgc3VwcG9ydCBuZWVkcyBDT05GSUdfQ0lGU19GU0NBQ0hFICIKIAkJCQkgICJrZXJuZWwgY29uZmlnIG9wdGlvbiBzZXQiKTsKIAkJCWdvdG8gY2lmc19wYXJzZV9tb3VudF9lcnI7CiAjZW5kaWYKQEAgLTE5NzYsNyArMTk3Niw3IEBACiAJCXdhcm5lZF9vbl9udGxtID0gdHJ1ZTsKIAkJY0VSUk9SKDEsICJkZWZhdWx0IHNlY3VyaXR5IG1lY2hhbmlzbSByZXF1ZXN0ZWQuICBUaGUgZGVmYXVsdCAiCiAJCQkic2VjdXJpdHkgbWVjaGFuaXNtIHdpbGwgYmUgdXBncmFkZWQgZnJvbSBudGxtIHRvICIKLQkJCSJudGxtdjIgaW4ga2VybmVsIHJlbGVhc2UgMi42LjQxIik7CisJCQkibnRsbXYyIGluIGtlcm5lbCByZWxlYXNlIDMuMSIpOwogCX0KIAlzZXMtPm92ZXJyaWRlU2VjRmxnID0gdm9sdW1lX2luZm8tPnNlY0ZsZzsKIApAQCAtMjE0OSw3ICsyMTQ5LDEwIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRjb25fbGluayAqCi1jaWZzX3NiX21hc3Rlcl90bGluayhzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKTsKK2NpZnNfc2JfbWFzdGVyX3RsaW5rKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpCit7CisJcmV0dXJuIGNpZnNfc2ItPm1hc3Rlcl90bGluazsKK30KIAogc3RhdGljIGludAogY29tcGFyZV9tb3VudF9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBjaWZzX21udF9kYXRhICptbnRfZGF0YSkKQEAgLTMxNzEsNiArMzE3NCwxMCBAQAogCXJldHVybiByYzsKIH0KIAorLyoKKyAqIElzc3VlIGEgVFJFRV9DT05ORUNUIHJlcXVlc3QuIE5vdGUgdGhhdCBmb3IgSVBDJCBzaGFyZXMsIHRoYXQgdGhlIHRjb24KKyAqIHBvaW50ZXIgbWF5IGJlIE5VTEwuCisgKi8KIGludAogQ0lGU1RDb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNfc2VzICpzZXMsCiAJIGNvbnN0IGNoYXIgKnRyZWUsIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sCkBAIC0zMjA1LDcgKzMyMTIsNyBAQAogCXBTTUItPkFuZFhDb21tYW5kID0gMHhGRjsKIAlwU01CLT5GbGFncyA9IGNwdV90b19sZTE2KFRDT05fRVhURU5ERURfU0VDSU5GTyk7CiAJYmNjX3B0ciA9ICZwU01CLT5QYXNzd29yZFswXTsKLQlpZiAoKHNlcy0+c2VydmVyLT5zZWNfbW9kZSkgJiBTRUNNT0RFX1VTRVIpIHsKKwlpZiAoIXRjb24gfHwgKHNlcy0+c2VydmVyLT5zZWNfbW9kZSAmIFNFQ01PREVfVVNFUikpIHsKIAkJcFNNQi0+UGFzc3dvcmRMZW5ndGggPSBjcHVfdG9fbGUxNigxKTsJLyogbWluaW11bSAqLwogCQkqYmNjX3B0ciA9IDA7IC8qIHBhc3N3b3JkIGlzIG51bGwgYnl0ZSAqLwogCQliY2NfcHRyKys7ICAgICAgICAgICAgICAvKiBza2lwIHBhc3N3b3JkICovCkBAIC0zMzcxLDcgKzMzNzgsNyBAQAogCX0KIAlpZiAocmMgPT0gMCkgewogCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJaWYgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNFeGl0aW5nKQorCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05lZWROZWdvdGlhdGUpCiAJCQlzZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNHb29kOwogCQllbHNlCiAJCQlyYyA9IC1FSE9TVERPV047CkBAIC0zNDg0LDEyICszNDkxLDYgQEAKIAlyZXR1cm4gdGNvbjsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGNvbl9saW5rICoKLWNpZnNfc2JfbWFzdGVyX3RsaW5rKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpCi17Ci0JcmV0dXJuIGNpZnNfc2ItPm1hc3Rlcl90bGluazsKLX0KLQogc3RydWN0IGNpZnNfdGNvbiAqCiBjaWZzX3NiX21hc3Rlcl90Y29uKHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpCiB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZzY2FjaGUuYyBiL2ZzL2NpZnMvZnNjYWNoZS5jCmluZGV4IGQzNjhhNDcuLjgxNjY5NjYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZnNjYWNoZS5jCisrKyBiL2ZzL2NpZnMvZnNjYWNoZS5jCkBAIC0yOCwxNCArMjgsMTQgQEAKIAlzZXJ2ZXItPmZzY2FjaGUgPQogCQlmc2NhY2hlX2FjcXVpcmVfY29va2llKGNpZnNfZnNjYWNoZV9uZXRmcy5wcmltYXJ5X2luZGV4LAogCQkJCSZjaWZzX2ZzY2FjaGVfc2VydmVyX2luZGV4X2RlZiwgc2VydmVyKTsKLQljRllJKDEsICJDSUZTOiBnZXQgY2xpZW50IGNvb2tpZSAoMHglcC8weCVwKSIsIHNlcnZlciwKLQkJCQlzZXJ2ZXItPmZzY2FjaGUpOworCWNGWUkoMSwgIiVzOiAoMHglcC8weCVwKSIsIF9fZnVuY19fLCBzZXJ2ZXIsCisJCQlzZXJ2ZXItPmZzY2FjaGUpOwogfQogCiB2b2lkIGNpZnNfZnNjYWNoZV9yZWxlYXNlX2NsaWVudF9jb29raWUoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKQogewotCWNGWUkoMSwgIkNJRlM6IHJlbGVhc2UgY2xpZW50IGNvb2tpZSAoMHglcC8weCVwKSIsIHNlcnZlciwKLQkJCQlzZXJ2ZXItPmZzY2FjaGUpOworCWNGWUkoMSwgIiVzOiAoMHglcC8weCVwKSIsIF9fZnVuY19fLCBzZXJ2ZXIsCisJCQlzZXJ2ZXItPmZzY2FjaGUpOwogCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUoc2VydmVyLT5mc2NhY2hlLCAwKTsKIAlzZXJ2ZXItPmZzY2FjaGUgPSBOVUxMOwogfQpAQCAtNDcsMTMgKzQ3LDEzIEBACiAJdGNvbi0+ZnNjYWNoZSA9CiAJCWZzY2FjaGVfYWNxdWlyZV9jb29raWUoc2VydmVyLT5mc2NhY2hlLAogCQkJCSZjaWZzX2ZzY2FjaGVfc3VwZXJfaW5kZXhfZGVmLCB0Y29uKTsKLQljRllJKDEsICJDSUZTOiBnZXQgc3VwZXJibG9jayBjb29raWUgKDB4JXAvMHglcCkiLAotCQkJCXNlcnZlci0+ZnNjYWNoZSwgdGNvbi0+ZnNjYWNoZSk7CisJY0ZZSSgxLCAiJXM6ICgweCVwLzB4JXApIiwgX19mdW5jX18sIHNlcnZlci0+ZnNjYWNoZSwKKwkJCXRjb24tPmZzY2FjaGUpOwogfQogCiB2b2lkIGNpZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZShzdHJ1Y3QgY2lmc190Y29uICp0Y29uKQogewotCWNGWUkoMSwgIkNJRlM6IHJlbGVhc2luZyBzdXBlcmJsb2NrIGNvb2tpZSAoMHglcCkiLCB0Y29uLT5mc2NhY2hlKTsKKwljRllJKDEsICIlczogKDB4JXApIiwgX19mdW5jX18sIHRjb24tPmZzY2FjaGUpOwogCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUodGNvbi0+ZnNjYWNoZSwgMCk7CiAJdGNvbi0+ZnNjYWNoZSA9IE5VTEw7CiB9CkBAIC03MCw4ICs3MCw4IEBACiAJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9GU0NBQ0hFKSB7CiAJCWNpZnNpLT5mc2NhY2hlID0gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSh0Y29uLT5mc2NhY2hlLAogCQkJCSZjaWZzX2ZzY2FjaGVfaW5vZGVfb2JqZWN0X2RlZiwgY2lmc2kpOwotCQljRllJKDEsICJDSUZTOiBnb3QgRkggY29va2llICgweCVwLzB4JXApIiwgdGNvbi0+ZnNjYWNoZSwKLQkJCQljaWZzaS0+ZnNjYWNoZSk7CisJCWNGWUkoMSwgIiVzOiBnb3QgRkggY29va2llICgweCVwLzB4JXApIiwgX19mdW5jX18sCisJCQkJdGNvbi0+ZnNjYWNoZSwgY2lmc2ktPmZzY2FjaGUpOwogCX0KIH0KIApAQCAtODAsOCArODAsNyBAQAogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSA9IENJRlNfSShpbm9kZSk7CiAKIAlpZiAoY2lmc2ktPmZzY2FjaGUpIHsKLQkJY0ZZSSgxLCAiQ0lGUyByZWxlYXNpbmcgaW5vZGUgY29va2llICgweCVwKSIsCi0JCQkJY2lmc2ktPmZzY2FjaGUpOworCQljRllJKDEsICIlczogKDB4JXApIiwgX19mdW5jX18sIGNpZnNpLT5mc2NhY2hlKTsKIAkJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShjaWZzaS0+ZnNjYWNoZSwgMCk7CiAJCWNpZnNpLT5mc2NhY2hlID0gTlVMTDsKIAl9CkBAIC05Miw4ICs5MSw3IEBACiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpID0gQ0lGU19JKGlub2RlKTsKIAogCWlmIChjaWZzaS0+ZnNjYWNoZSkgewotCQljRllJKDEsICJDSUZTIGRpc2FibGluZyBpbm9kZSBjb29raWUgKDB4JXApIiwKLQkJCQljaWZzaS0+ZnNjYWNoZSk7CisJCWNGWUkoMSwgIiVzOiAoMHglcCkiLCBfX2Z1bmNfXywgY2lmc2ktPmZzY2FjaGUpOwogCQlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKGNpZnNpLT5mc2NhY2hlLCAxKTsKIAkJY2lmc2ktPmZzY2FjaGUgPSBOVUxMOwogCX0KQEAgLTEyMSw4ICsxMTksOCBAQAogCQkJCQljaWZzX3NiX21hc3Rlcl90Y29uKGNpZnNfc2IpLT5mc2NhY2hlLAogCQkJCQkmY2lmc19mc2NhY2hlX2lub2RlX29iamVjdF9kZWYsCiAJCQkJCWNpZnNpKTsKLQkJY0ZZSSgxLCAiQ0lGUzogbmV3IGNvb2tpZSAweCVwIG9sZGNvb2tpZSAweCVwIiwKLQkJCQljaWZzaS0+ZnNjYWNoZSwgb2xkKTsKKwkJY0ZZSSgxLCAiJXM6IG5ldyBjb29raWUgMHglcCBvbGRjb29raWUgMHglcCIsCisJCQkJX19mdW5jX18sIGNpZnNpLT5mc2NhY2hlLCBvbGQpOwogCX0KIH0KIApAQCAtMTMyLDggKzEzMCw4IEBACiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCQlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2kgPSBDSUZTX0koaW5vZGUpOwogCi0JCWNGWUkoMSwgIkNJRlM6IGZzY2FjaGUgcmVsZWFzZSBwYWdlICgweCVwLzB4JXApIiwKLQkJCQlwYWdlLCBjaWZzaS0+ZnNjYWNoZSk7CisJCWNGWUkoMSwgIiVzOiAoMHglcC8weCVwKSIsIF9fZnVuY19fLCBwYWdlLAorCQkJCWNpZnNpLT5mc2NhY2hlKTsKIAkJaWYgKCFmc2NhY2hlX21heWJlX3JlbGVhc2VfcGFnZShjaWZzaS0+ZnNjYWNoZSwgcGFnZSwgZ2ZwKSkKIAkJCXJldHVybiAwOwogCX0KQEAgLTE0NCw4ICsxNDIsNyBAQAogc3RhdGljIHZvaWQgY2lmc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGVfY29tcGxldGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmN0eCwKIAkJCQkJCWludCBlcnJvcikKIHsKLQljRllJKDEsICJDRlM6IHJlYWRwYWdlX2Zyb21fZnNjYWNoZV9jb21wbGV0ZSAoMHglcC8lZCkiLAotCQkJcGFnZSwgZXJyb3IpOworCWNGWUkoMSwgIiVzOiAoMHglcC8lZCkiLCBfX2Z1bmNfXywgcGFnZSwgZXJyb3IpOwogCWlmICghZXJyb3IpCiAJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKQEAgLTE1OCw3ICsxNTUsNyBAQAogewogCWludCByZXQ7CiAKLQljRllJKDEsICJDSUZTOiByZWFkcGFnZV9mcm9tX2ZzY2FjaGUoZnNjOiVwLCBwOiVwLCBpOjB4JXAiLAorCWNGWUkoMSwgIiVzOiAoZnNjOiVwLCBwOiVwLCBpOjB4JXAiLCBfX2Z1bmNfXywKIAkJCUNJRlNfSShpbm9kZSktPmZzY2FjaGUsIHBhZ2UsIGlub2RlKTsKIAlyZXQgPSBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZShDSUZTX0koaW5vZGUpLT5mc2NhY2hlLCBwYWdlLAogCQkJCQkgY2lmc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGVfY29tcGxldGUsCkBAIC0xNjcsMTEgKzE2NCwxMSBAQAogCXN3aXRjaCAocmV0KSB7CiAKIAljYXNlIDA6IC8qIHBhZ2UgZm91bmQgaW4gZnNjYWNoZSwgcmVhZCBzdWJtaXR0ZWQgKi8KLQkJY0ZZSSgxLCAiQ0lGUzogcmVhZHBhZ2VfZnJvbV9mc2NhY2hlOiBzdWJtaXR0ZWQiKTsKKwkJY0ZZSSgxLCAiJXM6IHN1Ym1pdHRlZCIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldDsKIAljYXNlIC1FTk9CVUZTOgkvKiBwYWdlIHdvbid0IGJlIGNhY2hlZCAqLwogCWNhc2UgLUVOT0RBVEE6CS8qIHBhZ2Ugbm90IGluIGNhY2hlICovCi0JCWNGWUkoMSwgIkNJRlM6IHJlYWRwYWdlX2Zyb21fZnNjYWNoZSAlZCIsIHJldCk7CisJCWNGWUkoMSwgIiVzOiAlZCIsIF9fZnVuY19fLCByZXQpOwogCQlyZXR1cm4gMTsKIAogCWRlZmF1bHQ6CkBAIC0xOTAsNyArMTg3LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JY0ZZSSgxLCAiQ0lGUzogX19jaWZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUgKDB4JXAvJXUvMHglcCkiLAorCWNGWUkoMSwgIiVzOiAoMHglcC8ldS8weCVwKSIsIF9fZnVuY19fLAogCQkJQ0lGU19JKGlub2RlKS0+ZnNjYWNoZSwgKm5yX3BhZ2VzLCBpbm9kZSk7CiAJcmV0ID0gZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKENJRlNfSShpbm9kZSktPmZzY2FjaGUsIG1hcHBpbmcsCiAJCQkJCSAgcGFnZXMsIG5yX3BhZ2VzLApAQCAtMTk5LDEyICsxOTYsMTIgQEAKIAkJCQkJICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKIAlzd2l0Y2ggKHJldCkgewogCWNhc2UgMDoJLyogcmVhZCBzdWJtaXR0ZWQgdG8gdGhlIGNhY2hlIGZvciBhbGwgcGFnZXMgKi8KLQkJY0ZZSSgxLCAiQ0lGUzogcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZTogc3VibWl0dGVkIik7CisJCWNGWUkoMSwgIiVzOiBzdWJtaXR0ZWQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXQ7CiAKIAljYXNlIC1FTk9CVUZTOgkvKiBzb21lIHBhZ2VzIGFyZSBub3QgY2FjaGVkIGFuZCBjYW4ndCBiZSAqLwogCWNhc2UgLUVOT0RBVEE6CS8qIHNvbWUgcGFnZXMgYXJlIG5vdCBjYWNoZWQgKi8KLQkJY0ZZSSgxLCAiQ0lGUzogcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZTogbm8gcGFnZSIpOworCQljRllJKDEsICIlczogbm8gcGFnZSIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDE7CiAKIAlkZWZhdWx0OgpAQCAtMjE4LDcgKzIxNSw3IEBACiB7CiAJaW50IHJldDsKIAotCWNGWUkoMSwgIkNJRlM6IHJlYWRwYWdlX3RvX2ZzY2FjaGUoZnNjOiAlcCwgcDogJXAsIGk6ICVwIiwKKwljRllJKDEsICIlczogKGZzYzogJXAsIHA6ICVwLCBpOiAlcCkiLCBfX2Z1bmNfXywKIAkJCUNJRlNfSShpbm9kZSktPmZzY2FjaGUsIHBhZ2UsIGlub2RlKTsKIAlyZXQgPSBmc2NhY2hlX3dyaXRlX3BhZ2UoQ0lGU19JKGlub2RlKS0+ZnNjYWNoZSwgcGFnZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJldCAhPSAwKQpAQCAtMjMwLDcgKzIyNyw3IEBACiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKmNpZnNpID0gQ0lGU19JKGlub2RlKTsKIAlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IGNpZnNpLT5mc2NhY2hlOwogCi0JY0ZZSSgxLCAiQ0lGUzogZnNjYWNoZSBpbnZhbGlkYXRlcGFnZSAoMHglcC8weCVwKSIsIHBhZ2UsIGNvb2tpZSk7CisJY0ZZSSgxLCAiJXM6ICgweCVwLzB4JXApIiwgX19mdW5jX18sIHBhZ2UsIGNvb2tpZSk7CiAJZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKTsKIAlmc2NhY2hlX3VuY2FjaGVfcGFnZShjb29raWUsIHBhZ2UpOwogfQpkaWZmIC0tZ2l0IGEvZnMvY29kYS9waW9jdGwuYyBiL2ZzL2NvZGEvcGlvY3RsLmMKaW5kZXggNmNiYjNhZi4uY2IxNDBlZiAxMDA2NDQKLS0tIGEvZnMvY29kYS9waW9jdGwuYworKysgYi9mcy9jb2RhL3Bpb2N0bC5jCkBAIC00Myw4ICs0Myw2IEBACiAvKiB0aGUgY29kYSBwaW9jdGwgaW5vZGUgb3BzICovCiBzdGF0aWMgaW50IGNvZGFfaW9jdGxfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgaW50IGZsYWdzKQogewotCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQotCQlyZXR1cm4gLUVDSElMRDsKIAlyZXR1cm4gKG1hc2sgJiBNQVlfRVhFQykgPyAtRUFDQ0VTIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZGNvb2tpZXMuYyBiL2ZzL2Rjb29raWVzLmMKaW5kZXggYTIxY2FiZC4uZGRhMGRjNyAxMDA2NDQKLS0tIGEvZnMvZGNvb2tpZXMuYworKysgYi9mcy9kY29va2llcy5jCkBAIC0xNzgsNiArMTc4LDggQEAKIAkvKiBGSVhNRTogKGRlbGV0ZWQpID8gKi8KIAlwYXRoID0gZF9wYXRoKCZkY3MtPnBhdGgsIGtidWYsIFBBR0VfU0laRSk7CiAKKwltdXRleF91bmxvY2soJmRjb29raWVfbXV0ZXgpOworCiAJaWYgKElTX0VSUihwYXRoKSkgewogCQllcnIgPSBQVFJfRVJSKHBhdGgpOwogCQlnb3RvIG91dF9mcmVlOwpAQCAtMTk0LDYgKzE5Niw3IEBACiAKIG91dF9mcmVlOgogCWtmcmVlKGtidWYpOworCXJldHVybiBlcnI7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZkY29va2llX211dGV4KTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGVhNWY3NDguLjYwNzVhMWUgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTEwOTMsNiArMTA5Myw3IEBACiAKIAlicHJtLT5tbSA9IE5VTEw7CQkvKiBXZSdyZSB1c2luZyBpdCBub3cgKi8KIAorCXNldF9mcyhVU0VSX0RTKTsKIAljdXJyZW50LT5mbGFncyAmPSB+KFBGX1JBTkRPTUlaRSB8IFBGX0tUSFJFQUQpOwogCWZsdXNoX3RocmVhZCgpOwogCWN1cnJlbnQtPnBlcnNvbmFsaXR5ICY9IH5icHJtLT5wZXJfY2xlYXI7CkBAIC0xMzU3LDEwICsxMzU4LDYgQEAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JLyoga2VybmVsIG1vZHVsZSBsb2FkZXIgZml4dXAgKi8KLQkvKiBzbyB3ZSBkb24ndCB0cnkgdG8gbG9hZCBydW4gbW9kcHJvYmUgaW4ga2VybmVsIHNwYWNlLiAqLwotCXNldF9mcyhVU0VSX0RTKTsKLQogCXJldHZhbCA9IGF1ZGl0X2Jwcm0oYnBybSk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKQEAgLTE5OTksNyArMTk5Niw3IEBACiAgKiBpcyBhIHNwZWNpYWwgdmFsdWUgdGhhdCB3ZSB1c2UgdG8gdHJhcCByZWN1cnNpdmUKICAqIGNvcmUgZHVtcHMKICAqLwotc3RhdGljIGludCB1bWhfcGlwZV9zZXR1cChzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvKQorc3RhdGljIGludCB1bWhfcGlwZV9zZXR1cChzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvLCBzdHJ1Y3QgY3JlZCAqbmV3KQogewogCXN0cnVjdCBmaWxlICpycCwgKndwOwogCXN0cnVjdCBmZHRhYmxlICpmZHQ7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCA3MjU3NzUyLi43MDE4ZTFkIDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCisrKyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCQlpZiAoYXR0ciAmIEFUVFJfU1lTKQogCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7CiAJCWVsc2UKLQkJCWlub2RlLT5pX2ZsYWdzICY9IFNfSU1NVVRBQkxFOworCQkJaW5vZGUtPmlfZmxhZ3MgJj0gflNfSU1NVVRBQkxFOwogCX0KIAogCWZhdF9zYXZlX2F0dHJzKGlub2RlLCBhdHRyKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCBjYzZlYzRiLi4zOGY4NGNkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC05MjEsNiArOTIxLDggQEAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19NQU5ETE9DSykKIAkJZ290byBlcnI7CiAKKwlzYi0+c19mbGFncyAmPSB+TVNfTk9TRUM7CisKIAlpZiAoIXBhcnNlX2Z1c2Vfb3B0KChjaGFyICopIGRhdGEsICZkLCBpc19iZGV2KSkKIAkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCAyNzkyYTc5Li4xYzEzMzZlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC02NjMsMTQgKzY2MywxOSBAQAogCQlkcm9wX3JlZiA9IDE7CiAJfQogCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX1BFTkRJTkdfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgorCWlmICh0ZXN0X2JpdChHTEZfUEVORElOR19ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpICYmCiAJICAgIGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCAmJgogCSAgICBnbC0+Z2xfZGVtb3RlX3N0YXRlICE9IExNX1NUX0VYQ0xVU0lWRSkgewogCQl1bnNpZ25lZCBsb25nIGhvbGR0aW1lLCBub3cgPSBqaWZmaWVzOworCiAJCWhvbGR0aW1lID0gZ2wtPmdsX3RjaGFuZ2UgKyBnbC0+Z2xfb3BzLT5nb19taW5faG9sZF90aW1lOwogCQlpZiAodGltZV9iZWZvcmUobm93LCBob2xkdGltZSkpCiAJCQlkZWxheSA9IGhvbGR0aW1lIC0gbm93OwotCQlzZXRfYml0KGRlbGF5ID8gR0xGX1BFTkRJTkdfREVNT1RFIDogR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncyk7CisKKwkJaWYgKCFkZWxheSkgeworCQkJY2xlYXJfYml0KEdMRl9QRU5ESU5HX0RFTU9URSwgJmdsLT5nbF9mbGFncyk7CisJCQlzZXRfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpOworCQl9CiAJfQogCXJ1bl9xdWV1ZShnbCwgMCk7CiAJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jCmluZGV4IDNkYjViYTQuLmIzY2M4NTggMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lub2RlLmMKKysrIGIvZnMvaXNvZnMvaW5vZGUuYwpAQCAtOTc0LDcgKzk3NCw3IEBACiBvdXRfbm9fcmVhZDoKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYnJlYWQgZmFpbGVkLCBkZXY9JXMsIGlzb19ibGtudW09JWQsIGJsb2NrPSVkXG4iLAogCQlfX2Z1bmNfXywgcy0+c19pZCwgaXNvX2Jsa251bSwgYmxvY2spOwotCWdvdG8gb3V0X2ZyZWVzYmk7CisJZ290byBvdXRfZnJlZWJoOwogb3V0X2JhZF96b25lX3NpemU6CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiSVNPRlM6IEJhZCBsb2dpY2FsIHpvbmUgc2l6ZSAlbGRcbiIsCiAJCXNiaS0+c19sb2dfem9uZV9zaXplKTsKQEAgLTk4OSw2ICs5ODksNyBAQAogCiBvdXRfZnJlZWJoOgogCWJyZWxzZShiaCk7CisJYnJlbHNlKHByaV9iaCk7CiBvdXRfZnJlZXNiaToKIAlrZnJlZShvcHQuaW9jaGFyc2V0KTsKIAlrZnJlZShzYmkpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19sb2dtZ3IuYyBiL2ZzL2pmcy9qZnNfbG9nbWdyLmMKaW5kZXggMjc4ZTNmYi4uNTgzNjM2ZiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19sb2dtZ3IuYworKysgYi9mcy9qZnMvamZzX2xvZ21nci5jCkBAIC0xMTIzLDcgKzExMjMsNyBAQAogCWJkZXYgPSBibGtkZXZfZ2V0X2J5X2RldihzYmktPmxvZ2RldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURXxGTU9ERV9FWENMLAogCQkJCSBsb2cpOwogCWlmIChJU19FUlIoYmRldikpIHsKLQkJcmMgPSAtUFRSX0VSUihiZGV2KTsKKwkJcmMgPSBQVFJfRVJSKGJkZXYpOwogCQlnb3RvIGZyZWU7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9sb2dmcy9kaXIuYyBiL2ZzL2xvZ2ZzL2Rpci5jCmluZGV4IDllZDg5ZDEuLjFhZmFlMjYgMTAwNjQ0Ci0tLSBhL2ZzL2xvZ2ZzL2Rpci5jCisrKyBiL2ZzL2xvZ2ZzL2Rpci5jCkBAIC01NTUsMTMgKzU1NSw2IEBACiAJcmV0dXJuIF9fbG9nZnNfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZSwgdGFyZ2V0LCBkZXN0bGVuKTsKIH0KIAotc3RhdGljIGludCBsb2dmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0JaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCi0JCXJldHVybiAtRUNISUxEOwotCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGZsYWdzLCBOVUxMKTsKLX0KLQogc3RhdGljIGludCBsb2dmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAogCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CkBAIC04MjAsNyArODEzLDYgQEAKIAkubWtub2QJCT0gbG9nZnNfbWtub2QsCiAJLnJlbmFtZQkJPSBsb2dmc19yZW5hbWUsCiAJLnJtZGlyCQk9IGxvZ2ZzX3JtZGlyLAotCS5wZXJtaXNzaW9uCT0gbG9nZnNfcGVybWlzc2lvbiwKIAkuc3ltbGluawk9IGxvZ2ZzX3N5bWxpbmssCiAJLnVubGluawkJPSBsb2dmc191bmxpbmssCiB9OwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggZTJlNGU4ZC4uMDIyM2M0MSAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0yMzgsNyArMjM4LDggQEAKIAogCS8qCiAJICogUmVhZC93cml0ZSBEQUNzIGFyZSBhbHdheXMgb3ZlcnJpZGFibGUuCi0JICogRXhlY3V0YWJsZSBEQUNzIGFyZSBvdmVycmlkYWJsZSBpZiBhdCBsZWFzdCBvbmUgZXhlYyBiaXQgaXMgc2V0LgorCSAqIEV4ZWN1dGFibGUgREFDcyBhcmUgb3ZlcnJpZGFibGUgZm9yIGFsbCBkaXJlY3RvcmllcyBhbmQKKwkgKiBmb3Igbm9uLWRpcmVjdG9yaWVzIHRoYXQgaGF2ZSBsZWFzdCBvbmUgZXhlYyBiaXQgc2V0LgogCSAqLwogCWlmICghKG1hc2sgJiBNQVlfRVhFQykgfHwgZXhlY3V0ZV9vayhpbm9kZSkpCiAJCWlmIChuc19jYXBhYmxlKGlub2RlX3VzZXJucyhpbm9kZSksIENBUF9EQUNfT1ZFUlJJREUpKQpAQCAtODEyLDYgKzgxMywxMSBAQAogCWlmICghbW50KSAvKiBtb3VudCBjb2xsaXNpb24gKi8KIAkJcmV0dXJuIDA7CiAKKwlpZiAoISpuZWVkX21udHB1dCkgeworCQkvKiBsb2NrX21vdW50KCkgbWF5IHJlbGVhc2UgcGF0aC0+bW50IG9uIGVycm9yICovCisJCW1udGdldChwYXRoLT5tbnQpOworCQkqbmVlZF9tbnRwdXQgPSB0cnVlOworCX0KIAllcnIgPSBmaW5pc2hfYXV0b21vdW50KG1udCwgcGF0aCk7CiAKIAlzd2l0Y2ggKGVycikgewpAQCAtODE5LDEyICs4MjUsOSBAQAogCQkvKiBTb21lb25lIGVsc2UgbWFkZSBhIG1vdW50IGhlcmUgd2hpbHN0IHdlIHdlcmUgYnVzeSAqLwogCQlyZXR1cm4gMDsKIAljYXNlIDA6Ci0JCWRwdXQocGF0aC0+ZGVudHJ5KTsKLQkJaWYgKCpuZWVkX21udHB1dCkKLQkJCW1udHB1dChwYXRoLT5tbnQpOworCQlwYXRoX3B1dChwYXRoKTsKIAkJcGF0aC0+bW50ID0gbW50OwogCQlwYXRoLT5kZW50cnkgPSBkZ2V0KG1udC0+bW50X3Jvb3QpOwotCQkqbmVlZF9tbnRwdXQgPSB0cnVlOwogCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZXJyOwpAQCAtODQ0LDkgKzg0NywxMCBAQAogICovCiBzdGF0aWMgaW50IGZvbGxvd19tYW5hZ2VkKHN0cnVjdCBwYXRoICpwYXRoLCB1bnNpZ25lZCBmbGFncykKIHsKKwlzdHJ1Y3QgdmZzbW91bnQgKm1udCA9IHBhdGgtPm1udDsgLyogaGVsZCBieSBjYWxsZXIsIG11c3QgYmUgbGVmdCBhbG9uZSAqLwogCXVuc2lnbmVkIG1hbmFnZWQ7CiAJYm9vbCBuZWVkX21udHB1dCA9IGZhbHNlOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAkvKiBHaXZlbiB0aGF0IHdlJ3JlIG5vdCBob2xkaW5nIGEgbG9jayBoZXJlLCB3ZSByZXRhaW4gdGhlIHZhbHVlIGluIGEKIAkgKiBsb2NhbCB2YXJpYWJsZSBmb3IgZWFjaCBkZW50cnkgYXMgd2UgbG9vayBhdCBpdCBzbyB0aGF0IHdlIGRvbid0IHNlZQpAQCAtODYxLDcgKzg2NSw3IEBACiAJCQlCVUdfT04oIXBhdGgtPmRlbnRyeS0+ZF9vcC0+ZF9tYW5hZ2UpOwogCQkJcmV0ID0gcGF0aC0+ZGVudHJ5LT5kX29wLT5kX21hbmFnZShwYXRoLT5kZW50cnksIGZhbHNlKTsKIAkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQgPT0gLUVJU0RJUiA/IDAgOiByZXQ7CisJCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBUcmFuc2l0IHRvIGEgbW91bnRlZCBmaWxlc3lzdGVtLiAqLwpAQCAtODg3LDE0ICs4OTEsMTkgQEAKIAkJaWYgKG1hbmFnZWQgJiBEQ0FDSEVfTkVFRF9BVVRPTU9VTlQpIHsKIAkJCXJldCA9IGZvbGxvd19hdXRvbW91bnQocGF0aCwgZmxhZ3MsICZuZWVkX21udHB1dCk7CiAJCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0ID09IC1FSVNESVIgPyAwIDogcmV0OworCQkJCWJyZWFrOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBXZSBkaWRuJ3QgY2hhbmdlIHRoZSBjdXJyZW50IHBhdGggcG9pbnQgKi8KIAkJYnJlYWs7CiAJfQotCXJldHVybiAwOworCisJaWYgKG5lZWRfbW50cHV0ICYmIHBhdGgtPm1udCA9PSBtbnQpCisJCW1udHB1dChwYXRoLT5tbnQpOworCWlmIChyZXQgPT0gLUVJU0RJUikKKwkJcmV0ID0gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgZm9sbG93X2Rvd25fb25lKHN0cnVjdCBwYXRoICpwYXRoKQpAQCAtMTAwMyw5ICsxMDEyLDYgQEAKICAqIEZvbGxvdyBkb3duIHRvIHRoZSBjb3ZlcmluZyBtb3VudCBjdXJyZW50bHkgdmlzaWJsZSB0byB1c2Vyc3BhY2UuICBBdCBlYWNoCiAgKiBwb2ludCwgdGhlIGZpbGVzeXN0ZW0gb3duaW5nIHRoYXQgZGVudHJ5IG1heSBiZSBxdWVyaWVkIGFzIHRvIHdoZXRoZXIgdGhlCiAgKiBjYWxsZXIgaXMgcGVybWl0dGVkIHRvIHByb2NlZWQgb3Igbm90LgotICoKLSAqIENhcmUgbXVzdCBiZSB0YWtlbiBhcyBuYW1lc3BhY2Vfc2VtIG1heSBiZSBoZWxkIChpbmRpY2F0ZWQgYnkgbW91bnRpbmdfaGVyZQotICogYmVpbmcgdHJ1ZSkuCiAgKi8KIGludCBmb2xsb3dfZG93bihzdHJ1Y3QgcGF0aCAqcGF0aCkKIHsKQEAgLTI2MjQsNiArMjYzMCwxMCBAQAogCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKIAkJZ290byBleGl0MjsKKwlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gZXhpdDM7CisJfQogCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQucGF0aC5tbnQpOwogCWlmIChlcnJvcikKIAkJZ290byBleGl0MzsKQEAgLTI3MTIsOCArMjcyMiw5IEBACiAJCWlmIChuZC5sYXN0Lm5hbWVbbmQubGFzdC5sZW5dKQogCQkJZ290byBzbGFzaGVzOwogCQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQkJaWYgKGlub2RlKQotCQkJaWhvbGQoaW5vZGUpOworCQlpZiAoIWlub2RlKQorCQkJZ290byBzbGFzaGVzOworCQlpaG9sZChpbm9kZSk7CiAJCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQucGF0aC5tbnQpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGV4aXQyOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9LY29uZmlnIGIvZnMvbmZzZC9LY29uZmlnCmluZGV4IDE4YjNlODkuLmZiYjJhNWUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvS2NvbmZpZworKysgYi9mcy9uZnNkL0tjb25maWcKQEAgLTgyLDYgKzgyLDcgQEAKIAlzZWxlY3QgTkZTRF9WMwogCXNlbGVjdCBGU19QT1NJWF9BQ0wKIAlzZWxlY3QgU1VOUlBDX0dTUworCXNlbGVjdCBDUllQVE8KIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgaW4geW91ciBzeXN0ZW0ncyBORlMgc2VydmVyIGZvcgogCSAgdmVyc2lvbiA0IG9mIHRoZSBORlMgcHJvdG9jb2wgKFJGQyAzNTMwKS4KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzY3RsLmMgYi9mcy9uZnNkL25mc2N0bC5jCmluZGV4IDFmNWVhZTQuLjJiMTQ0OWQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzY3RsLmMKKysrIGIvZnMvbmZzZC9uZnNjdGwuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2xvY2tkLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZ3NzX2FwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3Nfa3JiNV9lbmN0eXBlcy5oPgogCiAjaW5jbHVkZSAiaWRtYXAuaCIKICNpbmNsdWRlICJuZnNkLmgiCkBAIC0xODksMTggKzE5MCwxMCBAQAogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCi0jaWZkZWYgQ09ORklHX1NVTlJQQ19HU1MKKyNpZiBkZWZpbmVkKENPTkZJR19TVU5SUENfR1NTKSB8fCBkZWZpbmVkKENPTkZJR19TVU5SUENfR1NTX01PRFVMRSkKIHN0YXRpYyBpbnQgc3VwcG9ydGVkX2VuY3R5cGVzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCXN0cnVjdCBnc3NfYXBpX21lY2ggKms1bWVjaDsKLQotCWs1bWVjaCA9IGdzc19tZWNoX2dldF9ieV9uYW1lKCJrcmI1Iik7Ci0JaWYgKGs1bWVjaCA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQlpZiAoazVtZWNoLT5nbV91cGNhbGxfZW5jdHlwZXMgIT0gTlVMTCkKLQkJc2VxX3ByaW50ZihtLCBrNW1lY2gtPmdtX3VwY2FsbF9lbmN0eXBlcyk7Ci0JZ3NzX21lY2hfcHV0KGs1bWVjaCk7Ci1vdXQ6CisJc2VxX3ByaW50ZihtLCBLUkI1X1NVUFBPUlRFRF9FTkNUWVBFUyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNSw3ICsyMDgsNyBAQAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwotI2VuZGlmIC8qIENPTkZJR19TVU5SUENfR1NTICovCisjZW5kaWYgLyogQ09ORklHX1NVTlJQQ19HU1Mgb3IgQ09ORklHX1NVTlJQQ19HU1NfTU9EVUxFICovCiAKIGV4dGVybiBpbnQgbmZzZF9wb29sX3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIGludCBuZnNkX3Bvb2xfc3RhdHNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CkBAIC0xNDI3LDkgKzE0MjAsOSBAQAogCQlbTkZTRF9WZXJzaW9uc10gPSB7InZlcnNpb25zIiwgJnRyYW5zYWN0aW9uX29wcywgU19JV1VTUnxTX0lSVVNSfSwKIAkJW05GU0RfUG9ydHNdID0geyJwb3J0bGlzdCIsICZ0cmFuc2FjdGlvbl9vcHMsIFNfSVdVU1J8U19JUlVHT30sCiAJCVtORlNEX01heEJsa1NpemVdID0geyJtYXhfYmxvY2tfc2l6ZSIsICZ0cmFuc2FjdGlvbl9vcHMsIFNfSVdVU1J8U19JUlVHT30sCi0jaWZkZWYgQ09ORklHX1NVTlJQQ19HU1MKKyNpZiBkZWZpbmVkKENPTkZJR19TVU5SUENfR1NTKSB8fCBkZWZpbmVkKENPTkZJR19TVU5SUENfR1NTX01PRFVMRSkKIAkJW05GU0RfU3VwcG9ydGVkRW5jdHlwZXNdID0geyJzdXBwb3J0ZWRfa3JiNV9lbmN0eXBlcyIsICZzdXBwb3J0ZWRfZW5jdHlwZXNfb3BzLCBTX0lSVUdPfSwKLSNlbmRpZiAvKiBDT05GSUdfU1VOUlBDX0dTUyAqLworI2VuZGlmIC8qIENPTkZJR19TVU5SUENfR1NTIG9yIENPTkZJR19TVU5SUENfR1NTX01PRFVMRSAqLwogI2lmZGVmIENPTkZJR19ORlNEX1Y0CiAJCVtORlNEX0xlYXNldGltZV0gPSB7Im5mc3Y0bGVhc2V0aW1lIiwgJnRyYW5zYWN0aW9uX29wcywgU19JV1VTUnxTX0lSVVNSfSwKIAkJW05GU0RfR3JhY2V0aW1lXSA9IHsibmZzdjRncmFjZXRpbWUiLCAmdHJhbnNhY3Rpb25fb3BzLCBTX0lXVVNSfFNfSVJVU1J9LApkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggZDU3MTgyNy4uZmQwYWNjYSAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYworKysgYi9mcy9uZnNkL3Zmcy5jCkBAIC02OTYsNyArNjk2LDE1IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX05GU0RfVjMgKi8KIAorc3RhdGljIGludCBuZnNkX29wZW5fYnJlYWtfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGFjY2VzcykKK3sKKwl1bnNpZ25lZCBpbnQgbW9kZTsKIAorCWlmIChhY2Nlc3MgJiBORlNEX01BWV9OT1RfQlJFQUtfTEVBU0UpCisJCXJldHVybiAwOworCW1vZGUgPSAoYWNjZXNzICYgTkZTRF9NQVlfV1JJVEUpID8gT19XUk9OTFkgOiBPX1JET05MWTsKKwlyZXR1cm4gYnJlYWtfbGVhc2UoaW5vZGUsIG1vZGUgfCBPX05PTkJMT0NLKTsKK30KIAogLyoKICAqIE9wZW4gYW4gZXhpc3RpbmcgZmlsZSBvciBkaXJlY3RvcnkuCkBAIC03NDQsMTIgKzc1Miw3IEBACiAJaWYgKCFpbm9kZS0+aV9mb3ApCiAJCWdvdG8gb3V0OwogCi0JLyoKLQkgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBsZWFzZXMgb24gdGhpcyBmaWxlLgotCSAqIFRoaXMgbWF5IGJsb2NrIHdoaWxlIGxlYXNlcyBhcmUgYnJva2VuLgotCSAqLwotCWlmICghKGFjY2VzcyAmIE5GU0RfTUFZX05PVF9CUkVBS19MRUFTRSkpCi0JCWhvc3RfZXJyID0gYnJlYWtfbGVhc2UoaW5vZGUsIE9fTk9OQkxPQ0sgfCAoKGFjY2VzcyAmIE5GU0RfTUFZX1dSSVRFKSA/IE9fV1JPTkxZIDogMCkpOworCWhvc3RfZXJyID0gbmZzZF9vcGVuX2JyZWFrX2xlYXNlKGlub2RlLCBhY2Nlc3MpOwogCWlmIChob3N0X2VycikgLyogTk9NRU0gb3IgV09VTERCTE9DSyAqLwogCQlnb3RvIG91dF9uZnNlcnI7CiAKQEAgLTE2NjAsOCArMTY2MywxMCBAQAogCWlmICghZG9sZC0+ZF9pbm9kZSkKIAkJZ290byBvdXRfZHJvcF93cml0ZTsKIAlob3N0X2VyciA9IG5mc2RfYnJlYWtfbGVhc2UoZG9sZC0+ZF9pbm9kZSk7Ci0JaWYgKGhvc3RfZXJyKQorCWlmIChob3N0X2VycikgeworCQllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CiAJCWdvdG8gb3V0X2Ryb3Bfd3JpdGU7CisJfQogCWhvc3RfZXJyID0gdmZzX2xpbmsoZG9sZCwgZGlycCwgZG5ldyk7CiAJaWYgKCFob3N0X2VycikgewogCQllcnIgPSBuZnNlcnJubyhjb21taXRfbWV0YWRhdGEoZmZocCkpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2J0cmVlLmMgYi9mcy9uaWxmczIvYnRyZWUuYwppbmRleCA3ZWFmZTQ2Li5iMmUzZmYzIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRyZWUuYworKysgYi9mcy9uaWxmczIvYnRyZWUuYwpAQCAtMTM0Niw2ICsxMzQ2LDExIEBACiAJcGF0aFtsZXZlbF0uYnBfYmggPSBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ub3Aoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAorCQkJICAgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAorCQkJICAgIGludCBsZXZlbCwgX191NjQgKmtleXAsIF9fdTY0ICpwdHJwKQoreworfQogCiBzdGF0aWMgaW50IG5pbGZzX2J0cmVlX3ByZXBhcmVfZGVsZXRlKHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKQEAgLTEzNTYsMjAgKzEzNjEsMTkgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCAqcGFyZW50LCAqc2liOwogCV9fdTY0IHNpYnB0cjsKLQlpbnQgcGluZGV4LCBsZXZlbCwgbmNtaW4sIG5jbWF4LCBuY2JsaywgcmV0OworCWludCBwaW5kZXgsIGRpbmRleCwgbGV2ZWwsIG5jbWluLCBuY21heCwgbmNibGssIHJldDsKIAogCXJldCA9IDA7CiAJc3RhdHMtPmJzX25ibG9ja3MgPSAwOwogCW5jbWluID0gTklMRlNfQlRSRUVfTk9ERV9OQ0hJTERSRU5fTUlOKG5pbGZzX2J0cmVlX25vZGVfc2l6ZShidHJlZSkpOwogCW5jYmxrID0gbmlsZnNfYnRyZWVfbmNoaWxkcmVuX3Blcl9ibG9jayhidHJlZSk7CiAKLQlmb3IgKGxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU47CisJZm9yIChsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOLCBkaW5kZXggPSBwYXRoW2xldmVsXS5icF9pbmRleDsKIAkgICAgIGxldmVsIDwgbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDE7CiAJICAgICBsZXZlbCsrKSB7CiAJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAkJcGF0aFtsZXZlbF0uYnBfb2xkcmVxLmJwcl9wdHIgPQotCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIHBhdGhbbGV2ZWxdLmJwX2luZGV4LAotCQkJCQkJIG5jYmxrKTsKKwkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihub2RlLCBkaW5kZXgsIG5jYmxrKTsKIAkJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2VuZF9wdHIoYnRyZWUsCiAJCQkJCQkgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAkJaWYgKHJldCA8IDApCkBAIC0xMzgzLDYgKzEzODcsNyBAQAogCiAJCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsICZuY21heCk7CiAJCXBpbmRleCA9IHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleDsKKwkJZGluZGV4ID0gcGluZGV4OwogCiAJCWlmIChwaW5kZXggPiAwKSB7CiAJCQkvKiBsZWZ0IHNpYmxpbmcgKi8KQEAgLTE0MjEsNiArMTQyNiwxNCBAQAogCQkJCXBhdGhbbGV2ZWxdLmJwX3NpYl9iaCA9IGJoOwogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfY29uY2F0X3JpZ2h0OwogCQkJCXN0YXRzLT5ic19uYmxvY2tzKys7CisJCQkJLyoKKwkJCQkgKiBXaGVuIG1lcmdpbmcgcmlnaHQgc2libGluZyBub2RlCisJCQkJICogaW50byB0aGUgY3VycmVudCBub2RlLCBwb2ludGVyIHRvCisJCQkJICogdGhlIHJpZ2h0IHNpYmxpbmcgbm9kZSBtdXN0IGJlCisJCQkJICogdGVybWluYXRlZCBpbnN0ZWFkLiAgVGhlIGFkanVzdG1lbnQKKwkJCQkgKiBiZWxvdyBpcyByZXF1aXJlZCBmb3IgdGhhdC4KKwkJCQkgKi8KKwkJCQlkaW5kZXggPSBwaW5kZXggKyAxOwogCQkJCS8qIGNvbnRpbnVlOyAqLwogCQkJfQogCQl9IGVsc2UgewpAQCAtMTQzMSwyOSArMTQ0NCwzMSBAQAogCQkJICAgIE5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCkgewogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfc2hyaW5rOwogCQkJCXN0YXRzLT5ic19uYmxvY2tzICs9IDI7CisJCQkJbGV2ZWwrKzsKKwkJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX25vcDsKKwkJCQlnb3RvIHNocmlua19yb290X2NoaWxkOwogCQkJfSBlbHNlIHsKIAkJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2RvX2RlbGV0ZTsKIAkJCQlzdGF0cy0+YnNfbmJsb2NrcysrOworCQkJCWdvdG8gb3V0OwogCQkJfQotCi0JCQlnb3RvIG91dDsKLQogCQl9CiAJfQogCisJLyogY2hpbGQgb2YgdGhlIHJvb3Qgbm9kZSBpcyBkZWxldGVkICovCisJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9kb19kZWxldGU7CisJc3RhdHMtPmJzX25ibG9ja3MrKzsKKworc2hyaW5rX3Jvb3RfY2hpbGQ6CiAJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKIAlwYXRoW2xldmVsXS5icF9vbGRyZXEuYnByX3B0ciA9Ci0JCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihub2RlLCBwYXRoW2xldmVsXS5icF9pbmRleCwKKwkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIGRpbmRleCwKIAkJCQkJIE5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCk7CiAKIAlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfZW5kX3B0cihidHJlZSwgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfb3V0X2NoaWxkX25vZGU7CiAKLQkvKiBjaGlsZCBvZiB0aGUgcm9vdCBub2RlIGlzIGRlbGV0ZWQgKi8KLQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2RvX2RlbGV0ZTsKLQlzdGF0cy0+YnNfbmJsb2NrcysrOwotCiAJLyogc3VjY2VzcyAqLwogIG91dDoKIAkqbGV2ZWxwID0gbGV2ZWw7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW5vZGUuYyBiL2ZzL25pbGZzMi9pbm9kZS5jCmluZGV4IGI5NTQ4NzguLmI5YjQ1ZmMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pbm9kZS5jCisrKyBiL2ZzL25pbGZzMi9pbm9kZS5jCkBAIC04MDEsMTIgKzgwMSw3IEBACiAKIGludCBuaWxmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5pbGZzX3Jvb3QgKnJvb3Q7Ci0KLQlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkKLQkJcmV0dXJuIC1FQ0hJTEQ7Ci0KLQlyb290ID0gTklMRlNfSShpbm9kZSktPmlfcm9vdDsKKwlzdHJ1Y3QgbmlsZnNfcm9vdCAqcm9vdCA9IE5JTEZTX0koaW5vZGUpLT5pX3Jvb3Q7CiAJaWYgKChtYXNrICYgTUFZX1dSSVRFKSAmJiByb290ICYmCiAJICAgIHJvb3QtPmNubyAhPSBOSUxGU19DUFRSRUVfQ1VSUkVOVF9DTk8pCiAJCXJldHVybiAtRVJPRlM7IC8qIHNuYXBzaG90IGlzIG5vdCB3cml0YWJsZSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuYyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKaW5kZXggMTQxNjQ2ZS4uYmIyNGFiNiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuYworKysgYi9mcy9uaWxmczIvc2VnbWVudC5jCkBAIC0yNTczLDcgKzI1NzMsNyBAQAogCXNjaS0+c2Nfd2F0ZXJtYXJrID0gTklMRlNfU0NfREVGQVVMVF9XQVRFUk1BUks7CiAKIAlpZiAobmlsZnMtPm5zX2ludGVydmFsKQotCQlzY2ktPnNjX2ludGVydmFsID0gbmlsZnMtPm5zX2ludGVydmFsOworCQlzY2ktPnNjX2ludGVydmFsID0gSFogKiBuaWxmcy0+bnNfaW50ZXJ2YWw7CiAJaWYgKG5pbGZzLT5uc193YXRlcm1hcmspCiAJCXNjaS0+c2Nfd2F0ZXJtYXJrID0gbmlsZnMtPm5zX3dhdGVybWFyazsKIAlyZXR1cm4gc2NpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggY2RiYWY1ZS4uNTZmNjEwMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0xMDcyLDcgKzEwNzIsNyBAQAogCiAJc2ItPnNfbWFnaWMgPSBPQ0ZTMl9TVVBFUl9NQUdJQzsKIAotCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfk1TX1BPU0lYQUNMKSB8CisJc2ItPnNfZmxhZ3MgPSAoc2ItPnNfZmxhZ3MgJiB+KE1TX1BPU0lYQUNMIHwgTVNfTk9TRUMpKSB8CiAJCSgob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgPyBNU19QT1NJWEFDTCA6IDApOwogCiAJLyogSGFyZCByZWFkb25seSBtb2RlIG9ubHkgaWY6IGJkZXZfcmVhZF9vbmx5LCBNU19SRE9OTFksCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDE0ZGVmOTkuLjhhODQyMTAgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0yMTY5LDExICsyMTY5LDcgQEAKICAqLwogc3RhdGljIGludCBwcm9jX2ZkX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlpbnQgcnY7Ci0KLQlpZiAoZmxhZ3MgJiBJUEVSTV9GTEFHX1JDVSkKLQkJcmV0dXJuIC1FQ0hJTEQ7Ci0JcnYgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGZsYWdzLCBOVUxMKTsKKwlpbnQgcnYgPSBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIGZsYWdzLCBOVUxMKTsKIAlpZiAocnYgPT0gMCkKIAkJcmV0dXJuIDA7CiAJaWYgKHRhc2tfcGlkKGN1cnJlbnQpID09IHByb2NfcGlkKGlub2RlKSkKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvbmFtZXNwYWNlcy5jIGIvZnMvcHJvYy9uYW1lc3BhY2VzLmMKaW5kZXggNzgxZGVjNS4uYmUxNzdmNyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9uYW1lc3BhY2VzLmMKKysrIGIvZnMvcHJvYy9uYW1lc3BhY2VzLmMKQEAgLTM4LDE4ICszOCwyMSBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHByb2NfaW5vZGUgKmVpOwogCXN0cnVjdCBkZW50cnkgKmVycm9yID0gRVJSX1BUUigtRU5PRU5UKTsKKwl2b2lkICpuczsKIAogCWlub2RlID0gcHJvY19waWRfbWFrZV9pbm9kZShkaXItPmlfc2IsIHRhc2spOwogCWlmICghaW5vZGUpCiAJCWdvdG8gb3V0OwogCisJbnMgPSBuc19vcHMtPmdldCh0YXNrKTsKKwlpZiAoIW5zKQorCQlnb3RvIG91dF9pcHV0OworCiAJZWkgPSBQUk9DX0koaW5vZGUpOwogCWlub2RlLT5pX21vZGUgPSBTX0lGUkVHfFNfSVJVU1I7CiAJaW5vZGUtPmlfZm9wICA9ICZuc19maWxlX29wZXJhdGlvbnM7CiAJZWktPm5zX29wcyAgICA9IG5zX29wczsKLQllaS0+bnMJICAgICAgPSBuc19vcHMtPmdldCh0YXNrKTsKLQlpZiAoIWVpLT5ucykKLQkJZ290byBvdXRfaXB1dDsKKwllaS0+bnMJICAgICAgPSBuczsKIAogCWRlbnRyeS0+ZF9vcCA9ICZwaWRfZGVudHJ5X29wZXJhdGlvbnM7CiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMgYi9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMKaW5kZXggZjUwMTMzYy4uZDE2N2RlMyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX3N5c2N0bC5jCisrKyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwuYwpAQCAtMzA0LDkgKzMwNCw2IEBACiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAJaW50IGVycm9yOwogCi0JaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCi0JCXJldHVybiAtRUNISUxEOwotCiAJLyogRXhlY3V0YWJsZSBmaWxlcyBhcmUgbm90IGFsbG93ZWQgdW5kZXIgL3Byb2Mvc3lzLyAqLwogCWlmICgobWFzayAmIE1BWV9FWEVDKSAmJiBTX0lTUkVHKGlub2RlLT5pX21vZGUpKQogCQlyZXR1cm4gLUVBQ0NFUzsKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mvcm9vdC5jIGIvZnMvcHJvYy9yb290LmMKaW5kZXggYTkwMDBlOS4uZDZjM2I0MSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9yb290LmMKKysrIGIvZnMvcHJvYy9yb290LmMKQEAgLTI4LDExICsyOCwxMiBAQAogCiBzdGF0aWMgaW50IHByb2Nfc2V0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOwotCi0JbnMgPSAoc3RydWN0IHBpZF9uYW1lc3BhY2UgKilkYXRhOwotCXNiLT5zX2ZzX2luZm8gPSBnZXRfcGlkX25zKG5zKTsKLQlyZXR1cm4gc2V0X2Fub25fc3VwZXIoc2IsIE5VTEwpOworCWludCBlcnIgPSBzZXRfYW5vbl9zdXBlcihzYiwgTlVMTCk7CisJaWYgKCFlcnIpIHsKKwkJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zID0gKHN0cnVjdCBwaWRfbmFtZXNwYWNlICopZGF0YTsKKwkJc2ItPnNfZnNfaW5mbyA9IGdldF9waWRfbnMobnMpOworCX0KKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcHJvY19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGU4YTYyZjQuLmQ3ODA4OTYgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtOTU0LDggKzk1NCw2IEBACiAKIGludCByZWlzZXJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JaWYgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpCi0JCXJldHVybiAtRUNISUxEOwogCS8qCiAJICogV2UgZG9uJ3QgZG8gcGVybWlzc2lvbiBjaGVja3Mgb24gdGhlIGludGVybmFsIG9iamVjdHMuCiAJICogUGVybWlzc2lvbnMgYXJlIGRldGVybWluZWQgYnkgdGhlICJvd25pbmciIG9iamVjdC4KZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IGM3NTU5MzkuLmFiM2Q2NzIgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAJfSBlbHNlIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCi0JCXMtPnNfZmxhZ3MgPSBmbGFnczsKKwkJcy0+c19mbGFncyA9IGZsYWdzIHwgTVNfTk9TRUM7CiAJCXMtPnNfbW9kZSA9IG1vZGU7CiAJCXN0cmxjcHkocy0+c19pZCwgYmRldm5hbWUoYmRldiwgYiksIHNpemVvZihzLT5zX2lkKSk7CiAJCXNiX3NldF9ibG9ja3NpemUocywgYmxvY2tfc2l6ZShiZGV2KSk7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9tb3VudC5jIGIvZnMvc3lzZnMvbW91bnQuYwppbmRleCAyNjY4OTU3Li5lMzRmMGQ5IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9tb3VudC5jCisrKyBiL2ZzL3N5c2ZzL21vdW50LmMKQEAgLTk1LDYgKzk1LDE0IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgdm9pZCBmcmVlX3N5c2ZzX3N1cGVyX2luZm8oc3RydWN0IHN5c2ZzX3N1cGVyX2luZm8gKmluZm8pCit7CisJaW50IHR5cGU7CisJZm9yICh0eXBlID0gS09CSl9OU19UWVBFX05PTkU7IHR5cGUgPCBLT0JKX05TX1RZUEVTOyB0eXBlKyspCisJCWtvYmpfbnNfZHJvcCh0eXBlLCBpbmZvLT5uc1t0eXBlXSk7CisJa2ZyZWUoaW5mbyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzeXNmc19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQogewpAQCAtMTA4LDExICsxMTYsMTEgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlmb3IgKHR5cGUgPSBLT0JKX05TX1RZUEVfTk9ORTsgdHlwZSA8IEtPQkpfTlNfVFlQRVM7IHR5cGUrKykKLQkJaW5mby0+bnNbdHlwZV0gPSBrb2JqX25zX2N1cnJlbnQodHlwZSk7CisJCWluZm8tPm5zW3R5cGVdID0ga29ial9uc19ncmFiX2N1cnJlbnQodHlwZSk7CiAKIAlzYiA9IHNnZXQoZnNfdHlwZSwgc3lzZnNfdGVzdF9zdXBlciwgc3lzZnNfc2V0X3N1cGVyLCBpbmZvKTsKIAlpZiAoSVNfRVJSKHNiKSB8fCBzYi0+c19mc19pbmZvICE9IGluZm8pCi0JCWtmcmVlKGluZm8pOworCQlmcmVlX3N5c2ZzX3N1cGVyX2luZm8oaW5mbyk7CiAJaWYgKElTX0VSUihzYikpCiAJCXJldHVybiBFUlJfQ0FTVChzYik7CiAJaWYgKCFzYi0+c19yb290KSB7CkBAIC0xMzEsMTIgKzEzOSwxMSBAQAogc3RhdGljIHZvaWQgc3lzZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBzeXNmc19zdXBlcl9pbmZvICppbmZvID0gc3lzZnNfaW5mbyhzYik7Ci0KIAkvKiBSZW1vdmUgdGhlIHN1cGVyYmxvY2sgZnJvbSBmc19zdXBlcnMvc19pbnN0YW5jZXMKIAkgKiBzbyB3ZSBjYW4ndCBmaW5kIGl0LCBiZWZvcmUgZnJlZWluZyBzeXNmc19zdXBlcl9pbmZvLgogCSAqLwogCWtpbGxfYW5vbl9zdXBlcihzYik7Ci0Ja2ZyZWUoaW5mbyk7CisJZnJlZV9zeXNmc19zdXBlcl9pbmZvKGluZm8pOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgc3lzZnNfZnNfdHlwZSA9IHsKQEAgLTE0NSwyOCArMTUyLDYgQEAKIAkua2lsbF9zYgk9IHN5c2ZzX2tpbGxfc2IsCiB9OwogCi12b2lkIHN5c2ZzX2V4aXRfbnMoZW51bSBrb2JqX25zX3R5cGUgdHlwZSwgY29uc3Qgdm9pZCAqbnMpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKLQotCW11dGV4X2xvY2soJnN5c2ZzX211dGV4KTsKLQlzcGluX2xvY2soJnNiX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2IsICZzeXNmc19mc190eXBlLmZzX3N1cGVycywgc19pbnN0YW5jZXMpIHsKLQkJc3RydWN0IHN5c2ZzX3N1cGVyX2luZm8gKmluZm8gPSBzeXNmc19pbmZvKHNiKTsKLQkJLyoKLQkJICogSWYgd2Ugc2VlIGEgc3VwZXJibG9jayBvbiB0aGUgZnNfc3VwZXJzL3NfaW5zdGFuY2VzCi0JCSAqIGxpc3QgdGhlIHVubW91bnQgaGFzIG5vdCBjb21wbGV0ZWQgYW5kIHNiLT5zX2ZzX2luZm8KLQkJICogcG9pbnRzIHRvIGEgdmFsaWQgc3RydWN0IHN5c2ZzX3N1cGVyX2luZm8uCi0JCSAqLwotCQkvKiBJZ25vcmUgc3VwZXJibG9ja3Mgd2l0aCB0aGUgd3JvbmcgbnMgKi8KLQkJaWYgKGluZm8tPm5zW3R5cGVdICE9IG5zKQotCQkJY29udGludWU7Ci0JCWluZm8tPm5zW3R5cGVdID0gTlVMTDsKLQl9Ci0Jc3Bpbl91bmxvY2soJnNiX2xvY2spOwotCW11dGV4X3VubG9jaygmc3lzZnNfbXV0ZXgpOwotfQotCiBpbnQgX19pbml0IHN5c2ZzX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IDNkMjhhZjMuLjJlZDI0MDQgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5c2ZzLmgKKysrIGIvZnMvc3lzZnMvc3lzZnMuaApAQCAtMTM2LDcgKzEzNiw3IEBACiAgKiBpbnN0YW5jZSkuCiAgKi8KIHN0cnVjdCBzeXNmc19zdXBlcl9pbmZvIHsKLQljb25zdCB2b2lkICpuc1tLT0JKX05TX1RZUEVTXTsKKwl2b2lkICpuc1tLT0JKX05TX1RZUEVTXTsKIH07CiAjZGVmaW5lIHN5c2ZzX2luZm8oU0IpICgoc3RydWN0IHN5c2ZzX3N1cGVyX2luZm8gKikoU0ItPnNfZnNfaW5mbykpCiBleHRlcm4gc3RydWN0IHN5c2ZzX2RpcmVudCBzeXNmc19yb290OwpkaWZmIC0tZ2l0IGEvZnMvdGltZXJmZC5jIGIvZnMvdGltZXJmZC5jCmluZGV4IGY2N2FjYmQuLmRmZmViMzcgMTAwNjQ0Ci0tLSBhL2ZzL3RpbWVyZmQuYworKysgYi9mcy90aW1lcmZkLmMKQEAgLTYxLDcgKzYxLDkgQEAKIAogLyoKICAqIENhbGxlZCB3aGVuIHRoZSBjbG9jayB3YXMgc2V0IHRvIGNhbmNlbCB0aGUgdGltZXJzIGluIHRoZSBjYW5jZWwKLSAqIGxpc3QuCisgKiBsaXN0LiBUaGlzIHdpbGwgd2FrZSB1cCBwcm9jZXNzZXMgd2FpdGluZyBvbiB0aGVzZSB0aW1lcnMuIFRoZQorICogd2FrZS11cCByZXF1aXJlcyBjdHgtPnRpY2tzIHRvIGJlIG5vbiB6ZXJvLCB0aGVyZWZvcmUgd2UgaW5jcmVtZW50CisgKiBpdCBiZWZvcmUgY2FsbGluZyB3YWtlX3VwX2xvY2tlZCgpLgogICovCiB2b2lkIHRpbWVyZmRfY2xvY2tfd2FzX3NldCh2b2lkKQogewpAQCAtNzYsNiArNzgsNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT53cWgubG9jaywgZmxhZ3MpOwogCQlpZiAoY3R4LT5tb2Zmcy50djY0ICE9IG1vZmZzLnR2NjQpIHsKIAkJCWN0eC0+bW9mZnMudHY2NCA9IEtUSU1FX01BWDsKKwkJCWN0eC0+dGlja3MrKzsKIAkJCXdha2VfdXBfbG9ja2VkKCZjdHgtPndxaCk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT53cWgubG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvc3VwZXIuYyBiL2ZzL3ViaWZzL3N1cGVyLmMKaW5kZXggYjVhZWI1YS4uNTI5YmUwNSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc3VwZXIuYworKysgYi9mcy91Ymlmcy9zdXBlci5jCkBAIC0xODQ4LDcgKzE4NDgsNiBAQAogCWJkaV9kZXN0cm95KCZjLT5iZGkpOwogCXViaV9jbG9zZV92b2x1bWUoYy0+dWJpKTsKIAltdXRleF91bmxvY2soJmMtPnVtb3VudF9tdXRleCk7Ci0Ja2ZyZWUoYyk7CiB9CiAKIHN0YXRpYyBpbnQgdWJpZnNfcmVtb3VudF9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQpAQCAtMTk3MSw2MSArMTk3MCw2NSBAQAogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCitzdGF0aWMgc3RydWN0IHViaWZzX2luZm8gKmFsbG9jX3ViaWZzX2luZm8oc3RydWN0IHViaV92b2x1bWVfZGVzYyAqdWJpKQoreworCXN0cnVjdCB1Ymlmc19pbmZvICpjOworCisJYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1Ymlmc19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGMpIHsKKwkJc3Bpbl9sb2NrX2luaXQoJmMtPmNudF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmMtPmNzX2xvY2spOworCQlzcGluX2xvY2tfaW5pdCgmYy0+YnVkc19sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmMtPnNwYWNlX2xvY2spOworCQlzcGluX2xvY2tfaW5pdCgmYy0+b3JwaGFuX2xvY2spOworCQlpbml0X3J3c2VtKCZjLT5jb21taXRfc2VtKTsKKwkJbXV0ZXhfaW5pdCgmYy0+bHBfbXV0ZXgpOworCQltdXRleF9pbml0KCZjLT50bmNfbXV0ZXgpOworCQltdXRleF9pbml0KCZjLT5sb2dfbXV0ZXgpOworCQltdXRleF9pbml0KCZjLT5tc3RfbXV0ZXgpOworCQltdXRleF9pbml0KCZjLT51bW91bnRfbXV0ZXgpOworCQltdXRleF9pbml0KCZjLT5idV9tdXRleCk7CisJCW11dGV4X2luaXQoJmMtPndyaXRlX3Jlc2VydmVfbXV0ZXgpOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjLT5jbXRfd3EpOworCQljLT5idWRzID0gUkJfUk9PVDsKKwkJYy0+b2xkX2lkeCA9IFJCX1JPT1Q7CisJCWMtPnNpemVfdHJlZSA9IFJCX1JPT1Q7CisJCWMtPm9ycGhfdHJlZSA9IFJCX1JPT1Q7CisJCUlOSVRfTElTVF9IRUFEKCZjLT5pbmZvc19saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmMtPmlkeF9nYyk7CisJCUlOSVRfTElTVF9IRUFEKCZjLT5yZXBsYXlfbGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZjLT5yZXBsYXlfYnVkcyk7CisJCUlOSVRfTElTVF9IRUFEKCZjLT51bmNhdF9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmMtPmVtcHR5X2xpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmYy0+ZnJlZWFibGVfbGlzdCk7CisJCUlOSVRfTElTVF9IRUFEKCZjLT5mcmRpX2lkeF9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmMtPnVuY2xlYW5fbGViX2xpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmYy0+b2xkX2J1ZHMpOworCQlJTklUX0xJU1RfSEVBRCgmYy0+b3JwaF9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmMtPm9ycGhfbmV3KTsKKwkJYy0+bm9fY2hrX2RhdGFfY3JjID0gMTsKKworCQljLT5oaWdoZXN0X2ludW0gPSBVQklGU19GSVJTVF9JTk87CisJCWMtPmxoZWFkX2xudW0gPSBjLT5sdGFpbF9sbnVtID0gVUJJRlNfTE9HX0xOVU07CisKKwkJdWJpX2dldF92b2x1bWVfaW5mbyh1YmksICZjLT52aSk7CisJCXViaV9nZXRfZGV2aWNlX2luZm8oYy0+dmkudWJpX251bSwgJmMtPmRpKTsKKwl9CisJcmV0dXJuIGM7Cit9CisKIHN0YXRpYyBpbnQgdWJpZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogewotCXN0cnVjdCB1Ymlfdm9sdW1lX2Rlc2MgKnViaSA9IHNiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IHViaWZzX2luZm8gKmM7CisJc3RydWN0IHViaWZzX2luZm8gKmMgPSBzYi0+c19mc19pbmZvOwogCXN0cnVjdCBpbm9kZSAqcm9vdDsKIAlpbnQgZXJyOwogCi0JYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1Ymlmc19pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNwaW5fbG9ja19pbml0KCZjLT5jbnRfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmMtPmNzX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjLT5idWRzX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjLT5zcGFjZV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYy0+b3JwaGFuX2xvY2spOwotCWluaXRfcndzZW0oJmMtPmNvbW1pdF9zZW0pOwotCW11dGV4X2luaXQoJmMtPmxwX211dGV4KTsKLQltdXRleF9pbml0KCZjLT50bmNfbXV0ZXgpOwotCW11dGV4X2luaXQoJmMtPmxvZ19tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmYy0+bXN0X211dGV4KTsKLQltdXRleF9pbml0KCZjLT51bW91bnRfbXV0ZXgpOwotCW11dGV4X2luaXQoJmMtPmJ1X211dGV4KTsKLQltdXRleF9pbml0KCZjLT53cml0ZV9yZXNlcnZlX211dGV4KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjLT5jbXRfd3EpOwotCWMtPmJ1ZHMgPSBSQl9ST09UOwotCWMtPm9sZF9pZHggPSBSQl9ST09UOwotCWMtPnNpemVfdHJlZSA9IFJCX1JPT1Q7Ci0JYy0+b3JwaF90cmVlID0gUkJfUk9PVDsKLQlJTklUX0xJU1RfSEVBRCgmYy0+aW5mb3NfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmMtPmlkeF9nYyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmMtPnJlcGxheV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmYy0+cmVwbGF5X2J1ZHMpOwotCUlOSVRfTElTVF9IRUFEKCZjLT51bmNhdF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmYy0+ZW1wdHlfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmMtPmZyZWVhYmxlX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZjLT5mcmRpX2lkeF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmYy0+dW5jbGVhbl9sZWJfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmMtPm9sZF9idWRzKTsKLQlJTklUX0xJU1RfSEVBRCgmYy0+b3JwaF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmYy0+b3JwaF9uZXcpOwotCWMtPm5vX2Noa19kYXRhX2NyYyA9IDE7Ci0KIAljLT52ZnNfc2IgPSBzYjsKLQljLT5oaWdoZXN0X2ludW0gPSBVQklGU19GSVJTVF9JTk87Ci0JYy0+bGhlYWRfbG51bSA9IGMtPmx0YWlsX2xudW0gPSBVQklGU19MT0dfTE5VTTsKLQotCXViaV9nZXRfdm9sdW1lX2luZm8odWJpLCAmYy0+dmkpOwotCXViaV9nZXRfZGV2aWNlX2luZm8oYy0+dmkudWJpX251bSwgJmMtPmRpKTsKLQogCS8qIFJlLW9wZW4gdGhlIFVCSSBkZXZpY2UgaW4gcmVhZC13cml0ZSBtb2RlICovCiAJYy0+dWJpID0gdWJpX29wZW5fdm9sdW1lKGMtPnZpLnViaV9udW0sIGMtPnZpLnZvbF9pZCwgVUJJX1JFQURXUklURSk7CiAJaWYgKElTX0VSUihjLT51YmkpKSB7CiAJCWVyciA9IFBUUl9FUlIoYy0+dWJpKTsKLQkJZ290byBvdXRfZnJlZTsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyoKQEAgLTIwOTEsMjQgKzIwOTQsMjkgQEAKIAliZGlfZGVzdHJveSgmYy0+YmRpKTsKIG91dF9jbG9zZToKIAl1YmlfY2xvc2Vfdm9sdW1lKGMtPnViaSk7Ci1vdXRfZnJlZToKLQlrZnJlZShjKTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHNiX3Rlc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSkKIHsKLQlkZXZfdCAqZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgdWJpZnNfaW5mbyAqYzEgPSBkYXRhOwogCXN0cnVjdCB1Ymlmc19pbmZvICpjID0gc2ItPnNfZnNfaW5mbzsKIAotCXJldHVybiBjLT52aS5jZGV2ID09ICpkZXY7CisJcmV0dXJuIGMtPnZpLmNkZXYgPT0gYzEtPnZpLmNkZXY7Cit9CisKK3N0YXRpYyBpbnQgc2Jfc2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCit7CisJc2ItPnNfZnNfaW5mbyA9IGRhdGE7CisJcmV0dXJuIHNldF9hbm9uX3N1cGVyKHNiLCBOVUxMKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKnViaWZzX21vdW50KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCiAJCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCB1Ymlfdm9sdW1lX2Rlc2MgKnViaTsKLQlzdHJ1Y3QgdWJpX3ZvbHVtZV9pbmZvIHZpOworCXN0cnVjdCB1Ymlmc19pbmZvICpjOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJaW50IGVycjsKIApAQCAtMjEyNSwxOSArMjEzMywyNSBAQAogCQkJbmFtZSwgKGludClQVFJfRVJSKHViaSkpOwogCQlyZXR1cm4gRVJSX0NBU1QodWJpKTsKIAl9Ci0JdWJpX2dldF92b2x1bWVfaW5mbyh1YmksICZ2aSk7CiAKLQlkYmdfZ2VuKCJvcGVuZWQgdWJpJWRfJWQiLCB2aS51YmlfbnVtLCB2aS52b2xfaWQpOworCWMgPSBhbGxvY191Ymlmc19pbmZvKHViaSk7CisJaWYgKCFjKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KIAotCXNiID0gc2dldChmc190eXBlLCAmc2JfdGVzdCwgJnNldF9hbm9uX3N1cGVyLCAmdmkuY2Rldik7CisJZGJnX2dlbigib3BlbmVkIHViaSVkXyVkIiwgYy0+dmkudWJpX251bSwgYy0+dmkudm9sX2lkKTsKKworCXNiID0gc2dldChmc190eXBlLCBzYl90ZXN0LCBzYl9zZXQsIGMpOwogCWlmIChJU19FUlIoc2IpKSB7CiAJCWVyciA9IFBUUl9FUlIoc2IpOworCQlrZnJlZShjKTsKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCiAJaWYgKHNiLT5zX3Jvb3QpIHsKIAkJc3RydWN0IHViaWZzX2luZm8gKmMxID0gc2ItPnNfZnNfaW5mbzsKLQorCQlrZnJlZShjKTsKIAkJLyogQSBuZXcgbW91bnQgcG9pbnQgZm9yIGFscmVhZHkgbW91bnRlZCBVQklGUyAqLwogCQlkYmdfZ2VuKCJ0aGlzIHViaSB2b2x1bWUgaXMgYWxyZWFkeSBtb3VudGVkIik7CiAJCWlmICghIShmbGFncyAmIE1TX1JET05MWSkgIT0gYzEtPnJvX21vdW50KSB7CkBAIC0yMTQ2LDExICsyMTYwLDYgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXNiLT5zX2ZsYWdzID0gZmxhZ3M7Ci0JCS8qCi0JCSAqIFBhc3MgJ3ViaScgdG8gJ2ZpbGxfc3VwZXIoKScgaW4gc2ItPnNfZnNfaW5mbyB3aGVyZSBpdCBpcwotCQkgKiByZXBsYWNlZCBieSAnYycuCi0JCSAqLwotCQlzYi0+c19mc19pbmZvID0gdWJpOwogCQllcnIgPSB1Ymlmc19maWxsX3N1cGVyKHNiLCBkYXRhLCBmbGFncyAmIE1TX1NJTEVOVCA/IDEgOiAwKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2RlYWN0OwpAQCAtMjE3MCwxMSArMjE3OSwxOCBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyB2b2lkIGtpbGxfdWJpZnNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQoreworCXN0cnVjdCB1Ymlmc19pbmZvICpjID0gcy0+c19mc19pbmZvOworCWtpbGxfYW5vbl9zdXBlcihzKTsKKwlrZnJlZShjKTsKK30KKwogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHViaWZzX2ZzX3R5cGUgPSB7CiAJLm5hbWUgICAgPSAidWJpZnMiLAogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiAJLm1vdW50ICAgPSB1Ymlmc19tb3VudCwKLQkua2lsbF9zYiA9IGtpbGxfYW5vbl9zdXBlciwKKwkua2lsbF9zYiA9IGtpbGxfdWJpZnNfc3VwZXIsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCmluZGV4IGY0MjEzYmEuLjdmNzgyYWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKQEAgLTEzMSwxOSArMTMxLDM0IEBACiB7CiAJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKIAlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKIAlpbnQJCQllcnJvciA9IDA7CiAJaW50CQkJbG9nX2ZsdXNoZWQgPSAwOwogCiAJdHJhY2VfeGZzX2ZpbGVfZnN5bmMoaXApOwogCi0JaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQorCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJcmV0dXJuIC1YRlNfRVJST1IoRUlPKTsKIAogCXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19JVFJVTkNBVEVEKTsKIAogCXhmc19pb2VuZF93YWl0KGlwKTsKIAorCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKSB7CisJCS8qCisJCSAqIElmIHdlIGhhdmUgYW4gUlQgYW5kL29yIGxvZyBzdWJ2b2x1bWUgd2UgbmVlZCB0byBtYWtlIHN1cmUKKwkJICogdG8gZmx1c2ggdGhlIHdyaXRlIGNhY2hlIHRoZSBkZXZpY2UgdXNlZCBmb3IgZmlsZSBkYXRhCisJCSAqIGZpcnN0LiAgVGhpcyBpcyB0byBlbnN1cmUgbmV3bHkgd3JpdHRlbiBmaWxlIGRhdGEgbWFrZQorCQkgKiBpdCB0byBkaXNrIGJlZm9yZSBsb2dnaW5nIHRoZSBuZXcgaW5vZGUgc2l6ZSBpbiBjYXNlIG9mCisJCSAqIGFuIGV4dGVuZGluZyB3cml0ZS4KKwkJICovCisJCWlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApKQorCQkJeGZzX2Jsa2Rldl9pc3N1ZV9mbHVzaChtcC0+bV9ydGRldl90YXJncCk7CisJCWVsc2UgaWYgKG1wLT5tX2xvZ2Rldl90YXJncCAhPSBtcC0+bV9kZGV2X3RhcmdwKQorCQkJeGZzX2Jsa2Rldl9pc3N1ZV9mbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKKwl9CisKIAkvKgogCSAqIFdlIGFsd2F5cyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlZCBpbm9kZSBzdGF0ZSBpcyBzYWZlIG9uCiAJICogZGlzay4gIFRoZSBpbm9kZSBtaWdodCBiZSBjbGVhbiBidXQgd2Ugc3RpbGwgbWlnaHQgbmVlZCB0byBmb3JjZSB0aGUKQEAgLTE3NSw5ICsxOTAsOSBAQAogCQkgKiB1cGRhdGVzLiAgVGhlIHN5bmMgdHJhbnNhY3Rpb24gd2lsbCBhbHNvIGZvcmNlIHRoZSBsb2cuCiAJCSAqLwogCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JCXRwID0geGZzX3RyYW5zX2FsbG9jKGlwLT5pX21vdW50LCBYRlNfVFJBTlNfRlNZTkNfVFMpOworCQl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX0ZTWU5DX1RTKTsKIAkJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwKLQkJCQlYRlNfRlNZTkNfVFNfTE9HX1JFUyhpcC0+aV9tb3VudCksIDAsIDAsIDApOworCQkJCVhGU19GU1lOQ19UU19MT0dfUkVTKG1wKSwgMCwgMCwgMCk7CiAJCWlmIChlcnJvcikgewogCQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7CiAJCQlyZXR1cm4gLWVycm9yOwpAQCAtMjA5LDI4ICsyMjQsMjUgQEAKIAkJICogZm9yY2UgdGhlIGxvZy4KIAkJICovCiAJCWlmICh4ZnNfaXBpbmNvdW50KGlwKSkgewotCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZV9sc24oaXAtPmlfbW91bnQsCisJCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlX2xzbihtcCwKIAkJCQkJaXAtPmlfaXRlbXAtPmlsaV9sYXN0X2xzbiwKIAkJCQkJWEZTX0xPR19TWU5DLCAmbG9nX2ZsdXNoZWQpOwogCQl9CiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAl9CiAKLQlpZiAoaXAtPmlfbW91bnQtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQkFSUklFUikgewotCQkvKgotCQkgKiBJZiB0aGUgbG9nIHdyaXRlIGRpZG4ndCBpc3N1ZSBhbiBvcmRlcmVkIHRhZyB3ZSBuZWVkCi0JCSAqIHRvIGZsdXNoIHRoZSBkaXNrIGNhY2hlIGZvciB0aGUgZGF0YSBkZXZpY2Ugbm93LgotCQkgKi8KLQkJaWYgKCFsb2dfZmx1c2hlZCkKLQkJCXhmc19ibGtkZXZfaXNzdWVfZmx1c2goaXAtPmlfbW91bnQtPm1fZGRldl90YXJncCk7Ci0KLQkJLyoKLQkJICogSWYgdGhpcyBpbm9kZSBpcyBvbiB0aGUgUlQgZGV2IHdlIG5lZWQgdG8gZmx1c2ggdGhhdAotCQkgKiBjYWNoZSBhcyB3ZWxsLgotCQkgKi8KLQkJaWYgKFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkpCi0JCQl4ZnNfYmxrZGV2X2lzc3VlX2ZsdXNoKGlwLT5pX21vdW50LT5tX3J0ZGV2X3RhcmdwKTsKLQl9CisJLyoKKwkgKiBJZiB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUgZGV2aWNlLCBhbmQgdGhlIGxvZyBmb3JjZSBhYm91dCB3YXMKKwkgKiBhIG5vLW9wIHdlIG1pZ2h0IGhhdmUgdG8gZmx1c2ggdGhlIGRhdGEgZGV2aWNlIGNhY2hlIGhlcmUuCisJICogVGhpcyBjYW4gb25seSBoYXBwZW4gZm9yIGZkYXRhc3luYy9PX0RTWU5DIGlmIHdlIHdlcmUgb3ZlcndyaXRpbmcKKwkgKiBhbiBhbHJlYWR5IGFsbG9jYXRlZCBmaWxlIGFuZCB0aHVzIGRvIG5vdCBoYXZlIGFueSBtZXRhZGF0YSB0bworCSAqIGNvbW1pdC4KKwkgKi8KKwlpZiAoKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpICYmCisJICAgIG1wLT5tX2xvZ2Rldl90YXJncCA9PSBtcC0+bV9kZGV2X3RhcmdwICYmCisJICAgICFYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApICYmCisJICAgICFsb2dfZmx1c2hlZCkKKwkJeGZzX2Jsa2Rldl9pc3N1ZV9mbHVzaChtcC0+bV9kZGV2X3RhcmdwKTsKIAogCXJldHVybiAtZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggZGQyMTc4NC4uZDQ0ZDkyYyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJaWYgKElTX1BPU0lYQUNMKGRpcikpIHsKIAkJZGVmYXVsdF9hY2wgPSB4ZnNfZ2V0X2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOwogCQlpZiAoSVNfRVJSKGRlZmF1bHRfYWNsKSkKLQkJCXJldHVybiAtUFRSX0VSUihkZWZhdWx0X2FjbCk7CisJCQlyZXR1cm4gUFRSX0VSUihkZWZhdWx0X2FjbCk7CiAKIAkJaWYgKCFkZWZhdWx0X2FjbCkKIAkJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDFlM2E3Y2UuLmExYTg4MWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtNjI3LDY4ICs2MjcsNiBAQAogCQlibGtkZXZfcHV0KGJkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEV8Rk1PREVfRVhDTCk7CiB9CiAKLS8qCi0gKiBUcnkgdG8gd3JpdGUgb3V0IHRoZSBzdXBlcmJsb2NrIHVzaW5nIGJhcnJpZXJzLgotICovCi1TVEFUSUMgaW50Ci14ZnNfYmFycmllcl90ZXN0KAotCXhmc19tb3VudF90CSptcCkKLXsKLQl4ZnNfYnVmX3QJKnNicCA9IHhmc19nZXRzYihtcCwgMCk7Ci0JaW50CQllcnJvcjsKLQotCVhGU19CVUZfVU5ET05FKHNicCk7Ci0JWEZTX0JVRl9VTlJFQUQoc2JwKTsKLQlYRlNfQlVGX1VOREVMQVlXUklURShzYnApOwotCVhGU19CVUZfV1JJVEUoc2JwKTsKLQlYRlNfQlVGX1VOQVNZTkMoc2JwKTsKLQlYRlNfQlVGX09SREVSRUQoc2JwKTsKLQotCXhmc2Jkc3RyYXQobXAsIHNicCk7Ci0JZXJyb3IgPSB4ZnNfYnVmX2lvd2FpdChzYnApOwotCi0JLyoKLQkgKiBDbGVhciBhbGwgdGhlIGZsYWdzIHdlIHNldCBhbmQgcG9zc2libGUgZXJyb3Igc3RhdGUgaW4gdGhlCi0JICogYnVmZmVyLiAgV2Ugb25seSBkaWQgdGhlIHdyaXRlIHRvIHRyeSBvdXQgd2hldGhlciBiYXJyaWVycwotCSAqIHdvcmtlZCBhbmQgc2hvdWxkbid0IGxlYXZlIGFueSB0cmFjZXMgaW4gdGhlIHN1cGVyYmxvY2sKLQkgKiBidWZmZXIuCi0JICovCi0JWEZTX0JVRl9ET05FKHNicCk7Ci0JWEZTX0JVRl9FUlJPUihzYnAsIDApOwotCVhGU19CVUZfVU5PUkRFUkVEKHNicCk7Ci0KLQl4ZnNfYnVmX3JlbHNlKHNicCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1TVEFUSUMgdm9pZAoteGZzX21vdW50ZnNfY2hlY2tfYmFycmllcnMoeGZzX21vdW50X3QgKm1wKQotewotCWludCBlcnJvcjsKLQotCWlmIChtcC0+bV9sb2dkZXZfdGFyZ3AgIT0gbXAtPm1fZGRldl90YXJncCkgewotCQl4ZnNfbm90aWNlKG1wLAotCQkgICJEaXNhYmxpbmcgYmFycmllcnMsIG5vdCBzdXBwb3J0ZWQgd2l0aCBleHRlcm5hbCBsb2cgZGV2aWNlIik7Ci0JCW1wLT5tX2ZsYWdzICY9IH5YRlNfTU9VTlRfQkFSUklFUjsKLQkJcmV0dXJuOwotCX0KLQotCWlmICh4ZnNfcmVhZG9ubHlfYnVmdGFyZyhtcC0+bV9kZGV2X3RhcmdwKSkgewotCQl4ZnNfbm90aWNlKG1wLAotCQkJIkRpc2FibGluZyBiYXJyaWVycywgdW5kZXJseWluZyBkZXZpY2UgaXMgcmVhZG9ubHkiKTsKLQkJbXAtPm1fZmxhZ3MgJj0gflhGU19NT1VOVF9CQVJSSUVSOwotCQlyZXR1cm47Ci0JfQotCi0JZXJyb3IgPSB4ZnNfYmFycmllcl90ZXN0KG1wKTsKLQlpZiAoZXJyb3IpIHsKLQkJeGZzX25vdGljZShtcCwKLQkJCSJEaXNhYmxpbmcgYmFycmllcnMsIHRyaWFsIGJhcnJpZXIgd3JpdGUgZmFpbGVkIik7Ci0JCW1wLT5tX2ZsYWdzICY9IH5YRlNfTU9VTlRfQkFSUklFUjsKLQkJcmV0dXJuOwotCX0KLX0KLQogdm9pZAogeGZzX2Jsa2Rldl9pc3N1ZV9mbHVzaCgKIAl4ZnNfYnVmdGFyZ190CQkqYnVmdGFyZykKQEAgLTEyNDAsMTQgKzExNzgsNiBAQAogCQlzd2l0Y2ggKHRva2VuKSB7CiAJCWNhc2UgT3B0X2JhcnJpZXI6CiAJCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfQkFSUklFUjsKLQotCQkJLyoKLQkJCSAqIFRlc3QgaWYgYmFycmllcnMgYXJlIGFjdHVhbGx5IHdvcmtpbmcgaWYgd2UgY2FuLAotCQkJICogZWxzZSBkZWxheSB0aGlzIGNoZWNrIHVudGlsIHRoZSBmaWxlc3lzdGVtIGlzCi0JCQkgKiBtYXJrZWQgd3JpdGVhYmxlLgotCQkJICovCi0JCQlpZiAoIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpKQotCQkJCXhmc19tb3VudGZzX2NoZWNrX2JhcnJpZXJzKG1wKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ub2JhcnJpZXI6CiAJCQltcC0+bV9mbGFncyAmPSB+WEZTX01PVU5UX0JBUlJJRVI7CkBAIC0xMjgyLDggKzEyMTIsNiBAQAogCS8qIHJvIC0+IHJ3ICovCiAJaWYgKChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpICYmICEoKmZsYWdzICYgTVNfUkRPTkxZKSkgewogCQltcC0+bV9mbGFncyAmPSB+WEZTX01PVU5UX1JET05MWTsKLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpCi0JCQl4ZnNfbW91bnRmc19jaGVja19iYXJyaWVycyhtcCk7CiAKIAkJLyoKIAkJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcmVtb3VudCB0byB3cml0ZWFibGUgc3RhdGUgd2UKQEAgLTE0NjUsOSArMTM5Myw2IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9mcmVlX3NiOwogCi0JaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpCi0JCXhmc19tb3VudGZzX2NoZWNrX2JhcnJpZXJzKG1wKTsKLQogCWVycm9yID0geGZzX2ZpbGVzdHJlYW1fbW91bnQobXApOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZnJlZV9zYjsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmMgYi9mcy94ZnMveGZzX2xvZy5jCmluZGV4IDIxMTkzMDIuLjQxZDViOGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmMKKysrIGIvZnMveGZzL3hmc19sb2cuYwpAQCAtMTM3Miw4ICsxMzcyLDE3IEBACiAJWEZTX0JVRl9BU1lOQyhicCk7CiAJYnAtPmJfZmxhZ3MgfD0gWEJGX0xPR19CVUZGRVI7CiAKLQlpZiAobG9nLT5sX21wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpCisJaWYgKGxvZy0+bF9tcC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKSB7CisJCS8qCisJCSAqIElmIHdlIGhhdmUgYW4gZXh0ZXJuYWwgbG9nIGRldmljZSwgZmx1c2ggdGhlIGRhdGEgZGV2aWNlCisJCSAqIGJlZm9yZSBmbHVzaGluZyB0aGUgbG9nIHRvIG1ha2Ugc3VyZSBhbGwgbWV0YSBkYXRhCisJCSAqIHdyaXR0ZW4gYmFjayBmcm9tIHRoZSBBSUwgYWN0dWFsbHkgbWFkZSBpdCB0byBkaXNrCisJCSAqIGJlZm9yZSB3cml0aW5nIG91dCB0aGUgbmV3IGxvZyB0YWlsIExTTiBpbiB0aGUgbG9nIGJ1ZmZlci4KKwkJICovCisJCWlmIChsb2ctPmxfbXAtPm1fbG9nZGV2X3RhcmdwICE9IGxvZy0+bF9tcC0+bV9kZGV2X3RhcmdwKQorCQkJeGZzX2Jsa2Rldl9pc3N1ZV9mbHVzaChsb2ctPmxfbXAtPm1fZGRldl90YXJncCk7CiAJCVhGU19CVUZfT1JERVJFRChicCk7CisJfQogCiAJQVNTRVJUKFhGU19CVUZfQUREUihicCkgPD0gbG9nLT5sX2xvZ0JCc2l6ZS0xKTsKIAlBU1NFUlQoWEZTX0JVRl9BRERSKGJwKSArIEJUT0JCKGNvdW50KSA8PSBsb2ctPmxfbG9nQkJzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKaW5kZXggZmNkY2I1ZC4uZDQ5NDAwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKQEAgLTE3MCwxNiArMTcwLDYgQEAKIAogZXh0ZXJuIGludCBfX2dwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pOwogCi0jZGVmaW5lIEdQSU9GX0RJUl9PVVQJKDAgPDwgMCkKLSNkZWZpbmUgR1BJT0ZfRElSX0lOCSgxIDw8IDApCi0KLSNkZWZpbmUgR1BJT0ZfSU5JVF9MT1cJKDAgPDwgMSkKLSNkZWZpbmUgR1BJT0ZfSU5JVF9ISUdICSgxIDw8IDEpCi0KLSNkZWZpbmUgR1BJT0ZfSU4JCShHUElPRl9ESVJfSU4pCi0jZGVmaW5lIEdQSU9GX09VVF9JTklUX0xPVwkoR1BJT0ZfRElSX09VVCB8IEdQSU9GX0lOSVRfTE9XKQotI2RlZmluZSBHUElPRl9PVVRfSU5JVF9ISUdICShHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9ISUdIKQotCiAvKioKICAqIHN0cnVjdCBncGlvIC0gYSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIEdQSU8gd2l0aCBjb25maWd1cmF0aW9uCiAgKiBAZ3BpbzoJdGhlIEdQSU8gbnVtYmVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCmluZGV4IGU5YjhlNTkuLjc2YmZmMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oCkBAIC04OCw3ICs4OCw3IEBACiAJcG1kX3QgcG1kID0gKnBtZHA7CiAJcG1kX2NsZWFyKG1tLCBhZGRyZXNzLCBwbWRwKTsKIAlyZXR1cm4gcG1kOwotfSkKK30KICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi8KICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAppbmRleCA5NTczZTBjLi4zM2QxMmY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTUyMCw2ICs1MjAsOCBAQAogCXVpbnQzMl90IGVuY29kZXJfaWRzW0RSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVJdOwogCXVpbnQzMl90IGZvcmNlX2VuY29kZXJfaWQ7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOyAvKiBjdXJyZW50bHkgYWN0aXZlIGVuY29kZXIgKi8KKworCWludCBudWxsX2VkaWRfY291bnRlcjsgLyogbmVlZGVkIHRvIHdvcmthcm91bmQgc29tZSBIVyBidWdzIHdoZXJlIHdlIGdldCBhbGwgMHMgKi8KIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IGYwNGIyYTMuLmUwOGYzNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTQ2Nyw2ICs0NjcsMTcgQEAKIAl7MHgxMDAyLCAweDk2MTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk2MTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk2MTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PMnxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PMnxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNTzJ8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNTzJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjQ3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LFwKKwl7MHgxMDAyLCAweDk2NDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sXAorCXsweDEwMDIsIDB4OTY0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjRlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LFwKKwl7MHgxMDAyLCAweDk2NGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sXAogCXsweDEwMDIsIDB4OTcxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzg4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAogCXsweDEwMDIsIDB4OTcxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzg4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAogCXsweDEwMDIsIDB4OTcxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzg4MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFzaWNfbW1pb19ncGlvLmggYi9pbmNsdWRlL2xpbnV4L2Jhc2ljX21taW9fZ3Bpby5oCmluZGV4IDFhZTEyNzEuLjk4OTk5Y2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFzaWNfbW1pb19ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9iYXNpY19tbWlvX2dwaW8uaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KIAogc3RydWN0IGJncGlvX3BkYXRhIHsKIAlpbnQgYmFzZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCBiL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAppbmRleCBkNDY0NmI0Li4xOGExYmFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC0xODgsNiArMTg4LDcgQEAKICNpZmRlZiBDT05GSUdfQ0xPQ0tTT1VSQ0VfV0FUQ0hET0cKIAkvKiBXYXRjaGRvZyByZWxhdGVkIGRhdGEsIHVzZWQgYnkgdGhlIGZyYW1ld29yayAqLwogCXN0cnVjdCBsaXN0X2hlYWQgd2RfbGlzdDsKKwljeWNsZV90IGNzX2xhc3Q7CiAJY3ljbGVfdCB3ZF9sYXN0OwogI2VuZGlmCiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlX2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2VfY2dyb3VwLmgKaW5kZXggMGIwZDljMy4uN2FhZDFmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2VfY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2VfY2dyb3VwLmgKQEAgLTIsOCArMiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX0RFVklDRQotZXh0ZXJuIGludCBkZXZjZ3JvdXBfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CitleHRlcm4gaW50IF9fZGV2Y2dyb3VwX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOwogZXh0ZXJuIGludCBkZXZjZ3JvdXBfaW5vZGVfbWtub2QoaW50IG1vZGUsIGRldl90IGRldik7CitzdGF0aWMgaW5saW5lIGludCBkZXZjZ3JvdXBfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3sKKwlpZiAobGlrZWx5KCFpbm9kZS0+aV9yZGV2KSkKKwkJcmV0dXJuIDA7CisJaWYgKCFTX0lTQkxLKGlub2RlLT5pX21vZGUpICYmICFTX0lTQ0hSKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gX19kZXZjZ3JvdXBfaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7Cit9CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgZGV2Y2dyb3VwX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IGRmZDM0OTMuLjA0OGQwZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlfX3UzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31QQVVTRVBBUkFNICovCiAKIAkvKiBJZiB0aGUgbGluayBpcyBiZWluZyBhdXRvLW5lZ290aWF0ZWQgKHZpYSBldGh0b29sX2NtZC5hdXRvbmVnCi0JICogYmVpbmcgdHJ1ZSkgdGhlIHVzZXIgbWF5IHNldCAnYXV0b25ldCcgaGVyZSBub24temVybyB0byBoYXZlIHRoZQorCSAqIGJlaW5nIHRydWUpIHRoZSB1c2VyIG1heSBzZXQgJ2F1dG9uZWcnIGhlcmUgbm9uLXplcm8gdG8gaGF2ZSB0aGUKIAkgKiBwYXVzZSBwYXJhbWV0ZXJzIGJlIGF1dG8tbmVnb3RpYXRlZCB0b28uICBJbiBzdWNoIGEgY2FzZSwgdGhlCiAJICoge3J4LHR4fV9wYXVzZSB2YWx1ZXMgYmVsb3cgZGV0ZXJtaW5lIHdoYXQgY2FwYWJpbGl0aWVzIGFyZQogCSAqIGFkdmVydGlzZWQuCkBAIC03OTgsNyArNzk4LDcgQEAKICAqIEBnZXRfdHhfY3N1bTogRGVwcmVjYXRlZCBhcyByZWR1bmRhbnQuIFJlcG9ydCB3aGV0aGVyIHRyYW5zbWl0IGNoZWNrc3VtcwogICoJYXJlIHR1cm5lZCBvbiBvciBvZmYuCiAgKiBAc2V0X3R4X2NzdW06IERlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGdlbmVyaWMgbmV0ZGV2IGZlYXR1cmVzLiAgVHVybgotICoJdHJhbnNtaXQgY2hlY2tzdW1zIG9uIG9yIG9mZi4gIFJldHVybnMgYSBlZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqCXRyYW5zbWl0IGNoZWNrc3VtcyBvbiBvciBvZmYuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgogICogQGdldF9zZzogRGVwcmVjYXRlZCBhcyByZWR1bmRhbnQuICBSZXBvcnQgd2hldGhlciBzY2F0dGVyLWdhdGhlciBpcwogICoJZW5hYmxlZC4gIAogICogQHNldF9zZzogRGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMuICBUdXJuCkBAIC0xMDcyLDcgKzEwNzIsNyBAQAogLyogVGhlIGZvbGxvd2luZyBhcmUgYWxsIGludm9sdmVkIGluIGZvcmNpbmcgYSBwYXJ0aWN1bGFyIGxpbmsKICAqIG1vZGUgZm9yIHRoZSBkZXZpY2UgZm9yIHNldHRpbmcgdGhpbmdzLiAgV2hlbiBnZXR0aW5nIHRoZQogICogZGV2aWNlcyBzZXR0aW5ncywgdGhlc2UgaW5kaWNhdGUgdGhlIGN1cnJlbnQgbW9kZSBhbmQgd2hldGhlcgotICogaXQgd2FzIGZvY2VkIHVwIGludG8gdGhpcyBtb2RlIG9yIGF1dG9uZWdvdGlhdGVkLgorICogaXQgd2FzIGZvcmNlZCB1cCBpbnRvIHRoaXMgbW9kZSBvciBhdXRvbmVnb3RpYXRlZC4KICAqLwogCiAvKiBUaGUgZm9yY2VkIHNwZWVkLCAxME1iLCAxMDBNYiwgZ2lnYWJpdCwgMi41R2IsIDEwR2JFLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGM1NWQ2YjcuLjZlNzNlMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTIwOCw2ICsyMDgsNyBAQAogI2RlZmluZSBNU19LRVJOTU9VTlQJKDE8PDIyKSAvKiB0aGlzIGlzIGEga2Vybl9tb3VudCBjYWxsICovCiAjZGVmaW5lIE1TX0lfVkVSU0lPTgkoMTw8MjMpIC8qIFVwZGF0ZSBpbm9kZSBJX3ZlcnNpb24gZmllbGQgKi8KICNkZWZpbmUgTVNfU1RSSUNUQVRJTUUJKDE8PDI0KSAvKiBBbHdheXMgcGVyZm9ybSBhdGltZSB1cGRhdGVzICovCisjZGVmaW5lIE1TX05PU0VDCSgxPDwyOCkKICNkZWZpbmUgTVNfQk9STgkJKDE8PDI5KQogI2RlZmluZSBNU19BQ1RJVkUJKDE8PDMwKQogI2RlZmluZSBNU19OT1VTRVIJKDE8PDMxKQpAQCAtNzQzLDkgKzc0NCwxMyBAQAogCiAJc3BpbmxvY2tfdAkJaV9sb2NrOwkvKiBpX2Jsb2NrcywgaV9ieXRlcywgbWF5YmUgaV9zaXplICovCiAJdW5zaWduZWQgaW50CQlpX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcJCWlfc3RhdGU7CisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCisJdm9pZAkJCSppX3NlY3VyaXR5OworI2VuZGlmCiAJc3RydWN0IG11dGV4CQlpX211dGV4OwogCi0JdW5zaWduZWQgbG9uZwkJaV9zdGF0ZTsKKwogCXVuc2lnbmVkIGxvbmcJCWRpcnRpZWRfd2hlbjsJLyogamlmZmllcyBvZiBmaXJzdCBkaXJ0eWluZyAqLwogCiAJc3RydWN0IGhsaXN0X25vZGUJaV9oYXNoOwpAQCAtNzk3LDkgKzgwMiw2IEBACiAJYXRvbWljX3QJCWlfcmVhZGNvdW50OyAvKiBzdHJ1Y3QgZmlsZXMgb3BlbiBSTyAqLwogI2VuZGlmCiAJYXRvbWljX3QJCWlfd3JpdGVjb3VudDsKLSNpZmRlZiBDT05GSUdfU0VDVVJJVFkKLQl2b2lkCQkJKmlfc2VjdXJpdHk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCiAJc3RydWN0IHBvc2l4X2FjbAkqaV9hY2w7CiAJc3RydWN0IHBvc2l4X2FjbAkqaV9kZWZhdWx0X2FjbDsKQEAgLTI1OTEsNyArMjU5Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbm9kZV9oYXNfbm9feGF0dHIoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpZiAoIWlzX3N4aWQoaW5vZGUtPmlfbW9kZSkpCisJaWYgKCFpc19zeGlkKGlub2RlLT5pX21vZGUpICYmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX05PU0VDKSkKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1NFQzsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L2dwaW8uaAppbmRleCAzMmQ0N2U3Li4xN2I1YTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dwaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2dwaW8uaApAQCAtMyw2ICszLDE3IEBACiAKIC8qIHNlZSBEb2N1bWVudGF0aW9uL2dwaW8udHh0ICovCiAKKy8qIG1ha2UgdGhlc2UgZmxhZyB2YWx1ZXMgYXZhaWxhYmxlIHJlZ2FyZGxlc3Mgb2YgR1BJTyBrY29uZmlnIG9wdGlvbnMgKi8KKyNkZWZpbmUgR1BJT0ZfRElSX09VVAkoMCA8PCAwKQorI2RlZmluZSBHUElPRl9ESVJfSU4JKDEgPDwgMCkKKworI2RlZmluZSBHUElPRl9JTklUX0xPVwkoMCA8PCAxKQorI2RlZmluZSBHUElPRl9JTklUX0hJR0gJKDEgPDwgMSkKKworI2RlZmluZSBHUElPRl9JTgkJKEdQSU9GX0RJUl9JTikKKyNkZWZpbmUgR1BJT0ZfT1VUX0lOSVRfTE9XCShHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9MT1cpCisjZGVmaW5lIEdQSU9GX09VVF9JTklUX0hJR0gJKEdQSU9GX0RJUl9PVVQgfCBHUElPRl9JTklUX0hJR0gpCisKICNpZmRlZiBDT05GSUdfR0VORVJJQ19HUElPCiAjaW5jbHVkZSA8YXNtL2dwaW8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvYWRwODg3MC5oIGIvaW5jbHVkZS9saW51eC9pMmMvYWRwODg3MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNGRjZWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy9hZHA4ODcwLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBEZWZpbml0aW9ucyBhbmQgcGxhdGZvcm0gZGF0YSBmb3IgQW5hbG9nIERldmljZXMKKyAqIEJhY2tsaWdodCBkcml2ZXJzIEFEUDg4NzAKKyAqCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0kyQ19BRFA4ODcwX0gKKyNkZWZpbmUgX19MSU5VWF9JMkNfQURQODg3MF9ICisKKyNkZWZpbmUgSURfQURQODg3MAkJODg3MAorCisjZGVmaW5lIEFEUDg4NzBfTUFYX0JSSUdIVE5FU1MJMHg3RgorI2RlZmluZSBGTEFHX09GRlRfU0hJRlQgOAorCisvKgorICogTEVEcyBzdWJkZXZpY2UgcGxhdGZvcm0gZGF0YQorICovCisKKyNkZWZpbmUgQURQODg3MF9MRURfRElTX0JMSU5LCSgwIDw8IEZMQUdfT0ZGVF9TSElGVCkKKyNkZWZpbmUgQURQODg3MF9MRURfT0ZGVF82MDBtcwkoMSA8PCBGTEFHX09GRlRfU0hJRlQpCisjZGVmaW5lIEFEUDg4NzBfTEVEX09GRlRfMTIwMG1zCSgyIDw8IEZMQUdfT0ZGVF9TSElGVCkKKyNkZWZpbmUgQURQODg3MF9MRURfT0ZGVF8xODAwbXMJKDMgPDwgRkxBR19PRkZUX1NISUZUKQorCisjZGVmaW5lIEFEUDg4NzBfTEVEX09OVF8yMDBtcwkwCisjZGVmaW5lIEFEUDg4NzBfTEVEX09OVF82MDBtcwkxCisjZGVmaW5lIEFEUDg4NzBfTEVEX09OVF84MDBtcwkyCisjZGVmaW5lIEFEUDg4NzBfTEVEX09OVF8xMjAwbXMJMworCisjZGVmaW5lIEFEUDg4NzBfTEVEX0Q3CQkoNykKKyNkZWZpbmUgQURQODg3MF9MRURfRDYJCSg2KQorI2RlZmluZSBBRFA4ODcwX0xFRF9ENQkJKDUpCisjZGVmaW5lIEFEUDg4NzBfTEVEX0Q0CQkoNCkKKyNkZWZpbmUgQURQODg3MF9MRURfRDMJCSgzKQorI2RlZmluZSBBRFA4ODcwX0xFRF9EMgkJKDIpCisjZGVmaW5lIEFEUDg4NzBfTEVEX0QxCQkoMSkKKworLyoKKyAqIEJhY2tsaWdodCBzdWJkZXZpY2UgcGxhdGZvcm0gZGF0YQorICovCisKKyNkZWZpbmUgQURQODg3MF9CTF9ENwkJKDEgPDwgNikKKyNkZWZpbmUgQURQODg3MF9CTF9ENgkJKDEgPDwgNSkKKyNkZWZpbmUgQURQODg3MF9CTF9ENQkJKDEgPDwgNCkKKyNkZWZpbmUgQURQODg3MF9CTF9ENAkJKDEgPDwgMykKKyNkZWZpbmUgQURQODg3MF9CTF9EMwkJKDEgPDwgMikKKyNkZWZpbmUgQURQODg3MF9CTF9EMgkJKDEgPDwgMSkKKyNkZWZpbmUgQURQODg3MF9CTF9EMQkJKDEgPDwgMCkKKworI2RlZmluZSBBRFA4ODcwX0ZBREVfVF9ESVMJMAkvKiBGYWRlIFRpbWVyIERpc2FibGVkICovCisjZGVmaW5lIEFEUDg4NzBfRkFERV9UXzMwMG1zCTEJLyogMC4zIFNlYyAqLworI2RlZmluZSBBRFA4ODcwX0ZBREVfVF82MDBtcwkyCisjZGVmaW5lIEFEUDg4NzBfRkFERV9UXzkwMG1zCTMKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfMTIwMG1zCTQKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfMTUwMG1zCTUKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfMTgwMG1zCTYKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfMjEwMG1zCTcKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfMjQwMG1zCTgKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfMjcwMG1zCTkKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfMzAwMG1zCTEwCisjZGVmaW5lIEFEUDg4NzBfRkFERV9UXzM1MDBtcwkxMQorI2RlZmluZSBBRFA4ODcwX0ZBREVfVF80MDAwbXMJMTIKKyNkZWZpbmUgQURQODg3MF9GQURFX1RfNDUwMG1zCTEzCisjZGVmaW5lIEFEUDg4NzBfRkFERV9UXzUwMDBtcwkxNAorI2RlZmluZSBBRFA4ODcwX0ZBREVfVF81NTAwbXMJMTUJLyogNS41IFNlYyAqLworCisjZGVmaW5lIEFEUDg4NzBfRkFERV9MQVdfTElORUFSCTAKKyNkZWZpbmUgQURQODg3MF9GQURFX0xBV19TUVVBUkUJMQorI2RlZmluZSBBRFA4ODcwX0ZBREVfTEFXX0NVQklDMQkyCisjZGVmaW5lIEFEUDg4NzBfRkFERV9MQVdfQ1VCSUMyCTMKKworI2RlZmluZSBBRFA4ODcwX0JMX0FNQkxfRklMVF84MG1zCTAJLyogTGlnaHQgc2Vuc29yIGZpbHRlciB0aW1lICovCisjZGVmaW5lIEFEUDg4NzBfQkxfQU1CTF9GSUxUXzE2MG1zCTEKKyNkZWZpbmUgQURQODg3MF9CTF9BTUJMX0ZJTFRfMzIwbXMJMgorI2RlZmluZSBBRFA4ODcwX0JMX0FNQkxfRklMVF82NDBtcwkzCisjZGVmaW5lIEFEUDg4NzBfQkxfQU1CTF9GSUxUXzEyODBtcwk0CisjZGVmaW5lIEFEUDg4NzBfQkxfQU1CTF9GSUxUXzI1NjBtcwk1CisjZGVmaW5lIEFEUDg4NzBfQkxfQU1CTF9GSUxUXzUxMjBtcwk2CisjZGVmaW5lIEFEUDg4NzBfQkxfQU1CTF9GSUxUXzEwMjQwbXMJNwkvKiAxMC4yNCBzZWMgKi8KKworLyoKKyAqIEJsYWNrbGlnaHQgY3VycmVudCAwLi4zMG1BCisgKi8KKyNkZWZpbmUgQURQODg3MF9CTF9DVVJfbUEoSSkJCSgoSSAqIDEyNykgLyAzMCkKKworLyoKKyAqIEwyIGNvbXBhcmF0b3IgY3VycmVudCAwLi4xMTA2dUEKKyAqLworI2RlZmluZSBBRFA4ODcwX0wyX0NPTVBfQ1VSUl91QShJKQkoKEkgKiAyNTUpIC8gMTEwNikKKworLyoKKyAqIEwzIGNvbXBhcmF0b3IgY3VycmVudCAwLi41NTF1QQorICovCisjZGVmaW5lIEFEUDg4NzBfTDNfQ09NUF9DVVJSX3VBKEkpCSgoSSAqIDI1NSkgLyA1NTEpCisKKy8qCisgKiBMNCBjb21wYXJhdG9yIGN1cnJlbnQgMC4uMjc1dUEKKyAqLworI2RlZmluZSBBRFA4ODcwX0w0X0NPTVBfQ1VSUl91QShJKQkoKEkgKiAyNTUpIC8gMjc1KQorCisvKgorICogTDUgY29tcGFyYXRvciBjdXJyZW50IDAuLjEzOHVBCisgKi8KKyNkZWZpbmUgQURQODg3MF9MNV9DT01QX0NVUlJfdUEoSSkJKChJICogMjU1KSAvIDEzOCkKKworc3RydWN0IGFkcDg4NzBfYmFja2xpZ2h0X3BsYXRmb3JtX2RhdGEgeworCXU4IGJsX2xlZF9hc3NpZ247CS8qIDEgPSBCYWNrbGlnaHQgMCA9IEluZGl2aWR1YWwgTEVEICovCisJdTggcHdtX2Fzc2lnbjsJCS8qIDEgPSBFbmFibGVzIFBXTSBtb2RlICovCisKKwl1OCBibF9mYWRlX2luOwkJLyogQmFja2xpZ2h0IEZhZGUtSW4gVGltZXIgKi8KKwl1OCBibF9mYWRlX291dDsJCS8qIEJhY2tsaWdodCBGYWRlLU91dCBUaW1lciAqLworCXU4IGJsX2ZhZGVfbGF3OwkJLyogZmFkZS1vbi9mYWRlLW9mZiB0cmFuc2ZlciBjaGFyYWN0ZXJpc3RpYyAqLworCisJdTggZW5fYW1ibF9zZW5zOwkvKiAxID0gZW5hYmxlIGFtYmllbnQgbGlnaHQgc2Vuc29yICovCisJdTggYWJtbF9maWx0OwkJLyogTGlnaHQgc2Vuc29yIGZpbHRlciB0aW1lICovCisKKwl1OCBsMV9kYXlsaWdodF9tYXg7CS8qIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJdTggbDFfZGF5bGlnaHRfZGltOwkvKiB0eXAgPSAwLCB1c2UgQkxfQ1VSX21BKEkpIDAgPD0gSSA8PSAzMCBtQSAqLworCXU4IGwyX2JyaWdodF9tYXg7CS8qIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJdTggbDJfYnJpZ2h0X2RpbTsJLyogdHlwID0gMCwgdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwl1OCBsM19vZmZpY2VfbWF4OwkvKiB1c2UgQkxfQ1VSX21BKEkpIDAgPD0gSSA8PSAzMCBtQSAqLworCXU4IGwzX29mZmljZV9kaW07CS8qIHR5cCA9IDAsIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJdTggbDRfaW5kb29yX21heDsJLyogdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKwl1OCBsNF9pbmRvcl9kaW07CS8qIHR5cCA9IDAsIHVzZSBCTF9DVVJfbUEoSSkgMCA8PSBJIDw9IDMwIG1BICovCisJdTggbDVfZGFya19tYXg7CQkvKiB1c2UgQkxfQ1VSX21BKEkpIDAgPD0gSSA8PSAzMCBtQSAqLworCXU4IGw1X2RhcmtfZGltOwkJLyogdHlwID0gMCwgdXNlIEJMX0NVUl9tQShJKSAwIDw9IEkgPD0gMzAgbUEgKi8KKworCXU4IGwyX3RyaXA7CQkvKiB1c2UgTDJfQ09NUF9DVVJSX3VBKEkpIDAgPD0gSSA8PSAxMTA2IHVBICovCisJdTggbDJfaHlzdDsJCS8qIHVzZSBMMl9DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDExMDYgdUEgKi8KKwl1OCBsM190cmlwOwkJLyogdXNlIEwzX0NPTVBfQ1VSUl91QShJKSAwIDw9IEkgPD0gNTUxIHVBICovCisJdTggbDNfaHlzdDsJCS8qIHVzZSBMM19DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDU1MSB1QSAqLworCXU4IGw0X3RyaXA7CQkvKiB1c2UgTDRfQ09NUF9DVVJSX3VBKEkpIDAgPD0gSSA8PSAyNzUgdUEgKi8KKwl1OCBsNF9oeXN0OwkJLyogdXNlIEw0X0NPTVBfQ1VSUl91QShJKSAwIDw9IEkgPD0gMjc1IHVBICovCisJdTggbDVfdHJpcDsJCS8qIHVzZSBMNV9DT01QX0NVUlJfdUEoSSkgMCA8PSBJIDw9IDEzOCB1QSAqLworCXU4IGw1X2h5c3Q7CQkvKiB1c2UgTDZfQ09NUF9DVVJSX3VBKEkpIDAgPD0gSSA8PSAxMzggdUEgKi8KKworCS8qKgorCSAqIEluZGVwZW5kZW50IEN1cnJlbnQgU2lua3MgLyBMRURTCisJICogU2lua3Mgbm90IGFzc2lnbmVkIHRvIHRoZSBCYWNrbGlnaHQgY2FuIGJlIGV4cG9zZWQgdG8KKwkgKiB1c2VyIHNwYWNlIHVzaW5nIHRoZSBMRURTIENMQVNTIGludGVyZmFjZQorCSAqLworCisJaW50IG51bV9sZWRzOworCXN0cnVjdCBsZWRfaW5mbwkqbGVkczsKKwl1OCBsZWRfZmFkZV9pbjsJCS8qIExFRCBGYWRlLUluIFRpbWVyICovCisJdTggbGVkX2ZhZGVfb3V0OwkvKiBMRUQgRmFkZS1PdXQgVGltZXIgKi8KKwl1OCBsZWRfZmFkZV9sYXc7CS8qIGZhZGUtb24vZmFkZS1vZmYgdHJhbnNmZXIgY2hhcmFjdGVyaXN0aWMgKi8KKwl1OCBsZWRfb25fdGltZTsKK307CisKKyNlbmRpZiAvKiBfX0xJTlVYX0kyQ19BRFA4ODcwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmggYi9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oCmluZGV4IDZkNjZjZTEuLjdiMzE4NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaApAQCAtNjIsNiArNjIsNyBAQAogCV9fdTE2CQl0cF9tYWM7CiAJX191MTYJCXRwX25ldDsKIAlfX3UxNgkJdHBfdmxhbl90Y2k7CisJX191MTYJCXRwX3BhZGRpbmc7CiB9OwogCiAvKiBSeCByaW5nIC0gaGVhZGVyIHN0YXR1cyAqLwpAQCAtMTAxLDYgKzEwMiw3IEBACiAJX191MzIJCXRwX3NlYzsKIAlfX3UzMgkJdHBfbnNlYzsKIAlfX3UxNgkJdHBfdmxhbl90Y2k7CisJX191MTYJCXRwX3BhZGRpbmc7CiB9OwogCiAjZGVmaW5lIFRQQUNLRVQyX0hEUkxFTgkJKFRQQUNLRVRfQUxJR04oc2l6ZW9mKHN0cnVjdCB0cGFja2V0Ml9oZHIpKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAppbmRleCBkYzAxNjgxLi5hZmZhMjczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaApAQCAtMjI1LDcgKzIyNSw3IEBACiB9CiAKIC8qKgotICogX192bGFuX3B1dF90YWcgLSByZWd1bGFyIFZMQU4gdGFnIGluc2VydGluZworICogdmxhbl9pbnNlcnRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmcKICAqIEBza2I6IHNrYnVmZiB0byB0YWcKICAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgdG8gaW5zZXJ0CiAgKgpAQCAtMjM0LDggKzIzNCwxMCBAQAogICoKICAqIEZvbGxvd2luZyB0aGUgc2tiX3Vuc2hhcmUoKSBleGFtcGxlLCBpbiBjYXNlIG9mIGVycm9yLCB0aGUgY2FsbGluZyBmdW5jdGlvbgogICogZG9lc24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGZyZWVpbmcgdGhlIG9yaWdpbmFsIHNrYi4KKyAqCisgKiBEb2VzIG5vdCBjaGFuZ2Ugc2tiLT5wcm90b2NvbCBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGR1cmluZyByZWNlaXZlLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX3ZsYW5fcHV0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmxhbl90Y2kpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2luc2VydF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHZsYW5fdGNpKQogewogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDsKIApAQCAtMjU1LDggKzI1NywyNSBAQAogCS8qIG5vdywgdGhlIFRDSSAqLwogCXZldGgtPmhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3RjaSk7CiAKLQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyMVEpOworCXJldHVybiBza2I7Cit9CiAKKy8qKgorICogX192bGFuX3B1dF90YWcgLSByZWd1bGFyIFZMQU4gdGFnIGluc2VydGluZworICogQHNrYjogc2tidWZmIHRvIHRhZworICogQHZsYW5fdGNpOiBWTEFOIFRDSSB0byBpbnNlcnQKKyAqCisgKiBJbnNlcnRzIHRoZSBWTEFOIHRhZyBpbnRvIEBza2IgYXMgcGFydCBvZiB0aGUgcGF5bG9hZAorICogUmV0dXJucyBhIFZMQU4gdGFnZ2VkIHNrYi4gSWYgYSBuZXcgc2tiIGlzIGNyZWF0ZWQsIEBza2IgaXMgZnJlZWQuCisgKgorICogRm9sbG93aW5nIHRoZSBza2JfdW5zaGFyZSgpIGV4YW1wbGUsIGluIGNhc2Ugb2YgZXJyb3IsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisgKiBkb2Vzbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZnJlZWluZyB0aGUgb3JpZ2luYWwgc2tiLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX3ZsYW5fcHV0X3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmxhbl90Y2kpCit7CisJc2tiID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgdmxhbl90Y2kpOworCWlmIChza2IpCisJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDIxUSk7CiAJcmV0dXJuIHNrYjsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9zaF9rZXlzYy5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC9zaF9rZXlzYy5oCmluZGV4IDY0OWRjN2YuLjVkMjUzY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQvc2hfa2V5c2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0L3NoX2tleXNjLmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fU0hfS0VZU0NfSF9fCiAjZGVmaW5lIF9fU0hfS0VZU0NfSF9fCiAKLSNkZWZpbmUgU0hfS0VZU0NfTUFYS0VZUyA0OQorI2RlZmluZSBTSF9LRVlTQ19NQVhLRVlTIDY0CiAKIHN0cnVjdCBzaF9rZXlzY19pbmZvIHsKIAllbnVtIHsgU0hfS0VZU0NfTU9ERV8xLCBTSF9LRVlTQ19NT0RFXzIsIFNIX0tFWVNDX01PREVfMywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDZjMTI5ODkuLmY2ZWZlZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtNDE0LDYgKzQxNCw3IEBACiAJVEFTS0xFVF9TT0ZUSVJRLAogCVNDSEVEX1NPRlRJUlEsCiAJSFJUSU1FUl9TT0ZUSVJRLAorCVJDVV9TT0ZUSVJRLCAgICAvKiBQcmVmZXJhYmxlIFJDVSBzaG91bGQgYWx3YXlzIGJlIHRoZSBsYXN0IHNvZnRpcnEgKi8KIAogCU5SX1NPRlRJUlFTCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaCBiL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKaW5kZXggODE5YWNhYS4uNzE0YmEwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCkBAIC04LDkgKzgsOSBAQAogICogQElSUV9XQUtFX1RIUkVBRAloYW5kbGVyIHJlcXVlc3RzIHRvIHdha2UgdGhlIGhhbmRsZXIgdGhyZWFkCiAgKi8KIGVudW0gaXJxcmV0dXJuIHsKLQlJUlFfTk9ORSwKLQlJUlFfSEFORExFRCwKLQlJUlFfV0FLRV9USFJFQUQsCisJSVJRX05PTkUJCT0gKDAgPDwgMCksCisJSVJRX0hBTkRMRUQJCT0gKDEgPDwgMCksCisJSVJRX1dBS0VfVEhSRUFECQk9ICgxIDw8IDEpLAogfTsKIAogdHlwZWRlZiBlbnVtIGlycXJldHVybiBpcnFyZXR1cm5fdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IGZiMGU3MzIuLjk1MzM1MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtNjcxLDggKzY3MSw4IEBACiAKICNpZmRlZiBfX0NIRUNLRVJfXwogI2RlZmluZSBCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIobikKLSNkZWZpbmUgQlVJTERfQlVHX09OX1pFUk8oZSkKLSNkZWZpbmUgQlVJTERfQlVHX09OX05VTEwoZSkKKyNkZWZpbmUgQlVJTERfQlVHX09OX1pFUk8oZSkgKDApCisjZGVmaW5lIEJVSUxEX0JVR19PTl9OVUxMKGUpICgodm9pZCopMCkKICNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikKICNlbHNlIC8qIF9fQ0hFQ0tFUl9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21vZC5oIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKaW5kZXggZDRhNWM4NC4uMGRhMzhjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbW9kLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKICNlbmRpZgogCiAKLXN0cnVjdCBrZXk7CitzdHJ1Y3QgY3JlZDsKIHN0cnVjdCBmaWxlOwogCiBlbnVtIHVtaF93YWl0IHsKQEAgLTYyLDcgKzYyLDcgQEAKIAljaGFyICoqZW52cDsKIAllbnVtIHVtaF93YWl0IHdhaXQ7CiAJaW50IHJldHZhbDsKLQlpbnQgKCppbml0KShzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvKTsKKwlpbnQgKCppbml0KShzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvLCBzdHJ1Y3QgY3JlZCAqbmV3KTsKIAl2b2lkICgqY2xlYW51cCkoc3RydWN0IHN1YnByb2Nlc3NfaW5mbyAqaW5mbyk7CiAJdm9pZCAqZGF0YTsKIH07CkBAIC03Myw3ICs3Myw3IEBACiAKIC8qIFNldCB2YXJpb3VzIHBpZWNlcyBvZiBzdGF0ZSBpbnRvIHRoZSBzdWJwcm9jZXNzX2luZm8gc3RydWN0dXJlICovCiB2b2lkIGNhbGxfdXNlcm1vZGVoZWxwZXJfc2V0Zm5zKHN0cnVjdCBzdWJwcm9jZXNzX2luZm8gKmluZm8sCi0JCSAgICBpbnQgKCppbml0KShzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvKSwKKwkJICAgIGludCAoKmluaXQpKHN0cnVjdCBzdWJwcm9jZXNzX2luZm8gKmluZm8sIHN0cnVjdCBjcmVkICpuZXcpLAogCQkgICAgdm9pZCAoKmNsZWFudXApKHN0cnVjdCBzdWJwcm9jZXNzX2luZm8gKmluZm8pLAogCQkgICAgdm9pZCAqZGF0YSk7CiAKQEAgLTg3LDcgKzg3LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBjYWxsX3VzZXJtb2RlaGVscGVyX2ZucyhjaGFyICpwYXRoLCBjaGFyICoqYXJndiwgY2hhciAqKmVudnAsCiAJCQllbnVtIHVtaF93YWl0IHdhaXQsCi0JCQlpbnQgKCppbml0KShzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvKSwKKwkJCWludCAoKmluaXQpKHN0cnVjdCBzdWJwcm9jZXNzX2luZm8gKmluZm8sIHN0cnVjdCBjcmVkICpuZXcpLAogCQkJdm9pZCAoKmNsZWFudXApKHN0cnVjdCBzdWJwcm9jZXNzX2luZm8gKiksIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHN1YnByb2Nlc3NfaW5mbyAqaW5mbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21zZ19kdW1wLmggYi9pbmNsdWRlL2xpbnV4L2ttc2dfZHVtcC5oCmluZGV4IDJhMGQ3ZDYuLmVlMGM5NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21zZ19kdW1wLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbXNnX2R1bXAuaApAQCAtMTIsNiArMTIsNyBAQAogI2lmbmRlZiBfTElOVVhfS01TR19EVU1QX0gKICNkZWZpbmUgX0xJTlVYX0tNU0dfRFVNUF9ICiAKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogZW51bSBrbXNnX2R1bXBfcmVhc29uIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva29iamVjdF9ucy5oIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0X25zLmgKaW5kZXggODJjYjViZi4uZjY2YjA2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rb2JqZWN0X25zLmgKKysrIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0X25zLmgKQEAgLTMyLDE1ICszMiwxNyBAQAogCiAvKgogICogQ2FsbGJhY2tzIHNvIHN5c2ZzIGNhbiBkZXRlcm1pbmUgbmFtZXNwYWNlcwotICogICBAY3VycmVudF9uczogcmV0dXJuIGNhbGxpbmcgdGFzaydzIG5hbWVzcGFjZQorICogICBAZ3JhYl9jdXJyZW50X25zOiByZXR1cm4gYSBuZXcgcmVmZXJlbmNlIHRvIGNhbGxpbmcgdGFzaydzIG5hbWVzcGFjZQogICogICBAbmV0bGlua19uczogcmV0dXJuIG5hbWVzcGFjZSB0byB3aGljaCBhIHNvY2sgYmVsb25ncyAocmlnaHQ/KQogICogICBAaW5pdGlhbF9uczogcmV0dXJuIHRoZSBpbml0aWFsIG5hbWVzcGFjZSAoaS5lLiBpbml0X25ldF9ucykKKyAqICAgQGRyb3BfbnM6IGRyb3BzIGEgcmVmZXJlbmNlIHRvIG5hbWVzcGFjZQogICovCiBzdHJ1Y3Qga29ial9uc190eXBlX29wZXJhdGlvbnMgewogCWVudW0ga29ial9uc190eXBlIHR5cGU7Ci0JY29uc3Qgdm9pZCAqKCpjdXJyZW50X25zKSh2b2lkKTsKKwl2b2lkICooKmdyYWJfY3VycmVudF9ucykodm9pZCk7CiAJY29uc3Qgdm9pZCAqKCpuZXRsaW5rX25zKShzdHJ1Y3Qgc29jayAqc2spOwogCWNvbnN0IHZvaWQgKigqaW5pdGlhbF9ucykodm9pZCk7CisJdm9pZCAoKmRyb3BfbnMpKHZvaWQgKik7CiB9OwogCiBpbnQga29ial9uc190eXBlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBrb2JqX25zX3R5cGVfb3BlcmF0aW9ucyAqb3BzKTsKQEAgLTQ4LDkgKzUwLDkgQEAKIGNvbnN0IHN0cnVjdCBrb2JqX25zX3R5cGVfb3BlcmF0aW9ucyAqa29ial9jaGlsZF9uc19vcHMoc3RydWN0IGtvYmplY3QgKnBhcmVudCk7CiBjb25zdCBzdHJ1Y3Qga29ial9uc190eXBlX29wZXJhdGlvbnMgKmtvYmpfbnNfb3BzKHN0cnVjdCBrb2JqZWN0ICprb2JqKTsKIAotY29uc3Qgdm9pZCAqa29ial9uc19jdXJyZW50KGVudW0ga29ial9uc190eXBlIHR5cGUpOwordm9pZCAqa29ial9uc19ncmFiX2N1cnJlbnQoZW51bSBrb2JqX25zX3R5cGUgdHlwZSk7CiBjb25zdCB2b2lkICprb2JqX25zX25ldGxpbmsoZW51bSBrb2JqX25zX3R5cGUgdHlwZSwgc3RydWN0IHNvY2sgKnNrKTsKIGNvbnN0IHZvaWQgKmtvYmpfbnNfaW5pdGlhbChlbnVtIGtvYmpfbnNfdHlwZSB0eXBlKTsKLXZvaWQga29ial9uc19leGl0KGVudW0ga29ial9uc190eXBlIHR5cGUsIGNvbnN0IHZvaWQgKm5zKTsKK3ZvaWQga29ial9uc19kcm9wKGVudW0ga29ial9uc190eXBlIHR5cGUsIHZvaWQgKm5zKTsKIAogI2VuZGlmIC8qIF9MSU5VWF9LT0JKRUNUX05TX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggOTcyNGEzOC4uNTA5NDBkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTg0LDYgKzg0LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBtZW1fY2dyb3VwICp0cnlfZ2V0X21lbV9jZ3JvdXBfZnJvbV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKK2V4dGVybiBzdHJ1Y3QgbWVtX2Nncm91cCAqdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCiBzdGF0aWMgaW5saW5lCiBpbnQgbW1fbWF0Y2hfY2dyb3VwKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cCAqY2dyb3VwKQpAQCAtMjQ2LDYgKzI0NywxMSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICp0cnlfZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQogewogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggNjQ2OWZhOS4uMjJhOGNlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC0yNTUxLDcgKzI1NTEsNyBAQAogCiBleHRlcm4gc3RydWN0IGtvYmpfbnNfdHlwZV9vcGVyYXRpb25zIG5ldF9uc190eXBlX29wZXJhdGlvbnM7CiAKLWV4dGVybiBjaGFyICpuZXRkZXZfZHJpdmVybmFtZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpidWZmZXIsIGludCBsZW4pOworZXh0ZXJuIGNvbnN0IGNoYXIgKm5ldGRldl9kcml2ZXJuYW1lKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBleHRlcm4gdm9pZCBsaW5rd2F0Y2hfcnVuX3F1ZXVlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKaW5kZXggNTBjZGMyNS4uMGQzZGQ2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaApAQCAtMTgsNiArMTgsOSBAQAogCS8qID49IHRoaXMgaW5kaWNhdGVzIHJlcGx5IGRpcmVjdGlvbiAqLwogCUlQX0NUX0lTX1JFUExZLAogCisJSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkgPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZLAorCUlQX0NUX1JFTEFURURfUkVQTFkgPSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFksCisJSVBfQ1RfTkVXX1JFUExZID0gSVBfQ1RfTkVXICsgSVBfQ1RfSVNfUkVQTFksCQogCS8qIE51bWJlciBvZiBkaXN0aW5jdCBJUF9DVCB0eXBlcyAobm8gTkVXIGluIHJlcGx5IGRpcm4pLiAqLwogCUlQX0NUX05VTUJFUiA9IElQX0NUX0lTX1JFUExZICogMiAtIDEKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHUuaAppbmRleCA4Yjk3MzA4Li45Y2EwMDhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKQEAgLTI1OSw2ICsyNTksOSBAQAogICogU3BlY2lhbCBoYW5kbGluZyBmb3IgY21weGNoZ19kb3VibGUuICBjbXB4Y2hnX2RvdWJsZSBpcyBwYXNzZWQgdHdvCiAgKiBwZXJjcHUgdmFyaWFibGVzLiAgVGhlIGZpcnN0IGhhcyB0byBiZSBhbGlnbmVkIHRvIGEgZG91YmxlIHdvcmQKICAqIGJvdW5kYXJ5IGFuZCB0aGUgc2Vjb25kIGhhcyB0byBmb2xsb3cgZGlyZWN0bHkgdGhlcmVhZnRlci4KKyAqIFdlIGVuZm9yY2UgdGhpcyBvbiBhbGwgYXJjaGl0ZWN0dXJlcyBldmVuIGlmIHRoZXkgZG9uJ3Qgc3VwcG9ydAorICogYSBkb3VibGUgY21weGNoZyBpbnN0cnVjdGlvbiwgc2luY2UgaXQncyBhIGNoZWFwIHJlcXVpcmVtZW50LCBhbmQgaXQKKyAqIGF2b2lkcyBicmVha2luZyB0aGUgcmVxdWlyZW1lbnQgZm9yIGFyY2hpdGVjdHVyZXMgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24uCiAgKi8KICNkZWZpbmUgX19wY3B1X2RvdWJsZV9jYWxsX3JldHVybl9ib29sKHN0ZW0sIHBjcDEsIHBjcDIsIC4uLikJCVwKICh7CQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCAzNDEyNjg0Li5lMDc4NmUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMTM3LDE0ICsxMzcsMTQgQEAKICAqCiAgKiBzdHJ1Y3QgcmVhZF9mb3JtYXQgewogICoJeyB1NjQJCXZhbHVlOwotICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVECisgKgkgIHsgdTY0CQl0aW1lX3J1bm5pbmc7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HCiAgKgkgIHsgdTY0CQlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKICAqCX0gJiYgIVBFUkZfRk9STUFUX0dST1VQCiAgKgogICoJeyB1NjQJCW5yOwotICoJICB7IHU2NAkJdGltZV9lbmFibGVkOyB9ICYmIFBFUkZfRk9STUFUX0VOQUJMRUQKLSAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9SVU5OSU5HCisgKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVECisgKgkgIHsgdTY0CQl0aW1lX3J1bm5pbmc7IH0gJiYgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HCiAgKgkgIHsgdTY0CQl2YWx1ZTsKICAqCSAgICB7IHU2NAlpZDsgICAgICAgICAgIH0gJiYgUEVSRl9GT1JNQVRfSUQKICAqCSAgfQkJY250cltucl07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMmE4NjIxYy4uYTgzN2IyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTA2Myw2ICsxMDYzLDcgQEAKICAqLwogI2RlZmluZSBXRl9TWU5DCQkweDAxCQkvKiB3YWtlciBnb2VzIHRvIHNsZWVwIGFmdGVyIHdha3VwICovCiAjZGVmaW5lIFdGX0ZPUksJCTB4MDIJCS8qIGNoaWxkIHdha2V1cCBhZnRlciBmb3JrICovCisjZGVmaW5lIFdGX01JR1JBVEVECTB4MDQJCS8qIGludGVybmFsIHVzZSwgdGFzayBnb3QgbWlncmF0ZWQgKi8KIAogI2RlZmluZSBFTlFVRVVFX1dBS0VVUAkJMQogI2RlZmluZSBFTlFVRVVFX0hFQUQJCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKaW5kZXggZTk4MTE4OS4uYzZkYjlmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXFsb2NrLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIHNlcXVlbmNlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggZjNhZjE0Ny4uM2U1NDMzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0xMjU2LDYgKzEyNTYsMTEgQEAKIAlza2ItPnRhaWwgKz0gbGVuOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jlc2V0X21hY19sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2ItPm1hY19sZW4gPSBza2ItPm5ldHdvcmtfaGVhZGVyIC0gc2tiLT5tYWNfaGVhZGVyOworfQorCiAjaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl90cmFuc3BvcnRfaGVhZGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcC5oIGIvaW5jbHVkZS9saW51eC9zbXAuaAppbmRleCA3YWQ4MjRkLi44Y2MzOGQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wLmgKQEAgLTg1LDEyICs4NSwxNSBAQAogICogR2VuZXJpYyBhbmQgYXJjaCBoZWxwZXJzCiAgKi8KICNpZmRlZiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMKK3ZvaWQgX19pbml0IGNhbGxfZnVuY3Rpb25faW5pdCh2b2lkKTsKIHZvaWQgZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KHZvaWQpOwogdm9pZCBnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCh2b2lkKTsKIHZvaWQgaXBpX2NhbGxfbG9jayh2b2lkKTsKIHZvaWQgaXBpX2NhbGxfdW5sb2NrKHZvaWQpOwogdm9pZCBpcGlfY2FsbF9sb2NrX2lycSh2b2lkKTsKIHZvaWQgaXBpX2NhbGxfdW5sb2NrX2lycSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY2FsbF9mdW5jdGlvbl9pbml0KHZvaWQpIHsgfQogI2VuZGlmCiAKIC8qCkBAIC0xMzQsNyArMTM3LDcgQEAKICNkZWZpbmUgc21wX3ByZXBhcmVfYm9vdF9jcHUoKQkJCWRvIHt9IHdoaWxlICgwKQogI2RlZmluZSBzbXBfY2FsbF9mdW5jdGlvbl9tYW55KG1hc2ssIGZ1bmMsIGluZm8sIHdhaXQpIFwKIAkJCSh1cF9zbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBpbmZvKSkKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2NhbGxfc2luZ2xlX2RhdGEodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgY2FsbF9mdW5jdGlvbl9pbml0KHZvaWQpIHsgfQogCiBzdGF0aWMgaW5saW5lIGludAogc21wX2NhbGxfZnVuY3Rpb25fYW55KGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBzbXBfY2FsbF9mdW5jX3QgZnVuYywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19rcmI1X2VuY3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3Nfa3JiNV9lbmN0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjIzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3Nfa3JiNV9lbmN0eXBlcy5oCkBAIC0wLDAgKzEsNCBAQAorLyoKKyAqIER1bWIgd2F5IHRvIHNoYXJlIHRoaXMgc3RhdGljIHBpZWNlIG9mIGluZm9ybWF0aW9uIHdpdGggbmZzZAorICovCisjZGVmaW5lIEtSQjVfU1VQUE9SVEVEX0VOQ1RZUEVTICIxOCwxNywxNiwyMywzLDEsMiIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggMzg0ZWI1Zi4uZTcwNTY0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTM1OCw2ICszNTgsNyBAQAogZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgKnN3YXBfdG9rZW5fbW07CiBleHRlcm4gdm9pZCBncmFiX3N3YXBfdG9rZW4oc3RydWN0IG1tX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIF9fcHV0X3N3YXBfdG9rZW4oc3RydWN0IG1tX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGRpc2FibGVfc3dhcF90b2tlbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCiBzdGF0aWMgaW5saW5lIGludCBoYXNfc3dhcF90b2tlbihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKQEAgLTM3MCwxMSArMzcxLDYgQEAKIAkJX19wdXRfc3dhcF90b2tlbihtbSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX3N3YXBfdG9rZW4odm9pZCkKLXsKLQlwdXRfc3dhcF90b2tlbihzd2FwX3Rva2VuX21tKTsKLX0KLQogI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCiBleHRlcm4gdm9pZAogbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN3cF9lbnRyeV90IGVudCwgYm9vbCBzd2Fwb3V0KTsKQEAgLTUwMCw3ICs0OTYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9zd2FwX3Rva2VuKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9zd2FwX3Rva2VuKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2lvdGxiLmggYi9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaAppbmRleCA4YzBlMzQ5Li40NDU3MDJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaApAQCAtMjQsNiArMjQsNyBAQAogCiBleHRlcm4gdm9pZCBzd2lvdGxiX2luaXQoaW50IHZlcmJvc2UpOwogZXh0ZXJuIHZvaWQgc3dpb3RsYl9pbml0X3dpdGhfdGJsKGNoYXIgKnRsYiwgdW5zaWduZWQgbG9uZyBuc2xhYnMsIGludCB2ZXJib3NlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN3aW9sdGJfbnJfdGJsKHZvaWQpOwogCiAvKgogICogRW51bWVyYXRpb24gZm9yIHN5bmMgdGFyZ2V0cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IGMzYWNkYTYuLmUyNjk2ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTE3Nyw5ICsxNzcsNiBAQAogc3RydWN0IHN5c2ZzX2RpcmVudCAqc3lzZnNfZ2V0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKIHZvaWQgc3lzZnNfcHV0KHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKIAotLyogQ2FsbGVkIHRvIGNsZWFyIGEgbnMgdGFnIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIHZhbGlkICovCi12b2lkIHN5c2ZzX2V4aXRfbnMoZW51bSBrb2JqX25zX3R5cGUgdHlwZSwgY29uc3Qgdm9pZCAqdGFnKTsKLQogaW50IF9fbXVzdF9jaGVjayBzeXNmc19pbml0KHZvaWQpOwogCiAjZWxzZSAvKiBDT05GSUdfU1lTRlMgKi8KQEAgLTMzOCwxMCArMzM1LDYgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX2V4aXRfbnMoaW50IHR5cGUsIGNvbnN0IHZvaWQgKnRhZykKLXsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAppbmRleCBiOTFhNDBlLi5mYzgzOWJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCkBAIC02MCw3ICs2MCw3IEBACiAgKiAoaW4gd2hhdGV2ZXIgYXJjaCBzcGVjaWZpYyBtZWFzdXJlbWVudCB1bml0cyByZXR1cm5lZCBieSBub2RlX2Rpc3RhbmNlKCkpCiAgKiB0aGVuIHN3aXRjaCBvbiB6b25lIHJlY2xhaW0gb24gYm9vdC4KICAqLwotI2RlZmluZSBSRUNMQUlNX0RJU1RBTkNFIDIwCisjZGVmaW5lIFJFQ0xBSU1fRElTVEFOQ0UgMzAKICNlbmRpZgogI2lmbmRlZiBQRU5BTFRZX0ZPUl9OT0RFX1dJVEhfQ1BVUwogI2RlZmluZSBQRU5BTFRZX0ZPUl9OT0RFX1dJVEhfQ1BVUwkoMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCmluZGV4IDcxNjkzZDQuLjE3ZGYzNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaApAQCAtNjIsNyArNjIsOSBAQAogCVVTX0ZMQUcoTk9fUkVBRF9ESVNDX0lORk8sCTB4MDAwNDAwMDApCQlcCiAJCS8qIGNhbm5vdCBoYW5kbGUgUkVBRF9ESVNDX0lORk8gKi8JCVwKIAlVU19GTEFHKE5PX1JFQURfQ0FQQUNJVFlfMTYsCTB4MDAwODAwMDApCQlcCi0JCS8qIGNhbm5vdCBoYW5kbGUgUkVBRF9DQVBBQ0lUWV8xNiAqLworCQkvKiBjYW5ub3QgaGFuZGxlIFJFQURfQ0FQQUNJVFlfMTYgKi8JCVwKKwlVU19GTEFHKElOSVRJQUxfUkVBRDEwLAkweDAwMTAwMDAwKQkJCVwKKwkJLyogSW5pdGlhbCBSRUFEKDEwKSAoYW5kIG90aGVycykgbXVzdCBiZSByZXRyaWVkICovCiAKICNkZWZpbmUgVVNfRkxBRyhuYW1lLCB2YWx1ZSkJVVNfRkxfIyNuYW1lID0gdmFsdWUgLAogZW51bSB7IFVTX0RPX0FMTF9GTEFHUyB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91dHMuaCBiL2luY2x1ZGUvbGludXgvdXRzLmgKaW5kZXggNzNlYjFlZC4uNmRkYmQ4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91dHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3V0cy5oCkBAIC05LDcgKzksNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgVVRTX05PREVOQU1FCi0jZGVmaW5lIFVUU19OT0RFTkFNRSAiKG5vbmUpIgkvKiBzZXQgYnkgc2V0aG9zdG5hbWUoKSAqLworI2RlZmluZSBVVFNfTk9ERU5BTUUgQ09ORklHX0RFRkFVTFRfSE9TVE5BTUUgLyogc2V0IGJ5IHNldGhvc3RuYW1lKCkgKi8KICNlbmRpZgogCiAjaWZuZGVmIFVUU19ET01BSU5OQU1FCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKaW5kZXggOTNlOTZmYi4uYzdjNDBmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaApAQCAtMTI4LDggKzEyOCw4IEBACiAJc3RydWN0IG11dGV4ICpsb2NrOwogfTsKIAotI2RlZmluZSBtZWRpYV9lbnRpdHlfdG9fdmlkZW9fZGV2aWNlKGVudGl0eSkgXAotCWNvbnRhaW5lcl9vZihlbnRpdHksIHN0cnVjdCB2aWRlb19kZXZpY2UsIGVudGl0eSkKKyNkZWZpbmUgbWVkaWFfZW50aXR5X3RvX3ZpZGVvX2RldmljZShfX2UpIFwKKwljb250YWluZXJfb2YoX19lLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBlbnRpdHkpCiAvKiBkZXYgdG8gdmlkZW8tZGV2aWNlICovCiAjZGVmaW5lIHRvX3ZpZGVvX2RldmljZShjZCkgY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBkZXYpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaAppbmRleCAyYmY5ZWQ5Li5hZWY0MzBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCkBAIC0zNSw4ICszNSwxMSBAQAogI2RlZmluZSBORVRERVZfSEFTSEVOVFJJRVMgKDEgPDwgTkVUREVWX0hBU0hCSVRTKQogCiBzdHJ1Y3QgbmV0IHsKKwlhdG9taWNfdAkJcGFzc2l2ZTsJLyogVG8gZGVjaWRlZCB3aGVuIHRoZSBuZXR3b3JrCisJCQkJCQkgKiBuYW1lc3BhY2Ugc2hvdWxkIGJlIGZyZWVkLgorCQkJCQkJICovCiAJYXRvbWljX3QJCWNvdW50OwkJLyogVG8gZGVjaWRlZCB3aGVuIHRoZSBuZXR3b3JrCi0JCQkJCQkgKiAgbmFtZXNwYWNlIHNob3VsZCBiZSBmcmVlZC4KKwkJCQkJCSAqICBuYW1lc3BhY2Ugc2hvdWxkIGJlIHNodXQgZG93bi4KIAkJCQkJCSAqLwogI2lmZGVmIE5FVE5TX1JFRkNOVF9ERUJVRwogCWF0b21pY190CQl1c2VfY291bnQ7CS8qIFRvIHRyYWNrIHJlZmVyZW5jZXMgd2UKQEAgLTE1NCw2ICsxNTcsOSBAQAogewogCXJldHVybiBuZXQxID09IG5ldDI7CiB9CisKK2V4dGVybiB2b2lkIG5ldF9kcm9wX25zKHZvaWQgKik7CisKICNlbHNlCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqZ2V0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCkBAIC0xNzUsNiArMTgxLDggQEAKIHsKIAlyZXR1cm4gMTsKIH0KKworI2RlZmluZSBuZXRfZHJvcF9ucyBOVUxMCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKaW5kZXggYzdjNDJlNy4uNWQ0ZjhlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApAQCAtMzA3LDYgKzMwNywxMiBAQAogCXJldHVybiB0ZXN0X2JpdChJUFNfVU5UUkFDS0VEX0JJVCwgJmN0LT5zdGF0dXMpOwogfQogCisvKiBQYWNrZXQgaXMgcmVjZWl2ZWQgZnJvbSBsb29wYmFjayAqLworc3RhdGljIGlubGluZSBib29sIG5mX2lzX2xvb3BiYWNrX3BhY2tldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2ItPmRldiAmJiBza2ItPnNrYl9paWYgJiYgc2tiLT5kZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLOworfQorCiBleHRlcm4gaW50IG5mX2Nvbm50cmFja19zZXRfaGFzaHNpemUoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CiBleHRlcm4gdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX21heDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2lycS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvaXJxLmgKaW5kZXggYWUwNDVjYS4uMWMwOTgyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvaXJxLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvaXJxLmgKQEAgLTIwLDcgKzIwLDggQEAKIAkJCSBzb2Z0aXJxX25hbWUoQkxPQ0tfSU9QT0xMKSwJXAogCQkJIHNvZnRpcnFfbmFtZShUQVNLTEVUKSwJCVwKIAkJCSBzb2Z0aXJxX25hbWUoU0NIRUQpLAkJXAotCQkJIHNvZnRpcnFfbmFtZShIUlRJTUVSKSkKKwkJCSBzb2Z0aXJxX25hbWUoSFJUSU1FUiksCQlcCisJCQkgc29mdGlycV9uYW1lKFJDVSkpCiAKIC8qKgogICogaXJxX2hhbmRsZXJfZW50cnkgLSBjYWxsZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBpcnEgYWN0aW9uIGhhbmRsZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgKaW5kZXggZWE0MjJhYS4uYjJjMzNiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgKQEAgLTYsNiArNiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KICNpbmNsdWRlICJnZnBmbGFncy5oIgogCiAjZGVmaW5lIFJFQ0xBSU1fV0JfQU5PTgkJMHgwMDAxdQpAQCAtMzEwLDYgKzMxMiw4NyBAQAogCQlzaG93X3JlY2xhaW1fZmxhZ3MoX19lbnRyeS0+cmVjbGFpbV9mbGFncykpCiApOwogCitUUkFDRV9FVkVOVChyZXBsYWNlX3N3YXBfdG9rZW4sCisJVFBfUFJPVE8oc3RydWN0IG1tX3N0cnVjdCAqb2xkX21tLAorCQkgc3RydWN0IG1tX3N0cnVjdCAqbmV3X21tKSwKKworCVRQX0FSR1Mob2xkX21tLCBuZXdfbW0pLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3QgbW1fc3RydWN0KiwJb2xkX21tKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwJCW9sZF9wcmlvKQorCQlfX2ZpZWxkKHN0cnVjdCBtbV9zdHJ1Y3QqLAluZXdfbW0pCisJCV9fZmllbGQodW5zaWduZWQgaW50LAkJbmV3X3ByaW8pCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5vbGRfbW0gICA9IG9sZF9tbTsKKwkJX19lbnRyeS0+b2xkX3ByaW8gPSBvbGRfbW0gPyBvbGRfbW0tPnRva2VuX3ByaW9yaXR5IDogMDsKKwkJX19lbnRyeS0+bmV3X21tICAgPSBuZXdfbW07CisJCV9fZW50cnktPm5ld19wcmlvID0gbmV3X21tLT50b2tlbl9wcmlvcml0eTsKKwkpLAorCisJVFBfcHJpbnRrKCJvbGRfdG9rZW5fbW09JXAgb2xkX3ByaW89JXUgbmV3X3Rva2VuX21tPSVwIG5ld19wcmlvPSV1IiwKKwkJICBfX2VudHJ5LT5vbGRfbW0sIF9fZW50cnktPm9sZF9wcmlvLAorCQkgIF9fZW50cnktPm5ld19tbSwgX19lbnRyeS0+bmV3X3ByaW8pCispOworCitERUNMQVJFX0VWRU5UX0NMQVNTKHB1dF9zd2FwX3Rva2VuX3RlbXBsYXRlLAorCVRQX1BST1RPKHN0cnVjdCBtbV9zdHJ1Y3QgKnN3YXBfdG9rZW5fbW0pLAorCisJVFBfQVJHUyhzd2FwX3Rva2VuX21tKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoc3RydWN0IG1tX3N0cnVjdCosIHN3YXBfdG9rZW5fbW0pCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5zd2FwX3Rva2VuX21tID0gc3dhcF90b2tlbl9tbTsKKwkpLAorCisJVFBfcHJpbnRrKCJ0b2tlbl9tbT0lcCIsIF9fZW50cnktPnN3YXBfdG9rZW5fbW0pCispOworCitERUZJTkVfRVZFTlQocHV0X3N3YXBfdG9rZW5fdGVtcGxhdGUsIHB1dF9zd2FwX3Rva2VuLAorCVRQX1BST1RPKHN0cnVjdCBtbV9zdHJ1Y3QgKnN3YXBfdG9rZW5fbW0pLAorCVRQX0FSR1Moc3dhcF90b2tlbl9tbSkKKyk7CisKK0RFRklORV9FVkVOVF9DT05ESVRJT04ocHV0X3N3YXBfdG9rZW5fdGVtcGxhdGUsIGRpc2FibGVfc3dhcF90b2tlbiwKKwlUUF9QUk9UTyhzdHJ1Y3QgbW1fc3RydWN0ICpzd2FwX3Rva2VuX21tKSwKKwlUUF9BUkdTKHN3YXBfdG9rZW5fbW0pLAorCVRQX0NPTkRJVElPTihzd2FwX3Rva2VuX21tICE9IE5VTEwpCispOworCitUUkFDRV9FVkVOVF9DT05ESVRJT04odXBkYXRlX3N3YXBfdG9rZW5fcHJpb3JpdHksCisJVFBfUFJPVE8oc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCSB1bnNpZ25lZCBpbnQgb2xkX3ByaW8sCisJCSBzdHJ1Y3QgbW1fc3RydWN0ICpzd2FwX3Rva2VuX21tKSwKKworCVRQX0FSR1MobW0sIG9sZF9wcmlvLCBzd2FwX3Rva2VuX21tKSwKKworCVRQX0NPTkRJVElPTihtbS0+dG9rZW5fcHJpb3JpdHkgIT0gb2xkX3ByaW8pLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3QgbW1fc3RydWN0KiwgbW0pCisJCV9fZmllbGQodW5zaWduZWQgaW50LCBvbGRfcHJpbykKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIG5ld19wcmlvKQorCQlfX2ZpZWxkKHN0cnVjdCBtbV9zdHJ1Y3QqLCBzd2FwX3Rva2VuX21tKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgc3dhcF90b2tlbl9wcmlvKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+bW0JCT0gbW07CisJCV9fZW50cnktPm9sZF9wcmlvCT0gb2xkX3ByaW87CisJCV9fZW50cnktPm5ld19wcmlvCT0gbW0tPnRva2VuX3ByaW9yaXR5OworCQlfX2VudHJ5LT5zd2FwX3Rva2VuX21tCT0gc3dhcF90b2tlbl9tbTsKKwkJX19lbnRyeS0+c3dhcF90b2tlbl9wcmlvID0gc3dhcF90b2tlbl9tbSA/IHN3YXBfdG9rZW5fbW0tPnRva2VuX3ByaW9yaXR5IDogMDsKKwkpLAorCisJVFBfcHJpbnRrKCJtbT0lcCBvbGRfcHJpbz0ldSBuZXdfcHJpbz0ldSBzd2FwX3Rva2VuX21tPSVwIHRva2VuX3ByaW89JXUiLAorCQkgIF9fZW50cnktPm1tLCBfX2VudHJ5LT5vbGRfcHJpbywgX19lbnRyeS0+bmV3X3ByaW8sCisJCSAgX19lbnRyeS0+c3dhcF90b2tlbl9tbSwgX19lbnRyeS0+c3dhcF90b2tlbl9wcmlvKQorKTsKIAogI2VuZGlmIC8qIF9UUkFDRV9WTVNDQU5fSCAqLwogCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggZWJhZmFjNC4uNDEyYzIxYiAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMTksNyArMTksNiBAQAogY29uZmlnIENPTlNUUlVDVE9SUwogCWJvb2wKIAlkZXBlbmRzIG9uICFVTUwKLQlkZWZhdWx0IHkKIAogY29uZmlnIEhBVkVfSVJRX1dPUksKIAlib29sCkBAIC0yMDQsNiArMjAzLDE1IEBACiAKIGVuZGNob2ljZQogCitjb25maWcgREVGQVVMVF9IT1NUTkFNRQorCXN0cmluZyAiRGVmYXVsdCBob3N0bmFtZSIKKwlkZWZhdWx0ICIobm9uZSkiCisJaGVscAorCSAgVGhpcyBvcHRpb24gZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBzeXN0ZW0gaG9zdG5hbWUgYmVmb3JlIHVzZXJzcGFjZQorCSAgY2FsbHMgc2V0aG9zdG5hbWUoMikuIFRoZSBrZXJuZWwgdHJhZGl0aW9uYWxseSB1c2VzICIobm9uZSkiIGhlcmUsCisJICBidXQgeW91IG1heSB3aXNoIHRvIHVzZSBhIGRpZmZlcmVudCBkZWZhdWx0IGhlcmUgdG8gbWFrZSBhIG1pbmltYWwKKwkgIHN5c3RlbSBtb3JlIHVzYWJsZSB3aXRoIGxlc3MgY29uZmlndXJhdGlvbi4KKwogY29uZmlnIFNXQVAKIAlib29sICJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcCkiCiAJZGVwZW5kcyBvbiBNTVUgJiYgQkxPQ0sKZGlmZiAtLWdpdCBhL2luaXQvY2FsaWJyYXRlLmMgYi9pbml0L2NhbGlicmF0ZS5jCmluZGV4IGNmZDcwMDAuLjI1NjhkMjIgMTAwNjQ0Ci0tLSBhL2luaXQvY2FsaWJyYXRlLmMKKysrIGIvaW5pdC9jYWxpYnJhdGUuYwpAQCAtOTMsOSArOTMsNiBAQAogCQkgKiBJZiB0aGUgdXBwZXIgbGltaXQgYW5kIGxvd2VyIGxpbWl0IG9mIHRoZSB0aW1lcl9yYXRlIGlzCiAJCSAqID49IDEyLjUlIGFwYXJ0LCByZWRvIGNhbGlicmF0aW9uLgogCQkgKi8KLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhbGlicmF0ZV9kZWxheV9kaXJlY3QoKSB0aW1lcl9yYXRlX21heD0lbHUgIgotCQkJICAgICJ0aW1lcl9yYXRlX21pbj0lbHUgcHJlX3N0YXJ0PSVsdSBwcmVfZW5kPSVsdVxuIiwKLQkJCSAgdGltZXJfcmF0ZV9tYXgsIHRpbWVyX3JhdGVfbWluLCBwcmVfc3RhcnQsIHByZV9lbmQpOwogCQlpZiAoc3RhcnQgPj0gcG9zdF9lbmQpCiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgImNhbGlicmF0ZV9kZWxheV9kaXJlY3QoKSBpZ25vcmluZyAiCiAJCQkJCSJ0aW1lcl9yYXRlIGFzIHdlIGhhZCBhIFRTQyB3cmFwIGFyb3VuZCIKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggY2FmYmE2Ny4uZDcyMTFmYSAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTU0Miw2ICs1NDIsNyBAQAogCXRpbWVrZWVwaW5nX2luaXQoKTsKIAl0aW1lX2luaXQoKTsKIAlwcm9maWxlX2luaXQoKTsKKwljYWxsX2Z1bmN0aW9uX2luaXQoKTsKIAlpZiAoIWlycXNfZGlzYWJsZWQoKSkKIAkJcHJpbnRrKEtFUk5fQ1JJVCAic3RhcnRfa2VybmVsKCk6IGJ1ZzogaW50ZXJydXB0cyB3ZXJlICIKIAkJCQkgImVuYWJsZWQgZWFybHlcbiIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwppbmRleCBkODYzYjNjLi45ZWZlNzEwIDEwMDY0NAotLS0gYS9rZXJuZWwvZXZlbnRzL2NvcmUuYworKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwpAQCAtNzQwMiwyNiArNzQwMiwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX2Nncm91cF9tb3ZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyB2b2lkCitwZXJmX2Nncm91cF9hdHRhY2hfdGFzayhzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJdGFza19mdW5jdGlvbl9jYWxsKHRhc2ssIF9fcGVyZl9jZ3JvdXBfbW92ZSwgdGFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfY2dyb3VwX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnAsCi0JCXN0cnVjdCBjZ3JvdXAgKm9sZF9jZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCWJvb2wgdGhyZWFkZ3JvdXApCi17Ci0JcGVyZl9jZ3JvdXBfbW92ZSh0YXNrKTsKLQlpZiAodGhyZWFkZ3JvdXApIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICpjOwotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGMsICZ0YXNrLT50aHJlYWRfZ3JvdXAsIHRocmVhZF9ncm91cCkgewotCQkJcGVyZl9jZ3JvdXBfbW92ZShjKTsKLQkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHBlcmZfY2dyb3VwX2V4aXQoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCQlzdHJ1Y3QgY2dyb3VwICpvbGRfY2dycCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewpAQCAtNzQzMyw3ICs3NDE5LDcgQEAKIAlpZiAoISh0YXNrLT5mbGFncyAmIFBGX0VYSVRJTkcpKQogCQlyZXR1cm47CiAKLQlwZXJmX2Nncm91cF9tb3ZlKHRhc2spOworCXBlcmZfY2dyb3VwX2F0dGFjaF90YXNrKGNncnAsIHRhc2spOwogfQogCiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBwZXJmX3N1YnN5cyA9IHsKQEAgLTc0NDIsNiArNzQyOCw2IEBACiAJLmNyZWF0ZQkJPSBwZXJmX2Nncm91cF9jcmVhdGUsCiAJLmRlc3Ryb3kJPSBwZXJmX2Nncm91cF9kZXN0cm95LAogCS5leGl0CQk9IHBlcmZfY2dyb3VwX2V4aXQsCi0JLmF0dGFjaAkJPSBwZXJmX2Nncm91cF9hdHRhY2gsCisJLmF0dGFjaF90YXNrCT0gcGVyZl9jZ3JvdXBfYXR0YWNoX3Rhc2ssCiB9OwogI2VuZGlmIC8qIENPTkZJR19DR1JPVVBfUEVSRiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggMjBhNDA2NC4uZjJiMzIxYiAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC01NjEsMjkgKzU2MSwyOCBAQAogCiAjaWZkZWYgQ09ORklHX01NX09XTkVSCiAvKgotICogVGFzayBwIGlzIGV4aXRpbmcgYW5kIGl0IG93bmVkIG1tLCBsZXRzIGZpbmQgYSBuZXcgb3duZXIgZm9yIGl0CisgKiBBIHRhc2sgaXMgZXhpdGluZy4gICBJZiBpdCBvd25lZCB0aGlzIG1tLCBmaW5kIGEgbmV3IG93bmVyIGZvciB0aGUgbW0uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1tbV9uZWVkX25ld19vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCS8qCi0JICogSWYgdGhlcmUgYXJlIG90aGVyIHVzZXJzIG9mIHRoZSBtbSBhbmQgdGhlIG93bmVyICh1cykgaXMgZXhpdGluZwotCSAqIHdlIG5lZWQgdG8gZmluZCBhIG5ldyBvd25lciB0byB0YWtlIG9uIHRoZSByZXNwb25zaWJpbGl0eS4KLQkgKi8KLQlpZiAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPD0gMSkKLQkJcmV0dXJuIDA7Ci0JaWYgKG1tLT5vd25lciAhPSBwKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQogdm9pZCBtbV91cGRhdGVfbmV4dF9vd25lcihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmMsICpnLCAqcCA9IGN1cnJlbnQ7CiAKIHJldHJ5OgotCWlmICghbW1fbmVlZF9uZXdfb3duZXIobW0sIHApKQorCS8qCisJICogSWYgdGhlIGV4aXRpbmcgb3IgZXhlY2luZyB0YXNrIGlzIG5vdCB0aGUgb3duZXIsIGl0J3MKKwkgKiBzb21lb25lIGVsc2UncyBwcm9ibGVtLgorCSAqLworCWlmIChtbS0+b3duZXIgIT0gcCkKIAkJcmV0dXJuOworCS8qCisJICogVGhlIGN1cnJlbnQgb3duZXIgaXMgZXhpdGluZy9leGVjaW5nIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIKKwkgKiBjYW5kaWRhdGVzLiAgRG8gbm90IGxlYXZlIHRoZSBtbSBwb2ludGluZyB0byBhIHBvc3NpYmx5CisJICogZnJlZWQgdGFzayBzdHJ1Y3R1cmUuCisJICovCisJaWYgKGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpIDw9IDEpIHsKKwkJbW0tPm93bmVyID0gTlVMTDsKKwkJcmV0dXJuOworCX0KIAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9nY292L0tjb25maWcgYi9rZXJuZWwvZ2Nvdi9LY29uZmlnCmluZGV4IGI4Y2FkZjcuLjViZjkyNGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9nY292L0tjb25maWcKKysrIGIva2VybmVsL2djb3YvS2NvbmZpZwpAQCAtMiw3ICsyLDggQEAKIAogY29uZmlnIEdDT1ZfS0VSTkVMCiAJYm9vbCAiRW5hYmxlIGdjb3YtYmFzZWQga2VybmVsIHByb2ZpbGluZyIKLQlkZXBlbmRzIG9uIERFQlVHX0ZTICYmIENPTlNUUlVDVE9SUworCWRlcGVuZHMgb24gREVCVUdfRlMKKwlzZWxlY3QgQ09OU1RSVUNUT1JTCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCVRoaXMgb3B0aW9uIGVuYWJsZXMgZ2Nvdi1iYXNlZCBjb2RlIHByb2ZpbGluZyAoZS5nLiBmb3IgY29kZSBjb3ZlcmFnZQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9oYW5kbGUuYyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKaW5kZXggOTBjYjU1Zi4uNDcwZDA4YyAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9oYW5kbGUuYworKysgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCkBAIC0xMzMsMTIgKzEzMyw2IEBACiAJCXN3aXRjaCAocmVzKSB7CiAJCWNhc2UgSVJRX1dBS0VfVEhSRUFEOgogCQkJLyoKLQkJCSAqIFNldCByZXN1bHQgdG8gaGFuZGxlZCBzbyB0aGUgc3B1cmlvdXMgY2hlY2sKLQkJCSAqIGRvZXMgbm90IHRyaWdnZXIuCi0JCQkgKi8KLQkJCXJlcyA9IElSUV9IQU5ETEVEOwotCi0JCQkvKgogCQkJICogQ2F0Y2ggZHJpdmVycyB3aGljaCByZXR1cm4gV0FLRV9USFJFQUQgYnV0CiAJCQkgKiBkaWQgbm90IHNldCB1cCBhIHRocmVhZCBmdW5jdGlvbgogCQkJICovCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2lycWRlc2MuYyBiL2tlcm5lbC9pcnEvaXJxZGVzYy5jCmluZGV4IDg4NmU4MDMuLjRjNjBhNTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaXJxZGVzYy5jCisrKyBiL2tlcm5lbC9pcnEvaXJxZGVzYy5jCkBAIC0yNTcsMTMgKzI1NywxMSBAQAogCWNvdW50ID0gQVJSQVlfU0laRShpcnFfZGVzYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlkZXNjW2ldLmlycV9kYXRhLmlycSA9IGk7Ci0JCWRlc2NbaV0uaXJxX2RhdGEuY2hpcCA9ICZub19pcnFfY2hpcDsKIAkJZGVzY1tpXS5rc3RhdF9pcnFzID0gYWxsb2NfcGVyY3B1KHVuc2lnbmVkIGludCk7Ci0JCWlycV9zZXR0aW5nc19jbHJfYW5kX3NldChkZXNjLCB+MCwgX0lSUV9ERUZBVUxUX0lOSVRfRkxBR1MpOwotCQlhbGxvY19tYXNrcyhkZXNjICsgaSwgR0ZQX0tFUk5FTCwgbm9kZSk7Ci0JCWRlc2Nfc21wX2luaXQoZGVzYyArIGksIG5vZGUpOworCQlhbGxvY19tYXNrcygmZGVzY1tpXSwgR0ZQX0tFUk5FTCwgbm9kZSk7CisJCXJhd19zcGluX2xvY2tfaW5pdCgmZGVzY1tpXS5sb2NrKTsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmRlc2NbaV0ubG9jaywgJmlycV9kZXNjX2xvY2tfY2xhc3MpOworCQlkZXNjX3NldF9kZWZhdWx0cyhpLCAmZGVzY1tpXSwgbm9kZSk7CiAJfQogCXJldHVybiBhcmNoX2Vhcmx5X2lycV9pbml0KCk7CiB9CkBAIC0zNDYsNiArMzQ0LDEyIEBACiAJaWYgKCFjbnQpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGlycSA+PSAwKSB7CisJCWlmIChmcm9tID4gaXJxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWZyb20gPSBpcnE7CisJfQorCiAJbXV0ZXhfbG9jaygmc3BhcnNlX2lycV9sb2NrKTsKIAogCXN0YXJ0ID0gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWEoYWxsb2NhdGVkX2lycXMsIElSUV9CSVRNQVBfQklUUywKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IGY3Y2UwMDIuLjBhNzg0MGFlIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTQ5MSw2ICs0OTEsOSBAQAogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9nZXRfZGVzY19idXNsb2NrKGlycSwgJmZsYWdzKTsKIAlpbnQgcmV0ID0gMDsKIAorCWlmICghZGVzYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiB3YWtldXAtY2FwYWJsZSBpcnFzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBkcml2ZXJzIHRoYXQKIAkgKiBkb24ndCBuZWVkIHRvIGhhdmUgdGhlIHNhbWUgc2xlZXAgbW9kZSBiZWhhdmlvcnMuCiAJICovCkBAIC03MjMsMTMgKzcyNiwxNiBAQAogICogY29udGV4dC4gU28gd2UgbmVlZCB0byBkaXNhYmxlIGJoIGhlcmUgdG8gYXZvaWQgZGVhZGxvY2tzIGFuZCBvdGhlcgogICogc2lkZSBlZmZlY3RzLgogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGlycXJldHVybl90CiBpcnFfZm9yY2VkX3RocmVhZF9mbihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKIHsKKwlpcnFyZXR1cm5fdCByZXQ7CisKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JYWN0aW9uLT50aHJlYWRfZm4oYWN0aW9uLT5pcnEsIGFjdGlvbi0+ZGV2X2lkKTsKKwlyZXQgPSBhY3Rpb24tPnRocmVhZF9mbihhY3Rpb24tPmlycSwgYWN0aW9uLT5kZXZfaWQpOwogCWlycV9maW5hbGl6ZV9vbmVzaG90KGRlc2MsIGFjdGlvbiwgZmFsc2UpOwogCWxvY2FsX2JoX2VuYWJsZSgpOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC03MzcsMTAgKzc0MywxNCBAQAogICogcHJlZW10aWJsZSAtIG1hbnkgb2YgdGhlbSBuZWVkIHRvIHNsZWVwIGFuZCB3YWl0IGZvciBzbG93IGJ1c3NlcyB0bwogICogY29tcGxldGUuCiAgKi8KLXN0YXRpYyB2b2lkIGlycV90aHJlYWRfZm4oc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pCitzdGF0aWMgaXJxcmV0dXJuX3QgaXJxX3RocmVhZF9mbihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKIHsKLQlhY3Rpb24tPnRocmVhZF9mbihhY3Rpb24tPmlycSwgYWN0aW9uLT5kZXZfaWQpOworCWlycXJldHVybl90IHJldDsKKworCXJldCA9IGFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CiAJaXJxX2ZpbmFsaXplX29uZXNob3QoZGVzYywgYWN0aW9uLCBmYWxzZSk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTc1Myw3ICs3NjMsOCBAQAogCX07CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uID0gZGF0YTsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhhY3Rpb24tPmlycSk7Ci0Jdm9pZCAoKmhhbmRsZXJfZm4pKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKKwlpcnFyZXR1cm5fdCAoKmhhbmRsZXJfZm4pKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbik7CiAJaW50IHdha2U7CiAKIAlpZiAoZm9yY2VfaXJxdGhyZWFkcyAmIHRlc3RfYml0KElSUVRGX0ZPUkNFRF9USFJFQUQsCkBAIC03ODMsOCArNzk0LDEyIEBACiAJCQlkZXNjLT5pc3RhdGUgfD0gSVJRU19QRU5ESU5HOwogCQkJcmF3X3NwaW5fdW5sb2NrX2lycSgmZGVzYy0+bG9jayk7CiAJCX0gZWxzZSB7CisJCQlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OworCiAJCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKLQkJCWhhbmRsZXJfZm4oZGVzYywgYWN0aW9uKTsKKwkJCWFjdGlvbl9yZXQgPSBoYW5kbGVyX2ZuKGRlc2MsIGFjdGlvbik7CisJCQlpZiAoIW5vaXJxZGVidWcpCisJCQkJbm90ZV9pbnRlcnJ1cHQoYWN0aW9uLT5pcnEsIGRlc2MsIGFjdGlvbl9yZXQpOwogCQl9CiAKIAkJd2FrZSA9IGF0b21pY19kZWNfYW5kX3Rlc3QoJmRlc2MtPnRocmVhZHNfYWN0aXZlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwppbmRleCBkZmJkNTUwLi5hYTU3ZDVkIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKKysrIGIva2VybmVsL2lycS9zcHVyaW91cy5jCkBAIC0xNjcsNiArMTY3LDEzIEBACiAJCSAgamlmZmllcyArIFBPTExfU1BVUklPVVNfSVJRX0lOVEVSVkFMKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmFkX2FjdGlvbl9yZXQoaXJxcmV0dXJuX3QgYWN0aW9uX3JldCkKK3sKKwlpZiAobGlrZWx5KGFjdGlvbl9yZXQgPD0gKElSUV9IQU5ETEVEIHwgSVJRX1dBS0VfVEhSRUFEKSkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCiAvKgogICogSWYgOTksOTAwIG9mIHRoZSBwcmV2aW91cyAxMDAsMDAwIGludGVycnVwdHMgaGF2ZSBub3QgYmVlbiBoYW5kbGVkCiAgKiB0aGVuIGFzc3VtZSB0aGF0IHRoZSBJUlEgaXMgc3R1Y2sgaW4gc29tZSBtYW5uZXIuIERyb3AgYSBkaWFnbm9zdGljCkBAIC0xODIsNyArMTg5LDcgQEAKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChhY3Rpb25fcmV0ICE9IElSUV9IQU5ETEVEICYmIGFjdGlvbl9yZXQgIT0gSVJRX05PTkUpIHsKKwlpZiAoYmFkX2FjdGlvbl9yZXQoYWN0aW9uX3JldCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpcnEgZXZlbnQgJWQ6IGJvZ3VzIHJldHVybiB2YWx1ZSAleFxuIiwKIAkJCQlpcnEsIGFjdGlvbl9yZXQpOwogCX0gZWxzZSB7CkBAIC0yMDEsMTAgKzIwOCwxMSBAQAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAl3aGlsZSAoYWN0aW9uKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiWzwlcD5dIiwgYWN0aW9uLT5oYW5kbGVyKTsKLQkJcHJpbnRfc3ltYm9sKCIgKCVzKSIsCi0JCQkodW5zaWduZWQgbG9uZylhY3Rpb24tPmhhbmRsZXIpOwotCQlwcmludGsoIlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiWzwlcD5dICVwZiIsIGFjdGlvbi0+aGFuZGxlciwgYWN0aW9uLT5oYW5kbGVyKTsKKwkJaWYgKGFjdGlvbi0+dGhyZWFkX2ZuKQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiIHRocmVhZGVkIFs8JXA+XSAlcGYiLAorCQkJCQlhY3Rpb24tPnRocmVhZF9mbiwgYWN0aW9uLT50aHJlYWRfZm4pOworCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCQlhY3Rpb24gPSBhY3Rpb24tPm5leHQ7CiAJfQogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CkBAIC0yNjIsNyArMjcwLDE2IEBACiAJaWYgKGRlc2MtPmlzdGF0ZSAmIElSUVNfUE9MTF9JTlBST0dSRVNTKQogCQlyZXR1cm47CiAKLQlpZiAodW5saWtlbHkoYWN0aW9uX3JldCAhPSBJUlFfSEFORExFRCkpIHsKKwkvKiB3ZSBnZXQgaGVyZSBhZ2FpbiB2aWEgdGhlIHRocmVhZGVkIGhhbmRsZXIgKi8KKwlpZiAoYWN0aW9uX3JldCA9PSBJUlFfV0FLRV9USFJFQUQpCisJCXJldHVybjsKKworCWlmIChiYWRfYWN0aW9uX3JldChhY3Rpb25fcmV0KSkgeworCQlyZXBvcnRfYmFkX2lycShpcnEsIGRlc2MsIGFjdGlvbl9yZXQpOworCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KGFjdGlvbl9yZXQgPT0gSVJRX05PTkUpKSB7CiAJCS8qCiAJCSAqIElmIHdlIGFyZSBzZWVpbmcgb25seSB0aGUgb2RkIHNwdXJpb3VzIElSUSBjYXVzZWQgYnkKIAkJICogYnVzIGFzeW5jaHJvbmljaXR5IHRoZW4gZG9uJ3QgZXZlbnR1YWxseSB0cmlnZ2VyIGFuIGVycm9yLApAQCAtMjc0LDggKzI5MSw2IEBACiAJCWVsc2UKIAkJCWRlc2MtPmlycXNfdW5oYW5kbGVkKys7CiAJCWRlc2MtPmxhc3RfdW5oYW5kbGVkID0gamlmZmllczsKLQkJaWYgKHVubGlrZWx5KGFjdGlvbl9yZXQgIT0gSVJRX05PTkUpKQotCQkJcmVwb3J0X2JhZF9pcnEoaXJxLCBkZXNjLCBhY3Rpb25fcmV0KTsKIAl9CiAKIAlpZiAodW5saWtlbHkodHJ5X21pc3JvdXRlZF9pcnEoaXJxLCBkZXNjLCBhY3Rpb25fcmV0KSkpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IGFkNmE4MWMuLjQ3NjEzZGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtMTU2LDEyICsxNTYsNiBAQAogCSAqLwogCXNldF91c2VyX25pY2UoY3VycmVudCwgMCk7CiAKLQlpZiAoc3ViX2luZm8tPmluaXQpIHsKLQkJcmV0dmFsID0gc3ViX2luZm8tPmluaXQoc3ViX2luZm8pOwotCQlpZiAocmV0dmFsKQotCQkJZ290byBmYWlsOwotCX0KLQogCXJldHZhbCA9IC1FTk9NRU07CiAJbmV3ID0gcHJlcGFyZV9rZXJuZWxfY3JlZChjdXJyZW50KTsKIAlpZiAoIW5ldykKQEAgLTE3Myw2ICsxNjcsMTQgQEAKIAkJCQkJICAgICBuZXctPmNhcF9pbmhlcml0YWJsZSk7CiAJc3Bpbl91bmxvY2soJnVtaF9zeXNjdGxfbG9jayk7CiAKKwlpZiAoc3ViX2luZm8tPmluaXQpIHsKKwkJcmV0dmFsID0gc3ViX2luZm8tPmluaXQoc3ViX2luZm8sIG5ldyk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWFib3J0X2NyZWRzKG5ldyk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKIAljb21taXRfY3JlZHMobmV3KTsKIAogCXJldHZhbCA9IGtlcm5lbF9leGVjdmUoc3ViX2luZm8tPnBhdGgsCkBAIC0zODgsNyArMzkwLDcgQEAKICAqIGNvbnRleHQgaW4gd2hpY2ggY2FsbF91c2VybW9kZWhlbHBlcl9leGVjIGlzIGNhbGxlZC4KICAqLwogdm9pZCBjYWxsX3VzZXJtb2RlaGVscGVyX3NldGZucyhzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvLAotCQkgICAgaW50ICgqaW5pdCkoc3RydWN0IHN1YnByb2Nlc3NfaW5mbyAqaW5mbyksCisJCSAgICBpbnQgKCppbml0KShzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvLCBzdHJ1Y3QgY3JlZCAqbmV3KSwKIAkJICAgIHZvaWQgKCpjbGVhbnVwKShzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICppbmZvKSwKIAkJICAgIHZvaWQgKmRhdGEpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCA2MzQzN2QwLi4yOThjOTI3IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTM0MjYsNyArMzQyNiw3IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAodW5saWtlbHkoY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24pKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMTsgLyogYXZvaWQgZmFsc2UgbmVnYXRpdmUgbG9ja2RlcF9hc3NlcnRfaGVsZCgpICovCiAKIAlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWNoZWNrX2ZsYWdzKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmMgYi9rZXJuZWwvcmN1dHJlZS5jCmluZGV4IDg5NDE5ZmYuLjdlNTlmZmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmMKKysrIGIva2VybmVsL3JjdXRyZWUuYwpAQCAtODcsNiArODcsOCBAQAogaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChyY3Vfc2NoZWR1bGVyX2FjdGl2ZSk7CiAKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisKIC8qCiAgKiBDb250cm9sIHZhcmlhYmxlcyBmb3IgcGVyLUNQVSBhbmQgcGVyLXJjdV9ub2RlIGt0aHJlYWRzLiAgVGhlc2UKICAqIGhhbmRsZSBhbGwgZmxhdm9ycyBvZiBSQ1UuCkBAIC05OCw4ICsxMDAsMTEgQEAKIERFRklORV9QRVJfQ1BVKGNoYXIsIHJjdV9jcHVfaGFzX3dvcmspOwogc3RhdGljIGNoYXIgcmN1X2t0aHJlYWRzX3NwYXduYWJsZTsKIAorI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCisKIHN0YXRpYyB2b2lkIHJjdV9ub2RlX2t0aHJlYWRfc2V0YWZmaW5pdHkoc3RydWN0IHJjdV9ub2RlICpybnAsIGludCBvdXRnb2luZ2NwdSk7Ci1zdGF0aWMgdm9pZCBpbnZva2VfcmN1X2NwdV9rdGhyZWFkKHZvaWQpOworc3RhdGljIHZvaWQgaW52b2tlX3JjdV9jb3JlKHZvaWQpOworc3RhdGljIHZvaWQgaW52b2tlX3JjdV9jYWxsYmFja3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CiAKICNkZWZpbmUgUkNVX0tUSFJFQURfUFJJTyAxCS8qIFJUIHByaW9yaXR5IGZvciBwZXItQ1BVIGt0aHJlYWRzLiAqLwogCkBAIC0xMDg4LDE0ICsxMDkzLDggQEAKIAlpbnQgbmVlZF9yZXBvcnQgPSAwOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIocnNwLT5yZGEsIGNwdSk7CiAJc3RydWN0IHJjdV9ub2RlICpybnA7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCi0JLyogU3RvcCB0aGUgQ1BVJ3Mga3RocmVhZC4gKi8KLQl0ID0gcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KTsKLQlpZiAodCAhPSBOVUxMKSB7Ci0JCXBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSkgPSBOVUxMOwotCQlrdGhyZWFkX3N0b3AodCk7Ci0JfQorCXJjdV9zdG9wX2NwdV9rdGhyZWFkKGNwdSk7CiAKIAkvKiBFeGNsdWRlIGFueSBhdHRlbXB0cyB0byBzdGFydCBhIG5ldyBncmFjZSBwZXJpb2QuICovCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwpAQCAtMTIzMSw3ICsxMjMwLDcgQEAKIAogCS8qIFJlLXJhaXNlIHRoZSBSQ1Ugc29mdGlycSBpZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHJlbWFpbmluZy4gKi8KIAlpZiAoY3B1X2hhc19jYWxsYmFja3NfcmVhZHlfdG9faW52b2tlKHJkcCkpCi0JCWludm9rZV9yY3VfY3B1X2t0aHJlYWQoKTsKKwkJaW52b2tlX3JjdV9jb3JlKCk7CiB9CiAKIC8qCkBAIC0xMjc3LDcgKzEyNzYsNyBAQAogCX0KIAlyY3VfcHJlZW1wdF9jaGVja19jYWxsYmFja3MoY3B1KTsKIAlpZiAocmN1X3BlbmRpbmcoY3B1KSkKLQkJaW52b2tlX3JjdV9jcHVfa3RocmVhZCgpOworCQlpbnZva2VfcmN1X2NvcmUoKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTE0NDIsMTMgKzE0NDEsMTQgQEAKIAl9CiAKIAkvKiBJZiB0aGVyZSBhcmUgY2FsbGJhY2tzIHJlYWR5LCBpbnZva2UgdGhlbS4gKi8KLQlyY3VfZG9fYmF0Y2gocnNwLCByZHApOworCWlmIChjcHVfaGFzX2NhbGxiYWNrc19yZWFkeV90b19pbnZva2UocmRwKSkKKwkJaW52b2tlX3JjdV9jYWxsYmFja3MocnNwLCByZHApOwogfQogCiAvKgogICogRG8gc29mdGlycSBwcm9jZXNzaW5nIGZvciB0aGUgY3VycmVudCBDUFUuCiAgKi8KLXN0YXRpYyB2b2lkIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyh2b2lkKQorc3RhdGljIHZvaWQgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqdW51c2VkKQogewogCV9fcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCZyY3Vfc2NoZWRfc3RhdGUsCiAJCQkJJl9fZ2V0X2NwdV92YXIocmN1X3NjaGVkX2RhdGEpKTsKQEAgLTE0NjUsMzQyICsxNDY1LDIwIEBACiAgKiB0aGUgY3VycmVudCBDUFUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCB0aGUgcmN1X2NwdV9rdGhyZWFkX3Rhc2sKICAqIGNhbm5vdCBkaXNhcHBlYXIgb3V0IGZyb20gdW5kZXIgdXMuCiAgKi8KLXN0YXRpYyB2b2lkIGludm9rZV9yY3VfY3B1X2t0aHJlYWQodm9pZCkKK3N0YXRpYyB2b2lkIGludm9rZV9yY3VfY2FsbGJhY2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3RoaXNfY3B1X3dyaXRlKHJjdV9jcHVfaGFzX3dvcmssIDEpOwotCWlmIChfX3RoaXNfY3B1X3JlYWQocmN1X2NwdV9rdGhyZWFkX3Rhc2spID09IE5VTEwpIHsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCWlmIChsaWtlbHkoIXJzcC0+Ym9vc3QpKSB7CisJCXJjdV9kb19iYXRjaChyc3AsIHJkcCk7CiAJCXJldHVybjsKIAl9Ci0Jd2FrZV91cF9wcm9jZXNzKF9fdGhpc19jcHVfcmVhZChyY3VfY3B1X2t0aHJlYWRfdGFzaykpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlpbnZva2VfcmN1X2NhbGxiYWNrc19rdGhyZWFkKCk7CiB9CiAKLS8qCi0gKiBXYWtlIHVwIHRoZSBzcGVjaWZpZWQgcGVyLXJjdV9ub2RlLXN0cnVjdHVyZSBrdGhyZWFkLgotICogQmVjYXVzZSB0aGUgcGVyLXJjdV9ub2RlIGt0aHJlYWRzIGFyZSBpbW1vcnRhbCwgd2UgZG9uJ3QgbmVlZAotICogdG8gZG8gYW55dGhpbmcgdG8ga2VlcCB0aGVtIGFsaXZlLgotICovCi1zdGF0aWMgdm9pZCBpbnZva2VfcmN1X25vZGVfa3RocmVhZChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3N0YXRpYyB2b2lkIGludm9rZV9yY3VfY29yZSh2b2lkKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQotCXQgPSBybnAtPm5vZGVfa3RocmVhZF90YXNrOwotCWlmICh0ICE9IE5VTEwpCi0JCXdha2VfdXBfcHJvY2Vzcyh0KTsKKwlyYWlzZV9zb2Z0aXJxKFJDVV9TT0ZUSVJRKTsKIH0KIAotLyoKLSAqIFNldCB0aGUgc3BlY2lmaWVkIENQVSdzIGt0aHJlYWQgdG8gcnVuIFJUIG9yIG5vdCwgYXMgc3BlY2lmaWVkIGJ5Ci0gKiB0aGUgdG9fcnQgYXJndW1lbnQuICBUaGUgQ1BVLWhvdHBsdWcgbG9ja3MgYXJlIGhlbGQsIHNvIHRoZSB0YXNrCi0gKiBpcyBub3QgZ29pbmcgYXdheS4KLSAqLwotc3RhdGljIHZvaWQgcmN1X2NwdV9rdGhyZWFkX3NldHJ0KGludCBjcHUsIGludCB0b19ydCkKLXsKLQlpbnQgcG9saWN5OwotCXN0cnVjdCBzY2hlZF9wYXJhbSBzcDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7Ci0KLQl0ID0gcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KTsKLQlpZiAodCA9PSBOVUxMKQotCQlyZXR1cm47Ci0JaWYgKHRvX3J0KSB7Ci0JCXBvbGljeSA9IFNDSEVEX0ZJRk87Ci0JCXNwLnNjaGVkX3ByaW9yaXR5ID0gUkNVX0tUSFJFQURfUFJJTzsKLQl9IGVsc2UgewotCQlwb2xpY3kgPSBTQ0hFRF9OT1JNQUw7Ci0JCXNwLnNjaGVkX3ByaW9yaXR5ID0gMDsKLQl9Ci0Jc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2sodCwgcG9saWN5LCAmc3ApOwotfQotCi0vKgotICogVGltZXIgaGFuZGxlciB0byBpbml0aWF0ZSB0aGUgd2FraW5nIHVwIG9mIHBlci1DUFUga3RocmVhZHMgdGhhdAotICogaGF2ZSB5aWVsZGVkIHRoZSBDUFUgZHVlIHRvIGV4Y2VzcyBudW1iZXJzIG9mIFJDVSBjYWxsYmFja3MuCi0gKiBXZSB3YWtlIHVwIHRoZSBwZXItcmN1X25vZGUga3RocmVhZCwgd2hpY2ggaW4gdHVybiB3aWxsIHdha2UgdXAKLSAqIHRoZSBib29zdGVyIGt0aHJlYWQuCi0gKi8KLXN0YXRpYyB2b2lkIHJjdV9jcHVfa3RocmVhZF90aW1lcih1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKHJjdV9zdGF0ZS0+cmRhLCBhcmcpOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmRwLT5teW5vZGU7Ci0KLQlhdG9taWNfb3IocmRwLT5ncnBtYXNrLCAmcm5wLT53YWtlbWFzayk7Ci0JaW52b2tlX3JjdV9ub2RlX2t0aHJlYWQocm5wKTsKLX0KLQotLyoKLSAqIERyb3AgdG8gbm9uLXJlYWwtdGltZSBwcmlvcml0eSBhbmQgeWllbGQsIGJ1dCBvbmx5IGFmdGVyIHBvc3RpbmcgYQotICogdGltZXIgdGhhdCB3aWxsIGNhdXNlIHVzIHRvIHJlZ2FpbiBvdXIgcmVhbC10aW1lIHByaW9yaXR5IGlmIHdlCi0gKiByZW1haW4gcHJlZW1wdGVkLiAgRWl0aGVyIHdheSwgd2UgcmVzdG9yZSBvdXIgcmVhbC10aW1lIHByaW9yaXR5Ci0gKiBiZWZvcmUgcmV0dXJuaW5nLgotICovCi1zdGF0aWMgdm9pZCByY3VfeWllbGQodm9pZCAoKmYpKHVuc2lnbmVkIGxvbmcpLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc3A7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgeWllbGRfdGltZXI7Ci0KLQlzZXR1cF90aW1lcl9vbl9zdGFjaygmeWllbGRfdGltZXIsIGYsIGFyZyk7Ci0JbW9kX3RpbWVyKCZ5aWVsZF90aW1lciwgamlmZmllcyArIDIpOwotCXNwLnNjaGVkX3ByaW9yaXR5ID0gMDsKLQlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayhjdXJyZW50LCBTQ0hFRF9OT1JNQUwsICZzcCk7Ci0Jc2V0X3VzZXJfbmljZShjdXJyZW50LCAxOSk7Ci0Jc2NoZWR1bGUoKTsKLQlzcC5zY2hlZF9wcmlvcml0eSA9IFJDVV9LVEhSRUFEX1BSSU87Ci0Jc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2soY3VycmVudCwgU0NIRURfRklGTywgJnNwKTsKLQlkZWxfdGltZXIoJnlpZWxkX3RpbWVyKTsKLX0KLQotLyoKLSAqIEhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgcmN1X2NwdV9rdGhyZWFkKCkgZW5kcyB1cCBvbiB0aGUgd3JvbmcgQ1BVLgotICogVGhpcyBjYW4gaGFwcGVuIHdoaWxlIHRoZSBjb3JyZXNwb25kaW5nIENQVSBpcyBlaXRoZXIgY29taW5nIG9ubGluZQotICogb3IgZ29pbmcgb2ZmbGluZS4gIFdlIGNhbm5vdCB3YWl0IHVudGlsIHRoZSBDUFUgaXMgZnVsbHkgb25saW5lCi0gKiBiZWZvcmUgc3RhcnRpbmcgdGhlIGt0aHJlYWQsIGJlY2F1c2UgdGhlIHZhcmlvdXMgbm90aWZpZXIgZnVuY3Rpb25zCi0gKiBjYW4gd2FpdCBmb3IgUkNVIGdyYWNlIHBlcmlvZHMuICBTbyB3ZSBwYXJrIHJjdV9jcHVfa3RocmVhZCgpIHVudGlsCi0gKiB0aGUgY29ycmVzcG9uZGluZyBDUFUgaXMgb25saW5lLgotICoKLSAqIFJldHVybiAxIGlmIHRoZSBrdGhyZWFkIG5lZWRzIHRvIHN0b3AsIDAgb3RoZXJ3aXNlLgotICoKLSAqIENhbGxlciBtdXN0IGRpc2FibGUgYmguICBUaGlzIGZ1bmN0aW9uIGNhbiBtb21lbnRhcmlseSBlbmFibGUgaXQuCi0gKi8KLXN0YXRpYyBpbnQgcmN1X2NwdV9rdGhyZWFkX3Nob3VsZF9zdG9wKGludCBjcHUpCi17Ci0Jd2hpbGUgKGNwdV9pc19vZmZsaW5lKGNwdSkgfHwKLQkgICAgICAgIWNwdW1hc2tfZXF1YWwoJmN1cnJlbnQtPmNwdXNfYWxsb3dlZCwgY3B1bWFza19vZihjcHUpKSB8fAotCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCkgIT0gY3B1KSB7Ci0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCQlyZXR1cm4gMTsKLQkJcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfc3RhdHVzLCBjcHUpID0gUkNVX0tUSFJFQURfT0ZGQ1BVOwotCQlwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF9jcHUsIGNwdSkgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQlsb2NhbF9iaF9lbmFibGUoKTsKLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7Ci0JCWlmICghY3B1bWFza19lcXVhbCgmY3VycmVudC0+Y3B1c19hbGxvd2VkLCBjcHVtYXNrX29mKGNwdSkpKQotCQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZihjcHUpKTsKLQkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCX0KLQlwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF9jcHUsIGNwdSkgPSBjcHU7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBQZXItQ1BVIGtlcm5lbCB0aHJlYWQgdGhhdCBpbnZva2VzIFJDVSBjYWxsYmFja3MuICBUaGlzIHJlcGxhY2VzIHRoZQotICogZWFybGllciBSQ1Ugc29mdGlycS4KLSAqLwotc3RhdGljIGludCByY3VfY3B1X2t0aHJlYWQodm9pZCAqYXJnKQotewotCWludCBjcHUgPSAoaW50KShsb25nKWFyZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBzcGluY250ID0gMDsKLQl1bnNpZ25lZCBpbnQgKnN0YXR1c3AgPSAmcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfc3RhdHVzLCBjcHUpOwotCWNoYXIgd29yazsKLQljaGFyICp3b3JrcCA9ICZwZXJfY3B1KHJjdV9jcHVfaGFzX3dvcmssIGNwdSk7Ci0KLQlmb3IgKDs7KSB7Ci0JCSpzdGF0dXNwID0gUkNVX0tUSFJFQURfV0FJVElORzsKLQkJcmN1X3dhaXQoKndvcmtwICE9IDAgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKLQkJbG9jYWxfYmhfZGlzYWJsZSgpOwotCQlpZiAocmN1X2NwdV9rdGhyZWFkX3Nob3VsZF9zdG9wKGNwdSkpIHsKLQkJCWxvY2FsX2JoX2VuYWJsZSgpOwotCQkJYnJlYWs7Ci0JCX0KLQkJKnN0YXR1c3AgPSBSQ1VfS1RIUkVBRF9SVU5OSU5HOwotCQlwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF9sb29wcywgY3B1KSsrOwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCXdvcmsgPSAqd29ya3A7Ci0JCSp3b3JrcCA9IDA7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQkJaWYgKHdvcmspCi0JCQlyY3VfcHJvY2Vzc19jYWxsYmFja3MoKTsKLQkJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JCWlmICgqd29ya3AgIT0gMCkKLQkJCXNwaW5jbnQrKzsKLQkJZWxzZQotCQkJc3BpbmNudCA9IDA7Ci0JCWlmIChzcGluY250ID4gMTApIHsKLQkJCSpzdGF0dXNwID0gUkNVX0tUSFJFQURfWUlFTERJTkc7Ci0JCQlyY3VfeWllbGQocmN1X2NwdV9rdGhyZWFkX3RpbWVyLCAodW5zaWduZWQgbG9uZyljcHUpOwotCQkJc3BpbmNudCA9IDA7Ci0JCX0KLQl9Ci0JKnN0YXR1c3AgPSBSQ1VfS1RIUkVBRF9TVE9QUEVEOwotCXJldHVybiAwOwotfQotCi0vKgotICogU3Bhd24gYSBwZXItQ1BVIGt0aHJlYWQsIHNldHRpbmcgdXAgYWZmaW5pdHkgYW5kIHByaW9yaXR5LgotICogQmVjYXVzZSB0aGUgQ1BVIGhvdHBsdWcgbG9jayBpcyBoZWxkLCBubyBvdGhlciBDUFUgd2lsbCBiZSBhdHRlbXB0aW5nCi0gKiB0byBtYW5pcHVsYXRlIHJjdV9jcHVfa3RocmVhZF90YXNrLiAgVGhlcmUgbWlnaHQgYmUgYW5vdGhlciBDUFUKLSAqIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGl0IGR1cmluZyBib290LCBidXQgdGhlIGxvY2tpbmcgaW4ga3RocmVhZF9iaW5kKCkKLSAqIHdpbGwgZW5mb3JjZSBzdWZmaWNpZW50IG9yZGVyaW5nLgotICovCi1zdGF0aWMgaW50IF9fY3B1aW5pdCByY3Vfc3Bhd25fb25lX2NwdV9rdGhyZWFkKGludCBjcHUpCi17Ci0Jc3RydWN0IHNjaGVkX3BhcmFtIHNwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQotCWlmICghcmN1X2t0aHJlYWRzX3NwYXduYWJsZSB8fAotCSAgICBwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF90YXNrLCBjcHUpICE9IE5VTEwpCi0JCXJldHVybiAwOwotCXQgPSBrdGhyZWFkX2NyZWF0ZShyY3VfY3B1X2t0aHJlYWQsICh2b2lkICopKGxvbmcpY3B1LCAicmN1YyVkIiwgY3B1KTsKLQlpZiAoSVNfRVJSKHQpKQotCQlyZXR1cm4gUFRSX0VSUih0KTsKLQlrdGhyZWFkX2JpbmQodCwgY3B1KTsKLQlwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF9jcHUsIGNwdSkgPSBjcHU7Ci0JV0FSTl9PTl9PTkNFKHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSkgIT0gTlVMTCk7Ci0JcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KSA9IHQ7Ci0Jc3Auc2NoZWRfcHJpb3JpdHkgPSBSQ1VfS1RIUkVBRF9QUklPOwotCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKHQsIFNDSEVEX0ZJRk8sICZzcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBQZXItcmN1X25vZGUga3RocmVhZCwgd2hpY2ggaXMgaW4gY2hhcmdlIG9mIHdha2luZyB1cCB0aGUgcGVyLUNQVQotICoga3RocmVhZHMgd2hlbiBuZWVkZWQuICBXZSBpZ25vcmUgcmVxdWVzdHMgdG8gd2FrZSB1cCBrdGhyZWFkcwotICogZm9yIG9mZmxpbmUgQ1BVcywgd2hpY2ggaXMgT0sgYmVjYXVzZSBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKQotICogdGFrZXMgY2FyZSBvZiB0aGlzIGNhc2UuCi0gKi8KLXN0YXRpYyBpbnQgcmN1X25vZGVfa3RocmVhZCh2b2lkICphcmcpCi17Ci0JaW50IGNwdTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IChzdHJ1Y3QgcmN1X25vZGUgKilhcmc7Ci0Jc3RydWN0IHNjaGVkX3BhcmFtIHNwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQotCWZvciAoOzspIHsKLQkJcm5wLT5ub2RlX2t0aHJlYWRfc3RhdHVzID0gUkNVX0tUSFJFQURfV0FJVElORzsKLQkJcmN1X3dhaXQoYXRvbWljX3JlYWQoJnJucC0+d2FrZW1hc2spICE9IDApOwotCQlybnAtPm5vZGVfa3RocmVhZF9zdGF0dXMgPSBSQ1VfS1RIUkVBRF9SVU5OSU5HOwotCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCQltYXNrID0gYXRvbWljX3hjaGcoJnJucC0+d2FrZW1hc2ssIDApOwotCQlyY3VfaW5pdGlhdGVfYm9vc3Qocm5wLCBmbGFncyk7IC8qIHJlbGVhc2VzIHJucC0+bG9jay4gKi8KLQkJZm9yIChjcHUgPSBybnAtPmdycGxvOyBjcHUgPD0gcm5wLT5ncnBoaTsgY3B1KyssIG1hc2sgPj49IDEpIHsKLQkJCWlmICgobWFzayAmIDB4MSkgPT0gMCkKLQkJCQljb250aW51ZTsKLQkJCXByZWVtcHRfZGlzYWJsZSgpOwotCQkJdCA9IHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSk7Ci0JCQlpZiAoIWNwdV9vbmxpbmUoY3B1KSB8fCB0ID09IE5VTEwpIHsKLQkJCQlwcmVlbXB0X2VuYWJsZSgpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJcGVyX2NwdShyY3VfY3B1X2hhc193b3JrLCBjcHUpID0gMTsKLQkJCXNwLnNjaGVkX3ByaW9yaXR5ID0gUkNVX0tUSFJFQURfUFJJTzsKLQkJCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKHQsIFNDSEVEX0ZJRk8sICZzcCk7Ci0JCQlwcmVlbXB0X2VuYWJsZSgpOwotCQl9Ci0JfQotCS8qIE5PVFJFQUNIRUQgKi8KLQlybnAtPm5vZGVfa3RocmVhZF9zdGF0dXMgPSBSQ1VfS1RIUkVBRF9TVE9QUEVEOwotCXJldHVybiAwOwotfQotCi0vKgotICogU2V0IHRoZSBwZXItcmN1X25vZGUga3RocmVhZCdzIGFmZmluaXR5IHRvIGNvdmVyIGFsbCBDUFVzIHRoYXQgYXJlCi0gKiBzZXJ2ZWQgYnkgdGhlIHJjdV9ub2RlIGluIHF1ZXN0aW9uLiAgVGhlIENQVSBob3RwbHVnIGxvY2sgaXMgc3RpbGwKLSAqIGhlbGQsIHNvIHRoZSB2YWx1ZSBvZiBybnAtPnFzbWFza2luaXQgd2lsbCBiZSBzdGFibGUuCi0gKgotICogV2UgZG9uJ3QgaW5jbHVkZSBvdXRnb2luZ2NwdSBpbiB0aGUgYWZmaW5pdHkgc2V0LCB1c2UgLTEgaWYgdGhlcmUgaXMKLSAqIG5vIG91dGdvaW5nIENQVS4gIElmIHRoZXJlIGFyZSBubyBDUFVzIGxlZnQgaW4gdGhlIGFmZmluaXR5IHNldCwKLSAqIHRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSBrdGhyZWFkIHRvIGV4ZWN1dGUgb24gYW55IENQVS4KLSAqLwotc3RhdGljIHZvaWQgcmN1X25vZGVfa3RocmVhZF9zZXRhZmZpbml0eShzdHJ1Y3QgcmN1X25vZGUgKnJucCwgaW50IG91dGdvaW5nY3B1KQotewotCWNwdW1hc2tfdmFyX3QgY207Ci0JaW50IGNwdTsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBybnAtPnFzbWFza2luaXQ7Ci0KLQlpZiAocm5wLT5ub2RlX2t0aHJlYWRfdGFzayA9PSBOVUxMKQotCQlyZXR1cm47Ci0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmY20sIEdGUF9LRVJORUwpKQotCQlyZXR1cm47Ci0JY3B1bWFza19jbGVhcihjbSk7Ci0JZm9yIChjcHUgPSBybnAtPmdycGxvOyBjcHUgPD0gcm5wLT5ncnBoaTsgY3B1KyssIG1hc2sgPj49IDEpCi0JCWlmICgobWFzayAmIDB4MSkgJiYgY3B1ICE9IG91dGdvaW5nY3B1KQotCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgY20pOwotCWlmIChjcHVtYXNrX3dlaWdodChjbSkgPT0gMCkgewotCQljcHVtYXNrX3NldGFsbChjbSk7Ci0JCWZvciAoY3B1ID0gcm5wLT5ncnBsbzsgY3B1IDw9IHJucC0+Z3JwaGk7IGNwdSsrKQotCQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBjbSk7Ci0JCVdBUk5fT05fT05DRShjcHVtYXNrX3dlaWdodChjbSkgPT0gMCk7Ci0JfQotCXNldF9jcHVzX2FsbG93ZWRfcHRyKHJucC0+bm9kZV9rdGhyZWFkX3Rhc2ssIGNtKTsKLQlyY3VfYm9vc3Rfa3RocmVhZF9zZXRhZmZpbml0eShybnAsIGNtKTsKLQlmcmVlX2NwdW1hc2tfdmFyKGNtKTsKLX0KLQotLyoKLSAqIFNwYXduIGEgcGVyLXJjdV9ub2RlIGt0aHJlYWQsIHNldHRpbmcgcHJpb3JpdHkgYW5kIGFmZmluaXR5LgotICogQ2FsbGVkIGR1cmluZyBib290IGJlZm9yZSBvbmxpbmUvb2ZmbGluZSBjYW4gaGFwcGVuLCBvciwgaWYKLSAqIGR1cmluZyBydW50aW1lLCB3aXRoIHRoZSBtYWluIENQVS1ob3RwbHVnIGxvY2tzIGhlbGQuICBTbyBvbmx5Ci0gKiBvbmUgb2YgdGhlc2UgY2FuIGJlIGV4ZWN1dGluZyBhdCBhIHRpbWUuCi0gKi8KLXN0YXRpYyBpbnQgX19jcHVpbml0IHJjdV9zcGF3bl9vbmVfbm9kZV9rdGhyZWFkKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkJCXN0cnVjdCByY3Vfbm9kZSAqcm5wKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJucF9pbmRleCA9IHJucCAtICZyc3AtPm5vZGVbMF07Ci0Jc3RydWN0IHNjaGVkX3BhcmFtIHNwOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQotCWlmICghcmN1X2t0aHJlYWRzX3NwYXduYWJsZSB8fAotCSAgICBybnAtPnFzbWFza2luaXQgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHJucC0+bm9kZV9rdGhyZWFkX3Rhc2sgPT0gTlVMTCkgewotCQl0ID0ga3RocmVhZF9jcmVhdGUocmN1X25vZGVfa3RocmVhZCwgKHZvaWQgKilybnAsCi0JCQkJICAgInJjdW4lZCIsIHJucF9pbmRleCk7Ci0JCWlmIChJU19FUlIodCkpCi0JCQlyZXR1cm4gUFRSX0VSUih0KTsKLQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQkJcm5wLT5ub2RlX2t0aHJlYWRfdGFzayA9IHQ7Ci0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQkJc3Auc2NoZWRfcHJpb3JpdHkgPSA5OTsKLQkJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2sodCwgU0NIRURfRklGTywgJnNwKTsKLQl9Ci0JcmV0dXJuIHJjdV9zcGF3bl9vbmVfYm9vc3Rfa3RocmVhZChyc3AsIHJucCwgcm5wX2luZGV4KTsKLX0KLQotc3RhdGljIHZvaWQgcmN1X3dha2Vfb25lX2Jvb3N0X2t0aHJlYWQoc3RydWN0IHJjdV9ub2RlICpybnApOwotCi0vKgotICogU3Bhd24gYWxsIGt0aHJlYWRzIC0tIGNhbGxlZCBhcyBzb29uIGFzIHRoZSBzY2hlZHVsZXIgaXMgcnVubmluZy4KLSAqLwotc3RhdGljIGludCBfX2luaXQgcmN1X3NwYXduX2t0aHJlYWRzKHZvaWQpCi17Ci0JaW50IGNwdTsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7Ci0KLQlyY3Vfa3RocmVhZHNfc3Bhd25hYmxlID0gMTsKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXBlcl9jcHUocmN1X2NwdV9oYXNfd29yaywgY3B1KSA9IDA7Ci0JCWlmIChjcHVfb25saW5lKGNwdSkpIHsKLQkJCSh2b2lkKXJjdV9zcGF3bl9vbmVfY3B1X2t0aHJlYWQoY3B1KTsKLQkJCXQgPSBwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF90YXNrLCBjcHUpOwotCQkJaWYgKHQpCi0JCQkJd2FrZV91cF9wcm9jZXNzKHQpOwotCQl9Ci0JfQotCXJucCA9IHJjdV9nZXRfcm9vdChyY3Vfc3RhdGUpOwotCSh2b2lkKXJjdV9zcGF3bl9vbmVfbm9kZV9rdGhyZWFkKHJjdV9zdGF0ZSwgcm5wKTsKLQlpZiAocm5wLT5ub2RlX2t0aHJlYWRfdGFzaykKLQkJd2FrZV91cF9wcm9jZXNzKHJucC0+bm9kZV9rdGhyZWFkX3Rhc2spOwotCWlmIChOVU1fUkNVX05PREVTID4gMSkgewotCQlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJjdV9zdGF0ZSwgcm5wKSB7Ci0JCQkodm9pZClyY3Vfc3Bhd25fb25lX25vZGVfa3RocmVhZChyY3Vfc3RhdGUsIHJucCk7Ci0JCQl0ID0gcm5wLT5ub2RlX2t0aHJlYWRfdGFzazsKLQkJCWlmICh0KQotCQkJCXdha2VfdXBfcHJvY2Vzcyh0KTsKLQkJCXJjdV93YWtlX29uZV9ib29zdF9rdGhyZWFkKHJucCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9pbml0Y2FsbChyY3Vfc3Bhd25fa3RocmVhZHMpOwotCiBzdGF0aWMgdm9pZAogX19jYWxsX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSksCiAJICAgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQpAQCAtMjIwNyw0NCArMTg4NSw2IEBACiAJcmN1X3ByZWVtcHRfaW5pdF9wZXJjcHVfZGF0YShjcHUpOwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3ByZXBhcmVfa3RocmVhZHMoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKHJjdV9zdGF0ZS0+cmRhLCBjcHUpOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmRwLT5teW5vZGU7Ci0KLQkvKiBGaXJlIHVwIHRoZSBpbmNvbWluZyBDUFUncyBrdGhyZWFkIGFuZCBsZWFmIHJjdV9ub2RlIGt0aHJlYWQuICovCi0JaWYgKHJjdV9rdGhyZWFkc19zcGF3bmFibGUpIHsKLQkJKHZvaWQpcmN1X3NwYXduX29uZV9jcHVfa3RocmVhZChjcHUpOwotCQlpZiAocm5wLT5ub2RlX2t0aHJlYWRfdGFzayA9PSBOVUxMKQotCQkJKHZvaWQpcmN1X3NwYXduX29uZV9ub2RlX2t0aHJlYWQocmN1X3N0YXRlLCBybnApOwotCX0KLX0KLQotLyoKLSAqIGt0aHJlYWRfY3JlYXRlKCkgY3JlYXRlcyB0aHJlYWRzIGluIFRBU0tfVU5JTlRFUlJVUFRJQkxFIHN0YXRlLAotICogYnV0IHRoZSBSQ1UgdGhyZWFkcyBhcmUgd29rZW4gb24gZGVtYW5kLCBhbmQgaWYgZGVtYW5kIGlzIGxvdyB0aGlzCi0gKiBjb3VsZCBiZSBhIHdoaWxlIHRyaWdnZXJpbmcgdGhlIGh1bmcgdGFzayB3YXRjaGRvZy4KLSAqCi0gKiBJbiBvcmRlciB0byBhdm9pZCB0aGlzLCBwb2tlIGFsbCB0YXNrcyBvbmNlIHRoZSBDUFUgaXMgZnVsbHkKLSAqIHVwIGFuZCBydW5uaW5nLgotICovCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X29ubGluZV9rdGhyZWFkcyhpbnQgY3B1KQotewotCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIocmN1X3N0YXRlLT5yZGEsIGNwdSk7Ci0Jc3RydWN0IHJjdV9ub2RlICpybnAgPSByZHAtPm15bm9kZTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7Ci0KLQl0ID0gcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KTsKLQlpZiAodCkKLQkJd2FrZV91cF9wcm9jZXNzKHQpOwotCi0JdCA9IHJucC0+bm9kZV9rdGhyZWFkX3Rhc2s7Ci0JaWYgKHQpCi0JCXdha2VfdXBfcHJvY2Vzcyh0KTsKLQotCXJjdV93YWtlX29uZV9ib29zdF9rdGhyZWFkKHJucCk7Ci19Ci0KIC8qCiAgKiBIYW5kbGUgQ1BVIG9ubGluZS9vZmZsaW5lIG5vdGlmaWNhdGlvbiBldmVudHMuCiAgKi8KQEAgLTIyNjIsNyArMTkwMiw2IEBACiAJCXJjdV9wcmVwYXJlX2t0aHJlYWRzKGNwdSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX09OTElORToKLQkJcmN1X29ubGluZV9rdGhyZWFkcyhjcHUpOwogCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgogCQlyY3Vfbm9kZV9rdGhyZWFkX3NldGFmZmluaXR5KHJucCwgLTEpOwogCQlyY3VfY3B1X2t0aHJlYWRfc2V0cnQoY3B1LCAxKTsKQEAgLTI0MTAsNiArMjA0OSw3IEBACiAJcmN1X2luaXRfb25lKCZyY3Vfc2NoZWRfc3RhdGUsICZyY3Vfc2NoZWRfZGF0YSk7CiAJcmN1X2luaXRfb25lKCZyY3VfYmhfc3RhdGUsICZyY3VfYmhfZGF0YSk7CiAJX19yY3VfaW5pdF9wcmVlbXB0KCk7CisJIG9wZW5fc29mdGlycShSQ1VfU09GVElSUSwgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKTsKIAogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCBwcm90ZWN0aW9uIGFnYWluc3QgQ1BVLWhvdHBsdWcgaGVyZSBiZWNhdXNlCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5oIGIva2VybmVsL3JjdXRyZWUuaAppbmRleCA3YjlhMDhiLi4wMWIyY2NkIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5oCisrKyBiL2tlcm5lbC9yY3V0cmVlLmgKQEAgLTM2OSw2ICszNjksNyBAQAogCQkJCQkJLyogIHBlcmlvZCBiZWNhdXNlICovCiAJCQkJCQkvKiAgZm9yY2VfcXVpZXNjZW50X3N0YXRlKCkgKi8KIAkJCQkJCS8qICB3YXMgcnVubmluZy4gKi8KKwl1OAlib29zdDsJCQkJLyogU3ViamVjdCB0byBwcmlvcml0eSBib29zdC4gKi8KIAl1bnNpZ25lZCBsb25nIGdwbnVtOwkJCS8qIEN1cnJlbnQgZ3AgbnVtYmVyLiAqLwogCXVuc2lnbmVkIGxvbmcgY29tcGxldGVkOwkJLyogIyBvZiBsYXN0IGNvbXBsZXRlZCBncC4gKi8KIApAQCAtNDI2LDYgKzQyNyw3IEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBzdGF0aWMgdm9pZCByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworc3RhdGljIHZvaWQgcmN1X3N0b3BfY3B1X2t0aHJlYWQoaW50IGNwdSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwogc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7CiBzdGF0aWMgdm9pZCByY3VfcHJpbnRfdGFza19zdGFsbChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CkBAIC00NTAsMTEgKzQ1MiwxOSBAQAogc3RhdGljIHZvaWQgX19pbml0IF9fcmN1X2luaXRfcHJlZW1wdCh2b2lkKTsKIHN0YXRpYyB2b2lkIHJjdV9uZWVkc19jcHVfZmx1c2godm9pZCk7CiBzdGF0aWMgdm9pZCByY3VfaW5pdGlhdGVfYm9vc3Qoc3RydWN0IHJjdV9ub2RlICpybnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfYm9vc3Rfc3RhcnRfZ3Aoc3RydWN0IHJjdV9ub2RlICpybnApOworc3RhdGljIHZvaWQgaW52b2tlX3JjdV9jYWxsYmFja3Nfa3RocmVhZCh2b2lkKTsKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9kb19jYWxsYmFja3Modm9pZCk7CiBzdGF0aWMgdm9pZCByY3VfYm9vc3Rfa3RocmVhZF9zZXRhZmZpbml0eShzdHJ1Y3QgcmN1X25vZGUgKnJucCwKIAkJCQkJICBjcHVtYXNrX3Zhcl90IGNtKTsKLXN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2Jvb3N0X3N0YXJ0X2dwKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKIHN0YXRpYyBpbnQgX19jcHVpbml0IHJjdV9zcGF3bl9vbmVfYm9vc3Rfa3RocmVhZChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCiAJCQkJCQkgc3RydWN0IHJjdV9ub2RlICpybnAsCiAJCQkJCQkgaW50IHJucF9pbmRleCk7CitzdGF0aWMgdm9pZCBpbnZva2VfcmN1X25vZGVfa3RocmVhZChzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CitzdGF0aWMgdm9pZCByY3VfeWllbGQodm9pZCAoKmYpKHVuc2lnbmVkIGxvbmcpLCB1bnNpZ25lZCBsb25nIGFyZyk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KK3N0YXRpYyB2b2lkIHJjdV9jcHVfa3RocmVhZF9zZXRydChpbnQgY3B1LCBpbnQgdG9fcnQpOworc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9wcmVwYXJlX2t0aHJlYWRzKGludCBjcHUpOwogCiAjZW5kaWYgLyogI2lmbmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZV9wbHVnaW4uaCBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCmluZGV4IGM4YmZmMzAuLjE0ZGM3ZGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oCkBAIC02MDIsNiArNjAyLDE1IEBACiAJCQkJJl9fZ2V0X2NwdV92YXIocmN1X3ByZWVtcHRfZGF0YSkpOwogfQogCisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9kb19jYWxsYmFja3Modm9pZCkKK3sKKwlyY3VfZG9fYmF0Y2goJnJjdV9wcmVlbXB0X3N0YXRlLCAmX19nZXRfY3B1X3ZhcihyY3VfcHJlZW1wdF9kYXRhKSk7Cit9CisKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworCiAvKgogICogUXVldWUgYSBwcmVlbXB0aWJsZS1SQ1UgY2FsbGJhY2sgZm9yIGludm9jYXRpb24gYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCiAgKi8KQEAgLTEyNDksNiArMTI1OCwyMyBAQAogfQogCiAvKgorICogV2FrZSB1cCB0aGUgcGVyLUNQVSBrdGhyZWFkIHRvIGludm9rZSBSQ1UgY2FsbGJhY2tzLgorICovCitzdGF0aWMgdm9pZCBpbnZva2VfcmN1X2NhbGxiYWNrc19rdGhyZWFkKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX3RoaXNfY3B1X3dyaXRlKHJjdV9jcHVfaGFzX3dvcmssIDEpOworCWlmIChfX3RoaXNfY3B1X3JlYWQocmN1X2NwdV9rdGhyZWFkX3Rhc2spID09IE5VTEwpIHsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm47CisJfQorCXdha2VfdXBfcHJvY2VzcyhfX3RoaXNfY3B1X3JlYWQocmN1X2NwdV9rdGhyZWFkX3Rhc2spKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCiAgKiBTZXQgdGhlIGFmZmluaXR5IG9mIHRoZSBib29zdCBrdGhyZWFkLiAgVGhlIENQVS1ob3RwbHVnIGxvY2tzIGFyZQogICogaGVsZCwgc28gbm8gb25lIHNob3VsZCBiZSBtZXNzaW5nIHdpdGggdGhlIGV4aXN0ZW5jZSBvZiB0aGUgYm9vc3QKICAqIGt0aHJlYWQuCkBAIC0xMjg4LDYgKzEzMTQsNyBAQAogCiAJaWYgKCZyY3VfcHJlZW1wdF9zdGF0ZSAhPSByc3ApCiAJCXJldHVybiAwOworCXJzcC0+Ym9vc3QgPSAxOwogCWlmIChybnAtPmJvb3N0X2t0aHJlYWRfdGFzayAhPSBOVUxMKQogCQlyZXR1cm4gMDsKIAl0ID0ga3RocmVhZF9jcmVhdGUocmN1X2Jvb3N0X2t0aHJlYWQsICh2b2lkICopcm5wLApAQCAtMTI5OSwxMyArMTMyNiwzNzIgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJc3Auc2NoZWRfcHJpb3JpdHkgPSBSQ1VfS1RIUkVBRF9QUklPOwogCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKHQsIFNDSEVEX0ZJRk8sICZzcCk7CisJd2FrZV91cF9wcm9jZXNzKHQpOyAvKiBnZXQgdG8gVEFTS19JTlRFUlJVUFRJQkxFIHF1aWNrbHkuICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3Vfd2FrZV9vbmVfYm9vc3Rfa3RocmVhZChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKworLyoKKyAqIFN0b3AgdGhlIFJDVSdzIHBlci1DUFUga3RocmVhZCB3aGVuIGl0cyBDUFUgZ29lcyBvZmZsaW5lLC4KKyAqLworc3RhdGljIHZvaWQgcmN1X3N0b3BfY3B1X2t0aHJlYWQoaW50IGNwdSkKIHsKLQlpZiAocm5wLT5ib29zdF9rdGhyZWFkX3Rhc2spCi0JCXdha2VfdXBfcHJvY2VzcyhybnAtPmJvb3N0X2t0aHJlYWRfdGFzayk7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJLyogU3RvcCB0aGUgQ1BVJ3Mga3RocmVhZC4gKi8KKwl0ID0gcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KTsKKwlpZiAodCAhPSBOVUxMKSB7CisJCXBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSkgPSBOVUxMOworCQlrdGhyZWFkX3N0b3AodCk7CisJfQorfQorCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLworCitzdGF0aWMgdm9pZCByY3Vfa3RocmVhZF9kb193b3JrKHZvaWQpCit7CisJcmN1X2RvX2JhdGNoKCZyY3Vfc2NoZWRfc3RhdGUsICZfX2dldF9jcHVfdmFyKHJjdV9zY2hlZF9kYXRhKSk7CisJcmN1X2RvX2JhdGNoKCZyY3VfYmhfc3RhdGUsICZfX2dldF9jcHVfdmFyKHJjdV9iaF9kYXRhKSk7CisJcmN1X3ByZWVtcHRfZG9fY2FsbGJhY2tzKCk7Cit9CisKKy8qCisgKiBXYWtlIHVwIHRoZSBzcGVjaWZpZWQgcGVyLXJjdV9ub2RlLXN0cnVjdHVyZSBrdGhyZWFkLgorICogQmVjYXVzZSB0aGUgcGVyLXJjdV9ub2RlIGt0aHJlYWRzIGFyZSBpbW1vcnRhbCwgd2UgZG9uJ3QgbmVlZAorICogdG8gZG8gYW55dGhpbmcgdG8ga2VlcCB0aGVtIGFsaXZlLgorICovCitzdGF0aWMgdm9pZCBpbnZva2VfcmN1X25vZGVfa3RocmVhZChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisKKwl0ID0gcm5wLT5ub2RlX2t0aHJlYWRfdGFzazsKKwlpZiAodCAhPSBOVUxMKQorCQl3YWtlX3VwX3Byb2Nlc3ModCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIHNwZWNpZmllZCBDUFUncyBrdGhyZWFkIHRvIHJ1biBSVCBvciBub3QsIGFzIHNwZWNpZmllZCBieQorICogdGhlIHRvX3J0IGFyZ3VtZW50LiAgVGhlIENQVS1ob3RwbHVnIGxvY2tzIGFyZSBoZWxkLCBzbyB0aGUgdGFzaworICogaXMgbm90IGdvaW5nIGF3YXkuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9jcHVfa3RocmVhZF9zZXRydChpbnQgY3B1LCBpbnQgdG9fcnQpCit7CisJaW50IHBvbGljeTsKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc3A7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJdCA9IHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSk7CisJaWYgKHQgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmICh0b19ydCkgeworCQlwb2xpY3kgPSBTQ0hFRF9GSUZPOworCQlzcC5zY2hlZF9wcmlvcml0eSA9IFJDVV9LVEhSRUFEX1BSSU87CisJfSBlbHNlIHsKKwkJcG9saWN5ID0gU0NIRURfTk9STUFMOworCQlzcC5zY2hlZF9wcmlvcml0eSA9IDA7CisJfQorCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKHQsIHBvbGljeSwgJnNwKTsKK30KKworLyoKKyAqIFRpbWVyIGhhbmRsZXIgdG8gaW5pdGlhdGUgdGhlIHdha2luZyB1cCBvZiBwZXItQ1BVIGt0aHJlYWRzIHRoYXQKKyAqIGhhdmUgeWllbGRlZCB0aGUgQ1BVIGR1ZSB0byBleGNlc3MgbnVtYmVycyBvZiBSQ1UgY2FsbGJhY2tzLgorICogV2Ugd2FrZSB1cCB0aGUgcGVyLXJjdV9ub2RlIGt0aHJlYWQsIHdoaWNoIGluIHR1cm4gd2lsbCB3YWtlIHVwCisgKiB0aGUgYm9vc3RlciBrdGhyZWFkLgorICovCitzdGF0aWMgdm9pZCByY3VfY3B1X2t0aHJlYWRfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHJjdV9kYXRhICpyZHAgPSBwZXJfY3B1X3B0cihyY3Vfc3RhdGUtPnJkYSwgYXJnKTsKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJkcC0+bXlub2RlOworCisJYXRvbWljX29yKHJkcC0+Z3JwbWFzaywgJnJucC0+d2FrZW1hc2spOworCWludm9rZV9yY3Vfbm9kZV9rdGhyZWFkKHJucCk7Cit9CisKKy8qCisgKiBEcm9wIHRvIG5vbi1yZWFsLXRpbWUgcHJpb3JpdHkgYW5kIHlpZWxkLCBidXQgb25seSBhZnRlciBwb3N0aW5nIGEKKyAqIHRpbWVyIHRoYXQgd2lsbCBjYXVzZSB1cyB0byByZWdhaW4gb3VyIHJlYWwtdGltZSBwcmlvcml0eSBpZiB3ZQorICogcmVtYWluIHByZWVtcHRlZC4gIEVpdGhlciB3YXksIHdlIHJlc3RvcmUgb3VyIHJlYWwtdGltZSBwcmlvcml0eQorICogYmVmb3JlIHJldHVybmluZy4KKyAqLworc3RhdGljIHZvaWQgcmN1X3lpZWxkKHZvaWQgKCpmKSh1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNjaGVkX3BhcmFtIHNwOworCXN0cnVjdCB0aW1lcl9saXN0IHlpZWxkX3RpbWVyOworCisJc2V0dXBfdGltZXJfb25fc3RhY2soJnlpZWxkX3RpbWVyLCBmLCBhcmcpOworCW1vZF90aW1lcigmeWllbGRfdGltZXIsIGppZmZpZXMgKyAyKTsKKwlzcC5zY2hlZF9wcmlvcml0eSA9IDA7CisJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2soY3VycmVudCwgU0NIRURfTk9STUFMLCAmc3ApOworCXNldF91c2VyX25pY2UoY3VycmVudCwgMTkpOworCXNjaGVkdWxlKCk7CisJc3Auc2NoZWRfcHJpb3JpdHkgPSBSQ1VfS1RIUkVBRF9QUklPOworCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKGN1cnJlbnQsIFNDSEVEX0ZJRk8sICZzcCk7CisJZGVsX3RpbWVyKCZ5aWVsZF90aW1lcik7Cit9CisKKy8qCisgKiBIYW5kbGUgY2FzZXMgd2hlcmUgdGhlIHJjdV9jcHVfa3RocmVhZCgpIGVuZHMgdXAgb24gdGhlIHdyb25nIENQVS4KKyAqIFRoaXMgY2FuIGhhcHBlbiB3aGlsZSB0aGUgY29ycmVzcG9uZGluZyBDUFUgaXMgZWl0aGVyIGNvbWluZyBvbmxpbmUKKyAqIG9yIGdvaW5nIG9mZmxpbmUuICBXZSBjYW5ub3Qgd2FpdCB1bnRpbCB0aGUgQ1BVIGlzIGZ1bGx5IG9ubGluZQorICogYmVmb3JlIHN0YXJ0aW5nIHRoZSBrdGhyZWFkLCBiZWNhdXNlIHRoZSB2YXJpb3VzIG5vdGlmaWVyIGZ1bmN0aW9ucworICogY2FuIHdhaXQgZm9yIFJDVSBncmFjZSBwZXJpb2RzLiAgU28gd2UgcGFyayByY3VfY3B1X2t0aHJlYWQoKSB1bnRpbAorICogdGhlIGNvcnJlc3BvbmRpbmcgQ1BVIGlzIG9ubGluZS4KKyAqCisgKiBSZXR1cm4gMSBpZiB0aGUga3RocmVhZCBuZWVkcyB0byBzdG9wLCAwIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBkaXNhYmxlIGJoLiAgVGhpcyBmdW5jdGlvbiBjYW4gbW9tZW50YXJpbHkgZW5hYmxlIGl0LgorICovCitzdGF0aWMgaW50IHJjdV9jcHVfa3RocmVhZF9zaG91bGRfc3RvcChpbnQgY3B1KQoreworCXdoaWxlIChjcHVfaXNfb2ZmbGluZShjcHUpIHx8CisJICAgICAgICFjcHVtYXNrX2VxdWFsKCZjdXJyZW50LT5jcHVzX2FsbG93ZWQsIGNwdW1hc2tfb2YoY3B1KSkgfHwKKwkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpICE9IGNwdSkgeworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJcmV0dXJuIDE7CisJCXBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3N0YXR1cywgY3B1KSA9IFJDVV9LVEhSRUFEX09GRkNQVTsKKwkJcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfY3B1LCBjcHUpID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJbG9jYWxfYmhfZW5hYmxlKCk7CisJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworCQlpZiAoIWNwdW1hc2tfZXF1YWwoJmN1cnJlbnQtPmNwdXNfYWxsb3dlZCwgY3B1bWFza19vZihjcHUpKSkKKwkJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdW1hc2tfb2YoY3B1KSk7CisJCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwl9CisJcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfY3B1LCBjcHUpID0gY3B1OworCXJldHVybiAwOworfQorCisvKgorICogUGVyLUNQVSBrZXJuZWwgdGhyZWFkIHRoYXQgaW52b2tlcyBSQ1UgY2FsbGJhY2tzLiAgVGhpcyByZXBsYWNlcyB0aGUKKyAqIGVhcmxpZXIgUkNVIHNvZnRpcnEuCisgKi8KK3N0YXRpYyBpbnQgcmN1X2NwdV9rdGhyZWFkKHZvaWQgKmFyZykKK3sKKwlpbnQgY3B1ID0gKGludCkobG9uZylhcmc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3BpbmNudCA9IDA7CisJdW5zaWduZWQgaW50ICpzdGF0dXNwID0gJnBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3N0YXR1cywgY3B1KTsKKwljaGFyIHdvcms7CisJY2hhciAqd29ya3AgPSAmcGVyX2NwdShyY3VfY3B1X2hhc193b3JrLCBjcHUpOworCisJZm9yICg7OykgeworCQkqc3RhdHVzcCA9IFJDVV9LVEhSRUFEX1dBSVRJTkc7CisJCXJjdV93YWl0KCp3b3JrcCAhPSAwIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CisJCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwkJaWYgKHJjdV9jcHVfa3RocmVhZF9zaG91bGRfc3RvcChjcHUpKSB7CisJCQlsb2NhbF9iaF9lbmFibGUoKTsKKwkJCWJyZWFrOworCQl9CisJCSpzdGF0dXNwID0gUkNVX0tUSFJFQURfUlVOTklORzsKKwkJcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfbG9vcHMsIGNwdSkrKzsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQl3b3JrID0gKndvcmtwOworCQkqd29ya3AgPSAwOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCWlmICh3b3JrKQorCQkJcmN1X2t0aHJlYWRfZG9fd29yaygpOworCQlsb2NhbF9iaF9lbmFibGUoKTsKKwkJaWYgKCp3b3JrcCAhPSAwKQorCQkJc3BpbmNudCsrOworCQllbHNlCisJCQlzcGluY250ID0gMDsKKwkJaWYgKHNwaW5jbnQgPiAxMCkgeworCQkJKnN0YXR1c3AgPSBSQ1VfS1RIUkVBRF9ZSUVMRElORzsKKwkJCXJjdV95aWVsZChyY3VfY3B1X2t0aHJlYWRfdGltZXIsICh1bnNpZ25lZCBsb25nKWNwdSk7CisJCQlzcGluY250ID0gMDsKKwkJfQorCX0KKwkqc3RhdHVzcCA9IFJDVV9LVEhSRUFEX1NUT1BQRUQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTcGF3biBhIHBlci1DUFUga3RocmVhZCwgc2V0dGluZyB1cCBhZmZpbml0eSBhbmQgcHJpb3JpdHkuCisgKiBCZWNhdXNlIHRoZSBDUFUgaG90cGx1ZyBsb2NrIGlzIGhlbGQsIG5vIG90aGVyIENQVSB3aWxsIGJlIGF0dGVtcHRpbmcKKyAqIHRvIG1hbmlwdWxhdGUgcmN1X2NwdV9rdGhyZWFkX3Rhc2suICBUaGVyZSBtaWdodCBiZSBhbm90aGVyIENQVQorICogYXR0ZW1wdGluZyB0byBhY2Nlc3MgaXQgZHVyaW5nIGJvb3QsIGJ1dCB0aGUgbG9ja2luZyBpbiBrdGhyZWFkX2JpbmQoKQorICogd2lsbCBlbmZvcmNlIHN1ZmZpY2llbnQgb3JkZXJpbmcuCisgKgorICogUGxlYXNlIG5vdGUgdGhhdCB3ZSBjYW5ub3Qgc2ltcGx5IHJlZnVzZSB0byB3YWtlIHVwIHRoZSBwZXItQ1BVCisgKiBrdGhyZWFkIGJlY2F1c2Uga3RocmVhZHMgYXJlIGNyZWF0ZWQgaW4gVEFTS19VTklOVEVSUlVQVElCTEUgc3RhdGUsCisgKiB3aGljaCBjYW4gcmVzdWx0IGluIHNvZnRsb2NrdXAgY29tcGxhaW50cyBpZiB0aGUgdGFzayBlbmRzIHVwIGJlaW5nCisgKiBpZGxlIGZvciBtb3JlIHRoYW4gYSBjb3VwbGUgb2YgbWludXRlcy4KKyAqCisgKiBIb3dldmVyLCBwbGVhc2Ugbm90ZSBhbHNvIHRoYXQgd2UgY2Fubm90IGJpbmQgdGhlIHBlci1DUFUga3RocmVhZCB0byBpdHMKKyAqIENQVSB1bnRpbCB0aGF0IENQVSBpcyBmdWxseSBvbmxpbmUuICBXZSBhbHNvIGNhbm5vdCB3YWl0IHVudGlsIHRoZQorICogQ1BVIGlzIGZ1bGx5IG9ubGluZSBiZWZvcmUgd2UgY3JlYXRlIGl0cyBwZXItQ1BVIGt0aHJlYWQsIGFzIHRoaXMgd291bGQKKyAqIGRlYWRsb2NrIHRoZSBzeXN0ZW0gd2hlbiBDUFUgbm90aWZpZXJzIHRyaWVkIHdhaXRpbmcgZm9yIGdyYWNlCisgKiBwZXJpb2RzLiAgU28gd2UgYmluZCB0aGUgcGVyLUNQVSBrdGhyZWFkIHRvIGl0cyBDUFUgb25seSBpZiB0aGUgQ1BVCisgKiBpcyBvbmxpbmUuICBJZiBpdHMgQ1BVIGlzIG5vdCB5ZXQgZnVsbHkgb25saW5lLCB0aGVuIHRoZSBjb2RlIGluCisgKiByY3VfY3B1X2t0aHJlYWQoKSB3aWxsIHdhaXQgdW50aWwgaXQgaXMgZnVsbHkgb25saW5lLCBhbmQgdGhlbiBkbworICogdGhlIGJpbmRpbmcuCisgKi8KK3N0YXRpYyBpbnQgX19jcHVpbml0IHJjdV9zcGF3bl9vbmVfY3B1X2t0aHJlYWQoaW50IGNwdSkKK3sKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc3A7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJaWYgKCFyY3Vfa3RocmVhZHNfc3Bhd25hYmxlIHx8CisJICAgIHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3Rhc2ssIGNwdSkgIT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJdCA9IGt0aHJlYWRfY3JlYXRlKHJjdV9jcHVfa3RocmVhZCwgKHZvaWQgKikobG9uZyljcHUsICJyY3VjJWQiLCBjcHUpOworCWlmIChJU19FUlIodCkpCisJCXJldHVybiBQVFJfRVJSKHQpOworCWlmIChjcHVfb25saW5lKGNwdSkpCisJCWt0aHJlYWRfYmluZCh0LCBjcHUpOworCXBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX2NwdSwgY3B1KSA9IGNwdTsKKwlXQVJOX09OX09OQ0UocGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KSAhPSBOVUxMKTsKKwlzcC5zY2hlZF9wcmlvcml0eSA9IFJDVV9LVEhSRUFEX1BSSU87CisJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2sodCwgU0NIRURfRklGTywgJnNwKTsKKwlwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF90YXNrLCBjcHUpID0gdDsKKwl3YWtlX3VwX3Byb2Nlc3ModCk7IC8qIEdldCB0byBUQVNLX0lOVEVSUlVQVElCTEUgcXVpY2tseS4gKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBlci1yY3Vfbm9kZSBrdGhyZWFkLCB3aGljaCBpcyBpbiBjaGFyZ2Ugb2Ygd2FraW5nIHVwIHRoZSBwZXItQ1BVCisgKiBrdGhyZWFkcyB3aGVuIG5lZWRlZC4gIFdlIGlnbm9yZSByZXF1ZXN0cyB0byB3YWtlIHVwIGt0aHJlYWRzCisgKiBmb3Igb2ZmbGluZSBDUFVzLCB3aGljaCBpcyBPSyBiZWNhdXNlIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpCisgKiB0YWtlcyBjYXJlIG9mIHRoaXMgY2FzZS4KKyAqLworc3RhdGljIGludCByY3Vfbm9kZV9rdGhyZWFkKHZvaWQgKmFyZykKK3sKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtYXNrOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gKHN0cnVjdCByY3Vfbm9kZSAqKWFyZzsKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc3A7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJZm9yICg7OykgeworCQlybnAtPm5vZGVfa3RocmVhZF9zdGF0dXMgPSBSQ1VfS1RIUkVBRF9XQUlUSU5HOworCQlyY3Vfd2FpdChhdG9taWNfcmVhZCgmcm5wLT53YWtlbWFzaykgIT0gMCk7CisJCXJucC0+bm9kZV9rdGhyZWFkX3N0YXR1cyA9IFJDVV9LVEhSRUFEX1JVTk5JTkc7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CisJCW1hc2sgPSBhdG9taWNfeGNoZygmcm5wLT53YWtlbWFzaywgMCk7CisJCXJjdV9pbml0aWF0ZV9ib29zdChybnAsIGZsYWdzKTsgLyogcmVsZWFzZXMgcm5wLT5sb2NrLiAqLworCQlmb3IgKGNwdSA9IHJucC0+Z3JwbG87IGNwdSA8PSBybnAtPmdycGhpOyBjcHUrKywgbWFzayA+Pj0gMSkgeworCQkJaWYgKChtYXNrICYgMHgxKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJcHJlZW1wdF9kaXNhYmxlKCk7CisJCQl0ID0gcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfdGFzaywgY3B1KTsKKwkJCWlmICghY3B1X29ubGluZShjcHUpIHx8IHQgPT0gTlVMTCkgeworCQkJCXByZWVtcHRfZW5hYmxlKCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwZXJfY3B1KHJjdV9jcHVfaGFzX3dvcmssIGNwdSkgPSAxOworCQkJc3Auc2NoZWRfcHJpb3JpdHkgPSBSQ1VfS1RIUkVBRF9QUklPOworCQkJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2sodCwgU0NIRURfRklGTywgJnNwKTsKKwkJCXByZWVtcHRfZW5hYmxlKCk7CisJCX0KKwl9CisJLyogTk9UUkVBQ0hFRCAqLworCXJucC0+bm9kZV9rdGhyZWFkX3N0YXR1cyA9IFJDVV9LVEhSRUFEX1NUT1BQRUQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdGhlIHBlci1yY3Vfbm9kZSBrdGhyZWFkJ3MgYWZmaW5pdHkgdG8gY292ZXIgYWxsIENQVXMgdGhhdCBhcmUKKyAqIHNlcnZlZCBieSB0aGUgcmN1X25vZGUgaW4gcXVlc3Rpb24uICBUaGUgQ1BVIGhvdHBsdWcgbG9jayBpcyBzdGlsbAorICogaGVsZCwgc28gdGhlIHZhbHVlIG9mIHJucC0+cXNtYXNraW5pdCB3aWxsIGJlIHN0YWJsZS4KKyAqCisgKiBXZSBkb24ndCBpbmNsdWRlIG91dGdvaW5nY3B1IGluIHRoZSBhZmZpbml0eSBzZXQsIHVzZSAtMSBpZiB0aGVyZSBpcworICogbm8gb3V0Z29pbmcgQ1BVLiAgSWYgdGhlcmUgYXJlIG5vIENQVXMgbGVmdCBpbiB0aGUgYWZmaW5pdHkgc2V0LAorICogdGhpcyBmdW5jdGlvbiBhbGxvd3MgdGhlIGt0aHJlYWQgdG8gZXhlY3V0ZSBvbiBhbnkgQ1BVLgorICovCitzdGF0aWMgdm9pZCByY3Vfbm9kZV9rdGhyZWFkX3NldGFmZmluaXR5KHN0cnVjdCByY3Vfbm9kZSAqcm5wLCBpbnQgb3V0Z29pbmdjcHUpCit7CisJY3B1bWFza192YXJfdCBjbTsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgbWFzayA9IHJucC0+cXNtYXNraW5pdDsKKworCWlmIChybnAtPm5vZGVfa3RocmVhZF90YXNrID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjbSwgR0ZQX0tFUk5FTCkpCisJCXJldHVybjsKKwljcHVtYXNrX2NsZWFyKGNtKTsKKwlmb3IgKGNwdSA9IHJucC0+Z3JwbG87IGNwdSA8PSBybnAtPmdycGhpOyBjcHUrKywgbWFzayA+Pj0gMSkKKwkJaWYgKChtYXNrICYgMHgxKSAmJiBjcHUgIT0gb3V0Z29pbmdjcHUpCisJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBjbSk7CisJaWYgKGNwdW1hc2tfd2VpZ2h0KGNtKSA9PSAwKSB7CisJCWNwdW1hc2tfc2V0YWxsKGNtKTsKKwkJZm9yIChjcHUgPSBybnAtPmdycGxvOyBjcHUgPD0gcm5wLT5ncnBoaTsgY3B1KyspCisJCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIGNtKTsKKwkJV0FSTl9PTl9PTkNFKGNwdW1hc2tfd2VpZ2h0KGNtKSA9PSAwKTsKKwl9CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIocm5wLT5ub2RlX2t0aHJlYWRfdGFzaywgY20pOworCXJjdV9ib29zdF9rdGhyZWFkX3NldGFmZmluaXR5KHJucCwgY20pOworCWZyZWVfY3B1bWFza192YXIoY20pOworfQorCisvKgorICogU3Bhd24gYSBwZXItcmN1X25vZGUga3RocmVhZCwgc2V0dGluZyBwcmlvcml0eSBhbmQgYWZmaW5pdHkuCisgKiBDYWxsZWQgZHVyaW5nIGJvb3QgYmVmb3JlIG9ubGluZS9vZmZsaW5lIGNhbiBoYXBwZW4sIG9yLCBpZgorICogZHVyaW5nIHJ1bnRpbWUsIHdpdGggdGhlIG1haW4gQ1BVLWhvdHBsdWcgbG9ja3MgaGVsZC4gIFNvIG9ubHkKKyAqIG9uZSBvZiB0aGVzZSBjYW4gYmUgZXhlY3V0aW5nIGF0IGEgdGltZS4KKyAqLworc3RhdGljIGludCBfX2NwdWluaXQgcmN1X3NwYXduX29uZV9ub2RlX2t0aHJlYWQoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCQkJc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcm5wX2luZGV4ID0gcm5wIC0gJnJzcC0+bm9kZVswXTsKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gc3A7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0OworCisJaWYgKCFyY3Vfa3RocmVhZHNfc3Bhd25hYmxlIHx8CisJICAgIHJucC0+cXNtYXNraW5pdCA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAocm5wLT5ub2RlX2t0aHJlYWRfdGFzayA9PSBOVUxMKSB7CisJCXQgPSBrdGhyZWFkX2NyZWF0ZShyY3Vfbm9kZV9rdGhyZWFkLCAodm9pZCAqKXJucCwKKwkJCQkgICAicmN1biVkIiwgcm5wX2luZGV4KTsKKwkJaWYgKElTX0VSUih0KSkKKwkJCXJldHVybiBQVFJfRVJSKHQpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlybnAtPm5vZGVfa3RocmVhZF90YXNrID0gdDsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCQlzcC5zY2hlZF9wcmlvcml0eSA9IDk5OworCQlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayh0LCBTQ0hFRF9GSUZPLCAmc3ApOworCQl3YWtlX3VwX3Byb2Nlc3ModCk7IC8qIGdldCB0byBUQVNLX0lOVEVSUlVQVElCTEUgcXVpY2tseS4gKi8KKwl9CisJcmV0dXJuIHJjdV9zcGF3bl9vbmVfYm9vc3Rfa3RocmVhZChyc3AsIHJucCwgcm5wX2luZGV4KTsKK30KKworLyoKKyAqIFNwYXduIGFsbCBrdGhyZWFkcyAtLSBjYWxsZWQgYXMgc29vbiBhcyB0aGUgc2NoZWR1bGVyIGlzIHJ1bm5pbmcuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHJjdV9zcGF3bl9rdGhyZWFkcyh2b2lkKQoreworCWludCBjcHU7CisJc3RydWN0IHJjdV9ub2RlICpybnA7CisKKwlyY3Vfa3RocmVhZHNfc3Bhd25hYmxlID0gMTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXBlcl9jcHUocmN1X2NwdV9oYXNfd29yaywgY3B1KSA9IDA7CisJCWlmIChjcHVfb25saW5lKGNwdSkpCisJCQkodm9pZClyY3Vfc3Bhd25fb25lX2NwdV9rdGhyZWFkKGNwdSk7CisJfQorCXJucCA9IHJjdV9nZXRfcm9vdChyY3Vfc3RhdGUpOworCSh2b2lkKXJjdV9zcGF3bl9vbmVfbm9kZV9rdGhyZWFkKHJjdV9zdGF0ZSwgcm5wKTsKKwlpZiAoTlVNX1JDVV9OT0RFUyA+IDEpIHsKKwkJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyY3Vfc3RhdGUsIHJucCkKKwkJCSh2b2lkKXJjdV9zcGF3bl9vbmVfbm9kZV9rdGhyZWFkKHJjdV9zdGF0ZSwgcm5wKTsKKwl9CisJcmV0dXJuIDA7Cit9CitlYXJseV9pbml0Y2FsbChyY3Vfc3Bhd25fa3RocmVhZHMpOworCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3ByZXBhcmVfa3RocmVhZHMoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKHJjdV9zdGF0ZS0+cmRhLCBjcHUpOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmRwLT5teW5vZGU7CisKKwkvKiBGaXJlIHVwIHRoZSBpbmNvbWluZyBDUFUncyBrdGhyZWFkIGFuZCBsZWFmIHJjdV9ub2RlIGt0aHJlYWQuICovCisJaWYgKHJjdV9rdGhyZWFkc19zcGF3bmFibGUpIHsKKwkJKHZvaWQpcmN1X3NwYXduX29uZV9jcHVfa3RocmVhZChjcHUpOworCQlpZiAocm5wLT5ub2RlX2t0aHJlYWRfdGFzayA9PSBOVUxMKQorCQkJKHZvaWQpcmN1X3NwYXduX29uZV9ub2RlX2t0aHJlYWQocmN1X3N0YXRlLCBybnApOworCX0KIH0KIAogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KQEAgLTEzMTUsMjMgKzE3MDEsMzIgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJjdV9ib29zdF9rdGhyZWFkX3NldGFmZmluaXR5KHN0cnVjdCByY3Vfbm9kZSAqcm5wLAotCQkJCQkgIGNwdW1hc2tfdmFyX3QgY20pCitzdGF0aWMgdm9pZCBpbnZva2VfcmN1X2NhbGxiYWNrc19rdGhyZWFkKHZvaWQpCiB7CisJV0FSTl9PTl9PTkNFKDEpOwogfQogCiBzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9ib29zdF9zdGFydF9ncChzdHJ1Y3QgcmN1X25vZGUgKnJucCkKIHsKIH0KIAotc3RhdGljIGludCBfX2NwdWluaXQgcmN1X3NwYXduX29uZV9ib29zdF9rdGhyZWFkKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkJCSBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCQkJCSBpbnQgcm5wX2luZGV4KQorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCitzdGF0aWMgdm9pZCByY3Vfc3RvcF9jcHVfa3RocmVhZChpbnQgY3B1KQogewotCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgcmN1X3dha2Vfb25lX2Jvb3N0X2t0aHJlYWQoc3RydWN0IHJjdV9ub2RlICpybnApCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLworCitzdGF0aWMgdm9pZCByY3Vfbm9kZV9rdGhyZWFkX3NldGFmZmluaXR5KHN0cnVjdCByY3Vfbm9kZSAqcm5wLCBpbnQgb3V0Z29pbmdjcHUpCit7Cit9CisKK3N0YXRpYyB2b2lkIHJjdV9jcHVfa3RocmVhZF9zZXRydChpbnQgY3B1LCBpbnQgdG9fcnQpCit7Cit9CisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCByY3VfcHJlcGFyZV9rdGhyZWFkcyhpbnQgY3B1KQogewogfQogCkBAIC0xNTA5LDcgKzE5MDQsNyBAQAogICoKICAqIEJlY2F1c2UgaXQgaXMgbm90IGxlZ2FsIHRvIGludm9rZSByY3VfcHJvY2Vzc19jYWxsYmFja3MoKSB3aXRoIGlycXMKICAqIGRpc2FibGVkLCB3ZSBkbyBvbmUgcGFzcyBvZiBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSwgdGhlbiBkbyBhCi0gKiBpbnZva2VfcmN1X2NwdV9rdGhyZWFkKCkgdG8gY2F1c2UgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkgdG8gYmUgaW52b2tlZAorICogaW52b2tlX3JjdV9jb3JlKCkgdG8gY2F1c2UgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkgdG8gYmUgaW52b2tlZAogICogbGF0ZXIuICBUaGUgcGVyLWNwdSByY3VfZHludGlja19kcmFpbiB2YXJpYWJsZSBjb250cm9scyB0aGUgc2VxdWVuY2luZy4KICAqLwogaW50IHJjdV9uZWVkc19jcHUoaW50IGNwdSkKQEAgLTE1NjAsNyArMTk1NSw3IEBACiAKIAkvKiBJZiBSQ1UgY2FsbGJhY2tzIGFyZSBzdGlsbCBwZW5kaW5nLCBSQ1Ugc3RpbGwgbmVlZHMgdGhpcyBDUFUuICovCiAJaWYgKGMpCi0JCWludm9rZV9yY3VfY3B1X2t0aHJlYWQoKTsKKwkJaW52b2tlX3JjdV9jb3JlKCk7CiAJcmV0dXJuIGM7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCmluZGV4IDk2NzhjYzMuLjRlMTQ0ODcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKKysrIGIva2VybmVsL3JjdXRyZWVfdHJhY2UuYwpAQCAtNDYsNiArNDYsOCBAQAogI2RlZmluZSBSQ1VfVFJFRV9OT05DT1JFCiAjaW5jbHVkZSAicmN1dHJlZS5oIgogCisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCiBERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgaW50LCByY3VfY3B1X2t0aHJlYWRfc3RhdHVzKTsKIERFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIHJjdV9jcHVfa3RocmVhZF9jcHUpOwogREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgcmN1X2NwdV9rdGhyZWFkX2xvb3BzKTsKQEAgLTU4LDYgKzYwLDggQEAKIAlyZXR1cm4gIlNSV09ZIltrdGhyZWFkX3N0YXR1c107CiB9CiAKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLworCiBzdGF0aWMgdm9pZCBwcmludF9vbmVfcmN1X2RhdGEoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKIAlpZiAoIXJkcC0+YmVlbm9ubGluZSkKQEAgLTc2LDcgKzgwLDcgQEAKIAkJICAgcmRwLT5keW50aWNrc19mcXMpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfTk9fSFogKi8KIAlzZXFfcHJpbnRmKG0sICIgb2Y9JWx1IHJpPSVsdSIsIHJkcC0+b2ZmbGluZV9mcXMsIHJkcC0+cmVzY2hlZF9pcGkpOwotCXNlcV9wcmludGYobSwgIiBxbD0lbGQgcXM9JWMlYyVjJWMga3Q9JWQvJWMvJWQga3RsPSV4IGI9JWxkIiwKKwlzZXFfcHJpbnRmKG0sICIgcWw9JWxkIHFzPSVjJWMlYyVjIiwKIAkJICAgcmRwLT5xbGVuLAogCQkgICAiLk4iW3JkcC0+bnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSAhPQogCQkJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdXSwKQEAgLTg0LDEzICs4OCwxNiBAQAogCQkJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1JFQURZX1RBSUxdXSwKIAkJICAgIi5XIltyZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF0gIT0KIAkJCXJkcC0+bnh0dGFpbFtSQ1VfV0FJVF9UQUlMXV0sCi0JCSAgICIuRCJbJnJkcC0+bnh0bGlzdCAhPSByZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF1dLAorCQkgICAiLkQiWyZyZHAtPm54dGxpc3QgIT0gcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdXSk7CisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCXNlcV9wcmludGYobSwgIiBrdD0lZC8lYy8lZCBrdGw9JXgiLAogCQkgICBwZXJfY3B1KHJjdV9jcHVfaGFzX3dvcmssIHJkcC0+Y3B1KSwKIAkJICAgY29udmVydF9rdGhyZWFkX3N0YXR1cyhwZXJfY3B1KHJjdV9jcHVfa3RocmVhZF9zdGF0dXMsCiAJCQkJCSAgcmRwLT5jcHUpKSwKIAkJICAgcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfY3B1LCByZHAtPmNwdSksCi0JCSAgIHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX2xvb3BzLCByZHAtPmNwdSkgJiAweGZmZmYsCi0JCSAgIHJkcC0+YmxpbWl0KTsKKwkJICAgcGVyX2NwdShyY3VfY3B1X2t0aHJlYWRfbG9vcHMsIHJkcC0+Y3B1KSAmIDB4ZmZmZik7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KKwlzZXFfcHJpbnRmKG0sICIgYj0lbGQiLCByZHAtPmJsaW1pdCk7CiAJc2VxX3ByaW50ZihtLCAiIGNpPSVsdSBjbz0lbHUgY2E9JWx1XG4iLAogCQkgICByZHAtPm5fY2JzX2ludm9rZWQsIHJkcC0+bl9jYnNfb3JwaGFuZWQsIHJkcC0+bl9jYnNfYWRvcHRlZCk7CiB9CkBAIC0xNDcsMTggKzE1NCwyMSBAQAogCQkgICByZHAtPmR5bnRpY2tzX2Zxcyk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWiAqLwogCXNlcV9wcmludGYobSwgIiwlbHUsJWx1IiwgcmRwLT5vZmZsaW5lX2ZxcywgcmRwLT5yZXNjaGVkX2lwaSk7Ci0Jc2VxX3ByaW50ZihtLCAiLCVsZCxcIiVjJWMlYyVjXCIsJWQsXCIlY1wiLCVsZCIsIHJkcC0+cWxlbiwKKwlzZXFfcHJpbnRmKG0sICIsJWxkLFwiJWMlYyVjJWNcIiIsIHJkcC0+cWxlbiwKIAkJICAgIi5OIltyZHAtPm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0gIT0KIAkJCXJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXV0sCiAJCSAgICIuUiJbcmRwLT5ueHR0YWlsW1JDVV9XQUlUX1RBSUxdICE9CiAJCQlyZHAtPm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF1dLAogCQkgICAiLlciW3JkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSAhPQogCQkJcmRwLT5ueHR0YWlsW1JDVV9XQUlUX1RBSUxdXSwKLQkJICAgIi5EIlsmcmRwLT5ueHRsaXN0ICE9IHJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXV0sCisJCSAgICIuRCJbJnJkcC0+bnh0bGlzdCAhPSByZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF1dKTsKKyNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCisJc2VxX3ByaW50ZihtLCAiLCVkLFwiJWNcIiIsCiAJCSAgIHBlcl9jcHUocmN1X2NwdV9oYXNfd29yaywgcmRwLT5jcHUpLAogCQkgICBjb252ZXJ0X2t0aHJlYWRfc3RhdHVzKHBlcl9jcHUocmN1X2NwdV9rdGhyZWFkX3N0YXR1cywKLQkJCQkJICByZHAtPmNwdSkpLAotCQkgICByZHAtPmJsaW1pdCk7CisJCQkJCSAgcmRwLT5jcHUpKSk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QgKi8KKwlzZXFfcHJpbnRmKG0sICIsJWxkIiwgcmRwLT5ibGltaXQpOwogCXNlcV9wcmludGYobSwgIiwlbHUsJWx1LCVsdVxuIiwKIAkJICAgcmRwLT5uX2Nic19pbnZva2VkLCByZHAtPm5fY2JzX29ycGhhbmVkLCByZHAtPm5fY2JzX2Fkb3B0ZWQpOwogfQpAQCAtMTY5LDcgKzE3OSwxMSBAQAogI2lmZGVmIENPTkZJR19OT19IWgogCXNlcV9wdXRzKG0sICJcImR0XCIsXCJkdCBuZXN0aW5nXCIsXCJkdCBOTUkgbmVzdGluZ1wiLFwiZGZcIiwiKTsKICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCi0Jc2VxX3B1dHMobSwgIlwib2ZcIixcInJpXCIsXCJxbFwiLFwiYlwiLFwiY2lcIixcImNvXCIsXCJjYVwiXG4iKTsKKwlzZXFfcHV0cyhtLCAiXCJvZlwiLFwicmlcIixcInFsXCIsXCJxc1wiIik7CisjaWZkZWYgQ09ORklHX1JDVV9CT09TVAorCXNlcV9wdXRzKG0sICJcImt0XCIsXCJrdGxcIiIpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCisJc2VxX3B1dHMobSwgIixcImJcIixcImNpXCIsXCJjb1wiLFwiY2FcIlxuIik7CiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UKIAlzZXFfcHV0cyhtLCAiXCJyY3VfcHJlZW1wdDpcIlxuIik7CiAJUFJJTlRfUkNVX0RBVEEocmN1X3ByZWVtcHRfZGF0YSwgcHJpbnRfb25lX3JjdV9kYXRhX2NzdiwgbSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGNiYjNhMGUuLjNmMmU1MDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC02MDUsMTAgKzYwNSwxMCBAQAogLyoKICAqIFJldHVybiB0aGUgZ3JvdXAgdG8gd2hpY2ggdGhpcyB0YXNrcyBiZWxvbmdzLgogICoKLSAqIFdlIHVzZSB0YXNrX3N1YnN5c19zdGF0ZV9jaGVjaygpIGFuZCBleHRlbmQgdGhlIFJDVSB2ZXJpZmljYXRpb24KLSAqIHdpdGggbG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSBiZWNhdXNlIGNwdV9jZ3JvdXBfYXR0YWNoKCkKLSAqIGhvbGRzIHRoYXQgbG9jayBmb3IgZWFjaCB0YXNrIGl0IG1vdmVzIGludG8gdGhlIGNncm91cC4gVGhlcmVmb3JlCi0gKiBieSBob2xkaW5nIHRoYXQgbG9jaywgd2UgcGluIHRoZSB0YXNrIHRvIHRoZSBjdXJyZW50IGNncm91cC4KKyAqIFdlIHVzZSB0YXNrX3N1YnN5c19zdGF0ZV9jaGVjaygpIGFuZCBleHRlbmQgdGhlIFJDVSB2ZXJpZmljYXRpb24gd2l0aAorICogcGktPmxvY2sgYW5kIHJxLT5sb2NrIGJlY2F1c2UgY3B1X2Nncm91cF9hdHRhY2goKSBob2xkcyB0aG9zZSBsb2NrcyBmb3IgZWFjaAorICogdGFzayBpdCBtb3ZlcyBpbnRvIHRoZSBjZ3JvdXAuIFRoZXJlZm9yZSBieSBob2xkaW5nIGVpdGhlciBvZiB0aG9zZSBsb2NrcywKKyAqIHdlIHBpbiB0aGUgdGFzayB0byB0aGUgY3VycmVudCBjZ3JvdXAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfZ3JvdXAgKnRhc2tfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtNjE2LDcgKzYxNiw4IEBACiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIAogCWNzcyA9IHRhc2tfc3Vic3lzX3N0YXRlX2NoZWNrKHAsIGNwdV9jZ3JvdXBfc3Vic3lzX2lkLAotCQkJbG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSk7CisJCQlsb2NrZGVwX2lzX2hlbGQoJnAtPnBpX2xvY2spIHx8CisJCQlsb2NrZGVwX2lzX2hlbGQoJnRhc2tfcnEocCktPmxvY2spKTsKIAl0ZyA9IGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOwogCiAJcmV0dXJuIGF1dG9ncm91cF90YXNrX2dyb3VwKHAsIHRnKTsKQEAgLTIyMDAsNiArMjIwMSwxNiBAQAogCQkJISh0YXNrX3RocmVhZF9pbmZvKHApLT5wcmVlbXB0X2NvdW50ICYgUFJFRU1QVF9BQ1RJVkUpKTsKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCisJLyoKKwkgKiBUaGUgY2FsbGVyIHNob3VsZCBob2xkIGVpdGhlciBwLT5waV9sb2NrIG9yIHJxLT5sb2NrLCB3aGVuIGNoYW5naW5nCisJICogYSB0YXNrJ3MgQ1BVLiAtPnBpX2xvY2sgZm9yIHdha2luZyB0YXNrcywgcnEtPmxvY2sgZm9yIHJ1bm5hYmxlIHRhc2tzLgorCSAqCisJICogc2NoZWRfbW92ZV90YXNrKCkgaG9sZHMgYm90aCBhbmQgdGh1cyBob2xkaW5nIGVpdGhlciBwaW5zIHRoZSBjZ3JvdXAsCisJICogc2VlIHNldF90YXNrX3JxKCkuCisJICoKKwkgKiBGdXJ0aGVybW9yZSwgYWxsIHRhc2tfcnEgdXNlcnMgc2hvdWxkIGFjcXVpcmUgYm90aCBsb2Nrcywgc2VlCisJICogdGFza19ycV9sb2NrKCkuCisJICovCiAJV0FSTl9PTl9PTkNFKGRlYnVnX2xvY2tzICYmICEobG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSB8fAogCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmdGFza19ycShwKS0+bG9jaykpKTsKICNlbmRpZgpAQCAtMjQ0Nyw2ICsyNDU4LDEwIEBACiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQorCisJaWYgKHdha2VfZmxhZ3MgJiBXRl9NSUdSQVRFRCkKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfbWlncmF0ZSk7CisKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2NvdW50KTsKQEAgLTI0NTUsOSArMjQ3MCw2IEBACiAJaWYgKHdha2VfZmxhZ3MgJiBXRl9TWU5DKQogCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19zeW5jKTsKIAotCWlmIChjcHUgIT0gdGFza19jcHUocCkpCi0JCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX21pZ3JhdGUpOwotCiAjZW5kaWYgLyogQ09ORklHX1NDSEVEU1RBVFMgKi8KIH0KIApAQCAtMjYwMCw2ICsyNjEyLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKIAlpZiAoc2NoZWRfZmVhdChUVFdVX1FVRVVFKSAmJiBjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCXNjaGVkX2Nsb2NrX2NwdShjcHUpOyAvKiBzeW5jIGNsb2NrcyB4LWNwdSAqLwogCQl0dHd1X3F1ZXVlX3JlbW90ZShwLCBjcHUpOwogCQlyZXR1cm47CiAJfQpAQCAtMjY3NCw4ICsyNjg3LDEwIEBACiAJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2luZyhwKTsKIAogCWNwdSA9IHNlbGVjdF90YXNrX3JxKHAsIFNEX0JBTEFOQ0VfV0FLRSwgd2FrZV9mbGFncyk7Ci0JaWYgKHRhc2tfY3B1KHApICE9IGNwdSkKKwlpZiAodGFza19jcHUocCkgIT0gY3B1KSB7CisJCXdha2VfZmxhZ3MgfD0gV0ZfTUlHUkFURUQ7CiAJCXNldF90YXNrX2NwdShwLCBjcHUpOworCX0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAl0dHd1X3F1ZXVlKHAsIGNwdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IDg4NzI1YzkuLjEwZDAxODIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0xMDk2LDcgKzEwOTYsNyBAQAogCSAqIHRvIG1vdmUgY3VycmVudCBzb21ld2hlcmUgZWxzZSwgbWFraW5nIHJvb20gZm9yIG91ciBub24tbWlncmF0YWJsZQogCSAqIHRhc2suCiAJICovCi0JaWYgKHAtPnByaW8gPT0gcnEtPmN1cnItPnByaW8gJiYgIW5lZWRfcmVzY2hlZCgpKQorCWlmIChwLT5wcmlvID09IHJxLT5jdXJyLT5wcmlvICYmICF0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmN1cnIpKQogCQljaGVja19wcmVlbXB0X2VxdWFsX3ByaW8ocnEsIHApOwogI2VuZGlmCiB9CkBAIC0xMjM5LDYgKzEyMzksMTAgQEAKIAlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGNwdSAgICAgID0gdGFza19jcHUodGFzayk7CiAKKwkvKiBNYWtlIHN1cmUgdGhlIG1hc2sgaXMgaW5pdGlhbGl6ZWQgZmlyc3QgKi8KKwlpZiAodW5saWtlbHkoIWxvd2VzdF9tYXNrKSkKKwkJcmV0dXJuIC0xOworCiAJaWYgKHRhc2stPnJ0Lm5yX2NwdXNfYWxsb3dlZCA9PSAxKQogCQlyZXR1cm4gLTE7IC8qIE5vIG90aGVyIHRhcmdldHMgcG9zc2libGUgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDg2YzMyYjguLmZmNzY3ODYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTIzNjUsNyArMjM2NSw3IEBACiAvKioKICAqICBzeXNfcnRfc2lncHJvY21hc2sgLSBjaGFuZ2UgdGhlIGxpc3Qgb2YgY3VycmVudGx5IGJsb2NrZWQgc2lnbmFscwogICogIEBob3c6IHdoZXRoZXIgdG8gYWRkLCByZW1vdmUsIG9yIHNldCBzaWduYWxzCi0gKiAgQHNldDogc3RvcmVzIHBlbmRpbmcgc2lnbmFscworICogIEBuc2V0OiBzdG9yZXMgcGVuZGluZyBzaWduYWxzCiAgKiAgQG9zZXQ6IHByZXZpb3VzIHZhbHVlIG9mIHNpZ25hbCBtYXNrIGlmIG5vbi1udWxsCiAgKiAgQHNpZ3NldHNpemU6IHNpemUgb2Ygc2lnc2V0X3QgdHlwZQogICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc21wLmMgYi9rZXJuZWwvc21wLmMKaW5kZXggNzNhMTk1MS4uZmI2N2RmYSAxMDA2NDQKLS0tIGEva2VybmVsL3NtcC5jCisrKyBiL2tlcm5lbC9zbXAuYwpAQCAtNzQsNyArNzQsNyBAQAogCS5ub3RpZmllcl9jYWxsCQk9IGhvdHBsdWdfY2ZkLAogfTsKIAotc3RhdGljIGludCBfX2NwdWluaXQgaW5pdF9jYWxsX3NpbmdsZV9kYXRhKHZvaWQpCit2b2lkIF9faW5pdCBjYWxsX2Z1bmN0aW9uX2luaXQodm9pZCkKIHsKIAl2b2lkICpjcHUgPSAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgaTsKQEAgLTg4LDEwICs4OCw3IEBACiAKIAlob3RwbHVnX2NmZCgmaG90cGx1Z19jZmRfbm90aWZpZXIsIENQVV9VUF9QUkVQQVJFLCBjcHUpOwogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmaG90cGx1Z19jZmRfbm90aWZpZXIpOwotCi0JcmV0dXJuIDA7CiB9Ci1lYXJseV9pbml0Y2FsbChpbml0X2NhbGxfc2luZ2xlX2RhdGEpOwogCiAvKgogICogY3NkX2xvY2svY3NkX3VubG9jayB1c2VkIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gcGVyLWNwdSBjc2QgcmVzb3VyY2VzCmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCAxMzk2MDE3Li40MGNmNjNkIDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogY2hhciAqc29mdGlycV90b19uYW1lW05SX1NPRlRJUlFTXSA9IHsKIAkiSEkiLCAiVElNRVIiLCAiTkVUX1RYIiwgIk5FVF9SWCIsICJCTE9DSyIsICJCTE9DS19JT1BPTEwiLAotCSJUQVNLTEVUIiwgIlNDSEVEIiwgIkhSVElNRVIiCisJIlRBU0tMRVQiLCAiU0NIRUQiLCAiSFJUSU1FUiIsICJSQ1UiCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDRmYzkyNDQuLmYxNzVkOTggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTkzOCw2ICs5MzgsMTIgQEAKIAl9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisJLyoKKwkgKiBVc2VyLXNwYWNlIHNjcmlwdHMgcmVseSBvbiB0aGUgZXhpc3RlbmNlIG9mIHRoaXMgZmlsZQorCSAqIGFzIGEgZmVhdHVyZSBjaGVjayBmb3IgcGVyZl9ldmVudHMgYmVpbmcgZW5hYmxlZC4KKwkgKgorCSAqIFNvIGl0J3MgYW4gQUJJLCBkbyBub3QgcmVtb3ZlIQorCSAqLwogCXsKIAkJLnByb2NuYW1lCT0gInBlcmZfZXZlbnRfcGFyYW5vaWQiLAogCQkuZGF0YQkJPSAmc3lzY3RsX3BlcmZfZXZlbnRfcGFyYW5vaWQsCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwppbmRleCBjMDI3ZDRmLi5lNGM2OTlkIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKQEAgLTE4Miw3ICsxODIsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKGRldi0+bW9kZSAhPSBDTE9DS19FVlRfTU9ERV9VTlVTRUQpOwotCUJVR19PTighZGV2LT5jcHVtYXNrKTsKKwlpZiAoIWRldi0+Y3B1bWFzaykgeworCQlXQVJOX09OKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKTsKKwkJZGV2LT5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KIAogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tldmVudHNfbG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCAxYzk1ZmQ2Li5lMDk4MGYwIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTE4NSw3ICsxODUsNiBAQAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHdhdGNoZG9nX3RpbWVyOwogc3RhdGljIERFQ0xBUkVfV09SSyh3YXRjaGRvZ193b3JrLCBjbG9ja3NvdXJjZV93YXRjaGRvZ193b3JrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sod2F0Y2hkb2dfbG9jayk7Ci1zdGF0aWMgY3ljbGVfdCB3YXRjaGRvZ19sYXN0Owogc3RhdGljIGludCB3YXRjaGRvZ19ydW5uaW5nOwogCiBzdGF0aWMgaW50IGNsb2Nrc291cmNlX3dhdGNoZG9nX2t0aHJlYWQodm9pZCAqZGF0YSk7CkBAIC0yNTQsMTEgKzI1Myw2IEBACiAJaWYgKCF3YXRjaGRvZ19ydW5uaW5nKQogCQlnb3RvIG91dDsKIAotCXdkbm93ID0gd2F0Y2hkb2ctPnJlYWQod2F0Y2hkb2cpOwotCXdkX25zZWMgPSBjbG9ja3NvdXJjZV9jeWMybnMoKHdkbm93IC0gd2F0Y2hkb2dfbGFzdCkgJiB3YXRjaGRvZy0+bWFzaywKLQkJCQkgICAgIHdhdGNoZG9nLT5tdWx0LCB3YXRjaGRvZy0+c2hpZnQpOwotCXdhdGNoZG9nX2xhc3QgPSB3ZG5vdzsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnkoY3MsICZ3YXRjaGRvZ19saXN0LCB3ZF9saXN0KSB7CiAKIAkJLyogQ2xvY2tzb3VyY2UgYWxyZWFkeSBtYXJrZWQgdW5zdGFibGU/ICovCkBAIC0yNjgsMTkgKzI2MiwyOCBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQljc25vdyA9IGNzLT5yZWFkKGNzKTsKKwkJd2Rub3cgPSB3YXRjaGRvZy0+cmVhZCh3YXRjaGRvZyk7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCQkvKiBDbG9ja3NvdXJjZSBpbml0aWFsaXplZCA/ICovCiAJCWlmICghKGNzLT5mbGFncyAmIENMT0NLX1NPVVJDRV9XQVRDSERPRykpIHsKIAkJCWNzLT5mbGFncyB8PSBDTE9DS19TT1VSQ0VfV0FUQ0hET0c7Ci0JCQljcy0+d2RfbGFzdCA9IGNzbm93OworCQkJY3MtPndkX2xhc3QgPSB3ZG5vdzsKKwkJCWNzLT5jc19sYXN0ID0gY3Nub3c7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIENoZWNrIHRoZSBkZXZpYXRpb24gZnJvbSB0aGUgd2F0Y2hkb2cgY2xvY2tzb3VyY2UuICovCi0JCWNzX25zZWMgPSBjbG9ja3NvdXJjZV9jeWMybnMoKGNzbm93IC0gY3MtPndkX2xhc3QpICYKKwkJd2RfbnNlYyA9IGNsb2Nrc291cmNlX2N5YzJucygod2Rub3cgLSBjcy0+d2RfbGFzdCkgJiB3YXRjaGRvZy0+bWFzaywKKwkJCQkJICAgICB3YXRjaGRvZy0+bXVsdCwgd2F0Y2hkb2ctPnNoaWZ0KTsKKworCQljc19uc2VjID0gY2xvY2tzb3VyY2VfY3ljMm5zKChjc25vdyAtIGNzLT5jc19sYXN0KSAmCiAJCQkJCSAgICAgY3MtPm1hc2ssIGNzLT5tdWx0LCBjcy0+c2hpZnQpOwotCQljcy0+d2RfbGFzdCA9IGNzbm93OworCQljcy0+Y3NfbGFzdCA9IGNzbm93OworCQljcy0+d2RfbGFzdCA9IHdkbm93OworCisJCS8qIENoZWNrIHRoZSBkZXZpYXRpb24gZnJvbSB0aGUgd2F0Y2hkb2cgY2xvY2tzb3VyY2UuICovCiAJCWlmIChhYnMoY3NfbnNlYyAtIHdkX25zZWMpID4gV0FUQ0hET0dfVEhSRVNIT0xEKSB7CiAJCQljbG9ja3NvdXJjZV91bnN0YWJsZShjcywgY3NfbnNlYyAtIHdkX25zZWMpOwogCQkJY29udGludWU7CkBAIC0zMTgsNyArMzIxLDYgQEAKIAkJcmV0dXJuOwogCWluaXRfdGltZXIoJndhdGNoZG9nX3RpbWVyKTsKIAl3YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9IGNsb2Nrc291cmNlX3dhdGNoZG9nOwotCXdhdGNoZG9nX2xhc3QgPSB3YXRjaGRvZy0+cmVhZCh3YXRjaGRvZyk7CiAJd2F0Y2hkb2dfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBXQVRDSERPR19JTlRFUlZBTDsKIAlhZGRfdGltZXJfb24oJndhdGNoZG9nX3RpbWVyLCBjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzaykpOwogCXdhdGNoZG9nX3J1bm5pbmcgPSAxOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCBmZDYxOTg2Li44Y2ZmMzYxIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtNzQ5LDE2ICs3NDksMTUgQEAKIAl1bnNpZ25lZCBsb25nIGV4cGlyZXNfbGltaXQsIG1hc2s7CiAJaW50IGJpdDsKIAotCWV4cGlyZXNfbGltaXQgPSBleHBpcmVzOwotCiAJaWYgKHRpbWVyLT5zbGFjayA+PSAwKSB7CiAJCWV4cGlyZXNfbGltaXQgPSBleHBpcmVzICsgdGltZXItPnNsYWNrOwogCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwkJbG9uZyBkZWx0YSA9IGV4cGlyZXMgLSBqaWZmaWVzOwogCi0JCS8qIE5vIHNsYWNrLCBpZiBhbHJlYWR5IGV4cGlyZWQgZWxzZSBhdXRvIHNsYWNrIDAuNCUgKi8KLQkJaWYgKHRpbWVfYWZ0ZXIoZXhwaXJlcywgbm93KSkKLQkJCWV4cGlyZXNfbGltaXQgPSBleHBpcmVzICsgKGV4cGlyZXMgLSBub3cpLzI1NjsKKwkJaWYgKGRlbHRhIDwgMjU2KQorCQkJcmV0dXJuIGV4cGlyZXM7CisKKwkJZXhwaXJlc19saW1pdCA9IGV4cGlyZXMgKyBkZWx0YSAvIDI1NjsKIAl9CiAJbWFzayA9IGV4cGlyZXMgXiBleHBpcmVzX2xpbWl0OwogCWlmIChtYXNrID09IDApCkBAIC03OTUsNiArNzk0LDggQEAKICAqLwogaW50IG1vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKIHsKKwlleHBpcmVzID0gYXBwbHlfc2xhY2sodGltZXIsIGV4cGlyZXMpOworCiAJLyoKIAkgKiBUaGlzIGlzIGEgY29tbW9uIG9wdGltaXphdGlvbiB0cmlnZ2VyZWQgYnkgdGhlCiAJICogbmV0d29ya2luZyBjb2RlIC0gaWYgdGhlIHRpbWVyIGlzIHJlLW1vZGlmaWVkCkBAIC04MDMsOCArODA0LDYgQEAKIAlpZiAodGltZXJfcGVuZGluZyh0aW1lcikgJiYgdGltZXItPmV4cGlyZXMgPT0gZXhwaXJlcykKIAkJcmV0dXJuIDE7CiAKLQlleHBpcmVzID0gYXBwbHlfc2xhY2sodGltZXIsIGV4cGlyZXMpOwotCiAJcmV0dXJuIF9fbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzLCBmYWxzZSwgVElNRVJfTk9UX1BJTk5FRCk7CiB9CiBFWFBPUlRfU1lNQk9MKG1vZF90aW1lcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggMWVlNDE3Zi4uOTA4MDM4ZiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMjc0MCw3ICsyNzQwLDcgQEAKIHsKIAljaGFyICpmdW5jLCAqY29tbWFuZCwgKm5leHQgPSBidWZmOwogCXN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpwOwotCWludCByZXQ7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlmdW5jID0gc3Ryc2VwKCZuZXh0LCAiOiIpOwogCkBAIC0zMzMwLDYgKzMzMzAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgKnA7CiAJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJcCA9IHN0YXJ0OwpAQCAtMzM0Niw3ICszMzQ3LDEzIEBACiAJCWZ0cmFjZV9yZWNvcmRfaXAoYWRkcik7CiAJfQogCisJLyoKKwkgKiBEaXNhYmxlIGludGVycnVwdHMgdG8gcHJldmVudCBpbnRlcnJ1cHRzIGZyb20gZXhlY3V0aW5nCisJICogY29kZSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmdHJhY2VfdXBkYXRlX2NvZGUobW9kKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwppbmRleCBmOTI1YzQ1Li4yN2QxM2IzIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCkBAIC0xODcwLDggKzE4NzAsMTIgQEAKIAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUCiAKLXN0YXRpYyBpbnQga3Byb2JlX3RyYWNlX3NlbGZ0ZXN0X3RhcmdldChpbnQgYTEsIGludCBhMiwgaW50IGEzLAotCQkJCQlpbnQgYTQsIGludCBhNSwgaW50IGE2KQorLyoKKyAqIFRoZSAiX191c2VkIiBrZWVwcyBnY2MgZnJvbSByZW1vdmluZyB0aGUgZnVuY3Rpb24gc3ltYm9sCisgKiBmcm9tIHRoZSBrYWxsc3ltcyB0YWJsZS4KKyAqLworc3RhdGljIF9fdXNlZCBpbnQga3Byb2JlX3RyYWNlX3NlbGZ0ZXN0X3RhcmdldChpbnQgYTEsIGludCBhMiwgaW50IGEzLAorCQkJCQkgICAgICAgaW50IGE0LCBpbnQgYTUsIGludCBhNikKIHsKIAlyZXR1cm4gYTEgKyBhMiArIGEzICsgYTQgKyBhNSArIGE2OwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jCmluZGV4IGRmZjc2M2IuLjFmMDY0NjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMKQEAgLTI0MCwxMyArMjQwLDEwIEBACiAJY29uc3QgY2hhciAqKmZtdCA9IHY7CiAJaW50IHN0YXJ0X2luZGV4OwogCi0JaWYgKCFmbXQpCi0JCWZtdCA9IF9fc3RhcnRfX190cmFjZV9icHJpbnRrX2ZtdCArICpwb3M7Ci0KIAlzdGFydF9pbmRleCA9IF9fc3RvcF9fX3RyYWNlX2JwcmludGtfZm10IC0gX19zdGFydF9fX3RyYWNlX2JwcmludGtfZm10OwogCiAJaWYgKCpwb3MgPCBzdGFydF9pbmRleCkKLQkJcmV0dXJuIGZtdDsKKwkJcmV0dXJuIF9fc3RhcnRfX190cmFjZV9icHJpbnRrX2ZtdCArICpwb3M7CiAKIAlyZXR1cm4gZmluZF9uZXh0X21vZF9mb3JtYXQoc3RhcnRfaW5kZXgsIHYsIGZtdCwgcG9zKTsKIH0KZGlmZiAtLWdpdCBhL2xpYi9iaXRtYXAuYyBiL2xpYi9iaXRtYXAuYwppbmRleCA0MWJhZjAyLi4zZjNiNjgxIDEwMDY0NAotLS0gYS9saWIvYml0bWFwLmMKKysrIGIvbGliL2JpdG1hcC5jCkBAIC01NzIsNyArNTcyLDcgQEAKIAogLyoqCiAgKiBfX2JpdG1hcF9wYXJzZWxpc3QgLSBjb252ZXJ0IGxpc3QgZm9ybWF0IEFTQ0lJIHN0cmluZyB0byBiaXRtYXAKLSAqIEBicDogcmVhZCBudWwtdGVybWluYXRlZCB1c2VyIHN0cmluZyBmcm9tIHRoaXMgYnVmZmVyCisgKiBAYnVmOiByZWFkIG51bC10ZXJtaW5hdGVkIHVzZXIgc3RyaW5nIGZyb20gdGhpcyBidWZmZXIKICAqIEBidWZsZW46IGJ1ZmZlciBzaXplIGluIGJ5dGVzLiAgSWYgc3RyaW5nIGlzIHNtYWxsZXIgdGhhbiB0aGlzCiAgKiAgICB0aGVuIGl0IG11c3QgYmUgdGVybWluYXRlZCB3aXRoIGEgXDAuCiAgKiBAaXNfdXNlcjogbG9jYXRpb24gb2YgYnVmZmVyLCAwIGluZGljYXRlcyBrZXJuZWwgc3BhY2UKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IDgyZGMzNGMuLjY0MGJkOTggMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtOTQ4LDE0ICs5NDgsMTQgQEAKIH0KIAogCi1jb25zdCB2b2lkICprb2JqX25zX2N1cnJlbnQoZW51bSBrb2JqX25zX3R5cGUgdHlwZSkKK3ZvaWQgKmtvYmpfbnNfZ3JhYl9jdXJyZW50KGVudW0ga29ial9uc190eXBlIHR5cGUpCiB7Ci0JY29uc3Qgdm9pZCAqbnMgPSBOVUxMOworCXZvaWQgKm5zID0gTlVMTDsKIAogCXNwaW5fbG9jaygma29ial9uc190eXBlX2xvY2spOwogCWlmICgodHlwZSA+IEtPQkpfTlNfVFlQRV9OT05FKSAmJiAodHlwZSA8IEtPQkpfTlNfVFlQRVMpICYmCiAJICAgIGtvYmpfbnNfb3BzX3RibFt0eXBlXSkKLQkJbnMgPSBrb2JqX25zX29wc190YmxbdHlwZV0tPmN1cnJlbnRfbnMoKTsKKwkJbnMgPSBrb2JqX25zX29wc190YmxbdHlwZV0tPmdyYWJfY3VycmVudF9ucygpOwogCXNwaW5fdW5sb2NrKCZrb2JqX25zX3R5cGVfbG9jayk7CiAKIAlyZXR1cm4gbnM7CkBAIC05ODcsMjMgKzk4NywxNSBAQAogCXJldHVybiBuczsKIH0KIAotLyoKLSAqIGtvYmpfbnNfZXhpdCAtIGludmFsaWRhdGUgYSBuYW1lc3BhY2UgdGFnCi0gKgotICogQHR5cGU6IHRoZSBuYW1lc3BhY2UgdHlwZSAoaS5lLiBLT0JKX05TX1RZUEVfTkVUKQotICogQG5zOiB0aGUgYWN0dWFsIG5hbWVzcGFjZSBiZWluZyBpbnZhbGlkYXRlZAotICoKLSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSB0YWcgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgRm9yIGluc3RhbmNlLAotICogd2hlbiBhIG5ldHdvcmsgbmFtZXNwYWNlIGV4aXRzLCBpdCB1c2VzIHRoaXMgaGVscGVyIHRvCi0gKiBtYWtlIHN1cmUgbm8gc2IncyBzeXNmc19pbmZvIHBvaW50cyB0byB0aGUgbm93LWludmFsaWRhdGVkCi0gKiBuZXRucy4KLSAqLwotdm9pZCBrb2JqX25zX2V4aXQoZW51bSBrb2JqX25zX3R5cGUgdHlwZSwgY29uc3Qgdm9pZCAqbnMpCit2b2lkIGtvYmpfbnNfZHJvcChlbnVtIGtvYmpfbnNfdHlwZSB0eXBlLCB2b2lkICpucykKIHsKLQlzeXNmc19leGl0X25zKHR5cGUsIG5zKTsKKwlzcGluX2xvY2soJmtvYmpfbnNfdHlwZV9sb2NrKTsKKwlpZiAoKHR5cGUgPiBLT0JKX05TX1RZUEVfTk9ORSkgJiYgKHR5cGUgPCBLT0JKX05TX1RZUEVTKSAmJgorCSAgICBrb2JqX25zX29wc190YmxbdHlwZV0gJiYga29ial9uc19vcHNfdGJsW3R5cGVdLT5kcm9wX25zKQorCQlrb2JqX25zX29wc190YmxbdHlwZV0tPmRyb3BfbnMobnMpOworCXNwaW5fdW5sb2NrKCZrb2JqX25zX3R5cGVfbG9jayk7CiB9CiAKLQogRVhQT1JUX1NZTUJPTChrb2JqZWN0X2dldCk7CiBFWFBPUlRfU1lNQk9MKGtvYmplY3RfcHV0KTsKIEVYUE9SVF9TWU1CT0woa29iamVjdF9kZWwpOwpkaWZmIC0tZ2l0IGEvbGliL3N3aW90bGIuYyBiL2xpYi9zd2lvdGxiLmMKaW5kZXggOTNjYTA4Yi4uOTkwOTNiMyAxMDA2NDQKLS0tIGEvbGliL3N3aW90bGIuYworKysgYi9saWIvc3dpb3RsYi5jCkBAIC0xMTAsNiArMTEwLDExIEBACiBfX3NldHVwKCJzd2lvdGxiPSIsIHNldHVwX2lvX3RsYl9ucGFnZXMpOwogLyogbWFrZSBpb190bGJfb3ZlcmZsb3cgdHVuYWJsZSB0b28/ICovCiAKK3Vuc2lnbmVkIGxvbmcgc3dpb2x0Yl9ucl90Ymwodm9pZCkKK3sKKwlyZXR1cm4gaW9fdGxiX25zbGFiczsKK30KKwogLyogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB3b3JrIHdpdGggaGlnaG1lbSBwYWdlICovCiBzdGF0aWMgZG1hX2FkZHJfdCBzd2lvdGxiX3ZpcnRfdG9fYnVzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAogCQkJCSAgICAgIHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpCmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IGMxMTIwNTYuLjQzNjVkZjMgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC02NjYsNiArNjY2LDggQEAKIAkJCWNvbG9ucG9zID0gaTsKIAkJfQogCX0KKwlpZiAobG9uZ2VzdCA9PSAxKQkJLyogZG9uJ3QgY29tcHJlc3MgYSBzaW5nbGUgMCAqLworCQljb2xvbnBvcyA9IC0xOwogCiAJLyogZW1pdCBhZGRyZXNzICovCiAJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKQEAgLTgyNiw3ICs4MjgsNyBAQAogICogICAgICAgSVB2NCB1c2VzIGRvdC1zZXBhcmF0ZWQgZGVjaW1hbCB3aXRoIGxlYWRpbmcgMCdzICgwMTAuMTIzLjA0NS4wMDYpCiAgKiAtICdbSWldNFtobmJsXScgSVB2NCBhZGRyZXNzZXMgaW4gaG9zdCwgbmV0d29yaywgYmlnIG9yIGxpdHRsZSBlbmRpYW4gb3JkZXIKICAqIC0gJ0k2YycgZm9yIElQdjYgYWRkcmVzc2VzIHByaW50ZWQgYXMgc3BlY2lmaWVkIGJ5Ci0gKiAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLTZtYW4tdGV4dC1hZGRyLXJlcHJlc2VudGF0aW9uLTAwCisgKiAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1OTUyCiAgKiAtICdVJyBGb3IgYSAxNiBieXRlIFVVSUQvR1VJRCwgaXQgcHJpbnRzIHRoZSBVVUlEL0dVSUQgaW4gdGhlIGZvcm0KICAqICAgICAgICJ4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiCiAgKiAgICAgICBPcHRpb25zIGZvciAlcFUgYXJlOgpkaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jCmluZGV4IDAyMWEyOTYuLjZjYzYwNGIgMTAwNjQ0Ci0tLSBhL21tL2NvbXBhY3Rpb24uYworKysgYi9tbS9jb21wYWN0aW9uLmMKQEAgLTE0NCw5ICsxNDQsMjAgQEAKIAlpbnQgbnJfZnJlZXBhZ2VzID0gY2MtPm5yX2ZyZWVwYWdlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlbGlzdCA9ICZjYy0+ZnJlZXBhZ2VzOwogCisJLyoKKwkgKiBJbml0aWFsaXNlIHRoZSBmcmVlIHNjYW5uZXIuIFRoZSBzdGFydGluZyBwb2ludCBpcyB3aGVyZSB3ZSBsYXN0CisJICogc2Nhbm5lZCBmcm9tIChvciB0aGUgZW5kIG9mIHRoZSB6b25lIGlmIHN0YXJ0aW5nKS4gVGhlIGxvdyBwb2ludAorCSAqIGlzIHRoZSBlbmQgb2YgdGhlIHBhZ2VibG9jayB0aGUgbWlncmF0aW9uIHNjYW5uZXIgaXMgdXNpbmcuCisJICovCiAJcGZuID0gY2MtPmZyZWVfcGZuOwogCWxvd19wZm4gPSBjYy0+bWlncmF0ZV9wZm4gKyBwYWdlYmxvY2tfbnJfcGFnZXM7Ci0JaGlnaF9wZm4gPSBsb3dfcGZuOworCisJLyoKKwkgKiBUYWtlIGNhcmUgdGhhdCBpZiB0aGUgbWlncmF0aW9uIHNjYW5uZXIgaXMgYXQgdGhlIGVuZCBvZiB0aGUgem9uZQorCSAqIHRoYXQgdGhlIGZyZWUgc2Nhbm5lciBkb2VzIG5vdCBhY2NpZGVudGFsbHkgbW92ZSB0byB0aGUgbmV4dCB6b25lCisJICogaW4gdGhlIG5leHQgaXNvbGF0aW9uIGN5Y2xlLgorCSAqLworCWhpZ2hfcGZuID0gbWluKGxvd19wZm4sIHBmbik7CiAKIAkvKgogCSAqIElzb2xhdGUgZnJlZSBwYWdlcyB1bnRpbCBlbm91Z2ggYXJlIGF2YWlsYWJsZSB0byBtaWdyYXRlIHRoZQpAQCAtMjQwLDExICsyNTEsMTggQEAKIAlyZXR1cm4gaXNvbGF0ZWQgPiAoaW5hY3RpdmUgKyBhY3RpdmUpIC8gMjsKIH0KIAorLyogcG9zc2libGUgb3V0Y29tZSBvZiBpc29sYXRlX21pZ3JhdGVwYWdlcyAqLwordHlwZWRlZiBlbnVtIHsKKwlJU09MQVRFX0FCT1JULAkJLyogQWJvcnQgY29tcGFjdGlvbiBub3cgKi8KKwlJU09MQVRFX05PTkUsCQkvKiBObyBwYWdlcyBpc29sYXRlZCwgY29udGludWUgc2Nhbm5pbmcgKi8KKwlJU09MQVRFX1NVQ0NFU1MsCS8qIFBhZ2VzIGlzb2xhdGVkLCBtaWdyYXRlICovCit9IGlzb2xhdGVfbWlncmF0ZV90OworCiAvKgogICogSXNvbGF0ZSBhbGwgcGFnZXMgdGhhdCBjYW4gYmUgbWlncmF0ZWQgZnJvbSB0aGUgYmxvY2sgcG9pbnRlZCB0byBieQogICogdGhlIG1pZ3JhdGUgc2Nhbm5lciB3aXRoaW4gY29tcGFjdF9jb250cm9sLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpc29sYXRlX21pZ3JhdGVwYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwKK3N0YXRpYyBpc29sYXRlX21pZ3JhdGVfdCBpc29sYXRlX21pZ3JhdGVwYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwKIAkJCQkJc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpCiB7CiAJdW5zaWduZWQgbG9uZyBsb3dfcGZuLCBlbmRfcGZuOwpAQCAtMjYxLDcgKzI3OSw3IEBACiAJLyogRG8gbm90IGNyb3NzIHRoZSBmcmVlIHNjYW5uZXIgb3Igc2NhbiB3aXRoaW4gYSBtZW1vcnkgaG9sZSAqLwogCWlmIChlbmRfcGZuID4gY2MtPmZyZWVfcGZuIHx8ICFwZm5fdmFsaWQobG93X3BmbikpIHsKIAkJY2MtPm1pZ3JhdGVfcGZuID0gZW5kX3BmbjsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBJU09MQVRFX05PTkU7CiAJfQogCiAJLyoKQEAgLTI3MCwxMCArMjg4LDE0IEBACiAJICogZGVsYXkgZm9yIHNvbWUgdGltZSB1bnRpbCBmZXdlciBwYWdlcyBhcmUgaXNvbGF0ZWQKIAkgKi8KIAl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQoem9uZSkpKSB7CisJCS8qIGFzeW5jIG1pZ3JhdGlvbiBzaG91bGQganVzdCBhYm9ydCAqLworCQlpZiAoIWNjLT5zeW5jKQorCQkJcmV0dXJuIElTT0xBVEVfQUJPUlQ7CisKIAkJY29uZ2VzdGlvbl93YWl0KEJMS19SV19BU1lOQywgSFovMTApOwogCiAJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIElTT0xBVEVfQUJPUlQ7CiAJfQogCiAJLyogVGltZSB0byBpc29sYXRlIHNvbWUgcGFnZXMgZm9yIG1pZ3JhdGlvbiAqLwpAQCAtMzU4LDcgKzM4MCw3IEBACiAKIAl0cmFjZV9tbV9jb21wYWN0aW9uX2lzb2xhdGVfbWlncmF0ZXBhZ2VzKG5yX3NjYW5uZWQsIG5yX2lzb2xhdGVkKTsKIAotCXJldHVybiBjYy0+bnJfbWlncmF0ZXBhZ2VzOworCXJldHVybiBJU09MQVRFX1NVQ0NFU1M7CiB9CiAKIC8qCkBAIC00MjAsMTMgKzQ0Miw2IEBACiAJaWYgKGNjLT5mcmVlX3BmbiA8PSBjYy0+bWlncmF0ZV9wZm4pCiAJCXJldHVybiBDT01QQUNUX0NPTVBMRVRFOwogCi0JLyogQ29tcGFjdGlvbiBydW4gaXMgbm90IGZpbmlzaGVkIGlmIHRoZSB3YXRlcm1hcmsgaXMgbm90IG1ldCAqLwotCXdhdGVybWFyayA9IGxvd193bWFya19wYWdlcyh6b25lKTsKLQl3YXRlcm1hcmsgKz0gKDEgPDwgY2MtPm9yZGVyKTsKLQotCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgY2MtPm9yZGVyLCB3YXRlcm1hcmssIDAsIDApKQotCQlyZXR1cm4gQ09NUEFDVF9DT05USU5VRTsKLQogCS8qCiAJICogb3JkZXIgPT0gLTEgaXMgZXhwZWN0ZWQgd2hlbiBjb21wYWN0aW5nIHZpYQogCSAqIC9wcm9jL3N5cy92bS9jb21wYWN0X21lbW9yeQpAQCAtNDM0LDYgKzQ0OSwxMyBAQAogCWlmIChjYy0+b3JkZXIgPT0gLTEpCiAJCXJldHVybiBDT01QQUNUX0NPTlRJTlVFOwogCisJLyogQ29tcGFjdGlvbiBydW4gaXMgbm90IGZpbmlzaGVkIGlmIHRoZSB3YXRlcm1hcmsgaXMgbm90IG1ldCAqLworCXdhdGVybWFyayA9IGxvd193bWFya19wYWdlcyh6b25lKTsKKwl3YXRlcm1hcmsgKz0gKDEgPDwgY2MtPm9yZGVyKTsKKworCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgY2MtPm9yZGVyLCB3YXRlcm1hcmssIDAsIDApKQorCQlyZXR1cm4gQ09NUEFDVF9DT05USU5VRTsKKwogCS8qIERpcmVjdCBjb21wYWN0b3I6IElzIGEgc3VpdGFibGUgcGFnZSBmcmVlPyAqLwogCWZvciAob3JkZXIgPSBjYy0+b3JkZXI7IG9yZGVyIDwgTUFYX09SREVSOyBvcmRlcisrKSB7CiAJCS8qIEpvYiBkb25lIGlmIHBhZ2UgaXMgZnJlZSBvZiB0aGUgcmlnaHQgbWlncmF0ZXR5cGUgKi8KQEAgLTQ2MSw2ICs0ODMsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHdhdGVybWFyazsKIAogCS8qCisJICogb3JkZXIgPT0gLTEgaXMgZXhwZWN0ZWQgd2hlbiBjb21wYWN0aW5nIHZpYQorCSAqIC9wcm9jL3N5cy92bS9jb21wYWN0X21lbW9yeQorCSAqLworCWlmIChvcmRlciA9PSAtMSkKKwkJcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7CisKKwkvKgogCSAqIFdhdGVybWFya3MgZm9yIG9yZGVyLTAgbXVzdCBiZSBtZXQgZm9yIGNvbXBhY3Rpb24uIE5vdGUgdGhlIDJVTC4KIAkgKiBUaGlzIGlzIGJlY2F1c2UgZHVyaW5nIG1pZ3JhdGlvbiwgY29waWVzIG9mIHBhZ2VzIG5lZWQgdG8gYmUKIAkgKiBhbGxvY2F0ZWQgYW5kIGZvciBhIHNob3J0IHRpbWUsIHRoZSBmb290cHJpbnQgaXMgaGlnaGVyCkBAIC00NzAsMTcgKzQ5OSwxMSBAQAogCQlyZXR1cm4gQ09NUEFDVF9TS0lQUEVEOwogCiAJLyoKLQkgKiBvcmRlciA9PSAtMSBpcyBleHBlY3RlZCB3aGVuIGNvbXBhY3RpbmcgdmlhCi0JICogL3Byb2Mvc3lzL3ZtL2NvbXBhY3RfbWVtb3J5Ci0JICovCi0JaWYgKG9yZGVyID09IC0xKQotCQlyZXR1cm4gQ09NUEFDVF9DT05USU5VRTsKLQotCS8qCiAJICogZnJhZ21lbnRhdGlvbiBpbmRleCBkZXRlcm1pbmVzIGlmIGFsbG9jYXRpb24gZmFpbHVyZXMgYXJlIGR1ZSB0bwogCSAqIGxvdyBtZW1vcnkgb3IgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbgogCSAqCi0JICogaW5kZXggb2YgLTEgaW1wbGllcyBhbGxvY2F0aW9ucyBtaWdodCBzdWNjZWVkIGRlcGVuZGluZ29uIHdhdGVybWFya3MKKwkgKiBpbmRleCBvZiAtMTAwMCBpbXBsaWVzIGFsbG9jYXRpb25zIG1pZ2h0IHN1Y2NlZWQgZGVwZW5kaW5nIG9uCisJICogd2F0ZXJtYXJrcwogCSAqIGluZGV4IHRvd2FyZHMgMCBpbXBsaWVzIGZhaWx1cmUgaXMgZHVlIHRvIGxhY2sgb2YgbWVtb3J5CiAJICogaW5kZXggdG93YXJkcyAxMDAwIGltcGxpZXMgZmFpbHVyZSBpcyBkdWUgdG8gZnJhZ21lbnRhdGlvbgogCSAqCkBAIC00OTAsNyArNTEzLDggQEAKIAlpZiAoZnJhZ2luZGV4ID49IDAgJiYgZnJhZ2luZGV4IDw9IHN5c2N0bF9leHRmcmFnX3RocmVzaG9sZCkKIAkJcmV0dXJuIENPTVBBQ1RfU0tJUFBFRDsKIAotCWlmIChmcmFnaW5kZXggPT0gLTEgJiYgem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgMCwgMCkpCisJaWYgKGZyYWdpbmRleCA9PSAtMTAwMCAmJiB6b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgd2F0ZXJtYXJrLAorCSAgICAwLCAwKSkKIAkJcmV0dXJuIENPTVBBQ1RfUEFSVElBTDsKIAogCXJldHVybiBDT01QQUNUX0NPTlRJTlVFOwpAQCAtNTIyLDggKzU0NiwxNSBAQAogCQl1bnNpZ25lZCBsb25nIG5yX21pZ3JhdGUsIG5yX3JlbWFpbmluZzsKIAkJaW50IGVycjsKIAotCQlpZiAoIWlzb2xhdGVfbWlncmF0ZXBhZ2VzKHpvbmUsIGNjKSkKKwkJc3dpdGNoIChpc29sYXRlX21pZ3JhdGVwYWdlcyh6b25lLCBjYykpIHsKKwkJY2FzZSBJU09MQVRFX0FCT1JUOgorCQkJcmV0ID0gQ09NUEFDVF9QQVJUSUFMOworCQkJZ290byBvdXQ7CisJCWNhc2UgSVNPTEFURV9OT05FOgogCQkJY29udGludWU7CisJCWNhc2UgSVNPTEFURV9TVUNDRVNTOgorCQkJOworCQl9CiAKIAkJbnJfbWlncmF0ZSA9IGNjLT5ucl9taWdyYXRlcGFnZXM7CiAJCWVyciA9IG1pZ3JhdGVfcGFnZXMoJmNjLT5taWdyYXRlcGFnZXMsIGNvbXBhY3Rpb25fYWxsb2MsCkBAIC01NDcsNiArNTc4LDcgQEAKIAogCX0KIAorb3V0OgogCS8qIFJlbGVhc2UgZnJlZSBwYWdlcyBhbmQgY2hlY2sgYWNjb3VudGluZyAqLwogCWNjLT5ucl9mcmVlcGFnZXMgLT0gcmVsZWFzZV9mcmVlcGFnZXMoJmNjLT5mcmVlcGFnZXMpOwogCVZNX0JVR19PTihjYy0+bnJfZnJlZXBhZ2VzICE9IDApOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGQ3YjEwNTcuLmE4MjUxYTggMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTIwMDAsNyArMjAwMCw3IEBACiAJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfa2lsbHByaXYoZGVudHJ5KTsKIAlpZiAoIWVycm9yICYmIGtpbGxzdWlkKQogCQllcnJvciA9IF9fcmVtb3ZlX3N1aWQoZGVudHJ5LCBraWxsc3VpZCk7Ci0JaWYgKCFlcnJvcikKKwlpZiAoIWVycm9yICYmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX05PU0VDKSkKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1NFQzsKIAogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDYxNWQ5NzQuLjgxNTMyZjIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKKysrIGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMjIzNCwxMSArMjIzNCw4IEBACiAJd2hpbGUgKGxpa2VseShraHVnZXBhZ2VkX2VuYWJsZWQoKSkpIHsKICNpZm5kZWYgQ09ORklHX05VTUEKIAkJaHBhZ2UgPSBraHVnZXBhZ2VkX2FsbG9jX2h1Z2VwYWdlKCk7Ci0JCWlmICh1bmxpa2VseSghaHBhZ2UpKSB7Ci0JCQljb3VudF92bV9ldmVudChUSFBfQ09MTEFQU0VfQUxMT0NfRkFJTEVEKTsKKwkJaWYgKHVubGlrZWx5KCFocGFnZSkpCiAJCQlicmVhazsKLQkJfQotCQljb3VudF92bV9ldmVudChUSFBfQ09MTEFQU0VfQUxMT0MpOwogI2Vsc2UKIAkJaWYgKElTX0VSUihocGFnZSkpIHsKIAkJCWtodWdlcGFnZWRfYWxsb2Nfc2xlZXAoKTsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBmMzNiYjMxLi5iZmNmMTUzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0xMDMzLDEwICsxMDMzLDEwIEBACiAJICovCiAJY2hnID0gdm1hX25lZWRzX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7CiAJaWYgKGNoZyA8IDApCi0JCXJldHVybiBFUlJfUFRSKGNoZyk7CisJCXJldHVybiBFUlJfUFRSKC1WTV9GQVVMVF9PT00pOwogCWlmIChjaGcpCiAJCWlmIChodWdldGxiX2dldF9xdW90YShpbm9kZS0+aV9tYXBwaW5nLCBjaGcpKQotCQkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CisJCQlyZXR1cm4gRVJSX1BUUigtVk1fRkFVTFRfU0lHQlVTKTsKIAogCXNwaW5fbG9jaygmaHVnZXRsYl9sb2NrKTsKIAlwYWdlID0gZGVxdWV1ZV9odWdlX3BhZ2Vfdm1hKGgsIHZtYSwgYWRkciwgYXZvaWRfcmVzZXJ2ZSk7CkBAIC0xMTExLDYgKzExMTEsMTQgQEAKIAkJV0FSTl9PTihwYWdlX2NvdW50KHBhZ2UpICE9IDEpOwogCQlwcmVwX2NvbXBvdW5kX2h1Z2VfcGFnZShwYWdlLCBoLT5vcmRlcik7CiAJCXByZXBfbmV3X2h1Z2VfcGFnZShoLCBwYWdlLCBwYWdlX3RvX25pZChwYWdlKSk7CisJCS8qCisJCSAqIElmIHdlIGhhZCBnaWdhbnRpYyBodWdlcGFnZXMgYWxsb2NhdGVkIGF0IGJvb3QgdGltZSwgd2UgbmVlZAorCQkgKiB0byByZXN0b3JlIHRoZSAnc3RvbGVuJyBwYWdlcyB0byB0b3RhbHJhbV9wYWdlcyBpbiBvcmRlciB0bworCQkgKiBmaXggY29uZnVzaW5nIG1lbW9yeSByZXBvcnRzIGZyb20gZnJlZSgxKSBhbmQgYW5vdGhlcgorCQkgKiBzaWRlLWVmZmVjdHMsIGxpa2UgQ29tbWl0TGltaXQgZ29pbmcgbmVnYXRpdmUuCisJCSAqLworCQlpZiAoaC0+b3JkZXIgPiAoTUFYX09SREVSIC0gMSkpCisJCQl0b3RhbHJhbV9wYWdlcyArPSAxIDw8IGgtPm9yZGVyOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uYwppbmRleCBkNzA4YjNlLi45YTY4YjBjIDEwMDY0NAotLS0gYS9tbS9rc20uYworKysgYi9tbS9rc20uYwpAQCAtMTMwMiw2ICsxMzAyLDEyIEBACiAJCXNsb3QgPSBsaXN0X2VudHJ5KHNsb3QtPm1tX2xpc3QubmV4dCwgc3RydWN0IG1tX3Nsb3QsIG1tX2xpc3QpOwogCQlrc21fc2Nhbi5tbV9zbG90ID0gc2xvdDsKIAkJc3Bpbl91bmxvY2soJmtzbV9tbWxpc3RfbG9jayk7CisJCS8qCisJCSAqIEFsdGhvdWdoIHdlIHRlc3RlZCBsaXN0X2VtcHR5KCkgYWJvdmUsIGEgcmFjaW5nIF9fa3NtX2V4aXQKKwkJICogb2YgdGhlIGxhc3QgbW0gb24gdGhlIGxpc3QgbWF5IGhhdmUgcmVtb3ZlZCBpdCBzaW5jZSB0aGVuLgorCQkgKi8KKwkJaWYgKHNsb3QgPT0gJmtzbV9tbV9oZWFkKQorCQkJcmV0dXJuIE5VTEw7CiBuZXh0X21tOgogCQlrc21fc2Nhbi5hZGRyZXNzID0gMDsKIAkJa3NtX3NjYW4ucm1hcF9saXN0ID0gJnNsb3QtPnJtYXBfbGlzdDsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCBiZDkwNTJhLi5jZjdkMDI3IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC0zNTksNyArMzU5LDcgQEAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZ2V0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9wdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSk7CiBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudF9tZW1fY2dyb3VwKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwotc3RhdGljIHZvaWQgZHJhaW5fYWxsX3N0b2NrX2FzeW5jKHZvaWQpOworc3RhdGljIHZvaWQgZHJhaW5fYWxsX3N0b2NrX2FzeW5jKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwogCiBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKgogbWVtX2Nncm91cF96b25laW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBpbnQgbmlkLCBpbnQgemlkKQpAQCAtNzM1LDcgKzczNSw3IEBACiAJCQkJc3RydWN0IG1lbV9jZ3JvdXAsIGNzcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCitzdHJ1Y3QgbWVtX2Nncm91cCAqdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CiAKQEAgLTE2NjMsMTUgKzE2NjMsMjEgQEAKIAlleGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2Vzcygmcm9vdF9tZW0tPnJlcykgPj4gUEFHRV9TSElGVDsKIAogCS8qIElmIG1lbXN3X2lzX21pbmltdW09PTEsIHN3YXAtb3V0IGlzIG9mLW5vLXVzZS4gKi8KLQlpZiAocm9vdF9tZW0tPm1lbXN3X2lzX21pbmltdW0pCisJaWYgKCFjaGVja19zb2Z0ICYmIHJvb3RfbWVtLT5tZW1zd19pc19taW5pbXVtKQogCQlub3N3YXAgPSB0cnVlOwogCiAJd2hpbGUgKDEpIHsKIAkJdmljdGltID0gbWVtX2Nncm91cF9zZWxlY3RfdmljdGltKHJvb3RfbWVtKTsKIAkJaWYgKHZpY3RpbSA9PSByb290X21lbSkgewogCQkJbG9vcCsrOwotCQkJaWYgKGxvb3AgPj0gMSkKLQkJCQlkcmFpbl9hbGxfc3RvY2tfYXN5bmMoKTsKKwkJCS8qCisJCQkgKiBXZSBhcmUgbm90IGRyYWluaW5nIHBlciBjcHUgY2FjaGVkIGNoYXJnZXMgZHVyaW5nCisJCQkgKiBzb2Z0IGxpbWl0IHJlY2xhaW0gIGJlY2F1c2UgZ2xvYmFsIHJlY2xhaW0gZG9lc24ndAorCQkJICogY2FyZSBhYm91dCBjaGFyZ2VzLiBJdCB0cmllcyB0byBmcmVlIHNvbWUgbWVtb3J5IGFuZAorCQkJICogY2hhcmdlcyB3aWxsIG5vdCBnaXZlIGFueS4KKwkJCSAqLworCQkJaWYgKCFjaGVja19zb2Z0ICYmIGxvb3AgPj0gMSkKKwkJCQlkcmFpbl9hbGxfc3RvY2tfYXN5bmMocm9vdF9tZW0pOwogCQkJaWYgKGxvb3AgPj0gMikgewogCQkJCS8qCiAJCQkJICogSWYgd2UgaGF2ZSBub3QgYmVlbiBhYmxlIHRvIHJlY2xhaW0KQEAgLTE5MzQsOSArMTk0MCwxMSBAQAogCXN0cnVjdCBtZW1fY2dyb3VwICpjYWNoZWQ7IC8qIHRoaXMgbmV2ZXIgYmUgcm9vdCBjZ3JvdXAgKi8KIAl1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNkZWZpbmUgRkxVU0hJTkdfQ0FDSEVEX0NIQVJHRQkoMCkKIH07CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1lbWNnX3N0b2NrX3BjcCwgbWVtY2dfc3RvY2spOwotc3RhdGljIGF0b21pY190IG1lbWNnX2RyYWluX2NvdW50Oworc3RhdGljIERFRklORV9NVVRFWChwZXJjcHVfY2hhcmdlX211dGV4KTsKIAogLyoKICAqIFRyeSB0byBjb25zdW1lIHN0b2NrZWQgY2hhcmdlIG9uIHRoaXMgY3B1LiBJZiBzdWNjZXNzLCBvbmUgcGFnZSBpcyBjb25zdW1lZApAQCAtMTk4NCw2ICsxOTkyLDcgQEAKIHsKIAlzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayA9ICZfX2dldF9jcHVfdmFyKG1lbWNnX3N0b2NrKTsKIAlkcmFpbl9zdG9jayhzdG9jayk7CisJY2xlYXJfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsICZzdG9jay0+ZmxhZ3MpOwogfQogCiAvKgpAQCAtMjAwOCwyNiArMjAxNyw0NSBAQAogICogZXhwZWN0cyBzb21lIGNoYXJnZXMgd2lsbCBiZSBiYWNrIHRvIHJlc19jb3VudGVyIGxhdGVyIGJ1dCBjYW5ub3Qgd2FpdCBmb3IKICAqIGl0LgogICovCi1zdGF0aWMgdm9pZCBkcmFpbl9hbGxfc3RvY2tfYXN5bmModm9pZCkKK3N0YXRpYyB2b2lkIGRyYWluX2FsbF9zdG9ja19hc3luYyhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW0pCiB7Ci0JaW50IGNwdTsKLQkvKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBzY2hlZHVsaW5nICJkcmFpbiIgaW4gYXN5bmNocm9ub3VzIHdheS4KLQkgKiBUaGUgcmVzdWx0IG9mICJkcmFpbiIgaXMgbm90IGRpcmVjdGx5IGhhbmRsZWQgYnkgY2FsbGVycy4gVGhlbiwKLQkgKiBpZiBzb21lb25lIGlzIGNhbGxpbmcgZHJhaW4sIHdlIGRvbid0IGhhdmUgdG8gY2FsbCBkcmFpbiBtb3JlLgotCSAqIEFueXdheSwgV09SS19TVFJVQ1RfUEVORElORyBjaGVjayBpbiBxdWV1ZV93b3JrX29uKCkgd2lsbCBjYXRjaCBpZgotCSAqIHRoZXJlIGlzIGEgcmFjZS4gV2UganVzdCBkbyBsb29zZSBjaGVjayBoZXJlLgorCWludCBjcHUsIGN1cmNwdTsKKwkvKgorCSAqIElmIHNvbWVvbmUgY2FsbHMgZHJhaW5pbmcsIGF2b2lkIGFkZGluZyBtb3JlIGt3b3JrZXIgcnVucy4KIAkgKi8KLQlpZiAoYXRvbWljX3JlYWQoJm1lbWNnX2RyYWluX2NvdW50KSkKKwlpZiAoIW11dGV4X3RyeWxvY2soJnBlcmNwdV9jaGFyZ2VfbXV0ZXgpKQogCQlyZXR1cm47CiAJLyogTm90aWZ5IG90aGVyIGNwdXMgdGhhdCBzeXN0ZW0td2lkZSAiZHJhaW4iIGlzIHJ1bm5pbmcgKi8KLQlhdG9taWNfaW5jKCZtZW1jZ19kcmFpbl9jb3VudCk7CiAJZ2V0X29ubGluZV9jcHVzKCk7CisJLyoKKwkgKiBHZXQgYSBoaW50IGZvciBhdm9pZGluZyBkcmFpbmluZyBjaGFyZ2VzIG9uIHRoZSBjdXJyZW50IGNwdSwKKwkgKiB3aGljaCBtdXN0IGJlIGV4aGF1c3RlZCBieSBvdXIgY2hhcmdpbmcuICBJdCBpcyBub3QgcmVxdWlyZWQgdGhhdAorCSAqIHRoaXMgYmUgYSBwcmVjaXNlIGNoZWNrLCBzbyB3ZSB1c2UgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSBpbnN0ZWFkIG9mCisJICogZ2V0Y3B1KCkvcHV0Y3B1KCkuCisJICovCisJY3VyY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayA9ICZwZXJfY3B1KG1lbWNnX3N0b2NrLCBjcHUpOwotCQlzY2hlZHVsZV93b3JrX29uKGNwdSwgJnN0b2NrLT53b3JrKTsKKwkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKKworCQlpZiAoY3B1ID09IGN1cmNwdSkKKwkJCWNvbnRpbnVlOworCisJCW1lbSA9IHN0b2NrLT5jYWNoZWQ7CisJCWlmICghbWVtKQorCQkJY29udGludWU7CisJCWlmIChtZW0gIT0gcm9vdF9tZW0pIHsKKwkJCWlmICghcm9vdF9tZW0tPnVzZV9oaWVyYXJjaHkpCisJCQkJY29udGludWU7CisJCQkvKiBjaGVjayB3aGV0aGVyICJtZW0iIGlzIHVuZGVyIHRyZWUgb2YgInJvb3RfbWVtIiAqLworCQkJaWYgKCFjc3NfaXNfYW5jZXN0b3IoJm1lbS0+Y3NzLCAmcm9vdF9tZW0tPmNzcykpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEZMVVNISU5HX0NBQ0hFRF9DSEFSR0UsICZzdG9jay0+ZmxhZ3MpKQorCQkJc2NoZWR1bGVfd29ya19vbihjcHUsICZzdG9jay0+d29yayk7CiAJfQogIAlwdXRfb25saW5lX2NwdXMoKTsKLQlhdG9taWNfZGVjKCZtZW1jZ19kcmFpbl9jb3VudCk7CisJbXV0ZXhfdW5sb2NrKCZwZXJjcHVfY2hhcmdlX211dGV4KTsKIAkvKiBXZSBkb24ndCB3YWl0IGZvciBmbHVzaF93b3JrICovCiB9CiAKQEAgLTIwMzUsOSArMjA2Myw5IEBACiBzdGF0aWMgdm9pZCBkcmFpbl9hbGxfc3RvY2tfc3luYyh2b2lkKQogewogCS8qIGNhbGxlZCB3aGVuIGZvcmNlX2VtcHR5IGlzIGNhbGxlZCAqLwotCWF0b21pY19pbmMoJm1lbWNnX2RyYWluX2NvdW50KTsKKwltdXRleF9sb2NrKCZwZXJjcHVfY2hhcmdlX211dGV4KTsKIAlzY2hlZHVsZV9vbl9lYWNoX2NwdShkcmFpbl9sb2NhbF9zdG9jayk7Ci0JYXRvbWljX2RlYygmbWVtY2dfZHJhaW5fY291bnQpOworCW11dGV4X3VubG9jaygmcGVyY3B1X2NoYXJnZV9tdXRleCk7CiB9CiAKIC8qCkBAIC00NjQwLDYgKzQ2NjgsNyBAQAogCXsKIAkJLm5hbWUgPSAibnVtYV9zdGF0IiwKIAkJLm9wZW4gPSBtZW1fY29udHJvbF9udW1hX3N0YXRfb3BlbiwKKwkJLm1vZGUgPSBTX0lSVUdPLAogCX0sCiAjZW5kaWYKIH07CkBAIC01NDE0LDE4ICs1NDQzLDE2IEBACiAJCQkJc3RydWN0IGNncm91cCAqb2xkX2NvbnQsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gZ2V0X3Rhc2tfbW0ocCk7CiAKLQlpZiAoIW1jLnRvKQotCQkvKiBubyBuZWVkIHRvIG1vdmUgY2hhcmdlICovCi0JCXJldHVybjsKLQotCW1tID0gZ2V0X3Rhc2tfbW0ocCk7CiAJaWYgKG1tKSB7Ci0JCW1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2UobW0pOworCQlpZiAobWMudG8pCisJCQltZW1fY2dyb3VwX21vdmVfY2hhcmdlKG1tKTsKKwkJcHV0X3N3YXBfdG9rZW4obW0pOwogCQltbXB1dChtbSk7CiAJfQotCW1lbV9jZ3JvdXBfY2xlYXJfbWMoKTsKKwlpZiAobWMudG8pCisJCW1lbV9jZ3JvdXBfY2xlYXJfbWMoKTsKIH0KICNlbHNlCS8qICFDT05GSUdfTU1VICovCiBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1YzhmN2UwLi5lYWMwYmE1IDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2Fwb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9yeV9ob3RwbHVnLmg+CisjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogaW50IHN5c2N0bF9tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsIF9fcmVhZF9tb3N0bHkgPSAwOwpAQCAtMTQ2OCw3ICsxNDY5LDggQEAKIAlwdXRfcGFnZShwYWdlKTsKIAlpZiAoIXJldCkgewogCQlMSVNUX0hFQUQocGFnZWxpc3QpOwotCisJCWluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfSVNPTEFURURfQU5PTiArCisJCQkJCSAgICBwYWdlX2lzX2ZpbGVfY2FjaGUocGFnZSkpOwogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmcGFnZWxpc3QpOwogCQlyZXQgPSBtaWdyYXRlX3BhZ2VzKCZwYWdlbGlzdCwgbmV3X3BhZ2UsIE1QT0xfTUZfTU9WRV9BTEwsCiAJCQkJCQkJCTAsIHRydWUpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA2OTUzZDM5Li44N2Q5MzUzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMTExMiwxMSArMTExMiwxMyBAQAogCWludCBmb3JjZV9mbHVzaCA9IDA7CiAJaW50IHJzc1tOUl9NTV9DT1VOVEVSU107CiAJc3BpbmxvY2tfdCAqcHRsOworCXB0ZV90ICpzdGFydF9wdGU7CiAJcHRlX3QgKnB0ZTsKIAogYWdhaW46CiAJaW5pdF9yc3NfdmVjKHJzcyk7Ci0JcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCAmcHRsKTsKKwlzdGFydF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsICZwdGwpOworCXB0ZSA9IHN0YXJ0X3B0ZTsKIAlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKIAlkbyB7CiAJCXB0ZV90IHB0ZW50ID0gKnB0ZTsKQEAgLTExOTYsNyArMTE5OCw3IEBACiAKIAlhZGRfbW1fcnNzX3ZlYyhtbSwgcnNzKTsKIAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKLQlwdGVfdW5tYXBfdW5sb2NrKHB0ZSAtIDEsIHB0bCk7CisJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7CiAKIAkvKgogCSAqIG1tdV9nYXRoZXIgcmFuIG91dCBvZiByb29tIHRvIGJhdGNoIHBhZ2VzLCB3ZSBicmVhayBvdXQgb2YKQEAgLTEyOTYsNyArMTI5OCw3IEBACiAKIC8qKgogICogdW5tYXBfdm1hcyAtIHVubWFwIGEgcmFuZ2Ugb2YgbWVtb3J5IGNvdmVyZWQgYnkgYSBsaXN0IG9mIHZtYSdzCi0gKiBAdGxicDogYWRkcmVzcyBvZiB0aGUgY2FsbGVyJ3Mgc3RydWN0IG1tdV9nYXRoZXIKKyAqIEB0bGI6IGFkZHJlc3Mgb2YgdGhlIGNhbGxlcidzIHN0cnVjdCBtbXVfZ2F0aGVyCiAgKiBAdm1hOiB0aGUgc3RhcnRpbmcgdm1hCiAgKiBAc3RhcnRfYWRkcjogdmlydHVhbCBhZGRyZXNzIGF0IHdoaWNoIHRvIHN0YXJ0IHVubWFwcGluZwogICogQGVuZF9hZGRyOiB2aXJ0dWFsIGFkZHJlc3MgYXQgd2hpY2ggdG8gZW5kIHVubWFwcGluZwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggOWY2NDYzNy4uMDIxNTljNyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYworKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC00OTQsNiArNDk0LDEyIEBACiAJLyogaW5pdCBub2RlJ3Mgem9uZXMgYXMgZW1wdHkgem9uZXMsIHdlIGRvbid0IGhhdmUgYW55IHByZXNlbnQgcGFnZXMuKi8KIAlmcmVlX2FyZWFfaW5pdF9ub2RlKG5pZCwgem9uZXNfc2l6ZSwgc3RhcnRfcGZuLCB6aG9sZXNfc2l6ZSk7CiAKKwkvKgorCSAqIFRoZSBub2RlIHdlIGFsbG9jYXRlZCBoYXMgbm8gem9uZSBmYWxsYmFjayBsaXN0cy4gRm9yIGF2b2lkaW5nCisJICogdG8gYWNjZXNzIG5vdC1pbml0aWFsaXplZCB6b25lbGlzdCwgYnVpbGQgaGVyZS4KKwkgKi8KKwlidWlsZF9hbGxfem9uZWxpc3RzKE5VTEwpOworCiAJcmV0dXJuIHBnZGF0OwogfQogCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggZTRhNWM5MS4uNjY2ZTRlNiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJICovCiAJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZJTEVfUEFHRVMpOwogCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShuZXdwYWdlLCBOUl9GSUxFX1BBR0VTKTsKLQlpZiAoUGFnZVN3YXBCYWNrZWQocGFnZSkpIHsKKwlpZiAoIVBhZ2VTd2FwQ2FjaGUocGFnZSkgJiYgUGFnZVN3YXBCYWNrZWQocGFnZSkpIHsKIAkJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX1NITUVNKTsKIAkJX19pbmNfem9uZV9wYWdlX3N0YXRlKG5ld3BhZ2UsIE5SX1NITUVNKTsKIAl9CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggYmJkYzlhZi4uZDQ5NzM2ZiAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtOTA2LDE0ICs5MDYsNyBAQAogCWlmIChhbm9uX3ZtYSkKIAkJcmV0dXJuIGFub25fdm1hOwogdHJ5X3ByZXY6Ci0JLyoKLQkgKiBJdCBpcyBwb3RlbnRpYWxseSBzbG93IHRvIGhhdmUgdG8gY2FsbCBmaW5kX3ZtYV9wcmV2IGhlcmUuCi0JICogQnV0IGl0J3Mgb25seSBvbiB0aGUgZmlyc3Qgd3JpdGUgZmF1bHQgb24gdGhlIHZtYSwgbm90Ci0JICogZXZlcnkgdGltZSwgYW5kIHdlIGNvdWxkIGRldmlzZSBhIHdheSB0byBhdm9pZCBpdCBsYXRlcgotCSAqIChlLmcuIHN0YXNoIGluZm8gaW4gbmV4dCdzIGFub25fdm1hX25vZGUgd2hlbiBhc3NpZ25pbmcKLQkgKiBhbiBhbm9uX3ZtYSwgb3Igd2hlbiB0cnlpbmcgdm1hX21lcmdlKS4gIEFub3RoZXIgdGltZS4KLQkgKi8KLQlCVUdfT04oZmluZF92bWFfcHJldih2bWEtPnZtX21tLCB2bWEtPnZtX3N0YXJ0LCAmbmVhcikgIT0gdm1hKTsKKwluZWFyID0gdm1hLT52bV9wcmV2OwogCWlmICghbmVhcikKIAkJZ290byBub25lOwogCkBAIC0yMDQ0LDkgKzIwMzcsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBGaW5kIHRoZSBmaXJzdCBvdmVybGFwcGluZyBWTUEgKi8KLQl2bWEgPSBmaW5kX3ZtYV9wcmV2KG1tLCBzdGFydCwgJnByZXYpOworCXZtYSA9IGZpbmRfdm1hKG1tLCBzdGFydCk7CiAJaWYgKCF2bWEpCiAJCXJldHVybiAwOworCXByZXYgPSB2bWEtPnZtX3ByZXY7CiAJLyogd2UgaGF2ZSAgc3RhcnQgPCB2bWEtPnZtX2VuZCAgKi8KIAogCS8qIGlmIGl0IGRvZXNuJ3Qgb3ZlcmxhcCwgd2UgaGF2ZSBub3RoaW5nLi4gKi8KZGlmZiAtLWdpdCBhL21tL3BhZ2VfY2dyb3VwLmMgYi9tbS9wYWdlX2Nncm91cC5jCmluZGV4IDc0Y2NmZjYuLjUzYmZmYzYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfY2dyb3VwLmMKKysrIGIvbW0vcGFnZV9jZ3JvdXAuYwpAQCAtMTYyLDEzICsxNjIsMTMgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IF9fbWVtaW5pdCBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAodW5zaWduZWQgbG9uZyBwZm4pCitzdGF0aWMgaW50IF9fbWVtaW5pdCBpbml0X3NlY3Rpb25fcGFnZV9jZ3JvdXAodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpCiB7CiAJc3RydWN0IHBhZ2VfY2dyb3VwICpiYXNlLCAqcGM7CiAJc3RydWN0IG1lbV9zZWN0aW9uICpzZWN0aW9uOwogCXVuc2lnbmVkIGxvbmcgdGFibGVfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIG5yOwotCWludCBuaWQsIGluZGV4OworCWludCBpbmRleDsKIAogCW5yID0gcGZuX3RvX3NlY3Rpb25fbnIocGZuKTsKIAlzZWN0aW9uID0gX19ucl90b19zZWN0aW9uKG5yKTsKQEAgLTE3Niw3ICsxNzYsNiBAQAogCWlmIChzZWN0aW9uLT5wYWdlX2Nncm91cCkKIAkJcmV0dXJuIDA7CiAKLQluaWQgPSBwYWdlX3RvX25pZChwZm5fdG9fcGFnZShwZm4pKTsKIAl0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwYWdlX2Nncm91cCkgKiBQQUdFU19QRVJfU0VDVElPTjsKIAliYXNlID0gYWxsb2NfcGFnZV9jZ3JvdXAodGFibGVfc2l6ZSwgbmlkKTsKIApAQCAtMTk2LDcgKzE5NSwxMSBAQAogCQlwYyA9IGJhc2UgKyBpbmRleDsKIAkJaW5pdF9wYWdlX2Nncm91cChwYywgbnIpOwogCX0KLQorCS8qCisJICogVGhlIHBhc3NlZCAicGZuIiBtYXkgbm90IGJlIGFsaWduZWQgdG8gU0VDVElPTi4gIEZvciB0aGUgY2FsY3VsYXRpb24KKwkgKiB3ZSBuZWVkIHRvIGFwcGx5IGEgbWFzay4KKwkgKi8KKwlwZm4gJj0gUEFHRV9TRUNUSU9OX01BU0s7CiAJc2VjdGlvbi0+cGFnZV9jZ3JvdXAgPSBiYXNlIC0gcGZuOwogCXRvdGFsX3VzYWdlICs9IHRhYmxlX3NpemU7CiAJcmV0dXJuIDA7CkBAIC0yMjUsMTAgKzIyOCwyMCBAQAogCXN0YXJ0ID0gc3RhcnRfcGZuICYgfihQQUdFU19QRVJfU0VDVElPTiAtIDEpOwogCWVuZCA9IEFMSUdOKHN0YXJ0X3BmbiArIG5yX3BhZ2VzLCBQQUdFU19QRVJfU0VDVElPTik7CiAKKwlpZiAobmlkID09IC0xKSB7CisJCS8qCisJCSAqIEluIHRoaXMgY2FzZSwgIm5pZCIgYWxyZWFkeSBleGlzdHMgYW5kIGNvbnRhaW5zIHZhbGlkIG1lbW9yeS4KKwkJICogInN0YXJ0X3BmbiIgcGFzc2VkIHRvIHVzIGlzIGEgcGZuIHdoaWNoIGlzIGFuIGFyZyBmb3IKKwkJICogb25saW5lX19wYWdlcygpLCBhbmQgc3RhcnRfcGZuIHNob3VsZCBleGlzdC4KKwkJICovCisJCW5pZCA9IHBmbl90b19uaWQoc3RhcnRfcGZuKTsKKwkJVk1fQlVHX09OKCFub2RlX3N0YXRlKG5pZCwgTl9PTkxJTkUpKTsKKwl9CisKIAlmb3IgKHBmbiA9IHN0YXJ0OyAhZmFpbCAmJiBwZm4gPCBlbmQ7IHBmbiArPSBQQUdFU19QRVJfU0VDVElPTikgewogCQlpZiAoIXBmbl9wcmVzZW50KHBmbikpCiAJCQljb250aW51ZTsKLQkJZmFpbCA9IGluaXRfc2VjdGlvbl9wYWdlX2Nncm91cChwZm4pOworCQlmYWlsID0gaW5pdF9zZWN0aW9uX3BhZ2VfY2dyb3VwKHBmbiwgbmlkKTsKIAl9CiAJaWYgKCFmYWlsKQogCQlyZXR1cm4gMDsKQEAgLTI4NCwyNSArMjk3LDQ3IEBACiB2b2lkIF9faW5pdCBwYWdlX2Nncm91cF9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47Ci0JaW50IGZhaWwgPSAwOworCWludCBuaWQ7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm47CiAKLQlmb3IgKHBmbiA9IDA7ICFmYWlsICYmIHBmbiA8IG1heF9wZm47IHBmbiArPSBQQUdFU19QRVJfU0VDVElPTikgewotCQlpZiAoIXBmbl9wcmVzZW50KHBmbikpCi0JCQljb250aW51ZTsKLQkJZmFpbCA9IGluaXRfc2VjdGlvbl9wYWdlX2Nncm91cChwZm4pOworCWZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX0hJR0hfTUVNT1JZKSB7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOworCisJCXN0YXJ0X3BmbiA9IG5vZGVfc3RhcnRfcGZuKG5pZCk7CisJCWVuZF9wZm4gPSBub2RlX2VuZF9wZm4obmlkKTsKKwkJLyoKKwkJICogc3RhcnRfcGZuIGFuZCBlbmRfcGZuIG1heSBub3QgYmUgYWxpZ25lZCB0byBTRUNUSU9OIGFuZCB0aGUKKwkJICogcGFnZS0+ZmxhZ3Mgb2Ygb3V0IG9mIG5vZGUgcGFnZXMgYXJlIG5vdCBpbml0aWFsaXplZC4gIFNvIHdlCisJCSAqIHNjYW4gW3N0YXJ0X3BmbiwgdGhlIGJpZ2dlc3Qgc2VjdGlvbidzIHBmbiA8IGVuZF9wZm4pIGhlcmUuCisJCSAqLworCQlmb3IgKHBmbiA9IHN0YXJ0X3BmbjsKKwkJICAgICBwZm4gPCBlbmRfcGZuOworICAgICAgICAgICAgICAgICAgICAgcGZuID0gQUxJR04ocGZuICsgMSwgUEFHRVNfUEVSX1NFQ1RJT04pKSB7CisKKwkJCWlmICghcGZuX3ZhbGlkKHBmbikpCisJCQkJY29udGludWU7CisJCQkvKgorCQkJICogTm9kZXMncyBwZm5zIGNhbiBiZSBvdmVybGFwcGluZy4KKwkJCSAqIFdlIGtub3cgc29tZSBhcmNoIGNhbiBoYXZlIGEgbm9kZXMgbGF5b3V0IHN1Y2ggYXMKKwkJCSAqIC0tLS0tLS0tLS0tLS1wZm4tLS0tLS0tLS0tLS0tLT4KKwkJCSAqIE4wIHwgTjEgfCBOMiB8IE4wIHwgTjEgfCBOMnwuLi4uCisJCQkgKi8KKwkJCWlmIChwZm5fdG9fbmlkKHBmbikgIT0gbmlkKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGluaXRfc2VjdGlvbl9wYWdlX2Nncm91cChwZm4sIG5pZCkpCisJCQkJZ290byBvb207CisJCX0KIAl9Ci0JaWYgKGZhaWwpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAidHJ5ICdjZ3JvdXBfZGlzYWJsZT1tZW1vcnknIGJvb3Qgb3B0aW9uXG4iKTsKLQkJcGFuaWMoIk91dCBvZiBtZW1vcnkiKTsKLQl9IGVsc2UgewotCQlob3RwbHVnX21lbW9yeV9ub3RpZmllcihwYWdlX2Nncm91cF9jYWxsYmFjaywgMCk7Ci0JfQorCWhvdHBsdWdfbWVtb3J5X25vdGlmaWVyKHBhZ2VfY2dyb3VwX2NhbGxiYWNrLCAwKTsKIAlwcmludGsoS0VSTl9JTkZPICJhbGxvY2F0ZWQgJWxkIGJ5dGVzIG9mIHBhZ2VfY2dyb3VwXG4iLCB0b3RhbF91c2FnZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAicGxlYXNlIHRyeSAnY2dyb3VwX2Rpc2FibGU9bWVtb3J5JyBvcHRpb24gaWYgeW91IGRvbid0IgotCSIgd2FudCBtZW1vcnkgY2dyb3Vwc1xuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAicGxlYXNlIHRyeSAnY2dyb3VwX2Rpc2FibGU9bWVtb3J5JyBvcHRpb24gaWYgeW91ICIKKwkJCSAiZG9uJ3Qgd2FudCBtZW1vcnkgY2dyb3Vwc1xuIik7CisJcmV0dXJuOworb29tOgorCXByaW50ayhLRVJOX0NSSVQgInRyeSAnY2dyb3VwX2Rpc2FibGU9bWVtb3J5JyBib290IG9wdGlvblxuIik7CisJcGFuaWMoIk91dCBvZiBtZW1vcnkiKTsKIH0KIAogdm9pZCBfX21lbWluaXQgcGdkYXRfcGFnZV9jZ3JvdXBfaW5pdChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDBlYjQ2M2UuLjI3ZGZkM2IgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTExMiw5ICsxMTIsOSBAQAogCWttZW1fY2FjaGVfZnJlZShhbm9uX3ZtYV9jYWNoZXAsIGFub25fdm1hKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmFub25fdm1hX2NoYWluX2FsbG9jKHZvaWQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYW5vbl92bWFfY2hhaW5fYWxsb2MoZ2ZwX3QgZ2ZwKQogewotCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGFub25fdm1hX2NoYWluX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoYW5vbl92bWFfY2hhaW5fY2FjaGVwLCBnZnApOwogfQogCiBzdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9mcmVlKHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYW5vbl92bWFfY2hhaW4pCkBAIC0xNTksNyArMTU5LDcgQEAKIAkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCQlzdHJ1Y3QgYW5vbl92bWEgKmFsbG9jYXRlZDsKIAotCQlhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYygpOworCQlhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTsKIAkJaWYgKCFhdmMpCiAJCQlnb3RvIG91dF9lbm9tZW07CiAKQEAgLTIwMCw2ICsyMDAsMzIgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAorLyoKKyAqIFRoaXMgaXMgYSB1c2VmdWwgaGVscGVyIGZ1bmN0aW9uIGZvciBsb2NraW5nIHRoZSBhbm9uX3ZtYSByb290IGFzCisgKiB3ZSB0cmF2ZXJzZSB0aGUgdm1hLT5hbm9uX3ZtYV9jaGFpbiwgbG9vcGluZyBvdmVyIGFub25fdm1hJ3MgdGhhdAorICogaGF2ZSB0aGUgc2FtZSB2bWEuCisgKgorICogU3VjaCBhbm9uX3ZtYSdzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHJvb3QsIHNvIHlvdSdkIGV4cGVjdCB0byBzZWUKKyAqIGp1c3QgYSBzaW5nbGUgbXV0ZXhfbG9jayBmb3IgdGhlIHdob2xlIHRyYXZlcnNhbC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgYW5vbl92bWEgKmxvY2tfYW5vbl92bWFfcm9vdChzdHJ1Y3QgYW5vbl92bWEgKnJvb3QsIHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCit7CisJc3RydWN0IGFub25fdm1hICpuZXdfcm9vdCA9IGFub25fdm1hLT5yb290OworCWlmIChuZXdfcm9vdCAhPSByb290KSB7CisJCWlmIChXQVJOX09OX09OQ0Uocm9vdCkpCisJCQltdXRleF91bmxvY2soJnJvb3QtPm11dGV4KTsKKwkJcm9vdCA9IG5ld19yb290OworCQltdXRleF9sb2NrKCZyb290LT5tdXRleCk7CisJfQorCXJldHVybiByb290OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2Fub25fdm1hX3Jvb3Qoc3RydWN0IGFub25fdm1hICpyb290KQoreworCWlmIChyb290KQorCQltdXRleF91bmxvY2soJnJvb3QtPm11dGV4KTsKK30KKwogc3RhdGljIHZvaWQgYW5vbl92bWFfY2hhaW5fbGluayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YywKIAkJCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQpAQCAtMjA4LDEzICsyMzQsMTEgQEAKIAlhdmMtPmFub25fdm1hID0gYW5vbl92bWE7CiAJbGlzdF9hZGQoJmF2Yy0+c2FtZV92bWEsICZ2bWEtPmFub25fdm1hX2NoYWluKTsKIAotCWFub25fdm1hX2xvY2soYW5vbl92bWEpOwogCS8qCiAJICogSXQncyBjcml0aWNhbCB0byBhZGQgbmV3IHZtYXMgdG8gdGhlIHRhaWwgb2YgdGhlIGFub25fdm1hLAogCSAqIHNlZSBjb21tZW50IGluIGh1Z2VfbWVtb3J5LmM6X19zcGxpdF9odWdlX3BhZ2UoKS4KIAkgKi8KIAlsaXN0X2FkZF90YWlsKCZhdmMtPnNhbWVfYW5vbl92bWEsICZhbm9uX3ZtYS0+aGVhZCk7Ci0JYW5vbl92bWFfdW5sb2NrKGFub25fdm1hKTsKIH0KIAogLyoKQEAgLTIyNCwxMyArMjQ4LDI0IEBACiBpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjKQogewogCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjLCAqcGF2YzsKKwlzdHJ1Y3QgYW5vbl92bWEgKnJvb3QgPSBOVUxMOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHBhdmMsICZzcmMtPmFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewotCQlhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYygpOwotCQlpZiAoIWF2YykKLQkJCWdvdG8gZW5vbWVtX2ZhaWx1cmU7Ci0JCWFub25fdm1hX2NoYWluX2xpbmsoZHN0LCBhdmMsIHBhdmMtPmFub25fdm1hKTsKKwkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKKworCQlhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfTk9XQUlUIHwgX19HRlBfTk9XQVJOKTsKKwkJaWYgKHVubGlrZWx5KCFhdmMpKSB7CisJCQl1bmxvY2tfYW5vbl92bWFfcm9vdChyb290KTsKKwkJCXJvb3QgPSBOVUxMOworCQkJYXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWF2YykKKwkJCQlnb3RvIGVub21lbV9mYWlsdXJlOworCQl9CisJCWFub25fdm1hID0gcGF2Yy0+YW5vbl92bWE7CisJCXJvb3QgPSBsb2NrX2Fub25fdm1hX3Jvb3Qocm9vdCwgYW5vbl92bWEpOworCQlhbm9uX3ZtYV9jaGFpbl9saW5rKGRzdCwgYXZjLCBhbm9uX3ZtYSk7CiAJfQorCXVubG9ja19hbm9uX3ZtYV9yb290KHJvb3QpOwogCXJldHVybiAwOwogCiAgZW5vbWVtX2ZhaWx1cmU6CkBAIC0yNjMsNyArMjk4LDcgQEAKIAlhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7CiAJaWYgKCFhbm9uX3ZtYSkKIAkJZ290byBvdXRfZXJyb3I7Ci0JYXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoKTsKKwlhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYyhHRlBfS0VSTkVMKTsKIAlpZiAoIWF2YykKIAkJZ290byBvdXRfZXJyb3JfZnJlZV9hbm9uX3ZtYTsKIApAQCAtMjgwLDcgKzMxNSw5IEBACiAJZ2V0X2Fub25fdm1hKGFub25fdm1hLT5yb290KTsKIAkvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovCiAJdm1hLT5hbm9uX3ZtYSA9IGFub25fdm1hOworCWFub25fdm1hX2xvY2soYW5vbl92bWEpOwogCWFub25fdm1hX2NoYWluX2xpbmsodm1hLCBhdmMsIGFub25fdm1hKTsKKwlhbm9uX3ZtYV91bmxvY2soYW5vbl92bWEpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTI5MSwzNiArMzI4LDQzIEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyB2b2lkIGFub25fdm1hX3VubGluayhzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmFub25fdm1hX2NoYWluKQotewotCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhbm9uX3ZtYV9jaGFpbi0+YW5vbl92bWE7Ci0JaW50IGVtcHR5OwotCi0JLyogSWYgYW5vbl92bWFfZm9yayBmYWlscywgd2UgY2FuIGdldCBhbiBlbXB0eSBhbm9uX3ZtYV9jaGFpbi4gKi8KLQlpZiAoIWFub25fdm1hKQotCQlyZXR1cm47Ci0KLQlhbm9uX3ZtYV9sb2NrKGFub25fdm1hKTsKLQlsaXN0X2RlbCgmYW5vbl92bWFfY2hhaW4tPnNhbWVfYW5vbl92bWEpOwotCi0JLyogV2UgbXVzdCBnYXJiYWdlIGNvbGxlY3QgdGhlIGFub25fdm1hIGlmIGl0J3MgZW1wdHkgKi8KLQllbXB0eSA9IGxpc3RfZW1wdHkoJmFub25fdm1hLT5oZWFkKTsKLQlhbm9uX3ZtYV91bmxvY2soYW5vbl92bWEpOwotCi0JaWYgKGVtcHR5KQotCQlwdXRfYW5vbl92bWEoYW5vbl92bWEpOwotfQotCiB2b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGFub25fdm1hX2NoYWluICphdmMsICpuZXh0OworCXN0cnVjdCBhbm9uX3ZtYSAqcm9vdCA9IE5VTEw7CiAKIAkvKgogCSAqIFVubGluayBlYWNoIGFub25fdm1hIGNoYWluZWQgdG8gdGhlIFZNQS4gIFRoaXMgbGlzdCBpcyBvcmRlcmVkCiAJICogZnJvbSBuZXdlc3QgdG8gb2xkZXN0LCBlbnN1cmluZyB0aGUgcm9vdCBhbm9uX3ZtYSBnZXRzIGZyZWVkIGxhc3QuCiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGF2YywgbmV4dCwgJnZtYS0+YW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7Ci0JCWFub25fdm1hX3VubGluayhhdmMpOworCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLT5hbm9uX3ZtYTsKKworCQlyb290ID0gbG9ja19hbm9uX3ZtYV9yb290KHJvb3QsIGFub25fdm1hKTsKKwkJbGlzdF9kZWwoJmF2Yy0+c2FtZV9hbm9uX3ZtYSk7CisKKwkJLyoKKwkJICogTGVhdmUgZW1wdHkgYW5vbl92bWFzIG9uIHRoZSBsaXN0IC0gd2UnbGwgbmVlZAorCQkgKiB0byBmcmVlIHRoZW0gb3V0c2lkZSB0aGUgbG9jay4KKwkJICovCisJCWlmIChsaXN0X2VtcHR5KCZhbm9uX3ZtYS0+aGVhZCkpCisJCQljb250aW51ZTsKKworCQlsaXN0X2RlbCgmYXZjLT5zYW1lX3ZtYSk7CisJCWFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTsKKwl9CisJdW5sb2NrX2Fub25fdm1hX3Jvb3Qocm9vdCk7CisKKwkvKgorCSAqIEl0ZXJhdGUgdGhlIGxpc3Qgb25jZSBtb3JlLCBpdCBub3cgb25seSBjb250YWlucyBlbXB0eSBhbmQgdW5saW5rZWQKKwkgKiBhbm9uX3ZtYXMsIGRlc3Ryb3kgdGhlbS4gQ291bGQgbm90IGRvIGJlZm9yZSBkdWUgdG8gX19wdXRfYW5vbl92bWEoKQorCSAqIG5lZWRpbmcgdG8gYWNxdWlyZSB0aGUgYW5vbl92bWEtPnJvb3QtPm11dGV4LgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhdmMsIG5leHQsICZ2bWEtPmFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgeworCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYXZjLT5hbm9uX3ZtYTsKKworCQlwdXRfYW5vbl92bWEoYW5vbl92bWEpOworCiAJCWxpc3RfZGVsKCZhdmMtPnNhbWVfdm1hKTsKIAkJYW5vbl92bWFfY2hhaW5fZnJlZShhdmMpOwogCX0KZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBiY2ZhNDk4Li5kOTZlMjIzIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0zNjA0LDEzICszNjA0LDE0IEBACiAgKiBSZWxlYXNlIGFuIG9iaiBiYWNrIHRvIGl0cyBjYWNoZS4gSWYgdGhlIG9iaiBoYXMgYSBjb25zdHJ1Y3RlZCBzdGF0ZSwgaXQgbXVzdAogICogYmUgaW4gdGhpcyBzdGF0ZSBfYmVmb3JlXyBpdCBpcyByZWxlYXNlZC4gIENhbGxlZCB3aXRoIGRpc2FibGVkIGludHMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCwKKyAgICB2b2lkICpjYWxsZXIpCiB7CiAJc3RydWN0IGFycmF5X2NhY2hlICphYyA9IGNwdV9jYWNoZV9nZXQoY2FjaGVwKTsKIAogCWNoZWNrX2lycV9vZmYoKTsKIAlrbWVtbGVha19mcmVlX3JlY3Vyc2l2ZShvYmpwLCBjYWNoZXAtPmZsYWdzKTsKLQlvYmpwID0gY2FjaGVfZnJlZV9kZWJ1Z2NoZWNrKGNhY2hlcCwgb2JqcCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwlvYmpwID0gY2FjaGVfZnJlZV9kZWJ1Z2NoZWNrKGNhY2hlcCwgb2JqcCwgY2FsbGVyKTsKIAogCWttZW1jaGVja19zbGFiX2ZyZWUoY2FjaGVwLCBvYmpwLCBvYmpfc2l6ZShjYWNoZXApKTsKIApAQCAtMzgwMSw3ICszODAyLDcgQEAKIAlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChvYmpwLCBvYmpfc2l6ZShjYWNoZXApKTsKIAlpZiAoIShjYWNoZXAtPmZsYWdzICYgU0xBQl9ERUJVR19PQkpFQ1RTKSkKIAkJZGVidWdfY2hlY2tfbm9fb2JqX2ZyZWVkKG9ianAsIG9ial9zaXplKGNhY2hlcCkpOwotCV9fY2FjaGVfZnJlZShjYWNoZXAsIG9ianApOworCV9fY2FjaGVfZnJlZShjYWNoZXAsIG9ianAsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJdHJhY2Vfa21lbV9jYWNoZV9mcmVlKF9SRVRfSVBfLCBvYmpwKTsKQEAgLTM4MzEsNyArMzgzMiw3IEBACiAJYyA9IHZpcnRfdG9fY2FjaGUob2JqcCk7CiAJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQob2JqcCwgb2JqX3NpemUoYykpOwogCWRlYnVnX2NoZWNrX25vX29ial9mcmVlZChvYmpwLCBvYmpfc2l6ZShjKSk7Ci0JX19jYWNoZV9mcmVlKGMsICh2b2lkICopb2JqcCk7CisJX19jYWNoZV9mcmVlKGMsICh2b2lkICopb2JqcCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGtmcmVlKTsKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCA3YmUwMjIzLi4zNWYzNTFmIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0yMzIwLDE2ICsyMzIwLDEyIEBACiAJQlVJTERfQlVHX09OKFBFUkNQVV9EWU5BTUlDX0VBUkxZX1NJWkUgPAogCQkJU0xVQl9QQUdFX1NISUZUICogc2l6ZW9mKHN0cnVjdCBrbWVtX2NhY2hlX2NwdSkpOwogCi0jaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKIAkvKgotCSAqIE11c3QgYWxpZ24gdG8gZG91YmxlIHdvcmQgYm91bmRhcnkgZm9yIHRoZSBkb3VibGUgY21weGNoZyBpbnN0cnVjdGlvbnMKLQkgKiB0byB3b3JrLgorCSAqIE11c3QgYWxpZ24gdG8gZG91YmxlIHdvcmQgYm91bmRhcnkgZm9yIHRoZSBkb3VibGUgY21weGNoZworCSAqIGluc3RydWN0aW9ucyB0byB3b3JrOyBzZWUgX19wY3B1X2RvdWJsZV9jYWxsX3JldHVybl9ib29sKCkuCiAJICovCi0Jcy0+Y3B1X3NsYWIgPSBfX2FsbG9jX3BlcmNwdShzaXplb2Yoc3RydWN0IGttZW1fY2FjaGVfY3B1KSwgMiAqIHNpemVvZih2b2lkICopKTsKLSNlbHNlCi0JLyogUmVndWxhciBhbGlnbm1lbnQgaXMgc3VmZmljaWVudCAqLwotCXMtPmNwdV9zbGFiID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBrbWVtX2NhY2hlX2NwdSk7Ci0jZW5kaWYKKwlzLT5jcHVfc2xhYiA9IF9fYWxsb2NfcGVyY3B1KHNpemVvZihzdHJ1Y3Qga21lbV9jYWNoZV9jcHUpLAorCQkJCSAgICAgMiAqIHNpemVvZih2b2lkICopKTsKIAogCWlmICghcy0+Y3B1X3NsYWIpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW0vdGhyYXNoLmMgYi9tbS90aHJhc2guYwppbmRleCAyMzcyZDRlLi5mYWJmMmQwIDEwMDY0NAotLS0gYS9tbS90aHJhc2guYworKysgYi9tbS90aHJhc2guYwpAQCAtMjEsMTQgKzIxLDQwIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1jb250cm9sLmg+CisKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvdm1zY2FuLmg+CisKKyNkZWZpbmUgVE9LRU5fQUdJTkdfSU5URVJWQUwJKDB4RkYpCiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3dhcF90b2tlbl9sb2NrKTsKIHN0cnVjdCBtbV9zdHJ1Y3QgKnN3YXBfdG9rZW5fbW07CitzdHJ1Y3QgbWVtX2Nncm91cCAqc3dhcF90b2tlbl9tZW1jZzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2xvYmFsX2ZhdWx0czsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFzdF9hZ2luZzsKKworI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnN3YXBfdG9rZW5fbWVtY2dfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CisKKwltZW1jZyA9IHRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTsKKwlpZiAobWVtY2cpCisJCWNzc19wdXQobWVtX2Nncm91cF9jc3MobWVtY2cpKTsKKworCXJldHVybiBtZW1jZzsKK30KKyNlbHNlCitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnN3YXBfdG9rZW5fbWVtY2dfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgogCiB2b2lkIGdyYWJfc3dhcF90b2tlbihzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlpbnQgY3VycmVudF9pbnRlcnZhbDsKKwl1bnNpZ25lZCBpbnQgb2xkX3ByaW8gPSBtbS0+dG9rZW5fcHJpb3JpdHk7CiAKIAlnbG9iYWxfZmF1bHRzKys7CiAKQEAgLTM4LDQwICs2NCw4MSBAQAogCQlyZXR1cm47CiAKIAkvKiBGaXJzdCBjb21lIGZpcnN0IHNlcnZlZCAqLwotCWlmIChzd2FwX3Rva2VuX21tID09IE5VTEwpIHsKLQkJbW0tPnRva2VuX3ByaW9yaXR5ID0gbW0tPnRva2VuX3ByaW9yaXR5ICsgMjsKLQkJc3dhcF90b2tlbl9tbSA9IG1tOwotCQlnb3RvIG91dDsKKwlpZiAoIXN3YXBfdG9rZW5fbW0pCisJCWdvdG8gcmVwbGFjZV90b2tlbjsKKworCWlmICgoZ2xvYmFsX2ZhdWx0cyAtIGxhc3RfYWdpbmcpID4gVE9LRU5fQUdJTkdfSU5URVJWQUwpIHsKKwkJc3dhcF90b2tlbl9tbS0+dG9rZW5fcHJpb3JpdHkgLz0gMjsKKwkJbGFzdF9hZ2luZyA9IGdsb2JhbF9mYXVsdHM7CiAJfQogCi0JaWYgKG1tICE9IHN3YXBfdG9rZW5fbW0pIHsKLQkJaWYgKGN1cnJlbnRfaW50ZXJ2YWwgPCBtbS0+bGFzdF9pbnRlcnZhbCkKLQkJCW1tLT50b2tlbl9wcmlvcml0eSsrOwotCQllbHNlIHsKLQkJCWlmIChsaWtlbHkobW0tPnRva2VuX3ByaW9yaXR5ID4gMCkpCi0JCQkJbW0tPnRva2VuX3ByaW9yaXR5LS07Ci0JCX0KLQkJLyogQ2hlY2sgaWYgd2UgZGVzZXJ2ZSB0aGUgdG9rZW4gKi8KLQkJaWYgKG1tLT50b2tlbl9wcmlvcml0eSA+IHN3YXBfdG9rZW5fbW0tPnRva2VuX3ByaW9yaXR5KSB7Ci0JCQltbS0+dG9rZW5fcHJpb3JpdHkgKz0gMjsKLQkJCXN3YXBfdG9rZW5fbW0gPSBtbTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIFRva2VuIGhvbGRlciBjYW1lIGluIGFnYWluISAqLworCWlmIChtbSA9PSBzd2FwX3Rva2VuX21tKSB7CiAJCW1tLT50b2tlbl9wcmlvcml0eSArPSAyOworCQlnb3RvIHVwZGF0ZV9wcmlvcml0eTsKIAl9CiAKKwlpZiAoY3VycmVudF9pbnRlcnZhbCA8IG1tLT5sYXN0X2ludGVydmFsKQorCQltbS0+dG9rZW5fcHJpb3JpdHkrKzsKKwllbHNlIHsKKwkJaWYgKGxpa2VseShtbS0+dG9rZW5fcHJpb3JpdHkgPiAwKSkKKwkJCW1tLT50b2tlbl9wcmlvcml0eS0tOworCX0KKworCS8qIENoZWNrIGlmIHdlIGRlc2VydmUgdGhlIHRva2VuICovCisJaWYgKG1tLT50b2tlbl9wcmlvcml0eSA+IHN3YXBfdG9rZW5fbW0tPnRva2VuX3ByaW9yaXR5KQorCQlnb3RvIHJlcGxhY2VfdG9rZW47CisKK3VwZGF0ZV9wcmlvcml0eToKKwl0cmFjZV91cGRhdGVfc3dhcF90b2tlbl9wcmlvcml0eShtbSwgb2xkX3ByaW8sIHN3YXBfdG9rZW5fbW0pOworCiBvdXQ6CiAJbW0tPmZhdWx0c3RhbXAgPSBnbG9iYWxfZmF1bHRzOwogCW1tLT5sYXN0X2ludGVydmFsID0gY3VycmVudF9pbnRlcnZhbDsKIAlzcGluX3VubG9jaygmc3dhcF90b2tlbl9sb2NrKTsKKwlyZXR1cm47CisKK3JlcGxhY2VfdG9rZW46CisJbW0tPnRva2VuX3ByaW9yaXR5ICs9IDI7CisJdHJhY2VfcmVwbGFjZV9zd2FwX3Rva2VuKHN3YXBfdG9rZW5fbW0sIG1tKTsKKwlzd2FwX3Rva2VuX21tID0gbW07CisJc3dhcF90b2tlbl9tZW1jZyA9IHN3YXBfdG9rZW5fbWVtY2dfZnJvbV9tbShtbSk7CisJbGFzdF9hZ2luZyA9IGdsb2JhbF9mYXVsdHM7CisJZ290byBvdXQ7CiB9CiAKIC8qIENhbGxlZCBvbiBwcm9jZXNzIGV4aXQuICovCiB2b2lkIF9fcHV0X3N3YXBfdG9rZW4oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJc3Bpbl9sb2NrKCZzd2FwX3Rva2VuX2xvY2spOwotCWlmIChsaWtlbHkobW0gPT0gc3dhcF90b2tlbl9tbSkpCisJaWYgKGxpa2VseShtbSA9PSBzd2FwX3Rva2VuX21tKSkgeworCQl0cmFjZV9wdXRfc3dhcF90b2tlbihzd2FwX3Rva2VuX21tKTsKIAkJc3dhcF90b2tlbl9tbSA9IE5VTEw7CisJCXN3YXBfdG9rZW5fbWVtY2cgPSBOVUxMOworCX0KIAlzcGluX3VubG9jaygmc3dhcF90b2tlbl9sb2NrKTsKIH0KKworc3RhdGljIGJvb2wgbWF0Y2hfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKmEsIHN0cnVjdCBtZW1fY2dyb3VwICpiKQoreworCWlmICghYSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKCFiKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoYSA9PSBiKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgZGlzYWJsZV9zd2FwX3Rva2VuKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKK3sKKwkvKiBtZW1jZyByZWNsYWltIGRvbid0IGRpc2FibGUgdW5yZWxhdGVkIG1tIHRva2VuLiAqLworCWlmIChtYXRjaF9tZW1jZyhtZW1jZywgc3dhcF90b2tlbl9tZW1jZykpIHsKKwkJc3Bpbl9sb2NrKCZzd2FwX3Rva2VuX2xvY2spOworCQlpZiAobWF0Y2hfbWVtY2cobWVtY2csIHN3YXBfdG9rZW5fbWVtY2cpKSB7CisJCQl0cmFjZV9kaXNhYmxlX3N3YXBfdG9rZW4oc3dhcF90b2tlbl9tbSk7CisJCQlzd2FwX3Rva2VuX21tID0gTlVMTDsKKwkJCXN3YXBfdG9rZW5fbWVtY2cgPSBOVUxMOworCQl9CisJCXNwaW5fdW5sb2NrKCZzd2FwX3Rva2VuX2xvY2spOworCX0KK30KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZmFhMGEwOC4uOGZmODM0ZSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTExMjQsOCArMTEyNCwyMCBAQAogCQkJCQlucl9sdW1weV9kaXJ0eSsrOwogCQkJCXNjYW4rKzsKIAkJCX0gZWxzZSB7Ci0JCQkJLyogdGhlIHBhZ2UgaXMgZnJlZWQgYWxyZWFkeS4gKi8KLQkJCQlpZiAoIXBhZ2VfY291bnQoY3Vyc29yX3BhZ2UpKQorCQkJCS8qCisJCQkJICogQ2hlY2sgaWYgdGhlIHBhZ2UgaXMgZnJlZWQgYWxyZWFkeS4KKwkJCQkgKgorCQkJCSAqIFdlIGNhbid0IHVzZSBwYWdlX2NvdW50KCkgYXMgdGhhdAorCQkJCSAqIHJlcXVpcmVzIGNvbXBvdW5kX2hlYWQgYW5kIHdlIGRvbid0CisJCQkJICogaGF2ZSBhIHBpbiBvbiB0aGUgcGFnZSBoZXJlLiBJZiBhCisJCQkJICogcGFnZSBpcyB0YWlsLCB3ZSBtYXkgb3IgbWF5IG5vdAorCQkJCSAqIGhhdmUgaXNvbGF0ZWQgdGhlIGhlYWQsIHNvIGFzc3VtZQorCQkJCSAqIGl0J3Mgbm90IGZyZWUsIGl0J2QgYmUgdHJpY2t5IHRvCisJCQkJICogdHJhY2sgdGhlIGhlYWQgc3RhdHVzIHdpdGhvdXQgYQorCQkJCSAqIHBhZ2UgcGluLgorCQkJCSAqLworCQkJCWlmICghUGFnZVRhaWwoY3Vyc29yX3BhZ2UpICYmCisJCQkJICAgICFhdG9taWNfcmVhZCgmY3Vyc29yX3BhZ2UtPl9jb3VudCkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjA4MSw3ICsyMDkzLDcgQEAKIAlmb3IgKHByaW9yaXR5ID0gREVGX1BSSU9SSVRZOyBwcmlvcml0eSA+PSAwOyBwcmlvcml0eS0tKSB7CiAJCXNjLT5ucl9zY2FubmVkID0gMDsKIAkJaWYgKCFwcmlvcml0eSkKLQkJCWRpc2FibGVfc3dhcF90b2tlbigpOworCQkJZGlzYWJsZV9zd2FwX3Rva2VuKHNjLT5tZW1fY2dyb3VwKTsKIAkJdG90YWxfc2Nhbm5lZCArPSBzaHJpbmtfem9uZXMocHJpb3JpdHksIHpvbmVsaXN0LCBzYyk7CiAJCS8qCiAJCSAqIERvbid0IHNocmluayBzbGFicyB3aGVuIHJlY2xhaW1pbmcgbWVtb3J5IGZyb20KQEAgLTI0MDcsNyArMjQxOSw3IEBACiAKIAkJLyogVGhlIHN3YXAgdG9rZW4gZ2V0cyBpbiB0aGUgd2F5IG9mIHN3YXBvdXQuLi4gKi8KIAkJaWYgKCFwcmlvcml0eSkKLQkJCWRpc2FibGVfc3dhcF90b2tlbigpOworCQkJZGlzYWJsZV9zd2FwX3Rva2VuKE5VTEwpOwogCiAJCWFsbF96b25lc19vayA9IDE7CiAJCWJhbGFuY2VkID0gMDsKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IGNmYTlhZmUuLmQyNGM0NjQgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJZ3JwLT5ucl92bGFucysrOwogCiAJaWYgKG5ncnApIHsKLQkJaWYgKG9wcy0+bmRvX3ZsYW5fcnhfcmVnaXN0ZXIpCisJCWlmIChvcHMtPm5kb192bGFuX3J4X3JlZ2lzdGVyICYmIChyZWFsX2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpKQogCQkJb3BzLT5uZG9fdmxhbl9yeF9yZWdpc3RlcihyZWFsX2RldiwgbmdycCk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihyZWFsX2Rldi0+dmxncnAsIG5ncnApOwogCX0KZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2NvcmUuYyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwppbmRleCA0MTQ5NWRjMi4uZmNjNjg0NiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCisrKyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwpAQCAtMjMsNiArMjMsMzEgQEAKIAkJcmV0dXJuIGZhbHNlOwogCiAJc2tiLT5kZXYgPSB2bGFuX2RldjsKKwlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUKSB7CisJCS8qIE91ciBsb3dlciBsYXllciB0aGlua3MgdGhpcyBpcyBub3QgbG9jYWwsIGxldCdzIG1ha2Ugc3VyZS4KKwkJICogVGhpcyBhbGxvd3MgdGhlIFZMQU4gdG8gaGF2ZSBhIGRpZmZlcmVudCBNQUMgdGhhbiB0aGUKKwkJICogdW5kZXJseWluZyBkZXZpY2UsIGFuZCBzdGlsbCByb3V0ZSBjb3JyZWN0bHkuICovCisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGV0aF9oZHIoc2tiKS0+aF9kZXN0LAorCQkJCQl2bGFuX2Rldi0+ZGV2X2FkZHIpKQorCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOworCX0KKworCWlmICghKHZsYW5fZGV2X2luZm8odmxhbl9kZXYpLT5mbGFncyAmIFZMQU5fRkxBR19SRU9SREVSX0hEUikpIHsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IHNrYi0+ZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7CisKKwkJLyoKKwkJICogdmxhbl9pbnNlcnRfdGFnIGV4cGVjdCBza2ItPmRhdGEgcG9pbnRpbmcgdG8gbWFjIGhlYWRlci4KKwkJICogU28gY2hhbmdlIHNrYi0+ZGF0YSBiZWZvcmUgY2FsbGluZyBpdCBhbmQgY2hhbmdlIGJhY2sgdG8KKwkJICogb3JpZ2luYWwgcG9zaXRpb24gbGF0ZXIKKwkJICovCisJCXNrYl9wdXNoKHNrYiwgb2Zmc2V0KTsKKwkJc2tiID0gKnNrYnAgPSB2bGFuX2luc2VydF90YWcoc2tiLCBza2ItPnZsYW5fdGNpKTsKKwkJaWYgKCFza2IpCisJCQlyZXR1cm4gZmFsc2U7CisJCXNrYl9wdWxsKHNrYiwgb2Zmc2V0ICsgVkxBTl9ITEVOKTsKKwkJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKKwl9CisKIAlza2ItPnByaW9yaXR5ID0gdmxhbl9nZXRfaW5ncmVzc19wcmlvcml0eSh2bGFuX2Rldiwgc2tiLT52bGFuX3RjaSk7CiAJc2tiLT52bGFuX3RjaSA9IDA7CiAKQEAgLTMxLDIyICs1Niw4IEBACiAJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmcnhfc3RhdHMtPnN5bmNwKTsKIAlyeF9zdGF0cy0+cnhfcGFja2V0cysrOwogCXJ4X3N0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQotCXN3aXRjaCAoc2tiLT5wa3RfdHlwZSkgewotCWNhc2UgUEFDS0VUX0JST0FEQ0FTVDoKLQkJYnJlYWs7Ci0JY2FzZSBQQUNLRVRfTVVMVElDQVNUOgorCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpCiAJCXJ4X3N0YXRzLT5yeF9tdWx0aWNhc3QrKzsKLQkJYnJlYWs7Ci0JY2FzZSBQQUNLRVRfT1RIRVJIT1NUOgotCQkvKiBPdXIgbG93ZXIgbGF5ZXIgdGhpbmtzIHRoaXMgaXMgbm90IGxvY2FsLCBsZXQncyBtYWtlIHN1cmUuCi0JCSAqIFRoaXMgYWxsb3dzIHRoZSBWTEFOIHRvIGhhdmUgYSBkaWZmZXJlbnQgTUFDIHRoYW4gdGhlCi0JCSAqIHVuZGVybHlpbmcgZGV2aWNlLCBhbmQgc3RpbGwgcm91dGUgY29ycmVjdGx5LiAqLwotCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktPmhfZGVzdCwKLQkJCQkJdmxhbl9kZXYtPmRldl9hZGRyKSkKLQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKLQkJYnJlYWs7Ci0JfQogCXU2NF9zdGF0c191cGRhdGVfZW5kKCZyeF9zdGF0cy0+c3luY3ApOwogCiAJcmV0dXJuIHRydWU7CkBAIC04OSwxOCArMTAwLDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHZsYW5fZ3JvX2ZyYWdzKTsKIAotc3RhdGljIHN0cnVjdCBza19idWZmICp2bGFuX2NoZWNrX3Jlb3JkZXJfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZsYW5fcmVvcmRlcl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAodmxhbl9kZXZfaW5mbyhza2ItPmRldiktPmZsYWdzICYgVkxBTl9GTEFHX1JFT1JERVJfSERSKSB7Ci0JCWlmIChza2JfY293KHNrYiwgc2tiX2hlYWRyb29tKHNrYikpIDwgMCkKLQkJCXNrYiA9IE5VTEw7Ci0JCWlmIChza2IpIHsKLQkJCS8qIExpZnRlZCBmcm9tIEdsZWIncyBWTEFOIGNvZGUuLi4gKi8KLQkJCW1lbW1vdmUoc2tiLT5kYXRhIC0gRVRIX0hMRU4sCi0JCQkJc2tiLT5kYXRhIC0gVkxBTl9FVEhfSExFTiwgMTIpOwotCQkJc2tiLT5tYWNfaGVhZGVyICs9IFZMQU5fSExFTjsKLQkJfQotCX0KKwlpZiAoc2tiX2Nvdyhza2IsIHNrYl9oZWFkcm9vbShza2IpKSA8IDApCisJCXJldHVybiBOVUxMOworCW1lbW1vdmUoc2tiLT5kYXRhIC0gRVRIX0hMRU4sIHNrYi0+ZGF0YSAtIFZMQU5fRVRIX0hMRU4sIDIgKiBFVEhfQUxFTik7CisJc2tiLT5tYWNfaGVhZGVyICs9IFZMQU5fSExFTjsKKwlza2JfcmVzZXRfbWFjX2xlbihza2IpOwogCXJldHVybiBza2I7CiB9CiAKQEAgLTE2MSw3ICsxNjcsNyBAQAogCXNrYl9wdWxsX3Jjc3VtKHNrYiwgVkxBTl9ITEVOKTsKIAl2bGFuX3NldF9lbmNhcF9wcm90byhza2IsIHZoZHIpOwogCi0Jc2tiID0gdmxhbl9jaGVja19yZW9yZGVyX2hlYWRlcihza2IpOworCXNrYiA9IHZsYW5fcmVvcmRlcl9oZWFkZXIoc2tiKTsKIAlpZiAodW5saWtlbHkoIXNrYikpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IGYxM2RkYmYuLjc3OTMwYWEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtNDc3LDE0ICs0NzcsMTYgQEAKIAkgKiBjb21tYW5kIG90aGVyd2lzZSAqLwogCXU4IGV2ZW50c1s4XSA9IHsgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwogCi0JLyogRXZlbnRzIGZvciAxLjIgYW5kIG5ld2VyIGNvbnRyb2xsZXJzICovCi0JaWYgKGhkZXYtPmxtcF92ZXIgPiAxKSB7Ci0JCWV2ZW50c1s0XSB8PSAweDAxOyAvKiBGbG93IFNwZWNpZmljYXRpb24gQ29tcGxldGUgKi8KLQkJZXZlbnRzWzRdIHw9IDB4MDI7IC8qIElucXVpcnkgUmVzdWx0IHdpdGggUlNTSSAqLwotCQlldmVudHNbNF0gfD0gMHgwNDsgLyogUmVhZCBSZW1vdGUgRXh0ZW5kZWQgRmVhdHVyZXMgQ29tcGxldGUgKi8KLQkJZXZlbnRzWzVdIHw9IDB4MDg7IC8qIFN5bmNocm9ub3VzIENvbm5lY3Rpb24gQ29tcGxldGUgKi8KLQkJZXZlbnRzWzVdIHw9IDB4MTA7IC8qIFN5bmNocm9ub3VzIENvbm5lY3Rpb24gQ2hhbmdlZCAqLwotCX0KKwkvKiBDU1IgMS4xIGRvbmdsZXMgZG9lcyBub3QgYWNjZXB0IGFueSBiaXRmaWVsZCBzbyBkb24ndCB0cnkgdG8gc2V0CisJICogYW55IGV2ZW50IG1hc2sgZm9yIHByZSAxLjIgZGV2aWNlcyAqLworCWlmIChoZGV2LT5sbXBfdmVyIDw9IDEpCisJCXJldHVybjsKKworCWV2ZW50c1s0XSB8PSAweDAxOyAvKiBGbG93IFNwZWNpZmljYXRpb24gQ29tcGxldGUgKi8KKwlldmVudHNbNF0gfD0gMHgwMjsgLyogSW5xdWlyeSBSZXN1bHQgd2l0aCBSU1NJICovCisJZXZlbnRzWzRdIHw9IDB4MDQ7IC8qIFJlYWQgUmVtb3RlIEV4dGVuZGVkIEZlYXR1cmVzIENvbXBsZXRlICovCisJZXZlbnRzWzVdIHw9IDB4MDg7IC8qIFN5bmNocm9ub3VzIENvbm5lY3Rpb24gQ29tcGxldGUgKi8KKwlldmVudHNbNV0gfD0gMHgxMDsgLyogU3luY2hyb25vdXMgQ29ubmVjdGlvbiBDaGFuZ2VkICovCiAKIAlpZiAoaGRldi0+ZmVhdHVyZXNbM10gJiBMTVBfUlNTSV9JTlEpCiAJCWV2ZW50c1s0XSB8PSAweDA0OyAvKiBJbnF1aXJ5IFJlc3VsdCB3aXRoIFJTU0kgKi8KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXBfc29jay5jIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKaW5kZXggMThkYzk4OC4uODI0ODMwMyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKQEAgLTQxMyw2ICs0MTMsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQltZW1zZXQoJmNpbmZvLCAwLCBzaXplb2YoY2luZm8pKTsKIAkJY2luZm8uaGNpX2hhbmRsZSA9IGNoYW4tPmNvbm4tPmhjb24tPmhhbmRsZTsKIAkJbWVtY3B5KGNpbmZvLmRldl9jbGFzcywgY2hhbi0+Y29ubi0+aGNvbi0+ZGV2X2NsYXNzLCAzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCmluZGV4IDM4NmNmYWYuLjFiMTA3MjcgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKQEAgLTc4OCw2ICs3ODgsNyBAQAogCiAJCWwyY2FwX3NrID0gcmZjb21tX3BpKHNrKS0+ZGxjLT5zZXNzaW9uLT5zb2NrLT5zazsKIAorCQltZW1zZXQoJmNpbmZvLCAwLCBzaXplb2YoY2luZm8pKTsKIAkJY2luZm8uaGNpX2hhbmRsZSA9IGNvbm4tPmhjb24tPmhhbmRsZTsKIAkJbWVtY3B5KGNpbmZvLmRldl9jbGFzcywgY29ubi0+aGNvbi0+ZGV2X2NsYXNzLCAzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggNDJmZGZmZC4uY2I0ZmI3OCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC0zNjksNiArMzY5LDE1IEBACiAKIAljYXNlIEJUX0NPTk5FQ1RFRDoKIAljYXNlIEJUX0NPTkZJRzoKKwkJaWYgKHNjb19waShzayktPmNvbm4pIHsKKwkJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47CisJCQlzY29fc29ja19zZXRfdGltZXIoc2ssIFNDT19ESVNDT05OX1RJTUVPVVQpOworCQkJaGNpX2Nvbm5fcHV0KHNjb19waShzayktPmNvbm4tPmhjb24pOworCQkJc2NvX3BpKHNrKS0+Y29ubi0+aGNvbiA9IE5VTEw7CisJCX0gZWxzZQorCQkJc2NvX2NoYW5fZGVsKHNrLCBFQ09OTlJFU0VUKTsKKwkJYnJlYWs7CisKIAljYXNlIEJUX0NPTk5FQ1Q6CiAJY2FzZSBCVF9ESVNDT05OOgogCQlzY29fY2hhbl9kZWwoc2ssIEVDT05OUkVTRVQpOwpAQCAtODE5LDcgKzgyOCw5IEBACiAJCWNvbm4tPnNrID0gTlVMTDsKIAkJc2NvX3BpKHNrKS0+Y29ubiA9IE5VTEw7CiAJCXNjb19jb25uX3VubG9jayhjb25uKTsKLQkJaGNpX2Nvbm5fcHV0KGNvbm4tPmhjb24pOworCisJCWlmIChjb25uLT5oY29uKQorCQkJaGNpX2Nvbm5fcHV0KGNvbm4tPmhjb24pOwogCX0KIAogCXNrLT5za19zdGF0ZSA9IEJUX0NMT1NFRDsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCmluZGV4IGE2YjJmODYuLmMxODhjODAgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKKysrIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwpAQCAtMjQzLDYgKzI0Myw3IEBACiAJCWdvdG8gb3V0OwogCiAJbnAtPmRldiA9IHAtPmRldjsKKwlzdHJsY3B5KG5wLT5kZXZfbmFtZSwgcC0+ZGV2LT5uYW1lLCBJRk5BTVNJWik7CiAKIAllcnIgPSBfX25ldHBvbGxfc2V0dXAobnApOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCmluZGV4IDJmMTRlYWYuLjI5Yjk4MTIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKKysrIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwpAQCAtMTQyNCw3ICsxNDI0LDcgQEAKIAlzd2l0Y2ggKGloLT50eXBlKSB7CiAJY2FzZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQ6CiAJY2FzZSBJR01QVjJfSE9TVF9NRU1CRVJTSElQX1JFUE9SVDoKLQkJQlJfSU5QVVRfU0tCX0NCKHNrYjIpLT5tcm91dGVyc19vbmx5ID0gMTsKKwkJQlJfSU5QVVRfU0tCX0NCKHNrYiktPm1yb3V0ZXJzX29ubHkgPSAxOwogCQllcnIgPSBicl9pcDRfbXVsdGljYXN0X2FkZF9ncm91cChiciwgcG9ydCwgaWgtPmdyb3VwKTsKIAkJYnJlYWs7CiAJY2FzZSBJR01QVjNfSE9TVF9NRU1CRVJTSElQX1JFUE9SVDoKQEAgLTE1NDMsNyArMTU0Myw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQltbGQgPSAoc3RydWN0IG1sZF9tc2cgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IyKTsKLQkJQlJfSU5QVVRfU0tCX0NCKHNrYjIpLT5tcm91dGVyc19vbmx5ID0gMTsKKwkJQlJfSU5QVVRfU0tCX0NCKHNrYiktPm1yb3V0ZXJzX29ubHkgPSAxOwogCQllcnIgPSBicl9pcDZfbXVsdGljYXN0X2FkZF9ncm91cChiciwgcG9ydCwgJm1sZC0+bWxkX21jYSk7CiAJCWJyZWFrOwogCSAgICB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCAzZmExMjMxLi41NjE0OWVjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTEwNCwxMCArMTA0LDE2IEBACiB7CiB9CiAKK3N0YXRpYyB1MzIgKmZha2VfY293X21ldHJpY3Moc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1bnNpZ25lZCBsb25nIG9sZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGZha2VfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCiAJLnByb3RvY29sID0JCWNwdV90b19iZTE2KEVUSF9QX0lQKSwKIAkudXBkYXRlX3BtdHUgPQkJZmFrZV91cGRhdGVfcG10dSwKKwkuY293X21ldHJpY3MgPQkJZmFrZV9jb3dfbWV0cmljcywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZm11eGwuYyBiL25ldC9jYWlmL2NmbXV4bC5jCmluZGV4IDNhNjZiOGMuLmMyMzk3OWUgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmbXV4bC5jCisrKyBiL25ldC9jYWlmL2NmbXV4bC5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAogCQlpZiAoY2ZzcnZsX3BoeWlkX21hdGNoKGxheWVyLCBwaHlpZCkgJiYgbGF5ZXItPmN0cmxjbWQpIHsKIAotCQkJaWYgKChjdHJsID09IF9DQUlGX0NUUkxDTURfUEhZSUZfRkxPV19PRkZfSU5EIHx8CisJCQlpZiAoKGN0cmwgPT0gX0NBSUZfQ1RSTENNRF9QSFlJRl9ET1dOX0lORCB8fAogCQkJCWN0cmwgPT0gQ0FJRl9DVFJMQ01EX1JFTU9URV9TSFVURE9XTl9JTkQpICYmCiAJCQkJCWxheWVyLT5pZCAhPSAwKSB7CiAKZGlmZiAtLWdpdCBhL25ldC9jZXBoL29zZF9jbGllbnQuYyBiL25ldC9jZXBoL29zZF9jbGllbnQuYwppbmRleCA2ZWEyYjg5Li45Y2I2MjdhIDEwMDY0NAotLS0gYS9uZXQvY2VwaC9vc2RfY2xpZW50LmMKKysrIGIvbmV0L2NlcGgvb3NkX2NsaWVudC5jCkBAIC0xMTQ0LDYgKzExNDQsMTMgQEAKIAkJCSAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoZGVsYXkpKTsKIH0KIAorc3RhdGljIHZvaWQgY29tcGxldGVfcmVxdWVzdChzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEtPnJfc2FmZV9jYWxsYmFjaykKKwkJcmVxLT5yX3NhZmVfY2FsbGJhY2socmVxLCBOVUxMKTsKKwljb21wbGV0ZV9hbGwoJnJlcS0+cl9zYWZlX2NvbXBsZXRpb24pOyAgLyogZnN5bmMgd2FpdGVyICovCit9CisKIC8qCiAgKiBoYW5kbGUgb3NkIG9wIHJlcGx5LiAgZWl0aGVyIGNhbGwgdGhlIGNhbGxiYWNrIGlmIGl0IGlzIHNwZWNpZmllZCwKICAqIG9yIGRvIHRoZSBjb21wbGV0aW9uIHRvIHdha2UgdXAgdGhlIHdhaXRpbmcgdGhyZWFkLgpAQCAtMTIyNiwxMSArMTIzMyw4IEBACiAJZWxzZQogCQljb21wbGV0ZV9hbGwoJnJlcS0+cl9jb21wbGV0aW9uKTsKIAotCWlmIChmbGFncyAmIENFUEhfT1NEX0ZMQUdfT05ESVNLKSB7Ci0JCWlmIChyZXEtPnJfc2FmZV9jYWxsYmFjaykKLQkJCXJlcS0+cl9zYWZlX2NhbGxiYWNrKHJlcSwgbXNnKTsKLQkJY29tcGxldGVfYWxsKCZyZXEtPnJfc2FmZV9jb21wbGV0aW9uKTsgIC8qIGZzeW5jIHdhaXRlciAqLwotCX0KKwlpZiAoZmxhZ3MgJiBDRVBIX09TRF9GTEFHX09ORElTSykKKwkJY29tcGxldGVfcmVxdWVzdChyZXEpOwogCiBkb25lOgogCWRvdXQoInJlcT0lcCByZXEtPnJfbGluZ2VyPSVkXG4iLCByZXEsIHJlcS0+cl9saW5nZXIpOwpAQCAtMTczMiw2ICsxNzM2LDcgQEAKIAkJX19jYW5jZWxfcmVxdWVzdChyZXEpOwogCQlfX3VucmVnaXN0ZXJfcmVxdWVzdChvc2RjLCByZXEpOwogCQltdXRleF91bmxvY2soJm9zZGMtPnJlcXVlc3RfbXV0ZXgpOworCQljb21wbGV0ZV9yZXF1ZXN0KHJlcSk7CiAJCWRvdXQoIndhaXRfcmVxdWVzdCB0aWQgJWxsdSBjYW5jZWxlZC90aW1lZCBvdXRcbiIsIHJlcS0+cl90aWQpOwogCQlyZXR1cm4gcmM7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBiM2Y1MmQyLi44ZWZlODUwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtMzExNCw3ICszMTE0LDcgQEAKIAogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7Ci0Jc2tiLT5tYWNfbGVuID0gc2tiLT5uZXR3b3JrX2hlYWRlciAtIHNrYi0+bWFjX2hlYWRlcjsKKwlza2JfcmVzZXRfbWFjX2xlbihza2IpOwogCiAJcHRfcHJldiA9IE5VTEw7CiAKQEAgLTYxNzMsNiArNjE3MywxMSBAQAogCQlvbGRzZC0+b3V0cHV0X3F1ZXVlID0gTlVMTDsKIAkJb2xkc2QtPm91dHB1dF9xdWV1ZV90YWlscCA9ICZvbGRzZC0+b3V0cHV0X3F1ZXVlOwogCX0KKwkvKiBBcHBlbmQgTkFQSSBwb2xsIGxpc3QgZnJvbSBvZmZsaW5lIENQVS4gKi8KKwlpZiAoIWxpc3RfZW1wdHkoJm9sZHNkLT5wb2xsX2xpc3QpKSB7CisJCWxpc3Rfc3BsaWNlX2luaXQoJm9sZHNkLT5wb2xsX2xpc3QsICZzZC0+cG9sbF9saXN0KTsKKwkJcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpOworCX0KIAogCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9UWF9TT0ZUSVJRKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC02MjU5LDI5ICs2MjY0LDIzIEBACiAvKioKICAqCW5ldGRldl9kcml2ZXJuYW1lIC0gbmV0d29yayBkcml2ZXIgZm9yIHRoZSBkZXZpY2UKICAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCi0gKglAYnVmZmVyOiBidWZmZXIgZm9yIHJlc3VsdGluZyBuYW1lCi0gKglAbGVuOiBzaXplIG9mIGJ1ZmZlcgogICoKICAqCURldGVybWluZSBuZXR3b3JrIGRyaXZlciBmb3IgZGV2aWNlLgogICovCi1jaGFyICpuZXRkZXZfZHJpdmVybmFtZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyICpidWZmZXIsIGludCBsZW4pCitjb25zdCBjaGFyICpuZXRkZXZfZHJpdmVybmFtZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXI7CiAJY29uc3Qgc3RydWN0IGRldmljZSAqcGFyZW50OwotCi0JaWYgKGxlbiA8PSAwIHx8ICFidWZmZXIpCi0JCXJldHVybiBidWZmZXI7Ci0JYnVmZmVyWzBdID0gMDsKKwljb25zdCBjaGFyICplbXB0eSA9ICIiOwogCiAJcGFyZW50ID0gZGV2LT5kZXYucGFyZW50OwotCiAJaWYgKCFwYXJlbnQpCi0JCXJldHVybiBidWZmZXI7CisJCXJldHVybiBlbXB0eTsKIAogCWRyaXZlciA9IHBhcmVudC0+ZHJpdmVyOwogCWlmIChkcml2ZXIgJiYgZHJpdmVyLT5uYW1lKQotCQlzdHJsY3B5KGJ1ZmZlciwgZHJpdmVyLT5uYW1lLCBsZW4pOwotCXJldHVybiBidWZmZXI7CisJCXJldHVybiBkcml2ZXItPm5hbWU7CisJcmV0dXJuIGVtcHR5OwogfQogCiBzdGF0aWMgaW50IF9fbmV0ZGV2X3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggMTFiOThiYy4uMzNkMmExZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTExNzksOSArMTE3OSwxNCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBjb25zdCB2b2lkICpuZXRfY3VycmVudF9ucyh2b2lkKQorc3RhdGljIHZvaWQgKm5ldF9ncmFiX2N1cnJlbnRfbnModm9pZCkKIHsKLQlyZXR1cm4gY3VycmVudC0+bnNwcm94eS0+bmV0X25zOworCXN0cnVjdCBuZXQgKm5zID0gY3VycmVudC0+bnNwcm94eS0+bmV0X25zOworI2lmZGVmIENPTkZJR19ORVRfTlMKKwlpZiAobnMpCisJCWF0b21pY19pbmMoJm5zLT5wYXNzaXZlKTsKKyNlbmRpZgorCXJldHVybiBuczsKIH0KIAogc3RhdGljIGNvbnN0IHZvaWQgKm5ldF9pbml0aWFsX25zKHZvaWQpCkBAIC0xMTk2LDIyICsxMjAxLDEzIEBACiAKIHN0cnVjdCBrb2JqX25zX3R5cGVfb3BlcmF0aW9ucyBuZXRfbnNfdHlwZV9vcGVyYXRpb25zID0gewogCS50eXBlID0gS09CSl9OU19UWVBFX05FVCwKLQkuY3VycmVudF9ucyA9IG5ldF9jdXJyZW50X25zLAorCS5ncmFiX2N1cnJlbnRfbnMgPSBuZXRfZ3JhYl9jdXJyZW50X25zLAogCS5uZXRsaW5rX25zID0gbmV0X25ldGxpbmtfbnMsCiAJLmluaXRpYWxfbnMgPSBuZXRfaW5pdGlhbF9ucywKKwkuZHJvcF9ucyA9IG5ldF9kcm9wX25zLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5ldF9uc190eXBlX29wZXJhdGlvbnMpOwogCi1zdGF0aWMgdm9pZCBuZXRfa29ial9uc19leGl0KHN0cnVjdCBuZXQgKm5ldCkKLXsKLQlrb2JqX25zX2V4aXQoS09CSl9OU19UWVBFX05FVCwgbmV0KTsKLX0KLQotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBrb2JqX25ldF9vcHMgPSB7Ci0JLmV4aXQgPSBuZXRfa29ial9uc19leGl0LAotfTsKLQotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUcKIHN0YXRpYyBpbnQgbmV0ZGV2X3VldmVudChzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CkBAIC0xMzM5LDYgKzEzMzUsNSBAQAogaW50IG5ldGRldl9rb2JqZWN0X2luaXQodm9pZCkKIHsKIAlrb2JqX25zX3R5cGVfcmVnaXN0ZXIoJm5ldF9uc190eXBlX29wZXJhdGlvbnMpOwotCXJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmtvYmpfbmV0X29wcyk7CiAJcmV0dXJuIGNsYXNzX3JlZ2lzdGVyKCZuZXRfY2xhc3MpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCmluZGV4IDZjNmI4NmQuLmVhNDg5ZGIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYworKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKQEAgLTEyOCw2ICsxMjgsNyBAQAogCUxJU1RfSEVBRChuZXRfZXhpdF9saXN0KTsKIAogCWF0b21pY19zZXQoJm5ldC0+Y291bnQsIDEpOworCWF0b21pY19zZXQoJm5ldC0+cGFzc2l2ZSwgMSk7CiAKICNpZmRlZiBORVROU19SRUZDTlRfREVCVUcKIAlhdG9taWNfc2V0KCZuZXQtPnVzZV9jb3VudCwgMCk7CkBAIC0yMTAsNiArMjExLDEzIEBACiAJa21lbV9jYWNoZV9mcmVlKG5ldF9jYWNoZXAsIG5ldCk7CiB9CiAKK3ZvaWQgbmV0X2Ryb3BfbnModm9pZCAqcCkKK3sKKwlzdHJ1Y3QgbmV0ICpucyA9IHA7CisJaWYgKG5zICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJm5zLT5wYXNzaXZlKSkKKwkJbmV0X2ZyZWUobnMpOworfQorCiBzdHJ1Y3QgbmV0ICpjb3B5X25ldF9ucyh1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3QgbmV0ICpvbGRfbmV0KQogewogCXN0cnVjdCBuZXQgKm5ldDsKQEAgLTIzMCw3ICsyMzgsNyBAQAogCX0KIAltdXRleF91bmxvY2soJm5ldF9tdXRleCk7CiAJaWYgKHJ2IDwgMCkgewotCQluZXRfZnJlZShuZXQpOworCQluZXRfZHJvcF9ucyhuZXQpOwogCQlyZXR1cm4gRVJSX1BUUihydik7CiAJfQogCXJldHVybiBuZXQ7CkBAIC0yODYsNyArMjk0LDcgQEAKIAkvKiBGaW5hbGx5IGl0IGlzIHNhZmUgdG8gZnJlZSBteSBuZXR3b3JrIG5hbWVzcGFjZSBzdHJ1Y3R1cmUgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0LCB0bXAsICZuZXRfZXhpdF9saXN0LCBleGl0X2xpc3QpIHsKIAkJbGlzdF9kZWxfaW5pdCgmbmV0LT5leGl0X2xpc3QpOwotCQluZXRfZnJlZShuZXQpOworCQluZXRfZHJvcF9ucyhuZXQpOwogCX0KIH0KIHN0YXRpYyBERUNMQVJFX1dPUksobmV0X2NsZWFudXBfd29yaywgY2xlYW51cF9uZXQpOwpAQCAtMzEwLDE5ICszMTgsMTcgQEAKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKLQluZXQgPSBFUlJfUFRSKC1FSU5WQUwpOwogCWZpbGUgPSBwcm9jX25zX2ZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJZ290byBvdXQ7CisJaWYgKElTX0VSUihmaWxlKSkKKwkJcmV0dXJuIEVSUl9DQVNUKGZpbGUpOwogCiAJZWkgPSBQUk9DX0koZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwotCWlmIChlaS0+bnNfb3BzICE9ICZuZXRuc19vcGVyYXRpb25zKQotCQlnb3RvIG91dDsKKwlpZiAoZWktPm5zX29wcyA9PSAmbmV0bnNfb3BlcmF0aW9ucykKKwkJbmV0ID0gZ2V0X25ldChlaS0+bnMpOworCWVsc2UKKwkJbmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAotCW5ldCA9IGdldF9uZXQoZWktPm5zKTsKLW91dDoKLQlpZiAoZmlsZSkKLQkJZnB1dChmaWxlKTsKKwlmcHV0KGZpbGUpOwogCXJldHVybiBuZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCAyZDdkNmQ0Li4xOGQ5Y2JkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC03OTIsNiArNzkyLDEzIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWlmIChuZGV2LT5tYXN0ZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgaXMgYSBzbGF2ZSBkZXZpY2UsIGFib3J0aW5nLlxuIiwKKwkJICAgICAgIG5wLT5uYW1lLCBucC0+ZGV2X25hbWUpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gcHV0OworCX0KKwogCWlmICghbmV0aWZfcnVubmluZyhuZGV2KSkgewogCQl1bnNpZ25lZCBsb25nIGF0bW9zdCwgYXRsZWFzdDsKIApkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvbmwtcGh5LmMgYi9uZXQvaWVlZTgwMjE1NC9ubC1waHkuYwppbmRleCBlZDBlYWIzLi4wMjU0OGIyIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9ubC1waHkuYworKysgYi9uZXQvaWVlZTgwMjE1NC9ubC1waHkuYwpAQCAtNDQsNyArNDQsNyBAQAogCXByX2RlYnVnKCIlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKCFidWYpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJaGRyID0gZ2VubG1zZ19wdXQobXNnLCAwLCBzZXEsICZubDgwMjE1NF9mYW1pbHksIGZsYWdzLAogCQlJRUVFODAyMTU0X0xJU1RfUEhZKTsKQEAgLTY1LDYgKzY1LDcgQEAKIAkJCQlwYWdlcyAqIHNpemVvZih1aW50MzJfdCksIGJ1Zik7CiAKIAltdXRleF91bmxvY2soJnBoeS0+cGliX2xvY2spOworCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKIAogbmxhX3B1dF9mYWlsdXJlOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDgzNjczZDIuLjA2MDBmMGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTY3Niw2ICs2NzYsNyBAQAogCiAJbG9ja19zb2NrKHNrMik7CiAKKwlzb2NrX3Jwc19yZWNvcmRfZmxvdyhzazIpOwogCVdBUk5fT04oISgoMSA8PCBzazItPnNrX3N0YXRlKSAmCiAJCSAgKFRDUEZfRVNUQUJMSVNIRUQgfCBUQ1BGX0NMT1NFX1dBSVQgfCBUQ1BGX0NMT1NFKSkpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jCmluZGV4IDVmZjQ3NjUuLjM4OWEyZTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfZGlhZy5jCisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jCkBAIC00MzcsNyArNDM3LDcgQEAKIAkJCXJldHVybiAwOwogCQlpZiAoY2MgPT0gbGVuKQogCQkJcmV0dXJuIDE7Ci0JCWlmIChvcC0+eWVzIDwgNCkKKwkJaWYgKG9wLT55ZXMgPCA0IHx8IG9wLT55ZXMgJiAzKQogCQkJcmV0dXJuIDA7CiAJCWxlbiAtPSBvcC0+eWVzOwogCQliYyAgKz0gb3AtPnllczsKQEAgLTQ0NywxMSArNDQ3LDExIEBACiAKIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2JjX2F1ZGl0KGNvbnN0IHZvaWQgKmJ5dGVjb2RlLCBpbnQgYnl0ZWNvZGVfbGVuKQogewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJjID0gYnl0ZWNvZGU7CisJY29uc3Qgdm9pZCAqYmMgPSBieXRlY29kZTsKIAlpbnQgIGxlbiA9IGJ5dGVjb2RlX2xlbjsKIAogCXdoaWxlIChsZW4gPiAwKSB7Ci0JCXN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKm9wID0gKHN0cnVjdCBpbmV0X2RpYWdfYmNfb3AgKiliYzsKKwkJY29uc3Qgc3RydWN0IGluZXRfZGlhZ19iY19vcCAqb3AgPSBiYzsKIAogLy9wcmludGsoIkJDOiAlZCAlZCAlZCB7JWR9IC8gJWRcbiIsIG9wLT5jb2RlLCBvcC0+eWVzLCBvcC0+bm8sIG9wWzFdLm5vLCBsZW4pOwogCQlzd2l0Y2ggKG9wLT5jb2RlKSB7CkBAIC00NjIsMjIgKzQ2MiwyMCBAQAogCQljYXNlIElORVRfRElBR19CQ19TX0xFOgogCQljYXNlIElORVRfRElBR19CQ19EX0dFOgogCQljYXNlIElORVRfRElBR19CQ19EX0xFOgotCQkJaWYgKG9wLT55ZXMgPCA0IHx8IG9wLT55ZXMgPiBsZW4gKyA0KQotCQkJCXJldHVybiAtRUlOVkFMOwogCQljYXNlIElORVRfRElBR19CQ19KTVA6Ci0JCQlpZiAob3AtPm5vIDwgNCB8fCBvcC0+bm8gPiBsZW4gKyA0KQorCQkJaWYgKG9wLT5ubyA8IDQgfHwgb3AtPm5vID4gbGVuICsgNCB8fCBvcC0+bm8gJiAzKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJaWYgKG9wLT5ubyA8IGxlbiAmJgogCQkJICAgICF2YWxpZF9jYyhieXRlY29kZSwgYnl0ZWNvZGVfbGVuLCBsZW4gLSBvcC0+bm8pKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCWNhc2UgSU5FVF9ESUFHX0JDX05PUDoKLQkJCWlmIChvcC0+eWVzIDwgNCB8fCBvcC0+eWVzID4gbGVuICsgNCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJaWYgKG9wLT55ZXMgPCA0IHx8IG9wLT55ZXMgPiBsZW4gKyA0IHx8IG9wLT55ZXMgJiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJjICArPSBvcC0+eWVzOwogCQlsZW4gLT0gb3AtPnllczsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDk4YWYzNjkuLmE4MDI0ZWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC03OTksNyArNzk5LDkgQEAKIAlpbnQgY3N1bW1vZGUgPSBDSEVDS1NVTV9OT05FOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKiljb3JrLT5kc3Q7CiAKLQlleHRoZHJsZW4gPSB0cmFuc2hkcmxlbiA/IHJ0LT5kc3QuaGVhZGVyX2xlbiA6IDA7CisJc2tiID0gc2tiX3BlZWtfdGFpbChxdWV1ZSk7CisKKwlleHRoZHJsZW4gPSAhc2tiID8gcnQtPmRzdC5oZWFkZXJfbGVuIDogMDsKIAlsZW5ndGggKz0gZXh0aGRybGVuOwogCXRyYW5zaGRybGVuICs9IGV4dGhkcmxlbjsKIAltdHUgPSBjb3JrLT5mcmFnc2l6ZTsKQEAgLTgyNSw4ICs4MjcsNiBAQAogCSAgICAhZXh0aGRybGVuKQogCQljc3VtbW9kZSA9IENIRUNLU1VNX1BBUlRJQUw7CiAKLQlza2IgPSBza2JfcGVla190YWlsKHF1ZXVlKTsKLQogCWNvcmstPmxlbmd0aCArPSBsZW5ndGg7CiAJaWYgKCgobGVuZ3RoID4gbXR1KSB8fCAoc2tiICYmIHNrYl9pc19nc28oc2tiKSkpICYmCiAJICAgIChzay0+c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApICYmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCmluZGV4IGQyYzEzMTEuLjVjOWI5ZDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jCkBAIC0yMDMsNyArMjAzLDggQEAKIAllbHNlCiAJCXBtc2ctPm91dGRldl9uYW1lWzBdID0gJ1wwJzsKIAotCWlmIChlbnRyeS0+aW5kZXYgJiYgZW50cnktPnNrYi0+ZGV2KSB7CisJaWYgKGVudHJ5LT5pbmRldiAmJiBlbnRyeS0+c2tiLT5kZXYgJiYKKwkgICAgZW50cnktPnNrYi0+bWFjX2hlYWRlciAhPSBlbnRyeS0+c2tiLT5uZXR3b3JrX2hlYWRlcikgewogCQlwbXNnLT5od190eXBlID0gZW50cnktPnNrYi0+ZGV2LT50eXBlOwogCQlwbXNnLT5od19hZGRybGVuID0gZGV2X3BhcnNlX2hlYWRlcihlbnRyeS0+c2tiLAogCQkJCQkJICAgIHBtc2ctPmh3X2FkZHIpOwpAQCAtNDAyLDcgKzQwMyw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIF9faXBxX3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgc3RhdHVzLCB0eXBlLCBwaWQsIGZsYWdzLCBubG1zZ2xlbiwgc2tibGVuOworCWludCBzdGF0dXMsIHR5cGUsIHBpZCwgZmxhZ3M7CisJdW5zaWduZWQgaW50IG5sbXNnbGVuLCBza2JsZW47CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CiAKIAlza2JsZW4gPSBza2ItPmxlbjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCA3NjQ3NDM4Li4yNGU1NTZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC01NjYsNyArNTY2LDcgQEAKIAljb25zdCBzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICp0OwogCiAJaWYgKCFpcF9jaGVja2VudHJ5KCZlLT5pcCkpIHsKLQkJZHVwcmludGYoImlwIGNoZWNrIGZhaWxlZCAlcCAlcy5cbiIsIGUsIHBhci0+bWF0Y2gtPm5hbWUpOworCQlkdXByaW50ZigiaXAgY2hlY2sgZmFpbGVkICVwICVzLlxuIiwgZSwgbmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKaW5kZXggZDYwOWFjMy4uNWM5ZTk3YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCkBAIC0zMDcsNyArMzA3LDcgQEAKIAkgKiBlcnJvciBtZXNzYWdlcyAoUkVMQVRFRCkgYW5kIGluZm9ybWF0aW9uIHJlcXVlc3RzIChzZWUgYmVsb3cpICovCiAJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVAgJiYKIAkgICAgKGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEIHx8Ci0JICAgICBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKSkKKwkgICAgIGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEX1JFUExZKSkKIAkJcmV0dXJuIFhUX0NPTlRJTlVFOwogCiAJLyogaXBfY29ubnRyYWNrX2ljbXAgZ3VhcmFudGVlcyB1cyB0aGF0IHdlIG9ubHkgaGF2ZSBJQ01QX0VDSE8sCkBAIC0zMjEsMTIgKzMyMSwxMiBAQAogCQkJY3QtPm1hcmsgPSBoYXNoOwogCQkJYnJlYWs7CiAJCWNhc2UgSVBfQ1RfUkVMQVRFRDoKLQkJY2FzZSBJUF9DVF9SRUxBVEVEK0lQX0NUX0lTX1JFUExZOgorCQljYXNlIElQX0NUX1JFTEFURURfUkVQTFk6CiAJCQkvKiBGSVhNRTogd2UgZG9uJ3QgaGFuZGxlIGV4cGVjdGF0aW9ucyBhdCB0aGUKIAkJCSAqIG1vbWVudC4gIHRoZXkgY2FuIGFycml2ZSBvbiBhIGRpZmZlcmVudCBub2RlIHRoYW4KIAkJCSAqIHRoZSBtYXN0ZXIgY29ubmVjdGlvbiAoZS5nLiBGVFAgcGFzc2l2ZSBtb2RlKSAqLwogCQljYXNlIElQX0NUX0VTVEFCTElTSEVEOgotCQljYXNlIElQX0NUX0VTVEFCTElTSEVEK0lQX0NUX0lTX1JFUExZOgorCQljYXNlIElQX0NUX0VTVEFCTElTSEVEX1JFUExZOgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKaW5kZXggZDJlZDlkYy4uOTkzMTE1MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAluYXQgPSBuZmN0X25hdChjdCk7CiAKIAlORl9DVF9BU1NFUlQoY3QgJiYgKGN0aW5mbyA9PSBJUF9DVF9ORVcgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURUQgfHwKLQkJCSAgICBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKSk7CisJCQkgICAgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpKTsKIAogCS8qIFNvdXJjZSBhZGRyZXNzIGlzIDAuMC4wLjAgLSBsb2NhbGx5IGdlbmVyYXRlZCBwYWNrZXQgdGhhdCBpcwogCSAqIHByb2JhYmx5IG5vdCBzdXBwb3NlZCB0byBiZSBtYXNxdWVyYWRlZC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZWNuLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2Vjbi5jCmluZGV4IGFmNmU5YzcuLjJiNTdlNTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfZWNuLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9lY24uYwpAQCAtMjUsNyArMjUsOCBAQAogc3RhdGljIGlubGluZSBib29sIG1hdGNoX2lwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgY29uc3Qgc3RydWN0IGlwdF9lY25faW5mbyAqZWluZm8pCiB7Ci0JcmV0dXJuIChpcF9oZHIoc2tiKS0+dG9zICYgSVBUX0VDTl9JUF9NQVNLKSA9PSBlaW5mby0+aXBfZWN0OworCXJldHVybiAoKGlwX2hkcihza2IpLT50b3MgJiBJUFRfRUNOX0lQX01BU0spID09IGVpbmZvLT5pcF9lY3QpIF4KKwkgICAgICAgISEoZWluZm8tPmludmVydCAmIElQVF9FQ05fT1BfTUFUQ0hfSVApOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hfdGNwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCkBAIC03Niw4ICs3Nyw2IEBACiAJCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoaW5mby0+b3BlcmF0aW9uICYgKElQVF9FQ05fT1BfTUFUQ0hfRUNFfElQVF9FQ05fT1BfTUFUQ0hfQ1dSKSkgewotCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sICE9IElQUFJPVE9fVENQKQotCQkJcmV0dXJuIGZhbHNlOwogCQlpZiAoIW1hdGNoX3RjcChza2IsIGluZm8sICZwYXItPmhvdGRyb3ApKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTk3LDcgKzk2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoaW5mby0+b3BlcmF0aW9uICYgKElQVF9FQ05fT1BfTUFUQ0hfRUNFfElQVF9FQ05fT1BfTUFUQ0hfQ1dSKSAmJgotCSAgICBpcC0+cHJvdG8gIT0gSVBQUk9UT19UQ1ApIHsKKwkgICAgKGlwLT5wcm90byAhPSBJUFBST1RPX1RDUCB8fCBpcC0+aW52ZmxhZ3MgJiBJUFRfSU5WX1BST1RPKSkgewogCQlwcl9pbmZvKCJjYW5ub3QgbWF0Y2ggVENQIGJpdHMgaW4gcnVsZSBmb3Igbm9uLXRjcCBwYWNrZXRzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggNWEwM2MwMi4uZGU5ZGEyMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogCS8qIFRoaXMgaXMgd2hlcmUgd2UgY2FsbCB0aGUgaGVscGVyOiBhcyB0aGUgcGFja2V0IGdvZXMgb3V0LiAqLwogCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7Ci0JaWYgKCFjdCB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKQorCWlmICghY3QgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpCiAJCWdvdG8gb3V0OwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CkBAIC0xMjEsNyArMTIxLDkgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAodGVzdF9iaXQoSVBTX1NFUV9BREpVU1RfQklULCAmY3QtPnN0YXR1cykpIHsKKwkvKiBhZGp1c3Qgc2VxcyBmb3IgbG9vcGJhY2sgdHJhZmZpYyBvbmx5IGluIG91dGdvaW5nIGRpcmVjdGlvbiAqLworCWlmICh0ZXN0X2JpdChJUFNfU0VRX0FESlVTVF9CSVQsICZjdC0+c3RhdHVzKSAmJgorCSAgICAhbmZfaXNfbG9vcGJhY2tfcGFja2V0KHNrYikpIHsKIAkJdHlwZW9mKG5mX25hdF9zZXFfYWRqdXN0X2hvb2spIHNlcV9hZGp1c3Q7CiAKIAkJc2VxX2FkanVzdCA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfc2VxX2FkanVzdF9ob29rKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggNzQwNGJkZS4uYWI1YjI3YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCS8qIFVwZGF0ZSBza2IgdG8gcmVmZXIgdG8gdGhpcyBjb25uZWN0aW9uICovCiAJc2tiLT5uZmN0ID0gJm5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCktPmN0X2dlbmVyYWw7CiAJc2tiLT5uZmN0aW5mbyA9ICpjdGluZm87Ci0JcmV0dXJuIC1ORl9BQ0NFUFQ7CisJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAogLyogU21hbGwgYW5kIG1vZGlmaWVkIHZlcnNpb24gb2YgaWNtcF9yY3YgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggOWM3MWIyNy4uMzM0NmRlNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogCiAJLyogTXVzdCBiZSBSRUxBVEVEICovCiAJTkZfQ1RfQVNTRVJUKHNrYi0+bmZjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCB8fAotCQkgICAgIHNrYi0+bmZjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCtJUF9DVF9JU19SRVBMWSk7CisJCSAgICAgc2tiLT5uZmN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEX1JFUExZKTsKIAogCS8qIFJlZGlyZWN0cyBvbiBub24tbnVsbCBuYXRzIG11c3QgYmUgZHJvcHBlZCwgZWxzZSB0aGV5J2xsCiAJICAgc3RhcnQgdGFsa2luZyB0byBlYWNoIG90aGVyIHdpdGhvdXQgb3VyIHRyYW5zbGF0aW9uLCBhbmQgYmUKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCmluZGV4IDk5Y2ZhMjguLmViYzVmODggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkgewogCQlpZiAoIShydC0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSAmJgotCQkgICAgc2tiLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9WNF9DU1VNKSB7CisJCSAgICAoIXNrYi0+ZGV2IHx8IHNrYi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVjRfQ1NVTSkpIHsKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAkJCXNrYi0+Y3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICsKIAkJCQkJICBza2JfbmV0d29ya19vZmZzZXQoc2tiKSArCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCmluZGV4IDIxYzMwNDIuLjczM2M5YWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCkBAIC01Myw3ICs1Myw3IEBACiAKIAkvKiBDb25uZWN0aW9uIG11c3QgYmUgdmFsaWQgYW5kIG5ldy4gKi8KIAlORl9DVF9BU1NFUlQoY3QgJiYgKGN0aW5mbyA9PSBJUF9DVF9ORVcgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURUQgfHwKLQkJCSAgICBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKSk7CisJCQkgICAgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpKTsKIAlORl9DVF9BU1NFUlQocGFyLT5vdXQgIT0gTlVMTCk7CiAKIAlyZXR1cm4gbmZfbmF0X3NldHVwX2luZm8oY3QsICZtci0+cmFuZ2VbMF0sIElQX05BVF9NQU5JUF9TUkMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYwppbmRleCA3MzE3YmRmLi40ODNiNzZkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAKIAlzd2l0Y2ggKGN0aW5mbykgewogCWNhc2UgSVBfQ1RfUkVMQVRFRDoKLQljYXNlIElQX0NUX1JFTEFURUQrSVBfQ1RfSVNfUkVQTFk6CisJY2FzZSBJUF9DVF9SRUxBVEVEX1JFUExZOgogCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fSUNNUCkgewogCQkJaWYgKCFuZl9uYXRfaWNtcF9yZXBseV90cmFuc2xhdGlvbihjdCwgY3RpbmZvLAogCQkJCQkJCSAgIGhvb2tudW0sIHNrYikpCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlkZWZhdWx0OgogCQkvKiBFU1RBQkxJU0hFRCAqLwogCQlORl9DVF9BU1NFUlQoY3RpbmZvID09IElQX0NUX0VTVEFCTElTSEVEIHx8Ci0JCQkgICAgIGN0aW5mbyA9PSAoSVBfQ1RfRVNUQUJMSVNIRUQrSVBfQ1RfSVNfUkVQTFkpKTsKKwkJCSAgICAgY3RpbmZvID09IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKTsKIAl9CiAKIAlyZXR1cm4gbmZfbmF0X3BhY2tldChjdCwgY3RpbmZvLCBob29rbnVtLCBza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcGluZy5jIGIvbmV0L2lwdjQvcGluZy5jCmluZGV4IDlhYWE2NzEuLjM5YjQwM2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3BpbmcuYworKysgYi9uZXQvaXB2NC9waW5nLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvcGluZy5oPgotI2luY2x1ZGUgPG5ldC9pY21wLmg+CiAjaW5jbHVkZSA8bmV0L3VkcC5oPgogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggYWEyOWM2Mi4uZjI0YzMzNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xMzE2LDYgKzEzMTYsMjMgQEAKIAk7CiB9CiAKK3N0YXRpYyBib29sIHBlZXJfcG10dV9leHBpcmVkKHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIpCit7CisJdW5zaWduZWQgbG9uZyBvcmlnID0gQUNDRVNTX09OQ0UocGVlci0+cG10dV9leHBpcmVzKTsKKworCXJldHVybiBvcmlnICYmCisJICAgICAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgb3JpZykgJiYKKwkgICAgICAgY21weGNoZygmcGVlci0+cG10dV9leHBpcmVzLCBvcmlnLCAwKSA9PSBvcmlnOworfQorCitzdGF0aWMgYm9vbCBwZWVyX3BtdHVfY2xlYW5lZChzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyKQoreworCXVuc2lnbmVkIGxvbmcgb3JpZyA9IEFDQ0VTU19PTkNFKHBlZXItPnBtdHVfZXhwaXJlcyk7CisKKwlyZXR1cm4gb3JpZyAmJgorCSAgICAgICBjbXB4Y2hnKCZwZWVyLT5wbXR1X2V4cGlyZXMsIG9yaWcsIDApID09IG9yaWc7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X25lZ2F0aXZlX2FkdmljZShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKWRzdDsKQEAgLTEzMzEsMTQgKzEzNDgsOCBAQAogCQkJCQkJcnRfZ2VuaWQoZGV2X25ldChkc3QtPmRldikpKTsKIAkJCXJ0X2RlbChoYXNoLCBydCk7CiAJCQlyZXQgPSBOVUxMOwotCQl9IGVsc2UgaWYgKHJ0LT5wZWVyICYmCi0JCQkgICBydC0+cGVlci0+cG10dV9leHBpcmVzICYmCi0JCQkgICB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHJ0LT5wZWVyLT5wbXR1X2V4cGlyZXMpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIG9yaWcgPSBydC0+cGVlci0+cG10dV9leHBpcmVzOwotCi0JCQlpZiAoY21weGNoZygmcnQtPnBlZXItPnBtdHVfZXhwaXJlcywgb3JpZywgMCkgPT0gb3JpZykKLQkJCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfTVRVLAotCQkJCQkgICAgICAgcnQtPnBlZXItPnBtdHVfb3JpZyk7CisJCX0gZWxzZSBpZiAocnQtPnBlZXIgJiYgcGVlcl9wbXR1X2V4cGlyZWQocnQtPnBlZXIpKSB7CisJCQlkc3RfbWV0cmljX3NldChkc3QsIFJUQVhfTVRVLCBydC0+cGVlci0+cG10dV9vcmlnKTsKIAkJfQogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTUzMSw4ICsxNTQyLDEwIEBACiAKIHN0YXRpYyB2b2lkIGNoZWNrX3BlZXJfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBpbmV0X3BlZXIgKnBlZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBleHBpcmVzID0gcGVlci0+cG10dV9leHBpcmVzOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IEFDQ0VTU19PTkNFKHBlZXItPnBtdHVfZXhwaXJlcyk7CiAKKwlpZiAoIWV4cGlyZXMpCisJCXJldHVybjsKIAlpZiAodGltZV9iZWZvcmUoamlmZmllcywgZXhwaXJlcykpIHsKIAkJdTMyIG9yaWdfZHN0X210dSA9IGRzdF9tdHUoZHN0KTsKIAkJaWYgKHBlZXItPnBtdHVfbGVhcm5lZCA8IG9yaWdfZHN0X210dSkgewpAQCAtMTU1NSwxMCArMTU2OCwxMSBAQAogCQlydF9iaW5kX3BlZXIocnQsIHJ0LT5ydF9kc3QsIDEpOwogCXBlZXIgPSBydC0+cGVlcjsKIAlpZiAocGVlcikgeworCQl1bnNpZ25lZCBsb25nIHBtdHVfZXhwaXJlcyA9IEFDQ0VTU19PTkNFKHBlZXItPnBtdHVfZXhwaXJlcyk7CisKIAkJaWYgKG10dSA8IGlwX3J0X21pbl9wbXR1KQogCQkJbXR1ID0gaXBfcnRfbWluX3BtdHU7Ci0JCWlmICghcGVlci0+cG10dV9leHBpcmVzIHx8IG10dSA8IHBlZXItPnBtdHVfbGVhcm5lZCkgewotCQkJdW5zaWduZWQgbG9uZyBwbXR1X2V4cGlyZXM7CisJCWlmICghcG10dV9leHBpcmVzIHx8IG10dSA8IHBlZXItPnBtdHVfbGVhcm5lZCkgewogCiAJCQlwbXR1X2V4cGlyZXMgPSBqaWZmaWVzICsgaXBfcnRfbXR1X2V4cGlyZXM7CiAJCQlpZiAoIXBtdHVfZXhwaXJlcykKQEAgLTE2MTIsMTMgKzE2MjYsMTQgQEAKIAkJCXJ0X2JpbmRfcGVlcihydCwgcnQtPnJ0X2RzdCwgMCk7CiAKIAkJcGVlciA9IHJ0LT5wZWVyOwotCQlpZiAocGVlciAmJiBwZWVyLT5wbXR1X2V4cGlyZXMpCisJCWlmIChwZWVyKSB7CiAJCQljaGVja19wZWVyX3BtdHUoZHN0LCBwZWVyKTsKIAotCQlpZiAocGVlciAmJiBwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICYmCi0JCSAgICBwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICE9IHJ0LT5ydF9nYXRld2F5KSB7Ci0JCQlpZiAoY2hlY2tfcGVlcl9yZWRpcihkc3QsIHBlZXIpKQotCQkJCXJldHVybiBOVUxMOworCQkJaWYgKHBlZXItPnJlZGlyZWN0X2xlYXJuZWQuYTQgJiYKKwkJCSAgICBwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICE9IHJ0LT5ydF9nYXRld2F5KSB7CisJCQkJaWYgKGNoZWNrX3BlZXJfcmVkaXIoZHN0LCBwZWVyKSkKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQl9CiAJCX0KIAogCQlydC0+cnRfcGVlcl9nZW5pZCA9IHJ0X3BlZXJfZ2VuaWQoKTsKQEAgLTE2NDksMTQgKzE2NjQsOCBAQAogCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfVU5SRUFDSCwgMCk7CiAKIAlydCA9IHNrYl9ydGFibGUoc2tiKTsKLQlpZiAocnQgJiYKLQkgICAgcnQtPnBlZXIgJiYKLQkgICAgcnQtPnBlZXItPnBtdHVfZXhwaXJlcykgewotCQl1bnNpZ25lZCBsb25nIG9yaWcgPSBydC0+cGVlci0+cG10dV9leHBpcmVzOwotCi0JCWlmIChjbXB4Y2hnKCZydC0+cGVlci0+cG10dV9leHBpcmVzLCBvcmlnLCAwKSA9PSBvcmlnKQotCQkJZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfTVRVLCBydC0+cGVlci0+cG10dV9vcmlnKTsKLQl9CisJaWYgKHJ0ICYmIHJ0LT5wZWVyICYmIHBlZXJfcG10dV9jbGVhbmVkKHJ0LT5wZWVyKSkKKwkJZHN0X21ldHJpY19zZXQoJnJ0LT5kc3QsIFJUQVhfTVRVLCBydC0+cGVlci0+cG10dV9vcmlnKTsKIH0KIAogc3RhdGljIGludCBpcF9ydF9idWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE3NzAsOCArMTc3OSw3IEBACiAJCQkgICAgICAgc2l6ZW9mKHUzMikgKiBSVEFYX01BWCk7CiAJCWRzdF9pbml0X21ldHJpY3MoJnJ0LT5kc3QsIHBlZXItPm1ldHJpY3MsIGZhbHNlKTsKIAotCQlpZiAocGVlci0+cG10dV9leHBpcmVzKQotCQkJY2hlY2tfcGVlcl9wbXR1KCZydC0+ZHN0LCBwZWVyKTsKKwkJY2hlY2tfcGVlcl9wbXR1KCZydC0+ZHN0LCBwZWVyKTsKIAkJaWYgKHBlZXItPnJlZGlyZWN0X2xlYXJuZWQuYTQgJiYKIAkJICAgIHBlZXItPnJlZGlyZWN0X2xlYXJuZWQuYTQgIT0gcnQtPnJ0X2dhdGV3YXkpIHsKIAkJCXJ0LT5ydF9nYXRld2F5ID0gcGVlci0+cmVkaXJlY3RfbGVhcm5lZC5hNDsKQEAgLTE4OTQsOSArMTkwMiw3IEBACiAKIAloYXNoID0gcnRfaGFzaChkYWRkciwgc2FkZHIsIGRldi0+aWZpbmRleCwgcnRfZ2VuaWQoZGV2X25ldChkZXYpKSk7CiAJcnRoID0gcnRfaW50ZXJuX2hhc2goaGFzaCwgcnRoLCBza2IsIGRldi0+aWZpbmRleCk7Ci0JZXJyID0gMDsKLQlpZiAoSVNfRVJSKHJ0aCkpCi0JCWVyciA9IFBUUl9FUlIocnRoKTsKKwlyZXR1cm4gSVNfRVJSKHJ0aCkgPyBQVFJfRVJSKHJ0aCkgOiAwOwogCiBlX25vYnVmczoKIAlyZXR1cm4gLUVOT0JVRlM7CkBAIC0yNzc1LDcgKzI3ODEsOCBAQAogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwogCXN0cnVjdCBydG1zZyAqcjsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKLQlsb25nIGV4cGlyZXM7CisJbG9uZyBleHBpcmVzID0gMDsKKwljb25zdCBzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcnQtPnBlZXI7CiAJdTMyIGlkID0gMCwgdHMgPSAwLCB0c2FnZSA9IDAsIGVycm9yOwogCiAJbmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIGV2ZW50LCBzaXplb2YoKnIpLCBmbGFncyk7CkBAIC0yODIzLDE1ICsyODMwLDE2IEBACiAJCU5MQV9QVVRfQkUzMihza2IsIFJUQV9NQVJLLCBydC0+cnRfbWFyayk7CiAKIAllcnJvciA9IHJ0LT5kc3QuZXJyb3I7Ci0JZXhwaXJlcyA9IChydC0+cGVlciAmJiBydC0+cGVlci0+cG10dV9leHBpcmVzKSA/Ci0JCXJ0LT5wZWVyLT5wbXR1X2V4cGlyZXMgLSBqaWZmaWVzIDogMDsKLQlpZiAocnQtPnBlZXIpIHsKKwlpZiAocGVlcikgewogCQlpbmV0X3BlZXJfcmVmY2hlY2socnQtPnBlZXIpOwotCQlpZCA9IGF0b21pY19yZWFkKCZydC0+cGVlci0+aXBfaWRfY291bnQpICYgMHhmZmZmOwotCQlpZiAocnQtPnBlZXItPnRjcF90c19zdGFtcCkgewotCQkJdHMgPSBydC0+cGVlci0+dGNwX3RzOwotCQkJdHNhZ2UgPSBnZXRfc2Vjb25kcygpIC0gcnQtPnBlZXItPnRjcF90c19zdGFtcDsKKwkJaWQgPSBhdG9taWNfcmVhZCgmcGVlci0+aXBfaWRfY291bnQpICYgMHhmZmZmOworCQlpZiAocGVlci0+dGNwX3RzX3N0YW1wKSB7CisJCQl0cyA9IHBlZXItPnRjcF90czsKKwkJCXRzYWdlID0gZ2V0X3NlY29uZHMoKSAtIHBlZXItPnRjcF90c19zdGFtcDsKIAkJfQorCQlleHBpcmVzID0gQUNDRVNTX09OQ0UocGVlci0+cG10dV9leHBpcmVzKTsKKwkJaWYgKGV4cGlyZXMpCisJCQlleHBpcmVzIC09IGppZmZpZXM7CiAJfQogCiAJaWYgKHJ0X2lzX2lucHV0X3JvdXRlKHJ0KSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggNjE3ZGVlMy4uOTU1YjhlNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYworKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC0xNTk0LDYgKzE1OTQsNyBAQAogCQkJZ290byBkaXNjYXJkOwogCiAJCWlmIChuc2sgIT0gc2spIHsKKwkJCXNvY2tfcnBzX3NhdmVfcnhoYXNoKG5zaywgc2tiLT5yeGhhc2gpOwogCQkJaWYgKHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYikpIHsKIAkJCQlyc2sgPSBuc2s7CiAJCQkJZ290byByZXNldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCmluZGV4IGI3OTE5ZjkuLmQ0NTBhMmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmMKKysrIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwpAQCAtMjcyLDYgKzI3MiwxMCBAQAogCiAJaWYgKGFkZHJfbGVuIDwgU0lONl9MRU5fUkZDMjEzMykKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWRkci0+c2luNl9mYW1pbHkgIT0gQUZfSU5FVDYpCisJCXJldHVybiAtRUlOVkFMOworCiAJYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoJmFkZHItPnNpbjZfYWRkcik7CiAJaWYgKChhZGRyX3R5cGUgJiBJUFY2X0FERFJfTVVMVElDQVNUKSAmJiBzb2NrLT50eXBlID09IFNPQ0tfU1RSRUFNKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwppbmRleCA0MTNhYjA3Li4yNDkzOTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCkBAIC0yMDQsNyArMjA0LDggQEAKIAllbHNlCiAJCXBtc2ctPm91dGRldl9uYW1lWzBdID0gJ1wwJzsKIAotCWlmIChlbnRyeS0+aW5kZXYgJiYgZW50cnktPnNrYi0+ZGV2KSB7CisJaWYgKGVudHJ5LT5pbmRldiAmJiBlbnRyeS0+c2tiLT5kZXYgJiYKKwkgICAgZW50cnktPnNrYi0+bWFjX2hlYWRlciAhPSBlbnRyeS0+c2tiLT5uZXR3b3JrX2hlYWRlcikgewogCQlwbXNnLT5od190eXBlID0gZW50cnktPnNrYi0+ZGV2LT50eXBlOwogCQlwbXNnLT5od19hZGRybGVuID0gZGV2X3BhcnNlX2hlYWRlcihlbnRyeS0+c2tiLCBwbXNnLT5od19hZGRyKTsKIAl9CkBAIC00MDMsNyArNDA0LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogX19pcHFfcmN2X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCBzdGF0dXMsIHR5cGUsIHBpZCwgZmxhZ3MsIG5sbXNnbGVuLCBza2JsZW47CisJaW50IHN0YXR1cywgdHlwZSwgcGlkLCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbmxtc2dsZW4sIHNrYmxlbjsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAogCXNrYmxlbiA9IHNrYi0+bGVuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKaW5kZXggYzhhZjU4Yi4uNDExMTA1MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAogCS8qIFRoaXMgaXMgd2hlcmUgd2UgY2FsbCB0aGUgaGVscGVyOiBhcyB0aGUgcGFja2V0IGdvZXMgb3V0LiAqLwogCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7Ci0JaWYgKCFjdCB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKQorCWlmICghY3QgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpCiAJCWdvdG8gb3V0OwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwppbmRleCAxZGYzYzhiLi43YzA1ZTdlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCS8qIFVwZGF0ZSBza2IgdG8gcmVmZXIgdG8gdGhpcyBjb25uZWN0aW9uICovCiAJc2tiLT5uZmN0ID0gJm5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCktPmN0X2dlbmVyYWw7CiAJc2tiLT5uZmN0aW5mbyA9ICpjdGluZm87Ci0JcmV0dXJuIC1ORl9BQ0NFUFQ7CisJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggYTFlZjYxYS4uNzhhYTUzNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC0xNjQ5LDYgKzE2NDksNyBAQAogCQkgKiB0aGUgbmV3IHNvY2tldC4uCiAJCSAqLwogCQlpZihuc2sgIT0gc2spIHsKKwkJCXNvY2tfcnBzX3NhdmVfcnhoYXNoKG5zaywgc2tiLT5yeGhhc2gpOwogCQkJaWYgKHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYikpCiAJCQkJZ290byByZXNldDsKIAkJCWlmIChvcHRfc2tiKQpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJpYXAuYyBiL25ldC9pcmRhL2lyaWFwLmMKaW5kZXggZGZjN2I0Ny4uZTcxZTg1YiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJpYXAuYworKysgYi9uZXQvaXJkYS9pcmlhcC5jCkBAIC04Nyw2ICs4Nyw4IEBACiAJCQkgaXJpYXBfd2F0Y2hkb2dfdGltZXJfZXhwaXJlZCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaXJpYXNfb2JqZWN0c19rZXk7CisKIC8qCiAgKiBGdW5jdGlvbiBpcmlhcF9pbml0ICh2b2lkKQogICoKQEAgLTExNCw2ICsxMTYsOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlsb2NrZGVwX3NldF9jbGFzc19hbmRfbmFtZSgmaXJpYXNfb2JqZWN0cy0+aGJfc3BpbmxvY2ssICZpcmlhc19vYmplY3RzX2tleSwKKwkJCQkgICAiaXJpYXNfb2JqZWN0cyIpOworCiAJLyoKIAkgKiAgUmVnaXN0ZXIgc29tZSBkZWZhdWx0IHNlcnZpY2VzIGZvciBJckxNUAogCSAqLwpkaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYwppbmRleCBiOGRiYWU4Li43NjEzMDEzIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYworKysgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJICovCiAJcGQtPm5ldCA9IGdldF9uZXRfbnNfYnlfcGlkKGN1cnJlbnQtPnBpZCk7CiAJaWYgKElTX0VSUihwZC0+bmV0KSkgewotCQlyYyA9IC1QVFJfRVJSKHBkLT5uZXQpOworCQlyYyA9IFBUUl9FUlIocGQtPm5ldCk7CiAJCWdvdG8gZXJyX2ZyZWVfcGQ7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwppbmRleCA0MjFlYWE2Li41NmMyNGNhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWJzcy5jCisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKQEAgLTk2NSw2ICs5NjUsMTAgQEAKIAogCW11dGV4X2xvY2soJnNkYXRhLT51Lmlic3MubXR4KTsKIAorCXNkYXRhLT51Lmlic3Muc3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDsKKwltZW1zZXQoc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCwgRVRIX0FMRU4pOworCXNkYXRhLT51Lmlic3Muc3NpZF9sZW4gPSAwOworCiAJYWN0aXZlX2lic3MgPSBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKTsKIAogCWlmICghYWN0aXZlX2lic3MgJiYgIWlzX3plcm9fZXRoZXJfYWRkcihpZmlic3MtPmJzc2lkKSkgewpAQCAtOTk5LDggKzEwMDMsNiBAQAogCWtmcmVlX3NrYihza2IpOwogCiAJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+c2tiX3F1ZXVlKTsKLQltZW1zZXQoc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCwgRVRIX0FMRU4pOwotCXNkYXRhLT51Lmlic3Muc3NpZF9sZW4gPSAwOwogCiAJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lmlic3MudGltZXIpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCA0NTZjY2NmLi5kNTk1MjY1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTIzMiw5ICsyMzIsNiBAQAogCQlXQVJOX09OKCFpZWVlODAyMTFfc2V0X2NoYW5uZWxfdHlwZShsb2NhbCwgc2RhdGEsIGNoYW5uZWxfdHlwZSkpOwogCX0KIAotCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCi0JCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EpOwotCiAJLyogY2hhbm5lbF90eXBlIGNoYW5nZSBhdXRvbWF0aWNhbGx5IGRldGVjdGVkICovCiAJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgMCk7CiAKQEAgLTI0OCw5ICsyNDUsNiBAQAogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXNfYnlfcmVhc29uKCZzZGF0YS0+bG9jYWwtPmh3LAotCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQ1NBKTsKLQogCWh0X29wbW9kZSA9IGxlMTZfdG9fY3B1KGh0aS0+b3BlcmF0aW9uX21vZGUpOwogCiAJLyogaWYgYnNzIGNvbmZpZ3VyYXRpb24gY2hhbmdlZCBzdG9yZSB0aGUgbmV3IG9uZSAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKaW5kZXggNzdjNjFiMC4uMTI1NzFmYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCkBAIC03NzYsOCArNzc2LDE2IEBACiAJCWlmIChjcC0+Y29udHJvbCkKIAkJCWlwX3ZzX2NvbnRyb2xfZGVsKGNwKTsKIAotCQlpZiAoY3AtPmZsYWdzICYgSVBfVlNfQ09OTl9GX05GQ1QpCisJCWlmIChjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfTkZDVCkgewogCQkJaXBfdnNfY29ubl9kcm9wX2Nvbm50cmFjayhjcCk7CisJCQkvKiBEbyBub3QgYWNjZXNzIGNvbm50cmFja3MgZHVyaW5nIHN1YnN5cyBjbGVhbnVwCisJCQkgKiBiZWNhdXNlIG5mX2Nvbm50cmFja19maW5kX2dldCBjYW4gbm90IGJlIHVzZWQgYWZ0ZXIKKwkJCSAqIGNvbm50cmFjayBjbGVhbnVwIGZvciB0aGUgbmV0LgorCQkJICovCisJCQlzbXBfcm1iKCk7CisJCQlpZiAoaXB2cy0+ZW5hYmxlKQorCQkJCWlwX3ZzX2Nvbm5fZHJvcF9jb25udHJhY2soY3ApOworCQl9CiAKIAkJaXBfdnNfcGVfcHV0KGNwLT5wZSk7CiAJCWtmcmVlKGNwLT5wZV9kYXRhKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IDIyMDBiYWUuLmUzM2Q0OGMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMTc3Miw3ICsxNzcyLDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSA5OSwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TUkMgLSAyLAogCX0sCiAJLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgZm9yd2FyZCBwYWNrZXQgdGhyb3VnaCBWUy9EUiwgVlMvVFVOLAogCSAqIG9yIFZTL05BVChjaGFuZ2UgZGVzdGluYXRpb24pLCBzbyB0aGF0IGZpbHRlcmluZyBydWxlcyBjYW4gYmUKQEAgLTE3ODIsNyArMTc4Miw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gMTAxLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQyAtIDEsCiAJfSwKIAkvKiBCZWZvcmUgaXBfdnNfaW4sIGNoYW5nZSBzb3VyY2Ugb25seSBmb3IgVlMvTkFUICovCiAJewpAQCAtMTc5MCw3ICsxNzkwLDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gLTk5LAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCArIDEsCiAJfSwKIAkvKiBBZnRlciBtYW5nbGUsIHNjaGVkdWxlIGFuZCBmb3J3YXJkIGxvY2FsIHJlcXVlc3RzICovCiAJewpAQCAtMTc5OCw3ICsxNzk4LDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gLTk4LAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCArIDIsCiAJfSwKIAkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nIChidXQgYmVmb3JlIGlwX3ZzX291dF9pY21wKSwgY2F0Y2ggaWNtcAogCSAqIGRlc3RpbmVkIGZvciAwLjAuMC4wLzAsIHdoaWNoIGlzIGZvciBpbmNvbWluZyBJUFZTIGNvbm5lY3Rpb25zICovCkBAIC0xODI0LDcgKzE4MjQsNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wZgkJPSBQRl9JTkVUNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSA5OSwKKwkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9OQVRfU1JDIC0gMiwKIAl9LAogCS8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGZvcndhcmQgcGFja2V0IHRocm91Z2ggVlMvRFIsIFZTL1RVTiwKIAkgKiBvciBWUy9OQVQoY2hhbmdlIGRlc3RpbmF0aW9uKSwgc28gdGhhdCBmaWx0ZXJpbmcgcnVsZXMgY2FuIGJlCkBAIC0xODM0LDcgKzE4MzQsNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wZgkJPSBQRl9JTkVUNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSAxMDEsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTkFUX1NSQyAtIDEsCiAJfSwKIAkvKiBCZWZvcmUgaXBfdnNfaW4sIGNoYW5nZSBzb3VyY2Ugb25seSBmb3IgVlMvTkFUICovCiAJewpAQCAtMTg0Miw3ICsxODQyLDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gLTk5LAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX05BVF9EU1QgKyAxLAogCX0sCiAJLyogQWZ0ZXIgbWFuZ2xlLCBzY2hlZHVsZSBhbmQgZm9yd2FyZCBsb2NhbCByZXF1ZXN0cyAqLwogCXsKQEAgLTE4NTAsNyArMTg1MCw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQ2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAotCQkucHJpb3JpdHkJPSAtOTgsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTkFUX0RTVCArIDIsCiAJfSwKIAkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nIChidXQgYmVmb3JlIGlwX3ZzX291dF9pY21wKSwgY2F0Y2ggaWNtcAogCSAqIGRlc3RpbmVkIGZvciAwLjAuMC4wLzAsIHdoaWNoIGlzIGZvciBpbmNvbWluZyBJUFZTIGNvbm5lY3Rpb25zICovCkBAIC0xOTQ1LDYgKzE5NDUsNyBAQAogewogCUVudGVyRnVuY3Rpb24oMik7CiAJbmV0X2lwdnMobmV0KS0+ZW5hYmxlID0gMDsJLyogRGlzYWJsZSBwYWNrZXQgcmVjZXB0aW9uICovCisJc21wX3dtYigpOwogCWlwX3ZzX3N5bmNfbmV0X2NsZWFudXAobmV0KTsKIAlMZWF2ZUZ1bmN0aW9uKDIpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IDJlMWMxMWYuLmY3YWY4YjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTg1MCw3ICs4NTAsNyBAQAogCiAJLyogSXQgZXhpc3RzOyB3ZSBoYXZlIChub24tZXhjbHVzaXZlKSByZWZlcmVuY2UuICovCiAJaWYgKE5GX0NUX0RJUkVDVElPTihoKSA9PSBJUF9DVF9ESVJfUkVQTFkpIHsKLQkJKmN0aW5mbyA9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFk7CisJCSpjdGluZm8gPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWTsKIAkJLyogUGxlYXNlIHNldCByZXBseSBiaXQgaWYgdGhpcyBwYWNrZXQgT0sgKi8KIAkJKnNldF9yZXBseSA9IDE7CiAJfSBlbHNlIHsKQEAgLTkyMiw2ICs5MjIsOSBAQAogCQkJcmV0ID0gLXJldDsKIAkJCWdvdG8gb3V0OwogCQl9CisJCS8qIElDTVBbdjZdIHByb3RvY29sIHRyYWNrZXJzIG1heSBhc3NpZ24gb25lIGNvbm50cmFjay4gKi8KKwkJaWYgKHNrYi0+bmZjdCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCWN0ID0gcmVzb2x2ZV9ub3JtYWxfY3QobmV0LCB0bXBsLCBza2IsIGRhdGFvZmYsIHBmLCBwcm90b251bSwKQEAgLTExNDMsNyArMTE0Niw3IEBACiAJLyogVGhpcyBJQ01QIGlzIGluIHJldmVyc2UgZGlyZWN0aW9uIHRvIHRoZSBwYWNrZXQgd2hpY2ggY2F1c2VkIGl0ICovCiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAlpZiAoQ1RJTkZPMkRJUihjdGluZm8pID09IElQX0NUX0RJUl9PUklHSU5BTCkKLQkJY3RpbmZvID0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZOworCQljdGluZm8gPSBJUF9DVF9SRUxBVEVEX1JFUExZOwogCWVsc2UKIAkJY3RpbmZvID0gSVBfQ1RfUkVMQVRFRDsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwppbmRleCBlMTdjYjdjLi42ZjU4MDFlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYwpAQCAtMzY4LDcgKzM2OCw3IEBACiAKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KIAlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKSB7CisJICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSkgewogCQlwcl9kZWJ1ZygiZnRwOiBDb25udHJhY2tpbmZvID0gJXVcbiIsIGN0aW5mbyk7CiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwppbmRleCAxOGIyY2U1Li5mMDNjMmQ0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwpAQCAtNTcxLDEwICs1NzEsOSBAQAogCWludCByZXQ7CiAKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KLQlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKSB7CisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJiBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkpCiAJCXJldHVybiBORl9BQ0NFUFQ7Ci0JfQorCiAJcHJfZGVidWcoIm5mX2N0X2gyNDU6IHNrYmxlbiA9ICV1XG4iLCBza2ItPmxlbik7CiAKIAlzcGluX2xvY2tfYmgoJm5mX2gzMjNfbG9jayk7CkBAIC0xMTI1LDEwICsxMTI0LDkgQEAKIAlpbnQgcmV0OwogCiAJLyogVW50aWwgdGhlcmUncyBiZWVuIHRyYWZmaWMgYm90aCB3YXlzLCBkb24ndCBsb29rIGluIHBhY2tldHMuICovCi0JaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJgotCSAgICBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgKyBJUF9DVF9JU19SRVBMWSkgeworCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKQogCQlyZXR1cm4gTkZfQUNDRVBUOwotCX0KKwogCXByX2RlYnVnKCJuZl9jdF9xOTMxOiBza2JsZW4gPSAldVxuIiwgc2tiLT5sZW4pOwogCiAJc3Bpbl9sb2NrX2JoKCZuZl9oMzIzX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwppbmRleCBiMzk0YWEzLi40ZjkzOTBiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwpAQCAtMTI1LDggKzEyNSw3IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KLQlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKQorCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJLyogTm90IGEgZnVsbCB0Y3AgaGVhZGVyPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCmluZGV4IDA4ODk0NDguLjJmZDQ1NjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKQEAgLTUxOSw4ICs1MTksNyBAQAogCXVfaW50MTZfdCBtc2c7CiAKIAkvKiBkb24ndCBkbyBhbnkgdHJhY2tpbmcgYmVmb3JlIHRjcCBoYW5kc2hha2UgY29tcGxldGUgKi8KLQlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKQorCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJbmV4dGhkcl9vZmYgPSBwcm90b2ZmOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jCmluZGV4IGQ5ZTI3NzMuLjg1MDE4MjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMKQEAgLTc4LDcgKzc4LDcgQEAKIAljdF9zYW5lX2luZm8gPSAmbmZjdF9oZWxwKGN0KS0+aGVscC5jdF9zYW5lX2luZm87CiAJLyogVW50aWwgdGhlcmUncyBiZWVuIHRyYWZmaWMgYm90aCB3YXlzLCBkb24ndCBsb29rIGluIHBhY2tldHMuICovCiAJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJgotCSAgICBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQrSVBfQ1RfSVNfUkVQTFkpCisJICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCS8qIE5vdCBhIGZ1bGwgdGNwIGhlYWRlcj8gKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKaW5kZXggY2I1YTI4NS4uOTNmYWY2YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKQEAgLTE0MjMsNyArMTQyMyw3IEBACiAJdHlwZW9mKG5mX25hdF9zaXBfc2VxX2FkanVzdF9ob29rKSBuZl9uYXRfc2lwX3NlcV9hZGp1c3Q7CiAKIAlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKQorCSAgICBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAkvKiBObyBEYXRhID8gKi8KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKaW5kZXggZTBlZTAxMC4uMmU3Y2NiYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMKQEAgLTQ1Niw3ICs0NTYsOCBAQAogCWlmIChza2ItPm1hcmspCiAJCU5MQV9QVVRfQkUzMihpbnN0LT5za2IsIE5GVUxBX01BUkssIGh0b25sKHNrYi0+bWFyaykpOwogCi0JaWYgKGluZGV2ICYmIHNrYi0+ZGV2KSB7CisJaWYgKGluZGV2ICYmIHNrYi0+ZGV2ICYmCisJICAgIHNrYi0+bWFjX2hlYWRlciAhPSBza2ItPm5ldHdvcmtfaGVhZGVyKSB7CiAJCXN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9odyBwaHc7CiAJCWludCBsZW4gPSBkZXZfcGFyc2VfaGVhZGVyKHNrYiwgcGh3Lmh3X2FkZHIpOwogCQlpZiAobGVuID4gMCkgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKaW5kZXggYjgzMTIzZi4uZmRkMmZhZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCkBAIC0zMzUsNyArMzM1LDggQEAKIAlpZiAoZW50c2tiLT5tYXJrKQogCQlOTEFfUFVUX0JFMzIoc2tiLCBORlFBX01BUkssIGh0b25sKGVudHNrYi0+bWFyaykpOwogCi0JaWYgKGluZGV2ICYmIGVudHNrYi0+ZGV2KSB7CisJaWYgKGluZGV2ICYmIGVudHNrYi0+ZGV2ICYmCisJICAgIGVudHNrYi0+bWFjX2hlYWRlciAhPSBlbnRza2ItPm5ldHdvcmtfaGVhZGVyKSB7CiAJCXN0cnVjdCBuZnFubF9tc2dfcGFja2V0X2h3IHBodzsKIAkJaW50IGxlbiA9IGRldl9wYXJzZV9oZWFkZXIoZW50c2tiLCBwaHcuaHdfYWRkcik7CiAJCWlmIChsZW4pIHsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc29ja2V0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jCmluZGV4IDljYzQ2MzUuLmZlMzlmN2UgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc29ja2V0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYwpAQCAtMTQzLDkgKzE0Myw5IEBACiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKIAlpZiAoY3QgJiYgIW5mX2N0X2lzX3VudHJhY2tlZChjdCkgJiYKIAkgICAgKChpcGgtPnByb3RvY29sICE9IElQUFJPVE9fSUNNUCAmJgotCSAgICAgIGN0aW5mbyA9PSBJUF9DVF9JU19SRVBMWSArIElQX0NUX0VTVEFCTElTSEVEKSB8fAorCSAgICAgIGN0aW5mbyA9PSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSkgfHwKIAkgICAgIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fSUNNUCAmJgotCSAgICAgIGN0aW5mbyA9PSBJUF9DVF9JU19SRVBMWSArIElQX0NUX1JFTEFURUQpKSAmJgorCSAgICAgIGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEX1JFUExZKSkgJiYKIAkgICAgKGN0LT5zdGF0dXMgJiBJUFNfU1JDX05BVF9ET05FKSkgewogCiAJCWRhZGRyID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy51My5pcDsKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGI1NGVjNDEuLjQ2MWIxNmYgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtODA0LDYgKzgwNCw3IEBACiAJCX0gZWxzZSB7CiAJCQloLmgyLT50cF92bGFuX3RjaSA9IDA7CiAJCX0KKwkJaC5oMi0+dHBfcGFkZGluZyA9IDA7CiAJCWhkcmxlbiA9IHNpemVvZigqaC5oMik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNzQzLDYgKzE3NDQsNyBAQAogCQl9IGVsc2UgewogCQkJYXV4LnRwX3ZsYW5fdGNpID0gMDsKIAkJfQorCQlhdXgudHBfcGFkZGluZyA9IDA7CiAJCXB1dF9jbXNnKG1zZywgU09MX1BBQ0tFVCwgUEFDS0VUX0FVWERBVEEsIHNpemVvZihhdXgpLCAmYXV4KTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggYjE3MjFkNy4uYjRjNjgwOSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTI1MSw5ICsyNTEsOCBAQAogCQkJfQogCiAJCQlpZiAoc29tZV9xdWV1ZV90aW1lZG91dCkgewotCQkJCWNoYXIgZHJpdmVybmFtZVs2NF07CiAJCQkJV0FSTl9PTkNFKDEsIEtFUk5fSU5GTyAiTkVUREVWIFdBVENIRE9HOiAlcyAoJXMpOiB0cmFuc21pdCBxdWV1ZSAldSB0aW1lZCBvdXRcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgbmV0ZGV2X2RyaXZlcm5hbWUoZGV2LCBkcml2ZXJuYW1lLCA2NCksIGkpOworCQkJCSAgICAgICBkZXYtPm5hbWUsIG5ldGRldl9kcml2ZXJuYW1lKGRldiksIGkpOwogCQkJCWRldi0+bmV0ZGV2X29wcy0+bmRvX3R4X3RpbWVvdXQoZGV2KTsKIAkJCX0KIAkJCWlmICghbW9kX3RpbWVyKCZkZXYtPndhdGNoZG9nX3RpbWVyLApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwppbmRleCAwYTlhMmVjLi5jM2I3NTMzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3Nfa3JiNS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZ3NzX2tyYjVfZW5jdHlwZXMuaD4KIAogI2lmZGVmIFJQQ19ERUJVRwogIyBkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICkBAIC03NTAsNyArNzUxLDcgQEAKIAkuZ21fb3BzCQk9ICZnc3Nfa2VyYmVyb3Nfb3BzLAogCS5nbV9wZl9udW0JPSBBUlJBWV9TSVpFKGdzc19rZXJiZXJvc19wZnMpLAogCS5nbV9wZnMJCT0gZ3NzX2tlcmJlcm9zX3BmcywKLQkuZ21fdXBjYWxsX2VuY3R5cGVzID0gIjE4LDE3LDE2LDIzLDMsMSwyIiwKKwkuZ21fdXBjYWxsX2VuY3R5cGVzID0gS1JCNV9TVVBQT1JURURfRU5DVFlQRVMsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2tlcmJlcm9zX21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggNzBjYmM4Yy4uMTA4MjNlMiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYworKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0zNDA2LDExICszNDA2LDExIEBACiAJaSA9IDA7CiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSkgewogCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSwgdG1wKSB7Ci0JCQlyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA9IG5sYV9sZW4oYXR0cik7Ci0JCQlpZiAocmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CisJCQlpZiAobmxhX2xlbihhdHRyKSA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CisJCQlyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA9IG5sYV9sZW4oYXR0cik7CiAJCQltZW1jcHkocmVxdWVzdC0+c3NpZHNbaV0uc3NpZCwgbmxhX2RhdGEoYXR0ciksIG5sYV9sZW4oYXR0cikpOwogCQkJaSsrOwogCQl9CkBAIC0zNTcyLDEyICszNTcyLDExIEBACiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSkgewogCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSwKIAkJCQkgICAgdG1wKSB7Ci0JCQlyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA9IG5sYV9sZW4oYXR0cik7Ci0JCQlpZiAocmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4gPgotCQkJICAgIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJCWlmIChubGFfbGVuKGF0dHIpID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgewogCQkJCWVyciA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KKwkJCXJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID0gbmxhX2xlbihhdHRyKTsKIAkJCW1lbWNweShyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkLCBubGFfZGF0YShhdHRyKSwKIAkJCSAgICAgICBubGFfbGVuKGF0dHIpKTsKIAkJCWkrKzsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMgYi9uZXQveGZybS94ZnJtX3JlcGxheS5jCmluZGV4IDQ3ZjFiODYuLmIxMWVhNjkgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMKKysrIGIvbmV0L3hmcm0veGZybV9yZXBsYXkuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJCQliaXRuciA9IGJpdG5yICYgMHgxRjsKIAkJCXJlcGxheV9lc24tPmJtcFtucl0gfD0gKDFVIDw8IGJpdG5yKTsKIAkJfSBlbHNlIHsKLQkJCW5yID0gcmVwbGF5X2Vzbi0+cmVwbGF5X3dpbmRvdyA+PiA1OworCQkJbnIgPSAocmVwbGF5X2Vzbi0+cmVwbGF5X3dpbmRvdyAtIDEpID4+IDU7CiAJCQlmb3IgKGkgPSAwOyBpIDw9IG5yOyBpKyspCiAJCQkJcmVwbGF5X2Vzbi0+Ym1wW2ldID0gMDsKIApAQCAtNDcxLDcgKzQ3MSw3IEBACiAJCQliaXRuciA9IGJpdG5yICYgMHgxRjsKIAkJCXJlcGxheV9lc24tPmJtcFtucl0gfD0gKDFVIDw8IGJpdG5yKTsKIAkJfSBlbHNlIHsKLQkJCW5yID0gcmVwbGF5X2Vzbi0+cmVwbGF5X3dpbmRvdyA+PiA1OworCQkJbnIgPSAocmVwbGF5X2Vzbi0+cmVwbGF5X3dpbmRvdyAtIDEpID4+IDU7CiAJCQlmb3IgKGkgPSAwOyBpIDw9IG5yOyBpKyspCiAJCQkJcmVwbGF5X2Vzbi0+Ym1wW2ldID0gMDsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5hc20tZ2VuZXJpYyBiL3NjcmlwdHMvTWFrZWZpbGUuYXNtLWdlbmVyaWMKaW5kZXggNDkwMTIyYy4uNDBjYWYzYyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5hc20tZ2VuZXJpYworKysgYi9zY3JpcHRzL01ha2VmaWxlLmFzbS1nZW5lcmljCkBAIC0xNyw2ICsxNyw3IEBACiBjbWRfd3JhcCA9IGVjaG8gIlwjaW5jbHVkZSA8YXNtLWdlbmVyaWMvJCouaD4iID4kQAogCiBhbGw6ICQocGF0c3Vic3QgJSwgJChvYmopLyUsICQoZ2VuZXJpYy15KSkKKwlAOgogCiAkKG9iaikvJS5oOgogCSQoY2FsbCBjbWQsd3JhcCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbCBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbAppbmRleCA4NjU3Zjk5Li5iMGFhMmM2IDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKKysrIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCkBAIC0xOTQzLDYgKzE5NDMsMTEgQEAKIAkJCVdBUk4oIkxJTlVYX1ZFUlNJT05fQ09ERSBzaG91bGQgYmUgYXZvaWRlZCwgY29kZSBzaG91bGQgYmUgZm9yIHRoZSB2ZXJzaW9uIHRvIHdoaWNoIGl0IGlzIG1lcmdlZFxuIiAuICRoZXJlY3Vycik7CiAJCX0KIAorIyBjaGVjayBmb3IgdXNlcyBvZiBwcmludGtfcmF0ZWxpbWl0CisJCWlmICgkbGluZSA9fiAvXGJwcmludGtfcmF0ZWxpbWl0XHMqXCgvKSB7CisJCQlXQVJOKCJQcmVmZXIgcHJpbnRrX3JhdGVsaW1pdGVkIG9yIHByXzxsZXZlbD5fcmF0ZWxpbWl0ZWQgdG8gcHJpbnRrX3JhdGVsaW1pdFxuIiAuICRoZXJlY3Vycik7CisJCX0KKwogIyBwcmludGsgc2hvdWxkIHVzZSBLRVJOXyogbGV2ZWxzLiAgTm90ZSB0aGF0IGZvbGxvdyBvbiBwcmludGsncyBvbiB0aGUKICMgc2FtZSBsaW5lIGRvIG5vdCBuZWVkIGEgbGV2ZWwsIHNvIHdlIHVzZSB0aGUgY3VycmVudCBibG9jayBjb250ZXh0CiAjIHRvIHRyeSBhbmQgZmluZCBhbmQgdmFsaWRhdGUgdGhlIGN1cnJlbnQgcHJpbnRrLiAgSW4gc3VtbWFyeSB0aGUgY3VycmVudApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kZXBtb2Quc2ggYi9zY3JpcHRzL2RlcG1vZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjAyOWNiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9kZXBtb2Quc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisjCisjIEEgZGVwbW9kIHdyYXBwZXIgdXNlZCBieSB0aGUgdG9wbGV2ZWwgTWFrZWZpbGUKKworaWYgdGVzdCAkIyAtbmUgMjsgdGhlbgorCWVjaG8gIlVzYWdlOiAkMCAvc2Jpbi9kZXBtb2QgPGtlcm5lbHJlbGVhc2U+IiA+JjIKKwlleGl0IDEKK2ZpCitERVBNT0Q9JDEKK0tFUk5FTFJFTEVBU0U9JDIKKworaWYgISAiJERFUE1PRCIgLVYgMj4vZGV2L251bGwgfCBncmVwIC1xIG1vZHVsZS1pbml0LXRvb2xzOyB0aGVuCisJZWNobyAiV2FybmluZzogeW91IG1heSBuZWVkIHRvIGluc3RhbGwgbW9kdWxlLWluaXQtdG9vbHMiID4mMgorCWVjaG8gIlNlZSBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrL2RvY3MvcG9zdC1oYWxsb3dlZW4tMi42LnR4dCIgPiYyCisJc2xlZXAgMQorZmkKKworaWYgISB0ZXN0IC1yIFN5c3RlbS5tYXAgLWEgLXggIiRERVBNT0QiOyB0aGVuCisJZXhpdCAwCitmaQorIyBvbGRlciB2ZXJzaW9ucyBvZiBkZXBtb2QgcmVxdWlyZSB0aGUgdmVyc2lvbiBzdHJpbmcgdG8gc3RhcnQgd2l0aCB0aHJlZQorIyBudW1iZXJzLCBzbyB3ZSBjaGVhdCB3aXRoIGEgc3ltbGluayBoZXJlCitkZXBtb2RfaGFja19uZWVkZWQ9dHJ1ZQorbWtkaXIgLXAgLnRtcF9kZXBtb2QvbGliL21vZHVsZXMvJEtFUk5FTFJFTEVBU0UKK2lmICIkREVQTU9EIiAtYiAudG1wX2RlcG1vZCAkS0VSTkVMUkVMRUFTRSAyPi9kZXYvbnVsbDsgdGhlbgorCWlmIHRlc3QgLWUgLnRtcF9kZXBtb2QvbGliL21vZHVsZXMvJEtFUk5FTFJFTEVBU0UvbW9kdWxlcy5kZXAgLW8gXAorCQktZSAudG1wX2RlcG1vZC9saWIvbW9kdWxlcy8kS0VSTkVMUkVMRUFTRS9tb2R1bGVzLmRlcC5iaW47IHRoZW4KKwkJZGVwbW9kX2hhY2tfbmVlZGVkPWZhbHNlCisJZmkKK2ZpCitpZiAkZGVwbW9kX2hhY2tfbmVlZGVkOyB0aGVuCisJc3ltbGluaz0iJElOU1RBTExfTU9EX1BBVEgvbGliL21vZHVsZXMvOTkuOTguJEtFUk5FTFJFTEVBU0UiCisJbG4gLXMgIiRLRVJORUxSRUxFQVNFIiAiJHN5bWxpbmsiCisJS0VSTkVMUkVMRUFTRT05OS45OC4kS0VSTkVMUkVMRUFTRQorZmkKKworc2V0IC0tIC1hZSAtRiBTeXN0ZW0ubWFwCitpZiB0ZXN0IC1uICIkSU5TVEFMTF9NT0RfUEFUSCI7IHRoZW4KKwlzZXQgLS0gIiRAIiAtYiAiJElOU1RBTExfTU9EX1BBVEgiCitmaQorIiRERVBNT0QiICIkQCIgIiRLRVJORUxSRUxFQVNFIgorcmV0PSQ/CisKK2lmICRkZXBtb2RfaGFja19uZWVkZWQ7IHRoZW4KKwlybSAtZiAiJHN5bWxpbmsiCitmaQorCitleGl0ICRyZXQKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL2xzbS5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMKaW5kZXggZWMxYmNlYy4uM2QyZmQxNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMKQEAgLTYxMiw3ICs2MTIsNyBAQAogc3RhdGljIGludCBhcHBhcm1vcl90YXNrX3NldHJsaW1pdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCXVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqbmV3X3JsaW0pCiB7Ci0Jc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUgPSBhYV9jdXJyZW50X3Byb2ZpbGUoKTsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSA9IF9fYWFfY3VycmVudF9wcm9maWxlKCk7CiAJaW50IGVycm9yID0gMDsKIAogCWlmICghdW5jb25maW5lZChwcm9maWxlKSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYyBiL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYwppbmRleCBjZDFmNzc5Li4xYmU2ODI2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMKKysrIGIvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jCkBAIC00NzQsMTcgKzQ3NCwxMSBAQAogCS5zdWJzeXNfaWQgPSBkZXZpY2VzX3N1YnN5c19pZCwKIH07CiAKLWludCBkZXZjZ3JvdXBfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK2ludCBfX2RldmNncm91cF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewogCXN0cnVjdCBkZXZfY2dyb3VwICpkZXZfY2dyb3VwOwogCXN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gKndoOwogCi0JZGV2X3QgZGV2aWNlID0gaW5vZGUtPmlfcmRldjsKLQlpZiAoIWRldmljZSkKLQkJcmV0dXJuIDA7Ci0JaWYgKCFTX0lTQkxLKGlub2RlLT5pX21vZGUpICYmICFTX0lTQ0hSKGlub2RlLT5pX21vZGUpKQotCQlyZXR1cm4gMDsKLQogCXJjdV9yZWFkX2xvY2soKTsKIAogCWRldl9jZ3JvdXAgPSB0YXNrX2RldmNncm91cChjdXJyZW50KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwppbmRleCBkMzE4NjJlLi44ZTMxOWE0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCkBAIC03MSw5ICs3MSw4IEBACiAgKiBUaGlzIGlzIGNhbGxlZCBpbiBjb250ZXh0IG9mIGZyZXNobHkgZm9ya2VkIGt0aHJlYWQgYmVmb3JlIGtlcm5lbF9leGVjdmUoKSwKICAqIHNvIHdlIGNhbiBzaW1wbHkgaW5zdGFsbCB0aGUgZGVzaXJlZCBzZXNzaW9uX2tleXJpbmcgYXQgdGhpcyBwb2ludC4KICAqLwotc3RhdGljIGludCB1bWhfa2V5c19pbml0KHN0cnVjdCBzdWJwcm9jZXNzX2luZm8gKmluZm8pCitzdGF0aWMgaW50IHVtaF9rZXlzX2luaXQoc3RydWN0IHN1YnByb2Nlc3NfaW5mbyAqaW5mbywgc3RydWN0IGNyZWQgKmNyZWQpCiB7Ci0Jc3RydWN0IGNyZWQgKmNyZWQgPSAoc3RydWN0IGNyZWQqKWN1cnJlbnRfY3JlZCgpOwogCXN0cnVjdCBrZXkgKmtleXJpbmcgPSBpbmZvLT5kYXRhOwogCiAJcmV0dXJuIGluc3RhbGxfc2Vzc2lvbl9rZXlyaW5nX3RvX2NyZWQoY3JlZCwga2V5cmluZyk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggYTBkMzg0NS4uMjAyMTllZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMTQ3Niw3ICsxNDc2LDYgQEAKIAkJCSAgdW5zaWduZWQgZmxhZ3MpCiB7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKLQlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgYWQ7CiAJdTMyIHNpZDsKIAogCXZhbGlkYXRlX2NyZWRzKGNyZWQpOwpAQCAtMTQ4NywxNSArMTQ4NiwyMSBAQAogCXNpZCA9IGNyZWRfc2lkKGNyZWQpOwogCWlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKIAotCWlmICghYWRwKSB7Ci0JCWFkcCA9ICZhZDsKLQkJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElOT0RFKTsKLQkJYWQudS5pbm9kZSA9IGlub2RlOwotCX0KLQogCXJldHVybiBhdmNfaGFzX3Blcm1fZmxhZ3Moc2lkLCBpc2VjLT5zaWQsIGlzZWMtPnNjbGFzcywgcGVybXMsIGFkcCwgZmxhZ3MpOwogfQogCitzdGF0aWMgaW50IGlub2RlX2hhc19wZXJtX25vYWRwKGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkLAorCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJdTMyIHBlcm1zLAorCQkJCXVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKKworCUNPTU1PTl9BVURJVF9EQVRBX0lOSVQoJmFkLCBJTk9ERSk7CisJYWQudS5pbm9kZSA9IGlub2RlOworCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgcGVybXMsICZhZCwgZmxhZ3MpOworfQorCiAvKiBTYW1lIGFzIGlub2RlX2hhc19wZXJtLCBidXQgcGFzcyBleHBsaWNpdCBhdWRpdCBkYXRhIGNvbnRhaW5pbmcKICAgIHRoZSBkZW50cnkgdG8gaGVscCB0aGUgYXVkaXRpbmcgY29kZSB0byBtb3JlIGVhc2lseSBnZW5lcmF0ZSB0aGUKICAgIHBhdGhuYW1lIGlmIG5lZWRlZC4gKi8KQEAgLTIxMjIsOCArMjEyNyw4IEBACiAJCQkJCQlzdHJ1Y3QgdHR5X2ZpbGVfcHJpdmF0ZSwgbGlzdCk7CiAJCQlmaWxlID0gZmlsZV9wcml2LT5maWxlOwogCQkJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCQkJaWYgKGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLAotCQkJCQkgICBGSUxFX19SRUFEIHwgRklMRV9fV1JJVEUsIE5VTEwsIDApKSB7CisJCQlpZiAoaW5vZGVfaGFzX3Blcm1fbm9hZHAoY3JlZCwgaW5vZGUsCisJCQkJCSAgIEZJTEVfX1JFQUQgfCBGSUxFX19XUklURSwgMCkpIHsKIAkJCQlkcm9wX3R0eSA9IDE7CiAJCQl9CiAJCX0KQEAgLTMyMjgsNyArMzIzMyw3IEBACiAJICogbmV3IGlub2RlIGxhYmVsIG9yIG5ldyBwb2xpY3kuCiAJICogVGhpcyBjaGVjayBpcyBub3QgcmVkdW5kYW50IC0gZG8gbm90IHJlbW92ZS4KIAkgKi8KLQlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIG9wZW5fZmlsZV90b19hdihmaWxlKSwgTlVMTCwgMCk7CisJcmV0dXJuIGlub2RlX2hhc19wZXJtX25vYWRwKGNyZWQsIGlub2RlLCBvcGVuX2ZpbGVfdG9fYXYoZmlsZSksIDApOwogfQogCiAvKiB0YXNrIHNlY3VyaXR5IG9wZXJhdGlvbnMgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCmluZGV4IDc3ZDQ0MTMuLjM1NDU5MzQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAvKiBzZWxpbnV4ZnMgcHNldWRvIGZpbGVzeXN0ZW0gZm9yIGV4cG9ydGluZyB0aGUgc2VjdXJpdHkgcG9saWN5IEFQSS4KICAgIEJhc2VkIG9uIHRoZSBwcm9jIGNvZGUgYW5kIHRoZSBmcy9uZnNkL25mc2N0bC5jIGNvZGUuICovCkBAIC03NTEsNiArNzUyLDE0IEBACiAJcmV0dXJuIGxlbmd0aDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaGV4Y29kZV90b19pbnQoaW50IGNvZGUpIHsKKwlpZiAoY29kZSA9PSAnXDAnIHx8ICFpc3hkaWdpdChjb2RlKSkKKwkJcmV0dXJuIC0xOworCWlmIChpc2RpZ2l0KGNvZGUpKQorCQlyZXR1cm4gY29kZSAtICcwJzsKKwlyZXR1cm4gdG9sb3dlcihjb2RlKSAtICdhJyArIDEwOworfQorCiBzdGF0aWMgc3NpemVfdCBzZWxfd3JpdGVfY3JlYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQogewogCWNoYXIgKnNjb24gPSBOVUxMLCAqdGNvbiA9IE5VTEw7CkBAIC03ODUsOCArNzk0LDM0IEBACiAJbmFyZ3MgPSBzc2NhbmYoYnVmLCAiJXMgJXMgJWh1ICVzIiwgc2NvbiwgdGNvbiwgJnRjbGFzcywgbmFtZWJ1Zik7CiAJaWYgKG5hcmdzIDwgMyB8fCBuYXJncyA+IDQpCiAJCWdvdG8gb3V0OwotCWlmIChuYXJncyA9PSA0KQorCWlmIChuYXJncyA9PSA0KSB7CisJCS8qCisJCSAqIElmIGFuZCB3aGVuIHRoZSBuYW1lIG9mIG5ldyBvYmplY3QgdG8gYmUgcXVlcmllZCBjb250YWlucworCQkgKiBlaXRoZXIgd2hpdGVzcGFjZSBvciBtdWx0aWJ5dGUgY2hhcmFjdGVycywgdGhleSBzaGFsbCBiZQorCQkgKiBlbmNvZGVkIGJhc2VkIG9uIHRoZSBwZXJjZW50YWdlLWVuY29kaW5nIHJ1bGUuCisJCSAqIElmIG5vdCBlbmNvZGVkLCB0aGUgc3NjYW5mIGxvZ2ljIHBpY2tzIHVwIG9ubHkgbGVmdC1oYWxmCisJCSAqIG9mIHRoZSBzdXBwbGllZCBuYW1lOyBzcGxpdHRlZCBieSBhIHdoaXRlc3BhY2UgdW5leHBlY3RlZGx5LgorCQkgKi8KKwkJY2hhciAgICpyLCAqdzsKKwkJaW50ICAgICBjMSwgYzI7CisKKwkJciA9IHcgPSBuYW1lYnVmOworCQlkbyB7CisJCQljMSA9ICpyKys7CisJCQlpZiAoYzEgPT0gJysnKQorCQkJCWMxID0gJyAnOworCQkJZWxzZSBpZiAoYzEgPT0gJyUnKSB7CisJCQkJaWYgKChjMSA9IGhleGNvZGVfdG9faW50KCpyKyspKSA8IDApCisJCQkJCWdvdG8gb3V0OworCQkJCWlmICgoYzIgPSBoZXhjb2RlX3RvX2ludCgqcisrKSkgPCAwKQorCQkJCQlnb3RvIG91dDsKKwkJCQljMSA9IChjMSA8PCA0KSB8IGMyOworCQkJfQorCQkJKncrKyA9IGMxOworCQl9IHdoaWxlIChjMSAhPSAnXDAnKTsKKwogCQlvYmpuYW1lID0gbmFtZWJ1ZjsKKwl9CiAKIAlsZW5ndGggPSBzZWN1cml0eV9jb250ZXh0X3RvX3NpZChzY29uLCBzdHJsZW4oc2NvbikgKyAxLCAmc3NpZCk7CiAJaWYgKGxlbmd0aCkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwppbmRleCAxMDJlOWVjLi5kMjQ2YWNhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCkBAIC0zMjIyLDYgKzMyMjIsOSBAQAogCV9fbGUzMiBidWZbMV07CiAJaW50IHJjOwogCisJaWYgKHAtPnBvbGljeXZlcnMgPCBQT0xJQ1lEQl9WRVJTSU9OX0ZJTEVOQU1FX1RSQU5TKQorCQlyZXR1cm4gMDsKKwogCW5lbCA9IDA7CiAJcmMgPSBoYXNodGFiX21hcChwLT5maWxlbmFtZV90cmFucywgaGFzaHRhYl9jbnQsICZuZWwpOwogCWlmIChyYykKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9tb3VudC5jIGIvc2VjdXJpdHkvdG9tb3lvL21vdW50LmMKaW5kZXggMTYyYTg2NC4uOWZjMmUxNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL21vdW50LmMKKysrIGIvc2VjdXJpdHkvdG9tb3lvL21vdW50LmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCX0KIAlpZiAobmVlZF9kZXYpIHsKIAkJLyogR2V0IG1vdW50IHBvaW50IG9yIGRldmljZSBmaWxlLiAqLwotCQlpZiAoa2Vybl9wYXRoKGRldl9uYW1lLCBMT09LVVBfRk9MTE9XLCAmcGF0aCkpIHsKKwkJaWYgKCFkZXZfbmFtZSB8fCBrZXJuX3BhdGgoZGV2X25hbWUsIExPT0tVUF9GT0xMT1csICZwYXRoKSkgewogCQkJZXJyb3IgPSAtRU5PRU5UOwogCQkJZ290byBvdXQ7CiAJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWlzYy5jIGIvc291bmQvY29yZS9taXNjLmMKaW5kZXggMmM0MTgyNS4uZWI5ZmUyZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9taXNjLmMKKysrIGIvc291bmQvY29yZS9taXNjLmMKQEAgLTU4LDI2ICs1OCw2IEBACiAJZWxzZQogCQlyZXR1cm4gcGF0aDsKIH0KLQotLyogcHJpbnQgZmlsZSBhbmQgbGluZSB3aXRoIGEgY2VydGFpbiBwcmludGsgcHJlZml4ICovCi1zdGF0aWMgaW50IHByaW50X3NuZF9wZngodW5zaWduZWQgaW50IGxldmVsLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGluZSwKLQkJCSBjb25zdCBjaGFyICpmb3JtYXQpCi17Ci0JY29uc3QgY2hhciAqZmlsZSA9IHNhbml0eV9maWxlX25hbWUocGF0aCk7Ci0JY2hhciB0bXBbXSA9ICI8MD4iOwotCWNvbnN0IGNoYXIgKnBmeCA9IGxldmVsID8gS0VSTl9ERUJVRyA6IEtFUk5fREVGQVVMVDsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChmb3JtYXRbMF0gPT0gJzwnICYmIGZvcm1hdFsyXSA9PSAnPicpIHsKLQkJdG1wWzFdID0gZm9ybWF0WzFdOwotCQlwZnggPSB0bXA7Ci0JCXJldCA9IDE7Ci0JfQotCXByaW50aygiJXNBTFNBICVzOiVkOiAiLCBwZngsIGZpbGUsIGxpbmUpOwotCXJldHVybiByZXQ7Ci19Ci0jZWxzZQotI2RlZmluZSBwcmludF9zbmRfcGZ4KGxldmVsLCBwYXRoLCBsaW5lLCBmb3JtYXQpCTAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU05EX0RFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEspCkBAIC04NSwxNSArNjUsMjkgQEAKIAkJICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7Ci0JCisjaWZkZWYgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USworCXN0cnVjdCB2YV9mb3JtYXQgdmFmOworCWNoYXIgdmVyYm9zZV9mbXRbXSA9IEtFUk5fREVGQVVMVCAiQUxTQSAlczolZCAlcFYiOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCQogCWlmIChkZWJ1ZyA8IGxldmVsKQogCQlyZXR1cm47CiAjZW5kaWYKKwogCXZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0JaWYgKHByaW50X3NuZF9wZngobGV2ZWwsIHBhdGgsIGxpbmUsIGZvcm1hdCkpCi0JCWZvcm1hdCArPSAzOyAvKiBza2lwIHRoZSBwcmludGsgbGV2ZWwtcHJlZml4ICovCisjaWZkZWYgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USworCXZhZi5mbXQgPSBmb3JtYXQ7CisJdmFmLnZhID0gJmFyZ3M7CisJaWYgKGZvcm1hdFswXSA9PSAnPCcgJiYgZm9ybWF0WzJdID09ICc+JykgeworCQltZW1jcHkodmVyYm9zZV9mbXQsIGZvcm1hdCwgMyk7CisJCXZhZi5mbXQgPSBmb3JtYXQgKyAzOworCX0gZWxzZSBpZiAobGV2ZWwpCisJCW1lbWNweSh2ZXJib3NlX2ZtdCwgS0VSTl9ERUJVRywgMyk7CisJcHJpbnRrKHZlcmJvc2VfZm10LCBzYW5pdHlfZmlsZV9uYW1lKHBhdGgpLCBsaW5lLCAmdmFmKTsKKyNlbHNlCiAJdnByaW50ayhmb3JtYXQsIGFyZ3MpOworI2VuZGlmCiAJdmFfZW5kKGFyZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19zbmRfcHJpbnRrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2ZpcmV3aXJlL2lzaWdodC5jIGIvc291bmQvZmlyZXdpcmUvaXNpZ2h0LmMKaW5kZXggODZlZTE2Yy4uNDQwMDMwOCAxMDA2NDQKLS0tIGEvc291bmQvZmlyZXdpcmUvaXNpZ2h0LmMKKysrIGIvc291bmQvZmlyZXdpcmUvaXNpZ2h0LmMKQEAgLTIwOSw2ICsyMDksNyBAQAogCQlpc2lnaHQtPnBhY2tldF9pbmRleCA9IC0xOwogCQlyZXR1cm47CiAJfQorCWZ3X2lzb19jb250ZXh0X3F1ZXVlX2ZsdXNoKGlzaWdodC0+Y29udGV4dCk7CiAKIAlpZiAoKytpbmRleCA+PSBRVUVVRV9MRU5HVEgpCiAJCWluZGV4ID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuYwppbmRleCBmYjMxMWQ4Li41YzZlYTExIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWRzcGNkLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9ocGlkc3BjZC5jCkBAIC02MCw3ICs2MCw3IEBACiAJICAgIEhQSV9WRVJfTUlOT1IoSFBJX1ZFUikgKiAxMDAgKyBIUElfVkVSX1JFTEVBU0UoSFBJX1ZFUikpKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAibGludXgvcGNpLmgiCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc2hvcnQgaHBpX2RzcF9jb2RlX29wZW4odTMyIGFkYXB0ZXIsIHN0cnVjdCBkc3BfY29kZSAqcHNfZHNwX2NvZGUsCiAJdTMyICpwb3NfZXJyb3JfY29kZSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKaW5kZXggNWU2MTlhOC4uMTVmMDE2MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKQEAgLTE0NDAsNiArMTQ0MCwxNCBAQAogCSAuY2EwMTAyX2NoaXAgPSAxLAogCSAuc3BrNzEgPSAxLAogCSAuZW11X21vZGVsID0gRU1VX01PREVMX0VNVTA0MDR9LCAvKiBFTVUgMDQwNCAqLworCS8qIEVNVTA0MDQgUENJZSAqLworCXsudmVuZG9yID0gMHgxMTAyLCAuZGV2aWNlID0gMHgwMDA4LCAuc3Vic3lzdGVtID0gMHg0MDA1MTEwMiwKKwkgLmRyaXZlciA9ICJBdWRpZ3kyIiwgLm5hbWUgPSAiRS1tdSAwNDA0IFBDSWUgW01BRU04OTg0XSIsCisJIC5pZCA9ICJFTVUwNDA0IiwKKwkgLmVtdTEwazJfY2hpcCA9IDEsCisJIC5jYTAxMDhfY2hpcCA9IDEsCisJIC5zcGs3MSA9IDEsCisJIC5lbXVfbW9kZWwgPSBFTVVfTU9ERUxfRU1VMDQwNH0sIC8qIEVNVSAwNDA0IFBDSWUgdmVyXzAzICovCiAJLyogTm90ZSB0aGF0IGFsbCBFLW11IGNhcmRzIHJlcXVpcmUga2VybmVsIDIuNiBvciBuZXdlci4gKi8KIAl7LnZlbmRvciA9IDB4MTEwMiwgLmRldmljZSA9IDB4MDAwOCwKIAkgLmRyaXZlciA9ICJBdWRpZ3kyIiwgLm5hbWUgPSAiU0IgQXVkaWd5IDIgVmFsdWUgW1Vua25vd25dIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9mbTgwMS5jIGIvc291bmQvcGNpL2ZtODAxLmMKaW5kZXggZWFjZDQ5MC4uYTdlYzcwMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ZtODAxLmMKKysrIGIvc291bmQvcGNpL2ZtODAxLmMKQEAgLTEyMzQsOSArMTIzNCwxMiBAQAogCXNwcmludGYoY2hpcC0+dGVhLmJ1c19pbmZvLCAiUENJOiVzIiwgcGNpX25hbWUocGNpKSk7CiAJaWYgKCh0ZWE1NzV4X3R1bmVyICYgVFVORVJfVFlQRV9NQVNLKSA+IDAgJiYKIAkgICAgKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spIDwgNCkgewotCQlpZiAoc25kX3RlYTU3NXhfaW5pdCgmY2hpcC0+dGVhKSkKKwkJaWYgKHNuZF90ZWE1NzV4X2luaXQoJmNoaXAtPnRlYSkpIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlRFQTU3NXggcmFkaW8gbm90IGZvdW5kXG4iKTsKLQl9IGVsc2UgaWYgKCh0ZWE1NzV4X3R1bmVyICYgVFVORVJfVFlQRV9NQVNLKSA9PSAwKQorCQkJc25kX2ZtODAxX2ZyZWUoY2hpcCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0gZWxzZSBpZiAoKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spID09IDApIHsKIAkJLyogYXV0b2RldGVjdCB0dW5lciBjb25uZWN0aW9uICovCiAJCWZvciAodGVhNTc1eF90dW5lciA9IDE7IHRlYTU3NXhfdHVuZXIgPD0gMzsgdGVhNTc1eF90dW5lcisrKSB7CiAJCQljaGlwLT50ZWE1NzV4X3R1bmVyID0gdGVhNTc1eF90dW5lcjsKQEAgLTEyNDYsNiArMTI0OSwxMiBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCWlmICh0ZWE1NzV4X3R1bmVyID09IDQpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIlRFQTU3NXggcmFkaW8gbm90IGZvdW5kXG4iKTsKKwkJCXNuZF9mbTgwMV9mcmVlKGNoaXApOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CiAJc3RybGNweShjaGlwLT50ZWEuY2FyZCwgc25kX2ZtODAxX3RlYTU3NXhfZ3Bpb3NbKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spIC0gMV0ubmFtZSwgc2l6ZW9mKGNoaXAtPnRlYS5jYXJkKSk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oCmluZGV4IGYxZGUxYmEuLjU1ZjA2NDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmgKQEAgLTUwLDcgKzUwLDEyIEBACiBpbnQgc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBuaWQpOwogdm9pZCBzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyk7CiAjZWxzZQotI2RlZmluZSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZSguLi4pCQkwCi0jZGVmaW5lIHNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKC4uLikKK3N0YXRpYyBpbmxpbmUgaW50IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBpbnQgbmlkKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworfQogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCmluZGV4IDY5NmFjMjUuLmQ2OTRlOWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwpAQCAtNTA2LDkgKzUwNiwxMSBAQAogCQkJCWhkYV9uaWRfdCBocCkKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBmcm9udCwgMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsCisJaWYgKHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIGZyb250KSAmIEFDX1BJTkNBUF9FQVBEKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBmcm9udCwgMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsCiAJCQkgICAgIXNwZWMtPmludl9lYXBkID8gMHgwMCA6IDB4MDIpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGhwLCAwLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwKKwlpZiAoc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgaHApICYgQUNfUElOQ0FQX0VBUEQpCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGhwLCAwLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwKIAkJCSAgICAhc3BlYy0+aW52X2VhcGQgPyAweDAwIDogMHgwMik7CiB9CiAKQEAgLTUyNCw2ICs1MjYsMTAgQEAKIAljYXNlIDB4MTFkNDE4NGE6CiAJY2FzZSAweDExZDQxOTRhOgogCWNhc2UgMHgxMWQ0MTk0YjoKKwljYXNlIDB4MTFkNDE5ODg6CisJY2FzZSAweDExZDQxOThiOgorCWNhc2UgMHgxMWQ0OTg5YToKKwljYXNlIDB4MTFkNDk4OWI6CiAJCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDEyLCAweDExKTsKIAkJYnJlYWs7CiAJY2FzZSAweDExZDQxOTgxOgpAQCAtNTMzLDEyICs1MzksNiBAQAogCWNhc2UgMHgxMWQ0MTk4NjoKIAkJYWQxOTh4X3Bvd2VyX2VhcGRfd3JpdGUoY29kZWMsIDB4MWIsIDB4MWEpOwogCQlicmVhazsKLQljYXNlIDB4MTFkNDE5ODg6Ci0JY2FzZSAweDExZDQxOThiOgotCWNhc2UgMHgxMWQ0OTg5YToKLQljYXNlIDB4MTFkNDk4OWI6Ci0JCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDI5LCAweDIyKTsKLQkJYnJlYWs7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKaW5kZXggM2U2YjlhOC4uNjk0YjlkYWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTMxMDIsNiArMzEwMiw3IEBACiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzhhZiwgIkxlbm92byBHNTYwIiwgQ1hUNTA2Nl9BU1VTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzOTM4LCAiTGVub3ZvIEc1NjUiLCBDWFQ1MDY2X0FVVE8pLAogCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byIsIENYVDUwNjZfSURFQVBBRCksIC8qIEZhbGxiYWNrIGZvciBMZW5vdm9zIHdpdGhvdXQgZG9jayBtaWMgKi8KKwlTTkRfUENJX1FVSVJLKDB4MWIwYSwgMHgyMDkyLCAiQ3liZXJwb3dlclBDIEdhbWVyIFhwbG9yZXIgTjU3MDAxIiwgQ1hUNTA2Nl9BVVRPKSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCA3YTRlMTAwLi42MWE3NzRiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMTE0MSw2ICsxMTQxLDEzIEBACiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IG9uOwogCisJLyogQ29udHJvbCBIUCBwaW5zL2FtcHMgZGVwZW5kaW5nIG9uIG1hc3Rlcl9tdXRlIHN0YXRlOworCSAqIGluIGdlbmVyYWwsIEhQIHBpbnMvYW1wcyBjb250cm9sIHNob3VsZCBiZSBlbmFibGVkIGluIGFsbCBjYXNlcywKKwkgKiBidXQgY3VycmVudGx5IHNldCBvbmx5IGZvciBtYXN0ZXJfbXV0ZSwganVzdCB0byBiZSBzYWZlCisJICovCisJZG9fYXV0b211dGUoY29kZWMsIEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5ocF9waW5zKSwKKwkJICAgIHNwZWMtPmF1dG9jZmcuaHBfcGlucywgc3BlYy0+bWFzdGVyX211dGUsIHRydWUpOworCiAJaWYgKCFzcGVjLT5hdXRvbXV0ZSkKIAkJb24gPSAwOwogCWVsc2UKQEAgLTYyMDEsMTEgKzYyMDgsNiBAQAogLyogdXBkYXRlIEhQLCBsaW5lIGFuZCBtb25vIG91dCBwaW5zIGFjY29yZGluZyB0byB0aGUgbWFzdGVyIHN3aXRjaCAqLwogc3RhdGljIHZvaWQgYWxjMjYwX2hwX21hc3Rlcl91cGRhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0KLQkvKiBjaGFuZ2UgSFAgcGlucyAqLwotCWRvX2F1dG9tdXRlKGNvZGVjLCBBUlJBWV9TSVpFKHNwZWMtPmF1dG9jZmcuaHBfcGlucyksCi0JCSAgICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnMsIHNwZWMtPm1hc3Rlcl9tdXRlLCB0cnVlKTsKIAl1cGRhdGVfc3BlYWtlcnMoY29kZWMpOwogfQogCkBAIC0xMTkyNCw3ICsxMTkyNiw3IEBACiAgKiAgMHgxYiA9IHBvcnQgcmVwbGljYXRvciBoZWFkcGhvbmUgb3V0CiAgKi8KIAotI2RlZmluZSBBTENfSFBfRVZFTlQJMHgzNworI2RlZmluZSBBTENfSFBfRVZFTlQJQUxDODgwX0hQX0VWRU5UCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX2Z1aml0c3VfdW5zb2xfdmVyYnNbXSA9IHsKIAl7MHgxNCwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQ19IUF9FVkVOVH0sCkBAIC0xMzMxNCw5ICsxMzMxNiw4IEBACiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKIAlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7Ci0Jc3BlYy0+YXV0b211dGVfbWl4ZXJfbmlkWzBdID0gMHgwZjsKIAlzcGVjLT5hdXRvbXV0ZSA9IDE7Ci0Jc3BlYy0+YXV0b211dGVfbW9kZSA9IEFMQ19BVVRPTVVURV9NSVhFUjsKKwlzcGVjLT5hdXRvbXV0ZV9tb2RlID0gQUxDX0FVVE9NVVRFX0FNUDsKIAlzcGVjLT5leHRfbWljLnBpbiA9IDB4MTg7CiAJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKIAlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTI7CkBAIC0xMzg2MCw2ICsxMzg2MSw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1YiwgIkFjZXIgQXNwaXJlIE9uZSIsCiAJCQkJCQlBTEMyNjhfQUNFUl9BU1BJUkVfT05FKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMjUzLCAiRGVsbCBPRU0iLCBBTEMyNjhfREVMTCksCisJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDJiMCwgIkRlbGwgSW5zcGlyb24gOTEwIiwgQUxDMjY4X0FVVE8pLAogCVNORF9QQ0lfUVVJUktfTUFTSygweDEwMjgsIDB4ZmZmMCwgMHgwMmIwLAogCQkJIkRlbGwgSW5zcGlyb24gTWluaTkvVm9zdHJvIEE5MCIsIEFMQzI2OF9ERUxMKSwKIAkvKiBhbG1vc3QgY29tcGF0aWJsZSB3aXRoIHRvc2hpYmEgYnV0IHdpdGggb3B0aW9uYWwgZGlnaXRhbCBvdXRzOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKaW5kZXggNjA1Yzk5ZS4uYzk1MjU4MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC04MzIsMTAgKzgzMiwxMyBAQAogCWtuZXctPnN1YmRldmljZSA9IEhEQV9TVUJERVZfTklEX0ZMQUcgfCBuaWQ7CiAJa25ldy0+cHJpdmF0ZV92YWx1ZSA9IG5pZDsKIAotCWtuZXcgPSB2aWFfY2xvbmVfY29udHJvbChzcGVjLCAmdmlhX2hwX21peGVyWzFdKTsKLQlpZiAoa25ldyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlrbmV3LT5zdWJkZXZpY2UgPSBzaWRlX211dGVfY2hhbm5lbChzcGVjKTsKKwluaWQgPSBzaWRlX211dGVfY2hhbm5lbChzcGVjKTsKKwlpZiAobmlkKSB7CisJCWtuZXcgPSB2aWFfY2xvbmVfY29udHJvbChzcGVjLCAmdmlhX2hwX21peGVyWzFdKTsKKwkJaWYgKGtuZXcgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlrbmV3LT5zdWJkZXZpY2UgPSBuaWQ7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbG9sYS9sb2xhLmMgYi9zb3VuZC9wY2kvbG9sYS9sb2xhLmMKaW5kZXggMzRiMjQyOC4uMjY5MmU1YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2xvbGEvbG9sYS5jCisrKyBiL3NvdW5kL3BjaS9sb2xhL2xvbGEuYwpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJbG9sYV9zZXR1cF9hbGxfYW5hbG9nX2dhaW5zKGNoaXAsIFBMQVksIGZhbHNlKTsgLyogb3V0cHV0LCB1cGRhdGUgKi8KIH0KIAotc3RhdGljIGludCBsb2xhX3BhcnNlX3RyZWUoc3RydWN0IGxvbGEgKmNoaXApCitzdGF0aWMgaW50IF9fZGV2aW5pdCBsb2xhX3BhcnNlX3RyZWUoc3RydWN0IGxvbGEgKmNoaXApCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKIAlpbnQgbmlkLCBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwppbmRleCA5NDk2OTFhLi4zZjA4YWZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKQEAgLTUyMSw2ICs1MjEsNyBAQAogI2RlZmluZSBIRFNQTV9ETUFfQVJFQV9LSUxPQllURVMgKEhEU1BNX0RNQV9BUkVBX0JZVEVTLzEwMjQpCiAKIC8qIHJldmlzaW9ucyA+PSAyMzAgaW5kaWNhdGUgQUVTMzIgY2FyZCAqLworI2RlZmluZSBIRFNQTV9NQURJX09MRF9SRVYJMjA3CiAjZGVmaW5lIEhEU1BNX01BRElfUkVWCQkyMTAKICNkZWZpbmUgSERTUE1fUkFZREFUX1JFVgkyMTEKICNkZWZpbmUgSERTUE1fQUlPX1JFVgkJMjEyCkBAIC0xMTQzLDcgKzExNDQsNyBAQAogCiAJCS8qIGlmIHdvcmRjbG9jayBoYXMgc3luY2VkIGZyZXEgYW5kIHdvcmRjbG9jayBpcyB2YWxpZCAqLwogCQlpZiAoKHN0YXR1czIgJiBIRFNQTV93Y0xvY2spICE9IDAgJiYKLQkJCQkoc3RhdHVzICYgSERTUE1fU2VsU3luY1JlZjApID09IDApIHsKKwkJCQkoc3RhdHVzMiAmIEhEU1BNX1NlbFN5bmNSZWYwKSA9PSAwKSB7CiAKIAkJCXJhdGVfYml0cyA9IHN0YXR1czIgJiBIRFNQTV93Y0ZyZXFNYXNrOwogCkBAIC0xNjM5LDEyICsxNjQwLDE0IEBACiAJCX0KIAl9CiAJaG1pZGktPnBlbmRpbmcgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhtaWRpLT5sb2NrLCBmbGFncyk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG1pZGktPmhkc3BtLT5sb2NrLCBmbGFncyk7CiAJaG1pZGktPmhkc3BtLT5jb250cm9sX3JlZ2lzdGVyIHw9IGhtaWRpLT5pZTsKIAloZHNwbV93cml0ZShobWlkaS0+aGRzcG0sIEhEU1BNX2NvbnRyb2xSZWdpc3RlciwKIAkJICAgIGhtaWRpLT5oZHNwbS0+Y29udHJvbF9yZWdpc3Rlcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG1pZGktPmhkc3BtLT5sb2NrLCBmbGFncyk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaG1pZGktPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gc25kX2hkc3BtX21pZGlfb3V0cHV0X3dyaXRlIChobWlkaSk7CiB9CiAKQEAgLTYzNzcsNiArNjM4MCw3IEBACiAKIAlzd2l0Y2ggKGhkc3BtLT5maXJtd2FyZV9yZXYpIHsKIAljYXNlIEhEU1BNX01BRElfUkVWOgorCWNhc2UgSERTUE1fTUFESV9PTERfUkVWOgogCQloZHNwbS0+aW9fdHlwZSA9IE1BREk7CiAJCWhkc3BtLT5jYXJkX25hbWUgPSAiUk1FIE1BREkiOwogCQloZHNwbS0+bWlkaVBvcnRzID0gMzsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCmluZGV4IDdmYmZhMDUuLmVkYTk1NWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKKysrIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwpAQCAtODQ4LDkgKzg0OCwxMCBAQAogCWlmIChJU19FUlIoc3NjKSkKIAkJcHJfd2FybigiVW5hYmxlIHRvIHBhcmVudCBBU29DIFNTQyBEQUkgb24gU1NDOiAlbGRcbiIsCiAJCQlQVFJfRVJSKHNzYykpOwotCWVsc2UKKwllbHNlIHsKIAkJc3NjX3BkZXYtPmRldi5wYXJlbnQgPSAmKHNzYy0+cGRldi0+ZGV2KTsKLQlzc2NfZnJlZShzc2MpOworCQlzc2NfZnJlZShzc2MpOworCX0KIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc3NjX3BkZXYpOwogCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTgzNi5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTgzNi5jCmluZGV4IGVhNDk1MWMuLmY3OWQxNjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE4MzYuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxODM2LmMKQEAgLTc1LDcgKzc1LDcgQEAKIAkJLmNwdV9kYWlfbmFtZSA9ICJiZmluLXRkbS4wIiwKIAkJLmNvZGVjX2RhaV9uYW1lID0gImFkMTgzNi1oaWZpIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAiYmZpbi10ZG0tcGNtLWF1ZGlvIiwKLQkJLmNvZGVjX25hbWUgPSAiYWQxODM2LjAiLAorCQkuY29kZWNfbmFtZSA9ICJzcGkwLjQiLAogCQkub3BzID0gJmJmNXh4X2FkMTgzNl9vcHMsCiAJfSwKIAl7CkBAIC04NCw3ICs4NCw3IEBACiAJCS5jcHVfZGFpX25hbWUgPSAiYmZpbi10ZG0uMSIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJhZDE4MzYtaGlmaSIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gImJmaW4tdGRtLXBjbS1hdWRpbyIsCi0JCS5jb2RlY19uYW1lID0gImFkMTgzNi4wIiwKKwkJLmNvZGVjX25hbWUgPSAic3BpMC40IiwKIAkJLm9wcyA9ICZiZjV4eF9hZDE4MzZfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKaW5kZXggYWI2M2Q1Mi4uNzU0YzQ5NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCkBAIC0xNDUsMjIgKzE0NSwyMiBAQAogCS8qIGJpdCBzaXplICovCiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQl3b3JkX2xlbiA9IDM7CisJCXdvcmRfbGVuID0gQUQxODM2X1dPUkRfTEVOXzE2OwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKLQkJd29yZF9sZW4gPSAxOworCQl3b3JkX2xlbiA9IEFEMTgzNl9XT1JEX0xFTl8yMDsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgotCQl3b3JkX2xlbiA9IDA7CisJCXdvcmRfbGVuID0gQUQxODM2X1dPUkRfTEVOXzI0OwogCQlicmVhazsKIAl9CiAKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwxLAotCQlBRDE4MzZfREFDX1dPUkRfTEVOX01BU0ssIHdvcmRfbGVuKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwxLCBBRDE4MzZfREFDX1dPUkRfTEVOX01BU0ssCisJCXdvcmRfbGVuIDw8IEFEMTgzNl9EQUNfV09SRF9MRU5fT0ZGU0VUKTsKIAotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsCi0JCUFEMTgzNl9BRENfV09SRF9MRU5fTUFTSywgd29yZF9sZW4pOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsIEFEMTgzNl9BRENfV09SRF9MRU5fTUFTSywKKwkJd29yZF9sZW4gPDwgQUQxODM2X0FEQ19XT1JEX09GRlNFVCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmggYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oCmluZGV4IDg0NTU5NjcuLjlkNmEzZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaApAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBBRDE4MzZfREFDX1NFUkZNVF9QQ0syNTYgICAgICAgKDB4NCA8PCA1KQogI2RlZmluZSBBRDE4MzZfREFDX1NFUkZNVF9QQ0sxMjggICAgICAgKDB4NSA8PCA1KQogI2RlZmluZSBBRDE4MzZfREFDX1dPUkRfTEVOX01BU0sgICAgICAgMHgxOAorI2RlZmluZSBBRDE4MzZfREFDX1dPUkRfTEVOX09GRlNFVCAgICAgMwogCiAjZGVmaW5lIEFEMTgzNl9EQUNfQ1RSTDIgICAgICAgICAgICAgICAxCiAjZGVmaW5lIEFEMTgzNl9EQUNMMV9NVVRFICAgICAgICAgICAgICAwCkBAIC01MSw2ICs1Miw3IEBACiAjZGVmaW5lIEFEMTgzNl9BRENMMl9NVVRFIAkJMgogI2RlZmluZSBBRDE4MzZfQURDUjJfTVVURSAJCTMKICNkZWZpbmUgQUQxODM2X0FEQ19XT1JEX0xFTl9NQVNLICAgICAgIDB4MzAKKyNkZWZpbmUgQUQxODM2X0FEQ19XT1JEX09GRlNFVCAgICAgICAgIDUKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfTUFTSwkgICAgICAgKDcgPDwgNikKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMjU2ICAgICAgICgweDQgPDwgNikKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMTI4ICAgICAgICgweDUgPDwgNikKQEAgLTYwLDQgKzYyLDggQEAKIAogI2RlZmluZSBBRDE4MzZfTlVNX1JFR1MgICAgICAgICAgICAgICAgMTYKIAorI2RlZmluZSBBRDE4MzZfV09SRF9MRU5fMjQgMHgwCisjZGVmaW5lIEFEMTgzNl9XT1JEX0xFTl8yMCAweDEKKyNkZWZpbmUgQUQxODM2X1dPUkRfTEVOXzE2IDB4MgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204ODA0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODgwNC5jCmluZGV4IDY3ODU2ODguLjlhNWU2N2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204ODA0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg4MDQuYwpAQCAtNjgwLDIwICs2ODAsMjUgQEAKICNkZWZpbmUgV004ODA0X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgXAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKKyNkZWZpbmUgV004ODA0X1JBVEVTIChTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAorCQkgICAgICBTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzY0MDAwIHwgXAorCQkgICAgICBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwIHwgXAorCQkgICAgICBTTkRSVl9QQ01fUkFURV8xNzY0MDAgfCBTTkRSVl9QQ01fUkFURV8xOTIwMDApCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHdtODgwNF9kYWkgPSB7CiAJLm5hbWUgPSAid204ODA0LXNwZGlmIiwKIAkucGxheWJhY2sgPSB7CiAJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCiAJCS5jaGFubmVsc19taW4gPSAyLAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCisJCS5yYXRlcyA9IFdNODgwNF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg4MDRfRk9STUFUUywKIAl9LAogCS5jYXB0dXJlID0gewogCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCiAJCS5jaGFubmVsc19taW4gPSAyLAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCisJCS5yYXRlcyA9IFdNODgwNF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg4MDRfRk9STUFUUywKIAl9LAogCS5vcHMgPSAmd204ODA0X2RhaV9vcHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MTUuYwppbmRleCBhMGIxYTcyLi5lMmFiNGZhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTE1LmMKQEAgLTE4MzksNyArMTgzOSw3IEBACiAJaW50IG9sZDsKIAogCS8qIERpc2FibGUgU1lTQ0xLIHdoaWxlIHdlIHJlY29uZmlndXJlICovCi0Jb2xkID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfQUlGX0NMT0NLSU5HXzEpOworCW9sZCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0FJRl9DTE9DS0lOR18xKSAmIFdNODkxNV9TWVNDTEtfRU5BOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMSwKIAkJCSAgICBXTTg5MTVfU1lTQ0xLX0VOQSwgMCk7CiAKQEAgLTIwMzgsNiArMjAzOCw3IEBACiAJCWJyZWFrOwogCWNhc2UgV004OTE1X0ZMTF9NQ0xLMjoKIAkJcmVnID0gMTsKKwkJYnJlYWs7CiAJY2FzZSBXTTg5MTVfRkxMX0RBQ0xSQ0xLMToKIAkJcmVnID0gMjsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYwppbmRleCBmOTBhZTQyLi41ZTA1ZWVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKQEAgLTE5OTksMTIgKzE5OTksMTIgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBJZiB0aGUgbGVmdCBQR0EgaXMgZW5hYmxlZCBoaXQgdGhhdCBWVSBiaXQuLi4gKi8KLQlpZiAocmVnX2NhY2hlW1dNODk2Ml9QV1JfTUdNVF8yXSAmIFdNODk2Ml9IUE9VVExfUEdBX0VOQSkKKwlpZiAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjJfUFdSX01HTVRfMikgJiBXTTg5NjJfSFBPVVRMX1BHQV9FTkEpCiAJCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjJfSFBPVVRMX1ZPTFVNRSwKIAkJCQkgICAgIHJlZ19jYWNoZVtXTTg5NjJfSFBPVVRMX1ZPTFVNRV0pOwogCiAJLyogLi4ub3RoZXJ3aXNlIHRoZSByaWdodC4gIFRoZSBWVSBpcyBzdGVyZW8uICovCi0JaWYgKHJlZ19jYWNoZVtXTTg5NjJfUFdSX01HTVRfMl0gJiBXTTg5NjJfSFBPVVRSX1BHQV9FTkEpCisJaWYgKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYyX1BXUl9NR01UXzIpICYgV004OTYyX0hQT1VUUl9QR0FfRU5BKQogCQlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004OTYyX0hQT1VUUl9WT0xVTUUsCiAJCQkJICAgICByZWdfY2FjaGVbV004OTYyX0hQT1VUUl9WT0xVTUVdKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwppbmRleCBlNTViMjk4Li45ZTM3MGQxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwpAQCAtMjE1LDIzICsyMTUsMjMgQEAKIFNPQ19TSU5HTEVfVExWKCJJTjFMIFZvbHVtZSIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgMCwgMzEsIDAsCiAJICAgICAgIGlucGdhX3RsdiksCiBTT0NfU0lOR0xFKCJJTjFMIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMSksCi1TT0NfU0lOR0xFKCJJTjFMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjFMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNiwgMSwgMCksCiAKIFNPQ19TSU5HTEVfVExWKCJJTjFSIFZvbHVtZSIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsIDAsIDMxLCAwLAogCSAgICAgICBpbnBnYV90bHYpLAogU09DX1NJTkdMRSgiSU4xUiBTd2l0Y2giLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLCA3LCAxLCAxKSwKLVNPQ19TSU5HTEUoIklOMVIgWkMgU3dpdGNoIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjFSIFpDIFN3aXRjaCIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsIDYsIDEsIDApLAogCiAKIFNPQ19TSU5HTEVfVExWKCJJTjJMIFZvbHVtZSIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgMCwgMzEsIDAsCiAJICAgICAgIGlucGdhX3RsdiksCiBTT0NfU0lOR0xFKCJJTjJMIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNywgMSwgMSksCi1TT0NfU0lOR0xFKCJJTjJMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjJMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNiwgMSwgMCksCiAKIFNPQ19TSU5HTEVfVExWKCJJTjJSIFZvbHVtZSIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsIDAsIDMxLCAwLAogCSAgICAgICBpbnBnYV90bHYpLAogU09DX1NJTkdMRSgiSU4yUiBTd2l0Y2giLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCA3LCAxLCAxKSwKLVNPQ19TSU5HTEUoIklOMlIgWkMgU3dpdGNoIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjJSIFpDIFN3aXRjaCIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsIDYsIDEsIDApLAogCiBTT0NfU0lOR0xFX1RMVigiTUlYSU5MIElOMkwgVm9sdW1lIiwgV004OTkzX0lOUFVUX01JWEVSMywgNywgMSwgMCwKIAkgICAgICAgaW5taXhfc3dfdGx2KSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX2RtYS5jIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKaW5kZXggMTVkYWMwZi4uNjY4MGMwYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCSAqIHNob3VsZCBhbGxvY2F0ZSBhIERNQSBidWZmZXIgb25seSBmb3IgdGhlIHN0cmVhbXMgdGhhdCBhcmUgdmFsaWQuCiAJICovCiAKLQlpZiAoZGFpLT5kcml2ZXItPnBsYXliYWNrLmNoYW5uZWxzX21pbikgeworCWlmIChwY20tPnN0cmVhbXNbMF0uc3Vic3RyZWFtKSB7CiAJCXJldCA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBjYXJkLT5kZXYsCiAJCQlmc2xfZG1hX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXgsCiAJCQkmcGNtLT5zdHJlYW1zWzBdLnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CkBAIC0zMjAsMTMgKzMyMCwxMyBAQAogCQl9CiAJfQogCi0JaWYgKGRhaS0+ZHJpdmVyLT5jYXB0dXJlLmNoYW5uZWxzX21pbikgeworCWlmIChwY20tPnN0cmVhbXNbMV0uc3Vic3RyZWFtKSB7CiAJCXJldCA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBjYXJkLT5kZXYsCiAJCQlmc2xfZG1hX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXgsCiAJCQkmcGNtLT5zdHJlYW1zWzFdLnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CiAJCWlmIChyZXQpIHsKLQkJCXNuZF9kbWFfZnJlZV9wYWdlcygmcGNtLT5zdHJlYW1zWzBdLnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CiAJCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbid0IGFsbG9jIGNhcHR1cmUgZG1hIGJ1ZmZlclxuIik7CisJCQlzbmRfZG1hX2ZyZWVfcGFnZXMoJnBjbS0+c3RyZWFtc1swXS5zdWJzdHJlYW0tPmRtYV9idWZmZXIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTQ0OSw3ICs0NDksOCBAQAogCWRtYV9wcml2YXRlLT5sZF9idWZfcGh5cyA9IGxkX2J1Zl9waHlzOwogCWRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXMgPSBzdWJzdHJlYW0tPmRtYV9idWZmZXIuYWRkcjsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGRtYV9wcml2YXRlLT5pcnEsIGZzbF9kbWFfaXNyLCAwLCAiRE1BIiwgZG1hX3ByaXZhdGUpOworCXJldCA9IHJlcXVlc3RfaXJxKGRtYV9wcml2YXRlLT5pcnEsIGZzbF9kbWFfaXNyLCAwLCAiZnNsZG1hLWF1ZGlvIiwKKwkJCSAgZG1hX3ByaXZhdGUpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJjYW4ndCByZWdpc3RlciBJU1IgZm9yIElSUSAldSAocmV0PSVpKVxuIiwKIAkJCWRtYV9wcml2YXRlLT5pcnEsIHJldCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9pMnMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCmluZGV4IGZmYTA5YjMuLjk5MmE3MzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlpZiAoIWkycykKIAkJcmV0dXJuIGZhbHNlOwogCi0JYWN0aXZlID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTTU9EKTsKKwlhY3RpdmUgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNDT04pOwogCiAJaWYgKGlzX3NlY29uZGFyeShpMnMpKQogCQlhY3RpdmUgJj0gQ09OX1RYU0RNQV9BQ1RJVkU7CkBAIC0yMjMsNyArMjIzLDcgQEAKIAlpZiAoIWkycykKIAkJcmV0dXJuIGZhbHNlOwogCi0JYWN0aXZlID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTTU9EKSAmIENPTl9SWERNQV9BQ1RJVkU7CisJYWN0aXZlID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTQ09OKSAmIENPTl9SWERNQV9BQ1RJVkU7CiAKIAlyZXR1cm4gYWN0aXZlID8gdHJ1ZSA6IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jYWNoZS5jIGIvc291bmQvc29jL3NvYy1jYWNoZS5jCmluZGV4IDA2YjdiODEuLmMwMDVjZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY2FjaGUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKQEAgLTQ2Niw2ICs0NjYsOSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jX2dldF9jYWNoZV92YWwoY29uc3Qgdm9pZCAqYmFzZSwgdW5zaWduZWQgaW50IGlkeCwKIAkJdW5zaWduZWQgaW50IHdvcmRfc2l6ZSkKIHsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtMTsKKwogCXN3aXRjaCAod29yZF9zaXplKSB7CiAJY2FzZSAxOiB7CiAJCWNvbnN0IHU4ICpjYWNoZSA9IGJhc2U7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IDk5OWJiMDguLjMyYWI3ZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC0zMjUsNiArMzI1LDcgQEAKIH0KIAogc3RhdGljIGludCBkYXBtX2lzX3NoYXJlZF9rY29udHJvbChzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKmtjb250cm9sdywKIAljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa2NvbnRyb2xfbmV3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKiprY29udHJvbCkKIHsKQEAgLTMzNCw2ICszMzUsOCBAQAogCSprY29udHJvbCA9IE5VTEw7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZkYXBtLT5jYXJkLT53aWRnZXRzLCBsaXN0KSB7CisJCWlmICh3ID09IGtjb250cm9sdyB8fCB3LT5kYXBtICE9IGtjb250cm9sdy0+ZGFwbSkKKwkJCWNvbnRpbnVlOwogCQlmb3IgKGkgPSAwOyBpIDwgdy0+bnVtX2tjb250cm9sczsgaSsrKSB7CiAJCQlpZiAoJnctPmtjb250cm9sX25ld3NbaV0gPT0ga2NvbnRyb2xfbmV3KSB7CiAJCQkJaWYgKHctPmtjb250cm9scykKQEAgLTM0Nyw5ICszNTAsOSBAQAogfQogCiAvKiBjcmVhdGUgbmV3IGRhcG0gbWl4ZXIgY29udHJvbCAqLwotc3RhdGljIGludCBkYXBtX25ld19taXhlcihzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCi0Jc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCitzdGF0aWMgaW50IGRhcG1fbmV3X21peGVyKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQogeworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9IHctPmRhcG07CiAJaW50IGksIHJldCA9IDA7CiAJc2l6ZV90IG5hbWVfbGVuLCBwcmVmaXhfbGVuOwogCXN0cnVjdCBzbmRfc29jX2RhcG1fcGF0aCAqcGF0aDsKQEAgLTQ0Nyw5ICs0NTAsOSBAQAogfQogCiAvKiBjcmVhdGUgbmV3IGRhcG0gbXV4IGNvbnRyb2wgKi8KLXN0YXRpYyBpbnQgZGFwbV9uZXdfbXV4KHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3N0YXRpYyBpbnQgZGFwbV9uZXdfbXV4KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQogeworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9IHctPmRhcG07CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwYXRoID0gTlVMTDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbDsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkYXBtLT5jYXJkLT5zbmRfY2FyZDsKQEAgLTQ2OCw3ICs0NzEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzaGFyZWQgPSBkYXBtX2lzX3NoYXJlZF9rY29udHJvbChkYXBtLCAmdy0+a2NvbnRyb2xfbmV3c1swXSwKKwlzaGFyZWQgPSBkYXBtX2lzX3NoYXJlZF9rY29udHJvbChkYXBtLCB3LCAmdy0+a2NvbnRyb2xfbmV3c1swXSwKIAkJCQkJICZrY29udHJvbCk7CiAJaWYgKGtjb250cm9sKSB7CiAJCXdsaXN0ID0ga2NvbnRyb2wtPnByaXZhdGVfZGF0YTsKQEAgLTUzMiw4ICs1MzUsNyBAQAogfQogCiAvKiBjcmVhdGUgbmV3IGRhcG0gdm9sdW1lIGNvbnRyb2wgKi8KLXN0YXRpYyBpbnQgZGFwbV9uZXdfcGdhKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3N0YXRpYyBpbnQgZGFwbV9uZXdfcGdhKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQogewogCWlmICh3LT5udW1fa2NvbnRyb2xzKQogCQlkZXZfZXJyKHctPmRhcG0tPmRldiwKQEAgLTE4MjMsMTMgKzE4MjUsMTMgQEAKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CiAJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOwotCQkJZGFwbV9uZXdfbWl4ZXIoZGFwbSwgdyk7CisJCQlkYXBtX25ld19taXhlcih3KTsKIAkJCWJyZWFrOwogCQljYXNlIHNuZF9zb2NfZGFwbV9tdXg6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3ZpcnRfbXV4OgogCQljYXNlIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXg6CiAJCQl3LT5wb3dlcl9jaGVjayA9IGRhcG1fZ2VuZXJpY19jaGVja19wb3dlcjsKLQkJCWRhcG1fbmV3X211eChkYXBtLCB3KTsKKwkJCWRhcG1fbmV3X211eCh3KTsKIAkJCWJyZWFrOwogCQljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CiAJCWNhc2Ugc25kX3NvY19kYXBtX2FpZl9vdXQ6CkBAIC0xODQyLDcgKzE4NDQsNyBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9wZ2E6CiAJCWNhc2Ugc25kX3NvY19kYXBtX291dF9kcnY6CiAJCQl3LT5wb3dlcl9jaGVjayA9IGRhcG1fZ2VuZXJpY19jaGVja19wb3dlcjsKLQkJCWRhcG1fbmV3X3BnYShkYXBtLCB3KTsKKwkJCWRhcG1fbmV3X3BnYSh3KTsKIAkJCWJyZWFrOwogCQljYXNlIHNuZF9zb2NfZGFwbV9pbnB1dDoKIAkJY2FzZSBzbmRfc29jX2RhcG1fb3V0cHV0OgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiLzZmaXJlL2Zpcm13YXJlLmMgYi9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYwppbmRleCBkNDdiZWZmLi4xZTNhZTMzIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYworKysgYi9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYwpAQCAtMjI3LDYgKzIyNyw3IEBACiAJcmV0ID0gdXNiNmZpcmVfZndfaWhleF9pbml0KGZ3LCByZWMpOwogCWlmIChyZXQgPCAwKSB7CiAJCWtmcmVlKHJlYyk7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZXJyb3IgdmFsaWRhdGluZyBlenVzYiAiCiAJCQkJImZpcm13YXJlICVzLlxuIiwgZnduYW1lKTsKIAkJcmV0dXJuIHJldDsKQEAgLTI2OSw3ICsyNzAsNiBAQAogCWRhdGEgPSAweDAwOyAvKiByZXN1bWUgZXp1c2IgY3B1ICovCiAJcmV0ID0gdXNiNmZpcmVfZndfZXp1c2Jfd3JpdGUoZGV2aWNlLCAweGEwLCAweGU2MDAsICZkYXRhLCAxKTsKIAlpZiAocmV0IDwgMCkgewotCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQUkVGSVggInVuYWJsZSB0byB1cGxvYWQgZXp1c2IgIgogCQkJCSJmaXJtd2FyZSAlczogZW5kIG1lc3NhZ2UuXG4iLCBmd25hbWUpOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiLzZmaXJlL3BjbS5jIGIvc291bmQvdXNiLzZmaXJlL3BjbS5jCmluZGV4IGIxMzdiMjUuLmQxNDRjZGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi82ZmlyZS9wY20uYworKysgYi9zb3VuZC91c2IvNmZpcmUvcGNtLmMKQEAgLTM5NSwxMiArMzk1LDEyIEBACiAJYWxzYV9ydC0+aHcgPSBwY21faHc7CiAKIAlpZiAoYWxzYV9zdWItPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCWlmIChydC0+cmF0ZSA+PSAwKQorCQlpZiAocnQtPnJhdGUgPCBBUlJBWV9TSVpFKHJhdGVzKSkKIAkJCWFsc2FfcnQtPmh3LnJhdGVzID0gcmF0ZXNfYWxzYWlkW3J0LT5yYXRlXTsKIAkJYWxzYV9ydC0+aHcuY2hhbm5lbHNfbWF4ID0gT1VUX05fQ0hBTk5FTFM7CiAJCXN1YiA9ICZydC0+cGxheWJhY2s7CiAJfSBlbHNlIGlmIChhbHNhX3N1Yi0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkgewotCQlpZiAocnQtPnJhdGUgPj0gMCkKKwkJaWYgKHJ0LT5yYXRlIDwgQVJSQVlfU0laRShyYXRlcykpCiAJCQlhbHNhX3J0LT5ody5yYXRlcyA9IHJhdGVzX2Fsc2FpZFtydC0+cmF0ZV07CiAJCWFsc2FfcnQtPmh3LmNoYW5uZWxzX21heCA9IElOX05fQ0hBTk5FTFM7CiAJCXN1YiA9ICZydC0+Y2FwdHVyZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9xdWlya3MuYyBiL3NvdW5kL3VzYi9xdWlya3MuYwppbmRleCAyZTk2OWNiLi4wOTBlMTkzIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcXVpcmtzLmMKKysrIGIvc291bmQvdXNiL3F1aXJrcy5jCkBAIC00MDMsNyArNDAzLDcgQEAKIHN0YXRpYyBpbnQgc25kX3VzYl9jbTYyMDZfYm9vdF9xdWlyayhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQogewogCWludCBlcnIsIHJlZzsKLQlpbnQgdmFsW10gPSB7MHgyMDBjLCAweDMwMDAsIDB4ZjgwMCwgMHgxNDNmLCAweDAwMDAsIDB4MzAwMH07CisJaW50IHZhbFtdID0gezB4MjAwNCwgMHgzMDAwLCAweGY4MDAsIDB4MTQzZiwgMHgwMDAwLCAweDMwMDB9OwogCiAJZm9yIChyZWcgPSAwOyByZWcgPCBBUlJBWV9TSVpFKHZhbCk7IHJlZysrKSB7CiAJCWVyciA9IHNuZF91c2JfY20xMDZfd3JpdGVfaW50X3JlZyhkZXYsIHJlZywgdmFsW3JlZ10pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggMDMyYmE2My4uOTQwMjU3YiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC02MzMsNyArNjMzLDcgQEAKIAogU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCiAKLUxJQlMgPSAtV2wsLS13aG9sZS1hcmNoaXZlICQoUEVSRkxJQlMpIC1XbCwtLW5vLXdob2xlLWFyY2hpdmUgJChFWFRMSUJTKQorTElCUyA9IC1XbCwtLXdob2xlLWFyY2hpdmUgJChQRVJGTElCUykgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSAtV2wsLS1zdGFydC1ncm91cCAkKEVYVExJQlMpIC1XbCwtLWVuZC1ncm91cAogCiBBTExfQ0ZMQUdTICs9ICQoQkFTSUNfQ0ZMQUdTKQogQUxMX0NGTEFHUyArPSAkKEFSQ0hfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKaW5kZXggYjY3MTg2Mi4uMmRhOTE2MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCkBAIC00NzQsNyArNDc0LDcgQEAKIAl1bnNpZ25lZCBpbnQgbnJfZXZlbnRzW25zeXNjYWxsc10sCiAJCSAgICAgZXhwZWN0ZWRfbnJfZXZlbnRzW25zeXNjYWxsc10sIGksIGo7CiAJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2Vsc1tuc3lzY2FsbHNdLCAqZXZzZWw7Ci0JaW50IHNhbXBsZV9zaXplID0gcGVyZl9zYW1wbGVfc2l6ZShhdHRyLnNhbXBsZV90eXBlKTsKKwlpbnQgc2FtcGxlX3NpemUgPSBfX3BlcmZfZXZzZWxfX3NhbXBsZV9zaXplKGF0dHIuc2FtcGxlX3R5cGUpOwogCiAJZm9yIChpID0gMDsgaSA8IG5zeXNjYWxsczsgKytpKSB7CiAJCWNoYXIgbmFtZVs2NF07CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvUEVSRi1WRVJTSU9OLUdFTiBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCmluZGV4IDI2ZDRkM2YuLmFkNzMzMDAgMTAwNzU1Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCkBAIC0yMywxMiArMjMsNyBAQAogdGhlbgogCVZOPSQoZWNobyAiJFZOIiB8IHNlZCAtZSAncy8tLy4vZycpOwogZWxzZQotCWV2YWwgJChncmVwICdeVkVSU0lPTltbOnNwYWNlOl1dKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKLQlldmFsICQoZ3JlcCAnXlBBVENITEVWRUxbWzpzcGFjZTpdXSo9JyAuLi8uLi9NYWtlZmlsZXx0ciAtZCAnICcpCi0JZXZhbCAkKGdyZXAgJ15TVUJMRVZFTFtbOnNwYWNlOl1dKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKLQlldmFsICQoZ3JlcCAnXkVYVFJBVkVSU0lPTltbOnNwYWNlOl1dKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKLQotCVZOPSIke1ZFUlNJT059LiR7UEFUQ0hMRVZFTH0uJHtTVUJMRVZFTH0ke0VYVFJBVkVSU0lPTn0iCisJVk49JChNQUtFRkxBR1M9IG1ha2UgLXNDIC4uLy4uIGtlcm5lbHZlcnNpb24pCiBmaQogCiBWTj0kKGV4cHIgIiRWTiIgOiB2KidcKC4qXCknKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCAwZmU5YWRmLi4zYzFiOGE2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtMzUsMjIgKzM1LDYgQEAKIAlyZXR1cm4gcGVyZl9ldmVudF9fbmFtZXNbaWRdOwogfQogCi1pbnQgcGVyZl9zYW1wbGVfc2l6ZSh1NjQgc2FtcGxlX3R5cGUpCi17Ci0JdTY0IG1hc2sgPSBzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX01BU0s7Ci0JaW50IHNpemUgPSAwOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJaWYgKG1hc2sgJiAoMVVMTCA8PCBpKSkKLQkJCXNpemUrKzsKLQl9Ci0KLQlzaXplICo9IHNpemVvZih1NjQpOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGVyZl9zYW1wbGUgc3ludGhfc2FtcGxlID0gewogCS5waWQJICAgPSAtMSwKIAkudGlkCSAgID0gLTEsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCmluZGV4IGMwODMzMjguLjFkN2Y2NjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5oCkBAIC04Miw4ICs4Miw2IEBACiAJc3RydWN0IGlwX2NhbGxjaGFpbiAqY2FsbGNoYWluOwogfTsKIAotaW50IHBlcmZfc2FtcGxlX3NpemUodTY0IHNhbXBsZV90eXBlKTsKLQogI2RlZmluZSBCVUlMRF9JRF9TSVpFIDIwCiAKIHN0cnVjdCBidWlsZF9pZF9ldmVudCB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKaW5kZXggNTBhYTM0OC4uYjAyMWVhOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYwpAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgImV2bGlzdC5oIgogI2luY2x1ZGUgImV2c2VsLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCiAKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogCkBAIC0yNTcsMTkgKzI1NiwxNSBAQAogCXJldHVybiBldmxpc3QtPm1tYXAgIT0gTlVMTCA/IDAgOiAtRU5PTUVNOwogfQogCi1zdGF0aWMgaW50IF9fcGVyZl9ldmxpc3RfX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKK3N0YXRpYyBpbnQgX19wZXJmX2V2bGlzdF9fbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwKIAkJCSAgICAgICBpbnQgaWR4LCBpbnQgcHJvdCwgaW50IG1hc2ssIGludCBmZCkKIHsKIAlldmxpc3QtPm1tYXBbaWR4XS5wcmV2ID0gMDsKIAlldmxpc3QtPm1tYXBbaWR4XS5tYXNrID0gbWFzazsKIAlldmxpc3QtPm1tYXBbaWR4XS5iYXNlID0gbW1hcChOVUxMLCBldmxpc3QtPm1tYXBfbGVuLCBwcm90LAogCQkJCSAgICAgIE1BUF9TSEFSRUQsIGZkLCAwKTsKLQlpZiAoZXZsaXN0LT5tbWFwW2lkeF0uYmFzZSA9PSBNQVBfRkFJTEVEKSB7Ci0JCWlmIChldmxpc3QtPmNwdXMtPm1hcFtpZHhdID09IC0xICYmIGV2c2VsLT5hdHRyLmluaGVyaXQpCi0JCQl1aV9fd2FybmluZygiSW5oZXJpdCBpcyBub3QgYWxsb3dlZCBvbiBwZXItdGFzayAiCi0JCQkJICAgICJldmVudHMgdXNpbmcgbW1hcC5cbiIpOworCWlmIChldmxpc3QtPm1tYXBbaWR4XS5iYXNlID09IE1BUF9GQUlMRUQpCiAJCXJldHVybiAtMTsKLQl9CiAKIAlwZXJmX2V2bGlzdF9fYWRkX3BvbGxmZChldmxpc3QsIGZkKTsKIAlyZXR1cm4gMDsKQEAgLTI4OSw3ICsyODQsNyBAQAogCiAJCQkJaWYgKG91dHB1dCA9PSAtMSkgewogCQkJCQlvdXRwdXQgPSBmZDsKLQkJCQkJaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCBldnNlbCwgY3B1LAorCQkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIGNwdSwKIAkJCQkJCQkJcHJvdCwgbWFzaywgb3V0cHV0KSA8IDApCiAJCQkJCQlnb3RvIG91dF91bm1hcDsKIAkJCQl9IGVsc2UgewpAQCAtMzI5LDcgKzMyNCw3IEBACiAKIAkJCWlmIChvdXRwdXQgPT0gLTEpIHsKIAkJCQlvdXRwdXQgPSBmZDsKLQkJCQlpZiAoX19wZXJmX2V2bGlzdF9fbW1hcChldmxpc3QsIGV2c2VsLCB0aHJlYWQsCisJCQkJaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCB0aHJlYWQsCiAJCQkJCQkJcHJvdCwgbWFzaywgb3V0cHV0KSA8IDApCiAJCQkJCWdvdG8gb3V0X3VubWFwOwogCQkJfSBlbHNlIHsKQEAgLTQ2MCwzMyArNDU1LDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU2NCBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCitib29sIHBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfdHlwZShjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKIHsKLQlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOwotCXU2NCB0eXBlID0gMDsKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zLCAqZmlyc3Q7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgewotCQlpZiAoIXR5cGUpCi0JCQl0eXBlID0gcG9zLT5hdHRyLnNhbXBsZV90eXBlOwotCQllbHNlIGlmICh0eXBlICE9IHBvcy0+YXR0ci5zYW1wbGVfdHlwZSkKLQkJCWRpZSgibm9uIG1hdGNoaW5nIHNhbXBsZV90eXBlIik7CisJcG9zID0gZmlyc3QgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgeworCQlpZiAoZmlyc3QtPmF0dHIuc2FtcGxlX3R5cGUgIT0gcG9zLT5hdHRyLnNhbXBsZV90eXBlKQorCQkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXJldHVybiB0eXBlOworCXJldHVybiB0cnVlOworfQorCit1NjQgcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQoreworCXN0cnVjdCBwZXJmX2V2c2VsICpmaXJzdDsKKworCWZpcnN0ID0gbGlzdF9lbnRyeShldmxpc3QtPmVudHJpZXMubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOworCXJldHVybiBmaXJzdC0+YXR0ci5zYW1wbGVfdHlwZTsKK30KKworYm9vbCBwZXJmX2V2bGlzdF9fdmFsaWRfc2FtcGxlX2lkX2FsbChjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zLCAqZmlyc3Q7CisKKwlwb3MgPSBmaXJzdCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUocG9zLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJCWlmIChmaXJzdC0+YXR0ci5zYW1wbGVfaWRfYWxsICE9IHBvcy0+YXR0ci5zYW1wbGVfaWRfYWxsKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOwogfQogCiBib29sIHBlcmZfZXZsaXN0X19zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQogewotCWJvb2wgdmFsdWUgPSBmYWxzZSwgZmlyc3QgPSB0cnVlOwotCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CisJc3RydWN0IHBlcmZfZXZzZWwgKmZpcnN0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKLQkJaWYgKGZpcnN0KSB7Ci0JCQl2YWx1ZSA9IHBvcy0+YXR0ci5zYW1wbGVfaWRfYWxsOwotCQkJZmlyc3QgPSBmYWxzZTsKLQkJfSBlbHNlIGlmICh2YWx1ZSAhPSBwb3MtPmF0dHIuc2FtcGxlX2lkX2FsbCkKLQkJCWRpZSgibm9uIG1hdGNoaW5nIHNhbXBsZV9pZF9hbGwiKTsKLQl9Ci0KLQlyZXR1cm4gdmFsdWU7CisJZmlyc3QgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CisJcmV0dXJuIGZpcnN0LT5hdHRyLnNhbXBsZV9pZF9hbGw7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmggYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKaW5kZXggMGExZWYxZi4uYjJiODYyMyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaApAQCAtNjYsNyArNjYsOSBAQAogdm9pZCBwZXJmX2V2bGlzdF9fZGVsZXRlX21hcHMoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogaW50IHBlcmZfZXZsaXN0X19zZXRfZmlsdGVycyhzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7CiAKLXU2NCBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwotYm9vbCBwZXJmX2V2bGlzdF9fc2FtcGxlX2lkX2FsbChjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7Cit1NjQgcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKK2Jvb2wgcGVyZl9ldmxpc3RfX3NhbXBsZV9pZF9hbGwoY29uc3QgY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogCitib29sIHBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfdHlwZShjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7Citib29sIHBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfaWRfYWxsKGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKICNlbmRpZiAvKiBfX1BFUkZfRVZMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKaW5kZXggY2NhMjllZC4uMDIzOWViOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKQEAgLTE1LDYgKzE1LDIyIEBACiAKICNkZWZpbmUgRkQoZSwgeCwgeSkgKCooaW50ICopeHlhcnJheV9fZW50cnkoZS0+ZmQsIHgsIHkpKQogCitpbnQgX19wZXJmX2V2c2VsX19zYW1wbGVfc2l6ZSh1NjQgc2FtcGxlX3R5cGUpCit7CisJdTY0IG1hc2sgPSBzYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX01BU0s7CisJaW50IHNpemUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKwkJaWYgKG1hc2sgJiAoMVVMTCA8PCBpKSkKKwkJCXNpemUrKzsKKwl9CisKKwlzaXplICo9IHNpemVvZih1NjQpOworCisJcmV0dXJuIHNpemU7Cit9CisKIHZvaWQgcGVyZl9ldnNlbF9faW5pdChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCiAJCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIsIGludCBpZHgpCiB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCmluZGV4IGY3OWJiMmMuLjdlOTM2NmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5oCkBAIC0xNDksNCArMTQ5LDExIEBACiAJcmV0dXJuIF9fcGVyZl9ldnNlbF9fcmVhZChldnNlbCwgbmNwdXMsIG50aHJlYWRzLCB0cnVlKTsKIH0KIAoraW50IF9fcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUodTY0IHNhbXBsZV90eXBlKTsKKworc3RhdGljIGlubGluZSBpbnQgcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQoreworCXJldHVybiBfX3BlcmZfZXZzZWxfX3NhbXBsZV9zaXplKGV2c2VsLT5hdHRyLnNhbXBsZV90eXBlKTsKK30KKwogI2VuZGlmIC8qIF9fUEVSRl9FVlNFTF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKaW5kZXggNjk0MzZiMy4uYTlhYzA1MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYwpAQCAtNjc0LDcgKzY3NCw3IEBACiAJc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QgPSAmcGV2bGlzdC0+ZXZsaXN0OwogCXVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50OwogCWludCBzYW1wbGVfaWRfYWxsID0gMSwgY3B1OwotCXN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic2FtcGxlX2lkX2FsbCIsIE5VTEwsIE5VTEx9OworCXN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiY3B1IiwgInNhbXBsZV9pZF9hbGwiLCBOVUxMLCBOVUxMfTsKIAlpbnQgZXJyOwogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaXxpIiwga3dsaXN0LApAQCAtNjkyLDE2ICs2OTIsMTQgQEAKIAogCQlmaXJzdCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKIAkJZXJyID0gcGVyZl9ldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBmaXJzdC0+YXR0ci5zYW1wbGVfdHlwZSwKLQkJCQkJICAgICAgIHBlcmZfc2FtcGxlX3NpemUoZmlyc3QtPmF0dHIuc2FtcGxlX3R5cGUpLAorCQkJCQkgICAgICAgcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUoZmlyc3QpLAogCQkJCQkgICAgICAgc2FtcGxlX2lkX2FsbCwgJnBldmVudC0+c2FtcGxlKTsKLQkJaWYgKGVycikgewotCQkJcHJfZXJyKCJDYW4ndCBwYXJzZSBzYW1wbGUsIGVyciA9ICVkXG4iLCBlcnIpOwotCQkJZ290byBlbmQ7Ci0JCX0KLQorCQlpZiAoZXJyKQorCQkJcmV0dXJuIFB5RXJyX0Zvcm1hdChQeUV4Y19PU0Vycm9yLAorCQkJCQkgICAgInBlcmY6IGNhbid0IHBhcnNlIHNhbXBsZSwgZXJyPSVkIiwgZXJyKTsKIAkJcmV0dXJuIHB5ZXZlbnQ7CiAJfQotZW5kOgorCiAJUHlfSU5DUkVGKFB5X05vbmUpOwogCXJldHVybiBQeV9Ob25lOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggNjQ1MDBmYy4uZjVhOGZiZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC01OCw2ICs1OCwxNiBAQAogCQlnb3RvIG91dF9jbG9zZTsKIAl9CiAKKwlpZiAoIXBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfdHlwZShzZWxmLT5ldmxpc3QpKSB7CisJCXByX2Vycigibm9uIG1hdGNoaW5nIHNhbXBsZV90eXBlIik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKworCWlmICghcGVyZl9ldmxpc3RfX3ZhbGlkX3NhbXBsZV9pZF9hbGwoc2VsZi0+ZXZsaXN0KSkgeworCQlwcl9lcnIoIm5vbiBtYXRjaGluZyBzYW1wbGVfaWRfYWxsIik7CisJCWdvdG8gb3V0X2Nsb3NlOworCX0KKwogCXNlbGYtPnNpemUgPSBpbnB1dF9zdGF0LnN0X3NpemU7CiAJcmV0dXJuIDA7CiAKQEAgLTk3LDcgKzEwNyw3IEBACiB2b2lkIHBlcmZfc2Vzc2lvbl9fdXBkYXRlX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCiB7CiAJc2VsZi0+c2FtcGxlX3R5cGUgPSBwZXJmX2V2bGlzdF9fc2FtcGxlX3R5cGUoc2VsZi0+ZXZsaXN0KTsKLQlzZWxmLT5zYW1wbGVfc2l6ZSA9IHBlcmZfc2FtcGxlX3NpemUoc2VsZi0+c2FtcGxlX3R5cGUpOworCXNlbGYtPnNhbXBsZV9zaXplID0gX19wZXJmX2V2c2VsX19zYW1wbGVfc2l6ZShzZWxmLT5zYW1wbGVfdHlwZSk7CiAJc2VsZi0+c2FtcGxlX2lkX2FsbCA9IHBlcmZfZXZsaXN0X19zYW1wbGVfaWRfYWxsKHNlbGYtPmV2bGlzdCk7CiAJcGVyZl9zZXNzaW9uX19pZF9oZWFkZXJfc2l6ZShzZWxmKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC90cmFjZS1ldmVudC1wYXJzZS5jIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKaW5kZXggMWU4ODQ4NS4uMGE3ZWQ1YiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMKQEAgLTIxODcsNiArMjE4Nyw3IEBACiAJeyAiVEFTS0xFVF9TT0ZUSVJRIiwgNiB9LAogCXsgIlNDSEVEX1NPRlRJUlEiLCA3IH0sCiAJeyAiSFJUSU1FUl9TT0ZUSVJRIiwgOCB9LAorCXsgIlJDVV9TT0ZUSVJRIiwgOSB9LAogCiAJeyAiSFJUSU1FUl9OT1JFU1RBUlQiLCAwIH0sCiAJeyAiSFJUSU1FUl9SRVNUQVJUIiwgMSB9LApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMjJjZGI5Ni4uOTZlYmMwNiAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00NjcsMTIgKzQ2Nyw4IEBACiAJCWlmICgha3ZtLT5idXNlc1tpXSkKIAkJCWdvdG8gb3V0X2VycjsKIAl9CisKIAlzcGluX2xvY2tfaW5pdCgma3ZtLT5tbXVfbG9jayk7Ci0KLQlyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7Ci0JaWYgKHIpCi0JCWdvdG8gb3V0X2VycjsKLQogCWt2bS0+bW0gPSBjdXJyZW50LT5tbTsKIAlhdG9taWNfaW5jKCZrdm0tPm1tLT5tbV9jb3VudCk7CiAJa3ZtX2V2ZW50ZmRfaW5pdChrdm0pOwpAQCAtNDgwLDYgKzQ3NiwxMSBAQAogCW11dGV4X2luaXQoJmt2bS0+aXJxX2xvY2spOwogCW11dGV4X2luaXQoJmt2bS0+c2xvdHNfbG9jayk7CiAJYXRvbWljX3NldCgma3ZtLT51c2Vyc19jb3VudCwgMSk7CisKKwlyID0ga3ZtX2luaXRfbW11X25vdGlmaWVyKGt2bSk7CisJaWYgKHIpCisJCWdvdG8gb3V0X2VycjsKKwogCXJhd19zcGluX2xvY2soJmt2bV9sb2NrKTsKIAlsaXN0X2FkZCgma3ZtLT52bV9saXN0LCAmdm1fbGlzdCk7CiAJcmF3X3NwaW5fdW5sb2NrKCZrdm1fbG9jayk7CkBAIC02NTEsNyArNjUyLDkgQEAKIAkvKiBXZSBjYW4gcmVhZCB0aGUgZ3Vlc3QgbWVtb3J5IHdpdGggX194eHhfdXNlcigpIGxhdGVyIG9uLiAqLwogCWlmICh1c2VyX2FsbG9jICYmCiAJICAgICgobWVtLT51c2Vyc3BhY2VfYWRkciAmIChQQUdFX1NJWkUgLSAxKSkgfHwKLQkgICAgICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBtZW0tPnVzZXJzcGFjZV9hZGRyLCBtZW0tPm1lbW9yeV9zaXplKSkpCisJICAgICAhYWNjZXNzX29rKFZFUklGWV9XUklURSwKKwkJCSh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKW1lbS0+dXNlcnNwYWNlX2FkZHIsCisJCQltZW0tPm1lbW9yeV9zaXplKSkpCiAJCWdvdG8gb3V0OwogCWlmIChtZW0tPnNsb3QgPj0gS1ZNX01FTU9SWV9TTE9UUyArIEtWTV9QUklWQVRFX01FTV9TTE9UUykKIAkJZ290byBvdXQ7Cg==