From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dmitry Antipov Newsgroups: gmane.emacs.devel Subject: Re: check_window_system Date: Sat, 06 Apr 2013 14:13:16 +0400 Message-ID: <515FF53C.8050108@yandex.ru> References: <83zjxddp38.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010005070208090701060401" X-Trace: ger.gmane.org 1365278483 27751 80.91.229.3 (6 Apr 2013 20:01:23 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 6 Apr 2013 20:01:23 +0000 (UTC) Cc: Eli Zaretskii , emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat Apr 06 22:01:19 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UOZIN-0007UX-PZ for ged-emacs-devel@m.gmane.org; Sat, 06 Apr 2013 22:01:04 +0200 Original-Received: from localhost ([::1]:39402 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UOQ7w-0003Fh-AS for ged-emacs-devel@m.gmane.org; Sat, 06 Apr 2013 06:13:40 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:53965) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UOQ7o-0003F9-Sr for emacs-devel@gnu.org; Sat, 06 Apr 2013 06:13:36 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UOQ7j-0002E7-TJ for emacs-devel@gnu.org; Sat, 06 Apr 2013 06:13:32 -0400 Original-Received: from forward11.mail.yandex.net ([95.108.130.93]:35703) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UOQ7d-0002Ak-HA; Sat, 06 Apr 2013 06:13:22 -0400 Original-Received: from smtp14.mail.yandex.net (smtp14.mail.yandex.net [95.108.131.192]) by forward11.mail.yandex.net (Yandex) with ESMTP id 43FC8E8110D; Sat, 6 Apr 2013 14:13:17 +0400 (MSK) Original-Received: from smtp14.mail.yandex.net (localhost [127.0.0.1]) by smtp14.mail.yandex.net (Yandex) with ESMTP id 007201B60391; Sat, 6 Apr 2013 14:13:16 +0400 (MSK) Original-Received: from unknown (unknown [37.139.80.10]) by smtp14.mail.yandex.net (nwsmtp/Yandex) with ESMTP id CHALbEZxJx-DGv0ptot; Sat, 6 Apr 2013 14:13:16 +0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1365243196; bh=VzapO5lGT5EeEPq7QAcnCBU7ROigYyEt/JezTxTd8qI=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:CC:Subject: References:In-Reply-To:Content-Type; b=VSU1uQcsZAQig2rQhDhSgxDbZ7sI9Yg5iQLvcBXZlZYoMk0GFCpInlU3VU32zlEOq YEg1uYEvlJoGb7ZbwGaK+/PmBd//z02weq3m+sIHjB94FakTfU7nBe/tgxeNppBmx6 itmIjCEGaNXhIqqtudii46VFVmCzyUf0XxCFmFG8= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130328 Thunderbird/17.0.5 In-Reply-To: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] [fuzzy] X-Received-From: 95.108.130.93 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:158702 Archived-At: This is a multi-part message in MIME format. --------------010005070208090701060401 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 04/05/2013 07:21 PM, Stefan Monnier wrote: >> Thus, after the changes above, we have 4 different implementations of >> the same function check_window_system, which means it would be > [...] >> etc., you get the idea. IOW, there should be no assumption that X, >> NS, and w32 are mutually exclusive. > > Right: 4 implementations of the same function is a problem in itself > (we have this problem in several places in Emacs, but we should try to > get rid of them, rather than add more). OK. It looks like that we can also try to drop have_menus_p, check_x_frame, check_ns_frame plus (x|w32)_in_use. This looks good enough for X and TTY; I'm willing to add some comments, commit and get my portion of blame for broken W32 and NS ports :-). Dmitry --------------010005070208090701060401 Content-Type: text/plain; charset=UTF-8; name="window_system_stuff.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="window_system_stuff.patch" PT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9maWxlaW8uYycKLS0tIHNyYy9maWxlaW8uYwkyMDEz LTA0LTAyIDAxOjU0OjU2ICswMDAwCisrKyBzcmMvZmlsZWlvLmMJMjAxMy0wNC0wNiAwNTo1 NDo0MiArMDAwMApAQCAtNTgxNiw3ICs1ODE2LDcgQEAKICAgaWYgKChOSUxQIChsYXN0X25v bm1lbnVfZXZlbnQpIHx8IENPTlNQIChsYXN0X25vbm1lbnVfZXZlbnQpKQogICAgICAgJiYg dXNlX2RpYWxvZ19ib3gKICAgICAgICYmIHVzZV9maWxlX2RpYWxvZwotICAgICAgJiYgaGF2 ZV9tZW51c19wICgpKQorICAgICAgJiYgd2luZG93X3N5c3RlbV9hdmFpbGFibGUgKFNFTEVD VEVEX0ZSQU1FICgpKSkKICAgICByZXR1cm4gUXQ7CiAjZW5kaWYKICAgcmV0dXJuIFFuaWw7 Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Zucy5jJwotLS0gc3JjL2Zucy5jCTIwMTMtMDQt MDIgMDE6NTQ6NTYgKzAwMDAKKysrIHNyYy9mbnMuYwkyMDEzLTA0LTA2IDA1OjU0OjQyICsw MDAwCkBAIC0yNDQzLDEwICsyNDQzLDkgQEAKICAgQ0hFQ0tfU1RSSU5HIChwcm9tcHQpOwog CiAjaWZkZWYgSEFWRV9NRU5VUwotICBpZiAoRlJBTUVfV0lORE9XX1AgKFNFTEVDVEVEX0ZS QU1FICgpKQotICAgICAgJiYgKE5JTFAgKGxhc3Rfbm9ubWVudV9ldmVudCkgfHwgQ09OU1Ag KGxhc3Rfbm9ubWVudV9ldmVudCkpCisgIGlmICgoTklMUCAobGFzdF9ub25tZW51X2V2ZW50 KSB8fCBDT05TUCAobGFzdF9ub25tZW51X2V2ZW50KSkKICAgICAgICYmIHVzZV9kaWFsb2df Ym94Ci0gICAgICAmJiBoYXZlX21lbnVzX3AgKCkpCisgICAgICAmJiB3aW5kb3dfc3lzdGVt X2F2YWlsYWJsZSAoU0VMRUNURURfRlJBTUUgKCkpKQogICAgIHsKICAgICAgIExpc3BfT2Jq ZWN0IHBhbmUsIG1lbnUsIG9iajsKICAgICAgIHJlZGlzcGxheV9wcmVzZXJ2ZV9lY2hvX2Fy ZWEgKDQpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9mb250LmMnCi0tLSBzcmMvZm9udC5j CTIwMTMtMDQtMDUgMTQ6MDc6MDIgKzAwMDAKKysrIHNyYy9mb250LmMJMjAxMy0wNC0wNiAw NjowMzowNCArMDAwMApAQCAtNDg0NCwxMSArNDg0NCw5IEBACiAgIExpc3BfT2JqZWN0IGlu Zm87CiAgIExpc3BfT2JqZWN0IGZvbnRfb2JqZWN0OwogCi0gIGNoZWNrX3dpbmRvd19zeXN0 ZW0gKCk7Ci0KICAgaWYgKCEgRk9OVFAgKG5hbWUpKQogICAgIENIRUNLX1NUUklORyAobmFt ZSk7Ci0gIGYgPSBkZWNvZGVfbGl2ZV9mcmFtZSAoZnJhbWUpOworICBmID0gZGVjb2RlX3dp bmRvd19zeXN0ZW1fZnJhbWUgKGZyYW1lKTsKIAogICBpZiAoU1RSSU5HUCAobmFtZSkpCiAg ICAgewoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9mb250c2V0LmMnCi0tLSBzcmMvZm9udHNl dC5jCTIwMTMtMDQtMDUgMTQ6MDc6MDIgKzAwMDAKKysrIHNyYy9mb250c2V0LmMJMjAxMy0w NC0wNiAwOTo1Nzo0NSArMDAwMApAQCAtMTIwOSw3ICsxMjA5LDcgQEAKICAgTGlzcF9PYmpl Y3QgZm9udHNldDsKICAgaW50IGlkOwogCi0gIGNoZWNrX3dpbmRvd19zeXN0ZW0gKCk7Cisg IGNoZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwpOwogCiAgIENIRUNLX1NUUklORyAocGF0dGVy bik7CiAKQEAgLTE5MTUsOCArMTkxNSw3IEBACiAgIExpc3BfT2JqZWN0IHZhbCwgZWx0Owog ICBpbnQgYywgaSwgaiwgazsKIAotICBjaGVja193aW5kb3dfc3lzdGVtICgpOwotCisgIGNo ZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwpOwogICBmb250c2V0ID0gY2hlY2tfZm9udHNldF9u YW1lIChmb250c2V0LCAmZnJhbWUpOwogCiAgIC8qIFJlY29kZSBmb250c2V0cyByZWFsaXpl ZCBvbiBGUkFNRSBmcm9tIHRoZSBiYXNlIGZvbnRzZXQgRk9OVFNFVAoKPT09IG1vZGlmaWVk IGZpbGUgJ3NyYy9mcmFtZS5jJwotLS0gc3JjL2ZyYW1lLmMJMjAxMy0wNC0wNSAxNDowNzow MiArMDAwMAorKysgc3JjL2ZyYW1lLmMJMjAxMy0wNC0wNiAwNTo1NDo0MiArMDAwMApAQCAt MTQ5LDYgKzE0OSwzNiBAQAogICByZXR1cm4gWEZSQU1FIChmcmFtZSk7CiB9CiAKK2Jvb2wK K3dpbmRvd19zeXN0ZW1fYXZhaWxhYmxlIChzdHJ1Y3QgZnJhbWUgKmYpCit7CisgIGlmIChm KQorICAgIHJldHVybiBGUkFNRV9XSU5ET1dfUCAoZikgfHwgRlJBTUVfTVNET1NfUCAoZik7 CisgIGVsc2UKKyNpZmRlZiBIQVZFX1dJTkRPV19TWVNURU0KKyAgICByZXR1cm4geF9kaXNw bGF5X2xpc3QgIT0gTlVMTDsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwor c3RydWN0IGZyYW1lICoKK2RlY29kZV93aW5kb3dfc3lzdGVtX2ZyYW1lIChMaXNwX09iamVj dCBmcmFtZSkKK3sKKyAgc3RydWN0IGZyYW1lICpmID0gZGVjb2RlX2xpdmVfZnJhbWUgKGZy YW1lKTsKKyAgCisgIGlmICghd2luZG93X3N5c3RlbV9hdmFpbGFibGUgKGYpKQorICAgIGVy cm9yICgiV2luZG93IHN5c3RlbSBmcmFtZSBzaG91bGQgYmUgdXNlZCIpOworICByZXR1cm4g ZjsKK30KKwordm9pZAorY2hlY2tfd2luZG93X3N5c3RlbSAoc3RydWN0IGZyYW1lICpmKQor eworICBpZiAoIXdpbmRvd19zeXN0ZW1fYXZhaWxhYmxlIChmKSkKKyAgICBlcnJvciAoIldp bmRvdyBzeXN0ZW0gaXMgbm90IGluIHVzZSBvciBub3QgaW5pdGlhbGl6ZWQiKTsKK30KKwog c3RhdGljIHZvaWQKIHNldF9tZW51X2Jhcl9saW5lc18xIChMaXNwX09iamVjdCB3aW5kb3cs IGludCBuKQogewpAQCAtMzQ5Myw3ICszNTIzLDcgQEAKICAgKExpc3BfT2JqZWN0IGF0dHJp YnV0ZSwgTGlzcF9PYmplY3QgY2xhc3MsIExpc3BfT2JqZWN0IGNvbXBvbmVudCwKICAgIExp c3BfT2JqZWN0IHN1YmNsYXNzKQogewotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBj aGVja193aW5kb3dfc3lzdGVtIChOVUxMKTsKIAogICByZXR1cm4geHJkYl9nZXRfcmVzb3Vy Y2UgKGNoZWNrX3hfZGlzcGxheV9pbmZvIChRbmlsKS0+eHJkYiwKIAkJCSAgICBhdHRyaWJ1 dGUsIGNsYXNzLCBjb21wb25lbnQsIHN1YmNsYXNzKTsKCj09PSBtb2RpZmllZCBmaWxlICdz cmMvZnJhbWUuaCcKLS0tIHNyYy9mcmFtZS5oCTIwMTMtMDMtMzEgMDU6NDU6NTQgKzAwMDAK KysrIHNyYy9mcmFtZS5oCTIwMTMtMDQtMDYgMDU6NTU6MjcgKzAwMDAKQEAgLTk1OCw2ICs5 NTgsNyBAQAogZXh0ZXJuIHN0cnVjdCBmcmFtZSAqbGFzdF9ub25taW5pYnVmX2ZyYW1lOwog CiBleHRlcm4gdm9pZCBzZXRfbWVudV9iYXJfbGluZXMgKHN0cnVjdCBmcmFtZSAqLCBMaXNw X09iamVjdCwgTGlzcF9PYmplY3QpOworZXh0ZXJuIHN0cnVjdCBmcmFtZSAqZGVjb2RlX3dp bmRvd19zeXN0ZW1fZnJhbWUgKExpc3BfT2JqZWN0KTsKIGV4dGVybiBzdHJ1Y3QgZnJhbWUg KmRlY29kZV9saXZlX2ZyYW1lIChMaXNwX09iamVjdCk7CiBleHRlcm4gc3RydWN0IGZyYW1l ICpkZWNvZGVfYW55X2ZyYW1lIChMaXNwX09iamVjdCk7CiBleHRlcm4gc3RydWN0IGZyYW1l ICptYWtlX2luaXRpYWxfZnJhbWUgKHZvaWQpOwpAQCAtOTY4LDYgKzk2OSw4IEBACiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGtib2FyZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExpc3BfT2JqZWN0KTsKICNlbmRpZiAvKiBIQVZFX1dJTkRPV19TWVNURU0g Ki8KK2V4dGVybiBib29sIHdpbmRvd19zeXN0ZW1fYXZhaWxhYmxlIChzdHJ1Y3QgZnJhbWUg Kik7CitleHRlcm4gdm9pZCBjaGVja193aW5kb3dfc3lzdGVtIChzdHJ1Y3QgZnJhbWUgKik7 CiBleHRlcm4gdm9pZCBmcmFtZV9tYWtlX3BvaW50ZXJfaW52aXNpYmxlICh2b2lkKTsKIGV4 dGVybiB2b2lkIGZyYW1lX21ha2VfcG9pbnRlcl92aXNpYmxlICh2b2lkKTsKIGV4dGVybiBM aXNwX09iamVjdCBkZWxldGVfZnJhbWUgKExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCk7Cgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2ltYWdlLmMnCi0tLSBzcmMvaW1hZ2UuYwkyMDEzLTAz LTI4IDA2OjQwOjAxICswMDAwCisrKyBzcmMvaW1hZ2UuYwkyMDEzLTA0LTA2IDA1OjU0OjQz ICswMDAwCkBAIC04ODksNyArODg5LDcgQEAKICAgc2l6ZSA9IFFuaWw7CiAgIGlmICh2YWxp ZF9pbWFnZV9wIChzcGVjKSkKICAgICB7Ci0gICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBjaGVj a194X2ZyYW1lIChmcmFtZSk7CisgICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBkZWNvZGVfd2lu ZG93X3N5c3RlbV9mcmFtZSAoZnJhbWUpOwogICAgICAgcHRyZGlmZl90IGlkID0gbG9va3Vw X2ltYWdlIChmLCBzcGVjKTsKICAgICAgIHN0cnVjdCBpbWFnZSAqaW1nID0gSU1BR0VfRlJP TV9JRCAoZiwgaWQpOwogICAgICAgaW50IHdpZHRoID0gaW1nLT53aWR0aCArIDIgKiBpbWct PmhtYXJnaW47CkBAIC05MTksNyArOTE5LDcgQEAKICAgbWFzayA9IFFuaWw7CiAgIGlmICh2 YWxpZF9pbWFnZV9wIChzcGVjKSkKICAgICB7Ci0gICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBj aGVja194X2ZyYW1lIChmcmFtZSk7CisgICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBkZWNvZGVf d2luZG93X3N5c3RlbV9mcmFtZSAoZnJhbWUpOwogICAgICAgcHRyZGlmZl90IGlkID0gbG9v a3VwX2ltYWdlIChmLCBzcGVjKTsKICAgICAgIHN0cnVjdCBpbWFnZSAqaW1nID0gSU1BR0Vf RlJPTV9JRCAoZiwgaWQpOwogICAgICAgaWYgKGltZy0+bWFzaykKQEAgLTk0Miw3ICs5NDIs NyBAQAogICBleHQgPSBRbmlsOwogICBpZiAodmFsaWRfaW1hZ2VfcCAoc3BlYykpCiAgICAg ewotICAgICAgc3RydWN0IGZyYW1lICpmID0gY2hlY2tfeF9mcmFtZSAoZnJhbWUpOworICAg ICAgc3RydWN0IGZyYW1lICpmID0gZGVjb2RlX3dpbmRvd19zeXN0ZW1fZnJhbWUgKGZyYW1l KTsKICAgICAgIHB0cmRpZmZfdCBpZCA9IGxvb2t1cF9pbWFnZSAoZiwgc3BlYyk7CiAgICAg ICBzdHJ1Y3QgaW1hZ2UgKmltZyA9IElNQUdFX0ZST01fSUQgKGYsIGlkKTsKICAgICAgIGV4 dCA9IGltZy0+bGlzcF9kYXRhOwpAQCAtMTU1MCw3ICsxNTUwLDcgQEAKICAgaWYgKCEoRVEg KGZpbHRlciwgUW5pbCkgfHwgRlJBTUVQIChmaWx0ZXIpKSkKICAgICBjbGVhcl9pbWFnZV9j YWNoZXMgKGZpbHRlcik7CiAgIGVsc2UKLSAgICBjbGVhcl9pbWFnZV9jYWNoZSAoY2hlY2tf eF9mcmFtZSAoZmlsdGVyKSwgUXQpOworICAgIGNsZWFyX2ltYWdlX2NhY2hlIChkZWNvZGVf d2luZG93X3N5c3RlbV9mcmFtZSAoZmlsdGVyKSwgUXQpOwogCiAgIHJldHVybiBRbmlsOwog fQpAQCAtMTU4MSw3ICsxNTgxLDcgQEAKIAl9CiAgICAgfQogICBlbHNlCi0gICAgdW5jYWNo ZV9pbWFnZSAoY2hlY2tfeF9mcmFtZSAoZnJhbWUpLCBzcGVjKTsKKyAgICB1bmNhY2hlX2lt YWdlIChkZWNvZGVfd2luZG93X3N5c3RlbV9mcmFtZSAoZnJhbWUpLCBzcGVjKTsKIAogICBy ZXR1cm4gUW5pbDsKIH0KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvbGlzcC5oJwotLS0gc3Jj L2xpc3AuaAkyMDEzLTA0LTA1IDE0OjA3OjAyICswMDAwCisrKyBzcmMvbGlzcC5oCTIwMTMt MDQtMDYgMDU6MTI6MTcgKzAwMDAKQEAgLTM3NjUsMjIgKzM3NjUsMTIgQEAKIGV4dGVybiBj aGFyICp4X2dldF9rZXlzeW1fbmFtZSAoaW50KTsKICNlbmRpZiAvKiBIQVZFX1dJTkRPV19T WVNURU0gKi8KIAotI2lmIGRlZmluZWQoSEFWRV9XSU5ET1dfU1lTVEVNKSB8fCBkZWZpbmVk IChNU0RPUykKLS8qIERlZmluZWQgaW4gKHh8dzMyKWZucy5jLCBuc2Zucy5tLCBtc2Rvcy5j LiAgKi8KLWV4dGVybiB2b2lkIGNoZWNrX3dpbmRvd19zeXN0ZW0gKHZvaWQpOwotI2VuZGlm Ci0KICNpZmRlZiBIQVZFX0xJQlhNTDIKIC8qIERlZmluZWQgaW4geG1sLmMuICAqLwogZXh0 ZXJuIHZvaWQgc3ltc19vZl94bWwgKHZvaWQpOwogZXh0ZXJuIHZvaWQgeG1sX2NsZWFudXBf cGFyc2VyICh2b2lkKTsKICNlbmRpZgogCi0jaWZkZWYgSEFWRV9NRU5VUwotLyogRGVmaW5l ZCBpbiAoeHx3MzIpZm5zLmMsIG5zZm5zLm0sIG1zZG9zLmMuICAqLwotZXh0ZXJuIGludCBo YXZlX21lbnVzX3AgKHZvaWQpOwotI2VuZGlmCi0KICNpZmRlZiBIQVZFX0RCVVMKIC8qIERl ZmluZWQgaW4gZGJ1c2JpbmQuYy4gICovCiB2b2lkIHN5bXNfb2ZfZGJ1c2JpbmQgKHZvaWQp OwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9tZW51LmMnCi0tLSBzcmMvbWVudS5jCTIwMTMt MDQtMDUgMTQ6MDc6MDIgKzAwMDAKKysrIHNyYy9tZW51LmMJMjAxMy0wNC0wNiAwNTo1NDo0 MyArMDAwMApAQCAtMTA4Niw3ICsxMDg2LDcgQEAKICAgewogICAgIGJvb2wgZ2V0X2N1cnJl bnRfcG9zX3AgPSAwOwogCi0gICAgY2hlY2tfd2luZG93X3N5c3RlbSAoKTsKKyAgICBjaGVj a193aW5kb3dfc3lzdGVtIChTRUxFQ1RFRF9GUkFNRSAoKSk7CiAKICAgICAvKiBEZWNvZGUg dGhlIGZpcnN0IGFyZ3VtZW50OiBmaW5kIHRoZSB3aW5kb3cgYW5kIHRoZSBjb29yZGluYXRl cy4gICovCiAgICAgaWYgKEVRIChwb3NpdGlvbiwgUXQpCgo9PT0gbW9kaWZpZWQgZmlsZSAn c3JjL21zZG9zLmMnCi0tLSBzcmMvbXNkb3MuYwkyMDEzLTA0LTA1IDE0OjA3OjAyICswMDAw CisrKyBzcmMvbXNkb3MuYwkyMDEzLTA0LTA2IDA2OjA5OjAzICswMDAwCkBAIC0yOTgzLDEx ICsyOTgzLDYgQEAKIAwKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBYIE1lbnUg ZW11bGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogUmVwb3J0IGF2YWls YWJpbGl0eSBvZiBtZW51cy4gICovCi0KLWludAotaGF2ZV9tZW51c19wICh2b2lkKSB7ICBy ZXR1cm4gMTsgfQotCiAvKiBDcmVhdGUgYSBicmFuZCBuZXcgbWVudSBzdHJ1Y3R1cmUuICAq LwogCiBYTWVudSAqCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL25zZm5zLm0nCi0tLSBzcmMv bnNmbnMubQkyMDEzLTA0LTA1IDE0OjA3OjAyICswMDAwCisrKyBzcmMvbnNmbnMubQkyMDEz LTA0LTA2IDA5OjM2OjM1ICswMDAwCkBAIC0xMDcsNDMgKzEwNyw2IEBACiAKICAgID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ICovCiAKLQotdm9pZAotY2hlY2tfd2luZG93X3N5c3RlbSAodm9p ZCkKLXsKLSBpZiAoTlNBcHAgPT0gbmlsKQotICAgZXJyb3IgKCJPcGVuU3RlcCBpcyBub3Qg aW4gdXNlIG9yIG5vdCBpbml0aWFsaXplZCIpOwotfQotCi0KLS8qIE5vbnplcm8gaWYgd2Ug Y2FuIHVzZSBtb3VzZSBtZW51cy4gKi8KLWludAotaGF2ZV9tZW51c19wICh2b2lkKQotewot ICByZXR1cm4gTlNBcHAgIT0gbmlsOwotfQotCi0KLS8qIEV4dHJhY3QgYSBmcmFtZSBhcyBh IEZSQU1FX1BUUiwgZGVmYXVsdGluZyB0byB0aGUgc2VsZWN0ZWQgZnJhbWUKLSAgIGFuZCBj aGVja2luZyB2YWxpZGl0eSBmb3IgTlMuICAqLwotc3RhdGljIEZSQU1FX1BUUgotY2hlY2tf bnNfZnJhbWUgKExpc3BfT2JqZWN0IGZyYW1lKQotewotICBGUkFNRV9QVFIgZjsKLQotICBp ZiAoTklMUCAoZnJhbWUpKQotICAgICAgZiA9IFNFTEVDVEVEX0ZSQU1FICgpOwotICBlbHNl Ci0gICAgewotICAgICAgQ0hFQ0tfTElWRV9GUkFNRSAoZnJhbWUpOwotICAgICAgZiA9IFhG UkFNRSAoZnJhbWUpOwotICAgIH0KLSAgaWYgKCEgRlJBTUVfTlNfUCAoZikpCi0gICAgZXJy b3IgKCJub24tTmV4dHN0ZXAgZnJhbWUgdXNlZCIpOwotICByZXR1cm4gZjsKLX0KLQotCiAv KiBMZXQgdGhlIHVzZXIgc3BlY2lmeSBhbiBOZXh0c3RlcCBkaXNwbGF5IHdpdGggYSBmcmFt ZS4KICAgIG5pbCBzdGFuZHMgZm9yIHRoZSBzZWxlY3RlZCBmcmFtZS0tb3IsIGlmIHRoYXQg aXMgbm90IGFuIE5leHRzdGVwIGZyYW1lLAogICAgdGhlIGZpcnN0IE5leHRzdGVwIGRpc3Bs YXkgb24gdGhlIGxpc3QuICAqLwpAQCAtMTE0NSw4ICsxMTA4LDYgQEAKICAgTGlzcF9PYmpl Y3QgdGZvbnQsIHRmb250c2l6ZTsKICAgc3RhdGljIGludCBkZXNjX2N0ciA9IDE7CiAKLSAg Y2hlY2tfd2luZG93X3N5c3RlbSAoKTsKLQogICAvKiB4X2dldF9hcmcgbW9kaWZpZXMgcGFy bXMuICAqLwogICBwYXJtcyA9IEZjb3B5X2FsaXN0IChwYXJtcyk7CiAKQEAgLTE0MTgsNyAr MTM3OSw3IEBACiBGUkFNRSBuaWwgbWVhbnMgdXNlIHRoZSBzZWxlY3RlZCBmcmFtZS4gICov KQogICAgICAoTGlzcF9PYmplY3QgZnJhbWUpCiB7Ci0gIHN0cnVjdCBmcmFtZSAqZiA9IGNo ZWNrX25zX2ZyYW1lIChmcmFtZSk7CisgIHN0cnVjdCBmcmFtZSAqZiA9IGRlY29kZV93aW5k b3dfc3lzdGVtX2ZyYW1lIChmcmFtZSk7CiAgIHN0cnVjdCBuc19kaXNwbGF5X2luZm8gKmRw eWluZm8gPSBGUkFNRV9OU19ESVNQTEFZX0lORk8gKGYpOwogCiAgIGlmIChkcHlpbmZvLT54 X2ZvY3VzX2ZyYW1lICE9IGYpCkBAIC0xNDM5LDE4ICsxNDAwLDggQEAKICAgICAgICBkb2M6 IC8qIFBvcCB1cCB0aGUgZm9udCBwYW5lbC4gKi8pCiAgICAgIChMaXNwX09iamVjdCBmcmFt ZSkKIHsKLSAgaWQgZm07Ci0gIHN0cnVjdCBmcmFtZSAqZjsKLQotICBjaGVja193aW5kb3df c3lzdGVtICgpOwotICBmbSA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsK LSAgaWYgKE5JTFAgKGZyYW1lKSkKLSAgICBmID0gU0VMRUNURURfRlJBTUUgKCk7Ci0gIGVs c2UKLSAgICB7Ci0gICAgICBDSEVDS19GUkFNRSAoZnJhbWUpOwotICAgICAgZiA9IFhGUkFN RSAoZnJhbWUpOwotICAgIH0KKyAgc3RydWN0IGZyYW1lICpmID0gZGVjb2RlX3dpbmRvd19z eXN0ZW1fZnJhbWUgKGZyYW1lKTsKKyAgaWQgZm0gPSBbTlNGb250TWFuYWdlciBzaGFyZWRG b250TWFuYWdlcl07CiAKICAgW2ZtIHNldFNlbGVjdGVkRm9udDogKChzdHJ1Y3QgbnNmb250 X2luZm8gKilmLT5vdXRwdXRfZGF0YS5ucy0+Zm9udCktPm5zZm9udAogICAgICAgICAgICBp c011bHRpcGxlOiBOT107CkBAIC0xNDY0LDE3ICsxNDE1LDcgQEAKICAgICAgICBkb2M6IC8q IFBvcCB1cCB0aGUgY29sb3IgcGFuZWwuICAqLykKICAgICAgKExpc3BfT2JqZWN0IGZyYW1l KQogewotICBzdHJ1Y3QgZnJhbWUgKmY7Ci0KLSAgY2hlY2tfd2luZG93X3N5c3RlbSAoKTsK LSAgaWYgKE5JTFAgKGZyYW1lKSkKLSAgICBmID0gU0VMRUNURURfRlJBTUUgKCk7Ci0gIGVs c2UKLSAgICB7Ci0gICAgICBDSEVDS19GUkFNRSAoZnJhbWUpOwotICAgICAgZiA9IFhGUkFN RSAoZnJhbWUpOwotICAgIH0KLQorICBjaGVja193aW5kb3dfc3lzdGVtIChOVUxMKTsKICAg W05TQXBwIG9yZGVyRnJvbnRDb2xvclBhbmVsOiBOU0FwcF07CiAgIHJldHVybiBRbmlsOwog fQpAQCAtMTUwMyw3ICsxNDQ0LDcgQEAKICAgTlNTdHJpbmcgKmluaXRTID0gTklMUCAoaW5p dCkgfHwgIVNUUklOR1AgKGluaXQpID8gbmlsIDoKICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0 aFVURjhTdHJpbmc6IFNTREFUQSAoaW5pdCldOwogCi0gIGNoZWNrX3dpbmRvd19zeXN0ZW0g KCk7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwpOwogCiAgIGlmIChmaWxlRGVsZWdh dGUgPT0gbmlsKQogICAgIGZpbGVEZWxlZ2F0ZSA9IFtFbWFjc0ZpbGVEZWxlZ2F0ZSBuZXdd OwpAQCAtMTU5NCwxMSArMTUzNSwxMCBAQAogewogICBjb25zdCBjaGFyICp2YWx1ZTsKIAot ICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVja193aW5kb3dfc3lzdGVtIChOVUxM KTsKICAgaWYgKE5JTFAgKG93bmVyKSkKICAgICBvd25lciA9IGJ1aWxkX3N0cmluZyhbbnNf YXBwX25hbWUgVVRGOFN0cmluZ10pOwogICBDSEVDS19TVFJJTkcgKG5hbWUpOwotLypmcHJp bnRmIChzdGRlcnIsICJucy1nZXQtcmVzb3VyY2UgY2hlY2tpbmcgcmVzb3VyY2UgJyVzJ1xu IiwgU1NEQVRBIChuYW1lKSk7ICovCiAKICAgdmFsdWUgPSBuc19nZXRfZGVmYXVsdHNfdmFs dWUgKFNTREFUQSAobmFtZSkpOwogCkBAIC0xNjE0LDcgKzE1NTQsNyBAQAogSWYgVkFMVUUg aXMgbmlsLCB0aGUgZGVmYXVsdCBpcyByZW1vdmVkLiAgKi8pCiAgICAgIChMaXNwX09iamVj dCBvd25lciwgTGlzcF9PYmplY3QgbmFtZSwgTGlzcF9PYmplY3QgdmFsdWUpCiB7Ci0gIGNo ZWNrX3dpbmRvd19zeXN0ZW0gKCk7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwpOwog ICBpZiAoTklMUCAob3duZXIpKQogICAgIG93bmVyID0gYnVpbGRfc3RyaW5nIChbbnNfYXBw X25hbWUgVVRGOFN0cmluZ10pOwogICBDSEVDS19TVFJJTkcgKG5hbWUpOwpAQCAtMTY0Miw3 ICsxNTgyLDcgQEAKICAgICAgICBkb2M6IC8qIFRoaXMgZnVuY3Rpb24gaXMgYSBuby1vcC4g IEl0IGlzIG9ubHkgcHJlc2VudCBmb3IgY29tcGxldGVuZXNzLiAgKi8pCiAgICAgIChMaXNw X09iamVjdCBkaXNwbGF5KQogewotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVj a19uc19kaXNwbGF5X2luZm8gKGRpc3BsYXkpOwogICAvKiBUaGlzIGZ1bmN0aW9uIGhhcyBu byByZWFsIGVxdWl2YWxlbnQgdW5kZXIgTmVYVHN0ZXAuICBSZXR1cm4gbmlsIHRvCiAgICAg IGluZGljYXRlIHRoaXMuICovCiAgIHJldHVybiBRbmlsOwpAQCAtMTY5Miw3ICsxNjMyLDcg QEAKIHsKICAgaW50IG51bTsKIAotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVj a19uc19kaXNwbGF5X2luZm8gKGRpc3BsYXkpOwogICBudW0gPSBbW05TU2NyZWVuIHNjcmVl bnNdIGNvdW50XTsKIAogICByZXR1cm4gKG51bSAhPSAwKSA/IG1ha2VfbnVtYmVyIChudW0p IDogUW5pbDsKQEAgLTE3MDYsNyArMTY0Niw3IEBACiBJZiBvbWl0dGVkIG9yIG5pbCwgdGhl IHNlbGVjdGVkIGZyYW1lJ3MgZGlzcGxheSBpcyB1c2VkLiAgKi8pCiAgICAgIChMaXNwX09i amVjdCBkaXNwbGF5KQogewotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVja19u c19kaXNwbGF5X2luZm8gKGRpc3BsYXkpOwogICByZXR1cm4gbWFrZV9udW1iZXIgKChpbnQp CiAgICAgICAgICAgICAgICAgICAgICAoW25zX2dldF9zY3JlZW4gKGRpc3BsYXkpIGZyYW1l XS5zaXplLmhlaWdodC8oOTIuMC8yNS40KSkpOwogfQpAQCAtMTcxOSw3ICsxNjU5LDcgQEAK IElmIG9taXR0ZWQgb3IgbmlsLCB0aGUgc2VsZWN0ZWQgZnJhbWUncyBkaXNwbGF5IGlzIHVz ZWQuICAqLykKICAgICAgKExpc3BfT2JqZWN0IGRpc3BsYXkpCiB7Ci0gIGNoZWNrX3dpbmRv d19zeXN0ZW0gKCk7CisgIGNoZWNrX25zX2Rpc3BsYXlfaW5mbyAoZGlzcGxheSk7CiAgIHJl dHVybiBtYWtlX251bWJlciAoKGludCkKICAgICAgICAgICAgICAgICAgICAgIChbbnNfZ2V0 X3NjcmVlbiAoZGlzcGxheSkgZnJhbWVdLnNpemUud2lkdGgvKDkyLjAvMjUuNCkpKTsKIH0K QEAgLTE3MzMsNyArMTY3Myw3IEBACiBJZiBvbWl0dGVkIG9yIG5pbCwgdGhlIHNlbGVjdGVk IGZyYW1lJ3MgZGlzcGxheSBpcyB1c2VkLiAgKi8pCiAgICAgIChMaXNwX09iamVjdCBkaXNw bGF5KQogewotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVja19uc19kaXNwbGF5 X2luZm8gKGRpc3BsYXkpOwogICBzd2l0Y2ggKFtuc19nZXRfd2luZG93IChkaXNwbGF5KSBi YWNraW5nVHlwZV0pCiAgICAgewogICAgIGNhc2UgTlNCYWNraW5nU3RvcmVCdWZmZXJlZDoK QEAgLTE3NTksNyArMTY5OSw4IEBACiAgICAgIChMaXNwX09iamVjdCBkaXNwbGF5KQogewog ICBOU1dpbmRvd0RlcHRoIGRlcHRoOwotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICAK KyAgY2hlY2tfbnNfZGlzcGxheV9pbmZvIChkaXNwbGF5KTsKICAgZGVwdGggPSBbbnNfZ2V0 X3NjcmVlbiAoZGlzcGxheSkgZGVwdGhdOwogCiAgIGlmICggZGVwdGggPT0gTlNCZXN0RGVw dGggKE5TQ2FsaWJyYXRlZFdoaXRlQ29sb3JTcGFjZSwgMiwgMiwgWUVTLCBOVUxMKSkKQEAg LTE3ODYsNyArMTcyNyw3IEBACiBJZiBvbWl0dGVkIG9yIG5pbCwgdGhlIHNlbGVjdGVkIGZy YW1lJ3MgZGlzcGxheSBpcyB1c2VkLiAgKi8pCiAgICAgIChMaXNwX09iamVjdCBkaXNwbGF5 KQogewotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVja19uc19kaXNwbGF5X2lu Zm8gKGRpc3BsYXkpOwogICBzd2l0Y2ggKFtuc19nZXRfd2luZG93IChkaXNwbGF5KSBiYWNr aW5nVHlwZV0pCiAgICAgewogICAgIGNhc2UgTlNCYWNraW5nU3RvcmVCdWZmZXJlZDoKQEAg LTE4MzYsMTEgKzE3NzcsMTAgQEAKIERFRlVOICgieC1jbG9zZS1jb25uZWN0aW9uIiwgRnhf Y2xvc2VfY29ubmVjdGlvbiwgU3hfY2xvc2VfY29ubmVjdGlvbiwKICAgICAgICAxLCAxLCAw LAogICAgICAgIGRvYzogLyogQ2xvc2UgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGN1cnJlbnQg TmV4dHN0ZXAgZGlzcGxheSBzZXJ2ZXIuCi1UaGUgYXJndW1lbnQgRElTUExBWSBpcyBjdXJy ZW50bHkgaWdub3JlZC4gICovKQorRElTUExBWSBzaG91bGQgYmUgYSBmcmFtZSwgdGhlIGRp c3BsYXkgbmFtZSBhcyBhIHN0cmluZywgb3IgYSB0ZXJtaW5hbCBJRC4gICovKQogICAgICAo TGlzcF9PYmplY3QgZGlzcGxheSkKIHsKLSAgY2hlY2tfd2luZG93X3N5c3RlbSAoKTsKLSAg Lypuc19kZWxldGVfdGVybWluYWwgKGRweWluZm8tPnRlcm1pbmFsKTsgKi8KKyAgY2hlY2tf bnNfZGlzcGxheV9pbmZvIChkaXNwbGF5KTsKICAgW05TQXBwIHRlcm1pbmF0ZTogTlNBcHBd OwogICByZXR1cm4gUW5pbDsKIH0KQEAgLTE4NjUsNyArMTgwNSw3IEBACiAgICAgICAgZG9j OiAvKiBIaWRlcyBhbGwgYXBwbGljYXRpb25zIG90aGVyIHRoYW4gRW1hY3MuICAqLykKICAg ICAgKHZvaWQpCiB7Ci0gIGNoZWNrX3dpbmRvd19zeXN0ZW0gKCk7CisgIGNoZWNrX3dpbmRv d19zeXN0ZW0gKE5VTEwpOwogICBbTlNBcHAgaGlkZU90aGVyQXBwbGljYXRpb25zOiBOU0Fw cF07CiAgIHJldHVybiBRbmlsOwogfQpAQCAtMTg3OCw3ICsxODE4LDcgQEAKIHRoZSBhY3Rp dmUgYXBwbGljYXRpb24uICAqLykKICAgICAgKExpc3BfT2JqZWN0IG9uKQogewotICBjaGVj a193aW5kb3dfc3lzdGVtICgpOworICBjaGVja193aW5kb3dfc3lzdGVtIChOVUxMKTsKICAg aWYgKEVRIChvbiwgaW50ZXJuICgiYWN0aXZhdGUiKSkpCiAgICAgewogICAgICAgW05TQXBw IHVuaGlkZTogTlNBcHBdOwpAQCAtMTg5Nyw3ICsxODM3LDcgQEAKICAgICAgICBkb2M6IC8q IFNob3dzIHRoZSAnSW5mbycgb3IgJ0Fib3V0JyBwYW5lbCBmb3IgRW1hY3MuICAqLykKICAg ICAgKHZvaWQpCiB7Ci0gIGNoZWNrX3dpbmRvd19zeXN0ZW0gKCk7CisgIGNoZWNrX3dpbmRv d19zeXN0ZW0gKE5VTEwpOwogICBbTlNBcHAgb3JkZXJGcm9udFN0YW5kYXJkQWJvdXRQYW5l bDogbmlsXTsKICAgcmV0dXJuIFFuaWw7CiB9CkBAIC0xOTc1LDcgKzE5MTUsNyBAQAogICBO U01lbnUgKnN2Y3M7CiAgIGlkIGRlbGVnYXRlOwogCi0gIGNoZWNrX3dpbmRvd19zeXN0ZW0g KCk7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwpOwogICBzdmNzID0gW1tOU01lbnUg YWxsb2NdIGluaXRXaXRoVGl0bGU6IEAiU2VydmljZXMiXTsKICAgW05TQXBwIHNldFNlcnZp Y2VzTWVudTogc3Zjc107CiAgIFtOU0FwcCByZWdpc3RlclNlcnZpY2VzTWVudVNlbmRUeXBl czogbnNfc2VuZF90eXBlcwpAQCAtMjAyOCw3ICsxOTY4LDcgQEAKICAgY2hhciAqdXRmU3Ry OwogCiAgIENIRUNLX1NUUklORyAoc2VydmljZSk7Ci0gIGNoZWNrX3dpbmRvd19zeXN0ZW0g KCk7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwpOwogCiAgIHV0ZlN0ciA9IFNTREFU QSAoc2VydmljZSk7CiAgIHN2Y05hbWUgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJp bmc6IHV0ZlN0cl07CkBAIC0yMTUyLDcgKzIwOTIsNyBAQAogICBOU0V2ZW50ICpueGV2Owog CiAgIENIRUNLX1NUUklORyAoc2NyaXB0KTsKLSAgY2hlY2tfd2luZG93X3N5c3RlbSAoKTsK KyAgY2hlY2tfd2luZG93X3N5c3RlbSAoTlVMTCk7CiAKICAgYmxvY2tfaW5wdXQgKCk7CiAK QEAgLTIyMDEsMTUgKzIxNDEsNiBAQAogCiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwog Ci0KLS8qIGNhbGxlZCBmcm9tIGltYWdlLmMgKi8KLUZSQU1FX1BUUgotY2hlY2tfeF9mcmFt ZSAoTGlzcF9PYmplY3QgZnJhbWUpCi17Ci0gIHJldHVybiBjaGVja19uc19mcmFtZSAoZnJh bWUpOwotfQotCi0KIC8qIGNhbGxlZCBmcm9tIGZyYW1lLmMgKi8KIHN0cnVjdCBuc19kaXNw bGF5X2luZm8gKgogY2hlY2tfeF9kaXNwbGF5X2luZm8gKExpc3BfT2JqZWN0IGZyYW1lKQpA QCAtMjIzNSw3ICsyMTY2LDcgQEAKICAgLyogcmVtb3ZlIGFwcG5hbWUgcHJlZml4OyBUT0RP OiBhbGxvdyBmb3IgIT0iRW1hY3MiICovCiAgIGNoYXIgKnRvQ2hlY2sgPSBjbGFzcyArICgh c3RybmNtcCAoY2xhc3MsICJFbWFjcy4iLCA2KSA/IDYgOiAwKTsKICAgY29uc3QgY2hhciAq cmVzOwotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVja193aW5kb3dfc3lzdGVt IChOVUxMKTsKIAogICBpZiAoaW5oaWJpdF94X3Jlc291cmNlcykKICAgICAvKiAtLXF1aWNr IHdhcyBwYXNzZWQsIHNvIHRoaXMgaXMgYSBuby1vcC4gICovCkBAIC0yMzA1LDcgKzIyMzYs NyBAQAogICAgICAoTGlzcF9PYmplY3QgY29sb3IsIExpc3BfT2JqZWN0IGZyYW1lKQogewog ICBOU0NvbG9yICogY29sOwotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVja193 aW5kb3dfc3lzdGVtIChOVUxMKTsKICAgcmV0dXJuIG5zX2xpc3BfdG9fY29sb3IgKGNvbG9y LCAmY29sKSA/IFFuaWwgOiBRdDsKIH0KIApAQCAtMjMxNyw3ICsyMjQ4LDcgQEAKICAgTlND b2xvciAqIGNvbDsKICAgQ0dGbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKIAotICBj aGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVja193aW5kb3dfc3lzdGVtIChOVUxMKTsK ICAgQ0hFQ0tfU1RSSU5HIChjb2xvcik7CiAKICAgaWYgKG5zX2xpc3BfdG9fY29sb3IgKGNv bG9yLCAmY29sKSkKQEAgLTIzMzYsNyArMjI2Nyw4IEBACiB7CiAgIE5TV2luZG93RGVwdGgg ZGVwdGg7CiAgIE5TU3RyaW5nICpjb2xvclNwYWNlOwotICBjaGVja193aW5kb3dfc3lzdGVt ICgpOworICAKKyAgY2hlY2tfbnNfZGlzcGxheV9pbmZvIChkaXNwbGF5KTsKICAgZGVwdGgg PSBbbnNfZ2V0X3NjcmVlbiAoZGlzcGxheSkgZGVwdGhdOwogICBjb2xvclNwYWNlID0gTlND b2xvclNwYWNlRnJvbURlcHRoIChkZXB0aCk7CiAKQEAgLTIzNTYsNyArMjI4OCw4IEBACiAg ICAgIChMaXNwX09iamVjdCBkaXNwbGF5KQogewogICBOU1dpbmRvd0RlcHRoIGRlcHRoOwot ICBjaGVja193aW5kb3dfc3lzdGVtICgpOworCisgIGNoZWNrX25zX2Rpc3BsYXlfaW5mbyAo ZGlzcGxheSk7CiAgIGRlcHRoID0gW25zX2dldF9zY3JlZW4gKGRpc3BsYXkpIGRlcHRoXTsK IAogICByZXR1cm4gTlNCaXRzUGVyUGl4ZWxGcm9tRGVwdGggKGRlcHRoKSA+IDEgPyBRdCA6 IFFuaWw7CkBAIC0yMzcxLDcgKzIzMDQsNyBAQAogSWYgb21pdHRlZCBvciBuaWwsIHRoYXQg c3RhbmRzIGZvciB0aGUgc2VsZWN0ZWQgZnJhbWUncyBkaXNwbGF5LiAgKi8pCiAgICAgIChM aXNwX09iamVjdCBkaXNwbGF5KQogewotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBj aGVja19uc19kaXNwbGF5X2luZm8gKGRpc3BsYXkpOwogICByZXR1cm4gbWFrZV9udW1iZXIg KChpbnQpIFtuc19nZXRfc2NyZWVuIChkaXNwbGF5KSBmcmFtZV0uc2l6ZS53aWR0aCk7CiB9 CiAKQEAgLTIzODQsNyArMjMxNyw3IEBACiBJZiBvbWl0dGVkIG9yIG5pbCwgdGhhdCBzdGFu ZHMgZm9yIHRoZSBzZWxlY3RlZCBmcmFtZSdzIGRpc3BsYXkuICAqLykKICAgICAgKExpc3Bf T2JqZWN0IGRpc3BsYXkpCiB7Ci0gIGNoZWNrX3dpbmRvd19zeXN0ZW0gKCk7CisgIGNoZWNr X25zX2Rpc3BsYXlfaW5mbyAoZGlzcGxheSk7CiAgIHJldHVybiBtYWtlX251bWJlciAoKGlu dCkgW25zX2dldF9zY3JlZW4gKGRpc3BsYXkpIGZyYW1lXS5zaXplLmhlaWdodCk7CiB9CiAK QEAgLTI0MDQsNyArMjMzNyw3IEBACiAgIE5TU2NyZWVuICpzY3JlZW47CiAgIE5TUmVjdCB2 U2NyZWVuOwogCi0gIGNoZWNrX3dpbmRvd19zeXN0ZW0gKCk7CisgIGNoZWNrX25zX2Rpc3Bs YXlfaW5mbyAoZGlzcGxheSk7CiAgIHNjcmVlbiA9IG5zX2dldF9zY3JlZW4gKGRpc3BsYXkp OwogICBpZiAoIXNjcmVlbikKICAgICByZXR1cm4gUW5pbDsKQEAgLTI0MjgsNyArMjM2MSw3 IEBACiBJZiBvbWl0dGVkIG9yIG5pbCwgdGhhdCBzdGFuZHMgZm9yIHRoZSBzZWxlY3RlZCBm cmFtZSdzIGRpc3BsYXkuICAqLykKICAgICAgKExpc3BfT2JqZWN0IGRpc3BsYXkpCiB7Ci0g IGNoZWNrX3dpbmRvd19zeXN0ZW0gKCk7CisgIGNoZWNrX25zX2Rpc3BsYXlfaW5mbyAoZGlz cGxheSk7CiAgIHJldHVybiBtYWtlX251bWJlcgogICAgIChOU0JpdHNQZXJQaXhlbEZyb21E ZXB0aCAoW25zX2dldF9zY3JlZW4gKGRpc3BsYXkpIGRlcHRoXSkpOwogfQpAQCAtMjQ0Miwx MCArMjM3NSw3IEBACiBJZiBvbWl0dGVkIG9yIG5pbCwgdGhhdCBzdGFuZHMgZm9yIHRoZSBz ZWxlY3RlZCBmcmFtZSdzIGRpc3BsYXkuICAqLykKICAgICAgKExpc3BfT2JqZWN0IGRpc3Bs YXkpCiB7Ci0gIHN0cnVjdCBuc19kaXNwbGF5X2luZm8gKmRweWluZm87Ci0gIGNoZWNrX3dp bmRvd19zeXN0ZW0gKCk7Ci0KLSAgZHB5aW5mbyA9IGNoZWNrX25zX2Rpc3BsYXlfaW5mbyAo ZGlzcGxheSk7CisgIHN0cnVjdCBuc19kaXNwbGF5X2luZm8gKmRweWluZm8gPSBjaGVja19u c19kaXNwbGF5X2luZm8gKGRpc3BsYXkpOwogICAvKiBXZSBmb3JjZSAyNCsgYml0IGRlcHRo cyB0byAyNC1iaXQgdG8gcHJldmVudCBhbiBvdmVyZmxvdy4gICovCiAgIHJldHVybiBtYWtl X251bWJlciAoMSA8PCBtaW4gKGRweWluZm8tPm5fcGxhbmVzLCAyNCkpOwogfQpAQCAtMjU1 OCw3ICsyNDg4LDcgQEAKIAogICBDSEVDS19TVFJJTkcgKHN0cmluZyk7CiAgIHN0ciA9IFNT REFUQSAoc3RyaW5nKTsKLSAgZiA9IGNoZWNrX3hfZnJhbWUgKGZyYW1lKTsKKyAgZiA9IGRl Y29kZV93aW5kb3dfc3lzdGVtX2ZyYW1lIChmcmFtZSk7CiAgIGlmIChOSUxQICh0aW1lb3V0 KSkKICAgICB0aW1lb3V0ID0gbWFrZV9udW1iZXIgKDUpOwogICBlbHNlCgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL25zbWVudS5tJwotLS0gc3JjL25zbWVudS5tCTIwMTMtMDQtMDUgMTQ6 MDc6MDIgKzAwMDAKKysrIHNyYy9uc21lbnUubQkyMDEzLTA0LTA2IDA5OjM2OjUxICswMDAw CkBAIC0xNDA5LDggKzE0MDksNiBAQAogCiAgIE5TVFJBQ0UgKHgtcG9wdXAtZGlhbG9nKTsK IAotICBjaGVja193aW5kb3dfc3lzdGVtICgpOwotCiAgIGlzUSA9IE5JTFAgKGhlYWRlcik7 CiAKICAgaWYgKEVRIChwb3NpdGlvbiwgUXQpCkBAIC0xNDQ4LDYgKzE0NDYsOCBAQAogICBl bHNlCiAgICAgQ0hFQ0tfV0lORE9XICh3aW5kb3cpOwogCisgIGNoZWNrX3dpbmRvd19zeXN0 ZW0gKGYpOworCiAgIHAueCA9IChpbnQpZi0+bGVmdF9wb3MgKyAoKGludClGUkFNRV9DT0xV TU5fV0lEVEggKGYpICogZi0+dGV4dF9jb2xzKS8yOwogICBwLnkgPSAoaW50KWYtPnRvcF9w b3MgKyAoRlJBTUVfTElORV9IRUlHSFQgKGYpICogZi0+dGV4dF9saW5lcykvMjsKIAoKPT09 IG1vZGlmaWVkIGZpbGUgJ3NyYy9uc3NlbGVjdC5tJwotLS0gc3JjL25zc2VsZWN0Lm0JMjAx My0wNC0wNSAxNDowNzowMiArMDAwMAorKysgc3JjL25zc2VsZWN0Lm0JMjAxMy0wNC0wNiAw OTozNzozNiArMDAwMApAQCAtMzU0LDggKzM1NCw3IEBACiAgIExpc3BfT2JqZWN0IHN1Y2Nl c3NmdWxfcCA9IFFuaWwsIHJlc3Q7CiAgIExpc3BfT2JqZWN0IHRhcmdldF9zeW1ib2wsIGRh dGE7CiAKLQotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVja193aW5kb3dfc3lz dGVtIChOVUxMKTsKICAgQ0hFQ0tfU1lNQk9MIChzZWxlY3Rpb24pOwogICBpZiAoTklMUCAo dmFsdWUpKQogICAgICAgZXJyb3IgKCJzZWxlY3Rpb24gdmFsdWUgbWF5IG5vdCBiZSBuaWwu Iik7CkBAIC00MDksNyArNDA4LDcgQEAKICAgKExpc3BfT2JqZWN0IHNlbGVjdGlvbiwgTGlz cF9PYmplY3QgdGltZV9vYmplY3QsIExpc3BfT2JqZWN0IHRlcm1pbmFsKQogewogICBpZCBw YjsKLSAgY2hlY2tfd2luZG93X3N5c3RlbSAoKTsKKyAgY2hlY2tfd2luZG93X3N5c3RlbSAo TlVMTCk7CiAgIENIRUNLX1NZTUJPTCAoc2VsZWN0aW9uKTsKICAgaWYgKE5JTFAgKGFzc3Ff bm9fcXVpdCAoc2VsZWN0aW9uLCBWc2VsZWN0aW9uX2FsaXN0KSkpIHJldHVybiBRbmlsOwog CkBAIC00MzYsNyArNDM1LDcgQEAKICAgaWQgcGI7CiAgIE5TQXJyYXkgKnR5cGVzOwogCi0g IGNoZWNrX3dpbmRvd19zeXN0ZW0gKCk7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwp OwogICBDSEVDS19TWU1CT0wgKHNlbGVjdGlvbik7CiAgIGlmIChFUSAoc2VsZWN0aW9uLCBR bmlsKSkgc2VsZWN0aW9uID0gUVBSSU1BUlk7CiAgIGlmIChFUSAoc2VsZWN0aW9uLCBRdCkp IHNlbGVjdGlvbiA9IFFTRUNPTkRBUlk7CkBAIC00NjQsNyArNDYzLDcgQEAKIE9uIE5leHRz dGVwLCBURVJNSU5BTCBpcyB1bnVzZWQuICAqLykKICAgICAgKExpc3BfT2JqZWN0IHNlbGVj dGlvbiwgTGlzcF9PYmplY3QgdGVybWluYWwpCiB7Ci0gIGNoZWNrX3dpbmRvd19zeXN0ZW0g KCk7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwpOwogICBDSEVDS19TWU1CT0wgKHNl bGVjdGlvbik7CiAgIGlmIChFUSAoc2VsZWN0aW9uLCBRbmlsKSkgc2VsZWN0aW9uID0gUVBS SU1BUlk7CiAgIGlmIChFUSAoc2VsZWN0aW9uLCBRdCkpIHNlbGVjdGlvbiA9IFFTRUNPTkRB Ulk7CkBAIC00OTIsNyArNDkxLDcgQEAKIHsKICAgTGlzcF9PYmplY3QgdmFsOwogCi0gIGNo ZWNrX3dpbmRvd19zeXN0ZW0gKCk7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwpOwog ICBDSEVDS19TWU1CT0wgKHNlbGVjdGlvbl9uYW1lKTsKICAgQ0hFQ0tfU1lNQk9MICh0YXJn ZXRfdHlwZSk7CiAgIHZhbCA9IG5zX2dldF9sb2NhbF9zZWxlY3Rpb24gKHNlbGVjdGlvbl9u YW1lLCB0YXJnZXRfdHlwZSk7CkBAIC01MTYsNyArNTE1LDcgQEAKICAgICAgKExpc3BfT2Jq ZWN0IHNlbGVjdGlvbikKIHsKICAgaWQgcGI7Ci0gIGNoZWNrX3dpbmRvd19zeXN0ZW0gKCk7 CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKE5VTEwpOwogICBwYiA9IG5zX3N5bWJvbF90b19w YiAoc2VsZWN0aW9uKTsKICAgcmV0dXJuIHBiICE9IG5pbCA/IG5zX3N0cmluZ19mcm9tX3Bh c3RlYm9hcmQgKHBiKSA6IFFuaWw7CiB9CkBAIC01MjksNyArNTI4LDcgQEAKICAgICAgKExp c3BfT2JqZWN0IHNlbGVjdGlvbiwgTGlzcF9PYmplY3Qgc3RyaW5nKQogewogICBpZCBwYjsK LSAgY2hlY2tfd2luZG93X3N5c3RlbSAoKTsKKyAgY2hlY2tfd2luZG93X3N5c3RlbSAoTlVM TCk7CiAgIHBiID0gbnNfc3ltYm9sX3RvX3BiIChzZWxlY3Rpb24pOwogICBpZiAocGIgIT0g bmlsKSBuc19zdHJpbmdfdG9fcGFzdGVib2FyZCAocGIsIHN0cmluZyk7CiAgIHJldHVybiBR bmlsOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9uc3Rlcm0uaCcKLS0tIHNyYy9uc3Rlcm0u aAkyMDEzLTA0LTA1IDE0OjA3OjAyICswMDAwCisrKyBzcmMvbnN0ZXJtLmgJMjAxMy0wNC0w NiAwOToyNjoxNSArMDAwMApAQCAtNTc3LDggKzU3Nyw2IEBACiBleHRlcm4gc3RydWN0IG5z X2Rpc3BsYXlfaW5mbyAqbnNfZGlzcGxheV9pbmZvX2Zvcl9uYW1lIChMaXNwX09iamVjdCBu YW1lKTsKIAogc3RydWN0IG5zX2Rpc3BsYXlfaW5mbyAqY2hlY2tfeF9kaXNwbGF5X2luZm8g KExpc3BfT2JqZWN0IGZyYW1lKTsKLUZSQU1FX1BUUiBjaGVja194X2ZyYW1lIChMaXNwX09i amVjdCBmcmFtZSk7Ci0KIAogc3RydWN0IG5zX291dHB1dAogewoKPT09IG1vZGlmaWVkIGZp bGUgJ3NyYy9uc3Rlcm0ubScKLS0tIHNyYy9uc3Rlcm0ubQkyMDEzLTA0LTA1IDE0OjA3OjAy ICswMDAwCisrKyBzcmMvbnN0ZXJtLm0JMjAxMy0wNC0wNiAwOTo0MDozOCArMDAwMApAQCAt MTAxMiw4ICsxMDEyLDkgQEAKICAgICAgQnJpbmcgd2luZG93IHRvIGZvcmVncm91bmQgYW5k IG1ha2UgaXQgYWN0aXZlCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogewotICBOU1Zp ZXcgKnZpZXcgPSBGUkFNRV9OU19WSUVXIChmKTsKLSAgY2hlY2tfd2luZG93X3N5c3RlbSAo KTsKKyAgTlNWaWV3ICp2aWV3OworICBjaGVja193aW5kb3dfc3lzdGVtIChmKTsKKyAgdmll dyA9IEZSQU1FX05TX1ZJRVcgKGYpOwogICBibG9ja19pbnB1dCAoKTsKICAgaWYgKEZSQU1F X1ZJU0lCTEVfUCAoZikpCiAgICAgW1t2aWV3IHdpbmRvd10gbWFrZUtleUFuZE9yZGVyRnJv bnQ6IE5TQXBwXTsKQEAgLTEwMjcsOCArMTAyOCw5IEBACiAgICAgIFNlbmQgd2luZG93IHRv IGJhY2sKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiB7Ci0gIE5TVmlldyAqdmlldyA9 IEZSQU1FX05TX1ZJRVcgKGYpOwotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBOU1Zp ZXcgKnZpZXc7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKGYpOworICB2aWV3ID0gRlJBTUVf TlNfVklFVyAoZik7CiAgIGJsb2NrX2lucHV0ICgpOwogICBbW3ZpZXcgd2luZG93XSBvcmRl ckJhY2s6IE5TQXBwXTsKICAgdW5ibG9ja19pbnB1dCAoKTsKQEAgLTExMzEsOSArMTEzMywx MCBAQAogICAgICBFeHRlcm5hbDogSGlkZSB0aGUgd2luZG93IChYMTEgc2VtYW50aWNzKQog ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHsKLSAgTlNWaWV3ICogdmlldyA9IEZSQU1F X05TX1ZJRVcgKGYpOworICBOU1ZpZXcgKnZpZXc7CiAgIE5TVFJBQ0UgKHhfbWFrZV9mcmFt ZV9pbnZpc2libGUpOwotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVja193aW5k b3dfc3lzdGVtIChmKTsKKyAgdmlldyA9IEZSQU1FX05TX1ZJRVcgKGYpOwogICBbW3ZpZXcg d2luZG93XSBvcmRlck91dDogTlNBcHBdOwogICBTRVRfRlJBTUVfVklTSUJMRSAoZiwgMCk7 CiAgIFNFVF9GUkFNRV9JQ09OSUZJRUQgKGYsIDApOwpAQCAtMTE0NiwxMCArMTE0OSwxMyBA QAogICAgICBFeHRlcm5hbDogSWNvbmlmeSB3aW5kb3cKICAgIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tICovCiB7Ci0gIE5TVmlldyAqIHZpZXcgPSBGUkFNRV9OU19WSUVXIChmKTsKLSAgc3Ry dWN0IG5zX2Rpc3BsYXlfaW5mbyAqZHB5aW5mbyA9IEZSQU1FX05TX0RJU1BMQVlfSU5GTyAo Zik7CisgIE5TVmlldyAqdmlldzsKKyAgc3RydWN0IG5zX2Rpc3BsYXlfaW5mbyAqZHB5aW5m bzsKKwogICBOU1RSQUNFICh4X2ljb25pZnlfZnJhbWUpOwotICBjaGVja193aW5kb3dfc3lz dGVtICgpOworICBjaGVja193aW5kb3dfc3lzdGVtIChmKTsKKyAgdmlldyA9IEZSQU1FX05T X1ZJRVcgKGYpOworICBkcHlpbmZvID0gRlJBTUVfTlNfRElTUExBWV9JTkZPIChmKTsKIAog ICBpZiAoZHB5aW5mby0+eF9oaWdobGlnaHRfZnJhbWUgPT0gZikKICAgICBkcHlpbmZvLT54 X2hpZ2hsaWdodF9mcmFtZSA9IDA7CkBAIC0xMTc0LDExICsxMTgwLDE1IEBACiB2b2lkCiB4 X2ZyZWVfZnJhbWVfcmVzb3VyY2VzIChzdHJ1Y3QgZnJhbWUgKmYpCiB7Ci0gIE5TVmlldyAq dmlldyA9IEZSQU1FX05TX1ZJRVcgKGYpOwotICBzdHJ1Y3QgbnNfZGlzcGxheV9pbmZvICpk cHlpbmZvID0gRlJBTUVfTlNfRElTUExBWV9JTkZPIChmKTsKLSAgTW91c2VfSExJbmZvICpo bGluZm8gPSBNT1VTRV9ITF9JTkZPIChmKTsKKyAgTlNWaWV3ICp2aWV3OworICBzdHJ1Y3Qg bnNfZGlzcGxheV9pbmZvICpkcHlpbmZvOworICBNb3VzZV9ITEluZm8gKmhsaW5mbzsKKwog ICBOU1RSQUNFICh4X2ZyZWVfZnJhbWVfcmVzb3VyY2VzKTsKLSAgY2hlY2tfd2luZG93X3N5 c3RlbSAoKTsKKyAgY2hlY2tfd2luZG93X3N5c3RlbSAoZik7CisgIHZpZXcgPSBGUkFNRV9O U19WSUVXIChmKTsKKyAgZHB5aW5mbyA9IEZSQU1FX05TX0RJU1BMQVlfSU5GTyAoZik7Cisg IGhsaW5mbyA9IE1PVVNFX0hMX0lORk8gKGYpOwogCiAgIFsoRW1hY3NWaWV3ICopdmlldyBz ZXRXaW5kb3dDbG9zaW5nOiBZRVNdOyAvKiBtYXkgbm90IGhhdmUgYmVlbiBpbmZvcm1lZCAq LwogCkBAIC0xMjE5LDcgKzEyMjksNyBAQAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K IHsKICAgTlNUUkFDRSAoeF9kZXN0cm95X3dpbmRvdyk7Ci0gIGNoZWNrX3dpbmRvd19zeXN0 ZW0gKCk7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKGYpOwogICB4X2ZyZWVfZnJhbWVfcmVz b3VyY2VzIChmKTsKICAgbnNfd2luZG93X251bS0tOwogfQoKPT09IG1vZGlmaWVkIGZpbGUg J3NyYy93MzJmbnMuYycKLS0tIHNyYy93MzJmbnMuYwkyMDEzLTA0LTA1IDE0OjA3OjAyICsw MDAwCisrKyBzcmMvdzMyZm5zLmMJMjAxMy0wNC0wNiAwNjoyNzoxNyArMDAwMApAQCAtOTUs MTAgKzk1LDYgQEAKICNkZWZpbmUgSURDX0hBTkQgTUFLRUlOVFJFU09VUkNFKDMyNjQ5KQog I2VuZGlmCiAKLS8qIE5vbnplcm8gaWYgdXNpbmcgV2luZG93cy4gICovCi0KLXN0YXRpYyBp bnQgdzMyX2luX3VzZTsKLQogTGlzcF9PYmplY3QgUXN1cHByZXNzX2ljb247CiBMaXNwX09i amVjdCBRdW5kZWZpbmVkX2NvbG9yOwogTGlzcF9PYmplY3QgUWNhbmNlbF90aW1lcjsKQEAg LTIzOSwzNyArMjM1LDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc291bmRfdHlwZSA9IDB4 RkZGRkZGRkY7CiAjZGVmaW5lIE1CX0VNQUNTX1NJTEVOVCAoMHhGRkZGRkZGRiAtIDEpCiAK LQwKLS8qIEVycm9yIGlmIHdlIGFyZSBub3QgY29ubmVjdGVkIHRvIE1TLVdpbmRvd3MuICAq Lwotdm9pZAotY2hlY2tfd2luZG93X3N5c3RlbSAodm9pZCkKLXsKLSAgaWYgKCEgdzMyX2lu X3VzZSkKLSAgICBlcnJvciAoIk1TLVdpbmRvd3Mgbm90IGluIHVzZSBvciBub3QgaW5pdGlh bGl6ZWQiKTsKLX0KLQotLyogTm9uemVybyBpZiB3ZSBjYW4gdXNlIG1vdXNlIG1lbnVzLgot ICAgWW91IHNob3VsZCBub3QgY2FsbCB0aGlzIHVubGVzcyBIQVZFX01FTlVTIGlzIGRlZmlu ZWQuICAqLwotCi1pbnQKLWhhdmVfbWVudXNfcCAodm9pZCkKLXsKLSAgcmV0dXJuIHczMl9p bl91c2U7Ci19Ci0KLS8qIEV4dHJhY3QgYSBmcmFtZSBhcyBhIEZSQU1FX1BUUiwgZGVmYXVs dGluZyB0byB0aGUgc2VsZWN0ZWQgZnJhbWUKLSAgIGFuZCBjaGVja2luZyB2YWxpZGl0eSBm b3IgVzMyLiAgKi8KLQotRlJBTUVfUFRSCi1jaGVja194X2ZyYW1lIChMaXNwX09iamVjdCBm cmFtZSkKLXsKLSAgc3RydWN0IGZyYW1lICpmID0gZGVjb2RlX2xpdmVfZnJhbWUgKGZyYW1l KTsKLQotICBpZiAoISBGUkFNRV9XMzJfUCAoZikpCi0gICAgZXJyb3IgKCJOb24tVzMyIGZy YW1lIHVzZWQiKTsKLSAgcmV0dXJuIGY7Ci19Ci0KIC8qIExldCB0aGUgdXNlciBzcGVjaWZ5 IGEgZGlzcGxheSB3aXRoIGEgZnJhbWUuCiAgICBuaWwgc3RhbmRzIGZvciB0aGUgc2VsZWN0 ZWQgZnJhbWUtLW9yLCBpZiB0aGF0IGlzIG5vdCBhIHczMiBmcmFtZSwKICAgIHRoZSBmaXJz dCBkaXNwbGF5IG9uIHRoZSBsaXN0LiAgKi8KQEAgLTQ1NjcsNyArNDUzMiw3IEBACiAgICAg ICAgZG9jOiAvKiBHaXZlIEZSQU1FIGlucHV0IGZvY3VzLCByYWlzaW5nIHRvIGZvcmVncm91 bmQgaWYgbmVjZXNzYXJ5LiAgKi8pCiAgIChMaXNwX09iamVjdCBmcmFtZSkKIHsKLSAgeF9m b2N1c19vbl9mcmFtZSAoY2hlY2tfeF9mcmFtZSAoZnJhbWUpKTsKKyAgeF9mb2N1c19vbl9m cmFtZSAoZGVjb2RlX3dpbmRvd19zeXN0ZW1fZnJhbWUgKGZyYW1lKSk7CiAgIHJldHVybiBR bmlsOwogfQogCkBAIC00NTc4LDcgKzQ1NDMsNyBAQAogICAoTGlzcF9PYmplY3QgY29sb3Is IExpc3BfT2JqZWN0IGZyYW1lKQogewogICBYQ29sb3IgZm9vOwotICBGUkFNRV9QVFIgZiA9 IGNoZWNrX3hfZnJhbWUgKGZyYW1lKTsKKyAgRlJBTUVfUFRSIGYgPSBkZWNvZGVfd2luZG93 X3N5c3RlbV9mcmFtZSAoZnJhbWUpOwogCiAgIENIRUNLX1NUUklORyAoY29sb3IpOwogCkBA IC00NTkzLDcgKzQ1NTgsNyBAQAogICAoTGlzcF9PYmplY3QgY29sb3IsIExpc3BfT2JqZWN0 IGZyYW1lKQogewogICBYQ29sb3IgZm9vOwotICBGUkFNRV9QVFIgZiA9IGNoZWNrX3hfZnJh bWUgKGZyYW1lKTsKKyAgRlJBTUVfUFRSIGYgPSBkZWNvZGVfd2luZG93X3N5c3RlbV9mcmFt ZSAoZnJhbWUpOwogCiAgIENIRUNLX1NUUklORyAoY29sb3IpOwogCkBAIC00OTExLDcgKzQ4 NzYsNiBAQAogICBpZiAoZHB5aW5mbyA9PSAwKQogICAgIGVycm9yICgiQ2Fubm90IGNvbm5l Y3QgdG8gc2VydmVyICVzIiwgU0RBVEEgKG5hbWUpKTsKIAotICB3MzJfaW5fdXNlID0gMTsK ICAgWFNFVEZBU1RJTlQgKFZ3aW5kb3dfc3lzdGVtX3ZlcnNpb24sIHczMl9tYWpvcl92ZXJz aW9uKTsKIAogICByZXR1cm4gZHB5aW5mbzsKQEAgLTQ5NDEsNyArNDkwNSw3IEBACiAKICAg LyogSWYgaW5pdGlhbGl6YXRpb24gaGFzIGFscmVhZHkgYmVlbiBkb25lLCByZXR1cm4gbm93 IHRvIGF2b2lkCiAgICAgIG92ZXJ3cml0aW5nIGNyaXRpY2FsIHBhcnRzIG9mIG9uZV93MzJf ZGlzcGxheV9pbmZvLiAgKi8KLSAgaWYgKHczMl9pbl91c2UpCisgIGlmICh3aW5kb3dfc3lz dGVtX2F2YWlsYWJsZSAoTlVMTCkpCiAgICAgcmV0dXJuIFFuaWw7CiAKICAgaWYgKCEgTklM UCAoeHJtX3N0cmluZykpCkBAIC01MDEwLDggKzQ5NzQsNiBAQAogCWVycm9yICgiQ2Fubm90 IGNvbm5lY3QgdG8gc2VydmVyICVzIiwgU0RBVEEgKGRpc3BsYXkpKTsKICAgICB9CiAKLSAg dzMyX2luX3VzZSA9IDE7Ci0KICAgWFNFVEZBU1RJTlQgKFZ3aW5kb3dfc3lzdGVtX3ZlcnNp b24sIHczMl9tYWpvcl92ZXJzaW9uKTsKICAgcmV0dXJuIFFuaWw7CiB9CkBAIC01MDk1LDcg KzUwNTcsNyBAQAogICAoTGlzcF9PYmplY3QgcHJvcCwgTGlzcF9PYmplY3QgdmFsdWUsIExp c3BfT2JqZWN0IGZyYW1lLAogICAgTGlzcF9PYmplY3QgdHlwZSwgTGlzcF9PYmplY3QgZm9y bWF0LCBMaXNwX09iamVjdCBvdXRlcl9wKQogewotICBzdHJ1Y3QgZnJhbWUgKmYgPSBjaGVj a194X2ZyYW1lIChmcmFtZSk7CisgIHN0cnVjdCBmcmFtZSAqZiA9IGRlY29kZV93aW5kb3df c3lzdGVtX2ZyYW1lIChmcmFtZSk7CiAgIEF0b20gcHJvcF9hdG9tOwogCiAgIENIRUNLX1NU UklORyAocHJvcCk7CkBAIC01MTIxLDcgKzUwODMsNyBAQAogRlJBTUUgbmlsIG9yIG9taXR0 ZWQgbWVhbnMgdXNlIHRoZSBzZWxlY3RlZCBmcmFtZS4gIFZhbHVlIGlzIFBST1AuICAqLykK ICAgKExpc3BfT2JqZWN0IHByb3AsIExpc3BfT2JqZWN0IGZyYW1lKQogewotICBzdHJ1Y3Qg ZnJhbWUgKmYgPSBjaGVja194X2ZyYW1lIChmcmFtZSk7CisgIHN0cnVjdCBmcmFtZSAqZiA9 IGRlY29kZV93aW5kb3dfc3lzdGVtX2ZyYW1lIChmcmFtZSk7CiAgIEF0b20gcHJvcF9hdG9t OwogCiAgIENIRUNLX1NUUklORyAocHJvcCk7CkBAIC01MTU3LDcgKzUxMTksNyBAQAogICAo TGlzcF9PYmplY3QgcHJvcCwgTGlzcF9PYmplY3QgZnJhbWUsIExpc3BfT2JqZWN0IHR5cGUs CiAgICBMaXNwX09iamVjdCBzb3VyY2UsIExpc3BfT2JqZWN0IGRlbGV0ZV9wLCBMaXNwX09i amVjdCB2ZWN0b3JfcmV0X3ApCiB7Ci0gIHN0cnVjdCBmcmFtZSAqZiA9IGNoZWNrX3hfZnJh bWUgKGZyYW1lKTsKKyAgc3RydWN0IGZyYW1lICpmID0gZGVjb2RlX3dpbmRvd19zeXN0ZW1f ZnJhbWUgKGZyYW1lKTsKICAgQXRvbSBwcm9wX2F0b207CiAgIGludCByYzsKICAgTGlzcF9P YmplY3QgcHJvcF92YWx1ZSA9IFFuaWw7CkBAIC01MzU4LDggKzUzMjAsNiBAQAogICBMaXNw X09iamVjdCBidWZmZXI7CiAgIHN0cnVjdCBidWZmZXIgKm9sZF9idWZmZXI7CiAKLSAgY2hl Y2tfd2luZG93X3N5c3RlbSAoKTsKLQogICAvKiBVc2UgdGhpcyBnZW5lcmFsIGRlZmF1bHQg dmFsdWUgdG8gc3RhcnQgd2l0aCB1bnRpbCB3ZSBrbm93IGlmCiAgICAgIHRoaXMgZnJhbWUg aGFzIGEgc3BlY2lmaWVkIG5hbWUuICAqLwogICBWeF9yZXNvdXJjZV9uYW1lID0gVmludm9j YXRpb25fbmFtZTsKQEAgLTU3MDMsNyArNTY2Myw3IEBACiAgIEdDUFJPNCAoc3RyaW5nLCBw YXJtcywgZnJhbWUsIHRpbWVvdXQpOwogCiAgIENIRUNLX1NUUklORyAoc3RyaW5nKTsKLSAg ZiA9IGNoZWNrX3hfZnJhbWUgKGZyYW1lKTsKKyAgZiA9IGRlY29kZV93aW5kb3dfc3lzdGVt X2ZyYW1lIChmcmFtZSk7CiAgIGlmIChOSUxQICh0aW1lb3V0KSkKICAgICB0aW1lb3V0ID0g bWFrZV9udW1iZXIgKDUpOwogICBlbHNlCkBAIC02MzU0LDcgKzYzMTQsNyBAQAogSWYgb3B0 aW9uYWwgcGFyYW1ldGVyIEZSQU1FIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSBzZWxlY3RlZCBm cmFtZS4gICovKQogICAoTGlzcF9PYmplY3QgY29tbWFuZCwgTGlzcF9PYmplY3QgZnJhbWUp CiB7Ci0gIEZSQU1FX1BUUiBmID0gY2hlY2tfeF9mcmFtZSAoZnJhbWUpOworICBGUkFNRV9Q VFIgZiA9IGRlY29kZV93aW5kb3dfc3lzdGVtX2ZyYW1lIChmcmFtZSk7CiAKICAgQ0hFQ0tf TlVNQkVSIChjb21tYW5kKTsKIApAQCAtNzMxMiw4ICs3MjcyLDYgQEAKIHN5bXNfb2ZfdzMy Zm5zICh2b2lkKQogewogICBnbG9iYWxzX29mX3czMmZucyAoKTsKLSAgLyogVGhpcyBpcyB6 ZXJvIGlmIG5vdCB1c2luZyBNUy1XaW5kb3dzLiAgKi8KLSAgdzMyX2luX3VzZSA9IDA7CiAg IHRyYWNrX21vdXNlX3dpbmRvdyA9IE5VTEw7CiAKICAgdzMyX3Zpc2libGVfc3lzdGVtX2Nh cmV0X2h3bmQgPSBOVUxMOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzJmb250LmMnCi0t LSBzcmMvdzMyZm9udC5jCTIwMTMtMDMtMjAgMDk6NTY6MTkgKzAwMDAKKysrIHNyYy93MzJm b250LmMJMjAxMy0wNC0wNiAwNjoxMToyNyArMDAwMApAQCAtMjQ2Nyw3ICsyNDY3LDcgQEAK IGluIHRoZSBmb250IHNlbGVjdGlvbiBkaWFsb2cuICovKQogICAoTGlzcF9PYmplY3QgZnJh bWUsIExpc3BfT2JqZWN0IGV4Y2x1ZGVfcHJvcG9ydGlvbmFsKQogewotICBGUkFNRV9QVFIg ZiA9IGNoZWNrX3hfZnJhbWUgKGZyYW1lKTsKKyAgRlJBTUVfUFRSIGYgPSBkZWNvZGVfd2lu ZG93X3N5c3RlbV9mcmFtZSAoZnJhbWUpOwogICBDSE9PU0VGT05UIGNmOwogICBMT0dGT05U IGxmOwogICBURVhUTUVUUklDIHRtOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzJtZW51 LmMnCi0tLSBzcmMvdzMybWVudS5jCTIwMTMtMDQtMDUgMTQ6MDc6MDIgKzAwMDAKKysrIHNy Yy93MzJtZW51LmMJMjAxMy0wNC0wNiAwNjoyODoxMCArMDAwMApAQCAtMTQwLDggKzE0MCw2 IEBACiAgIEZSQU1FX1BUUiBmID0gTlVMTDsKICAgTGlzcF9PYmplY3Qgd2luZG93OwogCi0g IGNoZWNrX3dpbmRvd19zeXN0ZW0gKCk7Ci0KICAgLyogRGVjb2RlIHRoZSBmaXJzdCBhcmd1 bWVudDogZmluZCB0aGUgd2luZG93IG9yIGZyYW1lIHRvIHVzZS4gICovCiAgIGlmIChFUSAo cG9zaXRpb24sIFF0KQogICAgICAgfHwgKENPTlNQIChwb3NpdGlvbikgJiYgKEVRIChYQ0FS IChwb3NpdGlvbiksIFFtZW51X2JhcikKQEAgLTE5NCw2ICsxOTIsOCBAQAogICAgICAgIGJ1 dCBJIGRvbid0IHdhbnQgdG8gbWFrZSBvbmUgbm93LiAgKi8KICAgICBDSEVDS19XSU5ET1cg KHdpbmRvdyk7CiAKKyAgY2hlY2tfd2luZG93X3N5c3RlbSAoZik7CisKICNpZm5kZWYgSEFW RV9ESUFMT0dTCiAKICAgewoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy93MzJ0ZXJtLmgnCi0t LSBzcmMvdzMydGVybS5oCTIwMTMtMDQtMDUgMTQ6MDc6MDIgKzAwMDAKKysrIHNyYy93MzJ0 ZXJtLmgJMjAxMy0wNC0wNiAwNjoxMToxMCArMDAwMApAQCAtNzM5LDcgKzczOSw2IEBACiBz dHJ1Y3QgZmFjZTsKIAogWEdDVmFsdWVzICpYQ3JlYXRlR0MgKHZvaWQgKiwgV2luZG93LCB1 bnNpZ25lZCBsb25nLCBYR0NWYWx1ZXMgKik7Ci1zdHJ1Y3QgZnJhbWUgKiBjaGVja194X2Zy YW1lIChMaXNwX09iamVjdCk7CiAKIHR5cGVkZWYgRFdPUkQgKFdJTkFQSSAqIENsaXBib2Fy ZFNlcXVlbmNlX1Byb2MpICh2b2lkKTsKIHR5cGVkZWYgQk9PTCAoV0lOQVBJICogQXBwZW5k TWVudVdfUHJvYykgKAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy94ZmFjZXMuYycKLS0tIHNy Yy94ZmFjZXMuYwkyMDEzLTA0LTA1IDE0OjA3OjAyICswMDAwCisrKyBzcmMveGZhY2VzLmMJ MjAxMy0wNC0wNiAwNTo1NDo0MyArMDAwMApAQCAtMTYzNCw3ICsxNjM0LDYgQEAKICAgc3Ry dWN0IGZyYW1lICpmOwogICBpbnQgc2l6ZSwgYXZnd2lkdGggSUZfTElOVCAoPSAwKTsKIAot ICBjaGVja193aW5kb3dfc3lzdGVtICgpOwogICBDSEVDS19TVFJJTkcgKHBhdHRlcm4pOwog CiAgIGlmICghIE5JTFAgKG1heGltdW0pKQpAQCAtMTY0Myw4ICsxNjQyLDggQEAKICAgaWYg KCFOSUxQICh3aWR0aCkpCiAgICAgQ0hFQ0tfTlVNQkVSICh3aWR0aCk7CiAKLSAgLyogV2Ug Y2FuJ3Qgc2ltcGx5IGNhbGwgY2hlY2tfeF9mcmFtZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24g bWF5IGJlCi0gICAgIGNhbGxlZCBiZWZvcmUgYW55IGZyYW1lIGlzIGNyZWF0ZWQuICAqLwor ICAvKiBXZSBjYW4ndCBzaW1wbHkgY2FsbCBkZWNvZGVfd2luZG93X3N5c3RlbV9mcmFtZSBi ZWNhdXNlCisgICAgIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYW55IGZy YW1lIGlzIGNyZWF0ZWQuICAqLwogICBmID0gZGVjb2RlX2xpdmVfZnJhbWUgKGZyYW1lKTsK ICAgaWYgKCEgRlJBTUVfV0lORE9XX1AgKGYpKQogICAgIHsKQEAgLTM5MjMsOCArMzkyMiw4 IEBACiAgIHN0cnVjdCBmcmFtZSAqZjsKICAgTGlzcF9PYmplY3QgbGZhY2UxLCBsZmFjZTI7 CiAKLSAgLyogRG9uJ3QgdXNlIGNoZWNrX3hfZnJhbWUgaGVyZSBiZWNhdXNlIHRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkCi0gICAgIGJlZm9yZSBYIGZyYW1lcyBleGlzdC4gIEF0IHRoYXQg dGltZSwgaWYgRlJBTUUgaXMgbmlsLAorICAvKiBEb24ndCB1c2UgZGVjb2RlX3dpbmRvd19z eXN0ZW1fZnJhbWUgaGVyZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24KKyAgICAgaXMgY2FsbGVk IGJlZm9yZSBYIGZyYW1lcyBleGlzdC4gIEF0IHRoYXQgdGltZSwgaWYgRlJBTUUgaXMgbmls LAogICAgICBzZWxlY3RlZF9mcmFtZSB3aWxsIGJlIHVzZWQgd2hpY2ggaXMgdGhlIGZyYW1l IGR1bXBlZCB3aXRoCiAgICAgIEVtYWNzLiAgVGhhdCBmcmFtZSBpcyBub3QgYW4gWCBmcmFt ZS4gICovCiAgIGYgPSBFUSAoZnJhbWUsIFF0KSA/IE5VTEwgOiBkZWNvZGVfbGl2ZV9mcmFt ZSAoZnJhbWUpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy94Zm5zLmMnCi0tLSBzcmMveGZu cy5jCTIwMTMtMDQtMDUgMTQ6MDc6MDIgKzAwMDAKKysrIHNyYy94Zm5zLmMJMjAxMy0wNC0w NiAwNTo1NDo0MyArMDAwMApAQCAtMTIzLDEwICsxMjMsNiBAQAogCiAjZGVmaW5lIE1BWFJF UVVFU1QoZHB5KSAoWE1heFJlcXVlc3RTaXplIChkcHkpKQogCi0vKiBOb256ZXJvIGlmIHVz aW5nIFguICAqLwotCi1pbnQgeF9pbl91c2U7Ci0KIHN0YXRpYyBMaXNwX09iamVjdCBRc3Vw cHJlc3NfaWNvbjsKIHN0YXRpYyBMaXNwX09iamVjdCBRdW5kZWZpbmVkX2NvbG9yOwogc3Rh dGljIExpc3BfT2JqZWN0IFFjb21wb3VuZF90ZXh0LCBRY2FuY2VsX3RpbWVyOwpAQCAtMTM5 LDM4ICsxMzUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHhfZGlzcGxheV9pbmZvICp4X2Rpc3Bs YXlfaW5mb19mb3JfbmFtZSAoTGlzcF9PYmplY3QpOwogCi0MCi0vKiBFcnJvciBpZiB3ZSBh cmUgbm90IGNvbm5lY3RlZCB0byBYLiAgKi8KLQotdm9pZAotY2hlY2tfd2luZG93X3N5c3Rl bSAodm9pZCkKLXsKLSAgaWYgKCEgeF9pbl91c2UpCi0gICAgZXJyb3IgKCJYIHdpbmRvd3Mg YXJlIG5vdCBpbiB1c2Ugb3Igbm90IGluaXRpYWxpemVkIik7Ci19Ci0KLS8qIE5vbnplcm8g aWYgd2UgY2FuIHVzZSBtb3VzZSBtZW51cy4KLSAgIFlvdSBzaG91bGQgbm90IGNhbGwgdGhp cyB1bmxlc3MgSEFWRV9NRU5VUyBpcyBkZWZpbmVkLiAgKi8KLQotaW50Ci1oYXZlX21lbnVz X3AgKHZvaWQpCi17Ci0gIHJldHVybiB4X2luX3VzZTsKLX0KLQotLyogRXh0cmFjdCBhIGZy YW1lIGFzIGEgRlJBTUVfUFRSLCBkZWZhdWx0aW5nIHRvIHRoZSBzZWxlY3RlZCBmcmFtZQot ICAgYW5kIGNoZWNraW5nIHZhbGlkaXR5IGZvciBYLiAgKi8KLQotRlJBTUVfUFRSCi1jaGVj a194X2ZyYW1lIChMaXNwX09iamVjdCBmcmFtZSkKLXsKLSAgc3RydWN0IGZyYW1lICpmID0g ZGVjb2RlX2xpdmVfZnJhbWUgKGZyYW1lKTsKLQotICBpZiAoISBGUkFNRV9YX1AgKGYpKQot ICAgIGVycm9yICgiTm9uLVggZnJhbWUgdXNlZCIpOwotICByZXR1cm4gZjsKLX0KLQogLyog TGV0IHRoZSB1c2VyIHNwZWNpZnkgYW4gWCBkaXNwbGF5IHdpdGggYSBMaXNwIG9iamVjdC4K ICAgIE9CSkVDVCBtYXkgYmUgbmlsLCBhIGZyYW1lIG9yIGEgdGVybWluYWwgb2JqZWN0Lgog ICAgbmlsIHN0YW5kcyBmb3IgdGhlIHNlbGVjdGVkIGZyYW1lLS1vciwgaWYgdGhhdCBpcyBu b3QgYW4gWCBmcmFtZSwKQEAgLTIwNSw3ICsxNjksNyBAQAogICAgIGRweWluZm8gPSB4X2Rp c3BsYXlfaW5mb19mb3JfbmFtZSAob2JqZWN0KTsKICAgZWxzZQogICAgIHsKLSAgICAgIEZS QU1FX1BUUiBmID0gY2hlY2tfeF9mcmFtZSAob2JqZWN0KTsKKyAgICAgIEZSQU1FX1BUUiBm ID0gZGVjb2RlX3dpbmRvd19zeXN0ZW1fZnJhbWUgKG9iamVjdCk7CiAgICAgICBkcHlpbmZv ID0gRlJBTUVfWF9ESVNQTEFZX0lORk8gKGYpOwogICAgIH0KIApAQCAtMjk5Miw3ICsyOTU2 LDcgQEAKIFNpZ25hbCBlcnJvciBpZiBGUkFNRSBpcyBub3QgYW4gWCBmcmFtZS4gICovKQog ICAoTGlzcF9PYmplY3QgZnJhbWUpCiB7Ci0gIHN0cnVjdCBmcmFtZSAqZiA9IGNoZWNrX3hf ZnJhbWUgKGZyYW1lKTsKKyAgc3RydWN0IGZyYW1lICpmID0gZGVjb2RlX3dpbmRvd19zeXN0 ZW1fZnJhbWUgKGZyYW1lKTsKIAogICBibG9ja19pbnB1dCAoKTsKICAgeF93bV9zZXRfc2l6 ZV9oaW50IChmLCAwLCAwKTsKQEAgLTM0ODMsNyArMzQ0Nyw3IEBACiBGUkFNRSBuaWwgbWVh bnMgdXNlIHRoZSBzZWxlY3RlZCBmcmFtZS4gICovKQogICAoTGlzcF9PYmplY3QgZnJhbWUp CiB7Ci0gIHN0cnVjdCBmcmFtZSAqZiA9IGNoZWNrX3hfZnJhbWUgKGZyYW1lKTsKKyAgc3Ry dWN0IGZyYW1lICpmID0gZGVjb2RlX3dpbmRvd19zeXN0ZW1fZnJhbWUgKGZyYW1lKTsKICAg RGlzcGxheSAqZHB5ID0gRlJBTUVfWF9ESVNQTEFZIChmKTsKIAogICBibG9ja19pbnB1dCAo KTsKQEAgLTM1MTYsNyArMzQ4MCw3IEBACiAgIChMaXNwX09iamVjdCBjb2xvciwgTGlzcF9P YmplY3QgZnJhbWUpCiB7CiAgIFhDb2xvciBmb287Ci0gIEZSQU1FX1BUUiBmID0gY2hlY2tf eF9mcmFtZSAoZnJhbWUpOworICBGUkFNRV9QVFIgZiA9IGRlY29kZV93aW5kb3dfc3lzdGVt X2ZyYW1lIChmcmFtZSk7CiAKICAgQ0hFQ0tfU1RSSU5HIChjb2xvcik7CiAKQEAgLTM1MzEs NyArMzQ5NSw3IEBACiAgIChMaXNwX09iamVjdCBjb2xvciwgTGlzcF9PYmplY3QgZnJhbWUp CiB7CiAgIFhDb2xvciBmb287Ci0gIEZSQU1FX1BUUiBmID0gY2hlY2tfeF9mcmFtZSAoZnJh bWUpOworICBGUkFNRV9QVFIgZiA9IGRlY29kZV93aW5kb3dfc3lzdGVtX2ZyYW1lIChmcmFt ZSk7CiAKICAgQ0hFQ0tfU1RSSU5HIChjb2xvcik7CiAKQEAgLTM5OTYsNyArMzk2MCw2IEBA CiAgIGlmIChkcHlpbmZvID09IDApCiAgICAgZXJyb3IgKCJDYW5ub3QgY29ubmVjdCB0byBY IHNlcnZlciAlcyIsIFNEQVRBIChuYW1lKSk7CiAKLSAgeF9pbl91c2UgPSAxOwogICBYU0VU RkFTVElOVCAoVndpbmRvd19zeXN0ZW1fdmVyc2lvbiwgMTEpOwogCiAgIHJldHVybiBkcHlp bmZvOwpAQCAtNDA1MCw4ICs0MDEzLDYgQEAKIAllcnJvciAoIkNhbm5vdCBjb25uZWN0IHRv IFggc2VydmVyICVzIiwgU0RBVEEgKGRpc3BsYXkpKTsKICAgICB9CiAKLSAgeF9pbl91c2Ug PSAxOwotCiAgIFhTRVRGQVNUSU5UIChWd2luZG93X3N5c3RlbV92ZXJzaW9uLCAxMSk7CiAg IHJldHVybiBRbmlsOwogfQpAQCAtNDE0Myw3ICs0MTA0LDcgQEAKICAgKExpc3BfT2JqZWN0 IHByb3AsIExpc3BfT2JqZWN0IHZhbHVlLCBMaXNwX09iamVjdCBmcmFtZSwKICAgIExpc3Bf T2JqZWN0IHR5cGUsIExpc3BfT2JqZWN0IGZvcm1hdCwgTGlzcF9PYmplY3Qgb3V0ZXJfcCkK IHsKLSAgc3RydWN0IGZyYW1lICpmID0gY2hlY2tfeF9mcmFtZSAoZnJhbWUpOworICBzdHJ1 Y3QgZnJhbWUgKmYgPSBkZWNvZGVfd2luZG93X3N5c3RlbV9mcmFtZSAoZnJhbWUpOwogICBB dG9tIHByb3BfYXRvbTsKICAgQXRvbSB0YXJnZXRfdHlwZSA9IFhBX1NUUklORzsKICAgaW50 IGVsZW1lbnRfZm9ybWF0ID0gODsKQEAgLTQyMjEsNyArNDE4Miw3IEBACiBGUkFNRSBuaWwg b3Igb21pdHRlZCBtZWFucyB1c2UgdGhlIHNlbGVjdGVkIGZyYW1lLiAgVmFsdWUgaXMgUFJP UC4gICovKQogICAoTGlzcF9PYmplY3QgcHJvcCwgTGlzcF9PYmplY3QgZnJhbWUpCiB7Ci0g IHN0cnVjdCBmcmFtZSAqZiA9IGNoZWNrX3hfZnJhbWUgKGZyYW1lKTsKKyAgc3RydWN0IGZy YW1lICpmID0gZGVjb2RlX3dpbmRvd19zeXN0ZW1fZnJhbWUgKGZyYW1lKTsKICAgQXRvbSBw cm9wX2F0b207CiAKICAgQ0hFQ0tfU1RSSU5HIChwcm9wKTsKQEAgLTQyNTcsNyArNDIxOCw3 IEBACiAgIChMaXNwX09iamVjdCBwcm9wLCBMaXNwX09iamVjdCBmcmFtZSwgTGlzcF9PYmpl Y3QgdHlwZSwKICAgIExpc3BfT2JqZWN0IHNvdXJjZSwgTGlzcF9PYmplY3QgZGVsZXRlX3As IExpc3BfT2JqZWN0IHZlY3Rvcl9yZXRfcCkKIHsKLSAgc3RydWN0IGZyYW1lICpmID0gY2hl Y2tfeF9mcmFtZSAoZnJhbWUpOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBkZWNvZGVfd2luZG93 X3N5c3RlbV9mcmFtZSAoZnJhbWUpOwogICBBdG9tIHByb3BfYXRvbTsKICAgaW50IHJjOwog ICBMaXNwX09iamVjdCBwcm9wX3ZhbHVlID0gUW5pbDsKQEAgLTQ1MjUsOCArNDQ4Niw2IEBA CiAgIExpc3BfT2JqZWN0IGJ1ZmZlcjsKICAgc3RydWN0IGJ1ZmZlciAqb2xkX2J1ZmZlcjsK IAotICBjaGVja193aW5kb3dfc3lzdGVtICgpOwotCiAgIGlmICghZHB5aW5mby0+dGVybWlu YWwtPm5hbWUpCiAgICAgZXJyb3IgKCJUZXJtaW5hbCBpcyBub3QgbGl2ZSwgY2FuJ3QgY3Jl YXRlIG5ldyBmcmFtZXMgb24gaXQiKTsKIApAQCAtNDkyMyw3ICs0ODgyLDcgQEAKICAgaWYg KFNDSEFSUyAoc3RyaW5nKSA9PSAwKQogICAgIHN0cmluZyA9IG1ha2VfdW5pYnl0ZV9zdHJp bmcgKCIgIiwgMSk7CiAKLSAgZiA9IGNoZWNrX3hfZnJhbWUgKGZyYW1lKTsKKyAgZiA9IGRl Y29kZV93aW5kb3dfc3lzdGVtX2ZyYW1lIChmcmFtZSk7CiAgIGlmIChOSUxQICh0aW1lb3V0 KSkKICAgICB0aW1lb3V0ID0gbWFrZV9udW1iZXIgKDUpOwogICBlbHNlCkBAIC01MjQ2LDcg KzUyMDUsNyBAQAogI2lmZGVmIFVTRV9HVEsKICAgaWYgKHVzZV9kaWFsb2dfYm94CiAgICAg ICAmJiB1c2VfZmlsZV9kaWFsb2cKLSAgICAgICYmIGhhdmVfbWVudXNfcCAoKQorICAgICAg JiYgd2luZG93X3N5c3RlbV9hdmFpbGFibGUgKFNFTEVDVEVEX0ZSQU1FICgpKQogICAgICAg JiYgeGdfdXNlc19vbGRfZmlsZV9kaWFsb2cgKCkpCiAgICAgcmV0dXJuIFF0OwogI2VuZGlm CkBAIC01MzE2LDcgKzUyNzUsNyBAQAogICBwdHJkaWZmX3QgY291bnQgPSBTUEVDUERMX0lO REVYICgpOwogICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xLCBnY3BybzIsIGdjcHJvMywgZ2Nwcm80 LCBnY3BybzUsIGdjcHJvNjsKIAotICBjaGVja193aW5kb3dfc3lzdGVtICgpOworICBjaGVj a193aW5kb3dfc3lzdGVtIChmKTsKIAogICBHQ1BSTzYgKHByb21wdCwgZGlyLCBkZWZhdWx0 X2ZpbGVuYW1lLCBtdXN0bWF0Y2gsIG9ubHlfZGlyX3AsIGZpbGUpOwogCkBAIC01NDg2LDcg KzU0NDUsNyBAQAogICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xLCBnY3BybzIsIGdjcHJvMywgZ2Nw cm80LCBnY3BybzUsIGdjcHJvNjsKICAgY2hhciAqY2RlZl9maWxlOwogCi0gIGNoZWNrX3dp bmRvd19zeXN0ZW0gKCk7CisgIGNoZWNrX3dpbmRvd19zeXN0ZW0gKGYpOwogCiAgIEdDUFJP NiAocHJvbXB0LCBkaXIsIGRlZmF1bHRfZmlsZW5hbWUsIG11c3RtYXRjaCwgb25seV9kaXJf cCwgZmlsZSk7CiAKQEAgLTU1NDEsMTUgKzU1MDAsMTMgQEAKIG5pbCwgaXQgZGVmYXVsdHMg dG8gdGhlIHNlbGVjdGVkIGZyYW1lLiAqLykKICAgKExpc3BfT2JqZWN0IGZyYW1lLCBMaXNw X09iamVjdCBpZ25vcmVkKQogewotICBGUkFNRV9QVFIgZiA9IGNoZWNrX3hfZnJhbWUgKGZy YW1lKTsKKyAgRlJBTUVfUFRSIGYgPSBkZWNvZGVfd2luZG93X3N5c3RlbV9mcmFtZSAoZnJh bWUpOwogICBMaXNwX09iamVjdCBmb250OwogICBMaXNwX09iamVjdCBmb250X3BhcmFtOwog ICBjaGFyICpkZWZhdWx0X25hbWUgPSBOVUxMOwogICBzdHJ1Y3QgZ2Nwcm8gZ2Nwcm8xLCBn Y3BybzI7CiAgIHB0cmRpZmZfdCBjb3VudCA9IFNQRUNQRExfSU5ERVggKCk7CiAKLSAgY2hl Y2tfd2luZG93X3N5c3RlbSAoKTsKLQogICBpZiAocG9wdXBfYWN0aXZhdGVkICgpKQogICAg IGVycm9yICgiVHJ5aW5nIHRvIHVzZSBhIG1lbnUgZnJvbSB3aXRoaW4gYSBtZW51LWVudHJ5 Iik7CiAKQEAgLTU2MDksNyArNTU2Niw3IEBACiAgIHJldHVybiBRbGFtYmRhOwogI2Vsc2UK ICAgWGtiRGVzY1B0ciBrYjsKLSAgc3RydWN0IGZyYW1lICpmID0gY2hlY2tfeF9mcmFtZSAo ZnJhbWUpOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBkZWNvZGVfd2luZG93X3N5c3RlbV9mcmFt ZSAoZnJhbWUpOwogICBEaXNwbGF5ICpkcHkgPSBGUkFNRV9YX0RJU1BMQVkgKGYpOwogICBM aXNwX09iamVjdCBoYXZlX2tleXM7CiAgIGludCBtYWpvciwgbWlub3IsIG9wLCBldmVudCwg ZXJyb3JfY29kZTsKQEAgLTU3MzcsOSArNTY5NCw2IEBACiB2b2lkCiBzeW1zX29mX3hmbnMg KHZvaWQpCiB7Ci0gIC8qIFRoaXMgaXMgemVybyBpZiBub3QgdXNpbmcgWCB3aW5kb3dzLiAg Ki8KLSAgeF9pbl91c2UgPSAwOwotCiAgIC8qIFRoZSBzZWN0aW9uIGJlbG93IGlzIGJ1aWx0 IGJ5IHRoZSBsaXNwIGV4cHJlc3Npb24gYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSwKICAgICAg anVzdCBhYm92ZSB3aGVyZSB0aGVzZSB2YXJpYWJsZXMgYXJlIGRlY2xhcmVkLiAgKi8KICAg LyomJiYgaW5pdCBzeW1ib2xzIGhlcmUgJiYmKi8KCj09PSBtb2RpZmllZCBmaWxlICdzcmMv eGdzZWxlY3QuYycKLS0tIHNyYy94Z3NlbGVjdC5jCTIwMTMtMDMtMDUgMDc6MTA6NTUgKzAw MDAKKysrIHNyYy94Z3NlbGVjdC5jCTIwMTMtMDQtMDYgMDU6NTQ6NDMgKzAwMDAKQEAgLTI2 LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNp bmNsdWRlICJ4dGVybS5oIgorI2luY2x1ZGUgImZyYW1lLmgiCiAKIGludAogeGdfc2VsZWN0 IChpbnQgZmRzX2xpbSwgU0VMRUNUX1RZUEUgKnJmZHMsIFNFTEVDVF9UWVBFICp3ZmRzLCBT RUxFQ1RfVFlQRSAqZWZkcywKQEAgLTQzLDcgKzQ0LDcgQEAKICAgaW50IGksIG5mZHMsIHRt b19pbl9taWxsaXNlYzsKICAgVVNFX1NBRkVfQUxMT0NBOwogCi0gIGlmICghICh4X2luX3Vz ZQorICBpZiAoISAod2luZG93X3N5c3RlbV9hdmFpbGFibGUgKE5VTEwpCiAJICYmIGdfbWFp bl9jb250ZXh0X3BlbmRpbmcgKGNvbnRleHQgPSBnX21haW5fY29udGV4dF9kZWZhdWx0ICgp KSkpCiAgICAgcmV0dXJuIHBzZWxlY3QgKGZkc19saW0sIHJmZHMsIHdmZHMsIGVmZHMsIHRp bWVvdXQsIHNpZ21hc2spOwogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3htZW51LmMnCi0t LSBzcmMveG1lbnUuYwkyMDEzLTA0LTA1IDE0OjA3OjAyICswMDAwCisrKyBzcmMveG1lbnUu YwkyMDEzLTA0LTA2IDA1OjU0OjQzICswMDAwCkBAIC0yMjMsOCArMjIzLDYgQEAKICAgRlJB TUVfUFRSIGYgPSBOVUxMOwogICBMaXNwX09iamVjdCB3aW5kb3c7CiAKLSAgY2hlY2tfd2lu ZG93X3N5c3RlbSAoKTsKLQogICAvKiBEZWNvZGUgdGhlIGZpcnN0IGFyZ3VtZW50OiBmaW5k IHRoZSB3aW5kb3cgb3IgZnJhbWUgdG8gdXNlLiAgKi8KICAgaWYgKEVRIChwb3NpdGlvbiwg UXQpCiAgICAgICB8fCAoQ09OU1AgKHBvc2l0aW9uKSAmJiAoRVEgKFhDQVIgKHBvc2l0aW9u KSwgUW1lbnVfYmFyKQpAQCAtMjc3LDggKzI3NSw3IEBACiAgICAgICAgYnV0IEkgZG9uJ3Qg d2FudCB0byBtYWtlIG9uZSBub3cuICAqLwogICAgIENIRUNLX1dJTkRPVyAod2luZG93KTsK IAotICBpZiAoISBGUkFNRV9YX1AgKGYpICYmICEgRlJBTUVfTVNET1NfUCAoZikpCi0gICAg ZXJyb3IgKCJDYW4gbm90IHB1dCBYIGRpYWxvZyBvbiB0aGlzIHRlcm1pbmFsIik7CisgIGNo ZWNrX3dpbmRvd19zeXN0ZW0gKGYpOwogCiAgIC8qIEZvcmNlIGEgcmVkaXNwbGF5IGJlZm9y ZSBzaG93aW5nIHRoZSBkaWFsb2cuICBJZiBhIGZyYW1lIGlzIGNyZWF0ZWQKICAgICAganVz dCBiZWZvcmUgc2hvd2luZyB0aGUgZGlhbG9nLCBpdHMgY29udGVudHMgbWF5IG5vdCBoYXZl IGJlZW4gZnVsbHkKQEAgLTQ4NSw3ICs0ODIsNyBAQAogICAoTGlzcF9PYmplY3QgZnJhbWUp CiB7CiAgIFhFdmVudCBldjsKLSAgRlJBTUVfUFRSIGYgPSBjaGVja194X2ZyYW1lIChmcmFt ZSk7CisgIEZSQU1FX1BUUiBmID0gZGVjb2RlX3dpbmRvd19zeXN0ZW1fZnJhbWUgKGZyYW1l KTsKICAgV2lkZ2V0IG1lbnViYXI7CiAgIGJsb2NrX2lucHV0ICgpOwogCkBAIC01NjksNyAr NTY2LDcgQEAKICAgICAgYmxvY2tfaW5wdXQgKCkuICAqLwogCiAgIGJsb2NrX2lucHV0ICgp OwotICBmID0gY2hlY2tfeF9mcmFtZSAoZnJhbWUpOworICBmID0gZGVjb2RlX3dpbmRvd19z eXN0ZW1fZnJhbWUgKGZyYW1lKTsKIAogICBpZiAoRlJBTUVfRVhURVJOQUxfTUVOVV9CQVIg KGYpKQogICAgIHNldF9mcmFtZV9tZW51YmFyIChmLCAwLCAxKTsKCj09PSBtb2RpZmllZCBm aWxlICdzcmMveHNlbGVjdC5jJwotLS0gc3JjL3hzZWxlY3QuYwkyMDEzLTAzLTI0IDEyOjU5 OjQ1ICswMDAwCisrKyBzcmMveHNlbGVjdC5jCTIwMTMtMDQtMDYgMDU6NTQ6NDMgKzAwMDAK QEAgLTI0NTAsNyArMjQ1MCw3IEBACiBJZiB0aGUgdmFsdWUgaXMgMCBvciB0aGUgYXRvbSBp cyBub3Qga25vd24sIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLiAgKi8pCiAgIChMaXNwX09i amVjdCB2YWx1ZSwgTGlzcF9PYmplY3QgZnJhbWUpCiB7Ci0gIHN0cnVjdCBmcmFtZSAqZiA9 IGNoZWNrX3hfZnJhbWUgKGZyYW1lKTsKKyAgc3RydWN0IGZyYW1lICpmID0gZGVjb2RlX3dp bmRvd19zeXN0ZW1fZnJhbWUgKGZyYW1lKTsKICAgY2hhciAqbmFtZSA9IDA7CiAgIGNoYXIg ZW1wdHlbXSA9ICIiOwogICBMaXNwX09iamVjdCByZXQgPSBRbmlsOwpAQCAtMjQ4NSw3ICsy NDg1LDcgQEAKICAgKExpc3BfT2JqZWN0IGF0b20sIExpc3BfT2JqZWN0IGZyYW1lKQogewog ICBBdG9tIHhfYXRvbTsKLSAgc3RydWN0IGZyYW1lICpmID0gY2hlY2tfeF9mcmFtZSAoZnJh bWUpOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBkZWNvZGVfd2luZG93X3N5c3RlbV9mcmFtZSAo ZnJhbWUpOwogICBwdHJkaWZmX3QgaTsKICAgc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlp bmZvID0gRlJBTUVfWF9ESVNQTEFZX0lORk8gKGYpOwogCkBAIC0yNjE4LDcgKzI2MTgsNyBA QAogICBzdHJ1Y3QgeF9kaXNwbGF5X2luZm8gKmRweWluZm8gPSBjaGVja194X2Rpc3BsYXlf aW5mbyAoZGlzcGxheSk7CiAgIFdpbmRvdyB3ZGVzdDsKICAgWEV2ZW50IGV2ZW50OwotICBz dHJ1Y3QgZnJhbWUgKmYgPSBjaGVja194X2ZyYW1lIChmcm9tKTsKKyAgc3RydWN0IGZyYW1l ICpmID0gZGVjb2RlX3dpbmRvd19zeXN0ZW1fZnJhbWUgKGZyb20pOwogICBpbnQgdG9fcm9v dDsKIAogICBDSEVDS19OVU1CRVIgKGZvcm1hdCk7CkBAIC0yNjM1LDcgKzI2MzUsNyBAQAog CiAgIGlmIChGUkFNRVAgKGRlc3QpIHx8IE5JTFAgKGRlc3QpKQogICAgIHsKLSAgICAgIHN0 cnVjdCBmcmFtZSAqZmRlc3QgPSBjaGVja194X2ZyYW1lIChkZXN0KTsKKyAgICAgIHN0cnVj dCBmcmFtZSAqZmRlc3QgPSBkZWNvZGVfd2luZG93X3N5c3RlbV9mcmFtZSAoZGVzdCk7CiAg ICAgICB3ZGVzdCA9IEZSQU1FX09VVEVSX1dJTkRPVyAoZmRlc3QpOwogICAgIH0KICAgZWxz ZSBpZiAoU1RSSU5HUCAoZGVzdCkpCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3h0ZXJtLmgn Ci0tLSBzcmMveHRlcm0uaAkyMDEzLTA0LTA1IDE0OjA3OjAyICswMDAwCisrKyBzcmMveHRl cm0uaAkyMDEzLTA0LTA2IDA1OjUzOjMyICswMDAwCkBAIC05MjMsNyArOTIzLDYgQEAKIAog LyogRnJvbSB4Zm5zLmMuICAqLwogCi1zdHJ1Y3QgZnJhbWUgKmNoZWNrX3hfZnJhbWUgKExp c3BfT2JqZWN0KTsKIGV4dGVybiB2b2lkIHhfZnJlZV9nY3MgKHN0cnVjdCBmcmFtZSAqKTsK IAogLyogRnJvbSB4cmRiLmMuICAqLwpAQCAtMTAwOCw3ICsxMDA3LDYgQEAKIAogZXh0ZXJu IHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqIGNoZWNrX3hfZGlzcGxheV9pbmZvIChMaXNwX09i amVjdCk7CiBleHRlcm4gTGlzcF9PYmplY3QgeF9nZXRfZm9jdXNfZnJhbWUgKHN0cnVjdCBm cmFtZSAqKTsKLWV4dGVybiBpbnQgeF9pbl91c2U7CiAKICNpZmRlZiBVU0VfR1RLCiBleHRl cm4gaW50IHhnX3NldF9pY29uIChzdHJ1Y3QgZnJhbWUgKiwgTGlzcF9PYmplY3QpOwoK --------------010005070208090701060401--