From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14201 invoked by alias); 26 Jan 2013 16:24:58 -0000 Received: (qmail 14186 invoked by uid 22791); 26 Jan 2013 16:24:54 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_05,KHOP_SPAMHAUS_DROP,KHOP_THREADED,RP_MATCHES_RCVD,TW_CN,TW_LW,TW_XF,TW_YM X-Spam-Check-By: sourceware.org Received: from mail.fgznet.ch (HELO smtp.fgznet.ch) (81.92.96.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 26 Jan 2013 16:24:23 +0000 Received: from deuterium.andreas.nets (dhclient-91-190-14-19.flashcable.ch [91.190.14.19]) by smtp.fgznet.ch (8.13.8/8.13.8/Submit_SMTPAUTH) with ESMTP id r0QGO9nh025956; Sat, 26 Jan 2013 17:24:10 +0100 (CET) (envelope-from andreast-list@fgznet.ch) Message-ID: <51040329.3090102@fgznet.ch> Date: Sat, 26 Jan 2013 16:24:00 -0000 From: Andreas Tobler User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:17.0) Gecko/20130107 Thunderbird/17.0.2 MIME-Version: 1.0 To: Pedro Alves CC: gdb-patches@sourceware.org Subject: Re: [RFC] patch to refactor ppc64 specific code from ppc-linux-tdep References: <50DCBF4B.7000009@fgznet.ch> <50FD6398.3000807@redhat.com> In-Reply-To: <50FD6398.3000807@redhat.com> Content-Type: multipart/mixed; boundary="------------010809050104090101070604" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2013-01/txt/msg00653.txt.bz2 This is a multi-part message in MIME format. --------------010809050104090101070604 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-length: 3407 Hi Pedro, On 21.01.13 16:49, Pedro Alves wrote: > On 12/27/2012 09:36 PM, Andreas Tobler wrote: > >> in order to avoid code duplication for the FreeBSD powerpc port I >> started to cut off common code from ppc-linux-tdep.c into a new file to >> be used for FreeBSD and GNU/Linux PowerPC 64-bit. The file name is open >> so far. Better namings are welcome. > > Thanks for doing this. > > IMO, the "common" monitor is practically meaningless, and raises the question > of what's different between ppc64-common-tdep.c, and > an hypothetical ppc64-tdep.c, and/or the rs6000-tdep.c, as the > second would be about common ppc64 bits, and the latter, extant, _is also_ > about common ppc bits. IOW, if we need a new ppc function in the future that's > be used by several OSs, how do we decide where it goes? "common" doesn't > give any clue. So I'd suggest ppc64-linbsd-tdep.c, and/or > rs6000-tdep.c/ppc64-tdep.c, for shared code that is not OS specific (yeah, > rs6000-tdep.c is a misnomer nowadays). First, thank you for the review. I attached a revised version of the patch including the CL below. I hope I matched your points. I decided to leave ppc64-linbsd-tdep.c away and use ppc64-tdep.c|h with the changes mentioned below to ppc-tdep.h/rs6000-tdep.c Tested on ppc64-linux and on FreeBSD amd64 with an --enable-targets=all. >> +/* An instruction to match. */ >> + >> +struct insn_pattern > ... >> + >> +int >> +insns_match_pattern (CORE_ADDR pc, struct insn_pattern *pattern, >> + unsigned int *insn); >> +CORE_ADDR >> +insn_d_field (unsigned int insn); > > These look like basic architecture/instruction pattern matching. > I suggest moving to ppc-tdep.h/rs6000-tdep.c instead. Done. > If we're making these extern, then it'd be good to add a "ppc_" or > "ppc64_" prefix (could be a separate step). Done with ppc_ since the instructions could be used on ppc and ppc64 > Also, GDB's convention is that the function name goes on the first > column in function definitions only, not declarations, and that > declarations in .h files get an explicit "extern". Done, not sure if I need the extern on ppc64-tdep.h too? > Otherwise looks fine to me. Again, thank you! Andreas 2013-01-26 Andreas Tobler * Makefile.in (ALL_TARGET_OBS): Add new file ppc64-tdep.o. (HFILES_NO_SRCDIR): Likewise. (ALLDEPFILES): Likewise. * configure.tgt: Add new file for powerpc-linux. * ppc64-tdep.h: New file. * ppc64-tdep.c: New file. (insn_d, insn_ds, insn_xfx, ppc64_desc_entry_point): Move from ppc-linux-tdep.c to here. (PPC64_STANDARD_LINKAGE1_LEN, PPC64_STANDARD_LINKAGE2_LEN) (PPC64_STANDARD_LINKAGE2_LEN): Likewise and use ARRAY_SIZE macro. (ppc64_standard_linkage1_target, ppc64_standard_linkage2_target) (ppc64_standard_linkage3_target, ppc64_skip_trampoline_code): Move from ppc-linux-tdep.c to here. (ppc64_convert_from_func_ptr_addr): Rename it from ppc64_linux_convert_from_func_ptr_addr to ppc64_convert_from_func_ptr_addr and move it from ppc-linux-tdep.c to here. * rs6000-tdep.c: (read_insn): Move from ppc-linux-tdep.c to here. (insns_match_pattern, insn_d_field, insn_ds_field): Move from ppc-linux-tdep.c to here and rename them with the ppc_ prefix. * ppc-linux-tdep.c: Include ppc64-tdep.h. Removed above functions. (ppc_linux_init_abi): Rename ppc64_linux_convert_from_func_ptr_addr to ppc64_convert_from_func_ptr_addr. --------------010809050104090101070604 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="ppc64_tdep_1diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ppc64_tdep_1diff" Content-length: 50691 ZGlmZiAtLWdpdCBhL2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5p bgppbmRleCA2OGQ1NDVlLi5lMGUwOGNhIDEwMDY0NAotLS0gYS9nZGIvTWFr ZWZpbGUuaW4KKysrIGIvZ2RiL01ha2VmaWxlLmluCkBAIC01NjUsNyArNTY1 LDcgQEAgQUxMX1RBUkdFVF9PQlMgPSBcCiAJbXQtdGRlcC5vIFwKIAludG8t dGRlcC5vIFwKIAlwcGMtbGludXgtdGRlcC5vIHBwY25ic2QtdGRlcC5vIHBw Y29ic2QtdGRlcC5vIHBwYy1zeXN2LXRkZXAubyBcCi0Jcmw3OC10ZGVwLm8g XAorCXBwYzY0LXRkZXAubyBybDc4LXRkZXAubyBcCiAJcnM2MDAwLWFpeC10 ZGVwLm8gcnM2MDAwLXRkZXAubyBwcGMtcmF2ZW5zY2FyLXRocmVhZC5vIFwK IAlyczYwMDAtbHlueDE3OC10ZGVwLm8gXAogCXJ4LXRkZXAubyBcCkBAIC04 MDcsNyArODA3LDcgQEAgYW1kNjQtbGludXgtdGRlcC5oIGxpbmVzcGVjLmgg aTM4Ny10ZGVwLmggbW4xMDMwMC10ZGVwLmggXAogc3BhcmM2NC10ZGVwLmgg bW9uaXRvci5oIHBwY29ic2QtdGRlcC5oIHNyZWMuaCBzb2xpYi1wYTY0Lmgg XAogY29mZi1wZS1yZWFkLmggcGFyc2VyLWRlZnMuaCBnZGJfcHRyYWNlLmgg bWlwcy1saW51eC10ZGVwLmggXAogbTY4ay10ZGVwLmggc3B1LXRkZXAuaCBq di1sYW5nLmggZW52aXJvbi5oIHNvbGliLWlyaXguaCBhbWQ2NC10ZGVwLmgg XAotZG91Ymxlc3QuaCByZWdzZXQuaCBocHBhLXRkZXAuaCBwcGMtbGludXgt dGRlcC5oIHJzNjAwMC10ZGVwLmggXAorZG91Ymxlc3QuaCByZWdzZXQuaCBo cHBhLXRkZXAuaCBwcGMtbGludXgtdGRlcC5oIHBwYzY0LXRkZXAuaCByczYw MDAtdGRlcC5oIFwKIGNvbW1vbi9nZGJfbG9jYWxlLmggY29tbW9uL2dkYl9k aXJlbnQuaCBhcmNoLXV0aWxzLmggdHJhZC1mcmFtZS5oIGdudS1uYXQuaCBc CiBsYW5ndWFnZS5oIG5ic2QtdGRlcC5oIHNvbGliLXN2cjQuaCBcCiBtYWNy b2V4cC5oIHVpLWZpbGUuaCByZWdjYWNoZS5oIGdkYl9zdHJpbmcuaCB0cmFj ZXBvaW50LmggaTM4Ni10ZGVwLmggXApAQCAtMTQ4Nyw3ICsxNDg3LDcgQEAg QUxMREVQRklMRVMgPSBcCiAJc29saWItb3NmLmMgXAogCXNvbXJlYWQuYyBz b2xpYi1zb20uYyBcCiAJcG9zaXgtaGRlcC5jIFwKLQlwcGMtc3lzdi10ZGVw LmMgcHBjLWxpbnV4LW5hdC5jIHBwYy1saW51eC10ZGVwLmMgXAorCXBwYy1z eXN2LXRkZXAuYyBwcGMtbGludXgtbmF0LmMgcHBjLWxpbnV4LXRkZXAuYyBw cGM2NC10ZGVwLmMgXAogCXBwY25ic2QtbmF0LmMgcHBjbmJzZC10ZGVwLmMg XAogCXBwY29ic2QtbmF0LmMgcHBjb2JzZC10ZGVwLmMgXAogCXByb2Nmcy5j IFwKZGlmZiAtLWdpdCBhL2dkYi9jb25maWd1cmUudGd0IGIvZ2RiL2NvbmZp Z3VyZS50Z3QKaW5kZXggNWI3N2JiMi4uMmI0ZWVhMCAxMDA2NDQKLS0tIGEv Z2RiL2NvbmZpZ3VyZS50Z3QKKysrIGIvZ2RiL2NvbmZpZ3VyZS50Z3QKQEAg LTQwNSw3ICs0MDUsOCBAQCBwb3dlcnBjLSotYWl4KiB8IHJzNjAwMC0qLSop CiBwb3dlcnBjLSotbGludXgqIHwgcG93ZXJwYzY0LSotbGludXgqKQogCSMg VGFyZ2V0OiBQb3dlclBDIHJ1bm5pbmcgTGludXgKIAlnZGJfdGFyZ2V0X29i cz0icnM2MDAwLXRkZXAubyBwcGMtbGludXgtdGRlcC5vIHBwYy1zeXN2LXRk ZXAubyBcCi0JCQlzb2xpYi1zdnI0Lm8gc29saWItc3B1Lm8gc3B1LW11bHRp YXJjaC5vIFwKKwkJCXBwYzY0LXRkZXAubyBzb2xpYi1zdnI0Lm8gc29saWIt c3B1Lm8gXAorCQkJc3B1LW11bHRpYXJjaC5vIFwKIAkJCWdsaWJjLXRkZXAu byBzeW1maWxlLW1lbS5vIGxpbnV4LXRkZXAubyBcCiAJCQlyYXZlbnNjYXIt dGhyZWFkLm8gcHBjLXJhdmVuc2Nhci10aHJlYWQubyIKIAlnZGJfc2ltPS4u L3NpbS9wcGMvbGlic2ltLmEKZGlmZiAtLWdpdCBhL2dkYi9wcGMtbGludXgt dGRlcC5jIGIvZ2RiL3BwYy1saW51eC10ZGVwLmMKaW5kZXggMTM1ZGM3NS4u Y2RmMzYyZiAxMDA2NDQKLS0tIGEvZ2RiL3BwYy1saW51eC10ZGVwLmMKKysr IGIvZ2RiL3BwYy1saW51eC10ZGVwLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNp bmNsdWRlICJzb2xpYi5oIgogI2luY2x1ZGUgInNvbGlzdC5oIgogI2luY2x1 ZGUgInBwYy10ZGVwLmgiCisjaW5jbHVkZSAicHBjNjQtdGRlcC5oIgogI2lu Y2x1ZGUgInBwYy1saW51eC10ZGVwLmgiCiAjaW5jbHVkZSAiZ2xpYmMtdGRl cC5oIgogI2luY2x1ZGUgInRyYWQtZnJhbWUuaCIKQEAgLTI1NCwyNzcgKzI1 NSw2IEBAIHBwY19saW51eF9yZXR1cm5fdmFsdWUgKHN0cnVjdCBnZGJhcmNo ICpnZGJhcmNoLCBzdHJ1Y3QgdmFsdWUgKmZ1bmN0aW9uLAogCQkJCSAgICAg IHJlYWRidWYsIHdyaXRlYnVmKTsKIH0KIAotLyogTWFjcm9zIGZvciBtYXRj aGluZyBpbnN0cnVjdGlvbnMuICBOb3RlIHRoYXQsIHNpbmNlIGFsbCB0aGUK LSAgIG9wZXJhbmRzIGFyZSBtYXNrZWQgb2ZmIGJlZm9yZSB0aGV5J3JlIG9y LWVkIGludG8gdGhlIGluc3RydWN0aW9uLAotICAgeW91IGNhbiB1c2UgLTEg dG8gbWFrZSBtYXNrcy4gICovCi0KLSNkZWZpbmUgaW5zbl9kKG9wY2QsIHJ0 cywgcmEsIGQpICAgICAgICAgICAgICAgIFwKLSAgKCgoKG9wY2QpICYgMHgz ZikgPDwgMjYpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIHwgKCgocnRz KSAmIDB4MWYpIDw8IDIxKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgIHwg KCgocmEpICYgMHgxZikgPDwgMTYpICAgICAgICAgICAgICAgICAgICAgIFwK LSAgIHwgKChkKSAmIDB4ZmZmZikpCi0KLSNkZWZpbmUgaW5zbl9kcyhvcGNk LCBydHMsIHJhLCBkLCB4bykgICAgICAgICAgIFwKLSAgKCgoKG9wY2QpICYg MHgzZikgPDwgMjYpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIHwgKCgo cnRzKSAmIDB4MWYpIDw8IDIxKSAgICAgICAgICAgICAgICAgICAgIFwKLSAg IHwgKCgocmEpICYgMHgxZikgPDwgMTYpICAgICAgICAgICAgICAgICAgICAg IFwKLSAgIHwgKChkKSAmIDB4ZmZmYykgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgIHwgKCh4bykgJiAweDMpKQotCi0jZGVmaW5lIGluc25f eGZ4KG9wY2QsIHJ0cywgc3ByLCB4bykgICAgICAgICAgICBcCi0gICgoKChv cGNkKSAmIDB4M2YpIDw8IDI2KSAgICAgICAgICAgICAgICAgICAgICBcCi0g ICB8ICgoKHJ0cykgJiAweDFmKSA8PCAyMSkgICAgICAgICAgICAgICAgICAg ICBcCi0gICB8ICgoKHNwcikgJiAweDFmKSA8PCAxNikgICAgICAgICAgICAg ICAgICAgICBcCi0gICB8ICgoKHNwcikgJiAweDNlMCkgPDwgNikgICAgICAg ICAgICAgICAgICAgICBcCi0gICB8ICgoKHhvKSAmIDB4M2ZmKSA8PCAxKSkK LQotLyogUmVhZCBhIFBQQyBpbnN0cnVjdGlvbiBmcm9tIG1lbW9yeS4gIFBQ QyBpbnN0cnVjdGlvbnMgYXJlIGFsd2F5cwotICAgYmlnLWVuZGlhbiwgbm8g bWF0dGVyIHdoYXQgZW5kaWFubmVzcyB0aGUgcHJvZ3JhbSBpcyBydW5uaW5n IGluLCBzbwotICAgd2UgY2FuJ3QgdXNlIHJlYWRfbWVtb3J5X2ludGVnZXIg b3Igb25lIG9mIGl0cyBmcmllbmRzIGhlcmUuICAqLwotc3RhdGljIHVuc2ln bmVkIGludAotcmVhZF9pbnNuIChDT1JFX0FERFIgcGMpCi17Ci0gIHVuc2ln bmVkIGNoYXIgYnVmWzRdOwotCi0gIHJlYWRfbWVtb3J5IChwYywgYnVmLCA0 KTsKLSAgcmV0dXJuIChidWZbMF0gPDwgMjQpIHwgKGJ1ZlsxXSA8PCAxNikg fCAoYnVmWzJdIDw8IDgpIHwgYnVmWzNdOwotfQotCi0KLS8qIEFuIGluc3Ry dWN0aW9uIHRvIG1hdGNoLiAgKi8KLXN0cnVjdCBpbnNuX3BhdHRlcm4KLXsK LSAgdW5zaWduZWQgaW50IG1hc2s7ICAgICAgICAgICAgLyogbWFzayB0aGUg aW5zbiB3aXRoIHRoaXMuLi4gICovCi0gIHVuc2lnbmVkIGludCBkYXRhOyAg ICAgICAgICAgIC8qIC4uLmFuZCBzZWUgaWYgaXQgbWF0Y2hlcyB0aGlzLiAg Ki8KLSAgaW50IG9wdGlvbmFsOyAgICAgICAgICAgICAgICAgLyogSWYgbm9u LXplcm8sIHRoaXMgaW5zbiBtYXkgYmUgYWJzZW50LiAgKi8KLX07Ci0KLS8q IFJldHVybiBub24temVybyBpZiB0aGUgaW5zdHJ1Y3Rpb25zIGF0IFBDIG1h dGNoIHRoZSBzZXJpZXMKLSAgIGRlc2NyaWJlZCBpbiBQQVRURVJOLCBvciB6 ZXJvIG90aGVyd2lzZS4gIFBBVFRFUk4gaXMgYW4gYXJyYXkgb2YKLSAgICdz dHJ1Y3QgaW5zbl9wYXR0ZXJuJyBvYmplY3RzLCB0ZXJtaW5hdGVkIGJ5IGFu IGVudHJ5IHdob3NlIG1hc2sgaXMKLSAgIHplcm8uCi0KLSAgIFdoZW4gdGhl IG1hdGNoIGlzIHN1Y2Nlc3NmdWwsIGZpbGwgSU5TTltpXSB3aXRoIHdoYXQg UEFUVEVSTltpXQotICAgbWF0Y2hlZC4gIElmIFBBVFRFUk5baV0gaXMgb3B0 aW9uYWwsIGFuZCB0aGUgaW5zdHJ1Y3Rpb24gd2Fzbid0Ci0gICBwcmVzZW50 LCBzZXQgSU5TTltpXSB0byAwICh3aGljaCBpcyBub3QgYSB2YWxpZCBQUEMg aW5zdHJ1Y3Rpb24pLgotICAgSU5TTiBzaG91bGQgaGF2ZSBhcyBtYW55IGVs ZW1lbnRzIGFzIFBBVFRFUk4uICBOb3RlIHRoYXQsIGlmCi0gICBQQVRURVJO IGNvbnRhaW5zIG9wdGlvbmFsIGluc3RydWN0aW9ucyB3aGljaCBhcmVuJ3Qg cHJlc2VudCBpbgotICAgbWVtb3J5LCB0aGVuIElOU04gd2lsbCBoYXZlIGhv bGVzLCBzbyBJTlNOW2ldIGlzbid0IG5lY2Vzc2FyaWx5IHRoZQotICAgaSd0 aCBpbnN0cnVjdGlvbiBpbiBtZW1vcnkuICAqLwotc3RhdGljIGludAotaW5z bnNfbWF0Y2hfcGF0dGVybiAoQ09SRV9BRERSIHBjLAotICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGluc25fcGF0dGVybiAqcGF0dGVybiwKLSAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqaW5zbikKLXsKLSAgaW50 IGk7Ci0KLSAgZm9yIChpID0gMDsgcGF0dGVybltpXS5tYXNrOyBpKyspCi0g ICAgewotICAgICAgaW5zbltpXSA9IHJlYWRfaW5zbiAocGMpOwotICAgICAg aWYgKChpbnNuW2ldICYgcGF0dGVybltpXS5tYXNrKSA9PSBwYXR0ZXJuW2ld LmRhdGEpCi0gICAgICAgIHBjICs9IDQ7Ci0gICAgICBlbHNlIGlmIChwYXR0 ZXJuW2ldLm9wdGlvbmFsKQotICAgICAgICBpbnNuW2ldID0gMDsKLSAgICAg IGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gIHJldHVybiAx OwotfQotCi0KLS8qIFJldHVybiB0aGUgJ2QnIGZpZWxkIG9mIHRoZSBkLWZv cm0gaW5zdHJ1Y3Rpb24gSU5TTiwgcHJvcGVybHkKLSAgIHNpZ24tZXh0ZW5k ZWQuICAqLwotc3RhdGljIENPUkVfQUREUgotaW5zbl9kX2ZpZWxkICh1bnNp Z25lZCBpbnQgaW5zbikKLXsKLSAgcmV0dXJuICgoKChDT1JFX0FERFIpIGlu c24gJiAweGZmZmYpIF4gMHg4MDAwKSAtIDB4ODAwMCk7Ci19Ci0KLQotLyog UmV0dXJuIHRoZSAnZHMnIGZpZWxkIG9mIHRoZSBkcy1mb3JtIGluc3RydWN0 aW9uIElOU04sIHdpdGggdGhlIHR3bwotICAgemVybyBiaXRzIGNvbmNhdGVu YXRlZCBhdCB0aGUgcmlnaHQsIGFuZCBwcm9wZXJseQotICAgc2lnbi1leHRl bmRlZC4gICovCi1zdGF0aWMgQ09SRV9BRERSCi1pbnNuX2RzX2ZpZWxkICh1 bnNpZ25lZCBpbnQgaW5zbikKLXsKLSAgcmV0dXJuICgoKChDT1JFX0FERFIp IGluc24gJiAweGZmZmMpIF4gMHg4MDAwKSAtIDB4ODAwMCk7Ci19Ci0KLQot LyogSWYgREVTQyBpcyB0aGUgYWRkcmVzcyBvZiBhIDY0LWJpdCBQb3dlclBD IEdOVS9MaW51eCBmdW5jdGlvbgotICAgZGVzY3JpcHRvciwgcmV0dXJuIHRo ZSBkZXNjcmlwdG9yJ3MgZW50cnkgcG9pbnQuICAqLwotc3RhdGljIENPUkVf QUREUgotcHBjNjRfZGVzY19lbnRyeV9wb2ludCAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsIENPUkVfQUREUiBkZXNjKQotewotICBlbnVtIGJmZF9lbmRp YW4gYnl0ZV9vcmRlciA9IGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCk7 Ci0gIC8qIFRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkZXNjcmlwdG9yIGlzIHRo ZSBlbnRyeSBwb2ludC4gICovCi0gIHJldHVybiAoQ09SRV9BRERSKSByZWFk X21lbW9yeV91bnNpZ25lZF9pbnRlZ2VyIChkZXNjLCA4LCBieXRlX29yZGVy KTsKLX0KLQotCi0vKiBQYXR0ZXJuIGZvciB0aGUgc3RhbmRhcmQgbGlua2Fn ZSBmdW5jdGlvbi4gIFRoZXNlIGFyZSBidWlsdCBieQotICAgYnVpbGRfcGx0 X3N0dWIgaW4gZWxmNjQtcHBjLmMsIHdob3NlIEdMSU5LIGFyZ3VtZW50IGlz IGFsd2F5cwotICAgemVyby4gICovCi1zdGF0aWMgc3RydWN0IGluc25fcGF0 dGVybiBwcGM2NF9zdGFuZGFyZF9saW5rYWdlMVtdID0KLSAgewotICAgIC8q IGFkZGlzIHIxMiwgcjIsIDxhbnk+ICovCi0gICAgeyBpbnNuX2QgKC0xLCAt MSwgLTEsIDApLCBpbnNuX2QgKDE1LCAxMiwgMiwgMCksIDAgfSwKLQotICAg IC8qIHN0ZCByMiwgNDAocjEpICovCi0gICAgeyAtMSwgaW5zbl9kcyAoNjIs IDIsIDEsIDQwLCAwKSwgMCB9LAotCi0gICAgLyogbGQgcjExLCA8YW55Pihy MTIpICovCi0gICAgeyBpbnNuX2RzICgtMSwgLTEsIC0xLCAwLCAtMSksIGlu c25fZHMgKDU4LCAxMSwgMTIsIDAsIDApLCAwIH0sCi0KLSAgICAvKiBhZGRp cyByMTIsIHIxMiwgMSA8b3B0aW9uYWw+ICovCi0gICAgeyBpbnNuX2QgKC0x LCAtMSwgLTEsIC0xKSwgaW5zbl9kICgxNSwgMTIsIDEyLCAxKSwgMSB9LAot Ci0gICAgLyogbGQgcjIsIDxhbnk+KHIxMikgKi8KLSAgICB7IGluc25fZHMg KC0xLCAtMSwgLTEsIDAsIC0xKSwgaW5zbl9kcyAoNTgsIDIsIDEyLCAwLCAw KSwgMCB9LAotCi0gICAgLyogYWRkaXMgcjEyLCByMTIsIDEgPG9wdGlvbmFs PiAqLwotICAgIHsgaW5zbl9kICgtMSwgLTEsIC0xLCAtMSksIGluc25fZCAo MTUsIDEyLCAxMiwgMSksIDEgfSwKLQotICAgIC8qIG10Y3RyIHIxMSAqLwot ICAgIHsgaW5zbl94ZnggKC0xLCAtMSwgLTEsIC0xKSwgaW5zbl94ZnggKDMx LCAxMSwgOSwgNDY3KSwgMCB9LAotCi0gICAgLyogbGQgcjExLCA8YW55Pihy MTIpIDxvcHRpb25hbD4gKi8KLSAgICB7IGluc25fZHMgKC0xLCAtMSwgLTEs IDAsIC0xKSwgaW5zbl9kcyAoNTgsIDExLCAxMiwgMCwgMCksIDEgfSwKLSAg ICAgIAotICAgIC8qIGJjdHIgKi8KLSAgICB7IC0xLCAweDRlODAwNDIwLCAw IH0sCi0KLSAgICB7IDAsIDAsIDAgfQotICB9OwotI2RlZmluZSBQUEM2NF9T VEFOREFSRF9MSU5LQUdFMV9MRU4gXAotICAoc2l6ZW9mIChwcGM2NF9zdGFu ZGFyZF9saW5rYWdlMSkgLyBzaXplb2YgKHBwYzY0X3N0YW5kYXJkX2xpbmth Z2UxWzBdKSkKLQotc3RhdGljIHN0cnVjdCBpbnNuX3BhdHRlcm4gcHBjNjRf c3RhbmRhcmRfbGlua2FnZTJbXSA9Ci0gIHsKLSAgICAvKiBhZGRpcyByMTIs IHIyLCA8YW55PiAqLwotICAgIHsgaW5zbl9kICgtMSwgLTEsIC0xLCAwKSwg aW5zbl9kICgxNSwgMTIsIDIsIDApLCAwIH0sCi0KLSAgICAvKiBzdGQgcjIs IDQwKHIxKSAqLwotICAgIHsgLTEsIGluc25fZHMgKDYyLCAyLCAxLCA0MCwg MCksIDAgfSwKLQotICAgIC8qIGxkIHIxMSwgPGFueT4ocjEyKSAqLwotICAg IHsgaW5zbl9kcyAoLTEsIC0xLCAtMSwgMCwgLTEpLCBpbnNuX2RzICg1OCwg MTEsIDEyLCAwLCAwKSwgMCB9LAotCi0gICAgLyogYWRkaSByMTIsIHIxMiwg PGFueT4gPG9wdGlvbmFsPiAqLwotICAgIHsgaW5zbl9kICgtMSwgLTEsIC0x LCAwKSwgaW5zbl9kICgxNCwgMTIsIDEyLCAwKSwgMSB9LAotCi0gICAgLyog bXRjdHIgcjExICovCi0gICAgeyBpbnNuX3hmeCAoLTEsIC0xLCAtMSwgLTEp LCBpbnNuX3hmeCAoMzEsIDExLCA5LCA0NjcpLCAwIH0sCi0KLSAgICAvKiBs ZCByMiwgPGFueT4ocjEyKSAqLwotICAgIHsgaW5zbl9kcyAoLTEsIC0xLCAt MSwgMCwgLTEpLCBpbnNuX2RzICg1OCwgMiwgMTIsIDAsIDApLCAwIH0sCi0K LSAgICAvKiBsZCByMTEsIDxhbnk+KHIxMikgPG9wdGlvbmFsPiAqLwotICAg IHsgaW5zbl9kcyAoLTEsIC0xLCAtMSwgMCwgLTEpLCBpbnNuX2RzICg1OCwg MTEsIDEyLCAwLCAwKSwgMSB9LAotICAgICAgCi0gICAgLyogYmN0ciAqLwot ICAgIHsgLTEsIDB4NGU4MDA0MjAsIDAgfSwKLQotICAgIHsgMCwgMCwgMCB9 Ci0gIH07Ci0jZGVmaW5lIFBQQzY0X1NUQU5EQVJEX0xJTktBR0UyX0xFTiBc Ci0gIChzaXplb2YgKHBwYzY0X3N0YW5kYXJkX2xpbmthZ2UyKSAvIHNpemVv ZiAocHBjNjRfc3RhbmRhcmRfbGlua2FnZTJbMF0pKQotCi1zdGF0aWMgc3Ry dWN0IGluc25fcGF0dGVybiBwcGM2NF9zdGFuZGFyZF9saW5rYWdlM1tdID0K LSAgewotICAgIC8qIHN0ZCByMiwgNDAocjEpICovCi0gICAgeyAtMSwgaW5z bl9kcyAoNjIsIDIsIDEsIDQwLCAwKSwgMCB9LAotCi0gICAgLyogbGQgcjEx LCA8YW55PihyMikgKi8KLSAgICB7IGluc25fZHMgKC0xLCAtMSwgLTEsIDAs IC0xKSwgaW5zbl9kcyAoNTgsIDExLCAyLCAwLCAwKSwgMCB9LAotCi0gICAg LyogYWRkaSByMiwgcjIsIDxhbnk+IDxvcHRpb25hbD4gKi8KLSAgICB7IGlu c25fZCAoLTEsIC0xLCAtMSwgMCksIGluc25fZCAoMTQsIDIsIDIsIDApLCAx IH0sCi0KLSAgICAvKiBtdGN0ciByMTEgKi8KLSAgICB7IGluc25feGZ4ICgt MSwgLTEsIC0xLCAtMSksIGluc25feGZ4ICgzMSwgMTEsIDksIDQ2NyksIDAg fSwKLQotICAgIC8qIGxkIHIxMSwgPGFueT4ocjIpIDxvcHRpb25hbD4gKi8K LSAgICB7IGluc25fZHMgKC0xLCAtMSwgLTEsIDAsIC0xKSwgaW5zbl9kcyAo NTgsIDExLCAyLCAwLCAwKSwgMSB9LAotICAgICAgCi0gICAgLyogbGQgcjIs IDxhbnk+KHIyKSAqLwotICAgIHsgaW5zbl9kcyAoLTEsIC0xLCAtMSwgMCwg LTEpLCBpbnNuX2RzICg1OCwgMiwgMiwgMCwgMCksIDAgfSwKLQotICAgIC8q IGJjdHIgKi8KLSAgICB7IC0xLCAweDRlODAwNDIwLCAwIH0sCi0KLSAgICB7 IDAsIDAsIDAgfQotICB9OwotI2RlZmluZSBQUEM2NF9TVEFOREFSRF9MSU5L QUdFM19MRU4gXAotICAoc2l6ZW9mIChwcGM2NF9zdGFuZGFyZF9saW5rYWdl MykgLyBzaXplb2YgKHBwYzY0X3N0YW5kYXJkX2xpbmthZ2UzWzBdKSkKLQot Ci0vKiBXaGVuIHRoZSBkeW5hbWljIGxpbmtlciBpcyBkb2luZyBsYXp5IHN5 bWJvbCByZXNvbHV0aW9uLCB0aGUgZmlyc3QKLSAgIGNhbGwgdG8gYSBmdW5j dGlvbiBpbiBhbm90aGVyIG9iamVjdCB3aWxsIGdvIGxpa2UgdGhpczoKLQot ICAgLSBUaGUgdXNlcidzIGZ1bmN0aW9uIGNhbGxzIHRoZSBsaW5rYWdlIGZ1 bmN0aW9uOgotCi0gICAgIDEwMDAwN2M0Ogk0YiBmZiBmYyBkNSAJYmwJMTAw MDA0OTgKLSAgICAgMTAwMDA3Yzg6CWU4IDQxIDAwIDI4IAlsZAlyMiw0MChy MSkKLQotICAgLSBUaGUgbGlua2FnZSBmdW5jdGlvbiBsb2FkcyB0aGUgZW50 cnkgcG9pbnQgKGFuZCBvdGhlciBzdHVmZikgZnJvbQotICAgICB0aGUgZnVu Y3Rpb24gZGVzY3JpcHRvciBpbiB0aGUgUExULCBhbmQganVtcHMgdG8gaXQ6 Ci0KLSAgICAgMTAwMDA0OTg6CTNkIDgyIDAwIDAwIAlhZGRpcwlyMTIscjIs MAotICAgICAxMDAwMDQ5YzoJZjggNDEgMDAgMjggCXN0ZAlyMiw0MChyMSkK LSAgICAgMTAwMDA0YTA6CWU5IDZjIDgwIDk4IAlsZAlyMTEsLTMyNjE2KHIx MikKLSAgICAgMTAwMDA0YTQ6CWU4IDRjIDgwIGEwIAlsZAlyMiwtMzI2MDgo cjEyKQotICAgICAxMDAwMDRhODoJN2QgNjkgMDMgYTYgCW10Y3RyCXIxMQot ICAgICAxMDAwMDRhYzoJZTkgNmMgODAgYTggCWxkCXIxMSwtMzI2MDAocjEy KQotICAgICAxMDAwMDRiMDoJNGUgODAgMDQgMjAgCWJjdHIKLQotICAgLSBC dXQgc2luY2UgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGF0IFBMVCBlbnRy eSBoYXMgYmVlbiB1c2VkLCBpdAotICAgICBzZW5kcyBjb250cm9sIHRvIGl0 cyBnbGluayBlbnRyeS4gIFRoYXQgbG9hZHMgdGhlIG51bWJlciBvZiB0aGUK LSAgICAgUExUIGVudHJ5IGFuZCBqdW1wcyB0byB0aGUgY29tbW9uIGdsaW5r MCBjb2RlOgotCi0gICAgIDEwMDAwYzk4OgkzOCAwMCAwMCAwMCAJbGkJcjAs MAotICAgICAxMDAwMGM5YzoJNGIgZmYgZmYgZGMgCWIJMTAwMDBjNzgKLQot ICAgLSBUaGUgY29tbW9uIGdsaW5rMCBjb2RlIHRoZW4gdHJhbnNmZXJzIGNv bnRyb2wgdG8gdGhlIGR5bmFtaWMKLSAgICAgbGlua2VyJ3MgZml4dXAgY29k ZToKLQotICAgICAxMDAwMGM3ODoJZTggNDEgMDAgMjggCWxkCXIyLDQwKHIx KQotICAgICAxMDAwMGM3YzoJM2QgODIgMDAgMDAgCWFkZGlzCXIxMixyMiww Ci0gICAgIDEwMDAwYzgwOgllOSA2YyA4MCA4MCAJbGQJcjExLC0zMjY0MChy MTIpCi0gICAgIDEwMDAwYzg0OgllOCA0YyA4MCA4OCAJbGQJcjIsLTMyNjMy KHIxMikKLSAgICAgMTAwMDBjODg6CTdkIDY5IDAzIGE2IAltdGN0cglyMTEK LSAgICAgMTAwMDBjOGM6CWU5IDZjIDgwIDkwIAlsZAlyMTEsLTMyNjI0KHIx MikKLSAgICAgMTAwMDBjOTA6CTRlIDgwIDA0IDIwIAliY3RyCi0KLSAgIEV2 ZW50dWFsbHksIHRoaXMgY29kZSB3aWxsIGZpZ3VyZSBvdXQgaG93IHRvIHNr aXAgYWxsIG9mIHRoaXMsCi0gICBpbmNsdWRpbmcgdGhlIGR5bmFtaWMgbGlu a2VyLiAgQXQgdGhlIG1vbWVudCwgd2UganVzdCBnZXQgdGhyb3VnaAotICAg dGhlIGxpbmthZ2UgZnVuY3Rpb24uICAqLwotCi0vKiBJZiB0aGUgY3VycmVu dCB0aHJlYWQgaXMgYWJvdXQgdG8gZXhlY3V0ZSBhIHNlcmllcyBvZiBpbnN0 cnVjdGlvbnMKLSAgIGF0IFBDIG1hdGNoaW5nIHRoZSBwcGM2NF9zdGFuZGFy ZF9saW5rYWdlIHBhdHRlcm4sIGFuZCBJTlNOIGlzIHRoZSByZXN1bHQKLSAg IGZyb20gdGhhdCBwYXR0ZXJuIG1hdGNoLCByZXR1cm4gdGhlIGNvZGUgYWRk cmVzcyB0byB3aGljaCB0aGUKLSAgIHN0YW5kYXJkIGxpbmthZ2UgZnVuY3Rp b24gd2lsbCBzZW5kIHRoZW0uICAoVGhpcyBkb2Vzbid0IGRlYWwgd2l0aAot ICAgZHluYW1pYyBsaW5rZXIgbGF6eSBzeW1ib2wgcmVzb2x1dGlvbiBzdHVi cy4pICAqLwotc3RhdGljIENPUkVfQUREUgotcHBjNjRfc3RhbmRhcmRfbGlu a2FnZTFfdGFyZ2V0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsCi0JCQkJ Q09SRV9BRERSIHBjLCB1bnNpZ25lZCBpbnQgKmluc24pCi17Ci0gIHN0cnVj dCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKGZyYW1lKTsK LSAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAo Z2RiYXJjaCk7Ci0KLSAgLyogVGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9u IGRlc2NyaXB0b3IgdGhpcyBsaW5rYWdlIGZ1bmN0aW9uCi0gICAgIHJlZmVy ZW5jZXMuICAqLwotICBDT1JFX0FERFIgZGVzYwotICAgID0gKChDT1JFX0FE RFIpIGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAoZnJhbWUsCi0JCQkJ CQl0ZGVwLT5wcGNfZ3AwX3JlZ251bSArIDIpCi0gICAgICAgKyAoaW5zbl9k X2ZpZWxkIChpbnNuWzBdKSA8PCAxNikKLSAgICAgICArIGluc25fZHNfZmll bGQgKGluc25bMl0pKTsKLQotICAvKiBUaGUgZmlyc3Qgd29yZCBvZiB0aGUg ZGVzY3JpcHRvciBpcyB0aGUgZW50cnkgcG9pbnQuICBSZXR1cm4gdGhhdC4g ICovCi0gIHJldHVybiBwcGM2NF9kZXNjX2VudHJ5X3BvaW50IChnZGJhcmNo LCBkZXNjKTsKLX0KLQogc3RhdGljIHN0cnVjdCBjb3JlX3JlZ3NldF9zZWN0 aW9uIHBwY19saW51eF92c3hfcmVnc2V0X3NlY3Rpb25zW10gPQogewogICB7 ICIucmVnIiwgNDggKiA0LCAiZ2VuZXJhbC1wdXJwb3NlIiB9LApAQCAtNTcz LDQ1ICszMDMsOCBAQCBzdGF0aWMgc3RydWN0IGNvcmVfcmVnc2V0X3NlY3Rp b24gcHBjNjRfbGludXhfZnBfcmVnc2V0X3NlY3Rpb25zW10gPQogICB7IE5V TEwsIDB9CiB9OwogCi1zdGF0aWMgQ09SRV9BRERSCi1wcGM2NF9zdGFuZGFy ZF9saW5rYWdlMl90YXJnZXQgKHN0cnVjdCBmcmFtZV9pbmZvICpmcmFtZSwK LQkJCQlDT1JFX0FERFIgcGMsIHVuc2lnbmVkIGludCAqaW5zbikKLXsKLSAg c3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAoZnJh bWUpOwotICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90 ZGVwIChnZGJhcmNoKTsKLQotICAvKiBUaGUgYWRkcmVzcyBvZiB0aGUgZnVu Y3Rpb24gZGVzY3JpcHRvciB0aGlzIGxpbmthZ2UgZnVuY3Rpb24KLSAgICAg cmVmZXJlbmNlcy4gICovCi0gIENPUkVfQUREUiBkZXNjCi0gICAgPSAoKENP UkVfQUREUikgZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkIChmcmFtZSwK LQkJCQkJCXRkZXAtPnBwY19ncDBfcmVnbnVtICsgMikKLSAgICAgICArIChp bnNuX2RfZmllbGQgKGluc25bMF0pIDw8IDE2KQotICAgICAgICsgaW5zbl9k c19maWVsZCAoaW5zblsyXSkpOwotCi0gIC8qIFRoZSBmaXJzdCB3b3JkIG9m IHRoZSBkZXNjcmlwdG9yIGlzIHRoZSBlbnRyeSBwb2ludC4gIFJldHVybiB0 aGF0LiAgKi8KLSAgcmV0dXJuIHBwYzY0X2Rlc2NfZW50cnlfcG9pbnQgKGdk YmFyY2gsIGRlc2MpOwotfQotCi1zdGF0aWMgQ09SRV9BRERSCi1wcGM2NF9z dGFuZGFyZF9saW5rYWdlM190YXJnZXQgKHN0cnVjdCBmcmFtZV9pbmZvICpm cmFtZSwKLQkJCQlDT1JFX0FERFIgcGMsIHVuc2lnbmVkIGludCAqaW5zbikK LXsKLSAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJj aCAoZnJhbWUpOwotICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2Ri YXJjaF90ZGVwIChnZGJhcmNoKTsKLQotICAvKiBUaGUgYWRkcmVzcyBvZiB0 aGUgZnVuY3Rpb24gZGVzY3JpcHRvciB0aGlzIGxpbmthZ2UgZnVuY3Rpb24K LSAgICAgcmVmZXJlbmNlcy4gICovCi0gIENPUkVfQUREUiBkZXNjCi0gICAg PSAoKENPUkVfQUREUikgZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkIChm cmFtZSwKLQkJCQkJCXRkZXAtPnBwY19ncDBfcmVnbnVtICsgMikKLSAgICAg ICArIGluc25fZHNfZmllbGQgKGluc25bMV0pKTsKLQotICAvKiBUaGUgZmly c3Qgd29yZCBvZiB0aGUgZGVzY3JpcHRvciBpcyB0aGUgZW50cnkgcG9pbnQu ICBSZXR1cm4gdGhhdC4gICovCi0gIHJldHVybiBwcGM2NF9kZXNjX2VudHJ5 X3BvaW50IChnZGJhcmNoLCBkZXNjKTsKLX0KLQogLyogUExUIHN0dWIgaW4g ZXhlY3V0YWJsZS4gICovCi1zdGF0aWMgc3RydWN0IGluc25fcGF0dGVybiBw b3dlcnBjMzJfcGx0X3N0dWJbXSA9CitzdGF0aWMgc3RydWN0IHBwY19pbnNu X3BhdHRlcm4gcG93ZXJwYzMyX3BsdF9zdHViW10gPQogICB7CiAgICAgeyAw eGZmZmYwMDAwLCAweDNkNjAwMDAwLCAwIH0sCS8qIGxpcyAgIHIxMSwgeHh4 eAkgKi8KICAgICB7IDB4ZmZmZjAwMDAsIDB4ODE2YjAwMDAsIDAgfSwJLyog bHd6ICAgcjExLCB4eHh4KHIxMSkgICovCkBAIC02MjEsNyArMzE0LDcgQEAg c3RhdGljIHN0cnVjdCBpbnNuX3BhdHRlcm4gcG93ZXJwYzMyX3BsdF9zdHVi W10gPQogICB9OwogCiAvKiBQTFQgc3R1YiBpbiBzaGFyZWQgbGlicmFyeS4g ICovCi1zdGF0aWMgc3RydWN0IGluc25fcGF0dGVybiBwb3dlcnBjMzJfcGx0 X3N0dWJfc29bXSA9CitzdGF0aWMgc3RydWN0IHBwY19pbnNuX3BhdHRlcm4g cG93ZXJwYzMyX3BsdF9zdHViX3NvW10gPQogICB7CiAgICAgeyAweGZmZmYw MDAwLCAweDgxN2UwMDAwLCAwIH0sCS8qIGx3eiAgIHIxMSwgeHh4eChyMzAp ICAqLwogICAgIHsgMHhmZmZmZmZmZiwgMHg3ZDY5MDNhNiwgMCB9LAkvKiBt dGN0ciByMTEJCSAqLwpAQCAtNjY2LDEzNCArMzU5LDMyIEBAIHBwY19za2lw X3RyYW1wb2xpbmVfY29kZSAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLCBD T1JFX0FERFIgcGMpCiAgIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVyID0g Z2RiYXJjaF9ieXRlX29yZGVyIChnZGJhcmNoKTsKICAgQ09SRV9BRERSIHRh cmdldCA9IDA7CiAKLSAgaWYgKGluc25zX21hdGNoX3BhdHRlcm4gKHBjLCBw b3dlcnBjMzJfcGx0X3N0dWIsIGluc25idWYpKQorICBpZiAocHBjX2luc25z X21hdGNoX3BhdHRlcm4gKHBjLCBwb3dlcnBjMzJfcGx0X3N0dWIsIGluc25i dWYpKQogICAgIHsKICAgICAgIC8qIEluc24gcGF0dGVybiBpcwogCQlsaXMg ICByMTEsIHh4eHgKIAkJbHd6ICAgcjExLCB4eHh4KHIxMSkKIAkgQnJhbmNo IHRhcmdldCBpcyBpbiByMTEuICAqLwogCi0gICAgICB0YXJnZXQgPSAoaW5z bl9kX2ZpZWxkIChpbnNuYnVmWzBdKSA8PCAxNikgfCBpbnNuX2RfZmllbGQg KGluc25idWZbMV0pOworICAgICAgdGFyZ2V0ID0gKHBwY19pbnNuX2RfZmll bGQgKGluc25idWZbMF0pIDw8IDE2KQorCXwgcHBjX2luc25fZF9maWVsZCAo aW5zbmJ1ZlsxXSk7CiAgICAgICB0YXJnZXQgPSByZWFkX21lbW9yeV91bnNp Z25lZF9pbnRlZ2VyICh0YXJnZXQsIDQsIGJ5dGVfb3JkZXIpOwogICAgIH0K IAotICBpZiAoaW5zbnNfbWF0Y2hfcGF0dGVybiAocGMsIHBvd2VycGMzMl9w bHRfc3R1Yl9zbywgaW5zbmJ1ZikpCisgIGlmIChwcGNfaW5zbnNfbWF0Y2hf cGF0dGVybiAocGMsIHBvd2VycGMzMl9wbHRfc3R1Yl9zbywgaW5zbmJ1Zikp CiAgICAgewogICAgICAgLyogSW5zbiBwYXR0ZXJuIGlzCiAJCWx3eiAgIHIx MSwgeHh4eChyMzApCiAJIEJyYW5jaCB0YXJnZXQgaXMgaW4gcjExLiAgKi8K IAogICAgICAgdGFyZ2V0ID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVk IChmcmFtZSwgdGRlcC0+cHBjX2dwMF9yZWdudW0gKyAzMCkKLQkgICAgICAg KyBpbnNuX2RfZmllbGQgKGluc25idWZbMF0pOworCSAgICAgICArIHBwY19p bnNuX2RfZmllbGQgKGluc25idWZbMF0pOwogICAgICAgdGFyZ2V0ID0gcmVh ZF9tZW1vcnlfdW5zaWduZWRfaW50ZWdlciAodGFyZ2V0LCA0LCBieXRlX29y ZGVyKTsKICAgICB9CiAKICAgcmV0dXJuIHRhcmdldDsKIH0KIAotLyogR2l2 ZW4gdGhhdCB3ZSd2ZSBiZWd1biBleGVjdXRpbmcgYSBjYWxsIHRyYW1wb2xp bmUgYXQgUEMsIHJldHVybgotICAgdGhlIGVudHJ5IHBvaW50IG9mIHRoZSBm dW5jdGlvbiB0aGUgdHJhbXBvbGluZSB3aWxsIGdvIHRvLiAgKi8KLXN0YXRp YyBDT1JFX0FERFIKLXBwYzY0X3NraXBfdHJhbXBvbGluZV9jb2RlIChzdHJ1 Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIENPUkVfQUREUiBwYykKLXsKLSAgdW5z aWduZWQgaW50IHBwYzY0X3N0YW5kYXJkX2xpbmthZ2UxX2luc25bUFBDNjRf U1RBTkRBUkRfTElOS0FHRTFfTEVOXTsKLSAgdW5zaWduZWQgaW50IHBwYzY0 X3N0YW5kYXJkX2xpbmthZ2UyX2luc25bUFBDNjRfU1RBTkRBUkRfTElOS0FH RTJfTEVOXTsKLSAgdW5zaWduZWQgaW50IHBwYzY0X3N0YW5kYXJkX2xpbmth Z2UzX2luc25bUFBDNjRfU1RBTkRBUkRfTElOS0FHRTNfTEVOXTsKLSAgQ09S RV9BRERSIHRhcmdldDsKLQotICBpZiAoaW5zbnNfbWF0Y2hfcGF0dGVybiAo cGMsIHBwYzY0X3N0YW5kYXJkX2xpbmthZ2UxLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHBjNjRfc3RhbmRhcmRfbGlua2FnZTFfaW5zbikpCi0g ICAgcGMgPSBwcGM2NF9zdGFuZGFyZF9saW5rYWdlMV90YXJnZXQgKGZyYW1l LCBwYywKLQkJCQkJIHBwYzY0X3N0YW5kYXJkX2xpbmthZ2UxX2luc24pOwot ICBlbHNlIGlmIChpbnNuc19tYXRjaF9wYXR0ZXJuIChwYywgcHBjNjRfc3Rh bmRhcmRfbGlua2FnZTIsCi0JCQkJcHBjNjRfc3RhbmRhcmRfbGlua2FnZTJf aW5zbikpCi0gICAgcGMgPSBwcGM2NF9zdGFuZGFyZF9saW5rYWdlMl90YXJn ZXQgKGZyYW1lLCBwYywKLQkJCQkJIHBwYzY0X3N0YW5kYXJkX2xpbmthZ2Uy X2luc24pOwotICBlbHNlIGlmIChpbnNuc19tYXRjaF9wYXR0ZXJuIChwYywg cHBjNjRfc3RhbmRhcmRfbGlua2FnZTMsCi0JCQkJcHBjNjRfc3RhbmRhcmRf bGlua2FnZTNfaW5zbikpCi0gICAgcGMgPSBwcGM2NF9zdGFuZGFyZF9saW5r YWdlM190YXJnZXQgKGZyYW1lLCBwYywKLQkJCQkJIHBwYzY0X3N0YW5kYXJk X2xpbmthZ2UzX2luc24pOwotICBlbHNlCi0gICAgcmV0dXJuIDA7Ci0KLSAg LyogVGhlIFBMVCBkZXNjcmlwdG9yIHdpbGwgZWl0aGVyIHBvaW50IHRvIHRo ZSBhbHJlYWR5IHJlc29sdmVkIHRhcmdldAotICAgICBhZGRyZXNzLCBvciBl bHNlIHRvIGEgZ2xpbmsgc3R1Yi4gIEFzIHRoZSBsYXR0ZXIgY2Fycnkgc3lu dGhldGljIEBwbHQKLSAgICAgc3ltYm9scywgZmluZF9zb2xpYl90cmFtcG9s aW5lX3RhcmdldCBzaG91bGQgYmUgYWJsZSB0byByZXNvbHZlIHRoZW0uICAq LwotICB0YXJnZXQgPSBmaW5kX3NvbGliX3RyYW1wb2xpbmVfdGFyZ2V0IChm cmFtZSwgcGMpOwotICByZXR1cm4gdGFyZ2V0PyB0YXJnZXQgOiBwYzsKLX0K LQotCi0vKiBTdXBwb3J0IGZvciBjb252ZXJ0X2Zyb21fZnVuY19wdHJfYWRk ciAoQVJDSCwgQUREUiwgVEFSRykgb24gUFBDNjQKLSAgIEdOVS9MaW51eC4K LQotICAgVXN1YWxseSBhIGZ1bmN0aW9uIHBvaW50ZXIncyByZXByZXNlbnRh dGlvbiBpcyBzaW1wbHkgdGhlIGFkZHJlc3MKLSAgIG9mIHRoZSBmdW5jdGlv bi4gIE9uIEdOVS9MaW51eCBvbiB0aGUgUG93ZXJQQyBob3dldmVyLCBhIGZ1 bmN0aW9uCi0gICBwb2ludGVyIG1heSBiZSBhIHBvaW50ZXIgdG8gYSBmdW5j dGlvbiBkZXNjcmlwdG9yLgotCi0gICBGb3IgUFBDNjQsIGEgZnVuY3Rpb24g ZGVzY3JpcHRvciBpcyBhIFRPQyBlbnRyeSwgaW4gYSBkYXRhIHNlY3Rpb24s Ci0gICB3aGljaCBjb250YWlucyB0aHJlZSB3b3JkczogdGhlIGZpcnN0IHdv cmQgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlCi0gICBmdW5jdGlvbiwgdGhlIHNl Y29uZCB3b3JkIGlzIHRoZSBUT0MgcG9pbnRlciAocjIpLCBhbmQgdGhlIHRo aXJkIHdvcmQKLSAgIGlzIHRoZSBzdGF0aWMgY2hhaW4gdmFsdWUuCi0KLSAg IFRocm91Z2hvdXQgR0RCIGl0IGlzIGN1cnJlbnRseSBhc3N1bWVkIHRoYXQg YSBmdW5jdGlvbiBwb2ludGVyIGNvbnRhaW5zCi0gICB0aGUgYWRkcmVzcyBv ZiB0aGUgZnVuY3Rpb24sIHdoaWNoIGlzIG5vdCBlYXN5IHRvIGZpeC4gIElu IGFkZGl0aW9uLCB0aGUKLSAgIGNvbnZlcnNpb24gb2YgYSBmdW5jdGlvbiBh ZGRyZXNzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciB3b3VsZAotICAgcmVxdWly ZSBhbGxvY2F0aW9uIG9mIGEgVE9DIGVudHJ5IGluIHRoZSBpbmZlcmlvcidz IG1lbW9yeSBzcGFjZSwKLSAgIHdpdGggYWxsIGl0cyBkcmF3YmFja3MuICBU byBiZSBhYmxlIHRvIGNhbGwgQysrIHZpcnR1YWwgbWV0aG9kcyBpbgotICAg dGhlIGluZmVyaW9yICh3aGljaCBhcmUgY2FsbGVkIHZpYSBmdW5jdGlvbiBw b2ludGVycyksCi0gICBmaW5kX2Z1bmN0aW9uX2FkZHIgdXNlcyB0aGlzIGZ1 bmN0aW9uIHRvIGdldCB0aGUgZnVuY3Rpb24gYWRkcmVzcwotICAgZnJvbSBh IGZ1bmN0aW9uIHBvaW50ZXIuCi0KLSAgIElmIEFERFIgcG9pbnRzIGF0IHdo YXQgaXMgY2xlYXJseSBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IsIHRyYW5zZm9y bQotICAgaXQgaW50byB0aGUgYWRkcmVzcyBvZiB0aGUgY29ycmVzcG9uZGlu ZyBmdW5jdGlvbiwgaWYgbmVlZGVkLiAgQmUKLSAgIGNvbnNlcnZhdGl2ZSwg b3RoZXJ3aXNlIEdEQiB3aWxsIGRvIHRoZSB0cmFuc2Zvcm1hdGlvbiBvbiBh bnkKLSAgIHJhbmRvbSBhZGRyZXNzZXMgc3VjaCBhcyBvY2N1ciB3aGVuIHRo ZXJlIGlzIG5vIHN5bWJvbCB0YWJsZS4gICovCi0KLXN0YXRpYyBDT1JFX0FE RFIKLXBwYzY0X2xpbnV4X2NvbnZlcnRfZnJvbV9mdW5jX3B0cl9hZGRyIChz dHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLQkJCQkJQ09SRV9BRERSIGFkZHIs Ci0JCQkJCXN0cnVjdCB0YXJnZXRfb3BzICp0YXJnKQotewotICBlbnVtIGJm ZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFyY2hfYnl0ZV9vcmRlciAoZ2Ri YXJjaCk7Ci0gIHN0cnVjdCB0YXJnZXRfc2VjdGlvbiAqcyA9IHRhcmdldF9z ZWN0aW9uX2J5X2FkZHIgKHRhcmcsIGFkZHIpOwotCi0gIC8qIENoZWNrIGlm IEFERFIgcG9pbnRzIHRvIGEgZnVuY3Rpb24gZGVzY3JpcHRvci4gICovCi0g IGlmIChzICYmIHN0cmNtcCAocy0+dGhlX2JmZF9zZWN0aW9uLT5uYW1lLCAi Lm9wZCIpID09IDApCi0gICAgewotICAgICAgLyogVGhlcmUgbWF5IGJlIHJl bG9jYXRpb25zIHRoYXQgbmVlZCB0byBiZSBhcHBsaWVkIHRvIHRoZSAub3Bk IAotCSBzZWN0aW9uLiAgVW5mb3J0dW5hdGVseSwgdGhpcyBmdW5jdGlvbiBt YXkgYmUgY2FsbGVkIGF0IGEgdGltZQotCSB3aGVyZSB0aGVzZSByZWxvY2F0 aW9ucyBoYXZlIG5vdCB5ZXQgYmVlbiBwZXJmb3JtZWQgLS0gdGhpcyBjYW4K LQkgaGFwcGVuIGZvciBleGFtcGxlIHNob3J0bHkgYWZ0ZXIgYSBsaWJyYXJ5 IGhhcyBiZWVuIGxvYWRlZCB3aXRoCi0JIGRsb3BlbiwgYnV0IGxkLnNvIGhh cyBub3QgeWV0IGFwcGxpZWQgdGhlIHJlbG9jYXRpb25zLgotCi0JIFRvIGNv cGUgd2l0aCBib3RoIHRoZSBjYXNlIHdoZXJlIHRoZSByZWxvY2F0aW9uIGhh cyBiZWVuIGFwcGxpZWQsCi0JIGFuZCB0aGUgY2FzZSB3aGVyZSBpdCBoYXMg bm90IHlldCBiZWVuIGFwcGxpZWQsIHdlIGRvICpub3QqIHJlYWQKLQkgdGhl IChtYXliZSkgcmVsb2NhdGVkIHZhbHVlIGZyb20gdGFyZ2V0IG1lbW9yeSwg YnV0IHdlIGluc3RlYWQKLQkgcmVhZCB0aGUgbm9uLXJlbG9jYXRlZCB2YWx1 ZSBmcm9tIHRoZSBCRkQsIGFuZCBhcHBseSB0aGUgcmVsb2NhdGlvbgotCSBv ZmZzZXQgbWFudWFsbHkuCi0KLQkgVGhpcyBtYWtlcyB0aGUgYXNzdW1wdGlv biB0aGF0IGFsbCAub3BkIGVudHJpZXMgYXJlIGFsd2F5cyByZWxvY2F0ZWQK LQkgYnkgdGhlIHNhbWUgb2Zmc2V0IHRoZSBzZWN0aW9uIGl0c2VsZiB3YXMg cmVsb2NhdGVkLiAgVGhpcyBzaG91bGQKLQkgYWx3YXlzIGJlIHRoZSBjYXNl IGZvciBHTlUvTGludXggZXhlY3V0YWJsZXMgYW5kIHNoYXJlZCBsaWJyYXJp ZXMuCi0JIE5vdGUgdGhhdCBvdGhlciBraW5kIG9mIG9iamVjdCBmaWxlcyAo ZS5nLiB0aG9zZSBhZGRlZCB2aWEKLQkgYWRkLXN5bWJvbC1maWxlcykgd2ls bCBjdXJyZW50bHkgbmV2ZXIgZW5kIHVwIGhlcmUgYW55d2F5LCBhcyB0aGlz Ci0JIGZ1bmN0aW9uIGFjY2Vzc2VzICp0YXJnZXQqIHNlY3Rpb25zIG9ubHk7 IG9ubHkgdGhlIG1haW4gZXhlYyBhbmQKLQkgc2hhcmVkIGxpYnJhcmllcyBh cmUgZXZlciBhZGRlZCB0byB0aGUgdGFyZ2V0LiAgKi8KLQotICAgICAgZ2Ri X2J5dGUgYnVmWzhdOwotICAgICAgaW50IHJlczsKLQotICAgICAgcmVzID0g YmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzIChzLT5iZmQsIHMtPnRoZV9iZmRf c2VjdGlvbiwKLQkJCQkgICAgICAmYnVmLCBhZGRyIC0gcy0+YWRkciwgOCk7 Ci0gICAgICBpZiAocmVzICE9IDApCi0JcmV0dXJuIGV4dHJhY3RfdW5zaWdu ZWRfaW50ZWdlciAoYnVmLCA4LCBieXRlX29yZGVyKQotCQktIGJmZF9zZWN0 aW9uX3ZtYSAocy0+YmZkLCBzLT50aGVfYmZkX3NlY3Rpb24pICsgcy0+YWRk cjsKLSAgIH0KLQotICByZXR1cm4gYWRkcjsKLX0KLQogLyogV3JhcHBlcnMg dG8gaGFuZGxlIExpbnV4LW9ubHkgcmVnaXN0ZXJzLiAgKi8KIAogc3RhdGlj IHZvaWQKQEAgLTE3NDIsNyArMTMzMyw3IEBAIHBwY19saW51eF9pbml0X2Fi aSAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLAogICAgICAgLyogSGFuZGxl IFBQQyBHTlUvTGludXggNjQtYml0IGZ1bmN0aW9uIHBvaW50ZXJzICh3aGlj aCBhcmUgcmVhbGx5CiAJIGZ1bmN0aW9uIGRlc2NyaXB0b3JzKS4gICovCiAg ICAgICBzZXRfZ2RiYXJjaF9jb252ZXJ0X2Zyb21fZnVuY19wdHJfYWRkcgot CShnZGJhcmNoLCBwcGM2NF9saW51eF9jb252ZXJ0X2Zyb21fZnVuY19wdHJf YWRkcik7CisJKGdkYmFyY2gsIHBwYzY0X2NvbnZlcnRfZnJvbV9mdW5jX3B0 cl9hZGRyKTsKIAogICAgICAgLyogU2hhcmVkIGxpYnJhcnkgaGFuZGxpbmcu ICAqLwogICAgICAgc2V0X2dkYmFyY2hfc2tpcF90cmFtcG9saW5lX2NvZGUg KGdkYmFyY2gsIHBwYzY0X3NraXBfdHJhbXBvbGluZV9jb2RlKTsKZGlmZiAt LWdpdCBhL2dkYi9wcGMtdGRlcC5oIGIvZ2RiL3BwYy10ZGVwLmgKaW5kZXgg OWJlOTY2Ni4uYjI2OGU5MCAxMDA2NDQKLS0tIGEvZ2RiL3BwYy10ZGVwLmgK KysrIGIvZ2RiL3BwYy10ZGVwLmgKQEAgLTI5MSw2ICsyOTEsMjMgQEAgZW51 bSB7CiAgIFBQQ19OVU1fUkVHUwogfTsKIAorLyogQW4gaW5zdHJ1Y3Rpb24g dG8gbWF0Y2guICAqLworCitzdHJ1Y3QgcHBjX2luc25fcGF0dGVybgorewor ICB1bnNpZ25lZCBpbnQgbWFzazsgICAgICAgICAgICAvKiBtYXNrIHRoZSBp bnNuIHdpdGggdGhpcy4uLiAgKi8KKyAgdW5zaWduZWQgaW50IGRhdGE7ICAg ICAgICAgICAgLyogLi4uYW5kIHNlZSBpZiBpdCBtYXRjaGVzIHRoaXMuICAq LworICBpbnQgb3B0aW9uYWw7ICAgICAgICAgICAgICAgICAvKiBJZiBub24t emVybywgdGhpcyBpbnNuIG1heSBiZSBhYnNlbnQuICAqLworfTsKKworZXh0 ZXJuIGludAorcHBjX2luc25zX21hdGNoX3BhdHRlcm4gKENPUkVfQUREUiBw Yywgc3RydWN0IHBwY19pbnNuX3BhdHRlcm4gKnBhdHRlcm4sCisJCQkgdW5z aWduZWQgaW50ICppbnNuKTsKK2V4dGVybiBDT1JFX0FERFIKK3BwY19pbnNu X2RfZmllbGQgKHVuc2lnbmVkIGludCBpbnNuKTsKKworZXh0ZXJuIENPUkVf QUREUgorcHBjX2luc25fZHNfZmllbGQgKHVuc2lnbmVkIGludCBpbnNuKTsK IAogLyogSW5zdHJ1Y3Rpb24gc2l6ZS4gICovCiAjZGVmaW5lIFBQQ19JTlNO X1NJWkUgNApkaWZmIC0tZ2l0IGEvZ2RiL3BwYzY0LXRkZXAuYyBiL2dkYi9w cGM2NC10ZGVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uY2RmOGY0ZAotLS0gL2Rldi9udWxsCisrKyBiL2dkYi9wcGM2NC10ZGVw LmMKQEAgLTAsMCArMSwzNjQgQEAKKy8qIENvbW1vbiB0YXJnZXQtZGVwZW5k ZW50IGNvZGUgZm9yIHBwYzY0IEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKwor ICAgQ29weXJpZ2h0IChDKSAyMDEzIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5k YXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgor CisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiZGVm cy5oIgorI2luY2x1ZGUgImZyYW1lLmgiCisjaW5jbHVkZSAiZ2RiY29yZS5o IgorI2luY2x1ZGUgInBwYy10ZGVwLmgiCisjaW5jbHVkZSAicHBjNjQtdGRl cC5oIgorCisvKiBNYWNyb3MgZm9yIG1hdGNoaW5nIGluc3RydWN0aW9ucy4g IE5vdGUgdGhhdCwgc2luY2UgYWxsIHRoZQorICAgb3BlcmFuZHMgYXJlIG1h c2tlZCBvZmYgYmVmb3JlIHRoZXkncmUgb3ItZWQgaW50byB0aGUgaW5zdHJ1 Y3Rpb24sCisgICB5b3UgY2FuIHVzZSAtMSB0byBtYWtlIG1hc2tzLiAgKi8K KworI2RlZmluZSBpbnNuX2Qob3BjZCwgcnRzLCByYSwgZCkgICAgICAgICAg ICAgICAgXAorICAoKCgob3BjZCkgJiAweDNmKSA8PCAyNikgICAgICAgICAg ICAgICAgICAgICAgXAorICAgfCAoKChydHMpICYgMHgxZikgPDwgMjEpICAg ICAgICAgICAgICAgICAgICAgXAorICAgfCAoKChyYSkgJiAweDFmKSA8PCAx NikgICAgICAgICAgICAgICAgICAgICAgXAorICAgfCAoKGQpICYgMHhmZmZm KSkKKworI2RlZmluZSBpbnNuX2RzKG9wY2QsIHJ0cywgcmEsIGQsIHhvKSAg ICAgICAgICAgXAorICAoKCgob3BjZCkgJiAweDNmKSA8PCAyNikgICAgICAg ICAgICAgICAgICAgICAgXAorICAgfCAoKChydHMpICYgMHgxZikgPDwgMjEp ICAgICAgICAgICAgICAgICAgICAgXAorICAgfCAoKChyYSkgJiAweDFmKSA8 PCAxNikgICAgICAgICAgICAgICAgICAgICAgXAorICAgfCAoKGQpICYgMHhm ZmZjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgfCAoKHhv KSAmIDB4MykpCisKKyNkZWZpbmUgaW5zbl94Zngob3BjZCwgcnRzLCBzcHIs IHhvKSAgICAgICAgICAgIFwKKyAgKCgoKG9wY2QpICYgMHgzZikgPDwgMjYp ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHwgKCgocnRzKSAmIDB4MWYp IDw8IDIxKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHwgKCgoc3ByKSAm IDB4MWYpIDw8IDE2KSAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHwgKCgo c3ByKSAmIDB4M2UwKSA8PCA2KSAgICAgICAgICAgICAgICAgICAgIFwKKyAg IHwgKCgoeG8pICYgMHgzZmYpIDw8IDEpKQorCisvKiBJZiBERVNDIGlzIHRo ZSBhZGRyZXNzIG9mIGEgNjQtYml0IFBvd2VyUEMgRnJlZUJTRCBmdW5jdGlv bgorICAgZGVzY3JpcHRvciwgcmV0dXJuIHRoZSBkZXNjcmlwdG9yJ3MgZW50 cnkgcG9pbnQuICAqLworCitzdGF0aWMgQ09SRV9BRERSCitwcGM2NF9kZXNj X2VudHJ5X3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9B RERSIGRlc2MpCit7CisgIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVyID0g Z2RiYXJjaF9ieXRlX29yZGVyIChnZGJhcmNoKTsKKyAgLyogVGhlIGZpcnN0 IHdvcmQgb2YgdGhlIGRlc2NyaXB0b3IgaXMgdGhlIGVudHJ5IHBvaW50LiAg Ki8KKyAgcmV0dXJuIChDT1JFX0FERFIpIHJlYWRfbWVtb3J5X3Vuc2lnbmVk X2ludGVnZXIgKGRlc2MsIDgsIGJ5dGVfb3JkZXIpOworfQorCisvKiBQYXR0 ZXJuIGZvciB0aGUgc3RhbmRhcmQgbGlua2FnZSBmdW5jdGlvbi4gIFRoZXNl IGFyZSBidWlsdCBieQorICAgYnVpbGRfcGx0X3N0dWIgaW4gZWxmNjQtcHBj LmMsIHdob3NlIEdMSU5LIGFyZ3VtZW50IGlzIGFsd2F5cworICAgemVyby4g ICovCisKK3N0YXRpYyBzdHJ1Y3QgcHBjX2luc25fcGF0dGVybiBwcGM2NF9z dGFuZGFyZF9saW5rYWdlMVtdID0KKyAgeworICAgIC8qIGFkZGlzIHIxMiwg cjIsIDxhbnk+ICovCisgICAgeyBpbnNuX2QgKC0xLCAtMSwgLTEsIDApLCBp bnNuX2QgKDE1LCAxMiwgMiwgMCksIDAgfSwKKworICAgIC8qIHN0ZCByMiwg NDAocjEpICovCisgICAgeyAtMSwgaW5zbl9kcyAoNjIsIDIsIDEsIDQwLCAw KSwgMCB9LAorCisgICAgLyogbGQgcjExLCA8YW55PihyMTIpICovCisgICAg eyBpbnNuX2RzICgtMSwgLTEsIC0xLCAwLCAtMSksIGluc25fZHMgKDU4LCAx MSwgMTIsIDAsIDApLCAwIH0sCisKKyAgICAvKiBhZGRpcyByMTIsIHIxMiwg MSA8b3B0aW9uYWw+ICovCisgICAgeyBpbnNuX2QgKC0xLCAtMSwgLTEsIC0x KSwgaW5zbl9kICgxNSwgMTIsIDEyLCAxKSwgMSB9LAorCisgICAgLyogbGQg cjIsIDxhbnk+KHIxMikgKi8KKyAgICB7IGluc25fZHMgKC0xLCAtMSwgLTEs IDAsIC0xKSwgaW5zbl9kcyAoNTgsIDIsIDEyLCAwLCAwKSwgMCB9LAorCisg ICAgLyogYWRkaXMgcjEyLCByMTIsIDEgPG9wdGlvbmFsPiAqLworICAgIHsg aW5zbl9kICgtMSwgLTEsIC0xLCAtMSksIGluc25fZCAoMTUsIDEyLCAxMiwg MSksIDEgfSwKKworICAgIC8qIG10Y3RyIHIxMSAqLworICAgIHsgaW5zbl94 ZnggKC0xLCAtMSwgLTEsIC0xKSwgaW5zbl94ZnggKDMxLCAxMSwgOSwgNDY3 KSwgMCB9LAorCisgICAgLyogbGQgcjExLCA8YW55PihyMTIpIDxvcHRpb25h bD4gKi8KKyAgICB7IGluc25fZHMgKC0xLCAtMSwgLTEsIDAsIC0xKSwgaW5z bl9kcyAoNTgsIDExLCAxMiwgMCwgMCksIDEgfSwKKworICAgIC8qIGJjdHIg Ki8KKyAgICB7IC0xLCAweDRlODAwNDIwLCAwIH0sCisKKyAgICB7IDAsIDAs IDAgfQorICB9OworCisjZGVmaW5lIFBQQzY0X1NUQU5EQVJEX0xJTktBR0Ux X0xFTiBBUlJBWV9TSVpFIChwcGM2NF9zdGFuZGFyZF9saW5rYWdlMSkKKwor c3RhdGljIHN0cnVjdCBwcGNfaW5zbl9wYXR0ZXJuIHBwYzY0X3N0YW5kYXJk X2xpbmthZ2UyW10gPQorICB7CisgICAgLyogYWRkaXMgcjEyLCByMiwgPGFu eT4gKi8KKyAgICB7IGluc25fZCAoLTEsIC0xLCAtMSwgMCksIGluc25fZCAo MTUsIDEyLCAyLCAwKSwgMCB9LAorCisgICAgLyogc3RkIHIyLCA0MChyMSkg Ki8KKyAgICB7IC0xLCBpbnNuX2RzICg2MiwgMiwgMSwgNDAsIDApLCAwIH0s CisKKyAgICAvKiBsZCByMTEsIDxhbnk+KHIxMikgKi8KKyAgICB7IGluc25f ZHMgKC0xLCAtMSwgLTEsIDAsIC0xKSwgaW5zbl9kcyAoNTgsIDExLCAxMiwg MCwgMCksIDAgfSwKKworICAgIC8qIGFkZGkgcjEyLCByMTIsIDxhbnk+IDxv cHRpb25hbD4gKi8KKyAgICB7IGluc25fZCAoLTEsIC0xLCAtMSwgMCksIGlu c25fZCAoMTQsIDEyLCAxMiwgMCksIDEgfSwKKworICAgIC8qIG10Y3RyIHIx MSAqLworICAgIHsgaW5zbl94ZnggKC0xLCAtMSwgLTEsIC0xKSwgaW5zbl94 ZnggKDMxLCAxMSwgOSwgNDY3KSwgMCB9LAorCisgICAgLyogbGQgcjIsIDxh bnk+KHIxMikgKi8KKyAgICB7IGluc25fZHMgKC0xLCAtMSwgLTEsIDAsIC0x KSwgaW5zbl9kcyAoNTgsIDIsIDEyLCAwLCAwKSwgMCB9LAorCisgICAgLyog bGQgcjExLCA8YW55PihyMTIpIDxvcHRpb25hbD4gKi8KKyAgICB7IGluc25f ZHMgKC0xLCAtMSwgLTEsIDAsIC0xKSwgaW5zbl9kcyAoNTgsIDExLCAxMiwg MCwgMCksIDEgfSwKKworICAgIC8qIGJjdHIgKi8KKyAgICB7IC0xLCAweDRl ODAwNDIwLCAwIH0sCisKKyAgICB7IDAsIDAsIDAgfQorICB9OworCisjZGVm aW5lIFBQQzY0X1NUQU5EQVJEX0xJTktBR0UyX0xFTiBBUlJBWV9TSVpFIChw cGM2NF9zdGFuZGFyZF9saW5rYWdlMikKKworc3RhdGljIHN0cnVjdCBwcGNf aW5zbl9wYXR0ZXJuIHBwYzY0X3N0YW5kYXJkX2xpbmthZ2UzW10gPQorICB7 CisgICAgLyogc3RkIHIyLCA0MChyMSkgKi8KKyAgICB7IC0xLCBpbnNuX2Rz ICg2MiwgMiwgMSwgNDAsIDApLCAwIH0sCisKKyAgICAvKiBsZCByMTEsIDxh bnk+KHIyKSAqLworICAgIHsgaW5zbl9kcyAoLTEsIC0xLCAtMSwgMCwgLTEp LCBpbnNuX2RzICg1OCwgMTEsIDIsIDAsIDApLCAwIH0sCisKKyAgICAvKiBh ZGRpIHIyLCByMiwgPGFueT4gPG9wdGlvbmFsPiAqLworICAgIHsgaW5zbl9k ICgtMSwgLTEsIC0xLCAwKSwgaW5zbl9kICgxNCwgMiwgMiwgMCksIDEgfSwK KworICAgIC8qIG10Y3RyIHIxMSAqLworICAgIHsgaW5zbl94ZnggKC0xLCAt MSwgLTEsIC0xKSwgaW5zbl94ZnggKDMxLCAxMSwgOSwgNDY3KSwgMCB9LAor CisgICAgLyogbGQgcjExLCA8YW55PihyMikgPG9wdGlvbmFsPiAqLworICAg IHsgaW5zbl9kcyAoLTEsIC0xLCAtMSwgMCwgLTEpLCBpbnNuX2RzICg1OCwg MTEsIDIsIDAsIDApLCAxIH0sCisKKyAgICAvKiBsZCByMiwgPGFueT4ocjIp ICovCisgICAgeyBpbnNuX2RzICgtMSwgLTEsIC0xLCAwLCAtMSksIGluc25f ZHMgKDU4LCAyLCAyLCAwLCAwKSwgMCB9LAorCisgICAgLyogYmN0ciAqLwor ICAgIHsgLTEsIDB4NGU4MDA0MjAsIDAgfSwKKworICAgIHsgMCwgMCwgMCB9 CisgIH07CisKKyNkZWZpbmUgUFBDNjRfU1RBTkRBUkRfTElOS0FHRTNfTEVO IEFSUkFZX1NJWkUgKHBwYzY0X3N0YW5kYXJkX2xpbmthZ2UzKQorCisvKiBX aGVuIHRoZSBkeW5hbWljIGxpbmtlciBpcyBkb2luZyBsYXp5IHN5bWJvbCBy ZXNvbHV0aW9uLCB0aGUgZmlyc3QKKyAgIGNhbGwgdG8gYSBmdW5jdGlvbiBp biBhbm90aGVyIG9iamVjdCB3aWxsIGdvIGxpa2UgdGhpczoKKworICAgLSBU aGUgdXNlcidzIGZ1bmN0aW9uIGNhbGxzIHRoZSBsaW5rYWdlIGZ1bmN0aW9u OgorCisJIDEwMDAwN2M0Ogk0YiBmZiBmYyBkNQkJYmwJMTAwMDA0OTgKKwkg MTAwMDA3Yzg6CWU4IDQxIDAwIDI4CQlsZAlyMiw0MChyMSkKKworICAgLSBU aGUgbGlua2FnZSBmdW5jdGlvbiBsb2FkcyB0aGUgZW50cnkgcG9pbnQgKGFu ZCBvdGhlciBzdHVmZikgZnJvbQorCSB0aGUgZnVuY3Rpb24gZGVzY3JpcHRv ciBpbiB0aGUgUExULCBhbmQganVtcHMgdG8gaXQ6CisKKwkgMTAwMDA0OTg6 CTNkIDgyIDAwIDAwCQlhZGRpcwlyMTIscjIsMAorCSAxMDAwMDQ5YzoJZjgg NDEgMDAgMjgJCXN0ZAlyMiw0MChyMSkKKwkgMTAwMDA0YTA6CWU5IDZjIDgw IDk4CQlsZAlyMTEsLTMyNjE2KHIxMikKKwkgMTAwMDA0YTQ6CWU4IDRjIDgw IGEwCQlsZAlyMiwtMzI2MDgocjEyKQorCSAxMDAwMDRhODoJN2QgNjkgMDMg YTYJCW10Y3RyCXIxMQorCSAxMDAwMDRhYzoJZTkgNmMgODAgYTgJCWxkCXIx MSwtMzI2MDAocjEyKQorCSAxMDAwMDRiMDoJNGUgODAgMDQgMjAJCWJjdHIK KworICAgLSBCdXQgc2luY2UgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGF0 IFBMVCBlbnRyeSBoYXMgYmVlbiB1c2VkLCBpdAorCSBzZW5kcyBjb250cm9s IHRvIGl0cyBnbGluayBlbnRyeS4gIFRoYXQgbG9hZHMgdGhlIG51bWJlciBv ZiB0aGUKKwkgUExUIGVudHJ5IGFuZCBqdW1wcyB0byB0aGUgY29tbW9uIGds aW5rMCBjb2RlOgorCisJIDEwMDAwYzk4OgkzOCAwMCAwMCAwMAkJbGkJcjAs MAorCSAxMDAwMGM5YzoJNGIgZmYgZmYgZGMJCWIJMTAwMDBjNzgKKworICAg LSBUaGUgY29tbW9uIGdsaW5rMCBjb2RlIHRoZW4gdHJhbnNmZXJzIGNvbnRy b2wgdG8gdGhlIGR5bmFtaWMKKwkgbGlua2VyJ3MgZml4dXAgY29kZToKKwor CSAxMDAwMGM3ODoJZTggNDEgMDAgMjgJCWxkCXIyLDQwKHIxKQorCSAxMDAw MGM3YzoJM2QgODIgMDAgMDAJCWFkZGlzCXIxMixyMiwwCisJIDEwMDAwYzgw OgllOSA2YyA4MCA4MAkJbGQJcjExLC0zMjY0MChyMTIpCisJIDEwMDAwYzg0 OgllOCA0YyA4MCA4OAkJbGQJcjIsLTMyNjMyKHIxMikKKwkgMTAwMDBjODg6 CTdkIDY5IDAzIGE2CQltdGN0cglyMTEKKwkgMTAwMDBjOGM6CWU5IDZjIDgw IDkwCQlsZAlyMTEsLTMyNjI0KHIxMikKKwkgMTAwMDBjOTA6CTRlIDgwIDA0 IDIwCQliY3RyCisKKyAgIEV2ZW50dWFsbHksIHRoaXMgY29kZSB3aWxsIGZp Z3VyZSBvdXQgaG93IHRvIHNraXAgYWxsIG9mIHRoaXMsCisgICBpbmNsdWRp bmcgdGhlIGR5bmFtaWMgbGlua2VyLiAgQXQgdGhlIG1vbWVudCwgd2UganVz dCBnZXQgdGhyb3VnaAorICAgdGhlIGxpbmthZ2UgZnVuY3Rpb24uICAqLwor CisvKiBJZiB0aGUgY3VycmVudCB0aHJlYWQgaXMgYWJvdXQgdG8gZXhlY3V0 ZSBhIHNlcmllcyBvZiBpbnN0cnVjdGlvbnMKKyAgIGF0IFBDIG1hdGNoaW5n IHRoZSBwcGM2NF9zdGFuZGFyZF9saW5rYWdlIHBhdHRlcm4sIGFuZCBJTlNO IGlzIHRoZSByZXN1bHQKKyAgIGZyb20gdGhhdCBwYXR0ZXJuIG1hdGNoLCBy ZXR1cm4gdGhlIGNvZGUgYWRkcmVzcyB0byB3aGljaCB0aGUKKyAgIHN0YW5k YXJkIGxpbmthZ2UgZnVuY3Rpb24gd2lsbCBzZW5kIHRoZW0uICAoVGhpcyBk b2Vzbid0IGRlYWwgd2l0aAorICAgZHluYW1pYyBsaW5rZXIgbGF6eSBzeW1i b2wgcmVzb2x1dGlvbiBzdHVicy4pICAqLworCitzdGF0aWMgQ09SRV9BRERS CitwcGM2NF9zdGFuZGFyZF9saW5rYWdlMV90YXJnZXQgKHN0cnVjdCBmcmFt ZV9pbmZvICpmcmFtZSwKKwkJCQlDT1JFX0FERFIgcGMsIHVuc2lnbmVkIGlu dCAqaW5zbikKK3sKKyAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRf ZnJhbWVfYXJjaCAoZnJhbWUpOworICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0 ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKworICAvKiBUaGUgYWRk cmVzcyBvZiB0aGUgZnVuY3Rpb24gZGVzY3JpcHRvciB0aGlzIGxpbmthZ2Ug ZnVuY3Rpb24KKyAgICAgcmVmZXJlbmNlcy4gICovCisgIENPUkVfQUREUiBk ZXNjCisgICAgPSAoKENPUkVfQUREUikgZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vu c2lnbmVkIChmcmFtZSwKKwkJCQkJCXRkZXAtPnBwY19ncDBfcmVnbnVtICsg MikKKyAgICAgICArIChwcGNfaW5zbl9kX2ZpZWxkIChpbnNuWzBdKSA8PCAx NikKKyAgICAgICArIHBwY19pbnNuX2RzX2ZpZWxkIChpbnNuWzJdKSk7CisK KyAgLyogVGhlIGZpcnN0IHdvcmQgb2YgdGhlIGRlc2NyaXB0b3IgaXMgdGhl IGVudHJ5IHBvaW50LiAgUmV0dXJuIHRoYXQuICAqLworICByZXR1cm4gcHBj NjRfZGVzY19lbnRyeV9wb2ludCAoZ2RiYXJjaCwgZGVzYyk7Cit9CisKK3N0 YXRpYyBDT1JFX0FERFIKK3BwYzY0X3N0YW5kYXJkX2xpbmthZ2UyX3Rhcmdl dCAoc3RydWN0IGZyYW1lX2luZm8gKmZyYW1lLAorCQkJCUNPUkVfQUREUiBw YywgdW5zaWduZWQgaW50ICppbnNuKQoreworICBzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoIChmcmFtZSk7CisgIHN0cnVjdCBn ZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOwor CisgIC8qIFRoZSBhZGRyZXNzIG9mIHRoZSBmdW5jdGlvbiBkZXNjcmlwdG9y IHRoaXMgbGlua2FnZSBmdW5jdGlvbgorICAgICByZWZlcmVuY2VzLiAgKi8K KyAgQ09SRV9BRERSIGRlc2MKKyAgICA9ICgoQ09SRV9BRERSKSBnZXRfZnJh bWVfcmVnaXN0ZXJfdW5zaWduZWQgKGZyYW1lLAorCQkJCQkJdGRlcC0+cHBj X2dwMF9yZWdudW0gKyAyKQorICAgICAgICsgKHBwY19pbnNuX2RfZmllbGQg KGluc25bMF0pIDw8IDE2KQorICAgICAgICsgcHBjX2luc25fZHNfZmllbGQg KGluc25bMl0pKTsKKworICAvKiBUaGUgZmlyc3Qgd29yZCBvZiB0aGUgZGVz Y3JpcHRvciBpcyB0aGUgZW50cnkgcG9pbnQuICBSZXR1cm4gdGhhdC4gICov CisgIHJldHVybiBwcGM2NF9kZXNjX2VudHJ5X3BvaW50IChnZGJhcmNoLCBk ZXNjKTsKK30KKworc3RhdGljIENPUkVfQUREUgorcHBjNjRfc3RhbmRhcmRf bGlua2FnZTNfdGFyZ2V0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsCisJ CQkJQ09SRV9BRERSIHBjLCB1bnNpZ25lZCBpbnQgKmluc24pCit7CisgIHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKGZyYW1l KTsKKyAgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRl cCAoZ2RiYXJjaCk7CisKKyAgLyogVGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0 aW9uIGRlc2NyaXB0b3IgdGhpcyBsaW5rYWdlIGZ1bmN0aW9uCisgICAgIHJl ZmVyZW5jZXMuICAqLworICBDT1JFX0FERFIgZGVzYworICAgID0gKChDT1JF X0FERFIpIGdldF9mcmFtZV9yZWdpc3Rlcl91bnNpZ25lZCAoZnJhbWUsCisJ CQkJCQl0ZGVwLT5wcGNfZ3AwX3JlZ251bSArIDIpCisgICAgICAgKyBwcGNf aW5zbl9kc19maWVsZCAoaW5zblsxXSkpOworCisgIC8qIFRoZSBmaXJzdCB3 b3JkIG9mIHRoZSBkZXNjcmlwdG9yIGlzIHRoZSBlbnRyeSBwb2ludC4gIFJl dHVybiB0aGF0LiAgKi8KKyAgcmV0dXJuIHBwYzY0X2Rlc2NfZW50cnlfcG9p bnQgKGdkYmFyY2gsIGRlc2MpOworfQorCisKKy8qIEdpdmVuIHRoYXQgd2Un dmUgYmVndW4gZXhlY3V0aW5nIGEgY2FsbCB0cmFtcG9saW5lIGF0IFBDLCBy ZXR1cm4KKyAgIHRoZSBlbnRyeSBwb2ludCBvZiB0aGUgZnVuY3Rpb24gdGhl IHRyYW1wb2xpbmUgd2lsbCBnbyB0by4gICovCisKK0NPUkVfQUREUgorcHBj NjRfc2tpcF90cmFtcG9saW5lX2NvZGUgKHN0cnVjdCBmcmFtZV9pbmZvICpm cmFtZSwgQ09SRV9BRERSIHBjKQoreworICB1bnNpZ25lZCBpbnQgcHBjNjRf c3RhbmRhcmRfbGlua2FnZTFfaW5zbltQUEM2NF9TVEFOREFSRF9MSU5LQUdF MV9MRU5dOworICB1bnNpZ25lZCBpbnQgcHBjNjRfc3RhbmRhcmRfbGlua2Fn ZTJfaW5zbltQUEM2NF9TVEFOREFSRF9MSU5LQUdFMl9MRU5dOworICB1bnNp Z25lZCBpbnQgcHBjNjRfc3RhbmRhcmRfbGlua2FnZTNfaW5zbltQUEM2NF9T VEFOREFSRF9MSU5LQUdFM19MRU5dOworICBDT1JFX0FERFIgdGFyZ2V0Owor CisgIGlmIChwcGNfaW5zbnNfbWF0Y2hfcGF0dGVybiAocGMsIHBwYzY0X3N0 YW5kYXJkX2xpbmthZ2UxLAorCQkJICAgICAgIHBwYzY0X3N0YW5kYXJkX2xp bmthZ2UxX2luc24pKQorICAgIHBjID0gcHBjNjRfc3RhbmRhcmRfbGlua2Fn ZTFfdGFyZ2V0IChmcmFtZSwgcGMsCisJCQkJCSBwcGM2NF9zdGFuZGFyZF9s aW5rYWdlMV9pbnNuKTsKKyAgZWxzZSBpZiAocHBjX2luc25zX21hdGNoX3Bh dHRlcm4gKHBjLCBwcGM2NF9zdGFuZGFyZF9saW5rYWdlMiwKKwkJCQkgICAg cHBjNjRfc3RhbmRhcmRfbGlua2FnZTJfaW5zbikpCisgICAgcGMgPSBwcGM2 NF9zdGFuZGFyZF9saW5rYWdlMl90YXJnZXQgKGZyYW1lLCBwYywKKwkJCQkJ IHBwYzY0X3N0YW5kYXJkX2xpbmthZ2UyX2luc24pOworICBlbHNlIGlmIChw cGNfaW5zbnNfbWF0Y2hfcGF0dGVybiAocGMsIHBwYzY0X3N0YW5kYXJkX2xp bmthZ2UzLAorCQkJCSAgICBwcGM2NF9zdGFuZGFyZF9saW5rYWdlM19pbnNu KSkKKyAgICBwYyA9IHBwYzY0X3N0YW5kYXJkX2xpbmthZ2UzX3RhcmdldCAo ZnJhbWUsIHBjLAorCQkJCQkgcHBjNjRfc3RhbmRhcmRfbGlua2FnZTNfaW5z bik7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKKworICAvKiBUaGUgUExUIGRl c2NyaXB0b3Igd2lsbCBlaXRoZXIgcG9pbnQgdG8gdGhlIGFscmVhZHkgcmVz b2x2ZWQgdGFyZ2V0CisgICAgIGFkZHJlc3MsIG9yIGVsc2UgdG8gYSBnbGlu ayBzdHViLiAgQXMgdGhlIGxhdHRlciBjYXJyeSBzeW50aGV0aWMgQHBsdAor ICAgICBzeW1ib2xzLCBmaW5kX3NvbGliX3RyYW1wb2xpbmVfdGFyZ2V0IHNo b3VsZCBiZSBhYmxlIHRvIHJlc29sdmUgdGhlbS4gICovCisgIHRhcmdldCA9 IGZpbmRfc29saWJfdHJhbXBvbGluZV90YXJnZXQgKGZyYW1lLCBwYyk7Cisg IHJldHVybiB0YXJnZXQgPyB0YXJnZXQgOiBwYzsKK30KKworLyogU3VwcG9y dCBmb3IgY29udmVydF9mcm9tX2Z1bmNfcHRyX2FkZHIgKEFSQ0gsIEFERFIs IFRBUkcpIG9uIFBQQzY0CisgICBHTlUvTGludXguCisKKyAgIFVzdWFsbHkg YSBmdW5jdGlvbiBwb2ludGVyJ3MgcmVwcmVzZW50YXRpb24gaXMgc2ltcGx5 IHRoZSBhZGRyZXNzCisgICBvZiB0aGUgZnVuY3Rpb24uICBPbiBHTlUvTGlu dXggb24gdGhlIFBvd2VyUEMgaG93ZXZlciwgYSBmdW5jdGlvbgorICAgcG9p bnRlciBtYXkgYmUgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gZGVzY3JpcHRv ci4KKworICAgRm9yIFBQQzY0LCBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IgaXMg YSBUT0MgZW50cnksIGluIGEgZGF0YSBzZWN0aW9uLAorICAgd2hpY2ggY29u dGFpbnMgdGhyZWUgd29yZHM6IHRoZSBmaXJzdCB3b3JkIGlzIHRoZSBhZGRy ZXNzIG9mIHRoZQorICAgZnVuY3Rpb24sIHRoZSBzZWNvbmQgd29yZCBpcyB0 aGUgVE9DIHBvaW50ZXIgKHIyKSwgYW5kIHRoZSB0aGlyZCB3b3JkCisgICBp cyB0aGUgc3RhdGljIGNoYWluIHZhbHVlLgorCisgICBUaHJvdWdob3V0IEdE QiBpdCBpcyBjdXJyZW50bHkgYXNzdW1lZCB0aGF0IGEgZnVuY3Rpb24gcG9p bnRlciBjb250YWlucworICAgdGhlIGFkZHJlc3Mgb2YgdGhlIGZ1bmN0aW9u LCB3aGljaCBpcyBub3QgZWFzeSB0byBmaXguICBJbiBhZGRpdGlvbiwgdGhl CisgICBjb252ZXJzaW9uIG9mIGEgZnVuY3Rpb24gYWRkcmVzcyB0byBhIGZ1 bmN0aW9uIHBvaW50ZXIgd291bGQKKyAgIHJlcXVpcmUgYWxsb2NhdGlvbiBv ZiBhIFRPQyBlbnRyeSBpbiB0aGUgaW5mZXJpb3IncyBtZW1vcnkgc3BhY2Us CisgICB3aXRoIGFsbCBpdHMgZHJhd2JhY2tzLiAgVG8gYmUgYWJsZSB0byBj YWxsIEMrKyB2aXJ0dWFsIG1ldGhvZHMgaW4KKyAgIHRoZSBpbmZlcmlvciAo d2hpY2ggYXJlIGNhbGxlZCB2aWEgZnVuY3Rpb24gcG9pbnRlcnMpLAorICAg ZmluZF9mdW5jdGlvbl9hZGRyIHVzZXMgdGhpcyBmdW5jdGlvbiB0byBnZXQg dGhlIGZ1bmN0aW9uIGFkZHJlc3MKKyAgIGZyb20gYSBmdW5jdGlvbiBwb2lu dGVyLgorCisgICBJZiBBRERSIHBvaW50cyBhdCB3aGF0IGlzIGNsZWFybHkg YSBmdW5jdGlvbiBkZXNjcmlwdG9yLCB0cmFuc2Zvcm0KKyAgIGl0IGludG8g dGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24sIGlm IG5lZWRlZC4gIEJlCisgICBjb25zZXJ2YXRpdmUsIG90aGVyd2lzZSBHREIg d2lsbCBkbyB0aGUgdHJhbnNmb3JtYXRpb24gb24gYW55CisgICByYW5kb20g YWRkcmVzc2VzIHN1Y2ggYXMgb2NjdXIgd2hlbiB0aGVyZSBpcyBubyBzeW1i b2wgdGFibGUuICAqLworCitDT1JFX0FERFIKK3BwYzY0X2NvbnZlcnRfZnJv bV9mdW5jX3B0cl9hZGRyIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKKwkJ CQkJQ09SRV9BRERSIGFkZHIsCisJCQkJCXN0cnVjdCB0YXJnZXRfb3BzICp0 YXJnKQoreworICBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFy Y2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCk7CisgIHN0cnVjdCB0YXJnZXRfc2Vj dGlvbiAqcyA9IHRhcmdldF9zZWN0aW9uX2J5X2FkZHIgKHRhcmcsIGFkZHIp OworCisgIC8qIENoZWNrIGlmIEFERFIgcG9pbnRzIHRvIGEgZnVuY3Rpb24g ZGVzY3JpcHRvci4gICovCisgIGlmIChzICYmIHN0cmNtcCAocy0+dGhlX2Jm ZF9zZWN0aW9uLT5uYW1lLCAiLm9wZCIpID09IDApCisgICAgeworICAgICAg LyogVGhlcmUgbWF5IGJlIHJlbG9jYXRpb25zIHRoYXQgbmVlZCB0byBiZSBh cHBsaWVkIHRvIHRoZSAub3BkIAorCSBzZWN0aW9uLiAgVW5mb3J0dW5hdGVs eSwgdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGF0IGEgdGltZQorCSB3 aGVyZSB0aGVzZSByZWxvY2F0aW9ucyBoYXZlIG5vdCB5ZXQgYmVlbiBwZXJm b3JtZWQgLS0gdGhpcyBjYW4KKwkgaGFwcGVuIGZvciBleGFtcGxlIHNob3J0 bHkgYWZ0ZXIgYSBsaWJyYXJ5IGhhcyBiZWVuIGxvYWRlZCB3aXRoCisJIGRs b3BlbiwgYnV0IGxkLnNvIGhhcyBub3QgeWV0IGFwcGxpZWQgdGhlIHJlbG9j YXRpb25zLgorCisJIFRvIGNvcGUgd2l0aCBib3RoIHRoZSBjYXNlIHdoZXJl IHRoZSByZWxvY2F0aW9uIGhhcyBiZWVuIGFwcGxpZWQsCisJIGFuZCB0aGUg Y2FzZSB3aGVyZSBpdCBoYXMgbm90IHlldCBiZWVuIGFwcGxpZWQsIHdlIGRv ICpub3QqIHJlYWQKKwkgdGhlIChtYXliZSkgcmVsb2NhdGVkIHZhbHVlIGZy b20gdGFyZ2V0IG1lbW9yeSwgYnV0IHdlIGluc3RlYWQKKwkgcmVhZCB0aGUg bm9uLXJlbG9jYXRlZCB2YWx1ZSBmcm9tIHRoZSBCRkQsIGFuZCBhcHBseSB0 aGUgcmVsb2NhdGlvbgorCSBvZmZzZXQgbWFudWFsbHkuCisKKwkgVGhpcyBt YWtlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IGFsbCAub3BkIGVudHJpZXMgYXJl IGFsd2F5cyByZWxvY2F0ZWQKKwkgYnkgdGhlIHNhbWUgb2Zmc2V0IHRoZSBz ZWN0aW9uIGl0c2VsZiB3YXMgcmVsb2NhdGVkLiAgVGhpcyBzaG91bGQKKwkg YWx3YXlzIGJlIHRoZSBjYXNlIGZvciBHTlUvTGludXggZXhlY3V0YWJsZXMg YW5kIHNoYXJlZCBsaWJyYXJpZXMuCisJIE5vdGUgdGhhdCBvdGhlciBraW5k IG9mIG9iamVjdCBmaWxlcyAoZS5nLiB0aG9zZSBhZGRlZCB2aWEKKwkgYWRk LXN5bWJvbC1maWxlcykgd2lsbCBjdXJyZW50bHkgbmV2ZXIgZW5kIHVwIGhl cmUgYW55d2F5LCBhcyB0aGlzCisJIGZ1bmN0aW9uIGFjY2Vzc2VzICp0YXJn ZXQqIHNlY3Rpb25zIG9ubHk7IG9ubHkgdGhlIG1haW4gZXhlYyBhbmQKKwkg c2hhcmVkIGxpYnJhcmllcyBhcmUgZXZlciBhZGRlZCB0byB0aGUgdGFyZ2V0 LiAgKi8KKworICAgICAgZ2RiX2J5dGUgYnVmWzhdOworICAgICAgaW50IHJl czsKKworICAgICAgcmVzID0gYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzIChz LT5iZmQsIHMtPnRoZV9iZmRfc2VjdGlvbiwKKwkJCQkgICAgICAmYnVmLCBh ZGRyIC0gcy0+YWRkciwgOCk7CisgICAgICBpZiAocmVzICE9IDApCisJcmV0 dXJuIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYnVmLCA4LCBieXRlX29y ZGVyKQorCQktIGJmZF9zZWN0aW9uX3ZtYSAocy0+YmZkLCBzLT50aGVfYmZk X3NlY3Rpb24pICsgcy0+YWRkcjsKKyAgIH0KKworICByZXR1cm4gYWRkcjsK K30KZGlmZiAtLWdpdCBhL2dkYi9wcGM2NC10ZGVwLmggYi9nZGIvcHBjNjQt dGRlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZm ZWZkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9nZGIvcHBjNjQtdGRlcC5oCkBA IC0wLDAgKzEsMzUgQEAKKy8qIENvbW1vbiB0YXJnZXQtZGVwZW5kZW50IGNv ZGUgZm9yIHBwYzY0LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMTMKKyAgIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUg aXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKyNpZm5kZWYgUFBDNjRfVERFUF9ICisjZGVmaW5lIFBQQzY0X1RERVBf SAorCitzdHJ1Y3QgZ2RiYXJjaDsKK3N0cnVjdCBmcmFtZV9pbmZvOworc3Ry dWN0IHRhcmdldF9vcHM7CisKK2V4dGVybiBDT1JFX0FERFIKK3BwYzY0X3Nr aXBfdHJhbXBvbGluZV9jb2RlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUs IENPUkVfQUREUiBwYyk7CisKK2V4dGVybiBDT1JFX0FERFIKK3BwYzY0X2Nv bnZlcnRfZnJvbV9mdW5jX3B0cl9hZGRyIChzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCwKKwkJCQkgIENPUkVfQUREUiBhZGRyLCBzdHJ1Y3QgdGFyZ2V0X29w cyAqdGFyZyk7CisKKyNlbmRpZiAvKiBQUEM2NF9UREVQX0ggICovCmRpZmYg LS1naXQgYS9nZGIvcnM2MDAwLXRkZXAuYyBiL2dkYi9yczYwMDAtdGRlcC5j CmluZGV4IGExNWY3NTcuLjViYzExMDUgMTAwNjQ0Ci0tLSBhL2dkYi9yczYw MDAtdGRlcC5jCisrKyBiL2dkYi9yczYwMDAtdGRlcC5jCkBAIC00MjM4LDYg KzQyMzgsNjggQEAgc2hvd19wb3dlcnBjX2V4YWN0X3dhdGNocG9pbnRzIChz dHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAogICBmcHJpbnRm X2ZpbHRlcmVkIChmaWxlLCBfKCJVc2Ugb2YgZXhhY3Qgd2F0Y2hwb2ludHMg aXMgJXMuXG4iKSwgdmFsdWUpOwogfQogCisvKiBSZWFkIGEgUFBDIGluc3Ry dWN0aW9uIGZyb20gbWVtb3J5LiAgUFBDIGluc3RydWN0aW9ucyBhcmUgYWx3 YXlzCisgICBiaWctZW5kaWFuLCBubyBtYXR0ZXIgd2hhdCBlbmRpYW5uZXNz IHRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcgaW4sIHNvCisgICB3ZSBjYW4gaGFy ZGNvZGUgQkZEX0VORElBTl9CSUcgZm9yIHJlYWRfbWVtb3J5X3Vuc2lnbmVk X2ludGVnZXIuICAqLworCitzdGF0aWMgdW5zaWduZWQgaW50CityZWFkX2lu c24gKENPUkVfQUREUiBwYykKK3sKKyAgcmV0dXJuIHJlYWRfbWVtb3J5X3Vu c2lnbmVkX2ludGVnZXIgKHBjLCA0LCBCRkRfRU5ESUFOX0JJRyk7Cit9CisK Ky8qIFJldHVybiBub24temVybyBpZiB0aGUgaW5zdHJ1Y3Rpb25zIGF0IFBD IG1hdGNoIHRoZSBzZXJpZXMKKyAgIGRlc2NyaWJlZCBpbiBQQVRURVJOLCBv ciB6ZXJvIG90aGVyd2lzZS4gIFBBVFRFUk4gaXMgYW4gYXJyYXkgb2YKKyAg ICdzdHJ1Y3QgcHBjX2luc25fcGF0dGVybicgb2JqZWN0cywgdGVybWluYXRl ZCBieSBhbiBlbnRyeSB3aG9zZQorICAgbWFzayBpcyB6ZXJvLgorCisgICBX aGVuIHRoZSBtYXRjaCBpcyBzdWNjZXNzZnVsLCBmaWxsIElOU05baV0gd2l0 aCB3aGF0IFBBVFRFUk5baV0KKyAgIG1hdGNoZWQuICBJZiBQQVRURVJOW2ld IGlzIG9wdGlvbmFsLCBhbmQgdGhlIGluc3RydWN0aW9uIHdhc24ndAorICAg cHJlc2VudCwgc2V0IElOU05baV0gdG8gMCAod2hpY2ggaXMgbm90IGEgdmFs aWQgUFBDIGluc3RydWN0aW9uKS4KKyAgIElOU04gc2hvdWxkIGhhdmUgYXMg bWFueSBlbGVtZW50cyBhcyBQQVRURVJOLiAgTm90ZSB0aGF0LCBpZgorICAg UEFUVEVSTiBjb250YWlucyBvcHRpb25hbCBpbnN0cnVjdGlvbnMgd2hpY2gg YXJlbid0IHByZXNlbnQgaW4KKyAgIG1lbW9yeSwgdGhlbiBJTlNOIHdpbGwg aGF2ZSBob2xlcywgc28gSU5TTltpXSBpc24ndCBuZWNlc3NhcmlseSB0aGUK KyAgIGkndGggaW5zdHJ1Y3Rpb24gaW4gbWVtb3J5LiAgKi8KKworaW50Citw cGNfaW5zbnNfbWF0Y2hfcGF0dGVybiAoQ09SRV9BRERSIHBjLCBzdHJ1Y3Qg cHBjX2luc25fcGF0dGVybiAqcGF0dGVybiwKKwkJCSB1bnNpZ25lZCBpbnQg Kmluc24pCit7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IHBhdHRlcm5b aV0ubWFzazsgaSsrKQorICAgIHsKKyAgICAgIGluc25baV0gPSByZWFkX2lu c24gKHBjKTsKKyAgICAgIGlmICgoaW5zbltpXSAmIHBhdHRlcm5baV0ubWFz aykgPT0gcGF0dGVybltpXS5kYXRhKQorCXBjICs9IDQ7CisgICAgICBlbHNl IGlmIChwYXR0ZXJuW2ldLm9wdGlvbmFsKQorCWluc25baV0gPSAwOworICAg ICAgZWxzZQorCXJldHVybiAwOworICAgIH0KKworICByZXR1cm4gMTsKK30K KworLyogUmV0dXJuIHRoZSAnZCcgZmllbGQgb2YgdGhlIGQtZm9ybSBpbnN0 cnVjdGlvbiBJTlNOLCBwcm9wZXJseQorICAgc2lnbi1leHRlbmRlZC4gICov CisKK0NPUkVfQUREUgorcHBjX2luc25fZF9maWVsZCAodW5zaWduZWQgaW50 IGluc24pCit7CisgIHJldHVybiAoKCgoQ09SRV9BRERSKSBpbnNuICYgMHhm ZmZmKSBeIDB4ODAwMCkgLSAweDgwMDApOworfQorCisvKiBSZXR1cm4gdGhl ICdkcycgZmllbGQgb2YgdGhlIGRzLWZvcm0gaW5zdHJ1Y3Rpb24gSU5TTiwg d2l0aCB0aGUgdHdvCisgICB6ZXJvIGJpdHMgY29uY2F0ZW5hdGVkIGF0IHRo ZSByaWdodCwgYW5kIHByb3Blcmx5CisgICBzaWduLWV4dGVuZGVkLiAgKi8K KworQ09SRV9BRERSCitwcGNfaW5zbl9kc19maWVsZCAodW5zaWduZWQgaW50 IGluc24pCit7CisgIHJldHVybiAoKCgoQ09SRV9BRERSKSBpbnNuICYgMHhm ZmZjKSBeIDB4ODAwMCkgLSAweDgwMDApOworfQorCiAvKiBJbml0aWFsaXph dGlvbiBjb2RlLiAgKi8KIAogLyogLVdtaXNzaW5nLXByb3RvdHlwZXMgKi8K --------------010809050104090101070604--