From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750815AbVKINzv (ORCPT ); Wed, 9 Nov 2005 08:55:51 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750806AbVKINzv (ORCPT ); Wed, 9 Nov 2005 08:55:51 -0500 Received: from public.id2-vpn.continvity.gns.novell.com ([195.33.99.129]:41773 "EHLO emea1-mh.id2.novell.com") by vger.kernel.org with ESMTP id S1750815AbVKINzu (ORCPT ); Wed, 9 Nov 2005 08:55:50 -0500 Message-Id: <43720E2E.76F0.0078.0@novell.com> X-Mailer: Novell GroupWise Internet Agent 7.0 Date: Wed, 09 Nov 2005 14:56:46 +0100 From: "Jan Beulich" To: Subject: [PATCH 1/39] NLKD - an alternative kallsyms approach References: <43720DAE.76F0.0078.0@novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__Part57756B0E.0__=" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__Part57756B0E.0__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline This patch provides an alternative to the pre-exisiting kallsyms code. That code, from a kernel debugger perspective at least, suffers from incomplete information, making it impossible to (a) disambiguate multiple static functions of the same name (in different source files), (b) determine a complete set of attributes for a symbol (namely, the symbol's size, but also its type, which gets converted to an nm-like one-character representation), and (c) retain full section information This new approach basically makes handling core kernel and module symbols the same, by retrieving the kernel's section, symbol, and string tables rather than parsing the system map. At once it adds the functionality to strip unneeded symbols from modules, which results in non-neglectable space savings for typical distributions (which large amounts of modules). Note that with certain recent, but broken binutils versions (2.16.90*, 2.16.91* up to and including 2.16.91.0.3) this can only be built without CONFIG_MODVERSIONS. Signed-Off-By: Jan Beulich (actual patch attached) --=__Part57756B0E.0__= Content-Type: application/octet-stream; name="linux-2.6.14-kallsyms.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="linux-2.6.14-kallsyms.patch" VGhpcyBwYXRjaCBwcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgcHJlLWV4aXNpdGluZyBr YWxsc3ltcyBjb2RlLgpUaGF0IGNvZGUsIGZyb20gYSBrZXJuZWwgZGVidWdnZXIgcGVyc3BlY3Rp dmUgYXQgbGVhc3QsIHN1ZmZlcnMgZnJvbQppbmNvbXBsZXRlIGluZm9ybWF0aW9uLCBtYWtpbmcg aXQgaW1wb3NzaWJsZSB0bwooYSkgZGlzYW1iaWd1YXRlIG11bHRpcGxlIHN0YXRpYyBmdW5jdGlv bnMgb2YgdGhlIHNhbWUgbmFtZSAoaW4KZGlmZmVyZW50IHNvdXJjZSBmaWxlcyksCihiKSBkZXRl cm1pbmUgYSBjb21wbGV0ZSBzZXQgb2YgYXR0cmlidXRlcyBmb3IgYSBzeW1ib2wgKG5hbWVseSwg dGhlCnN5bWJvbCdzIHNpemUsIGJ1dCBhbHNvIGl0cyB0eXBlLCB3aGljaCBnZXRzIGNvbnZlcnRl ZCB0byBhbiBubS1saWtlCm9uZS1jaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24pLCBhbmQKKGMpIHJl dGFpbiBmdWxsIHNlY3Rpb24gaW5mb3JtYXRpb24KClRoaXMgbmV3IGFwcHJvYWNoIGJhc2ljYWxs eSBtYWtlcyBoYW5kbGluZyBjb3JlIGtlcm5lbCBhbmQgbW9kdWxlCnN5bWJvbHMgdGhlIHNhbWUs IGJ5IHJldHJpZXZpbmcgdGhlIGtlcm5lbCdzIHNlY3Rpb24sIHN5bWJvbCwgYW5kCnN0cmluZyB0 YWJsZXMgcmF0aGVyIHRoYW4gcGFyc2luZyB0aGUgc3lzdGVtIG1hcC4KCkF0IG9uY2UgaXQgYWRk cyB0aGUgZnVuY3Rpb25hbGl0eSB0byBzdHJpcCB1bm5lZWRlZCBzeW1ib2xzIGZyb20KbW9kdWxl cywgd2hpY2ggcmVzdWx0cyBpbiBub24tbmVnbGVjdGFibGUgc3BhY2Ugc2F2aW5ncyBmb3IgdHlw aWNhbApkaXN0cmlidXRpb25zICh3aGljaCBsYXJnZSBhbW91bnRzIG9mIG1vZHVsZXMpLiBOb3Rl IHRoYXQgd2l0aCBjZXJ0YWluCnJlY2VudCwgYnV0IGJyb2tlbiBiaW51dGlscyB2ZXJzaW9ucyAo Mi4xNi45MCosIDIuMTYuOTEqIHVwIHRvCmFuZCBpbmNsdWRpbmcgMi4xNi45MS4wLjMpIHRoaXMg Y2FuIG9ubHkgYmUgYnVpbHQgd2l0aG91dApDT05GSUdfTU9EVkVSU0lPTlMuCgpTaWduZWQtT2Zm LUJ5OiBKYW4gQmV1bGljaCA8amJldWxpY2hAbm92ZWxsLmNvbT4KCi0tLSAyLjYuMTQvTWFrZWZp bGUJMjAwNS0xMC0yOCAwMjowMjowOC4wMDAwMDAwMDAgKzAyMDAKKysrIDIuNi4xNC1rYWxsc3lt cy9NYWtlZmlsZQkyMDA1LTExLTA0IDE2OjIwOjU3LjAwMDAwMDAwMCArMDEwMApAQCAtMTYwLDE1 ICsxNjAsMTkgQEAgTE9DQUxWRVJTSU9OID0gJChzdWJzdCAkKHNwYWNlKSwsIFwKIAogS0VSTkVM UkVMRUFTRT0kKFZFUlNJT04pLiQoUEFUQ0hMRVZFTCkuJChTVUJMRVZFTCkkKEVYVFJBVkVSU0lP TikkKExPQ0FMVkVSU0lPTikKIAorSE9TVEFSQ0ggOj0gJChzaGVsbCB1bmFtZSAtbSB8IHNlZCAt ZSBzL2kuODYvaTM4Ni8gLWUgcy9zdW40dS9zcGFyYzY0LyBcCisJCQkJICAgLWUgcy9hcm0uKi9h cm0vIC1lIHMvc2ExMTAvYXJtLyBcCisJCQkJICAgLWUgcy9zMzkweC9zMzkwLyAtZSBzL3Bhcmlz YzY0L3BhcmlzYy8gKQorCiAjIFNVQkFSQ0ggdGVsbHMgdGhlIHVzZXJtb2RlIGJ1aWxkIHdoYXQg dGhlIHVuZGVybHlpbmcgYXJjaCBpcy4gIFRoYXQgaXMgc2V0CiAjIGZpcnN0LCBhbmQgaWYgYSB1 c2VybW9kZSBidWlsZCBpcyBoYXBwZW5pbmcsIHRoZSAiQVJDSD11bSIgb24gdGhlIGNvbW1hbmQK ICMgbGluZSBvdmVycmlkZXMgdGhlIHNldHRpbmcgb2YgQVJDSCBiZWxvdy4gIElmIGEgbmF0aXZl IGJ1aWxkIGlzIGhhcHBlbmluZywKICMgdGhlbiBBUkNIIGlzIGFzc2lnbmVkLCBnZXR0aW5nIHdo YXRldmVyIHZhbHVlIGl0IGdldHMgbm9ybWFsbHksIGFuZCAKICMgU1VCQVJDSCBpcyBzdWJzZXF1 ZW50bHkgaWdub3JlZC4KIAotU1VCQVJDSCA6PSAkKHNoZWxsIHVuYW1lIC1tIHwgc2VkIC1lIHMv aS44Ni9pMzg2LyAtZSBzL3N1bjR1L3NwYXJjNjQvIFwKLQkJCQkgIC1lIHMvYXJtLiovYXJtLyAt ZSBzL3NhMTEwL2FybS8gXAotCQkJCSAgLWUgcy9zMzkweC9zMzkwLyAtZSBzL3BhcmlzYzY0L3Bh cmlzYy8gKQoraWZlcSAoJChTVUJBUkNIKSwpCitTVUJBUkNIICAgICAgICAgOj0gJChpZiAkKGZp bHRlci1vdXQgdW0sJChBUkNIKSksJChBUkNIKSwkKEhPU1RBUkNIKSkKK2VuZGlmCiAKICMgQ3Jv c3MgY29tcGlsaW5nIGFuZCBzZWxlY3RpbmcgZGlmZmVyZW50IHNldCBvZiBnY2MvYmluLXV0aWxz CiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzI3LDYgKzMzMSw3IEBAIE5NCQk9ICQoQ1JPU1Nf Q09NUElMRSlubQogU1RSSVAJCT0gJChDUk9TU19DT01QSUxFKXN0cmlwCiBPQkpDT1BZCQk9ICQo Q1JPU1NfQ09NUElMRSlvYmpjb3B5CiBPQkpEVU1QCQk9ICQoQ1JPU1NfQ09NUElMRSlvYmpkdW1w CitSRUFERUxGCQk9ICQoQ1JPU1NfQ09NUElMRSlyZWFkZWxmCiBBV0sJCT0gYXdrCiBHRU5LU1lN Uwk9IHNjcmlwdHMvZ2Vua3N5bXMvZ2Vua3N5bXMKIERFUE1PRAkJPSAvc2Jpbi9kZXBtb2QKQEAg LTcyOSwyNCArNzM0LDEwOCBAQCBlbmRlZgogCiAjIEdlbmVyYXRlIC5TIGZpbGUgd2l0aCBhbGwg a2VybmVsIHN5bWJvbHMKIHF1aWV0X2NtZF9rYWxsc3ltcyA9IEtTWU0gICAgJEAKLSAgICAgIGNt ZF9rYWxsc3ltcyA9ICQoTk0pIC1uICQ8IHwgJChLQUxMU1lNUykgXAotICAgICAgICAgICAgICAg ICAgICAgJChpZiAkKENPTkZJR19LQUxMU1lNU19BTEwpLC0tYWxsLXN5bWJvbHMpID4gJEAKIAot LnRtcF9rYWxsc3ltczEubyAudG1wX2thbGxzeW1zMi5vIC50bXBfa2FsbHN5bXMzLm86ICUubzog JS5TIHNjcmlwdHMgRk9SQ0UKK2lmZGVmIENPTkZJR19LQUxMU1lNU19UUkFESVRJT05BTAorCitj bWRfa2FsbHN5bXMgPSB7IHRlc3QgJCogLWVxIDAgfHwgJChOTSkgLW4gJDw7IH0gfCAkKEtBTExT WU1TKSAkKGlmICQoQ09ORklHX0tBTExTWU1TX0FMTCksLS1hbGwtc3ltYm9scykgPiRACisKK2th bGxzeW1zLXN0cmlwLWV4dCA6PQorCitlbHNlCisKK2NtZF9rYWxsc3ltcyA9IHsgdGVzdCAkKiAt ZXEgMCB8fCAkKE5NKSAtbiAkPDsgfSB8ICQoS0FMTFNZTVMpIC0kJChleHByICQqICsgMSkgPiRA CisKK2thbGxzeW1zLXN0cmlwLXNyYyA6PSAkKGlmICQoQ09ORklHX0tBTExTWU1TX1NUUklQX0dF TkVSQVRFRCksJChzcmN0cmVlKS8kKEtBTExTWU1TKSkKK2thbGxzeW1zLXN0cmlwLXNyYyArPSAk KGlmICQoQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRCksJCh3aWxkY2FyZCAkKHNyY3Ry ZWUpL2FyY2gvJChBUkNIKS9rYWxsc3ltcykpCitrYWxsc3ltcy1zdHJpcC1zcmMgKz0gJChpZiAk KENPTkZJR19LQUxMU1lNU19BTEwpLCwudG1wX2RhdGEpCitrYWxsc3ltcy1zdHJpcC1zcmMgOj0g JChzdHJpcCAkKGthbGxzeW1zLXN0cmlwLXNyYykpCitrYWxsc3ltcy1zdHJpcC1leHQgOj0gJChp ZiAkKGthbGxzeW1zLXN0cmlwLXNyYyksLnN0cmlwcGVkKQorCitxdWlldF9jbWRfa3RhYiA9IEtU QUIgICAgJEAKK2RlZmluZSBjbWRfa3RhYgorCWlmIFsgJCogLWVxIDAgXTsgdGhlbiBcCisJCWVj aG8gInBsYWNlaG9sZGVyIiA+JEA7IFwKKwllbHNlIFwKKwkJcm0gLWYgJEA7IFwKKwkJJChSRUFE RUxGKSAtU1cgJDwgfCB3aGlsZSByZWFkIGlkeCBuYW1lIHR5cGUgYWRkciBvZmZzIHNpemUgbW9y ZTsgZG8gXAorCQkJaWYgWyAiJChzdWZmaXggJEApIiA9ICIkJG5hbWUiIF07IHRoZW4gXAorCQkJ CXRhaWwgLWMrJCQoKDB4JCRvZmZzKzEpKSA8JDwgfCBoZWFkIC1jICQkKCgweCQkc2l6ZSkpID4k QDsgXAorCQkJCWJyZWFrOyBcCisJCQlmaTsgXAorCQlkb25lOyBcCisJCXRlc3QgLXMgJEA7IFwK KwlmaQorZW5kZWYKKworcXVpZXRfY21kX2tzaGRyID0gS1NIRFIgICAkQAorZGVmaW5lIGNtZF9r c2hkcgorCWlmIFsgJCogLWVxIDAgXTsgdGhlbiBcCisJCWVjaG8gInBsYWNlaG9sZGVyIiA+JEA7 IFwKKwllbHNlIFwKKwkJbnNlY3Q9IDs6IGdyYWIgdGhpcyBmcm9tIHRoZSBmaXJzdCBkZWNpbWFs IG51bWJlcjsgXAorCQlvc2VjdD0gOzogZ3JhYiB0aGlzIGZyb20gdGhlIGZpcnN0IGhleGFkZWNp bWFsIG51bWJlcjsgXAorCQlmb3IgaSBpbiAkJCgkKFJFQURFTEYpIC1TICQ8IHwgZWdyZXAgJ15b Xl1cWygpXSokJCcpOyBcCisJCWRvIFwKKwkJCXRlc3QgLXogIiQkbnNlY3QiICYmIG5zZWN0PSQk KGVjaG8gJCR7aSU6Kn0gfCBlZ3JlcCAnXltbOmRpZ2l0Ol1dKyQkJyk7IFwKKwkJCXRlc3QgLXog IiQkb3NlY3QiICYmIG9zZWN0PSQkKGVjaG8gJCR7aSU6Kn0gfCBlZ3JlcCAnXjBbeFhdW1s6eGRp Z2l0Ol1dKyQkJyk7IFwKKwkJZG9uZTsgXAorCQl6c2VjdD0gOzogZ3JhYiB0aGlzIGZyb20gdGhl IGxhc3QgbnVtYmVyIHRoYXQgaXMgZm9sbG93ZWQgYnkgYSB1bml0IHNwZWNpZmljYXRpb247IFwK KwkJZm9yIGkgaW4gJCQoJChSRUFERUxGKSAtaCAkPCB8IGVncmVwICc6W1s6c3BhY2U6XV0rW1s6 ZGlnaXQ6XV0rW1s6c3BhY2U6XV0rXCguKlwpJyk7IFwKKwkJZG8gXAorCQkJdmFsPSQkKGVjaG8g JCRpIHwgZWdyZXAgJ14oW1s6ZGlnaXQ6XV0rfDBbeFhdW1s6eGRpZ2l0Ol1dKykkJCcpOyBcCisJ CQl0ZXN0IC1uICIkJHZhbCIgJiYgenNlY3Q9JCR2YWw7IFwKKwkJZG9uZTsgXAorCQl0YWlsIC1j KyQkKChvc2VjdCsxKSkgPCQ8IHwgaGVhZCAtYyAkJCgobnNlY3QqenNlY3QpKSA+JEA7IFwKKwlm aQorZW5kZWYKKworcXVpZXRfY21kX2tzdHJpcCA9IFNUUklQICAgJDwKK2NtZF9rc3RyaXAgPSAk KE9CSkNPUFkpICQoYWRkcHJlZml4IC0tc3RyaXAtc3ltYm9scyAsJChmaWx0ZXIgJS5zdHJpcCwk XikpIC13ICQ8ICRACisKKy50bXBfa2FsbHN5bXMlLnN5bXRhYjogLnRtcF92bWxpbnV4JSQoa2Fs bHN5bXMtc3RyaXAtZXh0KQorCSQoY2FsbCBjbWQsa3RhYikKKworLnRtcF9rYWxsc3ltcyUuc3Ry dGFiOiAudG1wX3ZtbGludXglJChrYWxsc3ltcy1zdHJpcC1leHQpCisJJChjYWxsIGNtZCxrdGFi KQorCisudG1wX2thbGxzeW1zJS5zZWN0aW9uczogLnRtcF92bWxpbnV4JSQoa2FsbHN5bXMtc3Ry aXAtZXh0KQorCSQoY2FsbCBjbWQsa3NoZHIpCisKKy50bXBfa2FsbHN5bXMlLnNoc3RydGFiOiAu dG1wX3ZtbGludXglJChrYWxsc3ltcy1zdHJpcC1leHQpCisJJChjYWxsIGNtZCxrdGFiKQorCisu dG1wX3ZtbGludXglLnN0cmlwcGVkOiAudG1wX3ZtbGludXglICQoYWRkc3VmZml4IC5zdHJpcCwk KGthbGxzeW1zLXN0cmlwLXNyYykpICQob2JqdHJlZSkvaW5jbHVkZS9saW51eC9hdXRvY29uZi5o CisJJChjYWxsIGNtZCxrc3RyaXApCisKKy50bXBfZGF0YS5zdHJpcDogLnRtcF92bWxpbnV4MSAk KG9ianRyZWUpL2luY2x1ZGUvbGludXgvYXV0b2NvbmYuaAorCSQoUSkkKE5NKSAkPCB8IHNlZCAt biAncyxbWzp4ZGlnaXQ6XV1cK1tbOnNwYWNlOl1dXCtbXnRUXVtbOnNwYWNlOl1dXCtcKC4qXCks XDEscCcgXAorCQl8IHdoaWxlIHJlYWQgaTsgZG8gY2FzZSAkJGkgaW4gXAorCQkJJChhZGRzdWZm aXggJChjbG9zZSk7OywgXAorCQkJCSQoc2hlbGwgY2F0ICQoYWRkc3VmZml4IC5zdHJpcCwkKGZp bHRlciAkKHNyY3RyZWUpLyUsJChrYWxsc3ltcy1zdHJpcC1zcmMpKSkgL2Rldi9udWxsIFwKKwkJ CQkgICAgICAgIHwgc2VkICdzLFwoWzt8Jjw+KCkkJFxcXVwpLFxcXDEsZycpKSBcCisJCQkqKSBl Y2hvICQkaTs7IFwKKwkJZXNhYzsgZG9uZSA+JEAKKworZW5kaWYgIyBDT05GSUdfS0FMTFNZTVNf VFJBRElUSU9OQUwKKworJChmb3JlYWNoIG4sMCAxIDIgMywudG1wX2thbGxzeW1zJChuKS5vKTog QUZMQUdTKz0tV2EsLS1zdHJpcC1sb2NhbC1hYnNvbHV0ZQorJChmb3JlYWNoIG4sMCAxIDIgMywu dG1wX2thbGxzeW1zJChuKS5vKTogJS5vOiAlLlMgJChpZiAkKENPTkZJR19LQUxMU1lNU19UUkFE SVRJT05BTCksLCUuc3ltdGFiICUuc3RydGFiICUuc2VjdGlvbnMgJS5zaHN0cnRhYikgc2NyaXB0 cyBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxhc19vX1MpCiAKLS50bXBfa2FsbHN5bXMl LlM6IC50bXBfdm1saW51eCUgJChLQUxMU1lNUykKKy50bXBfa2FsbHN5bXMlLlM6IC50bXBfdm1s aW51eCUkKGthbGxzeW1zLXN0cmlwLWV4dCkgJChLQUxMU1lNUykgJChvYmp0cmVlKS9pbmNsdWRl L2xpbnV4L2F1dG9jb25mLmgKIAkkKGNhbGwgY21kLGthbGxzeW1zKQogCi0jIC50bXBfdm1saW51 eDEgbXVzdCBiZSBjb21wbGV0ZSBleGNlcHQga2FsbHN5bXMsIHNvIHVwZGF0ZSB2bWxpbnV4IHZl cnNpb24KLS50bXBfdm1saW51eDE6ICQodm1saW51eC1sZHMpICQodm1saW51eC1hbGwpIEZPUkNF Ci0JJChjYWxsIGlmX2NoYW5nZWRfcnVsZSxrc3ltX2xkKQorLnRtcF92bWxpbnV4MCQoa2FsbHN5 bXMtc3RyaXAtZXh0KToKKwkkKFEpZWNobyAicGxhY2Vob2xkZXIiID4kQAogCi0udG1wX3ZtbGlu dXgyOiAkKHZtbGludXgtbGRzKSAkKHZtbGludXgtYWxsKSAudG1wX2thbGxzeW1zMS5vIEZPUkNF Ci0JJChjYWxsIGlmX2NoYW5nZWQsdm1saW51eF9fKQorLnRtcF92bWxpbnV4MTogLnRtcF9rYWxs c3ltczAubworLnRtcF92bWxpbnV4MjogLnRtcF9rYWxsc3ltczEubworLnRtcF92bWxpbnV4Mzog LnRtcF9rYWxsc3ltczIubwogCi0udG1wX3ZtbGludXgzOiAkKHZtbGludXgtbGRzKSAkKHZtbGlu dXgtYWxsKSAudG1wX2thbGxzeW1zMi5vIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsdm1saW51 eF9fKQorLnRtcF92bWxpbnV4JTogTERGTEFHU192bWxpbnV4ICs9IC1TCisjIC50bXBfdm1saW51 eDEgbXVzdCBiZSBjb21wbGV0ZSBleGNlcHQga2FsbHN5bXMsIHNvIHVwZGF0ZSB2bWxpbnV4IHZl cnNpb24KKy50bXBfdm1saW51eCU6ICQodm1saW51eC1sZHMpICQodm1saW51eC1hbGwpIEZPUkNF CisJJChpZiAkKGZpbHRlciAxLCQqKSwkKGNhbGwgaWZfY2hhbmdlZF9ydWxlLGtzeW1fbGQpLCQo Y2FsbCBpZl9jaGFuZ2VkLHZtbGludXhfXykpCiAKICMgTmVlZHMgdG8gdmlzaXQgc2NyaXB0cy8g YmVmb3JlICQoS0FMTFNZTVMpIGNhbiBiZSB1c2VkLgogJChLQUxMU1lNUyk6IHNjcmlwdHMgOwpA QCAtOTgwLDcgKzEwNjksNyBAQCBlbmRpZiAjIENPTkZJR19NT0RVTEVTCiAjIERpcmVjdG9yaWVz ICYgZmlsZXMgcmVtb3ZlZCB3aXRoICdtYWtlIGNsZWFuJwogQ0xFQU5fRElSUyAgKz0gJChNT0RW RVJESVIpCiBDTEVBTl9GSUxFUyArPQl2bWxpbnV4IFN5c3RlbS5tYXAgXAotICAgICAgICAgICAg ICAgIC50bXBfa2FsbHN5bXMqIC50bXBfdmVyc2lvbiAudG1wX3ZtbGludXgqIC50bXBfU3lzdGVt Lm1hcAorICAgICAgICAgICAgICAgIC50bXBfZGF0YSogLnRtcF9rYWxsc3ltcyogLnRtcF92ZXJz aW9uIC50bXBfdm1saW51eCogLnRtcF9TeXN0ZW0ubWFwCiAKICMgRGlyZWN0b3JpZXMgJiBmaWxl cyByZW1vdmVkIHdpdGggJ21ha2UgbXJwcm9wZXInCiBNUlBST1BFUl9ESVJTICArPSBpbmNsdWRl L2NvbmZpZyBpbmNsdWRlMgotLS0gMi42LjE0L2FyY2gvYWxwaGEvZGVmY29uZmlnCTIwMDUtMTAt MjggMDI6MDI6MDguMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTQta2FsbHN5bXMvYXJjaC9hbHBo YS9kZWZjb25maWcJMjAwNS0wOS0wNyAxMjozNjowMi4wMDAwMDAwMDAgKzAyMDAKQEAgLTMyLDYg KzMyLDcgQEAgQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5v dCBzZXQKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CitD T05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUw9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENP TkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19GVVRFWD15Ci0tLSAy LjYuMTQvYXJjaC9mcnYvZGVmY29uZmlnCTIwMDUtMTAtMjggMDI6MDI6MDguMDAwMDAwMDAwICsw MjAwCisrKyAyLjYuMTQta2FsbHN5bXMvYXJjaC9mcnYvZGVmY29uZmlnCTIwMDUtMDktMDcgMTI6 MzQ6MDkuMDAwMDAwMDAwICswMjAwCkBAIC0zMyw2ICszMyw3IEBAIENPTkZJR19TWVNDVEw9eQog IyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19L QUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUw9eQogIyBDT05GSUdfS0FMTFNZ TVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNl dAogQ09ORklHX1BSSU5USz15Ci0tLSAyLjYuMTQvYXJjaC9pMzg2L2RlZmNvbmZpZwkyMDA1LTEw LTI4IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42LjE0LWthbGxzeW1zL2FyY2gvaTM4 Ni9kZWZjb25maWcJMjAwNS0wOS0wNyAxMjozMjoxNC4wMDAwMDAwMDAgKzAyMDAKQEAgLTI4LDYg KzI4LDggQEAgQ09ORklHX0hPVFBMVUc9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAog IyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19L QUxMU1lNU19UUkFESVRJT05BTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5v dCBzZXQKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX0lPU0NIRURfTk9P UD15Ci0tLSAyLjYuMTQvYXJjaC9pMzg2L2tlcm5lbC9lbnRyeS5TCTIwMDUtMTAtMjggMDI6MDI6 MDguMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTQta2FsbHN5bXMvYXJjaC9pMzg2L2tlcm5lbC9l bnRyeS5TCTIwMDUtMTEtMDQgMTY6NDU6MTMuMDAwMDAwMDAwICswMTAwCkBAIC0xMjksNiArMTI5 LDcgQEAgRU5UUlkocmV0X2Zyb21fZm9yaykKIAlHRVRfVEhSRUFEX0lORk8oJWVicCkKIAlwb3Bs ICVlYXgKIAlqbXAgc3lzY2FsbF9leGl0CitFTkQocmV0X2Zyb21fZm9yaykKIAogLyoKICAqIFJl dHVybiB0byB1c2VyIG1vZGUgaXMgbm90IGFzIGNvbXBsZXggYXMgYWxsIHRoaXMgbG9va3MsCkBA IC0xNTYsNiArMTU3LDcgQEAgRU5UUlkocmVzdW1lX3VzZXJzcGFjZSkKIAkJCQkJIyBpbnQvZXhj ZXB0aW9uIHJldHVybj8KIAlqbmUgd29ya19wZW5kaW5nCiAJam1wIHJlc3RvcmVfYWxsCitFTkQo cmV0X2Zyb21fZXhjZXB0aW9uKQogCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIEVOVFJZKHJlc3Vt ZV9rZXJuZWwpCkBAIC0xNzAsNiArMTcyLDcgQEAgbmVlZF9yZXNjaGVkOgogCWp6IHJlc3RvcmVf YWxsCiAJY2FsbCBwcmVlbXB0X3NjaGVkdWxlX2lycQogCWptcCBuZWVkX3Jlc2NoZWQKK0VORChy ZXN1bWVfa2VybmVsKQogI2VuZGlmCiAKIC8qIFNZU0VOVEVSX1JFVFVSTiBwb2ludHMgdG8gYWZ0 ZXIgdGhlICJzeXNlbnRlciIgaW5zdHJ1Y3Rpb24gaW4KQEAgLTIxOSw2ICsyMjIsNyBAQCBzeXNl bnRlcl9wYXN0X2VzcDoKIAl4b3JsICVlYnAsJWVicAogCXN0aQogCXN5c2V4aXQKK0VORFBST0Mo c3lzZW50ZXJfZW50cnkpCiAKIAogCSMgc3lzdGVtIGNhbGwgaGFuZGxlciBzdHViCkBAIC0yOTMs NiArMjk3LDcgQEAgbGR0X3NzOgogCS5hbGlnbiA0CiAJLmxvbmcgMWIsaXJldF9leGMKIC5wcmV2 aW91cworRU5EUFJPQyhzeXN0ZW1fY2FsbCkKIAogCSMgcGVyZm9ybSB3b3JrIHRoYXQgbmVlZHMg dG8gYmUgZG9uZSBpbW1lZGlhdGVseSBiZWZvcmUgcmVzdW1wdGlvbgogCUFMSUdOCkBAIC0zMzAs NiArMzM1LDcgQEAgd29ya19ub3RpZnlzaWdfdjg2OgogCXhvcmwgJWVkeCwgJWVkeAogCWNhbGwg ZG9fbm90aWZ5X3Jlc3VtZQogCWptcCByZXN1bWVfdXNlcnNwYWNlCitFTkQod29ya19wZW5kaW5n KQogCiAJIyBwZXJmb3JtIHN5c2NhbGwgZXhpdCB0cmFjaW5nCiAJQUxJR04KQEAgLTM0NSw2ICsz NTEsNyBAQCBzeXNjYWxsX3RyYWNlX2VudHJ5OgogCWNtcGwgJChucl9zeXNjYWxscyksICVlYXgK IAlqbmFlIHN5c2NhbGxfY2FsbAogCWptcCBzeXNjYWxsX2V4aXQKK0VORChzeXNjYWxsX3RyYWNl X2VudHJ5KQogCiAJIyBwZXJmb3JtIHN5c2NhbGwgZXhpdCB0cmFjaW5nCiAJQUxJR04KQEAgLTM1 Nyw2ICszNjQsNyBAQCBzeXNjYWxsX2V4aXRfd29yazoKIAltb3ZsICQxLCAlZWR4CiAJY2FsbCBk b19zeXNjYWxsX3RyYWNlCiAJam1wIHJlc3VtZV91c2Vyc3BhY2UKK0VORChzeXNjYWxsX2V4aXRf d29yaykKIAogCUFMSUdOCiBzeXNjYWxsX2ZhdWx0OgpAQCAtMzY1LDExICszNzMsMTMgQEAgc3lz Y2FsbF9mYXVsdDoKIAlHRVRfVEhSRUFEX0lORk8oJWVicCkKIAltb3ZsICQtRUZBVUxULEVBWCgl ZXNwKQogCWptcCByZXN1bWVfdXNlcnNwYWNlCitFTkQoc3lzY2FsbF9mYXVsdCkKIAogCUFMSUdO CiBzeXNjYWxsX2JhZHN5czoKIAltb3ZsICQtRU5PU1lTLEVBWCglZXNwKQogCWptcCByZXN1bWVf dXNlcnNwYWNlCitFTkQoc3lzY2FsbF9iYWRzeXMpCiAKICNkZWZpbmUgRklYVVBfRVNQRklYX1NU QUNLIFwKIAltb3ZsICVlc3AsICVlYXg7IFwKQEAgLTM5OCwxOSArNDA4LDI0IEBAIHN5c2NhbGxf YmFkc3lzOgogICovCiAuZGF0YQogRU5UUlkoaW50ZXJydXB0KQotLnRleHQKKy5wcmV2aW91cwog Ci12ZWN0b3I9MAogRU5UUlkoaXJxX2VudHJpZXNfc3RhcnQpCit2ZWN0b3I9MAogLnJlcHQgTlJf SVJRUwogCUFMSUdOCiAxOglwdXNobCAkdmVjdG9yLTI1NgogCWptcCBjb21tb25faW50ZXJydXB0 Ci0uZGF0YQorIC5kYXRhCiAJLmxvbmcgMWIKLS50ZXh0Ci12ZWN0b3I9dmVjdG9yKzEKKyAucHJl dmlvdXMKKyB2ZWN0b3I9dmVjdG9yKzEKIC5lbmRyCitFTkQoaXJxX2VudHJpZXNfc3RhcnQpCisK Ky5kYXRhCitFTkQoaW50ZXJydXB0KQorLnByZXZpb3VzCiAKIAlBTElHTgogY29tbW9uX2ludGVy cnVwdDoKQEAgLTQxOCw2ICs0MzMsNyBAQCBjb21tb25faW50ZXJydXB0OgogCW1vdmwgJWVzcCwl ZWF4CiAJY2FsbCBkb19JUlEKIAlqbXAgcmV0X2Zyb21faW50cgorRU5EUFJPQyhjb21tb25faW50 ZXJydXB0KQogCiAjZGVmaW5lIEJVSUxEX0lOVEVSUlVQVChuYW1lLCBucikJXAogRU5UUlkobmFt ZSkJCQkJXApAQCAtNDI1LDcgKzQ0MSw4IEBAIEVOVFJZKG5hbWUpCQkJCVwKIAlTQVZFX0FMTAkJ CVwKIAltb3ZsICVlc3AsJWVheDsJCQlcCiAJY2FsbCBzbXBfLyoqL25hbWU7CQlcCi0Jam1wIHJl dF9mcm9tX2ludHI7CisJam1wIHJldF9mcm9tX2ludHI7CVwKK0VORFBST0MobmFtZSkKIAogLyog VGhlIGluY2x1ZGUgaXMgd2hlcmUgYWxsIG9mIHRoZSBTTVAgZXRjLiBpbnRlcnJ1cHRzIGNvbWUg ZnJvbSAqLwogI2luY2x1ZGUgImVudHJ5X2FyY2guaCIKQEAgLTQzMyw2ICs0NTAsNyBAQCBFTlRS WShuYW1lKQkJCQlcCiBFTlRSWShkaXZpZGVfZXJyb3IpCiAJcHVzaGwgJDAJCQkjIG5vIGVycm9y IGNvZGUKIAlwdXNobCAkZG9fZGl2aWRlX2Vycm9yCitFTkQoZGl2aWRlX2Vycm9yKQogCUFMSUdO CiBlcnJvcl9jb2RlOgogCXB1c2hsICVkcwpAQCAtNDU5LDE2ICs0NzcsMTkgQEAgZXJyb3JfY29k ZToKIAltb3ZsICVlc3AsJWVheAkJCSMgcHRfcmVncyBwb2ludGVyCiAJY2FsbCAqJWVkaQogCWpt cCByZXRfZnJvbV9leGNlcHRpb24KK0VORFBST0MoZXJyb3JfY29kZSkKIAogRU5UUlkoY29wcm9j ZXNzb3JfZXJyb3IpCiAJcHVzaGwgJDAKIAlwdXNobCAkZG9fY29wcm9jZXNzb3JfZXJyb3IKIAlq bXAgZXJyb3JfY29kZQorRU5EKGNvcHJvY2Vzc29yX2Vycm9yKQogCiBFTlRSWShzaW1kX2NvcHJv Y2Vzc29yX2Vycm9yKQogCXB1c2hsICQwCiAJcHVzaGwgJGRvX3NpbWRfY29wcm9jZXNzb3JfZXJy b3IKIAlqbXAgZXJyb3JfY29kZQorRU5EKHNpbWRfY29wcm9jZXNzb3JfZXJyb3IpCiAKIEVOVFJZ KGRldmljZV9ub3RfYXZhaWxhYmxlKQogCXB1c2hsICQtMQkJCSMgbWFyayB0aGlzIGFzIGFuIGlu dApAQCAtNDg0LDYgKzUwNSw3IEBAIGRldmljZV9ub3RfYXZhaWxhYmxlX2VtdWxhdGU6CiAJY2Fs bCBtYXRoX2VtdWxhdGUKIAlhZGRsICQ0LCAlZXNwCiAJam1wIHJldF9mcm9tX2V4Y2VwdGlvbgor RU5EKGRldmljZV9ub3RfYXZhaWxhYmxlKQogCiAvKgogICogRGVidWcgdHJhcHMgYW5kIE5NSSBj YW4gaGFwcGVuIGF0IHRoZSBvbmUgU1lTRU5URVIgaW5zdHJ1Y3Rpb24KQEAgLTUxOCw2ICs1NDAs NyBAQCBkZWJ1Z19zdGFja19jb3JyZWN0OgogCW1vdmwgJWVzcCwlZWF4CQkJIyBwdF9yZWdzIHBv aW50ZXIKIAljYWxsIGRvX2RlYnVnCiAJam1wIHJldF9mcm9tX2V4Y2VwdGlvbgorRU5EKGRlYnVn KQogCS5wcmV2aW91cyAudGV4dAogLyoKICAqIE5NSSBpcyBkb3VibHkgbmFzdHkuIEl0IGNhbiBo YXBwZW4gX3doaWxlXyB3ZSdyZSBoYW5kbGluZwpAQCAtNTkwLDYgKzYxMyw3IEBAIG5taV8xNmJp dF9zdGFjazoKIAkuYWxpZ24gNAogCS5sb25nIDFiLGlyZXRfZXhjCiAucHJldmlvdXMKK0VORFBS T0Mobm1pKQogCiBLUFJPQkVfRU5UUlkoaW50MykKIAlwdXNobCAkLTEJCQkjIG1hcmsgdGhpcyBh cyBhbiBpbnQKQEAgLTU5OCw1MiArNjIyLDYzIEBAIEtQUk9CRV9FTlRSWShpbnQzKQogCW1vdmwg JWVzcCwlZWF4CQkjIHB0X3JlZ3MgcG9pbnRlcgogCWNhbGwgZG9faW50MwogCWptcCByZXRfZnJv bV9leGNlcHRpb24KK0VORChpbnQzKQogCS5wcmV2aW91cyAudGV4dAogCiBFTlRSWShvdmVyZmxv dykKIAlwdXNobCAkMAogCXB1c2hsICRkb19vdmVyZmxvdwogCWptcCBlcnJvcl9jb2RlCitFTkQo b3ZlcmZsb3cpCiAKIEVOVFJZKGJvdW5kcykKIAlwdXNobCAkMAogCXB1c2hsICRkb19ib3VuZHMK IAlqbXAgZXJyb3JfY29kZQorRU5EKGJvdW5kcykKIAogRU5UUlkoaW52YWxpZF9vcCkKIAlwdXNo bCAkMAogCXB1c2hsICRkb19pbnZhbGlkX29wCiAJam1wIGVycm9yX2NvZGUKK0VORChpbnZhbGlk X29wKQogCiBFTlRSWShjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4pCiAJcHVzaGwgJDAKIAlw dXNobCAkZG9fY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuCiAJam1wIGVycm9yX2NvZGUKK0VO RChjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4pCiAKIEVOVFJZKGludmFsaWRfVFNTKQogCXB1 c2hsICRkb19pbnZhbGlkX1RTUwogCWptcCBlcnJvcl9jb2RlCitFTkQoaW52YWxpZF9UU1MpCiAK IEVOVFJZKHNlZ21lbnRfbm90X3ByZXNlbnQpCiAJcHVzaGwgJGRvX3NlZ21lbnRfbm90X3ByZXNl bnQKIAlqbXAgZXJyb3JfY29kZQorRU5EKHNlZ21lbnRfbm90X3ByZXNlbnQpCiAKIEVOVFJZKHN0 YWNrX3NlZ21lbnQpCiAJcHVzaGwgJGRvX3N0YWNrX3NlZ21lbnQKIAlqbXAgZXJyb3JfY29kZQor RU5EKHN0YWNrX3NlZ21lbnQpCiAKIEtQUk9CRV9FTlRSWShnZW5lcmFsX3Byb3RlY3Rpb24pCiAJ cHVzaGwgJGRvX2dlbmVyYWxfcHJvdGVjdGlvbgogCWptcCBlcnJvcl9jb2RlCitFTkQoZ2VuZXJh bF9wcm90ZWN0aW9uKQogCS5wcmV2aW91cyAudGV4dAogCiBFTlRSWShhbGlnbm1lbnRfY2hlY2sp CiAJcHVzaGwgJGRvX2FsaWdubWVudF9jaGVjawogCWptcCBlcnJvcl9jb2RlCitFTkQoYWxpZ25t ZW50X2NoZWNrKQogCiBLUFJPQkVfRU5UUlkocGFnZV9mYXVsdCkKIAlwdXNobCAkZG9fcGFnZV9m YXVsdAogCWptcCBlcnJvcl9jb2RlCitFTkQocGFnZV9mYXVsdCkKIAkucHJldmlvdXMgLnRleHQK IAogI2lmZGVmIENPTkZJR19YODZfTUNFCkBAIC02NTEsMTIgKzY4NiwxNCBAQCBFTlRSWShtYWNo aW5lX2NoZWNrKQogCXB1c2hsICQwCiAJcHVzaGwgbWFjaGluZV9jaGVja192ZWN0b3IKIAlqbXAg ZXJyb3JfY29kZQorRU5EKG1hY2hpbmVfY2hlY2spCiAjZW5kaWYKIAogRU5UUlkoc3B1cmlvdXNf aW50ZXJydXB0X2J1ZykKIAlwdXNobCAkMAogCXB1c2hsICRkb19zcHVyaW91c19pbnRlcnJ1cHRf YnVnCiAJam1wIGVycm9yX2NvZGUKK0VORChzcHVyaW91c19pbnRlcnJ1cHRfYnVnKQogCiAjaW5j bHVkZSAic3lzY2FsbF90YWJsZS5TIgogCi0tLSAyLjYuMTQvYXJjaC9pYTY0L01ha2VmaWxlCTIw MDUtMTAtMjggMDI6MDI6MDguMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTQta2FsbHN5bXMvYXJj aC9pYTY0L01ha2VmaWxlCTIwMDUtMDktMDcgMTE6NTI6MjguMDAwMDAwMDAwICswMjAwCkBAIC05 LDcgKzksNiBAQAogIwogCiBOTSA6PSAkKENST1NTX0NPTVBJTEUpbm0gLUIKLVJFQURFTEYgOj0g JChDUk9TU19DT01QSUxFKXJlYWRlbGYKIAogZXhwb3J0IEFXSwogCi0tLSAyLjYuMTQvYXJjaC9p YTY0L2RlZmNvbmZpZwkyMDA1LTEwLTI4IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42 LjE0LWthbGxzeW1zL2FyY2gvaWE2NC9kZWZjb25maWcJMjAwNS0wOS0wNyAxMjozNDoyNy4wMDAw MDAwMDAgKzAyMDAKQEAgLTI5LDYgKzI5LDcgQEAgQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBD T05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBD T05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMPXkKIENPTkZJR19L QUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBD T05GSUdfUFJJTlRLPXkKLS0tIDIuNi4xNC9hcmNoL202OGsvZGVmY29uZmlnCTIwMDUtMTAtMjgg MDI6MDI6MDguMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTQta2FsbHN5bXMvYXJjaC9tNjhrL2Rl ZmNvbmZpZwkyMDA1LTA5LTA3IDEyOjM0OjU2LjAwMDAwMDAwMCArMDIwMApAQCAtMzIsNiArMzIs NyBAQCBDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNl dAogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJ R19LQUxMU1lNU19UUkFESVRJT05BTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlz IG5vdCBzZXQKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15Ci0tLSAyLjYuMTQvYXJjaC9t aXBzL2RlZmNvbmZpZwkyMDA1LTEwLTI4IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42 LjE0LWthbGxzeW1zL2FyY2gvbWlwcy9kZWZjb25maWcJMjAwNS0wOS0wNyAxMjozNToyMi4wMDAw MDAwMDAgKzAyMDAKQEAgLTMyLDYgKzMyLDcgQEAgQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19J S0NPTkZJR19QUk9DPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQorQ09O RklHX0tBTExTWU1TX1RSQURJVElPTkFMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1Mg aXMgbm90IHNldAogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci0tLSAyLjYuMTQvYXJj aC9wcGM2NC9kZWZjb25maWcJMjAwNS0xMC0yOCAwMjowMjowOC4wMDAwMDAwMDAgKzAyMDAKKysr IDIuNi4xNC1rYWxsc3ltcy9hcmNoL3BwYzY0L2RlZmNvbmZpZwkyMDA1LTA5LTA3IDEyOjM2OjU3 LjAwMDAwMDAwMCArMDIwMApAQCAtNDEsNiArNDEsNyBAQCBDT05GSUdfQ1BVU0VUUz15CiBDT05G SUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09O RklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19UUkFESVRJT05BTD15CiAjIENPTkZJR19L QUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBu b3Qgc2V0CiBDT05GSUdfUFJJTlRLPXkKLS0tIDIuNi4xNC9hcmNoL3MzOTAvZGVmY29uZmlnCTIw MDUtMTAtMjggMDI6MDI6MDguMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTQta2FsbHN5bXMvYXJj aC9zMzkwL2RlZmNvbmZpZwkyMDA1LTA5LTA3IDEyOjM1OjQ2LjAwMDAwMDAwMCArMDIwMApAQCAt MzcsNiArMzcsNyBAQCBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfSU5JVFJBTUZTX1NP VVJDRT0iIgogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkK K0NPTkZJR19LQUxMU1lNU19UUkFESVRJT05BTD15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMg bm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdf UFJJTlRLPXkKLS0tIDIuNi4xNC9hcmNoL3NwYXJjL2RlZmNvbmZpZwkyMDA1LTEwLTI4IDAyOjAy OjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42LjE0LWthbGxzeW1zL2FyY2gvc3BhcmMvZGVmY29u ZmlnCTIwMDUtMDktMDcgMTI6Mzc6MjcuMDAwMDAwMDAwICswMjAwCkBAIC0yOCw3ICsyOCw5IEBA IENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiAj IENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tB TExTWU1TX1RSQURJVElPTkFMPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Cisj IENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19GVVRFWD15CiBD T05GSUdfRVBPTEw9eQogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0tLSAyLjYuMTQvYXJjaC9zcGFy YzY0L2RlZmNvbmZpZwkyMDA1LTEwLTI4IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42 LjE0LWthbGxzeW1zL2FyY2gvc3BhcmM2NC9kZWZjb25maWcJMjAwNS0wOS0wNyAxMjozNzo0OC4w MDAwMDAwMDAgKzAyMDAKQEAgLTMwLDYgKzMwLDcgQEAgQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkK ICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBz ZXQKIENPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUw9eQogIyBD T05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BB U1MgaXMgbm90IHNldAogQ09ORklHX0ZVVEVYPXkKLS0tIDIuNi4xNC9hcmNoL3VtL2RlZmNvbmZp ZwkyMDA1LTEwLTI4IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42LjE0LWthbGxzeW1z L2FyY2gvdW0vZGVmY29uZmlnCTIwMDUtMDktMDcgMTI6MzM6NTEuMDAwMDAwMDAwICswMjAwCkBA IC03MCw2ICs3MCw3IEBAIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15 CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQorQ09ORklH X0tBTExTWU1TX1RSQURJVElPTkFMPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0 CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfUFJJTlRLPXkKLS0tIDIuNi4x NC9hcmNoL3g4Nl82NC9kZWZjb25maWcJMjAwNS0xMC0yOCAwMjowMjowOC4wMDAwMDAwMDAgKzAy MDAKKysrIDIuNi4xNC1rYWxsc3ltcy9hcmNoL3g4Nl82NC9kZWZjb25maWcJMjAwNS0wOS0wNyAx MjozODowMC4wMDAwMDAwMDAgKzAyMDAKQEAgLTQzLDYgKzQzLDcgQEAgQ09ORklHX0lLQ09ORklH X1BST0M9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0VNQkVEREVEIGlz IG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CitDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUw9 eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlz IG5vdCBzZXQKIENPTkZJR19QUklOVEs9eQotLS0gMi42LjE0L2FyY2gveDg2XzY0L2tlcm5lbC9l bnRyeS5TCTIwMDUtMTAtMjggMDI6MDI6MDguMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTQta2Fs bHN5bXMvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMJMjAwNS0xMS0wNyAxNDo1NjowMi4wMDAw MDAwMDAgKzAxMDAKQEAgLTE1Myw2ICsxNTMsNyBAQCByZmZfdHJhY2U6CiAJR0VUX1RIUkVBRF9J TkZPKCVyY3gpCQogCWptcCByZmZfYWN0aW9uCiAJQ0ZJX0VORFBST0MKK0VORChyZXRfZnJvbV9m b3JrKQogCiAvKgogICogU3lzdGVtIGNhbGwgZW50cnkuIFVwdG8gNiBhcmd1bWVudHMgaW4gcmVn aXN0ZXJzIGFyZSBzdXBwb3J0ZWQuCkBAIC0yODEsNiArMjgyLDcgQEAgdHJhY2VzeXM6CQkJIAog CVJFU1RPUkVfUkVTVAogCWptcCByZXRfZnJvbV9zeXNfY2FsbAogCUNGSV9FTkRQUk9DCitFTkQo c3lzdGVtX2NhbGwpCiAJCQogLyogCiAgKiBTeXNjYWxsIHJldHVybiBwYXRoIGVuZGluZyB3aXRo IElSRVQuCkBAIC0zNTksNiArMzYxLDcgQEAgaW50X3Jlc3RvcmVfcmVzdDoKIAljbGkKIAlqbXAg aW50X3dpdGhfY2hlY2sKIAlDRklfRU5EUFJPQworRU5EKGludF9yZXRfZnJvbV9zeXNfY2FsbCkK IAkJCiAvKiAKICAqIENlcnRhaW4gc3BlY2lhbCBzeXN0ZW0gY2FsbHMgdGhhdCBuZWVkIHRvIHNh dmUgYSBjb21wbGV0ZSBmdWxsIHN0YWNrIGZyYW1lLgpAQCAtMzcwLDYgKzM3Myw3IEBAIGludF9y ZXN0b3JlX3Jlc3Q6CiAJbGVhcQlcZnVuYyglcmlwKSwlcmF4CiAJbGVhcSAgICAtQVJHT0ZGU0VU KzgoJXJzcCksXGFyZyAvKiA4IGZvciByZXR1cm4gYWRkcmVzcyAqLwogCWptcAlwdHJlZ3NjYWxs X2NvbW1vbgorRU5EKFxsYWJlbCkKIAkuZW5kbQogCiAJQ0ZJX1NUQVJUUFJPQwpAQCAtMzk5LDYg KzQwMyw3IEBAIEVOVFJZKHB0cmVnc2NhbGxfY29tbW9uKQogCUNGSV9SRUxfT0ZGU0VUIHJpcCwg MAogCXJldAogCUNGSV9FTkRQUk9DCitFTkQocHRyZWdzY2FsbF9jb21tb24pCiAJCiBFTlRSWShz dHViX2V4ZWN2ZSkKIAlDRklfU1RBUlRQUk9DCkBAIC00MjksNiArNDM0LDcgQEAgZXhlY18zMmJp dDoKIAlSRVNUT1JFX1JFU1QKIAlqbXAgaW50X3JldF9mcm9tX3N5c19jYWxsCiAJQ0ZJX0VORFBS T0MKK0VORChzdHViX2V4ZWN2ZSkKIAkKIC8qCiAgKiBzaWdyZXR1cm4gaXMgc3BlY2lhbCBiZWNh dXNlIGl0IG5lZWRzIHRvIHJlc3RvcmUgYWxsIHJlZ2lzdGVycyBvbiByZXR1cm4uCkBAIC00NDYs NiArNDUyLDcgQEAgRU5UUlkoc3R1Yl9ydF9zaWdyZXR1cm4pCiAJUkVTVE9SRV9SRVNUCiAJam1w IGludF9yZXRfZnJvbV9zeXNfY2FsbAogCUNGSV9FTkRQUk9DCitFTkQoc3R1Yl9ydF9zaWdyZXR1 cm4pCiAKIC8qCiAgKiBpbml0aWFsIGZyYW1lIHN0YXRlIGZvciBpbnRlcnJ1cHRzIGFuZCBleGNl cHRpb25zCkBAIC01OTYsNiArNjAzLDcgQEAgcmV0aW50X2tlcm5lbDoJCiAJam1wIGV4aXRfaW50 cgogI2VuZGlmCQogCUNGSV9FTkRQUk9DCitFTkQoY29tbW9uX2ludGVycnVwdCkKIAkKIC8qCiAg KiBBUElDIGludGVycnVwdHMuCkBAIC02MTEsMTQgKzYxOSwxNyBAQCByZXRpbnRfa2VybmVsOgkK IAogRU5UUlkodGhlcm1hbF9pbnRlcnJ1cHQpCiAJYXBpY2ludGVycnVwdCBUSEVSTUFMX0FQSUNf VkVDVE9SLHNtcF90aGVybWFsX2ludGVycnVwdAorRU5EKHRoZXJtYWxfaW50ZXJydXB0KQogCiAj aWZkZWYgQ09ORklHX1NNUAkKIEVOVFJZKHJlc2NoZWR1bGVfaW50ZXJydXB0KQogCWFwaWNpbnRl cnJ1cHQgUkVTQ0hFRFVMRV9WRUNUT1Isc21wX3Jlc2NoZWR1bGVfaW50ZXJydXB0CitFTkQocmVz Y2hlZHVsZV9pbnRlcnJ1cHQpCiAKIAkubWFjcm8gSU5WQUxJREFURV9FTlRSWSBudW0KIEVOVFJZ KGludmFsaWRhdGVfaW50ZXJydXB0XG51bSkKIAlhcGljaW50ZXJydXB0IElOVkFMSURBVEVfVExC X1ZFQ1RPUl9TVEFSVCtcbnVtLHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdAkKK0VORChpbnZhbGlk YXRlX2ludGVycnVwdFxudW0pCiAJLmVuZG0KIAogCUlOVkFMSURBVEVfRU5UUlkgMApAQCAtNjMy LDE3ICs2NDMsMjEgQEAgRU5UUlkoaW52YWxpZGF0ZV9pbnRlcnJ1cHRcbnVtKQogCiBFTlRSWShj YWxsX2Z1bmN0aW9uX2ludGVycnVwdCkKIAlhcGljaW50ZXJydXB0IENBTExfRlVOQ1RJT05fVkVD VE9SLHNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdAorRU5EKGNhbGxfZnVuY3Rpb25faW50ZXJy dXB0KQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMJCiBFTlRSWShhcGlj X3RpbWVyX2ludGVycnVwdCkKIAlhcGljaW50ZXJydXB0IExPQ0FMX1RJTUVSX1ZFQ1RPUixzbXBf YXBpY190aW1lcl9pbnRlcnJ1cHQKK0VORChhcGljX3RpbWVyX2ludGVycnVwdCkKIAogRU5UUlko ZXJyb3JfaW50ZXJydXB0KQogCWFwaWNpbnRlcnJ1cHQgRVJST1JfQVBJQ19WRUNUT1Isc21wX2Vy cm9yX2ludGVycnVwdAorRU5EKGVycm9yX2ludGVycnVwdCkKIAogRU5UUlkoc3B1cmlvdXNfaW50 ZXJydXB0KQogCWFwaWNpbnRlcnJ1cHQgU1BVUklPVVNfQVBJQ19WRUNUT1Isc21wX3NwdXJpb3Vz X2ludGVycnVwdAorRU5EKHNwdXJpb3VzX2ludGVycnVwdCkKICNlbmRpZgogCQkJCQogLyoKQEAg LTc3MCw2ICs3ODUsNyBAQCBlcnJvcl9rZXJuZWxzcGFjZToKIAljbXBxICRnc19jaGFuZ2UsUklQ KCVyc3ApCiAgICAgICAgIGplICAgZXJyb3Jfc3dhcGdzCiAJam1wICBlcnJvcl9zdGkKK0VORChl cnJvcl9lbnRyeSkKIAkKICAgICAgICAvKiBSZWxvYWQgZ3Mgc2VsZWN0b3Igd2l0aCBleGNlcHRp b24gaGFuZGxpbmcgKi8KICAgICAgICAvKiBlZGk6ICBuZXcgc2VsZWN0b3IgKi8gCkBAIC03ODcs NiArODAzLDcgQEAgZ3NfY2hhbmdlOiAgICAgCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04CiAg ICAgICAgIHJldAogCUNGSV9FTkRQUk9DCitFTkRQUk9DKGxvYWRfZ3NfaW5kZXgpCiAgICAgICAg CiAgICAgICAgIC5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAgICAgICAgIC5hbGlnbiA4CkBAIC04 NDAsNyArODU3LDcgQEAgRU5UUlkoa2VybmVsX3RocmVhZCkKIAlVTkZBS0VfU1RBQ0tfRlJBTUUK IAlyZXQKIAlDRklfRU5EUFJPQwotCitFTkRQUk9DKGtlcm5lbF90aHJlYWQpCiAJCiBjaGlsZF9y aXA6CiAJLyoKQEAgLTg1Myw2ICs4NzAsNyBAQCBjaGlsZF9yaXA6CiAJIyBleGl0CiAJeG9ybCAl ZWRpLCAlZWRpCiAJY2FsbCBkb19leGl0CitFTkRQUk9DKGNoaWxkX3JpcCkKIAogLyoKICAqIGV4 ZWN2ZSgpLiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHVzZSBJUkVULCBub3QgU1lTUkVULCB0byBz ZXQgdXAgYWxsIHN0YXRlIHByb3Blcmx5LgpAQCAtODgyLDE5ICs5MDAsMjQgQEAgRU5UUlkoZXhl Y3ZlKQogCVVORkFLRV9TVEFDS19GUkFNRQogCXJldAogCUNGSV9FTkRQUk9DCitFTkRQUk9DKGV4 ZWN2ZSkKIAogS1BST0JFX0VOVFJZKHBhZ2VfZmF1bHQpCiAJZXJyb3JlbnRyeSBkb19wYWdlX2Zh dWx0CitFTkQocGFnZV9mYXVsdCkKIAkucHJldmlvdXMgLnRleHQKIAogRU5UUlkoY29wcm9jZXNz b3JfZXJyb3IpCiAJemVyb2VudHJ5IGRvX2NvcHJvY2Vzc29yX2Vycm9yCitFTkQoY29wcm9jZXNz b3JfZXJyb3IpCiAKIEVOVFJZKHNpbWRfY29wcm9jZXNzb3JfZXJyb3IpCiAJemVyb2VudHJ5IGRv X3NpbWRfY29wcm9jZXNzb3JfZXJyb3IJCitFTkQoc2ltZF9jb3Byb2Nlc3Nvcl9lcnJvcikKIAog RU5UUlkoZGV2aWNlX25vdF9hdmFpbGFibGUpCiAJemVyb2VudHJ5IG1hdGhfc3RhdGVfcmVzdG9y ZQorRU5EKGRldmljZV9ub3RfYXZhaWxhYmxlKQogCiAJLyogcnVucyBvbiBleGNlcHRpb24gc3Rh Y2sgKi8KIEtQUk9CRV9FTlRSWShkZWJ1ZykKQEAgLTkwNCw2ICs5MjcsNyBAQCBLUFJPQkVfRU5U UlkoZGVidWcpCiAJcGFyYW5vaWRlbnRyeSBkb19kZWJ1ZwogCWptcCBwYXJhbm9pZF9leGl0CiAJ Q0ZJX0VORFBST0MKK0VORChkZWJ1ZykKIAkucHJldmlvdXMgLnRleHQKIAogCS8qIHJ1bnMgb24g ZXhjZXB0aW9uIHN0YWNrICovCQpAQCAtOTU0LDI1ICs5NzgsMzIgQEAgcGFyYW5vaWRfc2NoZWR1 bGU6CiAJY2xpCiAJam1wIHBhcmFub2lkX3VzZXJzcGFjZQogCUNGSV9FTkRQUk9DCitFTkQobm1p KQogCiBLUFJPQkVfRU5UUlkoaW50MykKIAl6ZXJvZW50cnkgZG9faW50MwkKK0VORChpbnQzKQog CS5wcmV2aW91cyAudGV4dAogCiBFTlRSWShvdmVyZmxvdykKIAl6ZXJvZW50cnkgZG9fb3ZlcmZs b3cKK0VORChvdmVyZmxvdykKIAogRU5UUlkoYm91bmRzKQogCXplcm9lbnRyeSBkb19ib3VuZHMK K0VORChib3VuZHMpCiAKIEVOVFJZKGludmFsaWRfb3ApCiAJemVyb2VudHJ5IGRvX2ludmFsaWRf b3AJCitFTkQoaW52YWxpZF9vcCkKIAogRU5UUlkoY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVu KQogCXplcm9lbnRyeSBkb19jb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4KK0VORChjb3Byb2Nl c3Nvcl9zZWdtZW50X292ZXJydW4pCiAKIEVOVFJZKHJlc2VydmVkKQogCXplcm9lbnRyeSBkb19y ZXNlcnZlZAorRU5EKHJlc2VydmVkKQogCiAJLyogcnVucyBvbiBleGNlcHRpb24gc3RhY2sgKi8K IEVOVFJZKGRvdWJsZV9mYXVsdCkKQEAgLTk4MCwxMiArMTAxMSwxNSBAQCBFTlRSWShkb3VibGVf ZmF1bHQpCiAJcGFyYW5vaWRlbnRyeSBkb19kb3VibGVfZmF1bHQKIAlqbXAgcGFyYW5vaWRfZXhp dAogCUNGSV9FTkRQUk9DCitFTkQoZG91YmxlX2ZhdWx0KQogCiBFTlRSWShpbnZhbGlkX1RTUykK IAllcnJvcmVudHJ5IGRvX2ludmFsaWRfVFNTCitFTkQoaW52YWxpZF9UU1MpCiAKIEVOVFJZKHNl Z21lbnRfbm90X3ByZXNlbnQpCiAJZXJyb3JlbnRyeSBkb19zZWdtZW50X25vdF9wcmVzZW50CitF TkQoc2VnbWVudF9ub3RfcHJlc2VudCkKIAogCS8qIHJ1bnMgb24gZXhjZXB0aW9uIHN0YWNrICov CiBFTlRSWShzdGFja19zZWdtZW50KQpAQCAtOTkzLDE5ICsxMDI3LDI0IEBAIEVOVFJZKHN0YWNr X3NlZ21lbnQpCiAJcGFyYW5vaWRlbnRyeSBkb19zdGFja19zZWdtZW50CiAJam1wIHBhcmFub2lk X2V4aXQKIAlDRklfRU5EUFJPQworRU5EKHN0YWNrX3NlZ21lbnQpCiAKIEtQUk9CRV9FTlRSWShn ZW5lcmFsX3Byb3RlY3Rpb24pCiAJZXJyb3JlbnRyeSBkb19nZW5lcmFsX3Byb3RlY3Rpb24KK0VO RChnZW5lcmFsX3Byb3RlY3Rpb24pCiAJLnByZXZpb3VzIC50ZXh0CiAKIEVOVFJZKGFsaWdubWVu dF9jaGVjaykKIAllcnJvcmVudHJ5IGRvX2FsaWdubWVudF9jaGVjaworRU5EKGFsaWdubWVudF9j aGVjaykKIAogRU5UUlkoZGl2aWRlX2Vycm9yKQogCXplcm9lbnRyeSBkb19kaXZpZGVfZXJyb3IK K0VORChkaXZpZGVfZXJyb3IpCiAKIEVOVFJZKHNwdXJpb3VzX2ludGVycnVwdF9idWcpCiAJemVy b2VudHJ5IGRvX3NwdXJpb3VzX2ludGVycnVwdF9idWcKK0VORChzcHVyaW91c19pbnRlcnJ1cHRf YnVnKQogCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0UKIAkvKiBydW5zIG9uIGV4Y2VwdGlvbiBzdGFj ayAqLwpAQCAtMTAxNiwxMCArMTA1NSwxMiBAQCBFTlRSWShtYWNoaW5lX2NoZWNrKQogCXBhcmFu b2lkZW50cnkgZG9fbWFjaGluZV9jaGVjawogCWptcCBwYXJhbm9pZF9leGl0CiAJQ0ZJX0VORFBS T0MKK0VORChtYWNoaW5lX2NoZWNrKQogI2VuZGlmCiAKIEVOVFJZKGNhbGxfZGVidWcpCiAgICAg ICAgemVyb2VudHJ5IGRvX2NhbGxfZGVidWcKK0VORChjYWxsX2RlYnVnKQogCiBFTlRSWShjYWxs X3NvZnRpcnEpCiAJQ0ZJX1NUQVJUUFJPQwpAQCAtMTAzOCwzICsxMDc5LDQgQEAgRU5UUlkoY2Fs bF9zb2Z0aXJxKQogCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtOAogCXJldAogCUNGSV9FTkRQUk9D CitFTkRQUk9DKGNhbGxfc29mdGlycSkKLS0tIDIuNi4xNC9pbmNsdWRlL2xpbnV4L2thbGxzeW1z LmgJMjAwNS0xMC0yOCAwMjowMjowOC4wMDAwMDAwMDAgKzAyMDAKKysrIDIuNi4xNC1rYWxsc3lt cy9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgJMjAwNS0xMS0wNCAxNjoxOTozNC4wMDAwMDAwMDAg KzAxMDAKQEAgLTE5LDYgKzE5LDI1IEBAIGNvbnN0IGNoYXIgKmthbGxzeW1zX2xvb2t1cCh1bnNp Z25lZCBsb24KIAkJCSAgICB1bnNpZ25lZCBsb25nICpvZmZzZXQsCiAJCQkgICAgY2hhciAqKm1v ZG5hbWUsIGNoYXIgKm5hbWVidWYpOwogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKworI2lmIGRl ZmluZWQoRWxmX1NoZHIpICYmIGRlZmluZWQoRWxmX1N5bSkKK2NoYXIga2FsbHN5bXNfZWxmX3R5 cGUoY29uc3QgRWxmX1N5bSAqc3ltLAorCQkgICAgICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMs CisJCSAgICAgICBjb25zdCBjaGFyICpzZWNzdHJpbmdzKTsKKyNlbmRpZgorCitzdHJ1Y3QgbW9k dWxlOwordm9pZCBtb2R1bGVfaW5pdF9kb25lKHN0cnVjdCBtb2R1bGUgKik7CisKK3Vuc2lnbmVk IGxvbmcga2FsbHN5bXNfZmluZF9zeW1uYW1lKHN0cnVjdCBtb2R1bGUgKiwgY29uc3QgY2hhciAq KTsKKworY29uc3QgY2hhciAqa2FsbHN5bXNfZ2V0X2tzeW1ib2woc3RydWN0IG1vZHVsZSAqLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm9mZnNldCk7CisjZW5k aWYKKwogLyogUmVwbGFjZSAiJXMiIGluIGZvcm1hdCB3aXRoIGFkZHJlc3MsIGlmIGZvdW5kICov CiBleHRlcm4gdm9pZCBfX3ByaW50X3N5bWJvbChjb25zdCBjaGFyICpmbXQsIHVuc2lnbmVkIGxv bmcgYWRkcmVzcyk7CiAKQEAgLTY0LDQgKzgzLDEyIEBAIGRvIHsJCQkJCQlcCiAJX19wcmludF9z eW1ib2woZm10LCBhZGRyKTsJCVwKIH0gd2hpbGUoMCkKIAorI2lmIGRlZmluZWQoQ09ORklHX0tB TExTWU1TKSAmJiAhZGVmaW5lZChDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwpCit2b2lkIGth bGxzeW1zX2Vhcmx5X2luaXQodm9pZCk7Cit2b2lkIGthbGxzeW1zX2luaXRfZG9uZSh2b2lkKTsK KyNlbHNlCisjZGVmaW5lIGthbGxzeW1zX2Vhcmx5X2luaXQoKSAoKHZvaWQpMCkKKyNkZWZpbmUg a2FsbHN5bXNfaW5pdF9kb25lKCkgKCh2b2lkKTApCisjZW5kaWYKKwogI2VuZGlmIC8qX0xJTlVY X0tBTExTWU1TX0gqLwotLS0gMi42LjE0L2luY2x1ZGUvbGludXgvbGlua2FnZS5oCTIwMDUtMTAt MjggMDI6MDI6MDguMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTQta2FsbHN5bXMvaW5jbHVkZS9s aW51eC9saW5rYWdlLmgJMjAwNS0xMS0wNyAxMDo0NDozOC4wMDAwMDAwMDAgKzAxMDAKQEAgLTM5 LDYgKzM5LDE2IEBACiAgIEFMSUdOOyBcCiAgIG5hbWU6CiAKKyNpZmRlZiBDT05GSUdfS0FMTFNZ TVMKKyNkZWZpbmUgRU5EUFJPQyhuYW1lKSBcCisgIC50eXBlIG5hbWUsIEBmdW5jdGlvbjsgXAor ICBFTkQobmFtZSkKKyNkZWZpbmUgRU5EKG5hbWUpIFwKKyAgLnNpemUgbmFtZSwgLi1uYW1lCisj ZWxzZQorI2RlZmluZSBFTkRQUk9DKG5hbWUpCisjZGVmaW5lIEVORChuYW1lKQorI2VuZGlmCiAK ICNlbmRpZgogCi0tLSAyLjYuMTQvaW5jbHVkZS9saW51eC9tb2R1bGUuaAkyMDA1LTEwLTI4IDAy OjAyOjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42LjE0LWthbGxzeW1zL2luY2x1ZGUvbGludXgv bW9kdWxlLmgJMjAwNS0xMS0wNCAxNjoxOTozNC4wMDAwMDAwMDAgKzAxMDAKQEAgLTMwMSw3ICsz MDEsMTQgQEAgc3RydWN0IG1vZHVsZQogCS8qIFdlIGtlZXAgdGhlIHN5bWJvbCBhbmQgc3RyaW5n IHRhYmxlcyBmb3Iga2FsbHN5bXMuICovCiAJRWxmX1N5bSAqc3ltdGFiOwogCXVuc2lnbmVkIGxv bmcgbnVtX3N5bXRhYjsKLQljaGFyICpzdHJ0YWI7CisJY29uc3QgY2hhciAqc3RydGFiOworCisj IGlmbmRlZiBDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwKKwkvKiBBbmQgYWxzbyB0aGUgc2Vj dGlvbnMgYW5kIHRoZWlyIHN0cmluZyB0YWJsZS4gKi8KKwlFbGZfU2hkciAqc2VjdGlvbnM7CisJ dW5zaWduZWQgbG9uZyBudW1fc2VjdGlvbnM7CisJY29uc3QgY2hhciAqc2hzdHJ0YWI7CisjIGVu ZGlmCiAKIAkvKiBTZWN0aW9uIGF0dHJpYnV0ZXMgKi8KIAlzdHJ1Y3QgbW9kdWxlX3NlY3RfYXR0 cnMgKnNlY3RfYXR0cnM7Ci0tLSAyLjYuMTQvaW5pdC9LY29uZmlnCTIwMDUtMTAtMjggMDI6MDI6 MDguMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTQta2FsbHN5bXMvaW5pdC9LY29uZmlnCTIwMDUt MTEtMDcgMTA6NTE6MTkuMDAwMDAwMDAwICswMTAwCkBAIC0yNzIsOSArMjcyLDE5IEBAIGNvbmZp ZyBLQUxMU1lNUwogCSAgIHN5bWJvbGljIHN0YWNrIGJhY2t0cmFjZXMuIFRoaXMgaW5jcmVhc2Vz IHRoZSBzaXplIG9mIHRoZSBrZXJuZWwKIAkgICBzb21ld2hhdCwgYXMgYWxsIHN5bWJvbHMgaGF2 ZSB0byBiZSBsb2FkZWQgaW50byB0aGUga2VybmVsIGltYWdlLgogCitjb25maWcgS0FMTFNZTVNf VFJBRElUSU9OQUwKKwlib29sICJUcmFkaXRpb25hbCBrYWxsc3ltcyBzeW1ib2wgdGFibGUgZm9y bWF0IgorCWRlcGVuZHMgb24gS0FMTFNZTVMKKwlkZWZhdWx0ICFNT0RVTEVTCisJaGVscAorCSAg U2F5IE4gaGVyZSBpZiB5b3Ugd2FudCB0aGUga2VybmVsIHN5bWJvbCB0YWJsZSB0byBiZSBjb25z aXN0ZW50IHdpdGgKKwkgIHRoYXQgbG9hZGFibGUgbW9kdWxlcyB1c2UgKGkuZS4gdGhlIEVMRiBz eW1ib2wgdGFibGUgZXh0cmFjdGVkIGZyb20KKwkgIHRoZSBrZXJuZWwgYmluYXJ5KS4KKwogY29u ZmlnIEtBTExTWU1TX0FMTAogCWJvb2wgIkluY2x1ZGUgYWxsIHN5bWJvbHMgaW4ga2FsbHN5bXMi CiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgS0FMTFNZTVMKKwlkZWZhdWx0IERFQlVHX0tF Uk5FTAogCWhlbHAKIAkgICBOb3JtYWxseSBrYWxsc3ltcyBvbmx5IGNvbnRhaW5zIHRoZSBzeW1i b2xzIG9mIGZ1bmN0aW9ucywgZm9yIG5pY2VyCiAJICAgT09QUyBtZXNzYWdlcy4gIFNvbWUgZGVi dWdnZXJzIGNhbiB1c2Uga2FsbHN5bXMgZm9yIG90aGVyCkBAIC0yODMsNiArMjkzLDEzIEBAIGNv bmZpZyBLQUxMU1lNU19BTEwKIAogCSAgIFNheSBOLgogCitjb25maWcgS0FMTFNZTVNfU1RSSVBf R0VORVJBVEVECisJYm9vbCAiU3RyaXAgbWFjaGluZSBnZW5lcmF0ZWQgc3ltYm9scyBmcm9tIGth bGxzeW1zIiBpZiBLQUxMU1lNU19BTEwKKwlkZXBlbmRzIG9uIEtBTExTWU1TICYmICFLQUxMU1lN U19UUkFESVRJT05BTAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBOIGlmIHlvdSB3YW50IGth bGxzeW1zIHRvIHJldGFpbiBldmVuIG1hY2hpbmUgZ2VuZXJhdGVkIHN5bWJvbHMuCisgCiBjb25m aWcgS0FMTFNZTVNfRVhUUkFfUEFTUwogCWJvb2wgIkRvIGFuIGV4dHJhIGthbGxzeW1zIHBhc3Mi CiAJZGVwZW5kcyBvbiBLQUxMU1lNUwotLS0gMi42LjE0L2luaXQvbWFpbi5jCTIwMDUtMTAtMjgg MDI6MDI6MDguMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTQta2FsbHN5bXMvaW5pdC9tYWluLmMJ MjAwNS0xMS0wNyAxMDo1Mzo1My4wMDAwMDAwMDAgKzAxMDAKQEAgLTQ4MSw2ICs0ODEsNyBAQCBh c21saW5rYWdlIHZvaWQgX19pbml0IHN0YXJ0X2tlcm5lbCh2b2lkCiAJCSAgICZ1bmtub3duX2Jv b3RvcHRpb24pOwogCXNvcnRfbWFpbl9leHRhYmxlKCk7CiAJdHJhcF9pbml0KCk7CisJa2FsbHN5 bXNfZWFybHlfaW5pdCgpOwogCXJjdV9pbml0KCk7CiAJaW5pdF9JUlEoKTsKIAlwaWRoYXNoX2lu aXQoKTsKQEAgLTcwOCw2ICs3MDksNyBAQCBzdGF0aWMgaW50IGluaXQodm9pZCAqIHVudXNlZCkK IAkgKiB3ZSdyZSBlc3NlbnRpYWxseSB1cCBhbmQgcnVubmluZy4gR2V0IHJpZCBvZiB0aGUKIAkg KiBpbml0bWVtIHNlZ21lbnRzIGFuZCBzdGFydCB0aGUgdXNlci1tb2RlIHN0dWZmLi4KIAkgKi8K KwlrYWxsc3ltc19pbml0X2RvbmUoKTsKIAlmcmVlX2luaXRtZW0oKTsKIAl1bmxvY2tfa2VybmVs KCk7CiAJc3lzdGVtX3N0YXRlID0gU1lTVEVNX1JVTk5JTkc7Ci0tLSAyLjYuMTQva2VybmVsL2th bGxzeW1zLmMJMjAwNS0xMC0yOCAwMjowMjowOC4wMDAwMDAwMDAgKzAyMDAKKysrIDIuNi4xNC1r YWxsc3ltcy9rZXJuZWwva2FsbHN5bXMuYwkyMDA1LTExLTA4IDEyOjIyOjQ2LjAwMDAwMDAwMCAr MDEwMApAQCAtMTEsOCArMTEsOCBAQAogICogICAgICBDaGFuZ2VkIHRoZSBjb21wcmVzc2lvbiBt ZXRob2QgZnJvbSBzdGVtIGNvbXByZXNzaW9uIHRvICJ0YWJsZSBsb29rdXAiCiAgKiAgICAgIGNv bXByZXNzaW9uIChzZWUgc2NyaXB0cy9rYWxsc3ltcy5jIGZvciBhIG1vcmUgY29tcGxldGUgZGVz Y3JpcHRpb24pCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGlu dXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgv ZnMuaD4KQEAgLTI4LDE1ICsyOCw0MiBAQAogI2RlZmluZSBhbGxfdmFyIDAKICNlbmRpZgogCi0v KiBUaGVzZSB3aWxsIGJlIHJlLWxpbmtlZCBhZ2FpbnN0IHRoZWlyIHJlYWwgdmFsdWVzIGR1cmlu ZyB0aGUgc2Vjb25kIGxpbmsgc3RhZ2UgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGthbGxzeW1z X2FkZHJlc3Nlc1tdIF9fYXR0cmlidXRlX18oKHdlYWspKTsKLWV4dGVybiB1bnNpZ25lZCBsb25n IGthbGxzeW1zX251bV9zeW1zIF9fYXR0cmlidXRlX18oKHdlYWssc2VjdGlvbigiZGF0YSIpKSk7 Ci1leHRlcm4gdTgga2FsbHN5bXNfbmFtZXNbXSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CisjaWZk ZWYgQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMCitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9u ZyBrYWxsc3ltc19hZGRyZXNzZXNbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIGthbGxz eW1zX251bV9zeW1zIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oImRhdGEiKSkpOworZXh0ZXJuIGNv bnN0IHU4IGthbGxzeW1zX25hbWVzW107CisKK2V4dGVybiBjb25zdCB1OCBrYWxsc3ltc190b2tl bl90YWJsZVtdOworZXh0ZXJuIGNvbnN0IHUxNiBrYWxsc3ltc190b2tlbl9pbmRleFtdOwogCi1l eHRlcm4gdTgga2FsbHN5bXNfdG9rZW5fdGFibGVbXSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7Ci1l eHRlcm4gdTE2IGthbGxzeW1zX3Rva2VuX2luZGV4W10gX19hdHRyaWJ1dGVfXygod2VhaykpOwor ZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcga2FsbHN5bXNfbWFya2Vyc1tdOworI2Vsc2UKK2V4 dGVybiBFbGZfU2hkciBrYWxsc3ltc19zZWN0aW9uc1tdOworZXh0ZXJuIEVsZl9TeW0ga2FsbHN5 bXNfc3ltdGFiW107CitleHRlcm4gY29uc3QgY2hhciBrYWxsc3ltc19zaHN0cnRhYltdLCBrYWxs c3ltc19zdHJ0YWJbXTsKKyMgaWZkZWYgQ09ORklHX01PRFVMRVMKK3N0cnVjdCBtb2R1bGUga2Fs bHN5bXNfa2VybmVsX21vZHVsZSA9IHsKKwkubW9kdWxlX2NvcmUgPSBfdGV4dCwKKwkubW9kdWxl X2luaXQgPSBfX2luaXRfYmVnaW4sCisJLnN5bXRhYiA9IGthbGxzeW1zX3N5bXRhYiwKKwkuc3Ry dGFiID0ga2FsbHN5bXNfc3RydGFiLAorCS5zZWN0aW9ucyA9IGthbGxzeW1zX3NlY3Rpb25zLAor CS5zaHN0cnRhYiA9IGthbGxzeW1zX3Noc3RydGFiCit9OworIyBlbHNlCitjb25zdCB2b2lkKmNv bnN0IGthbGxzeW1zX21vZHVsZV9jb3JlID0gX3RleHQ7Citjb25zdCB2b2lkKmNvbnN0IGthbGxz eW1zX21vZHVsZV9pbml0ID0gX19pbml0X2JlZ2luOworc2l6ZV90IGthbGxzeW1zX2NvcmVfc2l6 ZSA9IDAsIGthbGxzeW1zX2luaXRfc2l6ZSA9IDA7CitzdGF0aWMgc2l6ZV90IGthbGxzeW1zX2Nv cmVfdGV4dF9zaXplLCBrYWxsc3ltc19pbml0X3RleHRfc2l6ZTsKK3NpemVfdCBrYWxsc3ltc19u dW1fc2VjdGlvbnMgPSAwLCBrYWxsc3ltc19udW1fc3ltdGFiID0gMDsKKyMgIGRlZmluZSBLQUxM U1lNU19WQVIobW9kLCB2YXIpIGthbGxzeW1zXyMjdmFyCisjIGVuZGlmCisjIGRlZmluZSBrYWxs c3ltc19udW1fc3ltcyBLQUxMU1lNU19WQVIoJmthbGxzeW1zX2tlcm5lbF9tb2R1bGUsIG51bV9z eW10YWIpCisjZW5kaWYKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2FsbHN5bXNfbWFya2Vyc1td IF9fYXR0cmlidXRlX18oKHdlYWspKTsKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworIyBkZWZpbmUg S0FMTFNZTVNfVkFSKG1vZCwgdmFyKSAobW9kKS0+dmFyCisjZW5kaWYKIAogc3RhdGljIGlubGlu ZSBpbnQgaXNfa2VybmVsX2luaXR0ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKQEAgLTY4LDEy ICs5NSwzNiBAQCBzdGF0aWMgaW5saW5lIGludCBpc19rZXJuZWwodW5zaWduZWQgbG9uCiAJcmV0 dXJuIGluX2dhdGVfYXJlYV9ub190YXNrKGFkZHIpOwogfQogCitzdGF0aWMgaW5saW5lIGludCB3 aXRoaW4odW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzdGFydCwgdW5zaWduZWQgbG9u ZyBzaXplKQoreworCXJldHVybiAoKHZvaWQgKilhZGRyID49IHN0YXJ0ICYmICh2b2lkICopYWRk ciA8IHN0YXJ0ICsgc2l6ZSk7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSB8fCAh ZGVmaW5lZChDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwpCisjIGlmbmRlZiBDT05GSUdfTU9E VUxFUworc3RhdGljIGlubGluZQorIyAgZGVmaW5lIGthbGxzeW1zX2ZpbmRfc3ltbmFtZShtLCBu KSBrYWxsc3ltc19maW5kX3N5bW5hbWUobikKKyMgZW5kaWYKK3Vuc2lnbmVkIGxvbmcga2FsbHN5 bXNfZmluZF9zeW1uYW1lKAorCXN0cnVjdCBtb2R1bGUgKm1vZCwKKwljb25zdCBjaGFyICpuYW1l KQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBLQUxMU1lNU19WQVIo bW9kLCBudW1fc3ltdGFiKTsgaSsrKQorCQlpZiAoc3RyY21wKG5hbWUsIEtBTExTWU1TX1ZBUiht b2QsIHN0cnRhYikgKyBLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X25hbWUpID09IDAp CisJCQlyZXR1cm4gS0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtpXS5zdF92YWx1ZTsKKwlyZXR1 cm4gMDsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMCiAv KiBleHBhbmQgYSBjb21wcmVzc2VkIHN5bWJvbCBkYXRhIGludG8gdGhlIHJlc3VsdGluZyB1bmNv bXByZXNzZWQgc3RyaW5nLAogICAgZ2l2ZW4gdGhlIG9mZnNldCB0byB3aGVyZSB0aGUgc3ltYm9s IGlzIGluIHRoZSBjb21wcmVzc2VkIHN0cmVhbSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBrYWxs c3ltc19leHBhbmRfc3ltYm9sKHVuc2lnbmVkIGludCBvZmYsIGNoYXIgKnJlc3VsdCkKIHsKIAlp bnQgbGVuLCBza2lwcGVkX2ZpcnN0ID0gMDsKLQl1OCAqdHB0ciwgKmRhdGE7CisJY29uc3QgdTgg KnRwdHIsICpkYXRhOwogCiAJLyogZ2V0IHRoZSBjb21wcmVzc2VkIHN5bWJvbCBsZW5ndGggZnJv bSB0aGUgZmlyc3Qgc3ltYm9sIGJ5dGUgKi8KIAlkYXRhID0gJmthbGxzeW1zX25hbWVzW29mZl07 CkBAIC0xMjEsNyArMTcyLDcgQEAgc3RhdGljIGNoYXIga2FsbHN5bXNfZ2V0X3N5bWJvbF90eXBl KHVucwogICoga2FsbHN5bXMgYXJyYXkgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3N5bWJv bF9vZmZzZXQodW5zaWduZWQgbG9uZyBwb3MpCiB7Ci0JdTggKm5hbWU7CisJY29uc3QgdTggKm5h bWU7CiAJaW50IGk7CiAKIAkvKiB1c2UgdGhlIGNsb3Nlc3QgbWFya2VyIHdlIGhhdmUuIFdlIGhh dmUgbWFya2VycyBldmVyeSAyNTYgcG9zaXRpb25zLApAQCAtMTM3LDEwICsxODgsMTIgQEAgc3Rh dGljIHVuc2lnbmVkIGludCBnZXRfc3ltYm9sX29mZnNldCh1bgogCiAJcmV0dXJuIG5hbWUgLSBr YWxsc3ltc19uYW1lczsKIH0KKyNlbmRpZgogCiAvKiBMb29rdXAgdGhlIGFkZHJlc3MgZm9yIHRo aXMgc3ltYm9sLiBSZXR1cm5zIDAgaWYgbm90IGZvdW5kLiAqLwogdW5zaWduZWQgbG9uZyBrYWxs c3ltc19sb29rdXBfbmFtZShjb25zdCBjaGFyICpuYW1lKQogeworI2lmZGVmIENPTkZJR19LQUxM U1lNU19UUkFESVRJT05BTAogCWNoYXIgbmFtZWJ1ZltLU1lNX05BTUVfTEVOKzFdOwogCXVuc2ln bmVkIGxvbmcgaTsKIAl1bnNpZ25lZCBpbnQgb2ZmOwpAQCAtMTUxLDEwICsyMDQsNzggQEAgdW5z aWduZWQgbG9uZyBrYWxsc3ltc19sb29rdXBfbmFtZShjb25zdAogCQlpZiAoc3RyY21wKG5hbWVi dWYsIG5hbWUpID09IDApCiAJCQlyZXR1cm4ga2FsbHN5bXNfYWRkcmVzc2VzW2ldOwogCX0KKyNl bHNlCisJdW5zaWduZWQgbG9uZyBrYWRkciA9IGthbGxzeW1zX2ZpbmRfc3ltbmFtZSgma2FsbHN5 bXNfa2VybmVsX21vZHVsZSwgbmFtZSk7CisKKwlpZiAoa2FkZHIpCisJCXJldHVybiBrYWRkcjsK KyNlbmRpZgogCXJldHVybiBtb2R1bGVfa2FsbHN5bXNfbG9va3VwX25hbWUobmFtZSk7CiB9CiBF WFBPUlRfU1lNQk9MX0dQTChrYWxsc3ltc19sb29rdXBfbmFtZSk7CiAKKyNpZiBkZWZpbmVkKENP TkZJR19NT0RVTEVTKSB8fCAhZGVmaW5lZChDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwpCisv KgorICogVGhpcyBpZ25vcmVzIHRoZSBpbnRlbnNlbHkgYW5ub3lpbmcgIm1hcHBpbmcgc3ltYm9s cyIgZm91bmQKKyAqIGluIEFSTSBFTEYgZmlsZXM6ICRhLCAkdCBhbmQgJGQuCisgKi8KK3N0YXRp YyBpbmxpbmUgaW50IGlzX2FybV9tYXBwaW5nX3N5bWJvbChjb25zdCBjaGFyICpzdHIpCit7Cisj aWZkZWYgQ09ORklHX0FSTQorCXJldHVybiBzdHJbMF0gPT0gJyQnICYmIHN0cmNocigiYXRkIiwg c3RyWzFdKQorCSAgICAgICAmJiAoc3RyWzJdID09ICdcMCcgfHwgc3RyWzJdID09ICcuJyk7Cisj ZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKyMgaWZuZGVmIENPTkZJR19NT0RVTEVTCitz dGF0aWMgaW5saW5lCisjICBkZWZpbmUga2FsbHN5bXNfZ2V0X2tzeW1ib2wobSwgYSwgcywgbykg a2FsbHN5bXNfZ2V0X2tzeW1ib2woYSwgcywgbykKKyMgZW5kaWYKK2NvbnN0IGNoYXIgKmthbGxz eW1zX2dldF9rc3ltYm9sKHN0cnVjdCBtb2R1bGUgKm1vZCwKKwkJCSAgICAgICB1bnNpZ25lZCBs b25nIGFkZHIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCSAgICAgICB1bnNp Z25lZCBsb25nICpvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBpLCBiZXN0ID0gMDsKKwl1bnNp Z25lZCBsb25nIG5leHR2YWw7CisKKwkvKiBBdCB3b3JzZSwgbmV4dCB2YWx1ZSBpcyBhdCBlbmQg b2YgbW9kdWxlICovCisJaWYgKHdpdGhpbihhZGRyLCBLQUxMU1lNU19WQVIobW9kLCBtb2R1bGVf aW5pdCksIEtBTExTWU1TX1ZBUihtb2QsIGluaXRfc2l6ZSkpKQorCQluZXh0dmFsID0gKHVuc2ln bmVkIGxvbmcpS0FMTFNZTVNfVkFSKG1vZCwgbW9kdWxlX2luaXQpICsgS0FMTFNZTVNfVkFSKG1v ZCwgaW5pdF90ZXh0X3NpemUpOworCWVsc2UKKwkJbmV4dHZhbCA9ICh1bnNpZ25lZCBsb25nKUtB TExTWU1TX1ZBUihtb2QsIG1vZHVsZV9jb3JlKSArIEtBTExTWU1TX1ZBUihtb2QsIGNvcmVfdGV4 dF9zaXplKTsKKworCS8qIFNjYW4gZm9yIGNsb3Nlc3QgcHJlY2VlZGluZyBzeW1ib2wsIGFuZCBu ZXh0IHN5bWJvbC4gKEVMRgorICAgICAgICAgICBzdGFydHMgcmVhbCBzeW1ib2xzIGF0IDEpLiAq LworCWZvciAoaSA9IDE7IGkgPCBLQUxMU1lNU19WQVIobW9kLCBudW1fc3ltdGFiKTsgaSsrKSB7 CisJCWlmIChLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X3NobmR4ID09IFNITl9VTkRF RikKKwkJCWNvbnRpbnVlOworCisJCS8qIFdlIGlnbm9yZSB1bm5hbWVkIHN5bWJvbHM6IHRoZXkn cmUgdW5pbmZvcm1hdGl2ZQorCQkgKiBhbmQgaW5zZXJ0ZWQgYXQgYSB3aGltLiAqLworCQlpZiAo S0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtpXS5zdF92YWx1ZSA8PSBhZGRyCisJCSAgICAmJiBL QUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X3ZhbHVlID4gS0FMTFNZTVNfVkFSKG1vZCwg c3ltdGFiKVtiZXN0XS5zdF92YWx1ZQorCQkgICAgJiYgKihLQUxMU1lNU19WQVIobW9kLCBzdHJ0 YWIpICsgS0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtpXS5zdF9uYW1lKSAhPSAnXDAnCisJCSAg ICAmJiAhaXNfYXJtX21hcHBpbmdfc3ltYm9sKEtBTExTWU1TX1ZBUihtb2QsIHN0cnRhYikgKyBL QUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X25hbWUpKQorCQkJYmVzdCA9IGk7CisJCWlm IChLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X3ZhbHVlID4gYWRkcgorCQkgICAgJiYg S0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtpXS5zdF92YWx1ZSA8IG5leHR2YWwKKwkJICAgICYm ICooS0FMTFNZTVNfVkFSKG1vZCwgc3RydGFiKSArIEtBTExTWU1TX1ZBUihtb2QsIHN5bXRhYilb aV0uc3RfbmFtZSkgIT0gJ1wwJworCQkgICAgJiYgIWlzX2FybV9tYXBwaW5nX3N5bWJvbChLQUxM U1lNU19WQVIobW9kLCBzdHJ0YWIpICsgS0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtpXS5zdF9u YW1lKSkKKwkJCW5leHR2YWwgPSBLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2ldLnN0X3ZhbHVl OworCX0KKworCWlmICghYmVzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwkqc2l6ZSA9IG5leHR2YWwg LSBLQUxMU1lNU19WQVIobW9kLCBzeW10YWIpW2Jlc3RdLnN0X3ZhbHVlOworCSpvZmZzZXQgPSBh ZGRyIC0gS0FMTFNZTVNfVkFSKG1vZCwgc3ltdGFiKVtiZXN0XS5zdF92YWx1ZTsKKwlyZXR1cm4g S0FMTFNZTVNfVkFSKG1vZCwgc3RydGFiKSArIEtBTExTWU1TX1ZBUihtb2QsIHN5bXRhYilbYmVz dF0uc3RfbmFtZTsKK30KKyNlbmRpZgorCiAvKgogICogTG9va3VwIGFuIGFkZHJlc3MKICAqIC0g bW9kbmFtZSBpcyBzZXQgdG8gTlVMTCBpZiBpdCdzIGluIHRoZSBrZXJuZWwKQEAgLTE2NywxOCAr Mjg4LDE4IEBAIGNvbnN0IGNoYXIgKmthbGxzeW1zX2xvb2t1cCh1bnNpZ25lZCBsb24KIAkJCSAg ICB1bnNpZ25lZCBsb25nICpvZmZzZXQsCiAJCQkgICAgY2hhciAqKm1vZG5hbWUsIGNoYXIgKm5h bWVidWYpCiB7Ci0JdW5zaWduZWQgbG9uZyBpLCBsb3csIGhpZ2gsIG1pZDsKIAljb25zdCBjaGFy ICptc3ltOwogCi0JLyogVGhpcyBrZXJuZWwgc2hvdWxkIG5ldmVyIGhhZCBiZWVuIGJvb3RlZC4g Ki8KLQlCVUdfT04oIWthbGxzeW1zX2FkZHJlc3Nlcyk7Ci0KIAluYW1lYnVmW0tTWU1fTkFNRV9M RU5dID0gMDsKIAluYW1lYnVmWzBdID0gMDsKIAotCWlmICgoYWxsX3ZhciAmJiBpc19rZXJuZWwo YWRkcikpIHx8Ci0JICAgICghYWxsX3ZhciAmJiAoaXNfa2VybmVsX3RleHQoYWRkcikgfHwgaXNf a2VybmVsX2luaXR0ZXh0KGFkZHIpIHx8Ci0JCQkJaXNfa2VybmVsX2V4dHJhdGV4dChhZGRyKSkp KSB7CisJaWYgKGFsbF92YXIKKwkgICAgPyBpc19rZXJuZWwoYWRkcikKKwkgICAgOiBpc19rZXJu ZWxfdGV4dChhZGRyKQorCSAgICAgIHx8IGlzX2tlcm5lbF9pbml0dGV4dChhZGRyKQorCSAgICAg IHx8IGlzX2tlcm5lbF9leHRyYXRleHQoYWRkcikpIHsKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVNf VFJBRElUSU9OQUwKKwkJdW5zaWduZWQgbG9uZyBpLCBsb3csIGhpZ2gsIG1pZDsKIAkJdW5zaWdu ZWQgbG9uZyBzeW1ib2xfZW5kID0gMDsKIAogCQkvKiBkbyBhIGJpbmFyeSBzZWFyY2ggb24gdGhl IHNvcnRlZCBrYWxsc3ltc19hZGRyZXNzZXMgYXJyYXkgKi8KQEAgLTIxOSw2ICszNDAsMTAgQEAg Y29uc3QgY2hhciAqa2FsbHN5bXNfbG9va3VwKHVuc2lnbmVkIGxvbgogCQkqbW9kbmFtZSA9IE5V TEw7CiAJCSpvZmZzZXQgPSBhZGRyIC0ga2FsbHN5bXNfYWRkcmVzc2VzW2xvd107CiAJCXJldHVy biBuYW1lYnVmOworI2Vsc2UKKwkJKm1vZG5hbWUgPSBOVUxMOworCQlyZXR1cm4ga2FsbHN5bXNf Z2V0X2tzeW1ib2woJmthbGxzeW1zX2tlcm5lbF9tb2R1bGUsIGFkZHIsIHN5bWJvbHNpemUsIG9m ZnNldCk7CisjZW5kaWYKIAl9CiAKIAkvKiBzZWUgaWYgaXQncyBpbiBhIG1vZHVsZSAqLwpAQCAt MjM2LDMwICszNjEsNDYgQEAgdm9pZCBfX3ByaW50X3N5bWJvbChjb25zdCBjaGFyICpmbXQsIHVu cwogCWNvbnN0IGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7CiAJY2hh ciBuYW1lYnVmW0tTWU1fTkFNRV9MRU4rMV07Ci0JY2hhciBidWZmZXJbc2l6ZW9mKCIlcyslI2x4 LyUjbHggWyVzXSIpICsgS1NZTV9OQU1FX0xFTiArCi0JCSAgICAyKihCSVRTX1BFUl9MT05HKjMv MTApICsgTU9EVUxFX05BTUVfTEVOICsgMV07CiAKIAluYW1lID0ga2FsbHN5bXNfbG9va3VwKGFk ZHJlc3MsICZzaXplLCAmb2Zmc2V0LCAmbW9kbmFtZSwgbmFtZWJ1Zik7CiAKLQlpZiAoIW5hbWUp Ci0JCXNwcmludGYoYnVmZmVyLCAiMHglbHgiLCBhZGRyZXNzKTsKLQllbHNlIHsKLQkJaWYgKG1v ZG5hbWUpCi0JCQlzcHJpbnRmKGJ1ZmZlciwgIiVzKyUjbHgvJSNseCBbJXNdIiwgbmFtZSwgb2Zm c2V0LAotCQkJCXNpemUsIG1vZG5hbWUpOwotCQllbHNlCi0JCQlzcHJpbnRmKGJ1ZmZlciwgIiVz KyUjbHgvJSNseCIsIG5hbWUsIG9mZnNldCwgc2l6ZSk7CisJaWYgKCFuYW1lKSB7CisJCWNoYXIg YWRkcnN0cltzaXplb2YoIjB4JWx4IikgKyAoQklUU19QRVJfTE9ORyozLzEwKV07CisKKwkJc3By aW50ZihhZGRyc3RyLCAiMHglbHgiLCBhZGRyZXNzKTsKKwkJcHJpbnRrKGZtdCwgYWRkcnN0cik7 CisJCXJldHVybjsKKwl9CisKKwlpZiAobW9kbmFtZSkgeworCQkvKiBUaGlzIGlzIHByZXR0eSBz bWFsbC4gKi8KKwkJY2hhciBidWZmZXJbc2l6ZW9mKCIlcyslI2x4LyUjbHggWyVzXSIpCisJCQkg ICArIHN0cmxlbihuYW1lKSArIDIqKEJJVFNfUEVSX0xPTkcqMy8xMCkKKwkJCSAgICsgc3RybGVu KG1vZG5hbWUpXTsKKworCQlzcHJpbnRmKGJ1ZmZlciwgIiVzKyUjbHgvJSNseCBbJXNdIiwKKwkJ CW5hbWUsIG9mZnNldCwgc2l6ZSwgbW9kbmFtZSk7CisJCXByaW50ayhmbXQsIGJ1ZmZlcik7CisJ fSBlbHNlIHsKKwkJY2hhciBidWZmZXJbc2l6ZW9mKCIlcyslI2x4LyUjbHgiKQorCQkJICAgKyBz dHJsZW4obmFtZSkgKyAyKihCSVRTX1BFUl9MT05HKjMvMTApXTsKKworCQlzcHJpbnRmKGJ1ZmZl ciwgIiVzKyUjbHgvJSNseCIsIG5hbWUsIG9mZnNldCwgc2l6ZSk7CisJCXByaW50ayhmbXQsIGJ1 ZmZlcik7CiAJfQotCXByaW50ayhmbXQsIGJ1ZmZlcik7CiB9CiAKIC8qIFRvIGF2b2lkIHVzaW5n IGdldF9zeW1ib2xfb2Zmc2V0IGZvciBldmVyeSBzeW1ib2wsIHdlIGNhcnJ5IHByZWZpeCBhbG9u Zy4gKi8KIHN0cnVjdCBrYWxsc3ltX2l0ZXIKIHsKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVNfVFJB RElUSU9OQUwKIAlsb2ZmX3QgcG9zOworI2VuZGlmCiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJ dW5zaWduZWQgbG9uZyB2YWx1ZTsKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwK IAl1bnNpZ25lZCBpbnQgbmFtZW9mZjsgLyogSWYgaXRlcmF0aW5nIGluIGNvcmUga2VybmVsIHN5 bWJvbHMgKi8KKyNlbmRpZgogCWNoYXIgdHlwZTsKIAljaGFyIG5hbWVbS1NZTV9OQU1FX0xFTisx XTsKIH07CkBAIC0yNzEsOSArNDEyLDkgQEAgc3RhdGljIHZvaWQgdXBjYXNlX2lmX2dsb2JhbChz dHJ1Y3Qga2FsbAogCQlpdGVyLT50eXBlICs9ICdBJyAtICdhJzsKIH0KIAotc3RhdGljIGludCBn ZXRfa3N5bWJvbF9tb2Qoc3RydWN0IGthbGxzeW1faXRlciAqaXRlcikKK3N0YXRpYyBpbnQgZ2V0 X2tzeW1ib2xfbW9kKHN0cnVjdCBrYWxsc3ltX2l0ZXIgKml0ZXIsIGxvZmZfdCBwb3MpCiB7Ci0J aXRlci0+b3duZXIgPSBtb2R1bGVfZ2V0X2thbGxzeW0oaXRlci0+cG9zIC0ga2FsbHN5bXNfbnVt X3N5bXMsCisJaXRlci0+b3duZXIgPSBtb2R1bGVfZ2V0X2thbGxzeW0ocG9zLAogCQkJCQkgJml0 ZXItPnZhbHVlLAogCQkJCQkgJml0ZXItPnR5cGUsIGl0ZXItPm5hbWUpOwogCWlmIChpdGVyLT5v d25lciA9PSBOVUxMKQpAQCAtMjgzLDYgKzQyNCw3IEBAIHN0YXRpYyBpbnQgZ2V0X2tzeW1ib2xf bW9kKHN0cnVjdCBrYWxsc3kKIAlyZXR1cm4gMTsKIH0KIAorI2lmZGVmIENPTkZJR19LQUxMU1lN U19UUkFESVRJT05BTAogLyogUmV0dXJucyBzcGFjZSB0byBuZXh0IG5hbWUuICovCiBzdGF0aWMg dW5zaWduZWQgbG9uZyBnZXRfa3N5bWJvbF9jb3JlKHN0cnVjdCBrYWxsc3ltX2l0ZXIgKml0ZXIp CiB7CkBAIC0zMDQsMjYgKzQ0Niw4NyBAQCBzdGF0aWMgdm9pZCByZXNldF9pdGVyKHN0cnVjdCBr YWxsc3ltX2l0CiAJaXRlci0+bmFtZW9mZiA9IGdldF9zeW1ib2xfb2Zmc2V0KG5ld19wb3MpOwog CWl0ZXItPnBvcyA9IG5ld19wb3M7CiB9CisjZWxzZQorIyBkZWZpbmUgcmVzZXRfaXRlcihpdGVy LCBuZXdfcG9zKSAoKHZvaWQpKChpdGVyKS0+bmFtZVswXSA9ICdcMCcpKQorI2VuZGlmCiAKIC8q IFJldHVybnMgZmFsc2UgaWYgcG9zIGF0IG9yIHBhc3QgZW5kIG9mIGZpbGUuICovCiBzdGF0aWMg aW50IHVwZGF0ZV9pdGVyKHN0cnVjdCBrYWxsc3ltX2l0ZXIgKml0ZXIsIGxvZmZfdCBwb3MpCiB7 CiAJLyogTW9kdWxlIHN5bWJvbHMgY2FuIGJlIGFjY2Vzc2VkIHJhbmRvbWx5LiAqLwotCWlmIChw b3MgPj0ga2FsbHN5bXNfbnVtX3N5bXMpIHsKLQkJaXRlci0+cG9zID0gcG9zOwotCQlyZXR1cm4g Z2V0X2tzeW1ib2xfbW9kKGl0ZXIpOwotCX0KKwlpZiAocG9zID49IGthbGxzeW1zX251bV9zeW1z KQorCQlyZXR1cm4gZ2V0X2tzeW1ib2xfbW9kKGl0ZXIsIHBvcyAtIGthbGxzeW1zX251bV9zeW1z KTsKIAkKKyNpZmRlZiBDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwKIAkvKiBJZiB3ZSdyZSBu b3Qgb24gdGhlIGRlc2lyZWQgcG9zaXRpb24sIHJlc2V0IHRvIG5ldyBwb3NpdGlvbi4gKi8KIAlp ZiAocG9zICE9IGl0ZXItPnBvcykKIAkJcmVzZXRfaXRlcihpdGVyLCBwb3MpOwogCiAJaXRlci0+ bmFtZW9mZiArPSBnZXRfa3N5bWJvbF9jb3JlKGl0ZXIpOwogCWl0ZXItPnBvcysrOworI2Vsc2UK KwlpdGVyLT5vd25lciA9IE5VTEw7CisJaXRlci0+dmFsdWUgPSBLQUxMU1lNU19WQVIoJmthbGxz eW1zX2tlcm5lbF9tb2R1bGUsIHN5bXRhYilbcG9zXS5zdF92YWx1ZTsKKwlpdGVyLT50eXBlID0g S0FMTFNZTVNfVkFSKCZrYWxsc3ltc19rZXJuZWxfbW9kdWxlLCBzeW10YWIpW3Bvc10uc3Rfb3Ro ZXI7CisJc3RybmNweShpdGVyLT5uYW1lLAorCQlLQUxMU1lNU19WQVIoJmthbGxzeW1zX2tlcm5l bF9tb2R1bGUsIHN0cnRhYikgKyBLQUxMU1lNU19WQVIoJmthbGxzeW1zX2tlcm5lbF9tb2R1bGUs IHN5bXRhYilbcG9zXS5zdF9uYW1lLAorCQkxMjcpOworCXVwY2FzZV9pZl9nbG9iYWwoaXRlcik7 CisjZW5kaWYKIAogCXJldHVybiAxOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykg fHwgIWRlZmluZWQoQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMKQorIyBpZm5kZWYgQVJDSF9T SEZfU01BTEwKKyMgIGRlZmluZSBBUkNIX1NIRl9TTUFMTCAwCisjIGVuZGlmCisvKiBBcyBwZXIg bm0gKi8KKyMgaWZuZGVmIENPTkZJR19NT0RVTEVTCitzdGF0aWMgaW5saW5lIF9faW5pdAorIyBl bmRpZgorY2hhciBrYWxsc3ltc19lbGZfdHlwZShjb25zdCBFbGZfU3ltICpzeW0sCisJCSAgICAg Y29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisJCSAgICAgY29uc3QgY2hhciAqc2Vjc3RyaW5ncykK K3sKKwlpZiAoRUxGX1NUX0JJTkQoc3ltLT5zdF9pbmZvKSA9PSBTVEJfV0VBSykgeworCQlpZiAo RUxGX1NUX1RZUEUoc3ltLT5zdF9pbmZvKSA9PSBTVFRfT0JKRUNUKQorCQkJcmV0dXJuICd2JzsK KwkJZWxzZQorCQkJcmV0dXJuICd3JzsKKwl9CisJaWYgKHN5bS0+c3Rfc2huZHggPT0gU0hOX1VO REVGKQorCQlyZXR1cm4gJ1UnOworCWlmIChzeW0tPnN0X3NobmR4ID09IFNITl9BQlMpCisJCXJl dHVybiAnYSc7CisJaWYgKHN5bS0+c3Rfc2huZHggPj0gU0hOX0xPUkVTRVJWRSkKKwkJcmV0dXJu ICc/JzsKKwlpZiAoc2VjaGRycykgeworCQlpZiAoc2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF9m bGFncyAmIFNIRl9FWEVDSU5TVFIpCisJCQlyZXR1cm4gJ3QnOworCQlpZiAoc2VjaGRyc1tzeW0t PnN0X3NobmR4XS5zaF9mbGFncyAmIFNIRl9BTExPQworCQkgICAgJiYgc2VjaGRyc1tzeW0tPnN0 X3NobmR4XS5zaF90eXBlICE9IFNIVF9OT0JJVFMpIHsKKwkJCWlmICghKHNlY2hkcnNbc3ltLT5z dF9zaG5keF0uc2hfZmxhZ3MgJiBTSEZfV1JJVEUpKQorCQkJCXJldHVybiAncic7CisJCQllbHNl IGlmIChzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX2ZsYWdzICYgQVJDSF9TSEZfU01BTEwpCisJ CQkJcmV0dXJuICdnJzsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gJ2QnOworCQl9CisJCWlmIChzZWNo ZHJzW3N5bS0+c3Rfc2huZHhdLnNoX3R5cGUgPT0gU0hUX05PQklUUykgeworCQkJaWYgKHNlY2hk cnNbc3ltLT5zdF9zaG5keF0uc2hfZmxhZ3MgJiBBUkNIX1NIRl9TTUFMTCkKKwkJCQlyZXR1cm4g J3MnOworCQkJZWxzZQorCQkJCXJldHVybiAnYic7CisJCX0KKwkJaWYgKHN0cm5jbXAoc2Vjc3Ry aW5ncyArIHNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfbmFtZSwKKwkJCSAgICAiLmRlYnVnIiwg c3RybGVuKCIuZGVidWciKSkgPT0gMCkKKwkJCXJldHVybiAnbic7CisJfQorCXJldHVybiAnPyc7 Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgKnNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZv aWQgKnAsIGxvZmZfdCAqcG9zKQogewogCSgqcG9zKSsrOwpAQCAtNDE3LDQgKzYyMCw3MyBAQCBz dGF0aWMgaW50IF9faW5pdCBrYWxsc3ltc19pbml0KHZvaWQpCiB9CiBfX2luaXRjYWxsKGthbGxz eW1zX2luaXQpOwogCisKKyNpZm5kZWYgQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMCisKK2V4 dGVybiBjb25zdCBzaXplX3Qga2FsbHN5bXNfc2l6ZV9zZWN0aW9ucywga2FsbHN5bXNfc2l6ZV9z eW10YWI7CitleHRlcm4gY29uc3Qgc2l6ZV90IGthbGxzeW1zX3NpemVfc2hzdHJ0YWIsIGthbGxz eW1zX3NpemVfc3RydGFiOworCit2b2lkIF9faW5pdCBrYWxsc3ltc19lYXJseV9pbml0KCkgewor CUVsZl9TaGRyKnNlY3Rpb247CisJRWxmX1N5bSpzeW1ib2w7CisKKwlLQUxMU1lNU19WQVIoJmth bGxzeW1zX2tlcm5lbF9tb2R1bGUsIGNvcmVfc2l6ZSkgPSBfZW5kIC0gX3RleHQ7CisJS0FMTFNZ TVNfVkFSKCZrYWxsc3ltc19rZXJuZWxfbW9kdWxlLCBjb3JlX3RleHRfc2l6ZSkgPSBfZXRleHQg LSBfc3RleHQ7CisJS0FMTFNZTVNfVkFSKCZrYWxsc3ltc19rZXJuZWxfbW9kdWxlLCBpbml0X3Np emUpID0gX19pbml0X2VuZCAtIF9faW5pdF9iZWdpbjsKKwlLQUxMU1lNU19WQVIoJmthbGxzeW1z X2tlcm5lbF9tb2R1bGUsIGluaXRfdGV4dF9zaXplKSA9IF9laW5pdHRleHQgLSBfc2luaXR0ZXh0 OworCisJQlVHX09OKGthbGxzeW1zX3NpemVfc2VjdGlvbnMgPD0gc2l6ZW9mKCprYWxsc3ltc19z ZWN0aW9ucykpOworCUJVR19PTihrYWxsc3ltc19zaXplX3NlY3Rpb25zICUgc2l6ZW9mKCprYWxs c3ltc19zZWN0aW9ucykpOworCUJVR19PTihrYWxsc3ltc19zaXplX3Noc3RydGFiIDw9IDApOwor CUJVR19PTigqa2FsbHN5bXNfc2hzdHJ0YWIpOworCUJVR19PTihrYWxsc3ltc19zaHN0cnRhYltr YWxsc3ltc19zaXplX3Noc3RydGFiIC0gMV0pOworCWZvcihzZWN0aW9uID0ga2FsbHN5bXNfc2Vj dGlvbnMgKyAxOyAodW5zaWduZWQgbG9uZylzZWN0aW9uIDwgKHVuc2lnbmVkIGxvbmcpa2FsbHN5 bXNfc2VjdGlvbnMgKyBrYWxsc3ltc19zaXplX3NlY3Rpb25zOyArK3NlY3Rpb24pCisJCWlmKHNl Y3Rpb24tPnNoX25hbWUgPj0ga2FsbHN5bXNfc2l6ZV9zaHN0cnRhYikKKwkJCXNlY3Rpb24tPnNo X25hbWUgPSAwOworCUtBTExTWU1TX1ZBUigma2FsbHN5bXNfa2VybmVsX21vZHVsZSwgbnVtX3Nl Y3Rpb25zKSA9IGthbGxzeW1zX3NpemVfc2VjdGlvbnMgLyBzaXplb2YoKmthbGxzeW1zX3NlY3Rp b25zKTsKKworCUJVR19PTihrYWxsc3ltc19zaXplX3N5bXRhYiA8PSBzaXplb2YoKmthbGxzeW1z X3N5bXRhYikpOworCUJVR19PTihrYWxsc3ltc19zaXplX3N5bXRhYiAlIHNpemVvZigqa2FsbHN5 bXNfc3ltdGFiKSk7CisJQlVHX09OKGthbGxzeW1zX3NpemVfc3RydGFiIDw9IDApOworCUJVR19P Tigqa2FsbHN5bXNfc3RydGFiKTsKKwlCVUdfT04oa2FsbHN5bXNfc3RydGFiW2thbGxzeW1zX3Np emVfc3RydGFiIC0gMV0pOworCWZvcihzeW1ib2wgPSBrYWxsc3ltc19zeW10YWIgKyAxOyAodW5z aWduZWQgbG9uZylzeW1ib2wgPCAodW5zaWduZWQgbG9uZylrYWxsc3ltc19zeW10YWIgKyBrYWxs c3ltc19zaXplX3N5bXRhYjsgKytzeW1ib2wpIHsKKwkJaWYoc3ltYm9sLT5zdF9uYW1lID49IGth bGxzeW1zX3NpemVfc3RydGFiKQorCQkJc3ltYm9sLT5zdF9uYW1lID0gMDsKKwkJc3ltYm9sLT5z dF9vdGhlciA9IGthbGxzeW1zX2VsZl90eXBlKHN5bWJvbCwga2FsbHN5bXNfc2VjdGlvbnMsIGth bGxzeW1zX3Noc3RydGFiKTsKKwl9CisJS0FMTFNZTVNfVkFSKCZrYWxsc3ltc19rZXJuZWxfbW9k dWxlLCBudW1fc3ltdGFiKSA9IGthbGxzeW1zX3NpemVfc3ltdGFiIC8gc2l6ZW9mKCprYWxsc3lt c19zeW10YWIpOworfQorCisKK3ZvaWQgX19pbml0IGthbGxzeW1zX2luaXRfZG9uZSgpIHsKKyMg aWZkZWYgQ09ORklHX01PRFVMRVMKKwltb2R1bGVfaW5pdF9kb25lKCZrYWxsc3ltc19rZXJuZWxf bW9kdWxlKTsKKyMgZWxzZQorCUVsZl9TaGRyKnNlY3Rpb247CisJY29uc3QgRWxmX1N5bSpzcmM7 CisJRWxmX1N5bSpkc3Q7CisKKwlmb3Ioc2VjdGlvbiA9IGthbGxzeW1zX3NlY3Rpb25zICsgMTsg KHVuc2lnbmVkIGxvbmcpc2VjdGlvbiA8ICh1bnNpZ25lZCBsb25nKWthbGxzeW1zX3NlY3Rpb25z ICsga2FsbHN5bXNfc2l6ZV9zZWN0aW9uczsgKytzZWN0aW9uKQorCQlpZihzZWN0aW9uLT5zaF9h ZGRyID49ICh1bnNpZ25lZCBsb25nKV9faW5pdF9iZWdpbgorCQkgICAmJiAoc2VjdGlvbi0+c2hf c2l6ZQorCQkgICAgICAgPyBzZWN0aW9uLT5zaF9hZGRyICsgc2VjdGlvbi0+c2hfc2l6ZSAtIDEK KwkJICAgICAgIDogc2VjdGlvbi0+c2hfYWRkcikgPCAodW5zaWduZWQgbG9uZylfX2luaXRfZW5k KQorCQkJc2VjdGlvbi0+c2hfYWRkciA9IDA7CisJZm9yKHNyYyA9IGRzdCA9IGthbGxzeW1zX3N5 bXRhYiArIDE7ICh1bnNpZ25lZCBsb25nKXNyYyA8ICh1bnNpZ25lZCBsb25nKWthbGxzeW1zX3N5 bXRhYiArIGthbGxzeW1zX3NpemVfc3ltdGFiOyArK3NyYykgeworCQlpZighc3JjLT5zdF9zaG5k eCB8fCAhc3JjLT5zdF9uYW1lKQorCQkJY29udGludWU7CisJCWlmKHNyYy0+c3Rfc2huZHggPCBr YWxsc3ltc19udW1fc2VjdGlvbnMKKwkJICAgJiYgIWthbGxzeW1zX3NlY3Rpb25zW3NyYy0+c3Rf c2huZHhdLnNoX2FkZHIpCisJCQljb250aW51ZTsKKwkJaWYoc3JjICE9IGRzdCkKKwkJCSpkc3Qg PSAqc3JjOworCQkrK2RzdDsKKwl9CisJa2FsbHN5bXNfbnVtX3N5bXRhYiA9IGRzdCAtIGthbGxz eW1zX3N5bXRhYjsKKyMgZW5kaWYKK30KKworI2VuZGlmIC8qIENPTkZJR19LQUxMU1lNU19UUkFE SVRJT05BTCAqLworCiBFWFBPUlRfU1lNQk9MKF9fcHJpbnRfc3ltYm9sKTsKLS0tIDIuNi4xNC9r ZXJuZWwvbW9kdWxlLmMJMjAwNS0xMC0yOCAwMjowMjowOC4wMDAwMDAwMDAgKzAyMDAKKysrIDIu Ni4xNC1rYWxsc3ltcy9rZXJuZWwvbW9kdWxlLmMJMjAwNS0xMS0wNCAxNjoxOTozNC4wMDAwMDAw MDAgKzAxMDAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdG9wX21hY2hpbmUu aD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4K KyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAj aW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CkBA IC0xMTYzLDYgKzExNjQsOCBAQCBzdGF0aWMgaW50IF9fdW5saW5rX21vZHVsZSh2b2lkICpfbW9k KQogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBjbGVhbnVwX2thbGxzeW1zKHN0cnVjdCBt b2R1bGUgKik7CisKIC8qIEZyZWUgYSBtb2R1bGUsIHJlbW92ZSBmcm9tIGxpc3RzLCBldGMgKG11 c3QgaG9sZCBtb2R1bGUgbXV0ZXgpLiAqLwogc3RhdGljIHZvaWQgZnJlZV9tb2R1bGUoc3RydWN0 IG1vZHVsZSAqbW9kKQogewpAQCAtMTE3Nyw2ICsxMTgwLDggQEAgc3RhdGljIHZvaWQgZnJlZV9t b2R1bGUoc3RydWN0IG1vZHVsZSAqbQogCS8qIE1vZHVsZSB1bmxvYWQgc3R1ZmYgKi8KIAltb2R1 bGVfdW5sb2FkX2ZyZWUobW9kKTsKIAorCWNsZWFudXBfa2FsbHN5bXMobW9kKTsKKwogCS8qIFRo aXMgbWF5IGJlIE5VTEwsIGJ1dCB0aGF0J3MgT0sgKi8KIAltb2R1bGVfZnJlZShtb2QsIG1vZC0+ bW9kdWxlX2luaXQpOwogCWtmcmVlKG1vZC0+YXJncyk7CkBAIC0xNDI1LDQ5ICsxNDMwLDkgQEAg aW50IGlzX2V4cG9ydGVkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IAogCXJldHVybiAwOwogfQog Ci0vKiBBcyBwZXIgbm0gKi8KLXN0YXRpYyBjaGFyIGVsZl90eXBlKGNvbnN0IEVsZl9TeW0gKnN5 bSwKLQkJICAgICBFbGZfU2hkciAqc2VjaGRycywKLQkJICAgICBjb25zdCBjaGFyICpzZWNzdHJp bmdzLAotCQkgICAgIHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLQlpZiAoRUxGX1NUX0JJTkQoc3lt LT5zdF9pbmZvKSA9PSBTVEJfV0VBSykgewotCQlpZiAoRUxGX1NUX1RZUEUoc3ltLT5zdF9pbmZv KSA9PSBTVFRfT0JKRUNUKQotCQkJcmV0dXJuICd2JzsKLQkJZWxzZQotCQkJcmV0dXJuICd3JzsK LQl9Ci0JaWYgKHN5bS0+c3Rfc2huZHggPT0gU0hOX1VOREVGKQotCQlyZXR1cm4gJ1UnOwotCWlm IChzeW0tPnN0X3NobmR4ID09IFNITl9BQlMpCi0JCXJldHVybiAnYSc7Ci0JaWYgKHN5bS0+c3Rf c2huZHggPj0gU0hOX0xPUkVTRVJWRSkKLQkJcmV0dXJuICc/JzsKLQlpZiAoc2VjaGRyc1tzeW0t PnN0X3NobmR4XS5zaF9mbGFncyAmIFNIRl9FWEVDSU5TVFIpCi0JCXJldHVybiAndCc7Ci0JaWYg KHNlY2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MKLQkgICAgJiYgc2Vj aGRyc1tzeW0tPnN0X3NobmR4XS5zaF90eXBlICE9IFNIVF9OT0JJVFMpIHsKLQkJaWYgKCEoc2Vj aGRyc1tzeW0tPnN0X3NobmR4XS5zaF9mbGFncyAmIFNIRl9XUklURSkpCi0JCQlyZXR1cm4gJ3In OwotCQllbHNlIGlmIChzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX2ZsYWdzICYgQVJDSF9TSEZf U01BTEwpCi0JCQlyZXR1cm4gJ2cnOwotCQllbHNlCi0JCQlyZXR1cm4gJ2QnOwotCX0KLQlpZiAo c2VjaGRyc1tzeW0tPnN0X3NobmR4XS5zaF90eXBlID09IFNIVF9OT0JJVFMpIHsKLQkJaWYgKHNl Y2hkcnNbc3ltLT5zdF9zaG5keF0uc2hfZmxhZ3MgJiBBUkNIX1NIRl9TTUFMTCkKLQkJCXJldHVy biAncyc7Ci0JCWVsc2UKLQkJCXJldHVybiAnYic7Ci0JfQotCWlmIChzdHJuY21wKHNlY3N0cmlu Z3MgKyBzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX25hbWUsCi0JCSAgICAiLmRlYnVnIiwgc3Ry bGVuKCIuZGVidWciKSkgPT0gMCkKLQkJcmV0dXJuICduJzsKLQlyZXR1cm4gJz8nOwotfQotCiBz dGF0aWMgdm9pZCBhZGRfa2FsbHN5bXMoc3RydWN0IG1vZHVsZSAqbW9kLAotCQkJIEVsZl9TaGRy ICpzZWNoZHJzLAorCQkJIGNvbnN0IEVsZl9FaGRyICpoZHIsCisJCQkgY29uc3QgRWxmX1NoZHIg KnNlY2hkcnMsCiAJCQkgdW5zaWduZWQgaW50IHN5bWluZGV4LAogCQkJIHVuc2lnbmVkIGludCBz dHJpbmRleCwKIAkJCSBjb25zdCBjaGFyICpzZWNzdHJpbmdzKQpAQCAtMTQ3NiwyMyArMTQ0MSwx MjUgQEAgc3RhdGljIHZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKgogCiAJbW9kLT5z eW10YWIgPSAodm9pZCAqKXNlY2hkcnNbc3ltaW5kZXhdLnNoX2FkZHI7CiAJbW9kLT5udW1fc3lt dGFiID0gc2VjaGRyc1tzeW1pbmRleF0uc2hfc2l6ZSAvIHNpemVvZihFbGZfU3ltKTsKLQltb2Qt PnN0cnRhYiA9ICh2b2lkICopc2VjaGRyc1tzdHJpbmRleF0uc2hfYWRkcjsKKwltb2QtPnN0cnRh YiA9IChjb25zdCB2b2lkICopc2VjaGRyc1tzdHJpbmRleF0uc2hfYWRkcjsKKworCWlmIChtb2Qt Pm51bV9zeW10YWIgPiAxCisJICAgICYmIHNlY2hkcnNbc3RyaW5kZXhdLnNoX3NpemUgPiAwCisJ ICAgICYmICEqbW9kLT5zdHJ0YWIKKwkgICAgJiYgIW1vZC0+c3RydGFiW3NlY2hkcnNbc3RyaW5k ZXhdLnNoX3NpemUgLSAxXSkgeworCQkvKiBTZXQgdHlwZXMgdXAgd2hpbGUgd2Ugc3RpbGwgaGF2 ZSBhY2Nlc3MgdG8gc2VjdGlvbnMuICovCisJCWZvciAoaSA9IDE7IGkgPCBtb2QtPm51bV9zeW10 YWI7IGkrKykgeworCQkJaWYgKG1vZC0+c3ltdGFiW2ldLnN0X25hbWUgPj0gc2VjaGRyc1tzdHJp bmRleF0uc2hfc2l6ZSkKKwkJCQltb2QtPnN5bXRhYltpXS5zdF9uYW1lID0gMDsKKwkJCW1vZC0+ c3ltdGFiW2ldLnN0X290aGVyCisJCQkJPSBrYWxsc3ltc19lbGZfdHlwZSgmbW9kLT5zeW10YWJb aV0sIHNlY2hkcnMsIHNlY3N0cmluZ3MpOworCQl9CisJfQorCWVsc2UgeworCQltb2QtPnN5bXRh YiA9IE5VTEw7CisJCW1vZC0+bnVtX3N5bXRhYiA9IDA7CisJCW1vZC0+c3RydGFiID0gTlVMTDsK Kwl9CiAKLQkvKiBTZXQgdHlwZXMgdXAgd2hpbGUgd2Ugc3RpbGwgaGF2ZSBhY2Nlc3MgdG8gc2Vj dGlvbnMuICovCi0JZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX3N5bXRhYjsgaSsrKQotCQltb2Qt PnN5bXRhYltpXS5zdF9pbmZvCi0JCQk9IGVsZl90eXBlKCZtb2QtPnN5bXRhYltpXSwgc2VjaGRy cywgc2Vjc3RyaW5ncywgbW9kKTsKKyMgaWZuZGVmIENPTkZJR19LQUxMU1lNU19UUkFESVRJT05B TAorCWlmIChoZHItPmVfc2hudW0gPiAxCisJICAgICYmIHNlY2hkcnNbaGRyLT5lX3Noc3RybmR4 XS5zaF9zaXplID4gMAorCSAgICAmJiAhKnNlY3N0cmluZ3MKKwkgICAgJiYgIXNlY3N0cmluZ3Nb c2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX3NpemUgLSAxXSkgeworCQlpZiAoaGRyLT5lX3No bnVtIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKCpzZWNoZHJzKSkKKwkJCW1vZC0+c2VjdGlvbnMgPSBr bWFsbG9jKGhkci0+ZV9zaG51bSAqIHNpemVvZigqc2VjaGRycyksIEdGUF9LRVJORUwpOworCQll bHNlCisJCQltb2QtPnNlY3Rpb25zID0gdm1hbGxvYyhoZHItPmVfc2hudW0gKiBzaXplb2YoKnNl Y2hkcnMpKTsKKwl9CisJZWxzZQorCQltb2QtPnNlY3Rpb25zID0gTlVMTDsKKwlpZiAobW9kLT5z ZWN0aW9ucykgeworCQltb2QtPm51bV9zZWN0aW9ucyA9IGhkci0+ZV9zaG51bTsKKwkJbWVtc2V0 KG1vZC0+c2VjdGlvbnMsIDAsIHNpemVvZigqbW9kLT5zZWN0aW9ucykpOworCQltb2QtPnNoc3Ry dGFiID0gKGNvbnN0IHZvaWQgKilzZWNoZHJzW2hkci0+ZV9zaHN0cm5keF0uc2hfYWRkcjsKKwkJ Zm9yIChpID0gMTsgaSA8IG1vZC0+bnVtX3NlY3Rpb25zOyArK2kpIHsKKwkJCW1vZC0+c2VjdGlv bnNbaV0gPSBzZWNoZHJzW2ldOworCQkJaWYgKG1vZC0+c2VjdGlvbnNbaV0uc2hfbmFtZSA+PSBz ZWNoZHJzW2hkci0+ZV9zaHN0cm5keF0uc2hfc2l6ZSkKKwkJCQltb2QtPnNlY3Rpb25zW2ldLnNo X25hbWUgPSAwOworCQkJaWYgKCEobW9kLT5zZWN0aW9uc1tpXS5zaF9mbGFncyAmIFNIRl9BTExP QykpCisJCQkJbW9kLT5zZWN0aW9uc1tpXS5zaF9hZGRyID0gMDsKKwkJfQorCX0KKwllbHNlIHsK KwkJbW9kLT5udW1fc2VjdGlvbnMgPSAwOworCQltb2QtPnNoc3RydGFiID0gTlVMTDsKKwl9Cisj ZW5kaWYKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF9rYWxsc3ltcyhzdHJ1Y3QgbW9kdWxlICpt b2QpCit7CisjIGlmbmRlZiBDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwKKwlpZiAobW9kLT5u dW1fc2VjdGlvbnMpIHsKKwkJaWYgKG1vZC0+bnVtX3NlY3Rpb25zIDwgUEFHRV9TSVpFIC8gc2l6 ZW9mKCptb2QtPnNlY3Rpb25zKSkKKwkJCWtmcmVlKG1vZC0+c2VjdGlvbnMpOworCQllbHNlCisJ CQl2ZnJlZShtb2QtPnNlY3Rpb25zKTsKKwkJbW9kLT5udW1fc2VjdGlvbnMgPSAwOworCX0KKyMg ZW5kaWYKKwltb2QtPm51bV9zeW10YWIgPSAwOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9p ZCBhZGRfa2FsbHN5bXMoc3RydWN0IG1vZHVsZSAqbW9kLAotCQkJCUVsZl9TaGRyICpzZWNoZHJz LAorCQkJCWNvbnN0IEVsZl9FaGRyICpoZHIsCisJCQkJY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMs CiAJCQkJdW5zaWduZWQgaW50IHN5bWluZGV4LAogCQkJCXVuc2lnbmVkIGludCBzdHJpbmRleCwK IAkJCQljb25zdCBjaGFyICpzZWNzdHJpbmdzKQogewogfQorCitzdGF0aWMgaW5saW5lIHZvaWQg Y2xlYW51cF9rYWxsc3ltcyhzdHJ1Y3QgbW9kdWxlICptb2QpCit7Cit9CiAjZW5kaWYgLyogQ09O RklHX0tBTExTWU1TICovCiAKKyNpZm5kZWYgQ09ORklHX0tBTExTWU1TCitzdGF0aWMgaW5saW5l CisjZW5kaWYKK3ZvaWQgbW9kdWxlX2luaXRfZG9uZShzdHJ1Y3QgbW9kdWxlICptb2QpCit7Cisj aWZkZWYgQ09ORklHX0tBTExTWU1TCisJaWYgKG1vZC0+aW5pdF9zaXplKSB7CisJCWNvbnN0IEVs Zl9TeW0qc3JjOworCQlFbGZfU3ltKmRzdDsKKyMgaWZuZGVmIENPTkZJR19LQUxMU1lNU19UUkFE SVRJT05BTAorCQlFbGZfU2hkcipzZWN0aW9uOworCisJCWZvcihzZWN0aW9uID0gbW9kLT5zZWN0 aW9ucyArIDE7IHNlY3Rpb24gPCBtb2QtPnNlY3Rpb25zICsgbW9kLT5udW1fc2VjdGlvbnM7ICsr c2VjdGlvbikKKwkJCWlmKHNlY3Rpb24tPnNoX2VudHNpemUgJiBJTklUX09GRlNFVF9NQVNLKQor CQkJCXNlY3Rpb24tPnNoX2FkZHIgPSAwOworIyBlbmRpZgorCQlmb3Ioc3JjID0gZHN0ID0gbW9k LT5zeW10YWIgKyAxOyBzcmMgPCBtb2QtPnN5bXRhYiArIG1vZC0+bnVtX3N5bXRhYjsgKytzcmMp IHsKKwkJCWlmKCFzcmMtPnN0X3NobmR4IHx8ICFzcmMtPnN0X25hbWUpCisJCQkJY29udGludWU7 CisjIGlmbmRlZiBDT05GSUdfS0FMTFNZTVNfVFJBRElUSU9OQUwKKwkJCWlmKHNyYy0+c3Rfc2hu ZHggPCBtb2QtPm51bV9zZWN0aW9ucworCQkJICAgJiYgIW1vZC0+c2VjdGlvbnNbc3JjLT5zdF9z aG5keF0uc2hfYWRkcikKKwkJCQljb250aW51ZTsKKyMgZWxzZQorCQkJaWYoc3JjLT5zdF92YWx1 ZSA+PSAodW5zaWduZWQgbG9uZyltb2QtPm1vZHVsZV9pbml0CisJCQkgICAmJiBzcmMtPnN0X3Zh bHVlIDwgKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfaW5pdCArIG1vZC0+aW5pdF9zaXplKQor CQkJCWNvbnRpbnVlOworIyBlbmRpZgorCQkJaWYoc3JjICE9IGRzdCkKKwkJCQkqZHN0ID0gKnNy YzsKKwkJCSsrZHN0OworCQl9CisJCW1vZC0+bnVtX3N5bXRhYiA9IGRzdCAtIG1vZC0+c3ltdGFi OworCX0KKyNlbmRpZgorCW1vZC0+bW9kdWxlX2luaXQgPSBOVUxMOworCW1vZC0+aW5pdF9zaXpl ID0gMDsKKwltb2QtPmluaXRfdGV4dF9zaXplID0gMDsKK30KKwogLyogQWxsb2NhdGUgYW5kIGxv YWQgdGhlIG1vZHVsZTogbm90ZSB0aGF0IHNpemUgb2Ygc2VjdGlvbiAwIGlzIGFsd2F5cwogICAg emVybywgYW5kIHdlIHJlbHkgb24gdGhpcyBmb3Igb3B0aW9uYWwgc2VjdGlvbnMuICovCiBzdGF0 aWMgc3RydWN0IG1vZHVsZSAqbG9hZF9tb2R1bGUodm9pZCBfX3VzZXIgKnVtb2QsCkBAIC0xNTMx LDcgKzE1OTgsOCBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbG9hZF9tb2R1bGUodm9pZCBfCiAJ aWYgKG1lbWNtcChoZHItPmVfaWRlbnQsIEVMRk1BRywgNCkgIT0gMAogCSAgICB8fCBoZHItPmVf dHlwZSAhPSBFVF9SRUwKIAkgICAgfHwgIWVsZl9jaGVja19hcmNoKGhkcikKLQkgICAgfHwgaGRy LT5lX3NoZW50c2l6ZSAhPSBzaXplb2YoKnNlY2hkcnMpKSB7CisJICAgIHx8IGhkci0+ZV9zaGVu dHNpemUgIT0gc2l6ZW9mKCpzZWNoZHJzKQorCSAgICB8fCAhaGRyLT5lX3Noc3RybmR4KSB7CiAJ CWVyciA9IC1FTk9FWEVDOwogCQlnb3RvIGZyZWVfaGRyOwogCX0KQEAgLTE1NTUsNiArMTYyMywx MCBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbG9hZF9tb2R1bGUodm9pZCBfCiAKIAkJLyogSW50 ZXJuYWwgc3ltYm9scyBhbmQgc3RyaW5ncy4gKi8KIAkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9 PSBTSFRfU1lNVEFCKSB7CisJCQlpZiAoc3ltaW5kZXgpIHsKKwkJCQllcnIgPSAtRU5PRVhFQzsK KwkJCQlnb3RvIGZyZWVfaGRyOworCQkJfQogCQkJc3ltaW5kZXggPSBpOwogCQkJc3RyaW5kZXgg PSBzZWNoZHJzW2ldLnNoX2xpbms7CiAJCQlzdHJ0YWIgPSAoY2hhciAqKWhkciArIHNlY2hkcnNb c3RyaW5kZXhdLnNoX29mZnNldDsKQEAgLTE1NjYsNiArMTYzOCwxMSBAQCBzdGF0aWMgc3RydWN0 IG1vZHVsZSAqbG9hZF9tb2R1bGUodm9pZCBfCiAjZW5kaWYKIAl9CiAKKwlpZiAoIXN5bWluZGV4 IHx8ICFzdHJpbmRleCkgeworCQllcnIgPSAtRU5PRVhFQzsKKwkJZ290byBmcmVlX2hkcjsKKwl9 CisKIAltb2RpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKIAkJCSAg ICAiLmdudS5saW5rb25jZS50aGlzX21vZHVsZSIpOwogCWlmICghbW9kaW5kZXgpIHsKQEAgLTE1 OTcsOSArMTY3NCwxNCBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbG9hZF9tb2R1bGUodm9pZCBf CiAJLyogRG9uJ3Qga2VlcCBtb2RpbmZvIHNlY3Rpb24gKi8KIAlzZWNoZHJzW2luZm9pbmRleF0u c2hfZmxhZ3MgJj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQzsKICNpZmRlZiBDT05GSUdfS0FM TFNZTVMKKwltb2QtPm51bV9zeW10YWIgPSAwOwogCS8qIEtlZXAgc3ltYm9sIGFuZCBzdHJpbmcg dGFibGVzIGZvciBkZWNvZGluZyBsYXRlci4gKi8KIAlzZWNoZHJzW3N5bWluZGV4XS5zaF9mbGFn cyB8PSBTSEZfQUxMT0M7CiAJc2VjaGRyc1tzdHJpbmRleF0uc2hfZmxhZ3MgfD0gU0hGX0FMTE9D OworIyBpZm5kZWYgQ09ORklHX0tBTExTWU1TX1RSQURJVElPTkFMCisJbW9kLT5udW1fc2VjdGlv bnMgPSAwOworCXNlY2hkcnNbaGRyLT5lX3Noc3RybmR4XS5zaF9mbGFncyB8PSBTSEZfQUxMT0M7 CisjIGVuZGlmCiAjZW5kaWYKIAogCS8qIENoZWNrIG1vZHVsZSBzdHJ1Y3QgdmVyc2lvbiBub3cs IGJlZm9yZSB3ZSB0cnkgdG8gdXNlIG1vZHVsZS4gKi8KQEAgLTE3NzUsNyArMTg1Nyw3IEBAIHN0 YXRpYyBzdHJ1Y3QgbW9kdWxlICpsb2FkX21vZHVsZSh2b2lkIF8KIAlwZXJjcHVfbW9kY29weSht b2QtPnBlcmNwdSwgKHZvaWQgKilzZWNoZHJzW3BjcHVpbmRleF0uc2hfYWRkciwKIAkJICAgICAg IHNlY2hkcnNbcGNwdWluZGV4XS5zaF9zaXplKTsKIAotCWFkZF9rYWxsc3ltcyhtb2QsIHNlY2hk cnMsIHN5bWluZGV4LCBzdHJpbmRleCwgc2Vjc3RyaW5ncyk7CisJYWRkX2thbGxzeW1zKG1vZCwg aGRyLCBzZWNoZHJzLCBzeW1pbmRleCwgc3RyaW5kZXgsIHNlY3N0cmluZ3MpOwogCiAJZXJyID0g bW9kdWxlX2ZpbmFsaXplKGhkciwgc2VjaGRycywgbW9kKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE4 NDMsNiArMTkyNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsb2FkX21vZHVsZSh2b2lkIF8K IAltb2R1bGVfYXJjaF9jbGVhbnVwKG1vZCk7CiAgY2xlYW51cDoKIAltb2R1bGVfdW5sb2FkX2Zy ZWUobW9kKTsKKwljbGVhbnVwX2thbGxzeW1zKG1vZCk7CiAJbW9kdWxlX2ZyZWUobW9kLCBtb2Qt Pm1vZHVsZV9pbml0KTsKICBmcmVlX2NvcmU6CiAJbW9kdWxlX2ZyZWUobW9kLCBtb2QtPm1vZHVs ZV9jb3JlKTsKQEAgLTE5MzQsOSArMjAxNyw3IEBAIHN5c19pbml0X21vZHVsZSh2b2lkIF9fdXNl ciAqdW1vZCwKIAkvKiBEcm9wIGluaXRpYWwgcmVmZXJlbmNlLiAqLwogCW1vZHVsZV9wdXQobW9k KTsKIAltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2luaXQpOwotCW1vZC0+bW9kdWxlX2lu aXQgPSBOVUxMOwotCW1vZC0+aW5pdF9zaXplID0gMDsKLQltb2QtPmluaXRfdGV4dF9zaXplID0g MDsKKwltb2R1bGVfaW5pdF9kb25lKG1vZCk7CiAJdXAoJm1vZHVsZV9tdXRleCk7CiAKIAlyZXR1 cm4gMDsKQEAgLTE5NDgsNTggKzIwMjksNiBAQCBzdGF0aWMgaW5saW5lIGludCB3aXRoaW4odW5z aWduZWQgbG9uZyBhCiB9CiAKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMKLS8qCi0gKiBUaGlzIGln bm9yZXMgdGhlIGludGVuc2VseSBhbm5veWluZyAibWFwcGluZyBzeW1ib2xzIiBmb3VuZAotICog aW4gQVJNIEVMRiBmaWxlczogJGEsICR0IGFuZCAkZC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQg aXNfYXJtX21hcHBpbmdfc3ltYm9sKGNvbnN0IGNoYXIgKnN0cikKLXsKLQlyZXR1cm4gc3RyWzBd ID09ICckJyAmJiBzdHJjaHIoImF0ZCIsIHN0clsxXSkgCi0JICAgICAgICYmIChzdHJbMl0gPT0g J1wwJyB8fCBzdHJbMl0gPT0gJy4nKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKmdldF9rc3lt Ym9sKHN0cnVjdCBtb2R1bGUgKm1vZCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsCi0J CQkgICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nICpv ZmZzZXQpCi17Ci0JdW5zaWduZWQgaW50IGksIGJlc3QgPSAwOwotCXVuc2lnbmVkIGxvbmcgbmV4 dHZhbDsKLQotCS8qIEF0IHdvcnNlLCBuZXh0IHZhbHVlIGlzIGF0IGVuZCBvZiBtb2R1bGUgKi8K LQlpZiAod2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2luaXQsIG1vZC0+aW5pdF9zaXplKSkKLQkJ bmV4dHZhbCA9ICh1bnNpZ25lZCBsb25nKW1vZC0+bW9kdWxlX2luaXQrbW9kLT5pbml0X3RleHRf c2l6ZTsKLQllbHNlIAotCQluZXh0dmFsID0gKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfY29y ZSttb2QtPmNvcmVfdGV4dF9zaXplOwotCi0JLyogU2NhbiBmb3IgY2xvc2VzdCBwcmVjZWVkaW5n IHN5bWJvbCwgYW5kIG5leHQgc3ltYm9sLiAoRUxGCi0gICAgICAgICAgIHN0YXJ0cyByZWFsIHN5 bWJvbHMgYXQgMSkuICovCi0JZm9yIChpID0gMTsgaSA8IG1vZC0+bnVtX3N5bXRhYjsgaSsrKSB7 Ci0JCWlmIChtb2QtPnN5bXRhYltpXS5zdF9zaG5keCA9PSBTSE5fVU5ERUYpCi0JCQljb250aW51 ZTsKLQotCQkvKiBXZSBpZ25vcmUgdW5uYW1lZCBzeW1ib2xzOiB0aGV5J3JlIHVuaW5mb3JtYXRp dmUKLQkJICogYW5kIGluc2VydGVkIGF0IGEgd2hpbS4gKi8KLQkJaWYgKG1vZC0+c3ltdGFiW2ld LnN0X3ZhbHVlIDw9IGFkZHIKLQkJICAgICYmIG1vZC0+c3ltdGFiW2ldLnN0X3ZhbHVlID4gbW9k LT5zeW10YWJbYmVzdF0uc3RfdmFsdWUKLQkJICAgICYmICoobW9kLT5zdHJ0YWIgKyBtb2QtPnN5 bXRhYltpXS5zdF9uYW1lKSAhPSAnXDAnCi0JCSAgICAmJiAhaXNfYXJtX21hcHBpbmdfc3ltYm9s KG1vZC0+c3RydGFiICsgbW9kLT5zeW10YWJbaV0uc3RfbmFtZSkpCi0JCQliZXN0ID0gaTsKLQkJ aWYgKG1vZC0+c3ltdGFiW2ldLnN0X3ZhbHVlID4gYWRkcgotCQkgICAgJiYgbW9kLT5zeW10YWJb aV0uc3RfdmFsdWUgPCBuZXh0dmFsCi0JCSAgICAmJiAqKG1vZC0+c3RydGFiICsgbW9kLT5zeW10 YWJbaV0uc3RfbmFtZSkgIT0gJ1wwJwotCQkgICAgJiYgIWlzX2FybV9tYXBwaW5nX3N5bWJvbCht b2QtPnN0cnRhYiArIG1vZC0+c3ltdGFiW2ldLnN0X25hbWUpKQotCQkJbmV4dHZhbCA9IG1vZC0+ c3ltdGFiW2ldLnN0X3ZhbHVlOwotCX0KLQotCWlmICghYmVzdCkKLQkJcmV0dXJuIE5VTEw7Ci0K LQkqc2l6ZSA9IG5leHR2YWwgLSBtb2QtPnN5bXRhYltiZXN0XS5zdF92YWx1ZTsKLQkqb2Zmc2V0 ID0gYWRkciAtIG1vZC0+c3ltdGFiW2Jlc3RdLnN0X3ZhbHVlOwotCXJldHVybiBtb2QtPnN0cnRh YiArIG1vZC0+c3ltdGFiW2Jlc3RdLnN0X25hbWU7Ci19Ci0KIC8qIEZvciBrYWxsc3ltcyB0byBh c2sgZm9yIGFkZHJlc3MgcmVzb2x1dGlvbi4gIE5VTEwgbWVhbnMgbm90IGZvdW5kLgogICAgV2Ug ZG9uJ3QgbG9jaywgYXMgdGhpcyBpcyB1c2VkIGZvciBvb3BzIHJlc29sdXRpb24gYW5kIHJhY2Vz IGFyZSBhCiAgICBsZXNzZXIgY29uY2Vybi4gKi8KQEAgLTIwMTQsNyArMjA0Myw3IEBAIGNvbnN0 IGNoYXIgKm1vZHVsZV9hZGRyZXNzX2xvb2t1cCh1bnNpZ24KIAkJaWYgKHdpdGhpbihhZGRyLCBt b2QtPm1vZHVsZV9pbml0LCBtb2QtPmluaXRfc2l6ZSkKIAkJICAgIHx8IHdpdGhpbihhZGRyLCBt b2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfc2l6ZSkpIHsKIAkJCSptb2RuYW1lID0gbW9kLT5u YW1lOwotCQkJcmV0dXJuIGdldF9rc3ltYm9sKG1vZCwgYWRkciwgc2l6ZSwgb2Zmc2V0KTsKKwkJ CXJldHVybiBrYWxsc3ltc19nZXRfa3N5bWJvbChtb2QsIGFkZHIsIHNpemUsIG9mZnNldCk7CiAJ CX0KIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC0yMDMxLDcgKzIwNjAsNyBAQCBzdHJ1Y3QgbW9kdWxl ICptb2R1bGVfZ2V0X2thbGxzeW0odW5zaWduCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZt b2R1bGVzLCBsaXN0KSB7CiAJCWlmIChzeW1udW0gPCBtb2QtPm51bV9zeW10YWIpIHsKIAkJCSp2 YWx1ZSA9IG1vZC0+c3ltdGFiW3N5bW51bV0uc3RfdmFsdWU7Ci0JCQkqdHlwZSA9IG1vZC0+c3lt dGFiW3N5bW51bV0uc3RfaW5mbzsKKwkJCSp0eXBlID0gbW9kLT5zeW10YWJbc3ltbnVtXS5zdF9v dGhlcjsKIAkJCXN0cm5jcHkobmFtZWJ1ZiwKIAkJCQltb2QtPnN0cnRhYiArIG1vZC0+c3ltdGFi W3N5bW51bV0uc3RfbmFtZSwKIAkJCQkxMjcpOwpAQCAtMjA0NCwxNiArMjA3Myw2IEBAIHN0cnVj dCBtb2R1bGUgKm1vZHVsZV9nZXRfa2FsbHN5bSh1bnNpZ24KIAlyZXR1cm4gTlVMTDsKIH0KIAot c3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kX2ZpbmRfc3ltbmFtZShzdHJ1Y3QgbW9kdWxlICptb2Qs IGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgbW9kLT5udW1fc3ltdGFiOyBpKyspCi0JCWlmIChzdHJjbXAobmFtZSwgbW9kLT5zdHJ0YWIr bW9kLT5zeW10YWJbaV0uc3RfbmFtZSkgPT0gMCkKLQkJCXJldHVybiBtb2QtPnN5bXRhYltpXS5z dF92YWx1ZTsKLQlyZXR1cm4gMDsKLX0KLQogLyogTG9vayBmb3IgdGhpcyBuYW1lOiBjYW4gYmUg b2YgZm9ybSBtb2R1bGU6bmFtZS4gKi8KIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2thbGxzeW1zX2xv b2t1cF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC0yMDY1LDExICsyMDg0LDExIEBAIHVu c2lnbmVkIGxvbmcgbW9kdWxlX2thbGxzeW1zX2xvb2t1cF9uYW0KIAlpZiAoKGNvbG9uID0gc3Ry Y2hyKG5hbWUsICc6JykpICE9IE5VTEwpIHsKIAkJKmNvbG9uID0gJ1wwJzsKIAkJaWYgKChtb2Qg PSBmaW5kX21vZHVsZShuYW1lKSkgIT0gTlVMTCkKLQkJCXJldCA9IG1vZF9maW5kX3N5bW5hbWUo bW9kLCBjb2xvbisxKTsKKwkJCXJldCA9IGthbGxzeW1zX2ZpbmRfc3ltbmFtZShtb2QsIGNvbG9u KzEpOwogCQkqY29sb24gPSAnOic7CiAJfSBlbHNlIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSht b2QsICZtb2R1bGVzLCBsaXN0KQotCQkJaWYgKChyZXQgPSBtb2RfZmluZF9zeW1uYW1lKG1vZCwg bmFtZSkpICE9IDApCisJCQlpZiAoKHJldCA9IGthbGxzeW1zX2ZpbmRfc3ltbmFtZShtb2QsIG5h bWUpKSAhPSAwKQogCQkJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwotLS0gMi42LjE0L3Njcmlw dHMvS2J1aWxkLmluY2x1ZGUJMjAwNS0xMC0yOCAwMjowMjowOC4wMDAwMDAwMDAgKzAyMDAKKysr IDIuNi4xNC1rYWxsc3ltcy9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCTIwMDUtMTEtMDcgMTE6MTI6 NTIuMDAwMDAwMDAwICswMTAwCkBAIC01LDYgKzUsOCBAQAogY29tbWEgICA6PSAsCiBlbXB0eSAg IDo9CiBzcGFjZSAgIDo9ICQoZW1wdHkpICQoZW1wdHkpCitvcGVuICAgIDo9ICgKK2Nsb3NlICAg Oj0gKQogCiAjIyMKICMgVGhlIHRlbXBvcmFyeSBmaWxlIHRvIHNhdmUgZ2NjIC1NRCBnZW5lcmF0 ZWQgZGVwZW5kZW5jaWVzIG11c3Qgbm90Ci0tLSAyLjYuMTQvc2NyaXB0cy9NYWtlZmlsZQkyMDA1 LTEwLTI4IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42LjE0LWthbGxzeW1zL3Njcmlw dHMvTWFrZWZpbGUJMjAwNS0xMS0wNCAxNjoxOTozNS4wMDAwMDAwMDAgKzAxMDAKQEAgLTgsNiAr OCw3IEBACiAjIGNvbm1ha2VoYXNoOgkgQ3JlYXRlIGFycmF5cyBmb3IgaW5pdGlhbGl6aW5nIHRo ZSBrZXJuZWwgY29uc29sZSB0YWJsZXMKIAogaG9zdHByb2dzLSQoQ09ORklHX0tBTExTWU1TKSAg ICAgKz0ga2FsbHN5bXMKK0hPU1RDRkxBR1Nfa2FsbHN5bXMubyA6PSAtRCBBUkNIXyQoU1VCQVJD SCkKIGhvc3Rwcm9ncy0kKENPTkZJR19MT0dPKSAgICAgICAgICs9IHBubXRvbG9nbwogaG9zdHBy b2dzLSQoQ09ORklHX1ZUKSAgICAgICAgICAgKz0gY29ubWFrZWhhc2gKIGhvc3Rwcm9ncy0kKENP TkZJR19QUk9NX0NPTlNPTEUpICs9IGNvbm1ha2VoYXNoCi0tLSAyLjYuMTQvc2NyaXB0cy9NYWtl ZmlsZS5idWlsZAkyMDA1LTEwLTI4IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42LjE0 LWthbGxzeW1zL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQJMjAwNS0xMS0wOCAxMjoyOTo0Ni4wMDAw MDAwMDAgKzAxMDAKQEAgLTE1NiwyMyArMTU2LDI2IEBAIGVsc2UKICMgICBhcmUgZG9uZS4KICMg byBvdGhlcndpc2UsIHdlIGNhbGN1bGF0ZSBzeW1ib2wgdmVyc2lvbnMgdXNpbmcgdGhlIGdvb2Qg b2xkCiAjICAgZ2Vua3N5bXMgb24gdGhlIHByZXByb2Nlc3NlZCBzb3VyY2UgYW5kIHBvc3Rwcm9j ZXNzIHRoZW0gaW4gYSB3YXkKLSMgICB0aGF0IHRoZXkgYXJlIHVzYWJsZSBhcyBhIGxpbmtlciBz Y3JpcHQKLSMgbyBnZW5lcmF0ZSA8ZmlsZT4ubyBmcm9tIC50bXBfPGZpbGU+Lm8gdXNpbmcgdGhl IGxpbmtlciB0bwotIyAgIHJlcGxhY2UgdGhlIHVucmVzb2x2ZWQgc3ltYm9scyBfX2NyY19leHBv cnRlZF9zeW1ib2wgd2l0aAotIyAgIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGhlIGNoZWNrc3VtIGdl bmVyYXRlZCBieSBnZW5rc3ltcworIyAgIHRoYXQgdGhleSBhcmUgdXNhYmxlIGFzIGFzc2VtYmx5 IHNvdXJjZQorIyBvIHJlY29tcGlsZSA8ZmlsZT4ubyBmcm9tIDxmaWxlPi5jIGZvcmNpbmcgaW5j bHVzaW9uIG9mIGFzc2VtYmxlcgorIyAgIGRpcmVjdGl2ZXMgZGVmaW5pbmcgdGhlIGFjdHVhbCB2 YWx1ZXMgb2YgX19jcmNfKiwgZm9sbG93ZWQgYnkKKyMgICBvYmpjb3B5LWluZyB0aGVtIHRvIGZv cmNlIHRoZXNlIHN5bWJvbHMgdG8gYmUgbG9jYWwgdG8gcGVybWl0CisjICAgc3RyaXBwaW5nIHRo ZW0gZHVyaW5nIHRoZSBmaW5hbCBtb2R1bGUgbGlua2luZyBzdGFnZS4KIAogY21kX2NjX29fYyA9 ICQoQ0MpICQoY19mbGFncykgLWMgLW8gJChARCkvLnRtcF8kKEBGKSAkPAogY21kX21vZHZlcnNp b25zID0JCQkJCQkJXAogCWlmICQoT0JKRFVNUCkgLWggJChARCkvLnRtcF8kKEBGKSB8IGdyZXAg LXEgX19rc3ltdGFiOyB0aGVuCVwKLQkJJChDUFApIC1EX19HRU5LU1lNU19fICQoY19mbGFncykg JDwJCQlcCi0JCXwgJChHRU5LU1lNUykJCQkJCQlcCi0JCT4gJChARCkvLnRtcF8kKEBGOi5vPS52 ZXIpOwkJCQlcCi0JCQkJCQkJCQlcCi0JCSQoTEQpICQoTERGTEFHUykgLXIgLW8gJEAgJChARCkv LnRtcF8kKEBGKSAJCVwKLQkJCS1UICQoQEQpLy50bXBfJChARjoubz0udmVyKTsJCQlcCi0JCXJt IC1mICQoQEQpLy50bXBfJChARikgJChARCkvLnRtcF8kKEBGOi5vPS52ZXIpOwlcCisJCWlmICQo Q1BQKSAtRF9fR0VOS1NZTVNfXyAkKGNfZmxhZ3MpICQ8CQkJXAorCQkgICB8ICQoR0VOS1NZTVMp IC1hID4gJChARCkvLnRtcF8kKEBGOi5vPS52ZXIpCQlcCisJCSAgICYmICQoQ0MpICQoY19mbGFn cykgLWMgLXcgLWluY2x1ZGUgJChARCkvLnRtcF8kKEBGOi5vPS52ZXIpIC1vICRAICQ8IFwKKwkJ ICAgJiYgJChPQkpDT1BZKSAtTCAnX19jcmNfKicgLXcgJEA7IHRoZW4JCVwKKwkJCXJtIC1mICQo QEQpLy50bXBfJChARik7CQkJCVwKKwkJZWxzZQkJCQkJCQlcCisJCQlybSAtZiAkQDsgZXhpdCAx OwkJCQlcCisJCWZpOwkJCQkJCQlcCiAJZWxzZQkJCQkJCQkJXAogCQltdiAtZiAkKEBEKS8udG1w XyQoQEYpICRAOwkJCQlcCisJCXJtIC1mICQoQEQpLy50bXBfJChARjoubz0udmVyKTsJCQkJXAog CWZpOwogZW5kaWYKIApAQCAtMTgzLDYgKzE4NiwxMiBAQCBkZWZpbmUgcnVsZV9jY19vX2MKIAkk KGNtZF9jY19vX2MpOwkJCQkJCQkgIFwKIAkkKGNtZF9tb2R2ZXJzaW9ucykJCQkJCQkgIFwKIAlz Y3JpcHRzL2Jhc2ljL2ZpeGRlcCAkKGRlcGZpbGUpICRAICckKHN1YnN0ICcsJ1wnJywkKGNtZF9j Y19vX2MpKScgPiAkKEBEKS8uJChARikudG1wOyAgXAorCWlmIFsgLXIgJChARCkvLnRtcF8kKEBG Oi5vPS52ZXIpIF07IHRoZW4JCQkgIFwKKwkJZWNobyA+PiAkKEBEKS8uJChARikudG1wOwkJCQkg IFwKKwkJZWNobyAnJEA6ICQoR0VOS1NZTVMpJyA+PiAkKEBEKS8uJChARikudG1wOwkJICBcCisJ CWVjaG8gJyQoR0VOS1NZTVMpOjogOycgPj4gJChARCkvLiQoQEYpLnRtcDsJCSAgXAorCQlybSAk KEBEKS8udG1wXyQoQEY6Lm89LnZlcik7CQkJCSAgXAorCWZpOwkJCQkJCQkJICBcCiAJcm0gLWYg JChkZXBmaWxlKTsJCQkJCQkgIFwKIAltdiAtZiAkKEBEKS8uJChARikudG1wICQoQEQpLy4kKEBG KS5jbWQKIGVuZGVmCi0tLSAyLjYuMTQvc2NyaXB0cy9NYWtlZmlsZS5tb2RpbnN0CTIwMDUtMTAt MjggMDI6MDI6MDguMDAwMDAwMDAwICswMjAwCisrKyAyLjYuMTQta2FsbHN5bXMvc2NyaXB0cy9N YWtlZmlsZS5tb2RpbnN0CTIwMDUtMTEtMDQgMTY6MTk6MzUuMDAwMDAwMDAwICswMTAwCkBAIC0x Nyw3ICsxNyw4IEBAIF9fbW9kaW5zdDogJChtb2R1bGVzKQogCUA6CiAKIHF1aWV0X2NtZF9tb2R1 bGVzX2luc3RhbGwgPSBJTlNUQUxMICRACi0gICAgICBjbWRfbW9kdWxlc19pbnN0YWxsID0gbWtk aXIgLXAgJCgyKTsgY3AgJEAgJCgyKQorICAgICAgY21kX21vZHVsZXNfaW5zdGFsbCA9IG1rZGly IC1wICQoMik7IFwKKwkJCSAgICBjcCAkKGZpcnN0d29yZCAkKHdpbGRjYXJkICRAcykgJEApICQo MikvJChiYXNlbmFtZSAkKEBGKSkua28KIAogIyBNb2R1bGVzIGJ1aWx0IG91dHNpZGUgdGhlIGtl cm5lbCBzb3VyY2UgdHJlZSBnbyBpbnRvIGV4dHJhIGJ5IGRlZmF1bHQKIElOU1RBTExfTU9EX0RJ UiA/PSBleHRyYQotLS0gMi42LjE0L3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdAkyMDA1LTEwLTI4 IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42LjE0LWthbGxzeW1zL3NjcmlwdHMvTWFr ZWZpbGUubW9kcG9zdAkyMDA1LTExLTA0IDE2OjE5OjM1LjAwMDAwMDAwMCArMDEwMApAQCAtNDEs OSArNDEsMzMgQEAgaW5jbHVkZSBzY3JpcHRzL01ha2VmaWxlLmxpYgogCiBzeW12ZXJmaWxlIDo9 ICQob2JqdHJlZSkvTW9kdWxlLnN5bXZlcnMKIAoraWZkZWYgQ09ORklHX0tBTExTWU1TCisKK2lm ZGVmIENPTkZJR19LQUxMU1lNU19UUkFESVRJT05BTAorCitrYWxsc3ltcy1zdHJpcC1zcmMgOj0K KworZWxzZQorCitrYWxsc3ltcy1zdHJpcC1zcmMgOj0gJChpZiAkKENPTkZJR19LQUxMU1lNU19T VFJJUF9HRU5FUkFURUQpLCQoc3JjdHJlZSkvc2NyaXB0cy9rYWxsc3ltcy5zdHJpcCkKK2thbGxz eW1zLXN0cmlwLXNyYyArPSAkKGlmICQoQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRCks JCh3aWxkY2FyZCAkKHNyY3RyZWUpL2FyY2gvJChBUkNIKS9rYWxsc3ltcy5zdHJpcCkpCisjIGJp bnV0aWxzIHVwIHRvIGF0IGxlYXN0IDIuMTUgZG8gbm90IHBlcm1pdCBzdHJpcHBpbmcgc3ltYm9s cyBieSBuYW1lIHdoaWxlCisjIHJldGFpbmluZyB0aG9zZSB0aGF0IGFyZSBuZWVkZWQgYnkgcmVs b2NhdGlvbnMuLi4KKyMga2FsbHN5bXMtc3RyaXAtc3JjICs9ICQoaWYgJChDT05GSUdfS0FMTFNZ TVNfQUxMKSwsZGF0YSkKKworZW5kaWYKKwora28gOj0gJChpZiAkKHN0cmlwICQoa2FsbHN5bXMt c3RyaXAtc3JjKSksLmtvcywua28pCisKK2Vsc2UKKwora28gOj0gLmtvcworCitlbmRpZgorCiAj IFN0ZXAgMSksIGZpbmQgYWxsIG1vZHVsZXMgbGlzdGVkIGluICQoTU9EVkVSRElSKS8KIF9fbW9k dWxlcyA6PSAkKHNvcnQgJChzaGVsbCBncmVwIC1oICdcLmtvJyAvZGV2L251bGwgJCh3aWxkY2Fy ZCAkKE1PRFZFUkRJUikvKi5tb2QpKSkKLW1vZHVsZXMgICA6PSAkKHBhdHN1YnN0ICUubywlLmtv LCAkKHdpbGRjYXJkICQoX19tb2R1bGVzOi5rbz0ubykpKQorbW9kdWxlcyAgIDo9ICQocGF0c3Vi c3QgJS5vLCUkKGtvKSwgJCh3aWxkY2FyZCAkKF9fbW9kdWxlczoua289Lm8pKSkKIAogX21vZHBv c3Q6ICQobW9kdWxlcykKIApAQCAtNTgsMTIgKzgyLDEyIEBAIHF1aWV0X2NtZF9tb2Rwb3N0ID0g TU9EUE9TVAogCSQoZmlsdGVyLW91dCBGT1JDRSwkXikKIAogLlBIT05ZOiBfX21vZHBvc3QKLV9f bW9kcG9zdDogJCh3aWxkY2FyZCB2bWxpbnV4KSAkKG1vZHVsZXM6LmtvPS5vKSBGT1JDRQorX19t b2Rwb3N0OiAkKHdpbGRjYXJkIHZtbGludXgpICQobW9kdWxlczokKGtvKT0ubykgRk9SQ0UKIAkk KGNhbGwgY21kLG1vZHBvc3QpCiAKICMgRGVjbGFyZSBnZW5lcmF0ZWQgZmlsZXMgYXMgdGFyZ2V0 cyBmb3IgbW9kcG9zdAogJChzeW12ZXJmaWxlKTogICAgICAgICBfX21vZHBvc3QgOwotJChtb2R1 bGVzOi5rbz0ubW9kLmMpOiBfX21vZHBvc3QgOworJChtb2R1bGVzOiQoa28pPS5tb2QuYyk6IF9f bW9kcG9zdCA7CiAKIAogIyBTdGVwIDUpLCBjb21waWxlIGFsbCAqLm1vZC5jIGZpbGVzCkBAIC03 NSwxOSArOTksNTEgQEAgcXVpZXRfY21kX2NjX29fYyA9IENDICAgICAgJEAKICAgICAgIGNtZF9j Y19vX2MgPSAkKENDKSAkKGNfZmxhZ3MpICQoQ0ZMQUdTX01PRFVMRSkJXAogCQkgICAtYyAtbyAk QCAkPAogCi0kKG1vZHVsZXM6LmtvPS5tb2Qubyk6ICUubW9kLm86ICUubW9kLmMgRk9SQ0UKKyQo bW9kdWxlczokKGtvKT0ubW9kLm8pOiAlLm1vZC5vOiAlLm1vZC5jIEZPUkNFCiAJJChjYWxsIGlm X2NoYW5nZWRfZGVwLGNjX29fYykKIAotdGFyZ2V0cyArPSAkKG1vZHVsZXM6LmtvPS5tb2QubykK K3RhcmdldHMgKz0gJChtb2R1bGVzOiQoa28pPS5tb2QubykKIAogIyBTdGVwIDYpLCBmaW5hbCBs aW5rIG9mIHRoZSBtb2R1bGVzCiBxdWlldF9jbWRfbGRfa29fbyA9IExEIFtNXSAgJEAKICAgICAg IGNtZF9sZF9rb19vID0gJChMRCkgJChMREZMQUdTKSAkKExERkxBR1NfTU9EVUxFKSAtbyAkQCAJ CVwKIAkJCSAgJChmaWx0ZXItb3V0IEZPUkNFLCReKQogCi0kKG1vZHVsZXMpOiAlLmtvIDolLm8g JS5tb2QubyBGT1JDRQoraWZlcSAoJChrbyksLmtvKQorCiskKG1vZHVsZXMpOiAlLmtvOiAlLm8g JS5tb2QubyBGT1JDRQorCSQoUSlybSAtZiAkQHMKKwkkKGNhbGwgaWZfY2hhbmdlZCxsZF9rb19v KQorCitlbHNlCisKKyQocGF0c3Vic3QgJSQoa28pLCUua28sJChtb2R1bGVzKSk6ICUua286ICUu byAlLm1vZC5vIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbGRfa29fbykKIAorIyBTdGVwIDcp LCBzdHJpcCBhcyBtYW55IHN5bWJvbHMgZnJvbSB0aGUgbW9kdWxlcyBhcyBmZWFzaWJsZQorcXVp ZXRfY21kX3N0cmlwX2tvc19rbyA9IFNUUklQICAgJDwKK2lmZGVmIENPTkZJR19LQUxMU1lNUwor Y21kX3N0cmlwX2tvc19rbyA9ICQoT0JKQ09QWSkgLS1zdHJpcC1kZWJ1ZyAkKGFkZHByZWZpeCAt LXN0cmlwLXN5bWJvbHMgLCQoZmlsdGVyICUuc3RyaXAsJF4pKSAtdyAkPCAkQAorZWxzZQorY21k X3N0cmlwX2tvc19rbyA9ICQoT0JKQ09QWSkgLS1zdHJpcC1kZWJ1ZyAtLXN0cmlwLXVubmVlZGVk ICQ8ICRACitlbmRpZgorCislJChrbyk6ICUua28gJChmaWx0ZXIgJS5zdHJpcCwkKGthbGxzeW1z LXN0cmlwLXNyYykpICQoaWYgJChmaWx0ZXIgZGF0YSwkKGthbGxzeW1zLXN0cmlwLXNyYykpLC5k YXRhXyUuc3RyaXApIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsc3RyaXBfa29zX2tvKQorCisu UFJFQ0lPVVM6IC5kYXRhXyUuc3RyaXAKKy5kYXRhXyUuc3RyaXA6ICUua28gLmNvbmZpZworCSQo USkkKE5NKSAkPCB8IHNlZCAtbiAncyxbWzp4ZGlnaXQ6XV1cK1tbOnNwYWNlOl1dXCtbXnRUXVtb OnNwYWNlOl1dXCtcKC4qXCksXDEscCcgXAorCQl8IHdoaWxlIHJlYWQgaTsgZG8gY2FzZSAkJGkg aW4gXAorCQkJJChhZGRzdWZmaXggJChjbG9zZSk7OywkKHNoZWxsIGNhdCAkKGZpbHRlciAkKHNy Y3RyZWUpLyUsJChrYWxsc3ltcy1zdHJpcC1zcmMpKSBcCisJCQkJfCBzZWQgJ3MsXChbO3wmPD4o KSQkXFxdXCksXFxcMSxnJykpIFwKKwkJCSopIGVjaG8gJCRpOzsgXAorCQllc2FjOyBkb25lID4k QAorCit0YXJnZXRzICs9ICQocGF0c3Vic3QgJSQoa28pLCUua28sJChtb2R1bGVzKSkKKworZW5k aWYKKwogdGFyZ2V0cyArPSAkKG1vZHVsZXMpCiAKIAotLS0gMi42LjE0L3NjcmlwdHMvZ2Vua3N5 bXMvZ2Vua3N5bXMuYwkyMDA1LTEwLTI4IDAyOjAyOjA4LjAwMDAwMDAwMCArMDIwMAorKysgMi42 LjE0LWthbGxzeW1zL3NjcmlwdHMvZ2Vua3N5bXMvZ2Vua3N5bXMuYwkyMDA1LTExLTA0IDE2OjE5 OjM1LjAwMDAwMDAwMCArMDEwMApAQCAtNDMsNyArNDMsNyBAQCBGSUxFICpkZWJ1Z2ZpbGU7CiBp bnQgY3VyX2xpbmUgPSAxOwogY2hhciAqY3VyX2ZpbGVuYW1lLCAqb3V0cHV0X2RpcmVjdG9yeTsK IAotaW50IGZsYWdfZGVidWcsIGZsYWdfZHVtcF9kZWZzLCBmbGFnX3dhcm5pbmdzOworaW50IGZs YWdfZGVidWcsIGZsYWdfZHVtcF9kZWZzLCBmbGFnX3dhcm5pbmdzLCBmbGFnX2lubGluZV9hc207 CiAKIHN0YXRpYyBpbnQgZXJyb3JzOwogc3RhdGljIGludCBuc3ltczsKQEAgLTQ1Nyw4ICs0NTcs MTYgQEAgZXhwb3J0X3N5bWJvbChjb25zdCBjaGFyICpuYW1lKQogICAgICAgaWYgKGZsYWdfZHVt cF9kZWZzKQogCWZwdXRzKCI+XG4iLCBkZWJ1Z2ZpbGUpOwogCi0gICAgICAvKiBVc2VkIGFzIGEg bGlua2VyIHNjcmlwdC4gKi8KLSAgICAgIHByaW50ZigiX19jcmNfJXMgPSAweCUwOGx4IDtcbiIs IG5hbWUsIGNyYyk7CisgICAgICBpZiAoIWZsYWdfaW5saW5lX2FzbSkKKwl7CisJICAvKiBVc2Vk IGFzIGEgbGlua2VyIHNjcmlwdC4gKi8KKwkgIHByaW50ZigiX19jcmNfJXMgPSAweCUwOGx4IDtc biIsIG5hbWUsIGNyYyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFVzZWQgYXMgaW5saW5l IGFzc2VtYmx5LiAqLworCSAgcHJpbnRmKCJfX2FzbV9fKFwiLmVxdWl2IF9fY3JjXyVzLCAweCUw OGx4XCIpO1xuIiwgbmFtZSwgY3JjKTsKKwl9CiAgICAgfQogfQogCkBAIC01MjksNiArNTM3LDcg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAKICNpZmRlZiBfX0dOVV9MSUJSQVJZX18K ICAgc3RydWN0IG9wdGlvbiBsb25nX29wdHNbXSA9IHsKKyAgICB7ImFzbSIsIDAsIDAsICdhJ30s CiAgICAgeyJkZWJ1ZyIsIDAsIDAsICdkJ30sCiAgICAgeyJ3YXJuaW5ncyIsIDAsIDAsICd3J30s CiAgICAgeyJxdWlldCIsIDAsIDAsICdxJ30sCkBAIC01MzgsMTMgKzU0NywxNiBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKICAgICB7MCwgMCwgMCwgMH0KICAgfTsKIAotICB3aGlsZSAo KG8gPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiZHdxVkRrOnA6IiwKKyAgd2hpbGUgKChvID0g Z2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFkd3FWRGs6cDoiLAogCQkJICAmbG9uZ19vcHRzWzBd LCBOVUxMKSkgIT0gRU9GKQogI2Vsc2UgIC8qIF9fR05VX0xJQlJBUllfXyAqLwotICB3aGlsZSAo KG8gPSBnZXRvcHQoYXJnYywgYXJndiwgImR3cVZEazpwOiIpKSAhPSBFT0YpCisgIHdoaWxlICgo byA9IGdldG9wdChhcmdjLCBhcmd2LCAiYWR3cVZEazpwOiIpKSAhPSBFT0YpCiAjZW5kaWYgLyog X19HTlVfTElCUkFSWV9fICovCiAgICAgc3dpdGNoIChvKQogICAgICAgeworICAgICAgY2FzZSAn YSc6CisJZmxhZ19pbmxpbmVfYXNtID0gMTsKKwlicmVhazsKICAgICAgIGNhc2UgJ2QnOgogCWZs YWdfZGVidWcrKzsKIAlicmVhazsKLS0tIDIuNi4xNC9zY3JpcHRzL2thbGxzeW1zLmMJMjAwNS0x MC0yOCAwMjowMjowOC4wMDAwMDAwMDAgKzAyMDAKKysrIDIuNi4xNC1rYWxsc3ltcy9zY3JpcHRz L2thbGxzeW1zLmMJMjAwNS0xMS0wNyAxMTo1NToxMS4wMDAwMDAwMDAgKzAxMDAKQEAgLTMwLDYg KzMwLDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNs dWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgogCiAjZGVmaW5lIEtTWU1fTkFNRV9M RU4JCTEyNwogCkBAIC00Myw2ICs0NCw3IEBAIHN0cnVjdCBzeW1fZW50cnkgewogCiBzdGF0aWMg c3RydWN0IHN5bV9lbnRyeSAqdGFibGU7CiBzdGF0aWMgdW5zaWduZWQgaW50IHRhYmxlX3NpemUs IHRhYmxlX2NudDsKK3N0YXRpYyBsb25nIHN0YWdlOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9u ZyBfc3RleHQsIF9ldGV4dCwgX3Npbml0dGV4dCwgX2Vpbml0dGV4dCwgX3NleHRyYXRleHQsIF9l ZXh0cmF0ZXh0Owogc3RhdGljIGludCBhbGxfc3ltYm9scyA9IDA7CiBzdGF0aWMgY2hhciBzeW1i b2xfcHJlZml4X2NoYXIgPSAnXDAnOwpAQCAtNTYsNyArNTgsNyBAQCB1bnNpZ25lZCBjaGFyIGJl c3RfdGFibGVfbGVuWzI1Nl07CiAKIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiB7Ci0JZnByaW50 ZihzdGRlcnIsICJVc2FnZToga2FsbHN5bXMgWy0tYWxsLXN5bWJvbHNdIFstLXN5bWJvbC1wcmVm aXg9PHByZWZpeCBjaGFyPl0gPCBpbi5tYXAgPiBvdXQuU1xuIik7CisJZnByaW50ZihzdGRlcnIs ICJVc2FnZToga2FsbHN5bXMgW3N0YWdlXSBbLS1hbGwtc3ltYm9sc10gWy0tc3ltYm9sLXByZWZp eD08cHJlZml4IGNoYXI+XSA8IGluLm1hcCA+IG91dC5TXG4iKTsKIAlleGl0KDEpOwogfQogCkBA IC02Niw4ICs2OCwxMiBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogICovCiBzdGF0aWMgaW5s aW5lIGludCBpc19hcm1fbWFwcGluZ19zeW1ib2woY29uc3QgY2hhciAqc3RyKQogeworI2lmIGRl ZmluZWQoQVJDSF9hcm0pIHx8IGRlZmluZWQoQVJDSF9hcm0yNikKIAlyZXR1cm4gc3RyWzBdID09 ICckJyAmJiBzdHJjaHIoImF0ZCIsIHN0clsxXSkKIAkgICAgICAgJiYgKHN0clsyXSA9PSAnXDAn IHx8IHN0clsyXSA9PSAnLicpOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgogfQogCiBzdGF0 aWMgaW50IHJlYWRfc3ltYm9sKEZJTEUgKmluLCBzdHJ1Y3Qgc3ltX2VudHJ5ICpzKQpAQCAtMTM4 LDEzICsxNDQsNiBAQCBzdGF0aWMgaW50IHN5bWJvbF92YWxpZChzdHJ1Y3Qgc3ltX2VudHJ5CiAJ ICogc3BlY2lmaWVkIHNvIGV4Y2x1ZGUgdGhlbSB0byBnZXQgYSBzdGFibGUgc3ltYm9sIGxpc3Qu CiAJICovCiAJc3RhdGljIGNoYXIgKnNwZWNpYWxfc3ltYm9sc1tdID0gewotCQkia2FsbHN5bXNf YWRkcmVzc2VzIiwKLQkJImthbGxzeW1zX251bV9zeW1zIiwKLQkJImthbGxzeW1zX25hbWVzIiwK LQkJImthbGxzeW1zX21hcmtlcnMiLAotCQkia2FsbHN5bXNfdG9rZW5fdGFibGUiLAotCQkia2Fs bHN5bXNfdG9rZW5faW5kZXgiLAotCiAJLyogRXhjbHVkZSBsaW5rZXIgZ2VuZXJhdGVkIHN5bWJv bHMgd2hpY2ggdmFyeSBiZXR3ZWVuIHBhc3NlcyAqLwogCQkiX1NEQV9CQVNFXyIsCQkvKiBwcGMg Ki8KIAkJIl9TREEyX0JBU0VfIiwJCS8qIHBwYyAqLwpAQCAtMTc2LDcgKzE3NSw4IEBAIHN0YXRp YyBpbnQgc3ltYm9sX3ZhbGlkKHN0cnVjdCBzeW1fZW50cnkKIAl9CiAKIAkvKiBFeGNsdWRlIHN5 bWJvbHMgd2hpY2ggdmFyeSBiZXR3ZWVuIHBhc3Nlcy4gKi8KLQlpZiAoc3Ryc3RyKChjaGFyICop cy0+c3ltICsgb2Zmc2V0LCAiX2NvbXBpbGVkLiIpKQorCWlmIChzdHJzdHIoKGNoYXIgKilzLT5z eW0gKyBvZmZzZXQsICJfY29tcGlsZWQuIikKKwkgICAgfHwgc3RybmNtcCgoY2hhciAqKXMtPnN5 bSArIG9mZnNldCwgIl9fY29tcG91bmRfbGl0ZXJhbC4iLCAxOSkgPT0gMCkKIAkJcmV0dXJuIDA7 CiAKIAlmb3IgKGkgPSAwOyBzcGVjaWFsX3N5bWJvbHNbaV07IGkrKykKQEAgLTI1OCw3ICsyNTgs NDIgQEAgc3RhdGljIHZvaWQgd3JpdGVfc3JjKHZvaWQpCiAJcHJpbnRmKCIjZGVmaW5lIEFMR04g LmFsaWduIDRcbiIpOwogCXByaW50ZigiI2VuZGlmXG4iKTsKIAotCXByaW50ZigiLmRhdGFcbiIp OworCXByaW50ZigiLnNlY3Rpb24gLnJvZGF0YSwgXCJhXCJcbiIpOworCisJaWYgKHN0YWdlKSB7 CisJCXN0YXRpYyBzdHJ1Y3QgeworCQkJY29uc3QgY2hhcipuYW1lOworCQkJdW5zaWduZWQgd3Jp dGVhYmxlOjE7CisJCQl1bnNpZ25lZCBhbGlnbmVkOjE7CisJCX0gY29uc3Qgd2hhdFtdID0gewor CQkJeyJzZWN0aW9ucyIsIDEsIDF9LAorCQkJeyJzeW10YWIiLCAgIDEsIDF9LAorCQkJeyJzdHJ0 YWIiLCAgIDAsIDB9LAorCQkJeyJzaHN0cnRhYiIsIDAsIDB9CisJCX07CisKKwkJZm9yIChpID0g MDsgaSA8IHNpemVvZih3aGF0KS9zaXplb2YoKndoYXQpOyArK2kpIHsKKwkJCWlmICh3aGF0W2ld LndyaXRlYWJsZSkKKwkJCQlwcmludGYoIi5kYXRhXG4iKTsKKwkJCXByaW50ZigiLmdsb2JsIGth bGxzeW1zXyVzLCBrYWxsc3ltc19zaXplXyVzXG4iLCB3aGF0W2ldLm5hbWUsIHdoYXRbaV0ubmFt ZSk7CisJCQlpZiAod2hhdFtpXS5hbGlnbmVkKQorCQkJCXByaW50ZigiXHRBTEdOXG4iKTsKKwkJ CXByaW50Zigia2FsbHN5bXNfJXM6XG4iLCB3aGF0W2ldLm5hbWUpOworCQkJcHJpbnRmKCIuaW5j YmluIFwiLnRtcF9rYWxsc3ltcyVsZC4lc1wiXG4iLCBsYWJzKHN0YWdlKSAtIDEsIHdoYXRbaV0u bmFtZSk7CisJCQlwcmludGYoIi5lcXUgX19rYWxsc3ltc19zaXplXyVzLCAuIC0ga2FsbHN5bXNf JXNcbiIsIHdoYXRbaV0ubmFtZSwgd2hhdFtpXS5uYW1lKTsKKwkJCWlmICh3aGF0W2ldLndyaXRl YWJsZSkKKwkJCQlwcmludGYoIi5wcmV2aW91c1xuIik7CisJCQlwcmludGYoIlxuIik7CisJCX0K KwkJcHJpbnRmKCJcdEFMR05cbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHdoYXQpL3Np emVvZigqd2hhdCk7ICsraSkgeworCQkJcHJpbnRmKCJrYWxsc3ltc19zaXplXyVzOlxuIiwgd2hh dFtpXS5uYW1lKTsKKwkJCXByaW50ZigiXHRQVFJcdF9fa2FsbHN5bXNfc2l6ZV8lc1xuIiwgd2hh dFtpXS5uYW1lKTsKKwkJfQorCQlwcmludGYoIlxuIik7CisJfQorCWlmIChzdGFnZSA8IDApCisJ CXJldHVybjsKIAogCW91dHB1dF9sYWJlbCgia2FsbHN5bXNfYWRkcmVzc2VzIik7CiAJZm9yIChp ID0gMDsgaSA8IHRhYmxlX2NudDsgaSsrKSB7CkBAIC00NzIsMjUgKzUwNywyOCBAQCBzdGF0aWMg dm9pZCBvcHRpbWl6ZV90b2tlbl90YWJsZSh2b2lkKQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiB7Ci0JaWYgKGFyZ2MgPj0gMikgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMTsg aSA8IGFyZ2M7IGkrKykgewotCQkJaWYoc3RyY21wKGFyZ3ZbaV0sICItLWFsbC1zeW1ib2xzIikg PT0gMCkKLQkJCQlhbGxfc3ltYm9scyA9IDE7Ci0JCQllbHNlIGlmIChzdHJuY21wKGFyZ3ZbaV0s ICItLXN5bWJvbC1wcmVmaXg9IiwgMTYpID09IDApIHsKLQkJCQljaGFyICpwID0gJmFyZ3ZbaV1b MTZdOwotCQkJCS8qIHNraXAgcXVvdGUgKi8KLQkJCQlpZiAoKCpwID09ICciJyAmJiAqKHArMikg PT0gJyInKSB8fCAoKnAgPT0gJ1wnJyAmJiAqKHArMikgPT0gJ1wnJykpCi0JCQkJCXArKzsKLQkJ CQlzeW1ib2xfcHJlZml4X2NoYXIgPSAqcDsKLQkJCX0gZWxzZQotCQkJCXVzYWdlKCk7Ci0JCX0K LQl9IGVsc2UgaWYgKGFyZ2MgIT0gMSkKLQkJdXNhZ2UoKTsKKwlpbnQgaTsKKworCWZvciAoaSA9 IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYoc3RyY21wKGFyZ3ZbaV0sICItLWFsbC1zeW1ib2xz IikgPT0gMCkKKwkJCWFsbF9zeW1ib2xzID0gMTsKKwkJZWxzZSBpZiAoc3RybmNtcChhcmd2W2ld LCAiLS1zeW1ib2wtcHJlZml4PSIsIDE2KSA9PSAwKSB7CisJCQljaGFyICpwID0gJmFyZ3ZbaV1b MTZdOworCisJCQkvKiBza2lwIHF1b3RlICovCisJCQlpZiAoKCpwID09ICciJyB8fCAqcCA9PSAn XCcnKSAmJiBwWzJdID09ICpwKQorCQkJCXArKzsKKwkJCXN5bWJvbF9wcmVmaXhfY2hhciA9ICpw OworCQl9IGVsc2UgaWYgKChzdGFnZSA9IHN0cnRvbChhcmd2W2ldLCBhcmd2ICsgaSwgMCkpID09 IDAKKwkJICAgICAgICAgICB8fCBzdGFnZSA+PSBMT05HX01BWAorCQkgICAgICAgICAgIHx8IHN0 YWdlIDw9IExPTkdfTUlOCisJCSAgICAgICAgICAgfHwgKmFyZ3ZbaV0pCisJCQl1c2FnZSgpOwor CX0KIAogCXJlYWRfbWFwKHN0ZGluKTsKLQlvcHRpbWl6ZV90b2tlbl90YWJsZSgpOworCWlmIChz dGFnZSA+PSAwICYmIHRhYmxlX2NudCkKKwkJb3B0aW1pemVfdG9rZW5fdGFibGUoKTsKIAl3cml0 ZV9zcmMoKTsKIAogCXJldHVybiAwOwotLS0gMi42LjE0L3NjcmlwdHMva2FsbHN5bXMuc3RyaXAJ MTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIDIuNi4xNC1rYWxsc3ltcy9z Y3JpcHRzL2thbGxzeW1zLnN0cmlwCTIwMDUtMDMtMjEgMTY6MzQ6MDkuMDAwMDAwMDAwICswMTAw CkBAIC0wLDAgKzEsMTggQEAKKzwqPgorX19jb21wb3VuZF9saXRlcmFsWyQuXVswLTldKgorX19j cmNfW2EtekEtWl9dKgorX19leGl0Y2FsbF9bYS16QS1aX10qCitfX2Z1bmNfX1skLl1bMC05XSoK K19fRlVOQ1RJT05fX1skLl1bMC05XSoKK2djY1swLTldX2NvbXBpbGVkWyQuXQorX19pbml0Y2Fs bF9bYS16QS1aX10qCitfX2tjcmN0YWJfW2EtekEtWl9dKgorX19rc3RydGFiX1thLXpBLVpfXSoK K19fa3N5bXRhYl9bYS16QS1aX10qCitfX21vZF9bYS16QS1aX10qWzAtOV0KK19fbW9kdWxlX2Rl cGVuZHMKK19fcGFyYW1fW2EtekEtWl9dKgorX19wY2lfZml4dXBfW0EtWl0qCitfX1BSRVRUWV9G VU5DVElPTl9fWyQuXVswLTldKgorX19zZXR1cF9bYS16QS1aXzAtOV0qCitfX19fdmVyc2lvbnMK --=__Part57756B0E.0__=--