From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27380 invoked by alias); 24 Jul 2009 16:47:33 -0000 Received: (qmail 27350 invoked by uid 22791); 24 Jul 2009 16:47:28 -0000 X-SWARE-Spam-Status: No, hits=0.7 required=5.0 tests=AWL,BAYES_50,HK_OBFDOM,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-fx0-f210.google.com (HELO mail-fx0-f210.google.com) (209.85.220.210) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 24 Jul 2009 16:47:16 +0000 Received: by fxm6 with SMTP id 6so1516872fxm.24 for ; Fri, 24 Jul 2009 09:47:12 -0700 (PDT) MIME-Version: 1.0 Received: by 10.239.169.2 with SMTP id m2mr356700hbe.134.1248454032147; Fri, 24 Jul 2009 09:47:12 -0700 (PDT) In-Reply-To: References: <9a9942200907221615o570e749fh5cb186c1600f159c@mail.gmail.com> From: Reid Kleckner Date: Fri, 24 Jul 2009 16:55:00 -0000 Message-ID: <9a9942200907240946q1546646ft6e9112f263bcefdf@mail.gmail.com> Subject: Re: [RFA] Add interface for registering JITed code To: tromey@redhat.com Cc: gdb-patches@sourceware.org, unladen-swallow@googlegroups.com Content-Type: multipart/mixed; boundary=00163646bcb21ac646046f765b2d Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00599.txt.bz2 --00163646bcb21ac646046f765b2d Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 7381 Here's an updated patch. I still need to write the manual documentation and switch to the iovec, though. I wrote this message and the patch yesterday before Ulrich's message arrived. On Thu, Jul 23, 2009 at 10:42 AM, Tom Tromey wrote: >>>>>> "Reid" =3D=3D Reid Kleckner writes: > > Reid> So that means we need LLVM to generate dwarf debug info, and we > Reid> need to register it with GDB. > > Nice. > > Your overall approach seems good to me. Glad to hear I'm on the right track. > [...] > > Reid> If LLVM frees machine code, then it sets the action enum in the > Reid> descriptor to JIT_UNREGISTER, points the descriptor at the relevant > Reid> code entry, and calls __jit_debug_register_code again. > > Given that this will be a supported way for GDB to connect to JITs, I > think that the official interface (symbol names, types, enum values, > etc) should be documented in the GDB manual somewhere. Where should this go? It doesn't really fit under any of the top-level topics, so far as I can tell. I only have about a page to write about it. > I wonder what happens if the ELF data in the inferior is corrupted. > Perhaps there should be a way to disable the feature. =A0What do you > think? > > This patch also deserves an entry in NEWS. Done. > I have a few comments on the details of the patch itself. > > Reid> +struct breakpoint * > Reid> +create_jit_event_breakpoint (CORE_ADDR address) > Reid> +{ > Reid> + =A0struct breakpoint *b; > Reid> + > Reid> + =A0b =3D create_internal_breakpoint (address, bp_jit_event); > Reid> + =A0update_global_location_list_nothrow (1); > Reid> + =A0return b; > Reid> +} > > I am not sure but I suspect this should be called from > breakpoint_re_set -- that is, follow the longjmp model a bit more. > > Does the current code work ok if LLVM is a .so linked into the > application? =A0I suspect, but do not know for sure, that in this > situation gdb will not see the JIT symbols when the inferior-created > hook is run.q I don't know, since we statically link to LLVM. I'm not an expert in how dynamic loaders work, so I don't know how to fix this. > There is also the somewhat more pathological case of a program with > multiple JITs linked in. =A0I'm on the fence about whether this is really > needed. How would this work? Would they both have separate functions __jit_debug_register at different addresses? One way to solve both of these problems might be to create a single libgdbjitagent library similar to oprofile's agent library. That way we have some control over both the inferior side and the GDB side. > Reid> +/* This is a linked list mapping code entry addresses to objfiles.= =A0*/ > Reid> +static struct jit_obj_link *jit_objfiles =3D NULL; > > You can store arbitrary module-specific data in an objfile using the > objfile_data API. =A0This would be better because it is an already > supported way of dealing with the lifetime of the associated data. > > This would mean getting rid of the linked list here and just looping > over objfiles when needed. Ah, that's much better. Unfortunately because the data for other objfiles is uninitialized (it's returned from calloc), there's no way for me to check which objfiles contain JITed code. Do I actually need to have this inferior_exit hook? I just noticed that when I kill and restart the inferior it doesn't seem to free these objfiles, so I added the hook. > Reid> + =A0 =A0 =A0error (_("Unable to read JIT descriptor from remote me= mory!\n")); > > Don't use \n at the end of error text. =A0(There is code in gdb that does > this but I think the rule is not to.) Done. > Reid> + =A0descriptor->version =3D extract_unsigned_integer (&desc_buf[0]= , 4); > > You'll need to update to head ... a few of these functions have an extra > argument now. > > I am not sure if using target_gdbarch is ok -- maybe passing the arch to > jit_read_descriptor as an argument would be better. =A0Maybe Ulrich could > weigh in here. I'll use target_gdbarch until anyone else says otherwise. > Reid> + =A0descriptor->first_entry =3D extract_typed_address > Reid> + =A0 =A0 =A0(&desc_buf[8 + ptr_size], ptr_type); > > A formatting nit ... I think it is more typical to split before the '=3D' > than before the '('. Done. > Reid> +static void > Reid> +jit_register_code (CORE_ADDR entry_addr, struct jit_code_entry *co= de_entry) > [...] > Reid> + =A0 =A0 =A0free (buffer); > > xfree, but... Switched to xfree. > Reid> + =A0objfile =3D symbol_file_add_from_local_memory (templ, buffer, = size); > Reid> + =A0if (objfile =3D=3D NULL) > Reid> + =A0 =A0free (buffer); > > symbol_file_add_from_local_memory can call error, so you need a cleanup > here rather than explicit calls to free. I took a shot at putting cleanups in, but I'm not sure I did it correctly. In particular, I'm not sure about the discard_cleanups logic. > Reid> + =A0if (reg_addr =3D=3D (CORE_ADDR)NULL) > Reid> + =A0 =A0return; > > Just write `0' instead of `(CORE_ADDR)NULL'. =A0There are 2 instances of > this. Done. > Reid> + =A0if (err) return; > > Newline before the return. =A0There are a few of these. Done. > Reid> + =A0/* Check that the version number agrees with that we support. = =A0*/ > Reid> + =A0if (descriptor.version !=3D 1) > Reid> + =A0 =A0{ > Reid> + =A0 =A0 =A0error (_("Unsupported JIT protocol version in descript= or!\n")); > Reid> + =A0 =A0 =A0return; > > error calls longjmp, so the return is redundant. =A0There are a couple of > these in the patch. Done. I made some functions just return void instead of error codes and also call error. > Reid> +/* When the JIT breakpoint fires, the inferior wants us to take on= e of these > Reid> + =A0 actions. =A0*/ > Reid> + > Reid> +typedef enum > Reid> +{ > Reid> + =A0JIT_NOACTION =3D 0, > Reid> + =A0JIT_REGISTER, > Reid> + =A0JIT_UNREGISTER > Reid> +} jit_actions_t; > > Please update the comment here to explain that these values are exported > and used by the inferior, so they cannot be changed. Done. The same is true about the rest of the structs, the ordering of the fields cannot be changed without updating the protocol version. > Reid> + =A0 =A0 =A0/* Hack to work around the fact that BFD does not take= ownership of the > Reid> + =A0 =A0 =A0 =A0 memory for files allocated in memory. =A0*/ > > Is it possible to fix this directly in BFD? =A0Since... > > Reid> + =A0 =A0 =A0 =A0bim =3D (struct bfd_in_memory *) objfile->obfd->io= stream; > > ... this is definitely fishy :-) I talked to Doug Evans about it, and he said he'd look into getting a patch into BFD. The basic problem is that BFD doesn't take ownership of any memory buffers that you give it. If you look in bfd_close, it does a check for flags & BFD_IN_MEMORY and calls iovec->bclose for BFD's that aren't in memory. It doesn't do anything with iostream (bim) or bim->buffer. Other BFD clients may rely on this or also have workarounds, so that will need to be sorted out before we can just go ahead and free it on the BFD side. > Reid> +struct objfile * > Reid> +symbol_file_add_from_local_memory (struct bfd *templ, bfd_byte *bu= ffer, > Reid> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 bfd_size_type size) > Reid> +{ > [...] > Reid> + =A0filename =3D xstrdup (""); > > Because this function can call error, you need a cleanup here. Done. Reid --00163646bcb21ac646046f765b2d Content-Type: text/plain; charset=US-ASCII; name="jit-patch.txt" Content-Disposition: attachment; filename="jit-patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fxi2gltq0 Content-length: 44197 MjAwOS0wNy0yNCAgUmVpZCBLbGVja25lciAgPHJlaWRAa2xlY2tuZXIubmV0 PgoKCUFkZCBpbnRlcmZhY2UgZm9yIEpJVCBjb2RlIGdlbmVyYXRpb24uCgkq IE5FV1M6IEFubm91bmNlIEpJVCBpbnRlcmZhY2UuCgkqIE1ha2VmaWxlLmlu IChTRklMRVMpOiBBZGQgaml0LmMuCgkoSEZJTEVTX05PX1NSQ0RJUik6IEFk ZCBqaXQuaC4KCShDT01NT05fT0JTKTogQWRkIGppdC5vLgoJKiBqaXQuYzog TmV3IGZpbGUuCgkqIGppdC5oOiBOZXcgZmlsZS4KCSogYnJlYWtwb2ludC5o OgoJKGVudW0gYnB0eXBlKTogQWRkIGJwX2ppdF9ldmVudCB0byBlbnVtLgoJ KiBicmVha3BvaW50LmM6CgkoYnBzdGF0X3doYXQpOiBVcGRhdGUgZXZlbnQg dGFibGUgZm9yIGJwX2ppdF9ldmVudC4KCShwcmludF9pdF90eXBpY2FsKTog QWRkZWQgY2FzZSBmb3IgYnBfaml0X2V2ZW50LgoJKHByaW50X29uZV9icmVh a3BvaW50X2xvY2F0aW9uKTogQWRkZWQgY2FzZSBmb3IgYnBfaml0X2V2ZW50 LgoJKG1lbnRpb24pOiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZlbnQuCgko ZGVsZXRlX2NvbW1hbmQpOiBBZGRlZCBjYXNlIGZvciBicF9qaXRfZXZlbnQu CgkoYnJlYWtwb2ludF9yZV9zZXRfb25lKTogQWRkZWQgY2FzZSBmb3IgYnBf aml0X2V2ZW50LgoJKGNyZWF0ZV9qaXRfZXZlbnRfYnJlYWtwb2ludCk6IE5l dy4KCSogaW5mcnVuLmMgKGhhbmRsZV9pbmZlcmlvcl9ldmVudCk6IEFkZCBo YW5kbGVyIGZvciBqaXQgZXZlbnQuCgkqIHN5bWZpbGUuaDoKCShzeW1ib2xf ZmlsZV9hZGRfZnJvbV9sb2NhbF9tZW1vcnkpOiBOZXcuCgkoc3ltYm9sX2Zp bGVfYWRkX2Zyb21fbWVtb3J5KTogQWRkZWQgZGVjbGFyYXRpb24uCgkoc3lt Ym9sX2ZpbGVfZ3Vlc3NfdGVtcGxhdGUpOiBOZXcuCgkqIHN5bWZpbGUtbWVt LmM6CgkoYmZkX29wZW5fZnJvbV9tZW1vcnkpOiBOZXcuCgkoc3ltYm9sX2Zp bGVfYWRkX2Zyb21fbG9jYWxfbWVtb3J5KTogTmV3LgoJKHN5bWJvbF9maWxl X2FkZF9mcm9tX21lbW9yeSk6IE1vZGlmaWVkIHRvIHVzZSBuZXcgY29tbW9u IGNvZGUuCgkoc3ltYm9sX2ZpbGVfYWRkX2Zyb21fbWVtb3J5X2NvbW1vbik6 IE5ldy4KCShzeW1ib2xfZmlsZV9ndWVzc190ZW1wbGF0ZSk6IE5ldy4KCSog b2JqZmlsZXMuYyAoZnJlZV9vYmpmaWxlKTogRml4ZWQgYSBtZW1vcnkgbGVh ay4KCkluZGV4OiBnZGIvTWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9NYWtlZmlsZS5pbix2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDkxCmRpZmYgLXUgLXAgLXUgLXIx LjEwOTEgTWFrZWZpbGUuaW4KLS0tIGdkYi9NYWtlZmlsZS5pbgkzIEp1bCAy MDA5IDEyOjA2OjM1IC0wMDAwCTEuMTA5MQorKysgZ2RiL01ha2VmaWxlLmlu CTI0IEp1bCAyMDA5IDE2OjQ1OjA2IC0wMDAwCkBAIC02NzcsNyArNjc3LDgg QEAgU0ZJTEVTID0gYWRhLWV4cC55IGFkYS1sYW5nLmMgYWRhLXR5cGVwcgog CXdyYXBwZXIuYyBcCiAJeG1sLXRkZXNjLmMgeG1sLXN1cHBvcnQuYyBcCiAJ aW5mZXJpb3IuYyBnZGJfdXNsZWVwLmMgXAotCXJlY29yZC5jCisJcmVjb3Jk LmMgXAorCWppdC5jCiAKIExJTlRGSUxFUyA9ICQoU0ZJTEVTKSAkKFlZRklM RVMpICQoQ09ORklHX1NSQ1MpIGluaXQuYwogCkBAIC03NDYsNyArNzQ3LDcg QEAgY29uZmlnL3JzNjAwMC9ubS1yczYwMDAuaCB0b3AuaCBic2Qta3ZtLgog YW5ub3RhdGUuaCBzaW0tcmVnbm8uaCBkaWN0aW9uYXJ5LmggZGZwLmggbWFp bi5oIGZyYW1lLXVud2luZC5oCVwKIHJlbW90ZS1maWxlaW8uaCBpMzg2LWxp bnV4LXRkZXAuaCB2YXgtdGRlcC5oIG9iamMtbGFuZy5oIFwKIHNlbnRpbmVs LWZyYW1lLmggYmNhY2hlLmggc3ltZmlsZS5oIHdpbmRvd3MtdGRlcC5oIGxp bnV4LXRkZXAuaCBcCi1nZGJfdXNsZWVwLmgKK2dkYl91c2xlZXAuaCBqaXQu aAogCiAjIEhlYWRlciBmaWxlcyB0aGF0IGFscmVhZHkgaGF2ZSBzcmNkaXIg aW4gdGhlbSwgb3Igd2hpY2ggYXJlIGluIG9iamRpci4KIApAQCAtODI4LDcg KzgyOSw4IEBAIENPTU1PTl9PQlMgPSAkKERFUEZJTEVTKSAkKENPTkZJR19P QlMpICQKIAlzb2xpYi5vIHNvbGliLW51bGwubyBcCiAJcHJvbG9ndWUtdmFs dWUubyBtZW1vcnktbWFwLm8geG1sLXN1cHBvcnQubyBcCiAJdGFyZ2V0LWRl c2NyaXB0aW9ucy5vIHRhcmdldC1tZW1vcnkubyB4bWwtdGRlc2MubyB4bWwt YnVpbHRpbi5vIFwKLQlpbmZlcmlvci5vIG9zZGF0YS5vIGdkYl91c2xlZXAu byByZWNvcmQubworCWluZmVyaW9yLm8gb3NkYXRhLm8gZ2RiX3VzbGVlcC5v IHJlY29yZC5vIFwKKwlqaXQubwogCiBUU09CUyA9IGluZmxvdy5vCiAKSW5k ZXg6IGdkYi9ORVdTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9jdnMvc3JjL3NyYy9nZGIvTkVXUyx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS4zMTkKZGlmZiAtdSAtcCAtdSAtcjEuMzE5IE5FV1MKLS0tIGdkYi9ORVdT CTIwIEp1bCAyMDA5IDE4OjUxOjQxIC0wMDAwCTEuMzE5CisrKyBnZGIvTkVX UwkyNCBKdWwgMjAwOSAxNjo0NTowNiAtMDAwMApAQCAtMyw2ICszLDExIEBA CiAKICoqKiBDaGFuZ2VzIHNpbmNlIEdEQiA2LjgKIAorKiBHREIgbm93IGhh cyBhbiBpbnRlcmZhY2UgZm9yIEpJVCBjb21waWxhdGlvbi4gIEFwcGxpY2F0 aW9ucyB0aGF0CitkeW5hbWljYWxseSBnZW5lcmF0ZSBjb2RlIGNhbiBjcmVh dGUgb2JqZWN0IGZpbGVzIHdpdGggZGVidWcgaW5mbyBpbgorbWVtb3J5IGFu ZCByZWdpc3RlciB0aGVtIHdpdGggR0RCLiAgVGhlIGludGVyZmFjZSBhbHNv IHN1cHBvcnRzCithdHRhY2hpbmcgdG8gYSBydW5uaW5nIHByb2Nlc3MuCisK ICogVHJhY2Vwb2ludHMgbWF5IG5vdyBiZSBjb25kaXRpb25hbC4gIFRoZSBz eW50YXggaXMgYXMgZm9yCiBicmVha3BvaW50czsgZWl0aGVyIGFuICJpZiIg Y2xhdXNlIGFwcGVuZGVkIHRvIHRoZSAidHJhY2UiIGNvbW1hbmQsCiBvciB0 aGUgImNvbmRpdGlvbiIgY29tbWFuZCBpcyBhdmFpbGFibGUuICBHREIgc2Vu ZHMgdGhlIGNvbmRpdGlvbiB0bwpJbmRleDogZ2RiL2JyZWFrcG9pbnQuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv Z2RiL2JyZWFrcG9pbnQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MTMK ZGlmZiAtdSAtcCAtdSAtcjEuNDEzIGJyZWFrcG9pbnQuYwotLS0gZ2RiL2Jy ZWFrcG9pbnQuYwk3IEp1bCAyMDA5IDIyOjIxOjA5IC0wMDAwCTEuNDEzCisr KyBnZGIvYnJlYWtwb2ludC5jCTI0IEp1bCAyMDA5IDE2OjQ1OjA3IC0wMDAw CkBAIC0yNTczLDYgKzI1NzMsNyBAQCBwcmludF9pdF90eXBpY2FsIChicHN0 YXQgYnMpCiAgICAgY2FzZSBicF93YXRjaHBvaW50X3Njb3BlOgogICAgIGNh c2UgYnBfY2FsbF9kdW1teToKICAgICBjYXNlIGJwX3RyYWNlcG9pbnQ6Cisg ICAgY2FzZSBicF9qaXRfZXZlbnQ6CiAgICAgZGVmYXVsdDoKICAgICAgIHJl c3VsdCA9IFBSSU5UX1VOS05PV047CiAgICAgICBicmVhazsKQEAgLTMyOTgs NiArMzI5OSw5IEBAIGJwc3RhdF93aGF0IChicHN0YXQgYnMpCiAgICAgICAv KiBXZSBoaXQgdGhlIHNoYXJlZCBsaWJyYXJ5IGV2ZW50IGJyZWFrcG9pbnQu ICAqLwogICAgICAgc2hsaWJfZXZlbnQsCiAKKyAgICAgIC8qIFdlIGhpdCB0 aGUgaml0IGV2ZW50IGJyZWFrcG9pbnQuICAqLworICAgICAgaml0X2V2ZW50 LAorCiAgICAgICAvKiBUaGlzIGlzIGp1c3QgdXNlZCB0byBjb3VudCBob3cg bWFueSBlbnVtcyB0aGVyZSBhcmUuICAqLwogICAgICAgY2xhc3NfbGFzdAog ICAgIH07CkBAIC0zMzEzLDYgKzMzMTcsNyBAQCBicHN0YXRfd2hhdCAoYnBz dGF0IGJzKQogI2RlZmluZSBjbHIgQlBTVEFUX1dIQVRfQ0xFQVJfTE9OR0pN UF9SRVNVTUUKICNkZWZpbmUgc3IgQlBTVEFUX1dIQVRfU1RFUF9SRVNVTUUK ICNkZWZpbmUgc2hsIEJQU1RBVF9XSEFUX0NIRUNLX1NITElCUworI2RlZmlu ZSBqaXQgQlBTVEFUX1dIQVRfQ0hFQ0tfSklUCiAKIC8qICJDYW4ndCBoYXBw ZW4uIiAgTWlnaHQgd2FudCB0byBwcmludCBhbiBlcnJvciBtZXNzYWdlLgog ICAgYWJvcnQoKSBpcyBub3Qgb3V0IG9mIHRoZSBxdWVzdGlvbiwgYnV0IGNo YW5jZXMgYXJlIEdEQiBpcyBqdXN0CkBAIC0zMzMzLDEyICszMzM4LDEzIEBA IGJwc3RhdF93aGF0IChicHN0YXQgYnMpCiAgICAgIGJhY2sgYW5kIGRlY2lk ZSBzb21ldGhpbmcgb2YgYSBsb3dlciBwcmlvcml0eSBpcyBiZXR0ZXIuICBU aGUKICAgICAgb3JkZXJpbmcgaXM6CiAKLSAgICAga2MgICA8IGNsciBzZ2wg c2hsIHNsciBzbiBzciBzcwotICAgICBzZ2wgIDwgc2hsIHNsciBzbiBzciBz cwotICAgICBzbHIgIDwgZXJyIHNobCBzbiBzciBzcwotICAgICBjbHIgIDwg ZXJyIHNobCBzbiBzciBzcwotICAgICBzcyAgIDwgc2hsIHNuIHNyCi0gICAg IHNuICAgPCBzaGwgc3IKKyAgICAga2MgICA8IGppdCBjbHIgc2dsIHNobCBz bHIgc24gc3Igc3MKKyAgICAgc2dsICA8IGppdCBzaGwgc2xyIHNuIHNyIHNz CisgICAgIHNsciAgPCBqaXQgZXJyIHNobCBzbiBzciBzcworICAgICBjbHIg IDwgaml0IGVyciBzaGwgc24gc3Igc3MKKyAgICAgc3MgICA8IGppdCBzaGwg c24gc3IKKyAgICAgc24gICA8IGppdCBzaGwgc3IKKyAgICAgaml0ICA8IHNo bCBzcgogICAgICBzaGwgIDwgc3IKICAgICAgc3IgICA8CiAKQEAgLTMzNTYs MjggKzMzNjIsMTggQEAgYnBzdGF0X3doYXQgKGJwc3RhdCBicykKICAgICB0 YWJsZVsoaW50KSBjbGFzc19sYXN0XVsoaW50KSBCUFNUQVRfV0hBVF9MQVNU XSA9CiAgIHsKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv bGQgYWN0aW9uICovCi0gIC8qICAgICAgIGtjICAgIHNzICAgIHNuICAgIHNn bCAgICBzbHIgICBjbHIgICBzciAgIHNobAotICAgKi8KLS8qbm9fZWZmZWN0 ICovCi0gICAge2tjLCBzcywgc24sIHNnbCwgc2xyLCBjbHIsIHNyLCBzaGx9 LAotLyp3cF9zaWxlbnQgKi8KLSAgICB7c3MsIHNzLCBzbiwgc3MsIHNzLCBz cywgc3IsIHNobH0sCi0vKndwX25vaXN5ICovCi0gICAge3NuLCBzbiwgc24s IHNuLCBzbiwgc24sIHNyLCBzaGx9LAotLypicF9ub3N0b3AgKi8KLSAgICB7 c2dsLCBzcywgc24sIHNnbCwgc2xyLCBzbHIsIHNyLCBzaGx9LAotLypicF9z aWxlbnQgKi8KLSAgICB7c3MsIHNzLCBzbiwgc3MsIHNzLCBzcywgc3IsIHNo bH0sCi0vKmJwX25vaXN5ICovCi0gICAge3NuLCBzbiwgc24sIHNuLCBzbiwg c24sIHNyLCBzaGx9LAotLypsb25nX2p1bXAgKi8KLSAgICB7c2xyLCBzcywg c24sIHNsciwgc2xyLCBlcnIsIHNyLCBzaGx9LAotLypsb25nX3Jlc3VtZSAq LwotICAgIHtjbHIsIHNzLCBzbiwgZXJyLCBlcnIsIGVyciwgc3IsIHNobH0s Ci0vKnN0ZXBfcmVzdW1lICovCi0gICAge3NyLCBzciwgc3IsIHNyLCBzciwg c3IsIHNyLCBzcn0sCi0vKnNobGliICovCi0gICAge3NobCwgc2hsLCBzaGws IHNobCwgc2hsLCBzaGwsIHNyLCBzaGx9CisgIC8qICAgICAgICAgICAgICAg a2MgICBzcyAgIHNuICAgc2dsICBzbHIgIGNsciAgc3IgIHNobCAgaml0ICov CisvKiBub19lZmZlY3QgKi8gICB7a2MsICBzcywgIHNuLCAgc2dsLCBzbHIs IGNsciwgc3IsIHNobCwgaml0fSwKKy8qIHdwX3NpbGVudCAqLyAgIHtzcywg IHNzLCAgc24sICBzcywgIHNzLCAgc3MsICBzciwgc2hsLCBqaXR9LAorLyog d3Bfbm9pc3kgKi8gICAge3NuLCAgc24sICBzbiwgIHNuLCAgc24sICBzbiwg IHNyLCBzaGwsIGppdH0sCisvKiBicF9ub3N0b3AgKi8gICB7c2dsLCBzcywg IHNuLCAgc2dsLCBzbHIsIHNsciwgc3IsIHNobCwgaml0fSwKKy8qIGJwX3Np bGVudCAqLyAgIHtzcywgIHNzLCAgc24sICBzcywgIHNzLCAgc3MsICBzciwg c2hsLCBqaXR9LAorLyogYnBfbm9pc3kgKi8gICAge3NuLCAgc24sICBzbiwg IHNuLCAgc24sICBzbiwgIHNyLCBzaGwsIGppdH0sCisvKiBsb25nX2p1bXAg Ki8gICB7c2xyLCBzcywgIHNuLCAgc2xyLCBzbHIsIGVyciwgc3IsIHNobCwg aml0fSwKKy8qIGxvbmdfcmVzdW1lICovIHtjbHIsIHNzLCAgc24sICBlcnIs IGVyciwgZXJyLCBzciwgc2hsLCBqaXR9LAorLyogc3RlcF9yZXN1bWUgKi8g e3NyLCAgc3IsICBzciwgIHNyLCAgc3IsICBzciwgIHNyLCBzciwgIHNyIH0s CisvKiBzaGxpYiAqLyAgICAgICB7c2hsLCBzaGwsIHNobCwgc2hsLCBzaGws IHNobCwgc3IsIHNobCwgc2hsfSwKKy8qIGppdF9ldmVudCAqLyAgIHtqaXQs IGppdCwgaml0LCBqaXQsIGppdCwgaml0LCBzciwgaml0LCBqaXR9CiAgIH07 CiAKICN1bmRlZiBrYwpAQCAtMzM5MCw2ICszMzg2LDcgQEAgYnBzdGF0X3do YXQgKGJwc3RhdCBicykKICN1bmRlZiBzcgogI3VuZGVmIHRzCiAjdW5kZWYg c2hsCisjdW5kZWYgaml0CiAgIGVudW0gYnBzdGF0X3doYXRfbWFpbl9hY3Rp b24gY3VycmVudF9hY3Rpb24gPSBCUFNUQVRfV0hBVF9LRUVQX0NIRUNLSU5H OwogICBzdHJ1Y3QgYnBzdGF0X3doYXQgcmV0dmFsOwogCkBAIC0zNDYwLDYg KzM0NTcsOSBAQCBicHN0YXRfd2hhdCAoYnBzdGF0IGJzKQogCWNhc2UgYnBf c2hsaWJfZXZlbnQ6CiAJICBic19jbGFzcyA9IHNobGliX2V2ZW50OwogCSAg YnJlYWs7CisJY2FzZSBicF9qaXRfZXZlbnQ6CisJICBic19jbGFzcyA9IGpp dF9ldmVudDsKKwkgIGJyZWFrOwogCWNhc2UgYnBfdGhyZWFkX2V2ZW50Ogog CWNhc2UgYnBfb3ZlcmxheV9ldmVudDoKIAljYXNlIGJwX2xvbmdqbXBfbWFz dGVyOgpAQCAtMzU5Myw2ICszNTkzLDcgQEAgcHJpbnRfb25lX2JyZWFrcG9p bnRfbG9jYXRpb24gKHN0cnVjdCBicgogICAgIHticF9sb25nam1wX21hc3Rl ciwgImxvbmdqbXAgbWFzdGVyIn0sCiAgICAge2JwX2NhdGNocG9pbnQsICJj YXRjaHBvaW50In0sCiAgICAge2JwX3RyYWNlcG9pbnQsICJ0cmFjZXBvaW50 In0sCisgICAge2JwX2ppdF9ldmVudCwgImppdCBldmVudHMifSwKICAgfTsK ICAgCiAgIHN0YXRpYyBjaGFyIGJwZW5hYmxlc1tdID0gIm55bm55IjsKQEAg LTM3MjEsNiArMzcyMiw3IEBAIHByaW50X29uZV9icmVha3BvaW50X2xvY2F0 aW9uIChzdHJ1Y3QgYnIKICAgICAgIGNhc2UgYnBfb3ZlcmxheV9ldmVudDoK ICAgICAgIGNhc2UgYnBfbG9uZ2ptcF9tYXN0ZXI6CiAgICAgICBjYXNlIGJw X3RyYWNlcG9pbnQ6CisgICAgICBjYXNlIGJwX2ppdF9ldmVudDoKIAlpZiAo b3B0cy5hZGRyZXNzcHJpbnQpCiAJICB7CiAJICAgIGFubm90YXRlX2ZpZWxk ICg0KTsKQEAgLTQzNjIsNiArNDM2NCw3IEBAIGFsbG9jYXRlX2JwX2xvY2F0 aW9uIChzdHJ1Y3QgYnJlYWtwb2ludCAKICAgICBjYXNlIGJwX3NobGliX2V2 ZW50OgogICAgIGNhc2UgYnBfdGhyZWFkX2V2ZW50OgogICAgIGNhc2UgYnBf b3ZlcmxheV9ldmVudDoKKyAgICBjYXNlIGJwX2ppdF9ldmVudDoKICAgICBj YXNlIGJwX2xvbmdqbXBfbWFzdGVyOgogICAgICAgbG9jLT5sb2NfdHlwZSA9 IGJwX2xvY19zb2Z0d2FyZV9icmVha3BvaW50OwogICAgICAgYnJlYWs7CkBA IC00NjQ0LDYgKzQ2NDcsMTcgQEAgc3RydWN0IGxhbmdfYW5kX3JhZGl4CiAg ICAgaW50IHJhZGl4OwogICB9OwogCisvKiBDcmVhdGUgYSBicmVha3BvaW50 IGZvciBKSVQgY29kZSByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9u LiAgKi8KKworc3RydWN0IGJyZWFrcG9pbnQgKgorY3JlYXRlX2ppdF9ldmVu dF9icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgQ09SRV9B RERSIGFkZHJlc3MpCit7CisgIHN0cnVjdCBicmVha3BvaW50ICpiOworCisg IGIgPSBjcmVhdGVfaW50ZXJuYWxfYnJlYWtwb2ludCAoZ2RiYXJjaCwgYWRk cmVzcywgYnBfaml0X2V2ZW50KTsKKyAgdXBkYXRlX2dsb2JhbF9sb2NhdGlv bl9saXN0X25vdGhyb3cgKDEpOworICByZXR1cm4gYjsKK30KIAogdm9pZAog cmVtb3ZlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzICh2b2lkKQpAQCAtNTI3 OSw2ICs1MjkzLDcgQEAgbWVudGlvbiAoc3RydWN0IGJyZWFrcG9pbnQgKmIp CiAgICAgICBjYXNlIGJwX3NobGliX2V2ZW50OgogICAgICAgY2FzZSBicF90 aHJlYWRfZXZlbnQ6CiAgICAgICBjYXNlIGJwX292ZXJsYXlfZXZlbnQ6Cisg ICAgICBjYXNlIGJwX2ppdF9ldmVudDoKICAgICAgIGNhc2UgYnBfbG9uZ2pt cF9tYXN0ZXI6CiAJYnJlYWs7CiAgICAgICB9CkBAIC03NTg1LDYgKzc2MDAs NyBAQCBkZWxldGVfY29tbWFuZCAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHkp CiAgICAgICB7CiAJaWYgKGItPnR5cGUgIT0gYnBfY2FsbF9kdW1teQogCSAg ICAmJiBiLT50eXBlICE9IGJwX3NobGliX2V2ZW50CisJICAgICYmIGItPnR5 cGUgIT0gYnBfaml0X2V2ZW50CiAJICAgICYmIGItPnR5cGUgIT0gYnBfdGhy ZWFkX2V2ZW50CiAJICAgICYmIGItPnR5cGUgIT0gYnBfb3ZlcmxheV9ldmVu dAogCSAgICAmJiBiLT50eXBlICE9IGJwX2xvbmdqbXBfbWFzdGVyCkBAIC03 NjA0LDYgKzc2MjAsNyBAQCBkZWxldGVfY29tbWFuZCAoY2hhciAqYXJnLCBp bnQgZnJvbV90dHkpCiAJICAgIGlmIChiLT50eXBlICE9IGJwX2NhbGxfZHVt bXkKIAkJJiYgYi0+dHlwZSAhPSBicF9zaGxpYl9ldmVudAogCQkmJiBiLT50 eXBlICE9IGJwX3RocmVhZF9ldmVudAorCQkmJiBiLT50eXBlICE9IGJwX2pp dF9ldmVudAogCQkmJiBiLT50eXBlICE9IGJwX292ZXJsYXlfZXZlbnQKIAkJ JiYgYi0+dHlwZSAhPSBicF9sb25nam1wX21hc3RlcgogCQkmJiBiLT5udW1i ZXIgPj0gMCkKQEAgLTc5MjYsNiArNzk0Myw3IEBAIGJyZWFrcG9pbnRfcmVf c2V0X29uZSAodm9pZCAqYmludCkKICAgICBjYXNlIGJwX3N0ZXBfcmVzdW1l OgogICAgIGNhc2UgYnBfbG9uZ2ptcDoKICAgICBjYXNlIGJwX2xvbmdqbXBf cmVzdW1lOgorICAgIGNhc2UgYnBfaml0X2V2ZW50OgogICAgICAgYnJlYWs7 CiAgICAgfQogCkluZGV4OiBnZGIvYnJlYWtwb2ludC5oCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvYnJlYWtw b2ludC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk1CmRpZmYgLXUgLXAg LXUgLXIxLjk1IGJyZWFrcG9pbnQuaAotLS0gZ2RiL2JyZWFrcG9pbnQuaAky IEp1bCAyMDA5IDE3OjEyOjI0IC0wMDAwCTEuOTUKKysrIGdkYi9icmVha3Bv aW50LmgJMjQgSnVsIDIwMDkgMTY6NDU6MDcgLTAwMDAKQEAgLTEyMCw2ICsx MjAsOSBAQCBlbnVtIGJwdHlwZQogICAgIGJwX2NhdGNocG9pbnQsCiAKICAg ICBicF90cmFjZXBvaW50LAorCisgICAgLyogRXZlbnQgZm9yIEpJVCBjb21w aWxlZCBjb2RlIGdlbmVyYXRpb24gb3IgZGVsZXRpb24uICAqLworICAgIGJw X2ppdF9ldmVudCwKICAgfTsKIAogLyogU3RhdGVzIG9mIGVuYWJsZW1lbnQg b2YgYnJlYWtwb2ludC4gKi8KQEAgLTU0OCw2ICs1NTEsOSBAQCBlbnVtIGJw c3RhdF93aGF0X21haW5fYWN0aW9uCiAgICAgICAga2VlcCBjaGVja2luZy4g ICovCiAgICAgQlBTVEFUX1dIQVRfQ0hFQ0tfU0hMSUJTLAogCisgICAgLyog Q2hlY2sgZm9yIG5ldyBKSVRlZCBjb2RlLiAgKi8KKyAgICBCUFNUQVRfV0hB VF9DSEVDS19KSVQsCisKICAgICAvKiBUaGlzIGlzIGp1c3QgdXNlZCB0byBr ZWVwIHRyYWNrIG9mIGhvdyBtYW55IGVudW1zIHRoZXJlIGFyZS4gICovCiAg ICAgQlBTVEFUX1dIQVRfTEFTVAogICB9OwpAQCAtODQxLDYgKzg0Nyw5IEBA IGV4dGVybiB2b2lkIG1hcmtfYnJlYWtwb2ludHNfb3V0ICh2b2lkKTsKIAog ZXh0ZXJuIHZvaWQgbWFrZV9icmVha3BvaW50X3Blcm1hbmVudCAoc3RydWN0 IGJyZWFrcG9pbnQgKik7CiAKK2V4dGVybiBzdHJ1Y3QgYnJlYWtwb2ludCAq Y3JlYXRlX2ppdF9ldmVudF9icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAq LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENPUkVfQUREUik7CisKIGV4dGVybiBzdHJ1Y3QgYnJl YWtwb2ludCAqY3JlYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnQgKHN0cnVj dCBnZGJhcmNoICosCiAJCQkJCQkJIENPUkVfQUREUik7CiAKSW5kZXg6IGdk Yi9pbmZydW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv Y3ZzL3NyYy9zcmMvZ2RiL2luZnJ1bi5jLHYKcmV0cmlldmluZyByZXZpc2lv biAxLjQwMgpkaWZmIC11IC1wIC11IC1yMS40MDIgaW5mcnVuLmMKLS0tIGdk Yi9pbmZydW4uYwkyMCBKdWwgMjAwOSAxNTowNToxMiAtMDAwMAkxLjQwMgor KysgZ2RiL2luZnJ1bi5jCTI0IEp1bCAyMDA5IDE2OjQ1OjA3IC0wMDAwCkBA IC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiZXZlbnQtdG9wLmgiCiAjaW5j bHVkZSAicmVjb3JkLmgiCiAjaW5jbHVkZSAiaW5saW5lLWZyYW1lLmgiCisj aW5jbHVkZSAiaml0LmgiCiAKIC8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1 bmN0aW9ucyAqLwogCkBAIC0zNTI5LDYgKzM1MzAsMjIgQEAgaW5mcnVuOiBC UFNUQVRfV0hBVF9TRVRfTE9OR0pNUF9SRVNVTUUgKAogCX0KIAlicmVhazsK IAorICAgICAgY2FzZSBCUFNUQVRfV0hBVF9DSEVDS19KSVQ6CisgICAgICAg IGlmIChkZWJ1Z19pbmZydW4pCisgICAgICAgICAgZnByaW50Zl91bmZpbHRl cmVkIChnZGJfc3RkbG9nLCAiaW5mcnVuOiBCUFNUQVRfV0hBVF9DSEVDS19K SVRcbiIpOworCisgICAgICAgIC8qIFN3aXRjaCB0ZXJtaW5hbCBmb3IgYW55 IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGJyZWFrcG9pbnRfcmVfc2V0LiAgKi8K KyAgICAgICAgdGFyZ2V0X3Rlcm1pbmFsX291cnNfZm9yX291dHB1dCAoKTsK KworICAgICAgICBqaXRfZXZlbnRfaGFuZGxlciAoKTsKKworICAgICAgICB0 YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CisKKyAgICAgICAgLyogV2Ug d2FudCB0byBzdGVwIG92ZXIgdGhpcyBicmVha3BvaW50LCB0aGVuIGtlZXAg Z29pbmcuICAqLworICAgICAgICBlY3MtPmV2ZW50X3RocmVhZC0+c3RlcHBp bmdfb3Zlcl9icmVha3BvaW50ID0gMTsKKworICAgICAgICBicmVhazsKKwog ICAgICAgY2FzZSBCUFNUQVRfV0hBVF9MQVNUOgogCS8qIE5vdCBhIHJlYWwg Y29kZSwgYnV0IGxpc3RlZCBoZXJlIHRvIHNodXQgdXAgZ2NjIC1XYWxsLiAg Ki8KIApJbmRleDogZ2RiL2ppdC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IGdkYi9qaXQuYwpkaWZmIC1OIGdkYi9qaXQuYwotLS0gL2Rl di9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGdkYi9qaXQu YwkyNCBKdWwgMjAwOSAxNjo0NTowOCAtMDAwMApAQCAtMCwwICsxLDI3NyBA QAorLyogSGFuZGxlIEpJVCBjb2RlIGdlbmVyYXRpb24gaW4gdGhlIGluZmVy aW9yIGZvciBHREIsIHRoZSBHTlUgRGVidWdnZXIuCisKKyAgIENvcHlyaWdo dCAoQykgMjAwOQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKworI2lu Y2x1ZGUgImppdC5oIgorI2luY2x1ZGUgImJyZWFrcG9pbnQuaCIKKyNpbmNs dWRlICJnZGJjb3JlLmgiCisjaW5jbHVkZSAib2JzZXJ2ZXIuaCIKKyNpbmNs dWRlICJvYmpmaWxlcy5oIgorI2luY2x1ZGUgInN5bWZpbGUuaCIKKyNpbmNs dWRlICJzeW10YWIuaCIKKyNpbmNsdWRlICJ0YXJnZXQuaCIKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBvYmpmaWxlX2RhdGEgKmppdF9vYmpmaWxlX2RhdGE7 CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBqaXRfYnJlYWtfbmFtZSA9 ICJfX2ppdF9kZWJ1Z19yZWdpc3Rlcl9jb2RlIjsKKworc3RhdGljIGNvbnN0 IGNoYXIgKmNvbnN0IGppdF9kZXNjcmlwdG9yX25hbWUgPSAiX19qaXRfZGVi dWdfZGVzY3JpcHRvciI7CisKKy8qIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2Yg dGhlIEpJVCBkZXNjcmlwdG9yIGluIHRoZSBpbmZlcmlvci4gICovCisKK3N0 YXRpYyBDT1JFX0FERFIgaml0X2Rlc2NyaXB0b3JfYWRkcjsKKworLyogSGVs cGVyIG1ldGhvZCBmb3IgcmVhZGluZyB0aGUgZ2xvYmFsIEpJVCBkZXNjcmlw dG9yIGZyb20gcmVtb3RlIG1lbW9yeS4gICovCisKK3N0YXRpYyB2b2lkCitq aXRfcmVhZF9kZXNjcmlwdG9yIChzdHJ1Y3Qgaml0X2Rlc2NyaXB0b3IgKmRl c2NyaXB0b3IpCit7CisgIGludCBlcnI7CisgIHN0cnVjdCB0eXBlICpwdHJf dHlwZTsKKyAgaW50IHB0cl9zaXplOworICBpbnQgZGVzY19zaXplOworICBn ZGJfYnl0ZSAqZGVzY19idWY7CisgIGVudW0gYmZkX2VuZGlhbiBieXRlX29y ZGVyID0gZ2RiYXJjaF9ieXRlX29yZGVyICh0YXJnZXRfZ2RiYXJjaCk7CisK KyAgLyogRmlndXJlIG91dCBob3cgYmlnIHRoZSBkZXNjcmlwdG9yIGlzIG9u IHRoZSByZW1vdGUgYW5kIGhvdyB0byByZWFkIGl0LiAgKi8KKyAgcHRyX3R5 cGUgPSBidWlsdGluX3R5cGUgKHRhcmdldF9nZGJhcmNoKS0+YnVpbHRpbl9k YXRhX3B0cjsKKyAgcHRyX3NpemUgPSBUWVBFX0xFTkdUSCAocHRyX3R5cGUp OworICBkZXNjX3NpemUgPSA4ICsgMiAqIHB0cl9zaXplOyAgLyogVHdvIDMy LWJpdCBpbnRzIGFuZCB0d28gcG9pbnRlcnMuICAqLworICBkZXNjX2J1ZiA9 IGFsbG9jYSAoZGVzY19zaXplKTsKKworICAvKiBSZWFkIHRoZSBkZXNjcmlw dG9yLiAgKi8KKyAgZXJyID0gdGFyZ2V0X3JlYWRfbWVtb3J5IChqaXRfZGVz Y3JpcHRvcl9hZGRyLCBkZXNjX2J1ZiwgZGVzY19zaXplKTsKKyAgaWYgKGVy cikKKyAgICBlcnJvciAoXygiVW5hYmxlIHRvIHJlYWQgSklUIGRlc2NyaXB0 b3IgZnJvbSByZW1vdGUgbWVtb3J5ISIpKTsKKworICAvKiBGaXggdGhlIGVu ZGlhbm5lc3MgdG8gbWF0Y2ggdGhlIGhvc3QuICAqLworICBkZXNjcmlwdG9y LT52ZXJzaW9uID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyICgmZGVzY19i dWZbMF0sIDQsIGJ5dGVfb3JkZXIpOworICBkZXNjcmlwdG9yLT5hY3Rpb25f ZmxhZyA9CisgICAgICBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKCZkZXNj X2J1Zls0XSwgNCwgYnl0ZV9vcmRlcik7CisgIGRlc2NyaXB0b3ItPnJlbGV2 YW50X2VudHJ5ID0gZXh0cmFjdF90eXBlZF9hZGRyZXNzICgmZGVzY19idWZb OF0sIHB0cl90eXBlKTsKKyAgZGVzY3JpcHRvci0+Zmlyc3RfZW50cnkgPQor ICAgICAgZXh0cmFjdF90eXBlZF9hZGRyZXNzICgmZGVzY19idWZbOCArIHB0 cl9zaXplXSwgcHRyX3R5cGUpOworfQorCisvKiBIZWxwZXIgbWV0aG9kIGZv ciByZWFkaW5nIGEgSklUZWQgY29kZSBlbnRyeSBmcm9tIHJlbW90ZSBtZW1v cnkuICAqLworCitzdGF0aWMgdm9pZAoraml0X3JlYWRfY29kZV9lbnRyeSAo Q09SRV9BRERSIGNvZGVfYWRkciwgc3RydWN0IGppdF9jb2RlX2VudHJ5ICpj b2RlX2VudHJ5KQoreworICBpbnQgZXJyOworICBzdHJ1Y3QgdHlwZSAqcHRy X3R5cGU7CisgIGludCBwdHJfc2l6ZTsKKyAgaW50IGVudHJ5X3NpemU7Cisg IGdkYl9ieXRlICplbnRyeV9idWY7CisgIGVudW0gYmZkX2VuZGlhbiBieXRl X29yZGVyID0gZ2RiYXJjaF9ieXRlX29yZGVyICh0YXJnZXRfZ2RiYXJjaCk7 CisKKyAgLyogRmlndXJlIG91dCBob3cgYmlnIHRoZSBlbnRyeSBpcyBvbiB0 aGUgcmVtb3RlIGFuZCBob3cgdG8gcmVhZCBpdC4gICovCisgIHB0cl90eXBl ID0gYnVpbHRpbl90eXBlICh0YXJnZXRfZ2RiYXJjaCktPmJ1aWx0aW5fZGF0 YV9wdHI7CisgIHB0cl9zaXplID0gVFlQRV9MRU5HVEggKHB0cl90eXBlKTsK KyAgZW50cnlfc2l6ZSA9IDMgKiBwdHJfc2l6ZSArIDg7ICAvKiBUaHJlZSBw b2ludGVycyBhbmQgb25lIDY0LWJpdCBpbnQuICAqLworICBlbnRyeV9idWYg PSBhbGxvY2EgKGVudHJ5X3NpemUpOworCisgIC8qIFJlYWQgdGhlIGVudHJ5 LiAgKi8KKyAgZXJyID0gdGFyZ2V0X3JlYWRfbWVtb3J5IChjb2RlX2FkZHIs IGVudHJ5X2J1ZiwgZW50cnlfc2l6ZSk7CisgIGlmIChlcnIpCisgICAgZXJy b3IgKF8oIlVuYWJsZSB0byByZWFkIEpJVCBjb2RlIGVudHJ5IGZyb20gcmVt b3RlIG1lbW9yeSEiKSk7CisKKyAgLyogRml4IHRoZSBlbmRpYW5uZXNzIHRv IG1hdGNoIHRoZSBob3N0LiAgKi8KKyAgcHRyX3R5cGUgPSBidWlsdGluX3R5 cGUgKHRhcmdldF9nZGJhcmNoKS0+YnVpbHRpbl9kYXRhX3B0cjsKKyAgY29k ZV9lbnRyeS0+bmV4dF9lbnRyeSA9IGV4dHJhY3RfdHlwZWRfYWRkcmVzcyAo JmVudHJ5X2J1ZlswXSwgcHRyX3R5cGUpOworICBjb2RlX2VudHJ5LT5wcmV2 X2VudHJ5ID0KKyAgICAgIGV4dHJhY3RfdHlwZWRfYWRkcmVzcyAoJmVudHJ5 X2J1ZltwdHJfc2l6ZV0sIHB0cl90eXBlKTsKKyAgY29kZV9lbnRyeS0+c3lt ZmlsZV9hZGRyID0KKyAgICAgIGV4dHJhY3RfdHlwZWRfYWRkcmVzcyAoJmVu dHJ5X2J1ZlsyICogcHRyX3NpemVdLCBwdHJfdHlwZSk7CisgIGNvZGVfZW50 cnktPnN5bWZpbGVfc2l6ZSA9CisgICAgICBleHRyYWN0X3Vuc2lnbmVkX2lu dGVnZXIgKCZlbnRyeV9idWZbMyAqIHB0cl9zaXplXSwgOCwgYnl0ZV9vcmRl cik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGNvZGUgYXNz b2NpYXRlZCB3aXRoIGEgSklUIGNvZGUgZW50cnkuICBJdCB1c2VzIHRoZQor ICAgcG9pbnRlciBhbmQgc2l6ZSBwYWlyIGluIHRoZSBlbnRyeSB0byByZWFk IHRoZSBzeW1ib2wgZmlsZSBmcm9tIHRoZSByZW1vdGUKKyAgIGFuZCB0aGVu IGNhbGxzIHN5bWJvbF9maWxlX2FkZF9mcm9tX2xvY2FsX21lbW9yeSB0byBh ZGQgaXQgYXMgdGhvdWdoIGl0IHdlcmUKKyAgIGEgc3ltYm9sIGZpbGUgYWRk ZWQgYnkgdGhlIHVzZXIuICAqLworCitzdGF0aWMgdm9pZAoraml0X3JlZ2lz dGVyX2NvZGUgKENPUkVfQUREUiBlbnRyeV9hZGRyLCBzdHJ1Y3Qgaml0X2Nv ZGVfZW50cnkgKmNvZGVfZW50cnkpCit7CisgIGJmZCAqdGVtcGw7CisgIGJm ZCAqbmJmZDsKKyAgYmZkX2J5dGUgKmJ1ZmZlcjsKKyAgYmZkX3NpemVfdHlw ZSBzaXplOworICBpbnQgZXJyOworICBzdHJ1Y3Qgc2VjdGlvbl9hZGRyX2lu Zm8gKnNhaTsKKyAgc3RydWN0IG9iamZpbGUgKm9iamZpbGU7CisgIHN0cnVj dCBjbGVhbnVwICpvbGRfY2xlYW51cHM7CisKKyAgLyogV2UgbmVlZCBzb21l IHJlcHJlc2VudGF0aXZlIGJmZCB0byBrbm93IHRoZSB0YXJnZXQgd2UgYXJl IGxvb2tpbmcgYXQuICAqLworICB0ZW1wbCA9IHN5bWJvbF9maWxlX2d1ZXNz X3RlbXBsYXRlICgpOworICBpZiAodGVtcGwgPT0gTlVMTCkKKyAgICBlcnJv ciAoXygiXAorQ2Fubm90IGFkZCBzeW1ib2wgZmlsZSBmb3IgSklUZWQgY29k ZSB3aXRob3V0IGFuIG9iamVjdCBmaWxlIHRlbXBsYXRlLiIpKTsKKworICAv KiBSZWFkIHRoZSBzeW1maWxlIGZyb20gcmVtb3RlIG1lbW9yeS4gICovCisg IHNpemUgPSBjb2RlX2VudHJ5LT5zeW1maWxlX3NpemU7CisgIGJ1ZmZlciA9 IHhtYWxsb2MgKHNpemUpOworICBvbGRfY2xlYW51cHMgPSBtYWtlX2NsZWFu dXAgKHhmcmVlLCBidWZmZXIpOworICBlcnIgPSB0YXJnZXRfcmVhZF9tZW1v cnkgKGNvZGVfZW50cnktPnN5bWZpbGVfYWRkciwgYnVmZmVyLCBzaXplKTsK KyAgaWYgKGVycikKKyAgICBlcnJvciAoXygiVW5hYmxlIHRvIHJlYWQgSklU ZWQgc3ltZmlsZSBmcm9tIHJlbW90ZSBtZW1vcnkhIikpOworCisgIC8qIENy ZWF0ZSBhIG5ldyBCRkQgZnJvbSB0aGUgYnVmZmVyIGluIG1lbW9yeSBhbmQg YWRkIGl0IGFzIGEgc3ltYm9sIGZpbGUuICAqLworICBvYmpmaWxlID0gc3lt Ym9sX2ZpbGVfYWRkX2Zyb21fbG9jYWxfbWVtb3J5ICh0ZW1wbCwgYnVmZmVy LCBzaXplKTsKKworICAvKiBSZW1lbWJlciBhIG1hcHBpbmcgZnJvbSBlbnRy eV9hZGRyIHRvIG9iamZpbGUuICAqLworICBzZXRfb2JqZmlsZV9kYXRhIChv YmpmaWxlLCBqaXRfb2JqZmlsZV9kYXRhLCAodm9pZCopIGVudHJ5X2FkZHIp OworCisgIGRpc2NhcmRfY2xlYW51cHMgKG9sZF9jbGVhbnVwcyk7Cit9CisK Ky8qIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgSklUZWQgY29kZSBhbmQg ZnJlZXMgdGhlIGNvcnJlc3BvbmRpbmcgb2JqZmlsZS4gICovCisKK3N0YXRp YyB2b2lkCitqaXRfdW5yZWdpc3Rlcl9jb2RlIChzdHJ1Y3Qgb2JqZmlsZSAq b2JqZmlsZSkKK3sKKyAgZnJlZV9vYmpmaWxlIChvYmpmaWxlKTsKK30KKwor LyogVGhpcyBmdW5jdGlvbiByZWFkcyBhbnkgZXhpc3RpbmcgY29kZSBlbnRy aWVzIGluIHRoZSBsaW5rZWQgbGlzdCBhbmQgaW5zZXJ0cworICAgdGhlIGJy ZWFrcG9pbnQgc28gd2UgY2FuIGxpc3RlbiBmb3IgYW55IG1vcmUuICAqLwor CitzdGF0aWMgdm9pZAoraml0X2luZmVyaW9yX2NyZWF0ZWRfaG9vayAoc3Ry dWN0IHRhcmdldF9vcHMgKm9iamZpbGUsIGludCBmcm9tX3R0eSkKK3sKKyAg c3RydWN0IG1pbmltYWxfc3ltYm9sICpyZWdfc3ltYm9sOworICBzdHJ1Y3Qg bWluaW1hbF9zeW1ib2wgKmRlc2Nfc3ltYm9sOworICBDT1JFX0FERFIgcmVn X2FkZHI7CisgIHN0cnVjdCBqaXRfZGVzY3JpcHRvciBkZXNjcmlwdG9yOwor ICBzdHJ1Y3Qgaml0X2NvZGVfZW50cnkgY3VyX2VudHJ5OworICBDT1JFX0FE RFIgY3VyX2VudHJ5X2FkZHI7CisgIGludCBlcnI7CisKKyAgLyogTG9va3Vw IHRoZSByZWdpc3RyYXRpb24gc3ltYm9sLiAgSWYgaXQgaXMgbWlzc2luZywg dGhlbiB3ZSBhc3N1bWUgd2UgYXJlCisgICAgIG5vdCBhdHRhY2hlZCB0byBh IEpJVC4gICovCisgIHJlZ19zeW1ib2wgPSBsb29rdXBfbWluaW1hbF9zeW1i b2wgKGppdF9icmVha19uYW1lLCBOVUxMLCBOVUxMKTsKKyAgaWYgKHJlZ19z eW1ib2wgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIHJlZ19hZGRyID0gU1lN Qk9MX1ZBTFVFX0FERFJFU1MgKHJlZ19zeW1ib2wpOworICBpZiAocmVnX2Fk ZHIgPT0gMCkKKyAgICByZXR1cm47CisKKyAgLyogTG9va3VwIHRoZSBkZXNj cmlwdG9yIHN5bWJvbCBhbmQgY2FjaGUgdGhlIGFkZHIuICBJZiBpdCBpcyBt aXNzaW5nLCB3ZQorICAgICBhc3N1bWUgd2UgYXJlIG5vdCBhdHRhY2hlZCB0 byBhIEpJVCBhbmQgcmV0dXJuIGVhcmx5LiAgKi8KKyAgZGVzY19zeW1ib2wg PSBsb29rdXBfbWluaW1hbF9zeW1ib2wgKGppdF9kZXNjcmlwdG9yX25hbWUs IE5VTEwsIE5VTEwpOworICBpZiAoZGVzY19zeW1ib2wgPT0gTlVMTCkKKyAg ICByZXR1cm47CisgIGppdF9kZXNjcmlwdG9yX2FkZHIgPSBTWU1CT0xfVkFM VUVfQUREUkVTUyAoZGVzY19zeW1ib2wpOworICBpZiAoaml0X2Rlc2NyaXB0 b3JfYWRkciA9PSAwKQorICAgIHJldHVybjsKKworICAvKiBSZWFkIHRoZSBk ZXNjcmlwdG9yIHNvIHdlIGNhbiBjaGVjayB0aGUgdmVyc2lvbiBudW1iZXIg YW5kIGxvYWQgYW55IGFscmVhZHkKKyAgICAgSklUZWQgZnVuY3Rpb25zLiAg Ki8KKyAgaml0X3JlYWRfZGVzY3JpcHRvciAoJmRlc2NyaXB0b3IpOworCisg IC8qIENoZWNrIHRoYXQgdGhlIHZlcnNpb24gbnVtYmVyIGFncmVlcyB3aXRo IHRoYXQgd2Ugc3VwcG9ydC4gICovCisgIGlmIChkZXNjcmlwdG9yLnZlcnNp b24gIT0gMSkKKyAgICBlcnJvciAoXygiVW5zdXBwb3J0ZWQgSklUIHByb3Rv Y29sIHZlcnNpb24gaW4gZGVzY3JpcHRvciEiKSk7CisKKyAgLyogUHV0IGEg YnJlYWtwb2ludCBpbiB0aGUgcmVnaXN0cmF0aW9uIHN5bWJvbC4gICovCisg IGNyZWF0ZV9qaXRfZXZlbnRfYnJlYWtwb2ludCAodGFyZ2V0X2dkYmFyY2gs IHJlZ19hZGRyKTsKKworICAvKiBJZiB3ZSd2ZSBhdHRhY2hlZCB0byBhIHJ1 bm5pbmcgcHJvZ3JhbSwgd2UgbmVlZCB0byBjaGVjayB0aGUgZGVzY3JpcHRv ciB0bworICAgICByZWdpc3RlciBhbnkgZnVuY3Rpb25zIHRoYXQgd2VyZSBh bHJlYWR5IGdlbmVyYXRlZC4gICovCisgIGZvciAoY3VyX2VudHJ5X2FkZHIg PSBkZXNjcmlwdG9yLmZpcnN0X2VudHJ5OworICAgICAgIGN1cl9lbnRyeV9h ZGRyICE9IDA7CisgICAgICAgY3VyX2VudHJ5X2FkZHIgPSBjdXJfZW50cnku bmV4dF9lbnRyeSkKKyAgICB7CisgICAgICBqaXRfcmVhZF9jb2RlX2VudHJ5 IChjdXJfZW50cnlfYWRkciwgJmN1cl9lbnRyeSk7CisgICAgICBqaXRfcmVn aXN0ZXJfY29kZSAoY3VyX2VudHJ5X2FkZHIsICZjdXJfZW50cnkpOworICAg IH0KK30KKworLyogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgYW55IGNvZGUg ZW50cmllcyBsZWZ0IG92ZXIgd2hlbiB0aGUgaW5mZXJpb3IgZXhpdHMuCisg ICBXZSBnZXQgbGVmdCBvdmVyIGNvZGUgd2hlbiB0aGUgaW5mZXJpb3IgZXhp dHMgd2l0aG91dCB1bnJlZ2lzdGVyaW5nIGl0cyBjb2RlLAorICAgZm9yIGV4 YW1wbGUgd2hlbiBpdCBjcmFzaGVzLiAgKi8KKworc3RhdGljIHZvaWQKK2pp dF9pbmZlcmlvcl9leGl0X2hvb2sgKGludCBwaWQpCit7CisgIHN0cnVjdCBv YmpmaWxlICpvYmpmOworICBzdHJ1Y3Qgb2JqZmlsZSAqdGVtcDsKKworICBB TExfT0JKRklMRVNfU0FGRSAob2JqZiwgdGVtcCkKKyAgICBpZiAob2JqZmls ZV9kYXRhIChvYmpmLCBqaXRfb2JqZmlsZV9kYXRhKSAhPSBOVUxMKQorICAg ICAgaml0X3VucmVnaXN0ZXJfY29kZSAob2JqZik7Cit9CisKK3ZvaWQKK2pp dF9ldmVudF9oYW5kbGVyICh2b2lkKQoreworICBzdHJ1Y3Qgaml0X2Rlc2Ny aXB0b3IgZGVzY3JpcHRvcjsKKyAgc3RydWN0IGppdF9jb2RlX2VudHJ5IGNv ZGVfZW50cnk7CisgIGludCBlcnI7CisgIENPUkVfQUREUiBlbnRyeV9hZGRy OworICBzdHJ1Y3Qgb2JqZmlsZSAqb2JqZjsKKyAgc3RydWN0IG9iamZpbGUg KnRlbXA7CisKKyAgLyogUmVhZCB0aGUgZGVzY3JpcHRvciBmcm9tIHJlbW90 ZSBtZW1vcnkuICAqLworICBqaXRfcmVhZF9kZXNjcmlwdG9yICgmZGVzY3Jp cHRvcik7CisgIGVudHJ5X2FkZHIgPSBkZXNjcmlwdG9yLnJlbGV2YW50X2Vu dHJ5OworCisgIC8qIERvIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvbi4gKi8K KyAgc3dpdGNoIChkZXNjcmlwdG9yLmFjdGlvbl9mbGFnKQorICAgIHsKKyAg ICBjYXNlIEpJVF9OT0FDVElPTjoKKyAgICAgIGJyZWFrOworICAgIGNhc2Ug SklUX1JFR0lTVEVSOgorICAgICAgaml0X3JlYWRfY29kZV9lbnRyeSAoZW50 cnlfYWRkciwgJmNvZGVfZW50cnkpOworICAgICAgaml0X3JlZ2lzdGVyX2Nv ZGUgKGVudHJ5X2FkZHIsICZjb2RlX2VudHJ5KTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgSklUX1VOUkVHSVNURVI6CisgICAgICAvKiBMb29rIHVwIHRo ZSBvYmpmaWxlIHdpdGggdGhpcyBjb2RlIGVudHJ5IGFkZHJlc3MuICAqLwor ICAgICAgQUxMX09CSkZJTEVTX1NBRkUgKG9iamYsIHRlbXApCisgICAgICAg IHsKKyAgICAgICAgICBpZiAob2JqZmlsZV9kYXRhIChvYmpmLCBqaXRfb2Jq ZmlsZV9kYXRhKSA9PSAodm9pZCopIGVudHJ5X2FkZHIpCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIGppdF91bnJlZ2lzdGVyX2NvZGUgKG9iamYp OworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgIHByaW50Zl91bmZpbHRlcmVkICgiVW5hYmxlIHRvIGZp bmQgSklUZWQgY29kZSBlbnRyeSBhdCBhZGRyZXNzOiAlcFxuIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAodm9pZCopIGVudHJ5X2FkZHIpOworICAg ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVycm9yIChfKCJVbmtu b3duIGFjdGlvbl9mbGFnIHZhbHVlIGluIEpJVCBkZXNjcmlwdG9yISIpKTsK KyAgICAgIGJyZWFrOworICAgIH0KK30KKworLyogUHJvdmlkZSBhIHByb3Rv dHlwZSB0byBzaWxlbmNlIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKwor ZXh0ZXJuIHZvaWQgX2luaXRpYWxpemVfaml0ICh2b2lkKTsKKwordm9pZAor X2luaXRpYWxpemVfaml0ICh2b2lkKQoreworICBvYnNlcnZlcl9hdHRhY2hf aW5mZXJpb3JfY3JlYXRlZCAoaml0X2luZmVyaW9yX2NyZWF0ZWRfaG9vayk7 CisgIG9ic2VydmVyX2F0dGFjaF9pbmZlcmlvcl9leGl0IChqaXRfaW5mZXJp b3JfZXhpdF9ob29rKTsKKyAgaml0X29iamZpbGVfZGF0YSA9IHJlZ2lzdGVy X29iamZpbGVfZGF0YSAoKTsKK30KSW5kZXg6IGdkYi9qaXQuaAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBnZGIvaml0LmgKZGlmZiAtTiBn ZGIvaml0LmgKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w MDAwCisrKyBnZGIvaml0LmgJMjQgSnVsIDIwMDkgMTY6NDU6MDggLTAwMDAK QEAgLTAsMCArMSw3NSBAQAorLyogSklUIGRlY2xhcmF0aW9ucyBmb3IgR0RC LCB0aGUgR05VIERlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDkK KyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlz IGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4gICovCisKKyNpZm5kZWYgSklUX0gKKyNkZWZpbmUgSklUX0gKKworLyog V2hlbiB0aGUgSklUIGJyZWFrcG9pbnQgZmlyZXMsIHRoZSBpbmZlcmlvciB3 YW50cyB1cyB0byB0YWtlIG9uZSBvZiB0aGVzZQorICAgYWN0aW9ucy4gIFRo ZXNlIHZhbHVlcyBhcmUgdXNlZCBieSB0aGUgaW5mZXJpb3IsIHNvIHRoZSB2 YWx1ZXMgb2YgdGhlc2UgZW51bXMKKyAgIGNhbm5vdCBiZSBjaGFuZ2VkLiAg Ki8KKwordHlwZWRlZiBlbnVtCit7CisgIEpJVF9OT0FDVElPTiA9IDAsCisg IEpJVF9SRUdJU1RFUiwKKyAgSklUX1VOUkVHSVNURVIKK30gaml0X2FjdGlv bnNfdDsKKworLyogVGhpcyBzdHJ1Y3QgZGVzY3JpYmVzIGEgc2luZ2xlIHN5 bWJvbCBmaWxlIGluIGEgbGlua2VkIGxpc3Qgb2Ygc3ltYm9sIGZpbGVzCisg ICBkZXNjcmliaW5nIGdlbmVyYXRlZCBjb2RlLiAgQXMgdGhlIGluZmVyaW9y IGdlbmVyYXRlcyBjb2RlLCBpdCBhZGRzIHRoZXNlCisgICBlbnRyaWVzIHRv IHRoZSBsaXN0LCBhbmQgd2hlbiB3ZSBhdHRhY2ggdG8gdGhlIGluZmVyaW9y LCB3ZSByZWFkIHRoZW0gYWxsLgorICAgRm9yIHRoZSBmaXJzdCBlbGVtZW50 IHByZXZfZW50cnkgc2hvdWxkIGJlIE5VTEwsIGFuZCBmb3IgdGhlIGxhc3Qg ZWxlbWVudAorICAgbmV4dF9lbnRyeSBzaG91bGQgYmUgTlVMTC4gIFRoZSBv cmRlcmluZyBvZiB0aGlzIHN0cnVjdCBtdXN0IGJlIGNvbnNpc3RlbnQKKyAg IHdpdGggdGhlIG9yZGVyaW5nIGluIHRoZSBjbGllbnQsIHNvIGl0IGNhbm5v dCBiZSBjaGFuZ2VkIHdpdGhvdXQgdXBkYXRpbmcgdGhlCisgICBwcm90b2Nv bCB2ZXJzaW9uLiAgKi8KKworc3RydWN0IGppdF9jb2RlX2VudHJ5Cit7Cisg IENPUkVfQUREUiBuZXh0X2VudHJ5OworICBDT1JFX0FERFIgcHJldl9lbnRy eTsKKyAgQ09SRV9BRERSIHN5bWZpbGVfYWRkcjsKKyAgdWludDY0X3Qgc3lt ZmlsZV9zaXplOworfTsKKworLyogVGhpcyBpcyB0aGUgZ2xvYmFsIGRlc2Ny aXB0b3IgdGhhdCB0aGUgaW5mZXJpb3IgdXNlcyB0byBjb21tdW5pY2F0ZQor ICAgaW5mb3JtYXRpb24gdG8gdGhlIGRlYnVnZ2VyLiAgVG8gYWxlcnQgdGhl IGRlYnVnZ2VyIHRvIHRha2UgYW4gYWN0aW9uLCB0aGUKKyAgIGluZmVyaW9y IHNldHMgdGhlIGFjdGlvbl9mbGFnIHRvIHRoZSBhcHByb3ByaWF0ZSBlbnVt IHZhbHVlLCB1cGRhdGVzCisgICByZWxldmFudF9lbnRyeSB0byBwb2ludCB0 byB0aGUgcmVsZXZhbnQgY29kZSBlbnRyeSwgYW5kIGNhbGxzIHRoZSBmdW5j dGlvbiBhdAorICAgdGhlIHdlbGwta25vd24gc3ltYm9sIHdpdGggb3VyIGJy ZWFrcG9pbnQuICBXZSB0aGVuIHJlYWQgdGhpcyBkZXNjcmlwdG9yIGZyb20K KyAgIGFub3RoZXIgZ2xvYmFsIHdlbGwta25vd24gc3ltYm9sLiAgVGhlIG9y ZGVyaW5nIG9mIHRoaXMgc3RydWN0IG11c3QgYmUKKyAgIGNvbnNpc3RlbnQg d2l0aCB0aGUgb3JkZXJpbmcgaW4gdGhlIGNsaWVudCwgc28gaXQgY2Fubm90 IGJlIGNoYW5nZWQgd2l0aG91dAorICAgdXBkYXRpbmcgdGhlIHByb3RvY29s IHZlcnNpb24uICAqLworCitzdHJ1Y3Qgaml0X2Rlc2NyaXB0b3IKK3sKKyAg dWludDMyX3QgdmVyc2lvbjsKKyAgLyogVGhpcyBzaG91bGQgYmUgaml0X2Fj dGlvbnNfdCwgYnV0IHdlIHdhbnQgdG8gYmUgc3BlY2lmaWMgYWJvdXQgdGhl CisgICAgIGJpdC13aWR0aC4gICovCisgIHVpbnQzMl90IGFjdGlvbl9mbGFn OworICBDT1JFX0FERFIgcmVsZXZhbnRfZW50cnk7CisgIENPUkVfQUREUiBm aXJzdF9lbnRyeTsKK307CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IGJ5IGhhbmRsZV9pbmZlcmlvcl9ldmVudCB3aGVuIGl0IGRlY2lkZXMgdGhh dCB0aGUgSklUCisgICBldmVudCBicmVha3BvaW50IGhhcyBmaXJlZC4gICov CisKK2V4dGVybiB2b2lkIGppdF9ldmVudF9oYW5kbGVyICh2b2lkKTsKKwor I2VuZGlmIC8qIEpJVF9IICovCkluZGV4OiBnZGIvb2JqZmlsZXMuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2Ri L29iamZpbGVzLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODcKZGlmZiAt dSAtcCAtdSAtcjEuODcgb2JqZmlsZXMuYwotLS0gZ2RiL29iamZpbGVzLmMJ MjIgSnVsIDIwMDkgMTk6MjE6MzEgLTAwMDAJMS44NworKysgZ2RiL29iamZp bGVzLmMJMjQgSnVsIDIwMDkgMTY6NDU6MDggLTAwMDAKQEAgLTI1LDYgKzI1 LDcgQEAKIAogI2luY2x1ZGUgImRlZnMuaCIKICNpbmNsdWRlICJiZmQuaCIJ CS8qIEJpbmFyeSBGaWxlIERlc2NyaXB0aW9uICovCisjaW5jbHVkZSAibGli YmZkLmgiCiAjaW5jbHVkZSAic3ltdGFiLmgiCiAjaW5jbHVkZSAic3ltZmls ZS5oIgogI2luY2x1ZGUgIm9iamZpbGVzLmgiCkBAIC00MzgsOSArNDM5LDE5 IEBAIGZyZWVfb2JqZmlsZSAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpCiAg IGlmIChvYmpmaWxlLT5vYmZkICE9IE5VTEwgJiYgIShvYmpmaWxlLT5mbGFn cyAmIE9CSkZfS0VFUEJGRCkpCiAgICAgewogICAgICAgY2hhciAqbmFtZSA9 IGJmZF9nZXRfZmlsZW5hbWUgKG9iamZpbGUtPm9iZmQpOworICAgICAgc3Ry dWN0IGJmZF9pbl9tZW1vcnkgKmJpbSA9IE5VTEw7CisgICAgICAvKiBIYWNr IHRvIHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgQkZEIGRvZXMgbm90IHRh a2Ugb3duZXJzaGlwIG9mIHRoZQorICAgICAgICAgbWVtb3J5IGZvciBmaWxl cyBhbGxvY2F0ZWQgaW4gbWVtb3J5LiAgKi8KKyAgICAgIGlmIChvYmpmaWxl LT5vYmZkLT5mbGFncyAmIEJGRF9JTl9NRU1PUlkpCisgICAgICAgIGJpbSA9 IChzdHJ1Y3QgYmZkX2luX21lbW9yeSAqKSBvYmpmaWxlLT5vYmZkLT5pb3N0 cmVhbTsKICAgICAgIGlmICghYmZkX2Nsb3NlIChvYmpmaWxlLT5vYmZkKSkK IAl3YXJuaW5nIChfKCJjYW5ub3QgY2xvc2UgXCIlc1wiOiAlcyIpLAogCQkg bmFtZSwgYmZkX2Vycm1zZyAoYmZkX2dldF9lcnJvciAoKSkpOworICAgICAg aWYgKGJpbSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgeGZyZWUg KGJpbS0+YnVmZmVyKTsKKyAgICAgICAgICB4ZnJlZSAoYmltKTsKKyAgICAg ICAgfQogICAgICAgeGZyZWUgKG5hbWUpOwogICAgIH0KIApJbmRleDogZ2Ri L3N5bWZpbGUtbWVtLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9zeW1maWxlLW1lbS5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjE5CmRpZmYgLXUgLXAgLXUgLXIxLjE5IHN5bWZpbGUt bWVtLmMKLS0tIGdkYi9zeW1maWxlLW1lbS5jCTIgSnVsIDIwMDkgMTc6MjE6 MDYgLTAwMDAJMS4xOQorKysgZ2RiL3N5bWZpbGUtbWVtLmMJMjQgSnVsIDIw MDkgMTY6NDU6MDggLTAwMDAKQEAgLTU0LDM2ICs1NCwyMyBAQAogI2luY2x1 ZGUgIm9ic2VydmVyLmgiCiAjaW5jbHVkZSAiYXV4di5oIgogI2luY2x1ZGUg ImVsZi9jb21tb24uaCIKKyNpbmNsdWRlICJiZmQuaCIKKyNpbmNsdWRlICJs aWJiZmQuaCIKKyNpbmNsdWRlIDx0aW1lLmg+CiAKIAotLyogUmVhZCBpbmZl cmlvciBtZW1vcnkgYXQgQUREUiB0byBmaW5kIHRoZSBoZWFkZXIgb2YgYSBs b2FkZWQgb2JqZWN0IGZpbGUKLSAgIGFuZCByZWFkIGl0cyBpbi1jb3JlIHN5 bWJvbHMgb3V0IG9mIGluZmVyaW9yIG1lbW9yeS4gIFRFTVBMIGlzIGEgYmZk Ci0gICByZXByZXNlbnRpbmcgdGhlIHRhcmdldCdzIGZvcm1hdC4gIE5BTUUg aXMgdGhlIG5hbWUgdG8gdXNlIGZvciB0aGlzCi0gICBzeW1ib2wgZmlsZSBp biBtZXNzYWdlczsgaXQgY2FuIGJlIE5VTEwgb3IgYSBtYWxsb2MtYWxsb2Nh dGVkIHN0cmluZwotICAgd2hpY2ggd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUg QkZELiAgKi8KKy8qIENvbW1vbiBjb2RlIGZvciBzeW1ib2xfZmlsZV9hZGRf ZnJvbV9tZW1vcnkgYW5kCisgICBzeW1ib2xfZmlsZV9hZGRfZnJvbV9sb2Nh bF9tZW1vcnkuICAqLworCiBzdGF0aWMgc3RydWN0IG9iamZpbGUgKgotc3lt Ym9sX2ZpbGVfYWRkX2Zyb21fbWVtb3J5IChzdHJ1Y3QgYmZkICp0ZW1wbCwg Q09SRV9BRERSIGFkZHIsIGNoYXIgKm5hbWUsCi0JCQkgICAgIGludCBmcm9t X3R0eSkKK3N5bWJvbF9maWxlX2FkZF9mcm9tX21lbW9yeV9jb21tb24gKHN0 cnVjdCBiZmQgKm5iZmQsIGJmZF92bWEgbG9hZGJhc2UsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbV90dHkpCiB7CiAg IHN0cnVjdCBvYmpmaWxlICpvYmpmOwotICBzdHJ1Y3QgYmZkICpuYmZkOwog ICBzdHJ1Y3QgYmZkX3NlY3Rpb24gKnNlYzsKLSAgYmZkX3ZtYSBsb2FkYmFz ZTsKICAgc3RydWN0IHNlY3Rpb25fYWRkcl9pbmZvICpzYWk7CiAgIHVuc2ln bmVkIGludCBpOwotCi0gIGlmIChiZmRfZ2V0X2ZsYXZvdXIgKHRlbXBsKSAh PSBiZmRfdGFyZ2V0X2VsZl9mbGF2b3VyKQotICAgIGVycm9yIChfKCJhZGQt c3ltYm9sLWZpbGUtZnJvbS1tZW1vcnkgbm90IHN1cHBvcnRlZCBmb3IgdGhp cyB0YXJnZXQiKSk7Ci0KLSAgbmJmZCA9IGJmZF9lbGZfYmZkX2Zyb21fcmVt b3RlX21lbW9yeSAodGVtcGwsIGFkZHIsICZsb2FkYmFzZSwKLQkJCQkJIHRh cmdldF9yZWFkX21lbW9yeSk7Ci0gIGlmIChuYmZkID09IE5VTEwpCi0gICAg ZXJyb3IgKF8oIkZhaWxlZCB0byByZWFkIGEgdmFsaWQgb2JqZWN0IGZpbGUg aW1hZ2UgZnJvbSBtZW1vcnkuIikpOwotCi0gIGlmIChuYW1lID09IE5VTEwp Ci0gICAgbmJmZC0+ZmlsZW5hbWUgPSB4c3RyZHVwICgic2hhcmVkIG9iamVj dCByZWFkIGZyb20gdGFyZ2V0IG1lbW9yeSIpOwotICBlbHNlCi0gICAgbmJm ZC0+ZmlsZW5hbWUgPSBuYW1lOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2Ns ZWFudXBzOwogCiAgIGlmICghYmZkX2NoZWNrX2Zvcm1hdCAobmJmZCwgYmZk X29iamVjdCkpCiAgICAgewpAQCAtOTYsNyArODMsNyBAQCBzeW1ib2xfZmls ZV9hZGRfZnJvbV9tZW1vcnkgKHN0cnVjdCBiZmQgCiAgICAgfQogCiAgIHNh aSA9IGFsbG9jX3NlY3Rpb25fYWRkcl9pbmZvIChiZmRfY291bnRfc2VjdGlv bnMgKG5iZmQpKTsKLSAgbWFrZV9jbGVhbnVwICh4ZnJlZSwgc2FpKTsKKyAg b2xkX2NsZWFudXBzID0gbWFrZV9jbGVhbnVwICh4ZnJlZSwgc2FpKTsKICAg aSA9IDA7CiAgIGZvciAoc2VjID0gbmJmZC0+c2VjdGlvbnM7IHNlYyAhPSBO VUxMOyBzZWMgPSBzZWMtPm5leHQpCiAgICAgaWYgKChiZmRfZ2V0X3NlY3Rp b25fZmxhZ3MgKG5iZmQsIHNlYykgJiAoU0VDX0FMTE9DfFNFQ19MT0FEKSkg IT0gMCkKQEAgLTExMyw5ICsxMDAsMTI3IEBAIHN5bWJvbF9maWxlX2FkZF9m cm9tX21lbW9yeSAoc3RydWN0IGJmZCAKICAgLyogVGhpcyBtaWdodCBjaGFu Z2Ugb3VyIGlkZWFzIGFib3V0IGZyYW1lcyBhbHJlYWR5IGxvb2tlZCBhdC4g ICovCiAgIHJlaW5pdF9mcmFtZV9jYWNoZSAoKTsKIAorICBkaXNjYXJkX2Ns ZWFudXBzIChvbGRfY2xlYW51cHMpOwogICByZXR1cm4gb2JqZjsKIH0KIAor LyogUmVhZCBpbmZlcmlvciBtZW1vcnkgYXQgQUREUiB0byBmaW5kIHRoZSBo ZWFkZXIgb2YgYSBsb2FkZWQgb2JqZWN0IGZpbGUKKyAgIGFuZCByZWFkIGl0 cyBpbi1jb3JlIHN5bWJvbHMgb3V0IG9mIGluZmVyaW9yIG1lbW9yeS4gIFRF TVBMIGlzIGEgYmZkCisgICByZXByZXNlbnRpbmcgdGhlIHRhcmdldCdzIGZv cm1hdC4gIE5BTUUgaXMgdGhlIG5hbWUgdG8gdXNlIGZvciB0aGlzCisgICBz eW1ib2wgZmlsZSBpbiBtZXNzYWdlczsgaXQgY2FuIGJlIE5VTEwgb3IgYSBt YWxsb2MtYWxsb2NhdGVkIHN0cmluZworICAgd2hpY2ggd2lsbCBiZSBhdHRh Y2hlZCB0byB0aGUgQkZELiAgKi8KKworc3RydWN0IG9iamZpbGUgKgorc3lt Ym9sX2ZpbGVfYWRkX2Zyb21fbWVtb3J5IChzdHJ1Y3QgYmZkICp0ZW1wbCwg Q09SRV9BRERSIGFkZHIsIGNoYXIgKm5hbWUsCisJCQkgICAgIGludCBmcm9t X3R0eSkKK3sKKyAgc3RydWN0IGJmZCAqbmJmZDsKKyAgYmZkX3ZtYSBsb2Fk YmFzZTsKKworICBpZiAoYmZkX2dldF9mbGF2b3VyICh0ZW1wbCkgIT0gYmZk X3RhcmdldF9lbGZfZmxhdm91cikKKyAgICBlcnJvciAoXygiYWRkLXN5bWJv bC1maWxlLWZyb20tbWVtb3J5IG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgdGFy Z2V0IikpOworCisgIG5iZmQgPSBiZmRfZWxmX2JmZF9mcm9tX3JlbW90ZV9t ZW1vcnkgKHRlbXBsLCBhZGRyLCAmbG9hZGJhc2UsCisJCQkJCSB0YXJnZXRf cmVhZF9tZW1vcnkpOworICBpZiAobmJmZCA9PSBOVUxMKQorICAgIGVycm9y IChfKCJGYWlsZWQgdG8gcmVhZCBhIHZhbGlkIG9iamVjdCBmaWxlIGltYWdl IGZyb20gbWVtb3J5LiIpKTsKKworICBpZiAobmFtZSA9PSBOVUxMKQorICAg IG5iZmQtPmZpbGVuYW1lID0geHN0cmR1cCAoInNoYXJlZCBvYmplY3QgcmVh ZCBmcm9tIHRhcmdldCBtZW1vcnkiKTsKKyAgZWxzZQorICAgIG5iZmQtPmZp bGVuYW1lID0gbmFtZTsKKworICByZXR1cm4gc3ltYm9sX2ZpbGVfYWRkX2Zy b21fbWVtb3J5X2NvbW1vbiAobmJmZCwgbG9hZGJhc2UsIGZyb21fdHR5KTsK K30KKworLyogQ3JlYXRlIGEgbmV3IEJGRCBmb3IgYSBmaWxlIHRoYXQgaXMg YWxyZWFkeSBsb2FkZWQgaW50byBtZW1vcnkuICBUaGlzIGRvZXMKKyAgIG5v dCB0YWtlIG93bmVyc2hpcCBvZiBidWZmZXIgb3IgZmlsZW5hbWUsIGFuZCB0 aGUgY2FsbGVyIG11c3QgZnJlZSB0aGVtLgorICAgVGhpcyBjb2RlIGlzIGJh c2VkIG9uIGJmZF9mcm9tX3JlbW90ZV9tZW1vcnkgaW4gYmZkL2VsZmNvZGUu aCwgYW5kIHNob3VsZAorICAgcHJvYmFibHkgbGl2ZSBpbnNpZGUgb2YgdGhl IGJmZCBsaWJyYXJ5LiAgKi8KKworc3RhdGljIGJmZCAqCitiZmRfb3Blbl9m cm9tX21lbW9yeSAoc3RydWN0IGJmZCAqdGVtcGwsIGJmZF9ieXRlICpidWZm ZXIsCisgICAgICAgICAgICAgICAgICAgICAgYmZkX3NpemVfdHlwZSBzaXpl LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgYmZkICpuYmZkOworICBz dHJ1Y3QgYmZkX2luX21lbW9yeSAqYmltOworCisgIGJpbSA9IGJmZF9tYWxs b2MgKHNpemVvZiAoc3RydWN0IGJmZF9pbl9tZW1vcnkpKTsKKyAgaWYgKGJp bSA9PSBOVUxMKQorICAgIHJldHVybiBOVUxMOworICBiaW0tPmJ1ZmZlciA9 IGJ1ZmZlcjsKKyAgYmltLT5zaXplID0gc2l6ZTsKKworICBuYmZkID0gX2Jm ZF9uZXdfYmZkICgpOworICBpZiAobmJmZCA9PSBOVUxMKQorICAgIHsKKyAg ICAgIGZyZWUgKGJpbSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cisg IG5iZmQtPmZpbGVuYW1lID0gZmlsZW5hbWU7CisgIG5iZmQtPnh2ZWMgPSB0 ZW1wbC0+eHZlYzsKKyAgbmJmZC0+aW9zdHJlYW0gPSBiaW07CisgIG5iZmQt PmZsYWdzID0gQkZEX0lOX01FTU9SWTsKKyAgbmJmZC0+ZGlyZWN0aW9uID0g cmVhZF9kaXJlY3Rpb247CisgIG5iZmQtPm10aW1lID0gdGltZSAoTlVMTCk7 CisgIG5iZmQtPm10aW1lX3NldCA9IFRSVUU7CisKKyAgcmV0dXJuIG5iZmQ7 Cit9CisKKy8qIEFkZCBhIHN5bWJvbCBmaWxlIGZyb20gbG9jYWwgbWVtb3J5 LiAgVGhpcyBkaWZmZXJzIGZyb20KKyAgIHN5bWJvbF9maWxlX2FkZF9mcm9t X21lbW9yeSBpbiB0aGF0IGl0IGFzc3VtZXMgdGhhdCB3ZSBoYXZlIHRoZSBl bnRpcmUKKyAgIHN5bWJvbCBmaWxlIGxhaWQgb3V0IGluIG1lbW9yeSBhbmQg d2UgZG9uJ3QgbmVlZCB0byB1c2UKKyAgIGJmZF9lbGZfYmZkX2Zyb21fcmVt b3RlX21lbW9yeSB0byByZWNvbnN0cnVjdCB0aGUgRUxGIGZyb20gdGhlIHBy b2dyYW0KKyAgIGhlYWRlcnMuICovCisKK3N0cnVjdCBvYmpmaWxlICoKK3N5 bWJvbF9maWxlX2FkZF9mcm9tX2xvY2FsX21lbW9yeSAoc3RydWN0IGJmZCAq dGVtcGwsIGJmZF9ieXRlICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJmZF9zaXplX3R5cGUgc2l6ZSkKK3sKKyAgYmZk ICpuYmZkOworICBpbnQgZXJyOworICBzdHJ1Y3Qgc2VjdGlvbl9hZGRyX2lu Zm8gKnNhaTsKKyAgYmZkX3ZtYSBsb2FkYmFzZTsKKyAgY29uc3QgY2hhciAq ZmlsZW5hbWU7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xlYW51cHM7Cisg IHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlOworCisgIC8qIFRoZSBmaWxlbmFt ZSBtdXN0IGJlIHN0cmR1cCdkIG9yIEdEQiB3aWxsIGNyYXNoIHdoZW4gZnJl ZWluZyB0aGUgb2JqZWN0CisgICAgIGZpbGUuICAqLworICBmaWxlbmFtZSA9 IHhzdHJkdXAgKCI8aW4tbWVtb3J5PiIpOworICBvbGRfY2xlYW51cHMgPSBt YWtlX2NsZWFudXAgKHhmcmVlLCAodm9pZCopZmlsZW5hbWUpOworCisgIC8q IENyZWF0ZSBhIG5ldyBCRkQgZnJvbSB0aGUgYnVmZmVyIGluIG1lbW9yeSBh bmQgYWRkIGl0IGFzIGEgc3ltYm9sIGZpbGUuICAqLworICBuYmZkID0gYmZk X29wZW5fZnJvbV9tZW1vcnkgKHRlbXBsLCBidWZmZXIsIHNpemUsIGZpbGVu YW1lKTsKKyAgaWYgKG5iZmQgPT0gTlVMTCkKKyAgICBlcnJvciAoXygiVW5h YmxlIHRvIGNyZWF0ZSBCRkQgZnJvbSBsb2NhbCBtZW1vcnk6ICVzIiksCisg ICAgICAgICAgIGJmZF9lcnJtc2cgKGJmZF9nZXRfZXJyb3IgKCkpKTsKKwor ICAvKiBXZSBzZXQgbG9hZGJhc2UgdG8gMCBhbmQgYXNzdW1lIHRoYXQgdGhl IHN5bWJvbCBmaWxlIHdlJ3JlIGxvYWRpbmcgaGFzIHRoZQorICAgICBhYnNv bHV0ZSBhZGRyZXNzZXMgc2V0IGluIHRoZSBFTEYuICAqLworICBsb2FkYmFz ZSA9IDA7CisgIG9iamZpbGUgPSBzeW1ib2xfZmlsZV9hZGRfZnJvbV9tZW1v cnlfY29tbW9uIChuYmZkLCBsb2FkYmFzZSwgMCk7CisgIGRpc2NhcmRfY2xl YW51cHMgKG9sZF9jbGVhbnVwcyk7CisgIHJldHVybiBvYmpmaWxlOworfQor CisvKiBVc2UgdGhlIEJGRCBvZiB0aGUgbWFpbiBleGVjdXRhYmxlIHRvIGd1 ZXNzIHdoYXQga2luZCBvZiBvYmplY3QgZmlsZSB3ZSB3YW50CisgICB0byBh ZGQuICBUaGlzIGlzIHVzZWQgZm9yIGFkZGluZyBzeW1ib2wgZmlsZXMgZnJv bSBtZW1vcnksIHdoZXJlIHdlIGRvbid0CisgICBrbm93IHRoZSBmb3JtYXQg b2YgdGhlIGZpbGUuICAqLworCitzdHJ1Y3QgYmZkICoKK3N5bWJvbF9maWxl X2d1ZXNzX3RlbXBsYXRlICh2b2lkKQoreworICBzdHJ1Y3QgYmZkICp0ZW1w bDsKKworICBpZiAoc3ltZmlsZV9vYmpmaWxlICE9IE5VTEwpCisgICAgdGVt cGwgPSBzeW1maWxlX29iamZpbGUtPm9iZmQ7CisgIGVsc2UKKyAgICB0ZW1w bCA9IGV4ZWNfYmZkOworCisgIHJldHVybiB0ZW1wbDsKK30KIAogc3RhdGlj IHZvaWQKIGFkZF9zeW1ib2xfZmlsZV9mcm9tX21lbW9yeV9jb21tYW5kIChj aGFyICphcmdzLCBpbnQgZnJvbV90dHkpCkBAIC0xMjksMTAgKzIzNCw3IEBA IGFkZF9zeW1ib2xfZmlsZV9mcm9tX21lbW9yeV9jb21tYW5kIChjaGEKICAg YWRkciA9IHBhcnNlX2FuZF9ldmFsX2FkZHJlc3MgKGFyZ3MpOwogCiAgIC8q IFdlIG5lZWQgc29tZSByZXByZXNlbnRhdGl2ZSBiZmQgdG8ga25vdyB0aGUg dGFyZ2V0IHdlIGFyZSBsb29raW5nIGF0LiAgKi8KLSAgaWYgKHN5bWZpbGVf b2JqZmlsZSAhPSBOVUxMKQotICAgIHRlbXBsID0gc3ltZmlsZV9vYmpmaWxl LT5vYmZkOwotICBlbHNlCi0gICAgdGVtcGwgPSBleGVjX2JmZDsKKyAgdGVt cGwgPSBzeW1ib2xfZmlsZV9ndWVzc190ZW1wbGF0ZSAoKTsKICAgaWYgKHRl bXBsID09IE5VTEwpCiAgICAgZXJyb3IgKF8oIlwKIE11c3QgdXNlIHN5bWJv bC1maWxlIG9yIGV4ZWMtZmlsZSBiZWZvcmUgYWRkLXN5bWJvbC1maWxlLWZy b20tbWVtb3J5LiIpKTsKSW5kZXg6IGdkYi9zeW1maWxlLmgKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9zeW1m aWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTEKZGlmZiAtdSAtcCAt dSAtcjEuNTEgc3ltZmlsZS5oCi0tLSBnZGIvc3ltZmlsZS5oCTE2IEp1biAy MDA5IDE4OjQ5OjI1IC0wMDAwCTEuNTEKKysrIGdkYi9zeW1maWxlLmgJMjQg SnVsIDIwMDkgMTY6NDU6MDggLTAwMDAKQEAgLTQwOCw0ICs0MDgsMTcgQEAg ZXh0ZXJuIHZvaWQgZWxmbWRlYnVnX2J1aWxkX3BzeW10YWJzIChzdAogCQkJ CSAgICAgIGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwICosCiAJCQkJ ICAgICAgYXNlY3Rpb24gKik7CiAKKy8qIEZyb20gc3ltZmlsZS1tZW0uYyAq LworCitleHRlcm4gc3RydWN0IGJmZCAqc3ltYm9sX2ZpbGVfZ3Vlc3NfdGVt cGxhdGUgKHZvaWQpOworCitleHRlcm4gc3RydWN0IG9iamZpbGUgKnN5bWJv bF9maWxlX2FkZF9mcm9tX21lbW9yeSAoc3RydWN0IGJmZCAqdGVtcGwsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ09SRV9BRERSIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZnJvbV90dHkpOworCitleHRlcm4gc3RydWN0IG9iamZpbGUg KnN5bWJvbF9maWxlX2FkZF9mcm9tX2xvY2FsX21lbW9yeSAoc3RydWN0IGJm ZCAqdGVtcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmZkX2J5dGUgKmJ1ZmZlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiZmRfc2l6ZV90eXBlIHNpemUpOworCiAjZW5kaWYgLyog IWRlZmluZWQoU1lNRklMRV9IKSAqLwo= --00163646bcb21ac646046f765b2d--