From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ua1-x929.google.com (mail-ua1-x929.google.com [IPv6:2607:f8b0:4864:20::929]) by sourceware.org (Postfix) with ESMTPS id 5D1683847812 for ; Thu, 27 May 2021 05:03:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5D1683847812 Received: by mail-ua1-x929.google.com with SMTP id j2so1060973uak.7 for ; Wed, 26 May 2021 22:03:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=V0PcihZq9CFT2joGz1maYm5sBmcpSTChGVloB/FYWVI=; b=CHYNDNMaJgBMuak/bKwdh57stEaYlasFcRpavhQWeVxUpaKKwQcd77iD/bfNHR7R0V tJhEp9j4gcePcxDUvNIlYQHlagjfs1JKJ9rbCnNFGqzodQUOETzpvqy0xX0InGK08Zvs nEaW+8HXd/Xk4BwRC37FrTKlunGrNDu07VlVLcj38SuX8kZc6blyg8saqGKO5EZCIRz1 lkOvoDuw5ifPwYvbDfkHiwSfZYo80T4ngkn4yc4jFZ53VF2KlPV/HGyqrbgpg9lZScJL 9FlDD0V2g6Ec2PexemtJbsHFh6UHHq42i3tawea3bzlMDryAo6hhY1pMLkKNcd7QbzgR hDoQ== X-Gm-Message-State: AOAM532NIr4GxA7wrwXEmbf6DHMZNGaOsLPAkKARCF+AWCvFWRh2jNvD Z1fe0JFwEgoiR+EzP0HpkZWSkbLGcDLye2g9saFvxNZfyh3S/Q== X-Google-Smtp-Source: ABdhPJzLrlK/kF4irpOh6lCfoZAYj/GWOdekkRQtq9csoU56kL9octbCkRqGjGtZEWcgNYqCl60LL26nshAEa1LCCSA= X-Received: by 2002:ab0:3ad:: with SMTP id 42mr840986uau.33.1622091796429; Wed, 26 May 2021 22:03:16 -0700 (PDT) MIME-Version: 1.0 References: <20210513095433.GH1179226@tucnak> <20210513113704.GI1179226@tucnak> In-Reply-To: From: Hongtao Liu Date: Thu, 27 May 2021 13:07:09 +0800 Message-ID: Subject: Re: [PATCH] [i386] Fix _mm256_zeroupper to notify LRA that vzeroupper will kill sse registers. [PR target/82735] To: Hongtao Liu via Gcc-patches , Jakub Jelinek , Uros Bizjak , Hongtao Liu , "H. J. Lu" , Richard Sandiford Content-Type: multipart/mixed; boundary="00000000000051e7df05c348ad57" X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_MANYTO, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 May 2021 05:03:20 -0000 --00000000000051e7df05c348ad57 Content-Type: text/plain; charset="UTF-8" Hi: This is an updated patch which implements vzeroupper as call_insn which has a special vzeroupper ABI, also in this patch i reverted r11-7684, r10-6451, r10-3677 which seems to fix the same issue but in a different way. Bootstrapped and regtested on x86_64-linux-gnux{-m32,} and x86_64-linux-gnux{-m32 \-march=cascadelake,-march=cascadelake}. Also test the patch on SPEC2017 and eembc, no performance impact as expected. Ok for trunk? gcc/ChangeLog: PR target/82735 * config/i386/i386-expand.c (ix86_expand_builtin): Remove assignment of cfun->machine->has_explicit_vzeroupper. * config/i386/i386-features.c (ix86_add_reg_usage_to_vzerouppers): Delete. (ix86_add_reg_usage_to_vzeroupper): Ditto. (rest_of_handle_insert_vzeroupper): Remove ix86_add_reg_usage_to_vzerouppers, add df_analyze at the end of the function. (gate): Remove cfun->machine->has_explicit_vzeroupper. * config/i386/i386-protos.h (ix86_expand_avx_vzeroupper): Declared. * config/i386/i386.c (ix86_insn_callee_abi): New function. (ix86_initialize_callee_abi): Ditto. (ix86_expand_avx_vzeroupper): Ditto. (ix86_hard_regno_call_part_clobbered): Adjust for vzeroupper ABI. (TARGET_INSN_CALLEE_ABI): Define as ix86_insn_callee_abi. * config/i386/i386.h (enum i386_insn_callee_abi_index): New. (struct GTY(()) machine_function): Delete has_explicit_vzeroupper. * config/i386/i386.md (enum unspec): New member UNSPEC_CALLEE_ABI. * config/i386/predicates.md (vzeroupper_pattern): Adjust. * config/i386/sse.md (avx_vzeroupper): Call ix86_expand_avx_vzeroupper. (*avx_vzeroupper): Rename to .. (avx_vzeroupper_callee_abi): .. this, and adjust pattern as call_insn which has a special vzeroupper ABI. (*avx_vzeroupper_1): Deleted. * df-scan.c (df_get_call_refs): When call_insn is a fake call, it won't use stack pointer reg. * final.c (leaf_function_p): When call_insn is a fake call, it won't affect caller as a leaf function. * reg-stack.c (callee_clobbers_any_stack_reg): New. (subst_stack_regs): When call_insn doesn't clobber any stack reg, don't clear the arguments. * rtl.c (shallow_copy_rtx): Don't clear flag used when orig is a insn. * shrink-wrap.c (requires_stack_frame_p): No need for stack frame for a fake call. gcc/testsuite/ChangeLog: PR target/82735 * gcc.target/i386/pr82735-1.c: New test. * gcc.target/i386/pr82735-2.c: New test. * gcc.target/i386/pr82735-3.c: New test. * gcc.target/i386/pr82735-4.c: New test. * gcc.target/i386/pr82735-5.c: New test. --00000000000051e7df05c348ad57 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-i386-Fix-_mm256_zeroupper-by-representing-the-instru.patch" Content-Disposition: attachment; filename="0001-i386-Fix-_mm256_zeroupper-by-representing-the-instru.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kp69100k0 RnJvbSBjODk4ZDE2ODkxZWQ0ZTljZjEwNGVlMzY5MTQzOTlkYTBiZmY0YTIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBsaXVob25ndCA8aG9uZ3Rhby5saXVAaW50ZWwuY29tPgpEYXRl OiBXZWQsIDEyIE1heSAyMDIxIDE0OjIwOjU0ICswODAwClN1YmplY3Q6IFtQQVRDSF0gW2kzODZd IEZpeCBfbW0yNTZfemVyb3VwcGVyIGJ5IHJlcHJlc2VudGluZyB0aGUgaW5zdHJ1Y3Rpb25zCiBh cyBjYWxsX2luc25zIGluIHdoaWNoIHRoZSBjYWxsIGhhcyBhIHNwZWNpYWwgdnplcm91cHBlciBB QkkuCgpXaGVuIF9fYnVpbHRpbl9pYTMyX3Z6ZXJvdXBwZXIgaXMgY2FsbGVkIGV4cGxpY2l0bHks IHRoZSBjb3JyZXNwb25kaW5nCnZ6ZXJvdXBwZXIgcGF0dGVybiBkb2VzIG5vdCBjYXJyeSBhbnkg Q0xPQkJFUlMgb3IgU0VUcyBiZWZvcmUgTFJBLAp3aGljaCBsZWFkcyB0byBpbmNvcnJlY3Qgb3B0 aW1pemF0aW9uIGluIHBhc3NfcmVsb2FkLiBJbiBvcmRlciB0bwpzb2x2ZSB0aGlzIHByb2JsZW0s IHRoaXMgcGF0Y2ggcmVmaW5lIGluc3RydWN0aW9ucyBhcyBjYWxsX2luc25zIGluCndoaWNoIHRo ZSBjYWxsIGhhcyBhIHNwZWNpYWwgdnplcm91cHBlciBBQkkuCgpnY2MvQ2hhbmdlTG9nOgoKCVBS IHRhcmdldC84MjczNQoJKiBjb25maWcvaTM4Ni9pMzg2LWV4cGFuZC5jIChpeDg2X2V4cGFuZF9i dWlsdGluKTogUmVtb3ZlCglhc3NpZ25tZW50IG9mIGNmdW4tPm1hY2hpbmUtPmhhc19leHBsaWNp dF92emVyb3VwcGVyLgoJKiBjb25maWcvaTM4Ni9pMzg2LWZlYXR1cmVzLmMKCShpeDg2X2FkZF9y ZWdfdXNhZ2VfdG9fdnplcm91cHBlcnMpOiBEZWxldGUuCgkoaXg4Nl9hZGRfcmVnX3VzYWdlX3Rv X3Z6ZXJvdXBwZXIpOiBEaXR0by4KCShyZXN0X29mX2hhbmRsZV9pbnNlcnRfdnplcm91cHBlcik6 IFJlbW92ZQoJaXg4Nl9hZGRfcmVnX3VzYWdlX3RvX3Z6ZXJvdXBwZXJzLCBhZGQgZGZfYW5hbHl6 ZSBhdCB0aGUgZW5kCglvZiB0aGUgZnVuY3Rpb24uCgkoZ2F0ZSk6IFJlbW92ZSBjZnVuLT5tYWNo aW5lLT5oYXNfZXhwbGljaXRfdnplcm91cHBlci4KCSogY29uZmlnL2kzODYvaTM4Ni1wcm90b3Mu aCAoaXg4Nl9leHBhbmRfYXZ4X3Z6ZXJvdXBwZXIpOgoJRGVjbGFyZWQuCgkqIGNvbmZpZy9pMzg2 L2kzODYuYyAoaXg4Nl9pbnNuX2NhbGxlZV9hYmkpOiBOZXcgZnVuY3Rpb24uCgkoaXg4Nl9pbml0 aWFsaXplX2NhbGxlZV9hYmkpOiBEaXR0by4KCShpeDg2X2V4cGFuZF9hdnhfdnplcm91cHBlcik6 IERpdHRvLgoJKGl4ODZfaGFyZF9yZWdub19jYWxsX3BhcnRfY2xvYmJlcmVkKTogQWRqdXN0IGZv ciB2emVyb3VwcGVyCglBQkkuCgkoVEFSR0VUX0lOU05fQ0FMTEVFX0FCSSk6IERlZmluZSBhcyBp eDg2X2luc25fY2FsbGVlX2FiaS4KCSogY29uZmlnL2kzODYvaTM4Ni5oIChlbnVtIGkzODZfaW5z bl9jYWxsZWVfYWJpX2luZGV4KTogTmV3LgoJKHN0cnVjdCBHVFkoKCkpIG1hY2hpbmVfZnVuY3Rp b24pOiBEZWxldGUKCWhhc19leHBsaWNpdF92emVyb3VwcGVyLgoJKiBjb25maWcvaTM4Ni9pMzg2 Lm1kIChlbnVtIHVuc3BlYyk6IE5ldyBtZW1iZXIKCVVOU1BFQ19DQUxMRUVfQUJJLgoJKiBjb25m aWcvaTM4Ni9wcmVkaWNhdGVzLm1kICh2emVyb3VwcGVyX3BhdHRlcm4pOiBBZGp1c3QuCgkqIGNv bmZpZy9pMzg2L3NzZS5tZCAoYXZ4X3Z6ZXJvdXBwZXIpOiBDYWxsCglpeDg2X2V4cGFuZF9hdnhf dnplcm91cHBlci4KCSgqYXZ4X3Z6ZXJvdXBwZXIpOiBSZW5hbWUgdG8gLi4KCShhdnhfdnplcm91 cHBlcl9jYWxsZWVfYWJpKTogLi4gdGhpcywgYW5kIGFkanVzdCBwYXR0ZXJuIGFzCgljYWxsX2lu c24gd2hpY2ggaGFzIGEgc3BlY2lhbCB2emVyb3VwcGVyIEFCSS4KCSgqYXZ4X3Z6ZXJvdXBwZXJf MSk6IERlbGV0ZWQuCgkqIGRmLXNjYW4uYyAoZGZfZ2V0X2NhbGxfcmVmcyk6IFdoZW4gY2FsbF9p bnNuIGlzIGEgZmFrZSBjYWxsLAoJaXQgd29uJ3QgdXNlIHN0YWNrIHBvaW50ZXIgcmVnLgoJKiBm aW5hbC5jIChsZWFmX2Z1bmN0aW9uX3ApOiBXaGVuIGNhbGxfaW5zbiBpcyBhIGZha2UgY2FsbCwg aXQKCXdvbid0IGFmZmVjdCBjYWxsZXIgYXMgYSBsZWFmIGZ1bmN0aW9uLgoJKiByZWctc3RhY2su YyAoY2FsbGVlX2Nsb2JiZXJzX2FueV9zdGFja19yZWcpOiBOZXcuCgkoc3Vic3Rfc3RhY2tfcmVn cyk6IFdoZW4gY2FsbF9pbnNuIGRvZXNuJ3QgY2xvYmJlciBhbnkgc3RhY2sKCXJlZywgZG9uJ3Qg Y2xlYXIgdGhlIGFyZ3VtZW50cy4KCSogcnRsLmMgKHNoYWxsb3dfY29weV9ydHgpOiBEb24ndCBj bGVhciBmbGFnIHVzZWQgd2hlbiBvcmlnIGlzCglhIGluc24uCgkqIHNocmluay13cmFwLmMgKHJl cXVpcmVzX3N0YWNrX2ZyYW1lX3ApOiBObyBuZWVkIGZvciBzdGFjawoJZnJhbWUgZm9yIGEgZmFr ZSBjYWxsLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJUFIgdGFyZ2V0LzgyNzM1CgkqIGdj Yy50YXJnZXQvaTM4Ni9wcjgyNzM1LTEuYzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9w cjgyNzM1LTIuYzogTmV3IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjgyNzM1LTMuYzogTmV3 IHRlc3QuCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjgyNzM1LTQuYzogTmV3IHRlc3QuCgkqIGdjYy50 YXJnZXQvaTM4Ni9wcjgyNzM1LTUuYzogTmV3IHRlc3QuCi0tLQogZ2NjL2NvbmZpZy9pMzg2L2kz ODYtZXhwYW5kLmMgICAgICAgICAgICAgfCAgNCAtCiBnY2MvY29uZmlnL2kzODYvaTM4Ni1mZWF0 dXJlcy5jICAgICAgICAgICB8IDk5ICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiBnY2MvY29uZmln L2kzODYvaTM4Ni1wcm90b3MuaCAgICAgICAgICAgICB8ICAyICsKIGdjYy9jb25maWcvaTM4Ni9p Mzg2LmMgICAgICAgICAgICAgICAgICAgIHwgNTMgKysrKysrKysrKystCiBnY2MvY29uZmlnL2kz ODYvaTM4Ni5oICAgICAgICAgICAgICAgICAgICB8IDEyICsrLQogZ2NjL2NvbmZpZy9pMzg2L2kz ODYubWQgICAgICAgICAgICAgICAgICAgfCAgNCArCiBnY2MvY29uZmlnL2kzODYvcHJlZGljYXRl cy5tZCAgICAgICAgICAgICB8ICA1ICstCiBnY2MvY29uZmlnL2kzODYvc3NlLm1kICAgICAgICAg ICAgICAgICAgICB8IDU4ICsrKystLS0tLS0tLS0KIGdjYy9kZi1zY2FuLmMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDQgKy0KIGdjYy9maW5hbC5jICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDMgKy0KIGdjYy9yZWctc3RhY2suYyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgMTggKysrKy0KIGdjYy9ydGwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDYgKy0KIGdjYy9zaHJpbmstd3JhcC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMg Ky0KIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODI3MzUtMS5jIHwgMjkgKysrKysr KwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS0yLmMgfCAyMiArKysrKwog Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS0zLmMgfCAgNSArKwogZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS00LmMgfCA0OCArKysrKysrKysrKwogZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS01LmMgfCA1NCArKysrKysrKysrKysr CiAxOCBmaWxlcyBjaGFuZ2VkLCAyODIgaW5zZXJ0aW9ucygrKSwgMTQ3IGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODI3MzUt MS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4 MjczNS0yLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9wcjgyNzM1LTMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L3ByODI3MzUtNC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4MjczNS01LmMKCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4 Ni1leHBhbmQuYyBiL2djYy9jb25maWcvaTM4Ni9pMzg2LWV4cGFuZC5jCmluZGV4IDlmM2Q0MTk1 NWEyLi5kMjVkNTlhYTRlNyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYtZXhwYW5k LmMKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYtZXhwYW5kLmMKQEAgLTEzMjgyLDEwICsxMzI4 Miw2IEBAIHJkc2VlZF9zdGVwOgogCiAgICAgICByZXR1cm4gMDsKIAotICAgIGNhc2UgSVg4Nl9C VUlMVElOX1ZaRVJPVVBQRVI6Ci0gICAgICBjZnVuLT5tYWNoaW5lLT5oYXNfZXhwbGljaXRfdnpl cm91cHBlciA9IHRydWU7Ci0gICAgICBicmVhazsKLQogICAgIGRlZmF1bHQ6CiAgICAgICBicmVh azsKICAgICB9CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni1mZWF0dXJlcy5jIGIv Z2NjL2NvbmZpZy9pMzg2L2kzODYtZmVhdHVyZXMuYwppbmRleCA3Nzc4M2ExNTRiNi4uYTI1NzY5 YWU0NzggMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWZlYXR1cmVzLmMKKysrIGIv Z2NjL2NvbmZpZy9pMzg2L2kzODYtZmVhdHVyZXMuYwpAQCAtMTc2OCw5MiArMTc2OCwyMiBAQCBj b252ZXJ0X3NjYWxhcnNfdG9fdmVjdG9yIChib29sIHRpbW9kZV9wKQogICByZXR1cm4gMDsKIH0K IAotLyogTW9kaWZ5IHRoZSB2emVyb3VwcGVyIHBhdHRlcm4gaW4gSU5TTiBzbyB0aGF0IGl0IGRl c2NyaWJlcyB0aGUgZWZmZWN0Ci0gICB0aGF0IHRoZSBpbnN0cnVjdGlvbiBoYXMgb24gdGhlIFNT RSByZWdpc3RlcnMuICBMSVZFX1JFR1MgYXJlIHRoZSBzZXQKLSAgIG9mIHJlZ2lzdGVycyB0aGF0 IGFyZSBsaXZlIGFjcm9zcyB0aGUgaW5zdHJ1Y3Rpb24uCi0KLSAgIEZvciBhIGxpdmUgcmVnaXN0 ZXIgUiB3ZSB1c2U6Ci0KLSAgICAgKHNldCAocmVnOlYyREYgUikgKHJlZzpWMkRGIFIpKQotCi0g ICB3aGljaCBwcmVzZXJ2ZXMgdGhlIGxvdyAxMjggYml0cyBidXQgY2xvYmJlcnMgdGhlIHVwcGVy IGJpdHMuICAqLwotCi1zdGF0aWMgdm9pZAotaXg4Nl9hZGRfcmVnX3VzYWdlX3RvX3Z6ZXJvdXBw ZXIgKHJ0eF9pbnNuICppbnNuLCBiaXRtYXAgbGl2ZV9yZWdzKQotewotICBydHggcGF0dGVybiA9 IFBBVFRFUk4gKGluc24pOwotICB1bnNpZ25lZCBpbnQgbnJlZ3MgPSBUQVJHRVRfNjRCSVQgPyAx NiA6IDg7Ci0gIHVuc2lnbmVkIGludCBucGF0cyA9IG5yZWdzOwotICBmb3IgKHVuc2lnbmVkIGlu dCBpID0gMDsgaSA8IG5yZWdzOyArK2kpCi0gICAgewotICAgICAgdW5zaWduZWQgaW50IHJlZ25v ID0gR0VUX1NTRV9SRUdOTyAoaSk7Ci0gICAgICBpZiAoIWJpdG1hcF9iaXRfcCAobGl2ZV9yZWdz LCByZWdubykpCi0JbnBhdHMtLTsKLSAgICB9Ci0gIGlmIChucGF0cyA9PSAwKQotICAgIHJldHVy bjsKLSAgcnR2ZWMgdmVjID0gcnR2ZWNfYWxsb2MgKG5wYXRzICsgMSk7Ci0gIFJUVkVDX0VMVCAo dmVjLCAwKSA9IFhWRUNFWFAgKHBhdHRlcm4sIDAsIDApOwotICBmb3IgKHVuc2lnbmVkIGludCBp ID0gMCwgaiA9IDA7IGkgPCBucmVnczsgKytpKQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGludCBy ZWdubyA9IEdFVF9TU0VfUkVHTk8gKGkpOwotICAgICAgaWYgKCFiaXRtYXBfYml0X3AgKGxpdmVf cmVncywgcmVnbm8pKQotCWNvbnRpbnVlOwotICAgICAgcnR4IHJlZyA9IGdlbl9ydHhfUkVHIChW MkRJbW9kZSwgcmVnbm8pOwotICAgICAgKytqOwotICAgICAgUlRWRUNfRUxUICh2ZWMsIGopID0g Z2VuX3J0eF9TRVQgKHJlZywgcmVnKTsKLSAgICB9Ci0gIFhWRUMgKHBhdHRlcm4sIDApID0gdmVj OwotICBJTlNOX0NPREUgKGluc24pID0gLTE7Ci0gIGRmX2luc25fcmVzY2FuIChpbnNuKTsKLX0K LQotLyogV2FsayB0aGUgdnplcm91cHBlciBpbnN0cnVjdGlvbnMgaW4gdGhlIGZ1bmN0aW9uIGFu ZCBhbm5vdGF0ZSB0aGVtCi0gICB3aXRoIHRoZSBlZmZlY3QgdGhhdCB0aGV5IGhhdmUgb24gdGhl IFNTRSByZWdpc3RlcnMuICAqLwotCi1zdGF0aWMgdm9pZAotaXg4Nl9hZGRfcmVnX3VzYWdlX3Rv X3Z6ZXJvdXBwZXJzICh2b2lkKQotewotICBiYXNpY19ibG9jayBiYjsKLSAgcnR4X2luc24gKmlu c247Ci0gIGF1dG9fYml0bWFwIGxpdmVfcmVnczsKLQotICBkZl9hbmFseXplICgpOwotICBGT1Jf RUFDSF9CQl9GTiAoYmIsIGNmdW4pCi0gICAgewotICAgICAgYml0bWFwX2NvcHkgKGxpdmVfcmVn cywgZGZfZ2V0X2xpdmVfb3V0IChiYikpOwotICAgICAgZGZfc2ltdWxhdGVfaW5pdGlhbGl6ZV9i YWNrd2FyZHMgKGJiLCBsaXZlX3JlZ3MpOwotICAgICAgRk9SX0JCX0lOU05TX1JFVkVSU0UgKGJi LCBpbnNuKQotCXsKLQkgIGlmICghTk9OREVCVUdfSU5TTl9QIChpbnNuKSkKLQkgICAgY29udGlu dWU7Ci0JICBpZiAodnplcm91cHBlcl9wYXR0ZXJuIChQQVRURVJOIChpbnNuKSwgVk9JRG1vZGUp KQotCSAgICBpeDg2X2FkZF9yZWdfdXNhZ2VfdG9fdnplcm91cHBlciAoaW5zbiwgbGl2ZV9yZWdz KTsKLQkgIGRmX3NpbXVsYXRlX29uZV9pbnNuX2JhY2t3YXJkcyAoYmIsIGluc24sIGxpdmVfcmVn cyk7Ci0JfQotICAgIH0KLX0KLQogc3RhdGljIHVuc2lnbmVkIGludAogcmVzdF9vZl9oYW5kbGVf aW5zZXJ0X3Z6ZXJvdXBwZXIgKHZvaWQpCiB7Ci0gIGlmIChUQVJHRVRfVlpFUk9VUFBFUgotICAg ICAgJiYgZmxhZ19leHBlbnNpdmVfb3B0aW1pemF0aW9ucwotICAgICAgJiYgIW9wdGltaXplX3Np emUpCi0gICAgewotICAgICAgLyogdnplcm91cHBlciBpbnN0cnVjdGlvbnMgYXJlIGluc2VydGVk IGltbWVkaWF0ZWx5IGFmdGVyIHJlbG9hZCB0bwotCSBhY2NvdW50IGZvciBwb3NzaWJsZSBzcGls bHMgZnJvbSAyNTZiaXQgb3IgNTEyYml0IHJlZ2lzdGVycy4gIFRoZSBwYXNzCi0JIHJldXNlcyBt b2RlIHN3aXRjaGluZyBpbmZyYXN0cnVjdHVyZSBieSByZS1ydW5uaW5nIG1vZGUgaW5zZXJ0aW9u Ci0JIHBhc3MsIHNvIGRpc2FibGUgZW50aXRpZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwcm9j ZXNzZWQuICAqLwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfMzg2X0VOVElUSUVTOyBp KyspCi0JaXg4Nl9vcHRpbWl6ZV9tb2RlX3N3aXRjaGluZ1tpXSA9IDA7CisgIC8qIHZ6ZXJvdXBw ZXIgaW5zdHJ1Y3Rpb25zIGFyZSBpbnNlcnRlZCBpbW1lZGlhdGVseSBhZnRlciByZWxvYWQgdG8K KyAgICAgYWNjb3VudCBmb3IgcG9zc2libGUgc3BpbGxzIGZyb20gMjU2Yml0IG9yIDUxMmJpdCBy ZWdpc3RlcnMuICBUaGUgcGFzcworICAgICByZXVzZXMgbW9kZSBzd2l0Y2hpbmcgaW5mcmFzdHJ1 Y3R1cmUgYnkgcmUtcnVubmluZyBtb2RlIGluc2VydGlvbgorICAgICBwYXNzLCBzbyBkaXNhYmxl IGVudGl0aWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLiAgKi8KKyAgZm9yIChp bnQgaSA9IDA7IGkgPCBNQVhfMzg2X0VOVElUSUVTOyBpKyspCisgICAgaXg4Nl9vcHRpbWl6ZV9t b2RlX3N3aXRjaGluZ1tpXSA9IDA7CiAKLSAgICAgIGl4ODZfb3B0aW1pemVfbW9kZV9zd2l0Y2hp bmdbQVZYX1UxMjhdID0gMTsKKyAgaXg4Nl9vcHRpbWl6ZV9tb2RlX3N3aXRjaGluZ1tBVlhfVTEy OF0gPSAxOwogCi0gICAgICAvKiBDYWxsIG9wdGltaXplX21vZGVfc3dpdGNoaW5nLiAgKi8KLSAg ICAgIGctPmdldF9wYXNzZXMgKCktPmV4ZWN1dGVfcGFzc19tb2RlX3N3aXRjaGluZyAoKTsKLSAg ICB9Ci0gIGl4ODZfYWRkX3JlZ191c2FnZV90b192emVyb3VwcGVycyAoKTsKKyAgLyogQ2FsbCBv cHRpbWl6ZV9tb2RlX3N3aXRjaGluZy4gICovCisgIGctPmdldF9wYXNzZXMgKCktPmV4ZWN1dGVf cGFzc19tb2RlX3N3aXRjaGluZyAoKTsKKworICBkZl9hbmFseXplICgpOwogICByZXR1cm4gMDsK IH0KIApAQCAtMTg4MiwxMSArMTgxMiw4IEBAIHB1YmxpYzoKICAgLyogb3B0X3Bhc3MgbWV0aG9k czogKi8KICAgdmlydHVhbCBib29sIGdhdGUgKGZ1bmN0aW9uICopCiAgICAgewotICAgICAgcmV0 dXJuIFRBUkdFVF9BVlgKLQkgICAgICYmICgoVEFSR0VUX1ZaRVJPVVBQRVIKLQkJICAmJiBmbGFn X2V4cGVuc2l2ZV9vcHRpbWl6YXRpb25zCi0JCSAgJiYgIW9wdGltaXplX3NpemUpCi0JCSB8fCBj ZnVuLT5tYWNoaW5lLT5oYXNfZXhwbGljaXRfdnplcm91cHBlcik7CisgICAgICByZXR1cm4gVEFS R0VUX0FWWCAmJiBUQVJHRVRfVlpFUk9VUFBFUgorCSYmIGZsYWdfZXhwZW5zaXZlX29wdGltaXph dGlvbnMgJiYgIW9wdGltaXplX3NpemU7CiAgICAgfQogCiAgIHZpcnR1YWwgdW5zaWduZWQgaW50 IGV4ZWN1dGUgKGZ1bmN0aW9uICopCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni1w cm90b3MuaCBiL2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5oCmluZGV4IDc3ODJjZjExNjNm Li5lODFiOTg3MmM2YyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmgK KysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmgKQEAgLTUxLDYgKzUxLDcgQEAgZXh0 ZXJuIHZvaWQgaXg4Nl9yZXNldF9wcmV2aW91c19mbmRlY2wgKHZvaWQpOwogZXh0ZXJuIGJvb2wg aXg4Nl91c2luZ19yZWRfem9uZSAodm9pZCk7CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXg4Nl9y ZWdtb2RlX25hdHVyYWxfc2l6ZSAobWFjaGluZV9tb2RlKTsKKwogI2lmZGVmIFJUWF9DT0RFCiBl eHRlcm4gaW50IHN0YW5kYXJkXzgwMzg3X2NvbnN0YW50X3AgKHJ0eCk7CiBleHRlcm4gY29uc3Qg Y2hhciAqc3RhbmRhcmRfODAzODdfY29uc3RhbnRfb3Bjb2RlIChydHgpOwpAQCAtMjE2LDYgKzIx Nyw3IEBAIGV4dGVybiBydHggaXg4Nl9zcGxpdF9zdGFja19ndWFyZCAodm9pZCk7CiBleHRlcm4g dm9pZCBpeDg2X21vdmVfdmVjdG9yX2hpZ2hfc3NlX3RvX21teCAocnR4KTsKIGV4dGVybiB2b2lk IGl4ODZfc3BsaXRfbW14X3BhY2sgKHJ0eFtdLCBlbnVtIHJ0eF9jb2RlKTsKIGV4dGVybiB2b2lk IGl4ODZfc3BsaXRfbW14X3B1bnBjayAocnR4W10sIGJvb2wpOworZXh0ZXJuIHZvaWQgaXg4Nl9l eHBhbmRfYXZ4X3Z6ZXJvdXBwZXIgKHZvaWQpOwogCiAjaWZkZWYgVFJFRV9DT0RFCiBleHRlcm4g dm9pZCBpbml0X2N1bXVsYXRpdmVfYXJncyAoQ1VNVUxBVElWRV9BUkdTICosIHRyZWUsIHJ0eCwg dHJlZSwgaW50KTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmMgYi9nY2MvY29u ZmlnL2kzODYvaTM4Ni5jCmluZGV4IDc0M2Q4YTI1ZmUzLi5jZWNjMDdlNzM3MSAxMDA2NDQKLS0t IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYworKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCkBA IC0xOTQ5NCwxNSArMTk0OTQsNjMgQEAgaXg4Nl9oYXJkX3JlZ25vX21vZGVfb2sgKHVuc2lnbmVk IGludCByZWdubywgbWFjaGluZV9tb2RlIG1vZGUpCiAgIHJldHVybiBmYWxzZTsKIH0KIAorLyog SW1wbGVtZW50IFRBUkdFVF9JTlNOX0NBTExFRV9BQkkuICAqLworCitjb25zdCBwcmVkZWZpbmVk X2Z1bmN0aW9uX2FiaSAmCitpeDg2X2luc25fY2FsbGVlX2FiaSAoY29uc3QgcnR4X2luc24gKmlu c24pCit7CisgIHVuc2lnbmVkIGludCBhYmlfaWQgPSAwOworICBydHggcGF0ID0gUEFUVEVSTiAo aW5zbik7CisgIGlmICh2emVyb3VwcGVyX3BhdHRlcm4gKHBhdCwgVk9JRG1vZGUpKQorICAgIGFi aV9pZCA9IEkzODZfVlpFUk9VUFBFUjsKKworICByZXR1cm4gZnVuY3Rpb25fYWJpc1thYmlfaWRd OworfQorCisvKiBJbml0aWFsaXplIGZ1bmN0aW9uX2FiaXMgd2l0aCBjb3JyZXNwb25kaW5nIGFi aV9pZCwKKyAgIGN1cnJlbnRseSBvbmx5IGhhbmRsZSB2emVyb3VwcGVyLiAgKi8KK3ZvaWQKK2l4 ODZfaW5pdGlhbGl6ZV9jYWxsZWVfYWJpICh1bnNpZ25lZCBpbnQgYWJpX2lkKQoreworICBnY2Nf YXNzZXJ0IChhYmlfaWQgPT0gSTM4Nl9WWkVST1VQUEVSKTsKKyAgcHJlZGVmaW5lZF9mdW5jdGlv bl9hYmkgJnZ6ZXJvdXBwZXJfYWJpID0gZnVuY3Rpb25fYWJpc1thYmlfaWRdOworICBpZiAoIXZ6 ZXJvdXBwZXJfYWJpLmluaXRpYWxpemVkX3AgKCkpCisgICAgeworICAgICAgSEFSRF9SRUdfU0VU IGZ1bGxfcmVnX2Nsb2JiZXJzOworICAgICAgQ0xFQVJfSEFSRF9SRUdfU0VUIChmdWxsX3JlZ19j bG9iYmVycyk7CisgICAgICB2emVyb3VwcGVyX2FiaS5pbml0aWFsaXplIChJMzg2X1ZaRVJPVVBQ RVIsIGZ1bGxfcmVnX2Nsb2JiZXJzKTsKKyAgICB9Cit9CisKK3ZvaWQKK2l4ODZfZXhwYW5kX2F2 eF92emVyb3VwcGVyICh2b2lkKQoreworICAvKiBJbml0aWFsaXplIHZ6ZXJvdXBwZXJfYWJpIGhl cmUuICAqLworICBpeDg2X2luaXRpYWxpemVfY2FsbGVlX2FiaSAoSTM4Nl9WWkVST1VQUEVSKTsK KyAgcnR4X2luc24gKmluc24gPSBlbWl0X2NhbGxfaW5zbiAoZ2VuX2F2eF92emVyb3VwcGVyX2Nh bGxlZV9hYmkgKCkpOworICAvKiBSZXR1cm4gZmFsc2UgZm9yIG5vbi1sb2NhbCBnb3RvIGluIGNh bl9ub25sb2NhbF9nb3RvLiAgKi8KKyAgbWFrZV9yZWdfZWhfcmVnaW9uX25vdGUgKGluc24sIDAs IElOVF9NSU4pOworICAvKiBGbGFnIHVzZWQgZm9yIGNhbGxfaW5zbiBpbmRpY2F0ZXMgaXQncyBh IGZha2UgY2FsbC4gICovCisgIFJUWF9GTEFHIChpbnNuLCB1c2VkKSA9IDE7Cit9CisKKwogLyog SW1wbGVtZW50IFRBUkdFVF9IQVJEX1JFR05PX0NBTExfUEFSVF9DTE9CQkVSRUQuICBUaGUgb25s eSBBQkkgdGhhdAogICAgc2F2ZXMgU1NFIHJlZ2lzdGVycyBhY3Jvc3MgY2FsbHMgaXMgV2luNjQg KHRodXMgbm8gbmVlZCB0byBjaGVjayB0aGUKICAgIGN1cnJlbnQgQUJJIGhlcmUpLCBhbmQgd2l0 aCBBVlggZW5hYmxlZCBXaW42NCBvbmx5IGd1YXJhbnRlZXMgdGhhdAogICAgdGhlIGxvdyAxNiBi eXRlcyBhcmUgc2F2ZWQuICAqLwogCiBzdGF0aWMgYm9vbAotaXg4Nl9oYXJkX3JlZ25vX2NhbGxf cGFydF9jbG9iYmVyZWQgKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50IHJlZ25vLAoraXg4Nl9o YXJkX3JlZ25vX2NhbGxfcGFydF9jbG9iYmVyZWQgKHVuc2lnbmVkIGludCBhYmlfaWQsIHVuc2ln bmVkIGludCByZWdubywKIAkJCQkgICAgIG1hY2hpbmVfbW9kZSBtb2RlKQogeworICAvKiBTcGVj aWFsIEFCSSBmb3Igdnplcm91cHBlciB3aGljaCBvbmx5IGNsb2JiZXIgaGlnaGVyIHBhcnQgb2Yg c3NlIHJlZ3MuICAqLworICBpZiAoYWJpX2lkID09IEkzODZfVlpFUk9VUFBFUikKKyAgICAgIHJl dHVybiAoR0VUX01PREVfU0laRSAobW9kZSkgPiAxNgorCSAgICAgICYmICgoVEFSR0VUXzY0QklU CisJCSAgICYmIChJTl9SQU5HRSAocmVnbm8sIEZJUlNUX1JFWF9TU0VfUkVHLCBMQVNUX1JFWF9T U0VfUkVHKSkpCisJCSAgfHwgKElOX1JBTkdFIChyZWdubywgRklSU1RfU1NFX1JFRywgTEFTVF9T U0VfUkVHKSkpKTsKKwogICByZXR1cm4gU1NFX1JFR05PX1AgKHJlZ25vKSAmJiBHRVRfTU9ERV9T SVpFIChtb2RlKSA+IDE2OwogfQogCkBAIC0yMzkxNiw2ICsyMzk2NCw5IEBAIGl4ODZfcnVuX3Nl bGZ0ZXN0cyAodm9pZCkKICNkZWZpbmUgVEFSR0VUX0hBUkRfUkVHTk9fQ0FMTF9QQVJUX0NMT0JC RVJFRCBcCiAgIGl4ODZfaGFyZF9yZWdub19jYWxsX3BhcnRfY2xvYmJlcmVkCiAKKyN1bmRlZiBU QVJHRVRfSU5TTl9DQUxMRUVfQUJJCisjZGVmaW5lIFRBUkdFVF9JTlNOX0NBTExFRV9BQkkgaXg4 Nl9pbnNuX2NhbGxlZV9hYmkKKwogI3VuZGVmIFRBUkdFVF9DQU5fQ0hBTkdFX01PREVfQ0xBU1MK ICNkZWZpbmUgVEFSR0VUX0NBTl9DSEFOR0VfTU9ERV9DTEFTUyBpeDg2X2Nhbl9jaGFuZ2VfbW9k ZV9jbGFzcwogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5oIGIvZ2NjL2NvbmZp Zy9pMzg2L2kzODYuaAppbmRleCA1M2Q1MDNmYzZlMC4uOWQwNzc2OTE2OWQgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvaTM4Ni9pMzg2LmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaApAQCAt MTE3Nyw2ICsxMTc3LDE0IEBAIGV4dGVybiBjb25zdCBjaGFyICpob3N0X2RldGVjdF9sb2NhbF9j cHUgKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiAKICNkZWZpbmUgS0VFUF9BR0dSRUdB VEVfUkVUVVJOX1BPSU5URVIgMAogDAorCitlbnVtIGkzODZfaW5zbl9jYWxsZWVfYWJpX2luZGV4 Cit7CisgIEkzODZfREVGQVVMVCwJCS8qIERlZmF1bHQgZnVuY3Rpb24gYWJpLiAgKi8KKyAgSTM4 Nl9WWkVST1VQUEVSLAkvKiBGb3Igdnplcm91cHBlci4gICovCisgIEkzODZfVU5LTk9XTgorfTsK KwogLyogRGVmaW5lIHRoZSBjbGFzc2VzIG9mIHJlZ2lzdGVycyBmb3IgcmVnaXN0ZXIgY29uc3Ry YWludHMgaW4gdGhlCiAgICBtYWNoaW5lIGRlc2NyaXB0aW9uLiAgQWxzbyBkZWZpbmUgcmFuZ2Vz IG9mIGNvbnN0YW50cy4KIApAQCAtMjY1OSwxMCArMjY2Nyw2IEBAIHN0cnVjdCBHVFkoKCkpIG1h Y2hpbmVfZnVuY3Rpb24gewogICAvKiBUcnVlIGlmIHRoZSBmdW5jdGlvbiBuZWVkcyBhIHN0YWNr IGZyYW1lLiAgKi8KICAgQk9PTF9CSVRGSUVMRCBzdGFja19mcmFtZV9yZXF1aXJlZCA6IDE7CiAK LSAgLyogVHJ1ZSBpZiBfX2J1aWx0aW5faWEzMl92emVyb3VwcGVyICgpIGhhcyBiZWVuIGV4cGFu ZGVkIGluIGN1cnJlbnQKLSAgICAgZnVuY3Rpb24uICAqLwotICBCT09MX0JJVEZJRUxEIGhhc19l eHBsaWNpdF92emVyb3VwcGVyIDogMTsKLQogICAvKiBUcnVlIGlmIHdlIHNob3VsZCBhY3Qgc2ls ZW50bHksIHJhdGhlciB0aGFuIHJhaXNlIGFuIGVycm9yIGZvcgogICAgICBpbnZhbGlkIGNhbGxz LiAgKi8KICAgQk9PTF9CSVRGSUVMRCBzaWxlbnRfcCA6IDE7CmRpZmYgLS1naXQgYS9nY2MvY29u ZmlnL2kzODYvaTM4Ni5tZCBiL2djYy9jb25maWcvaTM4Ni9pMzg2Lm1kCmluZGV4IDJmYzhmYWUz MGYzLi5iZDAxMmFiMWQyMSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQKKysr IGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQKQEAgLTE5MSw2ICsxOTEsMTAgQEAgKGRlZmluZV9j X2VudW0gInVuc3BlYyIgWwogICA7OyBGb3IgTU9WRElSSSBhbmQgTU9WRElSNjRCIHN1cHBvcnQK ICAgVU5TUEVDX01PVkRJUkkKICAgVU5TUEVDX01PVkRJUjY0QgorCisgIDs7IEZvciBpbnNuX2Nh bGxlZV9hYmk6CisgIFVOU1BFQ19DQUxMRUVfQUJJCisKIF0pCiAKIChkZWZpbmVfY19lbnVtICJ1 bnNwZWN2IiBbCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvcHJlZGljYXRlcy5tZCBiL2dj Yy9jb25maWcvaTM4Ni9wcmVkaWNhdGVzLm1kCmluZGV4IGFiZDMwN2ViZGI4Li43YzViNzQ4Mjgz MyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3ByZWRpY2F0ZXMubWQKKysrIGIvZ2NjL2Nv bmZpZy9pMzg2L3ByZWRpY2F0ZXMubWQKQEAgLTE1OTksOCArMTU5OSw5IEBAIChkZWZpbmVfcHJl ZGljYXRlICJ2emVyb2FsbF9wYXR0ZXJuIgogOzsgcmV0dXJuIHRydWUgaWYgT1AgaXMgYSB2emVy b3VwcGVyIHBhdHRlcm4uCiAoZGVmaW5lX3ByZWRpY2F0ZSAidnplcm91cHBlcl9wYXR0ZXJuIgog ICAoYW5kIChtYXRjaF9jb2RlICJwYXJhbGxlbCIpCi0gICAgICAgKG1hdGNoX2NvZGUgInVuc3Bl Y192b2xhdGlsZSIgImEiKQotICAgICAgIChtYXRjaF90ZXN0ICJYSU5UIChYVkVDRVhQIChvcCwg MCwgMCksIDEpID09IFVOU1BFQ1ZfVlpFUk9VUFBFUiIpKSkKKyAgICAgICAobWF0Y2hfY29kZSAi dW5zcGVjIiAiYiIpCisgICAgICAgKG1hdGNoX3Rlc3QgIlhJTlQgKFhWRUNFWFAgKG9wLCAwLCAx KSwgMSkgPT0gVU5TUEVDX0NBTExFRV9BQkkiKQorICAgICAgIChtYXRjaF90ZXN0ICJYVkVDRVhQ IChYVkVDRVhQIChvcCwgMCwgMSksIDAsIDApID09IGNvbnN0MV9ydHgiKSkpCiAKIDs7IFJldHVy biB0cnVlIGlmIE9QIGlzIGFuIGFkZHN1YiB2ZWNfbWVyZ2Ugb3BlcmF0aW9uCiAoZGVmaW5lX3By ZWRpY2F0ZSAiYWRkc3ViX3ZtX29wZXJhdG9yIgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2 L3NzZS5tZCBiL2djYy9jb25maWcvaTM4Ni9zc2UubWQKaW5kZXggYTQ1MDNkZGNiNzMuLjg2Y2Y0 NGJhZTE0IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvc3NlLm1kCisrKyBiL2djYy9jb25m aWcvaTM4Ni9zc2UubWQKQEAgLTIwODU3LDE0ICsyMDg1NywyMiBAQCAoZGVmaW5lX2luc24gIiph dnhfdnplcm9hbGwiCiA7OyBpZiB0aGUgdXBwZXIgMTI4Yml0cyBhcmUgdW51c2VkLiAgSW5pdGlh bGx5IHdlIGV4cGFuZCB0aGUgaW5zdHJ1Y3Rpb25zCiA7OyBhcyB0aG91Z2ggdGhleSBoYWQgbm8g ZWZmZWN0IG9uIHRoZSBTU0UgcmVnaXN0ZXJzLCBidXQgbGF0ZXIgYWRkIFNFVHMgYW5kCiA7OyBD TE9CQkVScyB0byB0aGUgUEFSQUxMRUwgdG8gbW9kZWwgdGhlIHJlYWwgZWZmZWN0LgorCiAoZGVm aW5lX2V4cGFuZCAiYXZ4X3Z6ZXJvdXBwZXIiCi0gIFsocGFyYWxsZWwgWyh1bnNwZWNfdm9sYXRp bGUgWyhjb25zdF9pbnQgMCldIFVOU1BFQ1ZfVlpFUk9VUFBFUildKV0KLSAgIlRBUkdFVF9BVlgi KQorICBbKHBhcmFsbGVsIFsoY2FsbCAobWVtOlFJICh1bnNwZWNfdm9sYXRpbGUgWyhjb25zdF9p bnQgMCldIFVOU1BFQ1ZfVlpFUk9VUFBFUikpCisJCSAgICAoY29uc3RfaW50IDApKQorCSAgICAg KHVuc3BlYyBbKGNvbnN0X2ludCAxKV0gVU5TUEVDX0NBTExFRV9BQkkpXSldCisgICJUQVJHRVRf QVZYIgoreworICBpeDg2X2V4cGFuZF9hdnhfdnplcm91cHBlciAoKTsKKyAgRE9ORTsKK30pCiAK LShkZWZpbmVfaW5zbiAiKmF2eF92emVyb3VwcGVyIgotICBbKG1hdGNoX3BhcmFsbGVsIDAgInZ6 ZXJvdXBwZXJfcGF0dGVybiIKLSAgICAgWyh1bnNwZWNfdm9sYXRpbGUgWyhjb25zdF9pbnQgMCld IFVOU1BFQ1ZfVlpFUk9VUFBFUildKV0KLSAgIlRBUkdFVF9BVlggJiYgWFZFQ0xFTiAob3BlcmFu ZHNbMF0sIDApID09IChUQVJHRVRfNjRCSVQgPyAxNiA6IDgpICsgMSIKKyhkZWZpbmVfaW5zbiAi YXZ4X3Z6ZXJvdXBwZXJfY2FsbGVlX2FiaSIKKyAgWyhjYWxsIChtZW06UUkgKHVuc3BlY192b2xh dGlsZSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDVl9WWkVST1VQUEVSKSkKKwkgKGNvbnN0X2ludCAw KSkKKyAgICAodW5zcGVjIFsoY29uc3RfaW50IDEpXSBVTlNQRUNfQ0FMTEVFX0FCSSldCisgICJU QVJHRVRfQVZYIgogICAidnplcm91cHBlciIKICAgWyhzZXRfYXR0ciAidHlwZSIgInNzZSIpCiAg ICAoc2V0X2F0dHIgIm1vZHJtIiAiMCIpCkBAIC0yMDg3Myw0NCArMjA4ODEsNiBAQCAoZGVmaW5l X2luc24gIiphdnhfdnplcm91cHBlciIKICAgIChzZXRfYXR0ciAiYnR2ZXIyX2RlY29kZSIgInZl Y3RvciIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJPSSIpXSkKIAotKGRlZmluZV9pbnNuX2FuZF9z cGxpdCAiKmF2eF92emVyb3VwcGVyXzEiCi0gIFsobWF0Y2hfcGFyYWxsZWwgMCAidnplcm91cHBl cl9wYXR0ZXJuIgotICAgICBbKHVuc3BlY192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gVU5TUEVD Vl9WWkVST1VQUEVSKV0pXQotICAiVEFSR0VUX0FWWCAmJiBYVkVDTEVOIChvcGVyYW5kc1swXSwg MCkgIT0gKFRBUkdFVF82NEJJVCA/IDE2IDogOCkgKyAxIgotICAiIyIKLSAgIiYmIGVwaWxvZ3Vl X2NvbXBsZXRlZCIKLSAgWyhtYXRjaF9kdXAgMCldCi17Ci0gIC8qIEZvciBJUEEtUkEgcHVycG9z ZXMsIG1ha2UgaXQgY2xlYXIgdGhlIGluc3RydWN0aW9uIGNsb2JiZXJzCi0gICAgIGV2ZW4gWE1N IHJlZ2lzdGVycyBub3QgbWVudGlvbmVkIGV4cGxpY2l0bHkgaW4gdGhlIHBhdHRlcm4uICAqLwot ICB1bnNpZ25lZCBpbnQgbnJlZ3MgPSBUQVJHRVRfNjRCSVQgPyAxNiA6IDg7Ci0gIHVuc2lnbmVk IGludCBucGF0cyA9IFhWRUNMRU4gKG9wZXJhbmRzWzBdLCAwKTsKLSAgcnR2ZWMgdmVjID0gcnR2 ZWNfYWxsb2MgKG5yZWdzICsgMSk7Ci0gIFJUVkVDX0VMVCAodmVjLCAwKSA9IFhWRUNFWFAgKG9w ZXJhbmRzWzBdLCAwLCAwKTsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIGogPSAxOyBpIDwg bnJlZ3M7ICsraSkKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBpbnQgcmVnbm8gPSBHRVRfU1NFX1JF R05PIChpKTsKLSAgICAgIGlmIChqIDwgbnBhdHMKLQkgICYmIFJFR05PIChTRVRfREVTVCAoWFZF Q0VYUCAob3BlcmFuZHNbMF0sIDAsIGopKSkgPT0gcmVnbm8pCi0JewotCSAgUlRWRUNfRUxUICh2 ZWMsIGkgKyAxKSA9IFhWRUNFWFAgKG9wZXJhbmRzWzBdLCAwLCBqKTsKLQkgIGorKzsKLQl9Ci0g ICAgICBlbHNlCi0JewotCSAgcnR4IHJlZyA9IGdlbl9ydHhfUkVHIChWMkRJbW9kZSwgcmVnbm8p OwotCSAgUlRWRUNfRUxUICh2ZWMsIGkgKyAxKSA9IGdlbl9ydHhfQ0xPQkJFUiAoVk9JRG1vZGUs IHJlZyk7Ci0JfQotICAgIH0KLSAgb3BlcmFuZHNbMF0gPSBnZW5fcnR4X1BBUkFMTEVMIChWT0lE bW9kZSwgdmVjKTsKLX0KLSAgWyhzZXRfYXR0ciAidHlwZSIgInNzZSIpCi0gICAoc2V0X2F0dHIg Im1vZHJtIiAiMCIpCi0gICAoc2V0X2F0dHIgIm1lbW9yeSIgIm5vbmUiKQotICAgKHNldF9hdHRy ICJwcmVmaXgiICJ2ZXgiKQotICAgKHNldF9hdHRyICJidHZlcjJfZGVjb2RlIiAidmVjdG9yIikK LSAgIChzZXRfYXR0ciAibW9kZSIgIk9JIildKQotCiAoZGVmaW5lX21vZGVfYXR0ciBwYnJvYWRj YXN0X2V2ZXhfaXNhCiAgIFsoVjY0UUkgImF2eDUxMmJ3IikgKFYzMlFJICJhdng1MTJidyIpIChW MTZRSSAiYXZ4NTEyYnciKQogICAgKFYzMkhJICJhdng1MTJidyIpIChWMTZISSAiYXZ4NTEyYnci KSAoVjhISSAiYXZ4NTEyYnciKQpkaWZmIC0tZ2l0IGEvZ2NjL2RmLXNjYW4uYyBiL2djYy9kZi1z Y2FuLmMKaW5kZXggNjY5MWMzZTgzNTcuLjg0NTcwMmQ5NjMwIDEwMDY0NAotLS0gYS9nY2MvZGYt c2Nhbi5jCisrKyBiL2djYy9kZi1zY2FuLmMKQEAgLTMwOTAsNyArMzA5MCw5IEBAIGRmX2dldF9j YWxsX3JlZnMgKGNsYXNzIGRmX2NvbGxlY3Rpb25fcmVjICpjb2xsZWN0aW9uX3JlYywKIAogICBm b3IgKGkgPSAwOyBpIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSOyBpKyspCiAgICAgewotICAgICAg aWYgKGkgPT0gU1RBQ0tfUE9JTlRFUl9SRUdOVU0pCisgICAgICAvKiBDQUxMX0lOU04gdXNlICJ1 c2VkIiBmbGFnIHRvIGluZGljYXRlIGl0J3MgYSBmYWtlIGNhbGwuICAqLworICAgICAgaWYgKGkg PT0gU1RBQ0tfUE9JTlRFUl9SRUdOVU0KKwkgICYmICFSVFhfRkxBRyAoaW5zbl9pbmZvLT5pbnNu LCB1c2VkKSkKIAkvKiBUaGUgc3RhY2sgcHRyIGlzIHVzZWQgKGhvbm9yYXJpbHkpIGJ5IGEgQ0FM TCBpbnNuLiAgKi8KIAlkZl9yZWZfcmVjb3JkIChERl9SRUZfQkFTRSwgY29sbGVjdGlvbl9yZWMs IHJlZ25vX3JlZ19ydHhbaV0sCiAJCSAgICAgICBOVUxMLCBiYiwgaW5zbl9pbmZvLCBERl9SRUZf UkVHX1VTRSwKZGlmZiAtLWdpdCBhL2djYy9maW5hbC5jIGIvZ2NjL2ZpbmFsLmMKaW5kZXggZTBh NzBmY2Q4MzAuLjVmOGI3YjAwNmMyIDEwMDY0NAotLS0gYS9nY2MvZmluYWwuYworKysgYi9nY2Mv ZmluYWwuYwpAQCAtNDEwOSw3ICs0MTA5LDggQEAgbGVhZl9mdW5jdGlvbl9wICh2b2lkKQogICBm b3IgKGluc24gPSBnZXRfaW5zbnMgKCk7IGluc247IGluc24gPSBORVhUX0lOU04gKGluc24pKQog ICAgIHsKICAgICAgIGlmIChDQUxMX1AgKGluc24pCi0JICAmJiAhIFNJQkxJTkdfQ0FMTF9QIChp bnNuKSkKKwkgICYmICEgU0lCTElOR19DQUxMX1AgKGluc24pCisJICAmJiAhUlRYX0ZMQUcgKGlu c24sIHVzZWQpKQogCXJldHVybiAwOwogICAgICAgaWYgKE5PTkpVTVBfSU5TTl9QIChpbnNuKQog CSAgJiYgR0VUX0NPREUgKFBBVFRFUk4gKGluc24pKSA9PSBTRVFVRU5DRQpkaWZmIC0tZ2l0IGEv Z2NjL3JlZy1zdGFjay5jIGIvZ2NjL3JlZy1zdGFjay5jCmluZGV4IDI1MjEwZjBjMTdmLi4xZDll YTAzNWNmNCAxMDA2NDQKLS0tIGEvZ2NjL3JlZy1zdGFjay5jCisrKyBiL2djYy9yZWctc3RhY2su YwpAQCAtMTc0LDYgKzE3NCw3IEBACiAjaW5jbHVkZSAicmVsb2FkLmgiCiAjaW5jbHVkZSAidHJl ZS1wYXNzLmgiCiAjaW5jbHVkZSAicnRsLWl0ZXIuaCIKKyNpbmNsdWRlICJmdW5jdGlvbi1hYmku aCIKIAogI2lmZGVmIFNUQUNLX1JFR1MKIApAQCAtMjM2OCw2ICsyMzY5LDE4IEBAIHN1YnN0X2Fz bV9zdGFja19yZWdzIChydHhfaW5zbiAqaW5zbiwgc3RhY2tfcHRyIHJlZ3N0YWNrKQogCSAgICB9 CiAgICAgICB9CiB9CisKKy8qIFJldHVybiB0cnVlIGlmIGEgZnVuY3Rpb24gY2FsbCBpcyBhbGxv d2VkIHRvIGFsdGVyIHNvbWUgb3IgYWxsIGJpdHMKKyAgIG9mIGFueSBzdGFjayByZWcuICAqLwor c3RhdGljIGJvb2wKK2NhbGxlZV9jbG9iYmVyc19hbnlfc3RhY2tfcmVnIChjb25zdCBmdW5jdGlv bl9hYmkgJiBjYWxsZWVfYWJpKQoreworICBmb3IgKHVuc2lnbmVkIHJlZ25vID0gRklSU1RfU1RB Q0tfUkVHOyByZWdubyA8PSBMQVNUX1NUQUNLX1JFRzsgcmVnbm8rKykKKyAgICBpZiAoY2FsbGVl X2FiaS5jbG9iYmVyc19hdF9sZWFzdF9wYXJ0X29mX3JlZ19wIChyZWdubykpCisgICAgICByZXR1 cm4gdHJ1ZTsKKyAgcmV0dXJuIGZhbHNlOworfQorCiAMCiAvKiBTdWJzdGl0dXRlIHN0YWNrIGhh cmQgcmVnIG51bWJlcnMgZm9yIHN0YWNrIHZpcnR1YWwgcmVnaXN0ZXJzIGluCiAgICBJTlNOLiAg Tm9uLXN0YWNrIHJlZ2lzdGVyIG51bWJlcnMgYXJlIG5vdCBjaGFuZ2VkLiAgUkVHU1RBQ0sgaXMg dGhlCkBAIC0yMzgyLDcgKzIzOTUsMTAgQEAgc3Vic3Rfc3RhY2tfcmVncyAocnR4X2luc24gKmlu c24sIHN0YWNrX3B0ciByZWdzdGFjaykKICAgYm9vbCBjb250cm9sX2Zsb3dfaW5zbl9kZWxldGVk ID0gZmFsc2U7CiAgIGludCBpOwogCi0gIGlmIChDQUxMX1AgKGluc24pKQorICAvKiBJZiB0aGUg dGFyZ2V0IG9mIHRoZSBjYWxsIGRvZXNuJ3QgY2xvYmJlciBhbnkgc3RhY2sgcmVnaXN0ZXJzLAor ICAgICBEb24ndCBjbGVhciB0aGUgYXJndW1lbnRzLiAgKi8KKyAgaWYgKENBTExfUCAoaW5zbikK KyAgICAgICYmIGNhbGxlZV9jbG9iYmVyc19hbnlfc3RhY2tfcmVnIChpbnNuX2NhbGxlZV9hYmkg KGluc24pKSkKICAgICB7CiAgICAgICBpbnQgdG9wID0gcmVnc3RhY2stPnRvcDsKIApkaWZmIC0t Z2l0IGEvZ2NjL3J0bC5jIGIvZ2NjL3J0bC5jCmluZGV4IGIwYmExZmY2ODRjLi5hYWVlODgyZjVj YSAxMDA2NDQKLS0tIGEvZ2NjL3J0bC5jCisrKyBiL2djYy9ydGwuYwpAQCAtMzk1LDggKzM5NSwx MCBAQCBzaGFsbG93X2NvcHlfcnR4IChjb25zdF9ydHggb3JpZyBNRU1fU1RBVF9ERUNMKQogICAg IGNhc2UgU0NSQVRDSDoKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBGb3Ig YWxsIG90aGVyIFJUWGVzIGNsZWFyIHRoZSB1c2VkIGZsYWcgb24gdGhlIGNvcHkuICAqLwotICAg ICAgUlRYX0ZMQUcgKGNvcHksIHVzZWQpID0gMDsKKyAgICAgIC8qIEZvciBhbGwgb3RoZXIgUlRY ZXMgY2xlYXIgdGhlIHVzZWQgZmxhZyBvbiB0aGUgY29weS4KKwkgQ0FMTF9JTlNOIHVzZSAidXNl ZCIgZmxhZyB0byBpbmRpY2F0ZSBpdCdzIGEgZmFrZSBjYWxsLiAgKi8KKyAgICAgIGlmICghSU5T Tl9QIChvcmlnKSkKKwlSVFhfRkxBRyAoY29weSwgdXNlZCkgPSAwOwogICAgICAgYnJlYWs7CiAg ICAgfQogICByZXR1cm4gY29weTsKZGlmZiAtLWdpdCBhL2djYy9zaHJpbmstd3JhcC5jIGIvZ2Nj L3Nocmluay13cmFwLmMKaW5kZXggYmE3YjVjZDU2ZmQuLjA3ZjlhMDgxZGQzIDEwMDY0NAotLS0g YS9nY2Mvc2hyaW5rLXdyYXAuYworKysgYi9nY2Mvc2hyaW5rLXdyYXAuYwpAQCAtNTcsNyArNTcs OCBAQCByZXF1aXJlc19zdGFja19mcmFtZV9wIChydHhfaW5zbiAqaW5zbiwgSEFSRF9SRUdfU0VU IHByb2xvZ3VlX3VzZWQsCiAgIEhBUkRfUkVHX1NFVCBoYXJkcmVnczsKICAgdW5zaWduZWQgcmVn bm87CiAKLSAgaWYgKENBTExfUCAoaW5zbikpCisgIC8qIENBTExfSU5TTiB1c2UgInVzZWQiIGZs YWcgdG8gaW5kaWNhdGUgaXQncyBhIGZha2UgY2FsbC4gICovCisgIGlmIChDQUxMX1AgKGluc24p ICYmICFSVFhfRkxBRyAoaW5zbiwgdXNlZCkpCiAgICAgcmV0dXJuICFTSUJMSU5HX0NBTExfUCAo aW5zbik7CiAKICAgLyogV2UgbmVlZCBhIGZyYW1lIHRvIGdldCB0aGUgdW5pcXVlIENGQSBleHBl Y3RlZCBieSB0aGUgdW53aW5kZXIuICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4MjczNS0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjgyNzM1LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMWE2M2I5 YWU5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9w cjgyNzM1LTEuYwpAQCAtMCwwICsxLDI5IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRn LW9wdGlvbnMgIi1PMiAtbWF2eCIgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgYXZ4IH0gKi8KKworI2luY2x1ZGUgImF2eC1jaGVjay5oIgorCit2b2lkCitfX2F0dHJpYnV0 ZV9fICgobm9pcGEpKQorbXRlc3QoY2hhciAqZGVzdCkKK3sKKyAgX19tMjU2aSB5bW0xID0gX21t MjU2X3NldDFfZXBpOCgoY2hhcikweDEpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZp ICopKGRlc3QgKyAzMiksIHltbTEpOworICBfbW0yNTZfemVyb3VwcGVyKCk7CisgIF9fbTI1Nmkg eW1tMiA9IF9tbTI1Nl9zZXQxX2VwaTgoKGNoYXIpMHgxKTsKKyAgX21tMjU2X3N0b3JldV9zaTI1 NigoX19tMjU2aSAqKWRlc3QsIHltbTIpOworfQorCit2b2lkCithdnhfdGVzdCAoKQoreworICBj aGFyIGJ1Zls2NF07CisgIGZvciAoaW50IGkgPSAwOyBpICE9IDY0OyBpKyspCisgICAgYnVmW2ld ID0gMjsKKyAgbXRlc3QgKGJ1Zik7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAzMjsgKytpKQor ICAgIGlmIChidWZbaV0gIT0gMSkKKyAgICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKK30KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODI3MzUtMi5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmFjOWQwMDZmNzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS0yLmMKQEAgLTAsMCArMSwyMiBAQAorLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hdnggLU8yIiB9ICovCisK KyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKwordm9pZCB0ZXN0KGNoYXIgKmRlc3QpCit7CisgIC8q IHhtbTEgY2FuIGJlIHByb3BhZ2F0ZWQgdG8geG1tMiBieSBDU0UuICAqLworICBfX20xMjhpIHht bTEgPSBfbW1fc2V0X2VwaTgoMHgxLCAweDIsIDB4MywgMHg0LCAweDUsIDB4NiwgMHg3LCAweDgs CisJCQkgICAgICAweDksIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYp OworICBfbW1fc3RvcmV1X3NpMTI4KChfX20xMjhpICopKGRlc3QgKyAzMiksIHhtbTEpOworICBf bW0yNTZfemVyb3VwcGVyKCk7CisgIF9tbTI1Nl96ZXJvdXBwZXIoKTsKKyAgX21tMjU2X3plcm91 cHBlcigpOworICBfbW0yNTZfemVyb3VwcGVyKCk7CisgIF9tbTI1Nl96ZXJvdXBwZXIoKTsKKyAg X19tMTI4aSB4bW0yID0geG1tMTsKKyAgX21tX3N0b3JldV9zaTEyOCgoX19tMTI4aSAqKWRlc3Qs IHhtbTIpOworfQorCisvKiBEYXJ3aW4gbG9jYWwgY29uc3RhbnQgc3ltYm9sIGlzICJsQzAiLCBF TEYgdGFyZ2V0cyAiLkxDMCIgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyB7KD9uKXZtb3ZkcWFcdFwuP1tMbF1DMFteLF0qLCAleG1tWzAtOV19IDEgfSB9ICovCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjgyNzM1LTMuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODI3MzUtMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5lM2Y4MDFlNjkyNAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODI3MzUtMy5jCkBAIC0wLDAgKzEsNSBAQAorLyog eyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1hdnggLU8yIC1tYWJpPW1z IiB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHsoP24peG1tKFs2LTld fDFbMC01XSl9IH0gfSAqLworCisjaW5jbHVkZSAicHI4MjczNS0yLmMiCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjgyNzM1LTQuYyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByODI3MzUtNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi43OGMwYTZjYjJjOAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByODI3MzUtNC5jCkBAIC0wLDAgKzEsNDggQEAKKy8qIHsgZGctZG8g Y29tcGlsZSB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSAgKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1h dnggLU8yIC1tYWJpPW1zIC1tbm8tYXZ4NTEyZiAtbWFzbT1hdHQiIH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7KD9uKSg/OnZtb3ZkcWFbMS05XSp8dm1vdmFwW3Nk XSlbXHQgXSoleG1tWzAtOV0rLCBbMC05XSpcKCVyc3BcKX0gMTAgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgeyg/bikoPzp2bW92ZHFhWzEtOV0qfHZtb3ZhcFtz ZF0pW1x0IF0qWzAtOV0qXCglcnNwXCksICV4bW1bMC05XSt9IDEwIH0gfSAqLworCisjaW5jbHVk ZSA8aW1taW50cmluLmg+CisKK3ZvaWQgdGVzdChjaGFyICpkZXN0KQoreworICBfX20yNTZpIHlt bTAsIHltbTEsIHltbTIsIHltbTMsIHltbTQsIHltbTUsIHltbTYsIHltbTcsIHltbTgsIHltbTks IHltbTEwLCB5bW0xMSwgeW1tMTIsIHltbTEzLCB5bW0xNCwgeW1tMTU7CisgIGFzbSB2b2xhdGls ZSAoInZtb3ZkcWFcdCUleW1tMCwgJTBcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlMVxuXHQi CisJCSJ2bW92ZHFhXHQlJXltbTAsICUyXG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTNcblx0 IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlNFxuXHQiCisJCSJ2bW92ZHFhXHQlJXltbTAsICU1XG5c dCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTZcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlN1xu XHQiCisJCSJ2bW92ZHFhXHQlJXltbTAsICU4XG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTlc blx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlMTBcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAl MTFcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlMTJcblx0IgorCQkidm1vdmRxYVx0JSV5bW0w LCAlMTNcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlMTRcblx0IgorCQkidm1vdmRxYVx0JSV5 bW0wLCAlMTVcblx0IgorCQk6ICI9diIgKHltbTEpLCAiPXYiICh5bW0yKSwgIj12Iih5bW0zKSwg Ij12IiAoeW1tNCksICI9diIgKHltbTUpLAorCQkgICI9diIgKHltbTYpLCAiPXYiICh5bW03KSwg Ij12Iih5bW04KSwgIj12IiAoeW1tOSksICI9diIgKHltbTEwKSwKKwkJICAiPXYiICh5bW0xMSks ICI9diIgKHltbTEyKSwgIj12Iih5bW0xMyksICI9diIgKHltbTE0KSwgIj12IiAoeW1tMTUpLAor CQkgICI9diIoeW1tMCkKKwkJOjopOworICBfbW0yNTZfemVyb3VwcGVyKCk7CisgIF9tbTI1Nl9z dG9yZXVfc2kyNTYoKF9fbTI1NmkgKilkZXN0LCB5bW0xKTsKKyAgX21tMjU2X3N0b3JldV9zaTI1 NigoX19tMjU2aSAqKShkZXN0ICsgMzIpLCB5bW0yKTsKKyAgX21tMjU2X3N0b3JldV9zaTI1Nigo X19tMjU2aSAqKShkZXN0ICsgMzIgKiAyKSwgeW1tMyk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYo KF9fbTI1NmkgKikoZGVzdCArIDMyICogMyksIHltbTQpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2 KChfX20yNTZpICopKGRlc3QgKyAzMiAqIDQpLCB5bW01KTsKKyAgX21tMjU2X3N0b3JldV9zaTI1 NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiA1KSwgeW1tNik7CisgIF9tbTI1Nl9zdG9yZXVfc2ky NTYoKF9fbTI1NmkgKikoZGVzdCArIDMyICogNiksIHltbTcpOworICBfbW0yNTZfc3RvcmV1X3Np MjU2KChfX20yNTZpICopKGRlc3QgKyAzMiAqIDcpLCB5bW04KTsKKyAgX21tMjU2X3N0b3JldV9z aTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiA4KSwgeW1tOSk7CisgIF9tbTI1Nl9zdG9yZXVf c2kyNTYoKF9fbTI1NmkgKikoZGVzdCArIDMyICogOSksIHltbTEwKTsKKyAgX21tMjU2X3N0b3Jl dV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiAxMCksIHltbTExKTsKKyAgX21tMjU2X3N0 b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiAxMSksIHltbTEyKTsKKyAgX21tMjU2 X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiAxMiksIHltbTEzKTsKKyAgX21t MjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiAxMyksIHltbTE0KTsKKyAg X21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0ICsgMzIgKiAxNCksIHltbTE1KTsK K30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODI3MzUtNS5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS01LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJhNThjYmU1MmQwCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4MjczNS01LmMKQEAgLTAsMCArMSw1 NCBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9ICAqLworLyog eyBkZy1vcHRpb25zICItbWF2eCAtTzIgLW1hYmk9bXMgLW1uby1hdng1MTJmIC1tYXNtPWF0dCIg fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHsoP24pKD86dm1vdmRx YVsxLTldKnx2bW92YXBbc2RdKVtcdCBdKiV4bW1bMC05XSssIFswLTldKlwoJXJzcFwpfSAxMCB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7KD9uKSg/OnZtb3Zk cWFbMS05XSp8dm1vdmFwW3NkXSlbXHQgXSpbMC05XSpcKCVyc3BcKSwgJXhtbVswLTldK30gMTAg fSB9ICovCisKKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKwordm9pZCB0ZXN0KGNoYXIgKmRlc3Qp Cit7CisgIF9fbTI1NmkgeW1tMCwgeW1tMSwgeW1tMiwgeW1tMywgeW1tNCwgeW1tNSwgeW1tNiwg eW1tNywgeW1tOCwgeW1tOSwgeW1tMTAsIHltbTExLCB5bW0xMiwgeW1tMTMsIHltbTE0LCB5bW0x NTsKKyAgYXNtIHZvbGF0aWxlICgidm1vdmRxYVx0JSV5bW0wLCAlMFxuXHQiCisJCSJ2bW92ZHFh XHQlJXltbTAsICUxXG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJTJcblx0IgorCQkidm1vdmRx YVx0JSV5bW0wLCAlM1xuXHQiCisJCSJ2bW92ZHFhXHQlJXltbTAsICU0XG5cdCIKKwkJInZtb3Zk cWFcdCUleW1tMCwgJTVcblx0IgorCQkidm1vdmRxYVx0JSV5bW0wLCAlNlxuXHQiCisJCSJ2bW92 ZHFhXHQlJXltbTAsICU3XG5cdCIKKwkJInZtb3ZkcWFcdCUleW1tMCwgJThcblx0IgorCQkidm1v dmRxYVx0JSV5bW0wLCAlOVxuXHQiCisJCSJ2bW92ZHFhXHQlJXltbTAsICUxMFxuXHQiCisJCSJ2 bW92ZHFhXHQlJXltbTAsICUxMVxuXHQiCisJCSJ2bW92ZHFhXHQlJXltbTAsICUxMlxuXHQiCisJ CSJ2bW92ZHFhXHQlJXltbTAsICUxM1xuXHQiCisJCSJ2bW92ZHFhXHQlJXltbTAsICUxNFxuXHQi CisJCSJ2bW92ZHFhXHQlJXltbTAsICUxNVxuXHQiCisJCTogIj12IiAoeW1tMSksICI9diIgKHlt bTIpLCAiPXYiKHltbTMpLCAiPXYiICh5bW00KSwgIj12IiAoeW1tNSksCisJCSAgIj12IiAoeW1t NiksICI9diIgKHltbTcpLCAiPXYiKHltbTgpLCAiPXYiICh5bW05KSwgIj12IiAoeW1tMTApLAor CQkgICI9diIgKHltbTExKSwgIj12IiAoeW1tMTIpLCAiPXYiKHltbTEzKSwgIj12IiAoeW1tMTQp LCAiPXYiICh5bW0xNSksCisJCSAgIj12Iih5bW0wKQorCQk6Oik7CisgIF9tbTI1Nl96ZXJvdXBw ZXIoKTsKKyAgX21tMjU2X3plcm91cHBlcigpOworICBfbW0yNTZfemVyb3VwcGVyKCk7CisgIF9t bTI1Nl96ZXJvdXBwZXIoKTsKKyAgX21tMjU2X3plcm91cHBlcigpOworICBfbW0yNTZfemVyb3Vw cGVyKCk7CisgIF9tbTI1Nl96ZXJvdXBwZXIoKTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19t MjU2aSAqKWRlc3QsIHltbTEpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICopKGRl c3QgKyAzMiksIHltbTIpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICopKGRlc3Qg KyAzMiAqIDIpLCB5bW0zKTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShkZXN0 ICsgMzIgKiAzKSwgeW1tNCk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKikoZGVz dCArIDMyICogNCksIHltbTUpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICopKGRl c3QgKyAzMiAqIDUpLCB5bW02KTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAqKShk ZXN0ICsgMzIgKiA2KSwgeW1tNyk7CisgIF9tbTI1Nl9zdG9yZXVfc2kyNTYoKF9fbTI1NmkgKiko ZGVzdCArIDMyICogNyksIHltbTgpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZpICop KGRlc3QgKyAzMiAqIDgpLCB5bW05KTsKKyAgX21tMjU2X3N0b3JldV9zaTI1NigoX19tMjU2aSAq KShkZXN0ICsgMzIgKiA5KSwgeW1tMTApOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20yNTZp ICopKGRlc3QgKyAzMiAqIDEwKSwgeW1tMTEpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChfX20y NTZpICopKGRlc3QgKyAzMiAqIDExKSwgeW1tMTIpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2KChf X20yNTZpICopKGRlc3QgKyAzMiAqIDEyKSwgeW1tMTMpOworICBfbW0yNTZfc3RvcmV1X3NpMjU2 KChfX20yNTZpICopKGRlc3QgKyAzMiAqIDEzKSwgeW1tMTQpOworICBfbW0yNTZfc3RvcmV1X3Np MjU2KChfX20yNTZpICopKGRlc3QgKyAzMiAqIDE0KSwgeW1tMTUpOworfQotLSAKMi4xOC4xCgo= --00000000000051e7df05c348ad57--