From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21331 invoked by alias); 21 Mar 2009 16:01:21 -0000 Received: (qmail 19829 invoked by uid 22791); 21 Mar 2009 16:01:10 -0000 X-SWARE-Spam-Status: No, hits=-0.2 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.187) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 21 Mar 2009 16:01:03 +0000 Received: by ti-out-0910.google.com with SMTP id a1so927336tib.12 for ; Sat, 21 Mar 2009 09:01:02 -0700 (PDT) MIME-Version: 1.0 Received: by 10.110.7.18 with SMTP id 18mr7863403tig.17.1237651262156; Sat, 21 Mar 2009 09:01:02 -0700 (PDT) Date: Sat, 21 Mar 2009 16:02:00 -0000 Message-ID: Subject: [RFA] Submit process record and replay fourth time, 3/8 From: Hui Zhu To: "gdb-patches@sourceware.org" Cc: Pedro Alves , Marc Khouzam , Michael Snyder , Thiago Jung Bauermann , Eli Zaretskii , paawan1982@yahoo.com Content-Type: multipart/mixed; boundary=001485f49848d6304d0465a323d6 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-03/txt/msg00438.txt.bz2 --001485f49848d6304d0465a323d6 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 2318 This patch add the process record and replay target. This is the core part of process record and replay. This time, this patch was updated a lot of part according to the ideas of Pedro. 2009-03-21 Hui Zhu Process record and replay target. * Makefile.in (record.c): New file. * record.c, record.h: New file. 2008-12-28 Michael Snyder * Comments, spelling, white space clean-ups. 2008-12-26 Michael Snyder * record.h: Don't export record_not_record. * record.c (record_not_record): Rename to in_record_wait. (record_not_record_set): Rename to in_record_wait_set. (record_not_record_cleanup): Rename to in_record_wait_cleanup. (record_store_registers): Check in_record_wait flag. (record_xfer_partial): Ditto. 2008-10-07 Michael Snyder * record.h (record_exec_direction): Delete. (RECORD_IS_REPLAY): Consult infrun global direction variable. * record.c: (record_wait_cleanups): Use infrun state variable. (record_wait): Ditto. (record_get_exec_direction, record_set_exec_direction): Remove. (record_can_execute_reverse): New target method. 2008-10-06 Michael Snyder * record.c (displaced_step_fixup): Remove. (record_message_cleanups): Remove displaced step handling. (record_message): Remove displaced step handling. 2008-10-06 Michael Snyder * record.c (record_regcache_raw_write_regnum): Remove. 2008-10-05 Michael Snyder * record.c, record.h: Rename execdir to exec_direction. 2008-10-02 Michael Snyder * record.c (record_open): Call target_can_async_p() instead of relying on a global variable. * record.h (record_linux_async_permitted): Delete. 2008-09-19 Michael Snyder * record.c (trivial): Fix two commas in a comment. * record.c (record_wait): On end of record log, return TARGET_WAITKIND_NO_HISTORY and let infrun decide what to do. 2008-09-06 Michael Snyder * record.c: Comment and message string cleanup. Add some function header comments. 2008-08-01 Michael Snyder * record.c (_initialize_record): Clarify language in help strings. Fix up comment format (period must be followed by two spaces). --001485f49848d6304d0465a323d6 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_fskhlnck0 Content-length: 51053 LS0tCiBNYWtlZmlsZS5pbiB8ICAgIDQgCiByZWNvcmQuYyAgICB8IDEyMTQg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiByZWNvcmQuaCAgICB8ICAgNzQgKysrCiAzIGZp bGVzIGNoYW5nZWQsIDEyOTAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo LSkKCi0tLSBhL01ha2VmaWxlLmluCisrKyBiL01ha2VmaWxlLmluCkBAIC02 NjYsNyArNjY2LDcgQEAgU0ZJTEVTID0gYWRhLWV4cC55IGFkYS1sYW5nLmMg YWRhLXR5cGVwcgogCXZhbGFyaXRoLmMgdmFsb3BzLmMgdmFscHJpbnQuYyB2 YWx1ZS5jIHZhcm9iai5jIHZlYy5jIFwKIAl3cmFwcGVyLmMgXAogCXhtbC10 ZGVzYy5jIHhtbC1zdXBwb3J0LmMgXAotCWluZmVyaW9yLmMKKwlpbmZlcmlv ci5jIHJlY29yZC5jCiAKIExJTlRGSUxFUyA9ICQoU0ZJTEVTKSAkKFlZRklM RVMpICQoQ09ORklHX1NSQ1MpIGluaXQuYwogCkBAIC04MTcsNyArODE3LDcg QEAgQ09NTU9OX09CUyA9ICQoREVQRklMRVMpICQoQ09ORklHX09CUykgJAog CXNvbGliLm8gc29saWItbnVsbC5vIFwKIAlwcm9sb2d1ZS12YWx1ZS5vIG1l bW9yeS1tYXAubyB4bWwtc3VwcG9ydC5vIFwKIAl0YXJnZXQtZGVzY3JpcHRp b25zLm8gdGFyZ2V0LW1lbW9yeS5vIHhtbC10ZGVzYy5vIHhtbC1idWlsdGlu Lm8gXAotCWluZmVyaW9yLm8gb3NkYXRhLm8KKwlpbmZlcmlvci5vIG9zZGF0 YS5vIHJlY29yZC5vCiAKIFRTT0JTID0gaW5mbG93Lm8KIAotLS0gL2Rldi9u dWxsCisrKyBiL3JlY29yZC5jCkBAIC0wLDAgKzEsMTIxNCBAQAorLyogUHJv Y2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQgZm9yIEdEQiwgdGhlIEdO VSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUg aXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisj aW5jbHVkZSAicmVnY2FjaGUuaCIKKyNpbmNsdWRlICJnZGJ0aHJlYWQuaCIK KyNpbmNsdWRlICJldmVudC10b3AuaCIKKyNpbmNsdWRlICJleGNlcHRpb25z LmgiCisjaW5jbHVkZSAicmVjb3JkLmgiCisKKyNpbmNsdWRlIDxzaWduYWwu aD4KKworI2RlZmluZSBERUZBVUxUX1JFQ09SRF9JTlNOX01BWF9OVU0JMjAw MDAwCisKKyNkZWZpbmUgUkVDT1JEX0lTX1JFUExBWSBcCisgICAgIChyZWNv cmRfbGlzdC0+bmV4dCB8fCBleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNf UkVWRVJTRSkKKworLyogVGhpcyBpcyB0aGUgZGVidWcgc3dpdGNoIGZvciBw cm9jZXNzIHJlY29yZC4gICovCitpbnQgcmVjb3JkX2RlYnVnID0gMDsKKwor LyogVGhpcyBpcyByZWdjYWNoZSBpcyB1c2VkIGJ5IHJlY29yZF9tZXNzYWdl LCByZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcKKyAgIGFuZCBnZGJhcmNoX3By b2Nlc3NfcmVjb3JkIHRvIGluY3JlYXNlIHRoZSBzcGVlZCB0aGF0IGFjY2Vz cyB0byB0aGUKKyAgIHZhbHVlIG9mIHRoZSByZWdpc3RlcnMuICAqLworc3Ry dWN0IHJlZ2NhY2hlICpyZWNvcmRfcmVnY2FjaGUgPSBOVUxMOworCisvKiBU aGVzZSBsaXN0IGlzIGZvciBleGVjdXRpb24gbG9nLiAgKi8KK3N0YXRpYyBy ZWNvcmRfdCByZWNvcmRfZmlyc3Q7CitzdGF0aWMgcmVjb3JkX3QgKnJlY29y ZF9saXN0ID0gJnJlY29yZF9maXJzdDsKK3N0YXRpYyByZWNvcmRfdCAqcmVj b3JkX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsKK3N0YXRpYyByZWNvcmRfdCAq cmVjb3JkX2FyY2hfbGlzdF90YWlsID0gTlVMTDsKKworLyogMSBhc2sgdXNl ci4gMCBhdXRvIGRlbGV0ZSB0aGUgbGFzdCByZWNvcmRfdC4gICovCitzdGF0 aWMgaW50IHJlY29yZF9zdG9wX2F0X2xpbWl0ID0gMTsKK3N0YXRpYyBpbnQg cmVjb3JkX2luc25fbWF4X251bSA9IERFRkFVTFRfUkVDT1JEX0lOU05fTUFY X05VTTsKK3N0YXRpYyBpbnQgcmVjb3JkX2luc25fbnVtID0gMDsKKworLyog VGhlIHRhcmdldF9vcHMgb2YgcHJvY2VzcyByZWNvcmQuICAqLworc3RhdGlj IHN0cnVjdCB0YXJnZXRfb3BzIHJlY29yZF9vcHM7CisKKy8qIFRoZSBiZW5l YXRoIGZ1bmN0aW9uIHBvaW50ZXJzLiAgKi8KK3N0YXRpYyBzdHJ1Y3QgdGFy Z2V0X29wcyAqcmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lX29wczsKK3N0YXRp YyB2b2lkICgqcmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lKSAoc3RydWN0IHRh cmdldF9vcHMgKiwgcHRpZF90LCBpbnQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudW0gdGFyZ2V0X3NpZ25hbCk7Citz dGF0aWMgc3RydWN0IHRhcmdldF9vcHMgKnJlY29yZF9iZW5lYXRoX3RvX3dh aXRfb3BzOworc3RhdGljIHB0aWRfdCAoKnJlY29yZF9iZW5lYXRoX3RvX3dh aXQpIChzdHJ1Y3QgdGFyZ2V0X29wcyAqLCBwdGlkX3QsCisJCQkJCSBzdHJ1 Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKik7CitzdGF0aWMgc3RydWN0IHRhcmdl dF9vcHMgKnJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lzdGVyc19vcHM7 CitzdGF0aWMgdm9pZCAoKnJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lz dGVycykgKHN0cnVjdCB0YXJnZXRfb3BzICosCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZWdj YWNoZSAqLAorCQkJCQkJICBpbnQgcmVnbm8pOworc3RhdGljIHN0cnVjdCB0 YXJnZXRfb3BzICpyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWxfb3Bz Oworc3RhdGljIExPTkdFU1QgKCpyZWNvcmRfYmVuZWF0aF90b194ZmVyX3Bh cnRpYWwpIChzdHJ1Y3QgdGFyZ2V0X29wcyAqIG9wcywKKwkJCQkJCSAgZW51 bSB0YXJnZXRfb2JqZWN0IG9iamVjdCwKKwkJCQkJCSAgY29uc3QgY2hhciAq YW5uZXgsCisJCQkJCQkgIGdkYl9ieXRlICogcmVhZGJ1ZiwKKwkJCQkJCSAg Y29uc3QgZ2RiX2J5dGUgKiB3cml0ZWJ1ZiwKKwkJCQkJCSAgVUxPTkdFU1Qg b2Zmc2V0LAorCQkJCQkJICBMT05HRVNUIGxlbik7CitzdGF0aWMgaW50ICgq cmVjb3JkX2JlbmVhdGhfdG9faW5zZXJ0X2JyZWFrcG9pbnQpIChzdHJ1Y3Qg YnBfdGFyZ2V0X2luZm8gKik7CitzdGF0aWMgaW50ICgqcmVjb3JkX2JlbmVh dGhfdG9fcmVtb3ZlX2JyZWFrcG9pbnQpIChzdHJ1Y3QgYnBfdGFyZ2V0X2lu Zm8gKik7CisKK3N0YXRpYyB2b2lkCityZWNvcmRfbGlzdF9yZWxlYXNlIChy ZWNvcmRfdCAqIHJlYykKK3sKKyAgcmVjb3JkX3QgKnRtcDsKKworICBpZiAo IXJlYykKKyAgICByZXR1cm47CisKKyAgd2hpbGUgKHJlYy0+bmV4dCkKKyAg ICB7CisgICAgICByZWMgPSByZWMtPm5leHQ7CisgICAgfQorCisgIHdoaWxl IChyZWMtPnByZXYpCisgICAgeworICAgICAgdG1wID0gcmVjOworICAgICAg cmVjID0gcmVjLT5wcmV2OworICAgICAgaWYgKHRtcC0+dHlwZSA9PSByZWNv cmRfcmVnKQorCXhmcmVlICh0bXAtPnUucmVnLnZhbCk7CisgICAgICBlbHNl IGlmICh0bXAtPnR5cGUgPT0gcmVjb3JkX21lbSkKKwl4ZnJlZSAodG1wLT51 Lm1lbS52YWwpOworICAgICAgeGZyZWUgKHRtcCk7CisgICAgfQorCisgIGlm IChyZWMgIT0gJnJlY29yZF9maXJzdCkKKyAgICB4ZnJlZSAocmVjKTsKK30K Kworc3RhdGljIHZvaWQKK3JlY29yZF9saXN0X3JlbGVhc2VfbmV4dCAodm9p ZCkKK3sKKyAgcmVjb3JkX3QgKnJlYyA9IHJlY29yZF9saXN0OworICByZWNv cmRfdCAqdG1wID0gcmVjLT5uZXh0OworICByZWMtPm5leHQgPSBOVUxMOwor ICB3aGlsZSAodG1wKQorICAgIHsKKyAgICAgIHJlYyA9IHRtcC0+bmV4dDsK KyAgICAgIGlmICh0bXAtPnR5cGUgPT0gcmVjb3JkX3JlZykKKwlyZWNvcmRf aW5zbl9udW0tLTsKKyAgICAgIGVsc2UgaWYgKHRtcC0+dHlwZSA9PSByZWNv cmRfcmVnKQorCXhmcmVlICh0bXAtPnUucmVnLnZhbCk7CisgICAgICBlbHNl IGlmICh0bXAtPnR5cGUgPT0gcmVjb3JkX21lbSkKKwl4ZnJlZSAodG1wLT51 Lm1lbS52YWwpOworICAgICAgeGZyZWUgKHRtcCk7CisgICAgICB0bXAgPSBy ZWM7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2xpc3RfcmVs ZWFzZV9maXJzdCAodm9pZCkKK3sKKyAgcmVjb3JkX3QgKnRtcCA9IE5VTEw7 CisgIGVudW0gcmVjb3JkX3R5cGUgdHlwZTsKKworICBpZiAoIXJlY29yZF9m aXJzdC5uZXh0KQorICAgIHJldHVybjsKKworICB3aGlsZSAoMSkKKyAgICB7 CisgICAgICB0eXBlID0gcmVjb3JkX2ZpcnN0Lm5leHQtPnR5cGU7CisKKyAg ICAgIGlmICh0eXBlID09IHJlY29yZF9yZWcpCisJeGZyZWUgKHJlY29yZF9m aXJzdC5uZXh0LT51LnJlZy52YWwpOworICAgICAgZWxzZSBpZiAodHlwZSA9 PSByZWNvcmRfbWVtKQorCXhmcmVlIChyZWNvcmRfZmlyc3QubmV4dC0+dS5t ZW0udmFsKTsKKyAgICAgIHRtcCA9IHJlY29yZF9maXJzdC5uZXh0OworICAg ICAgcmVjb3JkX2ZpcnN0Lm5leHQgPSB0bXAtPm5leHQ7CisgICAgICB4ZnJl ZSAodG1wKTsKKworICAgICAgaWYgKCFyZWNvcmRfZmlyc3QubmV4dCkKKwl7 CisJICBnZGJfYXNzZXJ0IChyZWNvcmRfaW5zbl9udW0gPT0gMSk7CisJICBi cmVhazsKKwl9CisKKyAgICAgIHJlY29yZF9maXJzdC5uZXh0LT5wcmV2ID0g JnJlY29yZF9maXJzdDsKKworICAgICAgaWYgKHR5cGUgPT0gcmVjb3JkX2Vu ZCkKKwlicmVhazsKKyAgICB9CisKKyAgcmVjb3JkX2luc25fbnVtLS07Cit9 CisKKy8qIEFkZCBhIHJlY29yZF90IHRvIHJlY29yZF9hcmNoX2xpc3QuICAq Lworc3RhdGljIHZvaWQKK3JlY29yZF9hcmNoX2xpc3RfYWRkIChyZWNvcmRf dCAqIHJlYykKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisgICAgZnBy aW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJIlByb2Nlc3MgcmVj b3JkOiByZWNvcmRfYXJjaF9saXN0X2FkZCAlcy5cbiIsCisJCQlob3N0X2Fk ZHJlc3NfdG9fc3RyaW5nIChyZWMpKTsKKworICBpZiAocmVjb3JkX2FyY2hf bGlzdF90YWlsKQorICAgIHsKKyAgICAgIHJlY29yZF9hcmNoX2xpc3RfdGFp bC0+bmV4dCA9IHJlYzsKKyAgICAgIHJlYy0+cHJldiA9IHJlY29yZF9hcmNo X2xpc3RfdGFpbDsKKyAgICAgIHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IHJl YzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICByZWNvcmRfYXJjaF9s aXN0X2hlYWQgPSByZWM7CisgICAgICByZWNvcmRfYXJjaF9saXN0X3RhaWwg PSByZWM7CisgICAgfQorfQorCisvKiBSZWNvcmQgdGhlIHZhbHVlIG9mIGEg cmVnaXN0ZXIgTlVNIHRvIHJlY29yZF9hcmNoX2xpc3QuICAqLworaW50City ZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKGludCBudW0pCit7CisgIHJlY29y ZF90ICpyZWM7CisKKyAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisgICAgZnBy aW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJIlByb2Nlc3MgcmVj b3JkOiBhZGQgcmVnaXN0ZXIgbnVtID0gJWQgdG8gIgorCQkJInJlY29yZCBs aXN0LlxuIiwKKwkJCW51bSk7CisKKyAgcmVjID0gKHJlY29yZF90ICopIHht YWxsb2MgKHNpemVvZiAocmVjb3JkX3QpKTsKKyAgcmVjLT51LnJlZy52YWwg PSAoZ2RiX2J5dGUgKikgeG1hbGxvYyAoTUFYX1JFR0lTVEVSX1NJWkUpOwor ICByZWMtPnByZXYgPSBOVUxMOworICByZWMtPm5leHQgPSBOVUxMOworICBy ZWMtPnR5cGUgPSByZWNvcmRfcmVnOworICByZWMtPnUucmVnLm51bSA9IG51 bTsKKworICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBu dW0sIHJlYy0+dS5yZWcudmFsKTsKKworICByZWNvcmRfYXJjaF9saXN0X2Fk ZCAocmVjKTsKKworICByZXR1cm4gMDsKK30KKworLyogUmVjb3JkIHRoZSB2 YWx1ZSBvZiBhIHJlZ2lvbiBvZiBtZW1vcnkgd2hvc2UgYWRkcmVzcyBpcyBB RERSIGFuZAorICAgbGVuZ3RoIGlzIExFTiB0byByZWNvcmRfYXJjaF9saXN0 LiAgKi8KKworaW50CityZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKENPUkVf QUREUiBhZGRyLCBpbnQgbGVuKQoreworICByZWNvcmRfdCAqcmVjOworCisg IGlmIChyZWNvcmRfZGVidWcgPiAxKQorICAgIGZwcmludGZfdW5maWx0ZXJl ZCAoZ2RiX3N0ZGxvZywKKwkJCSJQcm9jZXNzIHJlY29yZDogYWRkIG1lbSBh ZGRyID0gMHglcyBsZW4gPSAlZCB0byAiCisJCQkicmVjb3JkIGxpc3QuXG4i LAorCQkJcGFkZHJfbnogKGFkZHIpLCBsZW4pOworCisgIGlmICghYWRkcikK KyAgICByZXR1cm4gMDsKKworICByZWMgPSAocmVjb3JkX3QgKikgeG1hbGxv YyAoc2l6ZW9mIChyZWNvcmRfdCkpOworICByZWMtPnUubWVtLnZhbCA9IChn ZGJfYnl0ZSAqKSB4bWFsbG9jIChsZW4pOworICByZWMtPnByZXYgPSBOVUxM OworICByZWMtPm5leHQgPSBOVUxMOworICByZWMtPnR5cGUgPSByZWNvcmRf bWVtOworICByZWMtPnUubWVtLmFkZHIgPSBhZGRyOworICByZWMtPnUubWVt LmxlbiA9IGxlbjsKKworICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChhZGRy LCByZWMtPnUubWVtLnZhbCwgbGVuKSkKKyAgICB7CisgICAgICBpZiAocmVj b3JkX2RlYnVnKQorCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KwkJCSAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5 IGF0ICIKKwkJCSAgICAiYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJ ICAgIHBhZGRyX256IChhZGRyKSwgbGVuKTsKKyAgICAgIHhmcmVlIChyZWMt PnUubWVtLnZhbCk7CisgICAgICB4ZnJlZSAocmVjKTsKKyAgICAgIHJldHVy biAtMTsKKyAgICB9CisKKyAgcmVjb3JkX2FyY2hfbGlzdF9hZGQgKHJlYyk7 CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIEFkZCBhIHJlY29yZF9lbmQgdHlw ZSByZWNvcmRfdCB0byByZWNvcmRfYXJjaF9saXN0LiAgKi8KK2ludAorcmVj b3JkX2FyY2hfbGlzdF9hZGRfZW5kICh2b2lkKQoreworICByZWNvcmRfdCAq cmVjOworCisgIGlmIChyZWNvcmRfZGVidWcgPiAxKQorICAgIGZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSJQcm9jZXNzIHJlY29yZDog YWRkIGVuZCB0byBhcmNoIGxpc3QuXG4iKTsKKworICByZWMgPSAocmVjb3Jk X3QgKikgeG1hbGxvYyAoc2l6ZW9mIChyZWNvcmRfdCkpOworICByZWMtPnBy ZXYgPSBOVUxMOworICByZWMtPm5leHQgPSBOVUxMOworICByZWMtPnR5cGUg PSByZWNvcmRfZW5kOworCisgIHJlY29yZF9hcmNoX2xpc3RfYWRkIChyZWMp OworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX2No ZWNrX2luc25fbnVtIChpbnQgc2V0X3Rlcm1pbmFsKQoreworICBpZiAocmVj b3JkX2luc25fbWF4X251bSkKKyAgICB7CisgICAgICBnZGJfYXNzZXJ0IChy ZWNvcmRfaW5zbl9udW0gPD0gcmVjb3JkX2luc25fbWF4X251bSk7CisgICAg ICBpZiAocmVjb3JkX2luc25fbnVtID09IHJlY29yZF9pbnNuX21heF9udW0p CisJeworCSAgLyogQXNrIHVzZXIgd2hhdCB0byBkby4gICovCisJICBpZiAo cmVjb3JkX3N0b3BfYXRfbGltaXQpCisJICAgIHsKKwkgICAgICBpbnQgcTsK KwkgICAgICBpZiAoc2V0X3Rlcm1pbmFsKQorCQl0YXJnZXRfdGVybWluYWxf b3VycyAoKTsKKwkgICAgICBxID0geXF1ZXJ5IChfKCJEbyB5b3Ugd2FudCB0 byBhdXRvIGRlbGV0ZSBwcmV2aW91cyBleGVjdXRpb24gIgorCQkJICAgICJs b2cgZW50cmllcyB3aGVuIHJlY29yZC9yZXBsYXkgYnVmZmVyIGJlY29tZXMg IgorCQkJICAgICJmdWxsIChyZWNvcmQtc3RvcC1hdC1saW1pdCk/IikpOwor CSAgICAgIGlmIChzZXRfdGVybWluYWwpCisJCXRhcmdldF90ZXJtaW5hbF9p bmZlcmlvciAoKTsKKwkgICAgICBpZiAocSkKKwkJcmVjb3JkX3N0b3BfYXRf bGltaXQgPSAwOworCSAgICAgIGVsc2UKKwkJZXJyb3IgKF8oIlByb2Nlc3Mg cmVjb3JkOiBpbmZlcmlvciBwcm9ncmFtIHN0b3BwZWQuIikpOworCSAgICB9 CisJfQorICAgIH0KK30KKworLyogQmVmb3JlIGluZmVyaW9yIHN0ZXAgKHdo ZW4gR0RCIHJlY29yZCB0aGUgcnVubmluZyBtZXNzYWdlLCBpbmZlcmlvcgor ICAgb25seSBjYW4gc3RlcCksIEdEQiB3aWxsIGNhbGwgdGhpcyBmdW5jdGlv biB0byByZWNvcmQgdGhlIHZhbHVlcyB0bworICAgcmVjb3JkX2xpc3QuICBU aGlzIGZ1bmN0aW9uIHdpbGwgY2FsbCBnZGJhcmNoX3Byb2Nlc3NfcmVjb3Jk IHRvCisgICByZWNvcmQgdGhlIHJ1bm5pbmcgbWVzc2FnZSBvZiBpbmZlcmlv ciBhbmQgc2V0IHRoZW0gdG8KKyAgIHJlY29yZF9hcmNoX2xpc3QsIGFuZCBh ZGQgaXQgdG8gcmVjb3JkX2xpc3QuICAqLworCitzdGF0aWMgdm9pZAorcmVj b3JkX21lc3NhZ2VfY2xlYW51cHMgKHZvaWQgKmlnbm9yZSkKK3sKKyAgcmVj b3JkX2xpc3RfcmVsZWFzZSAocmVjb3JkX2FyY2hfbGlzdF90YWlsKTsKK30K Kworc3RhdGljIGludAorcmVjb3JkX21lc3NhZ2UgKHZvaWQgKmFyZ3MpCit7 CisgIGludCByZXQ7CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gYXJn czsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IG1ha2VfY2xl YW51cCAocmVjb3JkX21lc3NhZ2VfY2xlYW51cHMsIDApOworCisgIHJlY29y ZF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7CisgIHJlY29yZF9hcmNoX2xpc3Rf dGFpbCA9IE5VTEw7CisKKyAgLyogQ2hlY2sgcmVjb3JkX2luc25fbnVtLiAg Ki8KKyAgcmVjb3JkX2NoZWNrX2luc25fbnVtICgxKTsKKworICByZWNvcmRf cmVnY2FjaGUgPSBnZXRfY3VycmVudF9yZWdjYWNoZSAoKTsKKworICByZXQg PSBnZGJhcmNoX3Byb2Nlc3NfcmVjb3JkIChnZGJhcmNoLAorCQkJCXJlZ2Nh Y2hlX3JlYWRfcGMgKHJlY29yZF9yZWdjYWNoZSkpOworICBpZiAocmV0ID4g MCkKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGluZmVyaW9yIHBy b2dyYW0gc3RvcHBlZC4iKSk7CisgIGlmIChyZXQgPCAwKQorICAgIGVycm9y IChfKCJQcm9jZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVjdXRp b24gbG9nLiIpKTsKKworICBkaXNjYXJkX2NsZWFudXBzIChvbGRfY2xlYW51 cHMpOworCisgIHJlY29yZF9saXN0LT5uZXh0ID0gcmVjb3JkX2FyY2hfbGlz dF9oZWFkOworICByZWNvcmRfYXJjaF9saXN0X2hlYWQtPnByZXYgPSByZWNv cmRfbGlzdDsKKyAgcmVjb3JkX2xpc3QgPSByZWNvcmRfYXJjaF9saXN0X3Rh aWw7CisKKyAgaWYgKHJlY29yZF9pbnNuX251bSA9PSByZWNvcmRfaW5zbl9t YXhfbnVtICYmIHJlY29yZF9pbnNuX21heF9udW0pCisgICAgcmVjb3JkX2xp c3RfcmVsZWFzZV9maXJzdCAoKTsKKyAgZWxzZQorICAgIHJlY29yZF9pbnNu X251bSsrOworCisgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Citkb19y ZWNvcmRfbWVzc2FnZSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gpCit7Cisg IHJldHVybiBjYXRjaF9lcnJvcnMgKHJlY29yZF9tZXNzYWdlLCBnZGJhcmNo LCBOVUxMLCBSRVRVUk5fTUFTS19BTEwpOworfQorCisvKiBTZXQgdG8gMSBp ZiByZWNvcmRfc3RvcmVfcmVnaXN0ZXJzIGFuZCByZWNvcmRfeGZlcl9wYXJ0 aWFsCisgICBkb2Vzbid0IG5lZWQgcmVjb3JkLiAgKi8KKworc3RhdGljIGlu dCByZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxlID0gMDsKKworc3RydWN0 IGNsZWFudXAgKgorcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQg KHZvaWQpCit7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHM7CisK KyAgcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZSA9IDA7CisgIG9sZF9j bGVhbnVwcyA9CisgICAgbWFrZV9jbGVhbnVwX3Jlc3RvcmVfaW50ZWdlciAo JnJlY29yZF9nZGJfb3BlcmF0aW9uX2Rpc2FibGUpOworICByZWNvcmRfZ2Ri X29wZXJhdGlvbl9kaXNhYmxlID0gMTsKKworICByZXR1cm4gb2xkX2NsZWFu dXBzOworfQorCitzdGF0aWMgdm9pZAorcmVjb3JkX29wZW4gKGNoYXIgKm5h bWUsIGludCBmcm9tX3R0eSkKK3sKKyAgc3RydWN0IHRhcmdldF9vcHMgKnQ7 CisKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX29wZW5c biIpOworCisgIC8qIGNoZWNrIGV4ZWMgKi8KKyAgaWYgKCF0YXJnZXRfaGFz X2V4ZWN1dGlvbikKKyAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IHRo ZSBwcm9ncmFtIGlzIG5vdCBiZWluZyBydW4uIikpOworICBpZiAobm9uX3N0 b3ApCisgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIHRhcmdldCBjYW4n dCBkZWJ1ZyBpbmZlcmlvciBpbiBub24tc3RvcCBtb2RlICIKKwkgICAgICIo bm9uLXN0b3ApLiIpKTsKKyAgaWYgKHRhcmdldF9hc3luY19wZXJtaXR0ZWQp CisgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIHRhcmdldCBjYW4ndCBk ZWJ1ZyBpbmZlcmlvciBpbiBhc3luY2hyb25vdXMgIgorCSAgICAgIm1vZGUg KHRhcmdldC1hc3luYykuIikpOworCisgIGlmICghZ2RiYXJjaF9wcm9jZXNz X3JlY29yZF9wIChjdXJyZW50X2dkYmFyY2gpKQorICAgIGVycm9yIChfKCJQ cm9jZXNzIHJlY29yZDogdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIGRvZXNu J3Qgc3VwcG9ydCAiCisJICAgICAicmVjb3JkIGZ1bmN0aW9uLiIpKTsKKwor ICAvKiBDaGVjayBpZiByZWNvcmQgdGFyZ2V0IGlzIGFscmVhZHkgcnVubmlu Zy4gICovCisgIGlmIChjdXJyZW50X3RhcmdldC50b19zdHJhdHVtID09IHJl Y29yZF9zdHJhdHVtKQorICAgIHsKKyAgICAgIGlmICghbnF1ZXJ5CisJICAo XygiUHJvY2VzcyByZWNvcmQgdGFyZ2V0IGFscmVhZHkgcnVubmluZywgZG8g eW91IHdhbnQgdG8gZGVsZXRlICIKKwkgICAgICJ0aGUgb2xkIHJlY29yZCBs b2c/IikpKQorCXJldHVybjsKKyAgICB9CisKKyAgLypSZXNldCB0aGUgYmVu ZWF0aCBmdW5jdGlvbiBwb2ludGVycy4gICovCisgIHJlY29yZF9iZW5lYXRo X3RvX3Jlc3VtZSA9IE5VTEw7CisgIHJlY29yZF9iZW5lYXRoX3RvX3dhaXQg PSBOVUxMOworICByZWNvcmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMg PSBOVUxMOworICByZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWwgPSBO VUxMOworICByZWNvcmRfYmVuZWF0aF90b19pbnNlcnRfYnJlYWtwb2ludCA9 IE5VTEw7CisgIHJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3BvaW50 ID0gTlVMTDsKKworICAvKiBTZXQgdGhlIGJlbmVhdGggZnVuY3Rpb24gcG9p bnRlcnMuICAqLworICBmb3IgKHQgPSBjdXJyZW50X3RhcmdldC5iZW5lYXRo OyB0ICE9IE5VTEw7IHQgPSB0LT5iZW5lYXRoKQorICAgIHsKKyAgICAgIGlm ICghcmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lKQorICAgICAgICB7CisJICBy ZWNvcmRfYmVuZWF0aF90b19yZXN1bWUgPSB0LT50b19yZXN1bWU7CisJICBy ZWNvcmRfYmVuZWF0aF90b19yZXN1bWVfb3BzID0gdDsKKyAgICAgICAgfQor ICAgICAgaWYgKCFyZWNvcmRfYmVuZWF0aF90b193YWl0KQorICAgICAgICB7 CisJICByZWNvcmRfYmVuZWF0aF90b193YWl0ID0gdC0+dG9fd2FpdDsKKwkg IHJlY29yZF9iZW5lYXRoX3RvX3dhaXRfb3BzID0gdDsKKyAgICAgICAgfQor ICAgICAgaWYgKCFyZWNvcmRfYmVuZWF0aF90b19zdG9yZV9yZWdpc3RlcnMp CisgICAgICAgIHsKKwkgIHJlY29yZF9iZW5lYXRoX3RvX3N0b3JlX3JlZ2lz dGVycyA9IHQtPnRvX3N0b3JlX3JlZ2lzdGVyczsKKwkgIHJlY29yZF9iZW5l YXRoX3RvX3N0b3JlX3JlZ2lzdGVyc19vcHMgPSB0OworICAgICAgICB9Cisg ICAgICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX3hmZXJfcGFydGlhbCkKKyAg ICAgICAgeworCSAgcmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0aWFsID0g dC0+dG9feGZlcl9wYXJ0aWFsOworCSAgcmVjb3JkX2JlbmVhdGhfdG9feGZl cl9wYXJ0aWFsX29wcyA9IHQ7CisgICAgICAgIH0KKyAgICAgIGlmICghcmVj b3JkX2JlbmVhdGhfdG9faW5zZXJ0X2JyZWFrcG9pbnQpCisJcmVjb3JkX2Jl bmVhdGhfdG9faW5zZXJ0X2JyZWFrcG9pbnQgPSB0LT50b19pbnNlcnRfYnJl YWtwb2ludDsKKyAgICAgIGlmICghcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3Zl X2JyZWFrcG9pbnQpCisJcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3ZlX2JyZWFr cG9pbnQgPSB0LT50b19yZW1vdmVfYnJlYWtwb2ludDsKKyAgICB9CisgIGlm ICghcmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lKQorICAgIGVycm9yIChfKCJQ cm9jZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9fcmVzdW1lLiIpKTsKKyAgaWYg KCFyZWNvcmRfYmVuZWF0aF90b193YWl0KQorICAgIGVycm9yIChfKCJQcm9j ZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9fd2FpdC4iKSk7CisgIGlmICghcmVj b3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0ZXJzKQorICAgIGVycm9yIChf KCJQcm9jZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9fc3RvcmVfcmVnaXN0ZXJz LiIpKTsKKyAgaWYgKCFyZWNvcmRfYmVuZWF0aF90b194ZmVyX3BhcnRpYWwp CisgICAgZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkIGNhbid0IGdldCB0b194 ZmVyX3BhcnRpYWwuIikpOworICBpZiAoIXJlY29yZF9iZW5lYXRoX3RvX2lu c2VydF9icmVha3BvaW50KQorICAgIGVycm9yIChfKCJQcm9jZXNzIHJlY29y ZCBjYW4ndCBnZXQgdG9faW5zZXJ0X2JyZWFrcG9pbnQuIikpOworICBpZiAo IXJlY29yZF9iZW5lYXRoX3RvX3JlbW92ZV9icmVha3BvaW50KQorICAgIGVy cm9yIChfKCJQcm9jZXNzIHJlY29yZCBjYW4ndCBnZXQgdG9fcmVtb3ZlX2Jy ZWFrcG9pbnQuIikpOworCisgIHB1c2hfdGFyZ2V0ICgmcmVjb3JkX29wcyk7 CisKKyAgLyogUmVzZXQgKi8KKyAgcmVjb3JkX2luc25fbnVtID0gMDsKKyAg cmVjb3JkX2xpc3QgPSAmcmVjb3JkX2ZpcnN0OworICByZWNvcmRfbGlzdC0+ bmV4dCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfY2xvc2Ug KGludCBxdWl0dGluZykKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNzIHJlY29y ZDogcmVjb3JkX2Nsb3NlXG4iKTsKKworICByZWNvcmRfbGlzdF9yZWxlYXNl IChyZWNvcmRfbGlzdCk7Cit9CisKK3N0YXRpYyBpbnQgcmVjb3JkX3Jlc3Vt ZV9zdGVwID0gMDsKK3N0YXRpYyBlbnVtIHRhcmdldF9zaWduYWwgcmVjb3Jk X3Jlc3VtZV9zaWdnbmFsOworc3RhdGljIGludCByZWNvcmRfcmVzdW1lX2Vy cm9yOworCitzdGF0aWMgdm9pZAorcmVjb3JkX3Jlc3VtZSAoc3RydWN0IHRh cmdldF9vcHMgKm9wcywgcHRpZF90IHB0aWQsIGludCBzdGVwLAorICAgICAg ICAgICAgICAgZW51bSB0YXJnZXRfc2lnbmFsIHNpZ2duYWwpCit7CisgIHJl Y29yZF9yZXN1bWVfc3RlcCA9IHN0ZXA7CisgIHJlY29yZF9yZXN1bWVfc2ln Z25hbCA9IHNpZ2duYWw7CisKKyAgaWYgKCFSRUNPUkRfSVNfUkVQTEFZKQor ICAgIHsKKyAgICAgIGlmIChkb19yZWNvcmRfbWVzc2FnZSAoY3VycmVudF9n ZGJhcmNoKSkKKyAgICAgICAgeworICAgICAgICAgIHJlY29yZF9yZXN1bWVf ZXJyb3IgPSAwOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsK KyAgICAgICAgICByZWNvcmRfcmVzdW1lX2Vycm9yID0gMTsKKyAgICAgICAg ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIHJlY29yZF9iZW5lYXRoX3Rv X3Jlc3VtZSAocmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lX29wcywgcHRpZCwg MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnZ25hbCk7 CisgICAgfQorfQorCitzdGF0aWMgaW50IHJlY29yZF9nZXRfc2lnID0gMDsK Kworc3RhdGljIHZvaWQKK3JlY29yZF9zaWdfaGFuZGxlciAoaW50IHNpZ25v KQoreworICBpZiAocmVjb3JkX2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgIlByb2Nlc3MgcmVjb3JkOiBnZXQgYSBzaWdu YWxcbiIpOworCisgIC8qIEl0IHdpbGwgYnJlYWsgdGhlIHJ1bm5pbmcgaW5m ZXJpb3IgaW4gcmVwbGF5IG1vZGUuICAqLworICByZWNvcmRfcmVzdW1lX3N0 ZXAgPSAxOworCisgIC8qIEl0IHdpbGwgbGV0IHJlY29yZF93YWl0IHNldCBp bmZlcmlvciBzdGF0dXMgdG8gZ2V0IHRoZSBzaWduYWwKKyAgICAgU0lHSU5U LiAgKi8KKyAgcmVjb3JkX2dldF9zaWcgPSAxOworfQorCitzdGF0aWMgdm9p ZAorcmVjb3JkX3dhaXRfY2xlYW51cHMgKHZvaWQgKmlnbm9yZSkKK3sKKyAg aWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhFQ19SRVZFUlNFKQorICAg IHsKKyAgICAgIGlmIChyZWNvcmRfbGlzdC0+bmV4dCkKKwlyZWNvcmRfbGlz dCA9IHJlY29yZF9saXN0LT5uZXh0OworICAgIH0KKyAgZWxzZQorICAgIHJl Y29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPnByZXY7Cit9CisKKy8qIEluIHJl cGxheSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGV4YW1pbmVzIHRoZSByZWNvcmRl ZCBsb2cgYW5kCisgICBkZXRlcm1pbmVzIHdoZXJlIHRvIHN0b3AuICAqLwor CitzdGF0aWMgcHRpZF90CityZWNvcmRfd2FpdCAoc3RydWN0IHRhcmdldF9v cHMgKm9wcywKKyAgICAgICAgICAgICAgcHRpZF90IHB0aWQsIHN0cnVjdCB0 YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzKQoreworICBzdHJ1Y3QgY2xlYW51 cCAqc2V0X2NsZWFudXBzID0gcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJs ZV9zZXQgKCk7CisKKyAgaWYgKHJlY29yZF9kZWJ1ZykKKyAgICBmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkiUHJvY2VzcyByZWNvcmQ6 IHJlY29yZF93YWl0ICIKKwkJCSJyZWNvcmRfcmVzdW1lX3N0ZXAgPSAlZFxu IiwKKwkJCXJlY29yZF9yZXN1bWVfc3RlcCk7CisKKyAgaWYgKCFSRUNPUkRf SVNfUkVQTEFZKQorICAgIHsKKyAgICAgIGlmIChyZWNvcmRfcmVzdW1lX2Vy cm9yKQorCXsKKwkgIC8qIElmIHJlY29yZF9yZXN1bWUgZ2V0IGVycm9yLCBy ZXR1cm4gZGlyZWN0bHkuICAqLworCSAgc3RhdHVzLT5raW5kID0gVEFSR0VU X1dBSVRLSU5EX1NUT1BQRUQ7CisJICBzdGF0dXMtPnZhbHVlLnNpZyA9IFRB UkdFVF9TSUdOQUxfVFJBUDsKKwkgIHJldHVybiBpbmZlcmlvcl9wdGlkOwor CX0KKworICAgICAgaWYgKHJlY29yZF9yZXN1bWVfc3RlcCkKKwl7CisJICAv KiBUaGlzIGlzIGEgc2luZ2xlIHN0ZXAuICAqLworCSAgcmV0dXJuIHJlY29y ZF9iZW5lYXRoX3RvX3dhaXQgKHJlY29yZF9iZW5lYXRoX3RvX3dhaXRfb3Bz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHRpZCwgc3RhdHVzKTsKKwl9CisgICAgICBlbHNlCisJ eworCSAgLyogVGhpcyBpcyBub3QgYSBzaW5nbGUgc3RlcC4gICovCisJICBw dGlkX3QgcmV0OworCSAgQ09SRV9BRERSIHRtcF9wYzsKKworCSAgd2hpbGUg KDEpCisJICAgIHsKKwkgICAgICByZXQgPQorCQlyZWNvcmRfYmVuZWF0aF90 b193YWl0IChyZWNvcmRfYmVuZWF0aF90b193YWl0X29wcywgcHRpZCwKKwkJ CQkJc3RhdHVzKTsKKworCSAgICAgIGlmIChzdGF0dXMtPmtpbmQgPT0gVEFS R0VUX1dBSVRLSU5EX1NUT1BQRUQKKwkJICAmJiBzdGF0dXMtPnZhbHVlLnNp ZyA9PSBUQVJHRVRfU0lHTkFMX1RSQVApCisJCXsKKwkJICAvKiBDaGVjayBp ZiB0aGVyZSBpcyBhIGJyZWFrcG9pbnQuICAqLworCQkgIHJlZ2lzdGVyc19j aGFuZ2VkICgpOworCQkgIHRtcF9wYyA9IHJlYWRfcGMgKCk7CisJCSAgaWYg KGJyZWFrcG9pbnRfaW5zZXJ0ZWRfaGVyZV9wICh0bXBfcGMpKQorCQkgICAg eworCQkgICAgICAvKiBUaGVyZSBpcyBhIGJyZWFrcG9pbnQuICAqLworCQkg ICAgICBDT1JFX0FERFIgZGVjcl9wY19hZnRlcl9icmVhayA9CisJCQlnZGJh cmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsgKGN1cnJlbnRfZ2RiYXJjaCk7CisJ CSAgICAgIGlmIChkZWNyX3BjX2FmdGVyX2JyZWFrKQorCQkJeworCQkJICBy ZWdjYWNoZV93cml0ZV9wYyAoZ2V0X3RocmVhZF9yZWdjYWNoZSAocmV0KSwK KwkJCQkJICAgICB0bXBfcGMgKyBkZWNyX3BjX2FmdGVyX2JyZWFrKTsKKwkJ CX0KKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIC8qIFRo ZXJlIGlzIG5vdCBhIGJyZWFrcG9pbnQuICAqLworCQkgICAgICBpZiAoIWRv X3JlY29yZF9tZXNzYWdlIChjdXJyZW50X2dkYmFyY2gpKQorCQkJeworICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJCX0KKwkJICAgICAg cmVjb3JkX2JlbmVhdGhfdG9fcmVzdW1lIChyZWNvcmRfYmVuZWF0aF90b19y ZXN1bWVfb3BzLAorCQkJCQkJcHRpZCwgMSwKKwkJCQkJCXJlY29yZF9yZXN1 bWVfc2lnZ25hbCk7CisJCSAgICAgIGNvbnRpbnVlOworCQkgICAgfQorCQl9 CisKKwkgICAgICAvKiBUaGUgaW5mZXJpb3IgaXMgYnJva2VuIGJ5IGEgYnJl YWtwb2ludCBvciBhIHNpZ25hbC4gICovCisJICAgICAgYnJlYWs7CisJICAg IH0KKworCSAgcmV0dXJuIHJldDsKKwl9CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSA9IGdldF9jdXJy ZW50X3JlZ2NhY2hlICgpOworICAgICAgaW50IGNvbnRpbnVlX2ZsYWcgPSAx OworICAgICAgaW50IGZpcnN0X3JlY29yZF9lbmQgPSAxOworICAgICAgc3Ry dWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAocmVj b3JkX3dhaXRfY2xlYW51cHMsIDApOworICAgICAgQ09SRV9BRERSIHRtcF9w YzsKKworICAgICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX1NU T1BQRUQ7CisKKyAgICAgIC8qIENoZWNrIGJyZWFrcG9pbnQgd2hlbiBmb3J3 YXJkIGV4ZWN1dGUuICAqLworICAgICAgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rp b24gPT0gRVhFQ19GT1JXQVJEKQorCXsKKwkgIHRtcF9wYyA9IHJlZ2NhY2hl X3JlYWRfcGMgKHJlZ2NhY2hlKTsKKwkgIGlmIChicmVha3BvaW50X2luc2Vy dGVkX2hlcmVfcCAodG1wX3BjKSkKKwkgICAgeworCSAgICAgIGlmIChyZWNv cmRfZGVidWcpCisJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KwkJCQkgICAgIlByb2Nlc3MgcmVjb3JkOiBicmVhayBhdCAweCVzLlxuIiwK KwkJCQkgICAgcGFkZHJfbnogKHRtcF9wYykpOworCSAgICAgIGlmIChnZGJh cmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsgKGdldF9yZWdjYWNoZV9hcmNoIChy ZWdjYWNoZSkpCisJCSAgJiYgIXJlY29yZF9yZXN1bWVfc3RlcCkKKwkJcmVn Y2FjaGVfd3JpdGVfcGMgKHJlZ2NhY2hlLAorCQkJCSAgIHRtcF9wYyArCisJ CQkJICAgZ2RiYXJjaF9kZWNyX3BjX2FmdGVyX2JyZWFrCisJCQkJICAgKGdl dF9yZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpKTsKKwkgICAgICBnb3RvIHJl cGxheV9vdXQ7CisJICAgIH0KKwl9CisKKyAgICAgIHJlY29yZF9nZXRfc2ln ID0gMDsKKyAgICAgIHNpZ25hbCAoU0lHSU5ULCByZWNvcmRfc2lnX2hhbmRs ZXIpOworICAgICAgLyogSWYgR0RCIGlzIGluIHRlcm1pbmFsX2luZmVyaW9y IG1vZGUsIGl0IHdpbGwgbm90IGdldCB0aGUgc2lnbmFsLgorICAgICAgICAg QW5kIGluIEdEQiByZXBsYXkgbW9kZSwgR0RCIGRvZXNuJ3QgbmVlZCB0byBi ZSBpbiB0ZXJtaW5hbF9pbmZlcmlvcgorICAgICAgICAgbW9kZSwgYmVjYXVz ZSBpbmZlcmlvciB3aWxsIG5vdCBleGVjdXRlZC4KKyAgICAgICAgIFRoZW4g c2V0IGl0IHRvIHRlcm1pbmFsX291cnMgdG8gbWFrZSBHREIgZ2V0IHRoZSBz aWduYWwuICAqLworICAgICAgdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisK KyAgICAgIC8qIEluIEVYRUNfRk9SV0FSRCBtb2RlLCByZWNvcmRfbGlzdCBw b2ludHMgdG8gdGhlIHRhaWwgb2YgcHJldgorICAgICAgICAgaW5zdHJ1Y3Rp b24uICAqLworICAgICAgaWYgKGV4ZWN1dGlvbl9kaXJlY3Rpb24gPT0gRVhF Q19GT1JXQVJEICYmIHJlY29yZF9saXN0LT5uZXh0KQorCXJlY29yZF9saXN0 ID0gcmVjb3JkX2xpc3QtPm5leHQ7CisKKyAgICAgIC8qIExvb3Agb3ZlciB0 aGUgcmVjb3JkX2xpc3QsIGxvb2tpbmcgZm9yIHRoZSBuZXh0IHBsYWNlIHRv CisJIHN0b3AuICAqLworICAgICAgZG8KKwl7CisJICAvKiBDaGVjayBmb3Ig YmVnaW5uaW5nIGFuZCBlbmQgb2YgbG9nLiAgKi8KKwkgIGlmIChleGVjdXRp b25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRQorCSAgICAgICYmIHJlY29y ZF9saXN0ID09ICZyZWNvcmRfZmlyc3QpCisJICAgIHsKKwkgICAgICAvKiBI aXQgYmVnaW5uaW5nIG9mIHJlY29yZCBsb2cgaW4gcmV2ZXJzZS4gICovCisJ ICAgICAgc3RhdHVzLT5raW5kID0gVEFSR0VUX1dBSVRLSU5EX05PX0hJU1RP Ulk7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIGlmIChleGVjdXRpb25f ZGlyZWN0aW9uICE9IEVYRUNfUkVWRVJTRSAmJiAhcmVjb3JkX2xpc3QtPm5l eHQpCisJICAgIHsKKwkgICAgICAvKiBIaXQgZW5kIG9mIHJlY29yZCBsb2cg Z29pbmcgZm9yd2FyZC4gICovCisJICAgICAgc3RhdHVzLT5raW5kID0gVEFS R0VUX1dBSVRLSU5EX05PX0hJU1RPUlk7CisJICAgICAgYnJlYWs7CisJICAg IH0KKworCSAgLyogU2V0IHB0aWQsIHJlZ2lzdGVyIGFuZCBtZW1vcnkgYWNj b3JkaW5nIHRvIHJlY29yZF9saXN0LiAgKi8KKwkgIGlmIChyZWNvcmRfbGlz dC0+dHlwZSA9PSByZWNvcmRfcmVnKQorCSAgICB7CisJICAgICAgLyogcmVn ICovCisJICAgICAgZ2RiX2J5dGUgcmVnW01BWF9SRUdJU1RFUl9TSVpFXTsK KwkgICAgICBpZiAocmVjb3JkX2RlYnVnID4gMSkKKwkJZnByaW50Zl91bmZp bHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgICAiUHJvY2VzcyByZWNvcmQ6 IHJlY29yZF9yZWcgJXMgdG8gIgorCQkJCSAgICAiaW5mZXJpb3IgbnVtID0g JWQuXG4iLAorCQkJCSAgICBob3N0X2FkZHJlc3NfdG9fc3RyaW5nIChyZWNv cmRfbGlzdCksCisJCQkJICAgIHJlY29yZF9saXN0LT51LnJlZy5udW0pOwor CSAgICAgIHJlZ2NhY2hlX2Nvb2tlZF9yZWFkIChyZWdjYWNoZSwgcmVjb3Jk X2xpc3QtPnUucmVnLm51bSwgcmVnKTsKKwkgICAgICByZWdjYWNoZV9jb29r ZWRfd3JpdGUgKHJlZ2NhY2hlLCByZWNvcmRfbGlzdC0+dS5yZWcubnVtLAor CQkJCSAgICAgcmVjb3JkX2xpc3QtPnUucmVnLnZhbCk7CisJICAgICAgbWVt Y3B5IChyZWNvcmRfbGlzdC0+dS5yZWcudmFsLCByZWcsIE1BWF9SRUdJU1RF Ul9TSVpFKTsKKwkgICAgfQorCSAgZWxzZSBpZiAocmVjb3JkX2xpc3QtPnR5 cGUgPT0gcmVjb3JkX21lbSkKKwkgICAgeworCSAgICAgIC8qIG1lbSAqLwor CSAgICAgIGdkYl9ieXRlICptZW0gPSBhbGxvY2EgKHJlY29yZF9saXN0LT51 Lm1lbS5sZW4pOworCSAgICAgIGlmIChyZWNvcmRfZGVidWcgPiAxKQorCQlm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJQcm9j ZXNzIHJlY29yZDogcmVjb3JkX21lbSAlcyB0byAiCisJCQkJICAgICJpbmZl cmlvciBhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisJCQkJICAgIGhvc3Rf YWRkcmVzc190b19zdHJpbmcgKHJlY29yZF9saXN0KSwKKwkJCQkgICAgcGFk ZHJfbnogKHJlY29yZF9saXN0LT51Lm1lbS5hZGRyKSwKKwkJCQkgICAgcmVj b3JkX2xpc3QtPnUubWVtLmxlbik7CisKKwkgICAgICBpZiAodGFyZ2V0X3Jl YWRfbWVtb3J5CisJCSAgKHJlY29yZF9saXN0LT51Lm1lbS5hZGRyLCBtZW0s IHJlY29yZF9saXN0LT51Lm1lbS5sZW4pKQorCQllcnJvciAoXygiUHJvY2Vz cyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0ICIKKwkJCSAiYWRk ciA9IDB4JXMgbGVuID0gJWQuIiksCisJCSAgICAgICBwYWRkcl9ueiAocmVj b3JkX2xpc3QtPnUubWVtLmFkZHIpLAorCQkgICAgICAgcmVjb3JkX2xpc3Qt PnUubWVtLmxlbik7CisKKwkgICAgICBpZiAodGFyZ2V0X3dyaXRlX21lbW9y eQorCQkgIChyZWNvcmRfbGlzdC0+dS5tZW0uYWRkciwgcmVjb3JkX2xpc3Qt PnUubWVtLnZhbCwKKwkJICAgcmVjb3JkX2xpc3QtPnUubWVtLmxlbikpCisJ CWVycm9yIChfCisJCSAgICAgICAoIlByb2Nlc3MgcmVjb3JkOiBlcnJvciB3 cml0aW5nIG1lbW9yeSBhdCAiCisJCQkiYWRkciA9IDB4JXMgbGVuID0gJWQu IiksCisJCSAgICAgICBwYWRkcl9ueiAocmVjb3JkX2xpc3QtPnUubWVtLmFk ZHIpLAorCQkgICAgICAgcmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisKKwkg ICAgICBtZW1jcHkgKHJlY29yZF9saXN0LT51Lm1lbS52YWwsIG1lbSwgcmVj b3JkX2xpc3QtPnUubWVtLmxlbik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgIGlmIChyZWNvcmRfZGVidWcgPiAxKQorCQlmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAgICJQcm9jZXNzIHJlY29y ZDogcmVjb3JkX2VuZCAlcyB0byAiCisJCQkJICAgICJpbmZlcmlvci5cbiIs CisJCQkJICAgIGhvc3RfYWRkcmVzc190b19zdHJpbmcgKHJlY29yZF9saXN0 KSk7CisKKwkgICAgICBpZiAoZmlyc3RfcmVjb3JkX2VuZCAmJiBleGVjdXRp b25fZGlyZWN0aW9uID09IEVYRUNfUkVWRVJTRSkKKwkJeworCQkgIC8qIFdo ZW4gcmV2ZXJzZSBleGN1dGUsIHRoZSBmaXJzdCByZWNvcmRfZW5kIGlzIHRo ZSBwYXJ0IG9mCisJCSAgICAgY3VycmVudCBpbnN0cnVjdGlvbi4gICovCisJ CSAgZmlyc3RfcmVjb3JkX2VuZCA9IDA7CisJCX0KKwkgICAgICBlbHNlCisJ CXsKKwkJICAvKiBJbiBFWEVDX1JFVkVSU0UgbW9kZSwgdGhpcyBpcyB0aGUg cmVjb3JkX2VuZCBvZiBwcmV2CisJCSAgICAgaW5zdHJ1Y3Rpb24uCisJCSAg ICAgSW4gRVhFQ19GT1JXQVJEIG1vZGUsIHRoaXMgaXMgdGhlIHJlY29yZF9l bmQgb2YgY3VycmVudAorCQkgICAgIGluc3RydWN0aW9uLiAgKi8KKwkJICAv KiBzdGVwICovCisJCSAgaWYgKHJlY29yZF9yZXN1bWVfc3RlcCkKKwkJICAg IHsKKwkJICAgICAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisJCQlmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiUHJvY2VzcyBy ZWNvcmQ6IHN0ZXAuXG4iKTsKKwkJICAgICAgY29udGludWVfZmxhZyA9IDA7 CisJCSAgICB9CisKKwkJICAvKiBjaGVjayBicmVha3BvaW50ICovCisJCSAg dG1wX3BjID0gcmVnY2FjaGVfcmVhZF9wYyAocmVnY2FjaGUpOworCQkgIGlm IChicmVha3BvaW50X2luc2VydGVkX2hlcmVfcCAodG1wX3BjKSkKKwkJICAg IHsKKwkJICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJCWZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJICAgICJQcm9jZXNzIHJlY29y ZDogYnJlYWsgIgorCQkJCQkgICAgImF0IDB4JXMuXG4iLAorCQkJCQkgICAg cGFkZHJfbnogKHRtcF9wYykpOworCQkgICAgICBpZiAoZ2RiYXJjaF9kZWNy X3BjX2FmdGVyX2JyZWFrIChnZXRfcmVnY2FjaGVfYXJjaCAocmVnY2FjaGUp KQorCQkJICAmJiBleGVjdXRpb25fZGlyZWN0aW9uID09IEVYRUNfRk9SV0FS RAorCQkJICAmJiAhcmVjb3JkX3Jlc3VtZV9zdGVwKQorCQkJcmVnY2FjaGVf d3JpdGVfcGMgKHJlZ2NhY2hlLAorCQkJCQkgICB0bXBfcGMgKworCQkJCQkg ICBnZGJhcmNoX2RlY3JfcGNfYWZ0ZXJfYnJlYWsKKwkJCQkJICAgKGdldF9y ZWdjYWNoZV9hcmNoIChyZWdjYWNoZSkpKTsKKwkJICAgICAgY29udGludWVf ZmxhZyA9IDA7CisJCSAgICB9CisJCX0KKwkgICAgfQorCituZXh0OgorCSAg aWYgKGNvbnRpbnVlX2ZsYWcpCisJICAgIHsKKwkgICAgICBpZiAoZXhlY3V0 aW9uX2RpcmVjdGlvbiA9PSBFWEVDX1JFVkVSU0UpCisJCXsKKwkJICBpZiAo cmVjb3JkX2xpc3QtPnByZXYpCisJCSAgICByZWNvcmRfbGlzdCA9IHJlY29y ZF9saXN0LT5wcmV2OworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYg KHJlY29yZF9saXN0LT5uZXh0KQorCQkgICAgcmVjb3JkX2xpc3QgPSByZWNv cmRfbGlzdC0+bmV4dDsKKwkJfQorCSAgICB9CisJfQorICAgICAgd2hpbGUg KGNvbnRpbnVlX2ZsYWcpOworCisgICAgICBzaWduYWwgKFNJR0lOVCwgaGFu ZGxlX3NpZ2ludCk7CisKK3JlcGxheV9vdXQ6CisgICAgICBpZiAocmVjb3Jk X2dldF9zaWcpCisJc3RhdHVzLT52YWx1ZS5zaWcgPSBUQVJHRVRfU0lHTkFM X0lOVDsKKyAgICAgIGVsc2UKKwlzdGF0dXMtPnZhbHVlLnNpZyA9IFRBUkdF VF9TSUdOQUxfVFJBUDsKKworICAgICAgZGlzY2FyZF9jbGVhbnVwcyAob2xk X2NsZWFudXBzKTsKKyAgICB9CisKKyAgZG9fY2xlYW51cHMgKHNldF9jbGVh bnVwcyk7CisgIHJldHVybiBpbmZlcmlvcl9wdGlkOworfQorCitzdGF0aWMg dm9pZAorcmVjb3JkX2Rpc2Nvbm5lY3QgKHN0cnVjdCB0YXJnZXRfb3BzICp0 YXJnZXQsIGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgaWYgKHJl Y29yZF9kZWJ1ZykKKyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRs b2csICJQcm9jZXNzIHJlY29yZDogcmVjb3JkX2Rpc2Nvbm5lY3RcbiIpOwor CisgIHVucHVzaF90YXJnZXQgKCZyZWNvcmRfb3BzKTsKKyAgdGFyZ2V0X2Rp c2Nvbm5lY3QgKGFyZ3MsIGZyb21fdHR5KTsKK30KKworc3RhdGljIHZvaWQK K3JlY29yZF9kZXRhY2ggKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMsIGNoYXIg KmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgaWYgKHJlY29yZF9kZWJ1ZykK KyAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJQcm9jZXNz IHJlY29yZDogcmVjb3JkX2RldGFjaFxuIik7CisKKyAgdW5wdXNoX3Rhcmdl dCAoJnJlY29yZF9vcHMpOworICB0YXJnZXRfZGV0YWNoIChhcmdzLCBmcm9t X3R0eSk7Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfbW91cm5faW5mZXJp b3IgKHN0cnVjdCB0YXJnZXRfb3BzICpvcHMpCit7CisgIGlmIChyZWNvcmRf ZGVidWcpCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAi UHJvY2VzcyByZWNvcmQ6ICIKKwkJCSAgICAgICAgICAgICJyZWNvcmRfbW91 cm5faW5mZXJpb3JcbiIpOworCisgIHVucHVzaF90YXJnZXQgKCZyZWNvcmRf b3BzKTsKKyAgdGFyZ2V0X21vdXJuX2luZmVyaW9yICgpOworfQorCisvKiBD bG9zZSBwcm9jZXNzIHJlY29yZCB0YXJnZXQgYmVmb3JlIGtpbGxpbmcgdGhl IGluZmVyaW9yIHByb2Nlc3MuICAqLworc3RhdGljIHZvaWQKK3JlY29yZF9r aWxsIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzKQoreworICBpZiAocmVjb3Jk X2RlYnVnKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywg IlByb2Nlc3MgcmVjb3JkOiByZWNvcmRfa2lsbFxuIik7CisKKyAgdW5wdXNo X3RhcmdldCAoJnJlY29yZF9vcHMpOworICB0YXJnZXRfa2lsbCAoKTsKK30K KworLyogUmVjb3JkIHJlZ2lzdGVycyBjaGFuZ2UgKGJ5IHVzZXIgb3IgYnkg R0RCKSB0byBsaXN0IGFzIGFuIGluc3RydWN0aW9uLiAgKi8KK3N0YXRpYyB2 b2lkCityZWNvcmRfcmVnaXN0ZXJzX2NoYW5nZSAoc3RydWN0IHJlZ2NhY2hl ICpyZWdjYWNoZSwgaW50IHJlZ251bSkKK3sKKyAgLyogQ2hlY2sgcmVjb3Jk X2luc25fbnVtLiAgKi8KKyAgcmVjb3JkX2NoZWNrX2luc25fbnVtICgwKTsK KworICByZWNvcmRfYXJjaF9saXN0X2hlYWQgPSBOVUxMOworICByZWNvcmRf YXJjaF9saXN0X3RhaWwgPSBOVUxMOworCisgIHJlY29yZF9yZWdjYWNoZSA9 IGdldF9jdXJyZW50X3JlZ2NhY2hlICgpOworCisgIGlmIChyZWdudW0gPCAw KQorICAgIHsKKyAgICAgIGludCBpOworICAgICAgZm9yIChpID0gMDsgaSA8 IGdkYmFyY2hfbnVtX3JlZ3MgKGdldF9yZWdjYWNoZV9hcmNoIChyZWdjYWNo ZSkpOyBpKyspCisJeworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAoaSkpCisJICAgIHsKKwkgICAgICByZWNvcmRfbGlzdF9yZWxlYXNlIChy ZWNvcmRfYXJjaF9saXN0X3RhaWwpOworCSAgICAgIGVycm9yIChfKCJQcm9j ZXNzIHJlY29yZDogZmFpbGVkIHRvIHJlY29yZCBleGVjdXRpb24gbG9nLiIp KTsKKwkgICAgfQorCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdudW0pKQorCXsKKwkg IHJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7 CisJICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNv cmQgZXhlY3V0aW9uIGxvZy4iKSk7CisJfQorICAgIH0KKyAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX2VuZCAoKSkKKyAgICB7CisgICAgICByZWNvcmRf bGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwpOworICAgICAg ZXJyb3IgKF8oIlByb2Nlc3MgcmVjb3JkOiBmYWlsZWQgdG8gcmVjb3JkIGV4 ZWN1dGlvbiBsb2cuIikpOworICAgIH0KKyAgcmVjb3JkX2xpc3QtPm5leHQg PSByZWNvcmRfYXJjaF9saXN0X2hlYWQ7CisgIHJlY29yZF9hcmNoX2xpc3Rf aGVhZC0+cHJldiA9IHJlY29yZF9saXN0OworICByZWNvcmRfbGlzdCA9IHJl Y29yZF9hcmNoX2xpc3RfdGFpbDsKKworICBpZiAocmVjb3JkX2luc25fbnVt ID09IHJlY29yZF9pbnNuX21heF9udW0gJiYgcmVjb3JkX2luc25fbWF4X251 bSkKKyAgICByZWNvcmRfbGlzdF9yZWxlYXNlX2ZpcnN0ICgpOworICBlbHNl CisgICAgcmVjb3JkX2luc25fbnVtKys7Cit9CisKK3N0YXRpYyB2b2lkCity ZWNvcmRfc3RvcmVfcmVnaXN0ZXJzIChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3Bz LCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHJlZ25vKQoreworICBpZiAoIXJlY29yZF9nZGJfb3Bl cmF0aW9uX2Rpc2FibGUpCisgICAgeworICAgICAgaWYgKFJFQ09SRF9JU19S RVBMQVkpCisJeworCSAgaW50IG47CisJICBzdHJ1Y3QgY2xlYW51cCAqb2xk X2NsZWFudXBzOworCisJICAvKiBMZXQgdXNlciBjaG9vc2UgaWYgaGUgd2Fu dHMgdG8gd3JpdGUgcmVnaXN0ZXIgb3Igbm90LiAgKi8KKwkgIGlmIChyZWdu byA8IDApCisJICAgIG4gPQorCSAgICAgIG5xdWVyeSAoXygiQmVjYXVzZSBH REIgaXMgaW4gcmVwbGF5IG1vZGUsIGNoYW5naW5nIHRoZSAiCisJCQkidmFs dWUgb2YgYSByZWdpc3RlciB3aWxsIG1ha2UgdGhlIGV4ZWN1dGlvbiAiCisJ CQkibG9nIHVudXNhYmxlIGZyb20gdGhpcyBwb2ludCBvbndhcmQuICAiCisJ CQkiQ2hhbmdlIGFsbCByZWdpc3RlcnM/IikpOworCSAgZWxzZQorCSAgICBu ID0KKwkgICAgICBucXVlcnkgKF8oIkJlY2F1c2UgR0RCIGlzIGluIHJlcGxh eSBtb2RlLCBjaGFuZ2luZyB0aGUgdmFsdWUgIgorCQkJIm9mIGEgcmVnaXN0 ZXIgd2lsbCBtYWtlIHRoZSBleGVjdXRpb24gbG9nIHVudXNhYmxlICIKKwkJ CSJmcm9tIHRoaXMgcG9pbnQgb253YXJkLiAgQ2hhbmdlIHJlZ2lzdGVyICVz PyIpLAorCQkgICAgICBnZGJhcmNoX3JlZ2lzdGVyX25hbWUgKGdldF9yZWdj YWNoZV9hcmNoIChyZWdjYWNoZSksCisJCQkJCSAgICAgICByZWdubykpOwor CisJICBpZiAoIW4pCisJICAgIHsKKwkgICAgICAvKiBJbnZhbGlkYXRlIHRo ZSB2YWx1ZSBvZiByZWdjYWNoZSB0aGF0IHdhcyBzZXQgaW4gZnVuY3Rpb24K KwkgICAgICAgICAicmVnY2FjaGVfcmF3X3dyaXRlIi4gICovCisJICAgICAg aWYgKHJlZ25vIDwgMCkKKwkJeworCQkgIGludCBpOworCQkgIGZvciAoaSA9 IDA7CisJCSAgICAgICBpIDwgZ2RiYXJjaF9udW1fcmVncyAoZ2V0X3JlZ2Nh Y2hlX2FyY2ggKHJlZ2NhY2hlKSk7CisJCSAgICAgICBpKyspCisJCSAgICBy ZWdjYWNoZV9pbnZhbGlkYXRlIChyZWdjYWNoZSwgaSk7CisJCX0KKwkgICAg ICBlbHNlCisJCXJlZ2NhY2hlX2ludmFsaWRhdGUgKHJlZ2NhY2hlLCByZWdu byk7CisKKwkgICAgICBlcnJvciAoXygiUHJvY2VzcyByZWNvcmQgY2FuY2Vs ZWQgdGhlIG9wZXJhdGlvbi4iKSk7CisJICAgIH0KKworCSAgLyogRGVzdHJv eSB0aGUgcmVjb3JkIGZyb20gaGVyZSBmb3J3YXJkLiAgKi8KKwkgIHJlY29y ZF9saXN0X3JlbGVhc2VfbmV4dCAoKTsKKwl9CisKKyAgICAgIHJlY29yZF9y ZWdpc3RlcnNfY2hhbmdlIChyZWdjYWNoZSwgcmVnbm8pOworICAgIH0KKyAg cmVjb3JkX2JlbmVhdGhfdG9fc3RvcmVfcmVnaXN0ZXJzIChyZWNvcmRfYmVu ZWF0aF90b19zdG9yZV9yZWdpc3RlcnNfb3BzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlZ2NhY2hlLCByZWdubyk7Cit9CisK Ky8qIEJlaGF2aW9yIGlzIGNvbmRpdGlvbmFsIG9uIFJFQ09SRF9JU19SRVBM 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 Y2hfbGlzdF9hZGRfZW5kICgpKQorCXsKKwkgIHJlY29yZF9saXN0X3JlbGVh c2UgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCk7CisJICBpZiAocmVjb3JkX2Rl YnVnKQorCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJ CQkJXygiUHJvY2VzcyByZWNvcmQ6IGZhaWxlZCB0byByZWNvcmQgIgorCQkJ CSAgImV4ZWN1dGlvbiBsb2cuIikpOworCSAgcmV0dXJuIC0xOworCX0KKyAg ICAgIHJlY29yZF9saXN0LT5uZXh0ID0gcmVjb3JkX2FyY2hfbGlzdF9oZWFk OworICAgICAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkLT5wcmV2ID0gcmVjb3Jk X2xpc3Q7CisgICAgICByZWNvcmRfbGlzdCA9IHJlY29yZF9hcmNoX2xpc3Rf dGFpbDsKKworICAgICAgaWYgKHJlY29yZF9pbnNuX251bSA9PSByZWNvcmRf aW5zbl9tYXhfbnVtICYmIHJlY29yZF9pbnNuX21heF9udW0pCisJcmVjb3Jk X2xpc3RfcmVsZWFzZV9maXJzdCAoKTsKKyAgICAgIGVsc2UKKwlyZWNvcmRf aW5zbl9udW0rKzsKKyAgICB9CisKKyAgcmV0dXJuIHJlY29yZF9iZW5lYXRo X3RvX3hmZXJfcGFydGlhbCAocmVjb3JkX2JlbmVhdGhfdG9feGZlcl9wYXJ0 aWFsX29wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgb2JqZWN0LCBhbm5leCwgcmVhZGJ1Ziwgd3JpdGVidWYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwg bGVuKTsKK30KKworLyogQmVoYXZpb3IgaXMgY29uZGl0aW9uYWwgb24gUkVD T1JEX0lTX1JFUExBWS4KKyAgIFdlIHdpbGwgbm90IGFjdHVhbGx5IGluc2Vy dCBvciByZW1vdmUgYnJlYWtwb2ludHMgd2hlbiByZXBsYXlpbmcsCisgICBu b3Igd2hlbiByZWNvcmRpbmcuICAqLworCitzdGF0aWMgaW50CityZWNvcmRf aW5zZXJ0X2JyZWFrcG9pbnQgKHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBf dGd0KQoreworICBpZiAoIVJFQ09SRF9JU19SRVBMQVkpCisgICAgeworICAg ICAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwcyA9IHJlY29yZF9nZGJf b3BlcmF0aW9uX2Rpc2FibGVfc2V0ICgpOworICAgICAgaW50IHJldCA9IHJl Y29yZF9iZW5lYXRoX3RvX2luc2VydF9icmVha3BvaW50IChicF90Z3QpOwor CisgICAgICBkb19jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKKworICAgICAg cmV0dXJuIHJldDsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQKK3JlY29yZF9yZW1vdmVfYnJlYWtwb2ludCAoc3RydWN0IGJwX3Rh cmdldF9pbmZvICpicF90Z3QpCit7CisgIGlmICghUkVDT1JEX0lTX1JFUExB WSkKKyAgICB7CisgICAgICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBz ID0gcmVjb3JkX2dkYl9vcGVyYXRpb25fZGlzYWJsZV9zZXQgKCk7CisgICAg ICBpbnQgcmV0ID0gcmVjb3JkX2JlbmVhdGhfdG9fcmVtb3ZlX2JyZWFrcG9p bnQgKGJwX3RndCk7CisKKyAgICAgIGRvX2NsZWFudXBzIChvbGRfY2xlYW51 cHMpOworCisgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICByZXR1cm4g MDsKK30KKworc3RhdGljIGludAorcmVjb3JkX2Nhbl9leGVjdXRlX3JldmVy c2UgKHZvaWQpCit7CisgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAor aW5pdF9yZWNvcmRfb3BzICh2b2lkKQoreworICByZWNvcmRfb3BzLnRvX3No b3J0bmFtZSA9ICJyZWNvcmQiOworICByZWNvcmRfb3BzLnRvX2xvbmduYW1l ID0gIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IjsKKyAgcmVj b3JkX29wcy50b19kb2MgPQorICAgICJMb2cgcHJvZ3JhbSB3aGlsZSBleGVj dXRpbmcgYW5kIHJlcGxheSBleGVjdXRpb24gZnJvbSBsb2cuIjsKKyAgcmVj b3JkX29wcy50b19vcGVuID0gcmVjb3JkX29wZW47CisgIHJlY29yZF9vcHMu dG9fY2xvc2UgPSByZWNvcmRfY2xvc2U7CisgIHJlY29yZF9vcHMudG9fcmVz dW1lID0gcmVjb3JkX3Jlc3VtZTsKKyAgcmVjb3JkX29wcy50b193YWl0ID0g cmVjb3JkX3dhaXQ7CisgIHJlY29yZF9vcHMudG9fZGlzY29ubmVjdCA9IHJl Y29yZF9kaXNjb25uZWN0OworICByZWNvcmRfb3BzLnRvX2RldGFjaCA9IHJl Y29yZF9kZXRhY2g7CisgIHJlY29yZF9vcHMudG9fbW91cm5faW5mZXJpb3Ig PSByZWNvcmRfbW91cm5faW5mZXJpb3I7CisgIHJlY29yZF9vcHMudG9fa2ls bCA9IHJlY29yZF9raWxsOworICByZWNvcmRfb3BzLnRvX2NyZWF0ZV9pbmZl cmlvciA9IGZpbmRfZGVmYXVsdF9jcmVhdGVfaW5mZXJpb3I7CisgIHJlY29y ZF9vcHMudG9fc3RvcmVfcmVnaXN0ZXJzID0gcmVjb3JkX3N0b3JlX3JlZ2lz dGVyczsKKyAgcmVjb3JkX29wcy50b194ZmVyX3BhcnRpYWwgPSByZWNvcmRf eGZlcl9wYXJ0aWFsOworICByZWNvcmRfb3BzLnRvX2luc2VydF9icmVha3Bv aW50ID0gcmVjb3JkX2luc2VydF9icmVha3BvaW50OworICByZWNvcmRfb3Bz LnRvX3JlbW92ZV9icmVha3BvaW50ID0gcmVjb3JkX3JlbW92ZV9icmVha3Bv aW50OworICByZWNvcmRfb3BzLnRvX2Nhbl9leGVjdXRlX3JldmVyc2UgPSBy ZWNvcmRfY2FuX2V4ZWN1dGVfcmV2ZXJzZTsKKyAgcmVjb3JkX29wcy50b19z dHJhdHVtID0gcmVjb3JkX3N0cmF0dW07CisgIHJlY29yZF9vcHMudG9fbWFn aWMgPSBPUFNfTUFHSUM7Cit9CisKK3N0YXRpYyB2b2lkCitzaG93X3JlY29y ZF9kZWJ1ZyAoc3RydWN0IHVpX2ZpbGUgKmZpbGUsIGludCBmcm9tX3R0eSwK KwkJICAgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmMsIGNvbnN0IGNoYXIg KnZhbHVlKQoreworICBmcHJpbnRmX2ZpbHRlcmVkIChmaWxlLCBfKCJEZWJ1 Z2dpbmcgb2YgcHJvY2VzcyByZWNvcmQgdGFyZ2V0IGlzICVzLlxuIiksCisJ CSAgICB2YWx1ZSk7Cit9CisKKy8qIEFsaWFzIGZvciAidGFyZ2V0IHJlY29y ZCIuICAqLworCitzdGF0aWMgdm9pZAorY21kX3JlY29yZF9zdGFydCAoY2hh ciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBleGVjdXRlX2NvbW1hbmQg KCJ0YXJnZXQgcmVjb3JkIiwgZnJvbV90dHkpOworfQorCisvKiBUcnVuY2F0 ZSB0aGUgcmVjb3JkIGxvZyBmcm9tIHRoZSBwcmVzZW50IHBvaW50CisgICBv ZiByZXBsYXkgdW50aWwgdGhlIGVuZC4gICovCisKK3N0YXRpYyB2b2lkCitj bWRfcmVjb3JkX2RlbGV0ZSAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQor eworICBpZiAoY3VycmVudF90YXJnZXQudG9fc3RyYXR1bSA9PSByZWNvcmRf c3RyYXR1bSkKKyAgICB7CisgICAgICBpZiAoUkVDT1JEX0lTX1JFUExBWSkK Kwl7CisJICBpZiAoIWZyb21fdHR5IHx8IHF1ZXJ5IChfKCJEZWxldGUgdGhl IGxvZyBmcm9tIHRoaXMgcG9pbnQgZm9yd2FyZCAiCisJCSAgICAgICAgICAg ICAgICAgICAgImFuZCBiZWdpbiB0byByZWNvcmQgdGhlIHJ1bm5pbmcgbWVz c2FnZSAiCisJCSAgICAgICAgICAgICAgICAgICAgImF0IGN1cnJlbnQgUEM/ IikpKQorCSAgICByZWNvcmRfbGlzdF9yZWxlYXNlX25leHQgKCk7CisJfQor ICAgICAgZWxzZQorCSAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIkFscmVhZHkg YXQgZW5kIG9mIHJlY29yZCBsaXN0LlxuIikpOworCisgICAgfQorICBlbHNl CisgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGlz IG5vdCBzdGFydGVkLlxuIikpOworfQorCisvKiBJbXBsZW1lbnQgdGhlICJz dG9wcmVjb3JkIiBjb21tYW5kLiAgKi8KKworc3RhdGljIHZvaWQKK2NtZF9y ZWNvcmRfc3RvcCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5KQoreworICBp ZiAoY3VycmVudF90YXJnZXQudG9fc3RyYXR1bSA9PSByZWNvcmRfc3RyYXR1 bSkKKyAgICB7CisgICAgICBpZiAoIXJlY29yZF9saXN0IHx8ICFmcm9tX3R0 eSB8fCBxdWVyeSAoXygiRGVsZXRlIHJlY29yZGVkIGxvZyBhbmQgIgorCSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RvcCBy ZWNvcmRpbmc/IikpKQorCXVucHVzaF90YXJnZXQgKCZyZWNvcmRfb3BzKTsK KyAgICB9CisgIGVsc2UKKyAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJv Y2VzcyByZWNvcmQgaXMgbm90IHN0YXJ0ZWQuXG4iKSk7Cit9CisKKy8qIFNl dCB1cHBlciBsaW1pdCBvZiByZWNvcmQgbG9nIHNpemUuICAqLworCitzdGF0 aWMgdm9pZAorc2V0X3JlY29yZF9pbnNuX21heF9udW0gKGNoYXIgKmFyZ3Ms IGludCBmcm9tX3R0eSwgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmMpCit7 CisgIGlmIChyZWNvcmRfaW5zbl9udW0gPiByZWNvcmRfaW5zbl9tYXhfbnVt ICYmIHJlY29yZF9pbnNuX21heF9udW0pCisgICAgeworICAgICAgcHJpbnRm X3VuZmlsdGVyZWQgKF8oIlJlY29yZCBpbnN0cnVjdGlvbnMgbnVtYmVyIGlz IGJpZ2dlciB0aGFuICIKKwkJICAgICAgICAgICAicmVjb3JkIGluc3RydWN0 aW9ucyBtYXggbnVtYmVyLiAgQXV0byBkZWxldGUgIgorCQkgICAgICAgICAg ICJ0aGUgZmlyc3Qgb25lcz9cbiIpKTsKKworICAgICAgd2hpbGUgKHJlY29y ZF9pbnNuX251bSA+IHJlY29yZF9pbnNuX21heF9udW0pCisJcmVjb3JkX2xp c3RfcmVsZWFzZV9maXJzdCAoKTsKKyAgICB9Cit9CisKKy8qIFByaW50IHRo ZSBjdXJyZW50IGluZGV4IGludG8gdGhlIHJlY29yZCBsb2cgKG51bWJlciBv ZiBpbnNucyByZWNvcmRlZAorICAgc28gZmFyKS4gICovCisKK3N0YXRpYyB2 b2lkCitzaG93X3JlY29yZF9pbnNuX251bWJlciAoY2hhciAqaWdub3JlLCBp bnQgZnJvbV90dHkpCit7CisgIHByaW50Zl91bmZpbHRlcmVkIChfKCJSZWNv cmQgaW5zdHJ1Y3Rpb24gbnVtYmVyIGlzICVkLlxuIiksCisJCSAgICAgcmVj b3JkX2luc25fbnVtKTsKK30KKwordm9pZAorX2luaXRpYWxpemVfcmVjb3Jk ICh2b2lkKQoreworICAvKiBJbml0IHJlY29yZF9maXJzdC4gICovCisgIHJl Y29yZF9maXJzdC5wcmV2ID0gTlVMTDsKKyAgcmVjb3JkX2ZpcnN0Lm5leHQg PSBOVUxMOworICByZWNvcmRfZmlyc3QudHlwZSA9IHJlY29yZF9lbmQ7CisK KyAgaW5pdF9yZWNvcmRfb3BzICgpOworICBhZGRfdGFyZ2V0ICgmcmVjb3Jk X29wcyk7CisKKyAgYWRkX3NldHNob3dfemludGVnZXJfY21kICgicmVjb3Jk Iiwgbm9fY2xhc3MsICZyZWNvcmRfZGVidWcsCisJCQkgICAgXygiU2V0IGRl YnVnZ2luZyBvZiByZWNvcmQvcmVwbGF5IGZlYXR1cmUuIiksCisJCQkgICAg XygiU2hvdyBkZWJ1Z2dpbmcgb2YgcmVjb3JkL3JlcGxheSBmZWF0dXJlLiIp LAorCQkJICAgIF8oIldoZW4gZW5hYmxlZCwgZGVidWdnaW5nIG91dHB1dCBm b3IgIgorCQkJICAgICAgInJlY29yZC9yZXBsYXkgZmVhdHVyZSBpcyBkaXNw bGF5ZWQuIiksCisJCQkgICAgTlVMTCwgc2hvd19yZWNvcmRfZGVidWcsICZz ZXRkZWJ1Z2xpc3QsCisJCQkgICAgJnNob3dkZWJ1Z2xpc3QpOworCisgIGFk ZF9jb20gKCJyZWNvcmQiLCBjbGFzc19vYnNjdXJlLCBjbWRfcmVjb3JkX3N0 YXJ0LAorCSAgIF8oIkFiYnJldmlhdGVkIGZvcm0gb2YgXCJ0YXJnZXQgcmVj b3JkXCIgY29tbWFuZC4iKSk7CisKKyAgYWRkX2NvbV9hbGlhcyAoInJlYyIs ICJyZWNvcmQiLCBjbGFzc19vYnNjdXJlLCAxKTsKKworICAvKiBYWFg6IEkg dHJ5IHRvIHVzZSBzb21lIHNpbXBsZSBjb21tYW5kcyBzdWNoIGFzICJkaXNj b25uZWN0IiBhbmQKKyAgICAgImRldGFjaCIgdG8gc3VwcG9ydCB0aGlzIGZ1 bmN0aW9ucy4gIEJ1dCB0aGVzZSBjb21tYW5kcyBhbGwgaGF2ZQorICAgICBv dGhlciBhZmZlY3QgdG8gR0RCIHN1Y2ggYXMgY2FsbCBmdW5jdGlvbiAibm9f c2hhcmVkX2xpYnJhcmllcyIuCisgICAgIFNvIEkgYWRkIHNwZWNpYWwgY29t bWFuZHMgdG8gR0RCLiAgKi8KKyAgYWRkX2NvbSAoImRlbHJlY29yZCIsIGNs YXNzX29ic2N1cmUsIGNtZF9yZWNvcmRfZGVsZXRlLAorCSAgIF8oIkRlbGV0 ZSB0aGUgcmVzdCBvZiBleGVjdXRpb24gbG9nIGFuZCBzdGFydCByZWNvcmRp bmcgaXQgYW5ldy4iKSk7CisgIGFkZF9jb21fYWxpYXMgKCJkciIsICJkZWxy ZWNvcmQiLCBjbGFzc19vYnNjdXJlLCAxKTsKKyAgYWRkX2NvbSAoInN0b3By ZWNvcmQiLCBjbGFzc19vYnNjdXJlLCBjbWRfcmVjb3JkX3N0b3AsCisJICAg XygiU3RvcCB0aGUgcmVjb3JkL3JlcGxheSB0YXJnZXQuIikpOworICBhZGRf Y29tX2FsaWFzICgic3IiLCAic3RvcHJlY29yZCIsIGNsYXNzX29ic2N1cmUs IDEpOworCisgIC8qIFJlY29yZCBpbnN0cnVjdGlvbnMgbnVtYmVyIGxpbWl0 IGNvbW1hbmQuICAqLworICBhZGRfc2V0c2hvd19ib29sZWFuX2NtZCAoInJl Y29yZC1zdG9wLWF0LWxpbWl0Iiwgbm9fY2xhc3MsCisJCQkgICAgJnJlY29y ZF9zdG9wX2F0X2xpbWl0LAorCQkJICAgIF8oIlNldCB3aGV0aGVyIHJlY29y ZC9yZXBsYXkgc3RvcCB3aGVuICIKKwkJCSAgICAgICJyZWNvcmQvcmVwbGF5 IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuIiksCisJCQkgICAgXygiU2hvdyB3aGV0 aGVyIHJlY29yZC9yZXBsYXkgc3RvcCB3aGVuICIKKwkJCSAgICAgICJyZWNv cmQvcmVwbGF5IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuIiksCisJICAgICAgICAg ICAgICAgICAgICBfKCJFbmFibGUgaXMgZGVmYXVsdCB2YWx1ZS5cbiIKKwkg ICAgICAgICAgICAgICAgICAgICAgIldoZW4gZW5hYmxlZCwgaWYgdGhlIHJl Y29yZC9yZXBsYXkgYnVmZmVyICIKKwkJCSAgICAgICJiZWNvbWVzIGZ1bGws XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXNrIHVzZXIg d2hhdCB0byBkby5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJXaGVuIGRpc2FibGVkLCBpZiB0aGUgcmVjb3JkL3JlcGxheSBidWZmZXIg IgorCQkJICAgICAgImJlY29tZXMgZnVsbCxcbiIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJkZWxldGUgaXQgYW5kIHN0YXJ0IG5ldyByZWNv cmRpbmcuIiksCisJCQkgICAgTlVMTCwgTlVMTCwgJnNldGxpc3QsICZzaG93 bGlzdCk7CisgIGFkZF9zZXRzaG93X3ppbnRlZ2VyX2NtZCAoInJlY29yZC1p bnNuLW51bWJlci1tYXgiLCBub19jbGFzcywKKwkJCSAgICAmcmVjb3JkX2lu c25fbWF4X251bSwKKwkJCSAgICBfKCJTZXQgcmVjb3JkL3JlcGxheSBidWZm ZXIgbGltaXQuIiksCisJCQkgICAgXygiU2hvdyByZWNvcmQvcmVwbGF5IGJ1 ZmZlciBsaW1pdC4iKSwKKwkJCSAgICBfKCJTZXQgdGhlIG1heGltdW0gbnVt YmVyIG9mIGluc3RydWN0aW9ucyB0byBiZSAiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAic3RvcmVkIGluIHRoZVxuIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgInJlY29yZC9yZXBsYXkgYnVmZmVyLiAgIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlplcm8gbWVhbnMgdW5s aW1pdGVkIChkZWZhdWx0IDIwMDAwMCkuIiksCisJCQkgICAgc2V0X3JlY29y ZF9pbnNuX21heF9udW0sCisJCQkgICAgTlVMTCwgJnNldGxpc3QsICZzaG93 bGlzdCk7CisgIGFkZF9pbmZvICgicmVjb3JkLWluc24tbnVtYmVyIiwgc2hv d19yZWNvcmRfaW5zbl9udW1iZXIsCisJICAgIF8oIlNob3cgdGhlIGN1cnJl bnQgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBpbiB0aGUgIgorCSAgICAgICJy ZWNvcmQvcmVwbGF5IGJ1ZmZlci4iKSk7Cit9Ci0tLSAvZGV2L251bGwKKysr IGIvcmVjb3JkLmgKQEAgLTAsMCArMSw3NCBAQAorLyogUHJvY2VzcyByZWNv cmQgYW5kIHJlcGxheSB0YXJnZXQgZm9yIEdEQiwgdGhlIEdOVSBkZWJ1Z2dl ci4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBv ZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5k ZWYgX1JFQ09SRF9IXworI2RlZmluZSBfUkVDT1JEX0hfCisKK3R5cGVkZWYg c3RydWN0IHJlY29yZF9yZWdfcworeworICBpbnQgbnVtOworICBnZGJfYnl0 ZSAqdmFsOworfSByZWNvcmRfcmVnX3Q7CisKK3R5cGVkZWYgc3RydWN0IHJl Y29yZF9tZW1fcworeworICBDT1JFX0FERFIgYWRkcjsKKyAgaW50IGxlbjsK KyAgZ2RiX2J5dGUgKnZhbDsKK30gcmVjb3JkX21lbV90OworCitlbnVtIHJl Y29yZF90eXBlCit7CisgIHJlY29yZF9lbmQgPSAwLAorICByZWNvcmRfcmVn LAorICByZWNvcmRfbWVtCit9OworCisvKiBUaGlzIGlzIHRoZSBjb3JlIHN0 cnVjdCBvZiByZWNvcmQgZnVuY3Rpb24uCisKKyAgIEFuIGVudGl0eSBvZiBy ZWNvcmRfdCBpcyBhIHJlY29yZCBvZiB0aGUgdmFsdWUgY2hhbmdlIG9mIGEg cmVnaXN0ZXIKKyAgICgicmVjb3JkX3JlZyIpIG9yIGEgcGFydCBvZiBtZW1v cnkgKCJyZWNvcmRfbWVtIikuICBBbmQgZWFjaAorICAgaW5zdHJ1Y3Rpb24g bXVzdCBoYXMgYSByZWNvcmRfdCAoInJlY29yZF9lbmQiKSB0aGF0IHBvaW50 cyBvdXQgdGhpcworICAgaXMgdGhlIGxhc3QgcmVjb3JkX3Qgb2YgdGhpcyBp bnN0cnVjdGlvbi4KKworICAgRWFjaCByZWNvcmRfdCBpcyBsaW5rZWQgdG8g InJlY29yZF9saXN0IiBieSAicHJldiIgYW5kICJuZXh0Ii4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcmVjb3JkX3MKK3sKKyAgc3RydWN0IHJlY29yZF9zICpw cmV2OworICBzdHJ1Y3QgcmVjb3JkX3MgKm5leHQ7CisgIGVudW0gcmVjb3Jk X3R5cGUgdHlwZTsKKyAgdW5pb24KKyAgeworICAgIC8qIHJlZyAqLworICAg IHJlY29yZF9yZWdfdCByZWc7CisgICAgLyogbWVtICovCisgICAgcmVjb3Jk X21lbV90IG1lbTsKKyAgfSB1OworfSByZWNvcmRfdDsKKworZXh0ZXJuIGlu dCByZWNvcmRfZGVidWc7CitleHRlcm4gc3RydWN0IHJlZ2NhY2hlICpyZWNv cmRfcmVnY2FjaGU7CisKK2V4dGVybiBpbnQgcmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChpbnQgbnVtKTsKK2V4dGVybiBpbnQgcmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtIChDT1JFX0FERFIgYWRkciwgaW50IGxlbik7CitleHRlcm4g aW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX2VuZCAodm9pZCk7CitleHRlcm4g c3RydWN0IGNsZWFudXAgKiByZWNvcmRfZ2RiX29wZXJhdGlvbl9kaXNhYmxl X3NldCAodm9pZCk7CisKKyNlbmRpZiAvKiBfUkVDT1JEX0hfICovCg== --001485f49848d6304d0465a323d6--