From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH i-g-t v15 2/2] tests/gem_ctx_sseu: Dynamic (sub)slice programming tests Date: Tue, 18 Sep 2018 14:41:52 +0100 Message-ID: <20180918134152.10570-1-tvrtko.ursulin@linux.intel.com> References: <20180917112812.28886-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id 99D276E1C7 for ; Tue, 18 Sep 2018 13:42:00 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id j26-v6so2176869wre.2 for ; Tue, 18 Sep 2018 06:42:00 -0700 (PDT) In-Reply-To: <20180917112812.28886-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgoK VmVyaWZ5IHRoYXQgdGhlIHBlci1jb250ZXh0IGR5bmFtaWMgU1NFVSB1QVBJIHdvcmtzIGFzIGV4 cGVjdGVkLgoKVG8gYWNoaWV2ZSB0aGF0LCBpbiB0aGUgYWJzZW5jZSBvZiBhIGJldHRlciBtZWNo YW1pc20sIHdlIHJlYWQgdGhlIHZhbHVlCm9mIFBXUl9DTEtfU1RBVEUgcmVnaXN0ZXIsIG9yIHVz ZSBNSV9TRVRfUFJFRElDQVRFIG9uIHBsYXRmb3JtcyBiZWZvcmUKQ2Fubm9ubGFrZS4KClRoaXMg cmVnaXN0ZXIgaXMgd3JpdHRlbiB0byBieSB0aGUgR1BVIG9uIGNvbnRleHQgcmVzdG9yZSBzbyB0 aGlzIHdheQp3ZSB2ZXJpZnkgaTkxNSBpcyBjb3JyZWN0bHkgdXBkYXRpbmcgdGhlIGNvbnRleHQg aW1hZ2UgaW4gYWxsCmNpcmN1bXN0YW5jZXMuCgp2MjogQWRkIHN1YnNsaWNlIHRlc3RzIChMaW9u ZWwpCiAgICBVc2UgTUlfU0VUX1BSRURJQ0FURSBmb3IgZnVydGhlciB2ZXJpZmljYXRpb24gd2hl biBhdmFpbGFibGUgKExpb25lbCkKCnYzOiBSZW5hbWUgdG8gZ2VtX2N0eF9ycGNzIChMaW9uZWwp Cgp2NDogVXBkYXRlIGtlcm5lbCBBUEkgKExpb25lbCkKICAgIEFkZCAwIHZhbHVlIHRlc3QgKExp b25lbCkKICAgIEV4ZXJjaXNlIGludmFsaWQgdmFsdWVzIChMaW9uZWwpCgp2NTogQWRkIHBlcmYg dGVzdHMgKExpb25lbCkKCnY2OiBBZGQgbmV3IHN5c2ZzIGVudHJ5IHRlc3RzIChMaW9uZWwpCgp2 NzogVGVzdCByc3ZkIGZpZWxkcwogICAgVXBkYXRlIGZvciBrZXJuZWwgc2VyaWVzIGNoYW5nZXMK CnY4OiBEcm9wIHRlc3Rfbm9fc3NldV9zdXBwb3J0KCkgdGVzdCAoS2VsdmluKQogICAgRHJvcCBk cm1faW50ZWxfKigpIGFwaXMgKENocmlzKQoKdjk6IGJ5IENocmlzOgogICAgRHJvcCBhbGwgZG9f aW9jdGwvZG9faW9jdGxfZXJyKCkKICAgIFVzZSBnZW1fY29udGV4dF9bZ3NdZXRfcGFyYW0oKQog ICAgVXNlIGdlbV9yZWFkKCkgaW5zdGVhZCBvZiBtYXBwaW5nIG1lbW9yeQogICAgYnkgTGlvbmVs OgogICAgVGVzdCBkeW5hbWljIHNzZXUgb24vb2ZmIG1vcmUKClR2cnRrbyBVcnN1bGluOgoKdjEw OgogKiBWYXJpb3VzIHN0eWxlIHR3ZWFrcyBhbmQgcmVmYWN0b3JpbmdzLgogKiBOZXcgdGVzdCBj b3ZlcmFnZS4KCnYxMToKICogQ2hhbmdlIHBsYXRmb3JtIHN1cHBvcnQgdG8ganVzdCBHZW4xMS4K ICogU2ltcGxpZnkgYXZhaWxhYmlsaXR5IHRlc3QuIChDaHJpcyBXaWxzb24pCiAqIE1vcmUgaW52 YWxpZCBwb2ludGVyIHRlc3RzLiAoQ2hyaXMgV2lsc29uKQoKdjEyOgogKiBGaXggTUFQX0ZJWEVE IHVzZSAoZG9oISkuCiAqIEZpeCBnZXQvc2V0IGNvcHkmcGFzdGUgZXJyb3JzLgogKiBEcm9wIHN1 cHBvcnRlZCBwbGF0Zm9ybSB0ZXN0LiAoQ2hyaXMgV2lsc29uKQogKiBBZGQgbW1hcF9fZ3R0IHRl c3QuIChDaHJpcyBXaWxzb24pCgp2MTM6CiAqIENvbW1pdCBtZXNzYWdlIHR3ZWFrcy4KICogQWRk ZWQgcmVzZXQvaGFuZy9zdXNwZW5kIHRlc3RzLiAoQ2hyaXMgV2lsc29uKQogKiBBc3NlcnQgc3Bp bm5lciBpcyBidXN5LiAoQ2hyaXMgV2lsc29uKQogKiBSZW1vdmUgc29tZSBtb3JlIEFCSSBhc3N1 bXB0aW9ucy4gKENocmlzIFdpbHNvbikKCnYxNDoKICogVXNlIGRlZmF1bHQgcmVzdW1lIHRpbWUu IChDaHJpcyBXaWxzb24pCiAqIFRyaWdnZXIgaGFuZyBhZnRlciBycGNzIHJlYWQgYmF0Y2ggaGFz IGJlZW4gc3VibWl0dGVkLiAoQ2hyaXMgV2lsc29uKQoKdjE1OgogKiBBZGp1c3QgZm9yIHVBUEkg cmVzdHJpY3Rpb25zLgoKU2lnbmVkLW9mZi1ieTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5n LmxhbmR3ZXJsaW5AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZy dGtvLnVyc3VsaW5AaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+ICMgdjE0Ci0tLQogdGVzdHMvTWFrZWZpbGUuYW0gICAgICB8ICAg IDEgKwogdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgIDEgKwogdGVzdHMvZ2VtX2N0eF9wYXJh bS5jICB8ICAgIDQgKy0KIHRlc3RzL2dlbV9jdHhfc3NldS5jICAgfCAxMTkwICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL21lc29uLmJ1aWxkICAgICAgfCAg ICA3ICsKIDUgZmlsZXMgY2hhbmdlZCwgMTIwMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX2N0eF9zc2V1LmMKCmRpZmYgLS1naXQgYS90 ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCmluZGV4IGVlNWE3YzVlODNiOC4u NmI2N2JkMmNjMTdhIDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5hbQorKysgYi90ZXN0cy9N YWtlZmlsZS5hbQpAQCAtMTA3LDYgKzEwNyw3IEBAIGdlbV9jbG9zZV9yYWNlX0NGTEFHUyA9ICQo QU1fQ0ZMQUdTKSAkKFRIUkVBRF9DRkxBR1MpCiBnZW1fY2xvc2VfcmFjZV9MREFERCA9ICQoTERB REQpIC1scHRocmVhZAogZ2VtX2N0eF90aHJhc2hfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoVEhS RUFEX0NGTEFHUykKIGdlbV9jdHhfdGhyYXNoX0xEQUREID0gJChMREFERCkgLWxwdGhyZWFkCitn ZW1fY3R4X3NzZXVfTERBREQgPSAkKExEQUREKSAkKHRvcF9idWlsZGRpcikvbGliL2xpYmlndF9w ZXJmLmxhCiBnZW1fZXhlY19wYXJhbGxlbF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChUSFJFQURf Q0ZMQUdTKQogZ2VtX2V4ZWNfcGFyYWxsZWxfTERBREQgPSAkKExEQUREKSAtbHB0aHJlYWQKIGdl bV9mZW5jZV90aHJhc2hfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoVEhSRUFEX0NGTEFHUykKZGlm ZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz CmluZGV4IDI2OTMzNmFkMzE1MC4uNjc2NTE0M2JmMzQ0IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTU1LDYgKzU1LDcg QEAgVEVTVFNfcHJvZ3MgPSBcCiAJZ2VtX2N0eF9leGVjIFwKIAlnZW1fY3R4X2lzb2xhdGlvbiBc CiAJZ2VtX2N0eF9wYXJhbSBcCisJZ2VtX2N0eF9zc2V1IFwKIAlnZW1fY3R4X3N3aXRjaCBcCiAJ Z2VtX2N0eF90aHJhc2ggXAogCWdlbV9kb3VibGVfaXJxX2xvb3AgXApkaWZmIC0tZ2l0IGEvdGVz dHMvZ2VtX2N0eF9wYXJhbS5jIGIvdGVzdHMvZ2VtX2N0eF9wYXJhbS5jCmluZGV4IGM0NmZkNzA5 YjBkNy4uYWYxYWZlYWEyZjJmIDEwMDY0NAotLS0gYS90ZXN0cy9nZW1fY3R4X3BhcmFtLmMKKysr IGIvdGVzdHMvZ2VtX2N0eF9wYXJhbS5jCkBAIC0yOTQsMTEgKzI5NCwxMyBAQCBpZ3RfbWFpbgog CQkJc2V0X3ByaW9yaXR5KGZkKTsKIAl9CiAKKwkvKiBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVSB0 ZXN0cyBhcmUgbG9jYXRlZCBpbiBnZW1fY3R4X3NzZXUuYyAqLworCiAJLyogTk9URTogVGhpcyB0 ZXN0Y2FzZSBpbnRlbnRpb25hbGx5IHRlc3RzIGZvciB0aGUgbmV4dCBmcmVlIHBhcmFtZXRlcgog CSAqIHRvIGNhdGNoIEFCSSBleHRlbnNpb25zLiBEb24ndCAiZml4IiB0aGlzIHRlc3RjYXNlIHdp dGhvdXQgYWRkaW5nIGFsbAogCSAqIHRoZSB0ZXN0cyBmb3IgdGhlIG5ldyBwYXJhbSBmaXJzdC4K IAkgKi8KLQlhcmcucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fUFJJT1JJVFkgKyAxOworCWFy Zy5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVICsgMTsKIAogCWlndF9zdWJ0ZXN0KCJp bnZhbGlkLXBhcmFtLWdldCIpIHsKIAkJYXJnLmN0eF9pZCA9IGN0eDsKZGlmZiAtLWdpdCBhL3Rl c3RzL2dlbV9jdHhfc3NldS5jIGIvdGVzdHMvZ2VtX2N0eF9zc2V1LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ODlmNzA2NDMzOTIKLS0tIC9kZXYvbnVsbAorKysg Yi90ZXN0cy9nZW1fY3R4X3NzZXUuYwpAQCAtMCwwICsxLDExOTAgQEAKKy8qCisgKiBDb3B5cmln aHQgwqkgMjAxNy0yMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBMaW9uZWwgTGFu ZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNs dWRlICJpZ3QuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+ CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1l Lmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCisjaW5j bHVkZSAiaWd0X2R1bW15bG9hZC5oIgorI2luY2x1ZGUgImlndF9wZXJmLmgiCisjaW5jbHVkZSAi aWd0X3N5c2ZzLmgiCisjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKKworSUdUX1RFU1RfREVT Q1JJUFRJT04oIlRlc3QgY29udGV4dCByZW5kZXIgcG93ZXJnYXRpbmcgcHJvZ3JhbW1pbmcuIik7 CisKKyNkZWZpbmUgTUlfU1RPUkVfUkVHSVNURVJfTUVNICgweDI0IDw8IDIzKQorCisjZGVmaW5l IE1JX1NFVF9QUkVESUNBVEUgICAgICAoMHgxIDw8IDIzKQorI2RlZmluZSAgTUlfU0VUX1BSRURJ Q0FURV9OT09QX05FVkVSICAgICAgICAgKDApCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFX05P T1BfUkVTVUxUMl9DTEVBUiAoMSkKKyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfTk9PUF9SRVNV TFQyX1NFVCAgICgyKQorI2RlZmluZSAgTUlfU0VUX1BSRURJQ0FURV9OT09QX1JFU1VMVF9DTEVB UiAgKDMpCisjZGVmaW5lICBNSV9TRVRfUFJFRElDQVRFX05PT1BfUkVTVUxUX1NFVCAgICAoNCkK KyNkZWZpbmUgIE1JX1NFVF9QUkVESUNBVEVfMV9TTElDRVMgICAgICAgICAgICg1KQorI2RlZmlu ZSAgTUlfU0VUX1BSRURJQ0FURV8yX1NMSUNFUyAgICAgICAgICAgKDYpCisjZGVmaW5lICBNSV9T RVRfUFJFRElDQVRFXzNfU0xJQ0VTICAgICAgICAgICAoNykKKworI2RlZmluZSBHRU44X1JfUFdS X0NMS19TVEFURQkJMHgyMEM4CisjZGVmaW5lICAgR0VOOF9SUENTX0VOQUJMRQkJKDEgPDwgMzEp CisjZGVmaW5lICAgR0VOOF9SUENTX1NfQ05UX0VOQUJMRQkoMSA8PCAxOCkKKyNkZWZpbmUgICBH RU44X1JQQ1NfU19DTlRfU0hJRlQJCTE1CisjZGVmaW5lICAgR0VOOF9SUENTX1NfQ05UX01BU0sJ CSgweDcgPDwgR0VOOF9SUENTX1NfQ05UX1NISUZUKQorI2RlZmluZSAgIEdFTjExX1JQQ1NfU19D TlRfU0hJRlQJMTIKKyNkZWZpbmUgICBHRU4xMV9SUENTX1NfQ05UX01BU0sJCSgweDNmIDw8IEdF TjExX1JQQ1NfU19DTlRfU0hJRlQpCisjZGVmaW5lICAgR0VOOF9SUENTX1NTX0NOVF9FTkFCTEUJ KDEgPDwgMTEpCisjZGVmaW5lICAgR0VOOF9SUENTX1NTX0NOVF9TSElGVAk4CisjZGVmaW5lICAg R0VOOF9SUENTX1NTX0NOVF9NQVNLCQkoMHg3IDw8IEdFTjhfUlBDU19TU19DTlRfU0hJRlQpCisj ZGVmaW5lICAgR0VOOF9SUENTX0VVX01BWF9TSElGVAk0CisjZGVmaW5lICAgR0VOOF9SUENTX0VV X01BWF9NQVNLCQkoMHhmIDw8IEdFTjhfUlBDU19FVV9NQVhfU0hJRlQpCisjZGVmaW5lICAgR0VO OF9SUENTX0VVX01JTl9TSElGVAkwCisjZGVmaW5lICAgR0VOOF9SUENTX0VVX01JTl9NQVNLCQko MHhmIDw8IEdFTjhfUlBDU19FVV9NSU5fU0hJRlQpCisKKyNkZWZpbmUgUkNTX1RJTUVTVEFNUCAo MHgyMDAwICsgMHgzNTgpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbnRlbF9nZW5fXywgX19p bnRlbF9kZXZpZF9fOworc3RhdGljIHVpbnQ2NF90IF9fc2xpY2VfbWFza19fLCBfX3N1YnNsaWNl X21hc2tfXzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19zbGljZV9jb3VudF9fLCBfX3N1YnNsaWNl X2NvdW50X187CisKK3N0YXRpYyB1aW50NjRfdCBtYXNrX21pbnVzX29uZSh1aW50NjRfdCBtYXNr KQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2YobWFzaykg KiA4IC0gMSk7IGkrKykgeworCQlpZiAoKDFVTEwgPDwgaSkgJiBtYXNrKQorCQkJcmV0dXJuIG1h c2sgJiB+KDFVTEwgPDwgaSk7CisJfQorCisJaWd0X2Fzc2VydCgwKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHVpbnQ2NF90IG1hc2tfcGx1c19vbmUodWludDY0X3QgbWFzaykKK3sKKwl1bnNp Z25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKG1hc2spICogOCAtIDEpOyBp KyspIHsKKwkJaWYgKCgoMVVMTCA8PCBpKSAmIG1hc2spID09IDApCisJCQlyZXR1cm4gbWFzayB8 ICgxVUxMIDw8IGkpOworCX0KKworCWlndF9hc3NlcnQoMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB1aW50NjRfdCBtYXNrX21pbnVzKHVpbnQ2NF90IG1hc2ssIGludCBuKQoreworCXVuc2ln bmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJbWFzayA9IG1hc2tfbWlu dXNfb25lKG1hc2spOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBtYXNr X3BsdXModWludDY0X3QgbWFzaywgaW50IG4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbjsgaSsrKQorCQltYXNrID0gbWFza19wbHVzX29uZShtYXNrKTsKKworCXJl dHVybiBtYXNrOworfQorCitzdGF0aWMgdWludDMyX3QgKgorZmlsbF9yZWxvY2F0aW9uKHVpbnQz Ml90ICpiYXRjaCwKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxv YywKKwkJdWludDMyX3QgZ2VtX2hhbmRsZSwgdWludDMyX3QgZGVsdGEsIC8qIGluIGJ5dGVzICov CisJCXVpbnQzMl90IG9mZnNldCwgLyogaW4gZHdvcmRzICovCisJCXVpbnQzMl90IHJlYWRfZG9t YWlucywgdWludDMyX3Qgd3JpdGVfZG9tYWlucykKK3sKKwlyZWxvYy0+dGFyZ2V0X2hhbmRsZSA9 IGdlbV9oYW5kbGU7CisJcmVsb2MtPmRlbHRhID0gZGVsdGE7CisJcmVsb2MtPm9mZnNldCA9IG9m ZnNldCAqIHNpemVvZih1aW50MzJfdCk7CisJcmVsb2MtPnByZXN1bWVkX29mZnNldCA9IDA7CisJ cmVsb2MtPnJlYWRfZG9tYWlucyA9IHJlYWRfZG9tYWluczsKKwlyZWxvYy0+d3JpdGVfZG9tYWlu ID0gd3JpdGVfZG9tYWluczsKKworCSpiYXRjaCsrID0gZGVsdGE7CisJKmJhdGNoKysgPSAwOwor CisJcmV0dXJuIGJhdGNoOworfQorCisKK3N0YXRpYyB1aW50MzJfdAorcmVhZF9ycGNzX3JlZyhp bnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDMyX3QgZXhwZWN0ZWRfc2xpY2VzLCBpZ3Rfc3Bpbl90 ICpzcGluKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZiA9IHsg fTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2NzWzJdOworCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialsyXTsKKwl1aW50MzJfdCAqYmF0Y2gs ICpiLCBkYXRhWzJdOworCXVuc2lnbmVkIGludCBuX3JlbG9jcyA9IDA7CisJdWludDMyX3QgcnBj czsKKworCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKKwlvYmpbMF0uaGFuZGxlID0gZ2Vt X2NyZWF0ZShmZCwgNDA5Nik7CisJb2JqWzFdLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYp OworCisJYmF0Y2ggPSBiID0KKwkgICAgICBnZW1fbW1hcF9fY3B1KGZkLCBvYmpbMV0uaGFuZGxl LCAwLCA0MDk2LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKKworCWlmIChleHBlY3RlZF9zbGlj ZXMgIT0gMCAmJiBfX2ludGVsX2dlbl9fIDwgMTApCisJCSpiKysgPSBNSV9TRVRfUFJFRElDQVRF IHwgKDEgLSAxKSB8CisJCSAgICAgICAoTUlfU0VUX1BSRURJQ0FURV8xX1NMSUNFUyArIGV4cGVj dGVkX3NsaWNlcyAtIDEpOworCisJKmIrKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTSB8ICg0IC0g Mik7CisJKmIrKyA9IFJDU19USU1FU1RBTVA7CisJYiA9IGZpbGxfcmVsb2NhdGlvbihiLCAmcmVs b2NzW25fcmVsb2NzKytdLCBvYmpbMF0uaGFuZGxlLAorCQkJICAgIDAsIGIgLSBiYXRjaCwKKwkJ CSAgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSKTsKKwor CSpiKysgPSBNSV9TVE9SRV9SRUdJU1RFUl9NRU0gfCAoNCAtIDIpOworCSpiKysgPSBHRU44X1Jf UFdSX0NMS19TVEFURTsKKwliID0gZmlsbF9yZWxvY2F0aW9uKGIsICZyZWxvY3Nbbl9yZWxvY3Mr K10sIG9ialswXS5oYW5kbGUsCisJCQkgICAgNCwgYiAtIGJhdGNoLAorCQkJICAgIEk5MTVfR0VN X0RPTUFJTl9SRU5ERVIsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpOworCisJaWYgKGV4cGVjdGVk X3NsaWNlcyAhPSAwICYmIF9faW50ZWxfZ2VuX18gPCAxMCkKKwkJKmIrKyA9IE1JX1NFVF9QUkVE SUNBVEUgfCAoMSAtIDEpIHwgTUlfU0VUX1BSRURJQ0FURV9OT09QX05FVkVSOworCisJKmIrKyA9 IE1JX0JBVENIX0JVRkZFUl9FTkQ7CisKKwlnZW1fbXVubWFwKGJhdGNoLCA0MDk2KTsKKworCW9i alsxXS5yZWxvY2F0aW9uX2NvdW50ID0gbl9yZWxvY3M7CisJb2JqWzFdLnJlbG9jc19wdHIgPSB0 b191c2VyX3BvaW50ZXIocmVsb2NzKTsKKworCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2Vy X3BvaW50ZXIob2JqKTsKKwlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IEFSUkFZX1NJWkUob2JqKTsK KwlpOTE1X2V4ZWNidWZmZXIyX3NldF9jb250ZXh0X2lkKGV4ZWNidWYsIGN0eCk7CisKKwlnZW1f ZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCisJaWYgKHNwaW4pIHsKKwkJaWd0X2Fzc2VydChnZW1f Ym9fYnVzeShmZCwgc3Bpbi0+aGFuZGxlKSk7CisJCWlndF9zcGluX2JhdGNoX2VuZChzcGluKTsK Kwl9CisKKwlnZW1fcmVhZChmZCwgb2JqWzBdLmhhbmRsZSwgMCwgZGF0YSwgc2l6ZW9mKGRhdGEp KTsKKworCXJwY3MgPSBkYXRhWzFdOworCisJaWd0X2RlYnVnKCJyY3NfdGltZXN0YW1wPTB4JXgg cnBjcz0weCV4XG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKworCWdlbV9jbG9zZShmZCwgb2JqWzBd LmhhbmRsZSk7CisJZ2VtX2Nsb3NlKGZkLCBvYmpbMV0uaGFuZGxlKTsKKworCXJldHVybiBycGNz OworfQorCit0eXBlZGVmIHVpbnQzMl90ICgqcmVhZF9zbGljZV9jb3VudF9mKShpbnQgZmQsIHVp bnQzMl90IGN0eCwgdWludDMyX3QgZXhwZWN0ZWQsCisJCQkJICAgICAgIGlndF9zcGluX3QgKnNw aW4pOworCitzdGF0aWMgcmVhZF9zbGljZV9jb3VudF9mIF9fcmVhZF9zbGljZV9jb3VudDsKKwor c3RhdGljIHVpbnQzMl90CityZWFkX3NsaWNlX2NvdW50KGludCBmZCwgdWludDMyX3QgY3R4LCB1 aW50MzJfdCBleHBlY3RlZF9zbGljZV9jb3VudCkKK3sKKwlyZXR1cm4gX19yZWFkX3NsaWNlX2Nv dW50KGZkLCBjdHgsIGV4cGVjdGVkX3NsaWNlX2NvdW50LCBOVUxMKTsKK30KKworc3RhdGljIHVp bnQzMl90CitnZW44X3JlYWRfc2xpY2VfY291bnQoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVpbnQz Ml90IGV4cGVjdGVkX3NsaWNlX2NvdW50LAorCQkgICAgICBpZ3Rfc3Bpbl90ICpzcGluKQorewor CXJldHVybiAocmVhZF9ycGNzX3JlZyhmZCwgY3R4LCBleHBlY3RlZF9zbGljZV9jb3VudCwgc3Bp bikgJgorCQlHRU44X1JQQ1NfU19DTlRfTUFTSykgPj4gR0VOOF9SUENTX1NfQ05UX1NISUZUOwor fQorCitzdGF0aWMgdWludDMyX3QKK2dlbjExX3JlYWRfc2xpY2VfY291bnQoaW50IGZkLCB1aW50 MzJfdCBjdHgsIHVpbnQzMl90IGV4cGVjdGVkX3NsaWNlX2NvdW50LAorCQkgICAgICAgaWd0X3Nw aW5fdCAqc3BpbikKK3sKKwlyZXR1cm4gKHJlYWRfcnBjc19yZWcoZmQsIGN0eCwgZXhwZWN0ZWRf c2xpY2VfY291bnQsIHNwaW4pICYKKwkJR0VOMTFfUlBDU19TX0NOVF9NQVNLKSA+PiBHRU4xMV9S UENTX1NfQ05UX1NISUZUOworfQorCitzdGF0aWMgdWludDMyX3QKK3JlYWRfc3Vic2xpY2VfY291 bnQoaW50IGZkLCB1aW50MzJfdCBjdHgpCit7CisJcmV0dXJuIChyZWFkX3JwY3NfcmVnKGZkLCBj dHgsIDAsIE5VTEwpICYgR0VOOF9SUENTX1NTX0NOVF9NQVNLKSA+PgorCSAgICAgICBHRU44X1JQ Q1NfU1NfQ05UX1NISUZUOworfQorCitzdGF0aWMgYm9vbAora2VybmVsX2hhc19wZXJfY29udGV4 dF9zc2V1X3N1cHBvcnQoaW50IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9w YXJhbV9zc2V1IHNzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFt IGFyZyA9CisJCXsKKwkJICAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVSwKKwkJICAu c2l6ZSA9IHNpemVvZihzc2V1KSwKKwkJICAudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJnNzZXUp LAorCQl9OworCWludCByZXQ7CisKKwlpZiAoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZh cmcpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJnNz ZXUpOworCisJcmV0ID0gX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCisJaWd0 X2Fzc2VydChyZXQgPT0gMCB8fCByZXQgPT0gLUVOT0RFViB8fCByZXQgPT0gLUVJTlZBTCk7CisK KwlyZXR1cm4gcmV0ID09IDA7Cit9CisKK3N0YXRpYyB2b2lkCitjb250ZXh0X2dldF9zc2V1X21h c2tzKGludCBmZCwgdWludDMyX3QgY3R4LAorCQkgICAgICAgdWludDY0X3QgKnNsaWNlX21hc2ss CisJCSAgICAgICB1aW50NjRfdCAqc3Vic2xpY2VfbWFzaykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1f Y29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VV LAorCQkgIC5jdHhfaWQgPSBjdHgsCisJCSAgLnNpemUgPSBzaXplb2Yoc3NldSksCisJCSAgLnZh bHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KSB9OworCisJZ2VtX2NvbnRleHRfZ2V0X3BhcmFt KGZkLCAmYXJnKTsKKworCWlmIChzbGljZV9tYXNrKQorCQkqc2xpY2VfbWFzayA9IHNzZXUuc2xp Y2VfbWFzazsKKworCWlmIChzdWJzbGljZV9tYXNrKQorCQkqc3Vic2xpY2VfbWFzayA9IHNzZXUu c3Vic2xpY2VfbWFzazsKK30KKworc3RhdGljIHZvaWQKK2NvbnRleHRfc2V0X3NsaWNlX21hc2so aW50IGZkLCB1aW50MzJfdCBjdHgsIHVpbnQ2NF90IHNsaWNlX21hc2spCit7CisJc3RydWN0IGRy bV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2NvbnRleHRfcGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFS QU1fU1NFVSwKKwkJICAuY3R4X2lkID0gY3R4LAorCQkgIC5zaXplID0gc2l6ZW9mKHNzZXUpLAor CQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSkgfTsKKworCWdlbV9jb250ZXh0X2dl dF9wYXJhbShmZCwgJmFyZyk7CisJc3NldS5zbGljZV9tYXNrID0gc2xpY2VfbWFzazsKKwlnZW1f Y29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworfQorCitzdGF0aWMgdm9pZAorY29udGV4dF9z ZXRfc3Vic2xpY2VfbWFzayhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdWludDY0X3Qgc3Vic2xpY2Vf bWFzaykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0g eyB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJh bSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBjdHgsCisJCSAgLnNp emUgPSBzaXplb2Yoc3NldSksCisJCSAgLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KSB9 OworCisJZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKTsKKwlzc2V1LnN1YnNsaWNlX21h c2sgPSBzdWJzbGljZV9tYXNrOworCWdlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyk7Cit9 CisKKy8qCisgKiBWZXJpZnkgdGhhdCB3ZSBjYW4gcHJvZ3JhbSB0aGUgc2xpY2UgY291bnQuCisg Ki8KK3N0YXRpYyB2b2lkCit0ZXN0X3NsaWNlX3BnKGludCBmZCwgdWludDMyX3QgcGdfc2xpY2Vf Y291bnQpCit7CisJdWludDY0X3QgcGdfc2xpY2VfbWFzayA9IG1hc2tfbWludXMoX19zbGljZV9t YXNrX18sIHBnX3NsaWNlX2NvdW50KTsKKwl1bnNpZ25lZCBpbnQgc2xpY2VfY291bnQgPSBfX3Ns aWNlX2NvdW50X18gLSBwZ19zbGljZV9jb3VudDsKKwl1aW50NjRfdCBzbGljZV9tYXNrOworCXVp bnQzMl90IGN0eDsKKworCWlndF9hc3NlcnRfZXEoc2xpY2VfY291bnQsIF9fYnVpbHRpbl9wb3Bj b3VudChwZ19zbGljZV9tYXNrKSk7CisKKwlpZ3Rfc2tpcF9vbihfX2ludGVsX2dlbl9fID09IDEx ICYmCisJCSAgICAoc2xpY2VfY291bnQgIT0gMSAmJiBzbGljZV9jb3VudCAhPSBfX3NsaWNlX2Nv dW50X18pKTsKKworCWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CisJY29udGV4dF9zZXRf c2xpY2VfbWFzayhmZCwgY3R4LCBwZ19zbGljZV9tYXNrKTsKKwljb250ZXh0X2dldF9zc2V1X21h c2tzKGZkLCBjdHgsICZzbGljZV9tYXNrLCBOVUxMKTsKKwlpZ3RfYXNzZXJ0X2VxKHBnX3NsaWNl X21hc2ssIHNsaWNlX21hc2spOworCisJLyoKKwkgKiBUZXN0IGZhbHNlIHBvc2l0aXZlcyB3aXRo IHByZWRpY2F0ZXMgKG9ubHkgYXZhaWxhYmxlIG9uCisJICogYmVmb3JlIEdlbjEwKS4KKwkgKi8K KwlpZiAoX19pbnRlbF9nZW5fXyA8IDEwKQorCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291 bnQoZmQsIGN0eCwgX19zbGljZV9jb3VudF9fKSwgMCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRf c2xpY2VfY291bnQoZmQsIGN0eCwgMCksIHNsaWNlX2NvdW50KTsKKworCWdlbV9jb250ZXh0X2Rl c3Ryb3koZmQsIGN0eCk7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCB3ZSBjYW4gcHJvZ3JhbSB0 aGUgc3Vic2xpY2UgY291bnQuCisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X3N1YnNsaWNlX3BnKGlu dCBmZCwgaW50IHBnX3N1YnNsaWNlX2NvdW50KQoreworCXVpbnQ2NF90IHBnX3N1YnNsaWNlX21h c2sgPQorCQltYXNrX21pbnVzKF9fc3Vic2xpY2VfbWFza19fLCBwZ19zdWJzbGljZV9jb3VudCk7 CisJdW5zaWduZWQgaW50IHN1YnNsaWNlX2NvdW50ID0gX19zdWJzbGljZV9jb3VudF9fIC0gcGdf c3Vic2xpY2VfY291bnQ7CisJdWludDY0X3Qgc3Vic2xpY2VfbWFzazsKKwl1aW50MzJfdCBjdHg7 CisKKwlpZ3RfYXNzZXJ0X2VxKHN1YnNsaWNlX2NvdW50LCBfX2J1aWx0aW5fcG9wY291bnQocGdf c3Vic2xpY2VfbWFzaykpOworCisJaWd0X3NraXBfb24oX19pbnRlbF9nZW5fXyA9PSAxMSAmJgor CQkgICAgKHN1YnNsaWNlX2NvdW50ICE9IF9fc3Vic2xpY2VfY291bnRfXyAmJgorCQkgICAgIHN1 YnNsaWNlX2NvdW50ICE9IChfX3N1YnNsaWNlX2NvdW50X18gLyAyKSkpOworCisJY3R4ID0gZ2Vt X2NvbnRleHRfY3JlYXRlKGZkKTsKKwljb250ZXh0X3NldF9zdWJzbGljZV9tYXNrKGZkLCBjdHgs IHBnX3N1YnNsaWNlX21hc2spOworCWNvbnRleHRfZ2V0X3NzZXVfbWFza3MoZmQsIGN0eCwgTlVM TCwgJnN1YnNsaWNlX21hc2spOworCWlndF9hc3NlcnRfZXEocGdfc3Vic2xpY2VfbWFzaywgc3Vi c2xpY2VfbWFzayk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0 eCksIHN1YnNsaWNlX2NvdW50KTsKKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eCk7Cit9 CisKK3N0YXRpYyBib29sIGhhc19lbmdpbmUoaW50IGZkLCB1bnNpZ25lZCBpbnQgY2xhc3MsIHVu c2lnbmVkIGludCBpbnN0YW5jZSkKK3sKKwlpbnQgcG11ID0gcGVyZl9pOTE1X29wZW4oSTkxNV9Q TVVfRU5HSU5FX0JVU1koY2xhc3MsIGluc3RhbmNlKSk7CisKKwlpZiAocG11ID49IDApCisJCWNs b3NlKHBtdSk7CisKKwlyZXR1cm4gcG11ID49IDA7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCBp bnZhbGlkIGVuZ2luZXMgYXJlIHJlamVjdGVkIGFuZCB2YWxpZCBvbmVzIGFyZSBhY2NlcHRlZC4K KyAqLworc3RhdGljIHZvaWQgdGVzdF9lbmdpbmVzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBkcm1faTkxNV9n ZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJBTV9T U0VVLAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpLAorCQkgIC5zaXplID0g c2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3NldSkgfTsKKwl1 bnNpZ25lZCBpbnQgY2xhc3MsIGluc3RhbmNlOworCWludCBsYXN0X3dpdGhfZW5naW5lczsKKwor CS8qIGdldF9wYXJhbSAqLworCisJc3NldS5pbnN0YW5jZSA9IC0xOyAvKiBBc3N1bWVkIGludmFs aWQuICovCisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyks IC1FSU5WQUwpOworCisJc3NldS5jbGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX0lOVkFMSUQ7IC8q IEJvdGggaW52YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFt KGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwlzc2V1Lmluc3RhbmNlID0gMDsgLyogQ2xhc3MgaW52 YWxpZC4gKi8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJn KSwgLUVJTlZBTCk7CisJc3NldS5jbGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUjsKKwor CWxhc3Rfd2l0aF9lbmdpbmVzID0gLTE7CisJZm9yIChjbGFzcyA9IDA7IGNsYXNzIDwgfjA7IGNs YXNzKyspIHsKKwkJZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgfjA7IGluc3RhbmNlKysp IHsKKwkJCWludCByZXQ7CisKKwkJCXNzZXUuY2xhc3MgPSBjbGFzczsKKwkJCXNzZXUuaW5zdGFu Y2UgPSBpbnN0YW5jZTsKKworCQkJcmV0ID0gX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZh cmcpOworCisJCQlpZiAoaGFzX2VuZ2luZShmZCwgY2xhc3MsIGluc3RhbmNlKSkgeworCQkJCWln dF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJCQlsYXN0X3dpdGhfZW5naW5lcyA9IGNsYXNzOworCQkJ fSBlbHNlIHsKKwkJCQlpZ3RfYXNzZXJ0X2VxKHJldCwgLUVJTlZBTCk7CisJCQkJaWYgKGluc3Rh bmNlID4gOCkgLyogU2tpcCBvdmVyIHNvbWUgaW5zdGFuY2UgaG9sZXMuICovCisJCQkJCWJyZWFr OworCQkJfQorCQl9CisKKwkJaWYgKGNsYXNzIC0gbGFzdF93aXRoX2VuZ2luZXMgPiA4KSAvKiBT a2lwIG92ZXIgc29tZSBjbGFzcyBob2xlcy4gKi8KKwkJCWJyZWFrOworCX0KKworCS8qCisJICog R2V0IHNvbWUgcHJvcGVyIHZhbHVlcyBiZWZvcmUgdHJ5aW5nIHRvIHJlcHJvZ3JhbSB0aGVtIG9u dG8KKwkgKiBhbiBpbnZhbGlkIGVuZ2luZS4KKwkgKi8KKwlzc2V1LmNsYXNzID0gMDsKKwlzc2V1 Lmluc3RhbmNlID0gMDsKKwlnZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpOworCisJLyog c2V0X3BhcmFtICovCisKKwlzc2V1Lmluc3RhbmNlID0gLTE7IC8qIEFzc3VtZWQgaW52YWxpZC4g Ki8KKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVJ TlZBTCk7CisKKwlzc2V1LmNsYXNzID0gSTkxNV9FTkdJTkVfQ0xBU1NfSU5WQUxJRDsgLyogQm90 aCBpbnZhbGlkLiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQs ICZhcmcpLCAtRUlOVkFMKTsKKworCXNzZXUuaW5zdGFuY2UgPSAwOyAvKiBDbGFzcyBpbnZhbGlk LiAqLworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAt RUlOVkFMKTsKKworCWxhc3Rfd2l0aF9lbmdpbmVzID0gLTE7CisJZm9yIChjbGFzcyA9IDA7IGNs YXNzIDwgfjA7IGNsYXNzKyspIHsKKwkJZm9yIChpbnN0YW5jZSA9IDA7IGluc3RhbmNlIDwgfjA7 IGluc3RhbmNlKyspIHsKKwkJCWludCByZXQ7CisKKwkJCXNzZXUuY2xhc3MgPSBjbGFzczsKKwkJ CXNzZXUuaW5zdGFuY2UgPSBpbnN0YW5jZTsKKworCQkJcmV0ID0gX19nZW1fY29udGV4dF9zZXRf cGFyYW0oZmQsICZhcmcpOworCisJCQlpZiAoaGFzX2VuZ2luZShmZCwgY2xhc3MsIGluc3RhbmNl KSkgeworCQkJCWlndF9hc3NlcnQocmV0ID09IDAgfHwgcmV0ID09IC1FTk9ERVYpOworCQkJCWxh c3Rfd2l0aF9lbmdpbmVzID0gY2xhc3M7CisJCQl9IGVsc2UgeworCQkJCWlndF9hc3NlcnRfZXEo cmV0LCAtRUlOVkFMKTsKKwkJCQlpZiAoaW5zdGFuY2UgPiA4KSAvKiBTa2lwIG92ZXIgc29tZSBp bnN0YW5jZSBob2xlcy4gKi8KKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoY2xhc3Mg LSBsYXN0X3dpdGhfZW5naW5lcyA+IDgpIC8qIFNraXAgb3ZlciBzb21lIGNsYXNzIGhvbGVzLiAq LworCQkJYnJlYWs7CisJfQorCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYXJnLmN0eF9pZCk7 Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCBpbnZhbGlkIGFyZ3VtZW50cyBhcmUgcmVqZWN0ZWQu CisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X2ludmFsaWRfYXJncyhpbnQgZmQpCit7CisJc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05U RVhUX1BBUkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCksCisJ CX07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsK Kwl1bnNpZ25lZCBjaGFyICpwYWdlWzJdOworCXVuc2lnbmVkIGNoYXIgKmFkZHI7CisJdW5zaWdu ZWQgaW50IHN6OworCisJLyogZ2V0IHBhcmFtICovCisKKwkvKiBJbnZhbGlkIHNpemUuICovCisJ YXJnLnNpemUgPSAxOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQs ICZhcmcpLCAtRUlOVkFMKTsKKworCS8qIFF1ZXJ5IHNpemUuICovCisJYXJnLnNpemUgPSAwOwor CWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAwKTsKKwlz eiA9IGFyZy5zaXplOworCisJLyogQmFkIHBvaW50ZXJzLiAqLworCWlndF9hc3NlcnRfZXEoX19n ZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKwlhcmcudmFsdWUgPSAt MTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVG QVVMVCk7CisJYXJnLnZhbHVlID0gMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0 X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7CisKKwkvKiBVbm1hcHBlZC4gKi8KKwlwYWdlWzBd ID0gbW1hcCgwLCA0MDk2LCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwg MCk7CisJaWd0X2Fzc2VydChwYWdlWzBdICE9IE1BUF9GQUlMRUQpOworCW1lbXNldChwYWdlWzBd LCAwLCBzaXplb2Yoc3NldSkpOworCW11bm1hcChwYWdlWzBdLCA0MDk2KTsKKwlhcmcudmFsdWUg PSB0b191c2VyX3BvaW50ZXIocGFnZVswXSk7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0 X2dldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOworCisJLyogU3RyYWRkbGUgaW50byB1bm1h cHBlZCBhcmVhLiAqLworCXBhZ2VbMF0gPSBtbWFwKDAsIDgxOTIsIFBST1RfV1JJVEUsIE1BUF9Q UklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KHBhZ2VbMF0gIT0gTUFQX0ZB SUxFRCk7CisJbXVubWFwKHBhZ2VbMF0sIDgxOTIpOworCXBhZ2VbMF0gPSBtbWFwKHBhZ2VbMF0s IDQwOTYsCisJCSAgICAgICBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OIHwgTUFQ X0ZJWEVELCAtMSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzBdICE9IE1BUF9GQUlMRUQpOworCW1l bXNldChwYWdlWzBdLCAwLCBzaXplb2Yoc3NldSkpOworCXBhZ2VbMV0gPSBtbWFwKCh2b2lkICop KCh1bnNpZ25lZCBsb25nKXBhZ2VbMF0gKyA0MDk2KSwgNDA5NiwKKwkJICAgICAgIFBST1RfV1JJ VEUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04gfCBNQVBfRklYRUQsIC0xLCAwKTsKKwlpZ3RfYXNz ZXJ0KHBhZ2VbMV0gIT0gTUFQX0ZBSUxFRCk7CisJbWVtc2V0KHBhZ2VbMV0sIDAsIHNpemVvZihz c2V1KSk7CisJbXVubWFwKHBhZ2VbMV0sIDQwOTYpOworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9p bnRlcihwYWdlWzFdKSAtCisJCSAgICBzaXplb2Yoc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0 X3BhcmFtX3NzZXUpICsgNDsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFt KGZkLCAmYXJnKSwgLUVGQVVMVCk7CisJbXVubWFwKHBhZ2VbMF0sIDQwOTYpOworCisJLyogU3Ry YWRkbGUgaW50byByZWFkLW9ubHkgYXJlYS4gKi8KKwlwYWdlWzBdID0gbW1hcCgwLCA4MTkyLCBQ Uk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisJaWd0X2Fzc2VydChw YWdlWzBdICE9IE1BUF9GQUlMRUQpOworCW11bm1hcChwYWdlWzBdLCA4MTkyKTsKKwlwYWdlWzBd ID0gbW1hcChwYWdlWzBdLCA0MDk2LAorCQkgICAgICAgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUg fCBNQVBfQU5PTiB8IE1BUF9GSVhFRCwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVswXSAhPSBN QVBfRkFJTEVEKTsKKwltZW1zZXQocGFnZVswXSwgMCwgc2l6ZW9mKHNzZXUpKTsKKwlwYWdlWzFd ID0gbW1hcCgodm9pZCAqKSgodW5zaWduZWQgbG9uZylwYWdlWzBdICsgNDA5NiksIDQwOTYsCisJ CSAgICAgICBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OIHwgTUFQX0ZJWEVELCAt MSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzFdICE9IE1BUF9GQUlMRUQpOworCW1lbXNldChwYWdl WzFdLCAwLCBzaXplb2Yoc3NldSkpOworCWlndF9hc3NlcnQobXByb3RlY3QocGFnZVsxXSwgNDA5 NiwgUFJPVF9SRUFEKSA9PSAwKTsKKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIocGFnZVsx XSAtIHNpemVvZihzc2V1KSArIDQpOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRf cGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKwltdW5tYXAocGFnZVswXSwgNDA5Nik7CisJbXVu bWFwKHBhZ2VbMV0sIDQwOTYpOworCisJLyogc2V0IHBhcmFtICovCisKKwkvKiBJbnZhbGlkIHNp emVzLiAqLworCWFyZy5zaXplID0gMTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0 X3BhcmFtKGZkLCAmYXJnKSwgLUVJTlZBTCk7CisKKwlhcmcuc2l6ZSA9IDA7CisJaWd0X2Fzc2Vy dF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCWFyZy5z aXplID0gc3o7CisKKwkvKiBCYWQgcG9pbnRlcnMuICovCisJYXJnLnZhbHVlID0gMDsKKwlpZ3Rf YXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7CisJ YXJnLnZhbHVlID0gLTE7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShm ZCwgJmFyZyksIC1FRkFVTFQpOworCWFyZy52YWx1ZSA9IDE7CisJaWd0X2Fzc2VydF9lcShfX2dl bV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FRkFVTFQpOworCisJLyogR2V0IHZhbGlk IFNTRVUuICovCisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZzc2V1KTsKKwlpZ3RfYXNz ZXJ0X2VxKF9fZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKSwgMCk7CisKKwkvKiBVbm1h cHBlZC4gKi8KKwlwYWdlWzBdID0gbW1hcCgwLCA0MDk2LCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFU RSB8IE1BUF9BTk9OLCAtMSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzBdICE9IE1BUF9GQUlMRUQp OworCW1lbWNweShwYWdlWzBdLCAmc3NldSwgc2l6ZW9mKHNzZXUpKTsKKwltdW5tYXAocGFnZVsw XSwgNDA5Nik7CisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKHBhZ2VbMF0pOworCWlndF9h c3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUZBVUxUKTsKKwor CS8qIFN0cmFkZGxlIGludG8gdW5tYXBwZWQgYXJlYS4gKi8KKwlwYWdlWzBdID0gbW1hcCgwLCA4 MTkyLCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisJaWd0X2Fz c2VydChwYWdlWzBdICE9IE1BUF9GQUlMRUQpOworCW11bm1hcChwYWdlWzBdLCA4MTkyKTsKKwlw YWdlWzBdID0gbW1hcChwYWdlWzBdLCA0MDk2LAorCQkgICAgICAgUFJPVF9XUklURSwgTUFQX1BS SVZBVEUgfCBNQVBfQU5PTiB8IE1BUF9GSVhFRCwgLTEsIDApOworCWlndF9hc3NlcnQocGFnZVsw XSAhPSBNQVBfRkFJTEVEKTsKKwlwYWdlWzFdID0gbW1hcCgodm9pZCAqKSgodW5zaWduZWQgbG9u ZylwYWdlWzBdICsgNDA5NiksIDQwOTYsCisJCSAgICAgICBQUk9UX1dSSVRFLCBNQVBfUFJJVkFU RSB8IE1BUF9BTk9OIHwgTUFQX0ZJWEVELCAtMSwgMCk7CisJaWd0X2Fzc2VydChwYWdlWzFdICE9 IE1BUF9GQUlMRUQpOworCWFkZHIgPSBwYWdlWzFdIC0gc2l6ZW9mKHNzZXUpICsgNDsKKwltZW1j cHkoYWRkciwgJnNzZXUsIHNpemVvZihzc2V1KSk7CisJbXVubWFwKHBhZ2VbMV0sIDQwOTYpOwor CWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcihhZGRyKTsKKwlpZ3RfYXNzZXJ0X2VxKF9fZ2Vt X2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgLUVGQVVMVCk7CisJbXVubWFwKHBhZ2VbMF0s IDQwOTYpOworCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYXJnLmN0eF9pZCk7Cit9CisKKy8q CisgKiBWZXJpZnkgdGhhdCBnZ3R0IG1hcHBlZCBhcmVhIGNhbiBiZSB1c2VkIGFzIHRoZSBzc2V1 IHBvaW50ZXIuCisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X2dndHRfYXJncyhpbnQgZmQpCit7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgKnNzZXU7CisJc3RydWN0IGRy bV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkxNV9DT05URVhU X1BBUkFNX1NTRVUsCisJCSAgLmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCksCisJCSAg LnNpemUgPSBzaXplb2YoKnNzZXUpLAorCQl9OworCXVpbnQzMl90IGJvOworCisJYm8gPSBnZW1f Y3JlYXRlKGZkLCA0MDk2KTsKKwlhcmcudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoZ2VtX21tYXBf X2d0dChmZCwgYm8sIDQwOTYsCisJCQkJCQkgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKTsKKwor CWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9nZXRfcGFyYW0oZmQsICZhcmcpLCAwKTsKKwlp Z3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKSwgMCk7CisKKwlt dW5tYXAoKHZvaWQgKilhcmcudmFsdWUsIDQwOTYpOworCWdlbV9jbG9zZShmZCwgYm8pOworCWdl bV9jb250ZXh0X2Rlc3Ryb3koZmQsIGFyZy5jdHhfaWQpOworfQorCisvKgorICogVmVyaWZ5IHRo YXQgaW52YWxpZCBTU0VVIHZhbHVlcyBhcmUgcmVqZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCit0 ZXN0X2ludmFsaWRfc3NldShpbnQgZmQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0 X3BhcmFtX3NzZXUgZGV2aWNlX3NzZXUgPSB7IH07CisJc3RydWN0IGRybV9pOTE1X2dlbV9jb250 ZXh0X3BhcmFtX3NzZXUgc3NldSA9IHsgfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRf cGFyYW0gYXJnID0KKwkJeyAucGFyYW0gPSBJOTE1X0NPTlRFWFRfUEFSQU1fU1NFVSwKKwkJICAu Y3R4X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKSwKKwkJICAuc2l6ZSA9IHNpemVvZihzc2V1 KSwKKwkJfTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIEZldGNoIHRoZSBkZXZpY2UgZGVmYXVs dHMuICovCisJYXJnLnZhbHVlID0gdG9fdXNlcl9wb2ludGVyKCZkZXZpY2Vfc3NldSk7CisJZ2Vt X2NvbnRleHRfZ2V0X3BhcmFtKGZkLCAmYXJnKTsKKworCWFyZy52YWx1ZSA9IHRvX3VzZXJfcG9p bnRlcigmc3NldSk7CisKKwkvKiBUcnkgYWxsIHNsaWNlIG1hc2tzIGtub3duIHRvIGJlIGludmFs aWQuICovCisJc3NldSA9IGRldmljZV9zc2V1OworCWZvciAoaSA9IDE7IGkgPD0gKDggLSBfX3Ns aWNlX2NvdW50X18pOyBpKyspIHsKKwkJc3NldS5zbGljZV9tYXNrID0gbWFza19wbHVzKF9fc2xp Y2VfbWFza19fLCBpKTsKKwkJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShm ZCwgJmFyZyksIC1FSU5WQUwpOworCX0KKworCS8qIDAgc2xpY2VzLiAqLworCXNzZXUuc2xpY2Vf bWFzayA9IDA7CisJaWd0X2Fzc2VydF9lcSgtRUlOVkFMLCBfX2dlbV9jb250ZXh0X3NldF9wYXJh bShmZCwgJmFyZykpOworCisJLyogVHJ5IGFsbCBzdWJzbGljZSBtYXNrcyBrbm93biB0byBiZSBp bnZhbGlkLiAqLworCXNzZXUgPSBkZXZpY2Vfc3NldTsKKwlmb3IgKGkgPSAxOyBpIDw9ICg4IC0g X19zdWJzbGljZV9jb3VudF9fKTsgaSsrKSB7CisJCXNzZXUuc3Vic2xpY2VfbWFzayA9IG1hc2tf cGx1cyhfX3N1YnNsaWNlX21hc2tfXywgaSk7CisJCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4 dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKwl9CisKKwkvKiAwIHN1YnNsaWNlcy4g Ki8KKwlzc2V1LnN1YnNsaWNlX21hc2sgPSAwOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4 dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCS8qIFRyeSBudW1iZXIgb2YgRVVz IHN1cGVyaW9yIHRvIHRoZSBtYXggYXZhaWxhYmxlLiAqLworCXNzZXUgPSBkZXZpY2Vfc3NldTsK Kwlzc2V1Lm1pbl9ldXNfcGVyX3N1YnNsaWNlID0gZGV2aWNlX3NzZXUubWF4X2V1c19wZXJfc3Vi c2xpY2UgKyAxOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZh cmcpLCAtRUlOVkFMKTsKKworCXNzZXUgPSBkZXZpY2Vfc3NldTsKKwlzc2V1Lm1heF9ldXNfcGVy X3N1YnNsaWNlID0gZGV2aWNlX3NzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgKyAxOworCWlndF9h c3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKwor CS8qIFRyeSB0byBwcm9ncmFtIDAgbWF4IEVVcy4gKi8KKwlzc2V1ID0gZGV2aWNlX3NzZXU7CisJ c3NldS5tYXhfZXVzX3Blcl9zdWJzbGljZSA9IDA7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250 ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJLyogTWluID4gbWF4ICovCisJ c3NldSA9IGRldmljZV9zc2V1OworCXNzZXUubWluX2V1c19wZXJfc3Vic2xpY2UgPSBzc2V1Lm1h eF9ldXNfcGVyX3N1YnNsaWNlOworCXNzZXUubWF4X2V1c19wZXJfc3Vic2xpY2UgPSAxOworCWln dF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsK KworCWlmIChfX2ludGVsX2dlbl9fICE9IDExKQorCQlnb3RvIG91dDsKKworCS8qIFN1YnNldCBv ZiBzdWJzbGljZXMgYnV0IHNsaWNlIG1hc2sgZ3JlYXRlciB0aGFuIG9uZS4gKi8KKwlpZiAoX19z bGljZV9jb3VudF9fID4gMSkgeworCQlzc2V1ID0gZGV2aWNlX3NzZXU7CisJCXNzZXUuc3Vic2xp Y2VfbWFzayA9IG1hc2tfbWludXNfb25lKHNzZXUuc3Vic2xpY2VfbWFzayk7CisJCWlndF9hc3Nl cnRfZXEoX19nZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKwl9CisK KwkvKiBPZGQgc3Vic2xpY2VzIGFib3ZlIGZvdXIuICovCisJc3NldSA9IGRldmljZV9zc2V1Owor CXNzZXUuc2xpY2VfbWFzayA9IDB4MTsKKwlzc2V1LnN1YnNsaWNlX21hc2sgPSBtYXNrX21pbnVz X29uZShzc2V1LnN1YnNsaWNlX21hc2spOworCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4dF9z ZXRfcGFyYW0oZmQsICZhcmcpLCAtRUlOVkFMKTsKKworCS8qIE1vcmUgdGhhbiBoYWxmIHN1YnNs aWNlcyB3aXRoIG9uZSBzbGljZS4gKi8KKwlzc2V1ID0gZGV2aWNlX3NzZXU7CisJc3NldS5zbGlj ZV9tYXNrID0gMHgxOworCXNzZXUuc3Vic2xpY2VfbWFzayA9IG1hc2tfbWludXMoc3NldS5zdWJz bGljZV9tYXNrLAorCQkJCQlfX3N1YnNsaWNlX2NvdW50X18gLyAyIC0gMSk7CisJaWd0X2Fzc2Vy dF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCisJLyog Vk1FICovCisKKwkvKiBTbGljZSBjb3VudCBiZXR3ZWVuIG9uZSBhbmQgbWF4LiAqLworCWlmIChf X3NsaWNlX2NvdW50X18gPiAyKSB7CisJCXNzZXUgPSBkZXZpY2Vfc3NldTsKKwkJc3NldS5zbGlj ZV9tYXNrID0gbWFza19taW51c19vbmUoc3NldS5zbGljZV9tYXNrKTsKKwkJaWd0X2Fzc2VydF9l cShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFyZyksIC1FSU5WQUwpOworCX0KKworCS8q IExlc3MgdGhhbiBoYWxmIHN1YnNsaWNlcyB3aXRoIG9uZSBzbGljZS4gKi8KKwlzc2V1ID0gZGV2 aWNlX3NzZXU7CisJc3NldS5zbGljZV9tYXNrID0gMHgxOworCXNzZXUuc3Vic2xpY2VfbWFzayA9 IG1hc2tfbWludXMoc3NldS5zdWJzbGljZV9tYXNrLAorCQkJCQlfX3N1YnNsaWNlX2NvdW50X18g LyAyICsgMSk7CisJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShmZCwgJmFy ZyksIC1FSU5WQUwpOworCitvdXQ6CisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYXJnLmN0eF9p ZCk7Cit9CisKKy8qIFZlcmlmeSB0aGF0IHRoZSBrZXJuZWwgcmV0dXJucyBhIGNvcnJlY3QgZXJy b3IgdmFsdWUgb24gR2VuIDwgOC4gKi8KK3N0YXRpYyB2b2lkCitpbml0X2NvbnRleHRzKGludCBm ZCwgdWludDMyX3QgKmN0eCwgdW5zaWduZWQgaW50IG51bSwKKwkgICAgICB1aW50NjRfdCBtYXNr MCwgdWludDY0X3QgbWFzazEpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZ3RfYXNzZXJ0X2Vx KG51bSwgMik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJCWN0eFtpXSA9IGdlbV9j b250ZXh0X2NyZWF0ZShmZCk7CisKKwljb250ZXh0X3NldF9zbGljZV9tYXNrKGZkLCBjdHhbMF0s IG1hc2swKTsKKwljb250ZXh0X3NldF9zbGljZV9tYXNrKGZkLCBjdHhbMV0sIG1hc2sxKTsKK30K Kworc3RhdGljIHZvaWQKK2RlZl9zc2V1KHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJh bV9zc2V1ICpzc2V1LAorCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSAq ZGVmKQoreworCW1lbWNweShzc2V1LCBkZWYsIHNpemVvZigqc3NldSkpOworfQorCitzdGF0aWMg dm9pZAorcGdfc3NldShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSAqc3Nl dSwKKwkgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgKmRlZikKK3sKKwl1 bnNpZ25lZCBpbnQgc3M7CisKKwltZW1jcHkoc3NldSwgZGVmLCBzaXplb2YoKnNzZXUpKTsKKwor CXNzID0gX19idWlsdGluX3BvcGNvdW50KGRlZi0+c3Vic2xpY2VfbWFzayk7CisKKwkvKiBHZW4x MSBWTUUgZnJpZW5kbHkgY29uZmlndXJhdGlvbi4gKi8KKwlzc2V1LT5zbGljZV9tYXNrID0gMTsK Kwlzc2V1LT5zdWJzbGljZV9tYXNrID0gfih+MCA8PCAoc3MgLyAyKSk7Cit9CisKK3N0YXRpYyB2 b2lkCitvYV9zc2V1KHN0cnVjdCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbV9zc2V1ICpzc2V1 LAorCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSAqZGVmKQoreworCWlm IChfX2ludGVsX2dlbl9fID09IDExKQorCQlwZ19zc2V1KHNzZXUsIGRlZik7CisJZWxzZQorCQlk ZWZfc3NldShzc2V1LCBkZWYpOworfQorCitzdGF0aWMgdm9pZAorZ2V0X2RldmljZV9zc2V1KGlu dCBmZCwgc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtX3NzZXUgKnNzZXUpCit7CisJ c3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIGFyZyA9CisJCXsgLnBhcmFtID0gSTkx NV9DT05URVhUX1BBUkFNX1NTRVUsCisJCSAgLnNpemUgPSBzaXplb2YoKnNzZXUpLAorCQkgIC52 YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcihzc2V1KSB9OworCisJbWVtc2V0KHNzZXUsIDAsIHNpemVv Zigqc3NldSkpOworCWdlbV9jb250ZXh0X2dldF9wYXJhbShmZCwgJmFyZyk7Cit9CisKKy8qCisg KiBWZXJpZnkgdGhhdCBwb3dlcmdhdGluZyBzZXR0aW5ncyBhcmUgcHV0IG9uIGhvbGQgd2hpbGUg aTkxNS9wZXJmIGlzCisgKiBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkCit0ZXN0X3BlcmZfb2Eo aW50IGZkKQoreworCXVpbnQ2NF90IHByb3BlcnRpZXNbXSA9IHsKKwkJLyogSW5jbHVkZSBPQSBy ZXBvcnRzIGluIHNhbXBsZXMgKi8KKwkJRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQSwgdHJ1 ZSwKKworCQkvKiBPQSB1bml0IGNvbmZpZ3VyYXRpb24gKi8KKwkJRFJNX0k5MTVfUEVSRl9QUk9Q X09BX01FVFJJQ1NfU0VULCAxLCAvKiB0ZXN0IG1ldHJpYyAqLworCQlEUk1fSTkxNV9QRVJGX1BS T1BfT0FfRk9STUFULCBJOTE1X09BX0ZPUk1BVF9BMzJ1NDBfQTR1MzJfQjhfQzgsCisJCURSTV9J OTE1X1BFUkZfUFJPUF9PQV9FWFBPTkVOVCwgMjAsCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcGVy Zl9vcGVuX3BhcmFtIHBhcmFtID0geworCQkuZmxhZ3MgPSBJOTE1X1BFUkZfRkxBR19GRF9DTE9F WEVDIHwKKwkJSTkxNV9QRVJGX0ZMQUdfRkRfTk9OQkxPQ0ssCisJCS5udW1fcHJvcGVydGllcyA9 IEFSUkFZX1NJWkUocHJvcGVydGllcykgLyAyLAorCQkucHJvcGVydGllc19wdHIgPSB0b191c2Vy X3BvaW50ZXIocHJvcGVydGllcyksCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRf cGFyYW1fc3NldSBkZXZpY2Vfc3NldSwgX3BnX3NzZXUsIF9vYV9zc2V1OworCXVuc2lnbmVkIGlu dCBwZ19zbGljZV9jb3VudCwgb2Ffc2xpY2VfY291bnQ7CisJdWludDMyX3QgY3R4WzJdOworCXVu c2lnbmVkIGludCBpOworCWludCBwZXJmX2ZkOworCisJZ2V0X2RldmljZV9zc2V1KGZkLCAmZGV2 aWNlX3NzZXUpOworCXBnX3NzZXUoJl9wZ19zc2V1LCAmZGV2aWNlX3NzZXUpOworCW9hX3NzZXUo Jl9vYV9zc2V1LCAmZGV2aWNlX3NzZXUpOworCXBnX3NsaWNlX2NvdW50ID0gX19idWlsdGluX3Bv cGNvdW50KF9wZ19zc2V1LnNsaWNlX21hc2spOworCW9hX3NsaWNlX2NvdW50ID0gX19idWlsdGlu X3BvcGNvdW50KF9vYV9zc2V1LnNsaWNlX21hc2spOworCisJaW5pdF9jb250ZXh0cyhmZCwgY3R4 LCBBUlJBWV9TSVpFKGN0eCksCisJCSAgICAgIGRldmljZV9zc2V1LnNsaWNlX21hc2ssIF9wZ19z c2V1LnNsaWNlX21hc2spOworCisJLyoKKwkgKiBUZXN0IGZhbHNlIHBvc2l0aXZlcyB3aXRoIHBy ZWRpY2F0ZXMgKG9ubHkgYXZhaWxhYmxlIG9uCisJICogYmVmb3JlIEdlbjEwKS4KKwkgKi8KKwlp ZiAoX19pbnRlbF9nZW5fXyA8IDEwKQorCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQo ZmQsIGN0eFsxXSwgX19zbGljZV9jb3VudF9fKSwKKwkJCSAgICAgIDApOworCisJaWd0X2Fzc2Vy dF9lcShyZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMF0sIDApLCBfX3NsaWNlX2NvdW50X18pOwor CWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCAwKSwgcGdfc2xpY2Vf Y291bnQpOworCisJLyoKKwkgKiBOb3cgb3BlbiBpOTE1L3BlcmYgYW5kIHZlcmlmeSB0aGF0IGFs bCBjb250ZXh0cyBoYXZlIGJlZW4KKwkgKiByZWNvbmZpZ3VyZWQgdG8gdGhlIGRldmljZSdzIGRl ZmF1bHQuCisJICovCisJcGVyZl9mZCA9IGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfUEVS Rl9PUEVOLCAmcGFyYW0pOworCWlndF9hc3NlcnRfZmQocGVyZl9mZCk7CisKKwlpZiAoX19pbnRl bF9nZW5fXyA8IDEwKQorCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFsx XSwgcGdfc2xpY2VfY291bnQpLCAwKTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3Vu dChmZCwgY3R4WzBdLCAwKSwgb2Ffc2xpY2VfY291bnQpOworCWlndF9hc3NlcnRfZXEocmVhZF9z bGljZV9jb3VudChmZCwgY3R4WzFdLCAwKSwgb2Ffc2xpY2VfY291bnQpOworCWlmIChfX2ludGVs X2dlbl9fID09IDExKSB7CisJCWlndF9hc3NlcnRfZXEocmVhZF9zdWJzbGljZV9jb3VudChmZCwg Y3R4WzBdKSwKKwkJCSAgICAgIF9fc3Vic2xpY2VfY291bnRfXyAvIDIpOworCQlpZ3RfYXNzZXJ0 X2VxKHJlYWRfc3Vic2xpY2VfY291bnQoZmQsIGN0eFsxXSksCisJCQkgICAgICBfX3N1YnNsaWNl X2NvdW50X18gLyAyKTsKKwl9CisKKwljbG9zZShwZXJmX2ZkKTsKKworCS8qCisJICogQWZ0ZXIg Y2xvc2luZyB0aGUgcGVyZiBzdHJlYW0sIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZQorCSAqIGJh Y2sgdG8gdGhlIHByb2dyYW1tZWQgdmFsdWVzLgorCSAqLworCWlmIChfX2ludGVsX2dlbl9fIDwg MTApCisJCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCBfX3NsaWNl X2NvdW50X18pLCAwKTsKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFsw XSwgMCksIF9fc2xpY2VfY291bnRfXyk7CisJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50 KGZkLCBjdHhbMV0sIDApLCBwZ19zbGljZV9jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShjdHgpOyBpKyspCisJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eFtpXSk7CisK KwkvKgorCSAqIE9wZW4gaTkxNS9wZXJmIGZpcnN0IGFuZCB2ZXJpZnkgdGhhdCBhbGwgY29udGV4 dHMgY3JlYXRlZAorCSAqIGFmdGVyd2FyZCBhcmUgY29uZmlndXJlZCB0byB0aGUgZGV2aWNlJ3Mg ZGVmYXVsdC4KKwkgKi8KKwlwZXJmX2ZkID0gaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9Q RVJGX09QRU4sICZwYXJhbSk7CisJaWd0X2Fzc2VydF9mZChwZXJmX2ZkKTsKKworCWluaXRfY29u dGV4dHMoZmQsIGN0eCwgQVJSQVlfU0laRShjdHgpLAorCQkgICAgICBkZXZpY2Vfc3NldS5zbGlj ZV9tYXNrLCBfcGdfc3NldS5zbGljZV9tYXNrKTsKKworCS8qCisJICogQ2hlY2sgdGhlIGRldmlj ZSdzIGRlZmF1bHQgdmFsdWVzLCBkZXNwaXRlIHNldHRpbmcKKwkgKiBvdGhlcndpc2UuCisJICov CisJaWYgKF9faW50ZWxfZ2VuX18gPCAxMCkKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2Nv dW50KGZkLCBjdHhbMV0sIHBnX3NsaWNlX2NvdW50KSwgMCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJl YWRfc2xpY2VfY291bnQoZmQsIGN0eFswXSwgMCksIG9hX3NsaWNlX2NvdW50KTsKKwlpZ3RfYXNz ZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0eFsxXSwgMCksIG9hX3NsaWNlX2NvdW50KTsK KwlpZiAoX19pbnRlbF9nZW5fXyA9PSAxMSkgeworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc3Vic2xp Y2VfY291bnQoZmQsIGN0eFswXSksCisJCQkgICAgICBfX3N1YnNsaWNlX2NvdW50X18gLyAyKTsK KwkJaWd0X2Fzc2VydF9lcShyZWFkX3N1YnNsaWNlX2NvdW50KGZkLCBjdHhbMV0pLAorCQkJICAg ICAgX19zdWJzbGljZV9jb3VudF9fIC8gMik7CisJfQorCisJY2xvc2UocGVyZl9mZCk7CisKKwkv KgorCSAqIEFmdGVyIGNsb3NpbmcgdGhlIHBlcmYgc3RyZWFtLCBjb25maWd1cmF0aW9ucyBzaG91 bGQgYmUKKwkgKiBiYWNrIHRvIHRoZSBwcm9ncmFtbWVkIHZhbHVlcy4KKwkgKi8KKwlpZiAoX19p bnRlbF9nZW5fXyA8IDEwKQorCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291bnQoZmQsIGN0 eFsxXSwgX19zbGljZV9jb3VudF9fKSwKKwkJCSAgICAgIDApOworCisJaWd0X2Fzc2VydF9lcShy ZWFkX3NsaWNlX2NvdW50KGZkLCBjdHhbMF0sIDApLCBfX3NsaWNlX2NvdW50X18pOworCWlndF9h c3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4WzFdLCAwKSwgcGdfc2xpY2VfY291bnQp OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4KTsgaSsrKQorCQlnZW1fY29udGV4 dF9kZXN0cm95KGZkLCBjdHhbaV0pOworfQorCitzdGF0aWMgaWd0X3NwaW5fdCAqIF9fc3Bpbl9w b2xsKGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVj dCBpZ3Rfc3Bpbl9mYWN0b3J5IG9wdHMgPSB7CisJCS5jdHggPSBjdHgsCisJCS5lbmdpbmUgPSBm bGFncywKKwl9OworCisJaWYgKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIGZsYWdzKSkKKwkJb3B0 cy5mbGFncyB8PSBJR1RfU1BJTl9QT0xMX1JVTjsKKworCXJldHVybiBfX2lndF9zcGluX2JhdGNo X2ZhY3RvcnkoZmQsICZvcHRzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19zcGluX3dh aXQoaW50IGZkLCBpZ3Rfc3Bpbl90ICpzcGluKQoreworCXN0cnVjdCB0aW1lc3BlYyBzdGFydCA9 IHsgfTsKKworCWlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKKworCWlmIChzcGluLT5ydW5uaW5n KSB7CisJCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7CisKKwkJd2hpbGUgKCFSRUFEX09OQ0Uo KnNwaW4tPnJ1bm5pbmcpKSB7CisJCQl1bnNpZ25lZCBsb25nIHQgPSBpZ3RfbnNlY19lbGFwc2Vk KCZzdGFydCk7CisKKwkJCWlmICgodCAtIHRpbWVvdXQpID4gMjUwZTYpIHsKKwkJCQl0aW1lb3V0 ID0gdDsKKwkJCQlpZ3Rfd2FybigiU3Bpbm5lciBub3QgcnVubmluZyBhZnRlciAlLjJmbXNcbiIs CisJCQkJCSAoZG91YmxlKXQgLyAxZTYpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWd0X2Rl YnVnKCJfX3NwaW5fd2FpdCAtIHVzbGVlcCBtb2RlXG4iKTsKKwkJdXNsZWVwKDUwMGUzKTsgLyog QmV0dGVyIHRoYW4gbm90aGluZyEgKi8KKwl9CisKKwlyZXR1cm4gaWd0X25zZWNfZWxhcHNlZCgm c3RhcnQpOworfQorCitzdGF0aWMgaWd0X3NwaW5fdCAqIF9fc3Bpbl9zeW5jKGludCBmZCwgdWlu dDMyX3QgY3R4LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWlndF9zcGluX3QgKnNwaW4gPSBf X3NwaW5fcG9sbChmZCwgY3R4LCBmbGFncyk7CisKKwlfX3NwaW5fd2FpdChmZCwgc3Bpbik7CisK KwlyZXR1cm4gc3BpbjsKK30KKworc3RhdGljIHVpbnQzMl90CityZWFkX3NsaWNlX2NvdW50X2J1 c3koaW50IGZkLCB1aW50MzJfdCBjb250ZXh0LCB1aW50MzJfdCBleHBlY3RlZCwKKwkJICAgICAg aWd0X3NwaW5fdCAqc3BpbikKK3sKKwlyZXR1cm4gX19yZWFkX3NsaWNlX2NvdW50KGZkLCBjb250 ZXh0LCBleHBlY3RlZCwgc3Bpbik7Cit9CisKKyNkZWZpbmUgVEVTVF9JRExFCSgxKQorI2RlZmlu ZSBURVNUX0JVU1kJKDIpCisjZGVmaW5lIFRFU1RfUkVTRVQJKDQpCisjZGVmaW5lIFRFU1RfSEFO RwkoOCkKKyNkZWZpbmUgVEVTVF9TVVNQRU5ECSgxNikKKworc3RhdGljIGlndF9zcGluX3QgKgor X19wcmVfc2V0KGludCBmZCwgdW5zaWduZWQgZmxhZ3MsIHVpbnQzMl90IGN0eCkKK3sKKwlpZiAo ZmxhZ3MgJiBURVNUX0JVU1kpCisJCXJldHVybiBfX3NwaW5fc3luYyhmZCwgY3R4LCBJOTE1X0VY RUNfUkVOREVSKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaWd0X3NwaW5fdCAqCitf X3Bvc3Rfc2V0KGludCBmZCwgdW5zaWduZWQgaW50IGZsYWdzLCB1aW50MzJfdCBjdHgsIGlndF9z cGluX3QgKnNwaW4sCisJICAgdW5zaWduZWQgaW50IGV4cGVjdGVkKQoreworCWlmIChmbGFncyAm IFRFU1RfUkVTRVQpCisJCWlndF9mb3JjZV9ncHVfcmVzZXQoZmQpOworCisJaWYgKChmbGFncyAm IFRFU1RfQlVTWSkgJiYgIShmbGFncyAmIChURVNUX1JFU0VUIHwgVEVTVF9IQU5HKSkpCisJCWln dF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudF9idXN5KGZkLCBjdHgsIDAsIHNwaW4pLAorCQkJ ICAgICAgZXhwZWN0ZWQpOworCWVsc2UKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3NsaWNlX2NvdW50 KGZkLCBjdHgsIDApLCBleHBlY3RlZCk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJlYWRfc2xpY2VfY291 bnQoZmQsIDAsIDApLCBfX3NsaWNlX2NvdW50X18pOworCisJaWYgKHNwaW4pCisJCWlndF9zcGlu X2JhdGNoX2ZyZWUoZmQsIHNwaW4pOworCisJaWYgKGZsYWdzICYgVEVTVF9JRExFKQorCQlpZ3Rf ZHJvcF9jYWNoZXNfc2V0KGZkLCBEUk9QX1JFVElSRSB8IERST1BfSURMRSB8IERST1BfQUNUSVZF KTsKKworCWlmIChmbGFncyAmIFRFU1RfU1VTUEVORCkKKwkJaWd0X3N5c3RlbV9zdXNwZW5kX2F1 dG9yZXN1bWUoU1VTUEVORF9TVEFURV9NRU0sCisJCQkJCSAgICAgIFNVU1BFTkRfVEVTVF9OT05F KTsKKworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgY3R4LCAwKSwgZXhwZWN0 ZWQpOworCWlndF9hc3NlcnRfZXEocmVhZF9zbGljZV9jb3VudChmZCwgMCwgMCksIF9fc2xpY2Vf Y291bnRfXyk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRlc3QgY29udGV4dCByZS1j b25maWd1cmF0aW9uIHdpdGggZWl0aGVyIGlkbGUgb3IgYnVzeSBjb250ZXh0cy4KKyAqLworc3Rh dGljIHZvaWQKK3Rlc3RfZHluYW1pYyhpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBkZXZpY2Vfc3NldTsKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW1fc3NldSBzc2V1ID0geyB9OworCXN0cnVjdCBk cm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSBhcmcgPQorCQl7IC5wYXJhbSA9IEk5MTVfQ09OVEVY VF9QQVJBTV9TU0VVLAorCQkgIC5jdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpLAorCQkg IC5zaXplID0gc2l6ZW9mKHNzZXUpLAorCQkgIC52YWx1ZSA9IHRvX3VzZXJfcG9pbnRlcigmc3Nl dSkgfTsKKwlpZ3Rfc3Bpbl90ICpzcGluID0gTlVMTDsKKworCWlndF9yZXF1aXJlKF9fc2xpY2Vf Y291bnRfXyA+IDEpOworCisJZ2V0X2RldmljZV9zc2V1KGZkLCAmZGV2aWNlX3NzZXUpOworCWRl Zl9zc2V1KCZzc2V1LCAmZGV2aWNlX3NzZXUpOworCisJLyogRmlyc3Qgc2V0IHRoZSBkZWZhdWx0 IG1hc2sgKi8KKwlzcGluID0gX19wcmVfc2V0KGZkLCBmbGFncywgYXJnLmN0eF9pZCk7CisJZ2Vt X2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKTsKKwlzcGluID0gX19wb3N0X3NldChmZCwgZmxh Z3MsIGFyZy5jdHhfaWQsIHNwaW4sCisJCQkgIF9fYnVpbHRpbl9wb3Bjb3VudChzc2V1LnNsaWNl X21hc2spKTsKKworCS8qIFRoZW4gc2V0IGEgcG93ZXJnYXRlZCBjb25maWd1cmF0aW9uICovCisJ c3BpbiA9IF9fcHJlX3NldChmZCwgZmxhZ3MsIGFyZy5jdHhfaWQpOworCXBnX3NzZXUoJnNzZXUs ICZkZXZpY2Vfc3NldSk7CisJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGZkLCAmYXJnKTsKKwlzcGlu ID0gX19wb3N0X3NldChmZCwgZmxhZ3MsIGFyZy5jdHhfaWQsIHNwaW4sCisJCQkgIF9fYnVpbHRp bl9wb3Bjb3VudChzc2V1LnNsaWNlX21hc2spKTsKKworCS8qIFB1dCB0aGUgZGV2aWNlJ3MgZGVm YXVsdCBiYWNrIGFnYWluICovCisJc3BpbiA9IF9fcHJlX3NldChmZCwgZmxhZ3MsIGFyZy5jdHhf aWQpOworCWRlZl9zc2V1KCZzc2V1LCAmZGV2aWNlX3NzZXUpOworCWdlbV9jb250ZXh0X3NldF9w YXJhbShmZCwgJmFyZyk7CisJc3BpbiA9IF9fcG9zdF9zZXQoZmQsIGZsYWdzLCBhcmcuY3R4X2lk LCBzcGluLAorCQkJICBfX2J1aWx0aW5fcG9wY291bnQoc3NldS5zbGljZV9tYXNrKSk7CisKKwkv KiBPbmUgbGFzdCBwb3dlcmdhdGVkIGNvbmZpZyBmb3IgdGhlIHJvYWQuLi4gKi8KKwlzcGluID0g X19wcmVfc2V0KGZkLCBmbGFncywgYXJnLmN0eF9pZCk7CisJcGdfc3NldSgmc3NldSwgJmRldmlj ZV9zc2V1KTsKKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oZmQsICZhcmcpOworCXNwaW4gPSBfX3Bv c3Rfc2V0KGZkLCBmbGFncywgYXJnLmN0eF9pZCwgc3BpbiwKKwkJCSAgX19idWlsdGluX3BvcGNv dW50KHNzZXUuc2xpY2VfbWFzaykpOworCisJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwgYXJnLmN0 eF9pZCk7Cit9CisKK2lndF9tYWluCit7CisJdW5zaWduZWQgaW50IG1heF9zbGljZXMgPSAzLCBt YXhfc3Vic2xpY2VzID0gMzsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZmQ7CisKKwlpZ3RfZml4 dHVyZSB7CisJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7CisJCWlndF9yZXF1 aXJlX2dlbShmZCk7CisKKwkJX19pbnRlbF9kZXZpZF9fID0gaW50ZWxfZ2V0X2RybV9kZXZpZChm ZCk7CisJCV9faW50ZWxfZ2VuX18gPSBpbnRlbF9nZW4oX19pbnRlbF9kZXZpZF9fKTsKKworCQlp Z3RfcmVxdWlyZShrZXJuZWxfaGFzX3Blcl9jb250ZXh0X3NzZXVfc3VwcG9ydChmZCkpOworCisJ CWlmIChfX2ludGVsX2dlbl9fID49IDExKQorCQkJX19yZWFkX3NsaWNlX2NvdW50ID0gZ2VuMTFf cmVhZF9zbGljZV9jb3VudDsKKwkJZWxzZQorCQkJX19yZWFkX3NsaWNlX2NvdW50ID0gZ2VuOF9y ZWFkX3NsaWNlX2NvdW50OworCX0KKworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJaWd0X2ZpeHR1 cmUgeworCQkJZHJtX2k5MTVfZ2V0cGFyYW1fdCBncDsKKworCQkJZ3AucGFyYW0gPSBJOTE1X1BB UkFNX1NMSUNFX01BU0s7CisJCQlncC52YWx1ZSA9IChpbnQgKikgJl9fc2xpY2VfbWFza19fOwor CQkJZG9faW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApOworCQkJX19zbGlj ZV9jb3VudF9fID0gX19idWlsdGluX3BvcGNvdW50KF9fc2xpY2VfbWFza19fKTsKKworCQkJZ3Au cGFyYW0gPSBJOTE1X1BBUkFNX1NVQlNMSUNFX01BU0s7CisJCQlncC52YWx1ZSA9IChpbnQgKikg Jl9fc3Vic2xpY2VfbWFza19fOworCQkJZG9faW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBB UkFNLCAmZ3ApOworCQkJX19zdWJzbGljZV9jb3VudF9fID0KKwkJCQlfX2J1aWx0aW5fcG9wY291 bnQoX19zdWJzbGljZV9tYXNrX18pOworCQl9CisKKwkJaWd0X3N1YnRlc3QoImludmFsaWQtYXJn cyIpCisJCQl0ZXN0X2ludmFsaWRfYXJncyhmZCk7CisKKwkJaWd0X3N1YnRlc3QoImludmFsaWQt c3NldSIpCisJCQl0ZXN0X2ludmFsaWRfc3NldShmZCk7CisKKwkJaWd0X3N1YnRlc3QoImdndHQt YXJncyIpCisJCQl0ZXN0X2dndHRfYXJncyhmZCk7CisKKwkJaWd0X3N1YnRlc3QoImVuZ2luZXMi KQorCQkJdGVzdF9lbmdpbmVzKGZkKTsKKworCQlmb3IgKGkgPSAxOyBpIDwgbWF4X3NsaWNlczsg aSsrKSB7CisJCQlpZ3Rfc3VidGVzdF9mKCJzbGljZS1wZy0laSIsIGkpIHsKKwkJCQlpZ3RfcmVx dWlyZShfX3NsaWNlX2NvdW50X18gPiBpKTsKKworCQkJCXRlc3Rfc2xpY2VfcGcoZmQsIGkpOwor CQkJfQorCQl9CisKKwkJZm9yIChpID0gMTsgaSA8IG1heF9zdWJzbGljZXM7IGkrKykgeworCQkJ aWd0X3N1YnRlc3RfZigic3Vic2xpY2UtcGctJWkiLCBpKSB7CisJCQkJaWd0X3JlcXVpcmUoX19z dWJzbGljZV9jb3VudF9fID49IDIpOworCisJCQkJLyoKKwkJCQkgKiBPbmx5IGF2YWlsYWJsZSBv biBzb21lIEF0b20gcGxhdGZvcm1zIGFuZAorCQkJCSAqIEdlbjEwKy4KKwkJCQkgKi8KKwkJCQlp Z3RfcmVxdWlyZShJU19CUk9YVE9OKF9faW50ZWxfZGV2aWRfXykgfHwKKwkJCQkJICAgIElTX0dF TUlOSUxBS0UoX19pbnRlbF9kZXZpZF9fKSB8fAorCQkJCQkgICAgX19pbnRlbF9nZW5fXyA+PSAx MCk7CisKKwkJCQl0ZXN0X3N1YnNsaWNlX3BnKGZkLCBpKTsKKwkJCX0KKwkJfQorCisJCWlndF9z dWJ0ZXN0KCJwZXJmLW9hIikgeworCQkJaWd0X3JlcXVpcmUoX19zbGljZV9jb3VudF9fID4gMSk7 CisKKwkJCXRlc3RfcGVyZl9vYShmZCk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgiZHluYW1pYyIp CisJCQl0ZXN0X2R5bmFtaWMoZmQsIDApOworCisJCWlndF9zdWJ0ZXN0KCJkeW5hbWljLWJ1c3ki KQorCQkJdGVzdF9keW5hbWljKGZkLCBURVNUX0JVU1kpOworCisJCWlndF9zdWJ0ZXN0KCJkeW5h bWljLXJlc2V0IikKKwkJCXRlc3RfZHluYW1pYyhmZCwgVEVTVF9SRVNFVCk7CisKKwkJaWd0X3N1 YnRlc3QoImR5bmFtaWMtYnVzeS1yZXNldCIpCisJCQl0ZXN0X2R5bmFtaWMoZmQsIFRFU1RfQlVT WSB8IFRFU1RfUkVTRVQpOworCisJCWlndF9zdWJ0ZXN0KCJkeW5hbWljLWJ1c3ktaGFuZyIpCisJ CQl0ZXN0X2R5bmFtaWMoZmQsIFRFU1RfQlVTWSB8IFRFU1RfSEFORyk7CisKKwkJaWd0X3N1YnRl c3QoImR5bmFtaWMtaWRsZSIpCisJCQl0ZXN0X2R5bmFtaWMoZmQsIFRFU1RfSURMRSk7CisKKwkJ aWd0X3N1YnRlc3QoImR5bmFtaWMtc3VzcGVuZCIpCisJCQl0ZXN0X2R5bmFtaWMoZmQsIFRFU1Rf U1VTUEVORCk7CisKKwkJaWd0X3N1YnRlc3QoImR5bmFtaWMtaWRsZS1zdXNwZW5kIikKKwkJCXRl c3RfZHluYW1pYyhmZCwgVEVTVF9JRExFIHwgVEVTVF9TVVNQRU5EKTsKKwl9CisKKwlpZ3RfZml4 dHVyZSB7CisJCWNsb3NlKGZkKTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWls ZCBiL3Rlc3RzL21lc29uLmJ1aWxkCmluZGV4IGQyMmQ1OWUwODM3ZC4uZjcwYzg1OWYxYTYyIDEw MDY0NAotLS0gYS90ZXN0cy9tZXNvbi5idWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAt MjQ4LDYgKzI0OCwxMyBAQCBmb3JlYWNoIHByb2cgOiB0ZXN0X3Byb2dzCiAJCSAgIGluc3RhbGwg OiB0cnVlKQogZW5kZm9yZWFjaAogCit0ZXN0X2V4ZWN1dGFibGVzICs9IGV4ZWN1dGFibGUoJ2dl bV9jdHhfc3NldScsICdnZW1fY3R4X3NzZXUuYycsCisJICAgZGVwZW5kZW5jaWVzIDogdGVzdF9k ZXBzICsgWyBsaWJfaWd0X3BlcmYgXSwKKwkgICBpbnN0YWxsX2RpciA6IGxpYmV4ZWNkaXIsCisJ ICAgaW5zdGFsbF9ycGF0aCA6IGxpYmV4ZWNkaXJfcnBhdGhkaXIsCisJICAgaW5zdGFsbCA6IHRy dWUpCit0ZXN0X3Byb2dzICs9ICdnZW1fY3R4X3NzZXUnCisKIHRlc3RfZXhlY3V0YWJsZXMgKz0g ZXhlY3V0YWJsZSgnZ2VtX2VpbycsICdnZW1fZWlvLmMnLAogCSAgIGRlcGVuZGVuY2llcyA6IHRl c3RfZGVwcyArIFsgcmVhbHRpbWUgXSwKIAkgICBpbnN0YWxsX2RpciA6IGxpYmV4ZWNkaXIsCi0t IAoyLjE3LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=