From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Grytsov Subject: [PATCH v1 5/6] xl: add vkb config parser and CLI Date: Wed, 1 Nov 2017 17:05:06 +0200 Message-ID: <1509548707-6134-6-git-send-email-al1img@gmail.com> References: <1509548707-6134-1-git-send-email-al1img@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e9ua3-0005LN-OI for xen-devel@lists.xenproject.org; Wed, 01 Nov 2017 15:05:23 +0000 Received: by mail-lf0-f67.google.com with SMTP id n69so2892859lfn.2 for ; Wed, 01 Nov 2017 08:05:21 -0700 (PDT) In-Reply-To: <1509548707-6134-1-git-send-email-al1img@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, Oleksandr Grytsov List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIEdyeXRzb3YgPG9sZWtzYW5kcl9ncnl0c292QGVwYW0uY29tPgoKU2ln bmVkLW9mZi1ieTogT2xla3NhbmRyIEdyeXRzb3YgPG9sZWtzYW5kcl9ncnl0c292QGVwYW0uY29t PgotLS0KIHRvb2xzL3hsL01ha2VmaWxlICAgICAgfCAgIDIgKy0KIHRvb2xzL3hsL3hsLmggICAg ICAgICAgfCAgIDMgKysKIHRvb2xzL3hsL3hsX2NtZHRhYmxlLmMgfCAgMTUgKysrKysrCiB0b29s cy94bC94bF9wYXJzZS5jICAgIHwgIDc1ICsrKysrKysrKysrKysrKysrKysrKysrKystCiB0b29s cy94bC94bF9wYXJzZS5oICAgIHwgICAyICstCiB0b29scy94bC94bF92a2IuYyAgICAgIHwgMTQy ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDYgZmls ZXMgY2hhbmdlZCwgMjM2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgdG9vbHMveGwveGxfdmtiLmMKCmRpZmYgLS1naXQgYS90b29scy94bC9NYWtlZmls ZSBiL3Rvb2xzL3hsL01ha2VmaWxlCmluZGV4IDY2YmRiZGUuLjI3NjkyOTUgMTAwNjQ0Ci0tLSBh L3Rvb2xzL3hsL01ha2VmaWxlCisrKyBiL3Rvb2xzL3hsL01ha2VmaWxlCkBAIC0yMiw3ICsyMiw3 IEBAIFhMX09CSlMgKz0geGxfdnRwbS5vIHhsX2Jsb2NrLm8geGxfbmljLm8geGxfdXNiLm8KIFhM X09CSlMgKz0geGxfc2NoZWQubyB4bF9wY2kubyB4bF92Y3B1Lm8geGxfY2Ryb20ubyB4bF9tZW0u bwogWExfT0JKUyArPSB4bF9pbmZvLm8geGxfY29uc29sZS5vIHhsX21pc2MubwogWExfT0JKUyAr PSB4bF92bWNvbnRyb2wubyB4bF9zYXZlcmVzdG9yZS5vIHhsX21pZ3JhdGUubwotWExfT0JKUyAr PSB4bF92ZGlzcGwubyB4bF92c25kLm8KK1hMX09CSlMgKz0geGxfdmRpc3BsLm8geGxfdnNuZC5v IHhsX3ZrYi5vCiAKICQoWExfT0JKUyk6IENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW50b29sbG9n KQogJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX1hMKQpkaWZmIC0tZ2l0IGEvdG9vbHMv eGwveGwuaCBiL3Rvb2xzL3hsL3hsLmgKaW5kZXggNzAzY2FhNi4uODI2ZTljMSAxMDA2NDQKLS0t IGEvdG9vbHMveGwveGwuaAorKysgYi90b29scy94bC94bC5oCkBAIC0xNzAsNiArMTcwLDkgQEAg aW50IG1haW5fdnRwbWRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fdmRp c3BsYXR0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl92ZGlzcGxsaXN0KGlu dCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl92ZGlzcGxkZXRhY2goaW50IGFyZ2MsIGNo YXIgKiphcmd2KTsKK2ludCBtYWluX3ZrYmF0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwor aW50IG1haW5fdmtibGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworaW50IG1haW5fdmtiZGV0 YWNoKGludCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl92c25kYXR0YWNoKGludCBhcmdj LCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl92c25kbGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3Yp OwogaW50IG1haW5fdnNuZGRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwpkaWZmIC0tZ2l0 IGEvdG9vbHMveGwveGxfY21kdGFibGUuYyBiL3Rvb2xzL3hsL3hsX2NtZHRhYmxlLmMKaW5kZXgg OGUxNjJjZS4uOGYwNzZkMCAxMDA2NDQKLS0tIGEvdG9vbHMveGwveGxfY21kdGFibGUuYworKysg Yi90b29scy94bC94bF9jbWR0YWJsZS5jCkBAIC0zNzgsNiArMzc4LDIxIEBAIHN0cnVjdCBjbWRf c3BlYyBjbWRfdGFibGVbXSA9IHsKICAgICAgICJEZXN0cm95IGEgZG9tYWluJ3MgdmlydHVhbCBU UE0gZGV2aWNlIiwKICAgICAgICI8RG9tYWluPiA8RGV2SWR8dXVpZD4iLAogICAgIH0sCisgICAg eyAidmtiLWF0dGFjaCIsCisgICAgICAmbWFpbl92a2JhdHRhY2gsIDEsIDEsCisgICAgICAiQ3Jl YXRlIGEgbmV3IHZpcnR1YWwga2V5Ym9hcmQgZGV2aWNlIiwKKyAgICAgICI8RG9tYWluPiBbaWQ9 PElucHV0SWQ+XSBbYmFja2VuZC10eXBlPTxCYWNrZW5kVHlwZT5dIFtiYWNrZW5kPTxCYWNrRG9t YWluPl0iLAorICAgIH0sCisgICAgeyAidmtiLWxpc3QiLAorICAgICAgJm1haW5fdmtibGlzdCwg MCwgMCwKKyAgICAgICJMaXN0IHZpcnR1YWwga2V5Ym9hcmQgZGV2aWNlcyBmb3IgYSBkb21haW4i LAorICAgICAgIjxEb21haW4ocyk+IiwKKyAgICB9LAorICAgIHsgInZrYi1kZXRhY2giLAorICAg ICAgJm1haW5fdmtiZGV0YWNoLCAwLCAxLAorICAgICAgIkRlc3Ryb3kgYSBkb21haW4ncyB2aXJ0 dWFsIGtleWJvYXJkIGRldmljZSIsCisgICAgICAiPERvbWFpbj4gPERldklkPiIsCisgICAgfSwK ICAgICB7ICJ2ZGlzcGwtYXR0YWNoIiwKICAgICAgICZtYWluX3ZkaXNwbGF0dGFjaCwgMSwgMSwK ICAgICAgICJDcmVhdGUgYSBuZXcgdmlydHVhbCBkaXNwbGF5IGRldmljZSIsCmRpZmYgLS1naXQg YS90b29scy94bC94bF9wYXJzZS5jIGIvdG9vbHMveGwveGxfcGFyc2UuYwppbmRleCBkNGMyZWZi Li5lMDE4MzM3IDEwMDY0NAotLS0gYS90b29scy94bC94bF9wYXJzZS5jCisrKyBiL3Rvb2xzL3hs L3hsX3BhcnNlLmMKQEAgLTEwOTksNiArMTA5OSw3NyBAQCBzdGF0aWMgdm9pZCBwYXJzZV92c25k X2NvbmZpZyhjb25zdCBYTFVfQ29uZmlnICpjb25maWcsCiAgICAgfQogfQogCitpbnQgcGFyc2Vf dmtiX2NvbmZpZyhsaWJ4bF9kZXZpY2VfdmtiICp2a2IsIGNoYXIgKnRva2VuKQoreworICAgIGNo YXIgKm9wYXJnOworCisgICAgaWYgKE1BVENIX09QVElPTigiYmFja2VuZCIsIHRva2VuLCBvcGFy ZykpIHsKKyAgICAgICAgdmtiLT5iYWNrZW5kX2RvbW5hbWUgPSBzdHJkdXAob3BhcmcpOworICAg IH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJiYWNrZW5kLXR5cGUiLCB0b2tlbiwgb3BhcmcpKSB7 CisgICAgICAgIGxpYnhsX3ZrYl9iYWNrZW5kIGJhY2tlbmRfdHlwZTsKKyAgICAgICAgaWYgKGxp YnhsX3ZrYl9iYWNrZW5kX2Zyb21fc3RyaW5nKG9wYXJnLCAmYmFja2VuZF90eXBlKSkgeworICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIGJhY2tlbmRfdHlwZSBcIiVzXCIgaW4g dmtiIHNwZWNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhcmcpOworICAgICAg ICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHZrYi0+YmFja2VuZF90eXBlID0g YmFja2VuZF90eXBlOworICAgIH0gZWxzZSBpZiAoTUFUQ0hfT1BUSU9OKCJpZCIsIHRva2VuLCBv cGFyZykpIHsKKyAgICAgICAgdmtiLT5pZCA9IHN0cmR1cChvcGFyZyk7CisgICAgfSBlbHNlIHsK KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIHN0cmluZyBcIiVzXCIgaW4gdmtiIHNw ZWNcbiIsIHRva2VuKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBwYXJzZV92a2JfbGlzdChjb25zdCBYTFVfQ29uZmlnICpjb25m aWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fY29uZmlnICpkX2Nv bmZpZykKK3sKKyAgICBYTFVfQ29uZmlnTGlzdCAqdmticzsKKyAgICBjb25zdCBjaGFyICppdGVt OworICAgIGNoYXIgKmJ1ZiA9IE5VTEw7CisgICAgaW50IHJjOworCisgICAgaWYgKCF4bHVfY2Zn X2dldF9saXN0IChjb25maWcsICJ2a2IiLCAmdmticywgMCwgMCkpIHsKKyAgICAgICAgaW50IGVu dHJ5ID0gMDsKKyAgICAgICAgd2hpbGUgKChpdGVtID0geGx1X2NmZ19nZXRfbGlzdGl0ZW0odmti cywgZW50cnkpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmtiICp2a2I7 CisgICAgICAgICAgICBjaGFyICpwOworCisgICAgICAgICAgICB2a2IgPSBBUlJBWV9FWFRFTkRf SU5JVChkX2NvbmZpZy0+dmticywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRfY29uZmlnLT5udW1fdmticywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX2RldmljZV92a2JfaW5pdCk7CisKKyAgICAgICAgICAgIGJ1ZiA9IHN0cmR1cChpdGVt KTsKKworICAgICAgICAgICAgcCA9IHN0cnRvayAoYnVmLCAiLCIpOworICAgICAgICAgICAgd2hp bGUgKHAgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKnAg PT0gJyAnKSBwKys7CisKKyAgICAgICAgICAgICAgICByYyA9IHBhcnNlX3ZrYl9jb25maWcodmti LCBwKTsKKyAgICAgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgICAgICAg ICAgcCA9IHN0cnRvayAoTlVMTCwgIiwiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg aWYgKHZrYi0+YmFja2VuZF90eXBlID09IExJQlhMX1ZLQl9CQUNLRU5EX1VOS05PV04pIHsKKyAg ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJhY2tlbmQtdHlwZSBzaG91bGQgYmUgc2V0 IGluIHZrYiBzcGVjXG4iKTsKKyAgICAgICAgICAgICAgICByYyA9IC0xOyBnb3RvIG91dDsKKyAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgZW50cnkrKzsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIHJjID0gMDsKKworb3V0OgorICAgIGZyZWUoYnVmKTsKKyAgICBpZiAocmMpIGV4aXQoRVhJ VF9GQUlMVVJFKTsKK30KKwogdm9pZCBwYXJzZV9jb25maWdfZGF0YShjb25zdCBjaGFyICpjb25m aWdfc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb25maWdfZGF0 YSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbmZpZ19sZW4sCkBAIC0yNDE5LDcgKzI0 OTAsOSBAQCBza2lwX3VzYmRldjoKICAgICAgICAgICAgICAgICAgICAgIlVua25vd24gZ2ljX3Zl cnNpb24gXCIlc1wiIHNwZWNpZmllZFxuIiwgYnVmKTsKICAgICAgICAgICAgIGV4aXQoLUVSUk9S X0ZBSUwpOwogICAgICAgICB9Ci0gICAgIH0KKyAgICB9CisKKyAgICBwYXJzZV92a2JfbGlzdChj b25maWcsIGRfY29uZmlnKTsKIAogICAgIHhsdV9jZmdfZGVzdHJveShjb25maWcpOwogfQpkaWZm IC0tZ2l0IGEvdG9vbHMveGwveGxfcGFyc2UuaCBiL3Rvb2xzL3hsL3hsX3BhcnNlLmgKaW5kZXgg OWE5NDhlYS4uMTlmNDUzYSAxMDA2NDQKLS0tIGEvdG9vbHMveGwveGxfcGFyc2UuaAorKysgYi90 b29scy94bC94bF9wYXJzZS5oCkBAIC0zNSw3ICszNSw3IEBAIGludCBwYXJzZV9jcHVyYW5nZShj b25zdCBjaGFyICpjcHUsIGxpYnhsX2JpdG1hcCAqY3B1bWFwKTsKIGludCBwYXJzZV9uaWNfY29u ZmlnKGxpYnhsX2RldmljZV9uaWMgKm5pYywgWExVX0NvbmZpZyAqKmNvbmZpZywgY2hhciAqdG9r ZW4pOwogaW50IHBhcnNlX3ZkaXNwbF9jb25maWcobGlieGxfZGV2aWNlX3ZkaXNwbCAqdmRpc3Bs LCBjaGFyICp0b2tlbik7CiBpbnQgcGFyc2VfdnNuZF9pdGVtKGxpYnhsX2RldmljZV92c25kICp2 c25kLCBjb25zdCBjaGFyICpzcGVjKTsKLQoraW50IHBhcnNlX3ZrYl9jb25maWcobGlieGxfZGV2 aWNlX3ZrYiAqdmtiLCBjaGFyICp0b2tlbik7CiBpbnQgbWF0Y2hfb3B0aW9uX3NpemUoY29uc3Qg Y2hhciAqcHJlZml4LCBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFy ZywgY2hhciAqKmFyZ29wdCk7CiAjZGVmaW5lIE1BVENIX09QVElPTihwcmVmaXgsIGFyZywgb3Bh cmcpIFwKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX3ZrYi5jIGIvdG9vbHMveGwveGxfdmtiLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwOTkwMwotLS0gL2Rldi9udWxs CisrKyBiL3Rvb2xzL3hsL3hsX3ZrYi5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJp Z2h0IChDKSAyMDE2IEVQQU0gU3lzdGVtcyBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lv biAyLjEgb25seS4gd2l0aCB0aGUgc3BlY2lhbAorICogZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVz Y3JpYmVkIGluIGZpbGUgTElDRU5TRS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxsaWJ4bC5oPgorI2luY2x1 ZGUgPGxpYnhsX3V0aWxzLmg+CisjaW5jbHVkZSA8bGlieGx1dGlsLmg+CisKKyNpbmNsdWRlICJ4 bC5oIgorI2luY2x1ZGUgInhsX3V0aWxzLmgiCisjaW5jbHVkZSAieGxfcGFyc2UuaCIKKworaW50 IG1haW5fdmtiYXR0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0Owor ICAgIGludCByYzsKKyAgICB1aW50MzJfdCBkb21pZDsKKyAgICBsaWJ4bF9kZXZpY2VfdmtiIHZr YjsKKworICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAidmtiLWF0dGFjaCIs IDIpIHsKKyAgICAgICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAgIGxpYnhsX2Rldmlj ZV92a2JfaW5pdCgmdmtiKTsKKyAgICBkb21pZCA9IGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kKytd KTsKKworICAgIGZvciAoYXJndiArPSBvcHRpbmQsIGFyZ2MgLT0gb3B0aW5kOyBhcmdjID4gMDsg Kythcmd2LCAtLWFyZ2MpIHsKKyAgICAgICAgcmMgPSBwYXJzZV92a2JfY29uZmlnKCZ2a2IsICph cmd2KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAoZHJ5cnVu X29ubHkpIHsKKyAgICAgICAgY2hhciAqanNvbiA9IGxpYnhsX2RldmljZV92a2JfdG9fanNvbihj dHgsICZ2a2IpOworICAgICAgICBwcmludGYoInZrYjogJXNcbiIsIGpzb24pOworICAgICAgICBm cmVlKGpzb24pOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAobGlieGxfZGV2 aWNlX3ZrYl9hZGQoY3R4LCBkb21pZCwgJnZrYiwgMCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRl cnIsICJsaWJ4bF9kZXZpY2VfdmtiX2FkZCBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmMgPSBFUlJP Ul9GQUlMOyBnb3RvIG91dDsKKyAgICB9CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBsaWJ4 bF9kZXZpY2VfdmtiX2Rpc3Bvc2UoJnZrYik7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbWFp bl92a2JsaXN0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0OworICAgIGxp YnhsX2RldmljZV92a2IgKnZrYnM7CisgICAgbGlieGxfdmtiaW5mbyB2a2JpbmZvOworICAgIGlu dCBuYiwgaTsKKworICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAidmtiLWxp c3QiLCAxKSB7CisgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisKKyAgICAvKiAgICAg IElkeCAgQkUgICBIZGwgIFN0YSAgZXZjaCByZWYgSUQgICAgQkUtdHlwZSBCRS1wYXRoICovCisg ICAgcHJpbnRmKCIlLTNzICUtMnMgJS02cyAlLTVzICUtNnMgJTZzICUtMTBzICUtMTBzICUtMzBz XG4iLAorICAgICAgICAgICAiSWR4IiwgIkJFIiwgImhhbmRsZSIsICJzdGF0ZSIsICJldnQtY2gi LCAicmVmIiwKKyAgICAgICAgICAgIklEIiwgIkJFLXR5cGUiLCAiQkUtcGF0aCIpOworICAgIGZv ciAoYXJndiArPSBvcHRpbmQsIGFyZ2MgLT0gb3B0aW5kOyBhcmdjID4gMDsgLS1hcmdjLCArK2Fy Z3YpIHsKKyAgICAgICAgdWludDMyX3QgZG9taWQgPSBmaW5kX2RvbWFpbigqYXJndik7CisgICAg ICAgIHZrYnMgPSBsaWJ4bF9kZXZpY2VfdmtiX2xpc3QoY3R4LCBkb21pZCwgJm5iKTsKKyAgICAg ICAgaWYgKCF2a2JzKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgbmI7ICsraSkgeworICAgICAgICAgICAgaWYgKGxpYnhsX2Rldmlj ZV92a2JfZ2V0aW5mbyhjdHgsIGRvbWlkLCAmdmtic1tpXSwgJnZrYmluZm8pID09IDApIHsKKyAg ICAgICAgICAgICAgICBwcmludGYoIiUtM2QgJS0yZCAlNmQgJTVkICU2ZCAlNmQgJS0xMHMgJS0x MHMgJS0zMHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIHZrYmluZm8uZGV2aWQsIHZrYmlu Zm8uYmFja2VuZF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgdmtiaW5mby5kZXZpZCwgdmti aW5mby5zdGF0ZSwgdmtiaW5mby5ldnRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgdmtiaW5m by5ycmVmLCB2a2JzW2ldLmlkLAorICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92a2JfYmFj a2VuZF90b19zdHJpbmcodmtic1tpXS5iYWNrZW5kX3R5cGUpLAorICAgICAgICAgICAgICAgICAg ICAgICB2a2JpbmZvLmJhY2tlbmQpOworICAgICAgICAgICAgICAgIGxpYnhsX3ZrYmluZm9fZGlz cG9zZSgmdmtiaW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbGlieGxf ZGV2aWNlX3ZrYl9saXN0X2ZyZWUodmticywgbmIpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30K KworaW50IG1haW5fdmtiZGV0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICB1aW50 MzJfdCBkb21pZCwgZGV2aWQ7CisgICAgaW50IG9wdCwgcmM7CisgICAgbGlieGxfZGV2aWNlX3Zr YiB2a2I7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInZrYi1kZXRh Y2giLCAyKSB7CisgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisKKyAgICBkb21pZCA9 IGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kKytdKTsKKyAgICBkZXZpZCA9IGF0b2koYXJndltvcHRp bmQrK10pOworCisgICAgbGlieGxfZGV2aWNlX3ZrYl9pbml0KCZ2a2IpOworCisgICAgaWYgKGxp YnhsX2RldmlkX3RvX2RldmljZV92a2IoY3R4LCBkb21pZCwgZGV2aWQsICZ2a2IpKSB7CisgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IERldmljZSAlZCBub3QgY29ubmVjdGVkLlxuIiwg ZGV2aWQpOworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAg IH0KKworICAgIHJjID0gbGlieGxfZGV2aWNlX3ZrYl9yZW1vdmUoY3R4LCBkb21pZCwgJnZrYiwg MCk7CisgICAgaWYgKHJjKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZGV2aWNl X3ZrYl9yZW1vdmUgZmFpbGVkLlxuIik7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAg ICAgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSAwOworCitvdXQ6CisgICAgbGlieGxfZGV2 aWNlX3ZrYl9kaXNwb3NlKCZ2a2IpOworICAgIHJldHVybiByYzsKK30KKworCisvKgorICogTG9j YWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVu dC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCi0tIAoyLjcuNAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=