From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Tvrtko Ursulin Date: Fri, 8 Feb 2019 12:03:50 +0000 Message-Id: <20190208120351.18505-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [IGT 1/2] tools/intel_gpu_top: Add support for stdout logging List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Eero Tamminen , 3.14pi@ukr.net, Tvrtko Ursulin List-ID: RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClR3byBuZXcg b3V0cHV0IG1vZGVzIGFyZSBhZGRlZDogbGlzdGluZyBvZiB0ZXh0IGRhdGEgdG8gc3RhbmRhcmQg b3V0ICgtbApvbiB0aGUgY29tbWFuZCBsaW5lKSwgYW5kIGR1bXBpbmcgb2YgSlNPTiBmb3JtYXR0 ZWQgcmVjb3JkcyAoLUopLCBhbHNvIHRvCnN0YW5kYXJkIG91dC4KClRoZSBmaXJzdCBtb2RlIGlz IHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBub24taW50ZXJhY3RpdmUgc3RhbmRhcmQgb3V0 CmlzIGRldGVjdGVkLgoKRXhhbXBsZSBvZiB0ZXh0IG91dHB1dDoKCiBGcmVxIE1IeiAgICAgIElS USBSQzYgUG93ZXIgICAgIElNQyBNaUIvcyAgICAgICAgICAgUkNTLzAgICAgICAgICAgIEJDUy8w ICAgICAgICAgICBWQ1MvMCAgICAgICAgICAgVkNTLzEgICAgICAgICAgVkVDUy8wCiByZXEgIGFj dCAgICAgICAvcyAgICUgICAgIFcgICAgIHJkICAgICB3ciAgICAgICAlICBzZSAgd2EgICAgICAg JSAgc2UgIHdhICAgICAgICUgIHNlICB3YSAgICAgICAlICBzZSAgd2EgICAgICAgJSAgc2UgIHdh CiAgIDAgICAgMCAgICAgICAgMCAgIDAgIDAuMDAgICAgMzYwICAgICAgMCAgICAwLjAwICAgMCAg IDAgICAgMC4wMCAgIDAgICAwICAgIDAuMDAgICAwICAgMCAgICAwLjAwICAgMCAgIDAgICAgMC4w MCAgIDAgICAwCiAzNTAgIDM1MCAgICAgICAgMCAxMDAgIDAuMDAgICAgIDM1ICAgICAgMiAgICAw LjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwICAgIDAuMDAgICAwICAgMCAgICAwLjAwICAgMCAg IDAgICAgMC4wMCAgIDAgICAwCiAzNTAgIDM1MCAgICAgICAgMCAxMDAgIDAuMDAgICAgIDM0ICAg ICAgMiAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwICAgIDAuMDAgICAwICAgMCAgICAw LjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwCiAzNTAgIDM1MCAgICAgICAgMCAxMDAgIDAuMDAg ICAgMTQzICAgICAgNiAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwICAgIDAuMDAgICAw ICAgMCAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwCiAzNTAgIDM1MCAgICAgICAgMCAx MDAgIDAuMDAgICAgMTY5ICAgICAgNyAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwICAg IDAuMDAgICAwICAgMCAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwCiAzNTAgIDM1MCAg ICAgICAgMCAxMDAgIDAuMDAgICAgMTY5ICAgICAgNyAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAg IDAgICAwICAgIDAuMDAgICAwICAgMCAgICAwLjAwICAgMCAgIDAgICAgMC4wMCAgIDAgICAwCgpF eGFtcGxlIG9mIEpTT04gb3V0cHV0OgoKewogICAgICAgICJwZXJpb2QiOiB7CiAgICAgICAgICAg ICAgICAiZHVyYXRpb24iOiAxMDAyLjUyNTIyNCwKICAgICAgICAgICAgICAgICJ1bml0IjogIm1z IgogICAgICAgIH0sCiAgICAgICAgImZyZXF1ZW5jeSI6IHsKICAgICAgICAgICAgICAgICJyZXF1 ZXN0ZWQiOiAzNDkuMTE4Mzk4LAogICAgICAgICAgICAgICAgImFjdHVhbCI6IDM0OS4xMTgzOTgs CiAgICAgICAgICAgICAgICAidW5pdCI6ICJNSHoiCiAgICAgICAgfSwKICAgICAgICAiaW50ZXJy dXB0cyI6IHsKICAgICAgICAgICAgICAgICJjb3VudCI6IDAuMDAwMDAwLAogICAgICAgICAgICAg ICAgInVuaXQiOiAiaXJxL3MiCiAgICAgICAgfSwKICAgICAgICAicmM2IjogewogICAgICAgICAg ICAgICAgInZhbHVlIjogOTkuODk3NzUyLAogICAgICAgICAgICAgICAgInVuaXQiOiAiJSIKICAg ICAgICB9LAogICAgICAgICJwb3dlciI6IHsKICAgICAgICAgICAgICAgICJ2YWx1ZSI6IDAuMDAw MDAwLAogICAgICAgICAgICAgICAgInVuaXQiOiAiVyIKICAgICAgICB9LAogICAgICAgICJpbWMt YmFuZHdpZHRoIjogewogICAgICAgICAgICAgICAgInJlYWRzIjogMTQ5LjY4Mzg0MywKICAgICAg ICAgICAgICAgICJ3cml0ZXMiOiA2LjEwNDA5MywKICAgICAgICAgICAgICAgICJ1bml0IjogIk1p Qi9zIgogICAgICAgIH0sCiAgICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICAgICAgICAiUmVu ZGVyLzNELzAiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJidXN5IjogMC4wMDAwMDAsCiAg ICAgICAgICAgICAgICAgICAgICAgICJzZW1hIjogMC4wMDAwMDAsCiAgICAgICAgICAgICAgICAg ICAgICAgICJ3YWl0IjogMC4wMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bml0Ijog IiUiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIkJsaXR0ZXIvMCI6IHsKICAg ICAgICAgICAgICAgICAgICAgICAgImJ1c3kiOiAwLjAwMDAwMCwKICAgICAgICAgICAgICAgICAg ICAgICAgInNlbWEiOiAwLjAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgIndhaXQiOiAw LjAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgInVuaXQiOiAiJSIKICAgICAgICAgICAg ICAgIH0sCiAgICAgICAgICAgICAgICAiVmlkZW8vMCI6IHsKICAgICAgICAgICAgICAgICAgICAg ICAgImJ1c3kiOiAwLjAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgInNlbWEiOiAwLjAw MDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgIndhaXQiOiAwLjAwMDAwMCwKICAgICAgICAg ICAgICAgICAgICAgICAgInVuaXQiOiAiJSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAg ICAgICAiVmlkZW8vMSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgImJ1c3kiOiAwLjAwMDAw MCwKICAgICAgICAgICAgICAgICAgICAgICAgInNlbWEiOiAwLjAwMDAwMCwKICAgICAgICAgICAg ICAgICAgICAgICAgIndhaXQiOiAwLjAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgInVu aXQiOiAiJSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiVmlkZW9FbmhhbmNl LzAiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJidXN5IjogMC4wMDAwMDAsCiAgICAgICAg ICAgICAgICAgICAgICAgICJzZW1hIjogMC4wMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAg ICJ3YWl0IjogMC4wMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bml0IjogIiUiCiAg ICAgICAgICAgICAgICB9CiAgICAgICAgfQp9Cgp2MjoKICogU2hvdyBleGFtcGxlIG91dHB1dCBp biBjb21taXQgbWVzc2FnZS4KICogSW5zdGFsbCBzaWduYWwgaGFuZGxlciB0byBjb21wbGV0ZSBv dXRwdXQgb24gU0lHSU5ULiAoQ2hyaXMgV2lsc29uKQoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVy c3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KUmVmZXJlbmNlczogaHR0cHM6Ly9idWdz LmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4Njg5CkNjOiBFZXJvIFRhbW1pbmVu IDxlZXJvLnQudGFtbWluZW5AaW50ZWwuY29tPgpDYzogMy4xNHBpQHVrci5uZXQKQ2M6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIG1hbi9pbnRlbF9ncHVfdG9w LnJzdCB8ICAgOSArLQogdG9vbHMvaW50ZWxfZ3B1X3RvcC5jIHwgNzYxICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA2NTAgaW5zZXJ0 aW9ucygrKSwgMTIwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL21hbi9pbnRlbF9ncHVfdG9w LnJzdCBiL21hbi9pbnRlbF9ncHVfdG9wLnJzdAppbmRleCAxOWM3MTIzMDdkMjguLmQ1YmRhMDkz YzhlOCAxMDA2NDQKLS0tIGEvbWFuL2ludGVsX2dwdV90b3AucnN0CisrKyBiL21hbi9pbnRlbF9n cHVfdG9wLnJzdApAQCAtNyw5ICs3LDkgQEAgRGlzcGxheSBhIHRvcC1saWtlIHN1bW1hcnkgb2Yg SW50ZWwgR1BVIHVzYWdlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIC4uIGluY2x1ZGU6OiBkZWZzLnJzdAogOkF1dGhvcjogSUdUIERldmVsb3BlcnMgPGln dC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnPgotOkRhdGU6IDIwMTgtMDQtMDQKKzpEYXRlOiAy MDE5LTAyLTA4CiA6VmVyc2lvbjogfFBBQ0tBR0VfU1RSSU5HfAotOkNvcHlyaWdodDogMjAwOSwy MDExLDIwMTIsMjAxNiwyMDE4IEludGVsIENvcnBvcmF0aW9uCis6Q29weXJpZ2h0OiAyMDA5LDIw MTEsMjAxMiwyMDE2LDIwMTgsMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgogOk1hbnVhbCBzZWN0aW9u OiB8TUFOVUFMX1NFQ1RJT058CiA6TWFudWFsIGdyb3VwOiB8TUFOVUFMX0dST1VQfAogCkBAIC0z MSw2ICszMSwxMSBAQCBPUFRJT05TCiAtcyA8bXM+CiAgICAgUmVmcmVzaCBwZXJpb2QgaW4gbWls bGlzZWNvbmRzLgogCistbAorICAgIExpc3QgdGV4dCBkYXRhIHRvIHN0YW5kYXJkIG91dC4KKwor LUoKKyAgICBPdXRwdXQgSlNPTiBmb3JtYXR0ZWQgZGF0YSB0byBzdGFuZGFyZCBvdXRwdXQuCiAt aAogICAgIFNob3cgaGVscCB0ZXh0LgogCmRpZmYgLS1naXQgYS90b29scy9pbnRlbF9ncHVfdG9w LmMgYi90b29scy9pbnRlbF9ncHVfdG9wLmMKaW5kZXggYjkyM2MzY2ZiZTk3Li44MDdkNTE4YWFm ODcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ludGVsX2dwdV90b3AuYworKysgYi90b29scy9pbnRlbF9n cHVfdG9wLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IMKpIDIwMDctMjAxOCBJ bnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IMKpIDIwMDctMjAxOSBJbnRlbCBDb3Jwb3Jh dGlvbgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLApAQCAtMTks MTAgKzE5LDYgQEAKICAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCiAgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCiAgKiBERUFMSU5H UyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIEVyaWMgQW5ob2x0IDxl cmljQGFuaG9sdC5uZXQ+Ci0gKiAgICBFdWdlbmkgRG9kb25vdiA8ZXVnZW5pLmRvZG9ub3ZAaW50 ZWwuY29tPgogICovCiAKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtNDEsNiArMzcsOCBAQAogI2lu Y2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPGxvY2FsZS5oPgor I2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgogCiAjaW5jbHVkZSAiaWd0 X3BlcmYuaCIKIApAQCAtNTksNiArNTcsNyBAQCBzdHJ1Y3QgcG11X2NvdW50ZXIgewogc3RydWN0 IGVuZ2luZSB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICpkaXNwbGF5X25hbWU7 CisJY29uc3QgY2hhciAqc2hvcnRfbmFtZTsKIAogCXVuc2lnbmVkIGludCBjbGFzczsKIAl1bnNp Z25lZCBpbnQgaW5zdGFuY2U7CkBAIC0xNDIsNiArMTQxLDIyIEBAIHN0YXRpYyBjb25zdCBjaGFy ICpjbGFzc19kaXNwbGF5X25hbWUodW5zaWduZWQgaW50IGNsYXNzKQogCX0KIH0KIAorc3RhdGlj IGNvbnN0IGNoYXIgKmNsYXNzX3Nob3J0X25hbWUodW5zaWduZWQgaW50IGNsYXNzKQoreworCXN3 aXRjaCAoY2xhc3MpIHsKKwljYXNlIEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUjoKKwkJcmV0dXJu ICJSQ1MiOworCWNhc2UgSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWToKKwkJcmV0dXJuICJCQ1MiOwor CWNhc2UgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU86CisJCXJldHVybiAiVkNTIjsKKwljYXNlIEk5 MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0U6CisJCXJldHVybiAiVkVDUyI7CisJZGVmYXVs dDoKKwkJcmV0dXJuICJVTktOIjsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZW5naW5lX2NtcChjb25z dCB2b2lkICpfX2EsIGNvbnN0IHZvaWQgKl9fYikKIHsKIAljb25zdCBzdHJ1Y3QgZW5naW5lICph ID0gKHN0cnVjdCBlbmdpbmUgKilfX2E7CkBAIC0yMjcsNyArMjQyLDYgQEAgc3RhdGljIHN0cnVj dCBlbmdpbmVzICpkaXNjb3Zlcl9lbmdpbmVzKHZvaWQpCiAJCQlyZXQgPSBFTk9CVUZTOwogCQkJ YnJlYWs7CiAJCX0KLQkJcmV0ID0gMDsKIAogCQllbmdpbmUtPmRpc3BsYXlfbmFtZSA9IHN0cmR1 cChidWYpOwogCQlpZiAoIWVuZ2luZS0+ZGlzcGxheV9uYW1lKSB7CkBAIC0yMzUsNiArMjQ5LDIw IEBAIHN0YXRpYyBzdHJ1Y3QgZW5naW5lcyAqZGlzY292ZXJfZW5naW5lcyh2b2lkKQogCQkJYnJl YWs7CiAJCX0KIAorCQlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvJXUiLAor CQkJICAgICAgIGNsYXNzX3Nob3J0X25hbWUoZW5naW5lLT5jbGFzcyksCisJCQkgICAgICAgZW5n aW5lLT5pbnN0YW5jZSk7CisJCWlmIChyZXQgPCAwIHx8IHJldCA9PSBzaXplb2YoYnVmKSkgewor CQkJcmV0ID0gRU5PQlVGUzsKKwkJCWJyZWFrOworCQl9CisKKwkJZW5naW5lLT5zaG9ydF9uYW1l ID0gc3RyZHVwKGJ1Zik7CisJCWlmICghZW5naW5lLT5zaG9ydF9uYW1lKSB7CisJCQlyZXQgPSBl cnJubzsKKwkJCWJyZWFrOworCQl9CisKIAkJZW5naW5lcy0+bnVtX2VuZ2luZXMrKzsKIAkJZW5n aW5lcyA9IHJlYWxsb2MoZW5naW5lcywgc2l6ZW9mKHN0cnVjdCBlbmdpbmVzKSArCiAJCQkJICBl bmdpbmVzLT5udW1fZW5naW5lcyAqIHNpemVvZihzdHJ1Y3QgZW5naW5lKSk7CkBAIC0yNDIsNiAr MjcwLDggQEAgc3RhdGljIHN0cnVjdCBlbmdpbmVzICpkaXNjb3Zlcl9lbmdpbmVzKHZvaWQpCiAJ CQlyZXQgPSBlcnJubzsKIAkJCWJyZWFrOwogCQl9CisKKwkJcmV0ID0gMDsKIAl9CiAKIAlpZiAo cmV0KSB7CkBAIC01NTEsNyArNTgxLDcgQEAgc3RhdGljIHVpbnQ2NF90IHBtdV9yZWFkX211bHRp KGludCBmZCwgdW5zaWduZWQgaW50IG51bSwgdWludDY0X3QgKnZhbCkKIAlyZXR1cm4gYnVmWzFd OwogfQogCi1zdGF0aWMgZG91YmxlIF9fcG11X2NhbGMoc3RydWN0IHBtdV9wYWlyICpwLCBkb3Vi bGUgZCwgZG91YmxlIHQsIGRvdWJsZSBzKQorc3RhdGljIGRvdWJsZSBwbXVfY2FsYyhzdHJ1Y3Qg cG11X3BhaXIgKnAsIGRvdWJsZSBkLCBkb3VibGUgdCwgZG91YmxlIHMpCiB7CiAJZG91YmxlIHY7 CiAKQEAgLTU3NiwzMCArNjA2LDYgQEAgc3RhdGljIHZvaWQgZmlsbF9zdHIoY2hhciAqYnVmLCB1 bnNpZ25lZCBpbnQgYnVmc3osIGNoYXIgYywgdW5zaWduZWQgaW50IG51bSkKIAkqYnVmID0gMDsK IH0KIAotc3RhdGljIHZvaWQgcG11X2NhbGMoc3RydWN0IHBtdV9jb3VudGVyICpjbnQsCi0JCSAg ICAgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmc3osCi0JCSAgICAgdW5zaWduZWQgaW50IHdp ZHRoLCB1bnNpZ25lZCB3aWR0aF9kZWMsCi0JCSAgICAgZG91YmxlIGQsIGRvdWJsZSB0LCBkb3Vi bGUgcykKLXsKLQlkb3VibGUgdmFsOwotCWludCBsZW47Ci0KLQlhc3NlcnQoYnVmc3ogPj0gKHdp ZHRoICsgd2lkdGhfZGVjICsgMSkpOwotCi0JaWYgKCFjbnQtPnByZXNlbnQpIHsKLQkJZmlsbF9z dHIoYnVmLCBidWZzeiwgJy0nLCB3aWR0aCArIHdpZHRoX2RlYyk7Ci0JCXJldHVybjsKLQl9Ci0K LQl2YWwgPSBfX3BtdV9jYWxjKCZjbnQtPnZhbCwgZCwgdCwgcyk7Ci0KLQlsZW4gPSBzbnByaW50 ZihidWYsIGJ1ZnN6LCAiJSouKmYiLCB3aWR0aCArIHdpZHRoX2RlYywgd2lkdGhfZGVjLCB2YWwp OwotCWlmIChsZW4gPCAwIHx8IGxlbiA9PSBidWZzeikgewotCQlmaWxsX3N0cihidWYsIGJ1ZnN6 LCAnWCcsIHdpZHRoICsgd2lkdGhfZGVjKTsKLQkJcmV0dXJuOwotCX0KLX0KLQogc3RhdGljIHVp bnQ2NF90IF9fcG11X3JlYWRfc2luZ2xlKGludCBmZCwgdWludDY0X3QgKnRzKQogewogCXVpbnQ2 NF90IGRhdGFbMl0gPSB7IH07CkBAIC02OTcsMTEgKzcwMyw1NTkgQEAgdXNhZ2UoY29uc3QgY2hh ciAqYXBwbmFtZSkKIAkJIlxuIgogCQkiXHRUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIG9w dGlvbmFsOlxuXG4iCiAJCSJcdFstcyA8bXM+XSAgICAgICBSZWZyZXNoIHBlcmlvZCBpbiBtaWxs aXNlY29uZHMgKGRlZmF1bHQgJXVtcykuXG4iCisJCSJcdFstbF0gICAgICAgICAgICBMaXN0IGRh dGEgdG8gc3RhbmRhcmQgb3V0LlxuIgorCQkiXHRbLUpdICAgICAgICAgICAgSlNPTiBkYXRhIHRv IHN0YW5kYXJkIG91dC5cbiIKIAkJIlx0Wy1oXSAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwIHRl eHQuXG4iCiAJCSJcbiIsCiAJCWFwcG5hbWUsIERFRkFVTFRfUEVSSU9EX01TKTsKIH0KIAorc3Rh dGljIGVudW0geworCUlOVEVSQUNUSVZFLAorCVNURE9VVCwKKwlKU09OCit9IG91dHB1dF9tb2Rl OworCitzdHJ1Y3QgY250X2l0ZW0geworCXN0cnVjdCBwbXVfY291bnRlciAqcG11OworCXVuc2ln bmVkIGludCBmbXRfZDsKKwl1bnNpZ25lZCBpbnQgZm10X2RkOworCWRvdWJsZSBkOworCWRvdWJs ZSB0OworCWRvdWJsZSBzOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqdW5pdDsK KworCS8qIEludGVybmFsIGZpZWxkcy4gKi8KKwljaGFyIGJ1ZlsxNl07Cit9OworCitzdHJ1Y3Qg Y250X2dyb3VwIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmRpc3BsYXlfbmFt ZTsKKwlzdHJ1Y3QgY250X2l0ZW0gKml0ZW1zOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBq c29uX2luZGVudF9sZXZlbDsKKworc3RhdGljIGNvbnN0IGNoYXIgKmpzb25faW5kZW50W10gPSB7 CisJIiIsCisJIlx0IiwKKwkiXHRcdCIsCisJIlx0XHRcdCIsCisJIlx0XHRcdFx0IiwKKwkiXHRc dFx0XHRcdCIsCit9OworCisjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikvc2l6 ZW9mKGFyclswXSkpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQganNvbl9wcmV2X3N0cnVjdF9tZW1i ZXJzOworc3RhdGljIHVuc2lnbmVkIGludCBqc29uX3N0cnVjdF9tZW1iZXJzOworCitzdGF0aWMg dm9pZAoranNvbl9vcGVuX3N0cnVjdChjb25zdCBjaGFyICpuYW1lKQoreworCWFzc2VydChqc29u X2luZGVudF9sZXZlbCA8IEFSUkFZX1NJWkUoanNvbl9pbmRlbnQpKTsKKworCWpzb25fcHJldl9z dHJ1Y3RfbWVtYmVycyA9IGpzb25fc3RydWN0X21lbWJlcnM7CisJanNvbl9zdHJ1Y3RfbWVtYmVy cyA9IDA7CisKKwlpZiAobmFtZSkKKwkJcHJpbnRmKCIlcyVzXCIlc1wiOiB7XG4iLAorCQkgICAg ICAganNvbl9wcmV2X3N0cnVjdF9tZW1iZXJzID8gIixcbiIgOiAiIiwKKwkJICAgICAgIGpzb25f aW5kZW50W2pzb25faW5kZW50X2xldmVsXSwKKwkJICAgICAgIG5hbWUpOworCWVsc2UKKwkJcHJp bnRmKCIlc1xuJXN7XG4iLAorCQkgICAgICAganNvbl9wcmV2X3N0cnVjdF9tZW1iZXJzID8gIiwi IDogIiIsCisJCSAgICAgICBqc29uX2luZGVudFtqc29uX2luZGVudF9sZXZlbF0pOworCisJanNv bl9pbmRlbnRfbGV2ZWwrKzsKK30KKworc3RhdGljIHZvaWQKK2pzb25fY2xvc2Vfc3RydWN0KHZv aWQpCit7CisJYXNzZXJ0KGpzb25faW5kZW50X2xldmVsID4gMCk7CisKKwlwcmludGYoIlxuJXN9 IiwganNvbl9pbmRlbnRbLS1qc29uX2luZGVudF9sZXZlbF0pOworCisJaWYgKGpzb25faW5kZW50 X2xldmVsID09IDApCisJCWZmbHVzaChzdGRvdXQpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50 Citqc29uX2FkZF9tZW1iZXIoY29uc3Qgc3RydWN0IGNudF9ncm91cCAqcGFyZW50LCBzdHJ1Y3Qg Y250X2l0ZW0gKml0ZW0sCisJCXVuc2lnbmVkIGludCBoZWFkZXJzKQoreworCWFzc2VydChqc29u X2luZGVudF9sZXZlbCA8IEFSUkFZX1NJWkUoanNvbl9pbmRlbnQpKTsKKworCXByaW50ZigiJXMl c1wiJXNcIjogIiwKKwkJanNvbl9zdHJ1Y3RfbWVtYmVycyA/ICIsXG4iIDogIiIsCisJCWpzb25f aW5kZW50W2pzb25faW5kZW50X2xldmVsXSwgaXRlbS0+bmFtZSk7CisKKwlqc29uX3N0cnVjdF9t ZW1iZXJzKys7CisKKwlpZiAoIXN0cmNtcChpdGVtLT5uYW1lLCAidW5pdCIpKQorCQlwcmludGYo IlwiJXNcIiIsIGl0ZW0tPnVuaXQpOworCWVsc2UKKwkJcHJpbnRmKCIlZiIsCisJCSAgICAgICBw bXVfY2FsYygmaXRlbS0+cG11LT52YWwsIGl0ZW0tPmQsIGl0ZW0tPnQsIGl0ZW0tPnMpKTsKKwor CXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHN0ZG91dF9sZXZlbDsKKworI2Rl ZmluZSBTVERPVVRfSEVBREVSX1JFUEVBVCAyMAorc3RhdGljIHVuc2lnbmVkIGludCBzdGRvdXRf bGluZXMgPSBTVERPVVRfSEVBREVSX1JFUEVBVDsKKworc3RhdGljIHZvaWQKK3N0ZG91dF9vcGVu X3N0cnVjdChjb25zdCBjaGFyICpuYW1lKQoreworCXN0ZG91dF9sZXZlbCsrOworCWFzc2VydChz dGRvdXRfbGV2ZWwgPiAwKTsKK30KKworc3RhdGljIHZvaWQKK3N0ZG91dF9jbG9zZV9zdHJ1Y3Qo dm9pZCkKK3sKKwlhc3NlcnQoc3Rkb3V0X2xldmVsID4gMCk7CisJaWYgKC0tc3Rkb3V0X2xldmVs ID09IDApIHsKKwkJc3Rkb3V0X2xpbmVzKys7CisJCXByaW50ZigiXG4iKTsKKwkJZmZsdXNoKHN0 ZG91dCk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitzdGRvdXRfYWRkX21lbWJlcihj b25zdCBzdHJ1Y3QgY250X2dyb3VwICpwYXJlbnQsIHN0cnVjdCBjbnRfaXRlbSAqaXRlbSwKKwkJ ICB1bnNpZ25lZCBpbnQgaGVhZGVycykKK3sKKwl1bnNpZ25lZCBpbnQgZm10X3RvdCA9IGl0ZW0t PmZtdF9kICsgKGl0ZW0tPmZtdF9kZCA/IDEgOiAwKTsKKwljaGFyIGJ1ZltmbXRfdG90ICsgMV07 CisJZG91YmxlIHZhbDsKKwlpbnQgbGVuOworCisJaWYgKCFpdGVtLT5wbXUpCisJCXJldHVybiAw OworCWVsc2UgaWYgKCFpdGVtLT5wbXUtPnByZXNlbnQpCisJCXJldHVybiAwOworCisJaWYgKGhl YWRlcnMgPT0gMSkgeworCQl1bnNpZ25lZCBpbnQgZ3JwX3RvdCA9IDA7CisJCXN0cnVjdCBjbnRf aXRlbSAqaXQ7CisKKwkJaWYgKGl0ZW0gIT0gcGFyZW50LT5pdGVtcykKKwkJCXJldHVybiAwOwor CisJCWZvciAoaXQgPSBwYXJlbnQtPml0ZW1zOyBpdC0+cG11OyBpdCsrKSB7CisJCQlpZiAoIWl0 LT5wbXUtPnByZXNlbnQpCisJCQkJY29udGludWU7CisKKwkJCWdycF90b3QgKz0gMSArIGl0LT5m bXRfZCArIChpdC0+Zm10X2RkID8gMSA6IDApOworCQl9CisKKwkJcHJpbnRmKCIlKnMgIiwgZ3Jw X3RvdCAtIDEsIHBhcmVudC0+ZGlzcGxheV9uYW1lKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlm IChoZWFkZXJzID09IDIpIHsKKwkJcHJpbnRmKCIlKnMgIiwgZm10X3RvdCwgaXRlbS0+dW5pdCA/ OiBpdGVtLT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdmFsID0gcG11X2NhbGMoJml0ZW0t PnBtdS0+dmFsLCBpdGVtLT5kLCBpdGVtLT50LCBpdGVtLT5zKTsKKworCWxlbiA9IHNucHJpbnRm KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlKi4qZiIsIGZtdF90b3QsIGl0ZW0tPmZtdF9kZCwgdmFsKTsK KwlpZiAobGVuIDwgMCB8fCBsZW4gPT0gc2l6ZW9mKGJ1ZikpCisJCWZpbGxfc3RyKGJ1Ziwgc2l6 ZW9mKGJ1ZiksICdYJywgZm10X3RvdCk7CisKKwlsZW4gPSBwcmludGYoIiVzICIsIGJ1Zik7CisK KwlyZXR1cm4gbGVuID4gMCA/IGxlbiA6IDA7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXJtX29wZW5f c3RydWN0KGNvbnN0IGNoYXIgKm5hbWUpCit7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXJtX2Nsb3Nl X3N0cnVjdCh2b2lkKQoreworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Cit0ZXJtX2FkZF9tZW1i ZXIoY29uc3Qgc3RydWN0IGNudF9ncm91cCAqcGFyZW50LCBzdHJ1Y3QgY250X2l0ZW0gKml0ZW0s CisJCXVuc2lnbmVkIGludCBoZWFkZXJzKQoreworCXVuc2lnbmVkIGludCBmbXRfdG90ID0gaXRl bS0+Zm10X2QgKyAoaXRlbS0+Zm10X2RkID8gMSA6IDApOworCWRvdWJsZSB2YWw7CisJaW50IGxl bjsKKworCWlmICghaXRlbS0+cG11KQorCQlyZXR1cm4gMDsKKworCWFzc2VydChmbXRfdG90IDw9 IHNpemVvZihpdGVtLT5idWYpKTsKKworCWlmICghaXRlbS0+cG11LT5wcmVzZW50KSB7CisJCWZp bGxfc3RyKGl0ZW0tPmJ1Ziwgc2l6ZW9mKGl0ZW0tPmJ1ZiksICctJywgZm10X3RvdCk7CisJCXJl dHVybiAxOworCX0KKworCXZhbCA9IHBtdV9jYWxjKCZpdGVtLT5wbXUtPnZhbCwgaXRlbS0+ZCwg aXRlbS0+dCwgaXRlbS0+cyk7CisJbGVuID0gc25wcmludGYoaXRlbS0+YnVmLCBzaXplb2YoaXRl bS0+YnVmKSwKKwkJICAgICAgICIlKi4qZiIsCisJCSAgICAgICBmbXRfdG90LCBpdGVtLT5mbXRf ZGQsIHZhbCk7CisKKwlpZiAobGVuIDwgMCB8fCBsZW4gPT0gc2l6ZW9mKGl0ZW0tPmJ1ZikpCisJ CWZpbGxfc3RyKGl0ZW0tPmJ1Ziwgc2l6ZW9mKGl0ZW0tPmJ1ZiksICdYJywgZm10X3RvdCk7CisK KwlyZXR1cm4gMTsKK30KKworc3RydWN0IHByaW50X29wZXJhdGlvbnMgeworCXZvaWQgKCpvcGVu X3N0cnVjdCkoY29uc3QgY2hhciAqbmFtZSk7CisJdm9pZCAoKmNsb3NlX3N0cnVjdCkodm9pZCk7 CisJdW5zaWduZWQgaW50ICgqYWRkX21lbWJlcikoY29uc3Qgc3RydWN0IGNudF9ncm91cCAqcGFy ZW50LAorCQkJCSAgIHN0cnVjdCBjbnRfaXRlbSAqaXRlbSwKKwkJCQkgICB1bnNpZ25lZCBpbnQg aGVhZGVycyk7CisJYm9vbCAoKnByaW50X2dyb3VwKShzdHJ1Y3QgY250X2dyb3VwICpncm91cCwg dW5zaWduZWQgaW50IGhlYWRlcnMpOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwcmludF9v cGVyYXRpb25zICpwb3BzOworCitzdGF0aWMgdW5zaWduZWQgaW50CitwcmVzZW50X2luX2dyb3Vw KGNvbnN0IHN0cnVjdCBjbnRfZ3JvdXAgKmdycCkKK3sKKwl1bnNpZ25lZCBpbnQgcHJlc2VudCA9 IDA7CisJc3RydWN0IGNudF9pdGVtICppdGVtOworCisJZm9yIChpdGVtID0gZ3JwLT5pdGVtczsg aXRlbS0+bmFtZTsgaXRlbSsrKSB7CisJCWlmIChpdGVtLT5wbXUgJiYgaXRlbS0+cG11LT5wcmVz ZW50KQorCQkJcHJlc2VudCsrOworCX0KKworCXJldHVybiBwcmVzZW50OworfQorCitzdGF0aWMg Ym9vbAorcHJpbnRfZ3JvdXAoc3RydWN0IGNudF9ncm91cCAqZ3JwLCB1bnNpZ25lZCBpbnQgaGVh ZGVycykKK3sKKwl1bnNpZ25lZCBpbnQgY29uc3VtZWQgPSAwOworCXN0cnVjdCBjbnRfaXRlbSAq aXRlbTsKKworCWlmICghcHJlc2VudF9pbl9ncm91cChncnApKQorCQlyZXR1cm4gZmFsc2U7CisK Kwlwb3BzLT5vcGVuX3N0cnVjdChncnAtPm5hbWUpOworCisJZm9yIChpdGVtID0gZ3JwLT5pdGVt czsgaXRlbS0+bmFtZTsgaXRlbSsrKQorCQljb25zdW1lZCArPSBwb3BzLT5hZGRfbWVtYmVyKGdy cCwgaXRlbSwgaGVhZGVycyk7CisKKwlwb3BzLT5jbG9zZV9zdHJ1Y3QoKTsKKworCXJldHVybiBj b25zdW1lZDsKK30KKworc3RhdGljIGJvb2wKK3Rlcm1fcHJpbnRfZ3JvdXAoc3RydWN0IGNudF9n cm91cCAqZ3JwLCB1bnNpZ25lZCBpbnQgaGVhZGVycykKK3sKKwl1bnNpZ25lZCBpbnQgY29uc3Vt ZWQgPSAwOworCXN0cnVjdCBjbnRfaXRlbSAqaXRlbTsKKworCXBvcHMtPm9wZW5fc3RydWN0KGdy cC0+bmFtZSk7CisKKwlmb3IgKGl0ZW0gPSBncnAtPml0ZW1zOyBpdGVtLT5uYW1lOyBpdGVtKysp CisJCWNvbnN1bWVkICs9IHBvcHMtPmFkZF9tZW1iZXIoZ3JwLCBpdGVtLCBoZWFkZXJzKTsKKwor CXBvcHMtPmNsb3NlX3N0cnVjdCgpOworCisJcmV0dXJuIGNvbnN1bWVkOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IHByaW50X29wZXJhdGlvbnMganNvbl9wb3BzID0geworCS5vcGVuX3N0cnVj dCA9IGpzb25fb3Blbl9zdHJ1Y3QsCisJLmNsb3NlX3N0cnVjdCA9IGpzb25fY2xvc2Vfc3RydWN0 LAorCS5hZGRfbWVtYmVyID0ganNvbl9hZGRfbWVtYmVyLAorCS5wcmludF9ncm91cCA9IHByaW50 X2dyb3VwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwcmludF9vcGVyYXRpb25zIHN0ZG91 dF9wb3BzID0geworCS5vcGVuX3N0cnVjdCA9IHN0ZG91dF9vcGVuX3N0cnVjdCwKKwkuY2xvc2Vf c3RydWN0ID0gc3Rkb3V0X2Nsb3NlX3N0cnVjdCwKKwkuYWRkX21lbWJlciA9IHN0ZG91dF9hZGRf bWVtYmVyLAorCS5wcmludF9ncm91cCA9IHByaW50X2dyb3VwLAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBwcmludF9vcGVyYXRpb25zIHRlcm1fcG9wcyA9IHsKKwkub3Blbl9zdHJ1Y3QgPSB0 ZXJtX29wZW5fc3RydWN0LAorCS5jbG9zZV9zdHJ1Y3QgPSB0ZXJtX2Nsb3NlX3N0cnVjdCwKKwku YWRkX21lbWJlciA9IHRlcm1fYWRkX21lbWJlciwKKwkucHJpbnRfZ3JvdXAgPSB0ZXJtX3ByaW50 X2dyb3VwLAorfTsKKworc3RhdGljIGJvb2wgcHJpbnRfZ3JvdXBzKHN0cnVjdCBjbnRfZ3JvdXAg Kipncm91cHMpCit7CisJdW5zaWduZWQgaW50IGhlYWRlcnMgPSBzdGRvdXRfbGluZXMgJSBTVERP VVRfSEVBREVSX1JFUEVBVCArIDE7CisJYm9vbCBwcmludF9kYXRhID0gdHJ1ZTsKKworCWlmIChv dXRwdXRfbW9kZSA9PSBTVERPVVQgJiYgKGhlYWRlcnMgPT0gMSB8fCBoZWFkZXJzID09IDIpKSB7 CisJCWZvciAoc3RydWN0IGNudF9ncm91cCAqKmdycCA9IGdyb3VwczsgKmdycDsgZ3JwKyspCisJ CQlwcmludF9kYXRhID0gcG9wcy0+cHJpbnRfZ3JvdXAoKmdycCwgaGVhZGVycyk7CisJfQorCisJ Zm9yIChzdHJ1Y3QgY250X2dyb3VwICoqZ3JwID0gZ3JvdXBzOyBwcmludF9kYXRhICYmICpncnA7 IGdycCsrKQorCQlwb3BzLT5wcmludF9ncm91cCgqZ3JwLCBmYWxzZSk7CisKKwlyZXR1cm4gcHJp bnRfZGF0YTsKK30KKworc3RhdGljIGludAorcHJpbnRfaGVhZGVyKHN0cnVjdCBlbmdpbmVzICpl bmdpbmVzLCBkb3VibGUgdCwKKwkgICAgIGludCBsaW5lcywgaW50IGNvbl93LCBpbnQgY29uX2gs IGJvb2wgKmNvbnN1bWVkKQoreworCXN0cnVjdCBwbXVfY291bnRlciBmYWtlX3BtdSA9IHsKKwkJ LnByZXNlbnQgPSB0cnVlLAorCQkudmFsLmN1ciA9IDEsCisJfTsKKwlzdHJ1Y3QgY250X2l0ZW0g cGVyaW9kX2l0ZW1zW10gPSB7CisJCXsgJmZha2VfcG11LCAwLCAwLCAxLjAsIDEuMCwgdCAqIDFl MywgImR1cmF0aW9uIiB9LAorCQl7IE5VTEwsIDAsIDAsIDAuMCwgMC4wLCAwLjAsICJ1bml0Iiwg Im1zIiB9LAorCQl7IH0sCisJfTsKKwlzdHJ1Y3QgY250X2dyb3VwIHBlcmlvZF9ncm91cCA9IHsK KwkJLm5hbWUgPSAicGVyaW9kIiwKKwkJLml0ZW1zID0gcGVyaW9kX2l0ZW1zLAorCX07CisJc3Ry dWN0IGNudF9pdGVtIGZyZXFfaXRlbXNbXSA9IHsKKwkJeyAmZW5naW5lcy0+ZnJlcV9yZXEsIDQs IDAsIDEuMCwgdCwgMSwgInJlcXVlc3RlZCIsICJyZXEiIH0sCisJCXsgJmVuZ2luZXMtPmZyZXFf YWN0LCA0LCAwLCAxLjAsIHQsIDEsICJhY3R1YWwiLCAiYWN0IiB9LAorCQl7IE5VTEwsIDAsIDAs IDAuMCwgMC4wLCAwLjAsICJ1bml0IiwgIk1IeiIgfSwKKwkJeyB9LAorCX07CisJc3RydWN0IGNu dF9ncm91cCBmcmVxX2dyb3VwID0geworCQkubmFtZSA9ICJmcmVxdWVuY3kiLAorCQkuZGlzcGxh eV9uYW1lID0gIkZyZXEgTUh6IiwKKwkJLml0ZW1zID0gZnJlcV9pdGVtcywKKwl9OworCXN0cnVj dCBjbnRfaXRlbSBpcnFfaXRlbXNbXSA9IHsKKwkJeyAmZW5naW5lcy0+aXJxLCA4LCAwLCAxLjAs IHQsIDEsICJjb3VudCIsICIvcyIgfSwKKwkJeyBOVUxMLCAwLCAwLCAwLjAsIDAuMCwgMC4wLCAi dW5pdCIsICJpcnEvcyIgfSwKKwkJeyB9LAorCX07CisJc3RydWN0IGNudF9ncm91cCBpcnFfZ3Jv dXAgPSB7CisJCS5uYW1lID0gImludGVycnVwdHMiLAorCQkuZGlzcGxheV9uYW1lID0gIklSUSIs CisJCS5pdGVtcyA9IGlycV9pdGVtcywKKwl9OworCXN0cnVjdCBjbnRfaXRlbSByYzZfaXRlbXNb XSA9IHsKKwkJeyAmZW5naW5lcy0+cmM2LCAzLCAwLCAxZTksIHQsIDEwMCwgInZhbHVlIiwgIiUi IH0sCisJCXsgTlVMTCwgMCwgMCwgMC4wLCAwLjAsIDAuMCwgInVuaXQiLCAiJSIgfSwKKwkJeyB9 LAorCX07CisJc3RydWN0IGNudF9ncm91cCByYzZfZ3JvdXAgPSB7CisJCS5uYW1lID0gInJjNiIs CisJCS5kaXNwbGF5X25hbWUgPSAiUkM2IiwKKwkJLml0ZW1zID0gcmM2X2l0ZW1zLAorCX07CisJ c3RydWN0IGNudF9pdGVtIHBvd2VyX2l0ZW1zW10gPSB7CisJCXsgJmVuZ2luZXMtPnJhcGwsIDQs IDIsIDEuMCwgdCwgZW5naW5lcy0+cmFwbF9zY2FsZSwgInZhbHVlIiwKKwkJICAiVyIgfSwKKwkJ eyBOVUxMLCAwLCAwLCAwLjAsIDAuMCwgMC4wLCAidW5pdCIsICJXIiB9LAorCQl7IH0sCisJfTsK KwlzdHJ1Y3QgY250X2dyb3VwIHBvd2VyX2dyb3VwID0geworCQkubmFtZSA9ICJwb3dlciIsCisJ CS5kaXNwbGF5X25hbWUgPSAiUG93ZXIiLAorCQkuaXRlbXMgPSBwb3dlcl9pdGVtcywKKwl9Owor CXN0cnVjdCBjbnRfZ3JvdXAgKmdyb3Vwc1tdID0geworCQkmcGVyaW9kX2dyb3VwLAorCQkmZnJl cV9ncm91cCwKKwkJJmlycV9ncm91cCwKKwkJJnJjNl9ncm91cCwKKwkJJnBvd2VyX2dyb3VwLAor CQlOVUxMCisJfTsKKworCWlmIChvdXRwdXRfbW9kZSAhPSBKU09OKQorCQltZW1tb3ZlKCZncm91 cHNbMF0sICZncm91cHNbMV0sCisJCQlzaXplb2YoZ3JvdXBzKSAtIHNpemVvZihncm91cHNbMF0p KTsKKworCXBvcHMtPm9wZW5fc3RydWN0KE5VTEwpOworCisJKmNvbnN1bWVkID0gcHJpbnRfZ3Jv dXBzKGdyb3Vwcyk7CisKKwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKKwkJcHJp bnRmKCJcMDMzW0hcMDMzW0oiKTsKKworCQlpZiAobGluZXMrKyA8IGNvbl9oKQorCQkJcHJpbnRm KCJpbnRlbC1ncHUtdG9wIC0gJXMvJXMgTUh6OyAgJXMlJSBSQzY7ICVzICVzOyAlcyBpcnFzL3Nc biIsCisJCQkgICAgICAgZnJlcV9pdGVtc1sxXS5idWYsIGZyZXFfaXRlbXNbMF0uYnVmLAorCQkJ ICAgICAgIHJjNl9pdGVtc1swXS5idWYsIHBvd2VyX2l0ZW1zWzBdLmJ1ZiwKKwkJCSAgICAgICBl bmdpbmVzLT5yYXBsX3VuaXQsCisJCQkgICAgICAgaXJxX2l0ZW1zWzBdLmJ1Zik7CisKKwkJaWYg KGxpbmVzKysgPCBjb25faCkKKwkJCXByaW50ZigiXG4iKTsKKwl9CisKKwlyZXR1cm4gbGluZXM7 Cit9CisKK3N0YXRpYyBpbnQKK3ByaW50X2ltYyhzdHJ1Y3QgZW5naW5lcyAqZW5naW5lcywgZG91 YmxlIHQsIGludCBsaW5lcywgaW50IGNvbl93LCBpbnQgY29uX2gpCit7CisJc3RydWN0IGNudF9p dGVtIGltY19pdGVtc1tdID0geworCQl7ICZlbmdpbmVzLT5pbWNfcmVhZHMsIDYsIDAsIDEuMCwg dCwgZW5naW5lcy0+aW1jX3JlYWRzX3NjYWxlLAorCQkgICJyZWFkcyIsICJyZCIgfSwKKwkJeyAm ZW5naW5lcy0+aW1jX3dyaXRlcywgNiwgMCwgMS4wLCB0LCBlbmdpbmVzLT5pbWNfd3JpdGVzX3Nj YWxlLAorCQkgICJ3cml0ZXMiLCAid3IiIH0sCisJCXsgTlVMTCwgMCwgMCwgMC4wLCAwLjAsIDAu MCwgInVuaXQiIH0sCisJCXsgfSwKKwl9OworCXN0cnVjdCBjbnRfZ3JvdXAgaW1jX2dyb3VwID0g eworCQkubmFtZSA9ICJpbWMtYmFuZHdpZHRoIiwKKwkJLml0ZW1zID0gaW1jX2l0ZW1zLAorCX07 CisJc3RydWN0IGNudF9ncm91cCAqZ3JvdXBzW10gPSB7CisJCSZpbWNfZ3JvdXAsCisJCU5VTEwK Kwl9OworCWludCByZXQ7CisKKwlyZXQgPSBhc3ByaW50ZigoY2hhciAqKikmaW1jX2dyb3VwLmRp c3BsYXlfbmFtZSwgIklNQyAlcy9zIiwKKwkJCWVuZ2luZXMtPmltY19yZWFkc191bml0KTsKKwlh c3NlcnQocmV0ID49IDApOworCisJcmV0ID0gYXNwcmludGYoKGNoYXIgKiopJmltY19pdGVtc1sy XS51bml0LCAiJXMvcyIsCisJCQllbmdpbmVzLT5pbWNfcmVhZHNfdW5pdCk7CisJYXNzZXJ0KHJl dCA+PSAwKTsKKworCXByaW50X2dyb3Vwcyhncm91cHMpOworCisJZnJlZSgodm9pZCAqKWltY19n cm91cC5kaXNwbGF5X25hbWUpOworCWZyZWUoKHZvaWQgKilpbWNfaXRlbXNbMl0udW5pdCk7CisK KwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKKwkJaWYgKGxpbmVzKysgPCBjb25f aCkKKwkJCXByaW50ZigiICAgICAgSU1DIHJlYWRzOiAgICVzICVzL3NcbiIsCisJCQkgICAgICAg aW1jX2l0ZW1zWzBdLmJ1ZiwgZW5naW5lcy0+aW1jX3JlYWRzX3VuaXQpOworCisJCWlmIChsaW5l cysrIDwgY29uX2gpCisJCQlwcmludGYoIiAgICAgSU1DIHdyaXRlczogICAlcyAlcy9zXG4iLAor CQkJICAgICAgIGltY19pdGVtc1sxXS5idWYsIGVuZ2luZXMtPmltY193cml0ZXNfdW5pdCk7CisK KwkJaWYgKGxpbmVzKysgPCBjb25faCkKKwkJCXByaW50ZigiXG4iKTsKKwl9CisKKwlyZXR1cm4g bGluZXM7Cit9CisKK3N0YXRpYyBpbnQKK3ByaW50X2VuZ2luZXNfaGVhZGVyKHN0cnVjdCBlbmdp bmVzICplbmdpbmVzLCBkb3VibGUgdCwKKwkJICAgICBpbnQgbGluZXMsIGludCBjb25fdywgaW50 IGNvbl9oKQoreworCWZvciAodW5zaWduZWQgaW50IGkgPSAwOworCSAgICAgaSA8IGVuZ2luZXMt Pm51bV9lbmdpbmVzICYmIGxpbmVzIDwgY29uX2g7CisJICAgICBpKyspIHsKKwkJc3RydWN0IGVu Z2luZSAqZW5naW5lID0gZW5naW5lX3B0cihlbmdpbmVzLCBpKTsKKworCQlpZiAoIWVuZ2luZS0+ bnVtX2NvdW50ZXJzKQorCQkJY29udGludWU7CisKKwkJcG9wcy0+b3Blbl9zdHJ1Y3QoImVuZ2lu ZXMiKTsKKworCQlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKKwkJCWNvbnN0IGNo YXIgKmEgPSAiICAgICAgICAgIEVOR0lORSAgICAgIEJVU1kgIjsKKwkJCWNvbnN0IGNoYXIgKmIg PSAiIE1JX1NFTUEgTUlfV0FJVCI7CisKKwkJCXByaW50ZigiXDAzM1s3bSVzJSpzJXNcMDMzWzBt XG4iLAorCQkJICAgICAgIGEsIChpbnQpKGNvbl93IC0gMSAtIHN0cmxlbihhKSAtIHN0cmxlbihi KSksCisJCQkgICAgICAgIiAiLCBiKTsKKworCQkJbGluZXMrKzsKKwkJfQorCisJCWJyZWFrOwor CX0KKworCXJldHVybiBsaW5lczsKK30KKworc3RhdGljIGludAorcHJpbnRfZW5naW5lKHN0cnVj dCBlbmdpbmVzICplbmdpbmVzLCB1bnNpZ25lZCBpbnQgaSwgZG91YmxlIHQsCisJICAgICBpbnQg bGluZXMsIGludCBjb25fdywgaW50IGNvbl9oKQoreworCXN0cnVjdCBlbmdpbmUgKmVuZ2luZSA9 IGVuZ2luZV9wdHIoZW5naW5lcywgaSk7CisJc3RydWN0IGNudF9pdGVtIGVuZ2luZV9pdGVtc1td ID0geworCQl7ICZlbmdpbmUtPmJ1c3ksIDYsIDIsIDFlOSwgdCwgMTAwLCAiYnVzeSIsICIlIiB9 LAorCQl7ICZlbmdpbmUtPnNlbWEsIDMsIDAsIDFlOSwgdCwgMTAwLCAic2VtYSIsICJzZSIgfSwK KwkJeyAmZW5naW5lLT53YWl0LCAzLCAwLCAxZTksIHQsIDEwMCwgIndhaXQiLCAid2EiIH0sCisJ CXsgTlVMTCwgMCwgMCwgMC4wLCAwLjAsIDAuMCwgInVuaXQiLCAiJSIgfSwKKwkJeyB9LAorCX07 CisJc3RydWN0IGNudF9ncm91cCBlbmdpbmVfZ3JvdXAgPSB7CisJCS5uYW1lID0gZW5naW5lLT5k aXNwbGF5X25hbWUsCisJCS5kaXNwbGF5X25hbWUgPSBlbmdpbmUtPnNob3J0X25hbWUsCisJCS5p dGVtcyA9IGVuZ2luZV9pdGVtcywKKwl9OworCXN0cnVjdCBjbnRfZ3JvdXAgKmdyb3Vwc1tdID0g eworCQkmZW5naW5lX2dyb3VwLAorCQlOVUxMCisJfTsKKworCWlmICghZW5naW5lLT5udW1fY291 bnRlcnMpCisJCXJldHVybiBsaW5lczsKKworCXByaW50X2dyb3Vwcyhncm91cHMpOworCisJaWYg KG91dHB1dF9tb2RlID09IElOVEVSQUNUSVZFKSB7CisJCXVuc2lnbmVkIGludCBtYXhfdyA9IGNv bl93IC0gMTsKKwkJdW5zaWduZWQgaW50IGxlbjsKKwkJY2hhciBidWZbMTI4XTsKKwkJZG91Ymxl IHZhbDsKKworCQlsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiICAgICVzJSUgICAg JXMlJSIsCisJCQkgICAgICAgZW5naW5lX2l0ZW1zWzFdLmJ1ZiwgZW5naW5lX2l0ZW1zWzJdLmJ1 Zik7CisKKwkJbGVuICs9IHByaW50ZigiJTE2cyAlcyUlICIsCisJCQkgICAgICBlbmdpbmUtPmRp c3BsYXlfbmFtZSwgZW5naW5lX2l0ZW1zWzBdLmJ1Zik7CisKKwkJdmFsID0gcG11X2NhbGMoJmVu Z2luZS0+YnVzeS52YWwsIDFlOSwgdCwgMTAwKTsKKwkJcHJpbnRfcGVyY2VudGFnZV9iYXIodmFs LCBtYXhfdyAtIGxlbik7CisKKwkJcHJpbnRmKCIlc1xuIiwgYnVmKTsKKworCQlsaW5lcysrOwor CX0KKworCXJldHVybiBsaW5lczsKK30KKworc3RhdGljIGludAorcHJpbnRfZW5naW5lc19mb290 ZXIoc3RydWN0IGVuZ2luZXMgKmVuZ2luZXMsIGRvdWJsZSB0LAorCQkgICAgIGludCBsaW5lcywg aW50IGNvbl93LCBpbnQgY29uX2gpCit7CisJcG9wcy0+Y2xvc2Vfc3RydWN0KCk7CisJcG9wcy0+ Y2xvc2Vfc3RydWN0KCk7CisKKwlpZiAob3V0cHV0X21vZGUgPT0gSU5URVJBQ1RJVkUpIHsKKwkJ aWYgKGxpbmVzKysgPCBjb25faCkKKwkJCXByaW50ZigiXG4iKTsKKwl9CisKKwlyZXR1cm4gbGlu ZXM7Cit9CisKK3N0YXRpYyBib29sIHN0b3BfdG9wOworCitzdGF0aWMgdm9pZCBzaWdpbnRfaGFu ZGxlcihpbnQgIHNpZykKK3sKKwlzdG9wX3RvcCA9IHRydWU7Cit9CisKIGludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIHsKIAl1bnNpZ25lZCBpbnQgcGVyaW9kX3VzID0gREVGQVVMVF9Q RVJJT0RfTVMgKiAxMDAwOwpAQCAtNzExLDExICsxMjY1LDE3IEBAIGludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAlpbnQgcmV0LCBjaDsKIAogCS8qIFBhcnNlIG9wdGlvbnMgKi8KLQl3 aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJzOmgiKSkgIT0gLTEpIHsKKwl3aGlsZSAo KGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJzOkpsaCIpKSAhPSAtMSkgewogCQlzd2l0Y2ggKGNo KSB7CiAJCWNhc2UgJ3MnOgogCQkJcGVyaW9kX3VzID0gYXRvaShvcHRhcmcpICogMTAwMDsKIAkJ CWJyZWFrOworCQljYXNlICdKJzoKKwkJCW91dHB1dF9tb2RlID0gSlNPTjsKKwkJCWJyZWFrOwor CQljYXNlICdsJzoKKwkJCW91dHB1dF9tb2RlID0gU1RET1VUOworCQkJYnJlYWs7CiAJCWNhc2Ug J2gnOgogCQkJdXNhZ2UoYXJndlswXSk7CiAJCQlleGl0KDApOwpAQCAtNzI2LDYgKzEyODYsMzEg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQogCisJaWYgKG91dHB1 dF9tb2RlID09IElOVEVSQUNUSVZFICYmIGlzYXR0eSgxKSAhPSAxKQorCQlvdXRwdXRfbW9kZSA9 IFNURE9VVDsKKworCWlmIChvdXRwdXRfbW9kZSAhPSBJTlRFUkFDVElWRSkgeworCQlzaWdoYW5k bGVyX3Qgc2lnID0gc2lnbmFsKFNJR0lOVCwgc2lnaW50X2hhbmRsZXIpOworCisJCWlmIChzaWcg PT0gU0lHX0VSUikKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGluc3RhbGwgc2lnbmFs IGhhbmRsZXIhXG4iKTsKKwl9CisKKwlzd2l0Y2ggKG91dHB1dF9tb2RlKSB7CisJY2FzZSBJTlRF UkFDVElWRToKKwkJcG9wcyA9ICZ0ZXJtX3BvcHM7CisJCWJyZWFrOworCWNhc2UgU1RET1VUOgor CQlwb3BzID0gJnN0ZG91dF9wb3BzOworCQlicmVhazsKKwljYXNlIEpTT046CisJCXBvcHMgPSAm anNvbl9wb3BzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhc3NlcnQoMCk7CisJCWJyZWFrOwor CX07CisKIAllbmdpbmVzID0gZGlzY292ZXJfZW5naW5lcygpOwogCWlmICghZW5naW5lcykgewog CQlmcHJpbnRmKHN0ZGVyciwKQEAgLTc0MywyMSArMTMyOCwxNiBAQCBpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAKIAlwbXVfc2FtcGxlKGVuZ2luZXMpOwogCi0JZm9yICg7Oykgewot CQlkb3VibGUgdDsKLSNkZWZpbmUgQlVGU1ogMTYKLQkJY2hhciBmcmVxW0JVRlNaXTsKLQkJY2hh ciBmYWN0W0JVRlNaXTsKLQkJY2hhciBpcnFbQlVGU1pdOwotCQljaGFyIHJjNltCVUZTWl07Ci0J CWNoYXIgcG93ZXJbQlVGU1pdOwotCQljaGFyIHJlYWRzW0JVRlNaXTsKLQkJY2hhciB3cml0ZXNb QlVGU1pdOwotCQlzdHJ1Y3Qgd2luc2l6ZSB3czsKKwl3aGlsZSAoIXN0b3BfdG9wKSB7CisJCWJv b2wgY29uc3VtZWQgPSBmYWxzZTsKIAkJaW50IGxpbmVzID0gMDsKKwkJc3RydWN0IHdpbnNpemUg d3M7CisJCWRvdWJsZSB0OwogCiAJCS8qIFVwZGF0ZSB0ZXJtaW5hbCBzaXplLiAqLwotCQlpZiAo aW9jdGwoMCwgVElPQ0dXSU5TWiwgJndzKSAhPSAtMSkgeworCQlpZiAob3V0cHV0X21vZGUgIT0g SU5URVJBQ1RJVkUpIHsKKwkJCWNvbl93ID0gY29uX2ggPSBJTlRfTUFYOworCQl9IGVsc2UgaWYg KGlvY3RsKDAsIFRJT0NHV0lOU1osICZ3cykgIT0gLTEpIHsKIAkJCWNvbl93ID0gd3Mud3NfY29s OwogCQkJY29uX2ggPSB3cy53c19yb3c7CiAJCX0KQEAgLTc2NSw4NyArMTM0NSwzMiBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXBtdV9zYW1wbGUoZW5naW5lcyk7CiAJCXQg PSAoZG91YmxlKShlbmdpbmVzLT50cy5jdXIgLSBlbmdpbmVzLT50cy5wcmV2KSAvIDFlOTsKIAot CQlwcmludGYoIlwwMzNbSFwwMzNbSiIpOwotCi0JCXBtdV9jYWxjKCZlbmdpbmVzLT5mcmVxX3Jl cSwgZnJlcSwgQlVGU1osIDQsIDAsIDEuMCwgdCwgMSk7Ci0JCXBtdV9jYWxjKCZlbmdpbmVzLT5m cmVxX2FjdCwgZmFjdCwgQlVGU1osIDQsIDAsIDEuMCwgdCwgMSk7Ci0JCXBtdV9jYWxjKCZlbmdp bmVzLT5pcnEsIGlycSwgQlVGU1osIDgsIDAsIDEuMCwgdCwgMSk7Ci0JCXBtdV9jYWxjKCZlbmdp bmVzLT5yYzYsIHJjNiwgQlVGU1osIDMsIDAsIDFlOSwgdCwgMTAwKTsKLQkJcG11X2NhbGMoJmVu Z2luZXMtPnJhcGwsIHBvd2VyLCBCVUZTWiwgNCwgMiwgMS4wLCB0LAotCQkJIGVuZ2luZXMtPnJh cGxfc2NhbGUpOwotCQlwbXVfY2FsYygmZW5naW5lcy0+aW1jX3JlYWRzLCByZWFkcywgQlVGU1os IDYsIDAsIDEuMCwgdCwKLQkJCSBlbmdpbmVzLT5pbWNfcmVhZHNfc2NhbGUpOwotCQlwbXVfY2Fs YygmZW5naW5lcy0+aW1jX3dyaXRlcywgd3JpdGVzLCBCVUZTWiwgNiwgMCwgMS4wLCB0LAotCQkJ IGVuZ2luZXMtPmltY193cml0ZXNfc2NhbGUpOwotCi0JCWlmIChsaW5lcysrIDwgY29uX2gpCi0J CQlwcmludGYoImludGVsLWdwdS10b3AgLSAlcy8lcyBNSHo7ICAlcyUlIFJDNjsgJXMgJXM7ICVz IGlycXMvc1xuIiwKLQkJCSAgICAgICBmYWN0LCBmcmVxLCByYzYsIHBvd2VyLCBlbmdpbmVzLT5y YXBsX3VuaXQsIGlycSk7Ci0KLQkJaWYgKGxpbmVzKysgPCBjb25faCkKLQkJCXByaW50ZigiXG4i KTsKLQotCQlpZiAoZW5naW5lcy0+aW1jX2ZkKSB7Ci0JCQlpZiAobGluZXMrKyA8IGNvbl9oKQot CQkJCXByaW50ZigiICAgICAgSU1DIHJlYWRzOiAgICVzICVzL3NcbiIsCi0JCQkJICAgICAgIHJl YWRzLCBlbmdpbmVzLT5pbWNfcmVhZHNfdW5pdCk7Ci0KLQkJCWlmIChsaW5lcysrIDwgY29uX2gp Ci0JCQkJcHJpbnRmKCIgICAgIElNQyB3cml0ZXM6ICAgJXMgJXMvc1xuIiwKLQkJCQkgICAgICAg d3JpdGVzLCBlbmdpbmVzLT5pbWNfd3JpdGVzX3VuaXQpOwotCi0JCQlpZiAoKytsaW5lcyA8IGNv bl9oKQotCQkJCXByaW50ZigiXG4iKTsKLQkJfQotCi0JCWZvciAoaSA9IDA7IGkgPCBlbmdpbmVz LT5udW1fZW5naW5lczsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZW5naW5lICplbmdpbmUgPSBlbmdpbmVf cHRyKGVuZ2luZXMsIGkpOwotCi0JCQlpZiAoZW5naW5lLT5udW1fY291bnRlcnMgJiYgbGluZXMg PCBjb25faCkgewotCQkJCWNvbnN0IGNoYXIgKmEgPSAiICAgICAgICAgIEVOR0lORSAgICAgIEJV U1kgIjsKLQkJCQljb25zdCBjaGFyICpiID0gIiBNSV9TRU1BIE1JX1dBSVQiOwotCi0JCQkJcHJp bnRmKCJcMDMzWzdtJXMlKnMlc1wwMzNbMG1cbiIsCi0JCQkJICAgICAgIGEsCi0JCQkJICAgICAg IChpbnQpKGNvbl93IC0gMSAtIHN0cmxlbihhKSAtIHN0cmxlbihiKSksCi0JCQkJICAgICAgICIg IiwgYik7Ci0JCQkJbGluZXMrKzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWZvciAoaSA9 IDA7IGkgPCBlbmdpbmVzLT5udW1fZW5naW5lcyAmJiBsaW5lcyA8IGNvbl9oOyBpKyspIHsKLQkJ CXN0cnVjdCBlbmdpbmUgKmVuZ2luZSA9IGVuZ2luZV9wdHIoZW5naW5lcywgaSk7Ci0JCQl1bnNp Z25lZCBpbnQgbWF4X3cgPSBjb25fdyAtIDE7Ci0JCQl1bnNpZ25lZCBpbnQgbGVuOwotCQkJY2hh ciBzZW1hW0JVRlNaXTsKLQkJCWNoYXIgd2FpdFtCVUZTWl07Ci0JCQljaGFyIGJ1c3lbQlVGU1pd OwotCQkJY2hhciBidWZbMTI4XTsKLQkJCWRvdWJsZSB2YWw7Ci0KLQkJCWlmICghZW5naW5lLT5u dW1fY291bnRlcnMpCi0JCQkJY29udGludWU7CisJCWlmIChzdG9wX3RvcCkKKwkJCWJyZWFrOwog Ci0JCQlwbXVfY2FsYygmZW5naW5lLT5zZW1hLCBzZW1hLCBCVUZTWiwgMywgMCwgMWU5LCB0LCAx MDApOwotCQkJcG11X2NhbGMoJmVuZ2luZS0+d2FpdCwgd2FpdCwgQlVGU1osIDMsIDAsIDFlOSwg dCwgMTAwKTsKLQkJCWxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIgICAgJXMlJSAg ICAlcyUlIiwKLQkJCQkgICAgICAgc2VtYSwgd2FpdCk7CisJCXdoaWxlICghY29uc3VtZWQpIHsK KwkJCWxpbmVzID0gcHJpbnRfaGVhZGVyKGVuZ2luZXMsIHQsIGxpbmVzLCBjb25fdywgY29uX2gs CisJCQkJCSAgICAgJmNvbnN1bWVkKTsKIAotCQkJcG11X2NhbGMoJmVuZ2luZS0+YnVzeSwgYnVz eSwgQlVGU1osIDYsIDIsIDFlOSwgdCwKLQkJCQkgMTAwKTsKLQkJCWxlbiArPSBwcmludGYoIiUx NnMgJXMlJSAiLCBlbmdpbmUtPmRpc3BsYXlfbmFtZSwgYnVzeSk7CisJCQlpZiAoZW5naW5lcy0+ aW1jX2ZkKQorCQkJCWxpbmVzID0gcHJpbnRfaW1jKGVuZ2luZXMsIHQsIGxpbmVzLCBjb25fdywK KwkJCQkJCSAgY29uX2gpOwogCi0JCQl2YWwgPSBfX3BtdV9jYWxjKCZlbmdpbmUtPmJ1c3kudmFs LCAxZTksIHQsIDEwMCk7Ci0JCQlwcmludF9wZXJjZW50YWdlX2Jhcih2YWwsIG1heF93IC0gbGVu KTsKKwkJCWxpbmVzID0gcHJpbnRfZW5naW5lc19oZWFkZXIoZW5naW5lcywgdCwgbGluZXMsIGNv bl93LAorCQkJCQkJICAgICBjb25faCk7CiAKLQkJCXByaW50ZigiJXNcbiIsIGJ1Zik7CisJCQlm b3IgKGkgPSAwOworCQkJICAgICBpIDwgZW5naW5lcy0+bnVtX2VuZ2luZXMgJiYgbGluZXMgPCBj b25faDsKKwkJCSAgICAgaSsrKQorCQkJCWxpbmVzID0gcHJpbnRfZW5naW5lKGVuZ2luZXMsIGks IHQsIGxpbmVzLAorCQkJCQkJICAgICBjb25fdywgY29uX2gpOwogCi0JCQlsaW5lcysrOworCQkJ bGluZXMgPSBwcmludF9lbmdpbmVzX2Zvb3RlcihlbmdpbmVzLCB0LCBsaW5lcywgY29uX3csCisJ CQkJCQkgICAgIGNvbl9oKTsKIAkJfQogCi0JCWlmIChsaW5lcysrIDwgY29uX2gpCi0JCQlwcmlu dGYoIlxuIik7CisJCWlmIChzdG9wX3RvcCkKKwkJCWJyZWFrOwogCiAJCXVzbGVlcChwZXJpb2Rf dXMpOwogCX0KLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3Qt ZGV2Cg==