From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12464 invoked by alias); 17 Feb 2009 07:01:59 -0000 Received: (qmail 10105 invoked by uid 22791); 17 Feb 2009 07:01:54 -0000 X-SWARE-Spam-Status: No, hits=-0.0 required=5.0 tests=AWL,BAYES_50,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from ti-out-0910.google.com (HELO ti-out-0910.google.com) (209.85.142.185) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 17 Feb 2009 07:01:38 +0000 Received: by ti-out-0910.google.com with SMTP id y8so1842718tia.12 for ; Mon, 16 Feb 2009 23:01:35 -0800 (PST) MIME-Version: 1.0 Received: by 10.110.2.2 with SMTP id 2mr4524558tib.29.1234854094968; Mon, 16 Feb 2009 23:01:34 -0800 (PST) In-Reply-To: References: <200901221324.02225.pedro@codesourcery.com> Date: Tue, 17 Feb 2009 07:12:00 -0000 Message-ID: Subject: Re: [RFA] Submit process record and replay third time, 3/9 From: teawater To: Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=001485f3e8beae16f0046317df2c X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-02/txt/msg00344.txt.bz2 --001485f3e8beae16f0046317df2c Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 385 Update follow the cvs-head. It just has a very small change - add a 0 to be the argument of observer_notify_normal_stop. On Sun, Feb 8, 2009 at 21:03, teawater wrote: > Hi Pedro, > > According to your mail "Get rid of linux-thread-db.c:target_beneath". > I get ride of this global beneath function pointers. > > Do you think this patch is OK? > > Thanks, > Hui > --001485f3e8beae16f0046317df2c Content-Type: text/plain; charset=US-ASCII; name="3-record_target.txt" Content-Disposition: attachment; filename="3-record_target.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fra8l62h1 Content-length: 52887 LS0tCiBNYWtlZmlsZS5pbiB8ICAgIDQgCiByZWNvcmQuYyAgICB8IDEyNTkg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiByZWNvcmQuaCAgICB8ICAgODcgKysrKwogMyBm aWxlcyBjaGFuZ2VkLCAxMzQ4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25z KC0pCgotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAt NjYxLDcgKzY2MSw3IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5j IGFkYS10eXBlcHIKIAl2YWxhcml0aC5jIHZhbG9wcy5jIHZhbHByaW50LmMg dmFsdWUuYyB2YXJvYmouYyB2ZWMuYyBcCiAJd3JhcHBlci5jIFwKIAl4bWwt dGRlc2MuYyB4bWwtc3VwcG9ydC5jIFwKLQlpbmZlcmlvci5jCisJaW5mZXJp b3IuYyByZWNvcmQuYwogCiBMSU5URklMRVMgPSAkKFNGSUxFUykgJChZWUZJ TEVTKSAkKENPTkZJR19TUkNTKSBpbml0LmMKIApAQCAtODEyLDcgKzgxMiw3 IEBAIENPTU1PTl9PQlMgPSAkKERFUEZJTEVTKSAkKENPTkZJR19PQlMpICQK IAlzb2xpYi5vIHNvbGliLW51bGwubyBcCiAJcHJvbG9ndWUtdmFsdWUubyBt ZW1vcnktbWFwLm8geG1sLXN1cHBvcnQubyBcCiAJdGFyZ2V0LWRlc2NyaXB0 aW9ucy5vIHRhcmdldC1tZW1vcnkubyB4bWwtdGRlc2MubyB4bWwtYnVpbHRp bi5vIFwKLQlpbmZlcmlvci5vIG9zZGF0YS5vCisJaW5mZXJpb3IubyBvc2Rh dGEubyByZWNvcmQubwogCiBUU09CUyA9IGluZmxvdy5vCiAKLS0tIC9kZXYv bnVsbAorKysgYi9yZWNvcmQuYwpAQCAtMCwwICsxLDEyNTkgQEAKKy8qIFBy b2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGZvciBHREIsIHRoZSBH TlUgZGVidWdnZXIuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2Us IG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor CisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisj aW5jbHVkZSAiZGVmcy5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2luY2x1 ZGUgImdkYmNtZC5oIgorI2luY2x1ZGUgInJlZ2NhY2hlLmgiCisjaW5jbHVk ZSAiaW5mZXJpb3IuaCIKKyNpbmNsdWRlICJnZGJ0aHJlYWQuaCIKKyNpbmNs dWRlICJldmVudC10b3AuaCIKKyNpbmNsdWRlICJhbm5vdGF0ZS5oIgorI2lu Y2x1ZGUgIm9ic2VydmVyLmgiCisjaW5jbHVkZSAicmVjb3JkLmgiCisKKyNp bmNsdWRlIDxzaWduYWwuaD4KKworI2RlZmluZSBERUZBVUxUX1JFQ09SRF9J TlNOX01BWF9OVU0JMjAwMDAwCisKK2ludCByZWNvcmRfZGVidWcgPSAwOwor CityZWNvcmRfdCByZWNvcmRfZmlyc3Q7CityZWNvcmRfdCAqcmVjb3JkX2xp c3QgPSAmcmVjb3JkX2ZpcnN0OworcmVjb3JkX3QgKnJlY29yZF9hcmNoX2xp c3RfaGVhZCA9IE5VTEw7CityZWNvcmRfdCAqcmVjb3JkX2FyY2hfbGlzdF90 YWlsID0gTlVMTDsKK3N0cnVjdCByZWdjYWNoZSAqcmVjb3JkX3JlZ2NhY2hl ID0gTlVMTDsKKworLyogMSBhc2sgdXNlci4gMCBhdXRvIGRlbGV0ZSB0aGUg bGFzdCByZWNvcmRfdC4gICovCitzdGF0aWMgaW50IHJlY29yZF9zdG9wX2F0 X2xpbWl0ID0gMTsKK3N0YXRpYyBpbnQgcmVjb3JkX2luc25fbWF4X251bSA9 IERFRkFVTFRfUkVDT1JEX0lOU05fTUFYX05VTTsKK3N0YXRpYyBpbnQgcmVj b3JkX2luc25fbnVtID0gMDsKKworc3RydWN0IHRhcmdldF9vcHMgcmVjb3Jk X29wczsKK3N0YXRpYyBpbnQgcmVjb3JkX3Jlc3VtZV9zdGVwID0gMDsKK3N0 YXRpYyBlbnVtIHRhcmdldF9zaWduYWwgcmVjb3JkX3Jlc3VtZV9zaWdnbmFs Oworc3RhdGljIGludCByZWNvcmRfZ2V0X3NpZyA9IDA7CitzdGF0aWMgc2ln c2V0X3QgcmVjb3JkX21hc2thbGw7CitzdGF0aWMgaW50IHJlY29yZF9nZGJf b3BlcmF0aW9uX2Rpc2FibGUgPSAwOworaW50IHJlY29yZF93aWxsX3N0b3Jl X3JlZ2lzdGVycyA9IDA7CisKK2V4dGVybiBzdHJ1Y3QgYnBfbG9jYXRpb24g KmJwX2xvY2F0aW9uX2NoYWluOworCisvKiBUaGUgYmVuZWF0aCBmdW5jdGlv biBwb2ludGVycy4gICovCitzdGF0aWMgdm9pZCAoKnJlY29yZF9iZW5lYXRo X3RvX3Jlc3VtZSkgKHB0aWRfdCwgaW50LCBlbnVtIHRhcmdldF9zaWduYWwp ID0KKyAgTlVMTDsKK3N0YXRpYyBwdGlkX3QgKCpyZWNvcmRfYmVuZWF0aF90 b193YWl0KSAoc3RydWN0IHRhcmdldF9vcHMgKiwgcHRpZF90LAorCQkJCQkg c3RydWN0IHRhcmdldF93YWl0c3RhdHVzICopID0gTlVMTDsKK3N0YXRpYyB2 b2lkICgqcmVjb3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0ZXJzKSAoc3Ry dWN0IHJlZ2NhY2hlICosCisJCQkJCQkgIGludCByZWdubykgPSBOVUxMOwor c3RhdGljIExPTkdFU1QgKCpyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRp YWwpIChzdHJ1Y3QgdGFyZ2V0X29wcyAqIG9wcywKKwkJCQkJCSAgZW51bSB0 YXJnZXRfb2JqZWN0IG9iamVjdCwKKwkJCQkJCSAgY29uc3QgY2hhciAqYW5u ZXgsCisJCQkJCQkgIGdkYl9ieXRlICogcmVhZGJ1ZiwKKwkJCQkJCSAgY29u c3QgZ2RiX2J5dGUgKiB3cml0ZWJ1ZiwKKwkJCQkJCSAgVUxPTkdFU1Qgb2Zm c2V0LAorCQkJCQkJICBMT05HRVNUIGxlbikgPSBOVUxMOworc3RhdGljIGlu dCAoKnJlY29yZF9iZW5lYXRoX3RvX2luc2VydF9icmVha3BvaW50KSAoc3Ry dWN0IGJwX3RhcmdldF9pbmZvICopID0KKyAgTlVMTDsKK3N0YXRpYyBpbnQg KCpyZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCkgKHN0cnVj dCBicF90YXJnZXRfaW5mbyAqKSA9CisgIE5VTEw7CisKK3N0YXRpYyB2b2lk CityZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfdCAqIHJlYykKK3sKKyAg cmVjb3JkX3QgKnRtcDsKKworICBpZiAoIXJlYykKKyAgICByZXR1cm47CisK KyAgd2hpbGUgKHJlYy0+bmV4dCkKKyAgICB7CisgICAgICByZWMgPSByZWMt Pm5leHQ7CisgICAgfQorCisgIHdoaWxlIChyZWMtPnByZXYpCisgICAgewor ICAgICAgdG1wID0gcmVjOworICAgICAgcmVjID0gcmVjLT5wcmV2OworICAg ICAgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRfcmVnKQorCXhmcmVlICh0bXAt PnUucmVnLnZhbCk7CisgICAgICBlbHNlIGlmICh0bXAtPnR5cGUgPT0gcmVj b3JkX21lbSkKKwl4ZnJlZSAodG1wLT51Lm1lbS52YWwpOworICAgICAgeGZy ZWUgKHRtcCk7CisgICAgfQorCisgIGlmIChyZWMgIT0gJnJlY29yZF9maXJz dCkKKyAgICB4ZnJlZSAocmVjKTsKK30KKworc3RhdGljIHZvaWQKK3JlY29y ZF9saXN0X3JlbGVhc2VfbmV4dCAodm9pZCkKK3sKKyAgcmVjb3JkX3QgKnJl YyA9IHJlY29yZF9saXN0OworICByZWNvcmRfdCAqdG1wID0gcmVjLT5uZXh0 OworICByZWMtPm5leHQgPSBOVUxMOworICB3aGlsZSAodG1wKQorICAgIHsK KyAgICAgIHJlYyA9IHRtcC0+bmV4dDsKKyAgICAgIGlmICh0bXAtPnR5cGUg PT0gcmVjb3JkX3JlZykKKwlyZWNvcmRfaW5zbl9udW0tLTsKKyAgICAgIGVs c2UgaWYgKHRtcC0+dHlwZSA9PSByZWNvcmRfcmVnKQorCXhmcmVlICh0bXAt PnUucmVnLnZhbCk7CisgICAgICBlbHNlIGlmICh0bXAtPnR5cGUgPT0gcmVj b3JkX21lbSkKKwl4ZnJlZSAodG1wLT51Lm1lbS52YWwpOworICAgICAgeGZy ZWUgKHRtcCk7CisgICAgICB0bXAgPSByZWM7CisgICAgfQorfQorCitzdGF0 aWMgdm9pZAorcmVjb3JkX2xpc3RfcmVsZWFzZV9maXJzdCAodm9pZCkKK3sK KyAgcmVjb3JkX3QgKnRtcCA9IE5VTEw7CisgIGVudW0gcmVjb3JkX3R5cGUg dHlwZTsKKworICBpZiAoIXJlY29yZF9maXJzdC5uZXh0KQorICAgIHJldHVy bjsKKworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICB0eXBlID0gcmVjb3Jk X2ZpcnN0Lm5leHQtPnR5cGU7CisKKyAgICAgIGlmICh0eXBlID09IHJlY29y ZF9yZWcpCisJeGZyZWUgKHJlY29yZF9maXJzdC5uZXh0LT51LnJlZy52YWwp OworICAgICAgZWxzZSBpZiAodHlwZSA9PSByZWNvcmRfbWVtKQorCXhmcmVl IChyZWNvcmRfZmlyc3QubmV4dC0+dS5tZW0udmFsKTsKKyAgICAgIHRtcCA9 IHJlY29yZF9maXJzdC5uZXh0OworICAgICAgcmVjb3JkX2ZpcnN0Lm5leHQg PSB0bXAtPm5leHQ7CisgICAgICB4ZnJlZSAodG1wKTsKKworICAgICAgaWYg KCFyZWNvcmRfZmlyc3QubmV4dCkKKwl7CisJICBnZGJfYXNzZXJ0IChyZWNv cmRfaW5zbl9udW0gPT0gMSk7CisJICBicmVhazsKKwl9CisKKyAgICAgIHJl Y29yZF9maXJzdC5uZXh0LT5wcmV2ID0gJnJlY29yZF9maXJzdDsKKworICAg ICAgaWYgKHR5cGUgPT0gcmVjb3JkX2VuZCkKKwlicmVhazsKKyAgICB9CisK KyAgcmVjb3JkX2luc25fbnVtLS07Cit9CisKKy8qIEFkZCBhIHJlY29yZF90 IHRvIHJlY29yZF9hcmNoX2xpc3QuICAqLworc3RhdGljIHZvaWQKK3JlY29y ZF9hcmNoX2xpc3RfYWRkIChyZWNvcmRfdCAqIHJlYykKK3sKKyAgaWYgKHJl Y29yZF9kZWJ1ZyA+IDEpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLAorCQkJIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfYXJjaF9saXN0 X2FkZCAlcy5cbiIsCisJCQlob3N0X2FkZHJlc3NfdG9fc3RyaW5nIChyZWMp KTsKKworICBpZiAocmVjb3JkX2FyY2hfbGlzdF90YWlsKQorICAgIHsKKyAg ICAgIHJlY29yZF9hcmNoX2xpc3RfdGFpbC0+bmV4dCA9IHJlYzsKKyAgICAg IHJlYy0+cHJldiA9IHJlY29yZF9hcmNoX2xpc3RfdGFpbDsKKyAgICAgIHJl Y29yZF9hcmNoX2xpc3RfdGFpbCA9IHJlYzsKKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICByZWNvcmRfYXJjaF9saXN0X2hlYWQgPSByZWM7CisgICAg ICByZWNvcmRfYXJjaF9saXN0X3RhaWwgPSByZWM7CisgICAgfQorfQorCisv KiBSZWNvcmQgdGhlIHZhbHVlIG9mIGEgcmVnaXN0ZXIgKCJudW0iKSB0byBy ZWNvcmRfYXJjaF9saXN0LiAgKi8KK2ludAorcmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChpbnQgbnVtKQoreworICByZWNvcmRfdCAqcmVjOworCisgIGlm IChyZWNvcmRfZGVidWcgPiAxKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywKKwkJCSJQcm9jZXNzIHJlY29yZDogYWRkIHJlZ2lzdGVy IG51bSA9ICVkIHRvICIKKwkJCSJyZWNvcmQgbGlzdC5cbiIsCisJCQludW0p OworCisgIHJlYyA9IChyZWNvcmRfdCAqKSB4bWFsbG9jIChzaXplb2YgKHJl Y29yZF90KSk7CisgIHJlYy0+dS5yZWcudmFsID0gKGdkYl9ieXRlICopIHht YWxsb2MgKE1BWF9SRUdJU1RFUl9TSVpFKTsKKyAgcmVjLT5wcmV2ID0gTlVM TDsKKyAgcmVjLT5uZXh0ID0gTlVMTDsKKyAgcmVjLT50eXBlID0gcmVjb3Jk X3JlZzsKKyAgcmVjLT51LnJlZy5udW0gPSBudW07CisKKyAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgbnVtLCByZWMtPnUucmVnLnZh bCk7CisKKyAgcmVjb3JkX2FyY2hfbGlzdF9hZGQgKHJlYyk7CisKKyAgcmV0 dXJuIDA7Cit9CisKKy8qIFJlY29yZCB0aGUgdmFsdWUgb2YgYSByZWdpb24g b2YgbWVtb3J5IHdob3NlIGFkZHJlc3MgaXMgImFkZHIiIGFuZAorICAgbGVu Z3RoIGlzICJsZW4iIHRvIHJlY29yZF9hcmNoX2xpc3QuICAqLworCitpbnQK K3JlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoQ09SRV9BRERSIGFkZHIsIGlu dCBsZW4pCit7CisgIHJlY29yZF90ICpyZWM7CisKKyAgaWYgKHJlY29yZF9k ZWJ1ZyA+IDEpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAorCQkJIlByb2Nlc3MgcmVjb3JkOiBhZGQgbWVtIGFkZHIgPSAweCVzIGxl biA9ICVkIHRvICIKKwkJCSJyZWNvcmQgbGlzdC5cbiIsCisJCQlwYWRkcl9u eiAoYWRkciksIGxlbik7CisKKyAgaWYgKCFhZGRyKQorICAgIHJldHVybiAw OworCisgIHJlYyA9IChyZWNvcmRfdCAqKSB4bWFsbG9jIChzaXplb2YgKHJl Y29yZF90KSk7CisgIHJlYy0+dS5tZW0udmFsID0gKGdkYl9ieXRlICopIHht YWxsb2MgKGxlbik7CisgIHJlYy0+cHJldiA9IE5VTEw7CisgIHJlYy0+bmV4 dCA9IE5VTEw7CisgIHJlYy0+dHlwZSA9IHJlY29yZF9tZW07CisgIHJlYy0+ dS5tZW0uYWRkciA9IGFkZHI7CisgIHJlYy0+dS5tZW0ubGVuID0gbGVuOwor CisgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKGFkZHIsIHJlYy0+dS5tZW0u dmFsLCBsZW4pKQorICAgIHsKKyAgICAgIGlmIChyZWNvcmRfZGVidWcpCisJ ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJICAgICJQcm9j ZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgYXQgIgorCQkJICAg ICJhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisJCQkgICAgcGFkZHJfbnog KGFkZHIpLCBsZW4pOworICAgICAgeGZyZWUgKHJlYy0+dS5tZW0udmFsKTsK KyAgICAgIHhmcmVlIChyZWMpOworICAgICAgcmV0dXJuIC0xOworICAgIH0K KworICByZWNvcmRfYXJjaF9saXN0X2FkZCAocmVjKTsKKworICByZXR1cm4g MDsKK30KKworLyogQWRkIGEgcmVjb3JkX2VuZCB0eXBlIHJlY29yZF90IHRv IHJlY29yZF9hcmNoX2xpc3QuICAqLworaW50CityZWNvcmRfYXJjaF9saXN0 X2FkZF9lbmQgKGludCBuZWVkX2Rhc20pCit7CisgIHJlY29yZF90ICpyZWM7 CisKKyAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisgICAgZnByaW50Zl91bmZp bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJIlByb2Nlc3MgcmVjb3JkOiBhZGQg ZW5kIG5lZWRfZGFzbSA9ICVkIHRvICIKKwkJCSJhcmNoIGxpc3QuXG4iLAor CQkJbmVlZF9kYXNtKTsKKworICByZWMgPSAocmVjb3JkX3QgKikgeG1hbGxv YyAoc2l6ZW9mIChyZWNvcmRfdCkpOworICByZWMtPnByZXYgPSBOVUxMOwor ICByZWMtPm5leHQgPSBOVUxMOworICByZWMtPnR5cGUgPSByZWNvcmRfZW5k OworCisgIHJlYy0+dS5uZWVkX2Rhc20gPSBuZWVkX2Rhc207CisKKyAgcmVj b3JkX2FyY2hfbGlzdF9hZGQgKHJlYyk7CisKKyAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkCityZWNvcmRfY2hlY2tfaW5zbl9udW0gKGludCBzZXRf dGVybWluYWwpCit7CisgIGlmIChyZWNvcmRfaW5zbl9tYXhfbnVtKQorICAg IHsKKyAgICAgIGdkYl9hc3NlcnQgKHJlY29yZF9pbnNuX251bSA8PSByZWNv cmRfaW5zbl9tYXhfbnVtKTsKKyAgICAgIGlmIChyZWNvcmRfaW5zbl9udW0g PT0gcmVjb3JkX2luc25fbWF4X251bSkKKwl7CisJICAvKiBBc2sgdXNlciB3 aGF0IHRvIGRvLiAgKi8KKwkgIGlmIChyZWNvcmRfc3RvcF9hdF9saW1pdCkK KwkgICAgeworCSAgICAgIGludCBxOworCSAgICAgIGlmIChzZXRfdGVybWlu YWwpCisJCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOworCSAgICAgIHEgPSB5 cXVlcnkgKF8oIkRvIHlvdSB3YW50IHRvIGF1dG8gZGVsZXRlIHByZXZpb3Vz IGV4ZWN1dGlvbiAiCisJCQkgICAgImxvZyBlbnRyaWVzIHdoZW4gcmVjb3Jk L3JlcGxheSBidWZmZXIgYmVjb21lcyAiCisJCQkgICAgImZ1bGwgKHJlY29y ZC1zdG9wLWF0LWxpbWl0KT8iKSk7CisJICAgICAgaWYgKHNldF90ZXJtaW5h bCkKKwkJdGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9yICgpOworCSAgICAgIGlm IChxKQorCQlyZWNvcmRfc3RvcF9hdF9saW1pdCA9IDA7CisJICAgICAgZWxz ZQorCQllcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGluZmVyaW9yIHByb2dy YW0gc3RvcHBlZC4iKSk7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0 aWMgdm9pZAorcmVjb3JkX25vcm1hbF9zdG9wICh2b2lkKQoreworICBmaW5p c2hfdGhyZWFkX3N0YXRlIChtaW51c19vbmVfcHRpZCk7CisKKyAgaWYgKCFi cmVha3BvaW50c19hbHdheXNfaW5zZXJ0ZWRfbW9kZSAoKSAmJiB0YXJnZXRf aGFzX2V4ZWN1dGlvbikKKyAgICByZW1vdmVfYnJlYWtwb2ludHMgKCk7CisK KyAgdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisKKyAgaWYgKHRhcmdldF9o YXNfc3RhY2sgJiYgIXN0b3Bfc3RhY2tfZHVtbXkpCisgICAgc2V0X2N1cnJl bnRfc2FsX2Zyb21fZnJhbWUgKGdldF9jdXJyZW50X2ZyYW1lICgpLCAxKTsK KworICBzZWxlY3RfZnJhbWUgKGdldF9jdXJyZW50X2ZyYW1lICgpKTsKKwor ICBhbm5vdGF0ZV9zdG9wcGVkICgpOworICBpZiAoIXN1cHByZXNzX3N0b3Bf b2JzZXJ2ZXIpCisgICAgeworICAgICAgaWYgKCFwdGlkX2VxdWFsIChpbmZl cmlvcl9wdGlkLCBudWxsX3B0aWQpKQorCW9ic2VydmVyX25vdGlmeV9ub3Jt YWxfc3RvcCAoaW5mZXJpb3JfdGhyZWFkICgpLT5zdG9wX2Jwc3RhdCwgMCk7 CisgICAgICBlbHNlCisJb2JzZXJ2ZXJfbm90aWZ5X25vcm1hbF9zdG9wIChO VUxMLCAwKTsKKyAgICB9Cit9CisKKy8qIEJlZm9yZSBpbmZlcmlvciBzdGVw ICh3aGVuIEdEQiByZWNvcmQgdGhlIHJ1bm5pbmcgbWVzc2FnZSwgaW5mZXJp b3IKKyAgIG9ubHkgY2FuIHN0ZXApLCBHREIgd2lsbCBjYWxsIHRoaXMgZnVu Y3Rpb24gdG8gcmVjb3JkIHRoZSB2YWx1ZXMgdG8KKyAgIHJlY29yZF9saXN0 LiAgVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgZ2RiYXJjaF9wcm9jZXNzX3Jl Y29yZCB0bworICAgcmVjb3JkIHRoZSBydW5uaW5nIG1lc3NhZ2Ugb2YgaW5m ZXJpb3IgYW5kIHNldCB0aGVtIHRvCisgICByZWNvcmRfYXJjaF9saXN0LCBh bmQgYWRkIGl0IHRvIHJlY29yZF9saXN0LiAgKi8KKworc3RhdGljIHZvaWQK K3JlY29yZF9tZXNzYWdlX2NsZWFudXBzICh2b2lkICppZ25vcmUpCit7Cisg IHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7 CisgIHNldF9leGVjdXRpbmcgKGluZmVyaW9yX3B0aWQsIDApOworICByZWNv cmRfbm9ybWFsX3N0b3AgKCk7Cit9CisKK3ZvaWQKK3JlY29yZF9tZXNzYWdl IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKK3sKKyAgaW50IHJldDsKKyAg c3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAo cmVjb3JkX21lc3NhZ2VfY2xlYW51cHMsIDApOworCisgIHJlY29yZF9hcmNo X2xpc3RfaGVhZCA9IE5VTEw7CisgIHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9 IE5VTEw7CisKKyAgLyogQ2hlY2sgcmVjb3JkX2luc25fbnVtLiAgKi8KKyAg cmVjb3JkX2NoZWNrX2luc25fbnVtICgxKTsKKworICByZWNvcmRfcmVnY2Fj aGUgPSBnZXRfY3VycmVudF9yZWdjYWNoZSAoKTsKKworICByZXQgPSBnZGJh cmNoX3Byb2Nlc3NfcmVjb3JkIChnZGJhcmNoLAorCQkJCXJlZ2NhY2hlX3Jl YWRfcGMgKHJlY29yZF9yZWdjYWNoZSkpOworICBpZiAocmV0ID4gMCkKKyAg ICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGluZmVyaW9yIHByb2dyYW0g c3RvcHBlZC4iKSk7CisgIGlmIChyZXQgPCAwKQorICAgIGVycm9yIChfKCJQ cm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVjdXRpb24gbG9n LiIpKTsKKworICBkaXNjYXJkX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOwor CisgIHJlY29yZF9saXN0LT5uZXh0ID0gcmVjb3JkX2FyY2hfbGlzdF9oZWFk OworICByZWNvcmRfYXJjaF9saXN0X2hlYWQtPnByZXYgPSByZWNvcmRfbGlz dDsKKyAgcmVjb3JkX2xpc3QgPSByZWNvcmRfYXJjaF9saXN0X3RhaWw7CisK KyAgaWYgKHJlY29yZF9pbnNuX251bSA9PSByZWNvcmRfaW5zbl9tYXhfbnVt ICYmIHJlY29yZF9pbnNuX21heF9udW0pCisgICAgcmVjb3JkX2xpc3RfcmVs ZWFzZV9maXJzdCAoKTsKKyAgZWxzZQorICAgIHJlY29yZF9pbnNuX251bSsr OworfQorCisvKiBUaGluZ3MgdG8gY2xlYW4gdXAgaWYgd2UgZXJyb3Igb3Ig UVVJVCBvdXQgb2YgZnVuY3Rpb24gdGhhdCBzZXQKKyAgIHJlY29yZF9nZGJf b3BlcmF0aW9uX2Rpc2FibGUgKGllLiBjb21tYW5kIHRoYXQgY2F1c2VkIHRh cmdldF93YWl0IHRvIGJlIGNhbGxlZCkuICAqLworc3RhdGljIHZvaWQKK3Jl Y29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGVfY2xlYW51cHMgKHZvaWQgKmln bm9yZSkKK3sKKyAgcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZSA9IDA7 Cit9CisKK3N0cnVjdCBjbGVhbnVwICoKK3JlY29yZF9nZGJfb3BlcmF0aW9u X2Rpc2FibGVfc2V0ICh2b2lkKQoreworICBzdHJ1Y3QgY2xlYW51cCAqb2xk X2NsZWFudXBzID0gbWFrZV9jbGVhbnVwIChyZWNvcmRfZ2RiX29wZXJhdGlv bl9kaXNhYmxlX2NsZWFudXBzLCAwKTsKKyAgcmVjb3JkX2dkYl9vcGVyYXRp b25fZGlzYWJsZSA9IDE7CisKKyAgcmV0dXJuIG9sZF9jbGVhbnVwczsKK30K Kworc3RhdGljIHZvaWQKK3JlY29yZF9vcGVuIChjaGFyICpuYW1lLCBpbnQg ZnJvbV90dHkpCit7CisgIHN0cnVjdCB0YXJnZXRfb3BzICp0OworCisgIGlm IChyZWNvcmRfZGVidWcpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9vcGVuXG4iKTsKKwor ICAvKiBjaGVjayBleGVjICovCisgIGlmICghdGFyZ2V0X2hhc19leGVjdXRp b24pCisgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiB0aGUgcHJvZ3Jh bSBpcyBub3QgYmVpbmcgcnVuLiIpKTsKKyAgaWYgKG5vbl9zdG9wKQorICAg IGVycm9yIChfKCJQcm9jZXNzIHJlY29yZCB0YXJnZXQgY2FuJ3QgZGVidWcg aW5mZXJpb3IgaW4gbm9uLXN0b3AgbW9kZSAiCisJICAgICAiKG5vbi1zdG9w KS4iKSk7CisgIGlmICh0YXJnZXRfYXN5bmNfcGVybWl0dGVkKQorICAgIGVy cm9yIChfKCJQcm9jZXNzIHJlY29yZCB0YXJnZXQgY2FuJ3QgZGVidWcgaW5m ZXJpb3IgaW4gYXN5bmNocm9ub3VzICIKKwkgICAgICJtb2RlICh0YXJnZXQt YXN5bmMpLiIpKTsKKworICBpZiAoIWdkYmFyY2hfcHJvY2Vzc19yZWNvcmRf cCAoY3VycmVudF9nZGJhcmNoKSkKKyAgICBlcnJvciAoXygiUHJvY2VzcyBy ZWNvcmQ6IHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBkb2Vzbid0IHN1cHBv cnQgIgorCSAgICAgInJlY29yZCBmdW5jdGlvbi4iKSk7CisKKyAgLyogQ2hl Y2sgaWYgcmVjb3JkIHRhcmdldCBpcyBhbHJlYWR5IHJ1bm5pbmcuICAqLwor ICBpZiAoVEFSR0VUX0lTX1BST0NFU1NfUkVDT1JEKQorICAgIHsKKyAgICAg IGlmICghbnF1ZXJ5CisJICAoXygiUHJvY2VzcyByZWNvcmQgdGFyZ2V0IGFs cmVhZHkgcnVubmluZywgZG8geW91IHdhbnQgdG8gZGVsZXRlICIKKwkgICAg ICJ0aGUgb2xkIHJlY29yZCBsb2c/IikpKQorCXJldHVybjsKKyAgICB9CisK KyAgLyogU2V0IHRoZSBiZW5lYXRoIGZ1bmN0aW9uIHBvaW50ZXJzLiAgKi8K KyAgZm9yICh0ID0gY3VycmVudF90YXJnZXQuYmVuZWF0aDsgdCAhPSBOVUxM OyB0ID0gdC0+YmVuZWF0aCkKKyAgICB7CisgICAgICBpZiAoIXJlY29yZF9i ZW5lYXRoX3RvX3Jlc3VtZSkKKwlyZWNvcmRfYmVuZWF0aF90b19yZXN1bWUg PSB0LT50b19yZXN1bWU7CisgICAgICBpZiAoIXJlY29yZF9iZW5lYXRoX3Rv X3dhaXQpCisJcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCA9IHQtPnRvX3dhaXQ7 CisgICAgICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVy cykKKwlyZWNvcmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMgPSB0LT50 b19zdG9yZV9yZWdpc3RlcnM7CisgICAgICBpZiAoIXJlY29yZF9iZW5lYXRo X3RvX3hmZXJfcGFydGlhbCkKKwlyZWNvcmRfYmVuZWF0aF90b194ZmVyX3Bh cnRpYWwgPSB0LT50b194ZmVyX3BhcnRpYWw7CisgICAgICBpZiAoIXJlY29y ZF9iZW5lYXRoX3RvX2luc2VydF9icmVha3BvaW50KQorCXJlY29yZF9iZW5l YXRoX3RvX2luc2VydF9icmVha3BvaW50ID0gdC0+dG9faW5zZXJ0X2JyZWFr cG9pbnQ7CisgICAgICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9i cmVha3BvaW50KQorCXJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3Bv aW50ID0gdC0+dG9fcmVtb3ZlX2JyZWFrcG9pbnQ7CisgICAgfQorICBpZiAo IXJlY29yZF9iZW5lYXRoX3RvX3Jlc3VtZSkKKyAgICBlcnJvciAoXygiUHJv Y2VzcyByZWNvcmQgY2FuJ3QgZ2V0IHRvX3Jlc3VtZS4iKSk7CisgIGlmICgh cmVjb3JkX2JlbmVhdGhfdG9fd2FpdCkKKyAgICBlcnJvciAoXygiUHJvY2Vz cyByZWNvcmQgY2FuJ3QgZ2V0IHRvX3dhaXQuIikpOworICBpZiAoIXJlY29y ZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVycykKKyAgICBlcnJvciAoXygi UHJvY2VzcyByZWNvcmQgY2FuJ3QgZ2V0IHRvX3N0b3JlX3JlZ2lzdGVycy4i KSk7CisgIGlmICghcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsKQor ICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9feGZl cl9wYXJ0aWFsLiIpKTsKKyAgaWYgKCFyZWNvcmRfYmVuZWF0aF90b19pbnNl cnRfYnJlYWtwb2ludCkKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQg Y2FuJ3QgZ2V0IHRvX2luc2VydF9icmVha3BvaW50LiIpKTsKKyAgaWYgKCFy ZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCkKKyAgICBlcnJv ciAoXygiUHJvY2VzcyByZWNvcmQgY2FuJ3QgZ2V0IHRvX3JlbW92ZV9icmVh a3BvaW50LiIpKTsKKworICBwdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOwor CisgIC8qIFJlc2V0ICovCisgIHJlY29yZF9pbnNuX251bSA9IDA7CisgIHJl Y29yZF9saXN0ID0gJnJlY29yZF9maXJzdDsKKyAgcmVjb3JkX2xpc3QtPm5l eHQgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2Nsb3NlIChp bnQgcXVpdHRpbmcpCit7CisgIGlmIChyZWNvcmRfZGVidWcpCisgICAgZnBy aW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6 IHJlY29yZF9jbG9zZVxuIik7CisKKyAgcmVjb3JkX2xpc3RfcmVsZWFzZSAo cmVjb3JkX2xpc3QpOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX3Jlc3Vt ZSAocHRpZF90IHB0aWQsIGludCBzdGVwLCBlbnVtIHRhcmdldF9zaWduYWwg c2lnZ25hbCkKK3sKKyAgcmVjb3JkX3Jlc3VtZV9zdGVwID0gc3RlcDsKKyAg cmVjb3JkX3Jlc3VtZV9zaWdnbmFsID0gc2lnZ25hbDsKKworICBpZiAoIVJF Q09SRF9JU19SRVBMQVkpCisgICAgeworICAgICAgcmVjb3JkX21lc3NhZ2Ug KGN1cnJlbnRfZ2RiYXJjaCk7CisgICAgICByZWNvcmRfYmVuZWF0aF90b19y ZXN1bWUgKHB0aWQsIDEsIHNpZ2duYWwpOworICAgIH0KK30KKworc3RhdGlj IHZvaWQKK3JlY29yZF9zaWdfaGFuZGxlciAoaW50IHNpZ25vKQoreworICBp ZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiBnZXQgYSBzaWduYWxcbiIpOwor CisgIHJlY29yZF9yZXN1bWVfc3RlcCA9IDE7CisgIHJlY29yZF9nZXRfc2ln ID0gMTsKK30KKworc3RhdGljIHZvaWQKK3JlY29yZF93YWl0X2NsZWFudXBz ICh2b2lkICppZ25vcmUpCit7CisgIGlmIChleGVjdXRpb25fZGlyZWN0aW9u ID09IEVYRUNfUkVWRVJTRSkKKyAgICB7CisgICAgICBpZiAocmVjb3JkX2xp c3QtPm5leHQpCisJcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+bmV4dDsK KyAgICB9CisgIGVsc2UKKyAgICByZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0 LT5wcmV2OworCisgIHNldF9leGVjdXRpbmcgKGluZmVyaW9yX3B0aWQsIDAp OworICByZWNvcmRfbm9ybWFsX3N0b3AgKCk7Cit9CisKKy8qIHJlY29yZF93 YWl0CisgICBJbiByZXBsYXkgbW9kZSwgdGhpcyBmdW5jdGlvbiBleGFtaW5l cyB0aGUgcmVjb3JkZWQgbG9nIGFuZAorICAgZGV0ZXJtaW5lcyB3aGVyZSB0 byBzdG9wLiAgKi8KKworc3RhdGljIHB0aWRfdAorcmVjb3JkX3dhaXQgKHN0 cnVjdCB0YXJnZXRfb3BzICpvcHMsCisgICAgICAgICAgICAgIHB0aWRfdCBw dGlkLCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sKKyAg c3RydWN0IGNsZWFudXAgKnNldF9jbGVhbnVwcyA9IHJlY29yZF9nZGJfb3Bl cmF0aW9uX2Rpc2FibGVfc2V0ICgpOworCisgIGlmIChyZWNvcmRfZGVidWcp CisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJIlBy b2Nlc3MgcmVjb3JkOiByZWNvcmRfd2FpdCAiCisJCQkicmVjb3JkX3Jlc3Vt ZV9zdGVwID0gJWRcbiIsCisJCQlyZWNvcmRfcmVzdW1lX3N0ZXApOworCisg IGlmICghUkVDT1JEX0lTX1JFUExBWSkKKyAgICB7CisgICAgICBpZiAocmVj b3JkX3Jlc3VtZV9zdGVwKQorCXsKKwkgIC8qIFRoaXMgaXMgYSBzaW5nbGUg c3RlcC4gICovCisJICByZXR1cm4gcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCAo ZmluZF90YXJnZXRfYmVuZWF0aCAob3BzKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aWQsIHN0 YXR1cyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChyZWNvcmRfcmVz dW1lX3N0ZXApCisJICAgIHsKKwkgICAgICAvKiBUaGlzIGlzIGEgc2luZ2xl IHN0ZXAuICAqLworCSAgICAgIHJldHVybiByZWNvcmRfYmVuZWF0aF90b193 YWl0IChmaW5kX3RhcmdldF9iZW5lYXRoIChvcHMpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHB0aWQsIHN0YXR1cyk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAg ICAgIC8qIFRoaXMgaXMgbm90IGEgc2luZ2xlIHN0ZXAuICAqLworCSAgICAg IHB0aWRfdCByZXQ7CisJICAgICAgaW50IGlzX2JyZWFrcG9pbnQgPSAxOwor CSAgICAgIENPUkVfQUREUiBwYyA9IDA7CisJICAgICAgaW50IHBjX2lzX3Jl YWQgPSAwOworCSAgICAgIHN0cnVjdCBicF9sb2NhdGlvbiAqYmw7CisJICAg ICAgc3RydWN0IGJyZWFrcG9pbnQgKmI7CisKKwkgICAgICBkbworCQl7CisJ CSAgcmV0ID0gcmVjb3JkX2JlbmVhdGhfdG9fd2FpdCAoZmluZF90YXJnZXRf YmVuZWF0aCAob3BzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aWQsIHN0YXR1cyk7 CisKKwkJICBpZiAoc3RhdHVzLT5raW5kID09IFRBUkdFVF9XQUlUS0lORF9T VE9QUEVECisJCSAgICAgICYmIHN0YXR1cy0+dmFsdWUuc2lnID09IFRBUkdF VF9TSUdOQUxfVFJBUCkKKwkJICAgIHsKKwkJICAgICAgLyogQ2hlY2sgaWYg dGhlcmUgaXMgYSBicmVha3BvaW50LiAgKi8KKwkJICAgICAgcGNfaXNfcmVh ZCA9IDA7CisJCSAgICAgIHJlZ2lzdGVyc19jaGFuZ2VkICgpOworCQkgICAg ICBmb3IgKGJsID0gYnBfbG9jYXRpb25fY2hhaW47IGJsOyBibCA9IGJsLT5n bG9iYWxfbmV4dCkKKwkJCXsKKwkJCSAgYiA9IGJsLT5vd25lcjsKKwkJCSAg Z2RiX2Fzc2VydCAoYik7CisJCQkgIGlmIChiLT5lbmFibGVfc3RhdGUgIT0g YnBfZW5hYmxlZAorCQkJICAgICAgJiYgYi0+ZW5hYmxlX3N0YXRlICE9IGJw X3Blcm1hbmVudCkKKwkJCSAgICBjb250aW51ZTsKKwkJCSAgaWYgKCFwY19p c19yZWFkKQorCQkJICAgIHsKKwkJCSAgICAgIHBjID0KKwkJCQlyZWdjYWNo ZV9yZWFkX3BjIChnZXRfdGhyZWFkX3JlZ2NhY2hlIChyZXQpKTsKKwkJCSAg ICAgIHBjX2lzX3JlYWQgPSAxOworCQkJICAgIH0KKwkJCSAgc3dpdGNoIChi LT50eXBlKQorCQkJICAgIHsKKwkJCSAgICBkZWZhdWx0OgorCQkJICAgICAg aWYgKGJsLT5hZGRyZXNzID09IHBjKQorCQkJCWdvdG8gYnJlYWtwb2ludDsK KwkJCSAgICAgIGJyZWFrOworCisJCQkgICAgY2FzZSBicF93YXRjaHBvaW50 OgorCQkJICAgICAgLyogWFhYIHRlYXdhdGVyOiBJIHN0aWxsIG5vdCB2ZXJ5 IGNsZWFyIGhvdyB0bworCQkJCSBkZWFsIHdpdGggaXQuICAqLworCQkJICAg ICAgZ290byBicmVha3BvaW50OworCQkJICAgICAgYnJlYWs7CisKKwkJCSAg ICBjYXNlIGJwX2NhdGNocG9pbnQ6CisJCQkgICAgICBnZGJfYXNzZXJ0IChi LT5vcHMgIT0gTlVMTAorCQkJCQkgICYmIGItPm9wcy0+YnJlYWtwb2ludF9o aXQgIT0gTlVMTCk7CisJCQkgICAgICBpZiAoYi0+b3BzLT5icmVha3BvaW50 X2hpdCAoYikpCisJCQkJZ290byBicmVha3BvaW50OworCQkJICAgICAgYnJl YWs7CisKKwkJCSAgICBjYXNlIGJwX2hhcmR3YXJlX3dhdGNocG9pbnQ6CisJ CQkgICAgY2FzZSBicF9yZWFkX3dhdGNocG9pbnQ6CisJCQkgICAgY2FzZSBi cF9hY2Nlc3Nfd2F0Y2hwb2ludDoKKwkJCSAgICAgIGlmIChTVE9QUEVEX0JZ X1dBVENIUE9JTlQgKDApKQorCQkJCWdvdG8gYnJlYWtwb2ludDsKKwkJCSAg ICAgIGJyZWFrOworCQkJICAgIH0KKwkJCX0KKworCQkgICAgICAvKiBUaGVy ZSBpcyBub3QgYSBicmVha3BvaW50LiAgKi8KKwkJICAgICAgcmVjb3JkX21l c3NhZ2UgKGN1cnJlbnRfZ2RiYXJjaCk7CisJCSAgICAgIHJlY29yZF9iZW5l YXRoX3RvX3Jlc3VtZSAocHRpZCwgMSwKKwkJCQkJCXJlY29yZF9yZXN1bWVf c2lnZ25hbCk7CisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgfQorCisJCSAg aXNfYnJlYWtwb2ludCA9IDA7CisKKwkJYnJlYWtwb2ludDoKKwkJICAvKiBB ZGQgZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrIHRvIHBjIGJlY2F1c2Ug Z2RiIHdpbGwKKwkJICAgICBleHBlY3QgdGhlIHBjIHRvIGJlIGF0IGFkZHJl c3MgcGx1cyBkZWNyX3BjX2FmdGVyX2JyZWFrCisJCSAgICAgd2hlbiB0aGUg aW5mZXJpb3Igc3RvcHMgYXQgYSBicmVha3BvaW50LiAgKi8KKwkJICBpZiAo aXNfYnJlYWtwb2ludCkKKwkJICAgIHsKKwkJICAgICAgQ09SRV9BRERSIGRl Y3JfcGNfYWZ0ZXJfYnJlYWsgPQorCQkJZ2RiYXJjaF9kZWNyX3BjX2FmdGVy X2JyZWFrIChjdXJyZW50X2dkYmFyY2gpOworCQkgICAgICBpZiAoZGVjcl9w Y19hZnRlcl9icmVhaykKKwkJCXsKKwkJCSAgaWYgKCFwY19pc19yZWFkKQor CQkJICAgIHBjID0KKwkJCSAgICAgIHJlZ2NhY2hlX3JlYWRfcGMgKGdldF90 aHJlYWRfcmVnY2FjaGUgKHJldCkpOworCQkJICByZWdjYWNoZV93cml0ZV9w YyAoZ2V0X3RocmVhZF9yZWdjYWNoZSAocmV0KSwKKwkJCQkJICAgICBwYyAr IGRlY3JfcGNfYWZ0ZXJfYnJlYWspOworCQkJfQorCQkgICAgfQorCisJCSAg YnJlYWs7CisJCX0KKwkgICAgICB3aGlsZSAoMSk7CisKKwkgICAgICByZXR1 cm4gcmV0OworCSAgICB9CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAg ICAgIGludCBuZWVkX2Rhc20gPSAwOworICAgICAgc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSA9IGdldF9jdXJyZW50X3JlZ2NhY2hlICgpOworICAgICAg aW50IGNvbnRpbnVlX2ZsYWcgPSAxOworICAgICAgaW50IGZpcnN0X3JlY29y ZF9lbmQgPSAxOworICAgICAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVw cyA9IG1ha2VfY2xlYW51cCAocmVjb3JkX3dhaXRfY2xlYW51cHMsIDApOwor ICAgICAgQ09SRV9BRERSIHRtcF9wYzsKKworICAgICAgc3RhdHVzLT5raW5k ID0gVEFSR0VUX1dBSVRLSU5EX1NUT1BQRUQ7CisKKyAgICAgIC8qIENoZWNr IGJyZWFrcG9pbnQgd2hlbiBmb3J3YXJkIGV4ZWN1dGUuICAqLworICAgICAg aWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEKQorCXsK KwkgIHRtcF9wYyA9IHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hlKTsKKwkg IGlmIChicmVha3BvaW50X2luc2VydGVkX2hlcmVfcCAodG1wX3BjKSkKKwkg ICAgeworCSAgICAgIGlmIChyZWNvcmRfZGVidWcpCisJCWZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkgICAgIlByb2Nlc3MgcmVjb3Jk OiBicmVhayBhdCAweCVzLlxuIiwKKwkJCQkgICAgcGFkZHJfbnogKHRtcF9w YykpOworCSAgICAgIGlmIChnZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsg KGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpCisJCSAgJiYgIXJlY29y ZF9yZXN1bWVfc3RlcCkKKwkJcmVnY2FjaGVfd3JpdGVfcGMgKHJlZ2NhY2hl LAorCQkJCSAgIHRtcF9wYyArCisJCQkJICAgZ2RiYXJjaF9kZWNyX3BjX2Fm dGVyX2JyZWFrCisJCQkJICAgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNo ZSkpKTsKKwkgICAgICBnb3RvIHJlcGxheV9vdXQ7CisJICAgIH0KKwl9CisK KyAgICAgIHJlY29yZF9nZXRfc2lnID0gMDsKKyAgICAgIHNpZ25hbCAoU0lH SU5ULCByZWNvcmRfc2lnX2hhbmRsZXIpOworICAgICAgLyogSWYgR0RCIGlz IGluIHRlcm1pbmFsX2luZmVyaW9yIG1vZGUsIGl0IHdpbGwgbm90IGdldCB0 aGUgc2lnbmFsLgorICAgICAgICAgQW5kIGluIEdEQiByZXBsYXkgbW9kZSwg R0RCIGRvZXNuJ3QgbmVlZCB0byBiZSBpbiB0ZXJtaW5hbF9pbmZlcmlvcgor ICAgICAgICAgbW9kZSwgYmVjYXVzZSBpbmZlcmlvciB3aWxsIG5vdCBleGVj dXRlZC4KKyAgICAgICAgIFRoZW4gc2V0IGl0IHRvIHRlcm1pbmFsX291cnMg dG8gbWFrZSBHREIgZ2V0IHRoZSBzaWduYWwuICAqLworICAgICAgdGFyZ2V0 X3Rlcm1pbmFsX291cnMgKCk7CisKKyAgICAgIC8qIEluIEVYRUNfRk9SV0FS RCBtb2RlLCByZWNvcmRfbGlzdCBwb2ludHMgdG8gdGhlIHRhaWwgb2YgcHJl dgorICAgICAgICAgaW5zdHJ1Y3Rpb24uICAqLworICAgICAgaWYgKGV4ZWN1 dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19GT1JXQVJEICYmIHJlY29yZF9saXN0 LT5uZXh0KQorCXJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPm5leHQ7CisK KyAgICAgIC8qIExvb3Agb3ZlciB0aGUgcmVjb3JkX2xpc3QsIGxvb2tpbmcg Zm9yIHRoZSBuZXh0IHBsYWNlIHRvCisJIHN0b3AuICAqLworICAgICAgZG8K Kwl7CisJICAvKiBDaGVjayBmb3IgYmVnaW5uaW5nIGFuZCBlbmQgb2YgbG9n LiAgKi8KKwkgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVW RVJTRQorCSAgICAgICYmIHJlY29yZF9saXN0ID09ICZyZWNvcmRfZmlyc3Qp CisJICAgIHsKKwkgICAgICAvKiBIaXQgYmVnaW5uaW5nIG9mIHJlY29yZCBs b2cgaW4gcmV2ZXJzZS4gICovCisJICAgICAgc3RhdHVzLT5raW5kID0gVEFS R0VUX1dBSVRLSU5EX05PX0hJU1RPUlk7CisJICAgICAgYnJlYWs7CisJICAg IH0KKwkgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uICE9IEVYRUNfUkVWRVJT RSAmJiAhcmVjb3JkX2xpc3QtPm5leHQpCisJICAgIHsKKwkgICAgICAvKiBI aXQgZW5kIG9mIHJlY29yZCBsb2cgZ29pbmcgZm9yd2FyZC4gICovCisJICAg ICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX05PX0hJU1RPUlk7 CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgLyogU2V0IHB0aWQsIHJl Z2lzdGVyIGFuZCBtZW1vcnkgYWNjb3JkaW5nIHRvIHJlY29yZF9saXN0LiAg Ki8KKwkgIGlmIChyZWNvcmRfbGlzdC0+dHlwZSA9PSByZWNvcmRfcmVnKQor CSAgICB7CisJICAgICAgLyogcmVnICovCisJICAgICAgZ2RiX2J5dGUgcmVn W01BWF9SRUdJU1RFUl9TSVpFXTsKKwkgICAgICBpZiAocmVjb3JkX2RlYnVn ID4gMSkKKwkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJ CSAgICAiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF9yZWcgJXMgdG8gIgorCQkJ CSAgICAiaW5mZXJpb3IgbnVtID0gJWQuXG4iLAorCQkJCSAgICBob3N0X2Fk ZHJlc3NfdG9fc3RyaW5nIChyZWNvcmRfbGlzdCksCisJCQkJICAgIHJlY29y ZF9saXN0LT51LnJlZy5udW0pOworCSAgICAgIHJlZ2NhY2hlX2Nvb2tlZF9y ZWFkIChyZWdjYWNoZSwgcmVjb3JkX2xpc3QtPnUucmVnLm51bSwgcmVnKTsK KwkgICAgICByZWdjYWNoZV9jb29rZWRfd3JpdGUgKHJlZ2NhY2hlLCByZWNv cmRfbGlzdC0+dS5yZWcubnVtLAorCQkJCSAgICAgcmVjb3JkX2xpc3QtPnUu cmVnLnZhbCk7CisJICAgICAgbWVtY3B5IChyZWNvcmRfbGlzdC0+dS5yZWcu dmFsLCByZWcsIE1BWF9SRUdJU1RFUl9TSVpFKTsKKwkgICAgfQorCSAgZWxz ZSBpZiAocmVjb3JkX2xpc3QtPnR5cGUgPT0gcmVjb3JkX21lbSkKKwkgICAg eworCSAgICAgIC8qIG1lbSAqLworCSAgICAgIGdkYl9ieXRlICptZW0gPSBh bGxvY2EgKHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOworCSAgICAgIGlmIChy ZWNvcmRfZGVidWcgPiAxKQorCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z dGRsb2csCisJCQkJICAgICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX21lbSAl cyB0byAiCisJCQkJICAgICJpbmZlcmlvciBhZGRyID0gMHglcyBsZW4gPSAl ZC5cbiIsCisJCQkJICAgIGhvc3RfYWRkcmVzc190b19zdHJpbmcgKHJlY29y ZF9saXN0KSwKKwkJCQkgICAgcGFkZHJfbnogKHJlY29yZF9saXN0LT51Lm1l bS5hZGRyKSwKKwkJCQkgICAgcmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisK KwkgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5CisJCSAgKHJlY29yZF9s aXN0LT51Lm1lbS5hZGRyLCBtZW0sIHJlY29yZF9saXN0LT51Lm1lbS5sZW4p KQorCQllcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcg bWVtb3J5IGF0ICIKKwkJCSAiYWRkciA9IDB4JXMgbGVuID0gJWQuIiksCisJ CSAgICAgICBwYWRkcl9ueiAocmVjb3JkX2xpc3QtPnUubWVtLmFkZHIpLAor CQkgICAgICAgcmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisKKwkgICAgICBp ZiAodGFyZ2V0X3dyaXRlX21lbW9yeQorCQkgIChyZWNvcmRfbGlzdC0+dS5t ZW0uYWRkciwgcmVjb3JkX2xpc3QtPnUubWVtLnZhbCwKKwkJICAgcmVjb3Jk X2xpc3QtPnUubWVtLmxlbikpCisJCWVycm9yIChfCisJCSAgICAgICAoIlBy b2Nlc3MgcmVjb3JkOiBlcnJvciB3cml0aW5nIG1lbW9yeSBhdCAiCisJCQki YWRkciA9IDB4JXMgbGVuID0gJWQuIiksCisJCSAgICAgICBwYWRkcl9ueiAo cmVjb3JkX2xpc3QtPnUubWVtLmFkZHIpLAorCQkgICAgICAgcmVjb3JkX2xp c3QtPnUubWVtLmxlbik7CisKKwkgICAgICBtZW1jcHkgKHJlY29yZF9saXN0 LT51Lm1lbS52YWwsIG1lbSwgcmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisJ ICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGlmIChyZWNvcmRfZGVi dWcgPiAxKQorCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ CQkJICAgICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2VuZCAlcyB0byAiCisJ CQkJICAgICJpbmZlcmlvciBuZWVkX2Rhc20gPSAlZC5cbiIsCisJCQkJICAg IGhvc3RfYWRkcmVzc190b19zdHJpbmcgKHJlY29yZF9saXN0KSwKKwkJCQkg ICAgcmVjb3JkX2xpc3QtPnUubmVlZF9kYXNtKTsKKworCSAgICAgIGlmIChl eGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FSRCkKKwkJbmVlZF9k YXNtID0gcmVjb3JkX2xpc3QtPnUubmVlZF9kYXNtOworCSAgICAgIGlmIChu ZWVkX2Rhc20pCisJCWdkYmFyY2hfcHJvY2Vzc19yZWNvcmRfZGFzbSAoY3Vy cmVudF9nZGJhcmNoKTsKKworCSAgICAgIGlmIChmaXJzdF9yZWNvcmRfZW5k ICYmIGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQorCQl7 CisJCSAgLyogV2hlbiByZXZlcnNlIGV4Y3V0ZSwgdGhlIGZpcnN0IHJlY29y ZF9lbmQgaXMgdGhlIHBhcnQgb2YKKwkJICAgICBjdXJyZW50IGluc3RydWN0 aW9uLiAgKi8KKwkJICBmaXJzdF9yZWNvcmRfZW5kID0gMDsKKwkJfQorCSAg ICAgIGVsc2UKKwkJeworCQkgIC8qIEluIEVYRUNfUkVWRVJTRSBtb2RlLCB0 aGlzIGlzIHRoZSByZWNvcmRfZW5kIG9mIHByZXYKKwkJICAgICBpbnN0cnVj dGlvbi4KKwkJICAgICBJbiBFWEVDX0ZPUldBUkQgbW9kZSwgdGhpcyBpcyB0 aGUgcmVjb3JkX2VuZCBvZiBjdXJyZW50CisJCSAgICAgaW5zdHJ1Y3Rpb24u ICAqLworCQkgIC8qIHN0ZXAgKi8KKwkJICBpZiAocmVjb3JkX3Jlc3VtZV9z dGVwKQorCQkgICAgeworCQkgICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkK KwkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJICAg ICJQcm9jZXNzIHJlY29yZDogc3RlcC5cbiIpOworCQkgICAgICBjb250aW51 ZV9mbGFnID0gMDsKKwkJICAgIH0KKworCQkgIC8qIGNoZWNrIGJyZWFrcG9p bnQgKi8KKwkJICB0bXBfcGMgPSByZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNo ZSk7CisJCSAgaWYgKGJyZWFrcG9pbnRfaW5zZXJ0ZWRfaGVyZV9wICh0bXBf cGMpKQorCQkgICAgeworCQkgICAgICBpZiAocmVjb3JkX2RlYnVnKQorCQkJ ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCQkgICAgIlBy b2Nlc3MgcmVjb3JkOiBicmVhayAiCisJCQkJCSAgICAiYXQgMHglcy5cbiIs CisJCQkJCSAgICBwYWRkcl9ueiAodG1wX3BjKSk7CisJCSAgICAgIGlmIChn ZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsgKGdldF9yZWdjYWNoZV9hcmNo IChyZWdjYWNoZSkpCisJCQkgICYmIGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0g RVhFQ19GT1JXQVJECisJCQkgICYmICFyZWNvcmRfcmVzdW1lX3N0ZXApCisJ CQlyZWdjYWNoZV93cml0ZV9wYyAocmVnY2FjaGUsCisJCQkJCSAgIHRtcF9w YyArCisJCQkJCSAgIGdkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhaworCQkJ CQkgICAoZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSkpOworCQkgICAg ICBjb250aW51ZV9mbGFnID0gMDsKKwkJICAgIH0KKwkJfQorCSAgICAgIGlm IChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKwkJbmVl ZF9kYXNtID0gcmVjb3JkX2xpc3QtPnUubmVlZF9kYXNtOworCSAgICB9CisK K25leHQ6CisJICBpZiAoY29udGludWVfZmxhZykKKwkgICAgeworCSAgICAg IGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKwkJ eworCQkgIGlmIChyZWNvcmRfbGlzdC0+cHJldikKKwkJICAgIHJlY29yZF9s aXN0ID0gcmVjb3JkX2xpc3QtPnByZXY7CisJCX0KKwkgICAgICBlbHNlCisJ CXsKKwkJICBpZiAocmVjb3JkX2xpc3QtPm5leHQpCisJCSAgICByZWNvcmRf bGlzdCA9IHJlY29yZF9saXN0LT5uZXh0OworCQl9CisJICAgIH0KKwl9Cisg ICAgICB3aGlsZSAoY29udGludWVfZmxhZyk7CisKKyAgICAgIHNpZ25hbCAo U0lHSU5ULCBoYW5kbGVfc2lnaW50KTsKKworcmVwbGF5X291dDoKKyAgICAg IGlmIChyZWNvcmRfZ2V0X3NpZykKKwlzdGF0dXMtPnZhbHVlLnNpZyA9IFRB UkdFVF9TSUdOQUxfSU5UOworICAgICAgZWxzZQorCXN0YXR1cy0+dmFsdWUu c2lnID0gVEFSR0VUX1NJR05BTF9UUkFQOworCisgICAgICBkaXNjYXJkX2Ns ZWFudXBzIChvbGRfY2xlYW51cHMpOworICAgIH0KKworICBkb19jbGVhbnVw cyAoc2V0X2NsZWFudXBzKTsKKyAgcmV0dXJuIGluZmVyaW9yX3B0aWQ7Cit9 CisKK3N0YXRpYyB2b2lkCityZWNvcmRfZGlzY29ubmVjdCAoc3RydWN0IHRh cmdldF9vcHMgKnRhcmdldCwgY2hhciAqYXJncywgaW50IGZyb21fdHR5KQor eworICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfZGlzY29u bmVjdFxuIik7CisKKyAgdW5wdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOwor ICB0YXJnZXRfZGlzY29ubmVjdCAoYXJncywgZnJvbV90dHkpOworfQorCitz dGF0aWMgdm9pZAorcmVjb3JkX2RldGFjaCAoc3RydWN0IHRhcmdldF9vcHMg Km9wcywgY2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBpZiAocmVj b3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfZGV0YWNoXG4iKTsKKworICB1 bnB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7CisgIHRhcmdldF9kZXRhY2gg KGFyZ3MsIGZyb21fdHR5KTsKK30KKworc3RhdGljIHZvaWQKK3JlY29yZF9t b3Vybl9pbmZlcmlvciAoc3RydWN0IHRhcmdldF9vcHMgKm9wcykKK3sKKyAg aWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdk Yl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogIgorCQkJICAgICAgICAgICAg InJlY29yZF9tb3Vybl9pbmZlcmlvclxuIik7CisKKyAgdW5wdXNoX3Rhcmdl dCAoJnJlY29yZF9vcHMpOworICB0YXJnZXRfbW91cm5faW5mZXJpb3IgKCk7 Cit9CisKKy8qIENsb3NlIHByb2Nlc3MgcmVjb3JkIHRhcmdldCBiZWZvcmUg a2lsbGluZyB0aGUgaW5mZXJpb3IgcHJvY2Vzcy4gICovCitzdGF0aWMgdm9p ZAorcmVjb3JkX2tpbGwgKHZvaWQpCit7CisgIGlmIChyZWNvcmRfZGVidWcp CisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2Vz cyByZWNvcmQ6IHJlY29yZF9raWxsXG4iKTsKKworICB1bnB1c2hfdGFyZ2V0 ICgmcmVjb3JkX29wcyk7CisgIHRhcmdldF9raWxsICgpOworfQorCisvKiBS ZWNvcmQgcmVnaXN0ZXJzIGNoYW5nZSAoYnkgdXNlciBvciBieSBHREIpIHRv IGxpc3QgYXMgYW4gaW5zdHJ1Y3Rpb24uICAqLworc3RhdGljIHZvaWQKK3Jl Y29yZF9yZWdpc3RlcnNfY2hhbmdlIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2Nh Y2hlLCBpbnQgcmVnbnVtKQoreworICAvKiBDaGVjayByZWNvcmRfaW5zbl9u dW0uICAqLworICByZWNvcmRfY2hlY2tfaW5zbl9udW0gKDApOworCisgIHJl Y29yZF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7CisgIHJlY29yZF9hcmNoX2xp c3RfdGFpbCA9IE5VTEw7CisKKyAgcmVjb3JkX3JlZ2NhY2hlID0gZ2V0X2N1 cnJlbnRfcmVnY2FjaGUgKCk7CisKKyAgaWYgKHJlZ251bSA8IDApCisgICAg eworICAgICAgaW50IGk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2RiYXJj aF9udW1fcmVncyAoZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSk7IGkr KykKKwl7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChpKSkK KwkgICAgeworCSAgICAgIHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9h cmNoX2xpc3RfdGFpbCk7CisJICAgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVj b3JkOiBmYWlsZWQgdG8gcmVjb3JkIGV4ZWN1dGlvbiBsb2cuIikpOworCSAg ICB9CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKHJlZ251bSkpCisJeworCSAgcmVjb3Jk X2xpc3RfcmVsZWFzZSAocmVjb3JkX2FyY2hfbGlzdF90YWlsKTsKKwkgIGVy cm9yIChfKCJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVj dXRpb24gbG9nLiIpKTsKKwl9CisgICAgfQorICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfZW5kICgwKSkKKyAgICB7CisgICAgICByZWNvcmRfbGlzdF9y ZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworICAgICAgZXJyb3Ig KF8oIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkIGV4ZWN1dGlv biBsb2cuIikpOworICAgIH0KKyAgcmVjb3JkX2xpc3QtPm5leHQgPSByZWNv cmRfYXJjaF9saXN0X2hlYWQ7CisgIHJlY29yZF9hcmNoX2xpc3RfaGVhZC0+ cHJldiA9IHJlY29yZF9saXN0OworICByZWNvcmRfbGlzdCA9IHJlY29yZF9h cmNoX2xpc3RfdGFpbDsKKworICBpZiAocmVjb3JkX2luc25fbnVtID09IHJl Y29yZF9pbnNuX21heF9udW0gJiYgcmVjb3JkX2luc25fbWF4X251bSkKKyAg ICByZWNvcmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICgpOworICBlbHNlCisgICAg cmVjb3JkX2luc25fbnVtKys7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRf c3RvcmVfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBp bnQgcmVnbm8pCit7CisgIGlmICghcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlz YWJsZSkKKyAgICB7CisgICAgICBpZiAoUkVDT1JEX0lTX1JFUExBWSkKKwl7 CisJICBpbnQgbjsKKwkgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHM7 CisKKwkgIC8qIExldCB1c2VyIGNob29zZSBpZiBoZSB3YW50cyB0byB3cml0 ZSByZWdpc3RlciBvciBub3QuICAqLworCSAgaWYgKHJlZ25vIDwgMCkKKwkg ICAgbiA9CisJICAgICAgbnF1ZXJ5IChfKCJCZWNhdXNlIEdEQiBpcyBpbiBy ZXBsYXkgbW9kZSwgY2hhbmdpbmcgdGhlICIKKwkJCSJ2YWx1ZSBvZiBhIHJl Z2lzdGVyIHdpbGwgbWFrZSB0aGUgZXhlY3V0aW9uICIKKwkJCSJsb2cgdW51 c2FibGUgZnJvbSB0aGlzIHBvaW50IG9ud2FyZC4gICIKKwkJCSJDaGFuZ2Ug YWxsIHJlZ2lzdGVycz8iKSk7CisJICBlbHNlCisJICAgIG4gPQorCSAgICAg IG5xdWVyeSAoXygiQmVjYXVzZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIGNo YW5naW5nIHRoZSB2YWx1ZSAiCisJCQkib2YgYSByZWdpc3RlciB3aWxsIG1h a2UgdGhlIGV4ZWN1dGlvbiBsb2cgdW51c2FibGUgIgorCQkJImZyb20gdGhp cyBwb2ludCBvbndhcmQuICBDaGFuZ2UgcmVnaXN0ZXIgJXM/IiksCisJCSAg ICAgIGdkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoZ2V0X3JlZ2NhY2hlX2FyY2gg KHJlZ2NhY2hlKSwKKwkJCQkJICAgICAgIHJlZ25vKSk7CisKKwkgIGlmICgh bikKKwkgICAgeworCSAgICAgIC8qIEludmFsaWRhdGUgdGhlIHZhbHVlIG9m IHJlZ2NhY2hlIHRoYXQgd2FzIHNldCBpbiBmdW5jdGlvbgorCSAgICAgICAg ICJyZWdjYWNoZV9yYXdfd3JpdGUiLiAgKi8KKwkgICAgICBpZiAocmVnbm8g PCAwKQorCQl7CisJCSAgaW50IGk7CisJCSAgZm9yIChpID0gMDsKKwkJICAg ICAgIGkgPCBnZGJhcmNoX251bV9yZWdzIChnZXRfcmVnY2FjaGVfYXJjaCAo cmVnY2FjaGUpKTsKKwkJICAgICAgIGkrKykKKwkJICAgIHJlZ2NhY2hlX2lu dmFsaWRhdGUgKHJlZ2NhY2hlLCBpKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJ cmVnY2FjaGVfaW52YWxpZGF0ZSAocmVnY2FjaGUsIHJlZ25vKTsKKworCSAg ICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29yZCBjYW5jZWxlZCB0aGUgb3Bl cmF0aW9uLiIpKTsKKwkgICAgfQorCisJICAvKiBEZXN0cm95IHRoZSByZWNv cmQgZnJvbSBoZXJlIGZvcndhcmQuICAqLworCSAgcmVjb3JkX2xpc3RfcmVs ZWFzZV9uZXh0ICgpOworCX0KKworICAgICAgcmVjb3JkX3JlZ2lzdGVyc19j aGFuZ2UgKHJlZ2NhY2hlLCByZWdubyk7CisgICAgfQorICByZWNvcmRfYmVu ZWF0aF90b19zdG9yZV9yZWdpc3RlcnMgKHJlZ2NhY2hlLCByZWdubyk7Cit9 CisKKy8qIHJlY29yZF94ZmVyX3BhcnRpYWwgLS0gYmVoYXZpb3IgaXMgY29u ZGl0aW9uYWwgb24gUkVDT1JEX0lTX1JFUExBWS4KKyAgIEluIHJlcGxheSBt b2RlLCB3ZSBjYW5ub3Qgd3JpdGUgbWVtb3J5IHVubGVzIHdlIGFyZSB3aWxs aW5nIHRvCisgICBpbnZhbGlkYXRlIHRoZSByZWNvcmQvcmVwbGF5IGxvZyBm cm9tIHRoaXMgcG9pbnQgZm9yd2FyZC4gICovCisKK3N0YXRpYyBMT05HRVNU CityZWNvcmRfeGZlcl9wYXJ0aWFsIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3Bz LCBlbnVtIHRhcmdldF9vYmplY3Qgb2JqZWN0LAorCQkgICAgIGNvbnN0IGNo YXIgKmFubmV4LCBnZGJfYnl0ZSAqIHJlYWRidWYsCisJCSAgICAgY29uc3Qg Z2RiX2J5dGUgKiB3cml0ZWJ1ZiwgVUxPTkdFU1Qgb2Zmc2V0LCBMT05HRVNU IGxlbikKK3sKKyAgaWYgKCFyZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxl CisgICAgICAmJiAob2JqZWN0ID09IFRBUkdFVF9PQkpFQ1RfTUVNT1JZCisJ ICB8fCBvYmplY3QgPT0gVEFSR0VUX09CSkVDVF9SQVdfTUVNT1JZKSAmJiB3 cml0ZWJ1ZikKKyAgICB7CisgICAgICBpZiAoUkVDT1JEX0lTX1JFUExBWSkK Kwl7CisJICAvKiBMZXQgdXNlciBjaG9vc2UgaWYgaGUgd2FudHMgdG8gd3Jp dGUgbWVtb3J5IG9yIG5vdC4gICovCisJICBpZiAoIW5xdWVyeSAoXygiQmVj YXVzZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIHdyaXRpbmcgdG8gbWVtb3J5 ICIKKwkJICAgICAgICAgIndpbGwgbWFrZSB0aGUgZXhlY3V0aW9uIGxvZyB1 bnVzYWJsZSBmcm9tIHRoaXMgIgorCQkgICAgICAgICAicG9pbnQgb253YXJk LiAgV3JpdGUgbWVtb3J5IGF0IGFkZHJlc3MgMHglcz8iKSwKKwkJICAgICAg IHBhZGRyX256IChvZmZzZXQpKSkKKwkgICAgcmV0dXJuIC0xOworCisJICAv KiBEZXN0cm95IHRoZSByZWNvcmQgZnJvbSBoZXJlIGZvcndhcmQuICAqLwor CSAgcmVjb3JkX2xpc3RfcmVsZWFzZV9uZXh0ICgpOworCX0KKworICAgICAg LyogQ2hlY2sgcmVjb3JkX2luc25fbnVtICovCisgICAgICByZWNvcmRfY2hl Y2tfaW5zbl9udW0gKDApOworCisgICAgICAvKiBSZWNvcmQgcmVnaXN0ZXJz IGNoYW5nZSB0byBsaXN0IGFzIGFuIGluc3RydWN0aW9uLiAgKi8KKyAgICAg IHJlY29yZF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7CisgICAgICByZWNvcmRf YXJjaF9saXN0X3RhaWwgPSBOVUxMOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAob2Zmc2V0LCBsZW4pKQorCXsKKwkgIHJlY29yZF9s aXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7CisJICBpZiAo cmVjb3JkX2RlYnVnKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z dGRsb2csCisJCQkJXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNv cmQgIgorCQkJCSAgImV4ZWN1dGlvbiBsb2cuIikpOworCSAgcmV0dXJuIC0x OworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9lbmQgKDAp KQorCXsKKwkgIHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xp c3RfdGFpbCk7CisJICBpZiAocmVjb3JkX2RlYnVnKQorCSAgICBmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJXygiUHJvY2VzcyByZWNv cmQ6IGZhaWxlZCB0byByZWNvcmQgIgorCQkJCSAgImV4ZWN1dGlvbiBsb2cu IikpOworCSAgcmV0dXJuIC0xOworCX0KKyAgICAgIHJlY29yZF9saXN0LT5u ZXh0ID0gcmVjb3JkX2FyY2hfbGlzdF9oZWFkOworICAgICAgcmVjb3JkX2Fy Y2hfbGlzdF9oZWFkLT5wcmV2ID0gcmVjb3JkX2xpc3Q7CisgICAgICByZWNv cmRfbGlzdCA9IHJlY29yZF9hcmNoX2xpc3RfdGFpbDsKKworICAgICAgaWYg KHJlY29yZF9pbnNuX251bSA9PSByZWNvcmRfaW5zbl9tYXhfbnVtICYmIHJl Y29yZF9pbnNuX21heF9udW0pCisJcmVjb3JkX2xpc3RfcmVsZWFzZV9maXJz dCAoKTsKKyAgICAgIGVsc2UKKwlyZWNvcmRfaW5zbl9udW0rKzsKKyAgICB9 CisKKyAgcmV0dXJuIHJlY29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlhbCAo ZmluZF90YXJnZXRfYmVuZWF0aCAob3BzKSwgb2JqZWN0LAorCQkJCQkgYW5u ZXgsIHJlYWRidWYsIHdyaXRlYnVmLCBvZmZzZXQsCisJCQkJCSBsZW4pOwor fQorCisvKiByZWNvcmRfaW5zZXJ0X2JyZWFrcG9pbnQKKyAgIHJlY29yZF9y ZW1vdmVfYnJlYWtwb2ludAorICAgQmVoYXZpb3IgaXMgY29uZGl0aW9uYWwg b24gUkVDT1JEX0lTX1JFUExBWS4KKyAgIFdlIHdpbGwgbm90IGFjdHVhbGx5 IGluc2VydCBvciByZW1vdmUgYnJlYWtwb2ludHMgd2hlbiByZXBsYXlpbmcs CisgICBub3Igd2hlbiByZWNvcmRpbmcuICAqLworCitzdGF0aWMgaW50City ZWNvcmRfaW5zZXJ0X2JyZWFrcG9pbnQgKHN0cnVjdCBicF90YXJnZXRfaW5m byAqYnBfdGd0KQoreworICBpZiAoIVJFQ09SRF9JU19SRVBMQVkpCisgICAg eworICAgICAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IHJlY29y ZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGVfc2V0ICgpOworICAgICAgaW50IHJl dCA9IHJlY29yZF9iZW5lYXRoX3RvX2luc2VydF9icmVha3BvaW50IChicF90 Z3QpOworCisgICAgICBkb19jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKKwor ICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQKK3JlY29yZF9yZW1vdmVfYnJlYWtwb2ludCAoc3RydWN0 IGJwX3RhcmdldF9pbmZvICpicF90Z3QpCit7CisgIGlmICghUkVDT1JEX0lT X1JFUExBWSkKKyAgICB7CisgICAgICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2Ns ZWFudXBzID0gcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQgKCk7 CisgICAgICBpbnQgcmV0ID0gcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3ZlX2Jy ZWFrcG9pbnQgKGJwX3RndCk7CisKKyAgICAgIGRvX2NsZWFudXBzIChvbGRf Y2xlYW51cHMpOworCisgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVjb3JkX2Nhbl9leGVjdXRl X3JldmVyc2UgKHZvaWQpCit7CisgIHJldHVybiAxOworfQorCitzdGF0aWMg dm9pZAoraW5pdF9yZWNvcmRfb3BzICh2b2lkKQoreworICByZWNvcmRfb3Bz LnRvX3Nob3J0bmFtZSA9ICJyZWNvcmQiOworICByZWNvcmRfb3BzLnRvX2xv bmduYW1lID0gIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IjsK KyAgcmVjb3JkX29wcy50b19kb2MgPQorICAgICJMb2cgcHJvZ3JhbSB3aGls ZSBleGVjdXRpbmcgYW5kIHJlcGxheSBleGVjdXRpb24gZnJvbSBsb2cuIjsK KyAgcmVjb3JkX29wcy50b19vcGVuID0gcmVjb3JkX29wZW47CisgIHJlY29y ZF9vcHMudG9fY2xvc2UgPSByZWNvcmRfY2xvc2U7CisgIHJlY29yZF9vcHMu dG9fcmVzdW1lID0gcmVjb3JkX3Jlc3VtZTsKKyAgcmVjb3JkX29wcy50b193 YWl0ID0gcmVjb3JkX3dhaXQ7CisgIHJlY29yZF9vcHMudG9fZGlzY29ubmVj dCA9IHJlY29yZF9kaXNjb25uZWN0OworICByZWNvcmRfb3BzLnRvX2RldGFj aCA9IHJlY29yZF9kZXRhY2g7CisgIHJlY29yZF9vcHMudG9fbW91cm5faW5m ZXJpb3IgPSByZWNvcmRfbW91cm5faW5mZXJpb3I7CisgIHJlY29yZF9vcHMu dG9fa2lsbCA9IHJlY29yZF9raWxsOworICByZWNvcmRfb3BzLnRvX2NyZWF0 ZV9pbmZlcmlvciA9IGZpbmRfZGVmYXVsdF9jcmVhdGVfaW5mZXJpb3I7Cisg IHJlY29yZF9vcHMudG9fc3RvcmVfcmVnaXN0ZXJzID0gcmVjb3JkX3N0b3Jl X3JlZ2lzdGVyczsKKyAgcmVjb3JkX29wcy50b194ZmVyX3BhcnRpYWwgPSBy ZWNvcmRfeGZlcl9wYXJ0aWFsOworICByZWNvcmRfb3BzLnRvX2luc2VydF9i cmVha3BvaW50ID0gcmVjb3JkX2luc2VydF9icmVha3BvaW50OworICByZWNv cmRfb3BzLnRvX3JlbW92ZV9icmVha3BvaW50ID0gcmVjb3JkX3JlbW92ZV9i cmVha3BvaW50OworICByZWNvcmRfb3BzLnRvX2Nhbl9leGVjdXRlX3JldmVy c2UgPSByZWNvcmRfY2FuX2V4ZWN1dGVfcmV2ZXJzZTsKKyAgcmVjb3JkX29w cy50b19zdHJhdHVtID0gcmVjb3JkX3N0cmF0dW07CisgIHJlY29yZF9vcHMu dG9fbWFnaWMgPSBPUFNfTUFHSUM7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93 X3JlY29yZF9kZWJ1ZyAoc3RydWN0IHVpX2ZpbGUgKmZpbGUsIGludCBmcm9t X3R0eSwKKwkJICAgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmMsIGNvbnN0 IGNoYXIgKnZhbHVlKQoreworICBmcHJpbnRmX2ZpbHRlcmVkIChmaWxlLCBf KCJEZWJ1Z2dpbmcgb2YgcHJvY2VzcyByZWNvcmQgdGFyZ2V0IGlzICVzLlxu IiksCisJCSAgICB2YWx1ZSk7Cit9CisKKy8qIGNtZF9yZWNvcmRfc3RhcnQg LS0gYWxpYXMgZm9yICJ0YXJnZXQgcmVjb3JkIi4gICovCisKK3N0YXRpYyB2 b2lkCitjbWRfcmVjb3JkX3N0YXJ0IChjaGFyICphcmdzLCBpbnQgZnJvbV90 dHkpCit7CisgIGV4ZWN1dGVfY29tbWFuZCAoInRhcmdldCByZWNvcmQiLCBm cm9tX3R0eSk7Cit9CisKKy8qIGNtZF9yZWNvcmRfZGVsZXRlIC0tIHRydW5j YXRlIHRoZSByZWNvcmQgbG9nIGZyb20gdGhlIHByZXNlbnQgcG9pbnQKKyAg IG9mIHJlcGxheSB1bnRpbCB0aGUgZW5kLiAgKi8KKworc3RhdGljIHZvaWQK K2NtZF9yZWNvcmRfZGVsZXRlIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkp Cit7CisgIGlmIChUQVJHRVRfSVNfUFJPQ0VTU19SRUNPUkQpCisgICAgewor ICAgICAgaWYgKFJFQ09SRF9JU19SRVBMQVkpCisJeworCSAgaWYgKCFmcm9t X3R0eSB8fCBxdWVyeSAoXygiRGVsZXRlIHRoZSBsb2cgZnJvbSB0aGlzIHBv aW50IGZvcndhcmQgIgorCQkgICAgICAgICAgICAgICAgICAgICJhbmQgYmVn aW4gdG8gcmVjb3JkIHRoZSBydW5uaW5nIG1lc3NhZ2UgIgorCQkgICAgICAg ICAgICAgICAgICAgICJhdCBjdXJyZW50IFBDPyIpKSkKKwkgICAgcmVjb3Jk X2xpc3RfcmVsZWFzZV9uZXh0ICgpOworCX0KKyAgICAgIGVsc2UKKwkgIHBy aW50Zl91bmZpbHRlcmVkIChfKCJBbHJlYWR5IGF0IGVuZCBvZiByZWNvcmQg bGlzdC5cbiIpKTsKKworICAgIH0KKyAgZWxzZQorICAgIHByaW50Zl91bmZp bHRlcmVkIChfKCJQcm9jZXNzIHJlY29yZCBpcyBub3Qgc3RhcnRlZC5cbiIp KTsKK30KKworLyogY21kX3JlY29yZF9zdG9wIC0tIGltcGxlbWVudCB0aGUg InN0b3ByZWNvcmQiIGNvbW1hbmQuICAqLworCitzdGF0aWMgdm9pZAorY21k X3JlY29yZF9zdG9wIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCit7Cisg IGlmIChUQVJHRVRfSVNfUFJPQ0VTU19SRUNPUkQpCisgICAgeworICAgICAg aWYgKCFyZWNvcmRfbGlzdCB8fCAhZnJvbV90dHkgfHwgcXVlcnkgKF8oIkRl bGV0ZSByZWNvcmRlZCBsb2cgYW5kICIKKwkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgInN0b3AgcmVjb3JkaW5nPyIpKSkKKwl1 bnB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7CisgICAgfQorICBlbHNlCisg ICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGlzIG5v dCBzdGFydGVkLlxuIikpOworfQorCisvKiBzZXRfcmVjb3JkX2luc25fbWF4 X251bSAtLSBzZXQgdXBwZXIgbGltaXQgb2YgcmVjb3JkIGxvZyBzaXplLiAg Ki8KKworc3RhdGljIHZvaWQKK3NldF9yZWNvcmRfaW5zbl9tYXhfbnVtIChj aGFyICphcmdzLCBpbnQgZnJvbV90dHksIHN0cnVjdCBjbWRfbGlzdF9lbGVt ZW50ICpjKQoreworICBpZiAocmVjb3JkX2luc25fbnVtID4gcmVjb3JkX2lu c25fbWF4X251bSAmJiByZWNvcmRfaW5zbl9tYXhfbnVtKQorICAgIHsKKyAg ICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCJSZWNvcmQgaW5zdHJ1Y3Rpb25z IG51bWJlciBpcyBiaWdnZXIgdGhhbiAiCisJCSAgICAgICAgICAgInJlY29y ZCBpbnN0cnVjdGlvbnMgbWF4IG51bWJlci4gIEF1dG8gZGVsZXRlICIKKwkJ ICAgICAgICAgICAidGhlIGZpcnN0IG9uZXM/XG4iKSk7CisKKyAgICAgIHdo aWxlIChyZWNvcmRfaW5zbl9udW0gPiByZWNvcmRfaW5zbl9tYXhfbnVtKQor CXJlY29yZF9saXN0X3JlbGVhc2VfZmlyc3QgKCk7CisgICAgfQorfQorCisv KiBzaG93X3JlY29yZF9pbnNuX251bWJlciAtLSBwcmludCB0aGUgY3VycmVu dCBpbmRleAorICAgaW50byB0aGUgcmVjb3JkIGxvZyAobnVtYmVyIG9mIGlu c25zIHJlY29yZGVkIHNvIGZhcikuICAqLworCitzdGF0aWMgdm9pZAorc2hv d19yZWNvcmRfaW5zbl9udW1iZXIgKGNoYXIgKmlnbm9yZSwgaW50IGZyb21f dHR5KQoreworICBwcmludGZfdW5maWx0ZXJlZCAoXygiUmVjb3JkIGluc3Ry dWN0aW9uIG51bWJlciBpcyAlZC5cbiIpLAorCQkgICAgIHJlY29yZF9pbnNu X251bSk7Cit9CisKK3ZvaWQKK19pbml0aWFsaXplX3JlY29yZCAodm9pZCkK K3sKKyAgLyogSW5pdCByZWNvcmRfbWFza2FsbC4gICovCisgIGlmIChzaWdm aWxsc2V0ICgmcmVjb3JkX21hc2thbGwpID09IC0xKQorICAgIHBlcnJvcl93 aXRoX25hbWUgKF8oIlByb2Nlc3MgcmVjb3JkOiBzaWdmaWxsc2V0IGZhaWxl ZCIpKTsKKworICAvKiBJbml0IHJlY29yZF9maXJzdC4gICovCisgIHJlY29y ZF9maXJzdC5wcmV2ID0gTlVMTDsKKyAgcmVjb3JkX2ZpcnN0Lm5leHQgPSBO VUxMOworICByZWNvcmRfZmlyc3QudHlwZSA9IHJlY29yZF9lbmQ7CisgIHJl Y29yZF9maXJzdC51Lm5lZWRfZGFzbSA9IDA7CisKKyAgaW5pdF9yZWNvcmRf b3BzICgpOworICBhZGRfdGFyZ2V0ICgmcmVjb3JkX29wcyk7CisKKyAgYWRk X3NldHNob3dfemludGVnZXJfY21kICgicmVjb3JkIiwgbm9fY2xhc3MsICZy ZWNvcmRfZGVidWcsCisJCQkgICAgXygiU2V0IGRlYnVnZ2luZyBvZiByZWNv cmQvcmVwbGF5IGZlYXR1cmUuIiksCisJCQkgICAgXygiU2hvdyBkZWJ1Z2dp bmcgb2YgcmVjb3JkL3JlcGxheSBmZWF0dXJlLiIpLAorCQkJICAgIF8oIldo ZW4gZW5hYmxlZCwgZGVidWdnaW5nIG91dHB1dCBmb3IgIgorCQkJICAgICAg InJlY29yZC9yZXBsYXkgZmVhdHVyZSBpcyBkaXNwbGF5ZWQuIiksCisJCQkg ICAgTlVMTCwgc2hvd19yZWNvcmRfZGVidWcsICZzZXRkZWJ1Z2xpc3QsCisJ CQkgICAgJnNob3dkZWJ1Z2xpc3QpOworCisgIGFkZF9jb20gKCJyZWNvcmQi LCBjbGFzc19vYnNjdXJlLCBjbWRfcmVjb3JkX3N0YXJ0LAorCSAgIF8oIkFi YnJldmlhdGVkIGZvcm0gb2YgXCJ0YXJnZXQgcmVjb3JkXCIgY29tbWFuZC4i KSk7CisKKyAgYWRkX2NvbV9hbGlhcyAoInJlYyIsICJyZWNvcmQiLCBjbGFz c19vYnNjdXJlLCAxKTsKKworICAvKiBYWFg6IEkgdHJ5IHRvIHVzZSBzb21l IHNpbXBsZSBjb21tYW5kcyBzdWNoIGFzICJkaXNjb25uZWN0IiBhbmQKKyAg ICAgImRldGFjaCIgdG8gc3VwcG9ydCB0aGlzIGZ1bmN0aW9ucy4gIEJ1dCB0 aGVzZSBjb21tYW5kcyBhbGwgaGF2ZQorICAgICBvdGhlciBhZmZlY3QgdG8g R0RCIHN1Y2ggYXMgY2FsbCBmdW5jdGlvbiAibm9fc2hhcmVkX2xpYnJhcmll cyIuCisgICAgIFNvIEkgYWRkIHNwZWNpYWwgY29tbWFuZHMgdG8gR0RCLiAg Ki8KKyAgYWRkX2NvbSAoImRlbHJlY29yZCIsIGNsYXNzX29ic2N1cmUsIGNt ZF9yZWNvcmRfZGVsZXRlLAorCSAgIF8oIkRlbGV0ZSB0aGUgcmVzdCBvZiBl eGVjdXRpb24gbG9nIGFuZCBzdGFydCByZWNvcmRpbmcgaXQgYW5ldy4iKSk7 CisgIGFkZF9jb21fYWxpYXMgKCJkciIsICJkZWxyZWNvcmQiLCBjbGFzc19v YnNjdXJlLCAxKTsKKyAgYWRkX2NvbSAoInN0b3ByZWNvcmQiLCBjbGFzc19v YnNjdXJlLCBjbWRfcmVjb3JkX3N0b3AsCisJICAgXygiU3RvcCB0aGUgcmVj b3JkL3JlcGxheSB0YXJnZXQuIikpOworICBhZGRfY29tX2FsaWFzICgic3Ii LCAic3RvcHJlY29yZCIsIGNsYXNzX29ic2N1cmUsIDEpOworCisgIC8qIFJl Y29yZCBpbnN0cnVjdGlvbnMgbnVtYmVyIGxpbWl0IGNvbW1hbmQuICAqLwor ICBhZGRfc2V0c2hvd19ib29sZWFuX2NtZCAoInJlY29yZC1zdG9wLWF0LWxp bWl0Iiwgbm9fY2xhc3MsCisJCQkgICAgJnJlY29yZF9zdG9wX2F0X2xpbWl0 LAorCQkJICAgIF8oIlNldCB3aGV0aGVyIHJlY29yZC9yZXBsYXkgc3RvcCB3 aGVuICIKKwkJCSAgICAgICJyZWNvcmQvcmVwbGF5IGJ1ZmZlciBiZWNvbWVz IGZ1bGwuIiksCisJCQkgICAgXygiU2hvdyB3aGV0aGVyIHJlY29yZC9yZXBs YXkgc3RvcCB3aGVuICIKKwkJCSAgICAgICJyZWNvcmQvcmVwbGF5IGJ1ZmZl ciBiZWNvbWVzIGZ1bGwuIiksCisJICAgICAgICAgICAgICAgICAgICBfKCJF bmFibGUgaXMgZGVmYXVsdCB2YWx1ZS5cbiIKKwkgICAgICAgICAgICAgICAg ICAgICAgIldoZW4gZW5hYmxlZCwgaWYgdGhlIHJlY29yZC9yZXBsYXkgYnVm ZmVyICIKKwkJCSAgICAgICJiZWNvbWVzIGZ1bGwsXG4iCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiYXNrIHVzZXIgd2hhdCB0byBkby5cbiIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaGVuIGRpc2FibGVk LCBpZiB0aGUgcmVjb3JkL3JlcGxheSBidWZmZXIgIgorCQkJICAgICAgImJl Y29tZXMgZnVsbCxcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJkZWxldGUgaXQgYW5kIHN0YXJ0IG5ldyByZWNvcmRpbmcuIiksCisJCQkg ICAgTlVMTCwgTlVMTCwgJnNldGxpc3QsICZzaG93bGlzdCk7CisgIGFkZF9z ZXRzaG93X3ppbnRlZ2VyX2NtZCAoInJlY29yZC1pbnNuLW51bWJlci1tYXgi LCBub19jbGFzcywKKwkJCSAgICAmcmVjb3JkX2luc25fbWF4X251bSwKKwkJ CSAgICBfKCJTZXQgcmVjb3JkL3JlcGxheSBidWZmZXIgbGltaXQuIiksCisJ CQkgICAgXygiU2hvdyByZWNvcmQvcmVwbGF5IGJ1ZmZlciBsaW1pdC4iKSwK KwkJCSAgICBfKCJTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0 aW9ucyB0byBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi c3RvcmVkIGluIHRoZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgInJlY29yZC9yZXBsYXkgYnVmZmVyLiAgIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlplcm8gbWVhbnMgdW5saW1pdGVkIChkZWZhdWx0 IDIwMDAwMCkuIiksCisJCQkgICAgc2V0X3JlY29yZF9pbnNuX21heF9udW0s CisJCQkgICAgTlVMTCwgJnNldGxpc3QsICZzaG93bGlzdCk7CisgIGFkZF9p bmZvICgicmVjb3JkLWluc24tbnVtYmVyIiwgc2hvd19yZWNvcmRfaW5zbl9u dW1iZXIsCisJICAgIF8oIlNob3cgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGlu c3RydWN0aW9ucyBpbiB0aGUgIgorCSAgICAgICJyZWNvcmQvcmVwbGF5IGJ1 ZmZlci4iKSk7Cit9Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjb3JkLmgKQEAg LTAsMCArMSw4NyBAQAorLyogUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0 YXJnZXQgZm9yIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJp Z2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor CisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAg IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1JFQ09SRF9IXworI2RlZmlu ZSBfUkVDT1JEX0hfCisKKyNkZWZpbmUgVEFSR0VUX0lTX1BST0NFU1NfUkVD T1JEICAgXAorICAgICAoY3VycmVudF90YXJnZXQuYmVuZWF0aCA9PSAmcmVj b3JkX29wcykKKyNkZWZpbmUgUkVDT1JEX0lTX1JFUExBWSBcCisgICAgIChy ZWNvcmRfbGlzdC0+bmV4dCB8fCBleGVjdXRpb25fZGlyZWN0aW9uID09IEVY RUNfUkVWRVJTRSkKKwordHlwZWRlZiBzdHJ1Y3QgcmVjb3JkX3JlZ19zCit7 CisgIGludCBudW07CisgIGdkYl9ieXRlICp2YWw7Cit9IHJlY29yZF9yZWdf dDsKKwordHlwZWRlZiBzdHJ1Y3QgcmVjb3JkX21lbV9zCit7CisgIENPUkVf QUREUiBhZGRyOworICBpbnQgbGVuOworICBnZGJfYnl0ZSAqdmFsOworfSBy ZWNvcmRfbWVtX3Q7CisKK2VudW0gcmVjb3JkX3R5cGUKK3sKKyAgcmVjb3Jk X2VuZCA9IDAsCisgIHJlY29yZF9yZWcsCisgIHJlY29yZF9tZW0KK307CisK Ky8qIFRoaXMgaXMgdGhlIGNvcmUgc3RydWN0IG9mIHJlY29yZCBmdW5jdGlv bi4KKworICAgQW4gZW50aXR5IG9mIHJlY29yZF90IGlzIGEgcmVjb3JkIG9m IHRoZSB2YWx1ZSBjaGFuZ2Ugb2YgYSByZWdpc3RlcgorICAgKCJyZWNvcmRf cmVnIikgb3IgYSBwYXJ0IG9mIG1lbW9yeSAoInJlY29yZF9tZW0iKS4gIEFu ZCBlYWNoCisgICBpbnN0cnVjdGlvbiBtdXN0IGhhcyBhIHJlY29yZF90ICgi cmVjb3JkX2VuZCIpIHRoYXQgcG9pbnRzIG91dCB0aGlzCisgICBpcyB0aGUg bGFzdCByZWNvcmRfdCBvZiB0aGlzIGluc3RydWN0aW9uLgorCisgICBFYWNo IHJlY29yZF90IGlzIGxpbmtlZCB0byAicmVjb3JkX2xpc3QiIGJ5ICJwcmV2 IiBhbmQgIm5leHQiLgorICovCit0eXBlZGVmIHN0cnVjdCByZWNvcmRfcwor eworICBzdHJ1Y3QgcmVjb3JkX3MgKnByZXY7CisgIHN0cnVjdCByZWNvcmRf cyAqbmV4dDsKKyAgZW51bSByZWNvcmRfdHlwZSB0eXBlOworICB1bmlvbgor ICB7CisgICAgLyogcmVnICovCisgICAgcmVjb3JkX3JlZ190IHJlZzsKKyAg ICAvKiBtZW0gKi8KKyAgICByZWNvcmRfbWVtX3QgbWVtOworICAgIC8qIGVu ZCAqLworICAgIGludCBuZWVkX2Rhc207CisgIH0gdTsKK30gcmVjb3JkX3Q7 CisKK2V4dGVybiBpbnQgcmVjb3JkX2RlYnVnOworZXh0ZXJuIHJlY29yZF90 ICpyZWNvcmRfbGlzdDsKK2V4dGVybiByZWNvcmRfdCAqcmVjb3JkX2FyY2hf bGlzdF9oZWFkOworZXh0ZXJuIHJlY29yZF90ICpyZWNvcmRfYXJjaF9saXN0 X3RhaWw7CitleHRlcm4gc3RydWN0IHJlZ2NhY2hlICpyZWNvcmRfcmVnY2Fj aGU7CisKK2V4dGVybiBzdHJ1Y3QgdGFyZ2V0X29wcyByZWNvcmRfb3BzOwor CitleHRlcm4gaW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoaW50IG51 bSk7CitleHRlcm4gaW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoQ09S RV9BRERSIGFkZHIsIGludCBsZW4pOworZXh0ZXJuIGludCByZWNvcmRfYXJj aF9saXN0X2FkZF9lbmQgKGludCBuZWVkX2Rhc20pOworZXh0ZXJuIHZvaWQg cmVjb3JkX21lc3NhZ2UgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKTsKK2V4 dGVybiBzdHJ1Y3QgY2xlYW51cCAqIHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rp c2FibGVfc2V0ICh2b2lkKTsKKworI2VuZGlmIC8qIF9SRUNPUkRfSF8gKi8K --001485f3e8beae16f0046317df2c--