From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v5 3/6] libxl: support mapping static shared memory areas during domain creation Date: Thu, 24 May 2018 17:55:20 -0700 Message-ID: <1527209723-23422-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 YWluX2FkZF90b19waHlzbWFwX2JhdGNoIHRvIGRvIHRoZSBwYWdlIHNoYXJpbmcuCiAgKiBXaGVu IHNvbWUgb2YgdGhlIHBhZ2VzIGNhbid0IGJlIHN1Y2Nlc3NmdWxseSBtYXBwZWQsIHJvbGwgYmFj ayBhbnkKICAgIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcGFnZXMgc28gdGhhdCB0aGUgc3lzdGVtIHN0 YXlzIGluIGEgY29uc2lzdGVudCBzdGF0ZS4KICAqIFdyaXRlIGluZm9ybWF0aW9uIGFib3V0IHN0 YXRpYyBzaGFyZWQgbWVtb3J5IGFyZWFzIGludG8gdGhlIGFwcHJvcHJpYXRlCiAgICB4ZW5zdG9y ZSBwYXRocyBhbmQgc2V0IHRoZSByZWZjb3VudCBvZiB0aGUgc2hhcmVkIHJlZ2lvbiBhY2NvcmRp bmdseS4KClRlbXBvcmFyaWx5IG1hcmsgdGhpcyBhcyB1bnN1cHBvcnRlZCBvbiB4ODYgYmVjYXVz ZSBjYWxsaW5nIHAybV9hZGRfZm9yZWlnbiBvbgp0d28gZG9tVSdzIGlzIGN1cnJlbnRseSBub3Qg YWxsb3dkIG9uIHg4NiAoc2VlIHRoZSBjb21tZW50cyBpbgp4ODYvbW0vcDJtLmM6cDJtX2FkZF9m b3JlaWduIGZvciBtb3JlIGRldGFpbHMpLgoKVGhpcyBpcyBmb3IgdGhlIHByb3Bvc2FsICJBbGxv dyBzZXR0aW5nIHVwIHNoYXJlZCBtZW1vcnkgYXJlYXMgYmV0d2VlbiBWTXMKZnJvbSB4bCBjb25m aWcgZmlsZSIgKHNlZSBbMV0pLgoKWzFdIGh0dHBzOi8vbGlzdHMueGVuLm9yZy9hcmNoaXZlcy9o dG1sL3hlbi1kZXZlbC8yMDE3LTA4L21zZzAzMjQyLmh0bWwKClNpZ25lZC1vZmYtYnk6IFpob25n emUgTGl1IDxibGFja3NreWdnQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogU3RlZmFubyBTdGFi ZWxsaW5pIDxzdGVmYW5vc0B4aWxpbnguY29tPgoKQ2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJp eC5jb20+CkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IFN0 ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4KQ2M6IEp1bGllbiBHcmFs bCA8anVsaWVuLmdyYWxsQGFybS5jb20+CkNjOiB4ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwotLS0K Q2hhbmdlcyBpbiB2NToKLSBmaXggdHlwb3MKLSBhZGQgY29tbWVudHMKLSBhZGQgdmFsdWUgY2hl Y2tzIChpbmNsdWRpbmcgYWxpZ25tZW50IGNoZWNrcykgaW4gc3NobV9zZXRkZWZhdWx0cwotLS0K IHRvb2xzL2xpYnhsL01ha2VmaWxlICAgICAgICAgfCAgIDIgKy0KIHRvb2xzL2xpYnhsL2xpYnhs X2FyY2guaCAgICAgfCAgIDYgKwogdG9vbHMvbGlieGwvbGlieGxfYXJtLmMgICAgICB8ICAxNSAr KwogdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMgICB8ICAyNyArKysKIHRvb2xzL2xpYnhsL2xp YnhsX2ludGVybmFsLmggfCAgMTQgKysKIHRvb2xzL2xpYnhsL2xpYnhsX3NzaG0uYyAgICAgfCA0 MDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdG9vbHMvbGli eGwvbGlieGxfeDg2LmMgICAgICB8ICAxOSArKwogNyBmaWxlcyBjaGFuZ2VkLCA0ODcgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL2xp YnhsX3NzaG0uYwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL01ha2VmaWxlIGIvdG9vbHMvbGli eGwvTWFrZWZpbGUKaW5kZXggMDM1ZTY2ZS4uM2I3NjJjNSAxMDA2NDQKLS0tIGEvdG9vbHMvbGli eGwvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKQEAgLTE0MCw3ICsxNDAsNyBA QCBMSUJYTF9PQkpTID0gZmxleGFycmF5Lm8gbGlieGwubyBsaWJ4bF9jcmVhdGUubyBsaWJ4bF9k bS5vIGxpYnhsX3BjaS5vIFwKIAkJCWxpYnhsX3Z0cG0ubyBsaWJ4bF9uaWMubyBsaWJ4bF9kaXNr Lm8gbGlieGxfY29uc29sZS5vIFwKIAkJCWxpYnhsX2NwdXBvb2wubyBsaWJ4bF9tZW0ubyBsaWJ4 bF9zY2hlZC5vIGxpYnhsX3RtZW0ubyBcCiAJCQlsaWJ4bF85cGZzLm8gbGlieGxfZG9tYWluLm8g bGlieGxfdmRpc3BsLm8gXAotICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfcHZjYWxscy5v ICQoTElCWExfT0JKUy15KQorICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfcHZjYWxscy5v IGxpYnhsX3NzaG0ubyAkKExJQlhMX09CSlMteSkKIExJQlhMX09CSlMgKz0gbGlieGxfZ2VuaWQu bwogTElCWExfT0JKUyArPSBfbGlieGxfdHlwZXMubyBsaWJ4bF9mbGFzay5vIF9saWJ4bF90eXBl c19pbnRlcm5hbC5vCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaCBiL3Rv b2xzL2xpYnhsL2xpYnhsX2FyY2guaAppbmRleCA3NGE1YWYzLi42YTA3Y2NmIDEwMDY0NAotLS0g YS90b29scy9saWJ4bC9saWJ4bF9hcmNoLmgKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfYXJjaC5o CkBAIC03Myw2ICs3MywxMiBAQCBpbnQgbGlieGxfX2FyY2hfZXh0cmFfbWVtb3J5KGxpYnhsX19n YyAqZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2RvbWFpbl9i dWlsZF9pbmZvICppbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAq b3V0KTsKIAorX2hpZGRlbgorYm9vbCBsaWJ4bF9fYXJjaF9kb21haW5fc3VwcG9ydF9zc2htKGNv bnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8pOworCitfaGlkZGVuCitpbnQgbGli eGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVmYXVsdChsaWJ4bF9zdGF0aWNf c2htICpzc2htKTsKKwogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRf XykKIAogI2RlZmluZSBMQVBJQ19CQVNFX0FERFJFU1MgIDB4ZmVlMDAwMDAKZGlmZiAtLWdpdCBh L3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jIGIvdG9vbHMvbGlieGwvbGlieGxfYXJtLmMKaW5kZXgg OGFmOWY2Zi4uNWY2MmU3OCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfYXJtLmMKKysr IGIvdG9vbHMvbGlieGwvbGlieGxfYXJtLmMKQEAgLTExNDEsNiArMTE0MSwyMSBAQCB2b2lkIGxp YnhsX19hcmNoX2RvbWFpbl9idWlsZF9pbmZvX2FjcGlfc2V0ZGVmYXVsdCgKICAgICBsaWJ4bF9k ZWZib29sX3NldGRlZmF1bHQoJmJfaW5mby0+YWNwaSwgZmFsc2UpOwogfQogCitib29sIGxpYnhs X19hcmNoX2RvbWFpbl9zdXBwb3J0X3NzaG0oY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8g KmJfaW5mbykKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50IGxpYnhsX19hcmNoX2RvbWFp bl9zc2htX2NhY2hlcG9saWN5X3NldGRlZmF1bHQobGlieGxfc3RhdGljX3NobSAqc3NobSkKK3sK KyAgICBpZiAoc3NobS0+Y2FjaGVfcG9saWN5ID09IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfVU5L Tk9XTikKKyAgICAgICAgc3NobS0+Y2FjaGVfcG9saWN5ID0gTElCWExfU1NITV9DQUNIRVBPTElD WV9BUk1fTk9STUFMOworICAgIGlmIChzc2htLT5jYWNoZV9wb2xpY3kgPj0gTElCWExfU1NITV9D QUNIRVBPTElDWV9YODZfTk9STUFMKQorICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisKKyAg ICByZXR1cm4gMDsKK30KKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlm ZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jIGIvdG9vbHMvbGlieGwvbGlieGxf Y3JlYXRlLmMKaW5kZXggYjVlMjdhNy4uNjJiMDY3OSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwv bGlieGxfY3JlYXRlLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMKQEAgLTUzMiw2 ICs1MzIsMTQgQEAgaW50IGxpYnhsX19kb21haW5fYnVpbGQobGlieGxfX2djICpnYywKICAgICAg ICAgcmV0ID0gRVJST1JfSU5WQUw7CiAgICAgICAgIGdvdG8gb3V0OwogICAgIH0KKworICAgIC8q IFRoZSBwMm0gaGFzIGJlZW4gc2V0dXAsIHdlIGNvdWxkIG1hcCB0aGUgc3RhdGljIHNoYXJlZCBt ZW1vcnkgbm93LiAqLworICAgIHJldCA9IGxpYnhsX19zc2htX2FkZChnYywgZG9taWQsIGRfY29u ZmlnLT5zc2htcywgZF9jb25maWctPm51bV9zc2htcyk7CisgICAgaWYgKHJldCAhPSAwKSB7Cisg ICAgICAgIExPRyhFUlJPUiwgImZhaWxlZCB0byBtYXAgc3RhdGljIHNoYXJlZCBtZW1vcnkiKTsK KyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCiAgICAgcmV0ID0gbGlieGxfX2J1aWxkX3Bvc3Qo Z2MsIGRvbWlkLCBpbmZvLCBzdGF0ZSwgdm1lbnRzLCBsb2NhbGVudHMpOwogb3V0OgogICAgIHJl dHVybiByZXQ7CkBAIC05NTksNiArOTY3LDI1IEBAIHN0YXRpYyB2b2lkIGluaXRpYXRlX2RvbWFp bl9jcmVhdGUobGlieGxfX2VnYyAqZWdjLAogICAgICAgICBnb3RvIGVycm9yX291dDsKICAgICB9 CiAKKyAgICBpZiAoZF9jb25maWctPm51bV9zc2htcyAhPSAwICYmCisgICAgICAgICFsaWJ4bF9f YXJjaF9kb21haW5fc3VwcG9ydF9zc2htKCZkX2NvbmZpZy0+Yl9pbmZvKSkgeworICAgICAgICBM T0dEKEVSUk9SLCBkb21pZCwgInN0YXRpY19zaG0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRv bWFpbiB0eXBlLiIpOworICAgICAgICByZXQgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgZ290byBl cnJvcl9vdXQ7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IGRfY29uZmlnLT5udW1fc3No bXM7ICsraSkgeworICAgICAgICByZXQgPSBsaWJ4bF9fc3NobV9zZXRkZWZhdWx0KGdjLCBkb21p ZCwgJmRfY29uZmlnLT5zc2htc1tpXSk7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAg IExPR0QoRVJST1IsIGRvbWlkLCAiVW5hYmxlIHRvIHNldCBkZWZhdWx0cyBmb3Igc3RhdGljIHNo bSIpOworICAgICAgICAgICAgZ290byBlcnJvcl9vdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICByZXQgPSBsaWJ4bF9fc3NobV9jaGVja19vdmVybGFwKGdjLCBkb21pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRfY29uZmlnLT5zc2htcywgZF9jb25maWctPm51bV9z c2htcyk7CisgICAgaWYgKHJldCkgZ290byBlcnJvcl9vdXQ7CisKICAgICByZXQgPSBsaWJ4bF9f ZG9tYWluX21ha2UoZ2MsIGRfY29uZmlnLCAmZGNzLT5idWlsZF9zdGF0ZSwgJmRvbWlkKTsKICAg ICBpZiAocmV0KSB7CiAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiY2Fubm90IG1ha2UgZG9t YWluOiAlZCIsIHJldCk7CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5o IGIvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAppbmRleCBjNTgyODk0Li4wNzZjMzBmIDEw MDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCisrKyBiL3Rvb2xzL2xpYnhs L2xpYnhsX2ludGVybmFsLmgKQEAgLTQ0MjEsNiArNDQyMSwyMCBAQCBzdGF0aWMgaW5saW5lIGJv b2wgbGlieGxfX3N0cmluZ19pc19kZWZhdWx0KGNoYXIgKipzKQogI2VuZGlmCiAKIC8qCisgKiBT ZXQgdXAgc3RhdGljIHNoYXJlZCByYW0gcGFnZXMgZm9yIEhWTSBkb21haW5zIHRvIGNvbW11bmlj YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgdGhl IG1lbW9yeSBtYXAgaXMgY29uc3RydWN0ZWQKKyAqIGFuZCBiZWZvcmUgYW55IGZ1cnRoZXIgbWVt b3J5IGFjY2Vzcy4KKyAqLworX2hpZGRlbiBpbnQgbGlieGxfX3NzaG1fYWRkKGxpYnhsX19nYyAq Z2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0 YXRpY19zaG0gKnNzaG0sIGludCBsZW4pOworCitfaGlkZGVuIGludCBsaWJ4bF9fc3NobV9jaGVj a19vdmVybGFwKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htcywgaW50IGxlbik7 CitfaGlkZGVuIGludCBsaWJ4bF9fc3NobV9zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsIHVpbnQz Ml90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0 aWNfc2htICpzc2htKTsKKworLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKICAq IGMtYmFzaWMtb2Zmc2V0OiA0CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9zc2htLmMg Yi90b29scy9saWJ4bC9saWJ4bF9zc2htLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZjYxYjgwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3NzaG0u YwpAQCAtMCwwICsxLDQwNSBAQAorI2luY2x1ZGUgImxpYnhsX29zZGVwcy5oIgorI2luY2x1ZGUg ImxpYnhsX2ludGVybmFsLmgiCisjaW5jbHVkZSAibGlieGxfYXJjaC5oIgorCisjZGVmaW5lIFNT SE1fUEFUSChpZCkgR0NTUFJJTlRGKCIvbGlieGwvc3RhdGljX3NobS8lcyIsIGlkKQorCisjZGVm aW5lIFNTSE1fRVJST1IoZG9taWQsIHNzaG1pZCwgZiwgLi4uKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgTE9HRChFUlJPUiwgZG9taWQsICJzdGF0aWNfc2htIGlkID0gJXM6 ICIgZiwgc3NobWlkLCAjI19fVkFfQVJHU19fKQorCisKKy8qIFNldCBkZWZhdWx0IHZhbHVlcyBm b3IgbGlieGxfc3RhdGljX3NobSAqLworaW50IGxpYnhsX19zc2htX3NldGRlZmF1bHQobGlieGxf X2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9zdGF0aWNfc2htICpzc2htKQoreworICAgIGludCByYzsKKworICAgIGlmIChzc2htLT5yb2xl ICE9IExJQlhMX1NTSE1fUk9MRV9TTEFWRSAmJgorICAgICAgICBzc2htLT5yb2xlICE9IExJQlhM X1NTSE1fUk9MRV9NQVNURVIpCisgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKKyAgICBpZiAo c3NobS0+YmVnaW4gJiB+WENfUEFHRV9NQVNLIHx8CisgICAgICAgIHNzaG0tPnNpemUgJiB+WENf UEFHRV9NQVNLIHx8CisgICAgICAgIChzc2htLT5vZmZzZXQgIT0gTElCWExfU1NITV9SQU5HRV9V TktOT1dOICYmCisgICAgICAgIHNzaG0tPm9mZnNldCAmIH5YQ19QQUdFX01BU0spKSB7CisgICAg ICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAorICAgICAgICAgICAgICAgICAgICJiZWdp bi9zaXplL29mZnNldCBpcyBub3QgYSBtdWx0aXBsZSBvZiA0SyIpOworICAgICAgICByZXR1cm4g RVJST1JfSU5WQUw7CisgICAgfQorCisgICAgLyogcm9sZS1zcGVjaWZpYyBjaGVja3MgKi8KKyAg ICBpZiAoc3NobS0+cm9sZSA9PSBMSUJYTF9TU0hNX1JPTEVfU0xBVkUpIHsKKyAgICAgICAgaWYg KHNzaG0tPm9mZnNldCA9PSBMSUJYTF9TU0hNX1JBTkdFX1VOS05PV04pCisgICAgICAgICAgICBz c2htLT5vZmZzZXQgPSAwOworICAgICAgICBpZiAoc3NobS0+Y2FjaGVfcG9saWN5ICE9IExJQlhM X1NTSE1fQ0FDSEVQT0xJQ1lfVU5LTk9XTikgeworICAgICAgICAgICAgU1NITV9FUlJPUihkb21p ZCwgc3NobS0+aWQsCisgICAgICAgICAgICAgICAgICAgICAgICJjYWNoZV9wb2xpY3kgaXMgb25s eSBhcHBsaWNhYmxlIHRvIG1hc3RlciBkb21haW5zIik7CisgICAgICAgICAgICByYyA9IEVSUk9S X0lOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor ICAgICAgICBpZiAoc3NobS0+b2Zmc2V0ICE9IExJQlhMX1NTSE1fUkFOR0VfVU5LTk9XTikgewor ICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCisgICAgICAgICAgICAgICAg ICAgICAgICJvZmZzZXQgaXMgb25seSBhcHBsaWNhYmxlIHRvIHNsYXZlIGRvbWFpbnMiKTsKKyAg ICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAg ICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lf c2V0ZGVmYXVsdChzc2htKTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBTU0hNX0VS Uk9SKGRvbWlkLCBzc2htLT5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgImNhY2hlIHBvbGlj eSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTsKKyAgICAgICAgICAgIGdvdG8gb3V0 OworICAgICAgICB9CisgICAgfQorCisgICAgcmMgPSAwOworb3V0OgorICAgIHJldHVybiByYzsK K30KKworLyogQ29tcGFyYXRvciBmb3Igc29ydGluZyBzc2htIHJhbmdlcyBieSBzc2htLT5iZWdp biAqLworc3RhdGljIGludCBzc2htX3JhbmdlX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lk ICpiKQoreworICAgIGxpYnhsX3N0YXRpY19zaG0gKmNvbnN0ICpzc2htYSA9IGEsICpjb25zdCAq c3NobWIgPSBiOworICAgIHJldHVybiAoKnNzaG1hKS0+YmVnaW4gPiAoKnNzaG1iKS0+YmVnaW4g PyAxIDogLTE7Cit9CisKKy8qIENoZWNrIGlmIHRoZSBzc2htIHNsYXZlIGNvbmZpZ3MgaW4gQHNz aG0gb3ZlcmxhcCAqLworaW50IGxpYnhsX19zc2htX2NoZWNrX292ZXJsYXAobGlieGxfX2djICpn YywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfc3RhdGljX3NobSAqc3NobXMsIGludCBsZW4pCit7CisKKyAgICBjb25zdCBsaWJ4bF9z dGF0aWNfc2htICoqc2xhdmVfc3NobXMgPSBOVUxMOworICAgIGludCBudW1fc2xhdmVzOworICAg IGludCBpOworCisgICAgaWYgKCFsZW4pIHJldHVybiAwOworCisgICAgc2xhdmVfc3NobXMgPSBs aWJ4bF9fY2FsbG9jKGdjLCBsZW4sIHNpemVvZihzbGF2ZV9zc2htc1swXSkpOworICAgIG51bV9z bGF2ZXMgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBpZiAo c3NobXNbaV0ucm9sZSA9PSBMSUJYTF9TU0hNX1JPTEVfU0xBVkUpCisgICAgICAgICAgICBzbGF2 ZV9zc2htc1tudW1fc2xhdmVzKytdID0gc3NobXMgKyBpOworICAgIH0KKyAgICBxc29ydChzbGF2 ZV9zc2htcywgbnVtX3NsYXZlcywgc2l6ZW9mKHNsYXZlX3NzaG1zWzBdKSwgc3NobV9yYW5nZV9j bXApOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9zbGF2ZXMgLSAxOyArK2kpIHsKKyAgICAg ICAgaWYgKHNsYXZlX3NzaG1zW2krMV0tPmJlZ2luIDwKKyAgICAgICAgICAgIHNsYXZlX3NzaG1z W2ldLT5iZWdpbiArIHNsYXZlX3NzaG1zW2ldLT5zaXplKSB7CisgICAgICAgICAgICBTU0hNX0VS Uk9SKGRvbWlkLCBzbGF2ZV9zc2htc1tpKzFdLT5pZCwgInNsYXZlIHJhbmdlcyBvdmVybGFwLiIp OworICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOworICAgICAgICB9CisgICAgfQorCisg ICAgcmV0dXJuIDA7Cit9CisKKy8qICAgbGlieGxfX3NzaG1fZG9fbWFwIC0tIG1hcCBwYWdlcyBp bnRvIHNsYXZlJ3MgcGh5c21hcAorICoKKyAqICAgVGhpcyBmdW5jdGlvbnMgbWFwcworICogICAg IG1hc3RlciBnZm46IFtAbXNzaG0tPmJlZ2luICsgQHNzaG0tPm9mZnNldCwKKyAqICAgICAgICAg ICAgICAgICAgQG1zc2htLT5iZWdpbiArIEBtc3NobS0+c2l6ZSArIEBzc2htLT5vZmZzZXQpCisg KiAgIGludG8KKyAqICAgICBzbGF2ZSBnZm46IFtAc3NobS0+YmVnaW4sIEBzc2htLT5iZWdpbiAr IEBzc2htLT5zaXplKQorICoKKyAqICAgVGhlIGdmbnMgb2YgdGhlIHBhZ2VzIHRoYXQgYXJlIHN1 Y2Nlc3NmdWxseSBtYXBwZWQgd2lsbCBiZSBzdG9yZWQKKyAqICAgaW4gQG1hcHBlZCwgYW5kIHRo ZSBudW1iZXIgb2YgdGhlIGdmbnMgd2lsbCBiZSBzdG9yZWQgaW4gQG5tYXBwZWQuCisgKgorICog ICBUaGUgY2FsbGVyIGhhcyB0byBndWFyYW50ZWUgdGhhdCBhbGwgdGhlIHZhbHVlcyBhcmUgcGFn ZS1hbGlnbmVkLgorICovCitzdGF0aWMgaW50IGxpYnhsX19zc2htX2RvX21hcChsaWJ4bF9fZ2Mg KmdjLCB1aW50MzJfdCBtaWQsIHVpbnQzMl90IHNpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0sIGxpYnhsX3N0YXRpY19zaG0gKm1zc2htLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICptYXBwZWQsIHVuc2lnbmVk IGludCAqbm1hcHBlZCkKK3sKKyAgICBpbnQgcmM7CisgICAgaW50IGk7CisgICAgeGVuX3Bmbl90 IG51bV9tcGFnZXMsIG51bV9zcGFnZXMsIG51bV9zdWNjZXNzLCBvZmZzZXQ7CisgICAgaW50ICpl cnJzOworICAgIHhlbl91bG9uZ190ICppZHhzOworICAgIHhlbl9wZm5fdCAqZ3BmbnM7CisKKyAg ICBudW1fbXBhZ2VzID0gKG1zc2htLT5zaXplKSA+PiBYQ19QQUdFX1NISUZUOworICAgIG51bV9z cGFnZXMgPSAoc3NobS0+c2l6ZSkgPj4gWENfUEFHRV9TSElGVDsKKyAgICBvZmZzZXQgPSBzc2ht LT5vZmZzZXQgPj4gWENfUEFHRV9TSElGVDsKKworICAgIC8qIENoZWNrIHJhbmdlLiBUZXN0IG9m ZnNldCA8IG1wYWdlcyBmaXJzdCB0byBhdm9pZCBvdmVyZmxvdyAqLworICAgIGlmICgob2Zmc2V0 ID49IG51bV9tcGFnZXMpIHx8IChudW1fbXBhZ2VzIC0gb2Zmc2V0IDwgbnVtX3NwYWdlcykpIHsK KyAgICAgICAgU1NITV9FUlJPUihzaWQsIHNzaG0tPmlkLCAiZXhjZWVkcyBtYXN0ZXIncyBhZGRy ZXNzIHNwYWNlLiIpOworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3RvIG91 dDsKKyAgICB9CisKKyAgICAvKiBmaWxsIG91dCB0aGUgZ2ZuJ3MgYW5kIGRvIHRoZSBtYXBwaW5n ICovCisgICAgZXJycyA9IGxpYnhsX19jYWxsb2MoZ2MsIG51bV9zcGFnZXMsIHNpemVvZihpbnQp KTsKKyAgICBpZHhzID0gbGlieGxfX2NhbGxvYyhnYywgbnVtX3NwYWdlcywgc2l6ZW9mKHhlbl91 bG9uZ190KSk7CisgICAgZ3BmbnMgPSBsaWJ4bF9fY2FsbG9jKGdjLCBudW1fc3BhZ2VzLCBzaXpl b2YoeGVuX3Bmbl90KSk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9zcGFnZXM7IGkrKykgewor ICAgICAgICBpZHhzW2ldID0gKG1zc2htLT5iZWdpbiA+PiBYQ19QQUdFX1NISUZUKSArIG9mZnNl dCArIGk7CisgICAgICAgIGdwZm5zW2ldPSAoc3NobS0+YmVnaW4gPj4gWENfUEFHRV9TSElGVCkg KyBpOworICAgIH0KKyAgICByYyA9IHhjX2RvbWFpbl9hZGRfdG9fcGh5c21hcF9iYXRjaChDVFgt PnhjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWQsIG1pZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYRU5NQVBTUEFDRV9nbWZu X3NoYXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zcGFn ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4cywgZ3BmbnMs IGVycnMpOworCisgICAgbnVtX3N1Y2Nlc3MgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1f c3BhZ2VzOyBpKyspIHsKKyAgICAgICAgaWYgKGVycnNbaV0pIHsKKyAgICAgICAgICAgIFNTSE1f RVJST1Ioc2lkLCBzc2htLT5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IG1hcCBh dCBhZGRyZXNzIDB4JSJQUkl4NjQiLiIsCisgICAgICAgICAgICAgICAgICAgICAgIGdwZm5zW2ld IDw8IFhDX1BBR0VfU0hJRlQpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgbWFwcGVkW251bV9zdWNjZXNzKytdID0gZ3BmbnNbaV07 CisgICAgICAgIH0KKyAgICB9CisgICAgKm5tYXBwZWQgPSBudW1fc3VjY2VzczsKKyAgICBpZiAo cmMpIGdvdG8gb3V0OworCisgICAgcmMgPSAwOworb3V0OgorICAgIHJldHVybiByYzsKK30KKwor LyogWGVuc3RvcmUgb3BzIGFyZSBwcm90ZWN0ZWQgYnkgYSB0cmFuc2FjdGlvbiAqLworc3RhdGlj IGludCBsaWJ4bF9fc3NobV9pbmNyZWYobGlieGxfX2djICpnYywgeHNfdHJhbnNhY3Rpb25fdCB4 dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNzaG1fcGF0aCkK K3sKKyAgICBpbnQgcmMsIGNvdW50OworICAgIGNvbnN0IGNoYXIgKmNvdW50X3BhdGgsICpjb3Vu dF9zdHJpbmc7CisKKyAgICBjb3VudF9wYXRoID0gR0NTUFJJTlRGKCIlcy91c2VyY250Iiwgc3No bV9wYXRoKTsKKyAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0LCBjb3VudF9w YXRoLCAmY291bnRfc3RyaW5nKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworICAgIGNvdW50ID0g YXRvaShjb3VudF9zdHJpbmcpOworCisgICAgY291bnRfc3RyaW5nID0gR0NTUFJJTlRGKCIlZCIs IGNvdW50KzEpOworICAgIHJjID0gbGlieGxfX3hzX3dyaXRlX2NoZWNrZWQoZ2MsIHh0LCBjb3Vu dF9wYXRoLCBjb3VudF9zdHJpbmcpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICByYyA9 IDA7CitvdXQ6CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGxpYnhsX19zc2htX2Fk ZF9zbGF2ZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAgaW50IHJjLCBp OworICAgIGNvbnN0IGNoYXIgKnNzaG1fcGF0aCwgKnNsYXZlX3BhdGg7CisgICAgY29uc3QgY2hh ciAqZG9tX3BhdGgsICpkb21fc3NobV9wYXRoLCAqZG9tX3JvbGVfcGF0aDsKKyAgICBjb25zdCBj aGFyICp4c192YWx1ZTsKKyAgICBjaGFyICplbnRzWzldOworICAgIGxpYnhsX3N0YXRpY19zaG0g bWFzdGVyX3NzaG07CisgICAgdWludDMyX3QgbWFzdGVyX2RvbWlkOworICAgIHhlbl9wZm5fdCAq bWFwcGVkOworICAgIHVuc2lnbmVkIGludCBubWFwcGVkID0gMDsKKyAgICB4c190cmFuc2FjdGlv bl90IHh0ID0gWEJUX05VTEw7CisgICAgYm9vbCBpc3JldHJ5OworCisgICAgc3NobV9wYXRoID0g U1NITV9QQVRIKHNzaG0tPmlkKTsKKyAgICBzbGF2ZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zbGF2 ZXMvJSJQUkl1MzIsIHNzaG1fcGF0aCwgZG9taWQpOworICAgIGRvbV9wYXRoID0gbGlieGxfX3hz X2dldF9kb21wYXRoKGdjLCBkb21pZCk7CisgICAgLyogdGhlIGRvbWFpbiBzaG91bGQgYmUgaW4g eGVuc3RvcmUgYnkgbm93ICovCisgICAgYXNzZXJ0KGRvbV9wYXRoKTsKKyAgICBkb21fc3NobV9w YXRoID0gR0NTUFJJTlRGKCIlcy9zdGF0aWNfc2htLyVzIiwgZG9tX3BhdGgsIHNzaG0tPmlkKTsK KyAgICBkb21fcm9sZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9yb2xlIiwgZG9tX3NzaG1fcGF0aCk7 CisKKyAgICAvKiBwcmVwYXJlIHRoZSBzbGF2ZSB4ZW5zdG9yZSBlbnRyaWVzICovCisgICAgZW50 c1swXSA9ICJiZWdpbiI7CisgICAgZW50c1sxXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3No bS0+YmVnaW4pOworICAgIGVudHNbMl0gPSAic2l6ZSI7CisgICAgZW50c1szXSA9IEdDU1BSSU5U RigiMHglIlBSSXg2NCwgc3NobS0+c2l6ZSk7CisgICAgZW50c1s0XSA9ICJvZmZzZXQiOworICAg IGVudHNbNV0gPSBHQ1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0tPm9mZnNldCk7CisgICAgZW50 c1s2XSA9ICJwcm90IjsKKyAgICBlbnRzWzddID0gbGlieGxfX3N0cmR1cChnYywgbGlieGxfc3No bV9wcm90X3RvX3N0cmluZyhzc2htLT5wcm90KSk7CisgICAgZW50c1s4XSA9IE5VTEw7CisKKyAg ICBtYXBwZWQgPSBsaWJ4bF9fY2FsbG9jKGdjLCBzc2htLT5zaXplID4+IFhDX1BBR0VfU0hJRlQs IHNpemVvZih4ZW5fcGZuX3QpKTsKKworICAgIGlzcmV0cnkgPSBmYWxzZTsKKyAgICBmb3IgKDs7 KSB7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0KGdjLCAmeHQpOwor ICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIGlmICghbGlieGxfX3hzX3JlYWQo Z2MsIHh0LCBzc2htX3BhdGgpKSB7CisgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlkLCBzc2ht LT5pZCwgIm5vIG1hc3RlciBmb3VuZC4iKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsK KyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgLyogZXZlcnkgSUQg Y2FuIGFwcGVhciBpbiBlYWNoIGRvbWFpbiBhdCBtb3N0IG9uY2UgKi8KKyAgICAgICAgaWYgKGxp YnhsX194c19yZWFkKGdjLCB4dCwgZG9tX3NzaG1fcGF0aCkpIHsKKyAgICAgICAgICAgIFNTSE1f RVJST1IoZG9taWQsIHNzaG0tPmlkLAorICAgICAgICAgICAgICAgICAgICAgICAiZG9tYWluIHRy aWVkIHRvIG1hcCB0aGUgc2FtZSBJRCB0d2ljZS4iKTsKKyAgICAgICAgICAgIHJjID0gRVJST1Jf RkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgLyogbG9v ayBhdCB0aGUgbWFzdGVyIGluZm8gYW5kIHNlZSBpZiB3ZSBjb3VsZCBkbyB0aGUgbWFwcGluZyAq LworICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wcm90Iiwgc3NobV9wYXRo KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4c192YWx1ZSk7CisgICAg ICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIGxpYnhsX3NzaG1fcHJvdF9mcm9tX3N0cmlu Zyh4c192YWx1ZSwgJm1hc3Rlcl9zc2htLnByb3QpOworCisgICAgICAgIHJjID0gbGlieGxfX3hz X3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHQ1NQUklOVEYoIiVzL2JlZ2luIiwgc3NobV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZ4c192YWx1ZSk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7Cisg ICAgICAgIG1hc3Rlcl9zc2htLmJlZ2luID0gc3RydG91bGwoeHNfdmFsdWUsIE5VTEwsIDE2KTsK KworICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9zaXplIiwgc3NobV9wYXRo KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4c192YWx1ZSk7CisgICAg ICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIG1hc3Rlcl9zc2htLnNpemUgPSBzdHJ0b3Vs bCh4c192YWx1ZSwgTlVMTCwgMTYpOworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hl Y2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklO VEYoIiVzL21hc3RlciIsIHNzaG1fcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmeHNfdmFsdWUpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICBt YXN0ZXJfZG9taWQgPSBzdHJ0b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOworCisgICAgICAgIGlm IChzc2htLT5wcm90ID09IExJQlhMX1NTSE1fUFJPVF9VTktOT1dOKQorICAgICAgICAgICAgc3No bS0+cHJvdCA9IG1hc3Rlcl9zc2htLnByb3Q7CisKKyAgICAgICAgLyogY2hlY2sgaWYgdGhlIHNs YXZlIGlzIGFza2luZyB0b28gbXVjaCBwZXJtaXNzaW9uICovCisgICAgICAgIGlmIChtYXN0ZXJf c3NobS5wcm90IDwgc3NobS0+cHJvdCkgeworICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwg c3NobS0+aWQsICJzbGF2ZSBpcyBhc2tpbmcgdG9vIG11Y2ggcGVybWlzc2lvbi4iKTsKKyAgICAg ICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAg fQorCisgICAgICAgIC8qIGFsbCBjaGVja3MgcGFzc2VkLCBkbyB0aGUgam9iICovCisgICAgICAg IGlmICghaXNyZXRyeSkgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc3NobV9kb19tYXAoZ2Ms IG1hc3Rlcl9kb21pZCwgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzc2htLCAmbWFzdGVyX3NzaG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtYXBwZWQsICZubWFwcGVkKTsKKyAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAg ICAgIH0KKworICAgICAgICAvKiB3cml0ZSB0aGUgcmVzdWx0IHRvIHhlbnN0b3JlIGFuZCBjb21t aXQgKi8KKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywgeHQsIGRvbV9y b2xlX3BhdGgsICJzbGF2ZSIpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICBy YyA9IGxpYnhsX194c193cml0ZXYoZ2MsIHh0LCBzbGF2ZV9wYXRoLCBlbnRzKTsKKyAgICAgICAg aWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgcmMgPSBsaWJ4bF9fc3NobV9pbmNyZWYoZ2MsIHh0 LCBzc2htX3BhdGgpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJjID0g bGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnh0KTsKKyAgICAgICAgaWYgKCFyYykg YnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgICAgICBpc3JldHJ5ID0g dHJ1ZTsKKyAgICB9CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgaWYgKHJjKSB7CisgICAgICAg IC8qIHJvbGwgYmFjayBzdWNjZXNzZnVsbHkgbWFwcGVkIHBhZ2VzICovCisgICAgICAgIFNTSE1f RVJST1IoZG9taWQsIHNzaG0tPmlkLCAiZmFpbGVkIHRvIG1hcCBzb21lIHBhZ2VzLCBjYW5jZWxs aW5nLiIpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm1hcHBlZDsgaSsrKSB7CisgICAgICAg ICAgICB4Y19kb21haW5fcmVtb3ZlX2Zyb21fcGh5c21hcChDVFgtPnhjaCwgZG9taWQsIG1hcHBl ZFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fYWJv cnQoZ2MsICZ4dCk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX3Nz aG1fYWRkX21hc3RlcihsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htKQoreworICAgIGlu dCByYzsKKyAgICBjb25zdCBjaGFyICpzc2htX3BhdGgsICpkb21fcGF0aCwgKmRvbV9yb2xlX3Bh dGg7CisgICAgY2hhciAqZW50c1sxM107CisgICAgc3RydWN0IHhzX3Blcm1pc3Npb25zIG5vcGVy bTsKKyAgICB4c190cmFuc2FjdGlvbl90IHh0ID0gWEJUX05VTEw7CisKKyAgICBzc2htX3BhdGgg PSBTU0hNX1BBVEgoc3NobS0+aWQpOworICAgIGRvbV9wYXRoID0gbGlieGxfX3hzX2dldF9kb21w YXRoKGdjLCBkb21pZCk7CisgICAgLyogdGhlIGRvbWFpbiBzaG91bGQgYmUgaW4geGVuc3RvcmUg Ynkgbm93ICovCisgICAgYXNzZXJ0KGRvbV9wYXRoKTsKKyAgICBkb21fcm9sZV9wYXRoID0gR0NT UFJJTlRGKCIlcy9zdGF0aWNfc2htLyVzL3JvbGUiLCBkb21fcGF0aCwgc3NobS0+aWQpOworCisg ICAgLyogcHJlcGFyZSB0aGUgeGVuc3RvcmUgZW50cmllcyAqLworICAgIGVudHNbMF0gPSAibWFz dGVyIjsKKyAgICBlbnRzWzFdID0gR0NTUFJJTlRGKCIlIlBSSXUzMiwgZG9taWQpOworICAgIGVu dHNbMl0gPSAiYmVnaW4iOworICAgIGVudHNbM10gPSBHQ1NQUklOVEYoIjB4JSJQUkl4NjQsIHNz aG0tPmJlZ2luKTsKKyAgICBlbnRzWzRdID0gInNpemUiOworICAgIGVudHNbNV0gPSBHQ1NQUklO VEYoIjB4JSJQUkl4NjQsIHNzaG0tPnNpemUpOworICAgIGVudHNbNl0gPSAicHJvdCI7CisgICAg ZW50c1s3XSA9IGxpYnhsX19zdHJkdXAoZ2MsIGxpYnhsX3NzaG1fcHJvdF90b19zdHJpbmcoc3No bS0+cHJvdCkpOworICAgIGVudHNbOF0gPSAiY2FjaGVfcG9saWN5IjsKKyAgICBlbnRzWzldID0g bGlieGxfX3N0cmR1cChnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zc2ht X2NhY2hlcG9saWN5X3RvX3N0cmluZyhzc2htLT5jYWNoZV9wb2xpY3kpKTsKKyAgICBlbnRzWzEw XSA9ICJ1c2VyY250IjsKKyAgICBlbnRzWzExXSA9ICIxIjsKKyAgICBlbnRzWzEyXSA9IE5VTEw7 CisKKyAgICAvKiBjb3VsZCBvbmx5IGJlIGFjY2Vzc2VkIGJ5IERvbTAgKi8KKyAgICBub3Blcm0u aWQgPSAwOworICAgIG5vcGVybS5wZXJtcyA9IFhTX1BFUk1fTk9ORTsKKworICAgIGZvciAoOzsp IHsKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ4dCk7Cisg ICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgaWYgKCFsaWJ4bF9feHNfcmVhZChn YywgeHQsIHNzaG1fcGF0aCkpIHsKKyAgICAgICAgICAgIC8qIGV2ZXJ5IElEIGNhbiBhcHBlYXIg aW4gZWFjaCBkb21haW4gYXQgbW9zdCBvbmNlICovCisgICAgICAgICAgICBpZiAobGlieGxfX3hz X3JlYWQoZ2MsIHh0LCBkb21fcm9sZV9wYXRoKSkgeworICAgICAgICAgICAgICAgIFNTSE1fRVJS T1IoZG9taWQsIHNzaG0tPmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImRvbWFpbiB0 cmllZCB0byBtYXAgdGhlIHNhbWUgSUQgdHdpY2UuIik7CisgICAgICAgICAgICAgICAgcmMgPSBF UlJPUl9GQUlMOworICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgfQorICAg ICAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywgeHQsIGRvbV9yb2xlX3Bh dGgsICJtYXN0ZXIiKTsKKyAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7OworCisgICAgICAg ICAgICBsaWJ4bF9feHNfbWtub2QoZ2MsIHh0LCBzc2htX3BhdGgsICZub3Blcm0sIDEpOworICAg ICAgICAgICAgbGlieGxfX3hzX3dyaXRldihnYywgeHQsIHNzaG1fcGF0aCwgZW50cyk7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlkLCBzc2htLT5pZCwgImNh biBvbmx5IGhhdmUgb25lIG1hc3Rlci4iKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsK KyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9f eHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmeHQpOworICAgICAgICBpZiAoIXJjKSBicmVhazsK KyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSAwOworb3V0 OgorICAgIGxpYnhsX194c190cmFuc2FjdGlvbl9hYm9ydChnYywgJnh0KTsKKyAgICByZXR1cm4g cmM7Cit9CisKK2ludCBsaWJ4bF9fc3NobV9hZGQobGlieGxfX2djICpnYywgIHVpbnQzMl90IGRv bWlkLAorICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htcywgaW50IGxl bikKK3sKKyAgICBpbnQgcmMsIGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsK KyAgICAgICAgaWYgKHNzaG1zW2ldLnJvbGUgPT0gTElCWExfU1NITV9ST0xFX1NMQVZFKSB7Cisg ICAgICAgICAgICByYyA9IGxpYnhsX19zc2htX2FkZF9zbGF2ZShnYywgZG9taWQsIHNzaG1zK2kp OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc3NobV9hZGRfbWFz dGVyKGdjLCBkb21pZCwgc3NobXMraSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjKSAgcmV0 dXJuIHJjOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKgorICogTG9jYWwgdmFyaWFi bGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1v ZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF94ODYu YyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jCmluZGV4IGFiODg1NjIuLmRkM2RlOTYgMTAwNjQ0 Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3g4 Ni5jCkBAIC02MTksNiArNjE5LDI1IEBAIHZvaWQgbGlieGxfX2FyY2hfZG9tYWluX2J1aWxkX2lu Zm9fYWNwaV9zZXRkZWZhdWx0KAogICAgIGxpYnhsX2RlZmJvb2xfc2V0ZGVmYXVsdCgmYl9pbmZv LT5hY3BpLCB0cnVlKTsKIH0KIAorYm9vbCBsaWJ4bF9fYXJjaF9kb21haW5fc3VwcG9ydF9zc2ht KGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8pCit7CisgICAgLyogRklYTUU6 IE1hcmsgdGhpcyBhcyB1bnN1cHBvcnRlZCBmb3IgY2FsbGluZyBwMm1fYWRkX2ZvcmVpZ24gb24g dHdvCisgICAgICogRG9tVSdzIGlzIGN1cnJlbnRseSBub3QgYWxsb3dkIG9uIHg4Niwgc2VlIHRo ZSBjb21tZW50cyBpbgorICAgICAqIHg4Ni9tbS9wMm0uYzogcDJtX2FkZF9mb3JlaWduLgorICAg ICAqLworICAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBsaWJ4bF9fYXJjaF9kb21haW5fc3No bV9jYWNoZXBvbGljeV9zZXRkZWZhdWx0KGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAg aWYgKHNzaG0tPmNhY2hlX3BvbGljeSA9PSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1VOS05PV04p CisgICAgICAgIHNzaG0tPmNhY2hlX3BvbGljeSA9IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfWDg2 X05PUk1BTDsKKyAgICBpZiAoc3NobS0+Y2FjaGVfcG9saWN5IDwgTElCWExfU1NITV9DQUNIRVBP TElDWV9YODZfTk9STUFMKQorICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisKKyAgICByZXR1 cm4gMDsKK30KKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKLS0gCjEuOS4x CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRl dmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==