From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id D766C89DBC for ; Mon, 23 Dec 2019 16:01:28 +0000 (UTC) From: Stanislav Lisovskiy Date: Mon, 23 Dec 2019 17:58:48 +0200 Message-Id: <20191223155848.16208-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5] tools: Add an intel_dbuf_map tool List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: martin.peres@intel.com, juha-pekka.heikkila@intel.com List-ID: QXMgaW4gbW9kZXJuIHBsYXRmb3JtcyBtb3JlIERpc3BsYXkgYnVmZmVyCnNsaWNlcy9waXBlcyBh cmUgY29taW5nLCB3aGljaCBoYXZlIGRpZmZlcmVudApwaXBlIGFmZmluaXRpZXMgYW5kIG90aGVy IGNvbnN0cmFpbnRzLCBzbyBCU3BlYwpjb250YWlucyB0aGVpciBjb25uZWN0aW9uIGluIGZvcm0g b2YgYSBHcmFwaC4KClNvIHdlIGNhbiBnZW5lcmF0ZSBvcHRpbWFsIERCdWYgYXNzaWdubWVudCwK ZnJvbSB0aGUgZ3JhcGggd2hpY2ggd2UgaGF2ZSBpbiBCU3BlYywgdG8gYXZvaWQKbWFudWFsIGNh bGN1bGF0aW9ucyBwcm9uZSB0byBodW1hbiBlcnJvciBhbmQKY29weS1wYXN0aW5nLiBUaGUgZ2Vu ZXJhdGVkIHRhYmxlIGlzIGluIEMgZm9ybQphbmQgY2FuIGJlIHVzZWQgaW4gaTkxNSBkcml2ZXIg cmlnaHRhd2F5IGFuZCBhbHNvCmZvciB2ZXJpZmljYXRpb24uCgp2MjogUmVtb3ZlZCB1bnVzZWQg aSwgaiwgbWFkZSBzb21lIGZ1bmN0aW9ucyBzdGF0aWMsCiAgICB0byBtYWtlIENJIGNoZWNrZXJz IGEgYml0IGhhcHBpZXIuIEFsc28gaGFkIHRvCiAgICBjaGFuZ2UgSUdUX0xJU1QgdG8gSUdUX0xJ U1RfSEVBRCBhbmQgb3RoZXIgc3R1ZmYsCiAgICBhcyBmdW5jdGlvbnMgc2VlbSB0byBiZSByZW5h bWVkIGluIGxhdGVzdCBtYXN0ZXIuCgp2MzogQWRkZWQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAi LS1ncmFwaCIgYW5kCiAgICAic2xpY2VzX3Blcl9waXBlIiB3aGljaCBhbGxvdyB0byBkZWZpbmUg YW5kCiAgICBnZXQgREJ1ZiBhc3NpZ25tZW50IGZyb20gZ3JhcGggd2l0aG91dCByZWNvbXBpbGlu ZwogICAgdGhlIHRvb2wsIGJ1dCByaWdodCBhd2F5LgogICAgRXhhbXBsZSB1c2FnZToKICAgIGlu dGVsX2RidWZfbWFwIC0tZ3JhcGggUElQRV9BLURCVUZfUzEtREJVRl9TMi1QSVBFX0ItUElQRV9D IC0tc2xpY2VzX3Blcl9waXBlIDIKCiAgICBHZW5lcmF0ZXMgb3V0cHV0OgogICAgR3JhcGg6CiAg ICBUeXBlIFBJUEUgaWQgMAogICAgICAgICgxKS0+CiAgICAgICAgICAgICBUeXBlIERCVUZfU0xJ Q0UgaWQgMAogICAgICAgICAgICAgICAgKDEpLT4KICAgICAgICAgICAgICAgICAgICBUeXBlIERC VUZfU0xJQ0UgaWQgMQogICAgICAgICAgICAgICAgICAgICAgICAoMSktPgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgVHlwZSBQSVBFIGlkIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoMSktPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIFBJUEUg aWQgMgogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgMyh0b3RhbCBjb21iaW5hdGlv bnMgMSk6CiAgICB7IEJJVChQSVBFX0EpLCB7IERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQsIDAs IDAsIDAgfSB9LAogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgMyh0b3RhbCBjb21i aW5hdGlvbnMgMSk6CiAgICB7IEJJVChQSVBFX0IpLCB7IDAsIERCVUZfUzJfQklUIHwgREJVRl9T MV9CSVQsIDAsIDAgfSB9LAogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgMih0b3Rh bCBjb21iaW5hdGlvbnMgMik6CiAgICB7IEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQiksIHsgREJV Rl9TMV9CSVQsIERCVUZfUzJfQklULCAwLCAwIH0gfSwKICAgIENvbWJpbmF0aW9uIHdpdGggbGVh c3Qgd2VpZ2h0IDUodG90YWwgY29tYmluYXRpb25zIDEpOgogICAgeyBCSVQoUElQRV9DKSwgeyAw LCAwLCBEQlVGX1MyX0JJVCB8IERCVUZfUzFfQklULCAwIH0gfSwKICAgIENvbWJpbmF0aW9uIHdp dGggbGVhc3Qgd2VpZ2h0IDModG90YWwgY29tYmluYXRpb25zIDIpOgogICAgeyBCSVQoUElQRV9B KSB8IEJJVChQSVBFX0MpLCB7IERCVUZfUzFfQklULCAwLCBEQlVGX1MyX0JJVCwgMCB9IH0sCiAg ICBDb21iaW5hdGlvbiB3aXRoIGxlYXN0IHdlaWdodCA0KHRvdGFsIGNvbWJpbmF0aW9ucyAyKToK ICAgIHsgQklUKFBJUEVfQikgfCBCSVQoUElQRV9DKSwgeyAwLCBEQlVGX1MyX0JJVCwgREJVRl9T MV9CSVQsIDAgfSB9LAogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgNCh0b3RhbCBj b21iaW5hdGlvbnMgNik6CiAgICB7IEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQikgfCBCSVQoUElQ RV9DKSwgeyBEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQsIERCVUZfUzJfQklULCAwIH0gfSwKCnY0 OiAtIE1pbm9yIHJlZmFjdG9yaW5nLCBzaW1wbGlmaWVkIGFsZ29yaXRobSwgcmVtb3ZlZCByZWR1 bmRhbnQgbGlzdAogICAgICB1c2FnZQogICAgLSBGaXhlZCB0aXRsZQogICAgLSBBZGRlZCBkZWJ1 ZyBvcHRpb24KICAgIC0gUmVtb3ZlZCB1bm5lZWRlZCBBUlJBWV9TSVpFIGRlZmluaXRpb24sIHdo aWNoIGFscmVhZHkgZXhpc3RzCiAgICAgIChKdWhhLVBla2thIEhlaWtraWzDpCkKCnY1OiBTd2l0 Y2hlZCB0byBuYW1lZCBwaXBlIGFycmF5IGluaXRpYWxpemF0aW9uLCB0byBtYXRjaCBjdXJyZW50 CiAgICBrZXJuZWwgY29kZS4KClNpZ25lZC1vZmYtYnk6IFN0YW5pc2xhdiBMaXNvdnNraXkgPHN0 YW5pc2xhdi5saXNvdnNraXlAaW50ZWwuY29tPgpDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5z eXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiB0b29scy9pbnRlbF9kYnVmX21hcC5jIHwgODg1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0b29scy9tZXNvbi5i dWlsZCAgICAgIHwgICAxICsKIDIgZmlsZXMgY2hhbmdlZCwgODg2IGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9pbnRlbF9kYnVmX21hcC5jCgpkaWZmIC0tZ2l0IGEvdG9v bHMvaW50ZWxfZGJ1Zl9tYXAuYyBiL3Rvb2xzL2ludGVsX2RidWZfbWFwLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjE0YTIwNDMxCi0tLSAvZGV2L251bGwKKysrIGIvdG9v bHMvaW50ZWxfZGJ1Zl9tYXAuYwpAQCAtMCwwICsxLDg4NSBAQAorLyoKKyAqIENvcHlyaWdodCDC qSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cisg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBTdGFuaXNsYXYgTGlzb3Zza2l5 IDxzdGFuaXNsYXYubGlzb3Zza2l5QGludGVsLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0 ZGxpYi5oPgorI2luY2x1ZGUgImlndC5oIgorCitlbnVtIE5vZGVUeXBlIHsKKwlEQlVGX1NMSUNF LAorCVBJUEUKK307CisKK2NvbnN0IGNoYXIgKm5vZGVfdHlwZV90b19zdHJbXSA9IHsgIkRCVUZf U0xJQ0UiLCAiUElQRSIgfTsKKworI2RlZmluZSBNQVhfQ09OTkVDVElPTlMgMTAKKyNkZWZpbmUg TUFYX05PREVTIDEwCisjZGVmaW5lIE1BWF9FREdFUyAoTUFYX05PREVTICogMikKKworc3RydWN0 IEdyYXBoRWRnZTsKKworLyoKKyAqIEdyYXBoIG5vZGUsIHdoaWNoIGNhbiBiZSBEQnVmIG9yIFBp cGUKKyAqLworc3RydWN0IEdyYXBoTm9kZSB7CisJaW50IGlkOworCWVudW0gTm9kZVR5cGUgdHlw ZTsKKwl1bnNpZ25lZCBpbnQgdXNlX2NvdW50OworCWludCB2aXNpdGVkOworCXN0cnVjdCBHcmFw aEVkZ2UgKmNvbm5lY3Rpb25zW01BWF9DT05ORUNUSU9OU107CisJaW50IG51bV9jb25uZWN0aW9u czsKK307CisKK3N0YXRpYyBzdHJ1Y3QgR3JhcGhOb2RlICphbGxfbm9kZXNbTUFYX05PREVTXTsK K3N0YXRpYyBzdHJ1Y3QgR3JhcGhFZGdlICphbGxfZWRnZXNbTUFYX0VER0VTXTsKK3N0YXRpYyBp bnQgbnVtX25vZGVzOworc3RhdGljIGludCBudW1fZWRnZXM7CisKKy8qCisgKiBHcmFwaCBlZGdl LCB3aGljaCBjb25uZWN0cyBHcmFwaCBub2RlcworICogYW5kIGhhcyBhIHdlaWdodCBwcm9wZXJ0 eS4KKyAqLworc3RydWN0IEdyYXBoRWRnZSB7CisJdW5zaWduZWQgaW50IHdlaWdodDsKKwlzdHJ1 Y3QgR3JhcGhOb2RlICpub2RlOworfTsKKworc3RhdGljIHN0cnVjdCBHcmFwaE5vZGUgKmNyZWF0 ZV9ncmFwaF9ub2RlKGVudW0gTm9kZVR5cGUgdHlwZSwgaW50IGlkKQoreworCXN0cnVjdCBHcmFw aE5vZGUgKm5vZGUgPSAwOworCisJaWYgKG51bV9ub2RlcyA+PSBNQVhfTk9ERVMpIHsKKwkJaWd0 X2luZm8oIlRvbyBtdWNoIG5vZGVzICVkIiwgbnVtX25vZGVzKTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJbm9kZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSkpOworCW5vZGUtPnR5 cGUgPSB0eXBlOworCW5vZGUtPmlkID0gaWQ7CisJbm9kZS0+dXNlX2NvdW50ID0gMDsKKwlub2Rl LT52aXNpdGVkID0gMDsKKwltZW1zZXQobm9kZS0+Y29ubmVjdGlvbnMsIDAsCisJCQlNQVhfQ09O TkVDVElPTlMgKiBzaXplb2Yoc3RydWN0IEdyYXBoRWRnZSAqKSk7CisJbm9kZS0+bnVtX2Nvbm5l Y3Rpb25zID0gMDsKKworCWFsbF9ub2Rlc1tudW1fbm9kZXNdID0gbm9kZTsKKwludW1fbm9kZXMr KzsKKworCXJldHVybiBub2RlOworfQorCitzdGF0aWMgc3RydWN0IEdyYXBoRWRnZSAqY3JlYXRl X2dyYXBoX2VkZ2UoaW50IHdlaWdodCwgc3RydWN0IEdyYXBoTm9kZSAqbm9kZSkKK3sKKwlzdHJ1 Y3QgR3JhcGhFZGdlICplZGdlID0gMDsKKworCWlmIChudW1fZWRnZXMgPj0gTUFYX0VER0VTKSB7 CisJCWlndF9pbmZvKCJUb28gbXVjaCBlZGdlcyAlZCIsIG51bV9lZGdlcyk7CisJCXJldHVybiBO VUxMOworCX0KKworCWVkZ2UgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBHcmFwaEVkZ2UpKTsKKwor CWVkZ2UtPm5vZGUgPSBub2RlOworCWVkZ2UtPndlaWdodCA9IHdlaWdodDsKKworCWFsbF9lZGdl c1tudW1fZWRnZXNdID0gZWRnZTsKKwludW1fZWRnZXMrKzsKKworCXJldHVybiBlZGdlOworfQor CitzdGF0aWMgdm9pZCBjb25uZWN0X25vZGVzKHN0cnVjdCBHcmFwaE5vZGUgKm5vZGUxLCBzdHJ1 Y3QgR3JhcGhOb2RlICpub2RlMiwgaW50IHdlaWdodCkKK3sKKwlzdHJ1Y3QgR3JhcGhFZGdlICpl ZGdlMTsKKwlzdHJ1Y3QgR3JhcGhFZGdlICplZGdlMjsKKworCWlmIChub2RlMS0+bnVtX2Nvbm5l Y3Rpb25zID49IE1BWF9DT05ORUNUSU9OUykgeworCQlpZ3RfaW5mbygiTm9kZSAlZCBoYXMgdG9v IG11Y2ggY29ubmVjdGlvbnNcbiIsIG5vZGUxLT5pZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAo bm9kZTItPm51bV9jb25uZWN0aW9ucyA+PSBNQVhfQ09OTkVDVElPTlMpIHsKKwkJaWd0X2luZm8o Ik5vZGUgJWQgaGFzIHRvbyBtdWNoIGNvbm5lY3Rpb25zXG4iLCBub2RlMi0+aWQpOworCQlyZXR1 cm47CisJfQorCisJZWRnZTEgPSBjcmVhdGVfZ3JhcGhfZWRnZSh3ZWlnaHQsIG5vZGUxKTsKKwll ZGdlMiA9IGNyZWF0ZV9ncmFwaF9lZGdlKHdlaWdodCwgbm9kZTIpOworCisJbm9kZTEtPmNvbm5l Y3Rpb25zW25vZGUxLT5udW1fY29ubmVjdGlvbnNdID0gZWRnZTI7CisJbm9kZTEtPm51bV9jb25u ZWN0aW9ucysrOworCW5vZGUyLT5jb25uZWN0aW9uc1tub2RlMi0+bnVtX2Nvbm5lY3Rpb25zXSA9 IGVkZ2UxOworCW5vZGUyLT5udW1fY29ubmVjdGlvbnMrKzsKK30KKworc3RhdGljIHZvaWQgcmVz ZXRfbm9kZShzdHJ1Y3QgR3JhcGhOb2RlICpub2RlKQoreworCW5vZGUtPnVzZV9jb3VudCA9IDA7 CisJbm9kZS0+dmlzaXRlZCA9IDA7CisJbWVtc2V0KG5vZGUtPmNvbm5lY3Rpb25zLCAwLAorCQlN QVhfQ09OTkVDVElPTlMgKiBzaXplb2Yoc3RydWN0IEdyYXBoRWRnZSAqKSk7CisJbm9kZS0+bnVt X2Nvbm5lY3Rpb25zID0gMDsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9ub2RlKHN0cnVjdCBH cmFwaE5vZGUgKm5vZGUpCit7CisJZnJlZShub2RlKTsKK30KKworc3RhdGljIHZvaWQgZGVzdHJv eV9lZGdlKHN0cnVjdCBHcmFwaEVkZ2UgKmVkZ2UpCit7CisJZnJlZShlZGdlKTsKK30KKworc3Rh dGljIHZvaWQgZGVzdHJveV9hbGxfZWRnZXModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBudW1fZWRnZXM7IGkrKykgeworCQlkZXN0cm95X2VkZ2UoYWxsX2VkZ2VzW2ldKTsK Kwl9CisJbnVtX2VkZ2VzID0gMDsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9hbGxfbm9kZXMo dm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fbm9kZXM7IGkrKykgewor CQlkZXN0cm95X25vZGUoYWxsX25vZGVzW2ldKTsKKwl9CisJbnVtX25vZGVzID0gMDsKK30KKwor c3RhdGljIHZvaWQgcmVzZXRfYWxsX25vZGVzKHZvaWQpCit7CisJaW50IGk7CisKKwlkZXN0cm95 X2FsbF9lZGdlcygpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9ub2RlczsgaSsrKSB7CisJCXJl c2V0X25vZGUoYWxsX25vZGVzW2ldKTsKKwl9Cit9CisKKy8qCisgKiBUcmF2ZXJzZSBhbmQgdHJ5 IHRvIHByaW50IGdyYXBoIGluIGEKKyAqIHNvbWV3aGF0IGdyYXBoaWNhbCBmb3JtLgorICovCitz dGF0aWMgdm9pZCB0cmF2ZXJzZV9ncmFwaChzdHJ1Y3QgR3JhcGhOb2RlICpzdGFydF9ub2RlLAor CQkJICAgaW50IGRlcHRoKQoreworCWludCBpLCBzcGFjZTsKKworCWlmICghZGVwdGgpCisJCWln dF9pbmZvKCJHcmFwaDogXG4iKTsKKworCWZvciAoc3BhY2UgPSAwOyBzcGFjZSA8IGRlcHRoICog NDsgc3BhY2UrKykKKwkJaWd0X2luZm8oIiAiKTsKKworCXN0YXJ0X25vZGUtPnZpc2l0ZWQrKzsK KwlpZ3RfaW5mbygiVHlwZSAlcyBpZCAlZFxuIiwgbm9kZV90eXBlX3RvX3N0cltzdGFydF9ub2Rl LT50eXBlXSwKKwkJIHN0YXJ0X25vZGUtPmlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3RhcnRfbm9k ZS0+bnVtX2Nvbm5lY3Rpb25zOyBpKyspIHsKKwkJaWYgKCFzdGFydF9ub2RlLT5jb25uZWN0aW9u c1tpXS0+bm9kZS0+dmlzaXRlZCkgeworCQkJZm9yIChzcGFjZSA9IDA7IHNwYWNlIDwgKGRlcHRo ICsgMSkgKiA0OyBzcGFjZSsrKQorCQkJCWlndF9pbmZvKCIgIik7CisJCQlpZ3RfaW5mbygiKCVk KS0+IFxuIiwgc3RhcnRfbm9kZS0+Y29ubmVjdGlvbnNbaV0tPndlaWdodCk7CisJCQl0cmF2ZXJz ZV9ncmFwaChzdGFydF9ub2RlLT5jb25uZWN0aW9uc1tpXS0+bm9kZSwgZGVwdGgrMik7CisJCQlz dGFydF9ub2RlLT5jb25uZWN0aW9uc1tpXS0+bm9kZS0+dmlzaXRlZC0tOworCQl9CisJfQorfQor Citib29sIGRlYnVnID0gZmFsc2U7CisKK3N0YXRpYyB2b2lkIHByaW50X25vZGVfZGVidWcoc3Ry dWN0IEdyYXBoTm9kZSAqbm9kZSkKK3sKKwlpZ3RfaW5mbygiJXMgbm9kZSAlZCB2aXNpdGVkICVk IHVzZSBjb3VudCAlZFxuIiwKKwkJIG5vZGVfdHlwZV90b19zdHJbbm9kZS0+dHlwZV0sIG5vZGUt PmlkLAorCQkgbm9kZS0+dmlzaXRlZCwKKwkJIG5vZGUtPnVzZV9jb3VudCk7Cit9CisKKy8qCisg KiBUaGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IHNlYXJjaGVzIGZvciBhIGZyZWUgREJ1ZiBzbGlj ZQorICogZm9yIGNvcnJlc3BvbmRlbnQgcGlwZSwgYmFzZWQgb24gZGlmZmVyZW50IGNvbnN0cmFp bnRzLCBsaWtlCisgKiB3ZWlnaHQsIHVzYWdlIGNvdW50LiBUaGlzIGFsZ29yaXRobSBpcyAiZ3Jl ZWR5IiB3aGljaCBtZWFucworICogdGhhdCBpdCBhY2NvdW50cyBmb3IgbG9jYWwgb3B0aW11bSBv bmx5LCB3aGljaCBtZWFucyB0aGF0CisgKiB0b3RhbCBjb21wYXJpc29uIGhhcyB0byBiZSBkb25l IGluIHRoZSBlbmQuCisgKiBJbiBncmFwaCB0aGVvcnkgdGhpcyBpcyBjYWxsZWQgYnJlYWR0aC1m aXJzdCBzZWFyY2guCisgKiBBcyB0aGlzIGFsZ29yaXRobSB0cmllcyB0byB1dGlsaXplIG5lYXJl c3QgbmVpZ2hib3VycyBmaXJzdAorICogaXQgYWxsb3dzIHRvIHNraXAgbWFueSB1bnJlcXVpcmVk IHBhdGggY2FsY3VsYXRpb25zIHdoaWNoCisgKiB3b3VsZCBiZSBuZWVkZWQgaWYgd2UgcmVhbGx5 IHdvdWxkIGJ1aWxkIGEgbWF0cml4IGxpa2U6CisgKiAgIFBpcGUgLSBEQlVGCisgKiAgICAgICAg IDAgICAgMQorICogICAwICAgICAxICAgIDIKKyAqCisgKiAgIDEgICAgIDIgICAgMQorICogVGhl biB3ZSB3b3VsZCBoYXZlIHRvIGdvIHRob3VyZ2ggYWxsIE4gRGJ1ZiAqIE4gUGlwZXMgKiBOIFBp cGVzIQorICogdG8gY2hlY2sgYWxsIHBvc3NpYmxlIHBpcGUgYWNjb21vZGF0aW9ucy4KKyAqIEZv ciBhYm92ZSBtYXRyaXggdGhlIGFsZ29yaXRobSB3b3VsZCBpbW1lZGlhdGVseSByZXR1cm4gc2xp Y2UgMAorICogZm9yIHBpcGUgMCBhbmQgc2xpY2UgMSBmb3IgcGlwZSAxIGFzIG5lYXJlc3QgbmVp Z2hib3Vycywgc2tpcHBpbmcKKyAqIHVubmVjY2Vzc2FyeSBwYXRocyBmb3IgcGlwZTAgLSBzbGlj ZTEsIHBpcGUxIC0gc2xpY2UwLgorICogQW55d2F5IGZvciBtb3JlIGNvbXBsZXggY2FzZXMsIGxp a2U6CisgKiAgUGlwZSAtIERCVUYKKyAqICAgICAgICAgMCAgICAxCisgKiAgIDAgICAgIDEgICAg MQorICoKKyAqICAgMSAgICAgMiAgICAxCisgKiBjaGVja2luZyBmb3IgYWxsIHBvc3NpYmxlIGFj Y29tb2RhdGlvbnMgaXMgc3RpbGwgbmVlZGVkLiBIb3dldmVyCisgKiBuZWFyZXN0ICJncmVlZHki IGFwcHJvYWNoIGZpcnN0IHN0aWxsIGFsbG93cyB0byBmaWx0ZXIgb3V0IHNvbWUgb2YKKyAqIHRo ZSByZWR1bmRhbnQgY29tYmluYXRpb25zLCB3aGljaCB3b3VsZCBiZSBzZWVuIGlmIGZ1bGwgbWF0 cml4IGlzIGJ1aWx0LgorICogSW5zdGVhZCB3ZSBzYXZlIHRpbWUgYnkganVzdCBjaG9vc2luZyB0 aGUgbmVhcmVzdCBvbmVzIGZpcnN0IHdoaWNoCisgKiBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSBsb3dl ciBjb3N0KGdyZWVkeSBhcHByb2FjaCksIGhvd2V2ZXIgdGhlbgorICogd2Ugd2lsbCBzdGlsbCBj aGVjayBhbGwgcG9zc2libGUgYWNjb21vZGF0aW9ucyBhcyB3ZSB3b3VsZCBkbyB3aXRoCisgKiBm dWxsIG1hdHJpeCBhcHByb2FjaC4KKyAqLworc3RhdGljIHN0cnVjdCBHcmFwaE5vZGUgKmZpbmRf c2xpY2VfZm9yX3BpcGUoc3RydWN0IEdyYXBoTm9kZSAqc3RhcnRfbm9kZSwKKwkJCQkJICAgICBp bnQgYWNjX3dlaWdodCwgaW50IG1heF91c2VfY291bnQsCisJCQkJCSAgICAgdW5zaWduZWQgaW50 ICp0b3RhbF93ZWlnaHQsCisJCQkJCSAgICAgaW50IGRlcHRoLAorCQkJCQkgICAgIGludCAqc2tp cCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgR3JhcGhOb2RlICpub2RlID0gTlVMTDsKKworCWlmIChk ZWJ1ZykgeworCQlpZ3RfaW5mbygiRW50ZXJpbmcgbm9kZShyZXN1cnNpb24gZGVwdGggJWQgc2tp cHMgJWQpOiBcbiIsCisJCQkgZGVwdGgsICpza2lwKTsKKwkJcHJpbnRfbm9kZV9kZWJ1ZyhzdGFy dF9ub2RlKTsKKwkJaWd0X2luZm8oIkFjY3VtdWxhdGVkIHdlaWdodCAlZCBtYXggdXNlIGNvdW50 ICVkXG4iLAorCQkJIGFjY193ZWlnaHQsIG1heF91c2VfY291bnQpOworCX0KKworCXN0YXJ0X25v ZGUtPnZpc2l0ZWQrKzsKKworCS8qCisJICogSXRlcmF0ZSB0aHJvdWdoIG5laWdoYm91cmluZyBz bGljZXMoZ3JhcGggYnJlYWR0aC1maXJzdCBzZWFyY2gpLAorCSAqIGNoZWNraW5nIGlmIGl0J3Mg dXNlIGNvdW50IGFsbG93cyB1c2FnZSBhbmQgc2tpcCBpZiBuZWVkZWQsCisJICogc2tpcHMgYXJl IG5lZWRlZCB3aGVuIHdlIHVzZSBtdWx0aXBsZSBzbGljZXMgZm9yCisJICogc2FtZSBwaXBlIHRv IHByZXZlbnQgYWxnb3JpdGhtIGZyb20gcmV0dXJuaW5nIHRoZQorCSAqIHNhbWUgREJ1Zi4KKwkg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgc3RhcnRfbm9kZS0+bnVtX2Nvbm5lY3Rpb25zOyBpKyspIHsK KwkJc3RydWN0IEdyYXBoRWRnZSAqY3VyX2VkZ2UgPSBzdGFydF9ub2RlLT5jb25uZWN0aW9uc1tp XTsKKworCQlpZiAoZGVidWcpIHsKKwkJCWlndF9pbmZvKCIgICAgTmVpZ2hib3VyIG5vZGU6ICIp OworCQkJcHJpbnRfbm9kZV9kZWJ1ZyhjdXJfZWRnZS0+bm9kZSk7CisJCX0KKworCQlpZiAoY3Vy X2VkZ2UtPm5vZGUtPnR5cGUgIT0gREJVRl9TTElDRSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChj dXJfZWRnZS0+bm9kZS0+dXNlX2NvdW50IDwgbWF4X3VzZV9jb3VudCkgeworCQkJaWYgKCEoKnNr aXApKSB7CisJCQkJY3VyX2VkZ2UtPm5vZGUtPnVzZV9jb3VudCsrOworCQkJCSp0b3RhbF93ZWln aHQgPSBhY2Nfd2VpZ2h0ICsgY3VyX2VkZ2UtPndlaWdodDsKKwkJCQlub2RlID0gY3VyX2VkZ2Ut Pm5vZGU7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQlpZiAoKnNraXApCisJCQkoKnNr aXApLS07CisJfQorCisJLyoKKwkgKiBJZiBjb3VsZG4ndCBmaW5kIHN1aXRhYmxlIERCdWYgbm9k ZSBmcm9tIG91cgorCSAqIG5laWdoYm91cnMsIGhhdmUgdG8gY29udGludWUgZnVydGhlciwgY2hl Y2tpbmcKKwkgKiB2aXNpdGVkIGZsYWcsIHRvIHByZXZlbnQgbG9vcHMuCisJICovCisJZm9yIChp ID0gMDsgaSA8IHN0YXJ0X25vZGUtPm51bV9jb25uZWN0aW9uczsgaSsrKSB7CisJCXN0cnVjdCBH cmFwaEVkZ2UgKmN1cl9lZGdlID0gc3RhcnRfbm9kZS0+Y29ubmVjdGlvbnNbaV07CisKKwkJaWYg KGN1cl9lZGdlLT5ub2RlLT52aXNpdGVkKQorCQkJY29udGludWU7CisKKwkJbm9kZSA9IGZpbmRf c2xpY2VfZm9yX3BpcGUoY3VyX2VkZ2UtPm5vZGUsCisJCQkJCSAgIGFjY193ZWlnaHQgKyBjdXJf ZWRnZS0+d2VpZ2h0LAorCQkJCQkgICBtYXhfdXNlX2NvdW50LCB0b3RhbF93ZWlnaHQsCisJCQkJ CSAgIGRlcHRoICsgMSwgc2tpcCk7CisJCWN1cl9lZGdlLT5ub2RlLT52aXNpdGVkLS07CisJCWlm IChub2RlKQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJaWYgKGRlYnVnKQorCQlpZ3RfaW5m bygiTGVhdmluZyBub2RlICVkXG4iLCBzdGFydF9ub2RlLT5pZCk7CisKKwkvKiBJZiB3ZSBhcmUg YXQgcmVjdXJzaW9uIGRlcHRoIDAgLSByZWxlYXNlIHRoZSByb290IG5vZGUgKi8KKwlpZiAoZGVw dGggPT0gMCkKKwkJc3RhcnRfbm9kZS0+dmlzaXRlZCA9IDA7CisKKwlyZXR1cm4gbm9kZTsKK30K Kworc3RhdGljIGludCBod2VpZ2h0MzIoaW50IG1hc2spCit7CisJaW50IGk7CisJaW50IGNvdW50 ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQlpZiAoKDE8PGkpICYgbWFzaykK KwkJCWNvdW50ICs9IDE7CisJcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lIEk5MTVfTUFYX1BJ UEVTIDQKKyNkZWZpbmUgSTkxNV9NQVhfU0xJQ0VTX1BFUl9QSVBFIDQKKyNkZWZpbmUgSTkxNV9N QVhfU0xJQ0VTIChJOTE1X01BWF9QSVBFUyAqIEk5MTVfTUFYX1NMSUNFU19QRVJfUElQRSkKKwor Y29uc3QgY2hhciAqcGlwZV9uYW1lc1tdID0geyAiUElQRV9BIiwgIlBJUEVfQiIsICJQSVBFX0Mi LCAiUElQRV9EIiB9OworY29uc3QgY2hhciAqc2xpY2VfbmFtZXNbXSA9IHsgIkRCVUZfUzEiLCAi REJVRl9TMiIsICJEQlVGX1MzIiwgIkRCVUZfUzQiIH07CisKK3N0YXRpYyBpbnQgZmFjdG9yaWFs KGludCBuKQoreworCWlmIChuIDw9IDEpCisJCXJldHVybiAxOworCXJldHVybiBuICogZmFjdG9y aWFsKG4gLSAxKTsKK30KKworc3RhdGljIHZvaWQgZG9fc3dhcChzdHJ1Y3QgR3JhcGhOb2RlICoq cGlwZV9ub2RlcywgaW50IG0sIGludCBuKQoreworCSooKHVuc2lnbmVkIGxvbmcgKilwaXBlX25v ZGVzICsgbSkgXj0gKigodW5zaWduZWQgbG9uZyAqKXBpcGVfbm9kZXMgKyBuKTsKKwkqKCh1bnNp Z25lZCBsb25nICopcGlwZV9ub2RlcyArIG4pIF49ICooKHVuc2lnbmVkIGxvbmcgKilwaXBlX25v ZGVzICsgbSk7CisJKigodW5zaWduZWQgbG9uZyAqKXBpcGVfbm9kZXMgKyBtKSBePSAqKCh1bnNp Z25lZCBsb25nICopcGlwZV9ub2RlcyArIG4pOworfQorCitzdHJ1Y3QgUGlwZU5vZGVzQ29tYmlu YXRpb24geworCXVuc2lnbmVkIGludCB0b3RhbF93ZWlnaHQ7CisJc3RydWN0IEdyYXBoTm9kZSAq cGlwZV9ub2Rlc1tJOTE1X01BWF9QSVBFU107CisJc3RydWN0IEdyYXBoTm9kZSAqc2xpY2VzW0k5 MTVfTUFYX1NMSUNFU107Cit9OworCitzdHJ1Y3QgSXRlcmF0ZUNvbnRleHQgeworCXN0cnVjdCBQ aXBlTm9kZXNDb21iaW5hdGlvbiBtaW5fY29tYjsKKwlpbnQgbWF4X3VzZV9jb3VudDsKKwlpbnQg bnVtX3BpcGVzOworCWludCBudW1fc2xpY2VzOworCWludCBzbGljZXNfcGVyX3BpcGU7CisJaW50 IG1heF9jb21iaW5hdGlvbnM7Cit9OworCitzdHJ1Y3QgUGlwZURCdWYgeworCXN0cnVjdCBHcmFw aE5vZGUgKnBpcGU7CisJc3RydWN0IEdyYXBoTm9kZSAqZGJ1ZltJOTE1X01BWF9TTElDRVNfUEVS X1BJUEVdOworfTsKKworc3RhdGljIHZvaWQgcHJpbnRfcGlwZV9ub2RlcyhzdHJ1Y3QgR3JhcGhO b2RlICoqcGlwZV9ub2RlcykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9NQVhf UElQRVM7IGkrKykgeworCQlpZiAoIXBpcGVfbm9kZXNbaV0pCisJCQlpZ3RfaW5mbygiKG51bGwp Iik7CisJCWVsc2UKKwkJCWlndF9pbmZvKCIlZCIsIHBpcGVfbm9kZXNbaV0tPmlkKTsKKwkJaWYg KCBpIDwgKEk5MTVfTUFYX1BJUEVTIC0gMSkpCisJCQlpZ3RfaW5mbygiICwiKTsKKwl9CisJaWd0 X2luZm8oIlxuIik7Cit9CisKKworc3RhdGljIHZvaWQgY29tcGFyZV93ZWlnaHQoc3RydWN0IEl0 ZXJhdGVDb250ZXh0ICpjdHgsCisJCQkgICBzdHJ1Y3QgUGlwZU5vZGVzQ29tYmluYXRpb24gKmNv bWIpCit7CisJdW5zaWduZWQgaW50IHdlaWdodDsKKwlpbnQgaiA9IDA7CisJaW50IHBpcGUgPSAw OworCWludCBza2lwID0gMDsKKwlpbnQgc2xpY2VfbnVtID0gMDsKKworCWNvbWItPnRvdGFsX3dl aWdodCA9IDA7CisKKwlpZiAoZGVidWcpIHsKKwkJaWd0X2luZm8oIkNvbWJpbmF0aW9uOiAiKTsK KwkJcHJpbnRfcGlwZV9ub2Rlcyhjb21iLT5waXBlX25vZGVzKTsKKwl9CisKKwkvKgorCSAqIEdl dCBhIGZyZWUgREJ1ZiBzbGljZSBmb3IgZWFjaCBwaXBlLCB0aGVuCisJICogY2FsY3VsYXRlIHRv dGFsIHdlaWdodCwgd2hpY2ggd2lsbCBiZQorCSAqIHRoZW4gY29tcGFyZWQgdG8gbWluaW1hbCB3 ZWlnaHQgdG8gZmluZAorCSAqIGNvbWJpbmF0aW9uIHdpdGggdG90YWwgbWluaW1hbCB3ZWlnaHQu CisJICovCisJd2hpbGUgKHBpcGUgPCBJOTE1X01BWF9QSVBFUykgeworCQlpZiAoY29tYi0+cGlw ZV9ub2Rlc1twaXBlXSkgeworCQkJY29tYi0+c2xpY2VzW2pdID0KKwkJCSAgICBmaW5kX3NsaWNl X2Zvcl9waXBlKGNvbWItPnBpcGVfbm9kZXNbcGlwZV0sCisJCQkJCQkwLCBjdHgtPm1heF91c2Vf Y291bnQsCisJCQkJCQkmd2VpZ2h0LCAwLCAmc2tpcCk7CisJCQlpZiAoY29tYi0+c2xpY2VzW2pd KSB7CisJCQkJaWYgKGRlYnVnKQorCQkJCQlpZ3RfaW5mbygiRm91bmQgREJ1ZiBzbGljZSAlZCBm b3IgcGlwZSAlZFxuIiwKKwkJCQkJCSBjb21iLT5zbGljZXNbal0tPmlkLAorCQkJCQkJIGNvbWIt PnBpcGVfbm9kZXNbcGlwZV0tPmlkKTsKKwkJCQlpZiAoc2xpY2VfbnVtIDwgY3R4LT5zbGljZXNf cGVyX3BpcGUpCisJCQkJCXNraXArKzsKKwkJCQljb21iLT50b3RhbF93ZWlnaHQgKz0gd2VpZ2h0 OworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCQlzbGljZV9udW0rKzsKKworCQkJaWYgKHNsaWNl X251bSA+PSBjdHgtPnNsaWNlc19wZXJfcGlwZSkgeworCQkJCXNsaWNlX251bSA9IDA7CisJCQkJ cGlwZSsrOworCQkJCXNraXAgPSAwOworCQkJfQorCQkJaisrOworCQl9IGVsc2UgeworCQkJcGlw ZSsrOworCQkJaiArPSBjdHgtPnNsaWNlc19wZXJfcGlwZTsKKwkJCXNraXAgPSAwOworCQl9CisJ fQorCisJaWYgKGRlYnVnKQorCQlpZ3RfaW5mbygiVG90YWwgd2VpZ2h0ICVkXG4iLCBjb21iLT50 b3RhbF93ZWlnaHQpOworCisJZm9yIChqID0gMDsgaiA8IEk5MTVfTUFYX1NMSUNFUzsgaisrKSB7 CisJCWlmIChjb21iLT5zbGljZXNbal0pCisJCQljb21iLT5zbGljZXNbal0tPnVzZV9jb3VudCA9 IDA7CisJfQorCisJaWYgKGN0eC0+bWluX2NvbWIudG90YWxfd2VpZ2h0ID4gY29tYi0+dG90YWxf d2VpZ2h0KSB7CisJCW1lbWNweSgmY3R4LT5taW5fY29tYiwgY29tYiwKKwkJICAgICAgIHNpemVv ZihzdHJ1Y3QgUGlwZU5vZGVzQ29tYmluYXRpb24pKTsKKwl9Cit9CisKKy8qCisgKiBHZW5lcmF0 ZSBhbGwgcG9zc2libGUgY29tYmluYXRpb25zIGZvciBlbGVtZW50cyBpbgorICogcGlwZSBhcnJh eSh0b3RhbCBpcyBjYWxjdWxhdGVkIGFzIG4hKS4KKyAqLworc3RhdGljIHZvaWQgaXRlcmF0ZV9h bGxfY29tYmluYXRpb25zKHN0cnVjdCBJdGVyYXRlQ29udGV4dCAqY3R4LAorCQkJCSAgICAgc3Ry dWN0IEdyYXBoTm9kZSAqKnBpcGVfbm9kZXMsCisJCQkJICAgICBpbnQgc3RhcnQsIGludCBzdGVw LAorCQkJCSAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCBJdGVyYXRlQ29udGV4dCAqY3R4LAorCQkJ CSAgICAgc3RydWN0IFBpcGVOb2Rlc0NvbWJpbmF0aW9uICpjb21iKSkKK3sKKwlpbnQgaSwgajsK KwlzdHJ1Y3QgR3JhcGhOb2RlICpub2Rlc1tJOTE1X01BWF9QSVBFU107CisJc3RydWN0IFBpcGVO b2Rlc0NvbWJpbmF0aW9uIGNvbWI7CisKKwltZW1jcHkoY29tYi5waXBlX25vZGVzLCBwaXBlX25v ZGVzLAorCSAgICAgICBJOTE1X01BWF9QSVBFUyAqIHNpemVvZihzdHJ1Y3QgR3JhcGhOb2RlICop KTsKKwltZW1zZXQoY29tYi5zbGljZXMsIDAsCisJICAgICAgIEk5MTVfTUFYX1NMSUNFUyAqIHNp emVvZihzdHJ1Y3QgR3JhcGhOb2RlICopKTsKKworCWlmIChmdW5jKQorCQkoKmZ1bmMpKGN0eCwg JmNvbWIpOworCisJaWYgKChzdGVwID09IDApIHx8IChjdHgtPm51bV9waXBlcyA9PSAxKSkKKwkJ cmV0dXJuOworCisJZm9yIChqID0gc3RlcDsgaiA+IDA7IGotLSkgeworCQlmb3IgKGkgPSBzdGFy dDsgaSA8IEk5MTVfTUFYX1BJUEVTIC0gajsgaSsrKSB7CisJCQlpZiAoIXBpcGVfbm9kZXNbaV0g fHwgIXBpcGVfbm9kZXNbaSArIGpdKQorCQkJCWNvbnRpbnVlOworCQkJbWVtY3B5KG5vZGVzLCBw aXBlX25vZGVzLAorCQkJICAgICAgIEk5MTVfTUFYX1BJUEVTICogc2l6ZW9mKHN0cnVjdCBHcmFw aE5vZGUgKikpOworCQkJZG9fc3dhcChub2RlcywgaSwgaSArIGopOworCQkJaXRlcmF0ZV9hbGxf Y29tYmluYXRpb25zKGN0eCwgbm9kZXMsIGkgKyAxLAorCQkJCQkJIHN0ZXAgLSAxLCBmdW5jKTsK KwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhbmQgcHJpbnRz IG9wdGltYWwKKyAqIHdlaWdodC1iYXNlZCBEQnVmIGFzc2lnbm1lbnQgZm9yIGFjdGl2ZSBwaXBl cy4KKyAqLworc3RhdGljIGludAorcHJpbnRfZGJ1Zl9tYXNrX2Zvcl9waXBlcyhpbnQgYWN0aXZl X3BpcGVzLAorCQkJICBzdHJ1Y3QgR3JhcGhOb2RlICoqcGlwZV9ub2RlcywKKwkJCSAgaW50IG51 bV9zbGljZXMpCit7CisJaW50IGk7CisJaW50IG51bV9waXBlcyA9IGh3ZWlnaHQzMihhY3RpdmVf cGlwZXMpLCBwaXBlc19jb3VudDsKKwlpbnQgbWF4X3VzZV9jb3VudCA9IG51bV9zbGljZXMgPCBu dW1fcGlwZXMgPyAyIDogMTsKKwlpbnQgcGlwZSA9IDA7CisJaW50IHNsaWNlc19wZXJfcGlwZSA9 IG1heChudW1fc2xpY2VzIC8gbnVtX3BpcGVzLCAxKTsKKwlzdHJ1Y3QgSXRlcmF0ZUNvbnRleHQg Y3R4OworCXN0cnVjdCBQaXBlREJ1ZiBwaXBlX2RidWZbSTkxNV9NQVhfUElQRVNdOworCisJbWVt Y3B5KGN0eC5taW5fY29tYi5waXBlX25vZGVzLCBwaXBlX25vZGVzLAorCSAgICAgICBzaXplb2Yo c3RydWN0IEdyYXBoTm9kZSAqKSAqIEk5MTVfTUFYX1BJUEVTKTsKKwltZW1zZXQoY3R4Lm1pbl9j b21iLnNsaWNlcywgMCwKKwkgICAgICAgSTkxNV9NQVhfU0xJQ0VTICogc2l6ZW9mKHN0cnVjdCBH cmFwaE5vZGUgKikpOworCWN0eC5taW5fY29tYi50b3RhbF93ZWlnaHQgPSB+MDsKKwljdHgubWF4 X3VzZV9jb3VudCA9IG1heF91c2VfY291bnQ7CisJY3R4Lm51bV9waXBlcyA9IG51bV9waXBlczsK KwljdHgubnVtX3NsaWNlcyA9IG51bV9zbGljZXM7CisJY3R4LnNsaWNlc19wZXJfcGlwZSA9IHNs aWNlc19wZXJfcGlwZTsKKwljdHgubWF4X2NvbWJpbmF0aW9ucyA9IGZhY3RvcmlhbChudW1fcGlw ZXMpOworCisJaXRlcmF0ZV9hbGxfY29tYmluYXRpb25zKCZjdHgsIHBpcGVfbm9kZXMsCisJCQkJ IDAsIEk5MTVfTUFYX1BJUEVTIC0gMSwgY29tcGFyZV93ZWlnaHQpOworCisJaWYgKGRlYnVnKQor CQlpZ3RfaW5mbygiQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgJWQodG90YWwgY29tYmlu YXRpb25zICVkKTpcbiIsCisJCSAgICAgICAgIGN0eC5taW5fY29tYi50b3RhbF93ZWlnaHQsIGN0 eC5tYXhfY29tYmluYXRpb25zKTsKKworCW1lbXNldChwaXBlX2RidWYsIDAsIHNpemVvZihzdHJ1 Y3QgUGlwZURCdWYpICogSTkxNV9NQVhfUElQRVMpOworCisJZm9yIChpID0gMDsgaSA8IEk5MTVf TUFYX1BJUEVTOyBpKyspIHsKKwkJaWYgKGN0eC5taW5fY29tYi5waXBlX25vZGVzW2ldKSB7CisJ CQlpbnQgcGlwZV9pbmRleCA9IGN0eC5taW5fY29tYi5waXBlX25vZGVzW2ldLT5pZDsKKworCQkJ cGlwZV9kYnVmW3BpcGVfaW5kZXhdLnBpcGUgPSBjdHgubWluX2NvbWIucGlwZV9ub2Rlc1tpXTsK KwkJCW1lbWNweSgmcGlwZV9kYnVmW3BpcGVfaW5kZXhdLmRidWYsCisJCQkgICAgICAgJmN0eC5t aW5fY29tYi5zbGljZXNbaSAqIHNsaWNlc19wZXJfcGlwZV0sCisJCQkgICAgICAgc2l6ZW9mKHN0 cnVjdCBHcmFwaE5vZGUgKikgKiBzbGljZXNfcGVyX3BpcGUpOworCQl9CisJfQorCisJaWd0X2lu Zm8oIlx0XHR7XG4iKTsKKwlwaXBlID0gMDsKKwlpZ3RfaW5mbygiXHRcdFx0XHQuYWN0aXZlX3Bp cGVzID0gIik7CisJZm9yIChpID0gMDsgaSA8IEk5MTVfTUFYX1BJUEVTOyBpKyspIHsKKwkJaWYg KHBpcGVfZGJ1ZltpXS5waXBlKSB7CisJCQlpZ3RfaW5mbygiQklUKCVzKSIsIHBpcGVfbmFtZXNb cGlwZV9kYnVmW2ldLnBpcGUtPmlkXSk7CisJCQlpZiAocGlwZSA8IChudW1fcGlwZXMgLSAxKSkK KwkJCQlpZ3RfaW5mbygiIHwgIik7CisJCQlwaXBlKys7CisJCX0KKwl9CisJaWd0X2luZm8oIixc blx0XHRcdFx0e1xuIik7CisJbnVtX3BpcGVzID0gMDsKKwlmb3IgKHBpcGUgPSAwOyBwaXBlIDwg STkxNV9NQVhfUElQRVM7IHBpcGUrKykKKwkJaWYgKHBpcGVfZGJ1ZltwaXBlXS5waXBlKQorCQkJ bnVtX3BpcGVzKys7CisKKwlwaXBlc19jb3VudCA9IDA7CisJZm9yIChwaXBlID0gMDsgcGlwZSA8 IEk5MTVfTUFYX1BJUEVTOyBwaXBlKyspIHsKKwkJaWYgKHBpcGVfZGJ1ZltwaXBlXS5waXBlKSB7 CisJCQlpZ3RfaW5mbygiXHRcdFx0XHRcdFx0WyVzXSA9ICIsIHBpcGVfbmFtZXNbcGlwZV9kYnVm W3BpcGVdLnBpcGUtPmlkXSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2xpY2VzX3Blcl9waXBlOyBp KyspIHsKKwkJCQlpbnQgc2xpY2VfaW5kZXhfY29udmVydGVkOworCQkJCXN0cnVjdCBHcmFwaE5v ZGUgKm5leHRfc2xpY2UgPQorCQkJCQkJcGlwZV9kYnVmW3BpcGVdLmRidWZbaSsxXTsKKwkJCQli b29sIG5vdF9sYXN0ID0gaSA8IChzbGljZXNfcGVyX3BpcGUgLSAxKTsKKworCQkJCWlmICghcGlw ZV9kYnVmW3BpcGVdLmRidWZbaV0pCisJCQkJCWJyZWFrOworCisJCQkJc2xpY2VfaW5kZXhfY29u dmVydGVkID0KKwkJCQkJcGlwZV9kYnVmW3BpcGVdLmRidWZbaV0tPmlkOworCisJCQkJaWYgKG5v dF9sYXN0ICYmIG5leHRfc2xpY2UpIHsKKwkJCQkJaWd0X2luZm8oIkJJVChEQlVGX1MlZCkgfCAi LAorCQkJCQkJIHNsaWNlX2luZGV4X2NvbnZlcnRlZCArIDEpOworCQkJCX0gZWxzZSB7CisJCQkJ CWlndF9pbmZvKCJCSVQoREJVRl9TJWQpIiwKKwkJCQkJCSBzbGljZV9pbmRleF9jb252ZXJ0ZWQg KyAxKTsKKwkJCQl9CisJCQkJcGlwZXNfY291bnQrKzsKKwkJCX0KKwkJCWlmIChwaXBlc19jb3Vu dCA8IG51bV9waXBlcykgeworCQkJCQlpZ3RfaW5mbygiLFxuIik7CisJCQl9CisJCQllbHNlCisJ CQkJYnJlYWs7CisJCX0KKwl9CisJaWd0X2luZm8oIlxuXHRcdFx0XHR9XG5cdFx0fSxcbiIpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3RhYmxlKHN0cnVjdCBHcmFwaE5v ZGUgKipwaXBlcywgaW50IG51bV9waXBlcywKKwkJCXN0cnVjdCBHcmFwaE5vZGUgKipzbGljZXMs IGludCBudW1fc2xpY2VzLAorCQkJaW50IHNsaWNlc19wZXJfcGlwZSkKK3sKKwl1bnNpZ25lZCBp bnQgaSwgajsKKwlpbnQgbnVtX2NvbWJpbmF0aW9ucyA9IDEgPDwgbnVtX3BpcGVzOworCisJaWYg KG51bV9waXBlcyA+IEk5MTVfTUFYX1BJUEVTKSB7CisJCWlndF9pbmZvKCJUb28gbWFueSBwaXBl cyAlZFxuIiwgbnVtX3BpcGVzKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChudW1fc2xpY2VzID4g STkxNV9NQVhfU0xJQ0VTKSB7CisJCWlndF9pbmZvKCJUb28gbWFueSBzbGljZXMgJWRcbiIsIG51 bV9zbGljZXMpOworCQlyZXR1cm47CisJfQorCisJaWd0X2luZm8oIi8qIEF1dG9nZW5lcmF0ZWQg d2l0aCBpZ3QvdG9vbHMvaW50ZWxfZGJ1Zl9tYXAgdG9vbDogKi9cbiIpOworCWlndF9pbmZvKCJ7 XG4iKTsKKwlmb3IgKGkgPSAxOyBpIDwgbnVtX2NvbWJpbmF0aW9uczsgaSsrKSB7CisJCXN0cnVj dCBHcmFwaE5vZGUgKnRtcFtJOTE1X01BWF9QSVBFU107CisKKwkJbWVtY3B5KHRtcCwgcGlwZXMs IEk5MTVfTUFYX1BJUEVTICogc2l6ZW9mKHN0cnVjdCBHcmFwaE5vZGUgKikpOworCisJCWZvciAo aiA9IDA7IGogPCBJOTE1X01BWF9TTElDRVM7IGorKykgeworCQkJaWYgKHNsaWNlc1tqXSkKKwkJ CQlzbGljZXNbal0tPnVzZV9jb3VudCA9IDA7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgSTkx NV9NQVhfUElQRVM7IGorKykgeworCQkJaWYgKCEoaSAmICgxIDw8IGopKSkgeworCQkJCXRtcFtq XSA9IDA7CisJCQl9CisJCX0KKworCQlpZiAocHJpbnRfZGJ1Zl9tYXNrX2Zvcl9waXBlcyhpLCB0 bXAsIG51bV9zbGljZXMpKQorCQkJYnJlYWs7CisJfQorCWlndF9pbmZvKCJ9O1xuIik7Cit9CisK K2VudW0gb3B0IHsKKwlPUFRfVU5LTk9XTiA9ICc/JywKKwlPUFRfRU5EID0gLTEsCisJT1BUX0dF TiwKKwlPUFRfVVNBR0UsCisJT1BUX0dSQVBILAorCU9QVF9ERUJVRywKKwlPUFRfU0xJQ0VTX1BF Ul9QSVBFCit9OworCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICp0b29sbmFtZSkKK3sK KwlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyIsIHRvb2xuYW1lKTsKKwlmcHJpbnRmKHN0ZGVy ciwgIiBbLS1nZW49PEdFTj5dIgorCQkJIiBbLS1zbGljZXNfcGVyX3BpcGU9PG51bWJlcj5dIgor CQkJIiBbLS1ncmFwaD1cIlBJUEVfQS1EQlVGX1MxLVBJUEVfQi0uLi5cIl0iCisJCQkiIFstLWRl YnVnXSIKKwkJCSIgWy0taGVscF1cbiIpOworfQorCitzdGF0aWMgaW50IHBpcGVfc3RyX3RvX251 bShjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShwaXBlX25hbWVzKTsgaSsrKSB7CisJCWlmICghc3RyY21wKHN0ciwgcGlwZV9uYW1lc1tp XSkpIHsKKwkJCXJldHVybiBpOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGlu dCBkYnVmX3N0cl90b19udW0oY29uc3QgY2hhciAqc3RyKQoreworCWludCBpOworCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoc2xpY2VfbmFtZXMpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAo c3RyLCBzbGljZV9uYW1lc1tpXSkpIHsKKwkJCXJldHVybiBpOworCQl9CisJfQorCXJldHVybiAt MTsKK30KKworI2RlZmluZSBNQVhfR1JBUEhfU1RSIDgwCisKK3N0YXRpYyB2b2lkIHBhcnNlX2dy YXBoX3N0cihjaGFyICpncmFwaF9zdHIsIHN0cnVjdCBHcmFwaE5vZGUgKipwaXBlcywKKwkJCSAg ICBzdHJ1Y3QgR3JhcGhOb2RlICoqc2xpY2VzLCBpbnQgKm51bV9zbGljZXMsCisJCQkgICAgaW50 ICpudW1fcGlwZXMpCit7CisJY2hhciogdG9rZW4gPSBzdHJ0b2soZ3JhcGhfc3RyLCAiLSIpOwor CXN0cnVjdCBHcmFwaE5vZGUgKmN1cl9ub2RlID0gTlVMTCwgKmxhc3Rfbm9kZSA9IE5VTEw7CisJ aW50IG5fcGlwZXMgPSAwLCBuX3NsaWNlcyA9IDA7CisKKwl3aGlsZSAodG9rZW4gIT0gTlVMTCkg eworCQlpbnQgaW5kZXg7CisKKwkJaW5kZXggPSBwaXBlX3N0cl90b19udW0odG9rZW4pOworCisJ CWxhc3Rfbm9kZSA9IGN1cl9ub2RlOworCQlpZiAoaW5kZXggPj0gMCkgeworCQkJY3VyX25vZGUg PSBwaXBlc1tpbmRleF07CisJCQluX3BpcGVzKys7CisJCX0gZWxzZSB7CisJCQlpbmRleCA9IGRi dWZfc3RyX3RvX251bSh0b2tlbik7CisJCQlpZiAoaW5kZXggPj0gMCkgeworCQkJCWN1cl9ub2Rl ID0gc2xpY2VzW2luZGV4XTsKKwkJCQluX3NsaWNlcysrOworCQkJfQorCQl9CisJCWlmIChsYXN0 X25vZGUgJiYgY3VyX25vZGUpCisJCQljb25uZWN0X25vZGVzKGxhc3Rfbm9kZSwgY3VyX25vZGUs IDEpOworCisJCXRva2VuID0gc3RydG9rKE5VTEwsICItIik7CisJfQorCSpudW1fc2xpY2VzID0g bl9zbGljZXM7CisJKm51bV9waXBlcyA9IG5fcGlwZXM7Cit9CisKK2ludCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgR3JhcGhOb2RlICpwaXBlc1tJOTE1X01BWF9QSVBF U107CisJc3RydWN0IEdyYXBoTm9kZSAqc2xpY2VzW0k5MTVfTUFYX1NMSUNFU107CisJc3RydWN0 IEdyYXBoTm9kZSAqcGlwZUEsICpwaXBlQiwgKnBpcGVDLCAqcGlwZUQ7CisJc3RydWN0IEdyYXBo Tm9kZSAqc2xpY2UxLCAqc2xpY2UyLCAqc2xpY2UzLCAqc2xpY2U0OworCWludCBnZW4gPSAxMiwg aW5kZXg7CisJZW51bSBvcHQgb3B0OworCWNoYXIgKmVuZHA7CisJY2hhciBncmFwaF9zdHJbTUFY X0dSQVBIX1NUUl07CisJaW50IHNsaWNlc19wZXJfcGlwZSA9IEk5MTVfTUFYX1NMSUNFU19QRVJf UElQRTsKKwljb25zdCBjaGFyICp0b29sbmFtZSA9IGFyZ3ZbMF07CisJc3RhdGljIHN0cnVjdCBv cHRpb24gb3B0aW9uc1tdID0geworCQl7ICJnZW4iLAkJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEws CU9QVF9HRU4gfSwKKwkJeyAiZ3JhcGgiLAkJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsCU9QVF9H UkFQSCB9LAorCQl7ICJzbGljZXNfcGVyX3BpcGUiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJ T1BUX1NMSUNFU19QRVJfUElQRSB9LAorCQl7ICJoZWxwIiwJCW5vX2FyZ3VtZW50LAkJTlVMTCwJ T1BUX1VTQUdFIH0sCisJCXsgImRlYnVnIiwJCW5vX2FyZ3VtZW50LAkJTlVMTCwJT1BUX0RFQlVH IH0sCisJCXsgMCB9CisJfTsKKworCW51bV9lZGdlcyA9IDA7CisJbnVtX25vZGVzID0gMDsKKwor CWZvciAob3B0ID0gMDsgb3B0ICE9IE9QVF9FTkQ7ICkgeworCQlvcHQgPSBnZXRvcHRfbG9uZyhh cmdjLCBhcmd2LCAiIiwgb3B0aW9ucywgJmluZGV4KTsKKworCQlzd2l0Y2ggKG9wdCkgeworCQlj YXNlIE9QVF9HRU46CisJCQlnZW4gPSBzdHJ0b3VsKG9wdGFyZywgJmVuZHAsIDApOworCQkJYnJl YWs7CisJCWNhc2UgT1BUX1NMSUNFU19QRVJfUElQRToKKwkJCXNsaWNlc19wZXJfcGlwZSA9IG1p bihzdHJ0b3VsKG9wdGFyZywgJmVuZHAsIDApLAorCQkJCQkgICAgICBJOTE1X01BWF9TTElDRVNf UEVSX1BJUEUpOworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0RFQlVHOgorCQkJZGVidWcgPSB0cnVl OworCQkJYnJlYWs7CisJCWNhc2UgT1BUX0dSQVBIOgorCQkJc3RybmNweShncmFwaF9zdHIsIG9w dGFyZywgTUFYX0dSQVBIX1NUUik7CisJCQlncmFwaF9zdHJbTUFYX0dSQVBIX1NUUiAtIDFdID0g MDsKKwkJCWdlbiA9IDA7CisJCWNhc2UgT1BUX0VORDoKKwkJCWJyZWFrOworCQljYXNlIE9QVF9V U0FHRTogLyogZmFsbC10aHJvdWdoICovCisJCWNhc2UgT1BUX1VOS05PV046CisJCQl1c2FnZSh0 b29sbmFtZSk7CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJfQorCXBpcGVBID0gY3Jl YXRlX2dyYXBoX25vZGUoUElQRSwgMCk7CisJcGlwZUIgPSBjcmVhdGVfZ3JhcGhfbm9kZShQSVBF LCAxKTsKKwlwaXBlQyA9IGNyZWF0ZV9ncmFwaF9ub2RlKFBJUEUsIDIpOworCXBpcGVEID0gY3Jl YXRlX2dyYXBoX25vZGUoUElQRSwgMyk7CisJc2xpY2UxID0gY3JlYXRlX2dyYXBoX25vZGUoREJV Rl9TTElDRSwgMCk7CisJc2xpY2UyID0gY3JlYXRlX2dyYXBoX25vZGUoREJVRl9TTElDRSwgMSk7 CisJc2xpY2UzID0gY3JlYXRlX2dyYXBoX25vZGUoREJVRl9TTElDRSwgMik7CisJc2xpY2U0ID0g Y3JlYXRlX2dyYXBoX25vZGUoREJVRl9TTElDRSwgMyk7CisKKwltZW1zZXQocGlwZXMsIDAsIEk5 MTVfTUFYX1BJUEVTICogc2l6ZW9mKHN0cnVjdCBHcmFwaE5vZGUgKikpOworCW1lbXNldChzbGlj ZXMsIDAsIEk5MTVfTUFYX1NMSUNFUyAqIHNpemVvZihzdHJ1Y3QgR3JhcGhOb2RlICopKTsKKwor CWlmICghZ2VuKSB7CisJCWludCBudW1fc2xpY2VzID0gMCwgbnVtX3BpcGVzID0gMDsKKwkJLyoK KwkJICogUHJlcGFyZSB0byBnZW5lcmF0ZSBhc3NpZ25tZW50cyBmb3IgSUNMLCB3aGljaAorCQkg KiBoYXMgMyBwaXBlcyBhbmQgMiBEQnVmIHNsaWNlcy4KKwkJICovCisJCXNsaWNlc1swXSA9IHNs aWNlMTsKKwkJc2xpY2VzWzFdID0gc2xpY2UyOworCQlzbGljZXNbMl0gPSBzbGljZTM7CisJCXNs aWNlc1szXSA9IHNsaWNlNDsKKwkJcGlwZXNbMF0gPSBwaXBlQTsKKwkJcGlwZXNbMV0gPSBwaXBl QjsKKwkJcGlwZXNbMl0gPSBwaXBlQzsKKwkJcGlwZXNbM10gPSBwaXBlRDsKKworCQlwYXJzZV9n cmFwaF9zdHIoZ3JhcGhfc3RyLCBwaXBlcywgc2xpY2VzLCAmbnVtX3NsaWNlcywKKwkJCQkmbnVt X3BpcGVzKTsKKworCQl0cmF2ZXJzZV9ncmFwaChwaXBlc1swXSwgMCk7CisKKwkJcHJpbnRfdGFi bGUocGlwZXMsIG51bV9waXBlcywgc2xpY2VzLCBudW1fc2xpY2VzLCBzbGljZXNfcGVyX3BpcGUp OworCisJfSBlbHNlIGlmIChnZW4gPT0gMTEpIHsKKworCQkvKgorCQkgKiBQcmVwYXJlIHRvIGdl bmVyYXRlIGFzc2lnbm1lbnRzIGZvciBJQ0wsIHdoaWNoCisJCSAqIGhhcyAzIHBpcGVzIGFuZCAy IERCdWYgc2xpY2VzLgorCQkgKi8KKwkJc2xpY2VzWzBdID0gc2xpY2UxOworCQlzbGljZXNbMV0g PSBzbGljZTI7CisJCXBpcGVzWzBdID0gcGlwZUE7CisJCXBpcGVzWzFdID0gcGlwZUI7CisJCXBp cGVzWzJdID0gcGlwZUM7CisKKwkJLyoKKwkJICogQlNwZWMgMTI3MTYuIEdlbmVyYXRlIERCdWYg U2xpY2VzIHRhYmxlIGZvciBJQ0wsCisJCSAqIEdyYXBoKGVhY2ggZWRnZSBhc3N1bWVkIHRvIGhh dmUgd2VpZ2h0IDEpOgorCQkgKiBQaXBlQSAtIERCVUZfUzEgLSBQaXBlQiAtIFBpcGVDIC0gREJV Rl9TMgorCQkgKi8KKwkJY29ubmVjdF9ub2RlcyhwaXBlQSwgc2xpY2UxLCAxKTsKKwkJY29ubmVj dF9ub2RlcyhzbGljZTEsIHBpcGVCLCAxKTsKKwkJY29ubmVjdF9ub2RlcyhwaXBlQiwgcGlwZUMs IDEpOworCQljb25uZWN0X25vZGVzKHBpcGVDLCBzbGljZTIsIDEpOworCisJCXRyYXZlcnNlX2dy YXBoKHBpcGVBLCAwKTsKKworCQlwcmludF90YWJsZShwaXBlcywgMywgc2xpY2VzLCAyLCAyKTsK KworCX0gZWxzZSBpZiAoZ2VuID09IDEyKSB7CisKKwkJLyoKKwkJICogUHJlcGFyZSB0byBnZW5l cmF0ZSBhc3NpZ25tZW50cyBmb3IgVEdMLCB3aGljaAorCQkgKiBoYXMgNCBwaXBlcyBhbmQgMiBE QnVmIHNsaWNlcy4KKwkJICovCisJCXNsaWNlc1swXSA9IHNsaWNlMTsKKwkJc2xpY2VzWzFdID0g c2xpY2UyOworCQlwaXBlc1swXSA9IHBpcGVBOworCQlwaXBlc1sxXSA9IHBpcGVCOworCQlwaXBl c1syXSA9IHBpcGVDOworCQlwaXBlc1szXSA9IHBpcGVEOworCisJCS8qCisJCSAqIEJTcGVjIDQ5 MjU1LiBHZW5lcmF0ZSBEQnVmIFNsaWNlcyB0YWJsZSBmb3IgVEdMLgorCQkgKiBHcmFwaChlYWNo IGVkZ2UgYXNzdW1lZCB0byBoYXZlIHdlaWdodCAxKToKKwkJICogUGlwZUQgLSBEQlVGX1MyIC0g UGlwZUMgLSBQaXBlQSAtIERCVUZfUzEgLSBQaXBlQgorCQkgKi8KKwkJY29ubmVjdF9ub2Rlcyhw aXBlRCwgc2xpY2UyLCAxKTsKKwkJY29ubmVjdF9ub2RlcyhzbGljZTIsIHBpcGVDLCAxKTsKKwkJ Y29ubmVjdF9ub2RlcyhwaXBlQywgcGlwZUEsIDEpOworCQljb25uZWN0X25vZGVzKHBpcGVBLCBz bGljZTEsIDEpOworCQljb25uZWN0X25vZGVzKHNsaWNlMSwgcGlwZUIsIDEpOworCisJCXRyYXZl cnNlX2dyYXBoKHBpcGVBLCAwKTsKKworCQlwcmludF90YWJsZShwaXBlcywgNCwgc2xpY2VzLCAy LCAyKTsKKwl9CisKKwlyZXNldF9hbGxfbm9kZXMoKTsKKworCS8qCisJICogRnVydGhlciBwbGF0 Zm9ybXMgY2FuIGdlbmVyYXRlIHRhYmxlIHNhbWUgd2F5LgorCSAqLworCisJZGVzdHJveV9hbGxf bm9kZXMoKTsKKworCXJldHVybiAgMDsKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvbWVzb24uYnVp bGQgYi90b29scy9tZXNvbi5idWlsZAppbmRleCBlZWNiMTIyYi4uMmI4ZGY0YjQgMTAwNjQ0Ci0t LSBhL3Rvb2xzL21lc29uLmJ1aWxkCisrKyBiL3Rvb2xzL21lc29uLmJ1aWxkCkBAIC0zNSw2ICsz NSw3IEBAIHRvb2xzX3Byb2dzID0gWwogCSdpbnRlbF93YXRlcm1hcmsnLAogCSdpbnRlbF9nZW1f aW5mbycsCiAJJ2ludGVsX2d2dGdfdGVzdCcsCisJJ2ludGVsX2RidWZfbWFwJywKIAknZHBjZF9y ZWcnLAogXQogdG9vbF9kZXBzID0gaWd0X2RlcHMKLS0gCjIuMjQuMS40ODUuZ2FkMDVhM2Q4ZTUK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYg bWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=