From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v5 4/4] livepach: Add .livepatch.hooks functions and test-case Date: Sun, 11 Sep 2016 11:48:32 -0400 Message-ID: <1473608912-5913-5-git-send-email-konrad.wilk@oracle.com> References: <1473608912-5913-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bj70F-0001k7-Qa for xen-devel@lists.xenproject.org; Sun, 11 Sep 2016 15:49:07 +0000 In-Reply-To: <1473608912-5913-1-git-send-email-konrad.wilk@oracle.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, konrad@kernel.org, ross.lagerwall@citrix.com Cc: Stefano Stabellini , Wei Liu , Konrad Rzeszutek Wilk , George Dunlap , andrew.cooper3@citrix.com, Ian Jackson , Tim Deegan , Jan Beulich List-Id: xen-devel@lists.xenproject.org RnJvbTogUm9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+CgpBZGQgaG9v ayBmdW5jdGlvbnMgd2hpY2ggcnVuIGR1cmluZyBwYXRjaCBhcHBseSBhbmQgcGF0Y2ggcmV2ZXJ0 LgpIb29rIGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBsaXZlcGF0Y2ggcGF5bG9hZHMgdG8gbWFuaXB1 bGF0ZSBkYXRhCnN0cnVjdHVyZXMgZHVyaW5nIHBhdGNoaW5nLCBldGMuCgpPbmUgdXNlIGNhc2Ug aXMgdGhlIFhTQTkxLiBBcyBNYXJ0aW4gbWVudGlvbnMgaXQ6CiJJZiB3ZSBoYXZlIHNoYWRvdyB2 YXJpYWJsZXMsIHdlIGFsc28gbmVlZCBhbiB1bmxvYWQgaG9vayB0byBnYXJiYWdlCmNvbGxlY3Qg YWxsIHRoZSB2YXJpYWJsZXMgaW50cm9kdWNlZCBieSBhIGhvdHBhdGNoIHRvIHByZXZlbnQgbWVt b3J5CmxlYWtzLiAgUG90ZW50aWFsbHksIHdlIGFsc28gd2FudCB0byBwcmUtcmVzZXJ2ZSBtZW1v cnkgZm9yIHN0YXRpYyBvcgpleGlzdGluZyBkeW5hbWljIG9iamVjdHMgaW4gdGhlIGxvYWQtaG9v ayBpbnN0ZWFkIG9mIG9uIHRoZSBmbHkuCgpGb3IgdGVzdGluZyBhbmQgZGVidWdnaW5nLCB2YXJp b3VzIGFwcGxpY2F0aW9ucyBhcmUgcG9zc2libGUuCgpJbiBnZW5lcmFsLCB0aGUgaG9va3MgcHJv dmlkZSBmbGV4aWJpbGl0eSB3aGVuIGhhdmluZyB0byBkZWFsIHdpdGgKdW5mb3Jlc2VlbiBjYXNl cywgYnV0IHRoZWlyIGFwcGxpY2F0aW9uIHNob3VsZCBiZSByYXJlbHkgcmVxdWlyZWQgKDwKMTAl KS4iCgpGdXJ0aGVybW9yZSBpbmNsdWRlIGEgdGVzdC1jYXNlIGZvciBpdC4KClNpZ25lZC1vZmYt Ynk6IFJvc3MgTGFnZXJ3YWxsIDxyb3NzLmxhZ2Vyd2FsbEBjaXRyaXguY29tPgpTaWduZWQtb2Zm LWJ5OiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+CgotLS0K Q2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+CkNjOiBHZW9yZ2Ug RHVubGFwIDxHZW9yZ2UuRHVubGFwQGV1LmNpdHJpeC5jb20+CkNjOiBJYW4gSmFja3NvbiA8aWFu LmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNv bT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KQ2M6IFRp bSBEZWVnYW4gPHRpbUB4ZW4ub3JnPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4K CnYwLjQuLnYwLjExOiBEZWZlcmVkIGZvciB2NC44CnYwLjEyOiBzL3hzcGxpY2UvbGl2ZXBhdGNo LwoKdjM6IENsYXJpZnkgdGhlIGNvbW1lbnRzIGFib3V0IHNwaW5fZGVidWdfZW5hYmxlCiAgICBS ZW5hbWUgb25lIG9mIHRoZSBob29rcyB0byBsb3dlci1jYXNlIChaLT56KSB0byBndWFyYW50ZWUg aXQgYmVpbmcKICAgIGNhbGxlZCBsYXN0LgogICAgTGVhcm5lZCBhIGxvdCBvZiBhYm91dCAnY29u c3QnCnY0OiBEbyB0aGUgYWN0dWFsIGNvbnN0IG9mIHRoZSBob29rcy4KICAgIFJlbW92ZSB0aGUg cmVxdWlyZW1lbnQgZm9yIHRoZSB0ZXN0cy1jYXNlIGhvb2tzIHRvIGJlIHNvcnRlZAogICAgKHRo ZXkgbmV2ZXIgd2VyZSB0byBzdGFydCB3aXRoKS4KICAgIEZpeCB1cCB0aGUgY29tbWVudCBhYm91 dCBzcGluX2RlYnVnX2VuYWJsZSBzbyBtb3JlLgp2NTogQWRkZWQgUmV2aWV3ZWQtYnkgZnJvbSBB bmRyZXcuCiAgICBSZW1vdmVkIHNvbWUgb2YgdGhlIGhvb2tzIHRlc3QtY2FzZXMgYXMgdGhlIC5i c3MgaXMgb25seSBjbGVhcmVkIGR1cmluZyBsb2FkaW5nLgogICAgRHJvcHBlZCBSZXZpZXdlZC1i eSBmcm9tIEFuZHJldyBhcyB0aGUgdGVzdC1jYXNlIGNoYW5nZWQuCi0tLQogZG9jcy9taXNjL2xp dmVwYXRjaC5tYXJrZG93biAgICAgICAgfCAyMyArKysrKysrKysrKysrKysrKwogeGVuL2FyY2gv eDg2L3Rlc3QveGVuX2hlbGxvX3dvcmxkLmMgfCAzMCArKysrKysrKysrKysrKysrKysrKysrCiB4 ZW4vY29tbW9uL2xpdmVwYXRjaC5jICAgICAgICAgICAgICB8IDUwICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0KIHhlbi9pbmNsdWRlL3hlbi9saXZlcGF0Y2hfcGF5bG9hZC5o IHwgNDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5n ZWQsIDE1MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg eGVuL2luY2x1ZGUveGVuL2xpdmVwYXRjaF9wYXlsb2FkLmgKCmRpZmYgLS1naXQgYS9kb2NzL21p c2MvbGl2ZXBhdGNoLm1hcmtkb3duIGIvZG9jcy9taXNjL2xpdmVwYXRjaC5tYXJrZG93bgppbmRl eCBlMmVhMzUxLi41M2I1MzcxIDEwMDY0NAotLS0gYS9kb2NzL21pc2MvbGl2ZXBhdGNoLm1hcmtk b3duCisrKyBiL2RvY3MvbWlzYy9saXZlcGF0Y2gubWFya2Rvd24KQEAgLTM0Myw2ICszNDMsMTMg QEAgV2hlbiByZXZlcnRpbmcgYSBwYXRjaCwgdGhlIGh5cGVydmlzb3IgaXRlcmF0ZXMgb3ZlciBl YWNoIGBsaXZlcGF0Y2hfZnVuY2AKIGFuZCB0aGUgY29yZSBjb2RlIGNvcGllcyB0aGUgZGF0YSBm cm9tIHRoZSB1bmRvIGJ1ZmZlciAocHJpdmF0ZSBpbnRlcm5hbCBjb3B5KQogdG8gYG9sZF9hZGRy YC4KIAorSXQgb3B0aW9uYWxseSBtYXkgY29udGFpbiB0aGUgYWRkcmVzcyBvZiBmdW5jdGlvbnMg dG8gYmUgY2FsbGVkIHJpZ2h0IGJlZm9yZQorYmVpbmcgYXBwbGllZCBhbmQgYWZ0ZXIgYmVpbmcg cmV2ZXJ0ZWQ6CisKKyAqIGAubGl2ZXBhdGNoLmhvb2tzLmxvYWRgIC0gYW4gYXJyYXkgb2YgZnVu Y3Rpb24gcG9pbnRlcnMuCisgKiBgLmxpdmVwYXRjaC5ob29rcy51bmxvYWRgIC0gYW4gYXJyYXkg b2YgZnVuY3Rpb24gcG9pbnRlcnMuCisKKwogIyMjIEV4YW1wbGUgb2YgLmxpdmVwYXRjaC5mdW5j cwogCiBBIHNpbXBsZSBleGFtcGxlIG9mIHdoYXQgYSBwYXlsb2FkIGZpbGUgY2FuIGJlOgpAQCAt MzgwLDYgKzM4NywyMiBAQCBzdHJ1Y3QgbGl2ZXBhdGNoX2Z1bmMgbGl2ZXBhdGNoX2hlbGxvX3dv cmxkID0gewogCiBDb2RlIG11c3QgYmUgY29tcGlsZWQgd2l0aCAtZlBJQy4KIAorIyMjIC5saXZl cGF0Y2guaG9va3MubG9hZCBhbmQgLmxpdmVwYXRjaC5ob29rcy51bmxvYWQKKworVGhpcyBzZWN0 aW9uIGNvbnRhaW5zIGFuIGFycmF5IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGJlIGV4ZWN1dGVk CitiZWZvcmUgcGF5bG9hZCBpcyBiZWluZyBhcHBsaWVkICgubGl2ZXBhdGNoLmZ1bmNzKSBvciBh ZnRlciByZXZlcnRpbmcKK3RoZSBwYXlsb2FkLiBUaGlzIGlzIHVzZWZ1bCB0byBwcmVwYXJlIGRh dGEgc3RydWN0dXJlcyB0aGF0IG5lZWQgdG8KK2JlIG1vZGlmaWVkIHBhdGNoaW5nLgorCitFYWNo IGVudHJ5IGluIHRoaXMgYXJyYXkgaXMgZWlnaHQgYnl0ZXMuCisKK1RoZSB0eXBlIGRlZmluaXRp b24gb2YgdGhlIGZ1bmN0aW9uIGFyZSBhcyBmb2xsb3c6CisKKzxwcmU+Cit0eXBlZGVmIHZvaWQg KCpsaXZlcGF0Y2hfbG9hZGNhbGxfdCkodm9pZCk7ICAKK3R5cGVkZWYgdm9pZCAoKmxpdmVwYXRj aF91bmxvYWRjYWxsX3QpKHZvaWQpOyAgIAorPC9wcmU+CisKICMjIyAubGl2ZXBhdGNoLmRlcGVu ZHMgYW5kIC5ub3RlLmdudS5idWlsZC1pZAogCiBUbyBzdXBwb3J0IGRlcGVuZGVuY2llcyBjaGVj a2luZyBhbmQgc2FmZSBsb2FkaW5nICh0byBsb2FkIHRoZQpkaWZmIC0tZ2l0IGEveGVuL2FyY2gv eDg2L3Rlc3QveGVuX2hlbGxvX3dvcmxkLmMgYi94ZW4vYXJjaC94ODYvdGVzdC94ZW5faGVsbG9f d29ybGQuYwppbmRleCA0MjJiZGYxLi40NzJmZTJlIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYv dGVzdC94ZW5faGVsbG9fd29ybGQuYworKysgYi94ZW4vYXJjaC94ODYvdGVzdC94ZW5faGVsbG9f d29ybGQuYwpAQCAtNCwxNCArNCw0NCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNp bmNsdWRlIDx4ZW4vbGliLmg+CiAjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CiAjaW5jbHVkZSA8eGVu L3ZlcnNpb24uaD4KICNpbmNsdWRlIDx4ZW4vbGl2ZXBhdGNoLmg+CisjaW5jbHVkZSA8eGVuL2xp dmVwYXRjaF9wYXlsb2FkLmg+CiAKICNpbmNsdWRlIDxwdWJsaWMvc3lzY3RsLmg+CiAKIHN0YXRp YyBjaGFyIGhlbGxvX3dvcmxkX3BhdGNoX3RoaXNfZm5jW10gPSAieGVuX2V4dHJhX3ZlcnNpb24i OwogZXh0ZXJuIGNvbnN0IGNoYXIgKnhlbl9oZWxsb193b3JsZCh2b2lkKTsKKy8qCisgKiAuYnNz IGlzIG9ubHkgY2xlYXJlZCBvbmNlIC0gZHVyaW5nIHVwbG9hZC4gQXBwbHkvcmV2ZXJ0L2FwcGx5 IHdpbGwgcmVzdWx0CisgKiBpbiBjbnQgdG8gaGF2ZSBhIG5vbi16ZXJvIHZhbHVlIChzZWUgdGhl IGhvb2tzIGJlbG93KS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjbnQ7CisKK3N0YXRpYyB2 b2lkIGFwcGx5X2hvb2sodm9pZCkKK3sKKyAgICBwcmludGsoS0VSTl9ERUJVRyAiSG9vayBleGVj dXRpbmcuXG4iKTsKK30KKworc3RhdGljIHZvaWQgcmV2ZXJ0X2hvb2sodm9pZCkKK3sKKyAgICBw cmludGsoS0VSTl9ERUJVRyAiSG9vayB1bmxvYWRlZC5cbiIpOworfQorCitzdGF0aWMgdm9pZCAg aGlfZnVuYyh2b2lkKQoreworICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogSGkhIChjYWxsZWQg JXUgdGltZXMpXG4iLCBfX2Z1bmNfXywgKytjbnQpOworfTsKKworTElWRVBBVENIX0xPQURfSE9P SyhhcHBseV9ob29rKTsKK0xJVkVQQVRDSF9VTkxPQURfSE9PSyhyZXZlcnRfaG9vayk7CisKKy8q IEltYmFsYW5jZSBoZXJlLiBUd28gbG9hZCBhbmQgdGhyZWUgdW5sb2FkLiAqLworCitMSVZFUEFU Q0hfTE9BRF9IT09LKGhpX2Z1bmMpOworTElWRVBBVENIX1VOTE9BRF9IT09LKGhpX2Z1bmMpOwog CiBzdHJ1Y3QgbGl2ZXBhdGNoX2Z1bmMgX19zZWN0aW9uKCIubGl2ZXBhdGNoLmZ1bmNzIikgbGl2 ZXBhdGNoX3hlbl9oZWxsb193b3JsZCA9IHsKICAgICAudmVyc2lvbiA9IExJVkVQQVRDSF9QQVlM T0FEX1ZFUlNJT04sCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL2xpdmVwYXRjaC5jIGIveGVuL2Nv bW1vbi9saXZlcGF0Y2guYwppbmRleCBmMjE4YzI1Li5mNzUxNzFiIDEwMDY0NAotLS0gYS94ZW4v Y29tbW9uL2xpdmVwYXRjaC5jCisrKyBiL3hlbi9jb21tb24vbGl2ZXBhdGNoLmMKQEAgLTIzLDYg KzIzLDcgQEAKICNpbmNsdWRlIDx4ZW4vd2FpdC5oPgogI2luY2x1ZGUgPHhlbi9saXZlcGF0Y2hf ZWxmLmg+CiAjaW5jbHVkZSA8eGVuL2xpdmVwYXRjaC5oPgorI2luY2x1ZGUgPHhlbi9saXZlcGF0 Y2hfcGF5bG9hZC5oPgogCiAjaW5jbHVkZSA8YXNtL2V2ZW50Lmg+CiAKQEAgLTcwLDcgKzcxLDEx IEBAIHN0cnVjdCBwYXlsb2FkIHsKICAgICB1bnNpZ25lZCBpbnQgbnN5bXM7ICAgICAgICAgICAg ICAgICAgLyogTnIgb2YgZW50cmllcyBpbiAuc3RydGFiIGFuZCBzeW1ib2xzLiAqLwogICAgIHN0 cnVjdCBsaXZlcGF0Y2hfYnVpbGRfaWQgaWQ7ICAgICAgICAvKiBFTEZOT1RFX0RFU0MoLm5vdGUu Z251LmJ1aWxkLWlkKSBvZiB0aGUgcGF5bG9hZC4gKi8KICAgICBzdHJ1Y3QgbGl2ZXBhdGNoX2J1 aWxkX2lkIGRlcDsgICAgICAgLyogRUxGTk9URV9ERVNDKC5saXZlcGF0Y2guZGVwZW5kcykuICov Ci0gICAgY2hhciBuYW1lW1hFTl9MSVZFUEFUQ0hfTkFNRV9TSVpFXTsgLyogTmFtZSBvZiBpdC4g Ki8KKyAgICBsaXZlcGF0Y2hfbG9hZGNhbGxfdCAqY29uc3QgKmxvYWRfZnVuY3M7ICAgLyogVGhl IGFycmF5IG9mIGZ1bmNzIHRvIGNhbGwgYWZ0ZXIgKi8KKyAgICBsaXZlcGF0Y2hfdW5sb2FkY2Fs bF90ICpjb25zdCAqdW5sb2FkX2Z1bmNzOy8qIGxvYWQgYW5kIHVubG9hZCBvZiB0aGUgcGF5bG9h ZC4gKi8KKyAgICB1bnNpZ25lZCBpbnQgbl9sb2FkX2Z1bmNzOyAgICAgICAgICAgLyogTnIgb2Yg dGhlIGZ1bmNzIHRvIGxvYWQgYW5kIGV4ZWN1dGUuICovCisgICAgdW5zaWduZWQgaW50IG5fdW5s b2FkX2Z1bmNzOyAgICAgICAgIC8qIE5yIG9mIGZ1bmNzIHRvIGNhbGwgZHVydW5nIHVubG9hZC4g Ki8KKyAgICBjaGFyIG5hbWVbWEVOX0xJVkVQQVRDSF9OQU1FX1NJWkVdOyAgLyogTmFtZSBvZiBp dC4gKi8KIH07CiAKIC8qIERlZmluZXMgYW4gb3V0c3RhbmRpbmcgcGF0Y2hpbmcgYWN0aW9uLiAq LwpAQCAtNTI3LDYgKzUzMiwyNSBAQCBzdGF0aWMgaW50IHByZXBhcmVfcGF5bG9hZChzdHJ1Y3Qg cGF5bG9hZCAqcGF5bG9hZCwKICAgICAgICAgICAgIHJldHVybiByYzsKICAgICB9CiAKKyAgICBz ZWMgPSBsaXZlcGF0Y2hfZWxmX3NlY19ieV9uYW1lKGVsZiwgIi5saXZlcGF0Y2guaG9va3MubG9h ZCIpOworICAgIGlmICggc2VjICkKKyAgICB7CisgICAgICAgIGlmICggc2VjLT5zZWMtPnNoX3Np emUgJSBzaXplb2YoKnBheWxvYWQtPmxvYWRfZnVuY3MpICkKKyAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOworCisgICAgICAgIHBheWxvYWQtPmxvYWRfZnVuY3MgPSBzZWMtPmxvYWRfYWRkcjsK KyAgICAgICAgcGF5bG9hZC0+bl9sb2FkX2Z1bmNzID0gc2VjLT5zZWMtPnNoX3NpemUgLyBzaXpl b2YoKnBheWxvYWQtPmxvYWRfZnVuY3MpOworICAgIH0KKworICAgIHNlYyA9IGxpdmVwYXRjaF9l bGZfc2VjX2J5X25hbWUoZWxmLCAiLmxpdmVwYXRjaC5ob29rcy51bmxvYWQiKTsKKyAgICBpZiAo IHNlYyApCisgICAgeworICAgICAgICBpZiAoIHNlYy0+c2VjLT5zaF9zaXplICUgc2l6ZW9mKCpw YXlsb2FkLT51bmxvYWRfZnVuY3MpICkKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCisg ICAgICAgIHBheWxvYWQtPnVubG9hZF9mdW5jcyA9IHNlYy0+bG9hZF9hZGRyOworICAgICAgICBw YXlsb2FkLT5uX3VubG9hZF9mdW5jcyA9IHNlYy0+c2VjLT5zaF9zaXplIC8gc2l6ZW9mKCpwYXls b2FkLT51bmxvYWRfZnVuY3MpOworICAgIH0KICAgICBzZWMgPSBsaXZlcGF0Y2hfZWxmX3NlY19i eV9uYW1lKGVsZiwgRUxGX0JVSUxEX0lEX05PVEUpOwogICAgIGlmICggc2VjICkKICAgICB7CkBA IC0xMDE3LDYgKzEwNDEsMTggQEAgc3RhdGljIGludCBhcHBseV9wYXlsb2FkKHN0cnVjdCBwYXls b2FkICpkYXRhKQogICAgICAgICByZXR1cm4gcmM7CiAgICAgfQogCisgICAgLyoKKyAgICAgKiBT aW5jZSB3ZSBhcmUgcnVubmluZyB3aXRoIElSUXMgZGlzYWJsZWQgYW5kIHRoZSBob29rcyBtYXkg Y2FsbCBjb21tb24KKyAgICAgKiBjb2RlIC0gd2hpY2ggZXhwZWN0cyBjZXJ0YWluIHNwaW5sb2Nr cyB0byBydW4gd2l0aCBJUlFzIGVuYWJsZWQgLSB3ZQorICAgICAqIHRlbXBvcmFyaWx5IGRpc2Fi bGUgdGhlIHNwaW4gbG9ja3MgSVJRIHN0YXRlIGNoZWNrcy4KKyAgICAgKi8KKyAgICBzcGluX2Rl YnVnX2Rpc2FibGUoKTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IGRhdGEtPm5fbG9hZF9mdW5jczsg aSsrICkKKyAgICAgICAgZGF0YS0+bG9hZF9mdW5jc1tpXSgpOworICAgIHNwaW5fZGVidWdfZW5h YmxlKCk7CisKKyAgICBBU1NFUlQoIWxvY2FsX2lycV9pc19lbmFibGVkKCkpOworCiAgICAgZm9y ICggaSA9IDA7IGkgPCBkYXRhLT5uZnVuY3M7IGkrKyApCiAgICAgICAgIGFyY2hfbGl2ZXBhdGNo X2FwcGx5X2ptcCgmZGF0YS0+ZnVuY3NbaV0pOwogCkBAIC0xMDQ5LDYgKzEwODUsMTggQEAgc3Rh dGljIGludCByZXZlcnRfcGF5bG9hZChzdHJ1Y3QgcGF5bG9hZCAqZGF0YSkKICAgICBmb3IgKCBp ID0gMDsgaSA8IGRhdGEtPm5mdW5jczsgaSsrICkKICAgICAgICAgYXJjaF9saXZlcGF0Y2hfcmV2 ZXJ0X2ptcCgmZGF0YS0+ZnVuY3NbaV0pOwogCisgICAgLyoKKyAgICAgKiBTaW5jZSB3ZSBhcmUg cnVubmluZyB3aXRoIElSUXMgZGlzYWJsZWQgYW5kIHRoZSBob29rcyBtYXkgY2FsbCBjb21tb24K KyAgICAgKiBjb2RlIC0gd2hpY2ggZXhwZWN0cyBjZXJ0YWluIHNwaW5sb2NrcyB0byBydW4gd2l0 aCBJUlFzIGVuYWJsZWQgLSB3ZQorICAgICAqIHRlbXBvcmFyaWx5IGRpc2FibGUgdGhlIHNwaW4g bG9ja3MgSVJRIHN0YXRlIGNoZWNrcy4KKyAgICAgKi8KKyAgICBzcGluX2RlYnVnX2Rpc2FibGUo KTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IGRhdGEtPm5fdW5sb2FkX2Z1bmNzOyBpKysgKQorICAg ICAgICBkYXRhLT51bmxvYWRfZnVuY3NbaV0oKTsKKyAgICBzcGluX2RlYnVnX2VuYWJsZSgpOwor CisgICAgQVNTRVJUKCFsb2NhbF9pcnFfaXNfZW5hYmxlZCgpKTsKKwogICAgIGFyY2hfbGl2ZXBh dGNoX3Jldml2ZSgpOwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9saXZl cGF0Y2hfcGF5bG9hZC5oIGIveGVuL2luY2x1ZGUveGVuL2xpdmVwYXRjaF9wYXlsb2FkLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzOGNjMgotLS0gL2Rldi9udWxsCisr KyBiL3hlbi9pbmNsdWRlL3hlbi9saXZlcGF0Y2hfcGF5bG9hZC5oCkBAIC0wLDAgKzEsNDkgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2l0cml4IFN5c3RlbXMgUiZEIEx0ZC4KKyAqLwor CisjaWZuZGVmIF9fWEVOX0xJVkVQQVRDSF9QQVlMT0FEX0hfXworI2RlZmluZSBfX1hFTl9MSVZF UEFUQ0hfUEFZTE9BRF9IX18KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJl IHRvIGJlIHVzZWQgaW4gcGF0Y2hlcy4gVGhleSBhcmUgdGFrZW4KKyAqIGZyb20ga3BhdGNoLgor ICovCit0eXBlZGVmIHZvaWQgbGl2ZXBhdGNoX2xvYWRjYWxsX3Qodm9pZCk7Cit0eXBlZGVmIHZv aWQgbGl2ZXBhdGNoX3VubG9hZGNhbGxfdCh2b2lkKTsKKworLyoKKyAqIExJVkVQQVRDSF9MT0FE X0hPT0sgbWFjcm8KKyAqCisgKiBEZWNsYXJlcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgYWxs b2NhdGVkIGluIGEgbmV3CisgKiAubGl2ZXBhdGNoLmhvb2subG9hZCBzZWN0aW9uLiAgVGhpcyBs aXZlcGF0Y2hfbG9hZF9kYXRhIHN5bWJvbCBpcyBsYXRlcgorICogc3RyaXBwZWQgYnkgY3JlYXRl LWRpZmYtb2JqZWN0IHNvIHRoYXQgaXQgY2FuIGJlIGRlY2xhcmVkIGluIG11bHRpcGxlCisgKiBv YmplY3RzIHRoYXQgYXJlIGxhdGVyIGxpbmtlZCB0b2dldGhlciwgYXZvaWRpbmcgZ2xvYmFsIHN5 bWJvbAorICogY29sbGlzaW9uLiAgU2luY2UgbXVsdGlwbGUgaG9va3MgY2FuIGJlIHJlZ2lzdGVy ZWQsIHRoZQorICogLmxpdmVwYXRjaC5ob29rLmxvYWQgc2VjdGlvbiBpcyBhIHRhYmxlIG9mIGZ1 bmN0aW9ucyB0aGF0IHdpbGwgYmUKKyAqIGV4ZWN1dGVkIGluIHNlcmllcyBieSB0aGUgbGl2ZXBh dGNoIGluZnJhc3RydWN0dXJlIGF0IHBhdGNoIGxvYWQgdGltZS4KKyAqLworI2RlZmluZSBMSVZF UEFUQ0hfTE9BRF9IT09LKF9mbikgXAorICAgIGxpdmVwYXRjaF9sb2FkY2FsbF90ICpfX2F0dHJp YnV0ZV9fKCh3ZWFrKSkgXAorICAgICAgICBjb25zdCBsaXZlcGF0Y2hfbG9hZF9kYXRhXyMjX2Zu IF9fc2VjdGlvbigiLmxpdmVwYXRjaC5ob29rcy5sb2FkIikgPSBfZm47CisKKy8qCisgKiBMSVZF UEFUQ0hfVU5MT0FEX0hPT0sgbWFjcm8KKyAqCisgKiBTYW1lIGFzIExPQUQgaG9vayB3aXRoIHMv bG9hZC91bmxvYWQvCisgKi8KKyNkZWZpbmUgTElWRVBBVENIX1VOTE9BRF9IT09LKF9mbikgXAor ICAgICBsaXZlcGF0Y2hfdW5sb2FkY2FsbF90ICpfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgXAorICAg ICAgICBjb25zdCBsaXZlcGF0Y2hfdW5sb2FkX2RhdGFfIyNfZm4gX19zZWN0aW9uKCIubGl2ZXBh dGNoLmhvb2tzLnVubG9hZCIpID0gX2ZuOworCisjZW5kaWYgLyogX19YRU5fTElWRVBBVENIX1BB WUxPQURfSF9fICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBj LWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0 CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMi40LjExCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcv eGVuLWRldmVsCg==