From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10082 invoked by alias); 8 Jan 2013 01:41:37 -0000 Received: (qmail 10072 invoked by uid 22791); 8 Jan 2013 01:41:34 -0000 X-SWARE-Spam-Status: No, hits=-4.5 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP,TW_EG,TW_RV,TW_TR,TW_XZ X-Spam-Check-By: sourceware.org Received: from mail-oa0-f48.google.com (HELO mail-oa0-f48.google.com) (209.85.219.48) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 08 Jan 2013 01:41:21 +0000 Received: by mail-oa0-f48.google.com with SMTP id h2so18699344oag.21 for ; Mon, 07 Jan 2013 17:41:20 -0800 (PST) Received: by 10.60.32.147 with SMTP id j19mr35022101oei.68.1357609280871; Mon, 07 Jan 2013 17:41:20 -0800 (PST) MIME-Version: 1.0 Received: by 10.60.84.5 with HTTP; Mon, 7 Jan 2013 17:40:39 -0800 (PST) In-Reply-To: <87hamy0x0q.fsf@fleche.redhat.com> References: <50AC3217.6040608@mentor.com> <878v9k5g46.fsf@fleche.redhat.com> <87hamy0x0q.fsf@fleche.redhat.com> From: Hui Zhu Date: Tue, 08 Jan 2013 01:41:00 -0000 Message-ID: Subject: Re: [PATCH] Add CTF support to GDB [1/4] Add "-ctf" to tsave command To: Tom Tromey Cc: Hui Zhu , gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=e89a8fb1f506ee1c2704d2bd0abc 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/msg00121.txt.bz2 --e89a8fb1f506ee1c2704d2bd0abc Content-Type: text/plain; charset=ISO-8859-1 Content-length: 6371 Hi Tom, Thanks for your review. On Fri, Jan 4, 2013 at 5:36 AM, Tom Tromey wrote: >>>>>> "Hui" == Hui Zhu writes: > > Hui> +struct ctf_save_collect_s > Hui> +{ > Hui> + struct ctf_save_collect_s *next; > Hui> + char *str; > Hui> + char *ctf_str; > Hui> + int align_size; > Hui> + struct expression *expr; > Hui> + struct type *type; > Hui> + int is_ret; > Hui> +}; > >>> Like Hafiz said -- comments would be nice. > > Hui> I added some comments in the new patches. > > I looked at the new patches and did not see comments. For example, I > looked at this struct I quoted above. > > Every new structure, field, and function ought to have a comment. OK. I added comments for them in the new patch. > > > Hui> + case TYPE_CODE_ARRAY: > Hui> + for (; TYPE_CODE (type) == TYPE_CODE_ARRAY; > Hui> + type = TYPE_TARGET_TYPE (type)) > Hui> + ; > > Tom> You probably want some check_typedef calls in there. > > Hui> Because typedef will be handle as a type in this part, so this part > Hui> doesn't need check_typedef. > > That seems peculiar to me, but I don't really know CTF. > In this case you need a comment, since the result will be non-obvious to > gdb developers. > > Tom> check_typedef; though if your intent is to peel just a single layer, > Tom> then it is a bit trickier -- I think the best you can do is always call > Tom> it, then use TYPE_TARGET_TYPE if it is non-NULL or the result of > Tom> check_typedef otherwise. > > Hui> If use check_typedef, this part will generate the define that > Hui> different with the type descriptor of the code. > > You need to call check_typedef before you can even examine > TYPE_TARGET_TYPE of a typedef. This is what I meant by using it before > using TYPE_TARGET_TYPE. Otherwise with stubs I think you will see > crashes -- check_typedef is what sets this field. > > If you then use TYPE_TARGET_TYPE and get NULL, you ought to instead use > the result of check_typedef. This means the stub had to resolve to a > typedef in a different objfile. I change it to following part: case TYPE_CODE_ARRAY: /* This part just to get the real name of this array. This part should keep typedef if it can. */ for (; TYPE_CODE (type) == TYPE_CODE_ARRAY; type = TYPE_TARGET_TYPE (type) ? TYPE_TARGET_TYPE (type) : check_typedef (type)) ; > > Hui> If use TYPE_TARGET_TYPE, it will generate following metadata: > Hui> typedef char test_t1; > Hui> typedef test_t1 test_t2; > Hui> typedef test_t2 test_t3; > > I suppose there should be a test case doing this. OK. I will write a test for all this function. > > Hui> + case TYPE_CODE_PTR: > Hui> + align_size = TYPE_LENGTH (type); > Hui> + break; > > Tom> Surely the alignment rules are ABI dependent. > Tom> I would guess that what you have will work in many cases, but definitely > Tom> not all of them. > > Hui> All the type will be handle and record in function > Hui> ctf_save_type_check_and_write. > Hui> The size align will be handle in this function too. > > I don't think this really addresses the issue. > Not all platforms use the alignment rules currently coded in > ctf_save_type_check_and_write. But maybe it doesn't matter. > > Hui> + frame = get_current_frame (); > Hui> + if (!frame) > Hui> + error (_("get current frame fail")); > Hui> + frame = get_prev_frame (frame); > Hui> + if (!frame) > Hui> + error (_("get prev frame fail")); > Tom> > Tom> These messages could be improved. > > Actually, I don't think get_current_frame can return NULL, can it? > > For the second error, how about "could not find previous frame"? Fixed. > > Hui> + warning (_("\ > Hui> +Not save \"%s\" of tracepoint %d to ctf file because get its > Hui> value fail: %s"), > Hui> + str, tps->tp->base.number, e.message); > Tom> > Tom> Likewise. > > Hui> Could you help me with this part? :) > > How about "error saving tracepoint %d to CTF file %s: %s". It is more better. I updated them all. > > Tom> Although, this approach just seems weird, since it seems like you > Tom> already have the symbol and you want its value; constructing and parsing > Tom> an expression to get this is very roundabout. > Tom> > Tom> I'm not sure I really understand the goal here; but the parsing approach > Tom> is particularly fragile if you have shadowing. > > Hui> Function ctf_save_collect_get will parse the collect string and add > Hui> them to struct. > Hui> Each tracepoint will call this function just once. > > Ok, I don't know the answer here. I am sorry that this part is not very clear. So I update the comments of ctf_save_collect_get to: /* Get var that want to collect from STR and put them to TPS->collect. This function will not be call when GDB add a new TP. */ static void ctf_save_collect_get (struct ctf_save_s *tcsp, struct ctf_save_tp_s *tps, char *str) How about this? > > Tom> Hmm, a lot of this code looks like code from tracepoint.c. > Tom> I think it would be better to share the code if that is possible. > > Hui> I tried to share code with function add_local_symbols. But it is not > Hui> a big function and use different way to get block. > > I wonder why, and whether this means that the different ways of saving > will in fact write out different data. I added function add_local_symbols_1 for that. > > Hui> + if (collect->expr) > Hui> + free_current_contents (&collect->expr); > > Tom> Why free_current_contents here? > Tom> That seems weird. > > Hui> If this collect is $_ret, it will not have collect->expr. Or maybe > Hui> this collect will be free because when setup this collect get > Hui> error. So check it before free it. > > You can just write xfree (collect->expr). > You don't need a NULL check here. > This applies to all those xfree calls. > OK. Fixed. I post a new version. Please help me review it. Thanks, Hui 2013-01-08 Hui Zhu * Makefile.in (REMOTE_OBS): Add ctf.o. (SFILES): Add ctf.c. (HFILES_NO_SRCDIR): Add ctf.h. * ctf.c, ctf.h: New files. * mi/mi-main.c (ctf.h): New include. (mi_cmd_trace_save): Add "-ctf". * tracepoint.c (ctf.h): New include. (collect_pseudocommand): Remove static. (trace_save_command): Add "-ctf". (_initialize_tracepoint): Ditto. * tracepoint.h (stack.h): New include. (collect_pseudocommand): Add extern. --e89a8fb1f506ee1c2704d2bd0abc Content-Type: text/plain; charset=US-ASCII; name="tsave-ctf.txt" Content-Disposition: attachment; filename="tsave-ctf.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hbodhcuj0 Content-length: 56015 LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTUwOCw3 ICs1MDgsNyBAQCBTRVJfSEFSRFdJUkUgPSBAU0VSX0hBUkRXSVJFQAogIyBU aGUgYHJlbW90ZScgZGVidWdnaW5nIHRhcmdldCBpcyBzdXBwb3J0ZWQgZm9y IG1vc3QgYXJjaGl0ZWN0dXJlcywKICMgYnV0IG5vdCBhbGwgKGUuZy4gOTYw KQogUkVNT1RFX09CUyA9IHJlbW90ZS5vIGRjYWNoZS5vIHRyYWNlcG9pbnQu byBheC1nZW5lcmFsLm8gYXgtZ2RiLm8gcmVtb3RlLWZpbGVpby5vIFwKLQly ZW1vdGUtbm90aWYubworCXJlbW90ZS1ub3RpZi5vIGN0Zi5vCiAKICMgVGhp cyBpcyByZW1vdGUtc2ltLm8gaWYgYSBzaW11bGF0b3IgaXMgdG8gYmUgbGlu a2VkIGluLgogU0lNX09CUyA9IEBTSU1fT0JTQApAQCAtNzU1LDcgKzc1NSw3 IEBAIFNGSUxFUyA9IGFkYS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHIK IAlyZWdzZXQuYyBzb2wtdGhyZWFkLmMgd2luZG93cy10ZXJtY2FwLmMgXAog CWNvbW1vbi9nZGJfdmVjcy5jIGNvbW1vbi9jb21tb24tdXRpbHMuYyBjb21t b24veG1sLXV0aWxzLmMgXAogCWNvbW1vbi9wdGlkLmMgY29tbW9uL2J1ZmZl ci5jIGdkYi1kbGZjbi5jIGNvbW1vbi9hZ2VudC5jIFwKLQljb21tb24vZm9y bWF0LmMKKwljb21tb24vZm9ybWF0LmMgY3RmLmMKIAogTElOVEZJTEVTID0g JChTRklMRVMpICQoWVlGSUxFUykgJChDT05GSUdfU1JDUykgaW5pdC5jCiAK QEAgLTgzMSw3ICs4MzEsNyBAQCBnbnVsaWIvaW1wb3J0L3N0ZGRlZi5pbi5o IGdudWxpYi9pbXBvcnQvCiBjb21tb24vY29tbW9uLXV0aWxzLmggY29tbW9u L3htbC11dGlscy5oIGNvbW1vbi9idWZmZXIuaCBjb21tb24vcHRpZC5oIFwK IGNvbW1vbi9mb3JtYXQuaCBjb21tb24vaG9zdC1kZWZzLmggdXRpbHMuaCBj b21tb24vcXVldWUuaCBcCiBjb21tb24vbGludXgtb3NkYXRhLmggZ2RiLWRs ZmNuLmggYXV0by1sb2FkLmggcHJvYmUuaCBzdGFwLXByb2JlLmggXAotZ2Ri X2JmZC5oIHNwYXJjLXJhdmVuc2Nhci10aHJlYWQuaCBwcGMtcmF2ZW5zY2Fy LXRocmVhZC5oCitnZGJfYmZkLmggc3BhcmMtcmF2ZW5zY2FyLXRocmVhZC5o IHBwYy1yYXZlbnNjYXItdGhyZWFkLmggY3RmLmgKIAogIyBIZWFkZXIgZmls ZXMgdGhhdCBhbHJlYWR5IGhhdmUgc3JjZGlyIGluIHRoZW0sIG9yIHdoaWNo IGFyZSBpbiBvYmpkaXIuCiAKLS0tIC9kZXYvbnVsbAorKysgYi9jdGYuYwpA QCAtMCwwICsxLDEyODEgQEAKKy8qIENURiBmb3JtYXQgc3VwcG9ydC4KKwor ICAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgImRl ZnMuaCIKKyNpbmNsdWRlICJjdGYuaCIKKyNpbmNsdWRlICJ0cmFjZXBvaW50 LmgiCisjaW5jbHVkZSAicmVnY2FjaGUuaCIKKyNpbmNsdWRlICJnZGJjbWQu aCIKKyNpbmNsdWRlICJleGNlcHRpb25zLmgiCisjaW5jbHVkZSAic3RhY2su aCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKKy8qIEZvbGxvd2luZyBwYXJ0 IGlzIGZvciB0c2F2ZS4gICovCisKKyNkZWZpbmUgQ1RGX01BR0lDCQkweEMx RkMxRkMxCisjZGVmaW5lIENURl9TQVZFX01BSk9SCQkxCisjZGVmaW5lIENU Rl9TQVZFX01JTk9SCQk4CisKKyNkZWZpbmUgQ1RGX01FVEFEQVRBX05BTUUJ Im1ldGFkYXRhIgorI2RlZmluZSBDVEZfREFUQVNUUkVBTV9OQU1FCSJkYXRh c3RyZWFtIgorCisjZGVmaW5lIENURl9QQUNLRVRfU0laRQkJNDA5NgorCisj ZGVmaW5lIEFMSUdOX1NJWkUoc2l6ZSwgYWxpZ24pIFwKKwkoKCgoYWxpZ24p ICsgKHNpemUpIC0gMSkgJiAofigoYWxpZ24pIC0gMSkpKSAtIChzaXplKSkK KworLyogVGhlIGVudHJ5IG9mIGNvbGxlY3QgbGlzdCBvZiBhIFRQLiAgKi8K Kworc3RydWN0IGN0Zl9zYXZlX2NvbGxlY3RfcworeworICBzdHJ1Y3QgY3Rm X3NhdmVfY29sbGVjdF9zICpuZXh0OworCisgIC8qIFBvaW50IHRoZSBvcmln aW5hbCBjb2xsZWN0IHN0cmluZy4gICovCisKKyAgY2hhciAqc3RyOworCisg IC8qIFBvaW50IHN0cmluZyB0aGUgY29udmVydCBmcm9tIFNUUiB0byB0aGUg Zm9ybWF0CisgICAgIHRoYXQgY2FuIHNhdmUgdG8gQ1RGLiAqLworCisgIGNo YXIgKmN0Zl9zdHI7CisKKyAgLyogQWxpZ24gc2l6ZSBvZiB0aGlzIGNvbGxl Y3QuICAqLworCisgIGludCBhbGlnbl9zaXplOworCisgIC8qIFRoZSBleHBy ZXNzaW9uIHRoYXQgZ2V0IGZyb20gU1RSLiAqLworCisgIHN0cnVjdCBleHBy ZXNzaW9uICpleHByOworCisgIC8qIFRoZSB0eXBlIG9mIHRoaXMgY29sbGVj dC4gICovCisKKyAgc3RydWN0IHR5cGUgKnR5cGU7CisKKyAgLyogSWYgdHJ1 ZSwgdGhpcyBjb2xsZWN0IGlzICRfcmV0LiAgKi8KKworICBpbnQgaXNfcmV0 OworfTsKKworLyogVGhlIGVudHJ5IG9mIHRyYWNlcG9pbnQgbGlzdCB0aGF0 IHdpbGwgc2F2ZSB0byBDVEYuICAqLworCitzdHJ1Y3QgY3RmX3NhdmVfdHBf cworeworICBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqbmV4dDsKKworICBzdHJ1 Y3QgdHJhY2Vwb2ludCAqdHA7CisKKyAgLyogSWYgdHJ1ZSwgdGhpcyBpcyB0 aGUgc3RlcCBjb2xsZWN0IG9mIHRoaXMgVFAuCisgICAgIERpdmlkZSBUUCB0 byBub24tc3RlcCBjb2xsZWN0IGFuZCBzdGVwIGNvbGxlY3QKKyAgICAgYmVj YXVzZSB0aGV5IGNvbGxlY3QgZGlmZmVyZW50IHZhbHVlLiAgKi8KKworICBp bnQgc3RlcHBpbmdfZnJhbWU7CisKKyAgLyogVGhlIGNvbGxlY3QgbGlzdCBm b3IgdGhpcyBUUC4gICovCisKKyAgc3RydWN0IGN0Zl9zYXZlX2NvbGxlY3Rf cyAqY29sbGVjdDsKKworICAvKiBFYWNoIHRyYWNlZnJhbWUgZW50cnkgb2Yg YSB0cmFjZXBvaW50IHdpbGwgc2F2ZSBhcyBhIGRhdGEgZm9ybWF0CisgICAg IGxpa2UgYSBzdHJ1Y3QuCisgICAgIFRoaXMgaXMgdGhlIGFsaWduIHNpemUg b2YgdGhpcyBzdHJ1Y3QuICAqLworCisgIGludCBhbGlnbl9zaXplOworCisg IC8qIElmIHRydWUsIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0IGlzIHZhcmlh YmxlLiAgKi8KKworICBpbnQgaXNfdmFyaWFibGVfbGVuZ3RoOworCisgIC8q IElmIHRydWUsIGFsbCB0aGUgdHJhY2VmcmFtZSBlbnRyeSBvZiB0aGlzIFRQ IHdpbGwgbm90IHNhdmUgdG8gQ1RGLgorICAgICBBZGQgYSBmbGFnIGluc3Rl YWQgb2YganVzdCByZW1vdmUgdGhpcyBzdHJ1Y3QgYmVjYXVzZSBHREIganVz dCBjYW4KKyAgICAgZ2V0IHRyYWNlcG9pbnQgaW5mb3JtYXRpb24gdGhyb3Vn aCB0cmFjZWZyYW1lIGVudHJ5LgorICAgICBJZiBqdXN0IHJlbW92ZSB0aGlz IHN0cnVjdCwgR0RCIHdpbGwgYWRkIGEgbmV3IHN0cnVjdCB3aGVuIEdEQiBn ZXQKKyAgICAgYW5vdGhlciB0cmFjZWZyYW1lIG9mIHRoaXMgVFAuCisgICAg IFVzZSBhIGZsYWcsIHdoZW4gR0RCIGdldCBhbm90aGVyIHRyYWNlZnJhbWUg b2YgdGhpcyBUUCwgR0RCIHdpbGwKKyAgICAga25vdyB0aGlzIHRyYWNlZnJh bWUgbmVlZCB0byBiZSBkcm9wcGVkIHdoZW4gaXQgZ2V0IGl0IHRocm91Z2gK KyAgICAgdGhpcyBmbGFnLiAgKi8KKworICBpbnQgaXNfZHJvcHBlZDsKK307 CisKKy8qIFRoZSBlbnRyeSBvZiB0eXBlIGxpc3QgdGhhdCB3aWxsIHNhdmUg dG8gQ1RGLiAgKi8KKworc3RydWN0IGN0Zl9zYXZlX3R5cGVfcworeworICBz dHJ1Y3QgY3RmX3NhdmVfdHlwZV9zICpuZXh0OworCisgIHN0cnVjdCB0eXBl ICp0eXBlOworfTsKKworLyogVGhlIGRhdGEgc3RydWN0IGZvciBDVEZfU0FW RS4gICovCisKK3N0cnVjdCBjdGZfc2F2ZV9zCit7CisgIEZJTEUgKm1ldGFk YXRhX2ZkOworICBGSUxFICpkYXRhc3RyZWFtX2ZkOworCisgIC8qIFRoaXMg aXMgdGhlIGNvbnRlbnQgc2l6ZSBvZiBjdXJyZW50IHBhY2tldC4gICovCisg IHNpemVfdCBjb250ZW50X3NpemU7CisKKyAgLyogVGhpcyBpcyB0aGUgYmVn aW4gb2Zmc2V0IG9mIGN1cnJlbnQgcGFja2V0LiAgKi8KKyAgbG9uZyBwYWNr ZXRfYmVnaW47CisKKyAgLyogSWYgdHJ1ZSwgbmVlZCBjaGVjayBpZiBjb250 ZW50X3NpemUgYmlnZ2VyIHRoYW4gQ1RGX1BBQ0tFVF9TSVpFLiAgKi8KKyAg aW50IGNoZWNrX3NpemU7CisKKyAgLyogVGhpcyBpcyB0aGUgY29udGVudCBz aXplIG9mIGN1cnJlbnQgcGFja2V0IGFuZCBldmVudCB0aGF0IGlzCisgICAg IGJlaW5nIHdyaXR0ZW4gdG8gZmlsZS4KKyAgICAgQ2hlY2sgc2l6ZSB1c2Ug aXQuICAqLworICBzaXplX3QgY3VycmVudF9jb250ZW50X3NpemU7CisKKyAg LyogU2F2ZSB0aGUgbnVtYmVyIG9mIHRyYWNlIGZyYW1lIGJlZm9yZSBjYWxs IGN0Zl9zYXZlLgorICAgICBTZXQgaXQgYmFjayB3aGVuIHJldHVybiBjdGZf c2F2ZS4gICovCisgIGludCBvbGRfdHJhY2VmcmFtZV9udW07CisKKyAgLyog VHJhY2Vwb2ludCBsaXN0LiAgKi8KKyAgc3RydWN0IGN0Zl9zYXZlX3RwX3Mg KnRwOworCisgIC8qIFR5cGUgbGlzdC4gICovCisgIHN0cnVjdCBjdGZfc2F2 ZV90eXBlX3MgKnR5cGU7CisKKyAgY29uc3QgY2hhciAqdGFiOworfTsKKwor c3RhdGljIHZvaWQKK2N0Zl9zYXZlX2Z3cml0ZSAoRklMRSAqZmQsIGNvbnN0 IGdkYl9ieXRlICpidWYsIHNpemVfdCBzaXplKQoreworICBpZiAoZndyaXRl IChidWYsIHNpemUsIDEsIGZkKSAhPSAxKQorICAgIGVycm9yIChfKCJVbmFi bGUgdG8gd3JpdGUgZmlsZSBmb3Igc2F2aW5nIHRyYWNlIGRhdGEgKCVzKSIp LAorCSAgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7Cit9CisKK3N0YXRpYyB2 b2lkCitjdGZfc2F2ZV9md3JpdGVfZm9ybWF0XzEgKEZJTEUgKmZkLCBjb25z dCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKK3sKKyAgY2hhciAqbGlu ZWJ1ZmZlcjsKKyAgc3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwczsKKwor ICBsaW5lYnVmZmVyID0geHN0cnZwcmludGYgKGZvcm1hdCwgYXJncyk7Cisg IG9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAoeGZyZWUsIGxpbmVidWZm ZXIpOworICBjdGZfc2F2ZV9md3JpdGUgKGZkLCBsaW5lYnVmZmVyLCBzdHJs ZW4gKGxpbmVidWZmZXIpKTsKKyAgZG9fY2xlYW51cHMgKG9sZF9jbGVhbnVw cyk7Cit9CisKKy8qIFdyaXRlIGRhdGEgaW4gRk9STUFUIHRvIEZELiAgKi8K Kworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKEZJTEUg KmZkLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgdmFfbGlzdCBh cmdzOworCisgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICBjdGZfc2F2 ZV9md3JpdGVfZm9ybWF0XzEgKGZkLCBmb3JtYXQsIGFyZ3MpOworICB2YV9l bmQgKGFyZ3MpOworfQorCisvKiBXcml0ZSBCVUYgdGhhdCBzaXplIGlzIFNJ WkUgdG8gZGF0YXN0cmVhbSBmaWxlLiAgKi8KKworc3RhdGljIGludAorY3Rm X3NhdmVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLCBjb25zdCBn ZGJfYnl0ZSAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgaWYgKHRjc3AtPmNo ZWNrX3NpemUpCisgICAgeworICAgICAgaWYgKHRjc3AtPmN1cnJlbnRfY29u dGVudF9zaXplICsgc2l6ZSA+IENURl9QQUNLRVRfU0laRSkKKyAgICAgICAg cmV0dXJuIC0xOworICAgIH0KKworICBjdGZfc2F2ZV9md3JpdGUgKHRjc3At PmRhdGFzdHJlYW1fZmQsIGJ1Ziwgc2l6ZSk7CisKKyAgdGNzcC0+Y3VycmVu dF9jb250ZW50X3NpemUgKz0gc2l6ZTsKKworICByZXR1cm4gMDsKK30KKwor LyogU2V0IGRhdGFzdHJlYW0gZmlsZSBwb3NpdGlvbiBpbmRpY2F0b3IgYWNj b3JkaW5nIHRvIE9GRlNFVAorICAgYW5kIFdIRU5DRS4gICovCisKK3N0YXRp YyBpbnQKK2N0Zl9zYXZlX2ZzZWVrIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNz cCwgbG9uZyBvZmZzZXQsIGludCB3aGVuY2UpCit7CisgIGlmICh3aGVuY2Ug PT0gU0VFS19DVVIgJiYgdGNzcC0+Y2hlY2tfc2l6ZSkKKyAgICB7CisgICAg ICBpZiAodGNzcC0+Y3VycmVudF9jb250ZW50X3NpemUgKyBvZmZzZXQgPiBD VEZfUEFDS0VUX1NJWkUpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisK KyAgaWYgKGZzZWVrICh0Y3NwLT5kYXRhc3RyZWFtX2ZkLCBvZmZzZXQsIHdo ZW5jZSkpCisgICAgZXJyb3IgKF8oIlVuYWJsZSB0byBzZWVrIGZpbGUgZm9y IHNhdmluZyB0cmFjZSBkYXRhICglcykiKSwKKwkgICBzYWZlX3N0cmVycm9y IChlcnJubykpOworCisgIGlmICh3aGVuY2UgPT0gU0VFS19DVVIpCisgICAg dGNzcC0+Y3VycmVudF9jb250ZW50X3NpemUgKz0gb2Zmc2V0OworCisgIHJl dHVybiAwOworfQorCisvKiBBbGlnbmVkIEFMSUdOX1NJWkUgd3JpdGUgQlVG IHRoYXQgc2l6ZSBpcyBTSVpFCisgICB0byBkYXRhc3RyZWFtIGZpbGUuICAq LworCitzdGF0aWMgaW50CitjdGZfc2F2ZV9hbGlnbl93cml0ZSAoc3RydWN0 IGN0Zl9zYXZlX3MgKnRjc3AsIGNvbnN0IGdkYl9ieXRlICpidWYsCisJCSAg ICAgIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25fc2l6ZSkKK3sKKyAgaWYg KGN0Zl9zYXZlX2ZzZWVrICh0Y3NwLAorCQkgICAgICBBTElHTl9TSVpFICh0 Y3NwLT5jdXJyZW50X2NvbnRlbnRfc2l6ZSwgYWxpZ25fc2l6ZSksCisJCSAg ICAgIFNFRUtfQ1VSKSkKKyAgICByZXR1cm4gLTE7CisKKyAgaWYgKGN0Zl9z YXZlX3dyaXRlICh0Y3NwLCBidWYsIHNpemUpKQorICAgIHJldHVybiAtMTsK KworICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3RmX3NhdmVfdHlw ZV9kZWZpbmVfd3JpdGUgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwLAorCQkJ CQlzdHJ1Y3QgdHlwZSAqdHlwZSk7CisKKy8qIFdyaXRlIHRoZSB0eXBlIHBh cnQgb2YgYSB2YXIgZGVmaW5lIHRvIENURiBtZXRhZGF0YSBmaWxlLiAgKi8K Kworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3R5cGVfbmFtZV93cml0ZSAoc3Ry dWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCB0eXBlICp0eXBlKQorewor ICBzd2l0Y2ggKFRZUEVfQ09ERSAodHlwZSkpCisgICAgeworICAgIGNhc2Ug VFlQRV9DT0RFX0FSUkFZOgorICAgICAgLyogVGhpcyBwYXJ0IGp1c3QgdG8g Z2V0IHRoZSByZWFsIG5hbWUgb2YgdGhpcyBhcnJheS4KKyAgICAgICAgIFRo aXMgcGFydCBzaG91bGQga2VlcCB0eXBlZGVmIGlmIGl0IGNhbi4gICovCisg ICAgICBmb3IgKDsgVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NPREVfQVJS QVk7CisJICAgdHlwZSA9IFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUpID8gVFlQ RV9UQVJHRVRfVFlQRSAodHlwZSkKKwkJCQkJICA6IGNoZWNrX3R5cGVkZWYg KHR5cGUpKQorCTsKKyAgICAgIGlmIChUWVBFX05BTUUgKHR5cGUpKQorICAg ICAgICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9m ZCwgIiVzIiwgVFlQRV9OQU1FICh0eXBlKSk7CisgICAgICBlbHNlCisJY3Rm X3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUgKHRjc3AsIHR5cGUpOworICAgICAg YnJlYWs7CisKKyAgICBjYXNlIFRZUEVfQ09ERV9QVFI6CisgICAgICBpZiAo VFlQRV9MRU5HVEggKHR5cGUpID09IDgpCisJY3RmX3NhdmVfZndyaXRlX2Zv cm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJ1aW50NjRfdCIpOworICAgICAg ZWxzZQorCWN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRh X2ZkLCAidWludDMyX3QiKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBU WVBFX0NPREVfU1RSVUNUOgorICAgIGNhc2UgVFlQRV9DT0RFX0VOVU06Cisg ICAgICBpZiAoVFlQRV9UQUdfTkFNRSAodHlwZSkpCisgICAgICAgIGN0Zl9z YXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiJXMgJXMi LAorCQkJCVRZUEVfQ09ERSAodHlwZSkgPT0gVFlQRV9DT0RFX1NUUlVDVCA/ CisJCQkJInN0cnVjdCIgOiAiZW51bSIsCisJCQkJVFlQRV9UQUdfTkFNRSAo dHlwZSkpOworICAgICAgZWxzZQorCWN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dy aXRlICh0Y3NwLCB0eXBlKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBU WVBFX0NPREVfVU5JT046CisgICAgICB7CisJaW50IGksIGJpZ2dlc3RfaWQs IGJpZ2dlc3Rfc2l6ZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFlQRV9O RklFTERTICh0eXBlKTsgKytpKQorCSAgeworCSAgICBpZiAoYmlnZ2VzdF9z aXplIDwgVFlQRV9MRU5HVEggKFRZUEVfRklFTERfVFlQRSAodHlwZSwgaSkp KQorCSAgICAgIHsKKwkJYmlnZ2VzdF9zaXplID0gVFlQRV9MRU5HVEggKFRZ UEVfRklFTERfVFlQRSAodHlwZSwgaSkpOworCQliaWdnZXN0X2lkID0gaTsK KwkgICAgICB9CisJICB9CisJY3RmX3NhdmVfdHlwZV9uYW1lX3dyaXRlICh0 Y3NwLCBUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIGJpZ2dlc3RfaWQpKTsKKwli cmVhazsKKyAgICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICBjdGZfc2F2 ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIiVzIiwgVFlQ RV9OQU1FICh0eXBlKSk7CisgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8q IFdyaXRlIHRoZSBzaXplIHBhcnQgb2YgYSB2YXIgZGVmaW5lIHRvIENURiBt ZXRhZGF0YSBmaWxlLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3R5 cGVfc2l6ZV93cml0ZSAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVj dCB0eXBlICp0eXBlKQoreworICBpZiAoVFlQRV9DT0RFICh0eXBlKSA9PSBU WVBFX0NPREVfQVJSQVkpCisgICAgeworICAgICAgLyogVGhpcyBwYXJ0IGp1 c3QgdG8gZ2V0IHRoZSByZWFsIG5hbWUgb2YgdGhpcyBhcnJheS4KKyAgICAg ICAgIFRoaXMgcGFydCBzaG91bGQga2VlcCB0eXBlZGVmIGlmIGl0IGNhbi4g ICovCisgICAgICBmb3IgKDsgVFlQRV9DT0RFICh0eXBlKSA9PSBUWVBFX0NP REVfQVJSQVk7CisJICAgdHlwZSA9IFRZUEVfVEFSR0VUX1RZUEUgKHR5cGUp ID8gVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkKKwkJCQkJICA6IGNoZWNrX3R5 cGVkZWYgKHR5cGUpKQorCWN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3At Pm1ldGFkYXRhX2ZkLCAiWyVkXSIsCisJCQkJVFlQRV9MRU5HVEggKHR5cGUp IC8KKwkJCQlUWVBFX0xFTkdUSCAoVFlQRV9UQVJHRVRfVFlQRSAodHlwZSkp KTsKKyAgICB9Cit9CisKKy8qIFdyaXRlIGEgdmFyIGRlZmluZSB0byBDVEYg bWV0YWRhdGEgZmlsZS4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV92 YXJfZGVmaW5lX3dyaXRlIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3Ry dWN0IHR5cGUgKnR5cGUsCisJCQkgICBjb25zdCBjaGFyICpuYW1lKQorewor ICBjdGZfc2F2ZV90eXBlX25hbWVfd3JpdGUgKHRjc3AsIHR5cGUpOworICBj dGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIiAl cyIsIG5hbWUpOworICBjdGZfc2F2ZV90eXBlX3NpemVfd3JpdGUgKHRjc3As IHR5cGUpOworICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRh ZGF0YV9mZCwgIjtcbiIpOworfQorCisvKiBXcml0ZSBUWVBFIHRvIFRDU1At Pm1ldGFkYXRhX2ZkLiAgKi8KKworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX3R5 cGVfZGVmaW5lX3dyaXRlIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3Ry dWN0IHR5cGUgKnR5cGUpCit7CisgIHN0cnVjdCBjdGZfc2F2ZV90eXBlX3Mg KnQ7CisKKyAgZm9yICh0ID0gdGNzcC0+dHlwZTsgdDsgdCA9IHQtPm5leHQp CisgICAgeworICAgICAgaWYgKHQtPnR5cGUgPT0gdHlwZSkKKwlyZXR1cm47 CisgICAgfQorCisgIHQgPSAoc3RydWN0IGN0Zl9zYXZlX3R5cGVfcyAqKSB4 emFsbG9jIChzaXplb2YgKCp0KSk7CisgIHQtPnR5cGUgPSB0eXBlOworCisg IHQtPm5leHQgPSB0Y3NwLT50eXBlOworICB0Y3NwLT50eXBlID0gdDsKKwor ICAvKiBJZ25vcmUgdHlwZSB1aW50MzJfdCBhbmQgdWludDY0X3QgYmVjYXVz ZSB0aGV5IGhhdmUgd3JpdHRlbgorICAgICBpbiBmdW5jdGlvbiBjdGZfc2F2 ZV9tZXRhZGF0YV9oZWFkZXIuICAqLworICBpZiAoVFlQRV9OQU1FICh0eXBl KSAmJiAoc3RyY21wIChUWVBFX05BTUUgKHR5cGUpLCAidWludDMyX3QiKSA9 PSAwCisJCQkgICB8fCBzdHJjbXAgKFRZUEVfTkFNRSAodHlwZSksICJ1aW50 NjRfdCIpID09IDApKQorICAgIHJldHVybjsKKworICBzd2l0Y2ggKFRZUEVf Q09ERSAodHlwZSkpCisgICAgeworICAgICAgY2FzZSBUWVBFX0NPREVfVFlQ RURFRjoKKwljdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0 YV9mZCwgInR5cGVkZWYgIik7CisJY3RmX3NhdmVfdmFyX2RlZmluZV93cml0 ZSAodGNzcCwgVFlQRV9UQVJHRVRfVFlQRSAodHlwZSksCisJCQkJICAgVFlQ RV9OQU1FICh0eXBlKSk7CisJYnJlYWs7CisKKyAgICAgIGNhc2UgVFlQRV9D T0RFX0lOVDoKKwljdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRh ZGF0YV9mZCwgIlwKK3R5cGVhbGlhcyBpbnRlZ2VyIHsgc2l6ZSA9ICVkOyBh bGlnbiA9ICVkOyBzaWduZWQgPSAlczsgfSA6PSAlcztcbiIsCisJCQkJVFlQ RV9MRU5HVEggKHR5cGUpICogVEFSR0VUX0NIQVJfQklULAorCQkJCVRZUEVf TEVOR1RIICh0eXBlKSAqIFRBUkdFVF9DSEFSX0JJVCwKKwkJCQkhVFlQRV9V TlNJR05FRCAodHlwZSkgPyAidHJ1ZSIgOiAiZmFsc2UiLAorCQkJCVRZUEVf TkFNRSAodHlwZSkpOworCWJyZWFrOworCisgICAgICBjYXNlIFRZUEVfQ09E RV9TVFJVQ1Q6CisgICAgICBjYXNlIFRZUEVfQ09ERV9FTlVNOgorICAgICAg ICB7CisJICBpbnQgaTsKKwkgIGNoYXIgdGFiWzI1Nl07CisJICBjb25zdCBj aGFyICpvbGRfdGFiOworCisJICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0 Y3NwLT5tZXRhZGF0YV9mZCwgIiVzICVzIHtcbiIsCisJCQkJICBUWVBFX0NP REUgKHR5cGUpID09IFRZUEVfQ09ERV9TVFJVQ1QgPworCQkJCSAgInN0cnVj dCIgOiAiZW51bSIsCisJCQkJICBUWVBFX1RBR19OQU1FICh0eXBlKSA/IFRZ UEVfVEFHX05BTUUgKHR5cGUpCisJCQkJCQkgICAgICAgOiAiIik7CisKKwkg IG9sZF90YWIgPSB0Y3NwLT50YWI7CisJICBzbnByaW50ZiAodGFiLCAyNTYs ICIlc1x0Iiwgb2xkX3RhYik7CisJICB0Y3NwLT50YWIgPSB0YWI7CisJICBm b3IgKGkgPSAwOyBpIDwgVFlQRV9ORklFTERTICh0eXBlKTsgKytpKQorCSAg ICB7CisJICAgICAgaWYgKFRZUEVfQ09ERSAodHlwZSkgPT0gVFlQRV9DT0RF X1NUUlVDVCkKKwkgICAgICAgIHsKKwkJICBjdGZfc2F2ZV9md3JpdGVfZm9y bWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgdGNzcC0+dGFiKTsKKwkJICBjdGZf c2F2ZV92YXJfZGVmaW5lX3dyaXRlICh0Y3NwLCBUWVBFX0ZJRUxEX1RZUEUg KHR5cGUsIGkpLAorCQkJCQkgICAgIFRZUEVfRklFTERfTkFNRSAodHlwZSwg aSkpOworCQl9CisJICAgICAgZWxzZQorCQljdGZfc2F2ZV9md3JpdGVfZm9y bWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgIiVzJXMgPSAlcyxcbiIsCisJCQkJ CXRjc3AtPnRhYiwgVFlQRV9GSUVMRF9OQU1FICh0eXBlLCBpKSwKKwkJCQkJ cGxvbmdlc3QgKFRZUEVfRklFTERfRU5VTVZBTCAodHlwZSwgaSkpKTsKKwkg ICAgfQorCSAgdGNzcC0+dGFiID0gb2xkX3RhYjsKKwkgIGN0Zl9zYXZlX2Z3 cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiJXN9IiwgdGNzcC0+ dGFiKTsKKwkgIGlmIChUWVBFX1RBR19OQU1FICh0eXBlKSkKKwkgICAgY3Rm X3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICI7XG4i KTsKKwkgIGJyZWFrOworCX0KKyAgICB9Cit9CisKKy8qIENoZWNrIGlmIHRo aXMgdHlwZSBpcyBzdXBwb3J0IGJ5IEdEQi4KKyAgIFJldHVybiB0aGUgYWxp Z24gc2l6ZS4gICovCisKK3N0YXRpYyBpbnQKK2N0Zl9zYXZlX3R5cGVfY2hl Y2tfYW5kX3dyaXRlIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCwgc3RydWN0 IHR5cGUgKnR5cGUpCit7CisgIGludCBhbGlnbl9zaXplID0gMDsKKworICBz d2l0Y2ggKFRZUEVfQ09ERSAodHlwZSkpCisgICAgeworICAgICAgY2FzZSBU WVBFX0NPREVfVFlQRURFRjoKKwlhbGlnbl9zaXplID0gY3RmX3NhdmVfdHlw ZV9jaGVja19hbmRfd3JpdGUgKHRjc3AsCisJCQkJCQkgICAgVFlQRV9UQVJH RVRfVFlQRSAodHlwZSkpOworCWlmIChhbGlnbl9zaXplIDwgMCkKKwkgIHJl dHVybiBhbGlnbl9zaXplOworCWN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dyaXRl ICh0Y3NwLCB0eXBlKTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NP REVfQVJSQVk6CisJYWxpZ25fc2l6ZSA9IGN0Zl9zYXZlX3R5cGVfY2hlY2tf YW5kX3dyaXRlICh0Y3NwLAorCQkJCQkJICAgIFRZUEVfVEFSR0VUX1RZUEUg KHR5cGUpKTsKKwlpZiAoYWxpZ25fc2l6ZSA8IDApCisJICByZXR1cm4gYWxp Z25fc2l6ZTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBFX0NPREVfSU5U OgorCWN0Zl9zYXZlX3R5cGVfZGVmaW5lX3dyaXRlICh0Y3NwLCB0eXBlKTsK KwlhbGlnbl9zaXplID0gVFlQRV9MRU5HVEggKHR5cGUpOworCWJyZWFrOwor CisgICAgICBjYXNlIFRZUEVfQ09ERV9QVFI6CisJYWxpZ25fc2l6ZSA9IFRZ UEVfTEVOR1RIICh0eXBlKTsKKwlicmVhazsKKworICAgICAgY2FzZSBUWVBF X0NPREVfU1RSVUNUOgorICAgICAgICB7CisJICBpbnQgaSwgc19hbGlnbl9z aXplOworCisJICBmb3IgKGkgPSAwOyBpIDwgVFlQRV9ORklFTERTICh0eXBl KTsgKytpKQorCSAgICB7CisJICAgICAgc19hbGlnbl9zaXplCisJCSAgPSBj dGZfc2F2ZV90eXBlX2NoZWNrX2FuZF93cml0ZSAodGNzcCwKKwkJCQkJCSAg IFRZUEVfRklFTERfVFlQRSAodHlwZSwgaSkpOworCSAgICAgIGlmIChzX2Fs aWduX3NpemUgPCAwKQorCQlyZXR1cm4gc19hbGlnbl9zaXplOworCisJICAg ICAgaWYgKGFsaWduX3NpemUgPCBzX2FsaWduX3NpemUpCisJCWFsaWduX3Np emUgPSBzX2FsaWduX3NpemU7CisJICAgIH0KKwkgIGlmIChUWVBFX1RBR19O QU1FICh0eXBlKSkKKwkgICAgY3RmX3NhdmVfdHlwZV9kZWZpbmVfd3JpdGUg KHRjc3AsIHR5cGUpOworCSAgYnJlYWs7CisJfQorCisgICAgICBjYXNlIFRZ UEVfQ09ERV9FTlVNOgorCWFsaWduX3NpemUgPSBUWVBFX0xFTkdUSCAodHlw ZSk7CisJaWYgKFRZUEVfVEFHX05BTUUgKHR5cGUpKQorCSAgY3RmX3NhdmVf dHlwZV9kZWZpbmVfd3JpdGUgKHRjc3AsIHR5cGUpOworCWJyZWFrOworCisg ICAgICBjYXNlIFRZUEVfQ09ERV9VTklPTjoKKyAgICAgICAgeworCSAgaW50 IGksIHNfYWxpZ25fc2l6ZTsKKworCSAgZm9yIChpID0gMDsgaSA8IFRZUEVf TkZJRUxEUyAodHlwZSk7ICsraSkKKwkgICAgeworCSAgICAgIHNfYWxpZ25f c2l6ZQorCQkgID0gY3RmX3NhdmVfdHlwZV9jaGVja19hbmRfd3JpdGUgKHRj c3AsCisJCQkJCQkgICBUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIGkpKTsKKwkg ICAgICBpZiAoc19hbGlnbl9zaXplIDwgMCkKKwkJcmV0dXJuIHNfYWxpZ25f c2l6ZTsKKworCSAgICAgIGlmIChhbGlnbl9zaXplIDwgc19hbGlnbl9zaXpl KQorCQlhbGlnbl9zaXplID0gc19hbGlnbl9zaXplOworCSAgICB9CisJICBi cmVhazsKKwl9CisKKyAgICAgIGRlZmF1bHQ6CisJYWxpZ25fc2l6ZSA9IC0x OworCWJyZWFrOworICAgIH0KKworICByZXR1cm4gYWxpZ25fc2l6ZTsKK30K Kworc3RhdGljIHZvaWQKK2N0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEgKHN0cnVj dCBjdGZfc2F2ZV9zICp0Y3NwLCBzdHJ1Y3QgY3RmX3NhdmVfdHBfcyAqdHBz LAorCQkJY2hhciAqc3RyKQoreworICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhw cjsKKyAgc3RydWN0IGN0Zl9zYXZlX2NvbGxlY3RfcyAqY29sbGVjdDsKKyAg dm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZTsKKyAgc3RydWN0IHR5 cGUgKnR5cGU7CisgIGludCBpc19yZXQgPSAwOworICBpbnQgYWxpZ25fc2l6 ZTsKKworICAvKiBDaGVjayBpZiBhY3Rpb25fZXhwIGlzIGFscmVhZHkgZXhp c3QgaW4gdHBzLT5jb2xsZWN0LiAgKi8KKyAgZm9yIChjb2xsZWN0ID0gdHBz LT5jb2xsZWN0OyBjb2xsZWN0OyBjb2xsZWN0ID0gY29sbGVjdC0+bmV4dCkK KyAgICB7CisgICAgICBpZiAoc3RyY21wIChjb2xsZWN0LT5zdHIsIHN0cikg PT0gMCkKKwlyZXR1cm47CisgICAgfQorCisgIGlmICgwID09IHN0cm5jYXNl Y21wIChzdHIsICIkX3JldCIsIDUpKQorICAgIGlzX3JldCA9IDE7CisKKyAg VFJZX0NBVENIIChlLCBSRVRVUk5fTUFTS19FUlJPUikKKyAgICB7CisgICAg ICBpZiAoaXNfcmV0KQorICAgICAgICB7CisJICBDT1JFX0FERFIgcGM7CisJ ICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CisKKwkgIGZyYW1lID0gZ2V0 X3ByZXZfZnJhbWUgKGdldF9jdXJyZW50X2ZyYW1lICgpKTsKKwkgIGlmICgh ZnJhbWUpCisJICAgIGVycm9yIChfKCJjb3VsZCBub3QgZmluZCBwcmV2aW91 cyBmcmFtZSIpKTsKKworCSAgaWYgKCFnZXRfZnJhbWVfcGNfaWZfYXZhaWxh YmxlIChmcmFtZSwgJnBjKSkKKwkgICAgZXJyb3IgKF8oIlBDIHVuYXZhaWxh YmxlIikpOworCX0KKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgc3RydWN0 IGNsZWFudXAgKm9sZF9jaGFpbjsKKwkgIHN0cnVjdCB2YWx1ZSAqdmFsOwor CisJICBleHByID0gcGFyc2VfZXhwcmVzc2lvbiAoc3RyKTsKKwkgIG9sZF9j aGFpbiA9IG1ha2VfY2xlYW51cCAoZnJlZV9jdXJyZW50X2NvbnRlbnRzLCAm ZXhwcik7CisJICB0eXBlID0gdmFsdWVfdHlwZSAoZXZhbHVhdGVfZXhwcmVz c2lvbiAoZXhwcikpOworCSAgZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7CisJ fQorICAgIH0KKyAgaWYgKGUucmVhc29uIDwgMCkKKyAgICB7CisgICAgICB3 YXJuaW5nIChfKCJlcnJvciBzYXZpbmcgdHJhY2Vwb2ludCAlZCBcIiVzXCIg dG8gQ1RGIGZpbGU6ICVzIiksCisJICAgICAgIHRwcy0+dHAtPmJhc2UubnVt YmVyLCBzdHIsIGUubWVzc2FnZSk7CisgICAgICByZXR1cm47CisgICAgfQor CisgIGlmIChpc19yZXQpCisgICAgYWxpZ25fc2l6ZSA9IDg7CisgIGVsc2UK KyAgICB7CisgICAgICBhbGlnbl9zaXplID0gY3RmX3NhdmVfdHlwZV9jaGVj a19hbmRfd3JpdGUgKHRjc3AsIHR5cGUpOworICAgICAgaWYgKGFsaWduX3Np emUgPCAwKQorCXsKKwkgIHdhcm5pbmcgKF8oIlwKK2Vycm9yIHNhdmluZyB0 cmFjZXBvaW50ICVkIFwiJXNcIiB0byBDVEYgZmlsZTogdHlwZSBpcyBub3Qg c3VwcG9ydC4iKSwKKwkJICAgdHBzLT50cC0+YmFzZS5udW1iZXIsIHN0cik7 CisJICByZXR1cm47CisJfQorICAgIH0KKworICBjb2xsZWN0ID0gKHN0cnVj dCBjdGZfc2F2ZV9jb2xsZWN0X3MgKikgeHphbGxvYyAoc2l6ZW9mICgqY29s bGVjdCkpOworCisgIC8qIEFkZCB0cCB0byB0aGUgbGlzdC4gICovCisgIGNv bGxlY3QtPm5leHQgPSB0cHMtPmNvbGxlY3Q7CisgIHRwcy0+Y29sbGVjdCA9 IGNvbGxlY3Q7CisKKyAgY29sbGVjdC0+c3RyID0geHN0cmR1cCAoc3RyKTsK KyAgY29sbGVjdC0+aXNfcmV0ID0gaXNfcmV0OworCisgIGlmICghaXNfcmV0 KQorICAgIHsKKyAgICAgIGNvbGxlY3QtPnR5cGUgPSB0eXBlOworCisgICAg ICBjb2xsZWN0LT5hbGlnbl9zaXplID0gYWxpZ25fc2l6ZTsKKyAgICAgIGlm IChjb2xsZWN0LT5hbGlnbl9zaXplID4gdHBzLT5hbGlnbl9zaXplKQorICAg ICAgICB0cHMtPmFsaWduX3NpemUgPSBjb2xsZWN0LT5hbGlnbl9zaXplOwor CisgICAgICBjb2xsZWN0LT5leHByID0gcGFyc2VfZXhwcmVzc2lvbiAoc3Ry KTsKKyAgICB9Cit9CisKK3N0cnVjdCBsb2NfYXJnX2NvbGxlY3RfZGF0YQor eworICBzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcDsKKyAgc3RydWN0IGN0Zl9z YXZlX3RwX3MgKnRwczsKK307CisKK3N0YXRpYyB2b2lkCit0c3Zfc2F2ZV9k b19sb2NfYXJnX2NvbGxlY3QgKGNvbnN0IGNoYXIgKnByaW50X25hbWUsCisJ CQkgICAgIHN0cnVjdCBzeW1ib2wgKnN5bSwKKwkJCSAgICAgdm9pZCAqY2Jf ZGF0YSkKK3sKKyAgc3RydWN0IGxvY19hcmdfY29sbGVjdF9kYXRhICpwID0g Y2JfZGF0YTsKKyAgY2hhciAqbmFtZTsKKworICBuYW1lID0gYWxsb2NhIChz dHJsZW4gKHByaW50X25hbWUpICsgMSk7CisgIHN0cmNweSAobmFtZSwgcHJp bnRfbmFtZSk7CisgIGN0Zl9zYXZlX2NvbGxlY3RfZ2V0XzEgKHAtPnRjc3As IHAtPnRwcywgbmFtZSk7Cit9CisKKy8qIHdvcmtlciBmdW5jdGlvbiAoY2xl YW51cCkgKi8KK3N0YXRpYyB2b2lkCityZXBsYWNlX2NvbW1hICh2b2lkICpk YXRhKQoreworICBjaGFyICpjb21tYSA9IGRhdGE7CisgICpjb21tYSA9ICcs JzsKK30KKworLyogR2V0IHZhciB0aGF0IHdhbnQgdG8gY29sbGVjdCBmcm9t IFNUUiBhbmQgcHV0IHRoZW0gdG8gVFBTLT5jb2xsZWN0LgorICAgVGhpcyBm dW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsIHdoZW4gR0RCIGFkZCBhIG5ldyBU UC4gICovCisKK3N0YXRpYyB2b2lkCitjdGZfc2F2ZV9jb2xsZWN0X2dldCAo c3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCBjdGZfc2F2ZV90cF9z ICp0cHMsCisJCSAgICAgIGNoYXIgKnN0cikKK3sKKyAgY2hhciAqYWN0aW9u X2V4cCA9IHN0ciwgKm5leHRfY29tbWE7CisgIHN0cnVjdCBjbGVhbnVwICpv bGRfY2hhaW47CisKKyAgZG8KKyAgICB7CisgICAgICBpZiAoKmFjdGlvbl9l eHAgPT0gJywnKQorCWFjdGlvbl9leHArKzsKKyAgICAgIHdoaWxlIChpc3Nw YWNlICgoaW50KSAqYWN0aW9uX2V4cCkpCisJYWN0aW9uX2V4cCsrOworCisg ICAgICBuZXh0X2NvbW1hID0gc3RyY2hyIChhY3Rpb25fZXhwLCAnLCcpOwor ICAgICAgaWYgKG5leHRfY29tbWEpCisJeworCSAgb2xkX2NoYWluID0gbWFr ZV9jbGVhbnVwIChyZXBsYWNlX2NvbW1hLCBuZXh0X2NvbW1hKTsKKwkgICpu ZXh0X2NvbW1hID0gJ1wwJzsKKwl9CisKKyAgICAgIGlmICgwID09IHN0cm5j YXNlY21wIChhY3Rpb25fZXhwLCAiJHJlZyIsIDQpKQorICAgICAgICB7CisJ ICBpbnQgaTsKKwkgIHN0cnVjdCBnZGJhcmNoICphcmNoID0gdHBzLT50cC0+ YmFzZS5sb2MtPmdkYmFyY2g7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBnZGJh cmNoX251bV9yZWdzIChhcmNoKTsgaSsrKQorCSAgICB7CisJICAgICAgY29u c3QgY2hhciAqbmFtZSA9IGdkYmFyY2hfcmVnaXN0ZXJfbmFtZSAoYXJjaCwg aSk7CisJICAgICAgaW50IG5hbWVfc2l6ZSA9IHN0cmxlbiAobmFtZSk7CisJ ICAgICAgY2hhciByZWduYW1lWzEgKyBuYW1lX3NpemUgKyAxXTsKKworCSAg ICAgIGlmIChuYW1lX3NpemUgPT0gMCkKKwkJY29udGludWU7CisKKwkgICAg ICBzcHJpbnRmIChyZWduYW1lLCAiJCVzIiwgbmFtZSk7CisKKwkgICAgICBj dGZfc2F2ZV9jb2xsZWN0X2dldF8xICh0Y3NwLCB0cHMsIHJlZ25hbWUpOwor CSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoMCA9PSBzdHJuY2FzZWNtcCAo YWN0aW9uX2V4cCwgIiRsb2MiLCA0KQorCSAgICAgICB8fCAwID09IHN0cm5j YXNlY21wIChhY3Rpb25fZXhwLCAiJGFyZyIsIDQpKQorCXsKKwkgIENPUkVf QUREUiBwYzsKKwkgIHN0cnVjdCBsb2NfYXJnX2NvbGxlY3RfZGF0YSBjYl9k YXRhOworCSAgdm9sYXRpbGUgc3RydWN0IGdkYl9leGNlcHRpb24gZTsKKwor CSAgY2JfZGF0YS50Y3NwID0gdGNzcDsKKwkgIGNiX2RhdGEudHBzID0gdHBz OworCisJICBUUllfQ0FUQ0ggKGUsIFJFVFVSTl9NQVNLX0VSUk9SKQorCSAg ICB7CisJICAgICAgcGMgPSByZWdjYWNoZV9yZWFkX3BjIChnZXRfY3VycmVu dF9yZWdjYWNoZSAoKSk7CisJICAgIH0KKwkgIGlmIChlLnJlYXNvbiA8IDAp CisJICAgIHsKKwkgICAgICB3YXJuaW5nIChfKCJlcnJvciBzYXZpbmcgdHJh Y2Vwb2ludCAlZCBcIiVzXCIgdG8gQ1RGIGZpbGU6ICVzIiksCisJCSAgICAg ICB0cHMtPnRwLT5iYXNlLm51bWJlciwgYWN0aW9uX2V4cCwgZS5tZXNzYWdl KTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCisJICBpZiAoYWRkX2xv Y2FsX3N5bWJvbHNfMSAoKDAgPT0gc3RybmNhc2VjbXAgKGFjdGlvbl9leHAs ICIkbG9jIiwgNCkKKwkJCQkJPyAnTCcgOiAnQScpLAorCQkJCSAgIHBjLCB0 c3Zfc2F2ZV9kb19sb2NfYXJnX2NvbGxlY3QsCisJCQkJICAgJmNiX2RhdGEp KQorCSAgICB7CisJICAgICAgd2FybmluZyAoXygiXAorZXJyb3Igc2F2aW5n IHRyYWNlcG9pbnQgJWQgXCIlc1wiIHRvIENURiBmaWxlOiBubyBzeW1ib2wg dGFibGUgaW5mbyBhdmFpbGFibGUuIiksCisJCSAgICAgICB0cHMtPnRwLT5i YXNlLm51bWJlciwgYWN0aW9uX2V4cCk7CisJICAgICAgY29udGludWU7CisJ ICAgIH0KKwl9CisgICAgICBlbHNlCisJY3RmX3NhdmVfY29sbGVjdF9nZXRf MSAodGNzcCwgdHBzLCBhY3Rpb25fZXhwKTsKKworICAgICAgaWYgKG5leHRf Y29tbWEpCisJZG9fY2xlYW51cHMgKG9sZF9jaGFpbik7CisgICAgICBhY3Rp b25fZXhwID0gbmV4dF9jb21tYTsKKyAgICB9CisgIHdoaWxlIChhY3Rpb25f ZXhwICYmICphY3Rpb25fZXhwID09ICcsJyk7Cit9CisKKy8qIENhbGwgZnVu Y3Rpb24gY3RmX3NhdmVfY29sbGVjdF9nZXQgQWRkIGFjdGlvbiBsaXN0IEFD VElPTiBvZiBUUFMKKyAgIHRvIFRQUy0+Y29sbGVjdC4KKyAgIFNURVBQSU5H X0ZSQU1FIGlzIHRydWUgaWYgaXQgaXMgc3RlcCBhY3Rpb24uICAqLworCitz dGF0aWMgdm9pZAorY3RmX3NhdmVfdHBfYWN0aW9ucyAoc3RydWN0IGN0Zl9z YXZlX3MgKnRjc3AsIHN0cnVjdCBjdGZfc2F2ZV90cF9zICp0cHMsCisJCSAg ICAgc3RydWN0IGNvbW1hbmRfbGluZSAqYWN0aW9uLCBpbnQgc3RlcHBpbmdf ZnJhbWUpCit7CisgIGZvciAoOyBhY3Rpb24gIT0gTlVMTDsgYWN0aW9uID0g YWN0aW9uLT5uZXh0KQorICAgIHsKKyAgICAgIGNoYXIgKmFjdGlvbl9leHA7 CisgICAgICBzdHJ1Y3QgY21kX2xpc3RfZWxlbWVudCAqY21kOworCisgICAg ICBRVUlUOworICAgICAgYWN0aW9uX2V4cCA9IGFjdGlvbi0+bGluZTsKKyAg ICAgIHdoaWxlIChpc3NwYWNlICgoaW50KSAqYWN0aW9uX2V4cCkpCisJYWN0 aW9uX2V4cCsrOworICAgICAgaWYgKCphY3Rpb25fZXhwID09ICcjJykKKwlj b250aW51ZTsKKworICAgICAgY21kID0gbG9va3VwX2NtZCAoJmFjdGlvbl9l eHAsIGNtZGxpc3QsICIiLCAtMSwgMSk7CisgICAgICBpZiAoY21kID09IDAp CisJZXJyb3IgKF8oIkJhZCBhY3Rpb24gbGlzdCBpdGVtOiAlcyIpLCBhY3Rp b25fZXhwKTsKKworICAgICAgaWYgKGNtZF9jZnVuY19lcSAoY21kLCB3aGls ZV9zdGVwcGluZ19wc2V1ZG9jb21tYW5kKSkKKwl7CisJICBpbnQgaTsKKwor CSAgZm9yIChpID0gMDsgaSA8IGFjdGlvbi0+Ym9keV9jb3VudDsgKytpKQor CSAgICBjdGZfc2F2ZV90cF9hY3Rpb25zICh0Y3NwLCB0cHMsIGFjdGlvbi0+ Ym9keV9saXN0W2ldLCAxKTsKKwl9CisgICAgICBlbHNlIGlmIChjbWRfY2Z1 bmNfZXEgKGNtZCwgY29sbGVjdF9wc2V1ZG9jb21tYW5kKSkKKwl7CisJICBp ZiAoc3RlcHBpbmdfZnJhbWUgIT0gdHBzLT5zdGVwcGluZ19mcmFtZSkKKwkg ICAgY29udGludWU7CisJICBpZiAoKmFjdGlvbl9leHAgPT0gJy8nKQorCSAg ICBhY3Rpb25fZXhwID0gZGVjb2RlX2FnZW50X29wdGlvbnMgKGFjdGlvbl9l eHApOworCSAgY3RmX3NhdmVfY29sbGVjdF9nZXQgKHRjc3AsIHRwcywgYWN0 aW9uX2V4cCk7CisJfQorICAgIH0KK30KKworCisvKiBUcnkgdG8gZmluZCB0 aGUgY3RmX3NhdmVfdHBfcyBzdHJ1Y3QgaW4gdGhlIFRDU1AtPnRwLgorICAg SWYgY2Fubm90IGZpbmQgaXQgaW4gdGhlIFRDU1AtPnRwLCBtYWtlIGEgbmV3 IG9uZSBmb3IgVFAKKyAgIGFuZCBhZGQgaXQgdG8gVENTUC0+dHAuICAqLwor CitzdGF0aWMgc3RydWN0IGN0Zl9zYXZlX3RwX3MgKgorY3RmX3NhdmVfdHBf ZmluZCAoc3RydWN0IGN0Zl9zYXZlX3MgKnRjc3AsIHN0cnVjdCB0cmFjZXBv aW50ICp0cCkKK3sKKyAgc3RydWN0IGN0Zl9zYXZlX3RwX3MgKnJldDsKKyAg c3RydWN0IGJwX2xvY2F0aW9uICpsb2M7CisgIHN0cnVjdCByZWdjYWNoZSAq cmVnY2FjaGU7CisgIGludCBzdGVwcGluZ19mcmFtZSA9IDA7CisgIHN0cnVj dCBjb21tYW5kX2xpbmUgKmFjdGlvbjsKKyAgdm9sYXRpbGUgc3RydWN0IGdk Yl9leGNlcHRpb24gZTsKKyAgQ09SRV9BRERSIHBjOworCisgIFRSWV9DQVRD SCAoZSwgUkVUVVJOX01BU0tfRVJST1IpCisgICAgeworICAgICAgcGMgPSBy ZWdjYWNoZV9yZWFkX3BjIChnZXRfY3VycmVudF9yZWdjYWNoZSAoKSk7Cisg ICAgfQorICBpZiAoZS5yZWFzb24gPj0gMCkKKyAgICB7CisgICAgICBzdGVw cGluZ19mcmFtZSA9IDE7CisgICAgICBmb3IgKGxvYyA9IHRwLT5iYXNlLmxv YzsgbG9jOyBsb2MgPSBsb2MtPm5leHQpCisJeworCSAgaWYgKGxvYy0+YWRk cmVzcyA9PSBwYykKKyAgICAgICAgICAgIHsKKwkgICAgICBzdGVwcGluZ19m cmFtZSA9IDA7CisJICAgICAgYnJlYWs7CisJICAgIH0KKyAgICAgICAgfQor ICAgIH0KKworICBmb3IgKHJldCA9IHRjc3AtPnRwOyByZXQ7IHJldCA9IHJl dC0+bmV4dCkKKyAgICB7CisgICAgICBpZiAocmV0LT50cCA9PSB0cCAmJiBy ZXQtPnN0ZXBwaW5nX2ZyYW1lID09IHN0ZXBwaW5nX2ZyYW1lKQorCXJldHVy biByZXQ7CisgICAgfQorCisgIHJldCA9IChzdHJ1Y3QgY3RmX3NhdmVfdHBf cyAqKSB4emFsbG9jIChzaXplb2YgKCpyZXQpKTsKKworICAvKiBBZGQgdHAg dG8gdGhlIGxpc3QuICAqLworICByZXQtPm5leHQgPSB0Y3NwLT50cDsKKyAg dGNzcC0+dHAgPSByZXQ7CisKKyAgcmV0LT5zdGVwcGluZ19mcmFtZSA9IHN0 ZXBwaW5nX2ZyYW1lOworICByZXQtPnRwID0gdHA7CisKKyAgaWYgKCFzdGVw cGluZ19mcmFtZSAmJiAqZGVmYXVsdF9jb2xsZWN0KQorICAgIGN0Zl9zYXZl X2NvbGxlY3RfZ2V0ICh0Y3NwLCByZXQsIGRlZmF1bHRfY29sbGVjdCk7CisK KyAgY3RmX3NhdmVfdHBfYWN0aW9ucyAodGNzcCwgcmV0LCBicmVha3BvaW50 X2NvbW1hbmRzICgmdHAtPmJhc2UpLCAwKTsKKworICByZXR1cm4gcmV0Owor fQorCisvKiBMZXQgVENTUC0+ZGF0YXN0cmVhbV9mZCBwb2ludCB0byB0aGUg cGFydCBmb3IgbmV4dCBwYWNrZXQuICAqLworCitzdGF0aWMgdm9pZAorY3Rm X3NhdmVfbmV4dF9wYWNrZXQgKHN0cnVjdCBjdGZfc2F2ZV9zICp0Y3NwKQor eworICB0Y3NwLT5wYWNrZXRfYmVnaW4gKz0gQ1RGX1BBQ0tFVF9TSVpFOwor ICBjdGZfc2F2ZV9mc2VlayAodGNzcCwgdGNzcC0+cGFja2V0X2JlZ2luLCBT RUVLX1NFVCk7CisgIHRjc3AtPmNvbnRlbnRfc2l6ZSA9IDA7Cit9CisKKy8q IFdyaXRlIHRoZSBjb250ZW50IHNpemUgdG8gcGFja2V0IGhlYWRlciBjb250 ZXh0LiAqLworCitzdGF0aWMgdm9pZAorY3RmX3NhdmVfd3JpdGVfY29udGVu dF9zaXplIChzdHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkKK3sKKyAgdWludDMy X3QgdTMyOworCisgIGN0Zl9zYXZlX2ZzZWVrICh0Y3NwLCB0Y3NwLT5wYWNr ZXRfYmVnaW4gKyA0LCBTRUVLX1NFVCk7CisgIHUzMiA9IHRjc3AtPmNvbnRl bnRfc2l6ZSAqIFRBUkdFVF9DSEFSX0JJVDsKKyAgY3RmX3NhdmVfd3JpdGUg KHRjc3AsICh2b2lkICopJnUzMiwgNCk7Cit9CisKKy8qIFdyaXRlIHRoZSBD VEYgZGF0YSBwYWNrZXQgaGVhZGVyIGNvbnRleHQuICAqLworCitzdGF0aWMg dm9pZAorY3RmX3NhdmVfd3JpdGVfcGFja2V0X2hlYWRlcl9jb250ZXh0IChz dHJ1Y3QgY3RmX3NhdmVfcyAqdGNzcCkKK3sKKyAgdWludDMyX3QgdTMyOwor CisgIC8qIG1hZ2ljLiAgKi8KKyAgdTMyID0gQ1RGX01BR0lDOworICBjdGZf c2F2ZV93cml0ZSAodGNzcCwgKHZvaWQgKikmdTMyLCA0KTsKKyAgdGNzcC0+ Y29udGVudF9zaXplICs9IDQ7CisKKyAgLyogY29udGVudF9zaXplLiAgV2Ug c3RpbGwgZG9uJ3Qga25vdyB0aGUgc2l6ZSwgd3JpdGUgaXQgbGF0ZXIuICAq LworICBjdGZfc2F2ZV9mc2VlayAodGNzcCwgNCwgU0VFS19DVVIpOworICB0 Y3NwLT5jb250ZW50X3NpemUgKz0gNDsKKworICAvKiBwYWNrZXRfc2l6ZSAq LworICB1MzIgPSBDVEZfUEFDS0VUX1NJWkUgKiBUQVJHRVRfQ0hBUl9CSVQ7 CisgIGN0Zl9zYXZlX3dyaXRlICh0Y3NwLCAodm9pZCAqKSZ1MzIsIDQpOwor ICB0Y3NwLT5jb250ZW50X3NpemUgKz0gNDsKKworICB0Y3NwLT5jdXJyZW50 X2NvbnRlbnRfc2l6ZSA9IHRjc3AtPmNvbnRlbnRfc2l6ZTsKKworICAvKiBN YWtlIHRoaXMgcGFja2V0IGFsbCBpbnRvIGZpbGUuICAqLworICBjdGZfc2F2 ZV9mc2VlayAodGNzcCwgdGNzcC0+cGFja2V0X2JlZ2luICsgQ1RGX1BBQ0tF VF9TSVpFIC0gNCwgU0VFS19TRVQpOworICB1MzIgPSAwOworICBjdGZfc2F2 ZV93cml0ZSAodGNzcCwgKHZvaWQgKikmdTMyLCA0KTsKKyAgY3RmX3NhdmVf ZnNlZWsgKHRjc3AsIHRjc3AtPnBhY2tldF9iZWdpbiArIHRjc3AtPmNvbnRl bnRfc2l6ZSwgU0VFS19TRVQpOworfQorCisvKiBDaGFuZ2UgSS10aCBjaGFy IGluIENURl9TVFIgdG8gU1RSLiAgKi8KKworc3RhdGljIGNoYXIgKgorY3Rm X3NhdmVfbWV0YWRhdGFfY2hhbmdlX2NoYXIgKGNoYXIgKmN0Zl9zdHIsIGlu dCBpLCBjb25zdCBjaGFyICpzdHIpCit7CisgIGNoYXIgKm5ldzsKKworICBj dGZfc3RyW2ldID0gJ1wwJzsKKyAgbmV3ID0geHN0cnByaW50ZiAoIiVzJXMl c18lcyIsIGN0Zl9zdHIsIChpID8gIl8iIDogIiIpLAorCQkgICAgc3RyLCBj dGZfc3RyICsgaSArIDEpOworICB4ZnJlZSAoY3RmX3N0cik7CisKKyAgcmV0 dXJuIG5ldzsKK30KKworLyogV3JpdGUgdGhlIGhlYWRlciBvZiBDVEYncyBt ZXRhZGF0YSB0byBUQ1NQLT5NRVRBREFUQV9GRC4gICovCisKK3N0YXRpYyB2 b2lkCitjdGZfc2F2ZV9tZXRhZGF0YV9oZWFkZXIgKHN0cnVjdCBjdGZfc2F2 ZV9zICp0Y3NwKQoreworICBjb25zdCBjaGFyIG1ldGFkYXRhX2ZtdFtdID0K KyAgIlxudHJhY2Uge1xuIgorICAiCW1ham9yID0gJXU7XG4iCisgICIJbWlu b3IgPSAldTtcbiIKKyAgIglieXRlX29yZGVyID0gJXM7XG4iCQkvKiBiZSBv ciBsZSAqLworICAiCXBhY2tldC5oZWFkZXIgOj0gc3RydWN0IHtcbiIKKyAg IgkJdWludDMyX3QgbWFnaWM7XG4iCisgICIJfTtcbiIKKyAgIn07XG4iCisg ICJcbiIKKyAgInN0cmVhbSB7XG4iCisgICIJcGFja2V0LmNvbnRleHQgOj0g c3RydWN0IHtcbiIKKyAgIgkJdWludDMyX3QgY29udGVudF9zaXplO1xuIgor ICAiCQl1aW50MzJfdCBwYWNrZXRfc2l6ZTtcbiIKKyAgIgl9O1xuIgorICAi CWV2ZW50LmhlYWRlciA6PSBzdHJ1Y3Qge1xuIgorICAiCQl1aW50MzJfdCBp ZDtcbiIKKyAgIgl9O1xuIgorICAifTtcbiI7CisKKyAgY3RmX3NhdmVfZndy aXRlX2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICIvKiBDVEYgJWQuJWQg Ki9cbiIsCisJCQkgIENURl9TQVZFX01BSk9SLCBDVEZfU0FWRV9NSU5PUik7 CisgIGN0Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2Zk LCAiXAordHlwZWFsaWFzIGludGVnZXIgeyBzaXplID0gMzI7IGFsaWduID0g MzI7IHNpZ25lZCA9IGZhbHNlOyB9IDo9IHVpbnQzMl90O1xuIik7CisgIGN0 Zl9zYXZlX2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXAor dHlwZWFsaWFzIGludGVnZXIgeyBzaXplID0gNjQ7IGFsaWduID0gNjQ7IHNp Z25lZCA9IGZhbHNlOyB9IDo9IHVpbnQ2NF90O1xuIik7CisgIGN0Zl9zYXZl X2Z3cml0ZV9mb3JtYXQgKHRjc3AtPm1ldGFkYXRhX2ZkLCAiXG4iKTsKKwor ICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwg bWV0YWRhdGFfZm10LAorCQkJICBDVEZfU0FWRV9NQUpPUiwgQ1RGX1NBVkVf TUlOT1IsCisJCQkgIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTiA/ICJs ZSIgOiAiYmUiKTsKKyAgY3RmX3NhdmVfZndyaXRlX2Zvcm1hdCAodGNzcC0+ bWV0YWRhdGFfZmQsICJcbiIpOworfQorCisvKiBXcml0ZSB0aGUgYm9keSBv ZiBDVEYncyBtZXRhZGF0YSB0byBUQ1NQLT5NRVRBREFUQV9GRC4gICovCisK K3N0YXRpYyB2b2lkCitjdGZfc2F2ZV9tZXRhZGF0YSAoc3RydWN0IGN0Zl9z YXZlX3MgKnRjc3ApCit7CisgIHN0cnVjdCBjdGZfc2F2ZV90cF9zICp0cHM7 CisgIHN0cnVjdCBjdGZfc2F2ZV9jb2xsZWN0X3MgKmNvbGxlY3Q7CisgIHN0 cnVjdCBjdGZfc2F2ZV90eXBlX3MgKnQ7CisKKyAgY3RmX3NhdmVfZndyaXRl X2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsICJcbiIpOworCisgIC8qIFdy aXRlIGV2ZW50LiAgKi8KKyAgZm9yICh0cHMgPSB0Y3NwLT50cDsgdHBzOyB0 cHMgPSB0cHMtPm5leHQpCisgICAgeworICAgICAgY3RmX3NhdmVfZndyaXRl X2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsCisJCQkgICAgICAiZXZlbnQg e1xuXHRuYW1lID0gXCIlc1wiO1xuXHRpZCA9ICVkO1xuIgorCQkJICAgICAg Ilx0ZmllbGRzIDo9IHN0cnVjdCB7IFxuIiwKKwkJCSAgICAgIHRwcy0+dHAt PmJhc2UuYWRkcl9zdHJpbmcsIHRwcy0+dHAtPmJhc2UubnVtYmVyKTsKKyAg ICAgIGZvciAoY29sbGVjdCA9IHRwcy0+Y29sbGVjdDsgY29sbGVjdDsgY29s bGVjdCA9IGNvbGxlY3QtPm5leHQpCisgICAgICAgIHsKKwkgIGNoYXIgKnRt cDsKKwkgIGNvbnN0IGNoYXIgKm9sZF90YWI7CisKKwkgIGlmIChjb2xsZWN0 LT5pc19yZXQpCisJICAgIGNvbGxlY3QtPmN0Zl9zdHIgPSB4c3RyZHVwICgi cmV0X3BjIik7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjaGFyICpuZXc7 CisJICAgICAgaW50IG5lZWRfcmVjaGVjazsKKwkgICAgICBpbnQgaTsKKwor CSAgICAgIGNvbGxlY3QtPmN0Zl9zdHIgPSB4c3RyZHVwIChjb2xsZWN0LT5z dHIpOworCSAgICAgIGZvciAoaSA9IDA7IGNvbGxlY3QtPmN0Zl9zdHJbaV0g IT0gJ1wwJzsgKytpKQorCSAgICAgICAgeworCQkgIHN3aXRjaCAoY29sbGVj dC0+Y3RmX3N0cltpXSkKKwkJICAgIHsKKwkJICAgIGNhc2UgJyQnOgorCQkg ICAgICBjb2xsZWN0LT5jdGZfc3RyCisJCQkgID0gY3RmX3NhdmVfbWV0YWRh dGFfY2hhbmdlX2NoYXIgKGNvbGxlY3QtPmN0Zl9zdHIsCisJCQkJCQkJICAg aSwgImRvbGxhciIpOworCQkgICAgICBicmVhazsKKwkJICAgIGNhc2UgJyon OgorCQkgICAgICBjb2xsZWN0LT5jdGZfc3RyCisJCQkgID0gY3RmX3NhdmVf bWV0YWRhdGFfY2hhbmdlX2NoYXIgKGNvbGxlY3QtPmN0Zl9zdHIsCisJCQkJ CQkJICAgaSwgInN0YXIiKTsKKwkJICAgICAgYnJlYWs7CisJCSAgICBjYXNl ICcgJzoKKwkJICAgICAgY29sbGVjdC0+Y3RmX3N0cltpXSA9ICdfJzsKKwkJ ICAgICAgYnJlYWs7CisJCSAgICB9CisJCX0KKwkgICAgfQorCisJICB0bXAg PSBhbGxvY2EgKHN0cmxlbiAoY29sbGVjdC0+Y3RmX3N0cikgKyAzMCk7CisJ ICBzdHJjcHkgKHRtcCwgY29sbGVjdC0+Y3RmX3N0cik7CisJICB3aGlsZSAo MSkKKwkgICAgeworCSAgICAgIHN0cnVjdCBjdGZfc2F2ZV9jb2xsZWN0X3Mg KmNvbGxlY3QyOworCSAgICAgIGludCBpID0gMDsKKworCSAgICAgIGZvciAo Y29sbGVjdDIgPSB0cHMtPmNvbGxlY3Q7IGNvbGxlY3QyOworCQkgICBjb2xs ZWN0MiA9IGNvbGxlY3QyLT5uZXh0KQorCQl7CisJCSAgaWYgKGNvbGxlY3Qy LT5jdGZfc3RyCisJCSAgICAgICYmIHN0cmNtcCAoY29sbGVjdDItPmN0Zl9z dHIsIHRtcCkgPT0gMCkKKwkJICAgIGJyZWFrOworCQl9CisJICAgICAgaWYg KGNvbGxlY3QyID09IE5VTEwpCisJCWJyZWFrOworCisJICAgICAgc25wcmlu dGYgKHRtcCwgc3RybGVuIChjb2xsZWN0LT5jdGZfc3RyKSArIDMwLAorCQkJ IiVzXyVkIiwgY29sbGVjdC0+Y3RmX3N0ciwgaSsrKTsKKwkgICAgfQorCisJ ICBpZiAoc3RyY21wIChjb2xsZWN0LT5jdGZfc3RyLCBjb2xsZWN0LT5zdHIp KQorCSAgICB3YXJuaW5nIChfKCJcCitcIiVzXCIgb2YgdHJhY2Vwb2ludCAl ZCByZW5hbWUgdG8gXCIlc1wiIGluIENURiBmaWxlLiIpLAorCQkgICAgICAg Y29sbGVjdC0+c3RyLCB0cHMtPnRwLT5iYXNlLm51bWJlciwKKwkJICAgICAg IGNvbGxlY3QtPmN0Zl9zdHIpOworCisJICBvbGRfdGFiID0gdGNzcC0+dGFi OworCSAgdGNzcC0+dGFiID0gIlx0XHQiOworCSAgY3RmX3NhdmVfZndyaXRl X2Zvcm1hdCAodGNzcC0+bWV0YWRhdGFfZmQsIHRjc3AtPnRhYik7CisJICBp ZiAoY29sbGVjdC0+aXNfcmV0KQorCSAgICBjdGZfc2F2ZV9md3JpdGVfZm9y bWF0ICh0Y3NwLT5tZXRhZGF0YV9mZCwgInVpbnQ2NF90ICVzO1xuIiwKKwkJ CQkgICAgY29sbGVjdC0+Y3RmX3N0cik7CisJICBlbHNlCisJICAgIGN0Zl9z YXZlX3Zhcl9kZWZpbmVfd3JpdGUgKHRjc3AsIGNvbGxlY3QtPnR5cGUsIGNv bGxlY3QtPmN0Zl9zdHIpOworCSAgdGNzcC0+dGFiID0gb2xkX3RhYjsKKwl9 CisgICAgICBjdGZfc2F2ZV9md3JpdGVfZm9ybWF0ICh0Y3NwLT5tZXRhZGF0 YV9mZCwgIlx0fTtcbn07XG4iKTsKKyAgICB9Cit9CisKKy8qIENsZWFuIGZ1 bmN0aW9uIGZvciBjdGZfc2F2ZS4gICovCisKK3N0YXRpYyB2b2lkCitjdGZf c2F2ZV9jbGVhbnVwICh2b2lkICpwKQoreworICBzdHJ1Y3QgY3RmX3NhdmVf cyAqdGNzcCA9IHA7CisgIHN0cnVjdCBjdGZfc2F2ZV90cF9zICp0cCwgKnRt cF90cDsKKyAgc3RydWN0IGN0Zl9zYXZlX3R5cGVfcyAqdHlwZSwgKnRtcF90 eXBlOworCisgIGlmICh0Y3NwLT5tZXRhZGF0YV9mZCkKKyAgICB7CisgICAg ICBjdGZfc2F2ZV9tZXRhZGF0YSAodGNzcCk7CisgICAgICBmY2xvc2UgKHRj c3AtPm1ldGFkYXRhX2ZkKTsKKyAgICB9CisKKyAgaWYgKHRjc3AtPmRhdGFz dHJlYW1fZmQpCisgICAgZmNsb3NlICh0Y3NwLT5kYXRhc3RyZWFtX2ZkKTsK KworICBmb3IgKHRwID0gdGNzcC0+dHA7IHRwOyB0cCA9IHRtcF90cCkKKyAg ICB7CisgICAgICBzdHJ1Y3QgY3RmX3NhdmVfY29sbGVjdF9zICpjb2xsZWN0 LCAqdG1wX2NvbGxlY3Q7CisKKyAgICAgIGZvciAoY29sbGVjdCA9IHRwLT5j b2xsZWN0OyBjb2xsZWN0OyBjb2xsZWN0ID0gdG1wX2NvbGxlY3QpCisgICAg ICAgIHsKKwkgIHhmcmVlIChjb2xsZWN0LT5leHByKTsKKwkgIHhmcmVlIChj b2xsZWN0LT5zdHIpOworCSAgeGZyZWUgKGNvbGxlY3QtPmN0Zl9zdHIpOwor CSAgdG1wX2NvbGxlY3QgPSBjb2xsZWN0LT5uZXh0OworCSAgeGZyZWUgKGNv bGxlY3QpOworICAgICAgICB9CisgICAgICB0bXBfdHAgPSB0cC0+bmV4dDsK KyAgICAgIHhmcmVlICh0cCk7CisgICAgfQorCisgIGZvciAodHlwZSA9IHRj c3AtPnR5cGU7IHR5cGU7IHR5cGUgPSB0bXBfdHlwZSkKKyAgICB7CisgICAg ICB0bXBfdHlwZSA9IHR5cGUtPm5leHQ7CisgICAgICB4ZnJlZSAodHlwZSk7 CisgICAgfQorCisgIHJlaW5pdF9mcmFtZV9jYWNoZSAoKTsKKyAgdGFyZ2V0 X2RjYWNoZV9pbnZhbGlkYXRlICgpOworICBzZXRfY3VycmVudF90cmFjZWZy YW1lICh0Y3NwLT5vbGRfdHJhY2VmcmFtZV9udW0pOworfQorCisvKiBTYXZl IGN1cnJlbnQgdHJhY2UgZnJhbWUgdG8gRElSTkFNRS4gICovCisKK3ZvaWQK K2N0Zl9zYXZlIChjb25zdCBjaGFyICpkaXJuYW1lKQoreworICBzdHJ1Y3Qg Y3RmX3NhdmVfcyB0Y3M7CisgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2hhaW47 CisgIGludCBmcmFtZV9udW07CisgIGNoYXIgKmZpbGVfbmFtZTsKKyAgc3Ry dWN0IGN0Zl9zYXZlX3R5cGVfcyAqdDsKKyAgY2hhciB0YWJbXSA9ICIiOwor CisgIC8qIENyZWF0ZSBESVJOQU1FLiAgKi8KKyAgZmlsZV9uYW1lID0gYWxs b2NhIChzdHJsZW4gKGRpcm5hbWUpICsgMQorCQkgICAgICArIHN0cmxlbiAo Q1RGX0RBVEFTVFJFQU1fTkFNRSkgKyAxKTsKKyAgaWYgKG1rZGlyIChkaXJu YW1lLCBTX0lSV1hVIHwgU19JUkdSUCB8IFNfSVhHUlAgfCBTX0lST1RIIHwg U19JWE9USCkKKyAgICAgICYmIGVycm5vICE9IEVFWElTVCkKKyAgICBlcnJv ciAoXygiVW5hYmxlIHRvIG9wZW4gZGlyZWN0b3J5ICclcycgZm9yIHNhdmlu ZyB0cmFjZSBkYXRhICglcykiKSwKKwkgICBkaXJuYW1lLCBzYWZlX3N0cmVy cm9yIChlcnJubykpOworCisgIG1lbXNldCAoJnRjcywgJ1wwJywgc2l6ZW9m ICh0Y3MpKTsKKyAgdGNzLm9sZF90cmFjZWZyYW1lX251bSA9IGdldF90cmFj ZWZyYW1lX251bWJlciAoKTsKKyAgb2xkX2NoYWluID0gbWFrZV9jbGVhbnVw IChjdGZfc2F2ZV9jbGVhbnVwLCAmdGNzKTsKKyAgdGNzLnRhYiA9IHRhYjsK KworICBzcHJpbnRmIChmaWxlX25hbWUsICIlcy8lcyIsIGRpcm5hbWUsIENU Rl9NRVRBREFUQV9OQU1FKTsKKyAgdGNzLm1ldGFkYXRhX2ZkID0gZm9wZW4g KGZpbGVfbmFtZSwgInciKTsKKyAgaWYgKCF0Y3MubWV0YWRhdGFfZmQpCisg ICAgZXJyb3IgKF8oIlVuYWJsZSB0byBvcGVuIGZpbGUgJyVzJyBmb3Igc2F2 aW5nIHRyYWNlIGRhdGEgKCVzKSIpLAorCSAgIGZpbGVfbmFtZSwgc2FmZV9z dHJlcnJvciAoZXJybm8pKTsKKyAgY3RmX3NhdmVfbWV0YWRhdGFfaGVhZGVy ICgmdGNzKTsKKworICBzcHJpbnRmIChmaWxlX25hbWUsICIlcy8lcyIsIGRp cm5hbWUsIENURl9EQVRBU1RSRUFNX05BTUUpOworICB0Y3MuZGF0YXN0cmVh bV9mZCA9IGZvcGVuIChmaWxlX25hbWUsICJ3Iik7CisgIGlmICghdGNzLmRh dGFzdHJlYW1fZmQpCisgICAgZXJyb3IgKF8oIlVuYWJsZSB0byBvcGVuIGZp bGUgJyVzJyBmb3Igc2F2aW5nIHRyYWNlIGRhdGEgKCVzKSIpLAorCSAgIGZp bGVfbmFtZSwgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKKworICBjdGZfc2F2 ZV93cml0ZV9wYWNrZXRfaGVhZGVyX2NvbnRleHQgKCZ0Y3MpOworCisgIGZv ciAoZnJhbWVfbnVtID0gMDsgMTsgZnJhbWVfbnVtICsrKQorICAgIHsKKyAg ICAgIGludCB0bnVtOworICAgICAgc3RydWN0IHRyYWNlcG9pbnQgKnRwOwor ICAgICAgaW50IHRyeV9jb3VudDsKKyAgICAgIHVpbnQzMl90IHUzMjsKKyAg ICAgIHN0cnVjdCBjdGZfc2F2ZV90cF9zICp0cHM7CisgICAgICBzdHJ1Y3Qg Y3RmX3NhdmVfY29sbGVjdF9zICpjb2xsZWN0OworICAgICAgaW50IHRyYWNl ZnJhbWVfaXNfZHJvcHBlZCA9IDA7CisKKyAgICAgIC8qIEFsbG93IHVzZXIg dG8gYmFpbCBvdXQgd2l0aCBeQy4gICovCisgICAgICBRVUlUOworCisgICAg ICAvKiBHb3RvIHRyYWNlZnJhbWUgZnJhbWVfbnVtIGFuZCBzZXQgdHAuICAq LworICAgICAgZnJhbWVfbnVtID0gdGFyZ2V0X3RyYWNlX2ZpbmQgKHRmaW5k X251bWJlciwgZnJhbWVfbnVtLCAwLCAwLCAmdG51bSk7CisgICAgICBpZiAo ZnJhbWVfbnVtIDwgMCkKKwlicmVhazsKKyAgICAgIHRwID0gZ2V0X3RyYWNl cG9pbnRfYnlfbnVtYmVyX29uX3RhcmdldCAodG51bSk7CisgICAgICBpZiAo IXRwKQorICAgICAgICB7CisJICB3YXJuaW5nIChfKCJkcm9wIHRyYWNlZnJh bWUgJWQgYmVjYXVzZSBjYW5ub3QgZmluZCB0cmFjZXBvaW50ICVkLiIpLAor CQkgICBmcmFtZV9udW0sIHRudW0pOworCSAgY29udGludWU7CisJfQorICAg ICAgaWYgKCF0cC0+YmFzZS5sb2MpCisgICAgICAgIHsKKwkgIHdhcm5pbmcg KF8oImRyb3AgdHJhY2VmcmFtZSAlZCBiZWNhdXNlIHRyYWNlcG9pbnQgJWQg aXMgcGVuZGluZy4iKSwKKwkJICAgZnJhbWVfbnVtLCB0cC0+YmFzZS5udW1i ZXIpOworCSAgY29udGludWU7CisJfQorICAgICAgcmVpbml0X2ZyYW1lX2Nh Y2hlICgpOworICAgICAgdGFyZ2V0X2RjYWNoZV9pbnZhbGlkYXRlICgpOwor ICAgICAgc2V0X2N1cnJlbnRfdHJhY2VmcmFtZSAoZnJhbWVfbnVtKTsKKwor ICAgICAgdHBzID0gY3RmX3NhdmVfdHBfZmluZCAoJnRjcywgdHApOworCisg ICAgICAvKiBUaGUgdHAgaXMgbm90IHZhcmlhYmxlLWxlbmd0aCBhbmQgYmln Z2VyIHRoYW4gQ1RGX1BBQ0tFVF9TSVpFLgorICAgICAgICAgU28gZHJvcCBp dC4gICovCisgICAgICBpZiAodHBzLT5pc19kcm9wcGVkKQorCWNvbnRpbnVl OworCisgICAgICAvKiBUcnkgY291bnQgZm9yIGN1cnJlbnQgdHAgd3JpdGUu CisgICAgICAgICBJZiB0cnkgc2Vjb25kIHRpbWUsIHRoZSBldmVudCBzaXpl IGJpZ2dlciB0aGFuIGEgcGFja2V0LgorICAgICAgICAgVGhlbiBkcm9wIHRo aXMgZXZlbnQuICAqLworICAgICAgdHJ5X2NvdW50ID0gMDsKKworcmVfd3Jp dGVfdHA6CisgICAgICBpZiAodHJ5X2NvdW50ID4gMCkKKyAgICAgICAgewor CSAgLyogSGFuZGxlIHJldHJ5LiAgKi8KKwkgIGlmICh0cnlfY291bnQgPiAx IHx8IDQgKyA0ICsgNCA9PSB0Y3MuY29udGVudF9zaXplKQorCSAgICB7CisJ ICAgICAgLyogU2Vjb25kIHJldHJ5IG9yIHBhY2tldCBqdXN0IHdyaXRlIHRo YXQgcGFja2V0IG1lYW5zCisJICAgICAgICAgdGhpcyBUUCBpcyB0b28gYmln LiAgU28gZHJvcCBpdC4gICovCisJICAgICAgaWYgKHRwcy0+aXNfdmFyaWFi bGVfbGVuZ3RoKQorCSAgICAgICAgeworCQkgIC8qIFRoZSB0cCBpcyB2YXJp YWJsZS1sZW5ndGguICAqLworCQkgIHdhcm5pbmcgKF8oIlwKK3RyYWNlZnJh bWUgJWQgb2YgdHJhY2Vwb2ludCAlZCBuZWVkIHNhdmUgZGF0YSB0aGF0IGJp Z2dlciB0aGFuIHBhY2tldCBzaXplICVkLlxuXAorU28gaXQgd2lsbCBiZSBk cm9wcGVkLiIpLCBmcmFtZV9udW0sIHRwcy0+dHAtPmJhc2UubnVtYmVyLCBD VEZfUEFDS0VUX1NJWkUpOworCQl9CisJICAgICAgZWxzZQorCSAgICAgICAg eworCQkgIC8qIFRoZSB0cCBpcyBub3QgdmFyaWFibGUtbGVuZ3RoLiAgKi8K KwkJICB3YXJuaW5nIChfKCJcCit0cmFjZXBvaW50ICVkIG5lZWQgc2F2ZSBk YXRhIHRoYXQgYmlnZ2VyIHRoYW4gcGFja2V0IHNpemUgJWQuXG5cCitTbyBh bGwgb2YgaXRzIHRyYWNlZnJhbWVzIHdpbGwgYmUgZHJvcHBlZC4iKSwKKwkJ CSAgIHRwcy0+dHAtPmJhc2UubnVtYmVyLCBDVEZfUEFDS0VUX1NJWkUpOwor CQkgIC8qIE1hcmsgdGhpcyB0cCB0byBsZXQgR0RCIGRyb3AgaXRzIHRyYWNl ZnJhbWVzLiAgKi8KKwkJICB0cHMtPmlzX2Ryb3BwZWQgPSAxOworCQl9CisJ ICAgICAgY29udGludWU7CisJICAgIH0KKworCSAgdGNzLmNoZWNrX3NpemUg PSAwOworCSAgY3RmX3NhdmVfd3JpdGVfY29udGVudF9zaXplICgmdGNzKTsK KyAgICAgICAgICBjdGZfc2F2ZV9uZXh0X3BhY2tldCAoJnRjcyk7CisJICBj dGZfc2F2ZV93cml0ZV9wYWNrZXRfaGVhZGVyX2NvbnRleHQgKCZ0Y3MpOwor CX0KKworICAgICAgdHJ5X2NvdW50ICsrOworCisgICAgICB0Y3MuY3VycmVu dF9jb250ZW50X3NpemUgPSB0Y3MuY29udGVudF9zaXplOworICAgICAgdGNz LmNoZWNrX3NpemUgPSAxOworCisgICAgICAvKiBXcml0ZSBldmVudCBoZWFk ZXIgKi8KKyAgICAgIGlmICh0cHMtPnN0ZXBwaW5nX2ZyYW1lKQorICAgICAg ICB1MzIgPSAodWludDMyX3QpICgtdHBzLT50cC0+YmFzZS5udW1iZXIpOwor ICAgICAgZWxzZQorCXUzMiA9ICh1aW50MzJfdCkgdHBzLT50cC0+YmFzZS5u dW1iZXI7CisgICAgICBpZiAoY3RmX3NhdmVfYWxpZ25fd3JpdGUgKCZ0Y3Ms ICh2b2lkICopJnUzMiwgc2l6ZW9mICh1MzIpLAorCQkJCXNpemVvZiAodTMy KSkpCisJZ290byByZV93cml0ZV90cDsKKworICAgICAgLyogQWxpZ24uICAq LworICAgICAgaWYgKHRwcy0+YWxpZ25fc2l6ZSkKKyAgICAgICAgeworCSAg aWYgKGN0Zl9zYXZlX2ZzZWVrICgmdGNzLAorCQkJICAgICAgQUxJR05fU0la RSAodGNzLmN1cnJlbnRfY29udGVudF9zaXplLAorCQkJCQkgIHRwcy0+YWxp Z25fc2l6ZSksCisJCQkgICAgICBTRUVLX0NVUikpCisJICAgIGdvdG8gcmVf d3JpdGVfdHA7CisJfQorCisgICAgICBmb3IgKGNvbGxlY3QgPSB0cHMtPmNv bGxlY3Q7IGNvbGxlY3Q7IGNvbGxlY3QgPSBjb2xsZWN0LT5uZXh0KQorICAg ICAgICB7CisJICB2b2xhdGlsZSBzdHJ1Y3QgZ2RiX2V4Y2VwdGlvbiBlOwor CisJICBpZiAoY29sbGVjdC0+aXNfcmV0KQorCSAgICB7CisJICAgICAgQ09S RV9BRERSIHBjOworCSAgICAgIHVpbnQ2NF90IHU2NDsKKworCSAgICAgIFRS WV9DQVRDSCAoZSwgUkVUVVJOX01BU0tfRVJST1IpCisJCXsKKwkJICBzdHJ1 Y3QgZnJhbWVfaW5mbyAqZnJhbWU7CisKKwkJICBmcmFtZSA9IGdldF9jdXJy ZW50X2ZyYW1lICgpOworCQkgIGlmICghZnJhbWUpCisJCSAgICBlcnJvciAo XygiZ2V0IGN1cnJlbnQgZnJhbWUgZmFpbCIpKTsKKwkJICBmcmFtZSA9IGdl dF9wcmV2X2ZyYW1lIChmcmFtZSk7CisJCSAgaWYgKCFmcmFtZSkKKwkJICAg IGVycm9yIChfKCJnZXQgcHJldiBmcmFtZSBmYWlsIikpOworCisJCSAgaWYg KCFnZXRfZnJhbWVfcGNfaWZfYXZhaWxhYmxlIChmcmFtZSwgJnBjKSkKKwkJ ICAgIGVycm9yIChfKCJQQyB1bmF2YWlsYWJsZSIpKTsKKwkJfQorCSAgICAg IGlmIChlLnJlYXNvbiA8IDApCisJCXsKKwkJICB3YXJuaW5nIChfKCJcCit0 cmFjZWZyYW1lICVkIGlzIGRyb3BwZWQgYmVjYXVzZSB0cnkgdG8gZ2V0IHRo ZSB2YWx1ZSBvZiBcIiVzXCIgZ290IGVycm9yOiAlcyIpLAorCQkJICAgZnJh bWVfbnVtLCBjb2xsZWN0LT5zdHIsIGUubWVzc2FnZSk7CisJCSAgdHJhY2Vm cmFtZV9pc19kcm9wcGVkID0gMTsKKwkJICBicmVhazsKKwkJfQorCisJICAg ICAgdTY0ID0gcGM7CisJICAgICAgaWYgKGN0Zl9zYXZlX2FsaWduX3dyaXRl ICgmdGNzLCAoZ2RiX2J5dGUgKikgJnU2NCwKKwkJCQkJc2l6ZW9mICh1NjQp LCBzaXplb2YgKHU2NCkpKQorCQlnb3RvIHJlX3dyaXRlX3RwOworCSAgICB9 CisJICBlbHNlCisgICAgICAgICAgICB7CisJICAgICAgc3RydWN0IHZhbHVl ICp2YWw7CisJICAgICAgc3RydWN0IGNsZWFudXAgKmJhY2tfY2hhaW47CisJ ICAgICAgY29uc3QgZ2RiX2J5dGUgKmNvbnRlbnQ7CisKKwkgICAgICBiYWNr X2NoYWluID0gbWFrZV9jbGVhbnVwIChudWxsX2NsZWFudXAsIE5VTEwpOwor CSAgICAgIFRSWV9DQVRDSCAoZSwgUkVUVVJOX01BU0tfRVJST1IpCisJICAg ICAgICB7CisJCSAgdmFsID0gZXZhbHVhdGVfZXhwcmVzc2lvbiAoY29sbGVj dC0+ZXhwcik7CisJCSAgY29udGVudCA9IHZhbHVlX2NvbnRlbnRzICh2YWwp OworCQl9CisJICAgICAgaWYgKGUucmVhc29uIDwgMCB8fCBjb2xsZWN0LT50 eXBlICE9IHZhbHVlX3R5cGUgKHZhbCkpCisJCXsKKwkJICBpZiAoZS5yZWFz b24gPCAwKQorCQkgICAgd2FybmluZyAoXygiXAordHJhY2VmcmFtZSAlZCBp cyBkcm9wcGVkIGJlY2F1c2UgdHJ5IHRvIGdldCB0aGUgdmFsdWUgb2YgXCIl c1wiIGdvdCBlcnJvcjogJXMiKSwKKwkJCSAgICAgZnJhbWVfbnVtLCBjb2xs ZWN0LT5zdHIsIGUubWVzc2FnZSk7CisJCSAgZWxzZQorCQkgICAgd2Fybmlu ZyAoXygiXAordHJhY2VmcmFtZSAlZCBpcyBkcm9wcGVkIGJlY2F1c2UgdHlw ZSBvZiBcIiVzXCIgaXMgd3JvbmcuIiksCisJCQkgICAgIGZyYW1lX251bSwg Y29sbGVjdC0+c3RyKTsKKwkJICB0cmFjZWZyYW1lX2lzX2Ryb3BwZWQgPSAx OworCQkgIGRvX2NsZWFudXBzIChiYWNrX2NoYWluKTsKKwkJICBicmVhazsK KwkJfQorCisJICAgICAgLyogV3JpdGUgdGhpcyB2YWwgYWNjb3JkaW5nIHRv IHR5cGUuICAqLworCSAgICAgIGlmIChjdGZfc2F2ZV9hbGlnbl93cml0ZSAo JnRjcywgY29udGVudCwKKwkJCQkJVFlQRV9MRU5HVEggKGNvbGxlY3QtPnR5 cGUpLAorCQkJCQljb2xsZWN0LT5hbGlnbl9zaXplKSkKKwkJeworCQkgIGRv X2NsZWFudXBzIChiYWNrX2NoYWluKTsKKwkJICBnb3RvIHJlX3dyaXRlX3Rw OworCQl9CisKKwkgICAgICAvKiBGcmVlIHRoZSBtZW1vcnkgdGhhdCBhbGxv YyBieSBldmFsdWF0ZV9leHByZXNzaW9uLiAgKi8KKwkgICAgICBkb19jbGVh bnVwcyAoYmFja19jaGFpbik7CisJICAgIH0KKwl9CisKKyAgICAgIGlmICh0 cmFjZWZyYW1lX2lzX2Ryb3BwZWQpCisJY29udGludWU7CisKKyAgICAgIHRj cy5jb250ZW50X3NpemUgPSB0Y3MuY3VycmVudF9jb250ZW50X3NpemU7Cisg ICAgfQorICBjdGZfc2F2ZV93cml0ZV9jb250ZW50X3NpemUgKCZ0Y3MpOwor CisgIGRvX2NsZWFudXBzIChvbGRfY2hhaW4pOworfQotLS0gL2Rldi9udWxs CisrKyBiL2N0Zi5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qIENURiBmb3JtYXQg c3VwcG9ydC4KKworICAgQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBv ZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5k ZWYgQ1RGX0gKKyNkZWZpbmUgQ1RGX0gKKworZXh0ZXJuIHZvaWQgY3RmX3Nh dmUgKGNvbnN0IGNoYXIgKmRpcm5hbWUpOworCisjZW5kaWYKLS0tIGEvbWkv bWktbWFpbi5jCisrKyBiL21pL21pLW1haW4uYwpAQCAtNDksNiArNDksNyBA QAogI2luY2x1ZGUgIm9zZGF0YS5oIgogI2luY2x1ZGUgInNwbGF5LXRyZWUu aCIKICNpbmNsdWRlICJ0cmFjZXBvaW50LmgiCisjaW5jbHVkZSAiY3RmLmgi CiAjaW5jbHVkZSAiYWRhLWxhbmcuaCIKICNpbmNsdWRlICJsaW5lc3BlYy5o IgogCkBAIC0yNDk1LDE2ICsyNDk2LDE5IEBAIHZvaWQKIG1pX2NtZF90cmFj ZV9zYXZlIChjaGFyICpjb21tYW5kLCBjaGFyICoqYXJndiwgaW50IGFyZ2Mp CiB7CiAgIGludCB0YXJnZXRfc2F2ZXMgPSAwOworICBpbnQgZ2VuZXJhdGVf Y3RmID0gMDsKICAgY2hhciAqZmlsZW5hbWU7CiAKICAgaWYgKGFyZ2MgIT0g MSAmJiBhcmdjICE9IDIpCi0gICAgZXJyb3IgKF8oIlVzYWdlOiAtdHJhY2Ut c2F2ZSBbLXJdIGZpbGVuYW1lIikpOworICAgIGVycm9yIChfKCJVc2FnZTog LXRyYWNlLXNhdmUgWy1yXSBbLWN0Zl0gZmlsZW5hbWUiKSk7CiAKICAgaWYg KGFyZ2MgPT0gMikKICAgICB7CiAgICAgICBmaWxlbmFtZSA9IGFyZ3ZbMV07 CiAgICAgICBpZiAoc3RyY21wIChhcmd2WzBdLCAiLXIiKSA9PSAwKQogCXRh cmdldF9zYXZlcyA9IDE7CisgICAgICBpZiAoc3RyY21wIChhcmd2WzBdLCAi LWN0ZiIpID09IDApCisJZ2VuZXJhdGVfY3RmID0gMTsKICAgICAgIGVsc2UK IAllcnJvciAoXygiSW52YWxpZCBvcHRpb246ICVzIiksIGFyZ3ZbMF0pOwog ICAgIH0KQEAgLTI1MTMsNyArMjUxNywxMCBAQCBtaV9jbWRfdHJhY2Vfc2F2 ZSAoY2hhciAqY29tbWFuZCwgY2hhciAqCiAgICAgICBmaWxlbmFtZSA9IGFy Z3ZbMF07CiAgICAgfQogCi0gIHRyYWNlX3NhdmUgKGZpbGVuYW1lLCB0YXJn ZXRfc2F2ZXMpOworICBpZiAoZ2VuZXJhdGVfY3RmKQorICAgIGN0Zl9zYXZl IChmaWxlbmFtZSk7CisgIGVsc2UKKyAgICB0cmFjZV9zYXZlIChmaWxlbmFt ZSwgdGFyZ2V0X3NhdmVzKTsKIH0KIAogdm9pZAotLS0gYS90cmFjZXBvaW50 LmMKKysrIGIvdHJhY2Vwb2ludC5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5j bHVkZSAiZXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgImNsaS9jbGktdXRpbHMu aCIKICNpbmNsdWRlICJwcm9iZS5oIgorI2luY2x1ZGUgImN0Zi5oIgogCiAv KiByZWFkbGluZSBpbmNsdWRlIGZpbGVzICovCiAjaW5jbHVkZSAicmVhZGxp bmUvcmVhZGxpbmUuaCIKQEAgLTU3Myw3ICs1NzQsNyBAQCB3aGlsZV9zdGVw cGluZ19wc2V1ZG9jb21tYW5kIChjaGFyICphcmdzCiAgIGVycm9yIChfKCJU aGlzIGNvbW1hbmQgY2FuIG9ubHkgYmUgdXNlZCBpbiBhIHRyYWNlcG9pbnQg YWN0aW9ucyBsaXN0LiIpKTsKIH0KIAotc3RhdGljIHZvaWQKK3ZvaWQKIGNv bGxlY3RfcHNldWRvY29tbWFuZCAoY2hhciAqYXJncywgaW50IGZyb21fdHR5 KQogewogICBlcnJvciAoXygiVGhpcyBjb21tYW5kIGNhbiBvbmx5IGJlIHVz ZWQgaW4gYSB0cmFjZXBvaW50IGFjdGlvbnMgbGlzdC4iKSk7CkBAIC0xMTQ3 LDYgKzExNDgsMzQgQEAgZG9fY29sbGVjdF9zeW1ib2wgKGNvbnN0IGNoYXIg KnByaW50X25hbQogICBwLT5jb3VudCsrOwogfQogCitpbnQKK2FkZF9sb2Nh bF9zeW1ib2xzXzEgKGludCB0eXBlLCBDT1JFX0FERFIgcGMsCisJCSAgICAg aXRlcmF0ZV9vdmVyX2Jsb2NrX2FyZ19sb2NhbF92YXJzX2NiIGNiLAorCQkg ICAgIHZvaWQgKmNiX2RhdGEpCit7CisgIHN0cnVjdCBibG9jayAqYmxvY2s7 CisKKyAgaWYgKHR5cGUgPT0gJ0wnKQorICAgIHsKKyAgICAgIGJsb2NrID0g YmxvY2tfZm9yX3BjIChwYyk7CisgICAgICBpZiAoYmxvY2sgPT0gTlVMTCkK KwlyZXR1cm4gLTE7CisKKyAgICAgIGl0ZXJhdGVfb3Zlcl9ibG9ja19sb2Nh bF92YXJzIChibG9jaywgY2IsIGNiX2RhdGEpOworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIHBjID0gZ2V0X3BjX2Z1bmN0aW9uX3N0YXJ0IChwYyk7 CisgICAgICBibG9jayA9IGJsb2NrX2Zvcl9wYyAocGMpOworICAgICAgaWYg KGJsb2NrID09IE5VTEwpCisJcmV0dXJuIC0xOworCisgICAgICBpdGVyYXRl X292ZXJfYmxvY2tfYXJnX3ZhcnMgKGJsb2NrLCBjYiwgY2JfZGF0YSk7Cisg ICAgfQorCisgIHJldHVybiAwOworfQorCiAvKiBBZGQgYWxsIGxvY2FscyAo b3IgYXJncykgc3ltYm9scyB0byBjb2xsZWN0aW9uIGxpc3QuICAqLwogc3Rh dGljIHZvaWQKIGFkZF9sb2NhbF9zeW1ib2xzIChzdHJ1Y3QgY29sbGVjdGlv bl9saXN0ICpjb2xsZWN0LApAQCAtMTE1NSw2ICsxMTg0LDcgQEAgYWRkX2xv Y2FsX3N5bWJvbHMgKHN0cnVjdCBjb2xsZWN0aW9uX2xpcwogewogICBzdHJ1 Y3QgYmxvY2sgKmJsb2NrOwogICBzdHJ1Y3QgYWRkX2xvY2FsX3N5bWJvbHNf ZGF0YSBjYl9kYXRhOworICBjb25zdCBjaGFyICpuYW1lOwogCiAgIGNiX2Rh dGEuY29sbGVjdCA9IGNvbGxlY3Q7CiAgIGNiX2RhdGEuZ2RiYXJjaCA9IGdk YmFyY2g7CkBAIC0xMTY0LDMzICsxMTk0LDE5IEBAIGFkZF9sb2NhbF9zeW1i b2xzIChzdHJ1Y3QgY29sbGVjdGlvbl9saXMKICAgY2JfZGF0YS5jb3VudCA9 IDA7CiAKICAgaWYgKHR5cGUgPT0gJ0wnKQotICAgIHsKLSAgICAgIGJsb2Nr ID0gYmxvY2tfZm9yX3BjIChwYyk7Ci0gICAgICBpZiAoYmxvY2sgPT0gTlVM TCkKLQl7Ci0JICB3YXJuaW5nIChfKCJDYW4ndCBjb2xsZWN0IGxvY2Fsczsg IgotCQkgICAgICJubyBzeW1ib2wgdGFibGUgaW5mbyBhdmFpbGFibGUuXG4i KSk7Ci0JICByZXR1cm47Ci0JfQotCi0gICAgICBpdGVyYXRlX292ZXJfYmxv Y2tfbG9jYWxfdmFycyAoYmxvY2ssIGRvX2NvbGxlY3Rfc3ltYm9sLCAmY2Jf ZGF0YSk7Ci0gICAgICBpZiAoY2JfZGF0YS5jb3VudCA9PSAwKQotCXdhcm5p bmcgKF8oIk5vIGxvY2FscyBmb3VuZCBpbiBzY29wZS4iKSk7Ci0gICAgfQor ICAgIG5hbWUgPSAibG9jYWxzIjsKICAgZWxzZQotICAgIHsKLSAgICAgIHBj ID0gZ2V0X3BjX2Z1bmN0aW9uX3N0YXJ0IChwYyk7Ci0gICAgICBibG9jayA9 IGJsb2NrX2Zvcl9wYyAocGMpOwotICAgICAgaWYgKGJsb2NrID09IE5VTEwp Ci0JewotCSAgd2FybmluZyAoXygiQ2FuJ3QgY29sbGVjdCBhcmdzOyBubyBz eW1ib2wgdGFibGUgaW5mbyBhdmFpbGFibGUuIikpOwotCSAgcmV0dXJuOwot CX0KKyAgICBuYW1lID0gImFyZ3MiOwogCi0gICAgICBpdGVyYXRlX292ZXJf YmxvY2tfYXJnX3ZhcnMgKGJsb2NrLCBkb19jb2xsZWN0X3N5bWJvbCwgJmNi X2RhdGEpOwotICAgICAgaWYgKGNiX2RhdGEuY291bnQgPT0gMCkKLQl3YXJu aW5nIChfKCJObyBhcmdzIGZvdW5kIGluIHNjb3BlLiIpKTsKKyAgaWYgKGFk ZF9sb2NhbF9zeW1ib2xzXzEgKHR5cGUsIHBjLCBkb19jb2xsZWN0X3N5bWJv bCwgJmNiX2RhdGEpKQorICAgIHsKKyAgICAgIHdhcm5pbmcgKF8oIkNhbid0 IGNvbGxlY3QgJXM7IG5vIHN5bWJvbCB0YWJsZSBpbmZvIGF2YWlsYWJsZS5c biIpLAorCSAgICAgICBuYW1lKTsKKyAgICAgIHJldHVybjsKICAgICB9CisK KyAgaWYgKGNiX2RhdGEuY291bnQgPT0gMCkKKyAgICB3YXJuaW5nIChfKCJO byAlcyBmb3VuZCBpbiBzY29wZS4iKSwgbmFtZSk7CiB9CiAKIHN0YXRpYyB2 b2lkCkBAIC0zMTUxLDYgKzMxNjcsNyBAQCBzdGF0aWMgdm9pZAogdHJhY2Vf c2F2ZV9jb21tYW5kIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCiB7CiAg IGludCB0YXJnZXRfZG9lc19zYXZlID0gMDsKKyAgaW50IGdlbmVyYXRlX2N0 ZiA9IDA7CiAgIGNoYXIgKiphcmd2OwogICBjaGFyICpmaWxlbmFtZSA9IE5V TEw7CiAgIHN0cnVjdCBjbGVhbnVwICpiYWNrX3RvOwpAQCAtMzE2NSw2ICsz MTgyLDggQEAgdHJhY2Vfc2F2ZV9jb21tYW5kIChjaGFyICphcmdzLCBpbnQg ZnJvbQogICAgIHsKICAgICAgIGlmIChzdHJjbXAgKCphcmd2LCAiLXIiKSA9 PSAwKQogCXRhcmdldF9kb2VzX3NhdmUgPSAxOworICAgICAgaWYgKHN0cmNt cCAoKmFyZ3YsICItY3RmIikgPT0gMCkKKwlnZW5lcmF0ZV9jdGYgPSAxOwog ICAgICAgZWxzZSBpZiAoKiphcmd2ID09ICctJykKIAllcnJvciAoXygidW5r bm93biBvcHRpb24gYCVzJyIpLCAqYXJndik7CiAgICAgICBlbHNlCkBAIC0z MTc0LDEwICszMTkzLDE4IEBAIHRyYWNlX3NhdmVfY29tbWFuZCAoY2hhciAq YXJncywgaW50IGZyb20KICAgaWYgKCFmaWxlbmFtZSkKICAgICBlcnJvcl9u b19hcmcgKF8oImZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0cmFjZSBkYXRhIikp OwogCi0gIHRyYWNlX3NhdmUgKGZpbGVuYW1lLCB0YXJnZXRfZG9lc19zYXZl KTsKKyAgaWYgKGdlbmVyYXRlX2N0ZikKKyAgICB7CisgICAgICBpZiAodGFy Z2V0X2RvZXNfc2F2ZSkKKwllcnJvcl9ub19hcmcgKF8oIi1yIGNhbm5vdCBi ZSB1c2VkIHdpdGggLWN0Zi4iKSk7CisgICAgICBjdGZfc2F2ZSAoZmlsZW5h bWUpOworICAgIH0KKyAgZWxzZQorICAgIHRyYWNlX3NhdmUgKGZpbGVuYW1l LCB0YXJnZXRfZG9lc19zYXZlKTsKIAogICBpZiAoZnJvbV90dHkpCi0gICAg cHJpbnRmX2ZpbHRlcmVkIChfKCJUcmFjZSBkYXRhIHNhdmVkIHRvIGZpbGUg JyVzJy5cbiIpLCBmaWxlbmFtZSk7CisgICAgcHJpbnRmX2ZpbHRlcmVkIChf KCJUcmFjZSBkYXRhIHNhdmVkIHRvICVzICclcycuXG4iKSwKKwkJICAgICBn ZW5lcmF0ZV9jdGYgPyAiZGlyZWN0b3J5IiA6ICJmaWxlIiwgZmlsZW5hbWUp OwogCiAgIGRvX2NsZWFudXBzIChiYWNrX3RvKTsKIH0KQEAgLTUyMjAsNiAr NTI0Nyw3IEBAIF9pbml0aWFsaXplX3RyYWNlcG9pbnQgKHZvaWQpCiAgIGFk ZF9jb20gKCJ0c2F2ZSIsIGNsYXNzX3RyYWNlLCB0cmFjZV9zYXZlX2NvbW1h bmQsIF8oIlwKIFNhdmUgdGhlIHRyYWNlIGRhdGEgdG8gYSBmaWxlLlxuXAog VXNlIHRoZSAnLXInIG9wdGlvbiB0byBkaXJlY3QgdGhlIHRhcmdldCB0byBz YXZlIGRpcmVjdGx5IHRvIHRoZSBmaWxlLFxuXAorVXNlIHRoZSAnLWN0Zicg b3B0aW9uIHRvIHNhdmUgdGhlIGRhdGEgdG8gQ1RGIGZvcm1hdCxcblwKIHVz aW5nIGl0cyBvd24gZmlsZXN5c3RlbS4iKSk7CiAKICAgYyA9IGFkZF9jb20g KCJ0dmFyaWFibGUiLCBjbGFzc190cmFjZSwgdHJhY2VfdmFyaWFibGVfY29t bWFuZCxfKCJcCi0tLSBhL3RyYWNlcG9pbnQuaAorKysgYi90cmFjZXBvaW50 LmgKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJ0YXJnZXQuaCIKICNp bmNsdWRlICJtZW1yYW5nZS5oIgogI2luY2x1ZGUgImdkYl92ZWNzLmgiCisj aW5jbHVkZSAic3RhY2suaCIKIAogLyogQSB0cmFjZSBzdGF0ZSB2YXJpYWJs ZSBpcyBhIHZhbHVlIG1hbmFnZWQgYnkgYSB0YXJnZXQgYmVpbmcKICAgIHRy YWNlZC4gIEEgdHJhY2Ugc3RhdGUgdmFyaWFibGUgKG9yIHRzdiBmb3Igc2hv cnQpIGNhbiBiZSBhY2Nlc3NlZApAQCAtMjQ2LDYgKzI0Nyw3IEBAIGV4dGVy biB2b2lkIHZhbGlkYXRlX2FjdGlvbmxpbmUgKGNoYXIgKioKIAogZXh0ZXJu IHZvaWQgZW5kX2FjdGlvbnNfcHNldWRvY29tbWFuZCAoY2hhciAqYXJncywg aW50IGZyb21fdHR5KTsKIGV4dGVybiB2b2lkIHdoaWxlX3N0ZXBwaW5nX3Bz ZXVkb2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSk7CitleHRl cm4gdm9pZCBjb2xsZWN0X3BzZXVkb2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGlu dCBmcm9tX3R0eSk7CiAKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vfc3RhdGVfdmFy aWFibGUgKmZpbmRfdHJhY2Vfc3RhdGVfdmFyaWFibGUgKGNvbnN0IGNoYXIg Km5hbWUpOwogZXh0ZXJuIHN0cnVjdCB0cmFjZV9zdGF0ZV92YXJpYWJsZSAq Y3JlYXRlX3RyYWNlX3N0YXRlX3ZhcmlhYmxlIChjb25zdCBjaGFyICpuYW1l KTsKQEAgLTI5MCw0ICsyOTIsNyBAQCBleHRlcm4gc3RydWN0IHRyYWNlZnJh bWVfaW5mbyAqcGFyc2VfdHJhCiBleHRlcm4gaW50IHRyYWNlZnJhbWVfYXZh aWxhYmxlX21lbW9yeSAoVkVDKG1lbV9yYW5nZV9zKSAqKnJlc3VsdCwKIAkJ CQkJQ09SRV9BRERSIG1lbWFkZHIsIFVMT05HRVNUIGxlbik7CiAKK2V4dGVy biBpbnQgYWRkX2xvY2FsX3N5bWJvbHNfMSAoaW50IHR5cGUsIENPUkVfQURE UiBwYywKKwkJCQlpdGVyYXRlX292ZXJfYmxvY2tfYXJnX2xvY2FsX3ZhcnNf Y2IgY2IsCisJCQkJdm9pZCAqY2JfZGF0YSk7CiAjZW5kaWYJLyogVFJBQ0VQ T0lOVF9IICovCg== --e89a8fb1f506ee1c2704d2bd0abc--