From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [RFC libdrm 5/6] tegra: Add helper library for tests Date: Wed, 19 Feb 2014 17:04:52 +0100 Message-ID: <1392825893-7380-6-git-send-email-thierry.reding@gmail.com> References: <1392825893-7380-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-bk0-f44.google.com (mail-bk0-f44.google.com [209.85.214.44]) by gabe.freedesktop.org (Postfix) with ESMTP id 55C7DF9D7A for ; Wed, 19 Feb 2014 08:05:06 -0800 (PST) Received: by mail-bk0-f44.google.com with SMTP id r7so266589bkg.31 for ; Wed, 19 Feb 2014 08:05:05 -0800 (PST) In-Reply-To: <1392825893-7380-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClRoaXMgbGlicmFyeSBw cm92aWRlcyBoZWxwZXJzIGZvciBjb21tb24gZnVuY3Rpb25hbGl0eSBuZWVkZWQgYnkgdGVzdApw cm9ncmFtcy4KClNpZ25lZC1vZmYtYnk6IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5j b20+Ci0tLQogdGVzdHMvdGVncmEvTWFrZWZpbGUuYW0gICAgICB8ICAxMCArLQogdGVzdHMvdGVn cmEvZHJtLXRlc3QtdGVncmEuYyB8IDEzMiArKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy90 ZWdyYS9kcm0tdGVzdC10ZWdyYS5oIHwgIDU1ICsrKysrKysrKwogdGVzdHMvdGVncmEvZHJtLXRl c3QuYyAgICAgICB8IDI2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiB0ZXN0cy90ZWdyYS9kcm0tdGVzdC5oICAgICAgIHwgIDczICsrKysrKysrKysrKwogNSBm aWxlcyBjaGFuZ2VkLCA1MzAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHRlc3RzL3RlZ3JhL2RybS10ZXN0LXRlZ3JhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB0ZXN0cy90ZWdyYS9kcm0tdGVzdC10ZWdyYS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMv dGVncmEvZHJtLXRlc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3RlZ3JhL2RybS10ZXN0 LmgKCmRpZmYgLS1naXQgYS90ZXN0cy90ZWdyYS9NYWtlZmlsZS5hbSBiL3Rlc3RzL3RlZ3JhL01h a2VmaWxlLmFtCmluZGV4IDcwMzlmMDlkMzhhYS4uOTBiMTFiMjc4YTQyIDEwMDY0NAotLS0gYS90 ZXN0cy90ZWdyYS9NYWtlZmlsZS5hbQorKysgYi90ZXN0cy90ZWdyYS9NYWtlZmlsZS5hbQpAQCAt NCw4ICs0LDE2IEBAIEFNX0NQUEZMQUdTID0gXAogCiBBTV9DRkxBR1MgPSAtV2FsbCAtV2Vycm9y CiAKK25vaW5zdF9MVExJQlJBUklFUyA9IGxpYmRybS10ZXN0LmxhCitsaWJkcm1fdGVzdF9sYV9T T1VSQ0VTID0gXAorCWRybS10ZXN0LmMgXAorCWRybS10ZXN0LmggXAorCWRybS10ZXN0LXRlZ3Jh LmMgXAorCWRybS10ZXN0LXRlZ3JhLmgKKwogTERBREQgPSBcCi0JLi4vLi4vdGVncmEvbGliZHJt X3RlZ3JhLmxhCisJLi4vLi4vdGVncmEvbGliZHJtX3RlZ3JhLmxhIFwKKwlsaWJkcm0tdGVzdC5s YQogCiBURVNUUyA9IFwKIAlvcGVuY2xvc2UgXApkaWZmIC0tZ2l0IGEvdGVzdHMvdGVncmEvZHJt LXRlc3QtdGVncmEuYyBiL3Rlc3RzL3RlZ3JhL2RybS10ZXN0LXRlZ3JhLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42OTYwNWI5NTk1YjYKLS0tIC9kZXYvbnVsbAor KysgYi90ZXN0cy90ZWdyYS9kcm0tdGVzdC10ZWdyYS5jCkBAIC0wLDAgKzEsMTMyIEBACisvKgor ICogQ29weXJpZ2h0IMKpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi ZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRI T1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisg Ki8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlm CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJk cm0tdGVzdC10ZWdyYS5oIgorI2luY2x1ZGUgInRlZ3JhLmgiCisKK2ludCBkcm1fdGVncmFfZ3Iy ZF9vcGVuKHN0cnVjdCBkcm1fdGVncmFfZ3IyZCAqKmdyMmRwLCBzdHJ1Y3QgZHJtX3RlZ3JhICpk cm0pCit7CisJc3RydWN0IGRybV90ZWdyYV9ncjJkICpncjJkOworCWludCBlcnI7CisKKwlncjJk ID0gY2FsbG9jKDEsIHNpemVvZigqZ3IyZCkpOworCWlmICghZ3IyZCkKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlncjJkLT5kcm0gPSBkcm07CisKKwllcnIgPSBkcm1fdGVncmFfY2hhbm5lbF9vcGVu KCZncjJkLT5jaGFubmVsLCBkcm0sIERSTV9URUdSQV9HUjJEKTsKKwlpZiAoZXJyIDwgMCkgewor CQlmcmVlKGdyMmQpOworCQlyZXR1cm4gZXJyOworCX0KKworCSpncjJkcCA9IGdyMmQ7CisKKwly ZXR1cm4gMDsKK30KKworaW50IGRybV90ZWdyYV9ncjJkX2Nsb3NlKHN0cnVjdCBkcm1fdGVncmFf Z3IyZCAqZ3IyZCkKK3sKKwlpZiAoIWdyMmQpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJtX3Rl Z3JhX2NoYW5uZWxfY2xvc2UoZ3IyZC0+Y2hhbm5lbCk7CisJZnJlZShncjJkKTsKKworCXJldHVy biAwOworfQorCitpbnQgZHJtX3RlZ3JhX2dyMmRfZmlsbChzdHJ1Y3QgZHJtX3RlZ3JhX2dyMmQg KmdyMmQsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJdW5zaWduZWQgaW50IHgsIHVu c2lnbmVkIGludCB5LCB1bnNpZ25lZCBpbnQgd2lkdGgsCisJCQl1bnNpZ25lZCBpbnQgaGVpZ2h0 LCB1aW50MzJfdCBjb2xvcikKK3sKKwlzdHJ1Y3QgZHJtX3RlZ3JhX2JvICpmYm8gPSBmYi0+ZGF0 YTsKKwlzdHJ1Y3QgZHJtX3RlZ3JhX3B1c2hidWYgKnB1c2hidWY7CisJc3RydWN0IGRybV90ZWdy YV9mZW5jZSAqZmVuY2U7CisJc3RydWN0IGRybV90ZWdyYV9qb2IgKmpvYjsKKwlzdHJ1Y3QgZHJt X3RlZ3JhX2JvICpibzsKKwlpbnQgZXJyOworCisJZXJyID0gZHJtX3RlZ3JhX2pvYl9uZXcoJmpv YiwgZ3IyZC0+Y2hhbm5lbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIg PSBkcm1fdGVncmFfYm9fbmV3KCZibywgZ3IyZC0+ZHJtLCAwLCA0MDk2KTsKKwlpZiAoZXJyIDwg MCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGRybV90ZWdyYV9wdXNoYnVmX25ldygmcHVzaGJ1 Ziwgam9iLCBibywgMCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkqcHVzaGJ1 Zi0+cHRyKysgPSBIT1NUMVhfT1BDT0RFX1NFVENMKDAsIEhPU1QxWF9DTEFTU19HUjJELCAwKTsK KworCSpwdXNoYnVmLT5wdHIrKyA9IEhPU1QxWF9PUENPREVfTUFTSygweDksIDB4OSk7CisJKnB1 c2hidWYtPnB0cisrID0gMHgwMDAwMDAzYTsKKwkqcHVzaGJ1Zi0+cHRyKysgPSAweDAwMDAwMDAw OworCisJKnB1c2hidWYtPnB0cisrID0gSE9TVDFYX09QQ09ERV9NQVNLKDB4MWUsIDB4Nyk7CisJ KnB1c2hidWYtPnB0cisrID0gMHgwMDAwMDAwMDsKKwkqcHVzaGJ1Zi0+cHRyKysgPSAoMiA8PCAx NikgfCAoMSA8PCA2KSB8ICgxIDw8IDIpOworCSpwdXNoYnVmLT5wdHIrKyA9IDB4MDAwMDAwY2M7 CisKKwkqcHVzaGJ1Zi0+cHRyKysgPSBIT1NUMVhfT1BDT0RFX01BU0soMHgyYiwgMHg5KTsKKwlk cm1fdGVncmFfcHVzaGJ1Zl9yZWxvY2F0ZShwdXNoYnVmLCBmYm8sIDAsIDApOworCSpwdXNoYnVm LT5wdHIrKyA9IDB4ZGVhZGJlZWY7CisJKnB1c2hidWYtPnB0cisrID0gZmItPnBpdGNoOworCisJ KnB1c2hidWYtPnB0cisrID0gSE9TVDFYX09QQ09ERV9OT05JTkNSKDB4MzUsIDEpOworCSpwdXNo YnVmLT5wdHIrKyA9IGNvbG9yOworCisJKnB1c2hidWYtPnB0cisrID0gSE9TVDFYX09QQ09ERV9O T05JTkNSKDB4NDYsIDEpOworCSpwdXNoYnVmLT5wdHIrKyA9IDB4MDAwMDAwMDA7CisKKwkqcHVz aGJ1Zi0+cHRyKysgPSBIT1NUMVhfT1BDT0RFX01BU0soMHgzOCwgMHg1KTsKKwkqcHVzaGJ1Zi0+ cHRyKysgPSBoZWlnaHQgPDwgMTYgfCB3aWR0aDsKKwkqcHVzaGJ1Zi0+cHRyKysgPSB5IDw8IDE2 IHwgeDsKKworCWVyciA9IGRybV90ZWdyYV9qb2Jfc3VibWl0KGpvYiwgJmZlbmNlKTsKKwlpZiAo ZXJyIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBzdWJtaXQgam9iOiAlZFxu IiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBkcm1fdGVncmFfZmVuY2Vfd2Fp dChmZW5jZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8g d2FpdCBmb3IgZmVuY2U6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRybV90 ZWdyYV9wdXNoYnVmX2ZyZWUocHVzaGJ1Zik7CisJZHJtX3RlZ3JhX2JvX3B1dChibyk7CisJZHJt X3RlZ3JhX2pvYl9mcmVlKGpvYik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3Rz L3RlZ3JhL2RybS10ZXN0LXRlZ3JhLmggYi90ZXN0cy90ZWdyYS9kcm0tdGVzdC10ZWdyYS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDFjYjZiMWVlNDQwCi0tLSAv ZGV2L251bGwKKysrIGIvdGVzdHMvdGVncmEvZHJtLXRlc3QtdGVncmEuaApAQCAtMCwwICsxLDU1 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9uCisgKgorICog UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz b24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u CisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAq CisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihT KSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9U SEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09G VFdBUkUuCisgKi8KKworI2lmbmRlZiBURUdSQV9EUk1fVEVTVF9URUdSQV9ICisjZGVmaW5lIFRF R1JBX0RSTV9URVNUX1RFR1JBX0gKKworI2luY2x1ZGUgImRybS10ZXN0LmgiCisjaW5jbHVkZSAi dGVncmEuaCIKKworI2RlZmluZSBIT1NUMVhfT1BDT0RFX1NFVENMKG9mZnNldCwgY2xhc3NpZCwg bWFzaykgXAorICAgICgoMHgwIDw8IDI4KSB8ICgoKG9mZnNldCkgJiAweGZmZikgPDwgMTYpIHwg KCgoY2xhc3NpZCkgJiAweDNmZikgPDwgNikgfCAoKG1hc2spICYgMHgzZikpCisjZGVmaW5lIEhP U1QxWF9PUENPREVfSU5DUihvZmZzZXQsIGNvdW50KSBcCisgICAgKCgweDEgPDwgMjgpIHwgKCgo b2Zmc2V0KSAmIDB4ZmZmKSA8PCAxNikgfCAoKGNvdW50KSAmIDB4ZmZmZikpCisjZGVmaW5lIEhP U1QxWF9PUENPREVfTk9OSU5DUihvZmZzZXQsIGNvdW50KSBcCisgICAgKCgweDIgPDwgMjgpIHwg KCgob2Zmc2V0KSAmIDB4ZmZmKSA8PCAxNikgfCAoKGNvdW50KSAmIDB4ZmZmZikpCisjZGVmaW5l IEhPU1QxWF9PUENPREVfTUFTSyhvZmZzZXQsIG1hc2spIFwKKyAgICAoKDB4MyA8PCAyOCkgfCAo KChvZmZzZXQpICYgMHhmZmYpIDw8IDE2KSB8ICgobWFzaykgJiAweGZmZmYpKQorI2RlZmluZSBI T1NUMVhfT1BDT0RFX0lNTShvZmZzZXQsIGRhdGEpIFwKKyAgICAoKDB4NCA8PCAyOCkgfCAoKChv ZmZzZXQpICYgMHhmZmYpIDw8IDE2KSB8ICgoZGF0YSkgJiAweGZmZmYpKQorI2RlZmluZSBIT1NU MVhfT1BDT0RFX0VYVEVORChzdWJvcCwgdmFsdWUpIFwKKyAgICAoKDB4ZSA8PCAyOCkgfCAoKChz dWJvcCkgJiAweGYpIDw8IDI0KSB8ICgodmFsdWUpICYgMHhmZmZmZmYpKQorCisjZGVmaW5lIEhP U1QxWF9DTEFTU19HUjJEIDB4NTEKKworc3RydWN0IGRybV90ZWdyYV9ncjJkIHsKKwlzdHJ1Y3Qg ZHJtX3RlZ3JhICpkcm07CisJc3RydWN0IGRybV90ZWdyYV9jaGFubmVsICpjaGFubmVsOworfTsK KworaW50IGRybV90ZWdyYV9ncjJkX29wZW4oc3RydWN0IGRybV90ZWdyYV9ncjJkICoqZ3IyZHAs IHN0cnVjdCBkcm1fdGVncmEgKmRybSk7CitpbnQgZHJtX3RlZ3JhX2dyMmRfY2xvc2Uoc3RydWN0 IGRybV90ZWdyYV9ncjJkICpncjJkKTsKK2ludCBkcm1fdGVncmFfZ3IyZF9maWxsKHN0cnVjdCBk cm1fdGVncmFfZ3IyZCAqZ3IyZCwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQl1bnNp Z25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJCXVuc2ln bmVkIGludCBoZWlnaHQsIHVpbnQzMl90IGNvbG9yKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90 ZXN0cy90ZWdyYS9kcm0tdGVzdC5jIGIvdGVzdHMvdGVncmEvZHJtLXRlc3QuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhjZmFjZjQ2NjQ5NAotLS0gL2Rldi9udWxs CisrKyBiL3Rlc3RzL3RlZ3JhL2RybS10ZXN0LmMKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBD b3B5cmlnaHQgwqkgMjAxNCBOVklESUEgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGlu Y2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihT KSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisg KiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLwor CisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKwor I2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRib29s Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxz dGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lu Y2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSAieGY4NmRybS5oIgorI2luY2x1ZGUgInhm ODZkcm1Nb2RlLmgiCisjaW5jbHVkZSAiZHJtX2ZvdXJjYy5oIgorCisjaW5jbHVkZSAiZHJtLXRl c3QuaCIKKworc3RhdGljIGludCBkcm1fc2NyZWVuX3Byb2JlX2Nvbm5lY3RvcihzdHJ1Y3QgZHJt X3NjcmVlbiAqc2NyZWVuLAorCQkJCSAgICAgIGRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9y KQoreworCWRybU1vZGVFbmNvZGVyUHRyIGVuY29kZXI7CisJZHJtTW9kZUNydGNQdHIgY3J0YzsK Kwlkcm1Nb2RlRkJQdHIgZmI7CisKKwllbmNvZGVyID0gZHJtTW9kZUdldEVuY29kZXIoc2NyZWVu LT5mZCwgY29ubmVjdG9yLT5lbmNvZGVyX2lkKTsKKwlpZiAoIWVuY29kZXIpCisJCXJldHVybiAt RU5PREVWOworCisJY3J0YyA9IGRybU1vZGVHZXRDcnRjKHNjcmVlbi0+ZmQsIGVuY29kZXItPmNy dGNfaWQpOworCWlmICghY3J0YykgeworCQlkcm1Nb2RlRnJlZUVuY29kZXIoZW5jb2Rlcik7CisJ CXJldHVybiAtRU5PREVWOworCX0KKworCXNjcmVlbi0+b2xkX2ZiID0gY3J0Yy0+YnVmZmVyX2lk OworCisJZmIgPSBkcm1Nb2RlR2V0RkIoc2NyZWVuLT5mZCwgY3J0Yy0+YnVmZmVyX2lkKTsKKwlp ZiAoIWZiKSB7CisJCS8qIFRPRE86IGNyZWF0ZSBuZXcgZnJhbWVidWZmZXIgKi8KKwkJZHJtTW9k ZUZyZWVFbmNvZGVyKGVuY29kZXIpOworCQlkcm1Nb2RlRnJlZUNydGMoY3J0Yyk7CisJCXJldHVy biAtRU5PU1lTOworCX0KKworCXNjcmVlbi0+Y29ubmVjdG9yID0gY29ubmVjdG9yLT5jb25uZWN0 b3JfaWQ7CisJc2NyZWVuLT5vbGRfZmIgPSBjcnRjLT5idWZmZXJfaWQ7CisJc2NyZWVuLT5jcnRj ID0gZW5jb2Rlci0+Y3J0Y19pZDsKKwkvKiBUT0RPOiBjaGVjayBjcnRjLT5tb2RlX3ZhbGlkICov CisJc2NyZWVuLT5tb2RlID0gY3J0Yy0+bW9kZTsKKworCXNjcmVlbi0+d2lkdGggPSBmYi0+d2lk dGg7CisJc2NyZWVuLT5oZWlnaHQgPSBmYi0+aGVpZ2h0OworCXNjcmVlbi0+cGl0Y2ggPSBmYi0+ cGl0Y2g7CisJc2NyZWVuLT5kZXB0aCA9IGZiLT5kZXB0aDsKKwlzY3JlZW4tPmJwcCA9IGZiLT5i cHA7CisKKwlkcm1Nb2RlRnJlZUVuY29kZXIoZW5jb2Rlcik7CisJZHJtTW9kZUZyZWVDcnRjKGNy dGMpOworCWRybU1vZGVGcmVlRkIoZmIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkcm1fc2Ny ZWVuX29wZW4oc3RydWN0IGRybV9zY3JlZW4gKipzY3JlZW5wLCBpbnQgZmQpCit7CisJZHJtTW9k ZUNvbm5lY3RvclB0ciBjb25uZWN0b3I7CisJc3RydWN0IGRybV9zY3JlZW4gKnNjcmVlbjsKKwli b29sIGZvdW5kID0gZmFsc2U7CisJZHJtTW9kZVJlc1B0ciByZXM7CisJdW5zaWduZWQgaW50IGk7 CisJaW50IGVycjsKKworCWlmICghc2NyZWVucCB8fCBmZCA8IDApCisJCXJldHVybiAtRUlOVkFM OworCisJc2NyZWVuID0gY2FsbG9jKDEsIHNpemVvZigqc2NyZWVuKSk7CisJaWYgKCFzY3JlZW4p CisJCXJldHVybiAtRU5PTUVNOworCisJc2NyZWVuLT5mb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4 ODg4OworCXNjcmVlbi0+ZmQgPSBmZDsKKworCXJlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZmQp OworCWlmICghcmVzKSB7CisJCWZyZWUoc2NyZWVuKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQor CisJZm9yIChpID0gMDsgaSA8IHJlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7CisJCWNvbm5l Y3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3IoZmQsIHJlcy0+Y29ubmVjdG9yc1tpXSk7CisJCWlm ICghY29ubmVjdG9yKQorCQkJY29udGludWU7CisKKwkJaWYgKGNvbm5lY3Rvci0+Y29ubmVjdGlv biAhPSBEUk1fTU9ERV9DT05ORUNURUQpIHsKKwkJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5l Y3Rvcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWVyciA9IGRybV9zY3JlZW5fcHJvYmVfY29u bmVjdG9yKHNjcmVlbiwgY29ubmVjdG9yKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWRybU1vZGVG cmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvdW5kID0g dHJ1ZTsKKwkJYnJlYWs7CisJfQorCisJZHJtTW9kZUZyZWVSZXNvdXJjZXMocmVzKTsKKworCWlm ICghZm91bmQpIHsKKwkJZnJlZShzY3JlZW4pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkq c2NyZWVucCA9IHNjcmVlbjsKKworCXJldHVybiAwOworfQorCitpbnQgZHJtX3NjcmVlbl9jbG9z ZShzdHJ1Y3QgZHJtX3NjcmVlbiAqc2NyZWVuKQoreworCXN0cnVjdCBkcm1fZ2VtX2Nsb3NlIGFy Z3M7CisJaW50IGVycjsKKworCWVyciA9IGRybU1vZGVTZXRDcnRjKHNjcmVlbi0+ZmQsIHNjcmVl bi0+Y3J0Yywgc2NyZWVuLT5vbGRfZmIsIDAsIDAsCisJCQkgICAgICZzY3JlZW4tPmNvbm5lY3Rv ciwgMSwgJnNjcmVlbi0+bW9kZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIs ICJkcm1Nb2RlU2V0Q3J0YygpIGZhaWxlZDogJW1cbiIpOworCQlyZXR1cm4gLWVycm5vOworCX0K KworCWVyciA9IGRybU1vZGVSbUZCKHNjcmVlbi0+ZmQsIHNjcmVlbi0+ZmIpOworCWlmIChlcnIg PCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZHJtTW9kZVJtRkIoKSBmYWlsZWQ6ICVtXG4iKTsK KwkJcmV0dXJuIC1lcnJubzsKKwl9CisKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7 CisJYXJncy5oYW5kbGUgPSBzY3JlZW4tPmhhbmRsZTsKKworCWVyciA9IGlvY3RsKHNjcmVlbi0+ ZmQsIERSTV9JT0NUTF9HRU1fQ0xPU0UsICZhcmdzKTsKKwlpZiAoZXJyIDwgMCkgeworCQlmcHJp bnRmKHN0ZGVyciwgImlvY3RsKERSTV9JT0NUTF9HRU1fQ0xPU0UpIGZhaWxlZDogJW1cbiIpOwor CQlyZXR1cm4gLWVycm5vOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZHJtX2ZyYW1lYnVm ZmVyX25ldyhzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmJwLAorCQkJc3RydWN0IGRybV9zY3Jl ZW4gKnNjcmVlbiwgdWludDMyX3QgaGFuZGxlLAorCQkJdW5zaWduZWQgaW50IHdpZHRoLCB1bnNp Z25lZCBpbnQgaGVpZ2h0LAorCQkJdW5zaWduZWQgaW50IHBpdGNoLCB1aW50MzJfdCBmb3JtYXQs CisJCQl2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOworCXVpbnQz Ml90IGhhbmRsZXNbNF07CisJdWludDMyX3QgcGl0Y2hlc1s0XTsKKwl1aW50MzJfdCBvZmZzZXRz WzRdOworCWludCBlcnI7CisKKwlmYiA9IGNhbGxvYygxLCBzaXplb2YoKmZiKSk7CisJaWYgKCFm YikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmYi0+ZmQgPSBzY3JlZW4tPmZkOworCWZiLT53aWR0 aCA9IHdpZHRoOworCWZiLT5oZWlnaHQgPSBoZWlnaHQ7CisJZmItPnBpdGNoID0gcGl0Y2g7CisJ ZmItPmZvcm1hdCA9IGZvcm1hdDsKKwlmYi0+ZGF0YSA9IGRhdGE7CisKKwloYW5kbGVzWzBdID0g aGFuZGxlOworCXBpdGNoZXNbMF0gPSBwaXRjaDsKKwlvZmZzZXRzWzBdID0gMDsKKworCWVyciA9 IGRybU1vZGVBZGRGQjIoc2NyZWVuLT5mZCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBoYW5kbGVz LAorCQkJICAgIHBpdGNoZXMsIG9mZnNldHMsICZmYi0+aGFuZGxlLCAwKTsKKwlpZiAoZXJyIDwg MCkKKwkJcmV0dXJuIC1lcnJubzsKKworCSpmYnAgPSBmYjsKKworCXJldHVybiAwOworfQorCitp bnQgZHJtX2ZyYW1lYnVmZmVyX2ZyZWUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJ aW50IGVycjsKKworCWVyciA9IGRybU1vZGVSbUZCKGZiLT5mZCwgZmItPmhhbmRsZSk7CisJaWYg KGVyciA8IDApCisJCXJldHVybiAtZXJybm87CisKKwlmcmVlKGZiKTsKKworCXJldHVybiAwOwor fQorCitpbnQgZHJtX3NjcmVlbl9zZXRfZnJhbWVidWZmZXIoc3RydWN0IGRybV9zY3JlZW4gKnNj cmVlbiwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlpbnQgZXJy OworCisJZXJyID0gZHJtTW9kZVNldENydGMoc2NyZWVuLT5mZCwgc2NyZWVuLT5jcnRjLCBmYi0+ aGFuZGxlLCAwLCAwLAorCQkJICAgICAmc2NyZWVuLT5jb25uZWN0b3IsIDEsICZzY3JlZW4tPm1v ZGUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLWVycm5vOworCisJcmV0dXJuIDA7Cit9CisK K2ludCBkcm1fb3Blbihjb25zdCBjaGFyICpwYXRoKQoreworCWludCBmZCwgZXJyOworCisJZmQg PSBvcGVuKHBhdGgsIE9fUkRXUik7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKwor CWVyciA9IGRybVNldE1hc3RlcihmZCk7CisJaWYgKGVyciA8IDApIHsKKwkJY2xvc2UoZmQpOwor CQlyZXR1cm4gLWVycm5vOworCX0KKworCXJldHVybiBmZDsKK30KKwordm9pZCBkcm1fY2xvc2Uo aW50IGZkKQoreworCWRybURyb3BNYXN0ZXIoZmQpOworCWNsb3NlKGZkKTsKK30KZGlmZiAtLWdp dCBhL3Rlc3RzL3RlZ3JhL2RybS10ZXN0LmggYi90ZXN0cy90ZWdyYS9kcm0tdGVzdC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZWJkZDI1NTUwOWRkCi0tLSAvZGV2 L251bGwKKysrIGIvdGVzdHMvdGVncmEvZHJtLXRlc3QuaApAQCAtMCwwICsxLDczIEBACisvKgor ICogQ29weXJpZ2h0IMKpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBi ZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRI T1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisg Ki8KKworI2lmbmRlZiBURUdSQV9EUk1fVEVTVF9ICisjZGVmaW5lIFRFR1JBX0RSTV9URVNUX0gK KworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAi eGY4NmRybU1vZGUuaCIKKworc3RydWN0IGRybV9zY3JlZW4geworCWludCBmZDsKKworCXVuc2ln bmVkIGludCB3aWR0aDsKKwl1bnNpZ25lZCBpbnQgaGVpZ2h0OworCXVuc2lnbmVkIGludCBwaXRj aDsKKwl1bnNpZ25lZCBpbnQgZGVwdGg7CisJdW5zaWduZWQgaW50IGJwcDsKKworCWRybU1vZGVN b2RlSW5mbyBtb2RlOworCXVpbnQzMl90IGZiLCBvbGRfZmI7CisJdWludDMyX3QgY29ubmVjdG9y OworCXVpbnQzMl90IGZvcm1hdDsKKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgY3J0YzsK K307CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgeworCXVuc2lnbmVkIGludCB3aWR0aDsKKwl1 bnNpZ25lZCBpbnQgaGVpZ2h0OworCXVuc2lnbmVkIGludCBwaXRjaDsKKwl1aW50MzJfdCBmb3Jt YXQ7CisJdWludDMyX3QgaGFuZGxlOworCXZvaWQgKmRhdGE7CisJaW50IGZkOworfTsKKworaW50 IGRybV9zY3JlZW5fb3BlbihzdHJ1Y3QgZHJtX3NjcmVlbiAqKnNjcmVlbnAsIGludCBmZCk7Citp bnQgZHJtX3NjcmVlbl9jbG9zZShzdHJ1Y3QgZHJtX3NjcmVlbiAqc2NyZWVuKTsKK2ludCBkcm1f c2NyZWVuX3NldF9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZHJtX3NjcmVlbiAqc2NyZWVuLAorCQkJICAg ICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKKworaW50IGRybV9mcmFtZWJ1ZmZlcl9u ZXcoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZicCwKKwkJCXN0cnVjdCBkcm1fc2NyZWVuICpz Y3JlZW4sIHVpbnQzMl90IGhhbmRsZSwKKwkJCXVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQg aW50IGhlaWdodCwKKwkJCXVuc2lnbmVkIGludCBwaXRjaCwgdWludDMyX3QgZm9ybWF0LAorCQkJ dm9pZCAqZGF0YSk7CitpbnQgZHJtX2ZyYW1lYnVmZmVyX2ZyZWUoc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmIpOworCitpbnQgZHJtX29wZW4oY29uc3QgY2hhciAqcGF0aCk7Cit2b2lkIGRybV9j bG9zZShpbnQgZmQpOworCisjZW5kaWYKLS0gCjEuOC40LjIKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==