From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Mon, 14 Aug 2000 19:17:50 -0300 (BRST) From: Rik van Riel Subject: [prePATCH] new VM for linux-2.4.0-test4 Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="655889-672268636-966291470=:1599" Sender: owner-linux-mm@kvack.org Return-Path: To: linux-mm@kvack.org Cc: linux-kernel@vger.rutgers.edu List-ID: --655889-672268636-966291470=:1599 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi, here is version #6 of the new VM patch, against 2.4.0-test4. Thanks to watashi on #kernelnewbies, the memory leak has been removed from the code and this patch _actually works_... The patch implements: - minimal multi-queue VM (separate aging and flushing) - page aging - smart flushing of dirty inactive pages (only flush if needed, only flush synchronously if _really_ needed) - write throttling for all page faults - replaces shrink_mmap with 3 easier to understand functions ;) - dynamic inactive_target TODO: - fix kswapd cpu usage (possible without reverse mapping?) - fix the oops at swap.c:232 (triggered from filemap.c ...) - tune everything This patch should be pretty usable and ready for general testing. If you are able to break it, I'd like to hear so... have fun! cheers, Rik -- "What you're running that piece of shit Gnome?!?!" -- Miguel de Icaza, UKUUG 2000 http://www.conectiva.com/ http://www.surriel.com/ --655889-672268636-966291470=:1599 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=240-t4-vm6 Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: 2.4.0-test4-VM6.patch Content-Disposition: attachment; filename=240-t4-vm6 LS0tIGxpbnV4LTIuNC4wLXRlc3Q0L2ZzL3Byb2MvcHJvY19taXNjLmMub3Jp ZwlXZWQgQXVnICA5IDE2OjExOjI0IDIwMDANCisrKyBsaW51eC0yLjQuMC10 ZXN0NC9mcy9wcm9jL3Byb2NfbWlzYy5jCVdlZCBBdWcgIDkgMTY6MTQ6Mzkg MjAwMA0KQEAgLTE1NiwyMiArMTU2LDMwIEBADQogICAgICAgICAgKiBoYXZl IGJlZW4gdXBkYXRlZC4NCiAgICAgICAgICAqLw0KICAgICAgICAgbGVuICs9 IHNwcmludGYocGFnZStsZW4sDQotICAgICAgICAgICAgICAgICJNZW1Ub3Rh bDogICU4bHUga0JcbiINCi0gICAgICAgICAgICAgICAgIk1lbUZyZWU6ICAg JThsdSBrQlxuIg0KLSAgICAgICAgICAgICAgICAiTWVtU2hhcmVkOiAlOGx1 IGtCXG4iDQotICAgICAgICAgICAgICAgICJCdWZmZXJzOiAgICU4bHUga0Jc biINCi0gICAgICAgICAgICAgICAgIkNhY2hlZDogICAgJTh1IGtCXG4iDQot ICAgICAgICAgICAgICAgICJIaWdoVG90YWw6ICU4bHUga0JcbiINCi0gICAg ICAgICAgICAgICAgIkhpZ2hGcmVlOiAgJThsdSBrQlxuIg0KLSAgICAgICAg ICAgICAgICAiTG93VG90YWw6ICAlOGx1IGtCXG4iDQotICAgICAgICAgICAg ICAgICJMb3dGcmVlOiAgICU4bHUga0JcbiINCi0gICAgICAgICAgICAgICAg IlN3YXBUb3RhbDogJThsdSBrQlxuIg0KLSAgICAgICAgICAgICAgICAiU3dh cEZyZWU6ICAlOGx1IGtCXG4iLA0KKyAgICAgICAgICAgICAgICAiTWVtVG90 YWw6ICAgICAlOGx1IGtCXG4iDQorICAgICAgICAgICAgICAgICJNZW1GcmVl OiAgICAgICU4bHUga0JcbiINCisgICAgICAgICAgICAgICAgIk1lbVNoYXJl ZDogICAgJThsdSBrQlxuIg0KKyAgICAgICAgICAgICAgICAiQnVmZmVyczog ICAgICAlOGx1IGtCXG4iDQorICAgICAgICAgICAgICAgICJDYWNoZWQ6ICAg ICAgICU4bHUga0JcbiINCisJCSJBY3RpdmU6ICAgICAgICU4bHUga0JcbiIN CisJCSJJbmFjdF9kaXJ0eTogICU4bHUga0JcbiINCisJCSJJbmFjdF9jbGVh bjogICU4bHUga0JcbiINCisJCSJJbmFjdF90YXJnZXQ6ICU4bHUga0JcbiIN CisgICAgICAgICAgICAgICAgIkhpZ2hUb3RhbDogICAgJThsdSBrQlxuIg0K KyAgICAgICAgICAgICAgICAiSGlnaEZyZWU6ICAgICAlOGx1IGtCXG4iDQor ICAgICAgICAgICAgICAgICJMb3dUb3RhbDogICAgICU4bHUga0JcbiINCisg ICAgICAgICAgICAgICAgIkxvd0ZyZWU6ICAgICAgJThsdSBrQlxuIg0KKyAg ICAgICAgICAgICAgICAiU3dhcFRvdGFsOiAgICAlOGx1IGtCXG4iDQorICAg ICAgICAgICAgICAgICJTd2FwRnJlZTogICAgICU4bHUga0JcbiIsDQogICAg ICAgICAgICAgICAgIEsoaS50b3RhbHJhbSksDQogICAgICAgICAgICAgICAg IEsoaS5mcmVlcmFtKSwNCiAgICAgICAgICAgICAgICAgSyhpLnNoYXJlZHJh bSksDQogICAgICAgICAgICAgICAgIEsoaS5idWZmZXJyYW0pLA0KICAgICAg ICAgICAgICAgICBLKGF0b21pY19yZWFkKCZwYWdlX2NhY2hlX3NpemUpKSwN CisJCUsobnJfYWN0aXZlX3BhZ2VzKSwNCisJCUsobnJfaW5hY3RpdmVfZGly dHlfcGFnZXMpLA0KKwkJSyhucl9pbmFjdGl2ZV9jbGVhbl9wYWdlcygpKSwN CisJCUsoaW5hY3RpdmVfdGFyZ2V0KSwNCiAgICAgICAgICAgICAgICAgSyhp LnRvdGFsaGlnaCksDQogICAgICAgICAgICAgICAgIEsoaS5mcmVlaGlnaCks DQogICAgICAgICAgICAgICAgIEsoaS50b3RhbHJhbS1pLnRvdGFsaGlnaCks DQotLS0gbGludXgtMi40LjAtdGVzdDQvZnMvYnVmZmVyLmMub3JpZwlTYXQg QXVnIDEyIDE1OjU1OjIyIDIwMDANCisrKyBsaW51eC0yLjQuMC10ZXN0NC9m cy9idWZmZXIuYwlTYXQgQXVnIDEyIDIzOjMwOjIxIDIwMDANCkBAIC04NTMs NiArODUzLDcgQEANCiAJdW5zaWduZWQgbG9uZyBkaXJ0eSwgdG90LCBoYXJk X2RpcnR5X2xpbWl0LCBzb2Z0X2RpcnR5X2xpbWl0Ow0KIA0KIAlkaXJ0eSA9 IHNpemVfYnVmZmVyc190eXBlW0JVRl9ESVJUWV0gPj4gUEFHRV9TSElGVDsN CisJZGlydHkgKz0gbnJfaW5hY3RpdmVfZGlydHlfcGFnZXM7DQogCXRvdCA9 IG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKCk7DQogCXRvdCAtPSBzaXplX2J1ZmZl cnNfdHlwZVtCVUZfUFJPVEVDVEVEXSA+PiBQQUdFX1NISUZUOw0KIA0KQEAg LTEzMTMsNyArMTMxNCw3IEBADQogCSAqIGluc3RlYWQuDQogCSAqLw0KIAlp ZiAoIW9mZnNldCkgew0KLQkJaWYgKCF0cnlfdG9fZnJlZV9idWZmZXJzKHBh Z2UsIDApKSB7DQorCQlpZiAoIXRyeV90b19mcmVlX2J1ZmZlcnMocGFnZSwg MSkpIHsNCiAJCQlhdG9taWNfaW5jKCZidWZmZXJtZW1fcGFnZXMpOw0KIAkJ CXJldHVybiAwOw0KIAkJfQ0KQEAgLTIwNTcsNiArMjA1OCw3IEBADQogCXBh Z2UgPSBhbGxvY19wYWdlKEdGUF9CVUZGRVIpOw0KIAlpZiAoIXBhZ2UpDQog CQlnb3RvIG91dDsNCisJTG9ja1BhZ2UocGFnZSk7DQogCWJoID0gY3JlYXRl X2J1ZmZlcnMocGFnZSwgc2l6ZSwgMCk7DQogCWlmICghYmgpDQogCQlnb3Rv IG5vX2J1ZmZlcl9oZWFkOw0KQEAgLTIwODksNiArMjA5MSw3IEBADQogCXBh Z2UtPmJ1ZmZlcnMgPSBiaDsNCiAJcGFnZS0+ZmxhZ3MgJj0gfigxIDw8IFBH X3JlZmVyZW5jZWQpOw0KIAlscnVfY2FjaGVfYWRkKHBhZ2UpOw0KKwlVbmxv Y2tQYWdlKHBhZ2UpOw0KIAlhdG9taWNfaW5jKCZidWZmZXJtZW1fcGFnZXMp Ow0KIAlyZXR1cm4gMTsNCiANCkBAIC0yMTE2LDcgKzIxMTksNyBAQA0KIAkJ c3RydWN0IGJ1ZmZlcl9oZWFkICpwID0gdG1wOw0KIAkJdG1wID0gdG1wLT5i X3RoaXNfcGFnZTsNCiAJCWlmIChidWZmZXJfbG9ja2VkKHApKSB7DQotCQkJ aWYgKHdhaXQpDQorCQkJaWYgKHdhaXQgPiAxKQ0KIAkJCQlfX3dhaXRfb25f YnVmZmVyKHApOw0KIAkJfSBlbHNlIGlmIChidWZmZXJfZGlydHkocCkpDQog CQkJbGxfcndfYmxvY2soV1JJVEUsIDEsICZwKTsNCkBAIC0yMTkwLDcgKzIx OTMsOCBAQA0KIAlzcGluX3VubG9jaygmZnJlZV9saXN0W2luZGV4XS5sb2Nr KTsNCiAJd3JpdGVfdW5sb2NrKCZoYXNoX3RhYmxlX2xvY2spOw0KIAlzcGlu X3VubG9jaygmbHJ1X2xpc3RfbG9jayk7CQ0KLQlzeW5jX3BhZ2VfYnVmZmVy cyhiaCwgd2FpdCk7DQorCWlmICh3YWl0KQ0KKwkJc3luY19wYWdlX2J1ZmZl cnMoYmgsIHdhaXQpOw0KIAlyZXR1cm4gMDsNCiB9DQogDQpAQCAtMjUxMyw3 ICsyNTE3LDggQEANCiAJZm9yICg7Oykgew0KIAkJQ0hFQ0tfRU1FUkdFTkNZ X1NZTkMNCiANCi0JCWZsdXNoZWQgPSBmbHVzaF9kaXJ0eV9idWZmZXJzKDAp Ow0KKwkJZmx1c2hlZCA9IHBhZ2VfbGF1bmRlcihHRlBfS1NXQVBELCAwKTsN CisJCWZsdXNoZWQgKz0gZmx1c2hfZGlydHlfYnVmZmVycygwKTsNCiANCiAJ CS8qIElmIHdha2V1cF9iZGZsdXNoIHdpbGwgd2FrZXVwIHVzDQogCQkgICBh ZnRlciBvdXIgYmRmbHVzaF9kb25lIHdha2V1cCwgdGhlbg0KLS0tIGxpbnV4 LTIuNC4wLXRlc3Q0L2tlcm5lbC9zeXNjdGwuYy5vcmlnCVdlZCBBdWcgIDkg MTY6MTM6NDggMjAwMA0KKysrIGxpbnV4LTIuNC4wLXRlc3Q0L2tlcm5lbC9z eXNjdGwuYwlXZWQgQXVnICA5IDE2OjE0OjEyIDIwMDANCkBAIC0yMjcsNyAr MjI3LDcgQEANCiANCiBzdGF0aWMgY3RsX3RhYmxlIHZtX3RhYmxlW10gPSB7 DQogCXtWTV9GUkVFUEcsICJmcmVlcGFnZXMiLCANCi0JICZmcmVlcGFnZXMs IHNpemVvZihmcmVlcGFnZXNfdCksIDA2NDQsIE5VTEwsICZwcm9jX2RvaW50 dmVjfSwNCisJICZmcmVlcGFnZXMsIHNpemVvZihmcmVlcGFnZXNfdCksIDA0 NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwNCiAJe1ZNX0JERkxVU0gsICJi ZGZsdXNoIiwgJmJkZl9wcm0sIDkqc2l6ZW9mKGludCksIDA2NDQsIE5VTEws DQogCSAmcHJvY19kb2ludHZlY19taW5tYXgsICZzeXNjdGxfaW50dmVjLCBO VUxMLA0KIAkgJmJkZmx1c2hfbWluLCAmYmRmbHVzaF9tYXh9LA0KLS0tIGxp bnV4LTIuNC4wLXRlc3Q0L21tL2ZpbGVtYXAuYy5vcmlnCVdlZCBBdWcgIDkg MTY6MTE6MTQgMjAwMA0KKysrIGxpbnV4LTIuNC4wLXRlc3Q0L21tL2ZpbGVt YXAuYwlTYXQgQXVnIDEyIDE2OjU3OjM5IDIwMDANCkBAIC00Niw3ICs0Niw3 IEBADQogc3RydWN0IHBhZ2UgKipwYWdlX2hhc2hfdGFibGU7DQogc3RydWN0 IGxpc3RfaGVhZCBscnVfY2FjaGU7DQogDQotc3RhdGljIHNwaW5sb2NrX3Qg cGFnZWNhY2hlX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7DQorc3Bpbmxv Y2tfdCBwYWdlY2FjaGVfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsNCiAv Kg0KICAqIE5PVEU6IHRvIGF2b2lkIGRlYWRsb2NraW5nIHlvdSBtdXN0IG5l dmVyIGFjcXVpcmUgdGhlIHBhZ2VjYWNoZV9sb2NrIHdpdGgNCiAgKiAgICAg ICB0aGUgcGFnZW1hcF9scnVfbG9jayBoZWxkLg0KQEAgLTkyLDcgKzkyLDcg QEANCiAgKiBzdXJlIHRoZSBwYWdlIGlzIGxvY2tlZCBhbmQgdGhhdCBub2Jv ZHkgZWxzZSB1c2VzIGl0IC0gb3IgdGhhdCB1c2FnZQ0KICAqIGlzIHNhZmUu DQogICovDQotc3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3ZlX2lub2RlX3Bh Z2Uoc3RydWN0IHBhZ2UgKnBhZ2UpDQordm9pZCBfX3JlbW92ZV9pbm9kZV9w YWdlKHN0cnVjdCBwYWdlICpwYWdlKQ0KIHsNCiAJcmVtb3ZlX3BhZ2VfZnJv bV9pbm9kZV9xdWV1ZShwYWdlKTsNCiAJcmVtb3ZlX3BhZ2VfZnJvbV9oYXNo X3F1ZXVlKHBhZ2UpOw0KQEAgLTI0NSwxMzUgKzI0NSw2IEBADQogCXNwaW5f dW5sb2NrKCZwYWdlY2FjaGVfbG9jayk7DQogfQ0KIA0KLS8qDQotICogbnJf ZGlydHkgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIGRpcnR5IHBhZ2VzIHRo YXQgd2Ugd2lsbCB3cml0ZSBhc3luYw0KLSAqIGJlZm9yZSBkb2luZyBzeW5j IHdyaXRlcy4gIFdlIGNhbiBvbmx5IGRvIHN5bmMgd3JpdGVzIGlmIHdlIGNh bg0KLSAqIHdhaXQgZm9yIElPIChfX0dGUF9JTyBzZXQpLg0KLSAqLw0KLWlu dCBzaHJpbmtfbW1hcChpbnQgcHJpb3JpdHksIGludCBnZnBfbWFzaykNCi17 DQotCWludCByZXQgPSAwLCBjb3VudCwgbnJfZGlydHk7DQotCXN0cnVjdCBs aXN0X2hlYWQgKiBwYWdlX2xydTsNCi0Jc3RydWN0IHBhZ2UgKiBwYWdlID0g TlVMTDsNCi0JDQotCWNvdW50ID0gbnJfbHJ1X3BhZ2VzIC8gKHByaW9yaXR5 ICsgMSk7DQotCW5yX2RpcnR5ID0gcHJpb3JpdHk7DQotDQotCS8qIHdlIG5l ZWQgcGFnZW1hcF9scnVfbG9jayBmb3IgbGlzdF9kZWwoKSAuLi4gc3VidGxl IGNvZGUgYmVsb3cgKi8NCi0Jc3Bpbl9sb2NrKCZwYWdlbWFwX2xydV9sb2Nr KTsNCi0Jd2hpbGUgKGNvdW50ID4gMCAmJiAocGFnZV9scnUgPSBscnVfY2Fj aGUucHJldikgIT0gJmxydV9jYWNoZSkgew0KLQkJcGFnZSA9IGxpc3RfZW50 cnkocGFnZV9scnUsIHN0cnVjdCBwYWdlLCBscnUpOw0KLQkJbGlzdF9kZWwo cGFnZV9scnUpOw0KLQ0KLQkJaWYgKFBhZ2VUZXN0YW5kQ2xlYXJSZWZlcmVu Y2VkKHBhZ2UpKQ0KLQkJCWdvdG8gZGlzcG9zZV9jb250aW51ZTsNCi0NCi0J CWNvdW50LS07DQotCQkvKg0KLQkJICogQXZvaWQgdW5zY2FsYWJsZSBTTVAg bG9ja2luZyBmb3IgcGFnZXMgd2UgY2FuDQotCQkgKiBpbW1lZGlhdGUgdGVs bCBhcmUgdW50b3VjaGFibGUuLg0KLQkJICovDQotCQlpZiAoIXBhZ2UtPmJ1 ZmZlcnMgJiYgcGFnZV9jb3VudChwYWdlKSA+IDEpDQotCQkJZ290byBkaXNw b3NlX2NvbnRpbnVlOw0KLQ0KLQkJaWYgKFRyeUxvY2tQYWdlKHBhZ2UpKQ0K LQkJCWdvdG8gZGlzcG9zZV9jb250aW51ZTsNCi0NCi0JCS8qIFJlbGVhc2Ug dGhlIHBhZ2VtYXBfbHJ1IGxvY2sgZXZlbiBpZiB0aGUgcGFnZSBpcyBub3Qg eWV0DQotCQkgICBxdWV1ZWQgaW4gYW55IGxydSBxdWV1ZSBzaW5jZSB3ZSBo YXZlIGp1c3QgbG9ja2VkIGRvd24NCi0JCSAgIHRoZSBwYWdlIHNvIG5vYm9k eSBlbHNlIG1heSBTTVAgcmFjZSB3aXRoIHVzIHJ1bm5pbmcNCi0JCSAgIGEg bHJ1X2NhY2hlX2RlbCgpIChscnVfY2FjaGVfZGVsKCkgYWx3YXlzIHJ1biB3 aXRoIHRoZQ0KLQkJICAgcGFnZSBsb2NrZWQgZG93biA7KS4gKi8NCi0JCXNw aW5fdW5sb2NrKCZwYWdlbWFwX2xydV9sb2NrKTsNCi0NCi0JCS8qIGF2b2lk IGZyZWVpbmcgdGhlIHBhZ2Ugd2hpbGUgaXQncyBsb2NrZWQgKi8NCi0JCXBh Z2VfY2FjaGVfZ2V0KHBhZ2UpOw0KLQ0KLQkJLyoNCi0JCSAqIElzIGl0IGEg YnVmZmVyIHBhZ2U/IFRyeSB0byBjbGVhbiBpdCB1cCByZWdhcmRsZXNzDQot CQkgKiBvZiB6b25lIC0gaXQncyBvbGQuDQotCQkgKi8NCi0JCWlmIChwYWdl LT5idWZmZXJzKSB7DQotCQkJaW50IHdhaXQgPSAoKGdmcF9tYXNrICYgX19H RlBfSU8pICYmIChucl9kaXJ0eS0tIDwgMCkpOw0KLQkJCWlmICghdHJ5X3Rv X2ZyZWVfYnVmZmVycyhwYWdlLCB3YWl0KSkNCi0JCQkJZ290byB1bmxvY2tf Y29udGludWU7DQotCQkJLyogcGFnZSB3YXMgbG9ja2VkLCBpbm9kZSBjYW4n dCBnbyBhd2F5IHVuZGVyIHVzICovDQotCQkJaWYgKCFwYWdlLT5tYXBwaW5n KSB7DQotCQkJCWF0b21pY19kZWMoJmJ1ZmZlcm1lbV9wYWdlcyk7DQotCQkJ CWdvdG8gbWFkZV9idWZmZXJfcHJvZ3Jlc3M7DQotCQkJfQ0KLQkJfQ0KLQ0K LQkJLyogVGFrZSB0aGUgcGFnZWNhY2hlX2xvY2sgc3BpbmxvY2sgaGVsZCB0 byBhdm9pZA0KLQkJICAgb3RoZXIgdGFza3MgdG8gbm90aWNlIHRoZSBwYWdl IHdoaWxlIHdlIGFyZSBsb29raW5nIGF0IGl0cw0KLQkJICAgcGFnZSBjb3Vu dC4gSWYgaXQncyBhIHBhZ2VjYWNoZS1wYWdlIHdlJ2xsIGZyZWUgaXQNCi0J CSAgIGluIG9uZSBhdG9taWMgdHJhbnNhY3Rpb24gYWZ0ZXIgY2hlY2tpbmcg aXRzIHBhZ2UgY291bnQuICovDQotCQlzcGluX2xvY2soJnBhZ2VjYWNoZV9s b2NrKTsNCi0NCi0JCS8qDQotCQkgKiBXZSBjYW4ndCBmcmVlIHBhZ2VzIHVu bGVzcyB0aGVyZSdzIGp1c3Qgb25lIHVzZXINCi0JCSAqIChjb3VudCA9PSAy IGJlY2F1c2Ugd2UgYWRkZWQgb25lIG91cnNlbHZlcyBhYm92ZSkuDQotCQkg Ki8NCi0JCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IDIpDQotCQkJZ290byBj YWNoZV91bmxvY2tfY29udGludWU7DQotDQotCQkvKg0KLQkJICogSXMgaXQg YSBwYWdlIHN3YXAgcGFnZT8gSWYgc28sIHdlIHdhbnQgdG8NCi0JCSAqIGRy b3AgaXQgaWYgaXQgaXMgbm8gbG9uZ2VyIHVzZWQsIGV2ZW4gaWYgaXQNCi0J CSAqIHdlcmUgdG8gYmUgbWFya2VkIHJlZmVyZW5jZWQuLg0KLQkJICovDQot CQlpZiAoUGFnZVN3YXBDYWNoZShwYWdlKSkgew0KLQkJCXNwaW5fdW5sb2Nr KCZwYWdlY2FjaGVfbG9jayk7DQotCQkJX19kZWxldGVfZnJvbV9zd2FwX2Nh Y2hlKHBhZ2UpOw0KLQkJCWdvdG8gbWFkZV9pbm9kZV9wcm9ncmVzczsNCi0J CX0JDQotDQotCQkvKg0KLQkJICogUGFnZSBpcyBmcm9tIGEgem9uZSB3ZSBk b24ndCBjYXJlIGFib3V0Lg0KLQkJICogRG9uJ3QgZHJvcCBwYWdlIGNhY2hl IGVudHJpZXMgaW4gdmFpbi4NCi0JCSAqLw0KLQkJaWYgKHBhZ2UtPnpvbmUt PmZyZWVfcGFnZXMgPiBwYWdlLT56b25lLT5wYWdlc19oaWdoKQ0KLQkJCWdv dG8gY2FjaGVfdW5sb2NrX2NvbnRpbnVlOw0KLQ0KLQkJLyogaXMgaXQgYSBw YWdlLWNhY2hlIHBhZ2U/ICovDQotCQlpZiAocGFnZS0+bWFwcGluZykgew0K LQkJCWlmICghUGFnZURpcnR5KHBhZ2UpICYmICFwZ2NhY2hlX3VuZGVyX21p bigpKSB7DQotCQkJCV9fcmVtb3ZlX2lub2RlX3BhZ2UocGFnZSk7DQotCQkJ CXNwaW5fdW5sb2NrKCZwYWdlY2FjaGVfbG9jayk7DQotCQkJCWdvdG8gbWFk ZV9pbm9kZV9wcm9ncmVzczsNCi0JCQl9DQotCQkJZ290byBjYWNoZV91bmxv Y2tfY29udGludWU7DQotCQl9DQotDQotCQlwcmludGsoS0VSTl9FUlIgInNo cmlua19tbWFwOiB1bmtub3duIExSVSBwYWdlIVxuIik7DQotDQotY2FjaGVf dW5sb2NrX2NvbnRpbnVlOg0KLQkJc3Bpbl91bmxvY2soJnBhZ2VjYWNoZV9s b2NrKTsNCi11bmxvY2tfY29udGludWU6DQotCQlzcGluX2xvY2soJnBhZ2Vt YXBfbHJ1X2xvY2spOw0KLQkJVW5sb2NrUGFnZShwYWdlKTsNCi0JCXBhZ2Vf Y2FjaGVfcmVsZWFzZShwYWdlKTsNCi1kaXNwb3NlX2NvbnRpbnVlOg0KLQkJ bGlzdF9hZGQocGFnZV9scnUsICZscnVfY2FjaGUpOw0KLQl9DQotCWdvdG8g b3V0Ow0KLQ0KLW1hZGVfaW5vZGVfcHJvZ3Jlc3M6DQotCXBhZ2VfY2FjaGVf cmVsZWFzZShwYWdlKTsNCi1tYWRlX2J1ZmZlcl9wcm9ncmVzczoNCi0JVW5s b2NrUGFnZShwYWdlKTsNCi0JcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOw0K LQlyZXQgPSAxOw0KLQlzcGluX2xvY2soJnBhZ2VtYXBfbHJ1X2xvY2spOw0K LQkvKiBucl9scnVfcGFnZXMgbmVlZHMgdGhlIHNwaW5sb2NrICovDQotCW5y X2xydV9wYWdlcy0tOw0KLQ0KLW91dDoNCi0Jc3Bpbl91bmxvY2soJnBhZ2Vt YXBfbHJ1X2xvY2spOw0KLQ0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCiBzdGF0 aWMgaW5saW5lIHN0cnVjdCBwYWdlICogX19maW5kX3BhZ2Vfbm9sb2NrKHN0 cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCB1bnNpZ25lZCBsb25nIG9m ZnNldCwgc3RydWN0IHBhZ2UgKnBhZ2UpDQogew0KIAlnb3RvIGluc2lkZTsN CkBAIC0zODgsNyArMjU5LDE1IEBADQogCQlpZiAocGFnZS0+aW5kZXggPT0g b2Zmc2V0KQ0KIAkJCWJyZWFrOw0KIAl9DQotCVNldFBhZ2VSZWZlcmVuY2Vk KHBhZ2UpOw0KKwkvKg0KKwkgKiBUb3VjaGluZyB0aGUgcGFnZSBtYXkgbW92 ZSBpdCB0byB0aGUgYWN0aXZlIGxpc3QuDQorCSAqIElmIHdlIGVuZCB1cCB3 aXRoIHRvbyBmZXcgaW5hY3RpdmUgcGFnZXMsIHdlIHdha2UNCisJICogdXAg a3N3YXBkLg0KKwkgKi8NCisJYWdlX3BhZ2VfdXAocGFnZSk7DQorCWlmICgo aW5hY3RpdmVfc2hvcnRhZ2UoKSA+IGluYWN0aXZlX3RhcmdldCAvIDIpICYm DQorCQkJCXdhaXRxdWV1ZV9hY3RpdmUoJmtzd2FwZF93YWl0KSkNCisJCXdh a2VfdXBfaW50ZXJydXB0aWJsZSgma3N3YXBkX3dhaXQpOw0KIG5vdF9mb3Vu ZDoNCiAJcmV0dXJuIHBhZ2U7DQogfQ0KLS0tIGxpbnV4LTIuNC4wLXRlc3Q0 L21tL21lbW9yeS5jLm9yaWcJV2VkIEp1bCAxMiAxNDowNjoxNyAyMDAwDQor KysgbGludXgtMi40LjAtdGVzdDQvbW0vbWVtb3J5LmMJU2F0IEF1ZyAxMiAx MTo0OTo0NSAyMDAwDQpAQCAtMTAxNCw3ICsxMDE0LDggQEANCiAJbnVtID0g dmFsaWRfc3dhcGhhbmRsZXMoZW50cnksICZvZmZzZXQpOw0KIAlmb3IgKGkg PSAwOyBpIDwgbnVtOyBvZmZzZXQrKywgaSsrKSB7DQogCQkvKiBEb24ndCBi bG9jayBvbiBJL08gZm9yIHJlYWQtYWhlYWQgKi8NCi0JCWlmIChhdG9taWNf cmVhZCgmbnJfYXN5bmNfcGFnZXMpID49IHBhZ2VyX2RhZW1vbi5zd2FwX2Ns dXN0ZXIpIHsNCisJCWlmIChhdG9taWNfcmVhZCgmbnJfYXN5bmNfcGFnZXMp ID49IHBhZ2VyX2RhZW1vbi5zd2FwX2NsdXN0ZXINCisJCQkJKiAoMSA8PCBw YWdlX2NsdXN0ZXIpKSB7DQogCQkJd2hpbGUgKGkrKyA8IG51bSkNCiAJCQkJ c3dhcF9mcmVlKFNXUF9FTlRSWShTV1BfVFlQRShlbnRyeSksIG9mZnNldCsr KSk7DQogCQkJYnJlYWs7DQpAQCAtMTIxMyw5ICsxMjE0LDEzIEBADQogCWlu dCByZXQgPSAtMTsNCiAJcGdkX3QgKnBnZDsNCiAJcG1kX3QgKnBtZDsNCisJ ZXh0ZXJuIHZvaWQgYmFsYW5jZV9kaXJ0eShrZGV2X3QpOw0KIA0KIAlwZ2Qg PSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKTsNCiAJcG1kID0gcG1kX2FsbG9j KHBnZCwgYWRkcmVzcyk7DQorDQorCWlmICh3cml0ZV9hY2Nlc3MpDQorCQli YWxhbmNlX2RpcnR5KE5PREVWKTsNCiAJDQogCWlmIChwbWQpIHsNCiAJCXB0 ZV90ICogcHRlID0gcHRlX2FsbG9jKHBtZCwgYWRkcmVzcyk7DQotLS0gbGlu dXgtMi40LjAtdGVzdDQvbW0vcGFnZV9hbGxvYy5jLm9yaWcJVHVlIEp1bCAx MSAxMzo0MzoyMiAyMDAwDQorKysgbGludXgtMi40LjAtdGVzdDQvbW0vcGFn ZV9hbGxvYy5jCU1vbiBBdWcgMTQgMTg6MjI6NTIgMjAwMA0KQEAgLTI1LDcg KzI1LDggQEANCiAjZW5kaWYNCiANCiBpbnQgbnJfc3dhcF9wYWdlczsNCi1p bnQgbnJfbHJ1X3BhZ2VzOw0KK2ludCBucl9hY3RpdmVfcGFnZXM7DQoraW50 IG5yX2luYWN0aXZlX2RpcnR5X3BhZ2VzOw0KIHBnX2RhdGFfdCAqcGdkYXRf bGlzdDsNCiANCiBzdGF0aWMgY2hhciAqem9uZV9uYW1lc1tNQVhfTlJfWk9O RVNdID0geyAiRE1BIiwgIk5vcm1hbCIsICJIaWdoTWVtIiB9Ow0KQEAgLTMz LDYgKzM0LDggQEANCiBzdGF0aWMgaW50IHpvbmVfYmFsYW5jZV9taW5bTUFY X05SX1pPTkVTXSA9IHsgMTAgLCAxMCwgMTAsIH07DQogc3RhdGljIGludCB6 b25lX2JhbGFuY2VfbWF4W01BWF9OUl9aT05FU10gPSB7IDI1NSAsIDI1NSwg MjU1LCB9Ow0KIA0KK3N0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX2xpc3Q7DQor c3RydWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9kaXJ0eV9saXN0Ow0KIC8qDQog ICogRnJlZV9wYWdlKCkgYWRkcyB0aGUgcGFnZSB0byB0aGUgZnJlZSBsaXN0 cy4gVGhpcyBpcyBvcHRpbWl6ZWQgZm9yDQogICogZmFzdCBub3JtYWwgY2Fz ZXMgKG5vIGVycm9yIGp1bXBzIHRha2VuIG5vcm1hbGx5KS4NCkBAIC05NSw3 ICs5OCwxNiBAQA0KIAkJQlVHKCk7DQogCWlmIChQYWdlRGlydHkocGFnZSkp DQogCQlCVUcoKTsNCisJaWYgKFBhZ2VBY3RpdmUocGFnZSkpDQorCQlCVUco KTsNCisJaWYgKFBhZ2VJbmFjdGl2ZURpcnR5KHBhZ2UpKQ0KKwkJQlVHKCk7 DQorCWlmIChQYWdlSW5hY3RpdmVDbGVhbihwYWdlKSkNCisJCUJVRygpOw0K IA0KKwlwYWdlLT5mbGFncyAmPSB+KDE8PFBHX3JlZmVyZW5jZWQpOw0KKwlw YWdlLT5hZ2UgPSBQQUdFX0FHRV9TVEFSVDsNCisJDQogCXpvbmUgPSBwYWdl LT56b25lOw0KIA0KIAltYXNrID0gKH4wVUwpIDw8IG9yZGVyOw0KQEAgLTE0 MSwxMCArMTUzLDEzIEBADQogDQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JnpvbmUtPmxvY2ssIGZsYWdzKTsNCiANCi0JaWYgKHpvbmUtPmZyZWVfcGFn ZXMgPiB6b25lLT5wYWdlc19oaWdoKSB7DQotCQl6b25lLT56b25lX3dha2Vf a3N3YXBkID0gMDsNCi0JCXpvbmUtPmxvd19vbl9tZW1vcnkgPSAwOw0KLQl9 DQorCS8qDQorCSAqIFdlIGRvbid0IHdhbnQgdG8gcHJvdGVjdCB0aGlzIHZh cmlhYmxlIGZyb20gcmFjZSBjb25kaXRpb25zDQorCSAqIHNpbmNlIGl0J3Mg bm90aGluZyBpbXBvcnRhbnQsIGJ1dCB3ZSBkbyB3YW50IHRvIG1ha2Ugc3Vy ZQ0KKwkgKiBpdCBuZXZlciBnZXRzIG5lZ2F0aXZlLg0KKwkgKi8NCisJaWYg KG1lbW9yeV9wcmVzc3VyZSA+IE5SX0NQVVMpDQorCQltZW1vcnlfcHJlc3N1 cmUtLTsNCiB9DQogDQogI2RlZmluZSBNQVJLX1VTRUQoaW5kZXgsIG9yZGVy LCBhcmVhKSBcDQpAQCAtMjE4LDcgKzIzMywxMyBAQA0KIHN0cnVjdCBwYWdl ICogX19hbGxvY19wYWdlcyh6b25lbGlzdF90ICp6b25lbGlzdCwgdW5zaWdu ZWQgbG9uZyBvcmRlcikNCiB7DQogCXpvbmVfdCAqKnpvbmUgPSB6b25lbGlz dC0+em9uZXM7DQotCWV4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBrc3dhcGRf d2FpdDsNCisJaW50IGRpcmVjdF9yZWNsYWltID0gMDsNCisJdW5zaWduZWQg aW50IGdmcF9tYXNrID0gem9uZWxpc3QtPmdmcF9tYXNrOw0KKw0KKwkvKg0K KwkgKiBBbGxvY2F0aW9ucyBwdXQgcHJlc3N1cmUgb24gdGhlIFZNIHN1YnN5 c3RlbS4NCisJICovDQorCW1lbW9yeV9wcmVzc3VyZSsrOw0KIA0KIAkvKg0K IAkgKiAoSWYgYW55b25lIGNhbGxzIGdmcCBmcm9tIGludGVycnVwdHMgbm9u YXRvbWljYWxseSB0aGVuIGl0DQpAQCAtMjI4LDYgKzI0OSwyNyBAQA0KIAkg KiBpbiBhIGhpZ2hlciB6b25lIGZhaWxzLg0KIAkgKi8NCiANCisJLyoNCisJ ICogQ2FuIHdlIHRha2UgcGFnZXMgZGlyZWN0bHkgZnJvbSB0aGUgaW5hY3Rp dmVfY2xlYW4NCisJICogbGlzdD8NCisJICovDQorCWlmIChvcmRlciA9PSAw ICYmIChnZnBfbWFzayAmIF9fR0ZQX1dBSVQpICYmDQorCQkJIShjdXJyZW50 LT5mbGFncyAmIFBGX01FTUFMTE9DKSkNCisJCWRpcmVjdF9yZWNsYWltID0g MTsNCisNCisJLyoNCisJICogQXJlIHdlIGxvdyBvbiBpbmFjdGl2ZSBvciBm cmVlIHBhZ2VzPw0KKwkgKi8NCisJaWYgKChpbmFjdGl2ZV9zaG9ydGFnZSgp ID4gaW5hY3RpdmVfdGFyZ2V0IC8gMiB8fA0KKwkJCWZyZWVfc2hvcnRhZ2Uo KSA+IGZyZWVwYWdlcy5taW4gLyAyKSAmJg0KKwkJCXdhaXRxdWV1ZV9hY3Rp dmUoJmtzd2FwZF93YWl0KSkNCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgm a3N3YXBkX3dhaXQpOw0KKw0KKwkvKg0KKwkgKiBGaXJzdCwgc2VlIGlmIHdl IGhhdmUgYW55IHpvbmVzIHdpdGggbG90cyBvZiBmcmVlIG1lbW9yeS4NCisJ ICogV2UgYWxsb2NhdGUgZnJlZSBtZW1vcnkgZmlyc3QgYmVjYXVzZSBpdCBk b2Vzbid0IGNvbnRhaW4NCisJICogYW55ICh1c2VmdWwpIGRhdGEgLi4uIERV SCENCisJICovDQogCWZvciAoOzspIHsNCiAJCXpvbmVfdCAqeiA9ICooem9u ZSsrKTsNCiAJCWlmICgheikNCkBAIC0yMzUsMTQgKzI3NywyNiBAQA0KIAkJ aWYgKCF6LT5zaXplKQ0KIAkJCUJVRygpOw0KIA0KLQkJLyogSWYgdGhlcmUg YXJlIHpvbmVzIHdpdGggYSBsb3Qgb2YgZnJlZSBtZW1vcnkgYWxsb2NhdGUg ZnJvbSB0aGVtICovDQotCQlpZiAoei0+ZnJlZV9wYWdlcyA+IHotPnBhZ2Vz X2hpZ2gpIHsNCisJCWlmICh6LT5mcmVlX3BhZ2VzID4gei0+cGFnZXNfbG93 KSB7DQogCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBybXF1ZXVlKHosIG9yZGVy KTsNCiAJCQlpZiAocGFnZSkNCiAJCQkJcmV0dXJuIHBhZ2U7DQorCQl9IGVs c2UgaWYgKHotPmZyZWVfcGFnZXMgPCB6LT5wYWdlc19taW4gJiYNCisJCQkJ CXdhaXRxdWV1ZV9hY3RpdmUoJmtyZWNsYWltZF93YWl0KSkgew0KKwkJCQl3 YWtlX3VwX2ludGVycnVwdGlibGUoJmtyZWNsYWltZF93YWl0KTsNCiAJCX0N CiAJfQ0KIA0KKwkvKg0KKwkgKiBOb3cgbG9vayBhdCB6b25lcyB3aGljaCBo YXZlIGEgaGlnaCBhbW91bnQgb2YNCisJICogZnJlZSArIGluYWN0aXZlX2Ns ZWFuIHBhZ2VzLiBUaGlzIGlzIGEgcmVhbA0KKwkgKiBwb3NzaWJpbGl0eSBi ZWNhdXNlIG9mIHRoZSBkeW5hbWljIGluYWN0aXZlX3RhcmdldC4NCisJICog V2hlbiB0aGVyZSdzIGEgbG90IG9mIFZNIGFjdGl2aXR5LCB0aGUgaW5hY3Rp dmVfdGFyZ2V0DQorCSAqIHdpbGwgYmUgaGlnaCBhbmQgc29tZSB6b25lcyB3 aWxsIGhhdmUgYSBsb3Qgb2YgcGFnZXMNCisJICogb24gdGhlaXIgaW5hY3Rp dmVfY2xlYW4gbGlzdC4gSW4gdGhhdCBzaXR1YXRpb24sIG1vc3QNCisJICog YWxsb2NhdGlvbnMgd2lsbCBzdWNjZWVkIGhlcmUgYW5kIHRoZSA+em9uZS0+ cGFnZXNfaGlnaA0KKwkgKiB0ZXN0IHdpbGwgYmUgZWZmZWN0aXZlIGluIGJh bGFuY2luZyBhY3Rpdml0eSBiZXR3ZWVuIHpvbmVzLg0KKwkgKi8NCiAJem9u ZSA9IHpvbmVsaXN0LT56b25lczsNCiAJZm9yICg7Oykgew0KIAkJem9uZV90 ICp6ID0gKih6b25lKyspOw0KQEAgLTI1MSwzMiArMzA1LDc1IEBADQogCQlp ZiAoIXotPnNpemUpDQogCQkJQlVHKCk7DQogDQotCQkvKiBBcmUgd2Ugc3Vw cG9zZWQgdG8gZnJlZSBtZW1vcnk/IERvbid0IG1ha2UgaXQgd29yc2UuLiAq Lw0KLQkJaWYgKCF6LT56b25lX3dha2Vfa3N3YXBkKSB7DQotCQkJc3RydWN0 IHBhZ2UgKnBhZ2UgPSBybXF1ZXVlKHosIG9yZGVyKTsNCi0JCQlpZiAoei0+ ZnJlZV9wYWdlcyA8IHotPnBhZ2VzX2xvdykgew0KLQkJCQl6LT56b25lX3dh a2Vfa3N3YXBkID0gMTsNCi0JCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmtz d2FwZF93YWl0KSkNCi0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgma3N3 YXBkX3dhaXQpOw0KLQkJCX0NCisJCWlmICh6LT5mcmVlX3BhZ2VzICsgei0+ aW5hY3RpdmVfY2xlYW5fcGFnZXMgPiB6LT5wYWdlc19oaWdoKSB7DQorCQkJ c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOw0KKwkJCS8qIElmIHBvc3NpYmxl LCByZWNsYWltIGEgcGFnZSBkaXJlY3RseS4gKi8NCisJCQlpZiAoZGlyZWN0 X3JlY2xhaW0gJiYgei0+ZnJlZV9wYWdlcyA8IHotPnBhZ2VzX21pbiArIDgp DQorCQkJCXBhZ2UgPSByZWNsYWltX3BhZ2Uoeik7DQorCQkJLyogSWYgdGhh dCBmYWlscywgZmFsbCBiYWNrIHRvIHJtcXVldWUuICovDQorCQkJaWYgKCFw YWdlKQ0KKwkJCQlwYWdlID0gcm1xdWV1ZSh6LCBvcmRlcik7DQogCQkJaWYg KHBhZ2UpDQogCQkJCXJldHVybiBwYWdlOw0KIAkJfQ0KIAl9DQogDQogCS8q DQotCSAqIE9rLCB3ZSBkb24ndCBoYXZlIGFueSB6b25lcyB0aGF0IGRvbid0 IG5lZWQgc29tZQ0KLQkgKiBiYWxhbmNpbmcuLiBTZWUgaWYgd2UgaGF2ZSBh bnkgdGhhdCBhcmVuJ3QgY3JpdGljYWwuLg0KKwkgKiBOb3cgbG9vayBhdCB6 b25lcyB3aXRoIGEgZGVjZW50IGFtb3VudCBvZiBmcmVlICsNCisJICogaW5h Y3RpdmVfY2xlYW4gcGFnZXMuIFdoZW4gVk0gYWN0aXZpdHkgaXMgbG93LA0K KwkgKiB0aGUgaW5hY3RpdmVfdGFyZ2V0IHdpbGwgYmUgdmVyeSBsb3cgYW5k IG1vc3QNCisJICogYWxsb2NhdGlvbnMgc2hvdWxkIHN1Y2NlZWQgc29tZXdo ZXJlIGhlcmUuIFRoaXMNCisJICogbWVhbnMgd2UgbmVlZCB0aGlzIGV4dHJh IGxldmVsIG9mIGZhbGxiYWNrIHRvDQorCSAqIGFjaGlldmUgZ29vZCBiYWxh bmNpbmcgYmV0d2VlbiB6b25lcy4NCiAJICovDQogCXpvbmUgPSB6b25lbGlz dC0+em9uZXM7DQogCWZvciAoOzspIHsNCiAJCXpvbmVfdCAqeiA9ICooem9u ZSsrKTsNCiAJCWlmICgheikNCiAJCQlicmVhazsNCi0JCWlmICghei0+bG93 X29uX21lbW9yeSkgew0KLQkJCXN0cnVjdCBwYWdlICpwYWdlID0gcm1xdWV1 ZSh6LCBvcmRlcik7DQotCQkJaWYgKHotPmZyZWVfcGFnZXMgPCB6LT5wYWdl c19taW4pDQotCQkJCXotPmxvd19vbl9tZW1vcnkgPSAxOw0KKwkJaWYgKCF6 LT5zaXplKQ0KKwkJCUJVRygpOw0KKw0KKwkJaWYgKHotPmZyZWVfcGFnZXMg KyB6LT5pbmFjdGl2ZV9jbGVhbl9wYWdlcyA+IHotPnBhZ2VzX2xvdykgew0K KwkJCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsNCisJCQlpZiAoZGlyZWN0 X3JlY2xhaW0gJiYgei0+ZnJlZV9wYWdlcyA8IHotPnBhZ2VzX21pbiArIDgp DQorCQkJCXBhZ2UgPSByZWNsYWltX3BhZ2Uoeik7DQorCQkJaWYgKCFwYWdl KQ0KKwkJCQlwYWdlID0gcm1xdWV1ZSh6LCBvcmRlcik7DQorCQkJaWYgKHBh Z2UpDQorCQkJCXJldHVybiBwYWdlOw0KKwkJfQ0KKwl9DQorDQorCS8qDQor CSAqIE9LLCBub25lIG9mIHRoZSB6b25lcyBoYXMgbG90cyBvZiBwYWdlcyBm cmVlLg0KKwkgKiBXZSB3YWtlIHVwIGtzd2FwZCwgd2hpY2ggc2hvdWxkIHNv bHZlIHRoaXMNCisJICogcHJvYmxlbSBpbiB0aGUgYmFja2dyb3VuZC4NCisJ ICovDQorCWlmICh3YWl0cXVldWVfYWN0aXZlKCZrc3dhcGRfd2FpdCkpDQor CQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmtzd2FwZF93YWl0KTsNCisNCisJ LyoNCisJICogS3N3YXBkIGlzIHdva2VuIHVwIG5vdy4gSWYgd2UncmUgbHVj a3kga3N3YXBkDQorCSAqIHdpbGwgcmViYWxhbmNlIHNvbWUgbWVtb3J5IHpv bmVzIF9iZWZvcmVfIGFueQ0KKwkgKiBhcHBsaWNhdGlvbnMgbmVlZCB0byBm cmVlIG1lbW9yeSB0aGVtc2VsdmVzLg0KKwkgKiBJZiB0aGVyZSdzIHN0aWxs IGVub3VnaCBtZW1vcnkgZnJlZSwgd2UgZ3JhYg0KKwkgKiBpdC4uLg0KKwkg Ki8NCisJem9uZSA9IHpvbmVsaXN0LT56b25lczsNCisJZm9yICg7Oykgew0K KwkJem9uZV90ICp6ID0gKih6b25lKyspOw0KKwkJaWYgKCF6KQ0KKwkJCWJy ZWFrOw0KKwkJaWYgKCF6LT5zaXplKQ0KKwkJCUJVRygpOw0KKw0KKwkJaWYg KHotPmZyZWVfcGFnZXMgKyB6LT5pbmFjdGl2ZV9jbGVhbl9wYWdlcyA+IHot PnBhZ2VzX21pbikgew0KKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsN CisJCQlpZiAoZGlyZWN0X3JlY2xhaW0pDQorCQkJCXBhZ2UgPSByZWNsYWlt X3BhZ2Uoeik7DQorCQkJaWYgKCFwYWdlKQ0KKwkJCQlybXF1ZXVlKHosIG9y ZGVyKTsNCiAJCQlpZiAocGFnZSkNCiAJCQkJcmV0dXJuIHBhZ2U7DQogCQl9 DQpAQCAtMjg0LDM5ICszODEsODcgQEANCiANCiAJLyoNCiAJICogVWhodWgu IEFsbCB0aGUgem9uZXMgaGF2ZSBiZWVuIGNyaXRpY2FsLCB3aGljaCBtZWFu cyB0aGF0DQotCSAqIHdlJ2QgYmV0dGVyIGRvIHNvbWUgc3luY2hyb25vdXMg c3dhcC1vdXQuIGtzd2FwZCBoYXMgbm90DQorCSAqIHdlJ2QgYmV0dGVyIGRv IHNvbWUgc3luY2hyb25vdXMgc3dhcC1vdXQuIEtzd2FwZCBoYXMgbm90DQog CSAqIGJlZW4gYWJsZSB0byBjb3BlLi4NCiAJICovDQogCWlmICghKGN1cnJl bnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpKSB7DQotCQlpbnQgZ2ZwX21hc2sg PSB6b25lbGlzdC0+Z2ZwX21hc2s7DQotCQlpZiAoIXRyeV90b19mcmVlX3Bh Z2VzKGdmcF9tYXNrKSkgew0KKwkJLyoNCisJCSAqIEFyZSB3ZSBkZWFsaW5n IHdpdGggYSBoaWdoZXIgb3JkZXIgYWxsb2NhdGlvbj8NCisJCSAqIElmIHNv LCBvdXIgYWxsb2NhdGlvbiBtYXkgd2VsbCBiZSBmYWlsaW5nIGJlY2F1c2UN CisJCSAqIHdlIGRvbid0IGhhdmUgZW5vdWdoIGNvbnRpZ3VvdXMgZnJlZSBw YWdlcy4NCisJCSAqDQorCQkgKiBBIHNvbHV0aW9uIGlzIHRvIG1vdmUgcGFn ZXMgZnJvbSB0aGUgaW5hY3RpdmVfY2xlYW4NCisJCSAqIGxpc3QgdG8gdGhl IGZyZWUgbGlzdCB1bnRpbCB3ZSBkbyBoYXZlIGVub3VnaCBmcmVlDQorCQkg KiBjb250aWd1b3VzIHBhZ2VzIGZvciB0aGUgYWxsb2NhdGlvbiB0byBzdWNj ZWVkLg0KKwkJICovDQorCQlpZiAob3JkZXIgPiAwICYmIChnZnBfbWFzayAm IF9fR0ZQX1dBSVQpKSB7DQorCQkJem9uZSA9IHpvbmVsaXN0LT56b25lczsN CisJCQkvKiBGaXJzdCwgY2xlYW4gc29tZSBkaXJ0eSBwYWdlcy4gKi8NCisJ CQlwYWdlX2xhdW5kZXIoZ2ZwX21hc2ssIDEpOw0KKwkJCWZvciAoOzspIHsN CisJCQkJem9uZV90ICp6ID0gKih6b25lKyspOw0KKwkJCQlpZiAoIXopDQor CQkJCQlicmVhazsNCisJCQkJaWYgKCF6LT5zaXplKQ0KKwkJCQkJY29udGlu dWU7DQorCQkJCXdoaWxlICh6LT5pbmFjdGl2ZV9jbGVhbl9wYWdlcykgew0K KwkJCQkJc3RydWN0IHBhZ2UgKiBwYWdlOw0KKwkJCQkJLyogTW92ZSBvbmUg cGFnZSB0byB0aGUgZnJlZSBsaXN0LiAqLw0KKwkJCQkJcGFnZSA9IHJlY2xh aW1fcGFnZSh6KTsNCisJCQkJCWlmICghcGFnZSkNCisJCQkJCQlicmVhazsN CisJCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOw0KKwkJCQkJLyogVHJ5IGlmIHRo ZSBhbGxvY2F0aW9uIHN1Y2NlZWRzLiAqLw0KKwkJCQkJcGFnZSA9IHJtcXVl dWUoeiwgb3JkZXIpOw0KKwkJCQkJaWYgKHBhZ2UpDQorCQkJCQkJcmV0dXJu IHBhZ2U7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQkvKg0KKwkJICogVHJ5 IHRvIGZyZWUgcGFnZXMgb3Vyc2VsdmVzLCBzaW5jZSBrc3dhcGQgd2Fzbid0 DQorCQkgKiBmYXN0IGVub3VnaCBmb3IgdXMuDQorCQkgKi8NCisJCWlmIChn ZnBfbWFzayAmIF9fR0ZQX1dBSVQpIHsNCisJCQl0cnlfdG9fZnJlZV9wYWdl cyhnZnBfbWFzayk7DQorCQkJaWYgKHBhZ2VfbGF1bmRlcihnZnBfbWFzaywg MSkgfHwgbnJfZnJlZV9wYWdlcygpICsNCisJCQkJCW5yX2luYWN0aXZlX2Ns ZWFuX3BhZ2VzKCkgPiBmcmVlcGFnZXMubWluKQ0KKwkJCQlnb3RvIGFsbG9j YXRlX3JlZ2FyZGxlc3M7DQogCQkJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9I SUdIKSkNCiAJCQkJZ290byBmYWlsOw0KIAkJfQ0KIAl9DQogDQorYWxsb2Nh dGVfcmVnYXJkbGVzczoNCiAJLyoNCiAJICogRmluYWwgcGhhc2U6IGFsbG9j YXRlIGFueXRoaW5nIHdlIGNhbiENCiAJICovDQogCXpvbmUgPSB6b25lbGlz dC0+em9uZXM7DQogCWZvciAoOzspIHsNCi0JCXN0cnVjdCBwYWdlICpwYWdl Ow0KLQ0KIAkJem9uZV90ICp6ID0gKih6b25lKyspOw0KKwkJc3RydWN0IHBh Z2UgKiBwYWdlID0gTlVMTDsNCiAJCWlmICgheikNCiAJCQlicmVhazsNCi0J CXBhZ2UgPSBybXF1ZXVlKHosIG9yZGVyKTsNCisJCWlmICghei0+c2l6ZSkN CisJCQlCVUcoKTsNCisNCisJCWlmIChkaXJlY3RfcmVjbGFpbSkNCisJCQlw YWdlID0gcmVjbGFpbV9wYWdlKHopOw0KKwkJaWYgKCFwYWdlKQ0KKwkJCXBh Z2UgPSBybXF1ZXVlKHosIG9yZGVyKTsNCiAJCWlmIChwYWdlKQ0KIAkJCXJl dHVybiBwYWdlOw0KIAl9DQogDQogZmFpbDoNCiAJLyogTm8gbHVjay4uICov DQorCWlmICghb3JkZXIpDQorCQlzaG93X2ZyZWVfYXJlYXMoKTsNCiAJcmV0 dXJuIE5VTEw7DQogfQ0KIA0KIC8qDQotICogVG90YWwgYW1vdW50IG9mIGZy ZWUgKGFsbG9jYXRhYmxlKSBSQU06DQorICogVG90YWwgYW1vdW50IG9mIGZy ZWUgUkFNOg0KICAqLw0KIHVuc2lnbmVkIGludCBucl9mcmVlX3BhZ2VzICh2 b2lkKQ0KIHsNCkBAIC0zMzIsMTggKzQ3NywzMiBAQA0KIH0NCiANCiAvKg0K LSAqIEFtb3VudCBvZiBmcmVlIFJBTSBhbGxvY2F0YWJsZSBhcyBidWZmZXIg bWVtb3J5Og0KKyAqIFRvdGFsIGFtb3VudCBvZiBpbmFjdGl2ZV9jbGVhbiAo YWxsb2NhdGFibGUpIFJBTToNCiAgKi8NCi11bnNpZ25lZCBpbnQgbnJfZnJl ZV9idWZmZXJfcGFnZXMgKHZvaWQpDQordW5zaWduZWQgaW50IG5yX2luYWN0 aXZlX2NsZWFuX3BhZ2VzICh2b2lkKQ0KIHsNCiAJdW5zaWduZWQgaW50IHN1 bTsNCiAJem9uZV90ICp6b25lOw0KIAlpbnQgaTsNCiANCi0Jc3VtID0gbnJf bHJ1X3BhZ2VzOw0KKwlzdW0gPSAwOw0KIAlmb3IgKGkgPSAwOyBpIDwgTlVN Tk9ERVM7IGkrKykNCi0JCWZvciAoem9uZSA9IE5PREVfREFUQShpKS0+bm9k ZV96b25lczsgem9uZSA8PSBOT0RFX0RBVEEoaSktPm5vZGVfem9uZXMrWk9O RV9OT1JNQUw7IHpvbmUrKykNCi0JCQlzdW0gKz0gem9uZS0+ZnJlZV9wYWdl czsNCisJCWZvciAoem9uZSA9IE5PREVfREFUQShpKS0+bm9kZV96b25lczsg em9uZSA8IE5PREVfREFUQShpKS0+bm9kZV96b25lcyArIE1BWF9OUl9aT05F Uzsgem9uZSsrKQ0KKwkJCXN1bSArPSB6b25lLT5pbmFjdGl2ZV9jbGVhbl9w YWdlczsNCisJcmV0dXJuIHN1bTsNCit9DQorDQorLyoNCisgKiBBbW91bnQg b2YgZnJlZSBSQU0gYWxsb2NhdGFibGUgYXMgYnVmZmVyIG1lbW9yeToNCisg Ki8NCit1bnNpZ25lZCBpbnQgbnJfZnJlZV9idWZmZXJfcGFnZXMgKHZvaWQp DQorew0KKwlpbnQgc3VtOw0KKw0KKwlzdW0gPSBucl9mcmVlX3BhZ2VzKCk7 DQorCXN1bSArPSBucl9pbmFjdGl2ZV9jbGVhbl9wYWdlcygpOw0KKwlzdW0g Kz0gbnJfaW5hY3RpdmVfZGlydHlfcGFnZXMgLyA0Ow0KKw0KIAlyZXR1cm4g c3VtOw0KIH0NCiANCkBAIC0zNzMsOSArNTMyLDExIEBADQogCQlucl9mcmVl X3BhZ2VzKCkgPDwgKFBBR0VfU0hJRlQtMTApLA0KIAkJbnJfZnJlZV9oaWdo cGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCkpOw0KIA0KLQlwcmludGsoIigg RnJlZTogJWQsIGxydV9jYWNoZTogJWQgKCVkICVkICVkKSApXG4iLA0KKwlw cmludGsoIiggQWN0aXZlOiAlZCwgaW5hY3RpdmVfZGlydHk6ICVkLCBpbmFj dGl2ZV9jbGVhbjogJWQsIGZyZWU6ICVkICglZCAlZCAlZCkgKVxuIiwNCisJ CW5yX2FjdGl2ZV9wYWdlcywNCisJCW5yX2luYWN0aXZlX2RpcnR5X3BhZ2Vz LA0KKwkJbnJfaW5hY3RpdmVfY2xlYW5fcGFnZXMoKSwNCiAJCW5yX2ZyZWVf cGFnZXMoKSwNCi0JCW5yX2xydV9wYWdlcywNCiAJCWZyZWVwYWdlcy5taW4s DQogCQlmcmVlcGFnZXMubG93LA0KIAkJZnJlZXBhZ2VzLmhpZ2gpOw0KQEAg LTUxNiw3ICs2NzcsOCBAQA0KIAlmcmVlcGFnZXMubWluICs9IGk7DQogCWZy ZWVwYWdlcy5sb3cgKz0gaSAqIDI7DQogCWZyZWVwYWdlcy5oaWdoICs9IGkg KiAzOw0KLQltZW1saXN0X2luaXQoJmxydV9jYWNoZSk7DQorCW1lbWxpc3Rf aW5pdCgmYWN0aXZlX2xpc3QpOw0KKwltZW1saXN0X2luaXQoJmluYWN0aXZl X2RpcnR5X2xpc3QpOw0KIA0KIAkvKg0KIAkgKiBTb21lIGFyY2hpdGVjdHVy ZXMgKHdpdGggbG90cyBvZiBtZW0gYW5kIGRpc2NvbnRpbm91cyBtZW1vcnkN CkBAIC01NjIsNiArNzI0LDkgQEANCiAJCXpvbmUtPmxvY2sgPSBTUElOX0xP Q0tfVU5MT0NLRUQ7DQogCQl6b25lLT56b25lX3BnZGF0ID0gcGdkYXQ7DQog CQl6b25lLT5mcmVlX3BhZ2VzID0gMDsNCisJCXpvbmUtPmluYWN0aXZlX2Ns ZWFuX3BhZ2VzID0gMDsNCisJCXpvbmUtPmluYWN0aXZlX2RpcnR5X3BhZ2Vz ID0gMDsNCisJCW1lbWxpc3RfaW5pdCgmem9uZS0+aW5hY3RpdmVfY2xlYW5f bGlzdCk7DQogCQlpZiAoIXNpemUpDQogCQkJY29udGludWU7DQogDQpAQCAt NTc1LDggKzc0MCw2IEBADQogCQl6b25lLT5wYWdlc19taW4gPSBtYXNrOw0K IAkJem9uZS0+cGFnZXNfbG93ID0gbWFzayoyOw0KIAkJem9uZS0+cGFnZXNf aGlnaCA9IG1hc2sqMzsNCi0JCXpvbmUtPmxvd19vbl9tZW1vcnkgPSAwOw0K LQkJem9uZS0+em9uZV93YWtlX2tzd2FwZCA9IDA7DQogCQl6b25lLT56b25l X21lbV9tYXAgPSBtZW1fbWFwICsgb2Zmc2V0Ow0KIAkJem9uZS0+em9uZV9z dGFydF9tYXBuciA9IG9mZnNldDsNCiAJCXpvbmUtPnpvbmVfc3RhcnRfcGFk ZHIgPSB6b25lX3N0YXJ0X3BhZGRyOw0KLS0tIGxpbnV4LTIuNC4wLXRlc3Q0 L21tL3BhZ2VfaW8uYy5vcmlnCVdlZCBBdWcgIDkgMTY6MTE6MTQgMjAwMA0K KysrIGxpbnV4LTIuNC4wLXRlc3Q0L21tL3BhZ2VfaW8uYwlXZWQgQXVnICA5 IDE2OjE0OjM5IDIwMDANCkBAIC00Myw3ICs0Myw4IEBADQogCXN0cnVjdCBp bm9kZSAqc3dhcGYgPSAwOw0KIA0KIAkvKiBEb24ndCBhbGxvdyB0b28gbWFu eSBwZW5kaW5nIHBhZ2VzIGluIGZsaWdodC4uICovDQotCWlmIChhdG9taWNf cmVhZCgmbnJfYXN5bmNfcGFnZXMpID4gcGFnZXJfZGFlbW9uLnN3YXBfY2x1 c3RlcikNCisJaWYgKGF0b21pY19yZWFkKCZucl9hc3luY19wYWdlcykgPiBw YWdlcl9kYWVtb24uc3dhcF9jbHVzdGVyICoNCisJCQkoMSA8PCBwYWdlX2Ns dXN0ZXIpKQ0KIAkJd2FpdCA9IDE7DQogDQogCWlmIChydyA9PSBSRUFEKSB7 DQotLS0gbGludXgtMi40LjAtdGVzdDQvbW0vc3dhcC5jLm9yaWcJV2VkIEF1 ZyAgOSAxNjoxMToxNCAyMDAwDQorKysgbGludXgtMi40LjAtdGVzdDQvbW0v c3dhcC5jCVNhdCBBdWcgMTIgMjM6NTQ6NTEgMjAwMA0KQEAgLTQwLDcgKzQw LDE4IEBADQogfTsNCiANCiAvKiBIb3cgbWFueSBwYWdlcyBkbyB3ZSB0cnkg dG8gc3dhcCBvciBwYWdlIGluL291dCB0b2dldGhlcj8gKi8NCi1pbnQgcGFn ZV9jbHVzdGVyID0gNDsgLyogRGVmYXVsdCB2YWx1ZSBtb2RpZmllZCBpbiBz d2FwX3NldHVwKCkgKi8NCitpbnQgcGFnZV9jbHVzdGVyOw0KKw0KKy8qDQor ICogVGhpcyB2YXJpYWJsZSBjb250YWlucyB0aGUgYW1vdW50IG9mIHBhZ2Ug c3RlYWxzIHRoZSBzeXN0ZW0NCisgKiBpcyBkb2luZywgYXZlcmFnZWQgb3Zl ciBhIG1pbnV0ZS4gV2UgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIGhvdw0KKyAq IG1hbnkgaW5hY3RpdmUgcGFnZXMgd2Ugc2hvdWxkIGhhdmUuDQorICoNCisg KiBJbiByZWNsYWltX3BhZ2UgYW5kIF9fYWxsb2NfcGFnZXM6IG1lbW9yeV9w cmVzc3VyZSsrDQorICogSW4gX19mcmVlX3BhZ2VzX29rOiBtZW1vcnlfcHJl c3N1cmUtLQ0KKyAqIEluIHJlY2FsY3VsYXRlX3ZtX3N0YXRzIHRoZSB2YWx1 ZSBpcyBkZWNheWVkIChvbmNlIGEgc2Vjb25kKQ0KKyAqLw0KK2ludCBtZW1v cnlfcHJlc3N1cmU7DQogDQogLyogV2UgdHJhY2sgdGhlIG51bWJlciBvZiBw YWdlcyBjdXJyZW50bHkgYmVpbmcgYXN5bmNocm9ub3VzbHkgc3dhcHBlZA0K ICAgIG91dCwgc28gdGhhdCB3ZSBkb24ndCB0cnkgdG8gc3dhcCBUT08gbWFu eSBwYWdlcyBvdXQgYXQgb25jZSAqLw0KQEAgLTYxLDEzICs3MiwyMjQgQEAN CiBwYWdlcl9kYWVtb25fdCBwYWdlcl9kYWVtb24gPSB7DQogCTUxMiwJLyog YmFzZSBudW1iZXIgZm9yIGNhbGN1bGF0aW5nIHRoZSBudW1iZXIgb2YgdHJp ZXMgKi8NCiAJU1dBUF9DTFVTVEVSX01BWCwJLyogbWluaW11bSBudW1iZXIg b2YgdHJpZXMgKi8NCi0JU1dBUF9DTFVTVEVSX01BWCwJLyogZG8gc3dhcCBJ L08gaW4gY2x1c3RlcnMgb2YgdGhpcyBzaXplICovDQorCTgsCS8qIGRvIHN3 YXAgSS9PIGluIGNsdXN0ZXJzIG9mIHRoaXMgc2l6ZSAqLw0KIH07DQogDQor LyoqDQorICogYWdlX3BhZ2Vfe3VwLGRvd259IC0JcGFnZSBhZ2luZyBoZWxw ZXIgZnVuY3Rpb25zDQorICogQHBhZ2UgLSB0aGUgcGFnZSB3ZSB3YW50IHRv IGFnZQ0KKyAqIEBub2xvY2sgLSBhcmUgd2UgYWxyZWFkeSBob2xkaW5nIHRo ZSBwYWdlbGlzdF9scnVfbG9jaz8NCisgKg0KKyAqIElmIHRoZSBwYWdlIGlz IG9uIG9uZSBvZiB0aGUgbGlzdHMgKGFjdGl2ZSwgaW5hY3RpdmVfZGlydHkg b3INCisgKiBpbmFjdGl2ZV9jbGVhbiksIHdlIHdpbGwgZ3JhYiB0aGUgcGFn ZWxpc3RfbHJ1X2xvY2sgYXMgbmVlZGVkLg0KKyAqIElmIHlvdSdyZSBhbHJl YWR5IGhvbGRpbmcgdGhlIGxvY2ssIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRo IHRoZQ0KKyAqIG5vbG9jayBhcmd1bWVudCBub24temVyby4NCisgKi8NCit2 b2lkIGFnZV9wYWdlX3VwX25vbG9jayhzdHJ1Y3QgcGFnZSAqIHBhZ2UpDQor ew0KKwkvKg0KKwkgKiBXZSdyZSBkZWFsaW5nIHdpdGggYW4gaW5hY3RpdmUg cGFnZSwgbW92ZSB0aGUgcGFnZQ0KKwkgKiB0byB0aGUgYWN0aXZlIGxpc3Qu DQorCSAqLw0KKwlpZiAoIXBhZ2UtPmFnZSkNCisJCWFjdGl2YXRlX3BhZ2Vf bm9sb2NrKHBhZ2UpOw0KKw0KKwkvKiBUaGUgYWN0dWFsIHBhZ2UgYWdpbmcg Yml0ICovDQorCXBhZ2UtPmFnZSArPSBQQUdFX0FHRV9BRFY7DQorCWlmIChw YWdlLT5hZ2UgPiBQQUdFX0FHRV9NQVgpDQorCQlwYWdlLT5hZ2UgPSBQQUdF X0FHRV9NQVg7DQorfQ0KKw0KK3ZvaWQgYWdlX3BhZ2VfZG93bl9ub2xvY2so c3RydWN0IHBhZ2UgKiBwYWdlKQ0KK3sNCisJLyogVGhlIGFjdHVhbCBwYWdl IGFnaW5nIGJpdCAqLw0KKwlwYWdlLT5hZ2UgLz0gMjsNCisNCisJLyoNCisJ ICogVGhlIHBhZ2UgaXMgbm93IGFuIG9sZCBwYWdlLiBNb3ZlIHRvIHRoZSBp bmFjdGl2ZQ0KKwkgKiBsaXN0IChpZiBwb3NzaWJsZSAuLi4gc2VlIGJlbG93 KS4NCisJICovDQorCWlmICghcGFnZS0+YWdlKQ0KKwkgICAgICAgZGVhY3Rp dmF0ZV9wYWdlX25vbG9jayhwYWdlKTsNCit9DQorDQordm9pZCBhZ2VfcGFn ZV91cChzdHJ1Y3QgcGFnZSAqIHBhZ2UpDQorew0KKwkvKg0KKwkgKiBXZSdy ZSBkZWFsaW5nIHdpdGggYW4gaW5hY3RpdmUgcGFnZSwgbW92ZSB0aGUgcGFn ZQ0KKwkgKiB0byB0aGUgYWN0aXZlIGxpc3QuDQorCSAqLw0KKwlpZiAoIXBh Z2UtPmFnZSkNCisJCWFjdGl2YXRlX3BhZ2UocGFnZSk7DQorDQorCS8qIFRo ZSBhY3R1YWwgcGFnZSBhZ2luZyBiaXQgKi8NCisJcGFnZS0+YWdlICs9IFBB R0VfQUdFX0FEVjsNCisJaWYgKHBhZ2UtPmFnZSA+IFBBR0VfQUdFX01BWCkN CisJCXBhZ2UtPmFnZSA9IFBBR0VfQUdFX01BWDsNCit9DQorDQordm9pZCBh Z2VfcGFnZV9kb3duKHN0cnVjdCBwYWdlICogcGFnZSkNCit7DQorCS8qIFRo ZSBhY3R1YWwgcGFnZSBhZ2luZyBiaXQgKi8NCisJcGFnZS0+YWdlIC89IDI7 DQorDQorCS8qDQorCSAqIFRoZSBwYWdlIGlzIG5vdyBhbiBvbGQgcGFnZS4g TW92ZSB0byB0aGUgaW5hY3RpdmUNCisJICogbGlzdCAoaWYgcG9zc2libGUg Li4uIHNlZSBiZWxvdykuDQorCSAqLw0KKwlpZiAoIXBhZ2UtPmFnZSkNCisJ ICAgICAgIGRlYWN0aXZhdGVfcGFnZShwYWdlKTsNCit9DQorDQorDQorLyoq DQorICogKGRlKWFjdGl2YXRlX3BhZ2UgLSBtb3ZlIHBhZ2VzIGZyb20vdG8g YWN0aXZlIGFuZCBpbmFjdGl2ZSBsaXN0cw0KKyAqIEBwYWdlOiB0aGUgcGFn ZSB3ZSB3YW50IHRvIG1vdmUNCisgKiBAbm9sb2NrIC0gYXJlIHdlIGFscmVh ZHkgaG9sZGluZyB0aGUgcGFnZW1hcF9scnVfbG9jaz8NCisgKg0KKyAqIERl YWN0aXZhdGVfcGFnZSB3aWxsIG1vdmUgYW4gYWN0aXZlIHBhZ2UgdG8gdGhl IHJpZ2h0DQorICogaW5hY3RpdmUgbGlzdCwgd2hpbGUgYWN0aXZhdGVfcGFn ZSB3aWxsIG1vdmUgYSBwYWdlIGJhY2sNCisgKiBmcm9tIG9uZSBvZiB0aGUg aW5hY3RpdmUgbGlzdHMgdG8gdGhlIGFjdGl2ZSBsaXN0LiBJZg0KKyAqIGNh bGxlZCBvbiBhIHBhZ2Ugd2hpY2ggaXMgbm90IG9uIGFueSBvZiB0aGUgbGlz dHMsIHRoZQ0KKyAqIHBhZ2UgaXMgbGVmdCBhbG9uZS4NCisgKi8NCit2b2lk IGRlYWN0aXZhdGVfcGFnZV9ub2xvY2soc3RydWN0IHBhZ2UgKiBwYWdlKQ0K K3sNCisJcGFnZS0+YWdlID0gMDsNCisNCisJLyoNCisJICogRG9uJ3QgdG91 Y2ggaXQgaWYgaXQncyBub3Qgb24gdGhlIGFjdGl2ZSBsaXN0Lg0KKwkgKiAo c29tZSBwYWdlcyBhcmVuJ3Qgb24gYW55IGxpc3QgYXQgYWxsKQ0KKwkgKi8N CisJaWYgKFBhZ2VBY3RpdmUocGFnZSkgJiYgKHBhZ2VfY291bnQocGFnZSkg PT0gMSB8fCBwYWdlLT5idWZmZXJzKSAmJg0KKwkJCSFwYWdlX3JhbWRpc2so cGFnZSkpIHsNCisNCisJCS8qDQorCQkgKiBXZSBjYW4gbW92ZSB0aGUgcGFn ZSB0byB0aGUgaW5hY3RpdmVfZGlydHkgbGlzdA0KKwkJICogaWYgd2Uga25v dyB0aGVyZSBpcyBiYWNraW5nIHN0b3JlIGF2YWlsYWJsZS4NCisJCSAqLw0K KwkJaWYgKHBhZ2UtPmJ1ZmZlcnMpIHsNCisJCQlkZWxfcGFnZV9mcm9tX2Fj dGl2ZV9saXN0KHBhZ2UpOw0KKwkJCWFkZF9wYWdlX3RvX2luYWN0aXZlX2Rp cnR5X2xpc3QocGFnZSk7DQorCQkvKg0KKwkJICogSWYgdGhlIHBhZ2UgaXMg Y2xlYW4gYW5kIGltbWVkaWF0ZWx5IHJldXNhYmxlLA0KKwkJICogd2UgY2Fu IG1vdmUgaXQgdG8gdGhlIGluYWN0aXZlX2NsZWFuIGxpc3QuDQorCQkgKi8N CisJCX0gZWxzZSBpZiAocGFnZS0+bWFwcGluZyAmJiAhUGFnZURpcnR5KHBh Z2UpICYmDQorCQkJCQkJCSFQYWdlTG9ja2VkKHBhZ2UpKSB7DQorCQkJZGVs X3BhZ2VfZnJvbV9hY3RpdmVfbGlzdChwYWdlKTsNCisJCQlhZGRfcGFnZV90 b19pbmFjdGl2ZV9jbGVhbl9saXN0KHBhZ2UpOw0KKwkJfQ0KKwkJLyoNCisJ CSAqIEVMU0U6IG5vIGJhY2tpbmcgc3RvcmUgYXZhaWxhYmxlLCBsZWF2ZSBp dCBvbg0KKwkJICogdGhlIGFjdGl2ZSBsaXN0Lg0KKwkJICovDQorCX0NCit9 CQ0KKw0KK3ZvaWQgZGVhY3RpdmF0ZV9wYWdlKHN0cnVjdCBwYWdlICogcGFn ZSkNCit7DQorCXNwaW5fbG9jaygmcGFnZW1hcF9scnVfbG9jayk7DQorCWRl YWN0aXZhdGVfcGFnZV9ub2xvY2socGFnZSk7DQorCXNwaW5fdW5sb2NrKCZw YWdlbWFwX2xydV9sb2NrKTsNCit9DQorDQogLyoNCi0gKiBQZXJmb3JtIGFu eSBzZXR1cCBmb3IgdGhlIHN3YXAgc3lzdGVtDQorICogTW92ZSBhbiBpbmFj dGl2ZSBwYWdlIHRvIHRoZSBhY3RpdmUgbGlzdC4NCiAgKi8NCit2b2lkIGFj dGl2YXRlX3BhZ2Vfbm9sb2NrKHN0cnVjdCBwYWdlICogcGFnZSkNCit7DQor CWlmIChQYWdlSW5hY3RpdmVEaXJ0eShwYWdlKSkgew0KKwkJZGVsX3BhZ2Vf ZnJvbV9pbmFjdGl2ZV9kaXJ0eV9saXN0KHBhZ2UpOw0KKwkJYWRkX3BhZ2Vf dG9fYWN0aXZlX2xpc3QocGFnZSk7DQorCX0gZWxzZSBpZiAoUGFnZUluYWN0 aXZlQ2xlYW4ocGFnZSkpIHsNCisJCWRlbF9wYWdlX2Zyb21faW5hY3RpdmVf Y2xlYW5fbGlzdChwYWdlKTsNCisJCWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0 KHBhZ2UpOw0KKwl9IGVsc2Ugew0KKwkJLyoNCisJCSAqIFRoZSBwYWdlIHdh cyBub3Qgb24gYW55IGxpc3QsIHNvIHdlIHRha2UgY2FyZQ0KKwkJICogbm90 IHRvIGRvIGFueXRoaW5nLg0KKwkJICovDQorCX0NCit9DQorDQordm9pZCBh Y3RpdmF0ZV9wYWdlKHN0cnVjdCBwYWdlICogcGFnZSkNCit7DQorCXNwaW5f bG9jaygmcGFnZW1hcF9scnVfbG9jayk7DQorCWFjdGl2YXRlX3BhZ2Vfbm9s b2NrKHBhZ2UpOw0KKwlzcGluX3VubG9jaygmcGFnZW1hcF9scnVfbG9jayk7 DQorfQ0KKw0KKy8qKg0KKyAqIGxydV9jYWNoZV9hZGQ6IGFkZCBhIHBhZ2Ug dG8gdGhlIHBhZ2UgbGlzdHMNCisgKiBAcGFnZTogdGhlIHBhZ2UgdG8gYWRk DQorICovDQordm9pZCBscnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICogcGFn ZSkNCit7DQorCXNwaW5fbG9jaygmcGFnZW1hcF9scnVfbG9jayk7DQorCWlm ICghUGFnZUxvY2tlZChwYWdlKSkNCisJCUJVRygpOw0KKwlERUJVR19BRERf UEFHRQ0KKwlhZGRfcGFnZV90b19hY3RpdmVfbGlzdChwYWdlKTsNCisJLyog VGhpcyBzaG91bGQgYmUgcmVsYXRpdmVseSByYXJlICovDQorCWlmICghcGFn ZS0+YWdlKQ0KKwkJZGVhY3RpdmF0ZV9wYWdlX25vbG9jayhwYWdlKTsNCisJ c3Bpbl91bmxvY2soJnBhZ2VtYXBfbHJ1X2xvY2spOw0KK30NCisNCisvKioN CisgKiBfX2xydV9jYWNoZV9kZWw6IHJlbW92ZSBhIHBhZ2UgZnJvbSB0aGUg cGFnZSBsaXN0cw0KKyAqIEBwYWdlOiB0aGUgcGFnZSB0byBhZGQNCisgKg0K KyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIHdoZW4gdGhlIGNhbGxlciBhbHJl YWR5IGhvbGRzDQorICogdGhlIHBhZ2VtYXBfbHJ1X2xvY2suDQorICovDQor dm9pZCBfX2xydV9jYWNoZV9kZWwoc3RydWN0IHBhZ2UgKiBwYWdlKQ0KK3sN CisJaWYgKFBhZ2VBY3RpdmUocGFnZSkpIHsNCisJCWRlbF9wYWdlX2Zyb21f YWN0aXZlX2xpc3QocGFnZSk7DQorCX0gZWxzZSBpZiAoUGFnZUluYWN0aXZl RGlydHkocGFnZSkpIHsNCisJCWRlbF9wYWdlX2Zyb21faW5hY3RpdmVfZGly dHlfbGlzdChwYWdlKTsNCisJfSBlbHNlIGlmIChQYWdlSW5hY3RpdmVDbGVh bihwYWdlKSkgew0KKwkJZGVsX3BhZ2VfZnJvbV9pbmFjdGl2ZV9jbGVhbl9s aXN0KHBhZ2UpOw0KKwl9IGVsc2Ugew0KKwkJcHJpbnRrKCJWTTogX19scnVf Y2FjaGVfZGVsLCBmb3VuZCB1bmtub3duIHBhZ2UgPyFcbiIpOw0KKwl9DQor CURFQlVHX0FERF9QQUdFDQorfQ0KKw0KKy8qKg0KKyAqIGxydV9jYWNoZV9k ZWw6IHJlbW92ZSBhIHBhZ2UgZnJvbSB0aGUgcGFnZSBsaXN0cw0KKyAqIEBw YWdlOiB0aGUgcGFnZSB0byByZW1vdmUNCisgKi8NCit2b2lkIGxydV9jYWNo ZV9kZWwoc3RydWN0IHBhZ2UgKiBwYWdlKQ0KK3sNCisJaWYgKCFQYWdlTG9j a2VkKHBhZ2UpKQ0KKwkJQlVHKCk7DQorCXNwaW5fbG9jaygmcGFnZW1hcF9s cnVfbG9jayk7DQorCV9fbHJ1X2NhY2hlX2RlbChwYWdlKTsNCisJc3Bpbl91 bmxvY2soJnBhZ2VtYXBfbHJ1X2xvY2spOw0KK30NCisNCisvKioNCisgKiBy ZWNhbGN1bGF0ZV92bV9zdGF0cyAtIHJlY2FsY3VsYXRlIFZNIHN0YXRpc3Rp Y3MNCisgKg0KKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBv bmNlIGEgc2Vjb25kIHRvIHJlY2FsY3VsYXRlDQorICogc29tZSB1c2VmdWwg c3RhdGlzdGljcyB0aGUgVk0gc3Vic3lzdGVtIHVzZXMgdG8gZGV0ZXJtaW5l DQorICogaXRzIGJlaGF2aW91ci4NCisgKi8NCit2b2lkIHJlY2FsY3VsYXRl X3ZtX3N0YXRzKHZvaWQpDQorew0KKwkvKg0KKwkgKiBTdWJzdHJhY3Qgb25l IHNlY29uZCB3b3J0aCBvZiBtZW1vcnlfcHJlc3N1cmUgZnJvbQ0KKwkgKiBt ZW1vcnlfcHJlc3N1cmUuDQorCSAqLw0KKwltZW1vcnlfcHJlc3N1cmUgLT0g KG1lbW9yeV9wcmVzc3VyZSA+PiBJTkFDVElWRV9TSElGVCk7DQorfQ0KIA0K Ky8qDQorICogUGVyZm9ybSBhbnkgc2V0dXAgZm9yIHRoZSBzd2FwIHN5c3Rl bQ0KKyAqLw0KIHZvaWQgX19pbml0IHN3YXBfc2V0dXAodm9pZCkNCiB7DQog CS8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3IgbWVtb3J5IDwxNk1CIG9y IDwzMk1CICovDQotLS0gbGludXgtMi40LjAtdGVzdDQvbW0vc3dhcF9zdGF0 ZS5jLm9yaWcJV2VkIEF1ZyAgOSAxNjoxMToxNCAyMDAwDQorKysgbGludXgt Mi40LjAtdGVzdDQvbW0vc3dhcF9zdGF0ZS5jCVdlZCBBdWcgIDkgMTY6MTQ6 MzkgMjAwMA0KQEAgLTczLDcgKzczLDcgQEANCiAJCVBBR0VfQlVHKHBhZ2Up Ow0KIA0KIAlQYWdlQ2xlYXJTd2FwQ2FjaGUocGFnZSk7DQotCXJlbW92ZV9p bm9kZV9wYWdlKHBhZ2UpOw0KKwlfX3JlbW92ZV9pbm9kZV9wYWdlKHBhZ2Up Ow0KIH0NCiANCiAvKg0KQEAgLTEwNSw3ICsxMDUsOSBAQA0KIAlpZiAoYmxv Y2tfZmx1c2hwYWdlKHBhZ2UsIDApKQ0KIAkJbHJ1X2NhY2hlX2RlbChwYWdl KTsNCiANCisJc3Bpbl9sb2NrKCZwYWdlY2FjaGVfbG9jayk7DQogCV9fZGVs ZXRlX2Zyb21fc3dhcF9jYWNoZShwYWdlKTsNCisJc3Bpbl91bmxvY2soJnBh Z2VjYWNoZV9sb2NrKTsNCiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOw0K IH0NCiANCi0tLSBsaW51eC0yLjQuMC10ZXN0NC9tbS92bXNjYW4uYy5vcmln CVR1ZSBKdWwgMTEgMTc6MzY6NTIgMjAwMA0KKysrIGxpbnV4LTIuNC4wLXRl c3Q0L21tL3Ztc2Nhbi5jCU1vbiBBdWcgMTQgMTg6MTk6NTUgMjAwMA0KQEAg LTksNiArOSw3IEBADQogICogIHRvIGJyaW5nIHRoZSBzeXN0ZW0gYmFjayB0 byBmcmVlcGFnZXMuaGlnaDogMi40Ljk3LCBSaWsgdmFuIFJpZWwuDQogICog IFZlcnNpb246ICRJZDogdm1zY2FuLmMsdiAxLjUgMTk5OC8wMi8yMyAyMjox NDoyOCBzY3QgRXhwICQNCiAgKiAgWm9uZSBhd2FyZSBrc3dhcGQgc3RhcnRl ZCAwMi8wMCwgS2Fub2ogU2FyY2FyIChrYW5vakBzZ2kuY29tKS4NCisgKiAg TXVsdGlxdWV1ZSBWTSBzdGFydGVkIDUuOC4wMCwgUmlrIHZhbiBSaWVsLg0K ICAqLw0KIA0KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQpAQCAtNDAsNiAr NDEsNyBAQA0KIAlzd3BfZW50cnlfdCBlbnRyeTsNCiAJc3RydWN0IHBhZ2Ug KiBwYWdlOw0KIAlpbnQgKCpzd2Fwb3V0KShzdHJ1Y3QgcGFnZSAqLCBzdHJ1 Y3QgZmlsZSAqKTsNCisJaW50IG9ubGlzdDsNCiANCiAJcHRlID0gKnBhZ2Vf dGFibGU7DQogCWlmICghcHRlX3ByZXNlbnQocHRlKSkNCkBAIC01MSwxNiAr NTMsMzMgQEANCiAJaWYgKG1tLT5zd2FwX2NudCkNCiAJCW1tLT5zd2FwX2Nu dC0tOw0KIA0KKwlvbmxpc3QgPSBQYWdlQWN0aXZlKHBhZ2UpOw0KIAkvKiBE b24ndCBsb29rIGF0IHRoaXMgcHRlIGlmIGl0J3MgYmVlbiBhY2Nlc3NlZCBy ZWNlbnRseS4gKi8NCiAJaWYgKHB0ZV95b3VuZyhwdGUpKSB7DQogCQkvKg0K IAkJICogVHJhbnNmZXIgdGhlICJhY2Nlc3NlZCIgYml0IGZyb20gdGhlIHBh Z2UNCi0JCSAqIHRhYmxlcyB0byB0aGUgZ2xvYmFsIHBhZ2UgbWFwLg0KKwkJ ICogdGFibGVzIHRvIHRoZSBnbG9iYWwgcGFnZSBtYXAsIGV4Y2VwdCB3aGVu DQorCQkgKiB0aGUgcGFnZSBpc24ndCBvbiB0aGUgYWN0aXZlIGxpc3QgYW5k IHdlJ2xsDQorCQkgKiBkbyB0aGUgcGFnZSBhZ2luZyBvdXJzZWx2ZXMuDQog CQkgKi8NCiAJCXNldF9wdGUocGFnZV90YWJsZSwgcHRlX21rb2xkKHB0ZSkp Ow0KLSAgICAgICAgICAgICAgICBTZXRQYWdlUmVmZXJlbmNlZChwYWdlKTsN CisJCWlmICghb25saXN0KSB7DQorCQkJYWdlX3BhZ2VfdXAocGFnZSk7DQor CQl9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAJU2V0UGFnZVJlZmVyZW5j ZWQocGFnZSk7DQorCQl9DQogCQlnb3RvIG91dF9mYWlsZWQ7DQogCX0NCisJ aWYgKCFvbmxpc3QpDQorCQlhZ2VfcGFnZV9kb3duKHBhZ2UpOw0KKw0KKwkv Kg0KKwkgKiBJZiB0aGUgcGFnZSBpcyBpbiBhY3RpdmUgdXNlIGJ5IHVzLCBv ciBpZiB0aGUgcGFnZQ0KKwkgKiBpcyBpbiBhY3RpdmUgdXNlIGJ5IG90aGVy cywgZG9uJ3QgdW5tYXAgaXQgb3INCisJICogKHdvcnNlKSBzdGFydCB1bm5l ZWRlZCBJTy4NCisJICovDQorCWlmIChwYWdlLT5hZ2UgPiAwKQ0KKwkJZ290 byBvdXRfZmFpbGVkOw0KIA0KIAlpZiAoVHJ5TG9ja1BhZ2UocGFnZSkpDQog CQlnb3RvIG91dF9mYWlsZWQ7DQpAQCAtODIsNiArMTAxLDcgQEANCiAJCXZt YS0+dm1fbW0tPnJzcy0tOw0KIAkJZmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRy ZXNzKTsNCiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsNCisJCWRlYWN0 aXZhdGVfcGFnZShwYWdlKTsNCiAJCWdvdG8gb3V0X2ZhaWxlZDsNCiAJfQ0K IA0KQEAgLTExNiw3ICsxMzYsOSBAQA0KIAkgKiBEb24ndCBkbyBhbnkgb2Yg dGhlIGV4cGVuc2l2ZSBzdHVmZiBpZg0KIAkgKiB3ZSdyZSBub3QgcmVhbGx5 IGludGVyZXN0ZWQgaW4gdGhpcyB6b25lLg0KIAkgKi8NCi0JaWYgKHBhZ2Ut PnpvbmUtPmZyZWVfcGFnZXMgPiBwYWdlLT56b25lLT5wYWdlc19oaWdoKQ0K KwlpZiAocGFnZS0+em9uZS0+ZnJlZV9wYWdlcyArIHBhZ2UtPnpvbmUtPmlu YWN0aXZlX2NsZWFuX3BhZ2VzDQorCQkJCQkrIHBhZ2UtPnpvbmUtPmluYWN0 aXZlX2RpcnR5X3BhZ2VzDQorCQkgICAgICAJPiBwYWdlLT56b25lLT5wYWdl c19oaWdoICsgaW5hY3RpdmVfdGFyZ2V0KQ0KIAkJZ290byBvdXRfdW5sb2Nr Ow0KIA0KIAkvKg0KQEAgLTE4Miw2ICsyMDQsNyBAQA0KIA0KIAkvKiBPSywg ZG8gYSBwaHlzaWNhbCBhc3luY2hyb25vdXMgd3JpdGUgdG8gc3dhcC4gICov DQogCXJ3X3N3YXBfcGFnZShXUklURSwgcGFnZSwgMCk7DQorCWRlYWN0aXZh dGVfcGFnZShwYWdlKTsNCiANCiBvdXRfZnJlZV9zdWNjZXNzOg0KIAlwYWdl X2NhY2hlX3JlbGVhc2UocGFnZSk7DQpAQCAtMzYzLDcgKzM4Niw3IEBADQog CSAqIFRoaW5rIG9mIHN3YXBfY250IGFzIGEgInNoYWRvdyByc3MiIC0gaXQg dGVsbHMgdXMgd2hpY2ggcHJvY2Vzcw0KIAkgKiB3ZSB3YW50IHRvIHBhZ2Ug b3V0IChhbHdheXMgdHJ5IGxhcmdlc3QgZmlyc3QpLg0KIAkgKi8NCi0JY291 bnRlciA9IChucl90aHJlYWRzIDw8IDIpID4+IChwcmlvcml0eSA+PiAyKTsN CisJY291bnRlciA9IChucl90aHJlYWRzICogUEFHRV9BR0VfQURWKSAvIChw cmlvcml0eSArIDEpOw0KIAlpZiAoY291bnRlciA8IDEpDQogCQljb3VudGVy ID0gMTsNCiANCkBAIC00MTgsNDUgKzQ0MSwzNTEgQEANCiAJcmV0dXJuIF9f cmV0Ow0KIH0NCiANCi0vKg0KLSAqIENoZWNrIGlmIHRoZXJlIGlzIGFueSBt ZW1vcnkgcHJlc3N1cmUgKGZyZWVfcGFnZXMgPCBwYWdlc19sb3cpDQorDQor LyoqDQorICogcmVjbGFpbV9wYWdlIC0JcmVjbGFpbXMgb25lIHBhZ2UgZnJv bSB0aGUgaW5hY3RpdmVfY2xlYW4gbGlzdA0KKyAqIEB6b25lOiByZWNsYWlt IGEgcGFnZSBmcm9tIHRoaXMgem9uZQ0KKyAqDQorICogVGhlIHBhZ2VzIG9u IHRoZSBpbmFjdGl2ZV9jbGVhbiBjYW4gYmUgaW5zdGFudGx5IHJlY2xhaW1l ZC4NCisgKiBUaGUgdGVzdHMgbG9vayBpbXByZXNzaXZlLCBidXQgbW9zdCBv ZiB0aGUgdGltZSB3ZSdsbCBncmFiDQorICogdGhlIGZpcnN0IHBhZ2Ugb2Yg dGhlIGxpc3QgYW5kIGV4aXQgc3VjY2Vzc2Z1bGx5Lg0KICAqLw0KLXN0YXRp YyBpbmxpbmUgaW50IG1lbW9yeV9wcmVzc3VyZSh2b2lkKQ0KK3N0cnVjdCBw YWdlICogcmVjbGFpbV9wYWdlKHpvbmVfdCAqIHpvbmUpDQogew0KLQlwZ19k YXRhX3QgKnBnZGF0ID0gcGdkYXRfbGlzdDsNCisJc3RydWN0IHBhZ2UgKiBw YWdlID0gTlVMTDsNCisJc3RydWN0IGxpc3RfaGVhZCAqIHBhZ2VfbHJ1Ow0K KwlpbnQgbWF4c2NhbjsNCiANCi0JZG8gew0KLQkJaW50IGk7DQotCQlmb3Io aSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykgew0KLQkJCXpvbmVfdCAq em9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzKyBpOw0KLQkJCWlmICh6b25lLT5z aXplICYmDQotCQkJICAgIHpvbmUtPmZyZWVfcGFnZXMgPCB6b25lLT5wYWdl c19sb3cpDQotCQkJCXJldHVybiAxOw0KKwkvKg0KKwkgKiBXZSBvbmx5IG5l ZWQgdGhlIHBhZ2VtYXBfbHJ1X2xvY2sgaWYgd2UgZG9uJ3QgcmVjbGFpbSB0 aGUgcGFnZSwNCisJICogYnV0IHdlIGhhdmUgdG8gZ3JhYiB0aGUgcGFnZWNh Y2hlX2xvY2sgYmVmb3JlIHRoZSBwYWdlbWFwX2xydV9sb2NrDQorCSAqIHRv IGF2b2lkIGRlYWRsb2NrcyBhbmQgbW9zdCBvZiB0aGUgdGltZSB3ZSdsbCBz dWNjZWVkIGFueXdheS4NCisJICovDQorCXNwaW5fbG9jaygmcGFnZWNhY2hl X2xvY2spOw0KKwlzcGluX2xvY2soJnBhZ2VtYXBfbHJ1X2xvY2spOw0KKwlt YXhzY2FuID0gem9uZS0+aW5hY3RpdmVfY2xlYW5fcGFnZXM7DQorCXdoaWxl ICgocGFnZV9scnUgPSB6b25lLT5pbmFjdGl2ZV9jbGVhbl9saXN0LnByZXYp ICE9DQorCQkJJnpvbmUtPmluYWN0aXZlX2NsZWFuX2xpc3QgJiYgbWF4c2Nh bi0tKSB7DQorCQlwYWdlID0gbGlzdF9lbnRyeShwYWdlX2xydSwgc3RydWN0 IHBhZ2UsIGxydSk7DQorDQorCQkvKiBXcm9uZyBwYWdlIG9uIGxpc3Q/ISAo bGlzdCBjb3JydXB0aW9uLCBzaG91bGQgbm90IGhhcHBlbikgKi8NCisJCWlm ICghUGFnZUluYWN0aXZlQ2xlYW4ocGFnZSkpIHsNCisJCQlwcmludGsoIlZN OiByZWNsYWltX3BhZ2UsIHdyb25nIHBhZ2Ugb24gbGlzdC5cbiIpOw0KKwkJ CWxpc3RfZGVsKHBhZ2VfbHJ1KTsNCisJCQlwYWdlLT56b25lLT5pbmFjdGl2 ZV9jbGVhbl9wYWdlcy0tOw0KKwkJCWNvbnRpbnVlOw0KIAkJfQ0KLQkJcGdk YXQgPSBwZ2RhdC0+bm9kZV9uZXh0Ow0KLQl9IHdoaWxlIChwZ2RhdCk7DQog DQotCXJldHVybiAwOw0KKwkJLyogUGFnZSBpcyBvciB3YXMgaW4gdXNlPyAg TW92ZSBpdCB0byB0aGUgYWN0aXZlIGxpc3QuICovDQorCQlpZiAoUGFnZVRl c3RhbmRDbGVhclJlZmVyZW5jZWQocGFnZSkgfHwgcGFnZS0+YWdlID4gMCB8 fA0KKwkJCQkoIXBhZ2UtPmJ1ZmZlcnMgJiYgcGFnZV9jb3VudChwYWdlKSA+ IDEpKSB7DQorCQkJZGVsX3BhZ2VfZnJvbV9pbmFjdGl2ZV9jbGVhbl9saXN0 KHBhZ2UpOw0KKwkJCWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0KHBhZ2UpOw0K KwkJCWNvbnRpbnVlOw0KKwkJfQ0KKw0KKwkJLyogVGhlIHBhZ2UgaXMgZGly dHksIG9yIGxvY2tlZCwgbW92ZSB0byBpbmFjdGl2ZV9kaXJ5IGxpc3QuICov DQorCQlpZiAocGFnZS0+YnVmZmVycyB8fCBUcnlMb2NrUGFnZShwYWdlKSkg ew0KKwkJCWRlbF9wYWdlX2Zyb21faW5hY3RpdmVfY2xlYW5fbGlzdChwYWdl KTsNCisJCQlhZGRfcGFnZV90b19pbmFjdGl2ZV9kaXJ0eV9saXN0KHBhZ2Up Ow0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKw0KKwkJLyogT0ssIHJlbW92ZSB0 aGUgcGFnZSBmcm9tIHRoZSBjYWNoZXMuICovDQorICAgICAgICAgICAgICAg IGlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKSB7DQorCQkJX19kZWxldGVfZnJv bV9zd2FwX2NhY2hlKHBhZ2UpOw0KKwkJCWdvdG8gZm91bmRfcGFnZTsNCisJ CX0NCisNCisJCWlmIChwYWdlLT5tYXBwaW5nKSB7DQorCQkJX19yZW1vdmVf aW5vZGVfcGFnZShwYWdlKTsNCisJCQlnb3RvIGZvdW5kX3BhZ2U7DQorCQl9 DQorDQorCQkvKiBXZSBzaG91bGQgbmV2ZXIgZXZlciBnZXQgaGVyZS4gKi8N CisJCXByaW50ayhLRVJOX0VSUiAiVk06IHJlY2xhaW1fcGFnZSwgZm91bmQg dW5rbm93biBwYWdlXG4iKTsNCisJCWxpc3RfZGVsKHBhZ2VfbHJ1KTsNCisJ CXpvbmUtPmluYWN0aXZlX2NsZWFuX3BhZ2VzLS07DQorCQlVbmxvY2tQYWdl KHBhZ2UpOw0KKwl9DQorCS8qIFJlc2V0IHBhZ2UgcG9pbnRlciwgbWF5YmUg d2UgZW5jb3VudGVyZWQgYW4gdW5mcmVlYWJsZSBwYWdlLiAqLw0KKwlwYWdl ID0gTlVMTDsNCisJZ290byBvdXQ7DQorDQorZm91bmRfcGFnZToNCisJZGVs X3BhZ2VfZnJvbV9pbmFjdGl2ZV9jbGVhbl9saXN0KHBhZ2UpOw0KKwlVbmxv Y2tQYWdlKHBhZ2UpOw0KKwlpZiAocGFnZV9jb3VudChwYWdlKSAhPSAxKQ0K KwkJcHJpbnRrKCJWTTogcmVjbGFpbV9wYWdlLCBmb3VuZCBwYWdlIHdpdGgg Y291bnQgJWQhXG4iLA0KKwkJCQlwYWdlX2NvdW50KHBhZ2UpKTsNCitvdXQ6 DQorCXNwaW5fdW5sb2NrKCZwYWdlbWFwX2xydV9sb2NrKTsNCisJc3Bpbl91 bmxvY2soJnBhZ2VjYWNoZV9sb2NrKTsNCisJbWVtb3J5X3ByZXNzdXJlKys7 DQorCXJldHVybiBwYWdlOw0KK30NCisNCisvKioNCisgKiBwYWdlX2xhdW5k ZXIgLSBjbGVhbiBkaXJ0eSBpbmFjdGl2ZSBwYWdlcywgbW92ZSB0byBpbmFj dGl2ZV9jbGVhbiBsaXN0DQorICogQGdmcF9tYXNrOiB3aGF0IG9wZXJhdGlv bnMgd2UgYXJlIGFsbG93ZWQgdG8gZG8NCisgKiBAc3luYzogc2hvdWxkIHdl IHdhaXQgc3luY2hyb25vdXNseSBmb3IgdGhlIGNsZWFuaW5nIG9mIHBhZ2Vz DQorICoNCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB3ZSBh cmUgbW9zdCBsaWtlbHkgbG93IG9uIGZyZWUgKw0KKyAqIGluYWN0aXZlX2Ns ZWFuIHBhZ2VzLiBTaW5jZSB3ZSB3YW50IHRvIHJlZmlsbCB0aG9zZSBwYWdl cyBhcw0KKyAqIHNvb24gYXMgcG9zc2libGUsIHdlJ2xsIG1ha2UgdHdvIGxv b3BzIG92ZXIgdGhlIGluYWN0aXZlIGxpc3QsDQorICogb25lIHRvIG1vdmUg dGhlIGFscmVhZHkgY2xlYW5lZCBwYWdlcyB0byB0aGUgaW5hY3RpdmVfY2xl YW4gbGlzdHMNCisgKiBhbmQgb25lIHRvIChvZnRlbiBhc3luY2hyb25vdXNs eSkgY2xlYW4gdGhlIGRpcnR5IGluYWN0aXZlIHBhZ2VzLg0KKyAqDQorICog SW4gc2l0dWF0aW9ucyB3aGVyZSBrc3dhcGQgY2Fubm90IGtlZXAgdXAsIHVz ZXIgcHJvY2Vzc2VzIHdpbGwNCisgKiBlbmQgdXAgY2FsbGluZyB0aGlzIGZ1 bmN0aW9uLiBTaW5jZSB0aGUgdXNlciBwcm9jZXNzIG5lZWRzIHRvDQorICog aGF2ZSBhIHBhZ2UgYmVmb3JlIGl0IGNhbiBjb250aW51ZSB3aXRoIGl0cyBh bGxvY2F0aW9uLCB3ZSdsbA0KKyAqIGRvIHN5bmNocm9ub3VzIHBhZ2UgZmx1 c2hpbmcgaW4gdGhhdCBjYXNlLg0KKyAqDQorICogVGhpcyBjb2RlIGlzIGhl YXZpbHkgaW5zcGlyZWQgYnkgdGhlIEZyZWVCU0Qgc291cmNlIGNvZGUuIFRo YW5rcw0KKyAqIGdvIG91dCB0byBNYXR0aGV3IERpbGxvbi4NCisgKi8NCisj ZGVmaW5lIE1BWF9TWU5DX0xBVU5ERVIJKDEgPDwgcGFnZV9jbHVzdGVyKQ0K K2ludCBwYWdlX2xhdW5kZXIoaW50IGdmcF9tYXNrLCBpbnQgc3luYykNCit7 DQorCWludCBzeW5jbGF1bmRlciwgbGF1bmRlcl9sb29wLCBtYXhzY2FuLCBj bGVhbmVkX3BhZ2VzOw0KKwlzdHJ1Y3QgbGlzdF9oZWFkICogcGFnZV9scnU7 DQorCXN0cnVjdCBwYWdlICogcGFnZTsNCisNCisJbGF1bmRlcl9sb29wID0g MDsNCisJc3luY2xhdW5kZXIgPSAwOw0KKwljbGVhbmVkX3BhZ2VzID0gMDsN CisNCitkaXJ0eV9wYWdlX3Jlc2NhbjoNCisJc3Bpbl9sb2NrKCZwYWdlbWFw X2xydV9sb2NrKTsNCisJbWF4c2NhbiA9IG5yX2luYWN0aXZlX2RpcnR5X3Bh Z2VzOw0KKwl3aGlsZSAoKHBhZ2VfbHJ1ID0gaW5hY3RpdmVfZGlydHlfbGlz dC5wcmV2KSAhPSAmaW5hY3RpdmVfZGlydHlfbGlzdCAmJg0KKwkJCQltYXhz Y2FuLS0gPiAwKSB7DQorCQlwYWdlID0gbGlzdF9lbnRyeShwYWdlX2xydSwg c3RydWN0IHBhZ2UsIGxydSk7DQorDQorCQkvKiBXcm9uZyBwYWdlIG9uIGxp c3Q/ISAobGlzdCBjb3JydXB0aW9uLCBzaG91bGQgbm90IGhhcHBlbikgKi8N CisJCWlmICghUGFnZUluYWN0aXZlRGlydHkocGFnZSkpIHsNCisJCQlwcmlu dGsoIlZNOiBwYWdlX2xhdW5kZXIsIHdyb25nIHBhZ2Ugb24gbGlzdC5cbiIp Ow0KKwkJCWxpc3RfZGVsKHBhZ2VfbHJ1KTsNCisJCQlucl9pbmFjdGl2ZV9k aXJ0eV9wYWdlcy0tOw0KKwkJCXBhZ2UtPnpvbmUtPmluYWN0aXZlX2RpcnR5 X3BhZ2VzLS07DQorCQkJY29udGludWU7DQorCQl9DQorDQorCQkvKiBQYWdl IGlzIG9yIHdhcyBpbiB1c2U/ICBNb3ZlIGl0IHRvIHRoZSBhY3RpdmUgbGlz dC4gKi8NCisJCWlmIChQYWdlVGVzdGFuZENsZWFyUmVmZXJlbmNlZChwYWdl KSB8fCBwYWdlLT5hZ2UgPiAwIHx8DQorCQkJCSghcGFnZS0+YnVmZmVycyAm JiBwYWdlX2NvdW50KHBhZ2UpID4gMSkgfHwNCisJCQkJcGFnZV9yYW1kaXNr KHBhZ2UpKSB7DQorCQkJZGVsX3BhZ2VfZnJvbV9pbmFjdGl2ZV9kaXJ0eV9s aXN0KHBhZ2UpOw0KKwkJCWFkZF9wYWdlX3RvX2FjdGl2ZV9saXN0KHBhZ2Up Ow0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKw0KKwkJLyoNCisJCSAqIFRoZSBw YWdlIGlzIGxvY2tlZC4gSU8gaW4gcHJvZ3Jlc3M/DQorCQkgKiBNb3ZlIGl0 IHRvIHRoZSBiYWNrIG9mIHRoZSBsaXN0Lg0KKwkJICovDQorCQlpZiAoVHJ5 TG9ja1BhZ2UocGFnZSkpIHsNCisJCQlsaXN0X2RlbChwYWdlX2xydSk7DQor CQkJbGlzdF9hZGQocGFnZV9scnUsICZpbmFjdGl2ZV9kaXJ0eV9saXN0KTsN CisJCQljb250aW51ZTsNCisJCX0NCisNCisJCS8qDQorCQkgKiBJZiB0aGUg cGFnZSBoYXMgYnVmZmVycywgdHJ5IHRvIGZyZWUgdGhlIGJ1ZmZlciBtYXBw aW5ncw0KKwkJICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFnZS4gSWYgd2Ug c3VjY2VlZCB3ZSBlaXRoZXIgZnJlZQ0KKwkJICogdGhlIHBhZ2UgKGluIGNh c2UgaXQgd2FzIGEgYnVmZmVyY2FjaGUgb25seSBwYWdlKSBvciB3ZQ0KKwkJ ICogbW92ZSB0aGUgcGFnZSB0byB0aGUgaW5hY3RpdmVfY2xlYW4gbGlzdC4N CisJCSAqDQorCQkgKiBPbiB0aGUgZmlyc3Qgcm91bmQsIHdlIHNob3VsZCBm cmVlIGFsbCBwcmV2aW91c2x5IGNsZWFuZWQNCisJCSAqIGJ1ZmZlciBwYWdl cw0KKwkJICovDQorCQlpZiAocGFnZS0+YnVmZmVycykgew0KKwkJCWludCB3 YWl0LCBjbGVhcmVkYnVmOw0KKwkJCS8qDQorCQkJICogU2luY2Ugd2UgbWln aHQgYmUgZG9pbmcgZGlzayBJTywgd2UgaGF2ZSB0bw0KKwkJCSAqIGRyb3Ag dGhlIHNwaW5sb2NrIGFuZCB0YWtlIGFuIGV4dHJhIHJlZmVyZW5jZQ0KKwkJ CSAqIG9uIHRoZSBwYWdlIHNvIGl0IGRvZXNuJ3QgZ28gYXdheSBmcm9tIHVu ZGVyIHVzLg0KKwkJCSAqLw0KKwkJCWRlbF9wYWdlX2Zyb21faW5hY3RpdmVf ZGlydHlfbGlzdChwYWdlKTsNCisJCQlwYWdlX2NhY2hlX2dldChwYWdlKTsN CisJCQlzcGluX3VubG9jaygmcGFnZW1hcF9scnVfbG9jayk7DQorDQorCQkJ LyogV2lsbCB3ZSBkbyAoYXN5bmNocm9ub3VzKSBJTz8gKi8NCisJCQlpZiAo bGF1bmRlcl9sb29wICYmIHN5bmNsYXVuZGVyLS0gPiAwKQ0KKwkJCQl3YWl0 ID0gMjsJLyogU3luY2hyb3Vub3VzIElPICovDQorCQkJZWxzZSBpZiAobGF1 bmRlcl9sb29wKQ0KKwkJCQl3YWl0ID0gMTsJLyogQXN5bmMgSU8gKi8NCisJ CQllbHNlDQorCQkJCXdhaXQgPSAwOwkvKiBObyBJTyAqLw0KKw0KKwkJCS8q IFRyeSB0byBmcmVlIHRoZSBidWZmZXJzLCByZXR1cm5zIDAgb24gZmFpbHVy ZS4gKi8NCisJCQljbGVhcmVkYnVmID0gdHJ5X3RvX2ZyZWVfYnVmZmVycyhw YWdlLCB3YWl0KTsNCisNCisJCQlzcGluX2xvY2soJnBhZ2VtYXBfbHJ1X2xv Y2spOw0KKwkJCVVubG9ja1BhZ2UocGFnZSk7DQorCQkJcGFnZV9jYWNoZV9y ZWxlYXNlKHBhZ2UpOw0KKw0KKwkJCS8qIFdlIGZhaWxlZCB0byBjbGVhciBw YWdlLT5idWZmZXJzLiAqLw0KKwkJCWlmICghY2xlYXJlZGJ1Zikgew0KKwkJ CQlhZGRfcGFnZV90b19pbmFjdGl2ZV9kaXJ0eV9saXN0KHBhZ2UpOw0KKw0K KwkJCS8qIFRoZSBwYWdlIHdhcyBmcmVlZCBieSBwYWdlX2NhY2hlX3JlbGVh c2UgYWJvdmUuICovDQorCQkJfSBlbHNlIGlmICghcGFnZS0+bWFwcGluZykg ew0KKwkJCQlhdG9taWNfZGVjKCZidWZmZXJtZW1fcGFnZXMpOw0KKw0KKwkJ CS8qIFRoZSBwYWdlIGhhcyBtdWx0aXBsZSB1c2VycyBsZWZ0LiAqLw0KKwkJ CX0gZWxzZSBpZiAocGFnZV9jb3VudChwYWdlKSA+IDEpIHsNCisJCQkJYWRk X3BhZ2VfdG9fYWN0aXZlX2xpc3QocGFnZSk7DQorDQorCQkJLyogT0ssIHdl ICJjcmVhdGVkIiBhIGZyZWVhYmxlIHBhZ2UuICovDQorCQkJfSBlbHNlIC8q IHBhZ2UtPm1hcHBpbmcgJiYgcGFnZV9jb3VudChwYWdlKSA9PSAxICovIHsN CisJCQkJYWRkX3BhZ2VfdG9faW5hY3RpdmVfY2xlYW5fbGlzdChwYWdlKTsN CisJCQkJY2xlYW5lZF9wYWdlcysrOw0KKwkJCX0NCisJCQljb250aW51ZTsN CisJCX0gZWxzZSB7DQorCQkJLyoNCisJCQkgKiBTb21lYm9keSBlbHNlIGZy ZWVkIHRoZSBidWZmZXJoZWFkcyBmb3IgdXM/DQorCQkJICogVGhpcyByZWFs bHkgc2hvdWxkbid0IGhhcHBlbiwgYnV0IHdlIGNoZWNrDQorCQkJICogZm9y IGl0IGFueXdheS4NCisJCQkgKi8NCisJCQlwcmludGsoIlZNOiBwYWdlX2xh dW5kZXIsIGZvdW5kIHByZS1jbGVhbmVkIHBhZ2UgPyFcbiIpOw0KKwkJCVVu bG9ja1BhZ2UocGFnZSk7DQorCQkJaWYgKHBhZ2UtPm1hcHBpbmcgJiYgIVBh Z2VEaXJ0eShwYWdlKSkgew0KKwkJCQlkZWxfcGFnZV9mcm9tX2luYWN0aXZl X2RpcnR5X2xpc3QocGFnZSk7DQorCQkJCWFkZF9wYWdlX3RvX2luYWN0aXZl X2NsZWFuX2xpc3QocGFnZSk7DQorCQkJCWNsZWFuZWRfcGFnZXMrKzsNCisJ CQl9DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2soJnBhZ2VtYXBfbHJ1X2xv Y2spOw0KKw0KKwkvKg0KKwkgKiBOb3cgd2UgbW92ZWQgdGhlIGNsZWFuZWQg cGFnZXMgdG8gdGhlIGluYWN0aXZlX2NsZWFuIGxpc3QsDQorCSAqIHdlIGxv b3AgYmFjayB0byAodXN1YWxseSBhc3luY2hyb25vdXNseSkgaGF2ZSB0aGUg ZGlydHkNCisJICogcGFnZXMgc3luY2VkIHRvIGRpc2suIElmIHdlJ3JlIGEg dXNlciBwcm9jZXNzICh0aGF0IHJlYWxseQ0KKwkgKiBuZWVkcyBuZXcgcGFn ZXMgdG8gY29udGludWUpLCB0aGVuIHdlJ2xsIGZsdXNoIGEgZmV3IHBhZ2Vz DQorCSAqIHN5bmNocm9ub3VzbHkuDQorCSAqLw0KKwlpZiAoIWxhdW5kZXJf bG9vcCAmJiAoZnJlZV9zaG9ydGFnZSgpIHx8IChucl9pbmFjdGl2ZV9kaXJ0 eV9wYWdlcyAqIDQgPg0KKwkJCQlucl9mcmVlX3BhZ2VzKCkgKyBucl9pbmFj dGl2ZV9jbGVhbl9wYWdlcygpKSkpIHsNCisJCWxhdW5kZXJfbG9vcCA9IDE7 DQorCQlpZiAoc3luYyAmJiAhY2xlYW5lZF9wYWdlcykNCisJCQlzeW5jbGF1 bmRlciA9IE1BWF9TWU5DX0xBVU5ERVI7DQorCQlnb3RvIGRpcnR5X3BhZ2Vf cmVzY2FuOw0KKwl9DQorDQorCS8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHBh Z2VzIG1vdmVkIHRvIHRoZSBpbmFjdGl2ZV9jbGVhbiBsaXN0LiAqLw0KKwly ZXR1cm4gY2xlYW5lZF9wYWdlczsNCit9DQorDQorLyoqDQorICogcmVmaWxs X2luYWN0aXZlX3NjYW4gLSBzY2FuIHRoZSBhY3RpdmUgbGlzdCBhbmQgZmlu ZCBwYWdlcyB0byBkZWFjdGl2YXRlDQorICogQHByaW9yaXR5OiB0aGUgcHJp b3JpdHkgYXQgd2hpY2ggdG8gc2Nhbg0KKyAqIEBjb3VudDogdGhlIG51bWJl ciBvZiBwYWdlcyB3ZSBzaG91bGQgdHJ5IHRvIGRlYWN0aXZhdGUNCisgKg0K KyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzY2FuIGEgcG9ydGlvbiBvZiB0aGUg YWN0aXZlIGxpc3QgdG8gZmluZA0KKyAqIHVudXNlZCBwYWdlcywgdGhvc2Ug cGFnZXMgd2lsbCB0aGVuIGJlIG1vdmVkIHRvIHRoZSBpbmFjdGl2ZSBsaXN0 Lg0KKyAqLw0KK2ludCByZWZpbGxfaW5hY3RpdmVfc2Nhbih1bnNpZ25lZCBp bnQgcHJpb3JpdHkpDQorew0KKwlzdHJ1Y3QgbGlzdF9oZWFkICogcGFnZV9s cnU7DQorCXN0cnVjdCBwYWdlICogcGFnZTsNCisJaW50IG1heHNjYW47DQor CWludCByZXQgPSAwOw0KKw0KKwkvKiBUYWtlIHRoZSBsb2NrIHdoaWxlIG1l c3Npbmcgd2l0aCB0aGUgbGlzdC4uLiAqLw0KKwlzcGluX2xvY2soJnBhZ2Vt YXBfbHJ1X2xvY2spOw0KKwltYXhzY2FuID0gbnJfYWN0aXZlX3BhZ2VzID4+ IHByaW9yaXR5Ow0KKwl3aGlsZSAobWF4c2Nhbi0tID4gMCAmJiAocGFnZV9s cnUgPSBhY3RpdmVfbGlzdC5wcmV2KSAhPSAmYWN0aXZlX2xpc3QpIHsNCisJ CXBhZ2UgPSBsaXN0X2VudHJ5KHBhZ2VfbHJ1LCBzdHJ1Y3QgcGFnZSwgbHJ1 KTsNCisNCisJCS8qIFdyb25nIHBhZ2Ugb24gbGlzdD8hIChsaXN0IGNvcnJ1 cHRpb24sIHNob3VsZCBub3QgaGFwcGVuKSAqLw0KKwkJaWYgKCFQYWdlQWN0 aXZlKHBhZ2UpKSB7DQorCQkJcHJpbnRrKCJWTTogcmVmaWxsX2luYWN0aXZl LCB3cm9uZyBwYWdlIG9uIGxpc3QuXG4iKTsNCisJCQlsaXN0X2RlbChwYWdl X2xydSk7DQorCQkJbnJfYWN0aXZlX3BhZ2VzLS07DQorCQkJY29udGludWU7 DQorCQl9DQorDQorCQkvKiBEbyBhZ2luZyBvbiB0aGUgcGFnZXMuICovDQor CQlpZiAoUGFnZVRlc3RhbmRDbGVhclJlZmVyZW5jZWQocGFnZSkpIHsNCisJ CQlhZ2VfcGFnZV91cF9ub2xvY2socGFnZSk7DQorCQkJZ290byBtdXN0X2Jl X2FjdGl2ZTsNCisJCX0gZWxzZSB7DQorCQkJYWdlX3BhZ2VfZG93bl9ub2xv Y2socGFnZSk7DQorCQl9DQorCQkvKg0KKwkJICogSWYgdGhlIHBhZ2UgaXMg c3RpbGwgb24gdGhlIGFjdGl2ZSBsaXN0LCBtb3ZlIGl0DQorCQkgKiB0byB0 aGUgb3RoZXIgZW5kIG9mIHRoZSBsaXN0LiBPdGhlcndpc2UgaXQgd2FzDQor CQkgKiBkZWFjdGl2YXRlZCBieSBhZ2VfcGFnZV9kb3duIGFuZCB3ZSBleGl0 IHN1Y2Nlc3NmdWxseS4NCisJCSAqLw0KKwkJaWYgKFBhZ2VBY3RpdmUocGFn ZSkpIHsNCittdXN0X2JlX2FjdGl2ZToNCisJCQlsaXN0X2RlbChwYWdlX2xy dSk7DQorCQkJbGlzdF9hZGQocGFnZV9scnUsICZhY3RpdmVfbGlzdCk7DQor CQl9IGVsc2Ugew0KKwkJCXJldCA9IDE7DQorCQkJYnJlYWs7DQorCQl9DQor CX0NCisJc3Bpbl91bmxvY2soJnBhZ2VtYXBfbHJ1X2xvY2spOw0KKw0KKwly ZXR1cm4gcmV0Ow0KIH0NCiANCiAvKg0KLSAqIENoZWNrIGlmIHRoZXJlIHJl Y2VudGx5IGhhcyBiZWVuIG1lbW9yeSBwcmVzc3VyZSAoem9uZV93YWtlX2tz d2FwZCkNCisgKiBDaGVjayBpZiB0aGVyZSBhcmUgem9uZXMgd2l0aCBhIHNl dmVyZSBzaG9ydGFnZSBvZiBmcmVlIHBhZ2VzLA0KKyAqIG9yIGlmIGFsbCB6 b25lcyBoYXZlIGEgbWlub3Igc2hvcnRhZ2UuDQogICovDQotc3RhdGljIGlu bGluZSBpbnQga2VlcF9rc3dhcGRfYXdha2Uodm9pZCkNCitpbnQgZnJlZV9z aG9ydGFnZSh2b2lkKQ0KIHsNCiAJcGdfZGF0YV90ICpwZ2RhdCA9IHBnZGF0 X2xpc3Q7DQorCWludCBzdW0gPSAwOw0KKwlpbnQgZnJlZWFibGUgPSBucl9m cmVlX3BhZ2VzKCkgKyBucl9pbmFjdGl2ZV9jbGVhbl9wYWdlcygpOw0KIA0K KwkvKiBBcmUgd2UgbG93IG9uIHRydWx5IGZyZWUgcGFnZXM/ICovDQorCWlm IChucl9mcmVlX3BhZ2VzKCkgPCBmcmVlcGFnZXMubWluKQ0KKwkJcmV0dXJu IGZyZWVwYWdlcy5oaWdoIC0gbnJfZnJlZV9wYWdlcygpOw0KKw0KKwkvKiBB cmUgd2UgbG93IG9uIGZyZWUgcGFnZXMgb3Zlci1hbGw/ICovDQorCWlmIChm cmVlYWJsZSA8IGZyZWVwYWdlcy5oaWdoKQ0KKwkJcmV0dXJuIGZyZWVwYWdl cy5oaWdoIC0gZnJlZWFibGU7DQorDQorCS8qIElmIG5vdCwgYXJlIHdlIHZl cnkgbG93IG9uIGFueSBwYXJ0aWN1bGFyIHpvbmU/ICovDQogCWRvIHsNCiAJ CWludCBpOw0KIAkJZm9yKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKysp IHsNCiAJCQl6b25lX3QgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcysgaTsN Ci0JCQlpZiAoem9uZS0+c2l6ZSAmJg0KLQkJCSAgICB6b25lLT56b25lX3dh a2Vfa3N3YXBkKQ0KLQkJCQlyZXR1cm4gMTsNCisJCQlpZiAoem9uZS0+c2l6 ZSAmJiAoem9uZS0+aW5hY3RpdmVfY2xlYW5fcGFnZXMgKw0KKwkJCQkJem9u ZS0+ZnJlZV9wYWdlcyA8IHpvbmUtPnBhZ2VzX21pbikpIHsNCisJCQkJc3Vt ICs9IHpvbmUtPnBhZ2VzX21pbjsNCisJCQkJc3VtIC09IHpvbmUtPmZyZWVf cGFnZXM7DQorCQkJCXN1bSAtPSB6b25lLT5pbmFjdGl2ZV9jbGVhbl9wYWdl czsNCisJCQl9DQogCQl9DQogCQlwZ2RhdCA9IHBnZGF0LT5ub2RlX25leHQ7 DQogCX0gd2hpbGUgKHBnZGF0KTsNCiANCisJcmV0dXJuIHN1bTsNCit9DQor DQorLyoNCisgKiBIb3cgbWFueSBpbmFjdGl2ZSBwYWdlcyBhcmUgd2Ugc2hv cnQ/DQorICovDQoraW50IGluYWN0aXZlX3Nob3J0YWdlKHZvaWQpDQorew0K KwlpbnQgc2hvcnRhZ2UgPSAwOw0KKw0KKwlzaG9ydGFnZSArPSBmcmVlcGFn ZXMuaGlnaDsNCisJc2hvcnRhZ2UgKz0gaW5hY3RpdmVfdGFyZ2V0Ow0KKwlz aG9ydGFnZSAtPSBucl9mcmVlX3BhZ2VzKCk7DQorCXNob3J0YWdlIC09IG5y X2luYWN0aXZlX2NsZWFuX3BhZ2VzKCk7DQorCXNob3J0YWdlIC09IG5yX2lu YWN0aXZlX2RpcnR5X3BhZ2VzOw0KKw0KKwlpZiAoc2hvcnRhZ2UgPiAwKQ0K KwkJcmV0dXJuIHNob3J0YWdlOw0KKw0KIAlyZXR1cm4gMDsNCiB9DQogDQpA QCAtNDY4LDQwICs3OTcsMzkgQEANCiAgKiBXZSB3YW50IHRvIHRyeSB0byBm cmVlICJjb3VudCIgcGFnZXMsIGFuZCB3ZSB3YW50IHRvIA0KICAqIGNsdXN0 ZXIgdGhlbSBzbyB0aGF0IHdlIGdldCBnb29kIHN3YXAtb3V0IGJlaGF2aW91 ci4NCiAgKg0KLSAqIERvbid0IHRyeSBfdG9vXyBoYXJkLCB0aG91Z2guIFdl IGRvbid0IHdhbnQgdG8gaGF2ZSBiYWQNCi0gKiBsYXRlbmN5Lg0KKyAqIE9U T0gsIGlmIHdlJ3JlIGEgdXNlciBwcm9jZXNzIChhbmQgbm90IGtzd2FwZCks IHdlDQorICogcmVhbGx5IGNhcmUgYWJvdXQgbGF0ZW5jeS4gSW4gdGhhdCBj YXNlIHdlIGRvbid0IHRyeQ0KKyAqIHRvIGZyZWUgdG9vIG1hbnkgcGFnZXMu DQogICovDQotI2RlZmluZSBGUkVFX0NPVU5UCTgNCi0jZGVmaW5lIFNXQVBf Q09VTlQJMTYNCi1zdGF0aWMgaW50IGRvX3RyeV90b19mcmVlX3BhZ2VzKHVu c2lnbmVkIGludCBnZnBfbWFzaykNCi17DQotCWludCBwcmlvcml0eTsNCi0J aW50IGNvdW50ID0gRlJFRV9DT1VOVDsNCi0JaW50IHN3YXBfY291bnQ7DQor c3RhdGljIGludCByZWZpbGxfaW5hY3RpdmUodW5zaWduZWQgaW50IGdmcF9t YXNrLCBpbnQgdXNlcikNCit7DQorCWludCBwcmlvcml0eSwgY291bnQsIHN0 YXJ0X2NvdW50LCBtYWRlX3Byb2dyZXNzOw0KKw0KKwljb3VudCA9IGluYWN0 aXZlX3Nob3J0YWdlKCkgKyBmcmVlX3Nob3J0YWdlKCk7DQorCWlmICh1c2Vy KQ0KKwkJY291bnQgPSAoMSA8PCBwYWdlX2NsdXN0ZXIpOw0KKwlzdGFydF9j b3VudCA9IGNvdW50Ow0KIA0KIAkvKiBBbHdheXMgdHJpbSBTTEFCIGNhY2hl cyB3aGVuIG1lbW9yeSBnZXRzIGxvdy4gKi8NCiAJa21lbV9jYWNoZV9yZWFw KGdmcF9tYXNrKTsNCiANCi0JcHJpb3JpdHkgPSA2NDsNCisJcHJpb3JpdHkg PSA2Ow0KIAlkbyB7DQorCQltYWRlX3Byb2dyZXNzID0gMDsNCisNCiAJCWlm IChjdXJyZW50LT5uZWVkX3Jlc2NoZWQpIHsNCiAJCQlzY2hlZHVsZSgpOw0K LQkJCS8qIHRpbWUgaGFzIHBhc3NlZCAtIHByZXNzdXJlIHRvbz8gKi8NCi0J CQlpZiAoIW1lbW9yeV9wcmVzc3VyZSgpKQ0KLQkJCQlnb3RvIGRvbmU7DQor CQkJLyogV2Ugc2xlcHQuIE1heWJlIHRoZSBmYWVyaWVzIGRpZCBvdXIgd29y ay4gKi8NCisJCQlpZiAoIWluYWN0aXZlX3Nob3J0YWdlKCkgJiYgIWZyZWVf c2hvcnRhZ2UoKSkNCisJCQkJcmV0dXJuIDE7DQogCQl9DQogDQotCQl3aGls ZSAoc2hyaW5rX21tYXAocHJpb3JpdHksIGdmcF9tYXNrKSkgew0KKwkJd2hp bGUgKHJlZmlsbF9pbmFjdGl2ZV9zY2FuKHByaW9yaXR5KSkgew0KKwkJCW1h ZGVfcHJvZ3Jlc3MgPSAxOw0KIAkJCWlmICghLS1jb3VudCkNCiAJCQkJZ290 byBkb25lOw0KIAkJfQ0KIA0KLQkJLyogbm90IChiZWVuKSBsb3cgb24gbWVt b3J5IC0gaXQgaXMNCi0JCSAqIHBvaW50bGVzcyB0byB0cnkgdG8gc3dhcCBv dXQuDQotCQkgKi8NCi0JCWlmICgha2VlcF9rc3dhcGRfYXdha2UoKSkNCi0J CQlnb3RvIGRvbmU7DQotDQogCQkvKiBUcnkgdG8gZ2V0IHJpZCBvZiBzb21l IHNoYXJlZCBtZW1vcnkgcGFnZXMuLiAqLw0KIAkJaWYgKGdmcF9tYXNrICYg X19HRlBfSU8pIHsNCiAJCQkvKg0KQEAgLTUyMCwxMCArODQ4LDExIEBADQog CQkJICoJaWYgKGNvdW50IDw9IDApDQogCQkJICoJCWdvdG8gZG9uZTsNCiAJ CQkgKi8NCi0JCQlpZiAoIWtlZXBfa3N3YXBkX2F3YWtlKCkpDQotCQkJCWdv dG8gZG9uZTsNCisJCQlpZiAoIWluYWN0aXZlX3Nob3J0YWdlKCkgJiYgIWZy ZWVfc2hvcnRhZ2UoKSkNCisJCQkJcmV0dXJuIDE7DQogDQogCQkJd2hpbGUg KHNobV9zd2FwKHByaW9yaXR5LCBnZnBfbWFzaykpIHsNCisJCQkJbWFkZV9w cm9ncmVzcyA9IDE7DQogCQkJCWlmICghLS1jb3VudCkNCiAJCQkJCWdvdG8g ZG9uZTsNCiAJCQl9DQpAQCAtNTMxLDI4ICs4NjAsODEgQEANCiANCiAJCS8q DQogCQkgKiBUaGVuLCB0cnkgdG8gcGFnZSBzdHVmZiBvdXQuLg0KLQkJICoN Ci0JCSAqIFRoaXMgd2lsbCBub3QgYWN0dWFsbHkgZnJlZSBhbnkgcGFnZXMg KHRoZXkgZ2V0DQotCQkgKiBwdXQgaW4gdGhlIHN3YXAgY2FjaGUpLCBzbyB3 ZSBtdXN0IG5vdCBjb3VudCB0aGlzDQotCQkgKiBhcyBhICJjb3VudCIgc3Vj Y2Vzcy4NCi0JCSAqLw0KLQkJc3dhcF9jb3VudCA9IFNXQVBfQ09VTlQ7DQot CQl3aGlsZSAoc3dhcF9vdXQocHJpb3JpdHksIGdmcF9tYXNrKSkNCi0JCQlp ZiAoLS1zd2FwX2NvdW50IDwgMCkNCi0JCQkJYnJlYWs7DQorCQkgKi8NCisJ CXdoaWxlIChzd2FwX291dChwcmlvcml0eSwgZ2ZwX21hc2spKSB7DQorCQkJ bWFkZV9wcm9ncmVzcyA9IDE7DQorCQkJaWYgKCEtLWNvdW50KQ0KKwkJCQln b3RvIGRvbmU7DQorCQl9DQogDQotCX0gd2hpbGUgKC0tcHJpb3JpdHkgPj0g MCk7DQorCQkvKg0KKwkJICogT25seSBzd2l0Y2ggdG8gYSBsb3dlciAicHJp b3JpdHkiIGlmIHdlDQorCQkgKiBkaWRuJ3QgbWFrZSBhbnkgdXNlZnVsIHBy b2dyZXNzIGluIHRoZQ0KKwkJICogbGFzdCBsb29wLg0KKwkJICovDQorCQlp ZiAoIW1hZGVfcHJvZ3Jlc3MpDQorCQkJcHJpb3JpdHktLTsNCisJfSB3aGls ZSAocHJpb3JpdHkgPj0gMCk7DQogDQogCS8qIEFsd2F5cyBlbmQgb24gYSBz aHJpbmtfbW1hcC4uLCBtYXkgc2xlZXAuLi4gKi8NCi0Jd2hpbGUgKHNocmlu a19tbWFwKDAsIGdmcF9tYXNrKSkgew0KKwl3aGlsZSAocmVmaWxsX2luYWN0 aXZlX3NjYW4oMCkpIHsNCiAJCWlmICghLS1jb3VudCkNCiAJCQlnb3RvIGRv bmU7DQogCX0NCi0JLyogV2UgcmV0dXJuIDEgaWYgd2UgYXJlIGZyZWVkIHNv bWUgcGFnZSwgb3INCi0JICogdGhlcmUgYXJlIG5vIG1lbW9yeSBwcmVzc3Vy ZSByZW1haW5pbmcgICAqLw0KLQlyZXR1cm4gKGNvdW50ICE9IEZSRUVfQ09V TlQgfHwgIW1lbW9yeV9wcmVzc3VyZSgpKTsNCi0gDQorDQogZG9uZToNCisJ cmV0dXJuIChjb3VudCA8IHN0YXJ0X2NvdW50KTsNCit9DQorDQorc3RhdGlj IGludCBkb190cnlfdG9fZnJlZV9wYWdlcyh1bnNpZ25lZCBpbnQgZ2ZwX21h c2ssIGludCB1c2VyKQ0KK3sNCisJaW50IGxvb3AgPSAwOw0KKw0KKwlrbWVt X2NhY2hlX3JlYXAoZ2ZwX21hc2spOw0KKwkvKg0KKwkgKiBGaXJzdCAoaWYg bmVlZGVkKSwgcmVmaWxsIHRoZSBpbmFjdGl2ZSBsaXN0cyB3aXRoDQorCSAq IHBhZ2VzIGZyb20gdGhlIGFjdGl2ZSBsaXN0Lg0KKwkgKi8NCithZ2FpbjoN CisJc2hyaW5rX2RjYWNoZV9tZW1vcnkoNiwgZ2ZwX21hc2spOw0KKwlzaHJp bmtfaWNhY2hlX21lbW9yeSg2LCBnZnBfbWFzayk7DQorCWlmIChpbmFjdGl2 ZV9zaG9ydGFnZSgpIHx8IGZyZWVfc2hvcnRhZ2UoKSkNCisJCXJlZmlsbF9p bmFjdGl2ZShnZnBfbWFzaywgdXNlcik7DQorCS8qDQorCSAqIElmIHdlIGhh dmUgdHJvdWJsZXMga2VlcGluZyB1cCB3aXRoIGZpbGxpbmcgdGhlDQorCSAq IGluYWN0aXZlIGxpc3RzLCBnbyBmb3IgZGVzcGFyYXRlIGFjdGlvbnMuLi4N CisJICogVGhpcyBpcyBhIHNpZGUtZWZmZWN0IG9mIHRoZSB1bmNlcnRhaW50 aWVzIG9mDQorCSAqIHZpcnR1YWwgcGFnZSBzY2FubmluZyBhbmQgdGhlIGRl bGljYXRlIGJhbGFuY2luZw0KKwkgKiBpbiByZWZpbGxfaW5hY3RpdmUuIEZv ciBMaW51eCAyLjUgd2UgaGF2ZSB0byB0aGluaw0KKwkgKiBvZiBzb21ldGhp bmcgYmV0dGVyLi4uDQorCSAqLw0KKwlpZiAoaW5hY3RpdmVfc2hvcnRhZ2Uo KSA+IGluYWN0aXZlX3RhcmdldC8yKSB7DQorCQlpbnQgaSA9IDY0Ow0KKwkJ d2hpbGUgKGktLSA+IDAgJiYgaW5hY3RpdmVfc2hvcnRhZ2UoKSA+IGluYWN0 aXZlX3RhcmdldC8yKSB7DQorCQkJcmVmaWxsX2luYWN0aXZlKGdmcF9tYXNr LCB1c2VyKTsNCisJCX0NCisJCS8qIFRPRE86IGludGVncmF0ZSBPT00ga2ls bGVyIGZvciAyLjQgISEhDQorCQkgKiBSYXRpb25hbGU6IGlmIHdlIGZhaWwg dG8gZGVhY3RpdmF0ZSBlbm91Z2ggcGFnZXMNCisJCSAqIGFmdGVyIGxvb3Bp bmcgaGVyZSAqYW5kKiB3ZSdyZSBvdXQgb2YgbWVtb3J5K3N3YXAsDQorCQkg KiB0aGVuIHRoZXJlJ3Mgbm8gaG9wZS4NCisJCSAqIGlmIChpbmFjdGl2ZV9z aG9ydGFnZSgpID4gaW5hY3RpdmVfdGFyZ2V0LzIgJiYNCisJCSAqIAkJCQkJ b3V0X29mX21lbW9yeSgpKQ0KKwkJICoJb29tX2tpbGwoKTsNCisJCSAqLw0K Kwl9DQorDQorCS8qDQorCSAqIFRoZW4sIG1vdmUgdGhlIGp1c3QgY2xlYW5l ZCBwYWdlcyBmcm9tIHRoZQ0KKwkgKiBpbmFjdGl2ZV9kaXJ0eSBsaXN0IHRv IHRoZSBpbmFjdGl2ZV9jbGVhbg0KKwkgKiBsaXN0cy4gVGhpcyBmdW5jdGlv biB3aWxsIGFsc28gc3RhcnQgSU8gdG8NCisJICogZmx1c2ggb3V0IHRoZSBw YWdlcyB0aGUgZGlydHkgcGFnZXMuDQorCSAqLw0KKwlwYWdlX2xhdW5kZXIo Z2ZwX21hc2ssIHVzZXIpOw0KKw0KKwlpZiAoZnJlZV9zaG9ydGFnZSgpID4g ZnJlZXBhZ2VzLm1pbiAmJiBsb29wKysgPCA2NCkNCisJCWdvdG8gYWdhaW47 DQorDQorCS8qIEFsd2F5cyByZXR1cm4gc3VjY2Vzcy4gKi8NCiAJcmV0dXJu IDE7DQogfQ0KIA0KQEAgLTU5NCwxNSArOTc2LDM5IEBADQogCSAqLw0KIAl0 c2stPmZsYWdzIHw9IFBGX01FTUFMTE9DOw0KIA0KKwkvKg0KKwkgKiBLc3dh cGQgbWFpbiBsb29wLg0KKwkgKi8NCiAJZm9yICg7Oykgew0KLQkJaWYgKCFr ZWVwX2tzd2FwZF9hd2FrZSgpKSB7DQotCQkJLyogd2FrZSB1cCByZWd1bGFy eSB0byBkbyBhbiBlYXJseSBhdHRlbXB0IHRvbyBmcmVlDQotCQkJICogcGFn ZXMgLSBwYWdlcyB3aWxsIG5vdCBhY3R1YWxseSBiZSBmcmVlZC4NCi0JCQkg Ki8NCi0JCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJmtzd2Fw ZF93YWl0LCBIWik7DQotCQl9DQorCQlzdGF0aWMgaW50IHJlY2FsYyA9IDA7 DQorCQlpbnQgdGltZW91dCA9IEhaOw0KKw0KKwkJLyogDQorCQkgKiBHbyB0 byBzbGVlcCBmb3IgYSB3aGlsZS4gSWYgd2UgaGF2ZSB0cm91YmxlDQorCQkg KiBrZWVwaW5nIHVwIHdpdGggVk0gYWN0aXZpdHksIHNsZWVwIHNob3J0ZXIu DQorCQkgKi8NCisJCWlmIChpbmFjdGl2ZV9zaG9ydGFnZSgpID4gaW5hY3Rp dmVfdGFyZ2V0IC8gNCkNCisJCQl0aW1lb3V0IC89IDI7DQorCQlpZiAoZnJl ZV9zaG9ydGFnZSgpKQ0KKwkJCXRpbWVvdXQgLz0gMjsNCisJCWludGVycnVw dGlibGVfc2xlZXBfb25fdGltZW91dCgma3N3YXBkX3dhaXQsIHRpbWVvdXQp Ow0KKw0KKwkJLyogSWYgbmVlZGVkLCB0cnkgdG8gZnJlZSBzb21lIG1lbW9y eS4gKi8NCisJCWlmIChpbmFjdGl2ZV9zaG9ydGFnZSgpIHx8IGZyZWVfc2hv cnRhZ2UoKSkNCisJCQlkb190cnlfdG9fZnJlZV9wYWdlcyhHRlBfS1NXQVBE LCAwKTsNCiANCi0JCWRvX3RyeV90b19mcmVlX3BhZ2VzKEdGUF9LU1dBUEQp Ow0KKwkJLyoNCisJCSAqIERvIHNvbWUgKHZlcnkgbWluaW1hbCkgYmFja2dy b3VuZCBzY2FubmluZy4gVGhpcw0KKwkJICogd2lsbCBzY2FuIGFsbCBwYWdl cyBvbiB0aGUgYWN0aXZlIGxpc3Qgb25jZSBpbg0KKwkJICogYWJvdXQgNCBt aW51dGVzLg0KKwkJICovDQorCQlyZWZpbGxfaW5hY3RpdmVfc2Nhbig1KTsN CisNCisJCS8qIE9uY2UgYSBzZWNvbmQsIHJlY2FsY3VsYXRlIHNvbWUgVk0g c3RhdHMuICovDQorCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCByZWNhbGMg KyBIWikpIHsNCisJCQlyZWNhbGMgPSBqaWZmaWVzOw0KKwkJCXJlY2FsY3Vs YXRlX3ZtX3N0YXRzKCk7DQorCQl9DQogCX0NCiB9DQogDQpAQCAtNjI4LDIz ICsxMDM0LDc0IEBADQogCWlmIChnZnBfbWFzayAmIF9fR0ZQX1dBSVQpIHsN CiAJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOw0KIAkJY3VycmVu dC0+ZmxhZ3MgfD0gUEZfTUVNQUxMT0M7DQotCQlyZXR2YWwgPSBkb190cnlf dG9fZnJlZV9wYWdlcyhnZnBfbWFzayk7DQorCQlyZXR2YWwgPSBkb190cnlf dG9fZnJlZV9wYWdlcyhnZnBfbWFzaywgMSk7DQogCQljdXJyZW50LT5mbGFn cyAmPSB+UEZfTUVNQUxMT0M7DQogCX0NCi0JZWxzZSB7DQotCQkvKiBtYWtl IHN1cmUga3N3YXBkIHJ1bnMgKi8NCi0JCWlmICh3YWl0cXVldWVfYWN0aXZl KCZrc3dhcGRfd2FpdCkpDQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZr c3dhcGRfd2FpdCk7DQotCX0NCisNCisJLyogc29tZW9uZSBuZWVkZWQgbWVt b3J5IHRoYXQga3N3YXBkIGhhZCBub3QgcHJvdmlkZWQNCisJICogbWFrZSBz dXJlIGtzd2FwZCBydW5zLCBzaG91bGQgbm90IGhhcHBlbiBvZnRlbiAqLw0K KwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgma3N3YXBkX3dhaXQpKQ0KKwkJd2Fr ZV91cF9pbnRlcnJ1cHRpYmxlKCZrc3dhcGRfd2FpdCk7DQogDQogCXJldHVy biByZXR2YWw7DQogfQ0KIA0KK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGty ZWNsYWltZF93YWl0KTsNCisvKg0KKyAqIEtyZWNsYWltZCB3aWxsIG1vdmUg cGFnZXMgZnJvbSB0aGUgaW5hY3RpdmVfY2xlYW4gbGlzdCB0byB0aGUNCisg KiBmcmVlIGxpc3QsIGluIG9yZGVyIHRvIGtlZXAgYXRvbWljIGFsbG9jYXRp b25zIHBvc3NpYmxlIHVuZGVyDQorICogYWxsIGNpcmN1bXN0YW5jZXMuIEV2 ZW4gd2hlbiBrc3dhcGQgaXMgYmxvY2tlZCBvbiBJTy4NCisgKi8NCitpbnQg a3JlY2xhaW1kKHZvaWQgKnVudXNlZCkNCit7DQorCXN0cnVjdCB0YXNrX3N0 cnVjdCAqdHNrID0gY3VycmVudDsNCisJcGdfZGF0YV90ICpwZ2RhdDsNCisN CisJdHNrLT5zZXNzaW9uID0gMTsNCisJdHNrLT5wZ3JwID0gMTsNCisJc3Ry Y3B5KHRzay0+Y29tbSwgImtyZWNsYWltZCIpOw0KKwlzaWdmaWxsc2V0KCZ0 c2stPmJsb2NrZWQpOw0KKwljdXJyZW50LT5mbGFncyB8PSBQRl9NRU1BTExP QzsNCisNCisJd2hpbGUgKDEpIHsNCisNCisJCS8qDQorCQkgKiBXZSBzbGVl cCB1bnRpbCBzb21lb25lIHdha2VzIHVzIHVwIGZyb20NCisJCSAqIHBhZ2Vf YWxsb2MuYzo6X19hbGxvY19wYWdlcygpLg0KKwkJICovDQorCQlpbnRlcnJ1 cHRpYmxlX3NsZWVwX29uKCZrcmVjbGFpbWRfd2FpdCk7DQorCQkNCisJCS8q DQorCQkgKiBNb3ZlIHNvbWUgcGFnZXMgZnJvbSB0aGUgaW5hY3RpdmVfY2xl YW4gbGlzdHMgdG8NCisJCSAqIHRoZSBmcmVlIGxpc3RzLCBpZiBpdCBpcyBu ZWVkZWQuDQorCQkgKi8NCisJCXBnZGF0ID0gcGdkYXRfbGlzdDsNCisJCWRv IHsNCisJCQlpbnQgaTsNCisJCQlmb3IoaSA9IDA7IGkgPCBNQVhfTlJfWk9O RVM7IGkrKykgew0KKwkJCQl6b25lX3QgKnpvbmUgPSBwZ2RhdC0+bm9kZV96 b25lcyArIGk7DQorCQkJCWlmICghem9uZS0+c2l6ZSkNCisJCQkJCWNvbnRp bnVlOw0KKw0KKwkJCQl3aGlsZSAoem9uZS0+ZnJlZV9wYWdlcyA8IHpvbmUt PnBhZ2VzX2xvdykgew0KKwkJCQkJc3RydWN0IHBhZ2UgKiBwYWdlOw0KKwkJ CQkJcGFnZSA9IHJlY2xhaW1fcGFnZSh6b25lKTsNCisJCQkJCWlmICghcGFn ZSkNCisJCQkJCQlicmVhazsNCisJCQkJCV9fZnJlZV9wYWdlKHBhZ2UpOw0K KwkJCQl9DQorCQkJfQ0KKwkJCXBnZGF0ID0gcGdkYXQtPm5vZGVfbmV4dDsN CisJCX0gd2hpbGUgKHBnZGF0KTsNCisJfQ0KK30NCisNCiBzdGF0aWMgaW50 IF9faW5pdCBrc3dhcGRfaW5pdCh2b2lkKQ0KIHsNCi0JcHJpbnRrKCJTdGFy dGluZyBrc3dhcGQgdjEuNlxuIik7DQorCXByaW50aygiU3RhcnRpbmcga3N3 YXBkIHYxLjdcbiIpOw0KIAlzd2FwX3NldHVwKCk7DQogCWtlcm5lbF90aHJl YWQoa3N3YXBkLCBOVUxMLCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwgQ0xP TkVfU0lHSEFORCk7DQorCWtlcm5lbF90aHJlYWQoa3JlY2xhaW1kLCBOVUxM LCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwgQ0xPTkVfU0lHSEFORCk7DQog CXJldHVybiAwOw0KIH0NCiANCi0tLSBsaW51eC0yLjQuMC10ZXN0NC9pbmNs dWRlL2xpbnV4L21tLmgub3JpZwlXZWQgQXVnICA5IDE2OjExOjQxIDIwMDAN CisrKyBsaW51eC0yLjQuMC10ZXN0NC9pbmNsdWRlL2xpbnV4L21tLmgJV2Vk IEF1ZyAgOSAxNjo0MDo1MyAyMDAwDQpAQCAtMTUsNyArMTUsOSBAQA0KIGV4 dGVybiB1bnNpZ25lZCBsb25nIG51bV9waHlzcGFnZXM7DQogZXh0ZXJuIHZv aWQgKiBoaWdoX21lbW9yeTsNCiBleHRlcm4gaW50IHBhZ2VfY2x1c3RlcjsN Ci1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBscnVfY2FjaGU7DQorLyogVGhl IGluYWN0aXZlX2NsZWFuIGxpc3RzIGFyZSBwZXIgem9uZS4gKi8NCitleHRl cm4gc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfbGlzdDsNCitleHRlcm4gc3Ry dWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9kaXJ0eV9saXN0Ow0KIA0KICNpbmNs dWRlIDxhc20vcGFnZS5oPg0KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPg0K QEAgLTE0OCw2ICsxNTAsNyBAQA0KIAlhdG9taWNfdCBjb3VudDsNCiAJdW5z aWduZWQgbG9uZyBmbGFnczsJLyogYXRvbWljIGZsYWdzLCBzb21lIHBvc3Np Ymx5IHVwZGF0ZWQgYXN5bmNocm9ub3VzbHkgKi8NCiAJc3RydWN0IGxpc3Rf aGVhZCBscnU7DQorCXVuc2lnbmVkIGxvbmcgYWdlOw0KIAl3YWl0X3F1ZXVl X2hlYWRfdCB3YWl0Ow0KIAlzdHJ1Y3QgcGFnZSAqKnBwcmV2X2hhc2g7DQog CXN0cnVjdCBidWZmZXJfaGVhZCAqIGJ1ZmZlcnM7DQpAQCAtMTY4LDEyICsx NzEsMTIgQEANCiAjZGVmaW5lIFBHX3VwdG9kYXRlCQkgMw0KICNkZWZpbmUg UEdfZGlydHkJCSA0DQogI2RlZmluZSBQR19kZWNyX2FmdGVyCQkgNQ0KLSNk ZWZpbmUgUEdfdW51c2VkXzAxCQkgNg0KLSNkZWZpbmUgUEdfX3VudXNlZF8w MgkJIDcNCisjZGVmaW5lIFBHX2FjdGl2ZQkJIDYNCisjZGVmaW5lIFBHX2lu YWN0aXZlX2RpcnR5CSA3DQogI2RlZmluZSBQR19zbGFiCQkJIDgNCiAjZGVm aW5lIFBHX3N3YXBfY2FjaGUJCSA5DQogI2RlZmluZSBQR19za2lwCQkJMTAN Ci0jZGVmaW5lIFBHX3VudXNlZF8wMwkJMTENCisjZGVmaW5lIFBHX2luYWN0 aXZlX2NsZWFuCTExDQogI2RlZmluZSBQR19oaWdobWVtCQkxMg0KIAkJCQkv KiBiaXRzIDIxLTMwIHVudXNlZCAqLw0KICNkZWZpbmUgUEdfcmVzZXJ2ZWQJ CTMxDQpAQCAtMTk4LDYgKzIwMSw3IEBADQogI2RlZmluZSBDbGVhclBhZ2VF cnJvcihwYWdlKQljbGVhcl9iaXQoUEdfZXJyb3IsICYocGFnZSktPmZsYWdz KQ0KICNkZWZpbmUgUGFnZVJlZmVyZW5jZWQocGFnZSkJdGVzdF9iaXQoUEdf cmVmZXJlbmNlZCwgJihwYWdlKS0+ZmxhZ3MpDQogI2RlZmluZSBTZXRQYWdl UmVmZXJlbmNlZChwYWdlKQlzZXRfYml0KFBHX3JlZmVyZW5jZWQsICYocGFn ZSktPmZsYWdzKQ0KKyNkZWZpbmUgQ2xlYXJQYWdlUmVmZXJlbmNlZChwYWdl KQljbGVhcl9iaXQoUEdfcmVmZXJlbmNlZCwgJihwYWdlKS0+ZmxhZ3MpDQog I2RlZmluZSBQYWdlVGVzdGFuZENsZWFyUmVmZXJlbmNlZChwYWdlKQl0ZXN0 X2FuZF9jbGVhcl9iaXQoUEdfcmVmZXJlbmNlZCwgJihwYWdlKS0+ZmxhZ3Mp DQogI2RlZmluZSBQYWdlRGVjckFmdGVyKHBhZ2UpCXRlc3RfYml0KFBHX2Rl Y3JfYWZ0ZXIsICYocGFnZSktPmZsYWdzKQ0KICNkZWZpbmUgU2V0UGFnZURl Y3JBZnRlcihwYWdlKQlzZXRfYml0KFBHX2RlY3JfYWZ0ZXIsICYocGFnZSkt PmZsYWdzKQ0KQEAgLTIxNSw2ICsyMTksMTggQEANCiAjZGVmaW5lIFBhZ2VD bGVhclN3YXBDYWNoZShwYWdlKQljbGVhcl9iaXQoUEdfc3dhcF9jYWNoZSwg JihwYWdlKS0+ZmxhZ3MpDQogDQogI2RlZmluZSBQYWdlVGVzdGFuZENsZWFy U3dhcENhY2hlKHBhZ2UpCXRlc3RfYW5kX2NsZWFyX2JpdChQR19zd2FwX2Nh Y2hlLCAmKHBhZ2UpLT5mbGFncykNCisNCisjZGVmaW5lIFBhZ2VBY3RpdmUo cGFnZSkJdGVzdF9iaXQoUEdfYWN0aXZlLCAmKHBhZ2UpLT5mbGFncykNCisj ZGVmaW5lIFNldFBhZ2VBY3RpdmUocGFnZSkJc2V0X2JpdChQR19hY3RpdmUs ICYocGFnZSktPmZsYWdzKQ0KKyNkZWZpbmUgQ2xlYXJQYWdlQWN0aXZlKHBh Z2UpCWNsZWFyX2JpdChQR19hY3RpdmUsICYocGFnZSktPmZsYWdzKQ0KKw0K KyNkZWZpbmUgUGFnZUluYWN0aXZlRGlydHkocGFnZSkJdGVzdF9iaXQoUEdf aW5hY3RpdmVfZGlydHksICYocGFnZSktPmZsYWdzKQ0KKyNkZWZpbmUgU2V0 UGFnZUluYWN0aXZlRGlydHkocGFnZSkJc2V0X2JpdChQR19pbmFjdGl2ZV9k aXJ0eSwgJihwYWdlKS0+ZmxhZ3MpDQorI2RlZmluZSBDbGVhclBhZ2VJbmFj dGl2ZURpcnR5KHBhZ2UpCWNsZWFyX2JpdChQR19pbmFjdGl2ZV9kaXJ0eSwg JihwYWdlKS0+ZmxhZ3MpDQorDQorI2RlZmluZSBQYWdlSW5hY3RpdmVDbGVh bihwYWdlKQl0ZXN0X2JpdChQR19pbmFjdGl2ZV9jbGVhbiwgJihwYWdlKS0+ ZmxhZ3MpDQorI2RlZmluZSBTZXRQYWdlSW5hY3RpdmVDbGVhbihwYWdlKQlz ZXRfYml0KFBHX2luYWN0aXZlX2NsZWFuLCAmKHBhZ2UpLT5mbGFncykNCisj ZGVmaW5lIENsZWFyUGFnZUluYWN0aXZlQ2xlYW4ocGFnZSkJY2xlYXJfYml0 KFBHX2luYWN0aXZlX2NsZWFuLCAmKHBhZ2UpLT5mbGFncykNCiANCiAjaWZk ZWYgQ09ORklHX0hJR0hNRU0NCiAjZGVmaW5lIFBhZ2VIaWdoTWVtKHBhZ2Up CQl0ZXN0X2JpdChQR19oaWdobWVtLCAmKHBhZ2UpLT5mbGFncykNCi0tLSBs aW51eC0yLjQuMC10ZXN0NC9pbmNsdWRlL2xpbnV4L21tem9uZS5oLm9yaWcJ V2VkIEF1ZyAgOSAxNjoxMTo0NiAyMDAwDQorKysgbGludXgtMi40LjAtdGVz dDQvaW5jbHVkZS9saW51eC9tbXpvbmUuaAlXZWQgQXVnICA5IDE2OjQwOjUw IDIwMDANCkBAIC0yOCwxMyArMjgsMTQgQEANCiAJc3BpbmxvY2tfdAkJbG9j azsNCiAJdW5zaWduZWQgbG9uZwkJb2Zmc2V0Ow0KIAl1bnNpZ25lZCBsb25n CQlmcmVlX3BhZ2VzOw0KLQljaGFyCQkJbG93X29uX21lbW9yeTsNCi0JY2hh cgkJCXpvbmVfd2FrZV9rc3dhcGQ7DQorCXVuc2lnbmVkIGxvbmcJCWluYWN0 aXZlX2NsZWFuX3BhZ2VzOw0KKwl1bnNpZ25lZCBsb25nCQlpbmFjdGl2ZV9k aXJ0eV9wYWdlczsNCiAJdW5zaWduZWQgbG9uZwkJcGFnZXNfbWluLCBwYWdl c19sb3csIHBhZ2VzX2hpZ2g7DQogDQogCS8qDQogCSAqIGZyZWUgYXJlYXMg b2YgZGlmZmVyZW50IHNpemVzDQogCSAqLw0KKwlzdHJ1Y3QgbGlzdF9oZWFk CWluYWN0aXZlX2NsZWFuX2xpc3Q7DQogCWZyZWVfYXJlYV90CQlmcmVlX2Fy ZWFbTUFYX09SREVSXTsNCiANCiAJLyoNCi0tLSBsaW51eC0yLjQuMC10ZXN0 NC9pbmNsdWRlL2xpbnV4L3N3YXAuaC5vcmlnCVdlZCBBdWcgIDkgMTY6MTE6 NTEgMjAwMA0KKysrIGxpbnV4LTIuNC4wLXRlc3Q0L2luY2x1ZGUvbGludXgv c3dhcC5oCVN1biBBdWcgMTMgMTU6MDY6MjkgMjAwMA0KQEAgLTY1LDEzICs2 NSwxNyBAQA0KIA0KIGV4dGVybiBpbnQgbnJfc3dhcF9wYWdlczsNCiBGQVNU Q0FMTCh1bnNpZ25lZCBpbnQgbnJfZnJlZV9wYWdlcyh2b2lkKSk7DQorRkFT VENBTEwodW5zaWduZWQgaW50IG5yX2luYWN0aXZlX2NsZWFuX3BhZ2VzKHZv aWQpKTsNCiBGQVNUQ0FMTCh1bnNpZ25lZCBpbnQgbnJfZnJlZV9idWZmZXJf cGFnZXModm9pZCkpOw0KIEZBU1RDQUxMKHVuc2lnbmVkIGludCBucl9mcmVl X2hpZ2hwYWdlcyh2b2lkKSk7DQotZXh0ZXJuIGludCBucl9scnVfcGFnZXM7 DQorZXh0ZXJuIGludCBucl9hY3RpdmVfcGFnZXM7DQorZXh0ZXJuIGludCBu cl9pbmFjdGl2ZV9kaXJ0eV9wYWdlczsNCiBleHRlcm4gYXRvbWljX3QgbnJf YXN5bmNfcGFnZXM7DQogZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3 YXBwZXJfc3BhY2U7DQogZXh0ZXJuIGF0b21pY190IHBhZ2VfY2FjaGVfc2l6 ZTsNCiBleHRlcm4gYXRvbWljX3QgYnVmZmVybWVtX3BhZ2VzOw0KK2V4dGVy biBzcGlubG9ja190IHBhZ2VjYWNoZV9sb2NrOw0KK2V4dGVybiB2b2lkIF9f cmVtb3ZlX2lub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7DQogDQogLyogSW5j b21wbGV0ZSB0eXBlcyBmb3IgcHJvdG90eXBlIGRlY2xhcmF0aW9uczogKi8N CiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7DQpAQCAtODMsOSArODcsMjggQEANCiBl eHRlcm4gaW50IHNobV9zd2FwKGludCwgaW50KTsNCiANCiAvKiBsaW51eC9t bS9zd2FwLmMgKi8NCitleHRlcm4gaW50IG1lbW9yeV9wcmVzc3VyZTsNCitl eHRlcm4gdm9pZCBhZ2VfcGFnZV91cChzdHJ1Y3QgcGFnZSAqKTsNCitleHRl cm4gdm9pZCBhZ2VfcGFnZV91cF9ub2xvY2soc3RydWN0IHBhZ2UgKik7DQor ZXh0ZXJuIHZvaWQgYWdlX3BhZ2VfZG93bihzdHJ1Y3QgcGFnZSAqKTsNCitl eHRlcm4gdm9pZCBhZ2VfcGFnZV9kb3duX25vbG9jayhzdHJ1Y3QgcGFnZSAq KTsNCitleHRlcm4gdm9pZCBkZWFjdGl2YXRlX3BhZ2Uoc3RydWN0IHBhZ2Ug Kik7DQorZXh0ZXJuIHZvaWQgZGVhY3RpdmF0ZV9wYWdlX25vbG9jayhzdHJ1 Y3QgcGFnZSAqKTsNCitleHRlcm4gdm9pZCBhY3RpdmF0ZV9wYWdlKHN0cnVj dCBwYWdlICopOw0KK2V4dGVybiB2b2lkIGFjdGl2YXRlX3BhZ2Vfbm9sb2Nr KHN0cnVjdCBwYWdlICopOw0KK2V4dGVybiB2b2lkIGxydV9jYWNoZV9hZGQo c3RydWN0IHBhZ2UgKik7DQorZXh0ZXJuIHZvaWQgX19scnVfY2FjaGVfZGVs KHN0cnVjdCBwYWdlICopOw0KK2V4dGVybiB2b2lkIGxydV9jYWNoZV9kZWwo c3RydWN0IHBhZ2UgKik7DQorZXh0ZXJuIHZvaWQgcmVjYWxjdWxhdGVfdm1f c3RhdHModm9pZCk7DQogZXh0ZXJuIHZvaWQgc3dhcF9zZXR1cCh2b2lkKTsN CiANCiAvKiBsaW51eC9tbS92bXNjYW4uYyAqLw0KK2V4dGVybiBzdHJ1Y3Qg cGFnZSAqIHJlY2xhaW1fcGFnZSh6b25lX3QgKik7DQorZXh0ZXJuIHdhaXRf cXVldWVfaGVhZF90IGtzd2FwZF93YWl0Ow0KK2V4dGVybiB3YWl0X3F1ZXVl X2hlYWRfdCBrcmVjbGFpbWRfd2FpdDsNCitleHRlcm4gaW50IHBhZ2VfbGF1 bmRlcihpbnQsIGludCk7DQorZXh0ZXJuIGludCBmcmVlX3Nob3J0YWdlKHZv aWQpOw0KK2V4dGVybiBpbnQgaW5hY3RpdmVfc2hvcnRhZ2Uodm9pZCk7DQog ZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9wYWdlcyh1bnNpZ25lZCBpbnQgZ2Zw X21hc2spOw0KIA0KIC8qIGxpbnV4L21tL3BhZ2VfaW8uYyAqLw0KQEAgLTE2 MSwzMCArMTg0LDkzIEBADQogZXh0ZXJuIHNwaW5sb2NrX3QgcGFnZW1hcF9s cnVfbG9jazsNCiANCiAvKg0KLSAqIEhlbHBlciBtYWNyb3MgZm9yIGxydV9w YWdlcyBoYW5kbGluZy4NCisgKiBQYWdlIGFnaW5nIGRlZmluZXMuDQorICog U2luY2Ugd2UgZG8gZXhwb25lbnRpYWwgZGVjYXkgb2YgdGhlIHBhZ2UgYWdl LCB3ZQ0KKyAqIGNhbiBjaG9zZSBhIGZhaXJseSBsYXJnZSBtYXhpbXVtLg0K ICAqLw0KLSNkZWZpbmUJbHJ1X2NhY2hlX2FkZChwYWdlKQkJCVwNCi1kbyB7 CQkJCQkJXA0KLQlzcGluX2xvY2soJnBhZ2VtYXBfbHJ1X2xvY2spOwkJXA0K LQlsaXN0X2FkZCgmKHBhZ2UpLT5scnUsICZscnVfY2FjaGUpOwlcDQotCW5y X2xydV9wYWdlcysrOwkJCQlcDQotCXNwaW5fdW5sb2NrKCZwYWdlbWFwX2xy dV9sb2NrKTsJCVwNCi19IHdoaWxlICgwKQ0KLQ0KLSNkZWZpbmUJX19scnVf Y2FjaGVfZGVsKHBhZ2UpCQkJXA0KLWRvIHsJCQkJCQlcDQotCWxpc3RfZGVs KCYocGFnZSktPmxydSk7CQkJXA0KLQlucl9scnVfcGFnZXMtLTsJCQkJXA0K LX0gd2hpbGUgKDApDQotDQotI2RlZmluZQlscnVfY2FjaGVfZGVsKHBhZ2Up CQkJXA0KLWRvIHsJCQkJCQlcDQotCWlmICghUGFnZUxvY2tlZChwYWdlKSkJ CQlcDQotCQlCVUcoKTsJCQkJXA0KLQlzcGluX2xvY2soJnBhZ2VtYXBfbHJ1 X2xvY2spOwkJXA0KLQlfX2xydV9jYWNoZV9kZWwocGFnZSk7CQkJXA0KLQlz cGluX3VubG9jaygmcGFnZW1hcF9scnVfbG9jayk7CQlcDQotfSB3aGlsZSAo MCkNCisjZGVmaW5lIFBBR0VfQUdFX1NUQVJUIDINCisjZGVmaW5lIFBBR0Vf QUdFX0FEViAzDQorI2RlZmluZSBQQUdFX0FHRV9NQVggNjQNCisNCisvKg0K KyAqIExpc3QgYWRkL2RlbCBoZWxwZXIgbWFjcm9zLiBUaGVzZSBtdXN0IGJl IGNhbGxlZA0KKyAqIHdpdGggdGhlIHBhZ2VtYXBfbHJ1X2xvY2sgaGVsZCEN CisgKi8NCisjZGVmaW5lIERFQlVHX0FERF9QQUdFIFwNCisJaWYgKFBhZ2VB Y3RpdmUocGFnZSkgfHwgUGFnZUluYWN0aXZlRGlydHkocGFnZSkgfHwgXA0K KwkJCQkJUGFnZUluYWN0aXZlQ2xlYW4ocGFnZSkpIEJVRygpOw0KKw0KKyNk ZWZpbmUgYWRkX3BhZ2VfdG9fYWN0aXZlX2xpc3QocGFnZSkgeyBcDQorCURF QlVHX0FERF9QQUdFIFwNCisJU2V0UGFnZUFjdGl2ZShwYWdlKTsgXA0KKwls aXN0X2FkZCgmKHBhZ2UpLT5scnUsICZhY3RpdmVfbGlzdCk7IFwNCisJbnJf YWN0aXZlX3BhZ2VzKys7IFwNCit9DQorDQorI2RlZmluZSBhZGRfcGFnZV90 b19pbmFjdGl2ZV9kaXJ0eV9saXN0KHBhZ2UpIHsgXA0KKwlERUJVR19BRERf UEFHRSBcDQorCVNldFBhZ2VJbmFjdGl2ZURpcnR5KHBhZ2UpOyBcDQorCWxp c3RfYWRkKCYocGFnZSktPmxydSwgJmluYWN0aXZlX2RpcnR5X2xpc3QpOyBc DQorCW5yX2luYWN0aXZlX2RpcnR5X3BhZ2VzKys7IFwNCisJcGFnZS0+em9u ZS0+aW5hY3RpdmVfZGlydHlfcGFnZXMrKzsgXA0KK30NCisNCisjZGVmaW5l IGFkZF9wYWdlX3RvX2luYWN0aXZlX2NsZWFuX2xpc3QocGFnZSkgeyBcDQor CURFQlVHX0FERF9QQUdFIFwNCisJU2V0UGFnZUluYWN0aXZlQ2xlYW4ocGFn ZSk7IFwNCisJbGlzdF9hZGQoJihwYWdlKS0+bHJ1LCAmcGFnZS0+em9uZS0+ aW5hY3RpdmVfY2xlYW5fbGlzdCk7IFwNCisJcGFnZS0+em9uZS0+aW5hY3Rp dmVfY2xlYW5fcGFnZXMrKzsgXA0KK30NCisNCisjZGVmaW5lIGRlbF9wYWdl X2Zyb21fYWN0aXZlX2xpc3QocGFnZSkgeyBcDQorCWxpc3RfZGVsKCYocGFn ZSktPmxydSk7IFwNCisJQ2xlYXJQYWdlQWN0aXZlKHBhZ2UpOyBcDQorCW5y X2FjdGl2ZV9wYWdlcy0tOyBcDQorCURFQlVHX0FERF9QQUdFIFwNCit9DQor DQorI2RlZmluZSBkZWxfcGFnZV9mcm9tX2luYWN0aXZlX2RpcnR5X2xpc3Qo cGFnZSkgeyBcDQorCWxpc3RfZGVsKCYocGFnZSktPmxydSk7IFwNCisJQ2xl YXJQYWdlSW5hY3RpdmVEaXJ0eShwYWdlKTsgXA0KKwlucl9pbmFjdGl2ZV9k aXJ0eV9wYWdlcy0tOyBcDQorCXBhZ2UtPnpvbmUtPmluYWN0aXZlX2RpcnR5 X3BhZ2VzLS07IFwNCisJREVCVUdfQUREX1BBR0UgXA0KK30NCisNCisjZGVm aW5lIGRlbF9wYWdlX2Zyb21faW5hY3RpdmVfY2xlYW5fbGlzdChwYWdlKSB7 IFwNCisJbGlzdF9kZWwoJihwYWdlKS0+bHJ1KTsgXA0KKwlDbGVhclBhZ2VJ bmFjdGl2ZUNsZWFuKHBhZ2UpOyBcDQorCXBhZ2UtPnpvbmUtPmluYWN0aXZl X2NsZWFuX3BhZ2VzLS07IFwNCisJREVCVUdfQUREX1BBR0UgXA0KK30NCisN CisvKg0KKyAqIEluIG1tL3N3YXAuYzo6cmVjYWxjdWxhdGVfdm1fc3RhdHMo KSwgd2Ugc3Vic3RyYWN0DQorICogaW5hY3RpdmVfdGFyZ2V0IGZyb20gbWVt b3J5X3ByZXNzdXJlIGV2ZXJ5IHNlY29uZC4NCisgKiBUaGlzIG1lYW5zIHRo YXQgbWVtb3J5X3ByZXNzdXJlIGlzIHNtb290aGVkIG92ZXINCisgKiA2NCAo MSA8PCBJTkFDVElWRV9TSElGVCkgc2Vjb25kcy4NCisgKi8NCisjZGVmaW5l IElOQUNUSVZFX1NISUZUIDYNCisjZGVmaW5lIGluYWN0aXZlX21pbihhLGIp ICgoYSkgPCAoYikgPyAoYSkgOiAoYikpDQorI2RlZmluZSBpbmFjdGl2ZV90 YXJnZXQgaW5hY3RpdmVfbWluKChtZW1vcnlfcHJlc3N1cmUgPj4gSU5BQ1RJ VkVfU0hJRlQpLCBcDQorCQkobnVtX3BoeXNwYWdlcyAvIDQpKQ0KKw0KKy8q DQorICogVWdseSB1Z2x5IHVnbHkgSEFDSyB0byBtYWtlIHN1cmUgdGhlIGlu YWN0aXZlIGxpc3RzDQorICogZG9uJ3QgZmlsbCB1cCB3aXRoIHVuZnJlZWFi bGUgcmFtZGlzayBwYWdlcy4gV2UgcmVhbGx5DQorICogd2FudCB0byBmaXgg dGhlIHJhbWRpc2sgZHJpdmVyIHRvIG1hcmsgaXRzIHBhZ2VzIGFzDQorICog dW5mcmVlYWJsZSBpbnN0ZWFkIG9mIHVzaW5nIGRpcnR5IGJ1ZmZlciBtYWdp YywgYnV0IHRoZQ0KKyAqIG5leHQgY29kZS1jaGFuZ2UgdGltZSBpcyB3aGVu IDIuNSBpcyBmb3JrZWQuLi4NCisgKi8NCisjaWZuZGVmIF9MSU5VWF9LREVW X1RfSA0KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4NCisjZW5kaWYNCisj aWZuZGVmIF9MSU5VWF9NQUpPUl9IDQorI2luY2x1ZGUgPGxpbnV4L21ham9y Lmg+DQorI2VuZGlmDQorDQorI2RlZmluZSBwYWdlX3JhbWRpc2socGFnZSkg XA0KKwkocGFnZS0+YnVmZmVycyAmJiAoTUFKT1IocGFnZS0+YnVmZmVycy0+ Yl9kZXYpID09IFJBTURJU0tfTUFKT1IpKQ0KIA0KIGV4dGVybiBzcGlubG9j a190IHN3YXBsb2NrOw0KIA0KLS0tIGxpbnV4LTIuNC4wLXRlc3Q0L2lwYy9z aG0uYy5vcmlnCVdlZCBBdWcgIDkgMTY6MTE6MzMgMjAwMA0KKysrIGxpbnV4 LTIuNC4wLXRlc3Q0L2lwYy9zaG0uYwlXZWQgQXVnICA5IDE2OjE0OjM5IDIw MDANCkBAIC0xNTIyLDcgKzE1MjIsNyBAQA0KIH0NCiANCiAvKg0KLSAqIEdv ZXMgdGhyb3VnaCBjb3VudGVyID0gKHNobV9yc3MgLyAocHJpbyArIDEpKSBw cmVzZW50IHNobSBwYWdlcy4NCisgKiBHb2VzIHRocm91Z2ggY291bnRlciA9 IChzaG1fcnNzID4+IHByaW8pIHByZXNlbnQgc2htIHBhZ2VzLg0KICAqLw0K IHN0YXRpYyB1bnNpZ25lZCBsb25nIHN3YXBfaWQ7IC8qIGN1cnJlbnRseSBi ZWluZyBzd2FwcGVkICovDQogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3dhcF9p ZHg7IC8qIG5leHQgdG8gc3dhcCAqLw0KQEAgLTE1MzcsNyArMTUzNyw3IEBA DQogCXN0cnVjdCBwYWdlICogcGFnZV9tYXA7DQogDQogCXpzaG1fc3dhcChw cmlvLCBnZnBfbWFzayk7DQotCWNvdW50ZXIgPSBzaG1fcnNzIC8gKHByaW8g KyAxKTsNCisJY291bnRlciA9IHNobV9yc3MgPj4gcHJpbzsNCiAJaWYgKCFj b3VudGVyKQ0KIAkJcmV0dXJuIDA7DQogCWlmIChzaG1fc3dhcF9wcmVvcCgm c3dhcF9lbnRyeSkpDQpAQCAtMTg2Myw3ICsxODYzLDcgQEANCiAJaW50IGNv dW50ZXI7DQogCXN0cnVjdCBwYWdlICogcGFnZV9tYXA7DQogDQotCWNvdW50 ZXIgPSB6c2htX3JzcyAvIChwcmlvICsgMSk7DQorCWNvdW50ZXIgPSB6c2ht X3JzcyA+PiBwcmlvOw0KIAlpZiAoIWNvdW50ZXIpDQogCQlyZXR1cm47DQog bmV4dDoNCg== --655889-672268636-966291470=:1599-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux.eu.org/Linux-MM/