From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7999 invoked by alias); 2 Feb 2009 09:05:07 -0000 Received: (qmail 7982 invoked by uid 22791); 2 Feb 2009 09:05:02 -0000 X-SWARE-Spam-Status: No, hits=-0.5 required=5.0 tests=AWL,BAYES_40,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; Mon, 02 Feb 2009 09:04:51 +0000 Received: by ti-out-0910.google.com with SMTP id d10so796327tib.12 for ; Mon, 02 Feb 2009 01:04:48 -0800 (PST) MIME-Version: 1.0 Received: by 10.110.3.15 with SMTP id 15mr6176797tic.2.1233565488141; Mon, 02 Feb 2009 01:04:48 -0800 (PST) In-Reply-To: <200901221324.02225.pedro@codesourcery.com> References: <200901221324.02225.pedro@codesourcery.com> Date: Mon, 02 Feb 2009 09:05: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=001485f4225eba54840461ebd807 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/msg00022.txt.bz2 --001485f4225eba54840461ebd807 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 3247 Hi Pedro, According to your mail, I make a new patch. Could you please help me review it? 1. Change all if (foo) { bar (); } to if (foo) bar (); 2. Change some paddr_nz to host_address_to_string. 3. Change sigaction to signal like remote.c to make it not os special. 4. Remove normal_stop from record.c 5. Make all files don't have any line exceeding 80 columns. Do you think this patch is OK? Thanks, Hui On Thu, Jan 22, 2009 at 21:24, Pedro Alves wrote: > Hi Hui, I've just skimmed through this patch, comments below. > > On Thursday 08 January 2009 05:46:17, teawater wrote: >> This patch add the process record and replay target. This is the core >> part of process record and replay. > > You still haven't addressed several past comments. :-( > > 1) Nit-picky nature, but I've warned you about it several months ago, so > I'm escalating it. :-) > > You have several formatting things you need to clean up. > > Please change instances of: > > if (foo) > { > bar (); > } > > To: > > if (foo) > bar (); > > Please make sure you don't have any line exceeding 80 columns. > > Please remove redundant ()'s, like in `return (0)'; > > 2) This bit, > > +/* The real beneath function pointers. */ > +void (*record_beneath_to_resume) (ptid_t, int, enum target_signal); > +ptid_t (*record_beneath_to_wait) (ptid_t, struct target_waitstatus *); > +void (*record_beneath_to_store_registers) (struct regcache *, int regno); > +LONGEST (*record_beneath_to_xfer_partial) (struct target_ops * ops, > + enum target_object object, > + const char *annex, > + gdb_byte * readbuf, > + const gdb_byte * writebuf, > + ULONGEST offset, LONGEST len); > +int (*record_beneath_to_insert_breakpoint) (struct bp_target_info *); > +int (*record_beneath_to_remove_breakpoint) (struct bp_target_info *); > > And the corresponding bit in target.c that sets these function pointers, and > the RECORD_IS_REPLAY and TARGET_IS_PROCESS_RECORD macros, add coupling > between the record target, and the core of gdb, that sounds unnecessary if > we're adding record as a target stratum. I'd really like to see those function > pointers go away, and mentioned adding new target vector entries for the properties > of record target you want checked in common code. I've suggested how before, did > you try it? > > 2.1) Related to coupling as well. You've added record.c to the list of files that are > built on all hosts, but I don't think that record.c is currently buildable on all > hosts. E.g., you're using sigaction unconditionally. I didn't spot any call to > a function defined in a *-nat.c file in this patch, but if you have any, you'll need > to either remove/rewrite it (ideal, I expect), or build record.c on native > linux hosts only. > > 3) This is a new one: I'd prefer we don't add calls to > normal_stop outside core inferior control code. There's only one left in go32-nat.c, > and that has been on my list to eliminate. > > -- > Pedro Alves > --001485f4225eba54840461ebd807 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_fqoxb1br0 Content-length: 51330 LS0tCiBNYWtlZmlsZS5pbiB8ICAgIDQgCiByZWNvcmQuYyAgICB8IDEyMTcg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiByZWNvcmQuaCAgICB8ICAxMDEgKysrKwogMyBm aWxlcyBjaGFuZ2VkLCAxMzIwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25z KC0pCgotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAt NjU4LDcgKzY1OCw3IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5j IGFkYS10eXBlcHIKIAl2YWxhcml0aC5jIHZhbG9wcy5jIHZhbHByaW50LmMg dmFsdWUuYyB2YXJvYmouYyB2ZWMuYyBcCiAJd3JhcHBlci5jIFwKIAl4bWwt dGRlc2MuYyB4bWwtc3VwcG9ydC5jIFwKLQlpbmZlcmlvci5jCisJaW5mZXJp b3IuYyByZWNvcmQuYwogCiBMSU5URklMRVMgPSAkKFNGSUxFUykgJChZWUZJ TEVTKSAkKENPTkZJR19TUkNTKSBpbml0LmMKIApAQCAtODA5LDcgKzgwOSw3 IEBAIENPTU1PTl9PQlMgPSAkKERFUEZJTEVTKSAkKENPTkZJR19PQlMpICQK IAlzb2xpYi5vIHNvbGliLW51bGwubyBcCiAJcHJvbG9ndWUtdmFsdWUubyBt ZW1vcnktbWFwLm8geG1sLXN1cHBvcnQubyBcCiAJdGFyZ2V0LWRlc2NyaXB0 aW9ucy5vIHRhcmdldC1tZW1vcnkubyB4bWwtdGRlc2MubyB4bWwtYnVpbHRp bi5vIFwKLQlpbmZlcmlvci5vIG9zZGF0YS5vCisJaW5mZXJpb3IubyBvc2Rh dGEubyByZWNvcmQubwogCiBUU09CUyA9IGluZmxvdy5vCiAKLS0tIC9kZXYv bnVsbAorKysgYi9yZWNvcmQuYwpAQCAtMCwwICsxLDEyMTcgQEAKKy8qIFBy 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 KmJwX2xvY2F0aW9uX2NoYWluOworCisvKiBUaGUgcmVhbCBiZW5lYXRoIGZ1 bmN0aW9uIHBvaW50ZXJzLiAgKi8KK3ZvaWQgKCpyZWNvcmRfYmVuZWF0aF90 b19yZXN1bWUpIChwdGlkX3QsIGludCwgZW51bSB0YXJnZXRfc2lnbmFsKTsK K3B0aWRfdCAoKnJlY29yZF9iZW5lYXRoX3RvX3dhaXQpIChwdGlkX3QsIHN0 cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAqKTsKK3ZvaWQgKCpyZWNvcmRfYmVu ZWF0aF90b19zdG9yZV9yZWdpc3RlcnMpIChzdHJ1Y3QgcmVnY2FjaGUgKiwg aW50IHJlZ25vKTsKK0xPTkdFU1QgKCpyZWNvcmRfYmVuZWF0aF90b194ZmVy X3BhcnRpYWwpIChzdHJ1Y3QgdGFyZ2V0X29wcyAqIG9wcywKKwkJCQkJICAg ZW51bSB0YXJnZXRfb2JqZWN0IG9iamVjdCwKKwkJCQkJICAgY29uc3QgY2hh ciAqYW5uZXgsCisJCQkJCSAgIGdkYl9ieXRlICogcmVhZGJ1ZiwKKwkJCQkJ ICAgY29uc3QgZ2RiX2J5dGUgKiB3cml0ZWJ1ZiwKKwkJCQkJICAgVUxPTkdF U1Qgb2Zmc2V0LCBMT05HRVNUIGxlbik7CitpbnQgKCpyZWNvcmRfYmVuZWF0 aF90b19pbnNlcnRfYnJlYWtwb2ludCkgKHN0cnVjdCBicF90YXJnZXRfaW5m byAqKTsKK2ludCAoKnJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3Bv aW50KSAoc3RydWN0IGJwX3RhcmdldF9pbmZvICopOworCitzdGF0aWMgdm9p ZAorcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3JkX3QgKiByZWMpCit7Cisg IHJlY29yZF90ICp0bXA7CisKKyAgaWYgKCFyZWMpCisgICAgcmV0dXJuOwor CisgIHdoaWxlIChyZWMtPm5leHQpCisgICAgeworICAgICAgcmVjID0gcmVj LT5uZXh0OworICAgIH0KKworICB3aGlsZSAocmVjLT5wcmV2KQorICAgIHsK KyAgICAgIHRtcCA9IHJlYzsKKyAgICAgIHJlYyA9IHJlYy0+cHJldjsKKyAg ICAgIGlmICh0bXAtPnR5cGUgPT0gcmVjb3JkX3JlZykKKwl4ZnJlZSAodG1w LT51LnJlZy52YWwpOworICAgICAgZWxzZSBpZiAodG1wLT50eXBlID09IHJl Y29yZF9tZW0pCisJeGZyZWUgKHRtcC0+dS5tZW0udmFsKTsKKyAgICAgIHhm cmVlICh0bXApOworICAgIH0KKworICBpZiAocmVjICE9ICZyZWNvcmRfZmly c3QpCisgICAgeGZyZWUgKHJlYyk7Cit9CisKK3N0YXRpYyB2b2lkCityZWNv cmRfbGlzdF9yZWxlYXNlX25leHQgKHZvaWQpCit7CisgIHJlY29yZF90ICpy ZWMgPSByZWNvcmRfbGlzdDsKKyAgcmVjb3JkX3QgKnRtcCA9IHJlYy0+bmV4 dDsKKyAgcmVjLT5uZXh0ID0gTlVMTDsKKyAgd2hpbGUgKHRtcCkKKyAgICB7 CisgICAgICByZWMgPSB0bXAtPm5leHQ7CisgICAgICBpZiAodG1wLT50eXBl ID09IHJlY29yZF9yZWcpCisJcmVjb3JkX2luc25fbnVtLS07CisgICAgICBl bHNlIGlmICh0bXAtPnR5cGUgPT0gcmVjb3JkX3JlZykKKwl4ZnJlZSAodG1w LT51LnJlZy52YWwpOworICAgICAgZWxzZSBpZiAodG1wLT50eXBlID09IHJl Y29yZF9tZW0pCisJeGZyZWUgKHRtcC0+dS5tZW0udmFsKTsKKyAgICAgIHhm cmVlICh0bXApOworICAgICAgdG1wID0gcmVjOworICAgIH0KK30KKworc3Rh dGljIHZvaWQKK3JlY29yZF9saXN0X3JlbGVhc2VfZmlyc3QgKHZvaWQpCit7 CisgIHJlY29yZF90ICp0bXAgPSBOVUxMOworICBlbnVtIHJlY29yZF90eXBl IHR5cGU7CisKKyAgaWYgKCFyZWNvcmRfZmlyc3QubmV4dCkKKyAgICByZXR1 cm47CisKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgdHlwZSA9IHJlY29y ZF9maXJzdC5uZXh0LT50eXBlOworCisgICAgICBpZiAodHlwZSA9PSByZWNv cmRfcmVnKQorCXhmcmVlIChyZWNvcmRfZmlyc3QubmV4dC0+dS5yZWcudmFs KTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gcmVjb3JkX21lbSkKKwl4ZnJl ZSAocmVjb3JkX2ZpcnN0Lm5leHQtPnUubWVtLnZhbCk7CisgICAgICB0bXAg PSByZWNvcmRfZmlyc3QubmV4dDsKKyAgICAgIHJlY29yZF9maXJzdC5uZXh0 ID0gdG1wLT5uZXh0OworICAgICAgeGZyZWUgKHRtcCk7CisKKyAgICAgIGlm ICghcmVjb3JkX2ZpcnN0Lm5leHQpCisJeworCSAgZ2RiX2Fzc2VydCAocmVj b3JkX2luc25fbnVtID09IDEpOworCSAgYnJlYWs7CisJfQorCisgICAgICBy ZWNvcmRfZmlyc3QubmV4dC0+cHJldiA9ICZyZWNvcmRfZmlyc3Q7CisKKyAg ICAgIGlmICh0eXBlID09IHJlY29yZF9lbmQpCisJYnJlYWs7CisgICAgfQor CisgIHJlY29yZF9pbnNuX251bS0tOworfQorCisvKiBBZGQgYSByZWNvcmRf dCB0byByZWNvcmRfYXJjaF9saXN0LiAgKi8KK3N0YXRpYyB2b2lkCityZWNv cmRfYXJjaF9saXN0X2FkZCAocmVjb3JkX3QgKiByZWMpCit7CisgIGlmIChy ZWNvcmRfZGVidWcgPiAxKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKKwkJCSJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2FyY2hfbGlz dF9hZGQgJXMuXG4iLAorCQkJaG9zdF9hZGRyZXNzX3RvX3N0cmluZyAocmVj KSk7CisKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCkKKyAgICB7Cisg ICAgICByZWNvcmRfYXJjaF9saXN0X3RhaWwtPm5leHQgPSByZWM7CisgICAg ICByZWMtPnByZXYgPSByZWNvcmRfYXJjaF9saXN0X3RhaWw7CisgICAgICBy ZWNvcmRfYXJjaF9saXN0X3RhaWwgPSByZWM7CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkID0gcmVjOworICAg ICAgcmVjb3JkX2FyY2hfbGlzdF90YWlsID0gcmVjOworICAgIH0KK30KKwor LyogUmVjb3JkIHRoZSB2YWx1ZSBvZiBhIHJlZ2lzdGVyICgibnVtIikgdG8g cmVjb3JkX2FyY2hfbGlzdC4gICovCitpbnQKK3JlY29yZF9hcmNoX2xpc3Rf YWRkX3JlZyAoaW50IG51bSkKK3sKKyAgcmVjb3JkX3QgKnJlYzsKKworICBp ZiAocmVjb3JkX2RlYnVnID4gMSkKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQg KGdkYl9zdGRsb2csCisJCQkiUHJvY2VzcyByZWNvcmQ6IGFkZCByZWdpc3Rl ciBudW0gPSAlZCB0byAiCisJCQkicmVjb3JkIGxpc3QuXG4iLAorCQkJbnVt KTsKKworICByZWMgPSAocmVjb3JkX3QgKikgeG1hbGxvYyAoc2l6ZW9mIChy ZWNvcmRfdCkpOworICByZWMtPnUucmVnLnZhbCA9IChnZGJfYnl0ZSAqKSB4 bWFsbG9jIChNQVhfUkVHSVNURVJfU0laRSk7CisgIHJlYy0+cHJldiA9IE5V TEw7CisgIHJlYy0+bmV4dCA9IE5VTEw7CisgIHJlYy0+dHlwZSA9IHJlY29y ZF9yZWc7CisgIHJlYy0+dS5yZWcubnVtID0gbnVtOworCisgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIG51bSwgcmVjLT51LnJlZy52 YWwpOworCisgIHJlY29yZF9hcmNoX2xpc3RfYWRkIChyZWMpOworCisgIHJl dHVybiAwOworfQorCisvKiBSZWNvcmQgdGhlIHZhbHVlIG9mIGEgcmVnaW9u IG9mIG1lbW9yeSB3aG9zZSBhZGRyZXNzIGlzICJhZGRyIiBhbmQKKyAgIGxl bmd0aCBpcyAibGVuIiB0byByZWNvcmRfYXJjaF9saXN0LiAgKi8KKworaW50 CityZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKENPUkVfQUREUiBhZGRyLCBp bnQgbGVuKQoreworICByZWNvcmRfdCAqcmVjOworCisgIGlmIChyZWNvcmRf ZGVidWcgPiAxKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywKKwkJCSJQcm9jZXNzIHJlY29yZDogYWRkIG1lbSBhZGRyID0gMHglcyBs ZW4gPSAlZCB0byAiCisJCQkicmVjb3JkIGxpc3QuXG4iLAorCQkJcGFkZHJf bnogKGFkZHIpLCBsZW4pOworCisgIGlmICghYWRkcikKKyAgICByZXR1cm4g MDsKKworICByZWMgPSAocmVjb3JkX3QgKikgeG1hbGxvYyAoc2l6ZW9mIChy ZWNvcmRfdCkpOworICByZWMtPnUubWVtLnZhbCA9IChnZGJfYnl0ZSAqKSB4 bWFsbG9jIChsZW4pOworICByZWMtPnByZXYgPSBOVUxMOworICByZWMtPm5l eHQgPSBOVUxMOworICByZWMtPnR5cGUgPSByZWNvcmRfbWVtOworICByZWMt PnUubWVtLmFkZHIgPSBhZGRyOworICByZWMtPnUubWVtLmxlbiA9IGxlbjsK KworICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChhZGRyLCByZWMtPnUubWVt LnZhbCwgbGVuKSkKKyAgICB7CisgICAgICBpZiAocmVjb3JkX2RlYnVnKQor CWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSAgICAiUHJv Y2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0ICIKKwkJCSAg ICAiYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJICAgIHBhZGRyX256 IChhZGRyKSwgbGVuKTsKKyAgICAgIHhmcmVlIChyZWMtPnUubWVtLnZhbCk7 CisgICAgICB4ZnJlZSAocmVjKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9 CisKKyAgcmVjb3JkX2FyY2hfbGlzdF9hZGQgKHJlYyk7CisKKyAgcmV0dXJu IDA7Cit9CisKKy8qIEFkZCBhIHJlY29yZF9lbmQgdHlwZSByZWNvcmRfdCB0 byByZWNvcmRfYXJjaF9saXN0LiAgKi8KK2ludAorcmVjb3JkX2FyY2hfbGlz dF9hZGRfZW5kIChpbnQgbmVlZF9kYXNtKQoreworICByZWNvcmRfdCAqcmVj OworCisgIGlmIChyZWNvcmRfZGVidWcgPiAxKQorICAgIGZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSJQcm9jZXNzIHJlY29yZDogYWRk IGVuZCBuZWVkX2Rhc20gPSAlZCB0byAiCisJCQkiYXJjaCBsaXN0LlxuIiwK KwkJCW5lZWRfZGFzbSk7CisKKyAgcmVjID0gKHJlY29yZF90ICopIHhtYWxs b2MgKHNpemVvZiAocmVjb3JkX3QpKTsKKyAgcmVjLT5wcmV2ID0gTlVMTDsK KyAgcmVjLT5uZXh0ID0gTlVMTDsKKyAgcmVjLT50eXBlID0gcmVjb3JkX2Vu ZDsKKworICByZWMtPnUubmVlZF9kYXNtID0gbmVlZF9kYXNtOworCisgIHJl Y29yZF9hcmNoX2xpc3RfYWRkIChyZWMpOworCisgIHJldHVybiAwOworfQor CitzdGF0aWMgdm9pZAorcmVjb3JkX2NoZWNrX2luc25fbnVtIChpbnQgc2V0 X3Rlcm1pbmFsKQoreworICBpZiAocmVjb3JkX2luc25fbWF4X251bSkKKyAg ICB7CisgICAgICBnZGJfYXNzZXJ0IChyZWNvcmRfaW5zbl9udW0gPD0gcmVj b3JkX2luc25fbWF4X251bSk7CisgICAgICBpZiAocmVjb3JkX2luc25fbnVt ID09IHJlY29yZF9pbnNuX21heF9udW0pCisJeworCSAgLyogQXNrIHVzZXIg d2hhdCB0byBkby4gICovCisJICBpZiAocmVjb3JkX3N0b3BfYXRfbGltaXQp CisJICAgIHsKKwkgICAgICBpbnQgcTsKKwkgICAgICBpZiAoc2V0X3Rlcm1p bmFsKQorCQl0YXJnZXRfdGVybWluYWxfb3VycyAoKTsKKwkgICAgICBxID0g eXF1ZXJ5IChfKCJEbyB5b3Ugd2FudCB0byBhdXRvIGRlbGV0ZSBwcmV2aW91 cyBleGVjdXRpb24gIgorCQkJICAgICJsb2cgZW50cmllcyB3aGVuIHJlY29y ZC9yZXBsYXkgYnVmZmVyIGJlY29tZXMgIgorCQkJICAgICJmdWxsIChyZWNv cmQtc3RvcC1hdC1saW1pdCk/IikpOworCSAgICAgIGlmIChzZXRfdGVybWlu YWwpCisJCXRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKKwkgICAgICBp ZiAocSkKKwkJcmVjb3JkX3N0b3BfYXRfbGltaXQgPSAwOworCSAgICAgIGVs c2UKKwkJZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBpbmZlcmlvciBwcm9n cmFtIHN0b3BwZWQuIikpOworCSAgICB9CisJfQorICAgIH0KK30KKworc3Rh dGljIHZvaWQKK3JlY29yZF9ub3JtYWxfc3RvcCAodm9pZCkKK3sKKyAgZmlu aXNoX3RocmVhZF9zdGF0ZSAobWludXNfb25lX3B0aWQpOworCisgIGlmICgh YnJlYWtwb2ludHNfYWx3YXlzX2luc2VydGVkX21vZGUgKCkgJiYgdGFyZ2V0 X2hhc19leGVjdXRpb24pCisgICAgcmVtb3ZlX2JyZWFrcG9pbnRzICgpOwor CisgIHRhcmdldF90ZXJtaW5hbF9vdXJzICgpOworCisgIGlmICh0YXJnZXRf aGFzX3N0YWNrICYmICFzdG9wX3N0YWNrX2R1bW15KQorICAgIHNldF9jdXJy ZW50X3NhbF9mcm9tX2ZyYW1lIChnZXRfY3VycmVudF9mcmFtZSAoKSwgMSk7 CisKKyAgc2VsZWN0X2ZyYW1lIChnZXRfY3VycmVudF9mcmFtZSAoKSk7CisK KyAgYW5ub3RhdGVfc3RvcHBlZCAoKTsKKyAgaWYgKCFzdXBwcmVzc19zdG9w X29ic2VydmVyKQorICAgIHsKKyAgICAgIGlmICghcHRpZF9lcXVhbCAoaW5m ZXJpb3JfcHRpZCwgbnVsbF9wdGlkKSkKKwlvYnNlcnZlcl9ub3RpZnlfbm9y bWFsX3N0b3AgKGluZmVyaW9yX3RocmVhZCAoKS0+c3RvcF9icHN0YXQpOwor ICAgICAgZWxzZQorCW9ic2VydmVyX25vdGlmeV9ub3JtYWxfc3RvcCAoTlVM TCk7CisgICAgfQorfQorCisvKiBCZWZvcmUgaW5mZXJpb3Igc3RlcCAod2hl biBHREIgcmVjb3JkIHRoZSBydW5uaW5nIG1lc3NhZ2UsIGluZmVyaW9yCisg ICBvbmx5IGNhbiBzdGVwKSwgR0RCIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9u IHRvIHJlY29yZCB0aGUgdmFsdWVzIHRvCisgICByZWNvcmRfbGlzdC4gIFRo aXMgZnVuY3Rpb24gd2lsbCBjYWxsIGdkYmFyY2hfcHJvY2Vzc19yZWNvcmQg dG8KKyAgIHJlY29yZCB0aGUgcnVubmluZyBtZXNzYWdlIG9mIGluZmVyaW9y IGFuZCBzZXQgdGhlbSB0bworICAgcmVjb3JkX2FyY2hfbGlzdCwgYW5kIGFk ZCBpdCB0byByZWNvcmRfbGlzdC4gICovCisKK3N0YXRpYyB2b2lkCityZWNv cmRfbWVzc2FnZV9jbGVhbnVwcyAodm9pZCAqaWdub3JlKQoreworICByZWNv cmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworICBz ZXRfZXhlY3V0aW5nIChpbmZlcmlvcl9wdGlkLCAwKTsKKyAgcmVjb3JkX25v cm1hbF9zdG9wICgpOworfQorCit2b2lkCityZWNvcmRfbWVzc2FnZSAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gpCit7CisgIGludCByZXQ7CisgIHN0cnVj dCBjbGVhbnVwICpvbGRfY2xlYW51cHMgPSBtYWtlX2NsZWFudXAgKHJlY29y ZF9tZXNzYWdlX2NsZWFudXBzLCAwKTsKKworICByZWNvcmRfYXJjaF9saXN0 X2hlYWQgPSBOVUxMOworICByZWNvcmRfYXJjaF9saXN0X3RhaWwgPSBOVUxM OworCisgIC8qIENoZWNrIHJlY29yZF9pbnNuX251bS4gICovCisgIHJlY29y ZF9jaGVja19pbnNuX251bSAoMSk7CisKKyAgcmVjb3JkX3JlZ2NhY2hlID0g Z2V0X2N1cnJlbnRfcmVnY2FjaGUgKCk7CisKKyAgcmV0ID0gZ2RiYXJjaF9w cm9jZXNzX3JlY29yZCAoZ2RiYXJjaCwKKwkJCQlyZWdjYWNoZV9yZWFkX3Bj IChyZWNvcmRfcmVnY2FjaGUpKTsKKyAgaWYgKHJldCA+IDApCisgICAgZXJy b3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBpbmZlcmlvciBwcm9ncmFtIHN0b3Bw ZWQuIikpOworICBpZiAocmV0IDwgMCkKKyAgICBlcnJvciAoXygiUHJvY2Vz cyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7 CisKKyAgZGlzY2FyZF9jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKKworICBy ZWNvcmRfbGlzdC0+bmV4dCA9IHJlY29yZF9hcmNoX2xpc3RfaGVhZDsKKyAg cmVjb3JkX2FyY2hfbGlzdF9oZWFkLT5wcmV2ID0gcmVjb3JkX2xpc3Q7Cisg IHJlY29yZF9saXN0ID0gcmVjb3JkX2FyY2hfbGlzdF90YWlsOworCisgIGlm IChyZWNvcmRfaW5zbl9udW0gPT0gcmVjb3JkX2luc25fbWF4X251bSAmJiBy ZWNvcmRfaW5zbl9tYXhfbnVtKQorICAgIHJlY29yZF9saXN0X3JlbGVhc2Vf Zmlyc3QgKCk7CisgIGVsc2UKKyAgICByZWNvcmRfaW5zbl9udW0rKzsKK30K KworLyogVGhpbmdzIHRvIGNsZWFuIHVwIGlmIHdlIGVycm9yIG9yIFFVSVQg b3V0IG9mIGZ1bmN0aW9uIHRoYXQgc2V0CisgICByZWNvcmRfZ2RiX29wZXJh dGlvbl9kaXNhYmxlIChpZS4gY29tbWFuZCB0aGF0IGNhdXNlZCB0YXJnZXRf d2FpdCB0byBiZSBjYWxsZWQpLiAgKi8KK3N0YXRpYyB2b2lkCityZWNvcmRf Z2RiX29wZXJhdGlvbl9kaXNhYmxlX2NsZWFudXBzICh2b2lkICppZ25vcmUp Cit7CisgIHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGUgPSAwOworfQor CitzdHJ1Y3QgY2xlYW51cCAqCityZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNh YmxlX3NldCAodm9pZCkKK3sKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVh bnVwcyA9IG1ha2VfY2xlYW51cCAocmVjb3JkX2dkYl9vcGVyYXRpb25fZGlz YWJsZV9jbGVhbnVwcywgMCk7CisgIHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rp c2FibGUgPSAxOworCisgIHJldHVybiBvbGRfY2xlYW51cHM7Cit9CisKK3N0 YXRpYyB2b2lkCityZWNvcmRfb3BlbiAoY2hhciAqbmFtZSwgaW50IGZyb21f dHR5KQoreworICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRf b3BlblxuIik7CisKKyAgLyogY2hlY2sgZXhlYyAqLworICBpZiAoIXRhcmdl dF9oYXNfZXhlY3V0aW9uKQorICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29y ZDogdGhlIHByb2dyYW0gaXMgbm90IGJlaW5nIHJ1bi4iKSk7CisgIGlmIChu b25fc3RvcCkKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQgdGFyZ2V0 IGNhbid0IGRlYnVnIGluZmVyaW9yIGluIG5vbi1zdG9wIG1vZGUgIgorCSAg ICAgIihub24tc3RvcCkuIikpOworICBpZiAodGFyZ2V0X2FzeW5jX3Blcm1p dHRlZCkKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQgdGFyZ2V0IGNh bid0IGRlYnVnIGluZmVyaW9yIGluIGFzeW5jaHJvbm91cyAiCisJICAgICAi bW9kZSAodGFyZ2V0LWFzeW5jKS4iKSk7CisKKyAgaWYgKCFnZGJhcmNoX3By b2Nlc3NfcmVjb3JkX3AgKGN1cnJlbnRfZ2RiYXJjaCkpCisgICAgZXJyb3Ig KF8oIlByb2Nlc3MgcmVjb3JkOiB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUg ZG9lc24ndCBzdXBwb3J0ICIKKwkgICAgICJyZWNvcmQgZnVuY3Rpb24uIikp OworCisgIC8qIENoZWNrIGlmIHJlY29yZCB0YXJnZXQgaXMgYWxyZWFkeSBy dW5uaW5nLiAgKi8KKyAgaWYgKFRBUkdFVF9JU19QUk9DRVNTX1JFQ09SRCkK KyAgICB7CisgICAgICBpZiAoIW5xdWVyeQorCSAgKF8oIlByb2Nlc3MgcmVj b3JkIHRhcmdldCBhbHJlYWR5IHJ1bm5pbmcsIGRvIHlvdSB3YW50IHRvIGRl bGV0ZSAiCisJICAgICAidGhlIG9sZCByZWNvcmQgbG9nPyIpKSkKKwlyZXR1 cm47CisgICAgfQorCisgIHB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7CisK KyAgLyogUmVzZXQgKi8KKyAgcmVjb3JkX2luc25fbnVtID0gMDsKKyAgcmVj b3JkX2xpc3QgPSAmcmVjb3JkX2ZpcnN0OworICByZWNvcmRfbGlzdC0+bmV4 dCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfY2xvc2UgKGlu dCBxdWl0dGluZykKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDog cmVjb3JkX2Nsb3NlXG4iKTsKKworICByZWNvcmRfbGlzdF9yZWxlYXNlIChy ZWNvcmRfbGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfcmVzdW1l IChwdGlkX3QgcHRpZCwgaW50IHN0ZXAsIGVudW0gdGFyZ2V0X3NpZ25hbCBz aWdnbmFsKQoreworICByZWNvcmRfcmVzdW1lX3N0ZXAgPSBzdGVwOworICBy ZWNvcmRfcmVzdW1lX3NpZ2duYWwgPSBzaWdnbmFsOworCisgIGlmICghUkVD T1JEX0lTX1JFUExBWSkKKyAgICB7CisgICAgICByZWNvcmRfbWVzc2FnZSAo Y3VycmVudF9nZGJhcmNoKTsKKyAgICAgIHJlY29yZF9iZW5lYXRoX3RvX3Jl c3VtZSAocHRpZCwgMSwgc2lnZ25hbCk7CisgICAgfQorfQorCitzdGF0aWMg dm9pZAorcmVjb3JkX3NpZ19oYW5kbGVyIChpbnQgc2lnbm8pCit7CisgIGlm IChyZWNvcmRfZGVidWcpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6IGdldCBhIHNpZ25hbFxuIik7CisK KyAgcmVjb3JkX3Jlc3VtZV9zdGVwID0gMTsKKyAgcmVjb3JkX2dldF9zaWcg PSAxOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX3dhaXRfY2xlYW51cHMg KHZvaWQgKmlnbm9yZSkKK3sKKyAgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24g PT0gRVhFQ19SRVZFUlNFKQorICAgIHsKKyAgICAgIGlmIChyZWNvcmRfbGlz dC0+bmV4dCkKKwlyZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0LT5uZXh0Owor ICAgIH0KKyAgZWxzZQorICAgIHJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3Qt PnByZXY7CisKKyAgc2V0X2V4ZWN1dGluZyAoaW5mZXJpb3JfcHRpZCwgMCk7 CisgIHJlY29yZF9ub3JtYWxfc3RvcCAoKTsKK30KKworLyogcmVjb3JkX3dh aXQKKyAgIEluIHJlcGxheSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGV4YW1pbmVz IHRoZSByZWNvcmRlZCBsb2cgYW5kCisgICBkZXRlcm1pbmVzIHdoZXJlIHRv IHN0b3AuICAqLworCitzdGF0aWMgcHRpZF90CityZWNvcmRfd2FpdCAocHRp ZF90IHB0aWQsIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzKQor eworICBzdHJ1Y3QgY2xlYW51cCAqc2V0X2NsZWFudXBzID0gcmVjb3JkX2dk Yl9vcGVyYXRpb25fZGlzYWJsZV9zZXQgKCk7CisKKyAgaWYgKHJlY29yZF9k ZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ CQkiUHJvY2VzcyByZWNvcmQ6IHJlY29yZF93YWl0ICIKKwkJCSJyZWNvcmRf cmVzdW1lX3N0ZXAgPSAlZFxuIiwKKwkJCXJlY29yZF9yZXN1bWVfc3RlcCk7 CisKKyAgaWYgKCFSRUNPUkRfSVNfUkVQTEFZKQorICAgIHsKKyAgICAgIGlm IChyZWNvcmRfcmVzdW1lX3N0ZXApCisJeworCSAgLyogVGhpcyBpcyBhIHNp bmdsZSBzdGVwLiAgKi8KKwkgIHJldHVybiByZWNvcmRfYmVuZWF0aF90b193 YWl0IChwdGlkLCBzdGF0dXMpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBp ZiAocmVjb3JkX3Jlc3VtZV9zdGVwKQorCSAgICB7CisJICAgICAgLyogVGhp cyBpcyBhIHNpbmdsZSBzdGVwLiAgKi8KKwkgICAgICByZXR1cm4gcmVjb3Jk X2JlbmVhdGhfdG9fd2FpdCAocHRpZCwgc3RhdHVzKTsKKwkgICAgfQorCSAg ZWxzZQorCSAgICB7CisJICAgICAgLyogVGhpcyBpcyBub3QgYSBzaW5nbGUg c3RlcC4gICovCisJICAgICAgcHRpZF90IHJldDsKKwkgICAgICBpbnQgaXNf YnJlYWtwb2ludCA9IDE7CisJICAgICAgQ09SRV9BRERSIHBjID0gMDsKKwkg ICAgICBpbnQgcGNfaXNfcmVhZCA9IDA7CisJICAgICAgc3RydWN0IGJwX2xv Y2F0aW9uICpibDsKKwkgICAgICBzdHJ1Y3QgYnJlYWtwb2ludCAqYjsKKwor CSAgICAgIGRvCisJCXsKKwkJICByZXQgPSByZWNvcmRfYmVuZWF0aF90b193 YWl0IChwdGlkLCBzdGF0dXMpOworCisJCSAgaWYgKHN0YXR1cy0+a2luZCA9 PSBUQVJHRVRfV0FJVEtJTkRfU1RPUFBFRAorCQkgICAgICAmJiBzdGF0dXMt PnZhbHVlLnNpZyA9PSBUQVJHRVRfU0lHTkFMX1RSQVApCisJCSAgICB7CisJ CSAgICAgIC8qIENoZWNrIGlmIHRoZXJlIGlzIGEgYnJlYWtwb2ludC4gICov CisJCSAgICAgIHBjX2lzX3JlYWQgPSAwOworCQkgICAgICByZWdpc3RlcnNf Y2hhbmdlZCAoKTsKKwkJICAgICAgZm9yIChibCA9IGJwX2xvY2F0aW9uX2No YWluOyBibDsgYmwgPSBibC0+Z2xvYmFsX25leHQpCisJCQl7CisJCQkgIGIg PSBibC0+b3duZXI7CisJCQkgIGdkYl9hc3NlcnQgKGIpOworCQkJICBpZiAo Yi0+ZW5hYmxlX3N0YXRlICE9IGJwX2VuYWJsZWQKKwkJCSAgICAgICYmIGIt PmVuYWJsZV9zdGF0ZSAhPSBicF9wZXJtYW5lbnQpCisJCQkgICAgY29udGlu dWU7CisJCQkgIGlmICghcGNfaXNfcmVhZCkKKwkJCSAgICB7CisJCQkgICAg ICBwYyA9CisJCQkJcmVnY2FjaGVfcmVhZF9wYyAoZ2V0X3RocmVhZF9yZWdj YWNoZSAocmV0KSk7CisJCQkgICAgICBwY19pc19yZWFkID0gMTsKKwkJCSAg ICB9CisJCQkgIHN3aXRjaCAoYi0+dHlwZSkKKwkJCSAgICB7CisJCQkgICAg ZGVmYXVsdDoKKwkJCSAgICAgIGlmIChibC0+YWRkcmVzcyA9PSBwYykKKwkJ CQlnb3RvIGJyZWFrcG9pbnQ7CisJCQkgICAgICBicmVhazsKKworCQkJICAg IGNhc2UgYnBfd2F0Y2hwb2ludDoKKwkJCSAgICAgIC8qIFhYWCB0ZWF3YXRl cjogSSBzdGlsbCBub3QgdmVyeSBjbGVhciBob3cgdG8KKwkJCQkgZGVhbCB3 aXRoIGl0LiAgKi8KKwkJCSAgICAgIGdvdG8gYnJlYWtwb2ludDsKKwkJCSAg ICAgIGJyZWFrOworCisJCQkgICAgY2FzZSBicF9jYXRjaHBvaW50OgorCQkJ ICAgICAgZ2RiX2Fzc2VydCAoYi0+b3BzICE9IE5VTEwKKwkJCQkJICAmJiBi LT5vcHMtPmJyZWFrcG9pbnRfaGl0ICE9IE5VTEwpOworCQkJICAgICAgaWYg KGItPm9wcy0+YnJlYWtwb2ludF9oaXQgKGIpKQorCQkJCWdvdG8gYnJlYWtw b2ludDsKKwkJCSAgICAgIGJyZWFrOworCisJCQkgICAgY2FzZSBicF9oYXJk d2FyZV93YXRjaHBvaW50OgorCQkJICAgIGNhc2UgYnBfcmVhZF93YXRjaHBv aW50OgorCQkJICAgIGNhc2UgYnBfYWNjZXNzX3dhdGNocG9pbnQ6CisJCQkg ICAgICBpZiAoU1RPUFBFRF9CWV9XQVRDSFBPSU5UICgwKSkKKwkJCQlnb3Rv IGJyZWFrcG9pbnQ7CisJCQkgICAgICBicmVhazsKKwkJCSAgICB9CisJCQl9 CisKKwkJICAgICAgLyogVGhlcmUgaXMgbm90IGEgYnJlYWtwb2ludC4gICov CisJCSAgICAgIHJlY29yZF9tZXNzYWdlIChjdXJyZW50X2dkYmFyY2gpOwor CQkgICAgICByZWNvcmRfYmVuZWF0aF90b19yZXN1bWUgKHB0aWQsIDEsCisJ CQkJCQlyZWNvcmRfcmVzdW1lX3NpZ2duYWwpOworCQkgICAgICBjb250aW51 ZTsKKwkJICAgIH0KKworCQkgIGlzX2JyZWFrcG9pbnQgPSAwOworCisJCWJy ZWFrcG9pbnQ6CisJCSAgLyogQWRkIGdkYmFyY2hfZGVjcl9wY19hZnRlcl9i cmVhayB0byBwYyBiZWNhdXNlIGdkYiB3aWxsCisJCSAgICAgZXhwZWN0IHRo ZSBwYyB0byBiZSBhdCBhZGRyZXNzIHBsdXMgZGVjcl9wY19hZnRlcl9icmVh aworCQkgICAgIHdoZW4gdGhlIGluZmVyaW9yIHN0b3BzIGF0IGEgYnJlYWtw b2ludC4gICovCisJCSAgaWYgKGlzX2JyZWFrcG9pbnQpCisJCSAgICB7CisJ CSAgICAgIENPUkVfQUREUiBkZWNyX3BjX2FmdGVyX2JyZWFrID0KKwkJCWdk YmFyY2hfZGVjcl9wY19hZnRlcl9icmVhayAoY3VycmVudF9nZGJhcmNoKTsK KwkJICAgICAgaWYgKGRlY3JfcGNfYWZ0ZXJfYnJlYWspCisJCQl7CisJCQkg IGlmICghcGNfaXNfcmVhZCkKKwkJCSAgICBwYyA9CisJCQkgICAgICByZWdj YWNoZV9yZWFkX3BjIChnZXRfdGhyZWFkX3JlZ2NhY2hlIChyZXQpKTsKKwkJ CSAgcmVnY2FjaGVfd3JpdGVfcGMgKGdldF90aHJlYWRfcmVnY2FjaGUgKHJl dCksCisJCQkJCSAgICAgcGMgKyBkZWNyX3BjX2FmdGVyX2JyZWFrKTsKKwkJ CX0KKwkJICAgIH0KKworCQkgIGJyZWFrOworCQl9CisJICAgICAgd2hpbGUg KDEpOworCisJICAgICAgcmV0dXJuIHJldDsKKwkgICAgfQorCX0KKyAgICB9 CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQgbmVlZF9kYXNtID0gMDsKKyAg ICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUgPSBnZXRfY3VycmVudF9y ZWdjYWNoZSAoKTsKKyAgICAgIGludCBjb250aW51ZV9mbGFnID0gMTsKKyAg ICAgIGludCBmaXJzdF9yZWNvcmRfZW5kID0gMTsKKyAgICAgIHN0cnVjdCBj bGVhbnVwICpvbGRfY2xlYW51cHMgPSBtYWtlX2NsZWFudXAgKHJlY29yZF93 YWl0X2NsZWFudXBzLCAwKTsKKyAgICAgIENPUkVfQUREUiB0bXBfcGM7CisK KyAgICAgIHN0YXR1cy0+a2luZCA9IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVE OworCisgICAgICAvKiBDaGVjayBicmVha3BvaW50IHdoZW4gZm9yd2FyZCBl eGVjdXRlLiAgKi8KKyAgICAgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09 IEVYRUNfRk9SV0FSRCkKKwl7CisJICB0bXBfcGMgPSByZWdjYWNoZV9yZWFk X3BjIChyZWdjYWNoZSk7CisJICBpZiAoYnJlYWtwb2ludF9pbnNlcnRlZF9o ZXJlX3AgKHRtcF9wYykpCisJICAgIHsKKwkgICAgICBpZiAocmVjb3JkX2Rl YnVnKQorCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJ ICAgICJQcm9jZXNzIHJlY29yZDogYnJlYWsgYXQgMHglcy5cbiIsCisJCQkJ ICAgIHBhZGRyX256ICh0bXBfcGMpKTsKKwkgICAgICBpZiAoZ2RiYXJjaF9k ZWNyX3BjX2FmdGVyX2JyZWFrIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2Fj aGUpKQorCQkgICYmICFyZWNvcmRfcmVzdW1lX3N0ZXApCisJCXJlZ2NhY2hl X3dyaXRlX3BjIChyZWdjYWNoZSwKKwkJCQkgICB0bXBfcGMgKworCQkJCSAg IGdkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVhaworCQkJCSAgIChnZXRfcmVn Y2FjaGVfYXJjaCAocmVnY2FjaGUpKSk7CisJICAgICAgZ290byByZXBsYXlf b3V0OworCSAgICB9CisJfQorCisgICAgICByZWNvcmRfZ2V0X3NpZyA9IDA7 CisgICAgICBzaWduYWwgKFNJR0lOVCwgcmVjb3JkX3NpZ19oYW5kbGVyKTsK KyAgICAgIC8qIElmIEdEQiBpcyBpbiB0ZXJtaW5hbF9pbmZlcmlvciBtb2Rl LCBpdCB3aWxsIG5vdCBnZXQgdGhlIHNpZ25hbC4KKyAgICAgICAgIEFuZCBp biBHREIgcmVwbGF5IG1vZGUsIEdEQiBkb2Vzbid0IG5lZWQgdG8gYmUgaW4g dGVybWluYWxfaW5mZXJpb3IKKyAgICAgICAgIG1vZGUsIGJlY2F1c2UgaW5m ZXJpb3Igd2lsbCBub3QgZXhlY3V0ZWQuCisgICAgICAgICBUaGVuIHNldCBp dCB0byB0ZXJtaW5hbF9vdXJzIHRvIG1ha2UgR0RCIGdldCB0aGUgc2lnbmFs LiAgKi8KKyAgICAgIHRhcmdldF90ZXJtaW5hbF9vdXJzICgpOworCisgICAg ICAvKiBJbiBFWEVDX0ZPUldBUkQgbW9kZSwgcmVjb3JkX2xpc3QgcG9pbnRz IHRvIHRoZSB0YWlsIG9mIHByZXYKKyAgICAgICAgIGluc3RydWN0aW9uLiAg Ki8KKyAgICAgIGlmIChleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9S V0FSRCAmJiByZWNvcmRfbGlzdC0+bmV4dCkKKwlyZWNvcmRfbGlzdCA9IHJl Y29yZF9saXN0LT5uZXh0OworCisgICAgICAvKiBMb29wIG92ZXIgdGhlIHJl Y29yZF9saXN0LCBsb29raW5nIGZvciB0aGUgbmV4dCBwbGFjZSB0bworCSBz dG9wLiAgKi8KKyAgICAgIGRvCisJeworCSAgLyogQ2hlY2sgZm9yIGJlZ2lu bmluZyBhbmQgZW5kIG9mIGxvZy4gICovCisJICBpZiAoZXhlY3V0aW9uX2Rp cmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UKKwkgICAgICAmJiByZWNvcmRfbGlz dCA9PSAmcmVjb3JkX2ZpcnN0KQorCSAgICB7CisJICAgICAgLyogSGl0IGJl Z2lubmluZyBvZiByZWNvcmQgbG9nIGluIHJldmVyc2UuICAqLworCSAgICAg IHN0YXR1cy0+a2luZCA9IFRBUkdFVF9XQUlUS0lORF9OT19ISVNUT1JZOwor CSAgICAgIGJyZWFrOworCSAgICB9CisJICBpZiAoZXhlY3V0aW9uX2RpcmVj dGlvbiAhPSBFWEVDX1JFVkVSU0UgJiYgIXJlY29yZF9saXN0LT5uZXh0KQor CSAgICB7CisJICAgICAgLyogSGl0IGVuZCBvZiByZWNvcmQgbG9nIGdvaW5n IGZvcndhcmQuICAqLworCSAgICAgIHN0YXR1cy0+a2luZCA9IFRBUkdFVF9X QUlUS0lORF9OT19ISVNUT1JZOworCSAgICAgIGJyZWFrOworCSAgICB9CisK KwkgIC8qIFNldCBwdGlkLCByZWdpc3RlciBhbmQgbWVtb3J5IGFjY29yZGlu ZyB0byByZWNvcmRfbGlzdC4gICovCisJICBpZiAocmVjb3JkX2xpc3QtPnR5 cGUgPT0gcmVjb3JkX3JlZykKKwkgICAgeworCSAgICAgIC8qIHJlZyAqLwor CSAgICAgIGdkYl9ieXRlIHJlZ1tNQVhfUkVHSVNURVJfU0laRV07CisJICAg ICAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisJCWZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywKKwkJCQkgICAgIlByb2Nlc3MgcmVjb3JkOiByZWNv cmRfcmVnICVzIHRvICIKKwkJCQkgICAgImluZmVyaW9yIG51bSA9ICVkLlxu IiwKKwkJCQkgICAgaG9zdF9hZGRyZXNzX3RvX3N0cmluZyAocmVjb3JkX2xp c3QpLAorCQkJCSAgICByZWNvcmRfbGlzdC0+dS5yZWcubnVtKTsKKwkgICAg ICByZWdjYWNoZV9jb29rZWRfcmVhZCAocmVnY2FjaGUsIHJlY29yZF9saXN0 LT51LnJlZy5udW0sIHJlZyk7CisJICAgICAgcmVnY2FjaGVfY29va2VkX3dy aXRlIChyZWdjYWNoZSwgcmVjb3JkX2xpc3QtPnUucmVnLm51bSwKKwkJCQkg ICAgIHJlY29yZF9saXN0LT51LnJlZy52YWwpOworCSAgICAgIG1lbWNweSAo cmVjb3JkX2xpc3QtPnUucmVnLnZhbCwgcmVnLCBNQVhfUkVHSVNURVJfU0la RSk7CisJICAgIH0KKwkgIGVsc2UgaWYgKHJlY29yZF9saXN0LT50eXBlID09 IHJlY29yZF9tZW0pCisJICAgIHsKKwkgICAgICAvKiBtZW0gKi8KKwkgICAg ICBnZGJfYnl0ZSAqbWVtID0gYWxsb2NhIChyZWNvcmRfbGlzdC0+dS5tZW0u bGVuKTsKKwkgICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkKKwkJZnByaW50 Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgICAiUHJvY2VzcyBy ZWNvcmQ6IHJlY29yZF9tZW0gJXMgdG8gIgorCQkJCSAgICAiaW5mZXJpb3Ig YWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJCSAgICBob3N0X2FkZHJl c3NfdG9fc3RyaW5nIChyZWNvcmRfbGlzdCksCisJCQkJICAgIHBhZGRyX256 IChyZWNvcmRfbGlzdC0+dS5tZW0uYWRkciksCisJCQkJICAgIHJlY29yZF9s aXN0LT51Lm1lbS5sZW4pOworCisJICAgICAgaWYgKHRhcmdldF9yZWFkX21l bW9yeQorCQkgIChyZWNvcmRfbGlzdC0+dS5tZW0uYWRkciwgbWVtLCByZWNv cmRfbGlzdC0+dS5tZW0ubGVuKSkKKwkJZXJyb3IgKF8oIlByb2Nlc3MgcmVj b3JkOiBlcnJvciByZWFkaW5nIG1lbW9yeSBhdCAiCisJCQkgImFkZHIgPSAw eCVzIGxlbiA9ICVkLiIpLAorCQkgICAgICAgcGFkZHJfbnogKHJlY29yZF9s aXN0LT51Lm1lbS5hZGRyKSwKKwkJICAgICAgIHJlY29yZF9saXN0LT51Lm1l bS5sZW4pOworCisJICAgICAgaWYgKHRhcmdldF93cml0ZV9tZW1vcnkKKwkJ ICAocmVjb3JkX2xpc3QtPnUubWVtLmFkZHIsIHJlY29yZF9saXN0LT51Lm1l bS52YWwsCisJCSAgIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pKQorCQllcnJv ciAoXworCQkgICAgICAgKCJQcm9jZXNzIHJlY29yZDogZXJyb3Igd3JpdGlu ZyBtZW1vcnkgYXQgIgorCQkJImFkZHIgPSAweCVzIGxlbiA9ICVkLiIpLAor CQkgICAgICAgcGFkZHJfbnogKHJlY29yZF9saXN0LT51Lm1lbS5hZGRyKSwK KwkJICAgICAgIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOworCisJICAgICAg bWVtY3B5IChyZWNvcmRfbGlzdC0+dS5tZW0udmFsLCBtZW0sIHJlY29yZF9s aXN0LT51Lm1lbS5sZW4pOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkg ICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkKKwkJZnByaW50Zl91bmZpbHRl cmVkIChnZGJfc3RkbG9nLAorCQkJCSAgICAiUHJvY2VzcyByZWNvcmQ6IHJl Y29yZF9lbmQgJXMgdG8gIgorCQkJCSAgICAiaW5mZXJpb3IgbmVlZF9kYXNt ID0gJWQuXG4iLAorCQkJCSAgICBob3N0X2FkZHJlc3NfdG9fc3RyaW5nIChy ZWNvcmRfbGlzdCksCisJCQkJICAgIHJlY29yZF9saXN0LT51Lm5lZWRfZGFz bSk7CisKKwkgICAgICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBFWEVD X0ZPUldBUkQpCisJCW5lZWRfZGFzbSA9IHJlY29yZF9saXN0LT51Lm5lZWRf ZGFzbTsKKwkgICAgICBpZiAobmVlZF9kYXNtKQorCQlnZGJhcmNoX3Byb2Nl c3NfcmVjb3JkX2Rhc20gKGN1cnJlbnRfZ2RiYXJjaCk7CisKKwkgICAgICBp ZiAoZmlyc3RfcmVjb3JkX2VuZCAmJiBleGVjdXRpb25fZGlyZWN0aW9uID09 IEVYRUNfUkVWRVJTRSkKKwkJeworCQkgIC8qIFdoZW4gcmV2ZXJzZSBleGN1 dGUsIHRoZSBmaXJzdCByZWNvcmRfZW5kIGlzIHRoZSBwYXJ0IG9mCisJCSAg ICAgY3VycmVudCBpbnN0cnVjdGlvbi4gICovCisJCSAgZmlyc3RfcmVjb3Jk X2VuZCA9IDA7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICAvKiBJbiBF WEVDX1JFVkVSU0UgbW9kZSwgdGhpcyBpcyB0aGUgcmVjb3JkX2VuZCBvZiBw cmV2CisJCSAgICAgaW5zdHJ1Y3Rpb24uCisJCSAgICAgSW4gRVhFQ19GT1JX QVJEIG1vZGUsIHRoaXMgaXMgdGhlIHJlY29yZF9lbmQgb2YgY3VycmVudAor CQkgICAgIGluc3RydWN0aW9uLiAgKi8KKwkJICAvKiBzdGVwICovCisJCSAg aWYgKHJlY29yZF9yZXN1bWVfc3RlcCkKKwkJICAgIHsKKwkJICAgICAgaWYg KHJlY29yZF9kZWJ1ZyA+IDEpCisJCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdk Yl9zdGRsb2csCisJCQkJCSAgICAiUHJvY2VzcyByZWNvcmQ6IHN0ZXAuXG4i KTsKKwkJICAgICAgY29udGludWVfZmxhZyA9IDA7CisJCSAgICB9CisKKwkJ ICAvKiBjaGVjayBicmVha3BvaW50ICovCisJCSAgdG1wX3BjID0gcmVnY2Fj aGVfcmVhZF9wYyAocmVnY2FjaGUpOworCQkgIGlmIChicmVha3BvaW50X2lu c2VydGVkX2hlcmVfcCAodG1wX3BjKSkKKwkJICAgIHsKKwkJICAgICAgaWYg KHJlY29yZF9kZWJ1ZykKKwkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0 ZGxvZywKKwkJCQkJICAgICJQcm9jZXNzIHJlY29yZDogYnJlYWsgIgorCQkJ CQkgICAgImF0IDB4JXMuXG4iLAorCQkJCQkgICAgcGFkZHJfbnogKHRtcF9w YykpOworCQkgICAgICBpZiAoZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFr IChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUpKQorCQkJICAmJiBleGVj dXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FSRAorCQkJICAmJiAhcmVj b3JkX3Jlc3VtZV9zdGVwKQorCQkJcmVnY2FjaGVfd3JpdGVfcGMgKHJlZ2Nh Y2hlLAorCQkJCQkgICB0bXBfcGMgKworCQkJCQkgICBnZGJhcmNoX2RlY3Jf cGNfYWZ0ZXJfYnJlYWsKKwkJCQkJICAgKGdldF9yZWdjYWNoZV9hcmNoIChy ZWdjYWNoZSkpKTsKKwkJICAgICAgY29udGludWVfZmxhZyA9IDA7CisJCSAg ICB9CisJCX0KKwkgICAgICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9PSBF WEVDX1JFVkVSU0UpCisJCW5lZWRfZGFzbSA9IHJlY29yZF9saXN0LT51Lm5l ZWRfZGFzbTsKKwkgICAgfQorCituZXh0OgorCSAgaWYgKGNvbnRpbnVlX2Zs YWcpCisJICAgIHsKKwkgICAgICBpZiAoZXhlY3V0aW9uX2RpcmVjdGlvbiA9 PSBFWEVDX1JFVkVSU0UpCisJCXsKKwkJICBpZiAocmVjb3JkX2xpc3QtPnBy ZXYpCisJCSAgICByZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0LT5wcmV2Owor CQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYgKHJlY29yZF9saXN0LT5u ZXh0KQorCQkgICAgcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+bmV4dDsK KwkJfQorCSAgICB9CisJfQorICAgICAgd2hpbGUgKGNvbnRpbnVlX2ZsYWcp OworCisgICAgICBzaWduYWwgKFNJR0lOVCwgaGFuZGxlX3NpZ2ludCk7CisK K3JlcGxheV9vdXQ6CisgICAgICBpZiAocmVjb3JkX2dldF9zaWcpCisJc3Rh dHVzLT52YWx1ZS5zaWcgPSBUQVJHRVRfU0lHTkFMX0lOVDsKKyAgICAgIGVs c2UKKwlzdGF0dXMtPnZhbHVlLnNpZyA9IFRBUkdFVF9TSUdOQUxfVFJBUDsK KworICAgICAgZGlzY2FyZF9jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKKyAg ICB9CisKKyAgZG9fY2xlYW51cHMgKHNldF9jbGVhbnVwcyk7CisgIHJldHVy biBpbmZlcmlvcl9wdGlkOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2Rp c2Nvbm5lY3QgKHN0cnVjdCB0YXJnZXRfb3BzICp0YXJnZXQsIGNoYXIgKmFy Z3MsIGludCBmcm9tX3R0eSkKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAg ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJl Y29yZDogcmVjb3JkX2Rpc2Nvbm5lY3RcbiIpOworCisgIHVucHVzaF90YXJn ZXQgKCZyZWNvcmRfb3BzKTsKKyAgdGFyZ2V0X2Rpc2Nvbm5lY3QgKGFyZ3Ms IGZyb21fdHR5KTsKK30KKworc3RhdGljIHZvaWQKK3JlY29yZF9kZXRhY2gg KHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsIGNoYXIgKmFyZ3MsIGludCBmcm9t X3R0eSkKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogcmVjb3Jk X2RldGFjaFxuIik7CisKKyAgdW5wdXNoX3RhcmdldCAoJnJlY29yZF9vcHMp OworICB0YXJnZXRfZGV0YWNoIChhcmdzLCBmcm9tX3R0eSk7Cit9CisKK3N0 YXRpYyB2b2lkCityZWNvcmRfbW91cm5faW5mZXJpb3IgKHN0cnVjdCB0YXJn ZXRfb3BzICpvcHMpCit7CisgIGlmIChyZWNvcmRfZGVidWcpCisgICAgZnBy aW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNvcmQ6 ICIKKwkJCSAgICAgICAgICAgICJyZWNvcmRfbW91cm5faW5mZXJpb3JcbiIp OworCisgIHVucHVzaF90YXJnZXQgKCZyZWNvcmRfb3BzKTsKKyAgdGFyZ2V0 X21vdXJuX2luZmVyaW9yICgpOworfQorCisvKiBDbG9zZSBwcm9jZXNzIHJl Y29yZCB0YXJnZXQgYmVmb3JlIGtpbGxpbmcgdGhlIGluZmVyaW9yIHByb2Nl c3MuICAqLworc3RhdGljIHZvaWQKK3JlY29yZF9raWxsICh2b2lkKQorewor ICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfa2lsbFxuIik7 CisKKyAgdW5wdXNoX3RhcmdldCAoJnJlY29yZF9vcHMpOworICB0YXJnZXRf a2lsbCAoKTsKK30KKworLyogUmVjb3JkIHJlZ2lzdGVycyBjaGFuZ2UgKGJ5 IHVzZXIgb3IgYnkgR0RCKSB0byBsaXN0IGFzIGFuIGluc3RydWN0aW9uLiAg Ki8KK3N0YXRpYyB2b2lkCityZWNvcmRfcmVnaXN0ZXJzX2NoYW5nZSAoc3Ry dWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ251bSkKK3sKKyAgLyog Q2hlY2sgcmVjb3JkX2luc25fbnVtLiAgKi8KKyAgcmVjb3JkX2NoZWNrX2lu c25fbnVtICgwKTsKKworICByZWNvcmRfYXJjaF9saXN0X2hlYWQgPSBOVUxM OworICByZWNvcmRfYXJjaF9saXN0X3RhaWwgPSBOVUxMOworCisgIHJlY29y ZF9yZWdjYWNoZSA9IGdldF9jdXJyZW50X3JlZ2NhY2hlICgpOworCisgIGlm IChyZWdudW0gPCAwKQorICAgIHsKKyAgICAgIGludCBpOworICAgICAgZm9y IChpID0gMDsgaSA8IGdkYmFyY2hfbnVtX3JlZ3MgKGdldF9yZWdjYWNoZV9h cmNoIChyZWdjYWNoZSkpOyBpKyspCisJeworCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAoaSkpCisJICAgIHsKKwkgICAgICByZWNvcmRfbGlz dF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworCSAgICAgIGVy cm9yIChfKCJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVj dXRpb24gbG9nLiIpKTsKKwkgICAgfQorCX0KKyAgICB9CisgIGVsc2UKKyAg ICB7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdu dW0pKQorCXsKKwkgIHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNo X2xpc3RfdGFpbCk7CisJICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGZh aWxlZCB0byByZWNvcmQgZXhlY3V0aW9uIGxvZy4iKSk7CisJfQorICAgIH0K KyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX2VuZCAoMCkpCisgICAgewor ICAgICAgcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3JkX2FyY2hfbGlzdF90 YWlsKTsKKyAgICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29yZDogZmFpbGVk IHRvIHJlY29yZCBleGVjdXRpb24gbG9nLiIpKTsKKyAgICB9CisgIHJlY29y ZF9saXN0LT5uZXh0ID0gcmVjb3JkX2FyY2hfbGlzdF9oZWFkOworICByZWNv cmRfYXJjaF9saXN0X2hlYWQtPnByZXYgPSByZWNvcmRfbGlzdDsKKyAgcmVj b3JkX2xpc3QgPSByZWNvcmRfYXJjaF9saXN0X3RhaWw7CisKKyAgaWYgKHJl Y29yZF9pbnNuX251bSA9PSByZWNvcmRfaW5zbl9tYXhfbnVtICYmIHJlY29y ZF9pbnNuX21heF9udW0pCisgICAgcmVjb3JkX2xpc3RfcmVsZWFzZV9maXJz dCAoKTsKKyAgZWxzZQorICAgIHJlY29yZF9pbnNuX251bSsrOworfQorCitz dGF0aWMgdm9pZAorcmVjb3JkX3N0b3JlX3JlZ2lzdGVycyAoc3RydWN0IHJl Z2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25vKQoreworICBpZiAoIXJlY29y ZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGUpCisgICAgeworICAgICAgaWYgKFJF Q09SRF9JU19SRVBMQVkpCisJeworCSAgaW50IG47CisJICBzdHJ1Y3QgY2xl YW51cCAqb2xkX2NsZWFudXBzOworCisJICAvKiBMZXQgdXNlciBjaG9vc2Ug aWYgaGUgd2FudHMgdG8gd3JpdGUgcmVnaXN0ZXIgb3Igbm90LiAgKi8KKwkg IGlmIChyZWdubyA8IDApCisJICAgIG4gPQorCSAgICAgIG5xdWVyeSAoXygi QmVjYXVzZSBHREIgaXMgaW4gcmVwbGF5IG1vZGUsIGNoYW5naW5nIHRoZSAi CisJCQkidmFsdWUgb2YgYSByZWdpc3RlciB3aWxsIG1ha2UgdGhlIGV4ZWN1 dGlvbiAiCisJCQkibG9nIHVudXNhYmxlIGZyb20gdGhpcyBwb2ludCBvbndh cmQuICAiCisJCQkiQ2hhbmdlIGFsbCByZWdpc3RlcnM/IikpOworCSAgZWxz ZQorCSAgICBuID0KKwkgICAgICBucXVlcnkgKF8oIkJlY2F1c2UgR0RCIGlz IGluIHJlcGxheSBtb2RlLCBjaGFuZ2luZyB0aGUgdmFsdWUgIgorCQkJIm9m IGEgcmVnaXN0ZXIgd2lsbCBtYWtlIHRoZSBleGVjdXRpb24gbG9nIHVudXNh YmxlICIKKwkJCSJmcm9tIHRoaXMgcG9pbnQgb253YXJkLiAgQ2hhbmdlIHJl Z2lzdGVyICVzPyIpLAorCQkgICAgICBnZGJhcmNoX3JlZ2lzdGVyX25hbWUg KGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSksCisJCQkJCSAgICAgICBy ZWdubykpOworCisJICBpZiAoIW4pCisJICAgIHsKKwkgICAgICAvKiBJbnZh bGlkYXRlIHRoZSB2YWx1ZSBvZiByZWdjYWNoZSB0aGF0IHdhcyBzZXQgaW4g ZnVuY3Rpb24KKwkgICAgICAgICAicmVnY2FjaGVfcmF3X3dyaXRlIi4gICov CisJICAgICAgaWYgKHJlZ25vIDwgMCkKKwkJeworCQkgIGludCBpOworCQkg IGZvciAoaSA9IDA7CisJCSAgICAgICBpIDwgZ2RiYXJjaF9udW1fcmVncyAo Z2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKSk7CisJCSAgICAgICBpKysp CisJCSAgICByZWdjYWNoZV9pbnZhbGlkYXRlIChyZWdjYWNoZSwgaSk7CisJ CX0KKwkgICAgICBlbHNlCisJCXJlZ2NhY2hlX2ludmFsaWRhdGUgKHJlZ2Nh Y2hlLCByZWdubyk7CisKKwkgICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNv cmQgY2FuY2VsZWQgdGhlIG9wZXJhdGlvbi4iKSk7CisJICAgIH0KKworCSAg LyogRGVzdHJveSB0aGUgcmVjb3JkIGZyb20gaGVyZSBmb3J3YXJkLiAgKi8K KwkgIHJlY29yZF9saXN0X3JlbGVhc2VfbmV4dCAoKTsKKwl9CisKKyAgICAg IHJlY29yZF9yZWdpc3RlcnNfY2hhbmdlIChyZWdjYWNoZSwgcmVnbm8pOwor ICAgIH0KKyAgcmVjb3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0ZXJzIChy ZWdjYWNoZSwgcmVnbm8pOworfQorCisvKiByZWNvcmRfeGZlcl9wYXJ0aWFs IC0tIGJlaGF2aW9yIGlzIGNvbmRpdGlvbmFsIG9uIFJFQ09SRF9JU19SRVBM QVkuCisgICBJbiByZXBsYXkgbW9kZSwgd2UgY2Fubm90IHdyaXRlIG1lbW9y eSB1bmxlcyB3ZSBhcmUgd2lsbGluZyB0bworICAgaW52YWxpZGF0ZSB0aGUg cmVjb3JkL3JlcGxheSBsb2cgZnJvbSB0aGlzIHBvaW50IGZvcndhcmQuICAq LworCitzdGF0aWMgTE9OR0VTVAorcmVjb3JkX3hmZXJfcGFydGlhbCAoc3Ry dWN0IHRhcmdldF9vcHMgKm9wcywgZW51bSB0YXJnZXRfb2JqZWN0IG9iamVj dCwKKwkJICAgICBjb25zdCBjaGFyICphbm5leCwgZ2RiX2J5dGUgKiByZWFk YnVmLAorCQkgICAgIGNvbnN0IGdkYl9ieXRlICogd3JpdGVidWYsIFVMT05H RVNUIG9mZnNldCwgTE9OR0VTVCBsZW4pCit7CisgIGlmICghcmVjb3JkX2dk Yl9vcGVyYXRpb25fZGlzYWJsZQorICAgICAgJiYgKG9iamVjdCA9PSBUQVJH RVRfT0JKRUNUX01FTU9SWQorCSAgfHwgb2JqZWN0ID09IFRBUkdFVF9PQkpF Q1RfUkFXX01FTU9SWSkgJiYgd3JpdGVidWYpCisgICAgeworICAgICAgaWYg KFJFQ09SRF9JU19SRVBMQVkpCisJeworCSAgLyogTGV0IHVzZXIgY2hvb3Nl IGlmIGhlIHdhbnRzIHRvIHdyaXRlIG1lbW9yeSBvciBub3QuICAqLworCSAg aWYgKCFucXVlcnkgKF8oIkJlY2F1c2UgR0RCIGlzIGluIHJlcGxheSBtb2Rl LCB3cml0aW5nIHRvIG1lbW9yeSAiCisJCSAgICAgICAgICJ3aWxsIG1ha2Ug dGhlIGV4ZWN1dGlvbiBsb2cgdW51c2FibGUgZnJvbSB0aGlzICIKKwkJICAg ICAgICAgInBvaW50IG9ud2FyZC4gIFdyaXRlIG1lbW9yeSBhdCBhZGRyZXNz IDB4JXM/IiksCisJCSAgICAgICBwYWRkcl9ueiAob2Zmc2V0KSkpCisJICAg IHJldHVybiAtMTsKKworCSAgLyogRGVzdHJveSB0aGUgcmVjb3JkIGZyb20g aGVyZSBmb3J3YXJkLiAgKi8KKwkgIHJlY29yZF9saXN0X3JlbGVhc2VfbmV4 dCAoKTsKKwl9CisKKyAgICAgIC8qIENoZWNrIHJlY29yZF9pbnNuX251bSAq LworICAgICAgcmVjb3JkX2NoZWNrX2luc25fbnVtICgwKTsKKworICAgICAg LyogUmVjb3JkIHJlZ2lzdGVycyBjaGFuZ2UgdG8gbGlzdCBhcyBhbiBpbnN0 cnVjdGlvbi4gICovCisgICAgICByZWNvcmRfYXJjaF9saXN0X2hlYWQgPSBO VUxMOworICAgICAgcmVjb3JkX2FyY2hfbGlzdF90YWlsID0gTlVMTDsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKG9mZnNldCwgbGVu KSkKKwl7CisJICByZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9s aXN0X3RhaWwpOworCSAgaWYgKHJlY29yZF9kZWJ1ZykKKwkgICAgZnByaW50 Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCV8oIlByb2Nlc3MgcmVj b3JkOiBmYWlsZWQgdG8gcmVjb3JkICIKKwkJCQkgICJleGVjdXRpb24gbG9n LiIpKTsKKwkgIHJldHVybiAtMTsKKwl9CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfZW5kICgwKSkKKwl7CisJICByZWNvcmRfbGlzdF9yZWxl YXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworCSAgaWYgKHJlY29yZF9k ZWJ1ZykKKwkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor CQkJCV8oIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkICIKKwkJ CQkgICJleGVjdXRpb24gbG9nLiIpKTsKKwkgIHJldHVybiAtMTsKKwl9Cisg ICAgICByZWNvcmRfbGlzdC0+bmV4dCA9IHJlY29yZF9hcmNoX2xpc3RfaGVh ZDsKKyAgICAgIHJlY29yZF9hcmNoX2xpc3RfaGVhZC0+cHJldiA9IHJlY29y ZF9saXN0OworICAgICAgcmVjb3JkX2xpc3QgPSByZWNvcmRfYXJjaF9saXN0 X3RhaWw7CisKKyAgICAgIGlmIChyZWNvcmRfaW5zbl9udW0gPT0gcmVjb3Jk X2luc25fbWF4X251bSAmJiByZWNvcmRfaW5zbl9tYXhfbnVtKQorCXJlY29y ZF9saXN0X3JlbGVhc2VfZmlyc3QgKCk7CisgICAgICBlbHNlCisJcmVjb3Jk X2luc25fbnVtKys7CisgICAgfQorCisgIHJldHVybiByZWNvcmRfYmVuZWF0 aF90b194ZmVyX3BhcnRpYWwgKG9wcywgb2JqZWN0LCBhbm5leCwgcmVhZGJ1 ZiwKKwkJCQkJIHdyaXRlYnVmLCBvZmZzZXQsIGxlbik7Cit9CisKKy8qIHJl Y29yZF9pbnNlcnRfYnJlYWtwb2ludAorICAgcmVjb3JkX3JlbW92ZV9icmVh a3BvaW50CisgICBCZWhhdmlvciBpcyBjb25kaXRpb25hbCBvbiBSRUNPUkRf SVNfUkVQTEFZLgorICAgV2Ugd2lsbCBub3QgYWN0dWFsbHkgaW5zZXJ0IG9y IHJlbW92ZSBicmVha3BvaW50cyB3aGVuIHJlcGxheWluZywKKyAgIG5vciB3 aGVuIHJlY29yZGluZy4gICovCisKK3N0YXRpYyBpbnQKK3JlY29yZF9pbnNl cnRfYnJlYWtwb2ludCAoc3RydWN0IGJwX3RhcmdldF9pbmZvICpicF90Z3Qp Cit7CisgIGlmICghUkVDT1JEX0lTX1JFUExBWSkKKyAgICB7CisgICAgICBz dHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzID0gcmVjb3JkX2dkYl9vcGVy YXRpb25fZGlzYWJsZV9zZXQgKCk7CisgICAgICBpbnQgcmV0ID0gcmVjb3Jk X2JlbmVhdGhfdG9faW5zZXJ0X2JyZWFrcG9pbnQgKGJwX3RndCk7CisKKyAg ICAgIGRvX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOworCisgICAgICByZXR1 cm4gcmV0OworICAgIH0KKworICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dAorcmVjb3JkX3JlbW92ZV9icmVha3BvaW50IChzdHJ1Y3QgYnBfdGFyZ2V0 X2luZm8gKmJwX3RndCkKK3sKKyAgaWYgKCFSRUNPUkRfSVNfUkVQTEFZKQor ICAgIHsKKyAgICAgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHMgPSBy ZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxlX3NldCAoKTsKKyAgICAgIGlu dCByZXQgPSByZWNvcmRfYmVuZWF0aF90b19yZW1vdmVfYnJlYWtwb2ludCAo YnBfdGd0KTsKKworICAgICAgZG9fY2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7 CisKKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50CityZWNvcmRfY2FuX2V4ZWN1dGVfcmV2ZXJzZSAo dm9pZCkKK3sKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0 X3JlY29yZF9vcHMgKHZvaWQpCit7CisgIHJlY29yZF9vcHMudG9fc2hvcnRu YW1lID0gInJlY29yZCI7CisgIHJlY29yZF9vcHMudG9fbG9uZ25hbWUgPSAi UHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQiOworICByZWNvcmRf b3BzLnRvX2RvYyA9CisgICAgIkxvZyBwcm9ncmFtIHdoaWxlIGV4ZWN1dGlu ZyBhbmQgcmVwbGF5IGV4ZWN1dGlvbiBmcm9tIGxvZy4iOworICByZWNvcmRf b3BzLnRvX29wZW4gPSByZWNvcmRfb3BlbjsKKyAgcmVjb3JkX29wcy50b19j bG9zZSA9IHJlY29yZF9jbG9zZTsKKyAgcmVjb3JkX29wcy50b19yZXN1bWUg PSByZWNvcmRfcmVzdW1lOworICByZWNvcmRfb3BzLnRvX3dhaXQgPSByZWNv cmRfd2FpdDsKKyAgcmVjb3JkX29wcy50b19kaXNjb25uZWN0ID0gcmVjb3Jk X2Rpc2Nvbm5lY3Q7CisgIHJlY29yZF9vcHMudG9fZGV0YWNoID0gcmVjb3Jk X2RldGFjaDsKKyAgcmVjb3JkX29wcy50b19tb3Vybl9pbmZlcmlvciA9IHJl Y29yZF9tb3Vybl9pbmZlcmlvcjsKKyAgcmVjb3JkX29wcy50b19raWxsID0g cmVjb3JkX2tpbGw7CisgIHJlY29yZF9vcHMudG9fY3JlYXRlX2luZmVyaW9y ID0gZmluZF9kZWZhdWx0X2NyZWF0ZV9pbmZlcmlvcjsKKyAgcmVjb3JkX29w cy50b19zdG9yZV9yZWdpc3RlcnMgPSByZWNvcmRfc3RvcmVfcmVnaXN0ZXJz OworICByZWNvcmRfb3BzLnRvX3hmZXJfcGFydGlhbCA9IHJlY29yZF94ZmVy X3BhcnRpYWw7CisgIHJlY29yZF9vcHMudG9faW5zZXJ0X2JyZWFrcG9pbnQg PSByZWNvcmRfaW5zZXJ0X2JyZWFrcG9pbnQ7CisgIHJlY29yZF9vcHMudG9f cmVtb3ZlX2JyZWFrcG9pbnQgPSByZWNvcmRfcmVtb3ZlX2JyZWFrcG9pbnQ7 CisgIHJlY29yZF9vcHMudG9fY2FuX2V4ZWN1dGVfcmV2ZXJzZSA9IHJlY29y ZF9jYW5fZXhlY3V0ZV9yZXZlcnNlOworICByZWNvcmRfb3BzLnRvX3N0cmF0 dW0gPSByZWNvcmRfc3RyYXR1bTsKKyAgcmVjb3JkX29wcy50b19tYWdpYyA9 IE9QU19NQUdJQzsKK30KKworc3RhdGljIHZvaWQKK3Nob3dfcmVjb3JkX2Rl YnVnIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAorCQkg ICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqYywgY29uc3QgY2hhciAqdmFs dWUpCit7CisgIGZwcmludGZfZmlsdGVyZWQgKGZpbGUsIF8oIkRlYnVnZ2lu ZyBvZiBwcm9jZXNzIHJlY29yZCB0YXJnZXQgaXMgJXMuXG4iKSwKKwkJICAg IHZhbHVlKTsKK30KKworLyogY21kX3JlY29yZF9zdGFydCAtLSBhbGlhcyBm b3IgInRhcmdldCByZWNvcmQiLiAgKi8KKworc3RhdGljIHZvaWQKK2NtZF9y ZWNvcmRfc3RhcnQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAg ZXhlY3V0ZV9jb21tYW5kICgidGFyZ2V0IHJlY29yZCIsIGZyb21fdHR5KTsK K30KKworLyogY21kX3JlY29yZF9kZWxldGUgLS0gdHJ1bmNhdGUgdGhlIHJl Y29yZCBsb2cgZnJvbSB0aGUgcHJlc2VudCBwb2ludAorICAgb2YgcmVwbGF5 IHVudGlsIHRoZSBlbmQuICAqLworCitzdGF0aWMgdm9pZAorY21kX3JlY29y ZF9kZWxldGUgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgaWYg KFRBUkdFVF9JU19QUk9DRVNTX1JFQ09SRCkKKyAgICB7CisgICAgICBpZiAo UkVDT1JEX0lTX1JFUExBWSkKKwl7CisJICBpZiAoIWZyb21fdHR5IHx8IHF1 ZXJ5IChfKCJEZWxldGUgdGhlIGxvZyBmcm9tIHRoaXMgcG9pbnQgZm9yd2Fy ZCAiCisJCSAgICAgICAgICAgICAgICAgICAgImFuZCBiZWdpbiB0byByZWNv cmQgdGhlIHJ1bm5pbmcgbWVzc2FnZSAiCisJCSAgICAgICAgICAgICAgICAg ICAgImF0IGN1cnJlbnQgUEM/IikpKQorCSAgICByZWNvcmRfbGlzdF9yZWxl YXNlX25leHQgKCk7CisJfQorICAgICAgZWxzZQorCSAgcHJpbnRmX3VuZmls dGVyZWQgKF8oIkFscmVhZHkgYXQgZW5kIG9mIHJlY29yZCBsaXN0LlxuIikp OworCisgICAgfQorICBlbHNlCisgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8o IlByb2Nlc3MgcmVjb3JkIGlzIG5vdCBzdGFydGVkLlxuIikpOworfQorCisv KiBjbWRfcmVjb3JkX3N0b3AgLS0gaW1wbGVtZW50IHRoZSAic3RvcHJlY29y ZCIgY29tbWFuZC4gICovCisKK3N0YXRpYyB2b2lkCitjbWRfcmVjb3JkX3N0 b3AgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgaWYgKFRBUkdF VF9JU19QUk9DRVNTX1JFQ09SRCkKKyAgICB7CisgICAgICBpZiAoIXJlY29y ZF9saXN0IHx8ICFmcm9tX3R0eSB8fCBxdWVyeSAoXygiRGVsZXRlIHJlY29y ZGVkIGxvZyBhbmQgIgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAic3RvcCByZWNvcmRpbmc/IikpKQorCXVucHVzaF90YXJn ZXQgKCZyZWNvcmRfb3BzKTsKKyAgICB9CisgIGVsc2UKKyAgICBwcmludGZf dW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQgaXMgbm90IHN0YXJ0ZWQu XG4iKSk7Cit9CisKKy8qIHNldF9yZWNvcmRfaW5zbl9tYXhfbnVtIC0tIHNl dCB1cHBlciBsaW1pdCBvZiByZWNvcmQgbG9nIHNpemUuICAqLworCitzdGF0 aWMgdm9pZAorc2V0X3JlY29yZF9pbnNuX21heF9udW0gKGNoYXIgKmFyZ3Ms IGludCBmcm9tX3R0eSwgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmMpCit7 CisgIGlmIChyZWNvcmRfaW5zbl9udW0gPiByZWNvcmRfaW5zbl9tYXhfbnVt ICYmIHJlY29yZF9pbnNuX21heF9udW0pCisgICAgeworICAgICAgcHJpbnRm X3VuZmlsdGVyZWQgKF8oIlJlY29yZCBpbnN0cnVjdGlvbnMgbnVtYmVyIGlz IGJpZ2dlciB0aGFuICIKKwkJICAgICAgICAgICAicmVjb3JkIGluc3RydWN0 aW9ucyBtYXggbnVtYmVyLiAgQXV0byBkZWxldGUgIgorCQkgICAgICAgICAg ICJ0aGUgZmlyc3Qgb25lcz9cbiIpKTsKKworICAgICAgd2hpbGUgKHJlY29y ZF9pbnNuX251bSA+IHJlY29yZF9pbnNuX21heF9udW0pCisJcmVjb3JkX2xp c3RfcmVsZWFzZV9maXJzdCAoKTsKKyAgICB9Cit9CisKKy8qIHNob3dfcmVj b3JkX2luc25fbnVtYmVyIC0tIHByaW50IHRoZSBjdXJyZW50IGluZGV4Cisg ICBpbnRvIHRoZSByZWNvcmQgbG9nIChudW1iZXIgb2YgaW5zbnMgcmVjb3Jk ZWQgc28gZmFyKS4gICovCisKK3N0YXRpYyB2b2lkCitzaG93X3JlY29yZF9p bnNuX251bWJlciAoY2hhciAqaWdub3JlLCBpbnQgZnJvbV90dHkpCit7Cisg IHByaW50Zl91bmZpbHRlcmVkIChfKCJSZWNvcmQgaW5zdHJ1Y3Rpb24gbnVt YmVyIGlzICVkLlxuIiksCisJCSAgICAgcmVjb3JkX2luc25fbnVtKTsKK30K Kwordm9pZAorX2luaXRpYWxpemVfcmVjb3JkICh2b2lkKQoreworICAvKiBJ bml0IHJlY29yZF9tYXNrYWxsLiAgKi8KKyAgaWYgKHNpZ2ZpbGxzZXQgKCZy ZWNvcmRfbWFza2FsbCkgPT0gLTEpCisgICAgcGVycm9yX3dpdGhfbmFtZSAo XygiUHJvY2VzcyByZWNvcmQ6IHNpZ2ZpbGxzZXQgZmFpbGVkIikpOworCisg IC8qIEluaXQgcmVjb3JkX2ZpcnN0LiAgKi8KKyAgcmVjb3JkX2ZpcnN0LnBy ZXYgPSBOVUxMOworICByZWNvcmRfZmlyc3QubmV4dCA9IE5VTEw7CisgIHJl Y29yZF9maXJzdC50eXBlID0gcmVjb3JkX2VuZDsKKyAgcmVjb3JkX2ZpcnN0 LnUubmVlZF9kYXNtID0gMDsKKworICBpbml0X3JlY29yZF9vcHMgKCk7Cisg IGFkZF90YXJnZXQgKCZyZWNvcmRfb3BzKTsKKworICBhZGRfc2V0c2hvd196 aW50ZWdlcl9jbWQgKCJyZWNvcmQiLCBub19jbGFzcywgJnJlY29yZF9kZWJ1 ZywKKwkJCSAgICBfKCJTZXQgZGVidWdnaW5nIG9mIHJlY29yZC9yZXBsYXkg ZmVhdHVyZS4iKSwKKwkJCSAgICBfKCJTaG93IGRlYnVnZ2luZyBvZiByZWNv cmQvcmVwbGF5IGZlYXR1cmUuIiksCisJCQkgICAgXygiV2hlbiBlbmFibGVk LCBkZWJ1Z2dpbmcgb3V0cHV0IGZvciAiCisJCQkgICAgICAicmVjb3JkL3Jl cGxheSBmZWF0dXJlIGlzIGRpc3BsYXllZC4iKSwKKwkJCSAgICBOVUxMLCBz aG93X3JlY29yZF9kZWJ1ZywgJnNldGRlYnVnbGlzdCwKKwkJCSAgICAmc2hv d2RlYnVnbGlzdCk7CisKKyAgYWRkX2NvbSAoInJlY29yZCIsIGNsYXNzX29i c2N1cmUsIGNtZF9yZWNvcmRfc3RhcnQsCisJICAgXygiQWJicmV2aWF0ZWQg Zm9ybSBvZiBcInRhcmdldCByZWNvcmRcIiBjb21tYW5kLiIpKTsKKworICBh ZGRfY29tX2FsaWFzICgicmVjIiwgInJlY29yZCIsIGNsYXNzX29ic2N1cmUs IDEpOworCisgIC8qIFhYWDogSSB0cnkgdG8gdXNlIHNvbWUgc2ltcGxlIGNv bW1hbmRzIHN1Y2ggYXMgImRpc2Nvbm5lY3QiIGFuZAorICAgICAiZGV0YWNo IiB0byBzdXBwb3J0IHRoaXMgZnVuY3Rpb25zLiAgQnV0IHRoZXNlIGNvbW1h bmRzIGFsbCBoYXZlCisgICAgIG90aGVyIGFmZmVjdCB0byBHREIgc3VjaCBh cyBjYWxsIGZ1bmN0aW9uICJub19zaGFyZWRfbGlicmFyaWVzIi4KKyAgICAg U28gSSBhZGQgc3BlY2lhbCBjb21tYW5kcyB0byBHREIuICAqLworICBhZGRf Y29tICgiZGVscmVjb3JkIiwgY2xhc3Nfb2JzY3VyZSwgY21kX3JlY29yZF9k ZWxldGUsCisJICAgXygiRGVsZXRlIHRoZSByZXN0IG9mIGV4ZWN1dGlvbiBs b2cgYW5kIHN0YXJ0IHJlY29yZGluZyBpdCBhbmV3LiIpKTsKKyAgYWRkX2Nv bV9hbGlhcyAoImRyIiwgImRlbHJlY29yZCIsIGNsYXNzX29ic2N1cmUsIDEp OworICBhZGRfY29tICgic3RvcHJlY29yZCIsIGNsYXNzX29ic2N1cmUsIGNt ZF9yZWNvcmRfc3RvcCwKKwkgICBfKCJTdG9wIHRoZSByZWNvcmQvcmVwbGF5 IHRhcmdldC4iKSk7CisgIGFkZF9jb21fYWxpYXMgKCJzciIsICJzdG9wcmVj b3JkIiwgY2xhc3Nfb2JzY3VyZSwgMSk7CisKKyAgLyogUmVjb3JkIGluc3Ry dWN0aW9ucyBudW1iZXIgbGltaXQgY29tbWFuZC4gICovCisgIGFkZF9zZXRz aG93X2Jvb2xlYW5fY21kICgicmVjb3JkLXN0b3AtYXQtbGltaXQiLCBub19j bGFzcywKKwkJCSAgICAmcmVjb3JkX3N0b3BfYXRfbGltaXQsCisJCQkgICAg XygiU2V0IHdoZXRoZXIgcmVjb3JkL3JlcGxheSBzdG9wIHdoZW4gIgorCQkJ ICAgICAgInJlY29yZC9yZXBsYXkgYnVmZmVyIGJlY29tZXMgZnVsbC4iKSwK KwkJCSAgICBfKCJTaG93IHdoZXRoZXIgcmVjb3JkL3JlcGxheSBzdG9wIHdo ZW4gIgorCQkJICAgICAgInJlY29yZC9yZXBsYXkgYnVmZmVyIGJlY29tZXMg ZnVsbC4iKSwKKwkgICAgICAgICAgICAgICAgICAgIF8oIkVuYWJsZSBpcyBk ZWZhdWx0IHZhbHVlLlxuIgorCSAgICAgICAgICAgICAgICAgICAgICAiV2hl biBlbmFibGVkLCBpZiB0aGUgcmVjb3JkL3JlcGxheSBidWZmZXIgIgorCQkJ ICAgICAgImJlY29tZXMgZnVsbCxcbiIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJhc2sgdXNlciB3aGF0IHRvIGRvLlxuIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIldoZW4gZGlzYWJsZWQsIGlmIHRoZSBy ZWNvcmQvcmVwbGF5IGJ1ZmZlciAiCisJCQkgICAgICAiYmVjb21lcyBmdWxs LFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZSBp dCBhbmQgc3RhcnQgbmV3IHJlY29yZGluZy4iKSwKKwkJCSAgICBOVUxMLCBO VUxMLCAmc2V0bGlzdCwgJnNob3dsaXN0KTsKKyAgYWRkX3NldHNob3dfemlu dGVnZXJfY21kICgicmVjb3JkLWluc24tbnVtYmVyLW1heCIsIG5vX2NsYXNz LAorCQkJICAgICZyZWNvcmRfaW5zbl9tYXhfbnVtLAorCQkJICAgIF8oIlNl dCByZWNvcmQvcmVwbGF5IGJ1ZmZlciBsaW1pdC4iKSwKKwkJCSAgICBfKCJT aG93IHJlY29yZC9yZXBsYXkgYnVmZmVyIGxpbWl0LiIpLAorCQkJICAgIF8o IlNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zIHRvIGJl ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdG9yZWQgaW4g dGhlXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjb3Jk L3JlcGxheSBidWZmZXIuICAiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiWmVybyBtZWFucyB1bmxpbWl0ZWQgKGRlZmF1bHQgMjAwMDAwKS4i KSwKKwkJCSAgICBzZXRfcmVjb3JkX2luc25fbWF4X251bSwKKwkJCSAgICBO VUxMLCAmc2V0bGlzdCwgJnNob3dsaXN0KTsKKyAgYWRkX2luZm8gKCJyZWNv cmQtaW5zbi1udW1iZXIiLCBzaG93X3JlY29yZF9pbnNuX251bWJlciwKKwkg ICAgXygiU2hvdyB0aGUgY3VycmVudCBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25z IGluIHRoZSAiCisJICAgICAgInJlY29yZC9yZXBsYXkgYnVmZmVyLiIpKTsK K30KLS0tIC9kZXYvbnVsbAorKysgYi9yZWNvcmQuaApAQCAtMCwwICsxLDEw MSBAQAorLyogUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQgZm9y IEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IChDKSAy MDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlz IGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4gICovCisKKyNpZm5kZWYgX1JFQ09SRF9IXworI2RlZmluZSBfUkVDT1JE X0hfCisKKyNkZWZpbmUgVEFSR0VUX0lTX1BST0NFU1NfUkVDT1JEICAgXAor ICAgICAoY3VycmVudF90YXJnZXQuYmVuZWF0aCA9PSAmcmVjb3JkX29wcykK KyNkZWZpbmUgUkVDT1JEX0lTX1JFUExBWSBcCisgICAgIChyZWNvcmRfbGlz dC0+bmV4dCB8fCBleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJT RSkKKwordHlwZWRlZiBzdHJ1Y3QgcmVjb3JkX3JlZ19zCit7CisgIGludCBu dW07CisgIGdkYl9ieXRlICp2YWw7Cit9IHJlY29yZF9yZWdfdDsKKwordHlw ZWRlZiBzdHJ1Y3QgcmVjb3JkX21lbV9zCit7CisgIENPUkVfQUREUiBhZGRy OworICBpbnQgbGVuOworICBnZGJfYnl0ZSAqdmFsOworfSByZWNvcmRfbWVt X3Q7CisKK2VudW0gcmVjb3JkX3R5cGUKK3sKKyAgcmVjb3JkX2VuZCA9IDAs CisgIHJlY29yZF9yZWcsCisgIHJlY29yZF9tZW0KK307CisKKy8qIFRoaXMg aXMgdGhlIGNvcmUgc3RydWN0IG9mIHJlY29yZCBmdW5jdGlvbi4KKworICAg QW4gZW50aXR5IG9mIHJlY29yZF90IGlzIGEgcmVjb3JkIG9mIHRoZSB2YWx1 ZSBjaGFuZ2Ugb2YgYSByZWdpc3RlcgorICAgKCJyZWNvcmRfcmVnIikgb3Ig YSBwYXJ0IG9mIG1lbW9yeSAoInJlY29yZF9tZW0iKS4gIEFuZCBlYWNoCisg ICBpbnN0cnVjdGlvbiBtdXN0IGhhcyBhIHJlY29yZF90ICgicmVjb3JkX2Vu ZCIpIHRoYXQgcG9pbnRzIG91dCB0aGlzCisgICBpcyB0aGUgbGFzdCByZWNv cmRfdCBvZiB0aGlzIGluc3RydWN0aW9uLgorCisgICBFYWNoIHJlY29yZF90 IGlzIGxpbmtlZCB0byAicmVjb3JkX2xpc3QiIGJ5ICJwcmV2IiBhbmQgIm5l eHQiLgorICovCit0eXBlZGVmIHN0cnVjdCByZWNvcmRfcworeworICBzdHJ1 Y3QgcmVjb3JkX3MgKnByZXY7CisgIHN0cnVjdCByZWNvcmRfcyAqbmV4dDsK KyAgZW51bSByZWNvcmRfdHlwZSB0eXBlOworICB1bmlvbgorICB7CisgICAg LyogcmVnICovCisgICAgcmVjb3JkX3JlZ190IHJlZzsKKyAgICAvKiBtZW0g Ki8KKyAgICByZWNvcmRfbWVtX3QgbWVtOworICAgIC8qIGVuZCAqLworICAg IGludCBuZWVkX2Rhc207CisgIH0gdTsKK30gcmVjb3JkX3Q7CisKK2V4dGVy biBpbnQgcmVjb3JkX2RlYnVnOworZXh0ZXJuIHJlY29yZF90ICpyZWNvcmRf bGlzdDsKK2V4dGVybiByZWNvcmRfdCAqcmVjb3JkX2FyY2hfbGlzdF9oZWFk OworZXh0ZXJuIHJlY29yZF90ICpyZWNvcmRfYXJjaF9saXN0X3RhaWw7Citl eHRlcm4gc3RydWN0IHJlZ2NhY2hlICpyZWNvcmRfcmVnY2FjaGU7CisKK2V4 dGVybiBzdHJ1Y3QgdGFyZ2V0X29wcyByZWNvcmRfb3BzOworCitleHRlcm4g aW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoaW50IG51bSk7CitleHRl cm4gaW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoQ09SRV9BRERSIGFk ZHIsIGludCBsZW4pOworZXh0ZXJuIGludCByZWNvcmRfYXJjaF9saXN0X2Fk ZF9lbmQgKGludCBuZWVkX2Rhc20pOworZXh0ZXJuIHZvaWQgcmVjb3JkX21l c3NhZ2UgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKTsKK2V4dGVybiBzdHJ1 Y3QgY2xlYW51cCAqIHJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGVfc2V0 ICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgKCpyZWNvcmRfYmVuZWF0aF90b19y ZXN1bWUpIChwdGlkX3QsIGludCwgZW51bSB0YXJnZXRfc2lnbmFsKTsKK2V4 dGVybiBwdGlkX3QgKCpyZWNvcmRfYmVuZWF0aF90b193YWl0KSAocHRpZF90 LCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKik7CitleHRlcm4gdm9pZCAo KnJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVycykgKHN0cnVjdCBy ZWdjYWNoZSAqLAorCQkJCQkJICBpbnQgcmVnbm8pOworZXh0ZXJuIExPTkdF U1QgKCpyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWwpIChzdHJ1Y3Qg dGFyZ2V0X29wcyAqIG9wcywKKwkJCQkJCSAgZW51bSB0YXJnZXRfb2JqZWN0 IG9iamVjdCwKKwkJCQkJCSAgY29uc3QgY2hhciAqYW5uZXgsCisJCQkJCQkg IGdkYl9ieXRlICogcmVhZGJ1ZiwKKwkJCQkJCSAgY29uc3QgZ2RiX2J5dGUg KiB3cml0ZWJ1ZiwKKwkJCQkJCSAgVUxPTkdFU1Qgb2Zmc2V0LAorCQkJCQkJ ICBMT05HRVNUIGxlbik7CitleHRlcm4gaW50ICgqcmVjb3JkX2JlbmVhdGhf dG9faW5zZXJ0X2JyZWFrcG9pbnQpIChzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8g Kik7CitleHRlcm4gaW50ICgqcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3ZlX2Jy ZWFrcG9pbnQpIChzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKik7CisKKyNlbmRp ZiAvKiBfUkVDT1JEX0hfICovCg== --001485f4225eba54840461ebd807--