From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Bragg Subject: [PATCH 8/9] intel_gpu_top: account for per context statistics Date: Fri, 18 Jul 2014 16:38:52 +0100 Message-ID: <1405697933-30152-9-git-send-email-robert.bragg@intel.com> References: <1405697933-30152-1-git-send-email-robert.bragg@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id BE4546E7A0 for ; Fri, 18 Jul 2014 08:37:30 -0700 (PDT) In-Reply-To: <1405697933-30152-1-git-send-email-robert.bragg@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhlIHBpcGVsaW5lIHN0YXRpc3RpY3MgY291bnRlcnMgcmVwcmVzZW50IHBlciBjb250ZXh0IHZh bHVlcyBhbmQgc28gd2UKY2FuJ3QgYXNzdW1lIHRoYXQgYSBzbmFwc2hvdCB0YWtlbiBvbmNlIHBl ciBzZWNvbmQgd2lsbCBjb3JyZXNwb25kIHRvIHRoZQpzYW1lIGNvbnRleHQgYXMgdGhlIGxhc3Qg c25hcHNob3QuCgpXZSBub3cgcmVhZCB0aGUgc3RhdGlzdGljcyBjb3VudGVycyBmb3IgZXZlcnkg c2FtcGxlIGFuZCBiZWZvcmUgYW5kCmFmdGVyIGVhY2ggc2FtcGxlIHdlIHJlYWQgdGhlIGN1cnJl bnQgY29udGV4dCBpZCB0byBnaXZlIHVzIGEgd2F5Cm9mIGRldGVjdGluZyBpZiB0aGUgY29udGV4 dCBjaGFuZ2VzLgoKVGhlcmUgaXMgbm93IGEgc2xpZ2h0bHkgY2xlYXJlciBzZXBhcmF0aW9uIGJl dHdlZW4gY29sbGVjdGluZyBzYW1wbGUKZGF0YSBpbnRvIGEgZml4ZWQgc2l6ZWQgYXJyYXkgYW5k IHRoZW4gaGFuZGxpbmcgYW5hbHl0aWNzIG9uY2UgcGVyCnNlY29uZCBiZWZvcmUgcHJpbnRpbmcv b3V0cHV0aW5nIHRoZSByZXN1bHRzLgoKU2lnbmVkLW9mZi1ieTogUm9iZXJ0IEJyYWdnIDxyb2Jl cnQuYnJhZ2dAaW50ZWwuY29tPgotLS0KIHRvb2xzL2ludGVsX2dwdV90b3AuYyB8IDQ5MCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDMxNSBpbnNlcnRpb25zKCspLCAxNzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv dG9vbHMvaW50ZWxfZ3B1X3RvcC5jIGIvdG9vbHMvaW50ZWxfZ3B1X3RvcC5jCmluZGV4IDZlNDk0 YjEuLmU1NTgyZmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ludGVsX2dwdV90b3AuYworKysgYi90b29s cy9pbnRlbF9ncHVfdG9wLmMKQEAgLTI0LDYgKzI0LDcgQEAKICAqIEF1dGhvcnM6CiAgKiAgICBF cmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgogICogICAgRXVnZW5pIERvZG9ub3YgPGV1Z2Vu aS5kb2Rvbm92QGludGVsLmNvbT4KKyAqICAgIFJvYmVydCBCcmFnZyA8cm9iZXJ0LmJyYWdnQGlu dGVsLmNvbT4KICAqCiAgKi8KIApAQCAtNjcsOCArNjgsNiBAQCBzdHJ1Y3QgdG9wX2JpdCB7CiB9 IHRvcF9iaXRzW01BWF9OVU1fVE9QX0JJVFNdOwogc3RydWN0IHRvcF9iaXQgKnRvcF9iaXRzX3Nv cnRlZFtNQVhfTlVNX1RPUF9CSVRTXTsKIAotc3RhdGljIHVpbnQzMl90IGluc3Rkb25lLCBpbnN0 ZG9uZTE7Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpiYXJzW10gPSB7CiAJIiAiLAogCSLilo8iLApA QCAtMTE4LDggKzExNyw1NyBAQCBjb25zdCBjaGFyICpzdGF0c19yZWdfbmFtZXNbU1RBVFNfQ09V TlRdID0gewogCSJQUyBkZXB0aCBwYXNzIiwKIH07CiAKLXVpbnQ2NF90IHN0YXRzW1NUQVRTX0NP VU5UXTsKLXVpbnQ2NF90IGxhc3Rfc3RhdHNbU1RBVFNfQ09VTlRdOworc3RydWN0IHBpcGVsaW5l X3N0YXQgeworCXVpbnQ2NF90IHN0YXJ0OworCXVpbnQ2NF90IGVuZDsKKwl1bnNpZ25lZCB3YXJw ZWQ6MTsKK307CisKKyNkZWZpbmUgTUFYX0NPTlRFWFRTIDEwCitzdHJ1Y3QgY29udGV4dCB7CisJ dWludDMyX3QgaWQ7CisJc3RydWN0IHBpcGVsaW5lX3N0YXQgc3RhdHNbU1RBVFNfQ09VTlRdOwor CWludCBuX3NhbXBsZXM7Cit9IGNvbnRleHRzW01BWF9DT05URVhUU107CitzdHJ1Y3QgY29udGV4 dCAqY29udGV4dHNfc29ydGVkW01BWF9DT05URVhUU107CisKK2VudW0gcmluZ3MgeworICAgICAg ICBSSU5HX1JFTkRFUiwKKyAgICAgICAgUklOR19CU0QsCisgICAgICAgIFJJTkdfQlNENiwKKyAg ICAgICAgUklOR19CTElULAorICAgICAgICBNQVhfUklOR1MKK307CisKK3N0YXRpYyBzdHJ1Y3Qg cmluZyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1aW50MzJfdCBtbWlvOworCWludCBzaXplOwor CisJLyogdXNlZCBmb3IgYW5hbHl0aWNzLi4uICovCisJdWludDY0X3QgZnVsbDsKKwl1aW50NjRf dCBpZGxlOworCWludCBuX3NhbXBsZXM7Cit9IHJpbmdzW01BWF9SSU5HU10gPSB7CisJeyAubmFt ZSA9ICJyZW5kZXIiLCAgICAubW1pbyA9IDB4MjAzMCB9LAorCXsgLm5hbWUgPSAiYml0c3RyZWFt IiwgLm1taW8gPSAweDQwMzAgfSwKKwl7IC5uYW1lID0gImJpdHN0cmVhbSIsIC5tbWlvID0gMHgx MjAzMCB9LAorCXsgLm5hbWUgPSAiYmxpdHRlciIsICAgLm1taW8gPSAweDIyMDMwIH0KK307CisK K3N0cnVjdCByaW5nX3NhbXBsZSB7CisgICAgICAgIHVpbnQzMl90IGNjaWRfc3RhcnQ7CisgICAg ICAgIHVpbnQzMl90IGNjaWRfZW5kOworICAgICAgICB1aW50MzJfdCBoZWFkLCB0YWlsOworfTsK Kworc3RydWN0IHNhbXBsZSB7CisJdWludDY0X3QgdGltZXN0YW1wOworCXN0cnVjdCByaW5nX3Nh bXBsZSByaW5nX3NhbXBsZXNbTUFYX1JJTkdTXTsKKwl1aW50MzJfdCBpbnN0ZG9uZTsKKwl1aW50 MzJfdCBpbnN0ZG9uZTE7CisJdWludDY0X3Qgc3RhdHNbU1RBVFNfQ09VTlRdOworfTsKIAogc3Rh dGljIHVuc2lnbmVkIGxvbmcKIGdldHRpbWUodm9pZCkKQEAgLTE2MywxOCArMjExLDIwIEBAIHRv cF9iaXRzX3NvcnQoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIAkJcmV0dXJuIC0xOwog fQogCi1zdGF0aWMgdm9pZAotdXBkYXRlX2lkbGVfYml0KHN0cnVjdCB0b3BfYml0ICp0b3BfYml0 KQorc3RhdGljIGludAorY29udGV4dHNfc29ydChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpi KQogewotCXVpbnQzMl90IHJlZ192YWw7CisJc3RydWN0IGNvbnRleHQgKiBjb25zdCAqIGNvbnRl eHRfYSA9IGE7CisJc3RydWN0IGNvbnRleHQgKiBjb25zdCAqIGNvbnRleHRfYiA9IGI7CisJaW50 IGFfc2FtcGxlcyA9ICgqY29udGV4dF9hKS0+bl9zYW1wbGVzOworCWludCBiX3NhbXBsZXMgPSAo KmNvbnRleHRfYiktPm5fc2FtcGxlczsKIAotCWlmICh0b3BfYml0LT5iaXQtPnJlZyA9PSBJTlNU RE9ORV8xKQotCQlyZWdfdmFsID0gaW5zdGRvbmUxOworCWlmIChhX3NhbXBsZXMgPCBiX3NhbXBs ZXMpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGFfc2FtcGxlcyA9PSBiX3NhbXBsZXMpCisJCXJl dHVybiAwOwogCWVsc2UKLQkJcmVnX3ZhbCA9IGluc3Rkb25lOwotCi0JaWYgKChyZWdfdmFsICYg dG9wX2JpdC0+Yml0LT5iaXQpID09IDApCi0JCXRvcF9iaXQtPmNvdW50Kys7CisJCXJldHVybiAt MTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM0MiwxNCArMzkyLDYgQEAgcHJpbnRfcGVyY2VudGFn ZV9iYXIoZmxvYXQgcGVyY2VudCwgaW50IGN1cl9saW5lX2xlbikKIAlwcmludGYoIiUqcyIsIFBF UkNFTlRBR0VfQkFSX0VORCAtIGN1cl9saW5lX2xlbiwgIiIpOwogfQogCi1zdHJ1Y3QgcmluZyB7 Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl1aW50MzJfdCBtbWlvOwotCWludCBoZWFkLCB0YWlsLCBz aXplOwotCXVpbnQ2NF90IGZ1bGw7Ci0JaW50IGlkbGU7Ci19OwotCiBzdGF0aWMgdWludDMyX3Qg cmluZ19yZWFkKHN0cnVjdCByaW5nICpyaW5nLCB1aW50MzJfdCByZWcpCiB7CiAJcmV0dXJuIElO UkVHKHJpbmctPm1taW8gKyByZWcpOwpAQCAtMzYwLDcyICs0MDIsMzYgQEAgc3RhdGljIHZvaWQg cmluZ19pbml0KHN0cnVjdCByaW5nICpyaW5nKQogCXJpbmctPnNpemUgPSAoKChyaW5nX3JlYWQo cmluZywgUklOR19DVEwpICYgUklOR19OUl9QQUdFUykgPj4gMTIpICsgMSkgKiA0MDk2OwogfQog Ci1zdGF0aWMgdm9pZCByaW5nX3Jlc2V0KHN0cnVjdCByaW5nICpyaW5nKQotewotCXJpbmctPmlk bGUgPSByaW5nLT5mdWxsID0gMDsKLX0KLQotc3RhdGljIHZvaWQgcmluZ19zYW1wbGUoc3RydWN0 IHJpbmcgKnJpbmcpCi17Ci0JaW50IGZ1bGw7Ci0KLQlpZiAoIXJpbmctPnNpemUpCi0JCXJldHVy bjsKLQotCXJpbmctPmhlYWQgPSByaW5nX3JlYWQocmluZywgUklOR19IRUFEKSAmIEhFQURfQURE UjsKLQlyaW5nLT50YWlsID0gcmluZ19yZWFkKHJpbmcsIFJJTkdfVEFJTCkgJiBUQUlMX0FERFI7 Ci0KLQkvKiBXZSBzb21ldGltZXMgcmVhZCBzcHVyaW91cywgb3V0IG9mIHJhbmdlIHBvaW50ZXJz IHdoaWNoCi0JICogd2Ugd2FudCB0byBpZ25vcmUuIFdlIHRyZWF0IHRoZW0gYXMgaWRsZSBmb3Ig bm93Li4uICovCi0JaWYgKHJpbmctPmhlYWQgPiByaW5nLT5zaXplIHx8IHJpbmctPnRhaWwgPiBy aW5nLT5zaXplKQotCXsKLQkgICAgZnByaW50ZihzdGRlcnIsICJJZ25vcmluZyBzcHVyaW91cyBy aW5nIHBvaW50ZXJcbiIpOwotCSAgICByaW5nLT5pZGxlKys7Ci0JICAgIHJldHVybjsKLQl9Ci0K LQlpZiAocmluZy0+dGFpbCA9PSByaW5nLT5oZWFkKQotCQlyaW5nLT5pZGxlKys7Ci0KLQlmdWxs ID0gcmluZy0+dGFpbCAtIHJpbmctPmhlYWQ7Ci0JaWYgKGZ1bGwgPCAwKQotCQlmdWxsICs9IHJp bmctPnNpemU7Ci0JcmluZy0+ZnVsbCArPSBmdWxsOwotfQotCiBzdGF0aWMgdm9pZCByaW5nX3By aW50X2hlYWRlcihGSUxFICpvdXQsIHN0cnVjdCByaW5nICpyaW5nKQogewotICAgIGZwcmludGYo b3V0LCAiJS42cyUlXHRvcHNcdCIsCi0gICAgICAgICAgICByaW5nLT5uYW1lCi0gICAgICAgICAg KTsKKwlmcHJpbnRmKG91dCwgIiAlOXMlJSAlNnMiLCByaW5nLT5uYW1lLCAib3BzIik7CiB9CiAK LXN0YXRpYyB2b2lkIHJpbmdfcHJpbnQoc3RydWN0IHJpbmcgKnJpbmcsIHVuc2lnbmVkIGxvbmcg c2FtcGxlc19wZXJfc2VjKQorc3RhdGljIHZvaWQgcmluZ19wcmludChzdHJ1Y3QgcmluZyAqcmlu ZykKIHsKIAlpbnQgcGVyY2VudF9idXN5LCBsZW47CiAKIAlpZiAoIXJpbmctPnNpemUpCiAJCXJl dHVybjsKIAotCXBlcmNlbnRfYnVzeSA9IDEwMCAtIDEwMCAqIHJpbmctPmlkbGUgLyBzYW1wbGVz X3Blcl9zZWM7CisJcGVyY2VudF9idXN5ID0gMTAwIC0gMTAwICogcmluZy0+aWRsZSAvIHJpbmct Pm5fc2FtcGxlczsKIAogCWxlbiA9IHByaW50ZigiJTI1cyBidXN5OiAlM2QlJTogIiwgcmluZy0+ bmFtZSwgcGVyY2VudF9idXN5KTsKIAlwcmludF9wZXJjZW50YWdlX2JhciAocGVyY2VudF9idXN5 LCBsZW4pOwogCXByaW50ZigiJTI0cyBzcGFjZTogJWQvJWRcbiIsCi0JCSAgIHJpbmctPm5hbWUs Ci0JCSAgIChpbnQpKHJpbmctPmZ1bGwgLyBzYW1wbGVzX3Blcl9zZWMpLAotCQkgICByaW5nLT5z aXplKTsKKwkgICAgICAgcmluZy0+bmFtZSwKKwkgICAgICAgKGludCkocmluZy0+ZnVsbCAvIHJp bmctPm5fc2FtcGxlcyksCisJICAgICAgIHJpbmctPnNpemUpOwogfQogCi1zdGF0aWMgdm9pZCBy aW5nX2xvZyhzdHJ1Y3QgcmluZyAqcmluZywgdW5zaWduZWQgbG9uZyBzYW1wbGVzX3Blcl9zZWMs Ci0JCUZJTEUgKm91dHB1dCkKK3N0YXRpYyB2b2lkIHJpbmdfbG9nKHN0cnVjdCByaW5nICpyaW5n LCBGSUxFICpvdXRwdXQpCiB7CiAJaWYgKHJpbmctPnNpemUpCi0JCWZwcmludGYob3V0cHV0LCAi JTNkXHQlZFx0IiwKLQkJCShpbnQpKDEwMCAtIDEwMCAqIHJpbmctPmlkbGUgLyBzYW1wbGVzX3Bl cl9zZWMpLAotCQkJKGludCkocmluZy0+ZnVsbCAvIHNhbXBsZXNfcGVyX3NlYykpOworCQlmcHJp bnRmKG91dHB1dCwgIiAlMTBkICU2ZCIsCisJCQkoaW50KSgxMDAgLSAxMDAgKiByaW5nLT5pZGxl IC8gcmluZy0+bl9zYW1wbGVzKSwKKwkJCShpbnQpKHJpbmctPmZ1bGwgLyByaW5nLT5uX3NhbXBs ZXMpKTsKIAllbHNlCi0JCWZwcmludGYob3V0cHV0LCAiLTFcdC0xXHQiKTsKKwkJZnByaW50Zihv dXRwdXQsICIgJTEwZCAlNmQiLCAtMSwgLTEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDQ4LDIz ICs0NTQsMTA5IEBAIHVzYWdlKGNvbnN0IGNoYXIgKmFwcG5hbWUpCiAJcmV0dXJuOwogfQogCitz dGF0aWMgaW50IGFuYWx5c2Vfc2FtcGxlcyh1aW50MzJfdCBkZXZpZCwgc3RydWN0IHNhbXBsZSAq c2FtcGxlcywgaW50IG5fc2FtcGxlcykKK3sKKyAgICAgICAgaW50IG5fY29udGV4dHMgPSAwOwor ICAgICAgICBpbnQgaTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlRFWFRTOyBp KyspCisgICAgICAgICAgICAgICAgY29udGV4dHNbaV0ubl9zYW1wbGVzID0gMDsKKworICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgbl9zYW1wbGVzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzdHJ1 Y3Qgc2FtcGxlICpzYW1wbGUgPSBzYW1wbGVzICsgaTsKKyAgICAgICAgICAgICAgICB1aW50MzJf dCBjY2lkID0gc2FtcGxlLT5yaW5nX3NhbXBsZXNbUklOR19SRU5ERVJdLmNjaWRfc3RhcnQ7Cisg ICAgICAgICAgICAgICAgc3RydWN0IGNvbnRleHQgKmNvbnRleHQgPSBOVUxMOworICAgICAgICAg ICAgICAgIGludCBiYWRfcmVuZGVyX3Jpbmdfc2FtcGxlID0gMDsKKworICAgICAgICAgICAgICAg IGZvciAoaW50IGogPSAwOyBqIDwgbnVtX2luc3Rkb25lX2JpdHM7IGorKykgeworICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHRvcF9iaXQgKnRvcF9iaXQgPSB0b3BfYml0cyArIGo7Cisg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWdfdmFsOworCisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAodG9wX2JpdC0+Yml0LT5yZWcgPT0gSU5TVERPTkVfMSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3ZhbCA9IHNhbXBsZS0+aW5zdGRvbmUxOworICAg ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZWdfdmFsID0gc2FtcGxlLT5pbnN0ZG9uZTsKKworICAgICAgICAgICAgICAgICAgICAgICAg aWYgKChyZWdfdmFsICYgdG9wX2JpdC0+Yml0LT5iaXQpID09IDApCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRvcF9iaXQtPmNvdW50Kys7CisgICAgICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBNQVhfUklOR1M7IGorKykgeworICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJpbmdfc2FtcGxlICpycyA9IHNhbXBsZS0+cmlu Z19zYW1wbGVzICsgajsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyaW5nc1tqXS5z aXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg ICAgICAgICAgICAgICAgICAgLyogV2Ugc29tZXRpbWVzIHJlYWQgc3B1cmlvdXMsIG91dCBvZiBy YW5nZQorICAgICAgICAgICAgICAgICAgICAgICAgICogcG9pbnRlcnMgd2hpY2ggd2Ugd2FudCB0 byBpZ25vcmUuLi4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChycy0+aGVhZCA8IHJp bmdzW2pdLnNpemUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBycy0+dGFpbCA8IHJp bmdzW2pdLnNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludDMyX3QgZnVsbCA9IHJzLT50YWlsIC0gcnMtPmhlYWQ7CisKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbCA9IHJzLT50YWlsIC0gcnMtPmhlYWQ7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdWxsIDwgMCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsICs9IHJpbmdzW2pdLnNpemU7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmdzW2pdLmZ1bGwgKz0gZnVsbDsKKwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bGwpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZ3Nbal0uaWRsZSsrOworCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJpbmdzW2pdLm5fc2FtcGxlcysrOworICAgICAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIGlmIChqID09IFJJTkdfUkVOREVSKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBiYWRfcmVuZGVyX3Jpbmdfc2FtcGxlID0gMTsKKyAgICAgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBTb21lIG9mIHRoZSBzdGF0cyBhcmUgcGVyIHJl bmRlciBjb250ZXh0IHNvIHdlCisgICAgICAgICAgICAgICAgICogaGF2ZSBiYWQgZGF0YSBpZiB0 aGUgY29udGV4dCBjaGFuZ2VkIHdoaWxlCisgICAgICAgICAgICAgICAgICogc2FtcGxpbmcuLi4g Ki8KKyAgICAgICAgICAgICAgICBpZiAoYmFkX3JlbmRlcl9yaW5nX3NhbXBsZSB8fAorICAgICAg ICAgICAgICAgICAgICBjY2lkICE9IHNhbXBsZS0+cmluZ19zYW1wbGVzW1JJTkdfUkVOREVSXS5j Y2lkX2VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuX2NvbnRleHRzOyBqKyspIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0cyArIGo7CisgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoY29udGV4dC0+aWQgPT0gY2NpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuX2Nv bnRleHRzICYmIGNvbnRleHQtPmlkID09IGNjaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRleHQtPm5fc2FtcGxlcysrOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUhB U19TVEFUU19SRUdTKGRldmlkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgU1RB VFNfQ09VTlQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Ft cGxlLT5zdGF0c1tqXSA+PSBjb250ZXh0LT5zdGF0c1tqXS5lbmQpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c3RhdHNbal0uZW5kID0gc2FtcGxlLT5z dGF0c1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnN0YXRzW2pdLndhcnBlZCA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuX2NvbnRleHRzID09IE1BWF9DT05URVhUUykK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRleHQgPSAmY29udGV4dHNbbl9jb250ZXh0cysrXTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRleHQtPmlkID0gY2NpZDsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRleHQtPm5fc2FtcGxlcyA9IDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm ICghSEFTX1NUQVRTX1JFR1MoZGV2aWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCBTVEFUU19DT1VOVDsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRleHQtPnN0YXRzW2pdLnN0YXJ0ID0gc2FtcGxlLT5zdGF0c1tqXTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29udGV4dC0+c3RhdHNbal0uZW5kID0gc2FtcGxlLT5zdGF0c1tq XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c3RhdHNbal0ud2Fy cGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbl9jb250ZXh0czsKK30KKwogaW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXVpbnQzMl90IGRldmlkOwogCXN0cnVjdCBwY2lfZGV2 aWNlICpwY2lfZGV2OwotCXN0cnVjdCByaW5nIHJlbmRlcl9yaW5nID0gewotCQkubmFtZSA9ICJy ZW5kZXIiLAotCQkubW1pbyA9IDB4MjAzMCwKLQl9LCBic2RfcmluZyA9IHsKLQkJLm5hbWUgPSAi Yml0c3RyZWFtIiwKLQkJLm1taW8gPSAweDQwMzAsCi0JfSwgYnNkNl9yaW5nID0gewotCQkubmFt ZSA9ICJiaXRzdHJlYW0iLAotCQkubW1pbyA9IDB4MTIwMzAsCi0JfSwgYmx0X3JpbmcgPSB7Ci0J CS5uYW1lID0gImJsaXR0ZXIiLAotCQkubW1pbyA9IDB4MjIwMzAsCi0JfTsKIAlpbnQgaSwgY2g7 CiAJaW50IHNhbXBsZXNfcGVyX3NlYyA9IFNBTVBMRVNfUEVSX1NFQzsKIAlGSUxFICpvdXRwdXQg PSBOVUxMOwpAQCAtNDc0LDYgKzU2Niw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAlpbnQgY2hpbGRfc3RhdDsKIAljaGFyICpjbWQ9TlVMTDsKIAlpbnQgaW50ZXJhY3RpdmU9 MTsKKwlzdHJ1Y3Qgc2FtcGxlICpzYW1wbGVzOwogCiAJLyogUGFyc2Ugb3B0aW9ucz8gKi8KIAl3 aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJzOm86ZTpoIikpICE9IC0xKSB7CkBAIC01 MTIsNiArNjA1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJfQog CisJc2FtcGxlcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNhbXBsZSkgKiBzYW1wbGVzX3Blcl9z ZWMpOworCiAJcGNpX2RldiA9IGludGVsX2dldF9wY2lfZGV2aWNlKCk7CiAJZGV2aWQgPSBwY2lf ZGV2LT5kZXZpY2VfaWQ7CiAJaW50ZWxfbW1pb191c2VfcGNpX2JhcihwY2lfZGV2KTsKQEAgLTU1 MSwzNSArNjQ2LDIxIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJdG9wX2Jp dHNfc29ydGVkW2ldID0gJnRvcF9iaXRzW2ldOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBNQVhf Q09OVEVYVFM7IGkrKykKKwkJY29udGV4dHNfc29ydGVkW2ldID0gJmNvbnRleHRzW2ldOworCiAJ LyogR3JhYiBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVycyAqLwogCWludGVsX3JlZ2lzdGVyX2FjY2Vz c19pbml0KHBjaV9kZXYsIDApOwogCi0JcmluZ19pbml0KCZyZW5kZXJfcmluZyk7CisJcmluZ19p bml0KCZyaW5nc1tSSU5HX1JFTkRFUl0pOwogCWlmIChJU19HRU40KGRldmlkKSB8fCBJU19HRU41 KGRldmlkKSkKLQkJcmluZ19pbml0KCZic2RfcmluZyk7CisJCXJpbmdfaW5pdCgmcmluZ3NbUklO R19CU0RdKTsKIAlpZiAoSVNfR0VONihkZXZpZCkgfHwgSVNfR0VONyhkZXZpZCkpIHsKLQkJcmlu Z19pbml0KCZic2Q2X3JpbmcpOwotCQlyaW5nX2luaXQoJmJsdF9yaW5nKTsKLQl9Ci0KLQkvKiBJ bml0aWFsaXplIEdQVSBzdGF0cyAqLwotCWlmIChIQVNfU1RBVFNfUkVHUyhkZXZpZCkpIHsKLQkJ Zm9yIChpID0gMDsgaSA8IFNUQVRTX0NPVU5UOyBpKyspIHsKLQkJCXVpbnQzMl90IHN0YXRzX2hp Z2gsIHN0YXRzX2xvdywgc3RhdHNfaGlnaF8yOwotCi0JCQlkbyB7Ci0JCQkJc3RhdHNfaGlnaCA9 IElOUkVHKHN0YXRzX3JlZ3NbaV0gKyA0KTsKLQkJCQlzdGF0c19sb3cgPSBJTlJFRyhzdGF0c19y ZWdzW2ldKTsKLQkJCQlzdGF0c19oaWdoXzIgPSBJTlJFRyhzdGF0c19yZWdzW2ldICsgNCk7Ci0J CQl9IHdoaWxlIChzdGF0c19oaWdoICE9IHN0YXRzX2hpZ2hfMik7Ci0KLQkJCWxhc3Rfc3RhdHNb aV0gPSAodWludDY0X3Qpc3RhdHNfaGlnaCA8PCAzMiB8Ci0JCQkJc3RhdHNfbG93OwotCQl9CisJ CXJpbmdfaW5pdCgmcmluZ3NbUklOR19CU0Q2XSk7CisJCXJpbmdfaW5pdCgmcmluZ3NbUklOR19C TElUXSk7CiAJfQogCiAJZm9yICg7OykgewotCQlpbnQgajsKIAkJdW5zaWduZWQgbG9uZyBsb25n IHQxLCB0aSwgdGYsIHQyOwogCQl1bnNpZ25lZCBsb25nIGxvbmcgZGVmX3NsZWVwID0gMTAwMDAw MCAvIHNhbXBsZXNfcGVyX3NlYzsKIAkJdW5zaWduZWQgbG9uZyBsb25nIGxhc3Rfc2FtcGxlc19w ZXJfc2VjID0gc2FtcGxlc19wZXJfc2VjOwpAQCAtNTg4LDMyICs2NjksNjMgQEAgaW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQljaGFyIGNsZWFyX3NjcmVlbltdID0gezB4MWIsICdb JywgJ0gnLAogCQkJCSAgICAgICAweDFiLCAnWycsICdKJywKIAkJCQkgICAgICAgMHgwfTsKLQkJ aW50IHBlcmNlbnQ7CiAJCWludCBsZW47CisJCWludCBuX2NvbnRleHRzOwogCiAJCXQxID0gZ2V0 dGltZSgpOwogCi0JCXJpbmdfcmVzZXQoJnJlbmRlcl9yaW5nKTsKLQkJcmluZ19yZXNldCgmYnNk X3JpbmcpOwotCQlyaW5nX3Jlc2V0KCZic2Q2X3JpbmcpOwotCQlyaW5nX3Jlc2V0KCZibHRfcmlu Zyk7Ci0KIAkJZm9yIChpID0gMDsgaSA8IHNhbXBsZXNfcGVyX3NlYzsgaSsrKSB7CisJCQlzdHJ1 Y3Qgc2FtcGxlICpzYW1wbGUgPSBzYW1wbGVzICsgaTsKIAkJCWxvbmcgbG9uZyBpbnRlcnZhbDsK IAkJCXRpID0gZ2V0dGltZSgpOworCisJCQlzYW1wbGUtPnRpbWVzdGFtcCA9IHQxOworCiAJCQlp ZiAoSVNfOTY1KGRldmlkKSkgewotCQkJCWluc3Rkb25lID0gSU5SRUcoSU5TVERPTkVfSTk2NSk7 Ci0JCQkJaW5zdGRvbmUxID0gSU5SRUcoSU5TVERPTkVfMSk7CisJCQkJc2FtcGxlLT5pbnN0ZG9u ZSA9IElOUkVHKElOU1RET05FX0k5NjUpOworCQkJCXNhbXBsZS0+aW5zdGRvbmUxID0gSU5SRUco SU5TVERPTkVfMSk7CiAJCQl9IGVsc2UKLQkJCQlpbnN0ZG9uZSA9IElOUkVHKElOU1RET05FKTsK KwkJCQlzYW1wbGUtPmluc3Rkb25lID0gSU5SRUcoSU5TVERPTkUpOworCisJCQlmb3IgKGludCBq ID0gMDsgaiA8IE1BWF9SSU5HUzsgaisrKSB7CisJCQkJc3RydWN0IHJpbmdfc2FtcGxlICpyczsK KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJpbmdzW2pdLnNpemUpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLQkJCWZv ciAoaiA9IDA7IGogPCBudW1faW5zdGRvbmVfYml0czsgaisrKQotCQkJCXVwZGF0ZV9pZGxlX2Jp dCgmdG9wX2JpdHNbal0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycyA9IHNh bXBsZS0+cmluZ19zYW1wbGVzICsgajsKKwkJCQlycy0+Y2NpZF9zdGFydCA9CisJCQkJICAgIHJp bmdfcmVhZChyaW5ncyArIGosIFJJTkdfQ0NJRCkgJiBDQ0lEX0FERFJfTUFTSzsKKwkJCQlycy0+ aGVhZCA9CisJCQkJICAgIHJpbmdfcmVhZChyaW5ncyArIGosIFJJTkdfSEVBRCkgJiBIRUFEX0FE RFI7CisJCQkJcnMtPnRhaWwgPQorCQkJCSAgICByaW5nX3JlYWQocmluZ3MgKyBqLCBSSU5HX1RB SUwpICYgVEFJTF9BRERSOworCQkJfQorCisJCQlpZiAoSEFTX1NUQVRTX1JFR1MoZGV2aWQpKSB7 CisJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBTVEFUU19DT1VOVDsgaisrKSB7CisJCQkJCXVpbnQz Ml90IHN0YXRzX2hpZ2gsIHN0YXRzX2xvdywgc3RhdHNfaGlnaF8yOworCisJCQkJCWRvIHsKKwkJ CQkJICAgIHN0YXRzX2hpZ2ggPSBJTlJFRyhzdGF0c19yZWdzW2pdICsgNCk7CisJCQkJCSAgICBz dGF0c19sb3cgPSBJTlJFRyhzdGF0c19yZWdzW2pdKTsKKwkJCQkJICAgIHN0YXRzX2hpZ2hfMiA9 IElOUkVHKHN0YXRzX3JlZ3Nbal0gKyA0KTsKKwkJCQkJfSB3aGlsZSAoc3RhdHNfaGlnaCAhPSBz dGF0c19oaWdoXzIpOwogCi0JCQlyaW5nX3NhbXBsZSgmcmVuZGVyX3JpbmcpOwotCQkJcmluZ19z YW1wbGUoJmJzZF9yaW5nKTsKLQkJCXJpbmdfc2FtcGxlKCZic2Q2X3JpbmcpOwotCQkJcmluZ19z YW1wbGUoJmJsdF9yaW5nKTsKKwkJCQkJc2FtcGxlLT5zdGF0c1tqXSA9ICh1aW50NjRfdClzdGF0 c19oaWdoIDw8IDMyIHwKKwkJCQkJICAgIHN0YXRzX2xvdzsKKwkJCQl9CisJCQl9CisKKwkJCWZv ciAoaW50IGogPSAwOyBqIDwgTUFYX1JJTkdTOyBqKyspIHsKKwkJCQlzdHJ1Y3QgcmluZ19zYW1w bGUgKnJzID0gc2FtcGxlLT5yaW5nX3NhbXBsZXMgKyBqOworCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmICghcmluZ3Nbal0uc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworCQkJCXJzLT5jY2lkX2VuZCA9CisJCQkJICAg IHJpbmdfcmVhZChyaW5ncyArIGosIFJJTkdfQ0NJRCkgJiBDQ0lEX0FERFJfTUFTSzsKKwkJCX0K IAogCQkJdGYgPSBnZXR0aW1lKCk7CiAJCQlpZiAodGYgLSB0MSA+PSAxMDAwMDAwKSB7CkBAIC02 MjYsNDcgKzczOCw1OCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJdXNs ZWVwKGludGVydmFsKTsKIAkJfQogCi0JCWlmIChIQVNfU1RBVFNfUkVHUyhkZXZpZCkpIHsKLQkJ CWZvciAoaSA9IDA7IGkgPCBTVEFUU19DT1VOVDsgaSsrKSB7Ci0JCQkJdWludDMyX3Qgc3RhdHNf aGlnaCwgc3RhdHNfbG93LCBzdGF0c19oaWdoXzI7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfUklO R1M7IGkrKykgeworCQkJc3RydWN0IHJpbmcgKnJpbmcgPSByaW5ncyArIGk7CiAKLQkJCQlkbyB7 Ci0JCQkJCXN0YXRzX2hpZ2ggPSBJTlJFRyhzdGF0c19yZWdzW2ldICsgNCk7Ci0JCQkJCXN0YXRz X2xvdyA9IElOUkVHKHN0YXRzX3JlZ3NbaV0pOwotCQkJCQlzdGF0c19oaWdoXzIgPSBJTlJFRyhz dGF0c19yZWdzW2ldICsgNCk7Ci0JCQkJfSB3aGlsZSAoc3RhdHNfaGlnaCAhPSBzdGF0c19oaWdo XzIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyaW5nLT5zaXplKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotCQkJCXN0YXRzW2ldID0gKHVpbnQ2 NF90KXN0YXRzX2hpZ2ggPDwgMzIgfAotCQkJCQlzdGF0c19sb3c7Ci0JCQl9CisJCQlyaW5nLT5m dWxsID0gMDsKKwkJCXJpbmctPmlkbGUgPSAwOworCQkJcmluZy0+bl9zYW1wbGVzID0gMDsKIAkJ fQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2luc3Rkb25lX2JpdHM7IGkrKykKKwkJCXRvcF9iaXRz W2ldLmNvdW50ID0gMDsKKworICAgICAgICAgICAgICAgIG5fY29udGV4dHMgPSBhbmFseXNlX3Nh bXBsZXMoZGV2aWQsIHNhbXBsZXMsIGxhc3Rfc2FtcGxlc19wZXJfc2VjKTsKKyAgICAgICAgICAg ICAgICBpZiAoIW5fY29udGV4dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiTm90IGFibGUgdG8gZGlzdGluZ3Vpc2ggZXZlbiBvbmUgIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiY29udGV4dCBpbiBzYW1wbGVzISIpOworICAgICAgICAgICAg ICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICB9CiAKIAkJcXNvcnQodG9wX2Jp dHNfc29ydGVkLCBudW1faW5zdGRvbmVfYml0cywKIAkJICAgICAgc2l6ZW9mKHN0cnVjdCB0b3Bf Yml0ICopLCB0b3BfYml0c19zb3J0KTsKKwkJcXNvcnQoY29udGV4dHNfc29ydGVkLCBNQVhfQ09O VEVYVFMsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgY29udGV4dCAqKSwgY29udGV4dHNfc29ydCk7 CiAKIAkJLyogTGltaXQgdGhlIG51bWJlciBvZiBsaW5lcyBwcmludGVkIHRvIHRoZSB0ZXJtaW5h bCBoZWlnaHQgc28gdGhlCiAJCSAqIG1vc3QgaW1wb3J0YW50IGluZm8gKGF0IHRoZSB0b3ApIHdp bGwgc3RheSBvbiBzY3JlZW4uICovCiAJCW1heF9saW5lcyA9IC0xOwogCQlpZiAoaW9jdGwoMCwg VElPQ0dXSU5TWiwgJndzKSAhPSAtMSkKIAkJCW1heF9saW5lcyA9IHdzLndzX3JvdyAtIDY7IC8q IGV4Y2x1ZGUgaGVhZGVyIGxpbmVzICovCi0JCWlmIChtYXhfbGluZXMgPj0gbnVtX2luc3Rkb25l X2JpdHMpCi0JCQltYXhfbGluZXMgPSBudW1faW5zdGRvbmVfYml0czsKIAogCQl0MiA9IGdldHRp bWUoKTsKIAkJZWxhcHNlZF90aW1lICs9ICh0MiAtIHQxKSAvIDEwMDAwMDAuMDsKIAogCQlpZiAo aW50ZXJhY3RpdmUpIHsKKwkJCWludCBjdHhfaSA9IDA7CisJCQlpbnQgc3RhdF9pID0gLTE7IC8q IGFjY291bnQgZm9yIGNvbnRleHQgaGVhZGVyICovCisJCQlpbnQgcGVyY2VudDsKKwogCQkJcHJp bnRmKCIlcyIsIGNsZWFyX3NjcmVlbik7CiAJCQlwcmludF9jbG9ja19pbmZvKHBjaV9kZXYpOwog Ci0JCQlyaW5nX3ByaW50KCZyZW5kZXJfcmluZywgbGFzdF9zYW1wbGVzX3Blcl9zZWMpOwotCQkJ cmluZ19wcmludCgmYnNkX3JpbmcsIGxhc3Rfc2FtcGxlc19wZXJfc2VjKTsKLQkJCXJpbmdfcHJp bnQoJmJzZDZfcmluZywgbGFzdF9zYW1wbGVzX3Blcl9zZWMpOwotCQkJcmluZ19wcmludCgmYmx0 X3JpbmcsIGxhc3Rfc2FtcGxlc19wZXJfc2VjKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBNQVhfUklO R1M7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJpbmdzW2ld LnNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 CisJCQkJcmluZ19wcmludChyaW5ncyArIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQog CiAJCQlwcmludGYoIlxuJTMwcyAgJXNcbiIsICJ0YXNrIiwgInBlcmNlbnQgYnVzeSIpOwogCQkJ Zm9yIChpID0gMDsgaSA8IG1heF9saW5lczsgaSsrKSB7Ci0JCQkJaWYgKHRvcF9iaXRzX3NvcnRl ZFtpXS0+Y291bnQgPiAwKSB7CisJCQkJaWYgKGkgPCBudW1faW5zdGRvbmVfYml0cyAmJgorCQkJ CSAgICB0b3BfYml0c19zb3J0ZWRbaV0tPmNvdW50ID4gMCkgewogCQkJCQlwZXJjZW50ID0gKHRv cF9iaXRzX3NvcnRlZFtpXS0+Y291bnQgKiAxMDApIC8KIAkJCQkJCWxhc3Rfc2FtcGxlc19wZXJf c2VjOwogCQkJCQlsZW4gPSBwcmludGYoIiUzMHM6ICUzZCUlOiAiLApAQCAtNjc3LDE0ICs4MDAs MzIgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQlwcmludGYoIiUqcyIs IFBFUkNFTlRBR0VfQkFSX0VORCwgIiIpOwogCQkJCX0KIAotCQkJCWlmIChpIDwgU1RBVFNfQ09V TlQgJiYgSEFTX1NUQVRTX1JFR1MoZGV2aWQpKSB7Ci0JCQkJCXByaW50ZigiJTEzczogJWxsdSAo JWxsZC9zZWMpIiwKLQkJCQkJCSAgIHN0YXRzX3JlZ19uYW1lc1tpXSwKLQkJCQkJCSAgIChsb25n IGxvbmcpc3RhdHNbaV0sCi0JCQkJCQkgICAobG9uZyBsb25nKShzdGF0c1tpXSAtIGxhc3Rfc3Rh dHNbaV0pKTsKLQkJCQkJbGFzdF9zdGF0c1tpXSA9IHN0YXRzW2ldOworCQkJCWlmIChjdHhfaSA8 IG5fY29udGV4dHMgJiYgSEFTX1NUQVRTX1JFR1MoZGV2aWQpKSB7CisJCQkJCXN0cnVjdCBjb250 ZXh0ICpjb250ZXh0ID0gY29udGV4dHNfc29ydGVkW2N0eF9pXTsKKworCQkJCQlpZiAoc3RhdF9p ID09IC0xKSB7CisJCQkJCQlwZXJjZW50ID0gKGNvbnRleHQtPm5fc2FtcGxlcyAqIDEwMCkgLwor CQkJCQkJCWxhc3Rfc2FtcGxlc19wZXJfc2VjOworCQkJCQkJcHJpbnRmKCJjb250ZXh0ID0gJSIg UFJJeDMyICIgOiAlZCUlIGFjdGl2ZSIsCisJCQkJCQkgICAgICAgY29udGV4dC0+aWQsIHBlcmNl bnQpOworCQkJCQl9IGVsc2UgaWYgKCFjb250ZXh0LT5zdGF0c1tzdGF0X2ldLndhcnBlZCkgewor CQkJCQkJcHJpbnRmKCIgICAlLTE1czogJSIgUFJJdTY0ICIgKCUiIFBSSXU2NCAiL3NlYykiLAor CQkJCQkJICAgICAgIHN0YXRzX3JlZ19uYW1lc1tzdGF0X2ldLAorCQkJCQkJICAgICAgIGNvbnRl eHQtPnN0YXRzW3N0YXRfaV0uZW5kLAorCQkJCQkJICAgICAgIChjb250ZXh0LT5zdGF0c1tzdGF0 X2ldLmVuZCAtCisJCQkJCQkJY29udGV4dC0+c3RhdHNbc3RhdF9pXS5zdGFydCkpOworCQkJCQl9 IGVsc2UgeworCQkJCQkJcHJpbnRmKCIgICAlLTE1czogJSIgUFJJdTY0ICIgKFRpbWUgV2FycCBF cnJvcikiLAorCQkJCQkJICAgICAgIHN0YXRzX3JlZ19uYW1lc1tzdGF0X2ldLAorCQkJCQkJICAg ICAgIGNvbnRleHQtPnN0YXRzW3N0YXRfaV0uZW5kKTsKKwkJCQkJfQorCQkJCQlpZiAoKytzdGF0 X2kgPT0gU1RBVFNfQ09VTlQpIHsKKwkJCQkJICAgIGN0eF9pKys7CisJCQkJCSAgICBzdGF0X2kg PSAtMTsKKwkJCQkJfQogCQkJCX0gZWxzZSB7Ci0JCQkJCWlmICghdG9wX2JpdHNfc29ydGVkW2ld LT5jb3VudCkKKwkJCQkJaWYgKGkgPj0gbnVtX2luc3Rkb25lX2JpdHMgfHwKKwkJCQkJICAgICF0 b3BfYml0c19zb3J0ZWRbaV0tPmNvdW50KQogCQkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCXByaW50 ZigiXG4iKTsKQEAgLTY5Myw1MSArODM0LDUwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKIAkJaWYgKG91dHB1dCkgewogCQkJLyogUHJpbnQgaGVhZGVycyBmb3IgY29sdW1ucyBh dCBmaXJzdCBydW4gKi8KIAkJCWlmIChwcmludF9oZWFkZXJzKSB7Ci0JCQkJZnByaW50ZihvdXRw dXQsICIjIHRpbWVcdCIpOwotCQkJCXJpbmdfcHJpbnRfaGVhZGVyKG91dHB1dCwgJnJlbmRlcl9y aW5nKTsKLQkJCQlyaW5nX3ByaW50X2hlYWRlcihvdXRwdXQsICZic2RfcmluZyk7Ci0JCQkJcmlu Z19wcmludF9oZWFkZXIob3V0cHV0LCAmYnNkNl9yaW5nKTsKLQkJCQlyaW5nX3ByaW50X2hlYWRl cihvdXRwdXQsICZibHRfcmluZyk7Ci0JCQkJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fVE9QX0JJ VFM7IGkrKykgewotCQkJCQlpZiAoaSA8IFNUQVRTX0NPVU5UICYmIEhBU19TVEFUU19SRUdTKGRl dmlkKSkgewotCQkJCQkJZnByaW50ZihvdXRwdXQsICIlLjZzXHQiLAotCQkJCQkJCSAgIHN0YXRz X3JlZ19uYW1lc1tpXQotCQkJCQkJCSAgICk7Ci0JCQkJCX0KLQkJCQkJaWYgKCF0b3BfYml0c1tp XS5jb3VudCkKLQkJCQkJCWNvbnRpbnVlOworCQkJCWZwcmludGYob3V0cHV0LCAiIyUxNXMgJTEw cyIsICJ0aW1lIiwgImNvbnRleHQiKTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1JJTkdTOyBp KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJpbmdz W2ldLnNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKKwkJCQkJcmluZ19wcmludF9oZWFkZXIob3V0cHV0LCAmcmluZ3NbaV0pOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQkJZm9yIChpID0gMDsgaSA8IFNU QVRTX0NPVU5UOyBpKyspIHsKKwkJCQkJZnByaW50ZihvdXRwdXQsICIgJTE1cyIsIHN0YXRzX3Jl Z19uYW1lc1tpXSk7CiAJCQkJfQogCQkJCWZwcmludGYob3V0cHV0LCAiXG4iKTsKIAkJCQlwcmlu dF9oZWFkZXJzID0gMDsKIAkJCX0KIAogCQkJLyogUHJpbnQgc3RhdGlzdGljcyAqLwotCQkJZnBy aW50ZihvdXRwdXQsICIlLjJmXHQiLCBlbGFwc2VkX3RpbWUpOwotCQkJcmluZ19sb2coJnJlbmRl cl9yaW5nLCBsYXN0X3NhbXBsZXNfcGVyX3NlYywgb3V0cHV0KTsKLQkJCXJpbmdfbG9nKCZic2Rf cmluZywgbGFzdF9zYW1wbGVzX3Blcl9zZWMsIG91dHB1dCk7Ci0JCQlyaW5nX2xvZygmYnNkNl9y aW5nLCBsYXN0X3NhbXBsZXNfcGVyX3NlYywgb3V0cHV0KTsKLQkJCXJpbmdfbG9nKCZibHRfcmlu ZywgbGFzdF9zYW1wbGVzX3Blcl9zZWMsIG91dHB1dCk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBN QVhfTlVNX1RPUF9CSVRTOyBpKyspIHsKLQkJCQlpZiAoaSA8IFNUQVRTX0NPVU5UICYmIEhBU19T VEFUU19SRUdTKGRldmlkKSkgewotCQkJCQlmcHJpbnRmKG91dHB1dCwgIiVsdVx0IiwKLQkJCQkJ CSAgIHN0YXRzW2ldIC0gbGFzdF9zdGF0c1tpXSk7Ci0JCQkJCWxhc3Rfc3RhdHNbaV0gPSBzdGF0 c1tpXTsKKwkJCWZwcmludGYob3V0cHV0LCAiICUxNS4yZiAlMTBzIiwgZWxhcHNlZF90aW1lLCAi Iik7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBNQVhfUklOR1M7IGkrKykgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIXJpbmdzW2ldLnNpemUpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisJCQkJcmluZ19sb2coJnJpbmdzW2ld LCBvdXRwdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJZnByaW50ZihvdXRwdXQs ICJcbiIpOworCQkJZm9yIChpID0gMDsgaSA8IG5fY29udGV4dHM7IGkrKykgeworCQkJCXN0cnVj dCBjb250ZXh0ICpjb250ZXh0ID0gY29udGV4dHNfc29ydGVkW2ldOworCisJCQkJZnByaW50Zihv dXRwdXQsICIgJTE1cyAlMTAiIFBSSXgzMiwgIiIsIGNvbnRleHQtPmlkKTsKKworCQkJCWZvciAo aW50IGogPSAwOyBqIDwgTUFYX1JJTkdTOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIXJpbmdzW2ldLnNpemUpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkJCQkJZnByaW50ZihvdXRw dXQsICIgJTEwcyAlNnMiLCAiIiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CisKKwkJCQlmb3IgKGludCBqID0gMDsgaiA8IFNUQVRTX0NPVU5UOyBqKyspIHsKKwkJCQkJ ZnByaW50ZihvdXRwdXQsICIgJTE1IiBQUkl1NjQsCisJCQkJCQkoY29udGV4dC0+c3RhdHNbal0u ZW5kIC0KKwkJCQkJCSBjb250ZXh0LT5zdGF0c1tqXS5zdGFydCkpOwogCQkJCX0KLQkJCQkJaWYg KCF0b3BfYml0c1tpXS5jb3VudCkKLQkJCQkJCWNvbnRpbnVlOworCQkJCWZwcmludGYob3V0cHV0 LCAiXG4iKTsKIAkJCX0KIAkJCWZwcmludGYob3V0cHV0LCAiXG4iKTsKIAkJCWZmbHVzaChvdXRw dXQpOwogCQl9CiAKLQkJZm9yIChpID0gMDsgaSA8IG51bV9pbnN0ZG9uZV9iaXRzOyBpKyspIHsK LQkJCXRvcF9iaXRzX3NvcnRlZFtpXS0+Y291bnQgPSAwOwotCi0JCQlpZiAoaSA8IFNUQVRTX0NP VU5UKQotCQkJCWxhc3Rfc3RhdHNbaV0gPSBzdGF0c1tpXTsKLQkJfQotCiAJCS8qIENoZWNrIGlm IGNoaWxkIGhhcyBnb25lICovCiAJCWlmIChjaGlsZF9waWQgPiAwKSB7CiAJCQlpbnQgcmVzOwot LSAKMi4wLjEKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbnRlbCBDb3Jwb3JhdGlvbiAoVUspIExpbWl0ZWQKUmVn aXN0ZXJlZCBOby4gMTEzNDk0NSAoRW5nbGFuZCkKUmVnaXN0ZXJlZCBPZmZpY2U6IFBpcGVycyBX YXksIFN3aW5kb24gU04zIDFSSgpWQVQgTm86IDg2MCAyMTczIDQ3CgpUaGlzIGUtbWFpbCBhbmQg YW55IGF0dGFjaG1lbnRzIG1heSBjb250YWluIGNvbmZpZGVudGlhbCBtYXRlcmlhbCBmb3IKdGhl IHNvbGUgdXNlIG9mIHRoZSBpbnRlbmRlZCByZWNpcGllbnQocykuIEFueSByZXZpZXcgb3IgZGlz dHJpYnV0aW9uCmJ5IG90aGVycyBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLiBJZiB5b3UgYXJlIG5v dCB0aGUgaW50ZW5kZWQKcmVjaXBpZW50LCBwbGVhc2UgY29udGFjdCB0aGUgc2VuZGVyIGFuZCBk ZWxldGUgYWxsIGNvcGllcy4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK