From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#11935: XINT etc. should be functions Date: Thu, 06 Jun 2013 08:56:39 -0700 Message-ID: <51B0B137.5020705@cs.ucla.edu> References: <500039B7.8050106@cs.ucla.edu> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050709090604060200090702" X-Trace: ger.gmane.org 1370534302 17745 80.91.229.3 (6 Jun 2013 15:58:22 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 6 Jun 2013 15:58:22 +0000 (UTC) To: 11935@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Jun 06 17:58:22 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1UkcZv-0001xr-Qm for geb-bug-gnu-emacs@m.gmane.org; Thu, 06 Jun 2013 17:58:20 +0200 Original-Received: from localhost ([::1]:44547 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UkcZv-0008Qs-CU for geb-bug-gnu-emacs@m.gmane.org; Thu, 06 Jun 2013 11:58:19 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:53406) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UkcZg-0008F9-6L for bug-gnu-emacs@gnu.org; Thu, 06 Jun 2013 11:58:15 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UkcZV-0004yj-7d for bug-gnu-emacs@gnu.org; Thu, 06 Jun 2013 11:58:04 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:37941) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UkcZV-0004yQ-2T for bug-gnu-emacs@gnu.org; Thu, 06 Jun 2013 11:57:53 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1Ukcba-0006Hu-6k for bug-gnu-emacs@gnu.org; Thu, 06 Jun 2013 12:00:02 -0400 X-Loop: help-debbugs@gnu.org In-Reply-To: <500039B7.8050106@cs.ucla.edu> Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 06 Jun 2013 16:00:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 11935 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 11935-submit@debbugs.gnu.org id=B11935.137053435024053 (code B ref 11935); Thu, 06 Jun 2013 16:00:02 +0000 Original-Received: (at 11935) by debbugs.gnu.org; 6 Jun 2013 15:59:10 +0000 Original-Received: from localhost ([127.0.0.1]:54532 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Ukcaj-0006Fu-Qc for submit@debbugs.gnu.org; Thu, 06 Jun 2013 11:59:10 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:35723) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1Ukcag-0006FF-Ob for 11935@debbugs.gnu.org; Thu, 06 Jun 2013 11:59:07 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 0ECCD39E8106 for <11935@debbugs.gnu.org>; Thu, 6 Jun 2013 08:56:51 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id CggqubvYdOZM for <11935@debbugs.gnu.org>; Thu, 6 Jun 2013 08:56:46 -0700 (PDT) Original-Received: from penguin.cs.ucla.edu (Penguin.CS.UCLA.EDU [131.179.64.200]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id AF66939E8100 for <11935@debbugs.gnu.org>; Thu, 6 Jun 2013 08:56:46 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130514 Thunderbird/17.0.6 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:74840 Archived-At: This is a multi-part message in MIME format. --------------050709090604060200090702 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Attached is an updated version of this patch, relative to the current trunk (bzr 112869). Since the last version of the patch we've added several inline functions to lisp.h, such as specpdl_symbol, make_lisp_proc, SAVE_VALUEP, and I've merged them all in. I'd like to apply this soon. --------------050709090604060200090702 Content-Type: text/plain; charset=us-ascii; name="inline4.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="inline4.txt" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEzLTA2LTAz IDE5OjM4OjA2ICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMy0wNi0wNiAxNTo0MDoxNCArMDAw MApAQCAtMSwzICsxLDkgQEAKKzIwMTMtMDYtMDYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNz LnVjbGEuZWR1PgorCisJVXNlIGZ1bmN0aW9ucywgbm90IG1hY3JvcywgZm9yIFhJTlQgZXRj LiAoQnVnIzExOTM1KS4KKwkqIGNvbmZpZ3VyZS5hYyAoV0FSTl9DRkxBR1MpOiBSZW1vdmUg LVdiYWQtZnVuY3Rpb24tY2FzdCwKKwlhcyBpdCBnZW5lcmF0ZXMgYm9ndXMgd2FybmluZ3Mg YWJvdXQgcmVhc29uYWJsZSBjYXN0cyBvZiBjYWxscy4KKwogMjAxMy0wNi0wMyAgTWljaGFl bCBBbGJpbnVzICA8bWljaGFlbC5hbGJpbnVzQGdteC5kZT4KIAogCSogY29uZmlndXJlLmFj IChIQVZFX0dGSUxFTk9USUZZKTogQ2hlY2sgZm9yIGdpbyA+PSAyLjI0LgpAQCAtMTgzLDcg KzE4OSw3IEBACiAJYC1XbCwtYnBlLWkzODYnLCB3aGljaCBpcyBjb25mdXNpbmcgaW4gdGhl IDY0LWJpdCBjYXNlLgogCShCdWcjMTI5OTMpCiAKLTIwMTMtMDQtMDcgIFBhdWwgRWdnZXJ0 ICA8ZWdnZXJ0QGNzLnVjbGEuZWR1PgorMjAxMy0wNC0wNiAgUGF1bCBFZ2dlcnQgIDxlZ2dl cnRAY3MudWNsYS5lZHU+CiAKIAlGaXggLS1lbmFibGUtcHJvZmlsaW5nIGJ1ZyBpbnRyb2R1 Y2VkIGJ5IDIwMTMtMDItMjUgY2hhbmdlIChCdWcjMTM3ODMpLgogCSogY29uZmlndXJlLmFj IChMRF9TV0lUQ0hfU1lTVEVNX1RFTUFDUyk6IEFwcGVuZCAtcGcgaWYgcHJvZmlsaW5nCgo9 PT0gbW9kaWZpZWQgZmlsZSAnY29uZmlndXJlLmFjJwotLS0gY29uZmlndXJlLmFjCTIwMTMt MDYtMDMgMTk6Mzg6MDYgKzAwMDAKKysrIGNvbmZpZ3VyZS5hYwkyMDEzLTA2LTA1IDA0OjM4 OjA0ICswMDAwCkBAIC03NzYsNiArNzc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgc2lnbmVkIG92ZXJmbG93IGhhcyB1bmRlZmluZWQgYmVoYXZpb3IK ICAgbnc9IiRudyAtV3N5bmMtbmFuZCIgICAgICAgICAgICAgICMgaXJyZWxldmFudCBoZXJl LCBhbmQgcHJvdm9rZXMgT2JqQyB3YXJuaW5nCiAgIG53PSIkbncgLVd1bnNhZmUtbG9vcC1v cHRpbWl6YXRpb25zIiAjIE9LIHRvIHN1cHByZXNzIHVuc2FmZSBvcHRpbWl6YXRpb25zCisg IG53PSIkbncgLVdiYWQtZnVuY3Rpb24tY2FzdCIgICAgICAjIFRoZXNlIGNhc3RzIGFyZSBu byB3b3JzZSB0aGFuIG90aGVycy4KIAogICAjIEVtYWNzIGRvZXNuJ3QgY2FyZSBhYm91dCBz aGFkb3dpbmc7IHNlZQogICAjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwv ZW1hY3MtZGlmZnMvMjAxMS0xMS9tc2cwMDI2NS5odG1sPi4KCj09PSBtb2RpZmllZCBmaWxl ICdzcmMvQ2hhbmdlTG9nJwotLS0gc3JjL0NoYW5nZUxvZwkyMDEzLTA2LTA2IDA3OjA0OjM1 ICswMDAwCisrKyBzcmMvQ2hhbmdlTG9nCTIwMTMtMDYtMDYgMTU6NDA6MTQgKzAwMDAKQEAg LTEsNSArMSwxMTUgQEAKIDIwMTMtMDYtMDYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNzLnVj bGEuZWR1PgogCisJVXNlIGZ1bmN0aW9ucywgbm90IG1hY3JvcywgZm9yIFhJTlQgZXRjLiAo QnVnIzExOTM1KS4KKwlJbiBsaXNwLmgsIHByZWZlciBmdW5jdGlvbnMgdG8gZnVuY3Rpb24t bGlrZSBtYWNyb3MsIGFuZAorCWNvbnN0YW50cyB0byBvYmplY3QtbGlrZSBtYWNyb3MsIHdo ZW4gZWl0aGVyIHdpbGwgZG8uICBUaGlzOgorCSAuIHNpbXBsaWZpZXMgdXNlLCBhcyB0aGVy ZSdzIG5vIG1vcmUgbmVlZCB0byB3b3JyeSBhYm91dAorCSAgIGFyZ3VtZW50cycgc2lkZSBl ZmZlY3RzIGJlaW5nIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1lcy4KKwkgLiBtYWtlcyB0aGUg Y29kZSBlYXNpZXIgdG8gZGVidWcgb24gc29tZSBwbGF0Zm9ybXMuCisJKiBhbGxvYy5jIChn ZGJfbWFrZV9lbnVtc192aXNpYmxlKSBbVVNFX0xTQl9UQUddOgorCVJlbW92ZSBlbnVtIGxz Yl9iaXRzOyBubyBsb25nZXIgbmVlZGVkLgorCShhbGxvY2F0ZV9taXNjLCBmcmVlX21pc2Mp OiBEb24ndCB1c2UgWE1JU0NUWVBFIGFzIGFuIGx2YWx1ZS4KKwkqIGJ1ZmZlci5jIChRb3Zl cmxhcCk6CisJKiBkYXRhLmMgKFFzdWJycCk6CisJKiBmbnMuYyAoUWhhc2hfdGFibGVfcCk6 CisJTm93IGV4dGVybiwgc28gbGlzcC5oIGNhbiB1c2UgdGhlc2Ugc3ltYm9scy4KKwkqIGRp c3BleHRlcm4uaDogSW5jbHVkZSBjaGFyYWN0ZXIuaCwgZm9yIE1BWF9DSEFSIGV0Yy4KKwko R0xZUEgsIEdMWVBIX0NIQVIsIEdMWVBIX0ZBQ0UsIFNFVF9HTFlQSF9DSEFSLCBTRVRfR0xZ UEhfRkFDRSkKKwkoU0VUX0dMWVBILCBHTFlQSF9DT0RFX0NIQVIsIEdMWVBIX0NPREVfRkFD RSkKKwkoU0VUX0dMWVBIX0ZST01fR0xZUEhfQ09ERSwgR0xZUEhfTU9ERV9MSU5FX0ZBQ0Us IEdMWVBIX0NIQVJfVkFMSURfUCkKKwkoR0xZUEhfQ09ERV9QKTogTW92ZSBoZXJlIGZyb20g bGlzcC5oLgorCShHTFlQSF9DSEFSLCBHTFlQSF9GQUNFLCBHTFlQSF9DT0RFX0NIQVIsIEdM WVBIX0NPREVfRkFDRSkKKwkoR0xZUEhfQ0hBUl9WQUxJRF9QLCBHTFlQSF9DT0RFX1ApOiBO b3cgZnVuY3Rpb25zLCBub3QgbWFjcm9zLgorCShHTFlQSF9NT0RFX0xJTkVfRkFDRSk6IE5v dyBlbnVtcywgbm90IG1hY3Jvcy4KKwkqIGV2YWwuYyAoRmF1dG9sb2FkKTogQ2FzdCBYVU5U QUcgb3V0cHV0IHRvIGludHB0cl90LCBzaW5jZQorCVhVTlRBRyBub3cgcmV0dXJucyB2b2lk ICouCisJKiBsaXNwLmggKFhMSSwgWElMLCBDSEVDS19MSVNUX0NPTlMsIENIRUNLX05VTUJF UiBDSEVDS19TWU1CT0wpCisJKENIRUNLX1RZUEUsIENPTlNQLCBFUSwgRkxPQVRQLCBJTlRF R0VSUCwgTElTUF9JTlRfVEFHX1AsIE1BUktFUlApCisJKE1JU0NQLCBOSUxQLCBTRVRfU1lN Qk9MX1ZBTCwgU1lNQk9MX0NPTlNUQU5UX1AsIFNZTUJPTF9WQUwsIFNZTUJPTFApCisJKFZF Q1RPUkxJS0VQLCBYQ0FSLCBYQ0RSLCBYQ09OUywgWEhBU0gsIFhQTlRSLCBYU1lNQk9MKToK KwlJZiBjb21waWxpbmcgdmlhIEdDQyB3aXRob3V0IG9wdGltaXphdGlvbiwgaW5saW5lIHRo ZXNlIGZ1bmN0aW9ucworCW1hbnVhbGx5LCBieSBkZWZpbmluZyBtYWNyb3MgaW4gYWRkaXRp b24gdG8gaW5saW5lIGZ1bmN0aW9ucy4KKwlUbyBkaXNhYmxlIHRoaXMsIGNvbXBpbGUgd2l0 aCAtRElOTElOSU5HPTAuCisJKGNoZWNrX2NvbnNfbGlzdCkgWyFHQ19DSEVDS19DT05TX0xJ U1RdOiBMaWtld2lzZS4KKwkobWFrZV9udW1iZXIsIFhGQVNUSU5ULCBYSU5ULCBYVFlQRSwg WFVOVEFHKTogTGlrZXdpc2UsIGJ1dAorCWhhbmQtb3B0aW1pemUgb25seSBpbiB0aGUgVVNF X0xTQl9UQUcgY2FzZSwgYXMgR05VaXNoIGhvc3RzIGRvIHRoYXQuCisJKElOVE1BU0ssIFZB TE1BU0spOiBOb3cgbWFjcm9zLCBzaW5jZSBzdGF0aWMgdmFsdWVzIGNhbm5vdCBiZQorCWFj Y2Vzc2VkIGZyb20gZXh0ZXJuIGlubGluZSBmdW5jdGlvbnMuCisJKFZBTE1BU0spOiBBbHNv IGEgY29uc3RhbnQsIGZvciBiZW5lZml0IG9mIG9sZCBHREIuCisJKExJU1BfSU5UX1RBR19Q LCBYTEksIFhJTCwgWEhBU0gsIFhUWVBFLFhJTlQsIFhGQVNUSU5ULCBYVUlOVCkKKwkobWFr ZV9udW1iZXIsIFhQTlRSLCBYVU5UQUcsIEVRLCBYQ09OUywgWFZFQ1RPUiwgWFNUUklORywg WFNZTUJPTCkKKwkoWEZMT0FULCBYUFJPQ0VTUywgWFdJTkRPVywgWFRFUk1JTkFMLCBYU1VC UiwgWEJVRkZFUiwgWENIQVJfVEFCTEUpCisJKFhTVUJfQ0hBUl9UQUJMRSwgWEJPT0xfVkVD VE9SLCBtYWtlX2xpc3BfcHRyLCBDSEVDS19UWVBFKQorCShDSEVDS19TVFJJTkdfT1JfQlVG RkVSLCBYQ0FSLCBYQ0RSLCBYU0VUQ0FSLCBYU0VUQ0RSLCBDQVIsIENEUikKKwkoQ0FSX1NB RkUsIENEUl9TQUZFLCBTVFJJTkdfTVVMVElCWVRFLCBTREFUQSwgU1NEQVRBLCBTUkVGLCBT U0VUKQorCShTQ0hBUlMsIFNUUklOR19CWVRFUywgU0JZVEVTLCBTVFJJTkdfU0VUX0NIQVJT LCBTVFJJTkdfQ09QWUlOLCBBUkVGKQorCShBU0laRSwgQVNFVCwgQ0hBUl9UQUJMRV9SRUZf QVNDSUksIENIQVJfVEFCTEVfUkVGKQorCShDSEFSX1RBQkxFX1NFVCwgQ0hBUl9UQUJMRV9F WFRSQV9TTE9UUywgU1lNQk9MX1ZBTCwgU1lNQk9MX0FMSUFTKQorCShTWU1CT0xfQkxWLCBT WU1CT0xfRldELCBTRVRfU1lNQk9MX1ZBTCwgU0VUX1NZTUJPTF9BTElBUykKKwkoU0VUX1NZ TUJPTF9CTFYsIFNFVF9TWU1CT0xfRldELCBTWU1CT0xfTkFNRSwgU1lNQk9MX0lOVEVSTkVE X1ApCisJKFNZTUJPTF9JTlRFUk5FRF9JTl9JTklUSUFMX09CQVJSQVlfUCwgU1lNQk9MX0NP TlNUQU5UX1ApCisJKFhIQVNIX1RBQkxFLCBIQVNIX1RBQkxFX1AsIENIRUNLX0hBU0hfVEFC TEUsIEhBU0hfS0VZLCBIQVNIX1ZBTFVFKQorCShIQVNIX05FWFQsIEhBU0hfSEFTSCwgSEFT SF9JTkRFWCwgSEFTSF9UQUJMRV9TSVpFKQorCShYTUlTQywgWE1JU0NBTlksIFhNQVJLRVIs IFhPVkVSTEFZLCBYU0FWRV9WQUxVRSwgWEZXRFRZUEUpCisJKFhJTlRGV0QsIFhCT09MRldE LCBYT0JKRldELCBYQlVGRkVSX09CSkZXRCwgWEtCT0FSRF9PQkpGV0QpCisJKFhGTE9BVF9E QVRBLCBYRkxPQVRfSU5JVCwgTklMUCwgTlVNQkVSUCwgTkFUTlVNUCkKKwkoUkFOR0VEX0lO VEVHRVJQLCBDT05TUCwgRkxPQVRQLCBNSVNDUCwgU1RSSU5HUCwgU1lNQk9MUCkKKwkoSU5U RUdFUlAsIFZFQ1RPUkxJS0VQLCBWRUNUT1JQLCBPVkVSTEFZUCkKKwkoTUFSS0VSUCwgU0FW RV9WQUxVRVAsIEFVVE9MT0FEUCwgSU5URldEUCwgQk9PTEZXRFAsIE9CSkZXRFApCisJKEJV RkZFUl9PQkpGV0RQLCBLQk9BUkRfT0JKRldEUCwgUFNFVURPVkVDVE9SX1RZUEVQKQorCShQ U0VVRE9WRUNUT1JQLCBXSU5ET1dfQ09ORklHVVJBVElPTlAsIFBST0NFU1NQLCBXSU5ET1dQ KQorCShURVJNSU5BTFAsIFNVQlJQLCBDT01QSUxFRFAsIEJVRkZFUlAsIENIQVJfVEFCTEVf UCkKKwkoU1VCX0NIQVJfVEFCTEVfUCwgQk9PTF9WRUNUT1JfUCwgRlJBTUVQLCBJTUFHRVAs IEFSUkFZUCkKKwkoQ0hFQ0tfTElTVCwgQ0hFQ0tfTElTVF9DT05TLCBDSEVDS19MSVNUX0VO RCwgQ0hFQ0tfU1RSSU5HKQorCShDSEVDS19TVFJJTkdfQ0FSLCBDSEVDS19DT05TLCBDSEVD S19TWU1CT0wsIENIRUNLX0NIQVJfVEFCTEUpCisJKENIRUNLX1ZFQ1RPUiwgQ0hFQ0tfVkVD VE9SX09SX1NUUklORywgQ0hFQ0tfQVJSQVkpCisJKENIRUNLX1ZFQ1RPUl9PUl9DSEFSX1RB QkxFLCBDSEVDS19CVUZGRVIsIENIRUNLX1dJTkRPVykKKwkoQ0hFQ0tfV0lORE9XX0NPTkZJ R1VSQVRJT04sIENIRUNLX1BST0NFU1MsIENIRUNLX1NVQlIpCisJKENIRUNLX05VTUJFUiwg Q0hFQ0tfTkFUTlVNLCBDSEVDS19NQVJLRVIsIFhGTE9BVElOVCkKKwkoQ0hFQ0tfRkxPQVQs IENIRUNLX05VTUJFUl9PUl9GTE9BVCwgQ0hFQ0tfT1ZFUkxBWSkKKwkoQ0hFQ0tfTlVNQkVS X0NBUiwgQ0hFQ0tfTlVNQkVSX0NEUiwgQ0hFQ0tfTkFUTlVNX0NBUikKKwkoQ0hFQ0tfTkFU TlVNX0NEUiwgRlVOQ1RJT05QLCBTUEVDUERMX0lOREVYLCBMT0FESElTVF9BVFRBQ0gpCisJ Tm93IGZ1bmN0aW9ucy4KKwkoY2hlY2tfY29uc19saXN0KSBbIUdDX0NIRUNLX0NPTlNfTElT VF06IE5ldyBlbXB0eSBmdW5jdGlvbi4KKwkoTElTUF9NQUtFX1JWQUxVRSwgVFlQRU1BU0sp OiBSZW1vdmU7IG5vIGxvbmdlciBuZWVkZWQuCisJKFZBTE1BU0spOiBEZWZpbmUgaW4gb25l IHBsYWNlIHJhdGhlciB0aGFuIGluIHR3bywgbWVyZ2luZyB0aGUKKwlVU0VfTFNCX1RBRyBw YXJ0czsgdGhpcyBpcyBzaW1wbGVyLgorCShhcmVmX2FkZHIsIGdjX2FzZXQsIE1PU1RfUE9T SVRJVkVfRklYTlVNLCBNT1NUX05FR0FUSVZFX0ZJWE5VTSkKKwkobWF4LCBtaW4sIHN0cnVj dCBMaXNwX1N0cmluZywgVU5TSUdORURfQ01QLCBBU0NJSV9DSEFSX1ApOgorCU1vdmUgdXAs IHRvIGF2b2lkIHVzZSBiZWZvcmUgZGVmaW5pdGlvbi4KKwlBbHNvIGluY2x1ZGUgImdsb2Jh bHMuaCIgZWFybGllciwgZm9yIHRoZSBzYW1lIHJlYXNvbi4KKwkobWFrZV9uYXRudW0pOiBO ZXcgZnVuY3Rpb24uCisJKFhVTlRBRyk6IE5vdyByZXR1cm5zIHZvaWQgKiwgbm90IGludHB0 cl90LCBhcyB0aGlzIG1lYW5zIGZld2VyIGNhc3RzLgorCSh1bmlvbiBMaXNwX0Z3ZCwgQk9P TEZXRFAsIEJPT0xfVkVDVE9SX1AsIEJVRkZFUl9PQkpGV0RQLCBCVUZGRVJQKQorCShDSEFS X1RBQkxFX1AsIENIQVJfVEFCTEVfUkVGX0FTQ0lJLCBDT05TUCwgRkxPQVRQLCBJTlRFR0VS UCwgSU5URldEUCkKKwkoS0JPQVJEX09CSkZXRFAsIE1BUktFUlAsIE1JU0NQLCBOSUxQLCBP QkpGV0RQLCBPVkVSTEFZUCwgUFJPQ0VTU1ApCisJKFBTRVVET1ZFQ1RPUlAsIFNBVkVfVkFM VUVQLCBTVFJJTkdQLCBTVUJfQ0hBUl9UQUJMRV9QLCBTVUJSUCwgU1lNQk9MUCkKKwkoVkVD VE9STElLRVAsIFdJTkRPV1AsIFFvdmVybGF5cCwgY2hhcl90YWJsZV9yZWYsIGNoYXJfdGFi bGVfc2V0KQorCShjaGFyX3RhYmxlX3RyYW5zbGF0ZSwgUWFycmF5cCwgUWJ1ZmZlcnAsIFFi dWZmZXJfb3Jfc3RyaW5nX3ApCisJKFFjaGFyX3RhYmxlX3AsIFFjb25zcCwgUWZsb2F0cCwg UWludGVnZXJwLCBRbGFtYmRhLCBRbGlzdHAsIFFtYXJrZXJwKQorCShRbmlsLCBRbnVtYmVy cCwgUXN1YnJwLCBRc3RyaW5ncCwgUXN5bWJvbHAsIFF2ZWN0b3JwKQorCShRdmVjdG9yX29y X2NoYXJfdGFibGVfcCwgUXdob2xlbnVtcCwgRmZib3VuZHAsIHdyb25nX3R5cGVfYXJndW1l bnQpCisJKGluaXRpYWxpemVkLCBRaGFzaF90YWJsZV9wLCBleHRyYWN0X2Zsb2F0LCBRcHJv Y2Vzc3AsIFF3aW5kb3dwKQorCShRd2luZG93X2NvbmZpZ3VyYXRpb25fcCwgUWltYWdlKTog TmV3IGZvcndhcmQgZGVjbGFyYXRpb25zLgorCShYU0VURkFTVElOVCk6IFNpbXBsaWZ5IGJ5 IHJld3JpdGluZyBpbiB0ZXJtcyBvZiBtYWtlX25hdG51bS4KKwkoU1RSSU5HX0NPUFlJTik6 IFJlbW92ZTsgdW51c2VkLgorCShYQ0FSX0FTX0xWQUxVRSwgWENEUl9BU19MVkFMVUUpOiBS ZW1vdmUgdGhlc2UgbWFjcm9zLCByZXBsYWNpbmcgd2l0aCAuLi4KKwkoeGNhcl9hZGRyLCB4 Y2RyX2FkZHIpOiBOZXcgZnVuY3Rpb25zLiAgQWxsIHVzZXMgY2hhbmdlZC4KKwkoSUVFRV9G TE9BVElOR19QT0lOVCk6IE5vdyBhIGNvbnN0YW50LCBub3QgYSBtYWNyby4KKwkoR0xZUEgs IEdMWVBIX0NIQVIsIEdMWVBIX0ZBQ0UsIFNFVF9HTFlQSF9DSEFSLCBTRVRfR0xZUEhfRkFD RSkKKwkoU0VUX0dMWVBILCBHTFlQSF9DT0RFX0NIQVIsIEdMWVBIX0NPREVfRkFDRSkKKwko U0VUX0dMWVBIX0ZST01fR0xZUEhfQ09ERSwgR0xZUEhfTU9ERV9MSU5FX0ZBQ0UsIEdMWVBI X0NIQVJfVkFMSURfUCkKKwkoR0xZUEhfQ09ERV9QKTogTW92ZSB0byBkaXNwZXh0ZXJuLmgs IHRvIGF2b2lkIGRlZmluZS1iZWZvcmUtdXNlLgorCShUWVBFX1JBTkdFRF9JTlRFR0VSUCk6 IFNpbXBsaWZ5LgorCShRc3VicnAsIFFoYXNoX3RhYmxlX3AsIFFvdmVybGF5cCk6IE5ldyBl eHRlcm4gZGVjbHMuCisJKHNldGxvY2FsZSwgZml4dXBfbG9jYWxlLCBzeW5jaHJvbml6ZV9z eXN0ZW1fbWVzc2FnZXNfbG9jYWxlKQorCShzeW5jaHJvbml6ZV9zeXN0ZW1fdGltZV9sb2Nh bGUpIFshSEFWRV9TRVRMT0NBTEVdOgorCU5vdyBlbXB0eSBmdW5jdGlvbnMsIG5vdCBtYWNy b3MuCisJKGZ1bmN0aW9ucCk6IFJldHVybiBib29sLCBub3QgaW50LgorCSogd2luZG93LmMg KFF3aW5kb3dfY29uZmlndXJhdGlvbl9wKTogTm93IGV4dGVybiwKKwlzbyB3aW5kb3cuaCBj YW4gdXNlIGl0LgorCSogd2luZG93LmggKFF3aW5kb3dwKTogTW92ZSBkZWNsIGJhY2sgdG8g bGlzcC5oLgorCiAJQSBmZXcgcG9ydGluZyBldGMuIGZpeGVzIGZvciB0aGUgbmV3IGZpbGUg bW9uaXRvciBjb2RlLgogCVNlZSB0aGUgdGhyZWFkIGNvbnRhaW5pbmcKIAk8aHR0cDovL2xp c3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNzLWRldmVsLzIwMTMtMDYvbXNnMDAxMDku aHRtbD4uCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2FsbG9jLmMnCi0tLSBzcmMvYWxsb2Mu YwkyMDEzLTA2LTAzIDA5OjAxOjUzICswMDAwCisrKyBzcmMvYWxsb2MuYwkyMDEzLTA2LTA1 IDA0OjM4OjA0ICswMDAwCkBAIC0zMzA5LDcgKzMzMDksNyBAQAogICAtLXRvdGFsX2ZyZWVf bWFya2VyczsKICAgY29uc2luZ19zaW5jZV9nYyArPSBzaXplb2YgKHVuaW9uIExpc3BfTWlz Yyk7CiAgIG1pc2Nfb2JqZWN0c19jb25zZWQrKzsKLSAgWE1JU0NUWVBFICh2YWwpID0gdHlw ZTsKKyAgWE1JU0NBTlkgKHZhbCktPnR5cGUgPSB0eXBlOwogICBYTUlTQ0FOWSAodmFsKS0+ Z2NtYXJrYml0ID0gMDsKICAgcmV0dXJuIHZhbDsKIH0KQEAgLTMzMTksNyArMzMxOSw3IEBA CiB2b2lkCiBmcmVlX21pc2MgKExpc3BfT2JqZWN0IG1pc2MpCiB7Ci0gIFhNSVNDVFlQRSAo bWlzYykgPSBMaXNwX01pc2NfRnJlZTsKKyAgWE1JU0NBTlkgKG1pc2MpLT50eXBlID0gTGlz cF9NaXNjX0ZyZWU7CiAgIFhNSVNDIChtaXNjKS0+dV9mcmVlLmNoYWluID0gbWFya2VyX2Zy ZWVfbGlzdDsKICAgbWFya2VyX2ZyZWVfbGlzdCA9IFhNSVNDIChtaXNjKTsKICAgY29uc2lu Z19zaW5jZV9nYyAtPSBzaXplb2YgKHVuaW9uIExpc3BfTWlzYyk7CkBAIC01NjQ3LDcgKzU2 NDcsNyBAQAogCXsKIAkgIENPTlNfTUFSSyAoWENPTlMgKHRhaWwpKTsKIAkgIG1hcmtfb2Jq ZWN0IChYQ0FSICh0YWlsKSk7Ci0JICBwcmV2ID0gJlhDRFJfQVNfTFZBTFVFICh0YWlsKTsK KwkgIHByZXYgPSB4Y2RyX2FkZHIgKHRhaWwpOwogCX0KICAgICB9CiAgIG1hcmtfb2JqZWN0 ICh0YWlsKTsKQEAgLTY2ODksOCArNjY4OSw1IEBACiAgIGVudW0gTUFYX0FMTE9DQSBNQVhf QUxMT0NBOwogICBlbnVtIE1vcmVfTGlzcF9CaXRzIE1vcmVfTGlzcF9CaXRzOwogICBlbnVt IHB2ZWNfdHlwZSBwdmVjX3R5cGU7Ci0jaWYgVVNFX0xTQl9UQUcKLSAgZW51bSBsc2JfYml0 cyBsc2JfYml0czsKLSNlbmRpZgogfSBjb25zdCBFWFRFUk5BTExZX1ZJU0lCTEUgZ2RiX21h a2VfZW51bXNfdmlzaWJsZSA9IHswfTsKICNlbmRpZgkvKiBfX0dOVUNfXyAqLwoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9idWZmZXIuYycKLS0tIHNyYy9idWZmZXIuYwkyMDEzLTA1LTA3 IDE0OjEyOjU3ICswMDAwCisrKyBzcmMvYnVmZmVyLmMJMjAxMy0wNi0wNSAwNDozODowNCAr MDAwMApAQCAtMTM0LDcgKzEzNCw3IEBACiAKIHN0YXRpYyBMaXNwX09iamVjdCBRZ2V0X2Zp bGVfYnVmZmVyOwogCi1zdGF0aWMgTGlzcF9PYmplY3QgUW92ZXJsYXlwOworTGlzcF9PYmpl Y3QgUW92ZXJsYXlwOwogCiBMaXNwX09iamVjdCBRcHJpb3JpdHksIFFiZWZvcmVfc3RyaW5n LCBRYWZ0ZXJfc3RyaW5nOwogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2RhdGEuYycKLS0t IHNyYy9kYXRhLmMJMjAxMy0wNi0wMyAxODoyOTozMCArMDAwMAorKysgc3JjL2RhdGEuYwky MDEzLTA2LTA1IDA0OjM4OjA0ICswMDAwCkBAIC03Niw3ICs3Niw4IEBACiBzdGF0aWMgTGlz cF9PYmplY3QgUWNvbXBpbGVkX2Z1bmN0aW9uLCBRZnJhbWU7CiBMaXNwX09iamVjdCBRYnVm ZmVyOwogc3RhdGljIExpc3BfT2JqZWN0IFFjaGFyX3RhYmxlLCBRYm9vbF92ZWN0b3IsIFFo YXNoX3RhYmxlOwotc3RhdGljIExpc3BfT2JqZWN0IFFzdWJycCwgUW1hbnksIFF1bmV2YWxs ZWQ7CitMaXNwX09iamVjdCBRc3VicnA7CitzdGF0aWMgTGlzcF9PYmplY3QgUW1hbnksIFF1 bmV2YWxsZWQ7CiBMaXNwX09iamVjdCBRZm9udF9zcGVjLCBRZm9udF9lbnRpdHksIFFmb250 X29iamVjdDsKIHN0YXRpYyBMaXNwX09iamVjdCBRZGVmdW47CiAKCj09PSBtb2RpZmllZCBm aWxlICdzcmMvZGlzcGV4dGVybi5oJwotLS0gc3JjL2Rpc3BleHRlcm4uaAkyMDEzLTA1LTA0 IDEwOjE5OjEzICswMDAwCisrKyBzcmMvZGlzcGV4dGVybi5oCTIwMTMtMDYtMDUgMDQ6Mzg6 MDQgKzAwMDAKQEAgLTIyLDYgKzIyLDggQEAKICNpZm5kZWYgRElTUEVYVEVSTl9IX0lOQ0xV REVECiAjZGVmaW5lIERJU1BFWFRFUk5fSF9JTkNMVURFRAogCisjaW5jbHVkZSAiY2hhcmFj dGVyLmgiCisKICNpZmRlZiBIQVZFX1hfV0lORE9XUwogCiAjaW5jbHVkZSA8WDExL1hsaWIu aD4KQEAgLTI3MCw2ICsyNzIsNTUgQEAKIAkJCQlHbHlwaHMKICAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KIAorLyogVGhlIGdseXBoIGRhdGF0eXBlLCB1c2VkIHRvIHJlcHJlc2VudCBjaGFyYWN0 ZXJzIG9uIHRoZSBkaXNwbGF5LgorICAgSXQgY29uc2lzdHMgb2YgYSBjaGFyIGNvZGUgYW5k IGEgZmFjZSBpZC4gICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IGNoOworICBpbnQg ZmFjZV9pZDsKK30gR0xZUEg7CisKKy8qIFJldHVybiBhIGdseXBoJ3MgY2hhcmFjdGVyIGNv ZGUuICAqLworRElTUEVYVEVSTl9JTkxJTkUgaW50IEdMWVBIX0NIQVIgKEdMWVBIIGdseXBo KSB7IHJldHVybiBnbHlwaC5jaDsgfQorCisvKiBSZXR1cm4gYSBnbHlwaCdzIGZhY2UgSUQu ICAqLworRElTUEVYVEVSTl9JTkxJTkUgaW50IEdMWVBIX0ZBQ0UgKEdMWVBIIGdseXBoKSB7 IHJldHVybiBnbHlwaC5mYWNlX2lkOyB9CisKKyNkZWZpbmUgU0VUX0dMWVBIX0NIQVIoZ2x5 cGgsIGNoYXIpICgoZ2x5cGgpLmNoID0gKGNoYXIpKQorI2RlZmluZSBTRVRfR0xZUEhfRkFD RShnbHlwaCwgZmFjZSkgKChnbHlwaCkuZmFjZV9pZCA9IChmYWNlKSkKKyNkZWZpbmUgU0VU X0dMWVBIKGdseXBoLCBjaGFyLCBmYWNlKSBcCisgICgoZ2x5cGgpLmNoID0gKGNoYXIpLCAo Z2x5cGgpLmZhY2VfaWQgPSAoZmFjZSkpCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIHZhbGlk IG9ubHkgaWYgR0xZUEhfQ09ERV9QIChnYykuICAqLworCitESVNQRVhURVJOX0lOTElORSBp bnQKK0dMWVBIX0NPREVfQ0hBUiAoTGlzcF9PYmplY3QgZ2MpCit7CisgIHJldHVybiAoQ09O U1AgKGdjKQorCSAgPyBYSU5UIChYQ0FSIChnYykpCisJICA6IFhJTlQgKGdjKSAmIE1BWF9D SEFSKTsKK30KKworRElTUEVYVEVSTl9JTkxJTkUgaW50CitHTFlQSF9DT0RFX0ZBQ0UgKExp c3BfT2JqZWN0IGdjKQoreworICByZXR1cm4gQ09OU1AgKGdjKSA/IFhJTlQgKFhDRFIgKGdj KSkgOiBYSU5UIChnYykgPj4gQ0hBUkFDVEVSQklUUzsKK30KKworI2RlZmluZSBTRVRfR0xZ UEhfRlJPTV9HTFlQSF9DT0RFKGdseXBoLCBnYykJCQkJXAorICBkbwkJCQkJCQkJCVwKKyAg ICB7CQkJCQkJCQkJXAorICAgICAgaWYgKENPTlNQIChnYykpCQkJCQkJCVwKKwlTRVRfR0xZ UEggKGdseXBoLCBYSU5UIChYQ0FSIChnYykpLCBYSU5UIChYQ0RSIChnYykpKTsJCVwKKyAg ICAgIGVsc2UJCQkJCQkJCVwKKwlTRVRfR0xZUEggKGdseXBoLCAoWElOVCAoZ2MpICYgKCgx IDw8IENIQVJBQ1RFUkJJVFMpLTEpKSwJXAorCQkgICAoWElOVCAoZ2MpID4+IENIQVJBQ1RF UkJJVFMpKTsJCQlcCisgICAgfQkJCQkJCQkJCVwKKyAgd2hpbGUgKDApCisKKy8qIFRoZSBJ RCBvZiB0aGUgbW9kZSBsaW5lIGhpZ2hsaWdodGluZyBmYWNlLiAgKi8KK2VudW0geyBHTFlQ SF9NT0RFX0xJTkVfRkFDRSA9IDEgfTsKKwogLyogRW51bWVyYXRpb24gb2YgZ2x5cGggdHlw ZXMuICBHbHlwaCBzdHJ1Y3R1cmVzIGNvbnRhaW4gYSB0eXBlIGZpZWxkCiAgICBjb250YWlu aW5nIG9uZSBvZiB0aGUgZW51bWVyYXRvcnMgZGVmaW5lZCBoZXJlLiAgKi8KIApAQCAtMTc3 NCw2ICsxODI1LDMwIEBACiAKICNlbmRpZiAvKiBub3QgSEFWRV9XSU5ET1dfU1lTVEVNICov CiAKKy8qIFJldHVybiB0cnVlIGlmIEcgY29udGFpbnMgYSB2YWxpZCBjaGFyYWN0ZXIgY29k ZS4gICovCitESVNQRVhURVJOX0lOTElORSBib29sCitHTFlQSF9DSEFSX1ZBTElEX1AgKEdM WVBIIGcpCit7CisgIHJldHVybiBDSEFSX1ZBTElEX1AgKEdMWVBIX0NIQVIgKGcpKTsKK30K KworLyogVGhlIGdseXBoIGNvZGUgZnJvbSBhIGRpc3BsYXkgdmVjdG9yIG1heSBlaXRoZXIg YmUgYW4gaW50ZWdlciB3aGljaAorICAgZW5jb2RlcyBhIGNoYXIgY29kZSBpbiB0aGUgbG93 ZXIgQ0hBUkFDVEVSQklUUyBiaXRzIGFuZCBhICh2ZXJ5IHNtYWxsKQorICAgZmFjZS1pZCBp biB0aGUgdXBwZXIgYml0cywgb3IgaXQgbWF5IGJlIGEgY29ucyAoQ0hBUiAuIEZBQ0UtSUQp LiAgKi8KKworRElTUEVYVEVSTl9JTkxJTkUgYm9vbAorR0xZUEhfQ09ERV9QIChMaXNwX09i amVjdCBnYykKK3sKKyAgcmV0dXJuIChDT05TUCAoZ2MpCisJICA/IChDSEFSQUNURVJQIChY Q0FSIChnYykpCisJICAgICAmJiBSQU5HRURfSU5URUdFUlAgKDAsIFhDRFIgKGdjKSwgTUFY X0ZBQ0VfSUQpKQorCSAgOiAoUkFOR0VEX0lOVEVHRVJQCisJICAgICAoMCwgZ2MsCisJICAg ICAgKE1BWF9GQUNFX0lEIDwgVFlQRV9NQVhJTVVNIChFTUFDU19JTlQpID4+IENIQVJBQ1RF UkJJVFMKKwkgICAgICAgPyAoKEVNQUNTX0lOVCkgTUFYX0ZBQ0VfSUQgPDwgQ0hBUkFDVEVS QklUUykgfCBNQVhfQ0hBUgorCSAgICAgICA6IFRZUEVfTUFYSU1VTSAoRU1BQ1NfSU5UKSkp KSk7Cit9CisKIC8qIE5vbi16ZXJvIG1lYW5zIGZhY2UgYXR0cmlidXRlcyBoYXZlIGJlZW4g Y2hhbmdlZCBzaW5jZSB0aGUgbGFzdAogICAgcmVkaXNwbGF5LiAgVXNlZCBpbiByZWRpc3Bs YXlfaW50ZXJuYWwuICAqLwogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Zucy5jJwotLS0g c3JjL2Zucy5jCTIwMTMtMDQtMDggMTg6MDQ6NTggKzAwMDAKKysrIHNyYy9mbnMuYwkyMDEz LTA2LTA1IDA0OjM4OjA0ICswMDAwCkBAIC0zMzM1LDcgKzMzMzUsOCBAQAogCiAvKiBWYXJp b3VzIHN5bWJvbHMuICAqLwogCi1zdGF0aWMgTGlzcF9PYmplY3QgUWhhc2hfdGFibGVfcCwg UWtleSwgUXZhbHVlLCBRZXFsOworTGlzcF9PYmplY3QgUWhhc2hfdGFibGVfcDsKK3N0YXRp YyBMaXNwX09iamVjdCBRa2V5LCBRdmFsdWUsIFFlcWw7CiBMaXNwX09iamVjdCBRZXEsIFFl cXVhbDsKIExpc3BfT2JqZWN0IFFDdGVzdCwgUUNzaXplLCBRQ3JlaGFzaF9zaXplLCBRQ3Jl aGFzaF90aHJlc2hvbGQsIFFDd2Vha25lc3M7CiBzdGF0aWMgTGlzcF9PYmplY3QgUWhhc2hf dGFibGVfdGVzdCwgUWtleV9vcl92YWx1ZSwgUWtleV9hbmRfdmFsdWU7Cgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL2xpc3AuaCcKLS0tIHNyYy9saXNwLmgJMjAxMy0wNi0wNSAxMjoxNzow MiArMDAwMAorKysgc3JjL2xpc3AuaAkyMDEzLTA2LTA2IDE1OjQ5OjI3ICswMDAwCkBAIC0y MjAsNiArMjIwLDY1IEBACiAjZW5kaWYKIAogCisvKiBXaGVuIGNvbXBpbGluZyB2aWEgR0ND IHdpdGhvdXQgb3B0aW1pemF0aW9uLCBpbmxpbmUgYSBmZXcgZnVuY3Rpb25zCisgICBtYW51 YWxseSwgYXMgRW1hY3MgaXMgdG9vIHNsb3cgb3RoZXJ3aXNlLiAgVGhlcmUncyBubyBuZWVk IHRvCisgICBpbmxpbmUgZXZlcnl0aGluZywganVzdCB0aGUgZnVuY3Rpb25zIHRoYXQgd291 bGQgY2F1c2UgYSBzZXJpb3VzCisgICBwZXJmb3JtYW5jZSBwcm9ibGVtIHdoZW4gZGVidWdn aW5nLiAgVG8gZGlzYWJsZSB0aGlzIGhhbmQtb3B0aW1pemF0aW9uLAorICAgY29tcGlsZSB3 aXRoIC1ESU5MSU5JTkc9MC4KKworICAgQ29tbWVudGFyeSBmb3IgdGhlc2UgbWFjcm9zIGNh biBiZSBmb3VuZCBuZWFyIHRoZWlyIGNvcnJlc3BvbmRpbmcKKyAgIGZ1bmN0aW9ucywgYmVs b3cuICAqLworI2lmIChkZWZpbmVkIF9fTk9fSU5MSU5FX18gXAorICAgICAmJiAhIGRlZmlu ZWQgX19PUFRJTUlaRV9fICYmICEgZGVmaW5lZCBfX09QVElNSVpFX1NJWkVfXyBcCisgICAg ICYmICEgKGRlZmluZWQgSU5MSU5JTkcgJiYgISBJTkxJTklORykpCisjIGlmIENIRUNLX0xJ U1BfT0JKRUNUX1RZUEUKKyMgIGRlZmluZSBYTEkobykgKG8pLmkKKyMgIGRlZmluZSBYSUwo aSkgKExpc3BfT2JqZWN0KSB7IGkgfQorIyBlbHNlCisjICBkZWZpbmUgWExJKG8pIChvKQor IyAgZGVmaW5lIFhJTChpKSAoaSkKKyMgZW5kaWYKKyMgZGVmaW5lIENIRUNLX0xJU1RfQ09O Uyh4LCB5KSBDSEVDS19UWVBFIChDT05TUCAoeCksIFFsaXN0cCwgeSkKKyMgZGVmaW5lIENI RUNLX05VTUJFUih4KSBDSEVDS19UWVBFIChJTlRFR0VSUCAoeCksIFFpbnRlZ2VycCwgeCkK KyMgZGVmaW5lIENIRUNLX1NZTUJPTCh4KSBDSEVDS19UWVBFIChTWU1CT0xQICh4KSwgUXN5 bWJvbHAsIHgpCisjIGRlZmluZSBDSEVDS19UWVBFKG9rLCBReHh4cCwgeCkgXAorICAgICgo dm9pZCkgKChvaykgfHwgd3JvbmdfdHlwZV9hcmd1bWVudCAoUXh4eHAsIHgpKSkKKyMgZGVm aW5lIENPTlNQKHgpIChYVFlQRSAoeCkgPT0gTGlzcF9Db25zKQorIyBkZWZpbmUgRVEoeCwg eSkgKFhMSSAoeCkgPT0gWExJICh5KSkKKyMgZGVmaW5lIEZMT0FUUCh4KSAoWFRZUEUgKHgp ID09IExpc3BfRmxvYXQpCisjIGRlZmluZSBJTlRFR0VSUCh4KSBMSVNQX0lOVF9UQUdfUCAo WFRZUEUgKHgpKQorIyBkZWZpbmUgTElTUF9JTlRfVEFHX1AoeCkgKCgoeCkgJiB+TGlzcF9J bnQxKSA9PSAwKQorIyBkZWZpbmUgTUFSS0VSUCh4KSAoTUlTQ1AgKHgpICYmIFhNSVNDVFlQ RSAoeCkgPT0gTGlzcF9NaXNjX01hcmtlcikKKyMgZGVmaW5lIE1JU0NQKHgpIChYVFlQRSAo eCkgPT0gTGlzcF9NaXNjKQorIyBkZWZpbmUgTklMUCh4KSBFUSAoeCwgUW5pbCkKKyMgZGVm aW5lIFNFVF9TWU1CT0xfVkFMKHN5bSwgdikgXAorICAgIChlYXNzZXJ0ICgoc3ltKS0+cmVk aXJlY3QgPT0gU1lNQk9MX1BMQUlOVkFMKSwgKHN5bSktPnZhbC52YWx1ZSA9ICh2KSkKKyMg ZGVmaW5lIFNZTUJPTF9DT05TVEFOVF9QKHN5bSkgKFhTWU1CT0wgKHN5bSktPmNvbnN0YW50 KQorIyBkZWZpbmUgU1lNQk9MX1ZBTChzeW0pIFwKKyAgICAoZWFzc2VydCAoKHN5bSktPnJl ZGlyZWN0ID09IFNZTUJPTF9QTEFJTlZBTCksIChzeW0pLT52YWwudmFsdWUpKQorIyBkZWZp bmUgU1lNQk9MUCh4KSAoWFRZUEUgKHgpID09IExpc3BfU3ltYm9sKQorIyBkZWZpbmUgVkVD VE9STElLRVAoeCkgKFhUWVBFICh4KSA9PSBMaXNwX1ZlY3Rvcmxpa2UpCisjIGRlZmluZSBY Q0FSKGMpIFhDT05TIChjKS0+Y2FyCisjIGRlZmluZSBYQ0RSKGMpIFhDT05TIChjKS0+dS5j ZHIKKyMgZGVmaW5lIFhDT05TKGEpIFwKKyAgICAoZWFzc2VydCAoQ09OU1AgKGEpKSwgKHN0 cnVjdCBMaXNwX0NvbnMgKikgWFVOVEFHIChhLCBMaXNwX0NvbnMpKQorIyBkZWZpbmUgWEhB U0goYSkgWFVJTlQgKGEpCisjIGRlZmluZSBYUE5UUihhKSAoKHZvaWQgKikgKGludHB0cl90 KSAoKFhMSSAoYSkgJiBWQUxNQVNLKSB8IERBVEFfU0VHX0JJVFMpKQorIyBkZWZpbmUgWFNZ TUJPTChhKSBcCisgICAgKGVhc3NlcnQgKFNZTUJPTFAgKGEpKSwgKHN0cnVjdCBMaXNwX1N5 bWJvbCAqKSBYVU5UQUcgKGEsIExpc3BfU3ltYm9sKSkKKyMgaWZuZGVmIEdDX0NIRUNLX0NP TlNfTElTVAorIyAgZGVmaW5lIGNoZWNrX2NvbnNfbGlzdCgpICgodm9pZCkgMCkKKyMgZW5k aWYKKyMgaWYgVVNFX0xTQl9UQUcKKyMgIGRlZmluZSBtYWtlX251bWJlcihuKSBYSUwgKChF TUFDU19JTlQpIChuKSA8PCBJTlRUWVBFQklUUykKKyMgIGRlZmluZSBYRkFTVElOVChhKSBY SU5UIChhKQorIyAgZGVmaW5lIFhJTlQoYSkgKFhMSSAoYSkgPj4gSU5UVFlQRUJJVFMpCisj ICBkZWZpbmUgWFRZUEUoYSkgKChlbnVtIExpc3BfVHlwZSkgKFhMSSAoYSkgJiB+VkFMTUFT SykpCisjICBkZWZpbmUgWFVOVEFHKGEsIHR5cGUpICgodm9pZCAqKSAoWExJIChhKSAtICh0 eXBlKSkpCisjIGVuZGlmCisjZW5kaWYKKworCiAvKiBEZWZpbmUgdGhlIGZ1bmRhbWVudGFs IExpc3AgZGF0YSBzdHJ1Y3R1cmVzLiAgKi8KIAogLyogVGhpcyBpcyB0aGUgc2V0IG9mIExp c3AgZGF0YSB0eXBlcy4gIElmIHlvdSB3YW50IHRvIGRlZmluZSBhIG5ldwpAQCAtMjMwLDcg KzI4OSw2IEBACiAgICBleHRlbmRpbmcgdGhlaXIgcmFuZ2UgZnJvbSwgZS5nLiwgLTJeMjgu LjJeMjgtMSB0byAtMl4yOS4uMl4yOS0xLiAgKi8KICNkZWZpbmUgSU5UTUFTSyAoRU1BQ1Nf SU5UX01BWCA+PiAoSU5UVFlQRUJJVFMgLSAxKSkKICNkZWZpbmUgY2FzZV9MaXNwX0ludCBj YXNlIExpc3BfSW50MDogY2FzZSBMaXNwX0ludDEKLSNkZWZpbmUgTElTUF9JTlRfVEFHX1Ao eCkgKCgoeCkgJiB+TGlzcF9JbnQxKSA9PSAwKQogCiAvKiBJZGVhIHN0b2xlbiBmcm9tIEdE Qi4gIE1TVkMgZG9lc24ndCBzdXBwb3J0IGVudW1zIGluIGJpdGZpZWxkcywKICAgIGFuZCB4 bGMgY29tcGxhaW5zIHZvY2lmZXJvdXNseSBhYm91dCB0aGVtLiAgKi8KQEAgLTI3MCw2ICsz MjgsOCBAQAogICAgIExpc3BfRmxvYXQgPSA3LAogICB9OwogCitMSVNQX0lOTElORSBib29s IChMSVNQX0lOVF9UQUdfUCkgKGludCB4KSB7IHJldHVybiAoeCAmIH5MaXNwX0ludDEpID09 IDA7IH0KKwogLyogVGhpcyBpcyB0aGUgc2V0IG9mIGRhdGEgdHlwZXMgdGhhdCBzaGFyZSBh IGNvbW1vbiBzdHJ1Y3R1cmUuCiAgICBUaGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1 cmUgaXMgYSB0eXBlIGNvZGUgZnJvbSB0aGlzIHNldC4KICAgIFRoZSBlbnVtIHZhbHVlcyBh cmUgYXJiaXRyYXJ5LCBidXQgd2UnbGwgdXNlIGxhcmdlIG51bWJlcnMgdG8gbWFrZSBpdApA QCAtMzU5LDIwICs0MTksMTUgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgeyBFTUFDU19JTlQgaTsg fSBMaXNwX09iamVjdDsKIAotI2RlZmluZSBYTEkobykgKG8pLmkKK0xJU1BfSU5MSU5FIEVN QUNTX0lOVCAoWExJKSAoTGlzcF9PYmplY3QgbykgeyByZXR1cm4gby5pOyB9CisKIExJU1Bf SU5MSU5FIExpc3BfT2JqZWN0Ci1YSUwgKEVNQUNTX0lOVCBpKQorKFhJTCkgKEVNQUNTX0lO VCBpKQogewogICBMaXNwX09iamVjdCBvID0geyBpIH07CiAgIHJldHVybiBvOwogfQogCi1M SVNQX0lOTElORSBMaXNwX09iamVjdAotTElTUF9NQUtFX1JWQUxVRSAoTGlzcF9PYmplY3Qg bykKLXsKLSAgICByZXR1cm4gbzsKLX0KLQogI2RlZmluZSBMSVNQX0lOSVRJQUxMWV9aRVJP IHswfQogCiAjdW5kZWYgQ0hFQ0tfTElTUF9PQkpFQ1RfVFlQRQpAQCAtMzgyLDkgKzQzNyw4 IEBACiAvKiBJZiBhIHN0cnVjdCB0eXBlIGlzIG5vdCB3YW50ZWQsIGRlZmluZSBMaXNwX09i amVjdCBhcyBqdXN0IGEgbnVtYmVyLiAgKi8KIAogdHlwZWRlZiBFTUFDU19JTlQgTGlzcF9P YmplY3Q7Ci0jZGVmaW5lIFhMSShvKSAobykKLSNkZWZpbmUgWElMKGkpIChpKQotI2RlZmlu ZSBMSVNQX01BS0VfUlZBTFVFKG8pICgwICsgKG8pKQorTElTUF9JTkxJTkUgRU1BQ1NfSU5U IChYTEkpIChMaXNwX09iamVjdCBvKSB7IHJldHVybiBvOyB9CitMSVNQX0lOTElORSBMaXNw X09iamVjdCAoWElMKSAoRU1BQ1NfSU5UIGkpIHsgcmV0dXJuIGk7IH0KICNkZWZpbmUgTElT UF9JTklUSUFMTFlfWkVSTyAwCiBlbnVtIENIRUNLX0xJU1BfT0JKRUNUX1RZUEUgeyBDSEVD S19MSVNQX09CSkVDVF9UWVBFID0gMCB9OwogI2VuZGlmIC8qIENIRUNLX0xJU1BfT0JKRUNU X1RZUEUgKi8KQEAgLTQ2MCw4NCArNTE0LDk2IEBACiAgICAgQk9PTF9WRUNUT1JfQklUU19Q RVJfQ0hBUiA9IDgKICAgfTsKIAwKLS8qIFRoZXNlIG1hY3JvcyBleHRyYWN0IHZhcmlvdXMg c29ydHMgb2YgdmFsdWVzIGZyb20gYSBMaXNwX09iamVjdC4KKy8qIFRoZXNlIGZ1bmN0aW9u cyBleHRyYWN0IHZhcmlvdXMgc29ydHMgb2YgdmFsdWVzIGZyb20gYSBMaXNwX09iamVjdC4K ICBGb3IgZXhhbXBsZSwgaWYgdGVtIGlzIGEgTGlzcF9PYmplY3Qgd2hvc2UgdHlwZSBpcyBM aXNwX0NvbnMsCiAgWENPTlMgKHRlbSkgaXMgdGhlIHN0cnVjdCBMaXNwX0NvbnMgKiBwb2lu dGluZyB0byB0aGUgbWVtb3J5IGZvciB0aGF0IGNvbnMuICAqLwogCi0jaWYgVVNFX0xTQl9U QUcKLQotZW51bSBsc2JfYml0cwotICB7Ci0gICAgVFlQRU1BU0sgPSAoMSA8PCBHQ1RZUEVC SVRTKSAtIDEsCi0gICAgVkFMTUFTSyA9IH4gVFlQRU1BU0sKLSAgfTsKLSNkZWZpbmUgWFRZ UEUoYSkgKChlbnVtIExpc3BfVHlwZSkgKFhMSSAoYSkgJiBUWVBFTUFTSykpCi0jZGVmaW5l IFhJTlQoYSkgKFhMSSAoYSkgPj4gSU5UVFlQRUJJVFMpCi0jZGVmaW5lIFhVSU5UKGEpICgo RU1BQ1NfVUlOVCkgWExJIChhKSA+PiBJTlRUWVBFQklUUykKLSNkZWZpbmUgbWFrZV9udW1i ZXIoTikgWElMICgoRU1BQ1NfSU5UKSAoTikgPDwgSU5UVFlQRUJJVFMpCi0jZGVmaW5lIG1h a2VfbGlzcF9wdHIocHRyLCB0eXBlKSBcCi0gIChlYXNzZXJ0IChYVFlQRSAoWElMICgoaW50 cHRyX3QpIChwdHIpKSkgPT0gMCksIC8qIENoZWNrIGFsaWdubWVudC4gICovICBcCi0gICBY SUwgKCh0eXBlKSB8IChpbnRwdHJfdCkgKHB0cikpKQotCi0jZGVmaW5lIFhQTlRSKGEpICgo aW50cHRyX3QpIChYTEkgKGEpICYgflRZUEVNQVNLKSkKLSNkZWZpbmUgWFVOVEFHKGEsIHR5 cGUpICgoaW50cHRyX3QpIChYTEkgKGEpIC0gKHR5cGUpKSkKLQotI2Vsc2UgIC8qIG5vdCBV U0VfTFNCX1RBRyAqLwotCiBzdGF0aWMgRU1BQ1NfSU5UIGNvbnN0IFZBTE1BU0sKLSNkZWZp bmUgVkFMTUFTSyBWQUxfTUFYCisjZGVmaW5lIFZBTE1BU0sgKFVTRV9MU0JfVEFHID8gLSAo MSA8PCBHQ1RZUEVCSVRTKSA6IFZBTF9NQVgpCiAgICAgICA9IFZBTE1BU0s7CiAKLSNkZWZp bmUgWFRZUEUoYSkgKChlbnVtIExpc3BfVHlwZSkgKChFTUFDU19VSU5UKSBYTEkgKGEpID4+ IFZBTEJJVFMpKQotCi0vKiBGb3IgaW50ZWdlcnMga25vd24gdG8gYmUgcG9zaXRpdmUsIFhG QVNUSU5UIHByb3ZpZGVzIGZhc3QgcmV0cmlldmFsCi0gICBhbmQgWFNFVEZBU1RJTlQgcHJv dmlkZXMgZmFzdCBzdG9yYWdlLiAgVGhpcyB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlCi0gICBm YWN0IHRoYXQgTGlzcCBpbnRlZ2VycyBoYXZlIHplcm8tYml0cyBpbiB0aGVpciB0YWdzLiAg Ki8KLSNkZWZpbmUgWEZBU1RJTlQoYSkgKFhMSSAoYSkgKyAwKQotI2RlZmluZSBYU0VURkFT VElOVChhLCBiKSAoKGEpID0gWElMIChiKSkKLQotLyogRXh0cmFjdCB0aGUgdmFsdWUgb2Yg YSBMaXNwX09iamVjdCBhcyBhICh1bilzaWduZWQgaW50ZWdlci4gICovCi0KLSNkZWZpbmUg WElOVChhKSAoWExJIChhKSA8PCBJTlRUWVBFQklUUyA+PiBJTlRUWVBFQklUUykKLSNkZWZp bmUgWFVJTlQoYSkgKChFTUFDU19VSU5UKSAoWExJIChhKSAmIElOVE1BU0spKQotI2RlZmlu ZSBtYWtlX251bWJlcihOKSBYSUwgKChFTUFDU19JTlQpIChOKSAmIElOVE1BU0spCi0KLSNk ZWZpbmUgbWFrZV9saXNwX3B0cihwdHIsIHR5cGUpIFwKLSAgKFhJTCAoKEVNQUNTX0lOVCkg KChFTUFDU19VSU5UKSAodHlwZSkgPDwgVkFMQklUUykgIFwKLQkrICgoaW50cHRyX3QpIChw dHIpICYgVkFMTUFTSykpKQotCi0vKiBEQVRBX1NFR19CSVRTIGZvcmNlcyBleHRyYSBiaXRz IHRvIGJlIG9yJ2QgaW4gd2l0aCBhbnkgcG9pbnRlcnMKLSAgIHdoaWNoIHdlcmUgc3RvcmVk IGluIGEgTGlzcF9PYmplY3QuICAqLwotI2RlZmluZSBYUE5UUihhKSAoKHVpbnRwdHJfdCkg KChYTEkgKGEpICYgVkFMTUFTSykgfCBEQVRBX1NFR19CSVRTKSkKLQotI2VuZGlmIC8qIG5v dCBVU0VfTFNCX1RBRyAqLworLyogTGFyZ2VzdCBhbmQgc21hbGxlc3QgcmVwcmVzZW50YWJs ZSBmaXhudW0gdmFsdWVzLiAgVGhlc2UgYXJlIHRoZSBDCisgICB2YWx1ZXMuICBUaGV5IGFy ZSBtYWNyb3MgZm9yIHVzZSBpbiBzdGF0aWMgaW5pdGlhbGl6ZXJzLiAgKi8KKyNkZWZpbmUg TU9TVF9QT1NJVElWRV9GSVhOVU0gKEVNQUNTX0lOVF9NQVggPj4gSU5UVFlQRUJJVFMpCisj ZGVmaW5lIE1PU1RfTkVHQVRJVkVfRklYTlVNICgtMSAtIE1PU1RfUE9TSVRJVkVfRklYTlVN KQorCitMSVNQX0lOTElORSBlbnVtIExpc3BfVHlwZQorKFhUWVBFKSAoTGlzcF9PYmplY3Qg YSkKK3sKKyAgRU1BQ1NfVUlOVCBpID0gWExJIChhKTsKKyAgcmV0dXJuIFVTRV9MU0JfVEFH ID8gaSAmIH5WQUxNQVNLIDogaSA+PiBWQUxCSVRTOworfQorCisvKiBFeHRyYWN0IHRoZSB2 YWx1ZSBvZiBhIExpc3BfT2JqZWN0IGFzIGEgc2lnbmVkIGludGVnZXIuICAqLworTElTUF9J TkxJTkUgRU1BQ1NfSU5UCisoWElOVCkgKExpc3BfT2JqZWN0IGEpCit7CisgIEVNQUNTX0lO VCBpID0gWExJIChhKTsKKyAgcmV0dXJuIChVU0VfTFNCX1RBRyA/IGkgOiBpIDw8IElOVFRZ UEVCSVRTKSA+PiBJTlRUWVBFQklUUzsKK30KKworLyogTGlrZSBYSU5UIChBKSwgYnV0IG1h eSBiZSBmYXN0ZXIuICBBIG11c3QgYmUgbm9ubmVnYXRpdmUuICBUaGlzIHRha2VzCisgICBh ZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCBMaXNwIGludGVnZXJzIGhhdmUgemVyby1iaXRz IGluIHRoZWlyIHRhZ3MuICAqLworTElTUF9JTkxJTkUgRU1BQ1NfSU5UCisoWEZBU1RJTlQp IChMaXNwX09iamVjdCBhKQoreworICBFTUFDU19JTlQgbiA9IFVTRV9MU0JfVEFHID8gWElO VCAoYSkgOiBYTEkgKGEpID4+IElOVFRZUEVCSVRTOworICBlYXNzZXJ0ICgwIDw9IG4pOwor ICByZXR1cm4gbjsKK30KKworLyogRXh0cmFjdCB0aGUgdmFsdWUgb2YgYSBMaXNwX09iamVj dCBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLiAgKi8KK0xJU1BfSU5MSU5FIEVNQUNTX1VJTlQK K1hVSU5UIChMaXNwX09iamVjdCBhKQoreworICBFTUFDU19VSU5UIGkgPSBYTEkgKGEpOwor ICByZXR1cm4gVVNFX0xTQl9UQUcgPyBpID4+IElOVFRZUEVCSVRTIDogaSAmIElOVE1BU0s7 Cit9CiAKIC8qIFJldHVybiBhIChMaXNwLWludGVnZXIgc2l6ZWQpIGhhc2ggb2YgdGhlIExp c3BfT2JqZWN0IHZhbHVlLiAgSGFwcGVucyB0byBiZQogICAgbGlrZSBYVUlOVCByaWdodCBu b3csIGJ1dCBYVUlOVCBzaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIG9iamVjdHMgd2Uga25v dwogICAgYXJlIGludGVnZXJzLiAgKi8KLSNkZWZpbmUgWEhBU0goYSkgWFVJTlQgKGEpCi0K LS8qIEZvciBpbnRlZ2VycyBrbm93biB0byBiZSBwb3NpdGl2ZSwgWEZBU1RJTlQgc29tZXRp bWVzIHByb3ZpZGVzCi0gICBmYXN0ZXIgcmV0cmlldmFsIGFuZCBYU0VURkFTVElOVCBwcm92 aWRlcyBmYXN0ZXIgc3RvcmFnZS4KLSAgIElmIG5vdCwgZmFsbGJhY2sgb24gdGhlIG5vbi1h Y2NlbGVyYXRlZCBwYXRoLiAgKi8KLSNpZm5kZWYgWEZBU1RJTlQKLSMgZGVmaW5lIFhGQVNU SU5UKGEpIChYSU5UIChhKSkKLSMgZGVmaW5lIFhTRVRGQVNUSU5UKGEsIGIpIChYU0VUSU5U IChhLCBiKSkKLSNlbmRpZgorTElTUF9JTkxJTkUgRU1BQ1NfSU5UIChYSEFTSCkgKExpc3Bf T2JqZWN0IGEpIHsgcmV0dXJuIFhVSU5UIChhKTsgfQorCitMSVNQX0lOTElORSBMaXNwX09i amVjdAorKG1ha2VfbnVtYmVyKSAoRU1BQ1NfSU5UIG4pCit7CisgIHJldHVybiBYSUwgKFVT RV9MU0JfVEFHID8gbiA8PCBJTlRUWVBFQklUUyA6IG4gJiBJTlRNQVNLKTsKK30KKworLyog TGlrZSBtYWtlX251bWJlciAoTiksIGJ1dCBtYXkgYmUgZmFzdGVyLiAgTiBtdXN0IGJlIGlu IG5vbm5lZ2F0aXZlIHJhbmdlLiAgKi8KK0xJU1BfSU5MSU5FIExpc3BfT2JqZWN0CittYWtl X25hdG51bSAoRU1BQ1NfSU5UIG4pCit7CisgIGVhc3NlcnQgKDAgPD0gbiAmJiBuIDw9IE1P U1RfUE9TSVRJVkVfRklYTlVNKTsKKyAgcmV0dXJuIFVTRV9MU0JfVEFHID8gbWFrZV9udW1i ZXIgKG4pIDogWElMIChuKTsKK30KKworTElTUF9JTkxJTkUgdm9pZCAqCisoWFBOVFIpIChM aXNwX09iamVjdCBhKQoreworICBpbnRwdHJfdCBpID0gKFhMSSAoYSkgJiBWQUxNQVNLKSB8 IERBVEFfU0VHX0JJVFM7CisgIHJldHVybiAodm9pZCAqKSBpOworfQogCiAvKiBFeHRyYWN0 IHRoZSBwb2ludGVyIHZhbHVlIG9mIHRoZSBMaXNwIG9iamVjdCBBLCB1bmRlciB0aGUKLSAg IGFzc3VtcHRpb24gdGhhdCBBJ3MgdHlwZSBpcyBUWVBFLiAgVGhpcyBpcyBhIGZhbGxiYWNr Ci0gICBpbXBsZW1lbnRhdGlvbiBpZiBub3RoaW5nIGZhc3RlciBpcyBhdmFpbGFibGUuICAq LwotI2lmbmRlZiBYVU5UQUcKLSMgZGVmaW5lIFhVTlRBRyhhLCB0eXBlKSBYUE5UUiAoYSkK LSNlbmRpZgotCi0jZGVmaW5lIEVRKHgsIHkpIChYTEkgKHgpID09IFhMSSAoeSkpCi0KLS8q IExhcmdlc3QgYW5kIHNtYWxsZXN0IHJlcHJlc2VudGFibGUgZml4bnVtIHZhbHVlcy4gIFRo ZXNlIGFyZSB0aGUgQwotICAgdmFsdWVzLiAgVGhleSBhcmUgbWFjcm9zIGZvciB1c2UgaW4g c3RhdGljIGluaXRpYWxpemVycy4gICovCi0jZGVmaW5lIE1PU1RfUE9TSVRJVkVfRklYTlVN IChFTUFDU19JTlRfTUFYID4+IElOVFRZUEVCSVRTKQotI2RlZmluZSBNT1NUX05FR0FUSVZF X0ZJWE5VTSAoLTEgLSBNT1NUX1BPU0lUSVZFX0ZJWE5VTSkKKyAgIGFzc3VtcHRpb24gdGhh dCBBJ3MgdHlwZSBpcyBUWVBFLiAgKi8KK0xJU1BfSU5MSU5FIHZvaWQgKgorKFhVTlRBRykg KExpc3BfT2JqZWN0IGEsIGludCB0eXBlKQoreworICBpZiAoVVNFX0xTQl9UQUcpCisgICAg eworICAgICAgaW50cHRyX3QgaSA9IFhMSSAoYSkgLSB0eXBlOworICAgICAgcmV0dXJuICh2 b2lkICopIGk7CisgICAgfQorICByZXR1cm4gWFBOVFIgKGEpOworfQorCitMSVNQX0lOTElO RSBib29sCisoRVEpIChMaXNwX09iamVjdCB4LCBMaXNwX09iamVjdCB5KQoreworICByZXR1 cm4gWExJICh4KSA9PSBYTEkgKHkpOworfQogCiAvKiBWYWx1ZSBpcyBub24temVybyBpZiBJ IGRvZXNuJ3QgZml0IGludG8gYSBMaXNwIGZpeG51bS4gIEl0IGlzCiAgICB3cml0dGVuIHRo aXMgd2F5IHNvIHRoYXQgaXQgYWxzbyB3b3JrcyBpZiBJIGlzIG9mIHVuc2lnbmVkCkBAIC01 NTEsNjYgKzYxNywxOTMgQEAKIHsKICAgcmV0dXJuIG51bSA8IGxvd2VyID8gbG93ZXIgOiBu dW0gPD0gdXBwZXIgPyBudW0gOiB1cHBlcjsKIH0KLQotDAorDAorLyogRm9yd2FyZCBkZWNs YXJhdGlvbnMuICAqLworCisvKiBEZWZpbmVkIGluIHRoaXMgZmlsZS4gICovCit1bmlvbiBM aXNwX0Z3ZDsKK0xJU1BfSU5MSU5FIGJvb2wgQk9PTEZXRFAgKHVuaW9uIExpc3BfRndkICop OworTElTUF9JTkxJTkUgYm9vbCBCT09MX1ZFQ1RPUl9QIChMaXNwX09iamVjdCk7CitMSVNQ X0lOTElORSBib29sIEJVRkZFUl9PQkpGV0RQICh1bmlvbiBMaXNwX0Z3ZCAqKTsKK0xJU1Bf SU5MSU5FIGJvb2wgQlVGRkVSUCAoTGlzcF9PYmplY3QpOworTElTUF9JTkxJTkUgYm9vbCBD SEFSX1RBQkxFX1AgKExpc3BfT2JqZWN0KTsKK0xJU1BfSU5MSU5FIExpc3BfT2JqZWN0IENI QVJfVEFCTEVfUkVGX0FTQ0lJIChMaXNwX09iamVjdCwgcHRyZGlmZl90KTsKK0xJU1BfSU5M SU5FIGJvb2wgKENPTlNQKSAoTGlzcF9PYmplY3QpOworTElTUF9JTkxJTkUgYm9vbCAoRkxP QVRQKSAoTGlzcF9PYmplY3QpOworTElTUF9JTkxJTkUgYm9vbCBmdW5jdGlvbnAgKExpc3Bf T2JqZWN0KTsKK0xJU1BfSU5MSU5FIGJvb2wgKElOVEVHRVJQKSAoTGlzcF9PYmplY3QpOwor TElTUF9JTkxJTkUgYm9vbCBJTlRGV0RQICh1bmlvbiBMaXNwX0Z3ZCAqKTsKK0xJU1BfSU5M SU5FIGJvb2wgS0JPQVJEX09CSkZXRFAgKHVuaW9uIExpc3BfRndkICopOworTElTUF9JTkxJ TkUgYm9vbCAoTUFSS0VSUCkgKExpc3BfT2JqZWN0KTsKK0xJU1BfSU5MSU5FIGJvb2wgKE1J U0NQKSAoTGlzcF9PYmplY3QpOworTElTUF9JTkxJTkUgYm9vbCAoTklMUCkgKExpc3BfT2Jq ZWN0KTsKK0xJU1BfSU5MSU5FIGJvb2wgT0JKRldEUCAodW5pb24gTGlzcF9Gd2QgKik7CitM SVNQX0lOTElORSBib29sIE9WRVJMQVlQIChMaXNwX09iamVjdCk7CitMSVNQX0lOTElORSBi b29sIFBST0NFU1NQIChMaXNwX09iamVjdCk7CitMSVNQX0lOTElORSBib29sIFBTRVVET1ZF Q1RPUlAgKExpc3BfT2JqZWN0LCBpbnQpOworTElTUF9JTkxJTkUgYm9vbCBTQVZFX1ZBTFVF UCAoTGlzcF9PYmplY3QpOworTElTUF9JTkxJTkUgdm9pZCBzZXRfc3ViX2NoYXJfdGFibGVf Y29udGVudHMgKExpc3BfT2JqZWN0LCBwdHJkaWZmX3QsCisJCQkJCSAgICAgIExpc3BfT2Jq ZWN0KTsKK0xJU1BfSU5MSU5FIGJvb2wgU1RSSU5HUCAoTGlzcF9PYmplY3QpOworTElTUF9J TkxJTkUgYm9vbCBTVUJfQ0hBUl9UQUJMRV9QIChMaXNwX09iamVjdCk7CitMSVNQX0lOTElO RSBib29sIFNVQlJQIChMaXNwX09iamVjdCk7CitMSVNQX0lOTElORSBib29sIChTWU1CT0xQ KSAoTGlzcF9PYmplY3QpOworTElTUF9JTkxJTkUgYm9vbCAoVkVDVE9STElLRVApIChMaXNw X09iamVjdCk7CitMSVNQX0lOTElORSBib29sIFdJTkRPV1AgKExpc3BfT2JqZWN0KTsKK0xJ U1BfSU5MSU5FIHN0cnVjdCBMaXNwX1NhdmVfVmFsdWUgKlhTQVZFX1ZBTFVFIChMaXNwX09i amVjdCk7CisKKy8qIERlZmluZWQgaW4gYnVmZmVyLmMuICAqLworZXh0ZXJuIExpc3BfT2Jq ZWN0IFFvdmVybGF5cDsKKworLyogRGVmaW5lZCBpbiBjaGFydGFiLmMuICAqLworZXh0ZXJu IExpc3BfT2JqZWN0IGNoYXJfdGFibGVfcmVmIChMaXNwX09iamVjdCwgaW50KTsKK2V4dGVy biB2b2lkIGNoYXJfdGFibGVfc2V0IChMaXNwX09iamVjdCwgaW50LCBMaXNwX09iamVjdCk7 CitleHRlcm4gaW50IGNoYXJfdGFibGVfdHJhbnNsYXRlIChMaXNwX09iamVjdCwgaW50KTsK KworLyogRGVmaW5lZCBpbiBkYXRhLmMuICAqLworZXh0ZXJuIExpc3BfT2JqZWN0IFFhcnJh eXAsIFFidWZmZXJwLCBRYnVmZmVyX29yX3N0cmluZ19wLCBRY2hhcl90YWJsZV9wOworZXh0 ZXJuIExpc3BfT2JqZWN0IFFjb25zcCwgUWZsb2F0cCwgUWludGVnZXJwLCBRbGFtYmRhLCBR bGlzdHAsIFFtYXJrZXJwLCBRbmlsOworZXh0ZXJuIExpc3BfT2JqZWN0IFFudW1iZXJwLCBR c3VicnAsIFFzdHJpbmdwLCBRc3ltYm9scCwgUXZlY3RvcnA7CitleHRlcm4gTGlzcF9PYmpl Y3QgUXZlY3Rvcl9vcl9jaGFyX3RhYmxlX3AsIFF3aG9sZW51bXA7CitleHRlcm4gTGlzcF9P YmplY3QgRmZib3VuZHAgKExpc3BfT2JqZWN0KTsKK2V4dGVybiBfTm9yZXR1cm4gTGlzcF9P YmplY3Qgd3JvbmdfdHlwZV9hcmd1bWVudCAoTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0KTsK KworLyogRGVmaW5lZCBpbiBlbWFjcy5jLiAgKi8KK2V4dGVybiBib29sIGluaXRpYWxpemVk OworCisvKiBEZWZpbmVkIGluIGV2YWwuYy4gICovCitleHRlcm4gTGlzcF9PYmplY3QgUWF1 dG9sb2FkOworCisvKiBEZWZpbmVkIGluIGZucy5jICAqLworZXh0ZXJuIExpc3BfT2JqZWN0 IFFoYXNoX3RhYmxlX3A7CisKKy8qIERlZmluZWQgaW4gZmxvYXRmbnMuYy4gICovCitleHRl cm4gZG91YmxlIGV4dHJhY3RfZmxvYXQgKExpc3BfT2JqZWN0KTsKKworLyogRGVmaW5lZCBp biBwcm9jZXNzLmMuICAqLworZXh0ZXJuIExpc3BfT2JqZWN0IFFwcm9jZXNzcDsKKworLyog RGVmaW5lZCBpbiB3aW5kb3cuYy4gICovCitleHRlcm4gTGlzcF9PYmplY3QgUXdpbmRvd3As IFF3aW5kb3dfY29uZmlndXJhdGlvbl9wOworCisvKiBEZWZpbmVkIGluIHhkaXNwLmMuICAq LworZXh0ZXJuIExpc3BfT2JqZWN0IFFpbWFnZTsKKwwKKwogLyogRXh0cmFjdCBhIHZhbHVl IG9yIGFkZHJlc3MgZnJvbSBhIExpc3BfT2JqZWN0LiAgKi8KIAotI2RlZmluZSBYQ09OUyhh KSAgIChlYXNzZXJ0IChDT05TUCAoYSkpLCBcCi0JCSAgICAoc3RydWN0IExpc3BfQ29ucyAq KSBYVU5UQUcgKGEsIExpc3BfQ29ucykpCi0jZGVmaW5lIFhWRUNUT1IoYSkgKGVhc3NlcnQg KFZFQ1RPUkxJS0VQIChhKSksIFwKLQkJICAgIChzdHJ1Y3QgTGlzcF9WZWN0b3IgKikgWFVO VEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpKQotI2RlZmluZSBYU1RSSU5HKGEpIChlYXNzZXJ0 IChTVFJJTkdQIChhKSksIFwKLQkJICAgIChzdHJ1Y3QgTGlzcF9TdHJpbmcgKikgWFVOVEFH IChhLCBMaXNwX1N0cmluZykpCi0jZGVmaW5lIFhTWU1CT0woYSkgKGVhc3NlcnQgKFNZTUJP TFAgKGEpKSwgXAotCQkgICAgKHN0cnVjdCBMaXNwX1N5bWJvbCAqKSBYVU5UQUcgKGEsIExp c3BfU3ltYm9sKSkKLSNkZWZpbmUgWEZMT0FUKGEpICAoZWFzc2VydCAoRkxPQVRQIChhKSks IFwKLQkJICAgIChzdHJ1Y3QgTGlzcF9GbG9hdCAqKSBYVU5UQUcgKGEsIExpc3BfRmxvYXQp KQotCi0vKiBNaXNjIHR5cGVzLiAgKi8KLQotI2RlZmluZSBYTUlTQyhhKQkoKHVuaW9uIExp c3BfTWlzYyAqKSBYVU5UQUcgKGEsIExpc3BfTWlzYykpCi0jZGVmaW5lIFhNSVNDQU5ZKGEp CShlYXNzZXJ0IChNSVNDUCAoYSkpLCAmKFhNSVNDIChhKS0+dV9hbnkpKQotI2RlZmluZSBY TUlTQ1RZUEUoYSkgICAoWE1JU0NBTlkgKGEpLT50eXBlKQotI2RlZmluZSBYTUFSS0VSKGEp CShlYXNzZXJ0IChNQVJLRVJQIChhKSksICYoWE1JU0MgKGEpLT51X21hcmtlcikpCi0jZGVm aW5lIFhPVkVSTEFZKGEpCShlYXNzZXJ0IChPVkVSTEFZUCAoYSkpLCAmKFhNSVNDIChhKS0+ dV9vdmVybGF5KSkKLQotLyogRm9yd2FyZGluZyBvYmplY3QgdHlwZXMuICAqLwotCi0jZGVm aW5lIFhGV0RUWVBFKGEpICAgICAoYS0+dV9pbnRmd2QudHlwZSkKLSNkZWZpbmUgWElOVEZX RChhKQkoZWFzc2VydCAoSU5URldEUCAoYSkpLCAmKChhKS0+dV9pbnRmd2QpKQotI2RlZmlu ZSBYQk9PTEZXRChhKQkoZWFzc2VydCAoQk9PTEZXRFAgKGEpKSwgJigoYSktPnVfYm9vbGZ3 ZCkpCi0jZGVmaW5lIFhPQkpGV0QoYSkJKGVhc3NlcnQgKE9CSkZXRFAgKGEpKSwgJigoYSkt PnVfb2JqZndkKSkKLSNkZWZpbmUgWEJVRkZFUl9PQkpGV0QoYSkgXAotICAoZWFzc2VydCAo QlVGRkVSX09CSkZXRFAgKGEpKSwgJigoYSktPnVfYnVmZmVyX29iamZ3ZCkpCi0jZGVmaW5l IFhLQk9BUkRfT0JKRldEKGEpIFwKLSAgKGVhc3NlcnQgKEtCT0FSRF9PQkpGV0RQIChhKSks ICYoKGEpLT51X2tib2FyZF9vYmpmd2QpKQorTElTUF9JTkxJTkUgc3RydWN0IExpc3BfQ29u cyAqCisoWENPTlMpIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0IChDT05TUCAoYSkp OworICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX0NvbnMpOworfQorCitMSVNQX0lOTElORSBz dHJ1Y3QgTGlzcF9WZWN0b3IgKgorWFZFQ1RPUiAoTGlzcF9PYmplY3QgYSkKK3sKKyAgZWFz c2VydCAoVkVDVE9STElLRVAgKGEpKTsKKyAgcmV0dXJuIFhVTlRBRyAoYSwgTGlzcF9WZWN0 b3JsaWtlKTsKK30KKworTElTUF9JTkxJTkUgc3RydWN0IExpc3BfU3RyaW5nICoKK1hTVFJJ TkcgKExpc3BfT2JqZWN0IGEpCit7CisgIGVhc3NlcnQgKFNUUklOR1AgKGEpKTsKKyAgcmV0 dXJuIFhVTlRBRyAoYSwgTGlzcF9TdHJpbmcpOworfQorCitMSVNQX0lOTElORSBzdHJ1Y3Qg TGlzcF9TeW1ib2wgKgorKFhTWU1CT0wpIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0 IChTWU1CT0xQIChhKSk7CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3BfU3ltYm9sKTsKK30K KworTElTUF9JTkxJTkUgc3RydWN0IExpc3BfRmxvYXQgKgorWEZMT0FUIChMaXNwX09iamVj dCBhKQoreworICBlYXNzZXJ0IChGTE9BVFAgKGEpKTsKKyAgcmV0dXJuIFhVTlRBRyAoYSwg TGlzcF9GbG9hdCk7Cit9CiAKIC8qIFBzZXVkb3ZlY3RvciB0eXBlcy4gICovCi1zdHJ1Y3Qg TGlzcF9Qcm9jZXNzOwotTElTUF9JTkxJTkUgTGlzcF9PYmplY3QgbWFrZV9saXNwX3Byb2Mg KHN0cnVjdCBMaXNwX1Byb2Nlc3MgKnApCi17IHJldHVybiBtYWtlX2xpc3BfcHRyIChwLCBM aXNwX1ZlY3Rvcmxpa2UpOyB9Ci0jZGVmaW5lIFhQUk9DRVNTKGEpIChlYXNzZXJ0IChQUk9D RVNTUCAoYSkpLCBcCi0JCSAgICAgKHN0cnVjdCBMaXNwX1Byb2Nlc3MgKikgWFVOVEFHIChh LCBMaXNwX1ZlY3Rvcmxpa2UpKQotI2RlZmluZSBYV0lORE9XKGEpIChlYXNzZXJ0IChXSU5E T1dQIChhKSksCQkJCVwKLQkJICAgIChzdHJ1Y3Qgd2luZG93ICopIFhVTlRBRyAoYSwgTGlz cF9WZWN0b3JsaWtlKSkKLSNkZWZpbmUgWFRFUk1JTkFMKGEpIChlYXNzZXJ0IChURVJNSU5B TFAgKGEpKSwgXAotCQkgICAgICAoc3RydWN0IHRlcm1pbmFsICopIFhVTlRBRyAoYSwgTGlz cF9WZWN0b3JsaWtlKSkKLSNkZWZpbmUgWFNVQlIoYSkgKGVhc3NlcnQgKFNVQlJQIChhKSks IFwKLQkJICAoc3RydWN0IExpc3BfU3ViciAqKSBYVU5UQUcgKGEsIExpc3BfVmVjdG9ybGlr ZSkpCi0jZGVmaW5lIFhCVUZGRVIoYSkgKGVhc3NlcnQgKEJVRkZFUlAgKGEpKSwgXAotCQkg ICAgKHN0cnVjdCBidWZmZXIgKikgWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpKQotI2Rl ZmluZSBYQ0hBUl9UQUJMRShhKSAoZWFzc2VydCAoQ0hBUl9UQUJMRV9QIChhKSksIFwKLQkJ CShzdHJ1Y3QgTGlzcF9DaGFyX1RhYmxlICopIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtl KSkKLSNkZWZpbmUgWFNVQl9DSEFSX1RBQkxFKGEpIChlYXNzZXJ0IChTVUJfQ0hBUl9UQUJM RV9QIChhKSksIFwKLQkJCSAgICAoKHN0cnVjdCBMaXNwX1N1Yl9DaGFyX1RhYmxlICopIFwK LQkJCSAgICAgWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpKSkKLSNkZWZpbmUgWEJPT0xf VkVDVE9SKGEpIChlYXNzZXJ0IChCT09MX1ZFQ1RPUl9QIChhKSksIFwKLQkJCSAoKHN0cnVj dCBMaXNwX0Jvb2xfVmVjdG9yICopIFwKLQkJCSAgWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxp a2UpKSkKKworTElTUF9JTkxJTkUgc3RydWN0IExpc3BfUHJvY2VzcyAqCitYUFJPQ0VTUyAo TGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoUFJPQ0VTU1AgKGEpKTsKKyAgcmV0dXJu IFhVTlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtlKTsKK30KKworTElTUF9JTkxJTkUgc3RydWN0 IHdpbmRvdyAqCitYV0lORE9XIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0IChXSU5E T1dQIChhKSk7CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3BfVmVjdG9ybGlrZSk7Cit9CisK K0xJU1BfSU5MSU5FIHN0cnVjdCB0ZXJtaW5hbCAqCitYVEVSTUlOQUwgKExpc3BfT2JqZWN0 IGEpCit7CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3BfVmVjdG9ybGlrZSk7Cit9CisKK0xJ U1BfSU5MSU5FIHN0cnVjdCBMaXNwX1N1YnIgKgorWFNVQlIgKExpc3BfT2JqZWN0IGEpCit7 CisgIGVhc3NlcnQgKFNVQlJQIChhKSk7CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3BfVmVj dG9ybGlrZSk7Cit9CisKK0xJU1BfSU5MSU5FIHN0cnVjdCBidWZmZXIgKgorWEJVRkZFUiAo TGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoQlVGRkVSUCAoYSkpOworICByZXR1cm4g WFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitMSVNQX0lOTElORSBzdHJ1Y3Qg TGlzcF9DaGFyX1RhYmxlICoKK1hDSEFSX1RBQkxFIChMaXNwX09iamVjdCBhKQoreworICBl YXNzZXJ0IChDSEFSX1RBQkxFX1AgKGEpKTsKKyAgcmV0dXJuIFhVTlRBRyAoYSwgTGlzcF9W ZWN0b3JsaWtlKTsKK30KKworTElTUF9JTkxJTkUgc3RydWN0IExpc3BfU3ViX0NoYXJfVGFi bGUgKgorWFNVQl9DSEFSX1RBQkxFIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0IChT VUJfQ0hBUl9UQUJMRV9QIChhKSk7CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3BfVmVjdG9y bGlrZSk7Cit9CisKK0xJU1BfSU5MSU5FIHN0cnVjdCBMaXNwX0Jvb2xfVmVjdG9yICoKK1hC T09MX1ZFQ1RPUiAoTGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoQk9PTF9WRUNUT1Jf UCAoYSkpOworICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQogCiAv KiBDb25zdHJ1Y3QgYSBMaXNwX09iamVjdCBmcm9tIGEgdmFsdWUgb3IgYWRkcmVzcy4gICov CiAKK0xJU1BfSU5MSU5FIExpc3BfT2JqZWN0CittYWtlX2xpc3BfcHRyICh2b2lkICpwdHIs IGVudW0gTGlzcF9UeXBlIHR5cGUpCit7CisgIEVNQUNTX1VJTlQgdXR5cGUgPSB0eXBlOwor ICBFTUFDU19JTlQgdHlwZWJpdHMgPSBVU0VfTFNCX1RBRyA/IHR5cGUgOiB1dHlwZSA8PCBW QUxCSVRTOworICBMaXNwX09iamVjdCBhID0gWElMICh0eXBlYml0cyB8IChpbnRwdHJfdCkg cHRyKTsKKyAgZWFzc2VydCAoWFVOVEFHIChhLCB0eXBlKSA9PSBwdHIpOyAgLyogQ2hlY2sg YWxpZ25tZW50LiAgKi8KKyAgcmV0dXJuIGE7Cit9CisKK0xJU1BfSU5MSU5FIExpc3BfT2Jq ZWN0CittYWtlX2xpc3BfcHJvYyAoc3RydWN0IExpc3BfUHJvY2VzcyAqcCkKK3sKKyAgcmV0 dXJuIG1ha2VfbGlzcF9wdHIgKHAsIExpc3BfVmVjdG9ybGlrZSk7Cit9CisKICNkZWZpbmUg WFNFVElOVChhLCBiKSAoKGEpID0gbWFrZV9udW1iZXIgKGIpKQorI2RlZmluZSBYU0VURkFT VElOVChhLCBiKSAoKGEpID0gbWFrZV9uYXRudW0gKGIpKQogI2RlZmluZSBYU0VUQ09OUyhh LCBiKSAoKGEpID0gbWFrZV9saXNwX3B0ciAoYiwgTGlzcF9Db25zKSkKICNkZWZpbmUgWFNF VFZFQ1RPUihhLCBiKSAoKGEpID0gbWFrZV9saXNwX3B0ciAoYiwgTGlzcF9WZWN0b3JsaWtl KSkKICNkZWZpbmUgWFNFVFNUUklORyhhLCBiKSAoKGEpID0gbWFrZV9saXNwX3B0ciAoYiwg TGlzcF9TdHJpbmcpKQpAQCAtNjU2LDM1ICs4NDksMTQgQEAKICNkZWZpbmUgWFNFVEJPT0xf VkVDVE9SKGEsIGIpIChYU0VUUFNFVURPVkVDVE9SIChhLCBiLCBQVkVDX0JPT0xfVkVDVE9S KSkKICNkZWZpbmUgWFNFVFNVQl9DSEFSX1RBQkxFKGEsIGIpIChYU0VUUFNFVURPVkVDVE9S IChhLCBiLCBQVkVDX1NVQl9DSEFSX1RBQkxFKSkKIAotLyogQ29udmVuaWVuY2UgbWFjcm9z IGZvciBkZWFsaW5nIHdpdGggTGlzcCBhcnJheXMuICAqLwotCi0jZGVmaW5lIEFSRUYoQVJS QVksIElEWCkJWFZFQ1RPUiAoKEFSUkFZKSktPmNvbnRlbnRzW0lEWF0KLSNkZWZpbmUgQVNJ WkUoQVJSQVkpCQlYVkVDVE9SICgoQVJSQVkpKS0+aGVhZGVyLnNpemUKLSNkZWZpbmUgQVNF VChBUlJBWSwgSURYLCBWQUwpCVwKLSAgKGVhc3NlcnQgKDAgPD0gKElEWCkgJiYgKElEWCkg PCBBU0laRSAoQVJSQVkpKSwJXAotICAgWFZFQ1RPUiAoQVJSQVkpLT5jb250ZW50c1tJRFhd ID0gKFZBTCkpCi0KLS8qIENvbnZlbmllbmNlIG1hY3JvcyBmb3IgZGVhbGluZyB3aXRoIExp c3Agc3RyaW5ncy4gICovCi0KLSNkZWZpbmUgU0RBVEEoc3RyaW5nKQkJKFhTVFJJTkcgKHN0 cmluZyktPmRhdGEgKyAwKQotI2RlZmluZSBTUkVGKHN0cmluZywgaW5kZXgpCShTREFUQSAo c3RyaW5nKVtpbmRleF0gKyAwKQotI2RlZmluZSBTU0VUKHN0cmluZywgaW5kZXgsIG5ldykg KFNEQVRBIChzdHJpbmcpW2luZGV4XSA9IChuZXcpKQotI2RlZmluZSBTQ0hBUlMoc3RyaW5n KQkJKFhTVFJJTkcgKHN0cmluZyktPnNpemUgKyAwKQotI2RlZmluZSBTQllURVMoc3RyaW5n KQkJKFNUUklOR19CWVRFUyAoWFNUUklORyAoc3RyaW5nKSkgKyAwKQotCi0vKiBBdm9pZCAi ZGlmZmVyIGluIHNpZ24iIHdhcm5pbmdzLiAgKi8KLSNkZWZpbmUgU1NEQVRBKHgpICAoKGNo YXIgKikgU0RBVEEgKHgpKQotCi0jZGVmaW5lIFNUUklOR19TRVRfQ0hBUlMoc3RyaW5nLCBu ZXdzaXplKSBcCi0gICAgKFhTVFJJTkcgKHN0cmluZyktPnNpemUgPSAobmV3c2l6ZSkpCi0K LSNkZWZpbmUgU1RSSU5HX0NPUFlJTihzdHJpbmcsIGluZGV4LCBuZXcsIGNvdW50KSBcCi0g ICAgbWVtY3B5IChTREFUQSAoc3RyaW5nKSArIGluZGV4LCBuZXcsIGNvdW50KQotCiAvKiBU eXBlIGNoZWNraW5nLiAgKi8KIAotI2RlZmluZSBDSEVDS19UWVBFKG9rLCBReHh4cCwgeCkg XAotICBkbyB7IGlmICghKG9rKSkgd3JvbmdfdHlwZV9hcmd1bWVudCAoUXh4eHAsICh4KSk7 IH0gd2hpbGUgKDApCitMSVNQX0lOTElORSB2b2lkCisoQ0hFQ0tfVFlQRSkgKGludCBvaywg TGlzcF9PYmplY3QgUXh4eHAsIExpc3BfT2JqZWN0IHgpCit7CisgIGlmICghb2spCisgICAg d3JvbmdfdHlwZV9hcmd1bWVudCAoUXh4eHAsIHgpOworfQogCiAvKiBEZXByZWNhdGVkIGFu ZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4gICovCiAKQEAgLTY5NSw4ICs4NjcsMTEgQEAKIHR5 cGVkZWYgc3RydWN0IGludGVydmFsICpJTlRFUlZBTDsKIAogLyogQ29tcGxhaW4gaWYgb2Jq ZWN0IGlzIG5vdCBzdHJpbmcgb3IgYnVmZmVyIHR5cGUuICAqLwotI2RlZmluZSBDSEVDS19T VFJJTkdfT1JfQlVGRkVSKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoU1RSSU5HUCAoeCkgfHwgQlVG RkVSUCAoeCksIFFidWZmZXJfb3Jfc3RyaW5nX3AsIHgpCitMSVNQX0lOTElORSB2b2lkCitD SEVDS19TVFJJTkdfT1JfQlVGRkVSIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBF IChTVFJJTkdQICh4KSB8fCBCVUZGRVJQICh4KSwgUWJ1ZmZlcl9vcl9zdHJpbmdfcCwgeCk7 Cit9CiAKIHN0cnVjdCBMaXNwX0NvbnMKICAgewpAQCAtNzE0LDY0ICs4ODksNzggQEAKICAg fTsKIAogLyogVGFrZSB0aGUgY2FyIG9yIGNkciBvZiBzb21ldGhpbmcga25vd24gdG8gYmUg YSBjb25zIGNlbGwuICAqLwotLyogVGhlIF9BU19MVkFMVUUgbWFjcm9zIHNob3VsZG4ndCBi ZSB1c2VkIG91dHNpZGUgb2YgdGhlIG1pbmltYWwgc2V0CisvKiBUaGUgX2FkZHIgZnVuY3Rp b25zIHNob3VsZG4ndCBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIG1pbmltYWwgc2V0CiAgICBv ZiBjb2RlIHRoYXQgaGFzIHRvIGtub3cgd2hhdCBhIGNvbnMgY2VsbCBsb29rcyBsaWtlLiAg T3RoZXIgY29kZSBub3QKICAgIHBhcnQgb2YgdGhlIGJhc2ljIGxpc3AgaW1wbGVtZW50YXRp b24gc2hvdWxkIGFzc3VtZSB0aGF0IHRoZSBjYXIgYW5kIGNkcgotICAgZmllbGRzIGFyZSBu b3QgYWNjZXNzaWJsZSBhcyBsdmFsdWVzLiAgKFdoYXQgaWYgd2Ugd2FudCB0byBzd2l0Y2gg dG8KKyAgIGZpZWxkcyBhcmUgbm90IGFjY2Vzc2libGUuICAoV2hhdCBpZiB3ZSB3YW50IHRv IHN3aXRjaCB0bwogICAgYSBjb3B5aW5nIGNvbGxlY3RvciBzb21lZGF5PyAgQ2FjaGVkIGNv bnMgY2VsbCBmaWVsZCBhZGRyZXNzZXMgbWF5IGJlCiAgICBpbnZhbGlkYXRlZCBhdCBhcmJp dHJhcnkgcG9pbnRzLikgICovCi0jZGVmaW5lIFhDQVJfQVNfTFZBTFVFKGMpIChYQ09OUyAo YyktPmNhcikKLSNkZWZpbmUgWENEUl9BU19MVkFMVUUoYykgKFhDT05TIChjKS0+dS5jZHIp CitMSVNQX0lOTElORSBMaXNwX09iamVjdCAqeGNhcl9hZGRyIChMaXNwX09iamVjdCBjKSB7 IHJldHVybiAmWENPTlMgKGMpLT5jYXI7IH0KK0xJU1BfSU5MSU5FIExpc3BfT2JqZWN0ICp4 Y2RyX2FkZHIgKExpc3BfT2JqZWN0IGMpIHsgcmV0dXJuICZYQ09OUyAoYyktPnUuY2RyOyB9 CiAKIC8qIFVzZSB0aGVzZSBmcm9tIG5vcm1hbCBjb2RlLiAgKi8KLSNkZWZpbmUgWENBUihj KQlMSVNQX01BS0VfUlZBTFVFIChYQ0FSX0FTX0xWQUxVRSAoYykpCi0jZGVmaW5lIFhDRFIo YykgTElTUF9NQUtFX1JWQUxVRSAoWENEUl9BU19MVkFMVUUgKGMpKQorTElTUF9JTkxJTkUg TGlzcF9PYmplY3QgKFhDQVIpIChMaXNwX09iamVjdCBjKSB7IHJldHVybiAqeGNhcl9hZGRy IChjKTsgfQorTElTUF9JTkxJTkUgTGlzcF9PYmplY3QgKFhDRFIpIChMaXNwX09iamVjdCBj KSB7IHJldHVybiAqeGNkcl9hZGRyIChjKTsgfQogCiAvKiBVc2UgdGhlc2UgdG8gc2V0IHRo ZSBmaWVsZHMgb2YgYSBjb25zIGNlbGwuCiAKICAgIE5vdGUgdGhhdCBib3RoIGFyZ3VtZW50 cyBtYXkgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0LCBzbyAnbicKLSAgIHNob3VsZCBub3Qg YmUgcmVhZCBhZnRlciAnYycgaXMgZmlyc3QgbW9kaWZpZWQuICBBbHNvLCBuZWl0aGVyCi0g ICBhcmd1bWVudCBzaG91bGQgYmUgZXZhbHVhdGVkIG1vcmUgdGhhbiBvbmNlOyBzaWRlIGVm ZmVjdHMgYXJlCi0gICBlc3BlY2lhbGx5IGNvbW1vbiBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50 LiAgKi8KLSNkZWZpbmUgWFNFVENBUihjLG4pIChYQ0FSX0FTX0xWQUxVRSAoYykgPSAobikp Ci0jZGVmaW5lIFhTRVRDRFIoYyxuKSAoWENEUl9BU19MVkFMVUUgKGMpID0gKG4pKQotCi0v KiBUYWtlIHRoZSBjYXIgb3IgY2RyIG9mIHNvbWV0aGluZyB3aG9zZSB0eXBlIGlzIG5vdCBr bm93bi4gICovCi0jZGVmaW5lIENBUihjKQkJCQkJXAotIChDT05TUCAoKGMpKSA/IFhDQVIg KChjKSkJCQlcCi0gIDogTklMUCAoKGMpKSA/IFFuaWwJCQkJXAotICA6IHdyb25nX3R5cGVf YXJndW1lbnQgKFFsaXN0cCwgKGMpKSkKLQotI2RlZmluZSBDRFIoYykJCQkJCVwKLSAoQ09O U1AgKChjKSkgPyBYQ0RSICgoYykpCQkJXAotICA6IE5JTFAgKChjKSkgPyBRbmlsCQkJCVwK LSAgOiB3cm9uZ190eXBlX2FyZ3VtZW50IChRbGlzdHAsIChjKSkpCi0KLS8qIFRha2UgdGhl IGNhciBvciBjZHIgb2Ygc29tZXRoaW5nIHdob3NlIHR5cGUgaXMgbm90IGtub3duLiAgKi8K LSNkZWZpbmUgQ0FSX1NBRkUoYykJCQkJXAotICAoQ09OU1AgKChjKSkgPyBYQ0FSICgoYykp IDogUW5pbCkKLQotI2RlZmluZSBDRFJfU0FGRShjKQkJCQlcCi0gIChDT05TUCAoKGMpKSA/ IFhDRFIgKChjKSkgOiBRbmlsKQorICAgc2hvdWxkIG5vdCBiZSByZWFkIGFmdGVyICdjJyBp cyBmaXJzdCBtb2RpZmllZC4gICovCitMSVNQX0lOTElORSB2b2lkCitYU0VUQ0FSIChMaXNw X09iamVjdCBjLCBMaXNwX09iamVjdCBuKQoreworICAqeGNhcl9hZGRyIChjKSA9IG47Cit9 CitMSVNQX0lOTElORSB2b2lkCitYU0VUQ0RSIChMaXNwX09iamVjdCBjLCBMaXNwX09iamVj dCBuKQoreworICAqeGNkcl9hZGRyIChjKSA9IG47Cit9CisKKy8qIFRha2UgdGhlIGNhciBv ciBjZHIgb2Ygc29tZXRoaW5nIHdob3NlIHR5cGUgaXMgbm90IGtub3duLiAgKi8KK0xJU1Bf SU5MSU5FIExpc3BfT2JqZWN0CitDQVIgKExpc3BfT2JqZWN0IGMpCit7CisgIHJldHVybiAo Q09OU1AgKGMpID8gWENBUiAoYykKKwkgIDogTklMUCAoYykgPyBRbmlsCisJICA6IHdyb25n X3R5cGVfYXJndW1lbnQgKFFsaXN0cCwgYykpOworfQorTElTUF9JTkxJTkUgTGlzcF9PYmpl Y3QKK0NEUiAoTGlzcF9PYmplY3QgYykKK3sKKyAgcmV0dXJuIChDT05TUCAoYykgPyBYQ0RS IChjKQorCSAgOiBOSUxQIChjKSA/IFFuaWwKKwkgIDogd3JvbmdfdHlwZV9hcmd1bWVudCAo UWxpc3RwLCBjKSk7Cit9CisKKy8qIFRha2UgdGhlIGNhciBvciBjZHIgb2Ygc29tZXRoaW5n IHdob3NlIHR5cGUgaXMgbm90IGtub3duLiAgKi8KK0xJU1BfSU5MSU5FIExpc3BfT2JqZWN0 CitDQVJfU0FGRSAoTGlzcF9PYmplY3QgYykKK3sKKyAgcmV0dXJuIENPTlNQIChjKSA/IFhD QVIgKGMpIDogUW5pbDsKK30KK0xJU1BfSU5MSU5FIExpc3BfT2JqZWN0CitDRFJfU0FGRSAo TGlzcF9PYmplY3QgYykKK3sKKyAgcmV0dXJuIENPTlNQIChjKSA/IFhDRFIgKGMpIDogUW5p bDsKK30KKworLyogSW4gYSBzdHJpbmcgb3IgdmVjdG9yLCB0aGUgc2lnbiBiaXQgb2YgdGhl IGBzaXplJyBpcyB0aGUgZ2MgbWFyayBiaXQuICAqLworCitzdHJ1Y3QgTGlzcF9TdHJpbmcK KyAgeworICAgIHB0cmRpZmZfdCBzaXplOworICAgIHB0cmRpZmZfdCBzaXplX2J5dGU7Cisg ICAgSU5URVJWQUwgaW50ZXJ2YWxzOwkJLyogVGV4dCBwcm9wZXJ0aWVzIGluIHRoaXMgc3Ry aW5nLiAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhOworICB9OwogCiAvKiBUcnVlIGlm IFNUUiBpcyBhIG11bHRpYnl0ZSBzdHJpbmcuICAqLwotI2RlZmluZSBTVFJJTkdfTVVMVElC WVRFKFNUUikgIFwKLSAgKFhTVFJJTkcgKFNUUiktPnNpemVfYnl0ZSA+PSAwKQotCi0vKiBS ZXR1cm4gdGhlIGxlbmd0aCBpbiBieXRlcyBvZiBTVFIuICAqLwotCi0jaWZkZWYgR0NfQ0hF Q0tfU1RSSU5HX0JZVEVTCi0KLXN0cnVjdCBMaXNwX1N0cmluZzsKLWV4dGVybiBwdHJkaWZm X3Qgc3RyaW5nX2J5dGVzIChzdHJ1Y3QgTGlzcF9TdHJpbmcgKik7Ci0jZGVmaW5lIFNUUklO R19CWVRFUyhTKSBzdHJpbmdfYnl0ZXMgKChTKSkKLQotI2Vsc2UgLyogbm90IEdDX0NIRUNL X1NUUklOR19CWVRFUyAqLwotCi0jZGVmaW5lIFNUUklOR19CWVRFUyhTVFIpICBcCi0gICgo U1RSKS0+c2l6ZV9ieXRlIDwgMCA/IChTVFIpLT5zaXplIDogKFNUUiktPnNpemVfYnl0ZSkK LQotI2VuZGlmIC8qIG5vdCBHQ19DSEVDS19TVFJJTkdfQllURVMgKi8KK0xJU1BfSU5MSU5F IGJvb2wKK1NUUklOR19NVUxUSUJZVEUgKExpc3BfT2JqZWN0IHN0cikKK3sKKyAgcmV0dXJu IDAgPD0gWFNUUklORyAoc3RyKS0+c2l6ZV9ieXRlOworfQogCiAvKiBBbiB1cHBlciBib3Vu ZCBvbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgTGlzcCBzdHJpbmcsIG5vdAogICAgY291 bnRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwuICBUaGlzIGEgdGlnaHQgZW5vdWdoIGJvdW5k IHRvCkBAIC04MDIsMjAgKzk5MSw2NSBAQAogICAgICAgKFNUUikgPSBlbXB0eV9tdWx0aWJ5 dGVfc3RyaW5nOyAgXAogICAgIGVsc2UgWFNUUklORyAoU1RSKS0+c2l6ZV9ieXRlID0gWFNU UklORyAoU1RSKS0+c2l6ZTsgfSB3aGlsZSAoMCkKIAotLyogSW4gYSBzdHJpbmcgb3IgdmVj dG9yLCB0aGUgc2lnbiBiaXQgb2YgdGhlIGBzaXplJyBpcyB0aGUgZ2MgbWFyayBiaXQuICAq LworLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggTGlzcCBzdHJp bmdzLiAgKi8KIAotc3RydWN0IExpc3BfU3RyaW5nCi0gIHsKLSAgICBwdHJkaWZmX3Qgc2l6 ZTsKLSAgICBwdHJkaWZmX3Qgc2l6ZV9ieXRlOwotICAgIElOVEVSVkFMIGludGVydmFsczsJ CS8qIFRleHQgcHJvcGVydGllcyBpbiB0aGlzIHN0cmluZy4gICovCi0gICAgdW5zaWduZWQg Y2hhciAqZGF0YTsKLSAgfTsKK0xJU1BfSU5MSU5FIHVuc2lnbmVkIGNoYXIgKgorU0RBVEEg KExpc3BfT2JqZWN0IHN0cmluZykKK3sKKyAgcmV0dXJuIFhTVFJJTkcgKHN0cmluZyktPmRh dGE7Cit9CitMSVNQX0lOTElORSBjaGFyICoKK1NTREFUQSAoTGlzcF9PYmplY3Qgc3RyaW5n KQoreworICAvKiBBdm9pZCAiZGlmZmVyIGluIHNpZ24iIHdhcm5pbmdzLiAgKi8KKyAgcmV0 dXJuIChjaGFyICopIFNEQVRBIChzdHJpbmcpOworfQorTElTUF9JTkxJTkUgdW5zaWduZWQg Y2hhcgorU1JFRiAoTGlzcF9PYmplY3Qgc3RyaW5nLCBwdHJkaWZmX3QgaW5kZXgpCit7Cisg IHJldHVybiBTREFUQSAoc3RyaW5nKVtpbmRleF07Cit9CitMSVNQX0lOTElORSB2b2lkCitT U0VUIChMaXNwX09iamVjdCBzdHJpbmcsIHB0cmRpZmZfdCBpbmRleCwgdW5zaWduZWQgY2hh ciBuZXcpCit7CisgIFNEQVRBIChzdHJpbmcpW2luZGV4XSA9IG5ldzsKK30KK0xJU1BfSU5M SU5FIHB0cmRpZmZfdAorU0NIQVJTIChMaXNwX09iamVjdCBzdHJpbmcpCit7CisgIHJldHVy biBYU1RSSU5HIChzdHJpbmcpLT5zaXplOworfQorTElTUF9JTkxJTkUgcHRyZGlmZl90CitT VFJJTkdfQllURVMgKHN0cnVjdCBMaXNwX1N0cmluZyAqcykKK3sKKyNpZmRlZiBHQ19DSEVD S19TVFJJTkdfQllURVMKKyAgZXh0ZXJuIHB0cmRpZmZfdCBzdHJpbmdfYnl0ZXMgKHN0cnVj dCBMaXNwX1N0cmluZyAqKTsKKyAgcmV0dXJuIHN0cmluZ19ieXRlcyAocyk7CisjZWxzZQor ICByZXR1cm4gcy0+c2l6ZV9ieXRlIDwgMCA/IHMtPnNpemUgOiBzLT5zaXplX2J5dGU7Cisj ZW5kaWYKK30KK0xJU1BfSU5MSU5FIHB0cmRpZmZfdAorU0JZVEVTIChMaXNwX09iamVjdCBz dHJpbmcpCit7CisgIHJldHVybiBTVFJJTkdfQllURVMgKFhTVFJJTkcgKHN0cmluZykpOwor fQorTElTUF9JTkxJTkUgdm9pZAorU1RSSU5HX1NFVF9DSEFSUyAoTGlzcF9PYmplY3Qgc3Ry aW5nLCBwdHJkaWZmX3QgbmV3c2l6ZSkKK3sKKyAgWFNUUklORyAoc3RyaW5nKS0+c2l6ZSA9 IG5ld3NpemU7Cit9CitMSVNQX0lOTElORSB2b2lkCitTVFJJTkdfQ09QWUlOIChMaXNwX09i amVjdCBzdHJpbmcsIHB0cmRpZmZfdCBpbmRleCwgY2hhciBjb25zdCAqbmV3LAorCSAgICAg ICBwdHJkaWZmX3QgY291bnQpCit7CisgIG1lbWNweSAoU0RBVEEgKHN0cmluZykgKyBpbmRl eCwgbmV3LCBjb3VudCk7Cit9CiAKIC8qIEhlYWRlciBvZiB2ZWN0b3ItbGlrZSBvYmplY3Rz LiAgVGhpcyBkb2N1bWVudHMgdGhlIGxheW91dCBjb25zdHJhaW50cyBvbgogICAgdmVjdG9y cyBhbmQgcHNldWRvdmVjdG9ycyAob2JqZWN0cyBvZiBQVkVDX3h4eCBzdWJ0eXBlKS4gIEl0 IGFsc28gcHJldmVudHMKLSAgIGNvbXBpbGVycyBmcm9tIGJlaW5nIGZvb2xlZCBieSBFbWFj cydzIHR5cGUgcHVubmluZzogdGhlIFhTRVRQU0VVRE9WRUNUT1IKLSAgIGFuZCBQU0VVRE9W RUNUT1JQIG1hY3JvcyBjYXN0IHRoZWlyIHBvaW50ZXJzIHRvIHN0cnVjdCB2ZWN0b3JsaWtl X2hlYWRlciAqLAorICAgY29tcGlsZXJzIGZyb20gYmVpbmcgZm9vbGVkIGJ5IEVtYWNzJ3Mg dHlwZSBwdW5uaW5nOiBYU0VUUFNFVURPVkVDVE9SCisgICBhbmQgUFNFVURPVkVDVE9SUCBj YXN0IHRoZWlyIHBvaW50ZXJzIHRvIHN0cnVjdCB2ZWN0b3JsaWtlX2hlYWRlciAqLAogICAg YmVjYXVzZSB3aGVuIHR3byBzdWNoIHBvaW50ZXJzIHBvdGVudGlhbGx5IGFsaWFzLCBhIGNv bXBpbGVyIHdvbid0CiAgICBpbmNvcnJlY3RseSByZW9yZGVyIGxvYWRzIGFuZCBzdG9yZXMg dG8gdGhlaXIgc2l6ZSBmaWVsZHMuICBTZWUKICAgIDxodHRwOi8vZGViYnVncy5nbnUub3Jn L2NnaS9idWdyZXBvcnQuY2dpP2J1Zz04NTQ2Pi4gICovCkBAIC04NzQsNiArMTEwOCw0MiBA QAogICAgIHdvcmRfc2l6ZSA9IHNpemVvZiAoTGlzcF9PYmplY3QpCiAgIH07CiAKKy8qIENv bnZlbmllbmNlcyBmb3IgZGVhbGluZyB3aXRoIExpc3AgYXJyYXlzLiAgKi8KKworTElTUF9J TkxJTkUgTGlzcF9PYmplY3QKK0FSRUYgKExpc3BfT2JqZWN0IGFycmF5LCBwdHJkaWZmX3Qg aWR4KQoreworICByZXR1cm4gWFZFQ1RPUiAoYXJyYXkpLT5jb250ZW50c1tpZHhdOworfQor CitMSVNQX0lOTElORSBMaXNwX09iamVjdCAqCithcmVmX2FkZHIgKExpc3BfT2JqZWN0IGFy cmF5LCBwdHJkaWZmX3QgaWR4KQoreworICByZXR1cm4gJiBYVkVDVE9SIChhcnJheSktPmNv bnRlbnRzW2lkeF07Cit9CisKK0xJU1BfSU5MSU5FIHB0cmRpZmZfdAorQVNJWkUgKExpc3Bf T2JqZWN0IGFycmF5KQoreworICByZXR1cm4gWFZFQ1RPUiAoYXJyYXkpLT5oZWFkZXIuc2l6 ZTsKK30KKworTElTUF9JTkxJTkUgdm9pZAorQVNFVCAoTGlzcF9PYmplY3QgYXJyYXksIHB0 cmRpZmZfdCBpZHgsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgZWFzc2VydCAoMCA8PSBpZHgg JiYgaWR4IDwgQVNJWkUgKGFycmF5KSk7CisgIFhWRUNUT1IgKGFycmF5KS0+Y29udGVudHNb aWR4XSA9IHZhbDsKK30KKworTElTUF9JTkxJTkUgdm9pZAorZ2NfYXNldCAoTGlzcF9PYmpl Y3QgYXJyYXksIHB0cmRpZmZfdCBpZHgsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgLyogTGlr ZSBBU0VULCBidXQgYWxzbyBjYW4gYmUgdXNlZCBpbiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3I6 CisgICAgIHN3ZWVwX3dlYWtfdGFibGUgY2FsbHMgc2V0X2hhc2hfa2V5IGV0Yy4gd2hpbGUg dGhlIHRhYmxlIGlzIG1hcmtlZC4gICovCisgIGVhc3NlcnQgKDAgPD0gaWR4ICYmIGlkeCA8 IChBU0laRSAoYXJyYXkpICYgfkFSUkFZX01BUktfRkxBRykpOworICBYVkVDVE9SIChhcnJh eSktPmNvbnRlbnRzW2lkeF0gPSB2YWw7Cit9CisKIC8qIElmIGEgc3RydWN0IGlzIG1hZGUg dG8gbG9vayBsaWtlIGEgdmVjdG9yLCB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGxlbmd0aAog ICAgb2YgdGhlIHNob3J0ZXN0IHZlY3RvciB0aGF0IHdvdWxkIGhvbGQgdGhhdCBzdHJ1Y3Qu ICAqLwogCkBAIC04ODcsNDMgKzExNTcsNiBAQAogI2RlZmluZSBQU0VVRE9WRUNTSVpFKHR5 cGUsIG5vbmxpc3BmaWVsZCkJCQlcCiAgICgob2Zmc2V0b2YgKHR5cGUsIG5vbmxpc3BmaWVs ZCkgLSBoZWFkZXJfc2l6ZSkgLyB3b3JkX3NpemUpCiAKLS8qIEEgY2hhci10YWJsZSBpcyBh IGtpbmQgb2YgdmVjdG9ybGlrZSwgd2l0aCBjb250ZW50cyBhcmUgbGlrZSBhCi0gICB2ZWN0 b3IgYnV0IHdpdGggYSBmZXcgb3RoZXIgc2xvdHMuICBGb3Igc29tZSBwdXJwb3NlcywgaXQg bWFrZXMKLSAgIHNlbnNlIHRvIGhhbmRsZSBhIGNoYXItdGFibGUgd2l0aCB0eXBlIHN0cnVj dCBMaXNwX1ZlY3Rvci4gIEFuCi0gICBlbGVtZW50IG9mIGEgY2hhciB0YWJsZSBjYW4gYmUg YW55IExpc3Agb2JqZWN0cywgYnV0IGlmIGl0IGlzIGEgc3ViCi0gICBjaGFyLXRhYmxlLCB3 ZSB0cmVhdCBpdCBhIHRhYmxlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gb2YgYQotICAg c3BlY2lmaWMgcmFuZ2Ugb2YgY2hhcmFjdGVycy4gIEEgc3ViIGNoYXItdGFibGUgaGFzIHRo ZSBzYW1lCi0gICBzdHJ1Y3R1cmUgYXMgYSB2ZWN0b3IuICBBIHN1YiBjaGFyIHRhYmxlIGFw cGVhcnMgb25seSBpbiBhbiBlbGVtZW50Ci0gICBvZiBhIGNoYXItdGFibGUsIGFuZCB0aGVy ZSdzIG5vIHdheSB0byBhY2Nlc3MgaXQgZGlyZWN0bHkgZnJvbQotICAgRW1hY3MgTGlzcCBw cm9ncmFtLiAgKi8KLQotI2lmZGVmIF9fR05VQ19fCi0KLSNkZWZpbmUgQ0hBUl9UQUJMRV9S RUZfQVNDSUkoQ1QsIElEWCkJCQkJCVwKLSAgKHtzdHJ1Y3QgTGlzcF9DaGFyX1RhYmxlICpf dGJsID0gTlVMTDsJCQkJXAotICAgIExpc3BfT2JqZWN0IF92YWw7CQkJCQkJCVwKLSAgICBk byB7CQkJCQkJCQlcCi0gICAgICBfdGJsID0gX3RibCA/IFhDSEFSX1RBQkxFIChfdGJsLT5w YXJlbnQpIDogWENIQVJfVEFCTEUgKENUKTsJXAotICAgICAgX3ZhbCA9ICghIFNVQl9DSEFS X1RBQkxFX1AgKF90YmwtPmFzY2lpKSA/IF90YmwtPmFzY2lpCQlcCi0JICAgICAgOiBYU1VC X0NIQVJfVEFCTEUgKF90YmwtPmFzY2lpKS0+Y29udGVudHNbSURYXSk7CQlcCi0gICAgICBp ZiAoTklMUCAoX3ZhbCkpCQkJCQkJCVwKLQlfdmFsID0gX3RibC0+ZGVmYWx0OwkJCQkJCVwK LSAgICB9IHdoaWxlIChOSUxQIChfdmFsKSAmJiAhIE5JTFAgKF90YmwtPnBhcmVudCkpOwkJ CVwKLSAgICBfdmFsOyB9KQotCi0jZWxzZSAgLyogbm90IF9fR05VQ19fICovCi0KLSNkZWZp bmUgQ0hBUl9UQUJMRV9SRUZfQVNDSUkoQ1QsIElEWCkJCQkJCSAgXAotICAoISBOSUxQIChY Q0hBUl9UQUJMRSAoQ1QpLT5hc2NpaSkJCQkJCSAgXAotICAgPyAoISBTVUJfQ0hBUl9UQUJM RV9QIChYQ0hBUl9UQUJMRSAoQ1QpLT5hc2NpaSkJCQkgIFwKLSAgICAgID8gWENIQVJfVEFC TEUgKENUKS0+YXNjaWkJCQkJCQkgIFwKLSAgICAgIDogISBOSUxQIChYU1VCX0NIQVJfVEFC TEUgKFhDSEFSX1RBQkxFIChDVCktPmFzY2lpKS0+Y29udGVudHNbSURYXSkgXAotICAgICAg PyBYU1VCX0NIQVJfVEFCTEUgKFhDSEFSX1RBQkxFIChDVCktPmFzY2lpKS0+Y29udGVudHNb SURYXQkgIFwKLSAgICAgIDogY2hhcl90YWJsZV9yZWYgKChDVCksIChJRFgpKSkJCQkJCSAg XAotICAgOiAgY2hhcl90YWJsZV9yZWYgKChDVCksIChJRFgpKSkKLQotI2VuZGlmCS8qIG5v dCBfX0dOVUNfXyAqLwotCiAvKiBDb21wdXRlIEEgT1AgQiwgdXNpbmcgdGhlIHVuc2lnbmVk IGNvbXBhcmlzb24gb3BlcmF0b3IgT1AuICBBIGFuZCBCCiAgICBzaG91bGQgYmUgaW50ZWdl ciBleHByZXNzaW9ucy4gIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzCiAgICBtYXRoZW1hdGlj YWwgY29tcGFyaXNvbjsgZm9yIGV4YW1wbGUsIFVOU0lHTkVEX0NNUCAoMCwgPCwgLTEpCkBA IC05MzcsMTggKzExNzAsMTUgQEAKIC8qIE5vbnplcm8gaWZmIEMgaXMgYW4gQVNDSUkgY2hh cmFjdGVyLiAgKi8KICNkZWZpbmUgQVNDSUlfQ0hBUl9QKGMpIFVOU0lHTkVEX0NNUCAoYywg PCwgMHg4MCkKIAotLyogQWxtb3N0IGVxdWl2YWxlbnQgdG8gRmFyZWYgKENULCBJRFgpIHdp dGggb3B0aW1pemF0aW9uIGZvciBBU0NJSQotICAgY2hhcmFjdGVycy4gIERvIG5vdCBjaGVj ayB2YWxpZGl0eSBvZiBDVC4gICovCi0jZGVmaW5lIENIQVJfVEFCTEVfUkVGKENULCBJRFgp CQkJCQlcCi0gIChBU0NJSV9DSEFSX1AgKElEWCkgPyBDSEFSX1RBQkxFX1JFRl9BU0NJSSAo KENUKSwgKElEWCkpCVwKLSAgIDogY2hhcl90YWJsZV9yZWYgKChDVCksIChJRFgpKSkKLQot LyogRXF1aXZhbGVudCB0byBGYXNldCAoQ1QsIElEWCwgVkFMKSB3aXRoIG9wdGltaXphdGlv biBmb3IgQVNDSUkgYW5kCi0gICA4LWJpdCBFdXJvcGVhbiBjaGFyYWN0ZXJzLiAgRG8gbm90 IGNoZWNrIHZhbGlkaXR5IG9mIENULiAgKi8KLSNkZWZpbmUgQ0hBUl9UQUJMRV9TRVQoQ1Qs IElEWCwgVkFMKQkJCQkJXAotICAoQVNDSUlfQ0hBUl9QIChJRFgpICYmIFNVQl9DSEFSX1RB QkxFX1AgKFhDSEFSX1RBQkxFIChDVCktPmFzY2lpKQlcCi0gICA/IHNldF9zdWJfY2hhcl90 YWJsZV9jb250ZW50cyAoWENIQVJfVEFCTEUgKENUKS0+YXNjaWksIElEWCwgVkFMKQlcCi0g ICA6IGNoYXJfdGFibGVfc2V0IChDVCwgSURYLCBWQUwpKQorLyogQSBjaGFyLXRhYmxlIGlz IGEga2luZCBvZiB2ZWN0b3JsaWtlLCB3aXRoIGNvbnRlbnRzIGFyZSBsaWtlIGEKKyAgIHZl Y3RvciBidXQgd2l0aCBhIGZldyBvdGhlciBzbG90cy4gIEZvciBzb21lIHB1cnBvc2VzLCBp dCBtYWtlcworICAgc2Vuc2UgdG8gaGFuZGxlIGEgY2hhci10YWJsZSB3aXRoIHR5cGUgc3Ry dWN0IExpc3BfVmVjdG9yLiAgQW4KKyAgIGVsZW1lbnQgb2YgYSBjaGFyIHRhYmxlIGNhbiBi ZSBhbnkgTGlzcCBvYmplY3RzLCBidXQgaWYgaXQgaXMgYSBzdWIKKyAgIGNoYXItdGFibGUs IHdlIHRyZWF0IGl0IGEgdGFibGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBvZiBhCisg ICBzcGVjaWZpYyByYW5nZSBvZiBjaGFyYWN0ZXJzLiAgQSBzdWIgY2hhci10YWJsZSBoYXMg dGhlIHNhbWUKKyAgIHN0cnVjdHVyZSBhcyBhIHZlY3Rvci4gIEEgc3ViIGNoYXIgdGFibGUg YXBwZWFycyBvbmx5IGluIGFuIGVsZW1lbnQKKyAgIG9mIGEgY2hhci10YWJsZSwgYW5kIHRo ZXJlJ3Mgbm8gd2F5IHRvIGFjY2VzcyBpdCBkaXJlY3RseSBmcm9tCisgICBFbWFjcyBMaXNw IHByb2dyYW0uICAqLwogCiBlbnVtIENIQVJUQUJfU0laRV9CSVRTCiAgIHsKQEAgLTEwMTIs NiArMTI0Miw0NSBAQAogICAgIExpc3BfT2JqZWN0IGNvbnRlbnRzWzFdOwogICB9OwogCitM SVNQX0lOTElORSBMaXNwX09iamVjdAorQ0hBUl9UQUJMRV9SRUZfQVNDSUkgKExpc3BfT2Jq ZWN0IGN0LCBwdHJkaWZmX3QgaWR4KQoreworICBzdHJ1Y3QgTGlzcF9DaGFyX1RhYmxlICp0 YmwgPSBOVUxMOworICBMaXNwX09iamVjdCB2YWw7CisgIGRvCisgICAgeworICAgICAgdGJs ID0gdGJsID8gWENIQVJfVEFCTEUgKHRibC0+cGFyZW50KSA6IFhDSEFSX1RBQkxFIChjdCk7 CisgICAgICB2YWwgPSAoISBTVUJfQ0hBUl9UQUJMRV9QICh0YmwtPmFzY2lpKSA/IHRibC0+ YXNjaWkKKwkgICAgIDogWFNVQl9DSEFSX1RBQkxFICh0YmwtPmFzY2lpKS0+Y29udGVudHNb aWR4XSk7CisgICAgICBpZiAoTklMUCAodmFsKSkKKwl2YWwgPSB0YmwtPmRlZmFsdDsKKyAg ICB9CisgIHdoaWxlIChOSUxQICh2YWwpICYmICEgTklMUCAodGJsLT5wYXJlbnQpKTsKKwor ICByZXR1cm4gdmFsOworfQorCisvKiBBbG1vc3QgZXF1aXZhbGVudCB0byBGYXJlZiAoQ1Qs IElEWCkgd2l0aCBvcHRpbWl6YXRpb24gZm9yIEFTQ0lJCisgICBjaGFyYWN0ZXJzLiAgRG8g bm90IGNoZWNrIHZhbGlkaXR5IG9mIENULiAgKi8KK0xJU1BfSU5MSU5FIExpc3BfT2JqZWN0 CitDSEFSX1RBQkxFX1JFRiAoTGlzcF9PYmplY3QgY3QsIGludCBpZHgpCit7CisgIHJldHVy biAoQVNDSUlfQ0hBUl9QIChpZHgpCisJICA/IENIQVJfVEFCTEVfUkVGX0FTQ0lJIChjdCwg aWR4KQorCSAgOiBjaGFyX3RhYmxlX3JlZiAoY3QsIGlkeCkpOworfQorCisvKiBFcXVpdmFs ZW50IHRvIEZhc2V0IChDVCwgSURYLCBWQUwpIHdpdGggb3B0aW1pemF0aW9uIGZvciBBU0NJ SSBhbmQKKyAgIDgtYml0IEV1cm9wZWFuIGNoYXJhY3RlcnMuICBEbyBub3QgY2hlY2sgdmFs aWRpdHkgb2YgQ1QuICAqLworTElTUF9JTkxJTkUgdm9pZAorQ0hBUl9UQUJMRV9TRVQgKExp c3BfT2JqZWN0IGN0LCBpbnQgaWR4LCBMaXNwX09iamVjdCB2YWwpCit7CisgIGlmIChBU0NJ SV9DSEFSX1AgKGlkeCkgJiYgU1VCX0NIQVJfVEFCTEVfUCAoWENIQVJfVEFCTEUgKGN0KS0+ YXNjaWkpKQorICAgIHNldF9zdWJfY2hhcl90YWJsZV9jb250ZW50cyAoWENIQVJfVEFCTEUg KGN0KS0+YXNjaWksIGlkeCwgdmFsKTsKKyAgZWxzZQorICAgIGNoYXJfdGFibGVfc2V0IChj dCwgaWR4LCB2YWwpOworfQorCiAvKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBidWls dC1pbiBmdW5jdGlvbi4KICAgIEl0IGlzIGdlbmVyYXRlZCBieSB0aGUgREVGVU4gbWFjcm8g b25seS4KICAgIGRlZnN1YnIgbWFrZXMgaXQgaW50byBhIExpc3Agb2JqZWN0LiAgKi8KQEAg LTEwNDgsOCArMTMxNywxMiBAQAogCiAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiAiZXh0cmEi IHNsb3RzIGluIHRoZSBjaGFyIHRhYmxlIENULiAgKi8KIAotI2RlZmluZSBDSEFSX1RBQkxF X0VYVFJBX1NMT1RTKENUKQlcCi0gICgoKENUKS0+aGVhZGVyLnNpemUgJiBQU0VVRE9WRUNU T1JfU0laRV9NQVNLKSAtIENIQVJfVEFCTEVfU1RBTkRBUkRfU0xPVFMpCitMSVNQX0lOTElO RSBpbnQKK0NIQVJfVEFCTEVfRVhUUkFfU0xPVFMgKHN0cnVjdCBMaXNwX0NoYXJfVGFibGUg KmN0KQoreworICByZXR1cm4gKChjdC0+aGVhZGVyLnNpemUgJiBQU0VVRE9WRUNUT1JfU0la RV9NQVNLKQorCSAgLSBDSEFSX1RBQkxFX1NUQU5EQVJEX1NMT1RTKTsKK30KIAogDAogLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCkBAIC0xMTIxLDQwICsxMzk0LDg2IEBACiAKIC8qIFZhbHVlIGlz IG5hbWUgb2Ygc3ltYm9sLiAgKi8KIAotI2RlZmluZSBTWU1CT0xfVkFMKHN5bSkJCQkJCQkJ XAotICAoZWFzc2VydCAoKHN5bSktPnJlZGlyZWN0ID09IFNZTUJPTF9QTEFJTlZBTCksICBz eW0tPnZhbC52YWx1ZSkKLSNkZWZpbmUgU1lNQk9MX0FMSUFTKHN5bSkJCQkJCQlcCi0gIChl YXNzZXJ0ICgoc3ltKS0+cmVkaXJlY3QgPT0gU1lNQk9MX1ZBUkFMSUFTKSwgIChzeW0pLT52 YWwuYWxpYXMpCi0jZGVmaW5lIFNZTUJPTF9CTFYoc3ltKQkJCQkJCQlcCi0gIChlYXNzZXJ0 ICgoc3ltKS0+cmVkaXJlY3QgPT0gU1lNQk9MX0xPQ0FMSVpFRCksIChzeW0pLT52YWwuYmx2 KQotI2RlZmluZSBTWU1CT0xfRldEKHN5bSkJCQkJCQkJXAotICAoZWFzc2VydCAoKHN5bSkt PnJlZGlyZWN0ID09IFNZTUJPTF9GT1JXQVJERUQpLCAoc3ltKS0+dmFsLmZ3ZCkKLSNkZWZp bmUgU0VUX1NZTUJPTF9WQUwoc3ltLCB2KQkJCQkJCVwKLSAgKGVhc3NlcnQgKChzeW0pLT5y ZWRpcmVjdCA9PSBTWU1CT0xfUExBSU5WQUwpLCAgKHN5bSktPnZhbC52YWx1ZSA9ICh2KSkK LSNkZWZpbmUgU0VUX1NZTUJPTF9BTElBUyhzeW0sIHYpCQkJCQlcCi0gIChlYXNzZXJ0ICgo c3ltKS0+cmVkaXJlY3QgPT0gU1lNQk9MX1ZBUkFMSUFTKSwgIChzeW0pLT52YWwuYWxpYXMg PSAodikpCi0jZGVmaW5lIFNFVF9TWU1CT0xfQkxWKHN5bSwgdikJCQkJCQlcCi0gIChlYXNz ZXJ0ICgoc3ltKS0+cmVkaXJlY3QgPT0gU1lNQk9MX0xPQ0FMSVpFRCksIChzeW0pLT52YWwu Ymx2ID0gKHYpKQotI2RlZmluZSBTRVRfU1lNQk9MX0ZXRChzeW0sIHYpCQkJCQkJXAotICAo ZWFzc2VydCAoKHN5bSktPnJlZGlyZWN0ID09IFNZTUJPTF9GT1JXQVJERUQpLCAoc3ltKS0+ dmFsLmZ3ZCA9ICh2KSkKLQotI2RlZmluZSBTWU1CT0xfTkFNRShzeW0pIFhTWU1CT0wgKHN5 bSktPm5hbWUKLQotLyogVmFsdWUgaXMgbm9uLXplcm8gaWYgU1lNIGlzIGFuIGludGVybmVk IHN5bWJvbC4gICovCi0KLSNkZWZpbmUgU1lNQk9MX0lOVEVSTkVEX1Aoc3ltKQkJCQlcCi0g IChYU1lNQk9MIChzeW0pLT5pbnRlcm5lZCAhPSBTWU1CT0xfVU5JTlRFUk5FRCkKLQotLyog VmFsdWUgaXMgbm9uLXplcm8gaWYgU1lNIGlzIGludGVybmVkIGluIGluaXRpYWxfb2JhcnJh eS4gICovCi0KLSNkZWZpbmUgU1lNQk9MX0lOVEVSTkVEX0lOX0lOSVRJQUxfT0JBUlJBWV9Q KHN5bSkJCQlcCi0gIChYU1lNQk9MIChzeW0pLT5pbnRlcm5lZCA9PSBTWU1CT0xfSU5URVJO RURfSU5fSU5JVElBTF9PQkFSUkFZKQorTElTUF9JTkxJTkUgTGlzcF9PYmplY3QKKyhTWU1C T0xfVkFMKSAoc3RydWN0IExpc3BfU3ltYm9sICpzeW0pCit7CisgIGVhc3NlcnQgKHN5bS0+ cmVkaXJlY3QgPT0gU1lNQk9MX1BMQUlOVkFMKTsKKyAgcmV0dXJuIHN5bS0+dmFsLnZhbHVl OworfQorTElTUF9JTkxJTkUgc3RydWN0IExpc3BfU3ltYm9sICoKK1NZTUJPTF9BTElBUyAo c3RydWN0IExpc3BfU3ltYm9sICpzeW0pCit7CisgIGVhc3NlcnQgKHN5bS0+cmVkaXJlY3Qg PT0gU1lNQk9MX1ZBUkFMSUFTKTsKKyAgcmV0dXJuIHN5bS0+dmFsLmFsaWFzOworfQorTElT UF9JTkxJTkUgc3RydWN0IExpc3BfQnVmZmVyX0xvY2FsX1ZhbHVlICoKK1NZTUJPTF9CTFYg KHN0cnVjdCBMaXNwX1N5bWJvbCAqc3ltKQoreworICBlYXNzZXJ0IChzeW0tPnJlZGlyZWN0 ID09IFNZTUJPTF9MT0NBTElaRUQpOworICByZXR1cm4gc3ltLT52YWwuYmx2OworfQorTElT UF9JTkxJTkUgdW5pb24gTGlzcF9Gd2QgKgorU1lNQk9MX0ZXRCAoc3RydWN0IExpc3BfU3lt Ym9sICpzeW0pCit7CisgIGVhc3NlcnQgKHN5bS0+cmVkaXJlY3QgPT0gU1lNQk9MX0ZPUldB UkRFRCk7CisgIHJldHVybiBzeW0tPnZhbC5md2Q7Cit9CitMSVNQX0lOTElORSB2b2lkCiso U0VUX1NZTUJPTF9WQUwpIChzdHJ1Y3QgTGlzcF9TeW1ib2wgKnN5bSwgTGlzcF9PYmplY3Qg dikKK3sKKyAgZWFzc2VydCAoc3ltLT5yZWRpcmVjdCA9PSBTWU1CT0xfUExBSU5WQUwpOwor ICBzeW0tPnZhbC52YWx1ZSA9IHY7Cit9CitMSVNQX0lOTElORSB2b2lkCitTRVRfU1lNQk9M X0FMSUFTIChzdHJ1Y3QgTGlzcF9TeW1ib2wgKnN5bSwgc3RydWN0IExpc3BfU3ltYm9sICp2 KQoreworICBlYXNzZXJ0IChzeW0tPnJlZGlyZWN0ID09IFNZTUJPTF9WQVJBTElBUyk7Cisg IHN5bS0+dmFsLmFsaWFzID0gdjsKK30KK0xJU1BfSU5MSU5FIHZvaWQKK1NFVF9TWU1CT0xf QkxWIChzdHJ1Y3QgTGlzcF9TeW1ib2wgKnN5bSwgc3RydWN0IExpc3BfQnVmZmVyX0xvY2Fs X1ZhbHVlICp2KQoreworICBlYXNzZXJ0IChzeW0tPnJlZGlyZWN0ID09IFNZTUJPTF9MT0NB TElaRUQpOworICBzeW0tPnZhbC5ibHYgPSB2OworfQorTElTUF9JTkxJTkUgdm9pZAorU0VU X1NZTUJPTF9GV0QgKHN0cnVjdCBMaXNwX1N5bWJvbCAqc3ltLCB1bmlvbiBMaXNwX0Z3ZCAq dikKK3sKKyAgZWFzc2VydCAoc3ltLT5yZWRpcmVjdCA9PSBTWU1CT0xfRk9SV0FSREVEKTsK KyAgc3ltLT52YWwuZndkID0gdjsKK30KKworTElTUF9JTkxJTkUgTGlzcF9PYmplY3QKK1NZ TUJPTF9OQU1FIChMaXNwX09iamVjdCBzeW0pCit7CisgIHJldHVybiBYU1lNQk9MIChzeW0p LT5uYW1lOworfQorCisvKiBWYWx1ZSBpcyB0cnVlIGlmIFNZTSBpcyBhbiBpbnRlcm5lZCBz eW1ib2wuICAqLworCitMSVNQX0lOTElORSBib29sCitTWU1CT0xfSU5URVJORURfUCAoTGlz cF9PYmplY3Qgc3ltKQoreworICByZXR1cm4gWFNZTUJPTCAoc3ltKS0+aW50ZXJuZWQgIT0g U1lNQk9MX1VOSU5URVJORUQ7Cit9CisKKy8qIFZhbHVlIGlzIHRydWUgaWYgU1lNIGlzIGlu dGVybmVkIGluIGluaXRpYWxfb2JhcnJheS4gICovCisKK0xJU1BfSU5MSU5FIGJvb2wKK1NZ TUJPTF9JTlRFUk5FRF9JTl9JTklUSUFMX09CQVJSQVlfUCAoTGlzcF9PYmplY3Qgc3ltKQor eworICByZXR1cm4gWFNZTUJPTCAoc3ltKS0+aW50ZXJuZWQgPT0gU1lNQk9MX0lOVEVSTkVE X0lOX0lOSVRJQUxfT0JBUlJBWTsKK30KIAogLyogVmFsdWUgaXMgbm9uLXplcm8gaWYgc3lt Ym9sIGlzIGNvbnNpZGVyZWQgYSBjb25zdGFudCwgaS5lLiBpdHMKICAgIHZhbHVlIGNhbm5v dCBiZSBjaGFuZ2VkICh0aGVyZSBpcyBhbiBleGNlcHRpb24gZm9yIGtleXdvcmQgc3ltYm9s cywKICAgIHdob3NlIHZhbHVlIGNhbiBiZSBzZXQgdG8gdGhlIGtleXdvcmQgc3ltYm9sIGl0 c2VsZikuICAqLwogCi0jZGVmaW5lIFNZTUJPTF9DT05TVEFOVF9QKHN5bSkgWFNZTUJPTCAo c3ltKS0+Y29uc3RhbnQKK0xJU1BfSU5MSU5FIGludAorKFNZTUJPTF9DT05TVEFOVF9QKSAo TGlzcF9PYmplY3Qgc3ltKQoreworICByZXR1cm4gWFNZTUJPTCAoc3ltKS0+Y29uc3RhbnQ7 Cit9CiAKICNkZWZpbmUgREVGU1lNKHN5bSwgbmFtZSkJCQkJCQlcCiAgIGRvIHsgKHN5bSkg PSBpbnRlcm5fY19zdHJpbmcgKChuYW1lKSk7IHN0YXRpY3BybyAoJihzeW0pKTsgfSB3aGls ZSAoMCkKQEAgLTEyNDAsNDIgKzE1NTksNjkgQEAKIH07CiAKIAotI2RlZmluZSBYSEFTSF9U QUJMRShPQkopIFwKLSAgICAgKChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICopIFhVTlRBRyAo T0JKLCBMaXNwX1ZlY3Rvcmxpa2UpKQorTElTUF9JTkxJTkUgc3RydWN0IExpc3BfSGFzaF9U YWJsZSAqCitYSEFTSF9UQUJMRSAoTGlzcF9PYmplY3QgYSkKK3sKKyAgcmV0dXJuIFhVTlRB RyAoYSwgTGlzcF9WZWN0b3JsaWtlKTsKK30KIAogI2RlZmluZSBYU0VUX0hBU0hfVEFCTEUo VkFSLCBQVFIpIFwKICAgICAgKFhTRVRQU0VVRE9WRUNUT1IgKFZBUiwgUFRSLCBQVkVDX0hB U0hfVEFCTEUpKQogCi0jZGVmaW5lIEhBU0hfVEFCTEVfUChPQkopICBQU0VVRE9WRUNUT1JQ IChPQkosIFBWRUNfSEFTSF9UQUJMRSkKLQotI2RlZmluZSBDSEVDS19IQVNIX1RBQkxFKHgp IFwKLSAgQ0hFQ0tfVFlQRSAoSEFTSF9UQUJMRV9QICh4KSwgUWhhc2hfdGFibGVfcCwgeCkK K0xJU1BfSU5MSU5FIGJvb2wKK0hBU0hfVEFCTEVfUCAoTGlzcF9PYmplY3QgYSkKK3sKKyAg cmV0dXJuIFBTRVVET1ZFQ1RPUlAgKGEsIFBWRUNfSEFTSF9UQUJMRSk7Cit9CitMSVNQX0lO TElORSB2b2lkCitDSEVDS19IQVNIX1RBQkxFIChMaXNwX09iamVjdCB4KQoreworICByZXR1 cm4gQ0hFQ0tfVFlQRSAoSEFTSF9UQUJMRV9QICh4KSwgUWhhc2hfdGFibGVfcCwgeCk7Cit9 CiAKIC8qIFZhbHVlIGlzIHRoZSBrZXkgcGFydCBvZiBlbnRyeSBJRFggaW4gaGFzaCB0YWJs ZSBILiAgKi8KLQotI2RlZmluZSBIQVNIX0tFWShILCBJRFgpICAgQVJFRiAoKEgpLT5rZXlf YW5kX3ZhbHVlLCAyICogKElEWCkpCitMSVNQX0lOTElORSBMaXNwX09iamVjdAorSEFTSF9L RVkgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgsIHB0cmRpZmZfdCBpZHgpCit7CisgIHJl dHVybiBBUkVGIChoLT5rZXlfYW5kX3ZhbHVlLCAyICogaWR4KTsKK30KIAogLyogVmFsdWUg aXMgdGhlIHZhbHVlIHBhcnQgb2YgZW50cnkgSURYIGluIGhhc2ggdGFibGUgSC4gICovCi0K LSNkZWZpbmUgSEFTSF9WQUxVRShILCBJRFgpIEFSRUYgKChIKS0+a2V5X2FuZF92YWx1ZSwg MiAqIChJRFgpICsgMSkKK0xJU1BfSU5MSU5FIExpc3BfT2JqZWN0CitIQVNIX1ZBTFVFIChz dHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoLCBwdHJkaWZmX3QgaWR4KQoreworICByZXR1cm4g QVJFRiAoaC0+a2V5X2FuZF92YWx1ZSwgMiAqIGlkeCArIDEpOworfQogCiAvKiBWYWx1ZSBp cyB0aGUgaW5kZXggb2YgdGhlIG5leHQgZW50cnkgZm9sbG93aW5nIHRoZSBvbmUgYXQgSURY CiAgICBpbiBoYXNoIHRhYmxlIEguICAqLwotCi0jZGVmaW5lIEhBU0hfTkVYVChILCBJRFgp ICBBUkVGICgoSCktPm5leHQsIChJRFgpKQorTElTUF9JTkxJTkUgTGlzcF9PYmplY3QKK0hB U0hfTkVYVCAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCwgcHRyZGlmZl90IGlkeCkKK3sK KyAgcmV0dXJuIEFSRUYgKGgtPm5leHQsIGlkeCk7Cit9CiAKIC8qIFZhbHVlIGlzIHRoZSBo YXNoIGNvZGUgY29tcHV0ZWQgZm9yIGVudHJ5IElEWCBpbiBoYXNoIHRhYmxlIEguICAqLwot Ci0jZGVmaW5lIEhBU0hfSEFTSChILCBJRFgpICBBUkVGICgoSCktPmhhc2gsIChJRFgpKQor TElTUF9JTkxJTkUgTGlzcF9PYmplY3QKK0hBU0hfSEFTSCAoc3RydWN0IExpc3BfSGFzaF9U YWJsZSAqaCwgcHRyZGlmZl90IGlkeCkKK3sKKyAgcmV0dXJuIEFSRUYgKGgtPmhhc2gsIGlk eCk7Cit9CiAKIC8qIFZhbHVlIGlzIHRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCBpbiBoYXNo IHRhYmxlIEggdGhhdCBpcyB0aGUKICAgIHN0YXJ0IG9mIHRoZSBjb2xsaXNpb24gbGlzdCBh dCBpbmRleCBJRFggaW4gdGhlIGluZGV4IHZlY3RvciBvZiBILiAgKi8KLQotI2RlZmluZSBI QVNIX0lOREVYKEgsIElEWCkgIEFSRUYgKChIKS0+aW5kZXgsIChJRFgpKQorTElTUF9JTkxJ TkUgTGlzcF9PYmplY3QKK0hBU0hfSU5ERVggKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgs IHB0cmRpZmZfdCBpZHgpCit7CisgIHJldHVybiBBUkVGIChoLT5pbmRleCwgaWR4KTsKK30K IAogLyogVmFsdWUgaXMgdGhlIHNpemUgb2YgaGFzaCB0YWJsZSBILiAgKi8KLQotI2RlZmlu ZSBIQVNIX1RBQkxFX1NJWkUoSCkgQVNJWkUgKChIKS0+bmV4dCkKK0xJU1BfSU5MSU5FIHB0 cmRpZmZfdAorSEFTSF9UQUJMRV9TSVpFIChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoKQor eworICByZXR1cm4gQVNJWkUgKGgtPm5leHQpOworfQogCiAvKiBEZWZhdWx0IHNpemUgZm9y IGhhc2ggdGFibGVzIGlmIG5vdCBzcGVjaWZpZWQuICAqLwogCkBAIC0xNDg1LDYgKzE4MzEs NTMgQEAKICAgICB9IGRhdGFbU0FWRV9WQUxVRV9TTE9UU107CiAgIH07CiAKKy8qIFJldHVy biB0aGUgdHlwZSBvZiBWJ3MgTnRoIHNhdmVkIHZhbHVlLiAgKi8KK0xJU1BfSU5MSU5FIGlu dAorc2F2ZV90eXBlIChzdHJ1Y3QgTGlzcF9TYXZlX1ZhbHVlICp2LCBpbnQgbikKK3sKKyAg ZWFzc2VydCAoMCA8PSBuICYmIG4gPCBTQVZFX1ZBTFVFX1NMT1RTKTsKKyAgcmV0dXJuICh2 LT5zYXZlX3R5cGUgPj4gKFNBVkVfU0xPVF9CSVRTICogbikgJiAoKDEgPDwgU0FWRV9TTE9U X0JJVFMpIC0gMSkpOworfQorCisvKiBHZXQgYW5kIHNldCB0aGUgTnRoIHNhdmVkIHBvaW50 ZXIuICAqLworCitMSVNQX0lOTElORSB2b2lkICoKK1hTQVZFX1BPSU5URVIgKExpc3BfT2Jq ZWN0IG9iaiwgaW50IG4pCit7CisgIGVhc3NlcnQgKHNhdmVfdHlwZSAoWFNBVkVfVkFMVUUg KG9iaiksIG4pID09IFNBVkVfUE9JTlRFUik7CisgIHJldHVybiBYU0FWRV9WQUxVRSAob2Jq KS0+ZGF0YVtuXS5wb2ludGVyOzsKK30KK0xJU1BfSU5MSU5FIHZvaWQKK3NldF9zYXZlX3Bv aW50ZXIgKExpc3BfT2JqZWN0IG9iaiwgaW50IG4sIHZvaWQgKnZhbCkKK3sKKyAgZWFzc2Vy dCAoc2F2ZV90eXBlIChYU0FWRV9WQUxVRSAob2JqKSwgbikgPT0gU0FWRV9QT0lOVEVSKTsK KyAgWFNBVkVfVkFMVUUgKG9iaiktPmRhdGFbbl0ucG9pbnRlciA9IHZhbDsKK30KKworLyog TGlrZXdpc2UgZm9yIHRoZSBzYXZlZCBpbnRlZ2VyLiAgKi8KKworTElTUF9JTkxJTkUgcHRy ZGlmZl90CitYU0FWRV9JTlRFR0VSIChMaXNwX09iamVjdCBvYmosIGludCBuKQoreworICBl YXNzZXJ0IChzYXZlX3R5cGUgKFhTQVZFX1ZBTFVFIChvYmopLCBuKSA9PSBTQVZFX0lOVEVH RVIpOworICByZXR1cm4gWFNBVkVfVkFMVUUgKG9iaiktPmRhdGFbbl0uaW50ZWdlcjsKK30K K0xJU1BfSU5MSU5FIHZvaWQKK3NldF9zYXZlX2ludGVnZXIgKExpc3BfT2JqZWN0IG9iaiwg aW50IG4sIHB0cmRpZmZfdCB2YWwpCit7CisgIGVhc3NlcnQgKHNhdmVfdHlwZSAoWFNBVkVf VkFMVUUgKG9iaiksIG4pID09IFNBVkVfSU5URUdFUik7CisgIFhTQVZFX1ZBTFVFIChvYmop LT5kYXRhW25dLmludGVnZXIgPSB2YWw7Cit9CisKKy8qIEV4dHJhY3QgTnRoIHNhdmVkIG9i amVjdC4gICovCisKK0xJU1BfSU5MSU5FIExpc3BfT2JqZWN0CitYU0FWRV9PQkpFQ1QgKExp c3BfT2JqZWN0IG9iaiwgaW50IG4pCit7CisgIGVhc3NlcnQgKHNhdmVfdHlwZSAoWFNBVkVf VkFMVUUgKG9iaiksIG4pID09IFNBVkVfT0JKRUNUKTsKKyAgcmV0dXJuIFhTQVZFX1ZBTFVF IChvYmopLT5kYXRhW25dLm9iamVjdDsKK30KKwogLyogQSBtaXNjZWxsYW5lb3VzIG9iamVj dCwgd2hlbiBpdCdzIG9uIHRoZSBmcmVlIGxpc3QuICAqLwogc3RydWN0IExpc3BfRnJlZQog ICB7CkBAIC0xNTA2LDYgKzE4OTksNDYgQEAKICAgICBzdHJ1Y3QgTGlzcF9TYXZlX1ZhbHVl IHVfc2F2ZV92YWx1ZTsKICAgfTsKIAorTElTUF9JTkxJTkUgdW5pb24gTGlzcF9NaXNjICoK K1hNSVNDIChMaXNwX09iamVjdCBhKQoreworICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX01p c2MpOworfQorCitMSVNQX0lOTElORSBzdHJ1Y3QgTGlzcF9NaXNjX0FueSAqCitYTUlTQ0FO WSAoTGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoTUlTQ1AgKGEpKTsKKyAgcmV0dXJu ICYgWE1JU0MgKGEpLT51X2FueTsKK30KKworTElTUF9JTkxJTkUgZW51bSBMaXNwX01pc2Nf VHlwZQorWE1JU0NUWVBFIChMaXNwX09iamVjdCBhKQoreworICByZXR1cm4gWE1JU0NBTlkg KGEpLT50eXBlOworfQorCitMSVNQX0lOTElORSBzdHJ1Y3QgTGlzcF9NYXJrZXIgKgorWE1B UktFUiAoTGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoTUFSS0VSUCAoYSkpOworICBy ZXR1cm4gJiBYTUlTQyAoYSktPnVfbWFya2VyOworfQorCitMSVNQX0lOTElORSBzdHJ1Y3Qg TGlzcF9PdmVybGF5ICoKK1hPVkVSTEFZIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0 IChPVkVSTEFZUCAoYSkpOworICByZXR1cm4gJiBYTUlTQyAoYSktPnVfb3ZlcmxheTsKK30K KworTElTUF9JTkxJTkUgc3RydWN0IExpc3BfU2F2ZV9WYWx1ZSAqCitYU0FWRV9WQUxVRSAo TGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoU0FWRV9WQUxVRVAgKGEpKTsKKyAgcmV0 dXJuICYgWE1JU0MgKGEpLT51X3NhdmVfdmFsdWU7Cit9CisMCiAvKiBGb3J3YXJkaW5nIHBv aW50ZXIgdG8gYW4gaW50IHZhcmlhYmxlLgogICAgVGhpcyBpcyBhbGxvd2VkIG9ubHkgaW4g dGhlIHZhbHVlIGNlbGwgb2YgYSBzeW1ib2wsCiAgICBhbmQgaXQgbWVhbnMgdGhhdCB0aGUg c3ltYm9sJ3MgdmFsdWUgcmVhbGx5IGxpdmVzIGluIHRoZQpAQCAtMTYxMiw2ICsyMDQ1LDQ3 IEBACiAgICAgc3RydWN0IExpc3BfQnVmZmVyX09iamZ3ZCB1X2J1ZmZlcl9vYmpmd2Q7CiAg ICAgc3RydWN0IExpc3BfS2JvYXJkX09iamZ3ZCB1X2tib2FyZF9vYmpmd2Q7CiAgIH07CisK K0xJU1BfSU5MSU5FIGVudW0gTGlzcF9Gd2RfVHlwZQorWEZXRFRZUEUgKHVuaW9uIExpc3Bf RndkICphKQoreworICByZXR1cm4gYS0+dV9pbnRmd2QudHlwZTsKK30KKworTElTUF9JTkxJ TkUgc3RydWN0IExpc3BfSW50ZndkICoKK1hJTlRGV0QgKHVuaW9uIExpc3BfRndkICphKQor eworICBlYXNzZXJ0IChJTlRGV0RQIChhKSk7CisgIHJldHVybiAmYS0+dV9pbnRmd2Q7Cit9 CisKK0xJU1BfSU5MSU5FIHN0cnVjdCBMaXNwX0Jvb2xmd2QgKgorWEJPT0xGV0QgKHVuaW9u IExpc3BfRndkICphKQoreworICBlYXNzZXJ0IChCT09MRldEUCAoYSkpOworICByZXR1cm4g JmEtPnVfYm9vbGZ3ZDsKK30KKworTElTUF9JTkxJTkUgc3RydWN0IExpc3BfT2JqZndkICoK K1hPQkpGV0QgKHVuaW9uIExpc3BfRndkICphKQoreworICBlYXNzZXJ0IChPQkpGV0RQIChh KSk7CisgIHJldHVybiAmYS0+dV9vYmpmd2Q7Cit9CisKK0xJU1BfSU5MSU5FIHN0cnVjdCBM aXNwX0J1ZmZlcl9PYmpmd2QgKgorWEJVRkZFUl9PQkpGV0QgKHVuaW9uIExpc3BfRndkICph KQoreworICBlYXNzZXJ0IChCVUZGRVJfT0JKRldEUCAoYSkpOworICByZXR1cm4gJmEtPnVf YnVmZmVyX29iamZ3ZDsKK30KKworTElTUF9JTkxJTkUgc3RydWN0IExpc3BfS2JvYXJkX09i amZ3ZCAqCitYS0JPQVJEX09CSkZXRCAodW5pb24gTGlzcF9Gd2QgKmEpCit7CisgIGVhc3Nl cnQgKEtCT0FSRF9PQkpGV0RQIChhKSk7CisgIHJldHVybiAmYS0+dV9rYm9hcmRfb2JqZndk OworfQogDAogLyogTGlzcCBmbG9hdGluZyBwb2ludCB0eXBlLiAgKi8KIHN0cnVjdCBMaXNw X0Zsb2F0CkBAIC0xNjIzLDggKzIwOTcsMTcgQEAKICAgICB9IHU7CiAgIH07CiAKLSNkZWZp bmUgWEZMT0FUX0RBVEEoZikgKDAgPyBYRkxPQVQgKGYpLT51LmRhdGEgOiAgWEZMT0FUIChm KS0+dS5kYXRhKQotI2RlZmluZSBYRkxPQVRfSU5JVChmLCBuKSAoWEZMT0FUIChmKS0+dS5k YXRhID0gKG4pKQorTElTUF9JTkxJTkUgZG91YmxlCitYRkxPQVRfREFUQSAoTGlzcF9PYmpl Y3QgZikKK3sKKyAgcmV0dXJuIFhGTE9BVCAoZiktPnUuZGF0YTsKK30KKworTElTUF9JTkxJ TkUgdm9pZAorWEZMT0FUX0lOSVQgKExpc3BfT2JqZWN0IGYsIGRvdWJsZSBuKQoreworICBY RkxPQVQgKGYpLT51LmRhdGEgPSBuOworfQogCiAvKiBNb3N0IGhvc3RzIG5vd2FkYXlzIHVz ZSBJRUVFIGZsb2F0aW5nIHBvaW50LCBzbyB0aGV5IHVzZSBJRUMgNjA1NTkKICAgIHJlcHJl c2VudGF0aW9ucywgaGF2ZSBpbmZpbml0aWVzIGFuZCBOYU5zLCBhbmQgZG8gbm90IHRyYXAg b24KQEAgLTE2MzMsOCArMjExNiwxMiBAQAogICAgd2FudGVkIGhlcmUsIGJ1dCBpcyBub3Qg cXVpdGUgcmlnaHQgYmVjYXVzZSBFbWFjcyBkb2VzIG5vdCByZXF1aXJlCiAgICBhbGwgdGhl IGZlYXR1cmVzIG9mIEMxMSBBbm5leCBGIChhbmQgZG9lcyBub3QgcmVxdWlyZSBDMTEgYXQg YWxsLAogICAgZm9yIHRoYXQgbWF0dGVyKS4gICovCi0jZGVmaW5lIElFRUVfRkxPQVRJTkdf UE9JTlQgKEZMVF9SQURJWCA9PSAyICYmIEZMVF9NQU5UX0RJRyA9PSAyNCBcCi0JCQkgICAg ICYmIEZMVF9NSU5fRVhQID09IC0xMjUgJiYgRkxUX01BWF9FWFAgPT0gMTI4KQorZW51bQor ICB7CisgICAgSUVFRV9GTE9BVElOR19QT0lOVAorICAgICAgPSAoRkxUX1JBRElYID09IDIg JiYgRkxUX01BTlRfRElHID09IDI0CisJICYmIEZMVF9NSU5fRVhQID09IC0xMjUgJiYgRkxU X01BWF9FWFAgPT0gMTI4KQorICB9OwogCiAvKiBBIGNoYXJhY3RlciwgZGVjbGFyZWQgd2l0 aCB0aGUgZm9sbG93aW5nIHR5cGVkZWYsIGlzIGEgbWVtYmVyCiAgICBvZiBzb21lIGNoYXJh Y3RlciBzZXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGJ1ZmZlci4gICovCkBAIC0x Njc1LDY0ICsyMTYyLDYgQEAKICAgICAgICBpdHNlbGYuICAqLwogICAgIENIQVJBQ1RFUkJJ VFMgPSAyMgogICB9OwotCi0KLQotDAotLyogVGhlIGdseXBoIGRhdGF0eXBlLCB1c2VkIHRv IHJlcHJlc2VudCBjaGFyYWN0ZXJzIG9uIHRoZSBkaXNwbGF5LgotICAgSXQgY29uc2lzdHMg b2YgYSBjaGFyIGNvZGUgYW5kIGEgZmFjZSBpZC4gICovCi0KLXR5cGVkZWYgc3RydWN0IHsK LSAgaW50IGNoOwotICBpbnQgZmFjZV9pZDsKLX0gR0xZUEg7Ci0KLS8qIFJldHVybiBhIGds eXBoJ3MgY2hhcmFjdGVyIGNvZGUuICAqLwotI2RlZmluZSBHTFlQSF9DSEFSKGdseXBoKSAo KGdseXBoKS5jaCkKLQotLyogUmV0dXJuIGEgZ2x5cGgncyBmYWNlIElELiAgKi8KLSNkZWZp bmUgR0xZUEhfRkFDRShnbHlwaCkgKChnbHlwaCkuZmFjZV9pZCkKLQotI2RlZmluZSBTRVRf R0xZUEhfQ0hBUihnbHlwaCwgY2hhcikgKChnbHlwaCkuY2ggPSAoY2hhcikpCi0jZGVmaW5l IFNFVF9HTFlQSF9GQUNFKGdseXBoLCBmYWNlKSAoKGdseXBoKS5mYWNlX2lkID0gKGZhY2Up KQotI2RlZmluZSBTRVRfR0xZUEgoZ2x5cGgsIGNoYXIsIGZhY2UpICgoZ2x5cGgpLmNoID0g KGNoYXIpLCAoZ2x5cGgpLmZhY2VfaWQgPSAoZmFjZSkpCi0KLS8qIFJldHVybiAxIGlmIEdM WVBIIGNvbnRhaW5zIHZhbGlkIGNoYXJhY3RlciBjb2RlLiAgKi8KLSNkZWZpbmUgR0xZUEhf Q0hBUl9WQUxJRF9QKGdseXBoKSBDSEFSX1ZBTElEX1AgKEdMWVBIX0NIQVIgKGdseXBoKSkK LQotCi0vKiBHbHlwaCBDb2RlIGZyb20gYSBkaXNwbGF5IHZlY3RvciBtYXkgZWl0aGVyIGJl IGFuIGludGVnZXIgd2hpY2gKLSAgIGVuY29kZXMgYSBjaGFyIGNvZGUgaW4gdGhlIGxvd2Vy IENIQVJBQ1RFUkJJVFMgYml0cyBhbmQgYSAodmVyeSBzbWFsbCkKLSAgIGZhY2UtaWQgaW4g dGhlIHVwcGVyIGJpdHMsIG9yIGl0IG1heSBiZSBhIGNvbnMgKENIQVIgLiBGQUNFLUlEKS4g ICovCi0KLSNkZWZpbmUgR0xZUEhfQ09ERV9QKGdjKQkJCQkJCVwKLSAgKENPTlNQIChnYykJ CQkJCQkJCVwKLSAgID8gKENIQVJBQ1RFUlAgKFhDQVIgKGdjKSkJCQkJCQlcCi0gICAgICAm JiBSQU5HRURfSU5URUdFUlAgKDAsIFhDRFIgKGdjKSwgTUFYX0ZBQ0VfSUQpKQkJCVwKLSAg IDogKFJBTkdFRF9JTlRFR0VSUAkJCQkJCQlcCi0gICAgICAoMCwgZ2MsCQkJCQkJCQlcCi0g ICAgICAgKE1BWF9GQUNFX0lEIDwgVFlQRV9NQVhJTVVNIChFTUFDU19JTlQpID4+IENIQVJB Q1RFUkJJVFMJCVwKLQk/ICgoRU1BQ1NfSU5UKSBNQVhfRkFDRV9JRCA8PCBDSEFSQUNURVJC SVRTKSB8IE1BWF9DSEFSCQlcCi0JOiBUWVBFX01BWElNVU0gKEVNQUNTX0lOVCkpKSkpCi0K LS8qIFRoZSBmb2xsb3dpbmcgYXJlIHZhbGlkIG9ubHkgaWYgR0xZUEhfQ09ERV9QIChnYyku ICAqLwotCi0jZGVmaW5lIEdMWVBIX0NPREVfQ0hBUihnYykgXAotICAoQ09OU1AgKGdjKSA/ IFhJTlQgKFhDQVIgKGdjKSkgOiBYSU5UIChnYykgJiAoKDEgPDwgQ0hBUkFDVEVSQklUUykg LSAxKSkKLQotI2RlZmluZSBHTFlQSF9DT0RFX0ZBQ0UoZ2MpIFwKLSAgKENPTlNQIChnYykg PyBYSU5UIChYQ0RSIChnYykpIDogWElOVCAoZ2MpID4+IENIQVJBQ1RFUkJJVFMpCi0KLSNk ZWZpbmUgU0VUX0dMWVBIX0ZST01fR0xZUEhfQ09ERShnbHlwaCwgZ2MpCQkJCVwKLSAgZG8J CQkJCQkJCQlcCi0gICAgewkJCQkJCQkJCVwKLSAgICAgIGlmIChDT05TUCAoZ2MpKQkJCQkJ CQlcCi0JU0VUX0dMWVBIIChnbHlwaCwgWElOVCAoWENBUiAoZ2MpKSwgWElOVCAoWENEUiAo Z2MpKSk7CQlcCi0gICAgICBlbHNlCQkJCQkJCQlcCi0JU0VUX0dMWVBIIChnbHlwaCwgKFhJ TlQgKGdjKSAmICgoMSA8PCBDSEFSQUNURVJCSVRTKS0xKSksCVwKLQkJICAgKFhJTlQgKGdj KSA+PiBDSEFSQUNURVJCSVRTKSk7CQkJXAotICAgIH0JCQkJCQkJCQlcCi0gIHdoaWxlICgw KQogDAogLyogU3RydWN0dXJlIHRvIGhvbGQgbW91c2UgaGlnaGxpZ2h0IGRhdGEuICBUaGlz IGlzIGhlcmUgYmVjYXVzZSBvdGhlcgogICAgaGVhZGVyIGZpbGVzIG5lZWQgaXQgZm9yIGRl ZmluaW5nIHN0cnVjdCB4X291dHB1dCBldGMuICAqLwpAQCAtMTc2OCwxOTAgKzIxOTcsMzA1 IEBACiAMCiAvKiBEYXRhIHR5cGUgY2hlY2tpbmcuICAqLwogCi0jZGVmaW5lIE5JTFAoeCkg IEVRICh4LCBRbmlsKQotCi0jZGVmaW5lIE5VTUJFUlAoeCkgKElOVEVHRVJQICh4KSB8fCBG TE9BVFAgKHgpKQotI2RlZmluZSBOQVROVU1QKHgpIChJTlRFR0VSUCAoeCkgJiYgWElOVCAo eCkgPj0gMCkKLQotI2RlZmluZSBSQU5HRURfSU5URUdFUlAobG8sIHgsIGhpKSBcCi0gIChJ TlRFR0VSUCAoeCkgJiYgKGxvKSA8PSBYSU5UICh4KSAmJiBYSU5UICh4KSA8PSAoaGkpKQor TElTUF9JTkxJTkUgYm9vbAorKE5JTFApIChMaXNwX09iamVjdCB4KQoreworICByZXR1cm4g RVEgKHgsIFFuaWwpOworfQorCitMSVNQX0lOTElORSBib29sCitOVU1CRVJQIChMaXNwX09i amVjdCB4KQoreworICByZXR1cm4gSU5URUdFUlAgKHgpIHx8IEZMT0FUUCAoeCk7Cit9CitM SVNQX0lOTElORSBib29sCitOQVROVU1QIChMaXNwX09iamVjdCB4KQoreworICByZXR1cm4g SU5URUdFUlAgKHgpICYmIDAgPD0gWElOVCAoeCk7Cit9CisKK0xJU1BfSU5MSU5FIGJvb2wK K1JBTkdFRF9JTlRFR0VSUCAoaW50bWF4X3QgbG8sIExpc3BfT2JqZWN0IHgsIGludG1heF90 IGhpKQoreworICByZXR1cm4gSU5URUdFUlAgKHgpICYmIGxvIDw9IFhJTlQgKHgpICYmIFhJ TlQgKHgpIDw9IGhpOworfQorCiAjZGVmaW5lIFRZUEVfUkFOR0VEX0lOVEVHRVJQKHR5cGUs IHgpIFwKLSAgKFRZUEVfU0lHTkVEICh0eXBlKQkJCQkJCQlcCi0gICA/IFJBTkdFRF9JTlRF R0VSUCAoVFlQRV9NSU5JTVVNICh0eXBlKSwgeCwgVFlQRV9NQVhJTVVNICh0eXBlKSkJXAot ICAgOiBSQU5HRURfSU5URUdFUlAgKDAsIHgsIFRZUEVfTUFYSU1VTSAodHlwZSkpKQotCi0j ZGVmaW5lIElOVEVHRVJQKHgpIChMSVNQX0lOVF9UQUdfUCAoWFRZUEUgKCh4KSkpKQotI2Rl ZmluZSBTWU1CT0xQKHgpIChYVFlQRSAoKHgpKSA9PSBMaXNwX1N5bWJvbCkKLSNkZWZpbmUg TUlTQ1AoeCkgKFhUWVBFICgoeCkpID09IExpc3BfTWlzYykKLSNkZWZpbmUgVkVDVE9STElL RVAoeCkgKFhUWVBFICgoeCkpID09IExpc3BfVmVjdG9ybGlrZSkKLSNkZWZpbmUgU1RSSU5H UCh4KSAoWFRZUEUgKCh4KSkgPT0gTGlzcF9TdHJpbmcpCi0jZGVmaW5lIENPTlNQKHgpIChY VFlQRSAoKHgpKSA9PSBMaXNwX0NvbnMpCi0KLSNkZWZpbmUgRkxPQVRQKHgpIChYVFlQRSAo KHgpKSA9PSBMaXNwX0Zsb2F0KQotI2RlZmluZSBWRUNUT1JQKHgpIChWRUNUT1JMSUtFUCAo eCkgJiYgIShBU0laRSAoeCkgJiBQU0VVRE9WRUNUT1JfRkxBRykpCi0jZGVmaW5lIE9WRVJM QVlQKHgpIChNSVNDUCAoeCkgJiYgWE1JU0NUWVBFICh4KSA9PSBMaXNwX01pc2NfT3Zlcmxh eSkKLSNkZWZpbmUgTUFSS0VSUCh4KSAoTUlTQ1AgKHgpICYmIFhNSVNDVFlQRSAoeCkgPT0g TGlzcF9NaXNjX01hcmtlcikKLQorICAoSU5URUdFUlAgKHgpCQkJICAgICAgXAorICAgJiYg KFRZUEVfU0lHTkVEICh0eXBlKSA/IFRZUEVfTUlOSU1VTSAodHlwZSkgPD0gWElOVCAoeCkg OiAwIDw9IFhJTlQgKHgpKSBcCisgICAmJiBYSU5UICh4KSA8PSBUWVBFX01BWElNVU0gKHR5 cGUpKQorCitMSVNQX0lOTElORSBib29sIChDT05TUCkgKExpc3BfT2JqZWN0IHgpIHsgcmV0 dXJuIFhUWVBFICh4KSA9PSBMaXNwX0NvbnM7IH0KK0xJU1BfSU5MSU5FIGJvb2wgKEZMT0FU UCkgKExpc3BfT2JqZWN0IHgpIHsgcmV0dXJuIFhUWVBFICh4KSA9PSBMaXNwX0Zsb2F0OyB9 CitMSVNQX0lOTElORSBib29sIChNSVNDUCkgKExpc3BfT2JqZWN0IHgpIHsgcmV0dXJuIFhU WVBFICh4KSA9PSBMaXNwX01pc2M7IH0KK0xJU1BfSU5MSU5FIGJvb2wgU1RSSU5HUCAoTGlz cF9PYmplY3QgeCkgeyByZXR1cm4gWFRZUEUgKHgpID09IExpc3BfU3RyaW5nOyB9CitMSVNQ X0lOTElORSBib29sCisoU1lNQk9MUCkgKExpc3BfT2JqZWN0IHgpCit7CisgIHJldHVybiBY VFlQRSAoeCkgPT0gTGlzcF9TeW1ib2w7Cit9CitMSVNQX0lOTElORSBib29sCisoSU5URUdF UlApIChMaXNwX09iamVjdCB4KQoreworICByZXR1cm4gTElTUF9JTlRfVEFHX1AgKFhUWVBF ICh4KSk7Cit9CitMSVNQX0lOTElORSBib29sCisoVkVDVE9STElLRVApIChMaXNwX09iamVj dCB4KQoreworICByZXR1cm4gWFRZUEUgKHgpID09IExpc3BfVmVjdG9ybGlrZTsKK30KK0xJ U1BfSU5MSU5FIGJvb2wKK1ZFQ1RPUlAgKExpc3BfT2JqZWN0IHgpCit7CisgIHJldHVybiBW RUNUT1JMSUtFUCAoeCkgJiYgISAoQVNJWkUgKHgpICYgUFNFVURPVkVDVE9SX0ZMQUcpOwor fQorTElTUF9JTkxJTkUgYm9vbAorT1ZFUkxBWVAgKExpc3BfT2JqZWN0IHgpCit7CisgIHJl dHVybiBNSVNDUCAoeCkgJiYgWE1JU0NUWVBFICh4KSA9PSBMaXNwX01pc2NfT3ZlcmxheTsK K30KK0xJU1BfSU5MSU5FIGJvb2wKKyhNQVJLRVJQKSAoTGlzcF9PYmplY3QgeCkKK3sKKyAg cmV0dXJuIE1JU0NQICh4KSAmJiBYTUlTQ1RZUEUgKHgpID09IExpc3BfTWlzY19NYXJrZXI7 Cit9CiBMSVNQX0lOTElORSBib29sCiBTQVZFX1ZBTFVFUCAoTGlzcF9PYmplY3QgeCkKIHsK ICAgcmV0dXJuIE1JU0NQICh4KSAmJiBYTUlTQ1RZUEUgKHgpID09IExpc3BfTWlzY19TYXZl X1ZhbHVlOwogfQogCi1MSVNQX0lOTElORSBzdHJ1Y3QgTGlzcF9TYXZlX1ZhbHVlICoKLVhT QVZFX1ZBTFVFIChMaXNwX09iamVjdCBhKQotewotICBlYXNzZXJ0IChTQVZFX1ZBTFVFUCAo YSkpOwotICByZXR1cm4gJiBYTUlTQyAoYSktPnVfc2F2ZV92YWx1ZTsKLX0KLQotLyogUmV0 dXJuIHRoZSB0eXBlIG9mIFYncyBOdGggc2F2ZWQgdmFsdWUuICAqLwotTElTUF9JTkxJTkUg aW50Ci1zYXZlX3R5cGUgKHN0cnVjdCBMaXNwX1NhdmVfVmFsdWUgKnYsIGludCBuKQotewot ICBlYXNzZXJ0ICgwIDw9IG4gJiYgbiA8IFNBVkVfVkFMVUVfU0xPVFMpOwotICByZXR1cm4g KHYtPnNhdmVfdHlwZSA+PiAoU0FWRV9TTE9UX0JJVFMgKiBuKSAmICgoMSA8PCBTQVZFX1NM T1RfQklUUykgLSAxKSk7Ci19Ci0KLS8qIEdldCBhbmQgc2V0IHRoZSBOdGggc2F2ZWQgcG9p bnRlci4gICovCi0KLUxJU1BfSU5MSU5FIHZvaWQgKgotWFNBVkVfUE9JTlRFUiAoTGlzcF9P YmplY3Qgb2JqLCBpbnQgbikKLXsKLSAgZWFzc2VydCAoc2F2ZV90eXBlIChYU0FWRV9WQUxV RSAob2JqKSwgbikgPT0gU0FWRV9QT0lOVEVSKTsKLSAgcmV0dXJuIFhTQVZFX1ZBTFVFIChv YmopLT5kYXRhW25dLnBvaW50ZXI7OwotfQotTElTUF9JTkxJTkUgdm9pZAotc2V0X3NhdmVf cG9pbnRlciAoTGlzcF9PYmplY3Qgb2JqLCBpbnQgbiwgdm9pZCAqdmFsKQotewotICBlYXNz ZXJ0IChzYXZlX3R5cGUgKFhTQVZFX1ZBTFVFIChvYmopLCBuKSA9PSBTQVZFX1BPSU5URVIp OwotICBYU0FWRV9WQUxVRSAob2JqKS0+ZGF0YVtuXS5wb2ludGVyID0gdmFsOwotfQotCi0v KiBMaWtld2lzZSBmb3IgdGhlIHNhdmVkIGludGVnZXIuICAqLwotCi1MSVNQX0lOTElORSBw dHJkaWZmX3QKLVhTQVZFX0lOVEVHRVIgKExpc3BfT2JqZWN0IG9iaiwgaW50IG4pCi17Ci0g IGVhc3NlcnQgKHNhdmVfdHlwZSAoWFNBVkVfVkFMVUUgKG9iaiksIG4pID09IFNBVkVfSU5U RUdFUik7Ci0gIHJldHVybiBYU0FWRV9WQUxVRSAob2JqKS0+ZGF0YVtuXS5pbnRlZ2VyOwot fQotTElTUF9JTkxJTkUgdm9pZAotc2V0X3NhdmVfaW50ZWdlciAoTGlzcF9PYmplY3Qgb2Jq LCBpbnQgbiwgcHRyZGlmZl90IHZhbCkKLXsKLSAgZWFzc2VydCAoc2F2ZV90eXBlIChYU0FW RV9WQUxVRSAob2JqKSwgbikgPT0gU0FWRV9JTlRFR0VSKTsKLSAgWFNBVkVfVkFMVUUgKG9i aiktPmRhdGFbbl0uaW50ZWdlciA9IHZhbDsKLX0KLQotLyogRXh0cmFjdCBOdGggc2F2ZWQg b2JqZWN0LiAgKi8KLQotTElTUF9JTkxJTkUgTGlzcF9PYmplY3QKLVhTQVZFX09CSkVDVCAo TGlzcF9PYmplY3Qgb2JqLCBpbnQgbikKLXsKLSAgZWFzc2VydCAoc2F2ZV90eXBlIChYU0FW RV9WQUxVRSAob2JqKSwgbikgPT0gU0FWRV9PQkpFQ1QpOwotICByZXR1cm4gWFNBVkVfVkFM VUUgKG9iaiktPmRhdGFbbl0ub2JqZWN0OwotfQotCi0jZGVmaW5lIEFVVE9MT0FEUCh4KSAo Q09OU1AgKHgpICYmIEVRIChRYXV0b2xvYWQsIFhDQVIgKHgpKSkKLQotI2RlZmluZSBJTlRG V0RQKHgpIChYRldEVFlQRSAoeCkgPT0gTGlzcF9Gd2RfSW50KQotI2RlZmluZSBCT09MRldE UCh4KSAoWEZXRFRZUEUgKHgpID09IExpc3BfRndkX0Jvb2wpCi0jZGVmaW5lIE9CSkZXRFAo eCkgKFhGV0RUWVBFICh4KSA9PSBMaXNwX0Z3ZF9PYmopCi0jZGVmaW5lIEJVRkZFUl9PQkpG V0RQKHgpIChYRldEVFlQRSAoeCkgPT0gTGlzcF9Gd2RfQnVmZmVyX09iaikKLSNkZWZpbmUg S0JPQVJEX09CSkZXRFAoeCkgKFhGV0RUWVBFICh4KSA9PSBMaXNwX0Z3ZF9LYm9hcmRfT2Jq KQotCi0vKiBUcnVlIGlmIG9iamVjdCBYIGlzIGEgcHNldWRvdmVjdG9yIHdob3NlIGNvZGUg aXMgQ09ERS4gIFRoZSBjYXN0IHRvIHN0cnVjdAotICAgdmVjdG9ybGlrZV9oZWFkZXIgKiBh dm9pZHMgYWxpYXNpbmcgaXNzdWVzLiAgKi8KLSNkZWZpbmUgUFNFVURPVkVDVE9SUCh4LCBj b2RlKQkJCQkJXAotICBUWVBFRF9QU0VVRE9WRUNUT1JQICh4LCB2ZWN0b3JsaWtlX2hlYWRl ciwgY29kZSkKLQotI2RlZmluZSBQU0VVRE9WRUNUT1JfVFlQRVAodiwgY29kZSkJCQkJCVwK LSAgKCgodiktPnNpemUgJiAoUFNFVURPVkVDVE9SX0ZMQUcgfCBQVkVDX1RZUEVfTUFTSykp CQkJXAotICAgPT0gKFBTRVVET1ZFQ1RPUl9GTEFHIHwgKChjb2RlKSA8PCBQU0VVRE9WRUNU T1JfQVJFQV9CSVRTKSkpCi0KLS8qIFRydWUgaWYgb2JqZWN0IFgsIHdpdGggaW50ZXJuYWwg dHlwZSBzdHJ1Y3QgVCAqLCBpcyBhIHBzZXVkb3ZlY3RvciB3aG9zZQotICAgY29kZSBpcyBD T0RFLiAgKi8KLSNkZWZpbmUgVFlQRURfUFNFVURPVkVDVE9SUCh4LCB0LCBjb2RlKQkJCQlc Ci0gIChWRUNUT1JMSUtFUCAoeCkJCQkJCQlcCi0gICAmJiBQU0VVRE9WRUNUT1JfVFlQRVAg KChzdHJ1Y3QgdCAqKSBYVU5UQUcgKHgsIExpc3BfVmVjdG9ybGlrZSksIGNvZGUpKQorTElT UF9JTkxJTkUgYm9vbAorQVVUT0xPQURQIChMaXNwX09iamVjdCB4KQoreworICByZXR1cm4g Q09OU1AgKHgpICYmIEVRIChRYXV0b2xvYWQsIFhDQVIgKHgpKTsKK30KKworTElTUF9JTkxJ TkUgYm9vbAorSU5URldEUCAodW5pb24gTGlzcF9Gd2QgKmEpCit7CisgIHJldHVybiBYRldE VFlQRSAoYSkgPT0gTGlzcF9Gd2RfSW50OworfQorTElTUF9JTkxJTkUgYm9vbAorQk9PTEZX RFAgKHVuaW9uIExpc3BfRndkICphKQoreworICByZXR1cm4gWEZXRFRZUEUgKGEpID09IExp c3BfRndkX0Jvb2w7Cit9CitMSVNQX0lOTElORSBib29sCitPQkpGV0RQICh1bmlvbiBMaXNw X0Z3ZCAqYSkKK3sKKyAgcmV0dXJuIFhGV0RUWVBFIChhKSA9PSBMaXNwX0Z3ZF9PYmo7Cit9 CitMSVNQX0lOTElORSBib29sCitCVUZGRVJfT0JKRldEUCAodW5pb24gTGlzcF9Gd2QgKmEp Cit7CisgIHJldHVybiBYRldEVFlQRSAoYSkgPT0gTGlzcF9Gd2RfQnVmZmVyX09iajsKK30K K0xJU1BfSU5MSU5FIGJvb2wKK0tCT0FSRF9PQkpGV0RQICh1bmlvbiBMaXNwX0Z3ZCAqYSkK K3sKKyAgcmV0dXJuIFhGV0RUWVBFIChhKSA9PSBMaXNwX0Z3ZF9LYm9hcmRfT2JqOworfQor CitMSVNQX0lOTElORSBib29sCitQU0VVRE9WRUNUT1JfVFlQRVAgKHN0cnVjdCB2ZWN0b3Js aWtlX2hlYWRlciAqYSwgaW50IGNvZGUpCit7CisgIHJldHVybiAoKGEtPnNpemUgJiAoUFNF VURPVkVDVE9SX0ZMQUcgfCBQVkVDX1RZUEVfTUFTSykpCisJICA9PSAoUFNFVURPVkVDVE9S X0ZMQUcgfCAoY29kZSA8PCBQU0VVRE9WRUNUT1JfQVJFQV9CSVRTKSkpOworfQorCisvKiBU cnVlIGlmIEEgaXMgYSBwc2V1ZG92ZWN0b3Igd2hvc2UgY29kZSBpcyBDT0RFLiAgKi8KK0xJ U1BfSU5MSU5FIGJvb2wKK1BTRVVET1ZFQ1RPUlAgKExpc3BfT2JqZWN0IGEsIGludCBjb2Rl KQoreworICBpZiAoISBWRUNUT1JMSUtFUCAoYSkpCisgICAgcmV0dXJuIDA7CisgIGVsc2UK KyAgICB7CisgICAgICAvKiBDb252ZXJ0aW5nIHRvIHN0cnVjdCB2ZWN0b3JsaWtlX2hlYWRl ciAqIGF2b2lkcyBhbGlhc2luZyBpc3N1ZXMuICAqLworICAgICAgc3RydWN0IHZlY3Rvcmxp a2VfaGVhZGVyICpoID0gWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworICAgICAgcmV0 dXJuIFBTRVVET1ZFQ1RPUl9UWVBFUCAoaCwgY29kZSk7CisgICAgfQorfQorCiAKIC8qIFRl c3QgZm9yIHNwZWNpZmljIHBzZXVkb3ZlY3RvciB0eXBlcy4gICovCi0jZGVmaW5lIFdJTkRP V19DT05GSUdVUkFUSU9OUCh4KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVDX1dJTkRPV19DT05G SUdVUkFUSU9OKQotI2RlZmluZSBQUk9DRVNTUCh4KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVD X1BST0NFU1MpCi0jZGVmaW5lIFdJTkRPV1AoeCkgUFNFVURPVkVDVE9SUCAoeCwgUFZFQ19X SU5ET1cpCi0jZGVmaW5lIFRFUk1JTkFMUCh4KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVDX1RF Uk1JTkFMKQotI2RlZmluZSBTVUJSUCh4KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVDX1NVQlIp Ci0jZGVmaW5lIENPTVBJTEVEUCh4KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVDX0NPTVBJTEVE KQotI2RlZmluZSBCVUZGRVJQKHgpIFBTRVVET1ZFQ1RPUlAgKHgsIFBWRUNfQlVGRkVSKQot I2RlZmluZSBDSEFSX1RBQkxFX1AoeCkgUFNFVURPVkVDVE9SUCAoeCwgUFZFQ19DSEFSX1RB QkxFKQotI2RlZmluZSBTVUJfQ0hBUl9UQUJMRV9QKHgpIFBTRVVET1ZFQ1RPUlAgKHgsIFBW RUNfU1VCX0NIQVJfVEFCTEUpCi0jZGVmaW5lIEJPT0xfVkVDVE9SX1AoeCkgUFNFVURPVkVD VE9SUCAoeCwgUFZFQ19CT09MX1ZFQ1RPUikKLSNkZWZpbmUgRlJBTUVQKHgpIFBTRVVET1ZF Q1RPUlAgKHgsIFBWRUNfRlJBTUUpCisKK0xJU1BfSU5MSU5FIGJvb2wKK1dJTkRPV19DT05G SUdVUkFUSU9OUCAoTGlzcF9PYmplY3QgYSkKK3sKKyAgcmV0dXJuIFBTRVVET1ZFQ1RPUlAg KGEsIFBWRUNfV0lORE9XX0NPTkZJR1VSQVRJT04pOworfQorCitMSVNQX0lOTElORSBib29s CitQUk9DRVNTUCAoTGlzcF9PYmplY3QgYSkKK3sKKyAgcmV0dXJuIFBTRVVET1ZFQ1RPUlAg KGEsIFBWRUNfUFJPQ0VTUyk7Cit9CisKK0xJU1BfSU5MSU5FIGJvb2wKK1dJTkRPV1AgKExp c3BfT2JqZWN0IGEpCit7CisgIHJldHVybiBQU0VVRE9WRUNUT1JQIChhLCBQVkVDX1dJTkRP Vyk7Cit9CisKK0xJU1BfSU5MSU5FIGJvb2wKK1RFUk1JTkFMUCAoTGlzcF9PYmplY3QgYSkK K3sKKyAgcmV0dXJuIFBTRVVET1ZFQ1RPUlAgKGEsIFBWRUNfVEVSTUlOQUwpOworfQorCitM SVNQX0lOTElORSBib29sCitTVUJSUCAoTGlzcF9PYmplY3QgYSkKK3sKKyAgcmV0dXJuIFBT RVVET1ZFQ1RPUlAgKGEsIFBWRUNfU1VCUik7Cit9CisKK0xJU1BfSU5MSU5FIGJvb2wKK0NP TVBJTEVEUCAoTGlzcF9PYmplY3QgYSkKK3sKKyAgcmV0dXJuIFBTRVVET1ZFQ1RPUlAgKGEs IFBWRUNfQ09NUElMRUQpOworfQorCitMSVNQX0lOTElORSBib29sCitCVUZGRVJQIChMaXNw X09iamVjdCBhKQoreworICByZXR1cm4gUFNFVURPVkVDVE9SUCAoYSwgUFZFQ19CVUZGRVIp OworfQorCitMSVNQX0lOTElORSBib29sCitDSEFSX1RBQkxFX1AgKExpc3BfT2JqZWN0IGEp Cit7CisgIHJldHVybiBQU0VVRE9WRUNUT1JQIChhLCBQVkVDX0NIQVJfVEFCTEUpOworfQor CitMSVNQX0lOTElORSBib29sCitTVUJfQ0hBUl9UQUJMRV9QIChMaXNwX09iamVjdCBhKQor eworICByZXR1cm4gUFNFVURPVkVDVE9SUCAoYSwgUFZFQ19TVUJfQ0hBUl9UQUJMRSk7Cit9 CisKK0xJU1BfSU5MSU5FIGJvb2wKK0JPT0xfVkVDVE9SX1AgKExpc3BfT2JqZWN0IGEpCit7 CisgIHJldHVybiBQU0VVRE9WRUNUT1JQIChhLCBQVkVDX0JPT0xfVkVDVE9SKTsKK30KKwor TElTUF9JTkxJTkUgYm9vbAorRlJBTUVQIChMaXNwX09iamVjdCBhKQoreworICByZXR1cm4g UFNFVURPVkVDVE9SUCAoYSwgUFZFQ19GUkFNRSk7Cit9CiAKIC8qIFRlc3QgZm9yIGltYWdl IChpbWFnZSAuIHNwZWMpICAqLwotI2RlZmluZSBJTUFHRVAoeCkgKENPTlNQICh4KSAmJiBF USAoWENBUiAoeCksIFFpbWFnZSkpCitMSVNQX0lOTElORSBib29sCitJTUFHRVAgKExpc3Bf T2JqZWN0IHgpCit7CisgIHJldHVybiBDT05TUCAoeCkgJiYgRVEgKFhDQVIgKHgpLCBRaW1h Z2UpOworfQogCiAvKiBBcnJheSB0eXBlcy4gICovCi0KLSNkZWZpbmUgQVJSQVlQKHgpIFwK LSAgKFZFQ1RPUlAgKHgpIHx8IFNUUklOR1AgKHgpIHx8IENIQVJfVEFCTEVfUCAoeCkgfHwg Qk9PTF9WRUNUT1JfUCAoeCkpCitMSVNQX0lOTElORSBib29sCitBUlJBWVAgKExpc3BfT2Jq ZWN0IHgpCit7CisgIHJldHVybiBWRUNUT1JQICh4KSB8fCBTVFJJTkdQICh4KSB8fCBDSEFS X1RBQkxFX1AgKHgpIHx8IEJPT0xfVkVDVE9SX1AgKHgpOworfQogDAotI2RlZmluZSBDSEVD S19MSVNUKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoQ09OU1AgKHgpIHx8IE5JTFAgKHgpLCBRbGlz dHAsIHgpCi0KLSNkZWZpbmUgQ0hFQ0tfTElTVF9DT05TKHgsIHkpIFwKLSAgQ0hFQ0tfVFlQ RSAoQ09OU1AgKHgpLCBRbGlzdHAsIHkpCi0KLSNkZWZpbmUgQ0hFQ0tfTElTVF9FTkQoeCwg eSkgXAotICBDSEVDS19UWVBFIChOSUxQICh4KSwgUWxpc3RwLCB5KQotCi0jZGVmaW5lIENI RUNLX1NUUklORyh4KSBcCi0gIENIRUNLX1RZUEUgKFNUUklOR1AgKHgpLCBRc3RyaW5ncCwg eCkKLQotI2RlZmluZSBDSEVDS19TVFJJTkdfQ0FSKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoU1RS SU5HUCAoWENBUiAoeCkpLCBRc3RyaW5ncCwgWENBUiAoeCkpCi0KLSNkZWZpbmUgQ0hFQ0tf Q09OUyh4KSBcCi0gIENIRUNLX1RZUEUgKENPTlNQICh4KSwgUWNvbnNwLCB4KQotCi0jZGVm aW5lIENIRUNLX1NZTUJPTCh4KSBcCi0gIENIRUNLX1RZUEUgKFNZTUJPTFAgKHgpLCBRc3lt Ym9scCwgeCkKLQotI2RlZmluZSBDSEVDS19DSEFSX1RBQkxFKHgpIFwKLSAgQ0hFQ0tfVFlQ RSAoQ0hBUl9UQUJMRV9QICh4KSwgUWNoYXJfdGFibGVfcCwgeCkKLQotI2RlZmluZSBDSEVD S19WRUNUT1IoeCkgXAotICBDSEVDS19UWVBFIChWRUNUT1JQICh4KSwgUXZlY3RvcnAsIHgp Ci0KLSNkZWZpbmUgQ0hFQ0tfVkVDVE9SX09SX1NUUklORyh4KSBcCi0gIENIRUNLX1RZUEUg KFZFQ1RPUlAgKHgpIHx8IFNUUklOR1AgKHgpLCBRYXJyYXlwLCB4KQotCi0jZGVmaW5lIENI RUNLX0FSUkFZKHgsIFF4eHhwKSBcCi0gIENIRUNLX1RZUEUgKEFSUkFZUCAoeCksIFF4eHhw LCB4KQotCi0jZGVmaW5lIENIRUNLX1ZFQ1RPUl9PUl9DSEFSX1RBQkxFKHgpIFwKLSAgQ0hF Q0tfVFlQRSAoVkVDVE9SUCAoeCkgfHwgQ0hBUl9UQUJMRV9QICh4KSwgUXZlY3Rvcl9vcl9j aGFyX3RhYmxlX3AsIHgpCi0KLSNkZWZpbmUgQ0hFQ0tfQlVGRkVSKHgpIFwKLSAgQ0hFQ0tf VFlQRSAoQlVGRkVSUCAoeCksIFFidWZmZXJwLCB4KQotCi0jZGVmaW5lIENIRUNLX1dJTkRP Vyh4KSBcCi0gIENIRUNLX1RZUEUgKFdJTkRPV1AgKHgpLCBRd2luZG93cCwgeCkKLQotI2Rl ZmluZSBDSEVDS19XSU5ET1dfQ09ORklHVVJBVElPTih4KSBcCi0gIENIRUNLX1RZUEUgKFdJ TkRPV19DT05GSUdVUkFUSU9OUCAoeCksIFF3aW5kb3dfY29uZmlndXJhdGlvbl9wLCB4KQot Ci0jZGVmaW5lIENIRUNLX1BST0NFU1MoeCkgXAotICBDSEVDS19UWVBFIChQUk9DRVNTUCAo eCksIFFwcm9jZXNzcCwgeCkKLQotI2RlZmluZSBDSEVDS19TVUJSKHgpIFwKLSAgQ0hFQ0tf VFlQRSAoU1VCUlAgKHgpLCBRc3VicnAsIHgpCi0KLSNkZWZpbmUgQ0hFQ0tfTlVNQkVSKHgp IFwKLSAgQ0hFQ0tfVFlQRSAoSU5URUdFUlAgKHgpLCBRaW50ZWdlcnAsIHgpCi0KLSNkZWZp bmUgQ0hFQ0tfTkFUTlVNKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoTkFUTlVNUCAoeCksIFF3aG9s ZW51bXAsIHgpCitMSVNQX0lOTElORSB2b2lkCitDSEVDS19MSVNUIChMaXNwX09iamVjdCB4 KQoreworICBDSEVDS19UWVBFIChDT05TUCAoeCkgfHwgTklMUCAoeCksIFFsaXN0cCwgeCk7 Cit9CitMSVNQX0lOTElORSB2b2lkCisoQ0hFQ0tfTElTVF9DT05TKSAoTGlzcF9PYmplY3Qg eCwgTGlzcF9PYmplY3QgeSkKK3sKKyAgQ0hFQ0tfVFlQRSAoQ09OU1AgKHgpLCBRbGlzdHAs IHkpOworfQorTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfTElTVF9FTkQgKExpc3BfT2JqZWN0 IHgsIExpc3BfT2JqZWN0IHkpCit7CisgIENIRUNLX1RZUEUgKE5JTFAgKHgpLCBRbGlzdHAs IHkpOworfQorTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfU1RSSU5HIChMaXNwX09iamVjdCB4 KQoreworICBDSEVDS19UWVBFIChTVFJJTkdQICh4KSwgUXN0cmluZ3AsIHgpOworfQorTElT UF9JTkxJTkUgdm9pZAorQ0hFQ0tfU1RSSU5HX0NBUiAoTGlzcF9PYmplY3QgeCkKK3sKKyAg Q0hFQ0tfVFlQRSAoU1RSSU5HUCAoWENBUiAoeCkpLCBRc3RyaW5ncCwgWENBUiAoeCkpOwor fQorTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfQ09OUyAoTGlzcF9PYmplY3QgeCkKK3sKKyAg Q0hFQ0tfVFlQRSAoQ09OU1AgKHgpLCBRY29uc3AsIHgpOworfQorTElTUF9JTkxJTkUgdm9p ZAorKENIRUNLX1NZTUJPTCkgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKFNZ TUJPTFAgKHgpLCBRc3ltYm9scCwgeCk7Cit9CitMSVNQX0lOTElORSB2b2lkCitDSEVDS19D SEFSX1RBQkxFIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChDSEFSX1RBQkxF X1AgKHgpLCBRY2hhcl90YWJsZV9wLCB4KTsKK30KK0xJU1BfSU5MSU5FIHZvaWQKK0NIRUNL X1ZFQ1RPUiAoTGlzcF9PYmplY3QgeCkKK3sKKyAgQ0hFQ0tfVFlQRSAoVkVDVE9SUCAoeCks IFF2ZWN0b3JwLCB4KTsKK30KK0xJU1BfSU5MSU5FIHZvaWQKK0NIRUNLX1ZFQ1RPUl9PUl9T VFJJTkcgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKFZFQ1RPUlAgKHgpIHx8 IFNUUklOR1AgKHgpLCBRYXJyYXlwLCB4KTsKK30KK0xJU1BfSU5MSU5FIHZvaWQKK0NIRUNL X0FSUkFZIChMaXNwX09iamVjdCB4LCBMaXNwX09iamVjdCBReHh4cCkKK3sKKyAgQ0hFQ0tf VFlQRSAoQVJSQVlQICh4KSwgUXh4eHAsIHgpOworfQorTElTUF9JTkxJTkUgdm9pZAorQ0hF Q0tfVkVDVE9SX09SX0NIQVJfVEFCTEUgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZ UEUgKFZFQ1RPUlAgKHgpIHx8IENIQVJfVEFCTEVfUCAoeCksIFF2ZWN0b3Jfb3JfY2hhcl90 YWJsZV9wLCB4KTsKK30KK0xJU1BfSU5MSU5FIHZvaWQKK0NIRUNLX0JVRkZFUiAoTGlzcF9P YmplY3QgeCkKK3sKKyAgQ0hFQ0tfVFlQRSAoQlVGRkVSUCAoeCksIFFidWZmZXJwLCB4KTsK K30KK0xJU1BfSU5MSU5FIHZvaWQKK0NIRUNLX1dJTkRPVyAoTGlzcF9PYmplY3QgeCkKK3sK KyAgQ0hFQ0tfVFlQRSAoV0lORE9XUCAoeCksIFF3aW5kb3dwLCB4KTsKK30KK0xJU1BfSU5M SU5FIHZvaWQKK0NIRUNLX1dJTkRPV19DT05GSUdVUkFUSU9OIChMaXNwX09iamVjdCB4KQor eworICBDSEVDS19UWVBFIChXSU5ET1dfQ09ORklHVVJBVElPTlAgKHgpLCBRd2luZG93X2Nv bmZpZ3VyYXRpb25fcCwgeCk7Cit9CitMSVNQX0lOTElORSB2b2lkCitDSEVDS19QUk9DRVNT IChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChQUk9DRVNTUCAoeCksIFFwcm9j ZXNzcCwgeCk7Cit9CitMSVNQX0lOTElORSB2b2lkCitDSEVDS19TVUJSIChMaXNwX09iamVj dCB4KQoreworICBDSEVDS19UWVBFIChTVUJSUCAoeCksIFFzdWJycCwgeCk7Cit9CitMSVNQ X0lOTElORSB2b2lkCisoQ0hFQ0tfTlVNQkVSKSAoTGlzcF9PYmplY3QgeCkKK3sKKyAgQ0hF Q0tfVFlQRSAoSU5URUdFUlAgKHgpLCBRaW50ZWdlcnAsIHgpOworfQorTElTUF9JTkxJTkUg dm9pZAorQ0hFQ0tfTkFUTlVNIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChO QVROVU1QICh4KSwgUXdob2xlbnVtcCwgeCk7Cit9CiAKICNkZWZpbmUgQ0hFQ0tfUkFOR0VE X0lOVEVHRVIoeCwgbG8sIGhpKQkJCQkJXAogICBkbyB7CQkJCQkJCQkJXApAQCAtMTk3Miw1 NyArMjUxNiw3NiBAQAogICAgICAgQ0hFQ0tfUkFOR0VEX0lOVEVHRVIgKHgsIDAsIFRZUEVf TUFYSU1VTSAodHlwZSkpOwkJCVwKICAgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBDSEVDS19N QVJLRVIoeCkgXAotICBDSEVDS19UWVBFIChNQVJLRVJQICh4KSwgUW1hcmtlcnAsIHgpCitM SVNQX0lOTElORSB2b2lkCitDSEVDS19NQVJLRVIgKExpc3BfT2JqZWN0IHgpCit7CisgIENI RUNLX1RZUEUgKE1BUktFUlAgKHgpLCBRbWFya2VycCwgeCk7Cit9CiAKICNkZWZpbmUgQ0hF Q0tfTlVNQkVSX0NPRVJDRV9NQVJLRVIoeCkgXAogICBkbyB7IGlmIChNQVJLRVJQICgoeCkp KSBYU0VURkFTVElOVCAoeCwgbWFya2VyX3Bvc2l0aW9uICh4KSk7IFwKICAgICBlbHNlIENI RUNLX1RZUEUgKElOVEVHRVJQICh4KSwgUWludGVnZXJfb3JfbWFya2VyX3AsIHgpOyB9IHdo aWxlICgwKQogCi0jZGVmaW5lIFhGTE9BVElOVChuKSBleHRyYWN0X2Zsb2F0KChuKSkKLQot I2RlZmluZSBDSEVDS19GTE9BVCh4KSBcCi0gIENIRUNLX1RZUEUgKEZMT0FUUCAoeCksIFFm bG9hdHAsIHgpCi0KLSNkZWZpbmUgQ0hFQ0tfTlVNQkVSX09SX0ZMT0FUKHgpIFwKLSAgQ0hF Q0tfVFlQRSAoRkxPQVRQICh4KSB8fCBJTlRFR0VSUCAoeCksIFFudW1iZXJwLCB4KQorTElT UF9JTkxJTkUgZG91YmxlCitYRkxPQVRJTlQgKExpc3BfT2JqZWN0IG4pCit7CisgIHJldHVy biBleHRyYWN0X2Zsb2F0IChuKTsKK30KKworTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfRkxP QVQgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKEZMT0FUUCAoeCksIFFmbG9h dHAsIHgpOworfQorTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfTlVNQkVSX09SX0ZMT0FUIChM aXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChGTE9BVFAgKHgpIHx8IElOVEVHRVJQ ICh4KSwgUW51bWJlcnAsIHgpOworfQogCiAjZGVmaW5lIENIRUNLX05VTUJFUl9PUl9GTE9B VF9DT0VSQ0VfTUFSS0VSKHgpIFwKICAgZG8geyBpZiAoTUFSS0VSUCAoeCkpIFhTRVRGQVNU SU5UICh4LCBtYXJrZXJfcG9zaXRpb24gKHgpKTsgXAogICAgIGVsc2UgQ0hFQ0tfVFlQRSAo SU5URUdFUlAgKHgpIHx8IEZMT0FUUCAoeCksIFFudW1iZXJfb3JfbWFya2VyX3AsIHgpOyB9 IHdoaWxlICgwKQogCi0jZGVmaW5lIENIRUNLX09WRVJMQVkoeCkgXAotICBDSEVDS19UWVBF IChPVkVSTEFZUCAoeCksIFFvdmVybGF5cCwgeCkKK0xJU1BfSU5MSU5FIHZvaWQKK0NIRUNL X09WRVJMQVkgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKE9WRVJMQVlQICh4 KSwgUW92ZXJsYXlwLCB4KTsKK30KIAogLyogU2luY2Ugd2UgY2FuJ3QgYXNzaWduIGRpcmVj dGx5IHRvIHRoZSBDQVIgb3IgQ0RSIGZpZWxkcyBvZiBhIGNvbnMKICAgIGNlbGwsIHVzZSB0 aGVzZSB3aGVuIGNoZWNraW5nIHRoYXQgdGhvc2UgZmllbGRzIGNvbnRhaW4gbnVtYmVycy4g ICovCi0jZGVmaW5lIENIRUNLX05VTUJFUl9DQVIoeCkgXAotICBkbyB7CQkJCQlcCi0gICAg TGlzcF9PYmplY3QgdG1wID0gWENBUiAoeCk7CQlcCi0gICAgQ0hFQ0tfTlVNQkVSICh0bXAp OwkJCVwKLSAgICBYU0VUQ0FSICgoeCksIHRtcCk7CQkJXAotICB9IHdoaWxlICgwKQotCi0j ZGVmaW5lIENIRUNLX05VTUJFUl9DRFIoeCkgXAotICBkbyB7CQkJCQlcCi0gICAgTGlzcF9P YmplY3QgdG1wID0gWENEUiAoeCk7CQlcCi0gICAgQ0hFQ0tfTlVNQkVSICh0bXApOwkJCVwK LSAgICBYU0VUQ0RSICgoeCksIHRtcCk7CQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5l IENIRUNLX05BVE5VTV9DQVIoeCkgXAotICBkbyB7CQkJCQlcCi0gICAgTGlzcF9PYmplY3Qg dG1wID0gWENBUiAoeCk7CQlcCi0gICAgQ0hFQ0tfTkFUTlVNICh0bXApOwkJCVwKLSAgICBY U0VUQ0FSICgoeCksIHRtcCk7CQkJXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNL X05BVE5VTV9DRFIoeCkgXAotICBkbyB7CQkJCQlcCi0gICAgTGlzcF9PYmplY3QgdG1wID0g WENEUiAoeCk7CQlcCi0gICAgQ0hFQ0tfTkFUTlVNICh0bXApOwkJCVwKLSAgICBYU0VUQ0RS ICgoeCksIHRtcCk7CQkJXAotICB9IHdoaWxlICgwKQorTElTUF9JTkxJTkUgdm9pZAorQ0hF Q0tfTlVNQkVSX0NBUiAoTGlzcF9PYmplY3QgeCkKK3sKKyAgTGlzcF9PYmplY3QgdG1wID0g WENBUiAoeCk7CisgIENIRUNLX05VTUJFUiAodG1wKTsKKyAgWFNFVENBUiAoeCwgdG1wKTsK K30KKworTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfTlVNQkVSX0NEUiAoTGlzcF9PYmplY3Qg eCkKK3sKKyAgTGlzcF9PYmplY3QgdG1wID0gWENEUiAoeCk7CisgIENIRUNLX05VTUJFUiAo dG1wKTsKKyAgWFNFVENEUiAoeCwgdG1wKTsKK30KKworTElTUF9JTkxJTkUgdm9pZAorQ0hF Q0tfTkFUTlVNX0NBUiAoTGlzcF9PYmplY3QgeCkKK3sKKyAgTGlzcF9PYmplY3QgdG1wID0g WENBUiAoeCk7CisgIENIRUNLX05BVE5VTSAodG1wKTsKKyAgWFNFVENBUiAoeCwgdG1wKTsK K30KKworTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfTkFUTlVNX0NEUiAoTGlzcF9PYmplY3Qg eCkKK3sKKyAgTGlzcF9PYmplY3QgdG1wID0gWENEUiAoeCk7CisgIENIRUNLX05BVE5VTSAo dG1wKTsKKyAgWFNFVENEUiAoeCwgdG1wKTsKK30KIAwKIC8qIERlZmluZSBhIGJ1aWx0LWlu IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGZyb20gTGlzcC4KICBgbG5hbWUnIHNob3VsZCBiZSB0 aGUgbmFtZSB0byBnaXZlIHRoZSBmdW5jdGlvbiBpbiBMaXNwLApAQCAtMjA4OCw4ICsyNjUx LDEyIEBACiAjZGVmaW5lIERFRlVOX0FSR1NfOAkoTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0 LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIFwKIAkJCSBMaXNwX09iamVjdCwgTGlzcF9P YmplY3QsIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCkKIAotLyogTm9uLXplcm8gaWYgT0JK IGlzIGEgTGlzcCBmdW5jdGlvbi4gICovCi0jZGVmaW5lIEZVTkNUSU9OUChPQkopIGZ1bmN0 aW9ucChPQkopCisvKiBUcnVlIGlmIE9CSiBpcyBhIExpc3AgZnVuY3Rpb24uICAqLworTElT UF9JTkxJTkUgYm9vbAorRlVOQ1RJT05QIChMaXNwX09iamVjdCBvYmopCit7CisgIHJldHVy biBmdW5jdGlvbnAgKG9iaik7Cit9CiAKIC8qIGRlZnN1YnIgKFNuYW1lKTsKICAgIGlzIGhv dyB3ZSBkZWZpbmUgdGhlIHN5bWJvbCBmb3IgZnVuY3Rpb24gYG5hbWUnIGF0IHN0YXJ0LXVw IHRpbWUuICAqLwpAQCAtMjI3Niw3ICsyODQzLDExIEBACiBleHRlcm4gc3RydWN0IHNwZWNi aW5kaW5nICpzcGVjcGRsX3B0cjsKIGV4dGVybiBwdHJkaWZmX3Qgc3BlY3BkbF9zaXplOwog Ci0jZGVmaW5lIFNQRUNQRExfSU5ERVgoKQkoc3BlY3BkbF9wdHIgLSBzcGVjcGRsKQorTElT UF9JTkxJTkUgcHRyZGlmZl90CitTUEVDUERMX0lOREVYICh2b2lkKQoreworICByZXR1cm4g c3BlY3BkbF9wdHIgLSBzcGVjcGRsOworfQogCiAvKiBFdmVyeXRoaW5nIG5lZWRlZCB0byBk ZXNjcmliZSBhbiBhY3RpdmUgY29uZGl0aW9uIGNhc2UuCiAKQEAgLTI1OTIsMjcgKzMxNjMs MTIgQEAKICNkZWZpbmUgRVhGVU4oZm5uYW1lLCBtYXhhcmdzKSBcCiAgIGV4dGVybiBMaXNw X09iamVjdCBmbm5hbWUgREVGVU5fQVJHU18gIyMgbWF4YXJncwogCisjaW5jbHVkZSAiZ2xv YmFscy5oIgorCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgcHJvdG90eXBlcy4gICov CiBzdHJ1Y3Qgd2luZG93Owogc3RydWN0IGZyYW1lOwogCi0vKiBTaW1wbGUgYWNjZXNzIGZ1 bmN0aW9ucy4gICovCi0KLUxJU1BfSU5MSU5FIExpc3BfT2JqZWN0ICoKLWFyZWZfYWRkciAo TGlzcF9PYmplY3QgYXJyYXksIHB0cmRpZmZfdCBpZHgpCi17Ci0gIHJldHVybiAmIFhWRUNU T1IgKGFycmF5KS0+Y29udGVudHNbaWR4XTsKLX0KLQotTElTUF9JTkxJTkUgdm9pZAotZ2Nf YXNldCAoTGlzcF9PYmplY3QgYXJyYXksIHB0cmRpZmZfdCBpZHgsIExpc3BfT2JqZWN0IHZh bCkKLXsKLSAgLyogTGlrZSBBU0VULCBidXQgYWxzbyBjYW4gYmUgdXNlZCBpbiB0aGUgZ2Fy YmFnZSBjb2xsZWN0b3I6Ci0gICAgIHN3ZWVwX3dlYWtfdGFibGUgY2FsbHMgc2V0X2hhc2hf a2V5IGV0Yy4gd2hpbGUgdGhlIHRhYmxlIGlzIG1hcmtlZC4gICovCi0gIGVhc3NlcnQgKDAg PD0gaWR4ICYmIGlkeCA8IChBU0laRSAoYXJyYXkpICYgfkFSUkFZX01BUktfRkxBRykpOwot ICBYVkVDVE9SIChhcnJheSktPmNvbnRlbnRzW2lkeF0gPSB2YWw7Ci19Ci0KIC8qIENvcHkg Q09VTlQgTGlzcF9PYmplY3RzIGZyb20gQVJHUyB0byBjb250ZW50cyBvZiBWIHN0YXJ0aW5n IGZyb20gT0ZGU0VULiAgKi8KIAogTElTUF9JTkxJTkUgdm9pZApAQCAtMjg0OSw2ICszNDA1 LDcgQEAKIAogZXh0ZXJuIExpc3BfT2JqZWN0IFFidWZmZXIsIFFpbnRlZ2VyLCBRc3ltYm9s OwogCitleHRlcm4gTGlzcF9PYmplY3QgUXN1YnJwOwogZXh0ZXJuIExpc3BfT2JqZWN0IFFm b250X3NwZWMsIFFmb250X2VudGl0eSwgUWZvbnRfb2JqZWN0OwogCiBFWEZVTiAoRmJ5dGVv cmRlciwgMCkgQVRUUklCVVRFX0NPTlNUOwpAQCAtMzIzNyw3ICszNzk0LDcgQEAKICNpZmRl ZiBHQ19DSEVDS19DT05TX0xJU1QKIGV4dGVybiB2b2lkIGNoZWNrX2NvbnNfbGlzdCAodm9p ZCk7CiAjZWxzZQotI2RlZmluZSBjaGVja19jb25zX2xpc3QoKSAoKHZvaWQpIDApCitMSVNQ X0lOTElORSB2b2lkIChjaGVja19jb25zX2xpc3QpICh2b2lkKSB7fQogI2VuZGlmCiAKICNp ZmRlZiBSRUxfQUxMT0MKQEAgLTMzMDUsMTAgKzM4NjIsMTIgQEAKIGV4dGVybiBMaXNwX09i amVjdCBpbnRlcm5fMSAoY29uc3QgY2hhciAqLCBwdHJkaWZmX3QpOwogZXh0ZXJuIExpc3Bf T2JqZWN0IGludGVybl9jX3N0cmluZ18xIChjb25zdCBjaGFyICosIHB0cmRpZmZfdCk7CiBl eHRlcm4gTGlzcF9PYmplY3Qgb2Jsb29rdXAgKExpc3BfT2JqZWN0LCBjb25zdCBjaGFyICos IHB0cmRpZmZfdCwgcHRyZGlmZl90KTsKLSNkZWZpbmUgTE9BREhJU1RfQVRUQUNIKHgpIFwK LSAgZG8gewkJCQkJCQkJCVwKLSAgICBpZiAoaW5pdGlhbGl6ZWQpIFZjdXJyZW50X2xvYWRf bGlzdCA9IEZjb25zICh4LCBWY3VycmVudF9sb2FkX2xpc3QpOyBcCi0gIH0gd2hpbGUgKDAp CitMSVNQX0lOTElORSB2b2lkCitMT0FESElTVF9BVFRBQ0ggKExpc3BfT2JqZWN0IHgpCit7 CisgIGlmIChpbml0aWFsaXplZCkKKyAgICBWY3VycmVudF9sb2FkX2xpc3QgPSBGY29ucyAo eCwgVmN1cnJlbnRfbG9hZF9saXN0KTsKK30KIGV4dGVybiBpbnQgb3BlbnAgKExpc3BfT2Jq ZWN0LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsCiAgICAgICAgICAgICAgICAgICBMaXNw X09iamVjdCAqLCBMaXNwX09iamVjdCk7CiBleHRlcm4gTGlzcF9PYmplY3Qgc3RyaW5nX3Rv X251bWJlciAoY2hhciBjb25zdCAqLCBpbnQsIGJvb2wpOwpAQCAtMzQzMSw2ICszOTkwLDcg QEAKIGV4dGVybiBMaXNwX09iamVjdCBWYnVmZmVyX2FsaXN0OwogZXh0ZXJuIExpc3BfT2Jq ZWN0IHNldF9idWZmZXJfaWZfbGl2ZSAoTGlzcF9PYmplY3QpOwogZXh0ZXJuIExpc3BfT2Jq ZWN0IG90aGVyX2J1ZmZlcl9zYWZlbHkgKExpc3BfT2JqZWN0KTsKK2V4dGVybiBMaXNwX09i amVjdCBRb3ZlcmxheXA7CiBleHRlcm4gTGlzcF9PYmplY3QgUXByaW9yaXR5LCBRd2luZG93 LCBRYmVmb3JlX3N0cmluZywgUWFmdGVyX3N0cmluZzsKIGV4dGVybiBMaXNwX09iamVjdCBn ZXRfdHJ1ZW5hbWVfYnVmZmVyIChMaXNwX09iamVjdCk7CiBleHRlcm4gdm9pZCBpbml0X2J1 ZmZlcl9vbmNlICh2b2lkKTsKQEAgLTM1OTQsMTAgKzQxNTQsMTAgQEAKIHZvaWQgc3luY2hy b25pemVfc3lzdGVtX21lc3NhZ2VzX2xvY2FsZSAodm9pZCk7CiB2b2lkIHN5bmNocm9uaXpl X3N5c3RlbV90aW1lX2xvY2FsZSAodm9pZCk7CiAjZWxzZQotI2RlZmluZSBzZXRsb2NhbGUo Y2F0ZWdvcnksIGxvY2FsZSkKLSNkZWZpbmUgZml4dXBfbG9jYWxlKCkKLSNkZWZpbmUgc3lu Y2hyb25pemVfc3lzdGVtX21lc3NhZ2VzX2xvY2FsZSgpCi0jZGVmaW5lIHN5bmNocm9uaXpl X3N5c3RlbV90aW1lX2xvY2FsZSgpCitMSVNQX0lOTElORSBjaGFyICpzZXRsb2NhbGUgKGlu dCBjYXQsIGNoYXIgY29uc3QgKmxvY2FsZSkgeyByZXR1cm4gMDsgfQorTElTUF9JTkxJTkUg dm9pZCBmaXh1cF9sb2NhbGUgKHZvaWQpIHt9CitMSVNQX0lOTElORSB2b2lkIHN5bmNocm9u aXplX3N5c3RlbV9tZXNzYWdlc19sb2NhbGUgKHZvaWQpIHt9CitMSVNQX0lOTElORSB2b2lk IHN5bmNocm9uaXplX3N5c3RlbV90aW1lX2xvY2FsZSAodm9pZCkge30KICNlbmRpZgogZXh0 ZXJuIHZvaWQgc2h1dF9kb3duX2VtYWNzIChpbnQsIExpc3BfT2JqZWN0KTsKIApAQCAtMzk1 Niw4ICs0NTE2LDYgQEAKICAgfSB3aGlsZSAoMCkKIAogCi0jaW5jbHVkZSAiZ2xvYmFscy5o IgotCiAvKiBDaGVjayB3aGV0aGVyIGl0J3MgdGltZSBmb3IgR0MsIGFuZCBydW4gaXQgaWYg c28uICAqLwogCiBMSVNQX0lOTElORSB2b2lkCkBAIC0zOTcwLDcgKzQ1MjgsNyBAQAogICAg IEZnYXJiYWdlX2NvbGxlY3QgKCk7CiB9CiAKLUxJU1BfSU5MSU5FIGludAorTElTUF9JTkxJ TkUgYm9vbAogZnVuY3Rpb25wIChMaXNwX09iamVjdCBvYmplY3QpCiB7CiAgIGlmIChTWU1C T0xQIChvYmplY3QpICYmICFOSUxQIChGZmJvdW5kcCAob2JqZWN0KSkpCgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3JjL3dpbmRvdy5jJwotLS0gc3JjL3dpbmRvdy5jCTIwMTMtMDYtMDQgMTY6 MzM6NDYgKzAwMDAKKysrIHNyYy93aW5kb3cuYwkyMDEzLTA2LTA1IDA0OjM4OjA0ICswMDAw CkBAIC01NSw3ICs1NSw4IEBACiAKIExpc3BfT2JqZWN0IFF3aW5kb3dwLCBRd2luZG93X2xp dmVfcDsKIHN0YXRpYyBMaXNwX09iamVjdCBRd2luZG93X3ZhbGlkX3A7Ci1zdGF0aWMgTGlz cF9PYmplY3QgUXdpbmRvd19jb25maWd1cmF0aW9uX3AsIFFyZWNvcmRfd2luZG93X2J1ZmZl cjsKK0xpc3BfT2JqZWN0IFF3aW5kb3dfY29uZmlndXJhdGlvbl9wOworc3RhdGljIExpc3Bf T2JqZWN0IFFyZWNvcmRfd2luZG93X2J1ZmZlcjsKIHN0YXRpYyBMaXNwX09iamVjdCBRd2lu ZG93X2RlbGV0YWJsZV9wLCBRZGVsZXRlX3dpbmRvdywgUWRpc3BsYXlfYnVmZmVyOwogc3Rh dGljIExpc3BfT2JqZWN0IFFyZXBsYWNlX2J1ZmZlcl9pbl93aW5kb3dzLCBRZ2V0X21ydV93 aW5kb3c7CiBzdGF0aWMgTGlzcF9PYmplY3QgUXdpbmRvd19yZXNpemVfcm9vdF93aW5kb3cs IFF3aW5kb3dfcmVzaXplX3Jvb3Rfd2luZG93X3ZlcnRpY2FsbHk7Cgo9PT0gbW9kaWZpZWQg ZmlsZSAnc3JjL3dpbmRvdy5oJwotLS0gc3JjL3dpbmRvdy5oCTIwMTMtMDMtMjggMTQ6MDQ6 NDkgKzAwMDAKKysrIHNyYy93aW5kb3cuaAkyMDEzLTA0LTAzIDE3OjIzOjA2ICswMDAwCkBA IC05NTgsNyArOTU4LDcgQEAKIAogLyogVGhlc2UgdXNlZCB0byBiZSBpbiBsaXNwLmguICAq LwogCi1leHRlcm4gTGlzcF9PYmplY3QgUXdpbmRvd3AsIFF3aW5kb3dfbGl2ZV9wOworZXh0 ZXJuIExpc3BfT2JqZWN0IFF3aW5kb3dfbGl2ZV9wOwogZXh0ZXJuIExpc3BfT2JqZWN0IFZ3 aW5kb3dfbGlzdDsKIAogZXh0ZXJuIHN0cnVjdCB3aW5kb3cgKmRlY29kZV9saXZlX3dpbmRv dyAoTGlzcF9PYmplY3QpOwo= --------------050709090604060200090702--