From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v6 3/7] libxl: support mapping static shared memory areas during domain creation Date: Tue, 31 Jul 2018 11:23:05 -0700 Message-ID: <1533061389-6504-3-git-send-email-sstabellini@kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Stefano Stabellini , sstabellini@kernel.org, wei.liu2@citrix.com, blackskygg@gmail.com, ian.jackson@eu.citrix.com, julien.grall@arm.com List-Id: xen-devel@lists.xenproject.org RnJvbTogWmhvbmd6ZSBMaXUgPGJsYWNrc2t5Z2dAZ21haWwuY29tPgoKQXV0aG9yOiBaaG9uZ3pl IExpdSA8YmxhY2tza3lnZ0BnbWFpbC5jb20+CgpBZGQgbGlieGxfX3NzaG1fYWRkIHRvIG1hcCBz aGFyZWQgcGFnZXMgZnJvbSBvbmUgRG9tVSB0byBhbm90aGVyLCBUaGUgbWFwcGluZwpwcm9jZXNz IGludm9sdmVzIHRoZSBmb2xsb3dpbmcgc3RlcHM6CgogICogU2V0IGRlZmF1bHRzIGFuZCBjaGVj ayBmb3IgZnVydGhlciBlcnJvcnMgaW4gdGhlIHN0YXRpY19zaG0gY29uZmlnczoKICAgIG92ZXJs YXBwaW5nIGFyZWFzLCBpbnZhbGlkIHJhbmdlcywgZHVwbGljYXRlZCBtYXN0ZXIgZG9tYWluLAog ICAgbm90IHBhZ2UgYWxpZ25lZCwgbm8gbWFzdGVyIGRvbWFpbiBldGMuCiAgKiBVc2UgeGNfZG9t YWluX2FkZF90b19waHlzbWFwX2JhdGNoIHRvIG1hcCB0aGUgc2hhcmVkIHBhZ2VzIHRvIHNsYXZl cwogICogV2hlbiBzb21lIG9mIHRoZSBwYWdlcyBjYW4ndCBiZSBzdWNjZXNzZnVsbHkgbWFwcGVk LCByb2xsIGJhY2sgYW55CiAgICBzdWNjZXNzZnVsbHkgbWFwcGVkIHBhZ2VzIHNvIHRoYXQgdGhl IHN5c3RlbSBzdGF5cyBpbiBhIGNvbnNpc3RlbnQgc3RhdGUuCiAgKiBXcml0ZSBpbmZvcm1hdGlv biBhYm91dCBzdGF0aWMgc2hhcmVkIG1lbW9yeSBhcmVhcyBpbnRvIHRoZSBhcHByb3ByaWF0ZQog ICAgeGVuc3RvcmUgcGF0aHMgYW5kIHNldCB0aGUgcmVmY291bnQgb2YgdGhlIHNoYXJlZCByZWdp b24gYWNjb3JkaW5nbHkuCgpUZW1wb3JhcmlseSBtYXJrIHRoaXMgYXMgdW5zdXBwb3J0ZWQgb24g eDg2IGJlY2F1c2UgY2FsbGluZyBwMm1fYWRkX2ZvcmVpZ24gb24KdHdvIGRvbVUncyBpcyBjdXJy ZW50bHkgbm90IGFsbG93ZCBvbiB4ODYgKHNlZSB0aGUgY29tbWVudHMgaW4KeDg2L21tL3AybS5j OnAybV9hZGRfZm9yZWlnbiBmb3IgbW9yZSBkZXRhaWxzKS4KClRoaXMgaXMgZm9yIHRoZSBwcm9w b3NhbCAiQWxsb3cgc2V0dGluZyB1cCBzaGFyZWQgbWVtb3J5IGFyZWFzIGJldHdlZW4gVk1zCmZy b20geGwgY29uZmlnIGZpbGUiIChzZWUgWzFdKS4KClsxXSBodHRwczovL2xpc3RzLnhlbi5vcmcv YXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAxNy0wOC9tc2cwMzI0Mi5odG1sCgpTaWduZWQtb2Zm LWJ5OiBaaG9uZ3plIExpdSA8YmxhY2tza3lnZ0BnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IFN0 ZWZhbm8gU3RhYmVsbGluaSA8c3RlZmFub3NAeGlsaW54LmNvbT4KCkNjOiBXZWkgTGl1IDx3ZWku bGl1MkBjaXRyaXguY29tPgpDYzogSWFuIEphY2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5j b20+CkNjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+CkNjOiBK dWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgpDYzogeGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKLS0tCkNoYW5nZXMgaW4gdjU6Ci0gZml4IHR5cG9zCi0gYWRkIGNvbW1lbnRzCi0gYWRk IHZhbHVlIGNoZWNrcyAoaW5jbHVkaW5nIGFsaWdubWVudCBjaGVja3MpIGluIHNzaG1fc2V0ZGVm YXVsdHMKLS0tCiB0b29scy9saWJ4bC9NYWtlZmlsZSAgICAgICAgIHwgICAzICstCiB0b29scy9s aWJ4bC9saWJ4bF9hcmNoLmggICAgIHwgICA2ICsKIHRvb2xzL2xpYnhsL2xpYnhsX2FybS5jICAg ICAgfCAgMTUgKysKIHRvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jICAgfCAgMjcgKysrCiB0b29s cy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIHwgIDE0ICsrCiB0b29scy9saWJ4bC9saWJ4bF9zc2ht LmMgICAgIHwgNDA1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHRvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jICAgICAgfCAgMTkgKysKIDcgZmlsZXMgY2hhbmdlZCwg NDg4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29s cy9saWJ4bC9saWJ4bF9zc2htLmMKCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9NYWtlZmlsZSBi L3Rvb2xzL2xpYnhsL01ha2VmaWxlCmluZGV4IDZkYTM0MmUuLjUzYWYxODYgMTAwNjQ0Ci0tLSBh L3Rvb2xzL2xpYnhsL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYnhsL01ha2VmaWxlCkBAIC0xNDAs NyArMTQwLDggQEAgTElCWExfT0JKUyA9IGZsZXhhcnJheS5vIGxpYnhsLm8gbGlieGxfY3JlYXRl Lm8gbGlieGxfZG0ubyBsaWJ4bF9wY2kubyBcCiAJCQlsaWJ4bF92dHBtLm8gbGlieGxfbmljLm8g bGlieGxfZGlzay5vIGxpYnhsX2NvbnNvbGUubyBcCiAJCQlsaWJ4bF9jcHVwb29sLm8gbGlieGxf bWVtLm8gbGlieGxfc2NoZWQubyBsaWJ4bF90bWVtLm8gXAogCQkJbGlieGxfOXBmcy5vIGxpYnhs X2RvbWFpbi5vIGxpYnhsX3ZkaXNwbC5vIFwKLQkJCWxpYnhsX3B2Y2FsbHMubyBsaWJ4bF92c25k Lm8gbGlieGxfdmtiLm8gJChMSUJYTF9PQkpTLXkpCisJCQlsaWJ4bF9wdmNhbGxzLm8gbGlieGxf dnNuZC5vIGxpYnhsX3ZrYi5vIGxpYnhsX3NzaG0ubyBcCisJCQkkKExJQlhMX09CSlMteSkKIExJ QlhMX09CSlMgKz0gbGlieGxfZ2VuaWQubwogTElCWExfT0JKUyArPSBfbGlieGxfdHlwZXMubyBs aWJ4bF9mbGFzay5vIF9saWJ4bF90eXBlc19pbnRlcm5hbC5vCiAKZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhsL2xpYnhsX2FyY2guaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaAppbmRleCA3NGE1 YWYzLi42YTA3Y2NmIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9hcmNoLmgKKysrIGIv dG9vbHMvbGlieGwvbGlieGxfYXJjaC5oCkBAIC03Myw2ICs3MywxMiBAQCBpbnQgbGlieGxfX2Fy Y2hfZXh0cmFfbWVtb3J5KGxpYnhsX19nYyAqZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICppbmZvLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50NjRfdCAqb3V0KTsKIAorX2hpZGRlbgorYm9vbCBsaWJ4bF9fYXJj aF9kb21haW5fc3VwcG9ydF9zc2htKGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2lu Zm8pOworCitfaGlkZGVuCitpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lf c2V0ZGVmYXVsdChsaWJ4bF9zdGF0aWNfc2htICpzc2htKTsKKwogI2lmIGRlZmluZWQoX19pMzg2 X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKIAogI2RlZmluZSBMQVBJQ19CQVNFX0FERFJFU1Mg IDB4ZmVlMDAwMDAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jIGIvdG9vbHMv bGlieGwvbGlieGxfYXJtLmMKaW5kZXggOGFmOWY2Zi4uNWY2MmU3OCAxMDA2NDQKLS0tIGEvdG9v bHMvbGlieGwvbGlieGxfYXJtLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfYXJtLmMKQEAgLTEx NDEsNiArMTE0MSwyMSBAQCB2b2lkIGxpYnhsX19hcmNoX2RvbWFpbl9idWlsZF9pbmZvX2FjcGlf c2V0ZGVmYXVsdCgKICAgICBsaWJ4bF9kZWZib29sX3NldGRlZmF1bHQoJmJfaW5mby0+YWNwaSwg ZmFsc2UpOwogfQogCitib29sIGxpYnhsX19hcmNoX2RvbWFpbl9zdXBwb3J0X3NzaG0oY29uc3Qg bGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5mbykKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30K KworaW50IGxpYnhsX19hcmNoX2RvbWFpbl9zc2htX2NhY2hlcG9saWN5X3NldGRlZmF1bHQobGli eGxfc3RhdGljX3NobSAqc3NobSkKK3sKKyAgICBpZiAoc3NobS0+Y2FjaGVfcG9saWN5ID09IExJ QlhMX1NTSE1fQ0FDSEVQT0xJQ1lfVU5LTk9XTikKKyAgICAgICAgc3NobS0+Y2FjaGVfcG9saWN5 ID0gTElCWExfU1NITV9DQUNIRVBPTElDWV9BUk1fTk9STUFMOworICAgIGlmIChzc2htLT5jYWNo ZV9wb2xpY3kgPj0gTElCWExfU1NITV9DQUNIRVBPTElDWV9YODZfTk9STUFMKQorICAgICAgICBy ZXR1cm4gRVJST1JfSU5WQUw7CisKKyAgICByZXR1cm4gMDsKK30KKwogLyoKICAqIExvY2FsIHZh cmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0 ZS5jIGIvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKaW5kZXggMWNjYjNlMy4uMmFjYzg2YSAx MDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKKysrIGIvdG9vbHMvbGlieGwv bGlieGxfY3JlYXRlLmMKQEAgLTUzMiw2ICs1MzIsMTQgQEAgaW50IGxpYnhsX19kb21haW5fYnVp bGQobGlieGxfX2djICpnYywKICAgICAgICAgcmV0ID0gRVJST1JfSU5WQUw7CiAgICAgICAgIGdv dG8gb3V0OwogICAgIH0KKworICAgIC8qIFRoZSBwMm0gaGFzIGJlZW4gc2V0dXAsIHdlIGNvdWxk IG1hcCB0aGUgc3RhdGljIHNoYXJlZCBtZW1vcnkgbm93LiAqLworICAgIHJldCA9IGxpYnhsX19z c2htX2FkZChnYywgZG9taWQsIGRfY29uZmlnLT5zc2htcywgZF9jb25maWctPm51bV9zc2htcyk7 CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIExPRyhFUlJPUiwgImZhaWxlZCB0byBtYXAg c3RhdGljIHNoYXJlZCBtZW1vcnkiKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCiAgICAg cmV0ID0gbGlieGxfX2J1aWxkX3Bvc3QoZ2MsIGRvbWlkLCBpbmZvLCBzdGF0ZSwgdm1lbnRzLCBs b2NhbGVudHMpOwogb3V0OgogICAgIHJldHVybiByZXQ7CkBAIC05NTksNiArOTY3LDI1IEBAIHN0 YXRpYyB2b2lkIGluaXRpYXRlX2RvbWFpbl9jcmVhdGUobGlieGxfX2VnYyAqZWdjLAogICAgICAg ICBnb3RvIGVycm9yX291dDsKICAgICB9CiAKKyAgICBpZiAoZF9jb25maWctPm51bV9zc2htcyAh PSAwICYmCisgICAgICAgICFsaWJ4bF9fYXJjaF9kb21haW5fc3VwcG9ydF9zc2htKCZkX2NvbmZp Zy0+Yl9pbmZvKSkgeworICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgInN0YXRpY19zaG0gaXMg bm90IHN1cHBvcnRlZCBieSB0aGlzIGRvbWFpbiB0eXBlLiIpOworICAgICAgICByZXQgPSBFUlJP Ul9JTlZBTDsKKyAgICAgICAgZ290byBlcnJvcl9vdXQ7CisgICAgfQorCisgICAgZm9yIChpID0g MDsgaSA8IGRfY29uZmlnLT5udW1fc3NobXM7ICsraSkgeworICAgICAgICByZXQgPSBsaWJ4bF9f c3NobV9zZXRkZWZhdWx0KGdjLCBkb21pZCwgJmRfY29uZmlnLT5zc2htc1tpXSk7CisgICAgICAg IGlmIChyZXQpIHsKKyAgICAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiVW5hYmxlIHRvIHNl dCBkZWZhdWx0cyBmb3Igc3RhdGljIHNobSIpOworICAgICAgICAgICAgZ290byBlcnJvcl9vdXQ7 CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSBsaWJ4bF9fc3NobV9jaGVja19vdmVybGFw KGdjLCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfY29uZmln LT5zc2htcywgZF9jb25maWctPm51bV9zc2htcyk7CisgICAgaWYgKHJldCkgZ290byBlcnJvcl9v dXQ7CisKICAgICByZXQgPSBsaWJ4bF9fZG9tYWluX21ha2UoZ2MsIGRfY29uZmlnLCAmZGNzLT5i dWlsZF9zdGF0ZSwgJmRvbWlkKTsKICAgICBpZiAocmV0KSB7CiAgICAgICAgIExPR0QoRVJST1Is IGRvbWlkLCAiY2Fubm90IG1ha2UgZG9tYWluOiAlZCIsIHJldCk7CmRpZmYgLS1naXQgYS90b29s cy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIGIvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaApp bmRleCA4NDNjNjI1Li5iYjZiODQwIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9pbnRl cm5hbC5oCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKQEAgLTQ0MjMsNiArNDQy MywyMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbGlieGxfX3N0cmluZ19pc19kZWZhdWx0KGNoYXIg KipzKQogI2VuZGlmCiAKIC8qCisgKiBTZXQgdXAgc3RhdGljIHNoYXJlZCByYW0gcGFnZXMgZm9y IEhWTSBkb21haW5zIHRvIGNvbW11bmljYXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQg b25seSBiZSBjYWxsZWQgYWZ0ZXIgdGhlIG1lbW9yeSBtYXAgaXMgY29uc3RydWN0ZWQKKyAqIGFu ZCBiZWZvcmUgYW55IGZ1cnRoZXIgbWVtb3J5IGFjY2Vzcy4KKyAqLworX2hpZGRlbiBpbnQgbGli eGxfX3NzaG1fYWRkKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0sIGludCBsZW4pOworCitfaGlk ZGVuIGludCBsaWJ4bF9fc3NobV9jaGVja19vdmVybGFwKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90 IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0 aWNfc2htICpzc2htcywgaW50IGxlbik7CitfaGlkZGVuIGludCBsaWJ4bF9fc3NobV9zZXRkZWZh dWx0KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htKTsKKworLyoKICAqIExvY2FsIHZh cmlhYmxlczoKICAqIG1vZGU6IEMKICAqIGMtYmFzaWMtb2Zmc2V0OiA0CmRpZmYgLS1naXQgYS90 b29scy9saWJ4bC9saWJ4bF9zc2htLmMgYi90b29scy9saWJ4bC9saWJ4bF9zc2htLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxYjgwYwotLS0gL2Rldi9udWxsCisrKyBi L3Rvb2xzL2xpYnhsL2xpYnhsX3NzaG0uYwpAQCAtMCwwICsxLDQwNSBAQAorI2luY2x1ZGUgImxp YnhsX29zZGVwcy5oIgorI2luY2x1ZGUgImxpYnhsX2ludGVybmFsLmgiCisjaW5jbHVkZSAibGli eGxfYXJjaC5oIgorCisjZGVmaW5lIFNTSE1fUEFUSChpZCkgR0NTUFJJTlRGKCIvbGlieGwvc3Rh dGljX3NobS8lcyIsIGlkKQorCisjZGVmaW5lIFNTSE1fRVJST1IoZG9taWQsIHNzaG1pZCwgZiwg Li4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTE9HRChFUlJPUiwgZG9t aWQsICJzdGF0aWNfc2htIGlkID0gJXM6ICIgZiwgc3NobWlkLCAjI19fVkFfQVJHU19fKQorCisK Ky8qIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbGlieGxfc3RhdGljX3NobSAqLworaW50IGxpYnhs X19zc2htX3NldGRlZmF1bHQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htKQoreworICAgIGludCBy YzsKKworICAgIGlmIChzc2htLT5yb2xlICE9IExJQlhMX1NTSE1fUk9MRV9TTEFWRSAmJgorICAg ICAgICBzc2htLT5yb2xlICE9IExJQlhMX1NTSE1fUk9MRV9NQVNURVIpCisgICAgICAgIHJldHVy biBFUlJPUl9JTlZBTDsKKyAgICBpZiAoc3NobS0+YmVnaW4gJiB+WENfUEFHRV9NQVNLIHx8Cisg ICAgICAgIHNzaG0tPnNpemUgJiB+WENfUEFHRV9NQVNLIHx8CisgICAgICAgIChzc2htLT5vZmZz ZXQgIT0gTElCWExfU1NITV9SQU5HRV9VTktOT1dOICYmCisgICAgICAgIHNzaG0tPm9mZnNldCAm IH5YQ19QQUdFX01BU0spKSB7CisgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAor ICAgICAgICAgICAgICAgICAgICJiZWdpbi9zaXplL29mZnNldCBpcyBub3QgYSBtdWx0aXBsZSBv ZiA0SyIpOworICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisgICAgfQorCisgICAgLyogcm9s ZS1zcGVjaWZpYyBjaGVja3MgKi8KKyAgICBpZiAoc3NobS0+cm9sZSA9PSBMSUJYTF9TU0hNX1JP TEVfU0xBVkUpIHsKKyAgICAgICAgaWYgKHNzaG0tPm9mZnNldCA9PSBMSUJYTF9TU0hNX1JBTkdF X1VOS05PV04pCisgICAgICAgICAgICBzc2htLT5vZmZzZXQgPSAwOworICAgICAgICBpZiAoc3No bS0+Y2FjaGVfcG9saWN5ICE9IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfVU5LTk9XTikgeworICAg ICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCisgICAgICAgICAgICAgICAgICAg ICAgICJjYWNoZV9wb2xpY3kgaXMgb25seSBhcHBsaWNhYmxlIHRvIG1hc3RlciBkb21haW5zIik7 CisgICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7Cisg ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3NobS0+b2Zmc2V0ICE9IExJQlhM X1NTSE1fUkFOR0VfVU5LTk9XTikgeworICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3No bS0+aWQsCisgICAgICAgICAgICAgICAgICAgICAgICJvZmZzZXQgaXMgb25seSBhcHBsaWNhYmxl IHRvIHNsYXZlIGRvbWFpbnMiKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAg ICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2FyY2hf ZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVmYXVsdChzc2htKTsKKyAgICAgICAgaWYgKHJj KSB7CisgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlkLCBzc2htLT5pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgImNhY2hlIHBvbGljeSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0i KTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgcmMgPSAw Oworb3V0OgorICAgIHJldHVybiByYzsKK30KKworLyogQ29tcGFyYXRvciBmb3Igc29ydGluZyBz c2htIHJhbmdlcyBieSBzc2htLT5iZWdpbiAqLworc3RhdGljIGludCBzc2htX3JhbmdlX2NtcChj b25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworICAgIGxpYnhsX3N0YXRpY19zaG0gKmNv bnN0ICpzc2htYSA9IGEsICpjb25zdCAqc3NobWIgPSBiOworICAgIHJldHVybiAoKnNzaG1hKS0+ YmVnaW4gPiAoKnNzaG1iKS0+YmVnaW4gPyAxIDogLTE7Cit9CisKKy8qIENoZWNrIGlmIHRoZSBz c2htIHNsYXZlIGNvbmZpZ3MgaW4gQHNzaG0gb3ZlcmxhcCAqLworaW50IGxpYnhsX19zc2htX2No ZWNrX292ZXJsYXAobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobXMsIGludCBsZW4p Cit7CisKKyAgICBjb25zdCBsaWJ4bF9zdGF0aWNfc2htICoqc2xhdmVfc3NobXMgPSBOVUxMOwor ICAgIGludCBudW1fc2xhdmVzOworICAgIGludCBpOworCisgICAgaWYgKCFsZW4pIHJldHVybiAw OworCisgICAgc2xhdmVfc3NobXMgPSBsaWJ4bF9fY2FsbG9jKGdjLCBsZW4sIHNpemVvZihzbGF2 ZV9zc2htc1swXSkpOworICAgIG51bV9zbGF2ZXMgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBs ZW47ICsraSkgeworICAgICAgICBpZiAoc3NobXNbaV0ucm9sZSA9PSBMSUJYTF9TU0hNX1JPTEVf U0xBVkUpCisgICAgICAgICAgICBzbGF2ZV9zc2htc1tudW1fc2xhdmVzKytdID0gc3NobXMgKyBp OworICAgIH0KKyAgICBxc29ydChzbGF2ZV9zc2htcywgbnVtX3NsYXZlcywgc2l6ZW9mKHNsYXZl X3NzaG1zWzBdKSwgc3NobV9yYW5nZV9jbXApOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9z bGF2ZXMgLSAxOyArK2kpIHsKKyAgICAgICAgaWYgKHNsYXZlX3NzaG1zW2krMV0tPmJlZ2luIDwK KyAgICAgICAgICAgIHNsYXZlX3NzaG1zW2ldLT5iZWdpbiArIHNsYXZlX3NzaG1zW2ldLT5zaXpl KSB7CisgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlkLCBzbGF2ZV9zc2htc1tpKzFdLT5pZCwg InNsYXZlIHJhbmdlcyBvdmVybGFwLiIpOworICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFM OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qICAgbGlieGxfX3Nz aG1fZG9fbWFwIC0tIG1hcCBwYWdlcyBpbnRvIHNsYXZlJ3MgcGh5c21hcAorICoKKyAqICAgVGhp cyBmdW5jdGlvbnMgbWFwcworICogICAgIG1hc3RlciBnZm46IFtAbXNzaG0tPmJlZ2luICsgQHNz aG0tPm9mZnNldCwKKyAqICAgICAgICAgICAgICAgICAgQG1zc2htLT5iZWdpbiArIEBtc3NobS0+ c2l6ZSArIEBzc2htLT5vZmZzZXQpCisgKiAgIGludG8KKyAqICAgICBzbGF2ZSBnZm46IFtAc3No bS0+YmVnaW4sIEBzc2htLT5iZWdpbiArIEBzc2htLT5zaXplKQorICoKKyAqICAgVGhlIGdmbnMg b2YgdGhlIHBhZ2VzIHRoYXQgYXJlIHN1Y2Nlc3NmdWxseSBtYXBwZWQgd2lsbCBiZSBzdG9yZWQK KyAqICAgaW4gQG1hcHBlZCwgYW5kIHRoZSBudW1iZXIgb2YgdGhlIGdmbnMgd2lsbCBiZSBzdG9y ZWQgaW4gQG5tYXBwZWQuCisgKgorICogICBUaGUgY2FsbGVyIGhhcyB0byBndWFyYW50ZWUgdGhh dCBhbGwgdGhlIHZhbHVlcyBhcmUgcGFnZS1hbGlnbmVkLgorICovCitzdGF0aWMgaW50IGxpYnhs X19zc2htX2RvX21hcChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBtaWQsIHVpbnQzMl90IHNpZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0sIGxp YnhsX3N0YXRpY19zaG0gKm1zc2htLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVu X3Bmbl90ICptYXBwZWQsIHVuc2lnbmVkIGludCAqbm1hcHBlZCkKK3sKKyAgICBpbnQgcmM7Cisg ICAgaW50IGk7CisgICAgeGVuX3Bmbl90IG51bV9tcGFnZXMsIG51bV9zcGFnZXMsIG51bV9zdWNj ZXNzLCBvZmZzZXQ7CisgICAgaW50ICplcnJzOworICAgIHhlbl91bG9uZ190ICppZHhzOworICAg IHhlbl9wZm5fdCAqZ3BmbnM7CisKKyAgICBudW1fbXBhZ2VzID0gKG1zc2htLT5zaXplKSA+PiBY Q19QQUdFX1NISUZUOworICAgIG51bV9zcGFnZXMgPSAoc3NobS0+c2l6ZSkgPj4gWENfUEFHRV9T SElGVDsKKyAgICBvZmZzZXQgPSBzc2htLT5vZmZzZXQgPj4gWENfUEFHRV9TSElGVDsKKworICAg IC8qIENoZWNrIHJhbmdlLiBUZXN0IG9mZnNldCA8IG1wYWdlcyBmaXJzdCB0byBhdm9pZCBvdmVy ZmxvdyAqLworICAgIGlmICgob2Zmc2V0ID49IG51bV9tcGFnZXMpIHx8IChudW1fbXBhZ2VzIC0g b2Zmc2V0IDwgbnVtX3NwYWdlcykpIHsKKyAgICAgICAgU1NITV9FUlJPUihzaWQsIHNzaG0tPmlk LCAiZXhjZWVkcyBtYXN0ZXIncyBhZGRyZXNzIHNwYWNlLiIpOworICAgICAgICByYyA9IEVSUk9S X0lOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBmaWxsIG91dCB0aGUg Z2ZuJ3MgYW5kIGRvIHRoZSBtYXBwaW5nICovCisgICAgZXJycyA9IGxpYnhsX19jYWxsb2MoZ2Ms IG51bV9zcGFnZXMsIHNpemVvZihpbnQpKTsKKyAgICBpZHhzID0gbGlieGxfX2NhbGxvYyhnYywg bnVtX3NwYWdlcywgc2l6ZW9mKHhlbl91bG9uZ190KSk7CisgICAgZ3BmbnMgPSBsaWJ4bF9fY2Fs bG9jKGdjLCBudW1fc3BhZ2VzLCBzaXplb2YoeGVuX3Bmbl90KSk7CisgICAgZm9yIChpID0gMDsg aSA8IG51bV9zcGFnZXM7IGkrKykgeworICAgICAgICBpZHhzW2ldID0gKG1zc2htLT5iZWdpbiA+ PiBYQ19QQUdFX1NISUZUKSArIG9mZnNldCArIGk7CisgICAgICAgIGdwZm5zW2ldPSAoc3NobS0+ YmVnaW4gPj4gWENfUEFHRV9TSElGVCkgKyBpOworICAgIH0KKyAgICByYyA9IHhjX2RvbWFpbl9h ZGRfdG9fcGh5c21hcF9iYXRjaChDVFgtPnhjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaWQsIG1pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBYRU5NQVBTUEFDRV9nbWZuX3NoYXJlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG51bV9zcGFnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWR4cywgZ3BmbnMsIGVycnMpOworCisgICAgbnVtX3N1Y2Nlc3MgPSAwOwor ICAgIGZvciAoaSA9IDA7IGkgPCBudW1fc3BhZ2VzOyBpKyspIHsKKyAgICAgICAgaWYgKGVycnNb aV0pIHsKKyAgICAgICAgICAgIFNTSE1fRVJST1Ioc2lkLCBzc2htLT5pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgImNhbid0IG1hcCBhdCBhZGRyZXNzIDB4JSJQUkl4NjQiLiIsCisgICAgICAg ICAgICAgICAgICAgICAgIGdwZm5zW2ldIDw8IFhDX1BBR0VfU0hJRlQpOworICAgICAgICAgICAg cmMgPSBFUlJPUl9GQUlMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWFwcGVkW251 bV9zdWNjZXNzKytdID0gZ3BmbnNbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgKm5tYXBwZWQg PSBudW1fc3VjY2VzczsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgcmMgPSAwOworb3V0 OgorICAgIHJldHVybiByYzsKK30KKworLyogWGVuc3RvcmUgb3BzIGFyZSBwcm90ZWN0ZWQgYnkg YSB0cmFuc2FjdGlvbiAqLworc3RhdGljIGludCBsaWJ4bF9fc3NobV9pbmNyZWYobGlieGxfX2dj ICpnYywgeHNfdHJhbnNhY3Rpb25fdCB4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKnNzaG1fcGF0aCkKK3sKKyAgICBpbnQgcmMsIGNvdW50OworICAgIGNvbnN0 IGNoYXIgKmNvdW50X3BhdGgsICpjb3VudF9zdHJpbmc7CisKKyAgICBjb3VudF9wYXRoID0gR0NT UFJJTlRGKCIlcy91c2VyY250Iiwgc3NobV9wYXRoKTsKKyAgICByYyA9IGxpYnhsX194c19yZWFk X2NoZWNrZWQoZ2MsIHh0LCBjb3VudF9wYXRoLCAmY291bnRfc3RyaW5nKTsKKyAgICBpZiAocmMp IGdvdG8gb3V0OworICAgIGNvdW50ID0gYXRvaShjb3VudF9zdHJpbmcpOworCisgICAgY291bnRf c3RyaW5nID0gR0NTUFJJTlRGKCIlZCIsIGNvdW50KzEpOworICAgIHJjID0gbGlieGxfX3hzX3dy aXRlX2NoZWNrZWQoZ2MsIHh0LCBjb3VudF9wYXRoLCBjb3VudF9zdHJpbmcpOworICAgIGlmIChy YykgZ290byBvdXQ7CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgcmV0dXJuIHJjOworfQorCitz dGF0aWMgaW50IGxpYnhsX19zc2htX2FkZF9zbGF2ZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0g KnNzaG0pCit7CisgICAgaW50IHJjLCBpOworICAgIGNvbnN0IGNoYXIgKnNzaG1fcGF0aCwgKnNs YXZlX3BhdGg7CisgICAgY29uc3QgY2hhciAqZG9tX3BhdGgsICpkb21fc3NobV9wYXRoLCAqZG9t X3JvbGVfcGF0aDsKKyAgICBjb25zdCBjaGFyICp4c192YWx1ZTsKKyAgICBjaGFyICplbnRzWzld OworICAgIGxpYnhsX3N0YXRpY19zaG0gbWFzdGVyX3NzaG07CisgICAgdWludDMyX3QgbWFzdGVy X2RvbWlkOworICAgIHhlbl9wZm5fdCAqbWFwcGVkOworICAgIHVuc2lnbmVkIGludCBubWFwcGVk ID0gMDsKKyAgICB4c190cmFuc2FjdGlvbl90IHh0ID0gWEJUX05VTEw7CisgICAgYm9vbCBpc3Jl dHJ5OworCisgICAgc3NobV9wYXRoID0gU1NITV9QQVRIKHNzaG0tPmlkKTsKKyAgICBzbGF2ZV9w YXRoID0gR0NTUFJJTlRGKCIlcy9zbGF2ZXMvJSJQUkl1MzIsIHNzaG1fcGF0aCwgZG9taWQpOwor ICAgIGRvbV9wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7CisgICAgLyog dGhlIGRvbWFpbiBzaG91bGQgYmUgaW4geGVuc3RvcmUgYnkgbm93ICovCisgICAgYXNzZXJ0KGRv bV9wYXRoKTsKKyAgICBkb21fc3NobV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zdGF0aWNfc2htLyVz IiwgZG9tX3BhdGgsIHNzaG0tPmlkKTsKKyAgICBkb21fcm9sZV9wYXRoID0gR0NTUFJJTlRGKCIl cy9yb2xlIiwgZG9tX3NzaG1fcGF0aCk7CisKKyAgICAvKiBwcmVwYXJlIHRoZSBzbGF2ZSB4ZW5z dG9yZSBlbnRyaWVzICovCisgICAgZW50c1swXSA9ICJiZWdpbiI7CisgICAgZW50c1sxXSA9IEdD U1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+YmVnaW4pOworICAgIGVudHNbMl0gPSAic2l6ZSI7 CisgICAgZW50c1szXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+c2l6ZSk7CisgICAg ZW50c1s0XSA9ICJvZmZzZXQiOworICAgIGVudHNbNV0gPSBHQ1NQUklOVEYoIjB4JSJQUkl4NjQs IHNzaG0tPm9mZnNldCk7CisgICAgZW50c1s2XSA9ICJwcm90IjsKKyAgICBlbnRzWzddID0gbGli eGxfX3N0cmR1cChnYywgbGlieGxfc3NobV9wcm90X3RvX3N0cmluZyhzc2htLT5wcm90KSk7Cisg ICAgZW50c1s4XSA9IE5VTEw7CisKKyAgICBtYXBwZWQgPSBsaWJ4bF9fY2FsbG9jKGdjLCBzc2ht LT5zaXplID4+IFhDX1BBR0VfU0hJRlQsIHNpemVvZih4ZW5fcGZuX3QpKTsKKworICAgIGlzcmV0 cnkgPSBmYWxzZTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5z YWN0aW9uX3N0YXJ0KGdjLCAmeHQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAg ICAgIGlmICghbGlieGxfX3hzX3JlYWQoZ2MsIHh0LCBzc2htX3BhdGgpKSB7CisgICAgICAgICAg ICBTU0hNX0VSUk9SKGRvbWlkLCBzc2htLT5pZCwgIm5vIG1hc3RlciBmb3VuZC4iKTsKKyAgICAg ICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9 CisKKyAgICAgICAgLyogZXZlcnkgSUQgY2FuIGFwcGVhciBpbiBlYWNoIGRvbWFpbiBhdCBtb3N0 IG9uY2UgKi8KKyAgICAgICAgaWYgKGxpYnhsX194c19yZWFkKGdjLCB4dCwgZG9tX3NzaG1fcGF0 aCkpIHsKKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAorICAgICAgICAg ICAgICAgICAgICAgICAiZG9tYWluIHRyaWVkIHRvIG1hcCB0aGUgc2FtZSBJRCB0d2ljZS4iKTsK KyAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAg ICAgICB9CisKKyAgICAgICAgLyogbG9vayBhdCB0aGUgbWFzdGVyIGluZm8gYW5kIHNlZSBpZiB3 ZSBjb3VsZCBkbyB0aGUgbWFwcGluZyAqLworICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2No ZWNrZWQoZ2MsIHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJ TlRGKCIlcy9wcm90Iiwgc3NobV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZ4c192YWx1ZSk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIGxp YnhsX3NzaG1fcHJvdF9mcm9tX3N0cmluZyh4c192YWx1ZSwgJm1hc3Rlcl9zc2htLnByb3QpOwor CisgICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2JlZ2luIiwgc3NobV9wYXRo KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4c192YWx1ZSk7CisgICAg ICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIG1hc3Rlcl9zc2htLmJlZ2luID0gc3RydG91 bGwoeHNfdmFsdWUsIE5VTEwsIDE2KTsKKworICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2No ZWNrZWQoZ2MsIHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJ TlRGKCIlcy9zaXplIiwgc3NobV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZ4c192YWx1ZSk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIG1h c3Rlcl9zc2htLnNpemUgPSBzdHJ0b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOworCisgICAgICAg IHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL21hc3RlciIsIHNzaG1fcGF0aCksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHNfdmFsdWUpOworICAgICAgICBpZiAo cmMpIGdvdG8gb3V0OworICAgICAgICBtYXN0ZXJfZG9taWQgPSBzdHJ0b3VsbCh4c192YWx1ZSwg TlVMTCwgMTYpOworCisgICAgICAgIGlmIChzc2htLT5wcm90ID09IExJQlhMX1NTSE1fUFJPVF9V TktOT1dOKQorICAgICAgICAgICAgc3NobS0+cHJvdCA9IG1hc3Rlcl9zc2htLnByb3Q7CisKKyAg ICAgICAgLyogY2hlY2sgaWYgdGhlIHNsYXZlIGlzIGFza2luZyB0b28gbXVjaCBwZXJtaXNzaW9u ICovCisgICAgICAgIGlmIChtYXN0ZXJfc3NobS5wcm90IDwgc3NobS0+cHJvdCkgeworICAgICAg ICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsICJzbGF2ZSBpcyBhc2tpbmcgdG9vIG11 Y2ggcGVybWlzc2lvbi4iKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAg ICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFsbCBjaGVja3MgcGFzc2Vk LCBkbyB0aGUgam9iICovCisgICAgICAgIGlmICghaXNyZXRyeSkgeworICAgICAgICAgICAgcmMg PSBsaWJ4bF9fc3NobV9kb19tYXAoZ2MsIG1hc3Rlcl9kb21pZCwgZG9taWQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzc2htLCAmbWFzdGVyX3NzaG0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWQsICZubWFwcGVkKTsKKyAgICAgICAgICAg IGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiB3cml0ZSB0aGUgcmVz dWx0IHRvIHhlbnN0b3JlIGFuZCBjb21taXQgKi8KKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3Jp dGVfY2hlY2tlZChnYywgeHQsIGRvbV9yb2xlX3BhdGgsICJzbGF2ZSIpOworICAgICAgICBpZiAo cmMpIGdvdG8gb3V0OworICAgICAgICByYyA9IGxpYnhsX194c193cml0ZXYoZ2MsIHh0LCBzbGF2 ZV9wYXRoLCBlbnRzKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgcmMgPSBs aWJ4bF9fc3NobV9pbmNyZWYoZ2MsIHh0LCBzc2htX3BhdGgpOworICAgICAgICBpZiAocmMpIGdv dG8gb3V0OworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywg Jnh0KTsKKyAgICAgICAgaWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8g b3V0OworICAgICAgICBpc3JldHJ5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByYyA9IDA7CitvdXQ6 CisgICAgaWYgKHJjKSB7CisgICAgICAgIC8qIHJvbGwgYmFjayBzdWNjZXNzZnVsbHkgbWFwcGVk IHBhZ2VzICovCisgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLCAiZmFpbGVkIHRv IG1hcCBzb21lIHBhZ2VzLCBjYW5jZWxsaW5nLiIpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg bm1hcHBlZDsgaSsrKSB7CisgICAgICAgICAgICB4Y19kb21haW5fcmVtb3ZlX2Zyb21fcGh5c21h cChDVFgtPnhjaCwgZG9taWQsIG1hcHBlZFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBs aWJ4bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQoZ2MsICZ4dCk7CisKKyAgICByZXR1cm4gcmM7Cit9 CisKK3N0YXRpYyBpbnQgbGlieGxfX3NzaG1fYWRkX21hc3RlcihsaWJ4bF9fZ2MgKmdjLCB1aW50 MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0 aWNfc2htICpzc2htKQoreworICAgIGludCByYzsKKyAgICBjb25zdCBjaGFyICpzc2htX3BhdGgs ICpkb21fcGF0aCwgKmRvbV9yb2xlX3BhdGg7CisgICAgY2hhciAqZW50c1sxM107CisgICAgc3Ry dWN0IHhzX3Blcm1pc3Npb25zIG5vcGVybTsKKyAgICB4c190cmFuc2FjdGlvbl90IHh0ID0gWEJU X05VTEw7CisKKyAgICBzc2htX3BhdGggPSBTU0hNX1BBVEgoc3NobS0+aWQpOworICAgIGRvbV9w YXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7CisgICAgLyogdGhlIGRvbWFp biBzaG91bGQgYmUgaW4geGVuc3RvcmUgYnkgbm93ICovCisgICAgYXNzZXJ0KGRvbV9wYXRoKTsK KyAgICBkb21fcm9sZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zdGF0aWNfc2htLyVzL3JvbGUiLCBk b21fcGF0aCwgc3NobS0+aWQpOworCisgICAgLyogcHJlcGFyZSB0aGUgeGVuc3RvcmUgZW50cmll cyAqLworICAgIGVudHNbMF0gPSAibWFzdGVyIjsKKyAgICBlbnRzWzFdID0gR0NTUFJJTlRGKCIl IlBSSXUzMiwgZG9taWQpOworICAgIGVudHNbMl0gPSAiYmVnaW4iOworICAgIGVudHNbM10gPSBH Q1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0tPmJlZ2luKTsKKyAgICBlbnRzWzRdID0gInNpemUi OworICAgIGVudHNbNV0gPSBHQ1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0tPnNpemUpOworICAg IGVudHNbNl0gPSAicHJvdCI7CisgICAgZW50c1s3XSA9IGxpYnhsX19zdHJkdXAoZ2MsIGxpYnhs X3NzaG1fcHJvdF90b19zdHJpbmcoc3NobS0+cHJvdCkpOworICAgIGVudHNbOF0gPSAiY2FjaGVf cG9saWN5IjsKKyAgICBlbnRzWzldID0gbGlieGxfX3N0cmR1cChnYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9zc2htX2NhY2hlcG9saWN5X3RvX3N0cmluZyhzc2htLT5jYWNo ZV9wb2xpY3kpKTsKKyAgICBlbnRzWzEwXSA9ICJ1c2VyY250IjsKKyAgICBlbnRzWzExXSA9ICIx IjsKKyAgICBlbnRzWzEyXSA9IE5VTEw7CisKKyAgICAvKiBjb3VsZCBvbmx5IGJlIGFjY2Vzc2Vk IGJ5IERvbTAgKi8KKyAgICBub3Blcm0uaWQgPSAwOworICAgIG5vcGVybS5wZXJtcyA9IFhTX1BF Uk1fTk9ORTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNh Y3Rpb25fc3RhcnQoZ2MsICZ4dCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAg ICAgaWYgKCFsaWJ4bF9feHNfcmVhZChnYywgeHQsIHNzaG1fcGF0aCkpIHsKKyAgICAgICAgICAg IC8qIGV2ZXJ5IElEIGNhbiBhcHBlYXIgaW4gZWFjaCBkb21haW4gYXQgbW9zdCBvbmNlICovCisg ICAgICAgICAgICBpZiAobGlieGxfX3hzX3JlYWQoZ2MsIHh0LCBkb21fcm9sZV9wYXRoKSkgewor ICAgICAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgImRvbWFpbiB0cmllZCB0byBtYXAgdGhlIHNhbWUgSUQgdHdpY2UuIik7 CisgICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgICAgIGdvdG8g b3V0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3JpdGVfY2hl Y2tlZChnYywgeHQsIGRvbV9yb2xlX3BhdGgsICJtYXN0ZXIiKTsKKyAgICAgICAgICAgIGlmIChy YykgZ290byBvdXQ7OworCisgICAgICAgICAgICBsaWJ4bF9feHNfbWtub2QoZ2MsIHh0LCBzc2ht X3BhdGgsICZub3Blcm0sIDEpOworICAgICAgICAgICAgbGlieGxfX3hzX3dyaXRldihnYywgeHQs IHNzaG1fcGF0aCwgZW50cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTU0hNX0VS Uk9SKGRvbWlkLCBzc2htLT5pZCwgImNhbiBvbmx5IGhhdmUgb25lIG1hc3Rlci4iKTsKKyAgICAg ICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9 CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmeHQpOwor ICAgICAgICBpZiAoIXJjKSBicmVhazsKKyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7Cisg ICAgfQorCisgICAgcmMgPSAwOworb3V0OgorICAgIGxpYnhsX194c190cmFuc2FjdGlvbl9hYm9y dChnYywgJnh0KTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBsaWJ4bF9fc3NobV9hZGQobGli eGxfX2djICpnYywgIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICBsaWJ4bF9z dGF0aWNfc2htICpzc2htcywgaW50IGxlbikKK3sKKyAgICBpbnQgcmMsIGk7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgaWYgKHNzaG1zW2ldLnJvbGUgPT0gTElC WExfU1NITV9ST0xFX1NMQVZFKSB7CisgICAgICAgICAgICByYyA9IGxpYnhsX19zc2htX2FkZF9z bGF2ZShnYywgZG9taWQsIHNzaG1zK2kpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg cmMgPSBsaWJ4bF9fc3NobV9hZGRfbWFzdGVyKGdjLCBkb21pZCwgc3NobXMraSk7CisgICAgICAg IH0KKyAgICAgICAgaWYgKHJjKSAgcmV0dXJuIHJjOworICAgIH0KKworICAgIHJldHVybiAwOwor fQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZz ZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQg YS90b29scy9saWJ4bC9saWJ4bF94ODYuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jCmluZGV4 IGFiODg1NjIuLmRkM2RlOTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jCisr KyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jCkBAIC02MTksNiArNjE5LDI1IEBAIHZvaWQgbGli eGxfX2FyY2hfZG9tYWluX2J1aWxkX2luZm9fYWNwaV9zZXRkZWZhdWx0KAogICAgIGxpYnhsX2Rl ZmJvb2xfc2V0ZGVmYXVsdCgmYl9pbmZvLT5hY3BpLCB0cnVlKTsKIH0KIAorYm9vbCBsaWJ4bF9f YXJjaF9kb21haW5fc3VwcG9ydF9zc2htKGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpi X2luZm8pCit7CisgICAgLyogRklYTUU6IE1hcmsgdGhpcyBhcyB1bnN1cHBvcnRlZCBmb3IgY2Fs bGluZyBwMm1fYWRkX2ZvcmVpZ24gb24gdHdvCisgICAgICogRG9tVSdzIGlzIGN1cnJlbnRseSBu b3QgYWxsb3dkIG9uIHg4Niwgc2VlIHRoZSBjb21tZW50cyBpbgorICAgICAqIHg4Ni9tbS9wMm0u YzogcDJtX2FkZF9mb3JlaWduLgorICAgICAqLworICAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lu dCBsaWJ4bF9fYXJjaF9kb21haW5fc3NobV9jYWNoZXBvbGljeV9zZXRkZWZhdWx0KGxpYnhsX3N0 YXRpY19zaG0gKnNzaG0pCit7CisgICAgaWYgKHNzaG0tPmNhY2hlX3BvbGljeSA9PSBMSUJYTF9T U0hNX0NBQ0hFUE9MSUNZX1VOS05PV04pCisgICAgICAgIHNzaG0tPmNhY2hlX3BvbGljeSA9IExJ QlhMX1NTSE1fQ0FDSEVQT0xJQ1lfWDg2X05PUk1BTDsKKyAgICBpZiAoc3NobS0+Y2FjaGVfcG9s aWN5IDwgTElCWExfU1NITV9DQUNIRVBPTElDWV9YODZfTk9STUFMKQorICAgICAgICByZXR1cm4g RVJST1JfSU5WQUw7CisKKyAgICByZXR1cm4gMDsKK30KKwogLyoKICAqIExvY2FsIHZhcmlhYmxl czoKICAqIG1vZGU6IEMKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp bmZvL3hlbi1kZXZlbA==