From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 120138 invoked by alias); 11 Apr 2018 08:04:58 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 120110 invoked by uid 89); 11 Apr 2018 08:04:56 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-ot0-f196.google.com Received: from mail-ot0-f196.google.com (HELO mail-ot0-f196.google.com) (74.125.82.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 11 Apr 2018 08:04:48 +0000 Received: by mail-ot0-f196.google.com with SMTP id a14-v6so1029359otf.6 for ; Wed, 11 Apr 2018 01:04:47 -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:in-reply-to:references:from:date :message-id:subject:to:cc; bh=fRE/EIbikPgwvoLJ3C/4akS+W0YxzOl8jYjbsu2K0as=; b=oQKbEewvIa7Ig5p8bP6Sp0cGUHbWoGDke8LdjMdjE70XriHpGy37tMuQs364/9pYof HLc9u830cM+9eITpN0IHZ7GY+gbAnxKGUjg039x4edpP0uzj9UgDeX4JhHJPw/GnahVE aXoQOS8SPdZKFybVs+jMqxoU5vgqN4VA6FiwgjQ6RgYOx3IJdyLBx3u5ZaUZBf8ozxiW E4LNr284WuuPNybXAK4mcS+FgcVfnyA7Nmhl0NLj2WSKPA0qGPezyTZc6mf12NElmv/w tAR6lmnPFMLCaJ4RA9XRcmyVZQszV3sgslRXA1+DDylnQqxuu5frM5YWdZ9TTdfOdsCg VxYQ== X-Gm-Message-State: ALQs6tBWy48TIMageUEo5vzfVCxVCDS6VOHfKGfnc3IAhEGMM9F15Nis eeyVMKCTbMGiPhjFnwumXzH5w81uvnswLPImDe5RCQ== X-Google-Smtp-Source: AIpwx48uKgiZaXM4Br9yO+N8aV4bdYFwXuJTPyHLwPg20tcjyxZ+gMip5tDmy8n2b2dZ5n2ZYwrxRx7XvWbxED8zrwg= X-Received: by 2002:a9d:7247:: with SMTP id a7-v6mr1116416otk.220.1523433886144; Wed, 11 Apr 2018 01:04:46 -0700 (PDT) MIME-Version: 1.0 Received: by 10.138.17.215 with HTTP; Wed, 11 Apr 2018 01:04:45 -0700 (PDT) In-Reply-To: <3d86137b-3415-e6fd-9a97-004f4f768daa@arm.com> References: <3d86137b-3415-e6fd-9a97-004f4f768daa@arm.com> From: Sameera Deshpande Date: Wed, 11 Apr 2018 08:04:00 -0000 Message-ID: Subject: Re: [AARCH64] Neon vld1_*_x3, vst1_*_x2 and vst1_*_x3 intrinsics To: Sudakshina Das Cc: Christophe Lyon , "gcc-patches@gcc.gnu.org" , James Greenhalgh , Richard Earnshaw , nd Content-Type: multipart/mixed; boundary="0000000000009f985405698e1756" X-IsSubscribed: yes X-SW-Source: 2018-04/txt/msg00510.txt.bz2 --0000000000009f985405698e1756 Content-Type: text/plain; charset="UTF-8" Content-length: 12200 On 10 April 2018 at 20:07, Sudakshina Das wrote: > Hi Sameera > > > On 10/04/18 11:20, Sameera Deshpande wrote: >> >> On 7 April 2018 at 01:25, Christophe Lyon >> wrote: >>> >>> Hi, >>> >>> 2018-04-06 12:15 GMT+02:00 Sameera Deshpande >>> : >>>> >>>> Hi Christophe, >>>> >>>> Please find attached the updated patch with testcases. >>>> >>>> Ok for trunk? >>> >>> >>> Thanks for the update. >>> >>> Since the new intrinsics are only available on aarch64, you want to >>> prevent the tests from running on arm. >>> Indeed gcc.target/aarch64/advsimd-intrinsics/ is shared between the two >>> targets. >>> There are several examples on how to do that in that directory. >>> >>> I have also noticed that the tests fail at execution on aarch64_be. >>> >>> I didn't look at the patch in details. >>> >>> Christophe >>> >>> >>>> >>>> - Thanks and regards, >>>> Sameera D. >>>> >>>> 2017-12-14 22:17 GMT+05:30 Christophe Lyon : >>>>> >>>>> 2017-12-14 9:29 GMT+01:00 Sameera Deshpande >>>>> : >>>>>> >>>>>> Hi! >>>>>> >>>>>> Please find attached the patch implementing vld1_*_x3, vst1_*_x2 and >>>>>> vst1_*_x3 intrinsics as defined by Neon document. >>>>>> >>>>>> Ok for trunk? >>>>>> >>>>>> - Thanks and regards, >>>>>> Sameera D. >>>>>> >>>>>> gcc/Changelog: >>>>>> >>>>>> 2017-11-14 Sameera Deshpande >>>>>> >>>>>> >>>>>> * config/aarch64/aarch64-simd-builtins.def (ld1x3): New. >>>>>> (st1x2): Likewise. >>>>>> (st1x3): Likewise. >>>>>> * config/aarch64/aarch64-simd.md >>>>>> (aarch64_ld1x3): New pattern. >>>>>> (aarch64_ld1_x3_): Likewise >>>>>> (aarch64_st1x2): Likewise >>>>>> (aarch64_st1_x2_): Likewise >>>>>> (aarch64_st1x3): Likewise >>>>>> (aarch64_st1_x3_): Likewise >>>>>> * config/aarch64/arm_neon.h (vld1_u8_x3): New function. >>>>>> (vld1_s8_x3): Likewise. >>>>>> (vld1_u16_x3): Likewise. >>>>>> (vld1_s16_x3): Likewise. >>>>>> (vld1_u32_x3): Likewise. >>>>>> (vld1_s32_x3): Likewise. >>>>>> (vld1_u64_x3): Likewise. >>>>>> (vld1_s64_x3): Likewise. >>>>>> (vld1_fp16_x3): Likewise. >>>>>> (vld1_f32_x3): Likewise. >>>>>> (vld1_f64_x3): Likewise. >>>>>> (vld1_p8_x3): Likewise. >>>>>> (vld1_p16_x3): Likewise. >>>>>> (vld1_p64_x3): Likewise. >>>>>> (vld1q_u8_x3): Likewise. >>>>>> (vld1q_s8_x3): Likewise. >>>>>> (vld1q_u16_x3): Likewise. >>>>>> (vld1q_s16_x3): Likewise. >>>>>> (vld1q_u32_x3): Likewise. >>>>>> (vld1q_s32_x3): Likewise. >>>>>> (vld1q_u64_x3): Likewise. >>>>>> (vld1q_s64_x3): Likewise. >>>>>> (vld1q_f16_x3): Likewise. >>>>>> (vld1q_f32_x3): Likewise. >>>>>> (vld1q_f64_x3): Likewise. >>>>>> (vld1q_p8_x3): Likewise. >>>>>> (vld1q_p16_x3): Likewise. >>>>>> (vld1q_p64_x3): Likewise. >>>>>> (vst1_s64_x2): Likewise. >>>>>> (vst1_u64_x2): Likewise. >>>>>> (vst1_f64_x2): >>>>>> Likewise.patchurl=http://people.linaro.org/~christophe.lyon/armv8_2-fp16-scalar-2.patch3 >>> >>> patchname=armv8_2-fp16-scalar-2.patch3 >>> refrev=259064 >>> email_to=christophe.lyon@linaro.org >>> >>>>>> (vst1_s8_x2): Likewise. >>>>>> (vst1_p8_x2): Likewise. >>>>>> (vst1_s16_x2): Likewise. >>>>>> (vst1_p16_x2): Likewise. >>>>>> (vst1_s32_x2): Likewise. >>>>>> (vst1_u8_x2): Likewise. >>>>>> (vst1_u16_x2): Likewise. >>>>>> (vst1_u32_x2): Likewise. >>>>>> (vst1_f16_x2): Likewise. >>>>>> (vst1_f32_x2): Likewise. >>>>>> (vst1_p64_x2): Likewise. >>>>>> (vst1q_s8_x2): Likewise. >>>>>> (vst1q_p8_x2): Likewise. >>>>>> (vst1q_s16_x2): Likewise. >>>>>> (vst1q_p16_x2): Likewise. >>>>>> (vst1q_s32_x2): Likewise. >>>>>> (vst1q_s64_x2): Likewise. >>>>>> (vst1q_u8_x2): Likewise. >>>>>> (vst1q_u16_x2): Likewise. >>>>>> (vst1q_u32_x2): Likewise. >>>>>> (vst1q_u64_x2): Likewise. >>>>>> (vst1q_f16_x2): Likewise. >>>>>> (vst1q_f32_x2): Likewise. >>>>>> (vst1q_f64_x2): Likewise. >>>>>> (vst1q_p64_x2): Likewise. >>>>>> (vst1_s64_x3): Likewise. >>>>>> (vst1_u64_x3): Likewise. >>>>>> (vst1_f64_x3): Likewise. >>>>>> (vst1_s8_x3): Likewise. >>>>>> (vst1_p8_x3): Likewise. >>>>>> (vst1_s16_x3): Likewise. >>>>>> (vst1_p16_x3): Likewise. >>>>>> (vst1_s32_x3): Likewise. >>>>>> (vst1_u8_x3): Likewise. >>>>>> (vst1_u16_x3): Likewise. >>>>>> (vst1_u32_x3): Likewise. >>>>>> (vst1_f16_x3): Likewise. >>>>>> (vst1_f32_x3): Likewise. >>>>>> (vst1_p64_x3): Likewise. >>>>>> (vst1q_s8_x3): Likewise. >>>>>> (vst1q_p8_x3): Likewise. >>>>>> (vst1q_s16_x3): Likewise. >>>>>> (vst1q_p16_x3): Likewise. >>>>>> (vst1q_s32_x3): Likewise. >>>>>> (vst1q_s64_x3): Likewise. >>>>>> (vst1q_u8_x3): Likewise. >>>>>> (vst1q_u16_x3): Likewise. >>>>>> (vst1q_u32_x3): Likewise. >>>>>> (vst1q_u64_x3): Likewise. >>>>>> (vst1q_f16_x3): Likewise. >>>>>> (vst1q_f32_x3): Likewise. >>>>>> (vst1q_f64_x3): Likewise. >>>>>> (vst1q_p64_x3): Likewise. >>>>> >>>>> >>>>> Hi, >>>>> I'm not a maintainer, but I suspect you should add some tests. >>>>> >>>>> Christophe >>>> >>>> >>>> >>>> >>>> -- >>>> - Thanks and regards, >>>> Sameera D. >> >> >> Hi Christophe, >> >> Please find attached the updated patch. Similar to the testcase >> vld1x2.c, I have updated the testcases to mark them XFAIL for ARM, as >> the intrinsics are not implemented yet. I have also added required >> target to be little endian. > > > I am not a maintainer either. Shouldn't these intrinsics be supported > even for big endian? > Yes, they should be implemented, however it is out of scope of this patch. > From your patch: > >> diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c >> b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c > > new file mode 100644 > index 0000000..c37c72c > --- /dev/null > +++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x3.c > @@ -0,0 +1,82 @@ > +/* We haven't implemented these intrinsics for arm yet. */ > +/* { dg-xfail-if "" { arm*-*-* } } */ > +/* { dg-require-effective-target aarch64_little_endian } */ > > According to > https://gcc.gnu.org/onlinedocs/gccint/Directives.html#Skip-a-test-for-some-targets > this must follow the dg-do directive. > > Also I think the require-effective-target directive will only allow > the test to run on aarch64-*-*-* so the xfail on arm-*-*-* is kind > of not helpful. Maybe something like: > > /* { dg-require-effective-target aarch64_little_endian { target { > aarch64*-*-* } } } */ Ok, then I will restrict this test only for aarch64_little_endian, as that is the purpose of this test. > > So that the check is not performed on arm-*-*-* and the test runs > and fails and then the xfail makes more sense. > > In case the big endian version is also expected to be implemented > in the future, something like: > > /* { dg-xfail-if "" { arm*-*-* || aarch64_big_endian } } */ > > or > > /* { dg-do run { xfail { arm*-*-* || aarch64_big_endian } } } */ > > would be simpler. (PS: I haven't tested any of these directive myself). > Please find attached updated patch. > > Thanks > Sudi > > > +/* { dg-do run } */ > +/* { dg-options "-O3" } */ > > > >> Ok for thrunk? >> >> - Thanks and regards, >> Sameera D. >> >> gcc/Changelog: >> >> 2018-04-10 Sameera Deshpande >> >> >> * config/aarch64/aarch64-simd-builtins.def (ld1x3): New. >> (st1x2): Likewise. >> (st1x3): Likewise. >> * config/aarch64/aarch64-simd.md >> (aarch64_ld1x3): New pattern. >> (aarch64_ld1_x3_): Likewise >> (aarch64_st1x2): Likewise >> (aarch64_st1_x2_): Likewise >> (aarch64_st1x3): Likewise >> (aarch64_st1_x3_): Likewise >> * config/aarch64/arm_neon.h (vld1_u8_x3): New function. >> (vld1_s8_x3): Likewise. >> (vld1_u16_x3): Likewise. >> (vld1_s16_x3): Likewise. >> (vld1_u32_x3): Likewise. >> (vld1_s32_x3): Likewise. >> (vld1_u64_x3): Likewise. >> (vld1_s64_x3): Likewise. >> (vld1_f16_x3): Likewise. >> (vld1_f32_x3): Likewise. >> (vld1_f64_x3): Likewise. >> (vld1_p8_x3): Likewise. >> (vld1_p16_x3): Likewise. >> (vld1_p64_x3): Likewise. >> (vld1q_u8_x3): Likewise. >> (vld1q_s8_x3): Likewise. >> (vld1q_u16_x3): Likewise. >> (vld1q_s16_x3): Likewise. >> (vld1q_u32_x3): Likewise. >> (vld1q_s32_x3): Likewise. >> (vld1q_u64_x3): Likewise. >> (vld1q_s64_x3): Likewise. >> (vld1q_f16_x3): Likewise. >> (vld1q_f32_x3): Likewise. >> (vld1q_f64_x3): Likewise. >> (vld1q_p8_x3): Likewise. >> (vld1q_p16_x3): Likewise. >> (vld1q_p64_x3): Likewise. >> (vst1_s64_x2): Likewise. >> (vst1_u64_x2): Likewise. >> (vst1_f64_x2): Likewise. >> (vst1_s8_x2): Likewise. >> (vst1_p8_x2): Likewise. >> (vst1_s16_x2): Likewise. >> (vst1_p16_x2): Likewise. >> (vst1_s32_x2): Likewise. >> (vst1_u8_x2): Likewise. >> (vst1_u16_x2): Likewise. >> (vst1_u32_x2): Likewise. >> (vst1_f16_x2): Likewise. >> (vst1_f32_x2): Likewise. >> (vst1_p64_x2): Likewise. >> (vst1q_s8_x2): Likewise. >> (vst1q_p8_x2): Likewise. >> (vst1q_s16_x2): Likewise. >> (vst1q_p16_x2): Likewise. >> (vst1q_s32_x2): Likewise. >> (vst1q_s64_x2): Likewise. >> (vst1q_u8_x2): Likewise. >> (vst1q_u16_x2): Likewise. >> (vst1q_u32_x2): Likewise. >> (vst1q_u64_x2): Likewise. >> (vst1q_f16_x2): Likewise. >> (vst1q_f32_x2): Likewise. >> (vst1q_f64_x2): Likewise. >> (vst1q_p64_x2): Likewise. >> (vst1_s64_x3): Likewise. >> (vst1_u64_x3): Likewise. >> (vst1_f64_x3): Likewise. >> (vst1_s8_x3): Likewise. >> (vst1_p8_x3): Likewise. >> (vst1_s16_x3): Likewise. >> (vst1_p16_x3): Likewise. >> (vst1_s32_x3): Likewise. >> (vst1_u8_x3): Likewise. >> (vst1_u16_x3): Likewise. >> (vst1_u32_x3): Likewise. >> (vst1_f16_x3): Likewise. >> (vst1_f32_x3): Likewise. >> (vst1_p64_x3): Likewise. >> (vst1q_s8_x3): Likewise. >> (vst1q_p8_x3): Likewise. >> (vst1q_s16_x3): Likewise. >> (vst1q_p16_x3): Likewise. >> (vst1q_s32_x3): Likewise. >> (vst1q_s64_x3): Likewise. >> (vst1q_u8_x3): Likewise. >> (vst1q_u16_x3): Likewise. >> (vst1q_u32_x3): Likewise. >> (vst1q_u64_x3): Likewise. >> (vst1q_f16_x3): Likewise. >> (vst1q_f32_x3): Likewise. >> (vst1q_f64_x3): Likewise. >> (vst1q_p64_x3): Likewise. >> >> gcc/testsuite/Changelog: >> >> 2018-04-10 Sameera Deshpande >> >> * gcc.target/aarch64/advsimd-intrinsics/vld1x3.c: New test for >> vld1x3 intrinsics for aarch64_little_endian. >> * gcc.target/aarch64/advsimd-intrinsics/vst1x2.c: New test for >> vst1x2 intrinsics for aarch64_little_endian. >> * gcc.target/aarch64/advsimd-intrinsics/vst1x3.c: New test for >> vst1x3 intrinsics for aarch64_little_endian. >> > -- - Thanks and regards, Sameera D. --0000000000009f985405698e1756 Content-Type: text/x-patch; charset="US-ASCII"; name="ldst1_x23.patch" Content-Disposition: attachment; filename="ldst1_x23.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jfut6muw0 Content-length: 78219 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQt YnVpbHRpbnMuZGVmIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2lt ZC1idWlsdGlucy5kZWYKaW5kZXggYjM4M2YyNC4uMmZkMDcyYSAxMDA2NDQK LS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC1idWlsdGlu cy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC1i dWlsdGlucy5kZWYKQEAgLTQ0NSw2ICs0NDUsMTUgQEAKICAgQlVJTFRJTl9W QUxMX0YxNiAoU1RPUkUxLCBzdDEsIDApCiAgIFZBUjEoU1RPUkUxUCwgc3Qx LCAwLCB2MmRpKQogCisgIC8qIEltcGxlbWVudGVkIGJ5IGFhcmNoNjRfbGQx eDM8VkFMTERJRjptb2RlPi4gICovCisgIEJVSUxUSU5fVkFMTERJRiAoTE9B RFNUUlVDVCwgbGQxeDMsIDApCisKKyAgLyogSW1wbGVtZW50ZWQgYnkgYWFy Y2g2NF9zdDF4MjxWQUxMRElGOm1vZGU+LiAgKi8KKyAgQlVJTFRJTl9WQUxM RElGIChTVE9SRVNUUlVDVCwgc3QxeDIsIDApCisKKyAgLyogSW1wbGVtZW50 ZWQgYnkgYWFyY2g2NF9zdDF4MzxWQUxMRElGOm1vZGU+LiAgKi8KKyAgQlVJ TFRJTl9WQUxMRElGIChTVE9SRVNUUlVDVCwgc3QxeDMsIDApCisKICAgLyog SW1wbGVtZW50ZWQgYnkgZm1hPG1vZGU+NC4gICovCiAgIEJVSUxUSU5fVkhT REYgKFRFUk5PUCwgZm1hLCA0KQogICBWQVIxIChURVJOT1AsIGZtYSwgNCwg aGYpCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1z aW1kLm1kIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC5tZApp bmRleCAzZDFmNmEwLi5lMTk3YTY3IDEwMDY0NAotLS0gYS9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1kCisrKyBiL2djYy9jb25maWcvYWFy Y2g2NC9hYXJjaDY0LXNpbWQubWQKQEAgLTUwNDcsNiArNTA0Nyw3MCBAQAog ICAgIH0KIH0pCiAKKworKGRlZmluZV9leHBhbmQgImFhcmNoNjRfbGQxeDM8 VkFMTERJRjptb2RlPiIKKyAgWyhtYXRjaF9vcGVyYW5kOkNJIDAgInJlZ2lz dGVyX29wZXJhbmQiICI9dyIpCisgICAobWF0Y2hfb3BlcmFuZDpESSAxICJy ZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisgICAodW5zcGVjOlZBTExESUYgWyhj b25zdF9pbnQgMCldIFVOU1BFQ19WU1RSVUNURFVNTVkpXQorICAiVEFSR0VU X1NJTUQiCit7CisgIHJ0eCBtZW0gPSBnZW5fcnR4X01FTSAoQ0ltb2RlLCBv cGVyYW5kc1sxXSk7CisgIGVtaXRfaW5zbiAoZ2VuX2FhcmNoNjRfbGQxX3gz XzxWQUxMRElGOm1vZGU+IChvcGVyYW5kc1swXSwgbWVtKSk7CisgIERPTkU7 Cit9KQorCisoZGVmaW5lX2luc24gImFhcmNoNjRfbGQxX3gzXzxtb2RlPiIK KyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Q0kgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIj13IikKKyAgICAgICAgKHVuc3BlYzpDSSAKKwkgIFsobWF0Y2hfb3Bl cmFuZDpDSSAxICJhYXJjaDY0X3NpbWRfc3RydWN0X29wZXJhbmQiICJVdHYi KQorCSAgICh1bnNwZWM6VkFMTERJRiBbKGNvbnN0X2ludCAzKV0gVU5TUEVD X1ZTVFJVQ1REVU1NWSldIFVOU1BFQ19MRDEpKV0KKyAgIlRBUkdFVF9TSU1E IgorICAibGQxXFx0eyVTMC48VnR5cGU+IC0gJVUwLjxWdHlwZT59LCAlMSIK KyAgWyhzZXRfYXR0ciAidHlwZSIgIm5lb25fbG9hZDFfM3JlZzxxPiIpXQor KQorCisoZGVmaW5lX2V4cGFuZCAiYWFyY2g2NF9zdDF4MjxWQUxMRElGOm1v ZGU+IgorICBbKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIiIpCisgICAobWF0Y2hfb3BlcmFuZDpPSSAxICJyZWdpc3Rlcl9vcGVy YW5kIiAiIikKKyAgICh1bnNwZWM6VkFMTERJRiBbKGNvbnN0X2ludCAwKV0g VU5TUEVDX1ZTVFJVQ1REVU1NWSldCisgICJUQVJHRVRfU0lNRCIKK3sKKyAg cnR4IG1lbSA9IGdlbl9ydHhfTUVNIChPSW1vZGUsIG9wZXJhbmRzWzBdKTsK KyAgZW1pdF9pbnNuIChnZW5fYWFyY2g2NF9zdDFfeDJfPFZBTExESUY6bW9k ZT4gKG1lbSwgb3BlcmFuZHNbMV0pKTsKKyAgRE9ORTsKK30pCisKKyhkZWZp bmVfaW5zbiAiYWFyY2g2NF9zdDFfeDJfPG1vZGU+IgorICAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6T0kgMCAiYWFyY2g2NF9zaW1kX3N0cnVjdF9vcGVyYW5k IiAiPVV0diIpCisJICh1bnNwZWM6T0kKKwkgIFsobWF0Y2hfb3BlcmFuZDpP SSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAidyIpCisgICAgICAgICAgKHVuc3Bl YzpWQUxMRElGIFsoY29uc3RfaW50IDIpXSBVTlNQRUNfVlNUUlVDVERVTU1Z KV0gVU5TUEVDX1NUMSkpXQorICAiVEFSR0VUX1NJTUQiCisgICJzdDFcXHR7 JVMxLjxWdHlwZT4gLSAlVDEuPFZ0eXBlPn0sICUwIgorICBbKHNldF9hdHRy ICJ0eXBlIiAibmVvbl9zdG9yZTFfMnJlZzxxPiIpXQorKQorCisoZGVmaW5l X2V4cGFuZCAiYWFyY2g2NF9zdDF4MzxWQUxMRElGOm1vZGU+IgorICBbKG1h dGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpCisgICAo bWF0Y2hfb3BlcmFuZDpDSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikKKyAg ICh1bnNwZWM6VkFMTERJRiBbKGNvbnN0X2ludCAwKV0gVU5TUEVDX1ZTVFJV Q1REVU1NWSldCisgICJUQVJHRVRfU0lNRCIKK3sKKyAgcnR4IG1lbSA9IGdl bl9ydHhfTUVNIChDSW1vZGUsIG9wZXJhbmRzWzBdKTsKKyAgZW1pdF9pbnNu IChnZW5fYWFyY2g2NF9zdDFfeDNfPFZBTExESUY6bW9kZT4gKG1lbSwgb3Bl cmFuZHNbMV0pKTsKKyAgRE9ORTsKK30pCisKKyhkZWZpbmVfaW5zbiAiYWFy Y2g2NF9zdDFfeDNfPG1vZGU+IgorICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 Q0kgMCAiYWFyY2g2NF9zaW1kX3N0cnVjdF9vcGVyYW5kIiAiPVV0diIpIAor CSh1bnNwZWM6Q0kKKyAgICAgICAgIFsobWF0Y2hfb3BlcmFuZDpDSSAxICJy ZWdpc3Rlcl9vcGVyYW5kIiAidyIpCisJICAodW5zcGVjOlZBTExESUYgWyhj b25zdF9pbnQgMyldIFVOU1BFQ19WU1RSVUNURFVNTVkpXSBVTlNQRUNfU1Qx KSldCisgICJUQVJHRVRfU0lNRCIKKyAgInN0MVxcdHslUzEuPFZ0eXBlPiAt ICVVMS48VnR5cGU+fSwgJTAiCisgIFsoc2V0X2F0dHIgInR5cGUiICJuZW9u X3N0b3JlMV8zcmVnPHE+IildCispCisKIChkZWZpbmVfaW5zbiAiKmFhcmNo NjRfbW92PG1vZGU+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWU1RSVUNU IDAgImFhcmNoNjRfc2ltZF9ub25pbW1lZGlhdGVfb3BlcmFuZCIgIj13LFV0 dix3IikKIAkobWF0Y2hfb3BlcmFuZDpWU1RSVUNUIDEgImFhcmNoNjRfc2lt ZF9nZW5lcmFsX29wZXJhbmQiICIgdyx3LFV0diIpKV0KZGlmZiAtLWdpdCBh L2djYy9jb25maWcvYWFyY2g2NC9hcm1fbmVvbi5oIGIvZ2NjL2NvbmZpZy9h YXJjaDY0L2FybV9uZW9uLmgKaW5kZXggYzQ1YzI5YS4uNmFjNzA5OSAxMDA2 NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FybV9uZW9uLmgKKysrIGIv Z2NjL2NvbmZpZy9hYXJjaDY0L2FybV9uZW9uLmgKQEAgLTE3MTQ1LDYgKzE3 MTQ1LDM3NCBAQCB2bGQxX3U2NCAoY29uc3QgdWludDY0X3QgKmEpCiAgIHJl dHVybiAodWludDY0eDFfdCkgeyphfTsKIH0KIAorLyogdmxkMXgzICAqLwor CitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1aW50OHg4eDNfdAor X19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQordmxkMV91OF94MyAoY29uc3QgdWlu dDhfdCAqX19hKQoreworICB1aW50OHg4eDNfdCBfX2k7CisgIF9fYnVpbHRp bl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSAoX19idWlsdGluX2Fh cmNoNjRfc2ltZF9jaSlfX2J1aWx0aW5fYWFyY2g2NF9sZDF4M3Y4cWkgKChj b25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSk7CisgIF9f aS52YWxbMF0gPSAodWludDh4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRf ZHJlZ2NpdjhxaSAgKF9fbywgMCk7CisgIF9faS52YWxbMV0gPSAodWludDh4 OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjhxaSAgKF9fbywg MSk7CisgIF9faS52YWxbMl0gPSAodWludDh4OF90KSBfX2J1aWx0aW5fYWFy Y2g2NF9nZXRfZHJlZ2NpdjhxaSAgKF9fbywgMik7CisgIHJldHVybiBfX2k7 Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDh4OHgz X3QKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZsZDFfczhfeDMgKGNvbnN0 IHVpbnQ4X3QgKl9fYSkKK3sKKyAgaW50OHg4eDNfdCBfX2k7CisgIF9fYnVp bHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5f YWFyY2g2NF9sZDF4M3Y4cWkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9z aW1kX3FpICopIF9fYSk7CisgIF9faS52YWxbMF0gPSAoaW50OHg4X3QpIF9f YnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2OHFpICAoX19vLCAwKTsKKyAg X19pLnZhbFsxXSA9IChpbnQ4eDhfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0 X2RyZWdjaXY4cWkgIChfX28sIDEpOworICBfX2kudmFsWzJdID0gKGludDh4 OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjhxaSAgKF9fbywg Mik7CisgIHJldHVybiBfX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJu IF9faW5saW5lIHVpbnQxNng0eDNfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3 YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQordmxkMV91MTZfeDMgKGNvbnN0IHVpbnQxNl90ICpfX2EpCit7CisgIHVp bnQxNng0eDNfdCBfX2k7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kg X19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDF4M3Y0aGkgKChj b25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSk7CisgIF9f aS52YWxbMF0gPSAodWludDE2eDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0 X2RyZWdjaXY0aGkgIChfX28sIDApOworICBfX2kudmFsWzFdID0gKHVpbnQx Nng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2NGhpICAoX19v LCAxKTsKKyAgX19pLnZhbFsyXSA9ICh1aW50MTZ4NF90KSBfX2J1aWx0aW5f YWFyY2g2NF9nZXRfZHJlZ2NpdjRoaSAgKF9fbywgMik7CisgIHJldHVybiBf X2k7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDE2 eDR4M190CitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9f Z251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2bGQxX3MxNl94MyAo Y29uc3QgaW50MTZfdCAqX19hKQoreworICBpbnQxNng0eDNfdCBfX2k7Cisg IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1 aWx0aW5fYWFyY2g2NF9sZDF4M3Y0aGkgKChjb25zdCBfX2J1aWx0aW5fYWFy Y2g2NF9zaW1kX2hpICopIF9fYSk7CisgIF9faS52YWxbMF0gPSAoaW50MTZ4 NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjRoaSAgKF9fbywg MCk7CisgIF9faS52YWxbMV0gPSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFy Y2g2NF9nZXRfZHJlZ2NpdjRoaSAgKF9fbywgMSk7CisgIF9faS52YWxbMl0g PSAoaW50MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjRo aSAgKF9fbywgMik7CisgIHJldHVybiBfX2k7Cit9CisKK19fZXh0ZW5zaW9u X18gZXh0ZXJuIF9faW5saW5lIHVpbnQzMngyeDNfdAorX19hdHRyaWJ1dGVf XyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQordmxkMV91MzJfeDMgKGNvbnN0IHVpbnQzMl90ICpfX2Ep Cit7CisgIHVpbnQzMngyeDNfdCBfX2k7CisgIF9fYnVpbHRpbl9hYXJjaDY0 X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDF4 M3Yyc2kgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9f YSk7CisgIF9faS52YWxbMF0gPSAodWludDMyeDJfdCkgX19idWlsdGluX2Fh cmNoNjRfZ2V0X2RyZWdjaXYyc2kgIChfX28sIDApOworICBfX2kudmFsWzFd ID0gKHVpbnQzMngyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2 MnNpICAoX19vLCAxKTsKKyAgX19pLnZhbFsyXSA9ICh1aW50MzJ4Ml90KSBf X2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjJzaSAgKF9fbywgMik7Cisg IHJldHVybiBfX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s aW5lIGludDMyeDJ4M190CitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5s aW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2bGQx X3MzMl94MyAoY29uc3QgdWludDMyX3QgKl9fYSkKK3sKKyAgaW50MzJ4Mngz X3QgX19pOworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAg X19vID0gX19idWlsdGluX2FhcmNoNjRfbGQxeDN2MnNpICgoY29uc3QgX19i dWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EpOworICBfX2kudmFsWzBd ID0gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXYy c2kgIChfX28sIDApOworICBfX2kudmFsWzFdID0gKGludDMyeDJfdCkgX19i dWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXYyc2kgIChfX28sIDEpOworICBf X2kudmFsWzJdID0gKGludDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0 X2RyZWdjaXYyc2kgIChfX28sIDIpOworICByZXR1cm4gX19pOworfQorCitf X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1aW50NjR4MXgzX3QKK19f YXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZsZDFfdTY0X3gzIChjb25zdCB1aW50 NjRfdCAqX19hKQoreworICB1aW50NjR4MXgzX3QgX19pOworICBfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2Fh cmNoNjRfbGQxeDNkaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRf ZGkgKikgX19hKTsKKyAgX19pLnZhbFswXSA9ICh1aW50NjR4MV90KSBfX2J1 aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpZGkgKF9fbywgMCk7CisgIF9faS52 YWxbMV0gPSAodWludDY0eDFfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X2Ry ZWdjaWRpIChfX28sIDEpOworICBfX2kudmFsWzJdID0gKHVpbnQ2NHgxX3Qp IF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2lkaSAoX19vLCAyKTsKKyAg cmV0dXJuIF9faTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxp bmUgaW50NjR4MXgzX3QKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxp bmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZsZDFf czY0X3gzIChjb25zdCBpbnQ2NF90ICpfX2EpCit7CisgIGludDY0eDF4M190 IF9faTsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9f byA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMXgzZGkgKChjb25zdCBfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSk7CisgIF9faS52YWxbMF0gPSAo aW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpZGkgKF9f bywgMCk7CisgIF9faS52YWxbMV0gPSAoaW50NjR4MV90KSBfX2J1aWx0aW5f YWFyY2g2NF9nZXRfZHJlZ2NpZGkgKF9fbywgMSk7CisgIF9faS52YWxbMl0g PSAoaW50NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpZGkg KF9fbywgMik7CisKKyAgcmV0dXJuIF9faTsKK30KKworX19leHRlbnNpb25f XyBleHRlcm4gX19pbmxpbmUgZmxvYXQxNng0eDNfdAorX19hdHRyaWJ1dGVf XyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQordmxkMV9mMTZfeDMgKGNvbnN0IGZsb2F0MTZfdCAqX19h KQoreworICBmbG9hdDE2eDR4M190IF9faTsKKyAgX19idWlsdGluX2FhcmNo NjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xk MXgzdjRoZiAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGYgKikg X19hKTsKKyAgX19pLnZhbFswXSA9IChmbG9hdDE2eDRfdCkgX19idWlsdGlu X2FhcmNoNjRfZ2V0X2RyZWdjaXY0aGYgIChfX28sIDApOworICBfX2kudmFs WzFdID0gKGZsb2F0MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJl Z2NpdjRoZiAgKF9fbywgMSk7CisgIF9faS52YWxbMl0gPSAoZmxvYXQxNng0 X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2NGhmICAoX19vLCAy KTsKKyAgcmV0dXJuIF9faTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4g X19pbmxpbmUgZmxvYXQzMngyeDNfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3 YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQordmxkMV9mMzJfeDMgKGNvbnN0IGZsb2F0MzJfdCAqX19hKQoreworICBm bG9hdDMyeDJ4M190IF9faTsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9j aSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMXgzdjJzZiAo KGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2YgKikgX19hKTsKKyAg X19pLnZhbFswXSA9IChmbG9hdDMyeDJfdCkgX19idWlsdGluX2FhcmNoNjRf Z2V0X2RyZWdjaXYyc2YgIChfX28sIDApOworICBfX2kudmFsWzFdID0gKGZs b2F0MzJ4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpdjJzZiAg KF9fbywgMSk7CisgIF9faS52YWxbMl0gPSAoZmxvYXQzMngyX3QpIF9fYnVp bHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2MnNmICAoX19vLCAyKTsKKyAgcmV0 dXJuIF9faTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUg ZmxvYXQ2NHgxeDNfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordmxkMV9m NjRfeDMgKGNvbnN0IGZsb2F0NjRfdCAqX19hKQoreworICBmbG9hdDY0eDF4 M190IF9faTsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287Cisg IF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMXgzZGYgKChjb25zdCBfX2J1 aWx0aW5fYWFyY2g2NF9zaW1kX2RmICopIF9fYSk7CisgIF9faS52YWxbMF0g PSAoZmxvYXQ2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2lk aSAoX19vLCAwKTsKKyAgX19pLnZhbFsxXSA9IChmbG9hdDY0eDFfdCkgX19i dWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaWRpIChfX28sIDEpOworICBfX2ku dmFsWzJdID0gKGZsb2F0NjR4MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRf ZHJlZ2NpZGkgKF9fbywgMik7CisgIHJldHVybiBfX2k7Cit9CisKK19fZXh0 ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHBvbHk4eDh4M190CitfX2F0dHJp YnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCit2bGQxX3A4X3gzIChjb25zdCBwb2x5OF90ICpf X2EpCit7CisgIHBvbHk4eDh4M190IF9faTsKKyAgX19idWlsdGluX2FhcmNo NjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xk MXgzdjhxaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikg X19hKTsKKyAgX19pLnZhbFswXSA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9h YXJjaDY0X2dldF9kcmVnY2l2OHFpICAoX19vLCAwKTsKKyAgX19pLnZhbFsx XSA9IChwb2x5OHg4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2 OHFpICAoX19vLCAxKTsKKyAgX19pLnZhbFsyXSA9IChwb2x5OHg4X3QpIF9f YnVpbHRpbl9hYXJjaDY0X2dldF9kcmVnY2l2OHFpICAoX19vLCAyKTsKKyAg cmV0dXJuIF9faTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxp bmUgcG9seTE2eDR4M190CitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5s aW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2bGQx X3AxNl94MyAoY29uc3QgcG9seTE2X3QgKl9fYSkKK3sKKyAgcG9seTE2eDR4 M190IF9faTsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287Cisg IF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMXgzdjRoaSAoKGNvbnN0IF9f YnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hKTsKKyAgX19pLnZhbFsw XSA9IChwb2x5MTZ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2Np djRoaSAgKF9fbywgMCk7CisgIF9faS52YWxbMV0gPSAocG9seTE2eDRfdCkg X19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaXY0aGkgIChfX28sIDEpOwor ICBfX2kudmFsWzJdID0gKHBvbHkxNng0X3QpIF9fYnVpbHRpbl9hYXJjaDY0 X2dldF9kcmVnY2l2NGhpICAoX19vLCAyKTsKKyAgcmV0dXJuIF9faTsKK30K KworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgcG9seTY0eDF4M190 CitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2bGQxX3A2NF94MyAoY29uc3Qg cG9seTY0X3QgKl9fYSkKK3sKKyAgcG9seTY0eDF4M190IF9faTsKKyAgX19i dWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRp bl9hYXJjaDY0X2xkMXgzZGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9z aW1kX2RpICopIF9fYSk7CisgIF9faS52YWxbMF0gPSAocG9seTY0eDFfdCkg X19idWlsdGluX2FhcmNoNjRfZ2V0X2RyZWdjaWRpIChfX28sIDApOworICBf X2kudmFsWzFdID0gKHBvbHk2NHgxX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dl dF9kcmVnY2lkaSAoX19vLCAxKTsKKyAgX19pLnZhbFsyXSA9IChwb2x5NjR4 MV90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfZHJlZ2NpZGkgKF9fbywgMik7 CisKK3JldHVybiBfX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f aW5saW5lIHVpbnQ4eDE2eDNfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlz X2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor dmxkMXFfdThfeDMgKGNvbnN0IHVpbnQ4X3QgKl9fYSkKK3sKKyAgdWludDh4 MTZ4M190IF9faTsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287 CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMXgzdjE2cWkgKChjb25z dCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSk7CisgIF9faS52 YWxbMF0gPSAodWludDh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3Fy ZWdjaXYxNnFpICAoX19vLCAwKTsKKyAgX19pLnZhbFsxXSA9ICh1aW50OHgx Nl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjE2cWkgIChfX28s IDEpOworICBfX2kudmFsWzJdID0gKHVpbnQ4eDE2X3QpIF9fYnVpbHRpbl9h YXJjaDY0X2dldF9xcmVnY2l2MTZxaSAgKF9fbywgMik7CisgIHJldHVybiBf X2k7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDh4 MTZ4M190CitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9f Z251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2bGQxcV9zOF94MyAo Y29uc3QgaW50OF90ICpfX2EpCit7CisgIGludDh4MTZ4M190IF9faTsKKyAg X19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVp bHRpbl9hYXJjaDY0X2xkMXgzdjE2cWkgKChjb25zdCBfX2J1aWx0aW5fYWFy Y2g2NF9zaW1kX3FpICopIF9fYSk7CisgIF9faS52YWxbMF0gPSAoaW50OHgx Nl90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjE2cWkgIChfX28s IDApOworICBfX2kudmFsWzFdID0gKGludDh4MTZfdCkgX19idWlsdGluX2Fh cmNoNjRfZ2V0X3FyZWdjaXYxNnFpICAoX19vLCAxKTsKKyAgX19pLnZhbFsy XSA9IChpbnQ4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2 MTZxaSAgKF9fbywgMik7CisgIHJldHVybiBfX2k7Cit9CisKK19fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQxNng4eDNfdAorX19hdHRyaWJ1 dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQordmxkMXFfdTE2X3gzIChjb25zdCB1aW50MTZfdCAq X19hKQoreworICB1aW50MTZ4OHgzX3QgX19pOworICBfX2J1aWx0aW5fYWFy Y2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRf bGQxeDN2OGhpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAq KSBfX2EpOworICBfX2kudmFsWzBdID0gKHVpbnQxNng4X3QpIF9fYnVpbHRp bl9hYXJjaDY0X2dldF9xcmVnY2l2OGhpICAoX19vLCAwKTsKKyAgX19pLnZh bFsxXSA9ICh1aW50MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJl Z2NpdjhoaSAgKF9fbywgMSk7CisgIF9faS52YWxbMl0gPSAodWludDE2eDhf dCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY4aGkgIChfX28sIDIp OworICByZXR1cm4gX19pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSBpbnQxNng4eDNfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlz X2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor dmxkMXFfczE2X3gzIChjb25zdCBpbnQxNl90ICpfX2EpCit7CisgIGludDE2 eDh4M190IF9faTsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287 CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMXgzdjhoaSAoKGNvbnN0 IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hKTsKKyAgX19pLnZh bFswXSA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVn Y2l2OGhpICAoX19vLCAwKTsKKyAgX19pLnZhbFsxXSA9IChpbnQxNng4X3Qp IF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2OGhpICAoX19vLCAxKTsK KyAgX19pLnZhbFsyXSA9IChpbnQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0 X2dldF9xcmVnY2l2OGhpICAoX19vLCAyKTsKKyAgcmV0dXJuIF9faTsKK30K KworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDMyeDR4M190 CitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2bGQxcV91MzJfeDMgKGNvbnN0 IHVpbnQzMl90ICpfX2EpCit7CisgIHVpbnQzMng0eDNfdCBfX2k7CisgIF9f YnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0 aW5fYWFyY2g2NF9sZDF4M3Y0c2kgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2 NF9zaW1kX3NpICopIF9fYSk7CisgIF9faS52YWxbMF0gPSAodWludDMyeDRf dCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY0c2kgIChfX28sIDAp OworICBfX2kudmFsWzFdID0gKHVpbnQzMng0X3QpIF9fYnVpbHRpbl9hYXJj aDY0X2dldF9xcmVnY2l2NHNpICAoX19vLCAxKTsKKyAgX19pLnZhbFsyXSA9 ICh1aW50MzJ4NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjRz aSAgKF9fbywgMik7CisgIHJldHVybiBfX2k7Cit9CisKK19fZXh0ZW5zaW9u X18gZXh0ZXJuIF9faW5saW5lIGludDMyeDR4M190CitfX2F0dHJpYnV0ZV9f ICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCit2bGQxcV9zMzJfeDMgKGNvbnN0IGludDMyX3QgKl9fYSkK K3sKKyAgaW50MzJ4NHgzX3QgX19pOworICBfX2J1aWx0aW5fYWFyY2g2NF9z aW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQxeDN2 NHNpICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2Ep OworICBfX2kudmFsWzBdID0gKGludDMyeDRfdCkgX19idWlsdGluX2FhcmNo NjRfZ2V0X3FyZWdjaXY0c2kgIChfX28sIDApOworICBfX2kudmFsWzFdID0g KGludDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY0c2kg IChfX28sIDEpOworICBfX2kudmFsWzJdID0gKGludDMyeDRfdCkgX19idWls dGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY0c2kgIChfX28sIDIpOworICByZXR1 cm4gX19pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1 aW50NjR4MngzX3QKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVf XywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZsZDFxX3U2 NF94MyAoY29uc3QgdWludDY0X3QgKl9fYSkKK3sKKyAgdWludDY0eDJ4M190 IF9faTsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9f byA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMXgzdjJkaSAoKGNvbnN0IF9fYnVp bHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hKTsKKyAgX19pLnZhbFswXSA9 ICh1aW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjJk aSAgKF9fbywgMCk7CisgIF9faS52YWxbMV0gPSAodWludDY0eDJfdCkgX19i dWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXYyZGkgIChfX28sIDEpOworICBf X2kudmFsWzJdID0gKHVpbnQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dl dF9xcmVnY2l2MmRpICAoX19vLCAyKTsKKyAgcmV0dXJuIF9faTsKK30KKwor X19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50NjR4MngzX3QKK19f YXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZsZDFxX3M2NF94MyAoY29uc3QgaW50 NjRfdCAqX19hKQoreworICBpbnQ2NHgyeDNfdCBfX2k7CisgIF9fYnVpbHRp bl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFy Y2g2NF9sZDF4M3YyZGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1k X2RpICopIF9fYSk7CisgIF9faS52YWxbMF0gPSAoaW50NjR4Ml90KSBfX2J1 aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjJkaSAgKF9fbywgMCk7CisgIF9f aS52YWxbMV0gPSAoaW50NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRf cXJlZ2NpdjJkaSAgKF9fbywgMSk7CisgIF9faS52YWxbMl0gPSAoaW50NjR4 Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjJkaSAgKF9fbywg Mik7CisgIHJldHVybiBfX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJu IF9faW5saW5lIGZsb2F0MTZ4OHgzX3QKK19fYXR0cmlidXRlX18gKChfX2Fs d2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKK3ZsZDFxX2YxNl94MyAoY29uc3QgZmxvYXQxNl90ICpfX2EpCit7Cisg IGZsb2F0MTZ4OHgzX3QgX19pOworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1k X2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfbGQxeDN2OGhm ICgoY29uc3QgX19idWlsdGluX2FhcmNoNjRfc2ltZF9oZiAqKSBfX2EpOwor ICBfX2kudmFsWzBdID0gKGZsb2F0MTZ4OF90KSBfX2J1aWx0aW5fYWFyY2g2 NF9nZXRfcXJlZ2NpdjhoZiAgKF9fbywgMCk7CisgIF9faS52YWxbMV0gPSAo ZmxvYXQxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2OGhm ICAoX19vLCAxKTsKKyAgX19pLnZhbFsyXSA9IChmbG9hdDE2eDhfdCkgX19i dWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXY4aGYgIChfX28sIDIpOworICBy ZXR1cm4gX19pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSBmbG9hdDMyeDR4M190CitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5s aW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2bGQx cV9mMzJfeDMgKGNvbnN0IGZsb2F0MzJfdCAqX19hKQoreworICBmbG9hdDMy eDR4M190IF9faTsKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287 CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X2xkMXgzdjRzZiAoKGNvbnN0 IF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2YgKikgX19hKTsKKyAgX19pLnZh bFswXSA9IChmbG9hdDMyeDRfdCkgX19idWlsdGluX2FhcmNoNjRfZ2V0X3Fy ZWdjaXY0c2YgIChfX28sIDApOworICBfX2kudmFsWzFdID0gKGZsb2F0MzJ4 NF90KSBfX2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjRzZiAgKF9fbywg MSk7CisgIF9faS52YWxbMl0gPSAoZmxvYXQzMng0X3QpIF9fYnVpbHRpbl9h YXJjaDY0X2dldF9xcmVnY2l2NHNmICAoX19vLCAyKTsKKyAgcmV0dXJuIF9f aTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgZmxvYXQ2 NHgyeDNfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBf X2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordmxkMXFfZjY0X3gz IChjb25zdCBmbG9hdDY0X3QgKl9fYSkKK3sKKyAgZmxvYXQ2NHgyeDNfdCBf X2k7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28g PSBfX2J1aWx0aW5fYWFyY2g2NF9sZDF4M3YyZGYgKChjb25zdCBfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX2RmICopIF9fYSk7CisgIF9faS52YWxbMF0gPSAo ZmxvYXQ2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2MmRm ICAoX19vLCAwKTsKKyAgX19pLnZhbFsxXSA9IChmbG9hdDY0eDJfdCkgX19i dWlsdGluX2FhcmNoNjRfZ2V0X3FyZWdjaXYyZGYgIChfX28sIDEpOworICBf X2kudmFsWzJdID0gKGZsb2F0NjR4Ml90KSBfX2J1aWx0aW5fYWFyY2g2NF9n ZXRfcXJlZ2NpdjJkZiAgKF9fbywgMik7CisgIHJldHVybiBfX2k7Cit9CisK K19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHBvbHk4eDE2eDNfdAor X19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQordmxkMXFfcDhfeDMgKGNvbnN0IHBv bHk4X3QgKl9fYSkKK3sKKyAgcG9seTh4MTZ4M190IF9faTsKKyAgX19idWls dGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9h YXJjaDY0X2xkMXgzdjhoaSAoKGNvbnN0IF9fYnVpbHRpbl9hYXJjaDY0X3Np bWRfaGkgKikgX19hKTsKKyAgX19pLnZhbFswXSA9IChwb2x5OHgxNl90KSBf X2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjhoaSAgKF9fbywgMCk7Cisg IF9faS52YWxbMV0gPSAocG9seTh4MTZfdCkgX19idWlsdGluX2FhcmNoNjRf Z2V0X3FyZWdjaXY4aGkgIChfX28sIDEpOworICBfX2kudmFsWzJdID0gKHBv bHk4eDE2X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2OGhpICAo X19vLCAyKTsKKyAgcmV0dXJuIF9faTsKK30KKworX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgcG9seTE2eDh4M190CitfX2F0dHJpYnV0ZV9fICgo X19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCit2bGQxcV9wMTZfeDMgKGNvbnN0IHBvbHkxNl90ICpfX2EpCit7 CisgIHBvbHkxNng4eDNfdCBfX2k7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3Np bWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9sZDF4M3Y4 aGkgKChjb25zdCBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSk7 CisgIF9faS52YWxbMF0gPSAocG9seTE2eDhfdCkgX19idWlsdGluX2FhcmNo NjRfZ2V0X3FyZWdjaXY4aGkgIChfX28sIDApOworICBfX2kudmFsWzFdID0g KHBvbHkxNng4X3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2OGhp ICAoX19vLCAxKTsKKyAgX19pLnZhbFsyXSA9IChwb2x5MTZ4OF90KSBfX2J1 aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjhoaSAgKF9fbywgMik7CisgIHJl dHVybiBfX2k7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5l IHBvbHk2NHgyeDNfdAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordmxkMXFf cDY0X3gzIChjb25zdCBwb2x5NjRfdCAqX19hKQoreworICBwb2x5NjR4Mngz X3QgX19pOworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAg X19vID0gX19idWlsdGluX2FhcmNoNjRfbGQxeDN2MmRpICgoY29uc3QgX19i dWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBfX2EpOworICBfX2kudmFsWzBd ID0gKHBvbHk2NHgyX3QpIF9fYnVpbHRpbl9hYXJjaDY0X2dldF9xcmVnY2l2 MmRpICAoX19vLCAwKTsKKyAgX19pLnZhbFsxXSA9IChwb2x5NjR4Ml90KSBf X2J1aWx0aW5fYWFyY2g2NF9nZXRfcXJlZ2NpdjJkaSAgKF9fbywgMSk7Cisg IF9faS52YWxbMl0gPSAocG9seTY0eDJfdCkgX19idWlsdGluX2FhcmNoNjRf Z2V0X3FyZWdjaXYyZGkgIChfX28sIDIpOworICByZXR1cm4gX19pOworfQor CiAvKiB2bGQxcSAqLwogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSBmbG9hdDE2eDhfdApAQCAtMjc0OTcsNiArMjc4NjUsNzA2IEBAIHZzdDFx X2xhbmVfdTY0ICh1aW50NjRfdCAqX19hLCB1aW50NjR4Ml90IF9fYiwgY29u c3QgaW50IF9fbGFuZSkKICAgKl9fYSA9IF9fYWFyY2g2NF92Z2V0X2xhbmVf YW55IChfX2IsIF9fbGFuZSk7CiB9CiAKKy8qIHZzdDF4MiAqLworCitfX2V4 dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9f ICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCit2c3QxX3M2NF94MiAoaW50NjRfdCAqIF9fYSwgaW50NjR4 MXgyX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9f bzsKKyAgaW50NjR4MngyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29t YmluZV9zNjQgKHZhbC52YWxbMF0sIHZjcmVhdGVfczY0IChfX0FBUkNINjRf SU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9zNjQg KHZhbC52YWxbMV0sIHZjcmVhdGVfczY0IChfX0FBUkNINjRfSU5UNjRfQyAo MCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXYy ZGkgKF9fbywgKGludDY0eDJfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28g PSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjJkaSAoX19vLCAoaW50 NjR4Ml90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0 X3N0MXgyZGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSwg X19vKTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9p ZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordnN0MV91NjRfeDIgKHVpbnQ2 NF90ICogX19hLCB1aW50NjR4MXgyX3QgdmFsKQoreworICBfX2J1aWx0aW5f YWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgdWludDY0eDJ4Ml90IHRlbXA7Cisg IHRlbXAudmFsWzBdID0gdmNvbWJpbmVfdTY0ICh2YWwudmFsWzBdLCB2Y3Jl YXRlX3U2NCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZh bFsxXSA9IHZjb21iaW5lX3U2NCAodmFsLnZhbFsxXSwgdmNyZWF0ZV91NjQg KF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGlu X2FhcmNoNjRfc2V0X3FyZWdvaXYyZGkgKF9fbywgKGludDY0eDJfdCkgdGVt cC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRf cXJlZ29pdjJkaSAoX19vLCAoaW50NjR4Ml90KSB0ZW1wLnZhbFsxXSwgMSk7 CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgyZGkgKChfX2J1aWx0aW5fYWFy Y2g2NF9zaW1kX2RpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25f XyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3 YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQordnN0MV9mNjRfeDIgKGZsb2F0NjRfdCAqIF9fYSwgZmxvYXQ2NHgxeDJf dCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOwor ICBmbG9hdDY0eDJ4Ml90IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNvbWJp bmVfZjY0ICh2YWwudmFsWzBdLCB2Y3JlYXRlX2Y2NCAoX19BQVJDSDY0X1VJ TlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX2Y2NCAo dmFsLnZhbFsxXSwgdmNyZWF0ZV9mNjQgKF9fQUFSQ0g2NF9VSU5UNjRfQyAo MCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXYy ZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9f byA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MmRmIChfX28sIChm bG9hdDY0eDJfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFy Y2g2NF9zdDF4MmRmICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9kZiAqKSBf X2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5l IHZvaWQKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19n bnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDFfczhfeDIgKGlu dDhfdCAqIF9fYSwgaW50OHg4eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9h YXJjaDY0X3NpbWRfb2kgX19vOworICBpbnQ4eDE2eDJfdCB0ZW1wOworICB0 ZW1wLnZhbFswXSA9IHZjb21iaW5lX3M4ICh2YWwudmFsWzBdLCB2Y3JlYXRl X3M4IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0g PSB2Y29tYmluZV9zOCAodmFsLnZhbFsxXSwgdmNyZWF0ZV9zOCAoX19BQVJD SDY0X0lOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0 X3NldF9xcmVnb2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsw XSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2 MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9f YnVpbHRpbl9hYXJjaDY0X3N0MXgydjhxaSAoKF9fYnVpbHRpbl9hYXJjaDY0 X3NpbWRfcWkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIGV4 dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNf aW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2 c3QxX3A4X3gyIChwb2x5OF90ICogX19hLCBwb2x5OHg4eDJfdCB2YWwpCit7 CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBwb2x5OHgx NngyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9wOCAodmFs LnZhbFswXSwgdmNyZWF0ZV9wOCAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkp OworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3A4ICh2YWwudmFsWzFdLCB2 Y3JlYXRlX3A4IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9 IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MTZxaSAoX19vLCAoaW50 OHgxNl90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9h YXJjaDY0X3NldF9xcmVnb2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1w LnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgydjhxaSAo KF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfcWkgKikgX19hLCBfX28pOworfQor CitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJp YnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCit2c3QxX3MxNl94MiAoaW50MTZfdCAqIF9fYSwg aW50MTZ4NHgyX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1k X29pIF9fbzsKKyAgaW50MTZ4OHgyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0g PSB2Y29tYmluZV9zMTYgKHZhbC52YWxbMF0sIHZjcmVhdGVfczE2IChfX0FB UkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmlu ZV9zMTYgKHZhbC52YWxbMV0sIHZjcmVhdGVfczE2IChfX0FBUkNINjRfSU5U NjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3Fy ZWdvaXY4aGkgKF9fbywgKGludDE2eDhfdCkgdGVtcC52YWxbMF0sIDApOwor ICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjhoaSAoX19v LCAoaW50MTZ4OF90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9h YXJjaDY0X3N0MXgydjRoaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkg KikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lu bGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18s IF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QxX3AxNl94 MiAocG9seTE2X3QgKiBfX2EsIHBvbHkxNng0eDJfdCB2YWwpCit7CisgIF9f YnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBwb2x5MTZ4OHgyX3Qg dGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29tYmluZV9wMTYgKHZhbC52YWxb MF0sIHZjcmVhdGVfcDE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7Cisg IHRlbXAudmFsWzFdID0gdmNvbWJpbmVfcDE2ICh2YWwudmFsWzFdLCB2Y3Jl YXRlX3AxNiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBf X2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjhoaSAoX19vLCAoaW50MTZ4 OF90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJj aDY0X3NldF9xcmVnb2l2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFs WzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDJ2NGhpICgoX19i dWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EsIF9fbyk7Cit9CisKK19f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRl X18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKK3ZzdDFfczMyX3gyIChpbnQzMl90ICogX19hLCBpbnQz MngyeDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kg X19vOworICBpbnQzMng0eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZj b21iaW5lX3MzMiAodmFsLnZhbFswXSwgdmNyZWF0ZV9zMzIgKF9fQUFSQ0g2 NF9JTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5lX3Mz MiAodmFsLnZhbFsxXSwgdmNyZWF0ZV9zMzIgKF9fQUFSQ0g2NF9JTlQ2NF9D ICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29p djRzaSAoX19vLCAoaW50MzJ4NF90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9f byA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2NHNpIChfX28sIChp bnQzMng0X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNo NjRfc3QxeDJ2MnNpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBf X2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5l IHZvaWQKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19n bnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDFfdThfeDIgKHVp bnQ4X3QgKiBfX2EsIHVpbnQ4eDh4Ml90IHZhbCkKK3sKKyAgX19idWlsdGlu X2FhcmNoNjRfc2ltZF9vaSBfX287CisgIHVpbnQ4eDE2eDJfdCB0ZW1wOwor ICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3U4ICh2YWwudmFsWzBdLCB2Y3Jl YXRlX3U4IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFs WzFdID0gdmNvbWJpbmVfdTggKHZhbC52YWxbMV0sIHZjcmVhdGVfdTggKF9f QUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2Fh cmNoNjRfc2V0X3FyZWdvaXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHRlbXAu dmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3Fy ZWdvaXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHRlbXAudmFsWzFdLCAxKTsK KyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDJ2OHFpICgoX19idWlsdGluX2Fh cmNoNjRfc2ltZF9xaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9u X18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2Fs d2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKK3ZzdDFfdTE2X3gyICh1aW50MTZfdCAqIF9fYSwgdWludDE2eDR4Ml90 IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287Cisg IHVpbnQxNng4eDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5l X3UxNiAodmFsLnZhbFswXSwgdmNyZWF0ZV91MTYgKF9fQUFSQ0g2NF9VSU5U NjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91MTYgKHZh bC52YWxbMV0sIHZjcmVhdGVfdTE2IChfX0FBUkNINjRfVUlOVDY0X0MgKDAp KSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2OGhp IChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0g X19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY4aGkgKF9fbywgKGludDE2 eDhfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9z dDF4MnY0aGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwg X19vKTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9p ZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordnN0MV91MzJfeDIgKHVpbnQz Ml90ICogX19hLCB1aW50MzJ4MngyX3QgdmFsKQoreworICBfX2J1aWx0aW5f YWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgdWludDMyeDR4Ml90IHRlbXA7Cisg IHRlbXAudmFsWzBdID0gdmNvbWJpbmVfdTMyICh2YWwudmFsWzBdLCB2Y3Jl YXRlX3UzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZh bFsxXSA9IHZjb21iaW5lX3UzMiAodmFsLnZhbFsxXSwgdmNyZWF0ZV91MzIg KF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGlu X2FhcmNoNjRfc2V0X3FyZWdvaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdGVt cC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRf cXJlZ29pdjRzaSAoX19vLCAoaW50MzJ4NF90KSB0ZW1wLnZhbFsxXSwgMSk7 CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgydjJzaSAoKF9fYnVpbHRpbl9h YXJjaDY0X3NpbWRfc2kgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lv bl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19h bHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCit2c3QxX2YxNl94MiAoZmxvYXQxNl90ICogX19hLCBmbG9hdDE2eDR4 Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287 CisgIGZsb2F0MTZ4OHgyX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29t YmluZV9mMTYgKHZhbC52YWxbMF0sIHZjcmVhdGVfZjE2IChfX0FBUkNINjRf VUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfZjE2 ICh2YWwudmFsWzFdLCB2Y3JlYXRlX2YxNiAoX19BQVJDSDY0X1VJTlQ2NF9D ICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29p djhoZiAoX19vLCB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRp bl9hYXJjaDY0X3NldF9xcmVnb2l2OGhmIChfX28sIHRlbXAudmFsWzFdLCAx KTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDJ2NGhmIChfX2EsIF9fbyk7 Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19f YXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDFfZjMyX3gyIChmbG9hdDMyX3Qg KiBfX2EsIGZsb2F0MzJ4MngyX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFy Y2g2NF9zaW1kX29pIF9fbzsKKyAgZmxvYXQzMng0eDJfdCB0ZW1wOworICB0 ZW1wLnZhbFswXSA9IHZjb21iaW5lX2YzMiAodmFsLnZhbFswXSwgdmNyZWF0 ZV9mMzIgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxb MV0gPSB2Y29tYmluZV9mMzIgKHZhbC52YWxbMV0sIHZjcmVhdGVfZjMyIChf X0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9h YXJjaDY0X3NldF9xcmVnb2l2NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdGVt cC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRf cXJlZ29pdjRzZiAoX19vLCAoZmxvYXQzMng0X3QpIHRlbXAudmFsWzFdLCAx KTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDJ2MnNmICgoX19idWlsdGlu X2FhcmNoNjRfc2ltZF9zZiAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChf X2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKK3ZzdDFfcDY0X3gyIChwb2x5NjRfdCAqIF9fYSwgcG9seTY0eDF4 Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287 CisgIHBvbHk2NHgyeDJfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21i aW5lX3A2NCAodmFsLnZhbFswXSwgdmNyZWF0ZV9wNjQgKF9fQUFSQ0g2NF9V SU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV9wNjQg KHZhbC52YWxbMV0sIHZjcmVhdGVfcDY0IChfX0FBUkNINjRfVUlOVDY0X0Mg KDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2 MmRpX3NzcHMgKF9fbywKKwkJCQkJICAgICAgIChwb2x5NjR4Ml90KSB0ZW1w LnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9x cmVnb2l2MmRpX3NzcHMgKF9fbywKKwkJCQkJICAgICAgIChwb2x5NjR4Ml90 KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgy ZGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSwgX19vKTsK K30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19h dHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQordnN0MXFfczhfeDIgKGludDhfdCAqIF9f YSwgaW50OHgxNngyX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9z aW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3Fy ZWdvaXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxbMF0sIDApOwor ICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjE2cWkgKF9f bywgKGludDh4MTZfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9h YXJjaDY0X3N0MXgydjE2cWkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3Fp ICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19p bmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9f LCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordnN0MXFfcDhf eDIgKHBvbHk4X3QgKiBfX2EsIHBvbHk4eDE2eDJfdCB2YWwpCit7CisgIF9f YnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0 aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjE2cWkgKF9fbywgKGludDh4MTZfdCkg dmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3Nl dF9xcmVnb2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2YWwudmFsWzFdLCAx KTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDJ2MTZxaSAoKF9fYnVpbHRp bl9hYXJjaDY0X3NpbWRfcWkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgo X19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCit2c3QxcV9zMTZfeDIgKGludDE2X3QgKiBfX2EsIGludDE2eDh4 Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287 CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2OGhpIChf X28sIChpbnQxNng4X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1 aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjhoaSAoX19vLCAoaW50MTZ4OF90 KSB2YWwudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDJ2 OGhpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EsIF9fbyk7 Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19f YXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDFxX3AxNl94MiAocG9seTE2X3Qg KiBfX2EsIHBvbHkxNng4eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJj aDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9z ZXRfcXJlZ29pdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzBdLCAw KTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY4aGkg KF9fbywgKGludDE2eDhfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRp bl9hYXJjaDY0X3N0MXgydjhoaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRf aGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5l X18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QxcV9z MzJfeDIgKGludDMyX3QgKiBfX2EsIGludDMyeDR4Ml90IHZhbCkKK3sKKyAg X19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBfX287CisgIF9fbyA9IF9fYnVp bHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2NHNpIChfX28sIChpbnQzMng0X3Qp IHZhbC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9z ZXRfcXJlZ29pdjRzaSAoX19vLCAoaW50MzJ4NF90KSB2YWwudmFsWzFdLCAx KTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDJ2NHNpICgoX19idWlsdGlu X2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChf X2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKK3ZzdDFxX3M2NF94MiAoaW50NjRfdCAqIF9fYSwgaW50NjR4Mngy X3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsK KyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXYyZGkgKF9f bywgKGludDY0eDJfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVp bHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MmRpIChfX28sIChpbnQ2NHgyX3Qp IHZhbC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4MnYy ZGkgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSwgX19vKTsK K30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19h dHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQordnN0MXFfdThfeDIgKHVpbnQ4X3QgKiBf X2EsIHVpbnQ4eDE2eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0 X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRf cXJlZ29pdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFswXSwgMCk7 CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MTZxaSAo X19vLCAoaW50OHgxNl90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19idWlsdGlu X2FhcmNoNjRfc3QxeDJ2MTZxaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRf cWkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5l X18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QxcV91 MTZfeDIgKHVpbnQxNl90ICogX19hLCB1aW50MTZ4OHgyX3QgdmFsKQorewor ICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19i dWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXY4aGkgKF9fbywgKGludDE2eDhf dCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0 X3NldF9xcmVnb2l2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbMV0s IDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4MnY4aGkgKChfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwgX19vKTsKK30KKworX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAo KF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQordnN0MXFfdTMyX3gyICh1aW50MzJfdCAqIF9fYSwgdWludDMy eDR4Ml90IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9vaSBf X287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2NHNp IChfX28sIChpbnQzMng0X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBf X2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjRzaSAoX19vLCAoaW50MzJ4 NF90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Qx eDJ2NHNpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zaSAqKSBfX2EsIF9f byk7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQK K19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDFxX3U2NF94MiAodWludDY0 X3QgKiBfX2EsIHVpbnQ2NHgyeDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9h YXJjaDY0X3NpbWRfb2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2 NF9zZXRfcXJlZ29pdjJkaSAoX19vLCAoaW50NjR4Ml90KSB2YWwudmFsWzBd LCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdvaXYy ZGkgKF9fbywgKGludDY0eDJfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fYnVp bHRpbl9hYXJjaDY0X3N0MXgydjJkaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3Np bWRfZGkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVy biBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5s aW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3Qx cV9mMTZfeDIgKGZsb2F0MTZfdCAqIF9fYSwgZmxvYXQxNng4eDJfdCB2YWwp Cit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOworICBfX28g PSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjhoZiAoX19vLCB2YWwu dmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3Fy ZWdvaXY4aGYgKF9fbywgdmFsLnZhbFsxXSwgMSk7CisgIF9fYnVpbHRpbl9h YXJjaDY0X3N0MXgydjhoZiAoX19hLCBfX28pOworfQorCitfX2V4dGVuc2lv bl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19h bHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCit2c3QxcV9mMzJfeDIgKGZsb2F0MzJfdCAqIF9fYSwgZmxvYXQzMng0 eDJfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19v OworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjRzZiAo X19vLCAoZmxvYXQzMng0X3QpIHZhbC52YWxbMF0sIDApOworICBfX28gPSBf X2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjRzZiAoX19vLCAoZmxvYXQz Mng0X3QpIHZhbC52YWxbMV0sIDEpOworICBfX2J1aWx0aW5fYWFyY2g2NF9z dDF4MnY0c2YgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3NmICopIF9fYSwg X19vKTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9p ZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordnN0MXFfZjY0X3gyIChmbG9h dDY0X3QgKiBfX2EsIGZsb2F0NjR4MngyX3QgdmFsKQoreworICBfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX29pIF9fbzsKKyAgX19vID0gX19idWlsdGluX2Fh cmNoNjRfc2V0X3FyZWdvaXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwu dmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3Fy ZWdvaXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwudmFsWzFdLCAxKTsK KyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDJ2MmRmICgoX19idWlsdGluX2Fh cmNoNjRfc2ltZF9kZiAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9u X18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2Fs d2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKK3ZzdDFxX3A2NF94MiAocG9seTY0X3QgKiBfX2EsIHBvbHk2NHgyeDJf dCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfb2kgX19vOwor ICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ29pdjJkaV9zc3Bz IChfX28sCisJCQkJCSAgICAgICAocG9seTY0eDJfdCkgdmFsLnZhbFswXSwg MCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnb2l2MmRp X3NzcHMgKF9fbywKKwkJCQkJICAgICAgIChwb2x5NjR4Ml90KSB2YWwudmFs WzFdLCAxKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDJ2MmRpICgoX19i dWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBfX2EsIF9fbyk7Cit9CisKKy8q IHZzdDF4MyAqLworCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2 b2lkCitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251 X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QxX3M2NF94MyAoaW50 NjRfdCAqIF9fYSwgaW50NjR4MXgzX3QgdmFsKQoreworICBfX2J1aWx0aW5f YWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgaW50NjR4MngzX3QgdGVtcDsKKyAg dGVtcC52YWxbMF0gPSB2Y29tYmluZV9zNjQgKHZhbC52YWxbMF0sIHZjcmVh dGVfczY0IChfX0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxb MV0gPSB2Y29tYmluZV9zNjQgKHZhbC52YWxbMV0sIHZjcmVhdGVfczY0IChf X0FBUkNINjRfSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29t YmluZV9zNjQgKHZhbC52YWxbMl0sIHZjcmVhdGVfczY0IChfX0FBUkNINjRf SU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0 X3FyZWdjaXYyZGkgKF9fbywgKGludDY0eDJfdCkgdGVtcC52YWxbMF0sIDAp OworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaSAo X19vLCAoaW50NjR4Ml90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9f YnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MmRpIChfX28sIChpbnQ2NHgy X3QpIHRlbXAudmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Qx eDNkaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hLCBfX28p OworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitf X2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QxX3U2NF94MyAodWludDY0X3Qg KiBfX2EsIHVpbnQ2NHgxeDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJj aDY0X3NpbWRfY2kgX19vOworICB1aW50NjR4MngzX3QgdGVtcDsKKyAgdGVt cC52YWxbMF0gPSB2Y29tYmluZV91NjQgKHZhbC52YWxbMF0sIHZjcmVhdGVf dTY0IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFd ID0gdmNvbWJpbmVfdTY0ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3U2NCAoX19B QVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21i aW5lX3U2NCAodmFsLnZhbFsyXSwgdmNyZWF0ZV91NjQgKF9fQUFSQ0g2NF9V SU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0 X3FyZWdjaXYyZGkgKF9fbywgKGludDY0eDJfdCkgdGVtcC52YWxbMF0sIDAp OworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaSAo X19vLCAoaW50NjR4Ml90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9f YnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MmRpIChfX28sIChpbnQ2NHgy X3QpIHRlbXAudmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3Qx eDNkaSAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGkgKikgX19hLCBfX28p OworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitf X2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QxX2Y2NF94MyAoZmxvYXQ2NF90 ICogX19hLCBmbG9hdDY0eDF4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2Fh cmNoNjRfc2ltZF9jaSBfX287CisgIGZsb2F0NjR4MngzX3QgdGVtcDsKKyAg dGVtcC52YWxbMF0gPSB2Y29tYmluZV9mNjQgKHZhbC52YWxbMF0sIHZjcmVh dGVfZjY0IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFs WzFdID0gdmNvbWJpbmVfZjY0ICh2YWwudmFsWzFdLCB2Y3JlYXRlX2Y2NCAo X19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZj b21iaW5lX2Y2NCAodmFsLnZhbFsyXSwgdmNyZWF0ZV9mNjQgKF9fQUFSQ0g2 NF9VSU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRf c2V0X3FyZWdjaXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB0ZW1wLnZhbFsw XSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2 MmRmIChfX28sIChmbG9hdDY0eDJfdCkgdGVtcC52YWxbMV0sIDEpOworICBf X28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkZiAoX19vLCAo ZmxvYXQ2NHgyX3QpIHRlbXAudmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2Fh cmNoNjRfc3QxeDNkZiAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfZGYgKikg X19hLCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9f Z251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QxX3M4X3gzIChp bnQ4X3QgKiBfX2EsIGludDh4OHgzX3QgdmFsKQoreworICBfX2J1aWx0aW5f YWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgaW50OHgxNngzX3QgdGVtcDsKKyAg dGVtcC52YWxbMF0gPSB2Y29tYmluZV9zOCAodmFsLnZhbFswXSwgdmNyZWF0 ZV9zOCAoX19BQVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFd ID0gdmNvbWJpbmVfczggKHZhbC52YWxbMV0sIHZjcmVhdGVfczggKF9fQUFS Q0g2NF9JTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21iaW5l X3M4ICh2YWwudmFsWzJdLCB2Y3JlYXRlX3M4IChfX0FBUkNINjRfSU5UNjRf QyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdj aXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAg X19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYxNnFpIChfX28s IChpbnQ4eDE2X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWls dGluX2FhcmNoNjRfc2V0X3FyZWdjaXYxNnFpIChfX28sIChpbnQ4eDE2X3Qp IHRlbXAudmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDN2 OHFpICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EsIF9fbyk7 Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19f YXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDFfcDhfeDMgKHBvbHk4X3QgKiBf X2EsIHBvbHk4eDh4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRf c2ltZF9jaSBfX287CisgIHBvbHk4eDE2eDNfdCB0ZW1wOworICB0ZW1wLnZh bFswXSA9IHZjb21iaW5lX3A4ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3A4IChf X0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNv bWJpbmVfcDggKHZhbC52YWxbMV0sIHZjcmVhdGVfcDggKF9fQUFSQ0g2NF9V SU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9wOCAo dmFsLnZhbFsyXSwgdmNyZWF0ZV9wOCAoX19BQVJDSDY0X1VJTlQ2NF9DICgw KSkpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjE2 cWkgKF9fbywgKGludDh4MTZfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28g PSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjE2cWkgKF9fbywgKGlu dDh4MTZfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5f YWFyY2g2NF9zZXRfcXJlZ2NpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdGVt cC52YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3Y4cWkg KChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30K KworX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRy aWJ1dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQordnN0MV9zMTZfeDMgKGludDE2X3QgKiBfX2Es IGludDE2eDR4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2lt ZF9jaSBfX287CisgIGludDE2eDh4M190IHRlbXA7CisgIHRlbXAudmFsWzBd ID0gdmNvbWJpbmVfczE2ICh2YWwudmFsWzBdLCB2Y3JlYXRlX3MxNiAoX19B QVJDSDY0X0lOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJp bmVfczE2ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X0lO VDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzJdID0gdmNvbWJpbmVfczE2ICh2 YWwudmFsWzJdLCB2Y3JlYXRlX3MxNiAoX19BQVJDSDY0X0lOVDY0X0MgKDAp KSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGhp IChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzBdLCAwKTsKKyAgX19vID0g X19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9fbywgKGludDE2 eDhfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFy Y2g2NF9zZXRfcXJlZ2NpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB0ZW1wLnZh bFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgzdjRoaSAoKF9f YnVpbHRpbl9hYXJjaDY0X3NpbWRfaGkgKikgX19hLCBfX28pOworfQorCitf X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0 ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCit2c3QxX3AxNl94MyAocG9seTE2X3QgKiBfX2EsIHBv bHkxNng0eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRf Y2kgX19vOworICBwb2x5MTZ4OHgzX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0g PSB2Y29tYmluZV9wMTYgKHZhbC52YWxbMF0sIHZjcmVhdGVfcDE2IChfX0FB UkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJp bmVfcDE2ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3AxNiAoX19BQVJDSDY0X1VJ TlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21iaW5lX3AxNiAo dmFsLnZhbFsyXSwgdmNyZWF0ZV9wMTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAo MCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4 aGkgKF9fbywgKGludDE2eDhfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28g PSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhoaSAoX19vLCAoaW50 MTZ4OF90KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9h YXJjaDY0X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAu dmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDN2NGhpICgo X19idWlsdGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EsIF9fbyk7Cit9CisK K19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmli dXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkKK3ZzdDFfczMyX3gzIChpbnQzMl90ICogX19hLCBp bnQzMngyeDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRf Y2kgX19vOworICBpbnQzMng0eDNfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9 IHZjb21iaW5lX3MzMiAodmFsLnZhbFswXSwgdmNyZWF0ZV9zMzIgKF9fQUFS Q0g2NF9JTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21iaW5l X3MzMiAodmFsLnZhbFsxXSwgdmNyZWF0ZV9zMzIgKF9fQUFSQ0g2NF9JTlQ2 NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21iaW5lX3MzMiAodmFs LnZhbFsyXSwgdmNyZWF0ZV9zMzIgKF9fQUFSQ0g2NF9JTlQ2NF9DICgwKSkp OworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzaSAo X19vLCAoaW50MzJ4NF90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9f YnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2NHNpIChfX28sIChpbnQzMng0 X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNo NjRfc2V0X3FyZWdjaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdGVtcC52YWxb Ml0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3Yyc2kgKChfX2J1 aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSwgX19vKTsKK30KKworX19l eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVf XyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQordnN0MV91OF94MyAodWludDhfdCAqIF9fYSwgdWludDh4 OHgzX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9f bzsKKyAgdWludDh4MTZ4M190IHRlbXA7CisgIHRlbXAudmFsWzBdID0gdmNv bWJpbmVfdTggKHZhbC52YWxbMF0sIHZjcmVhdGVfdTggKF9fQUFSQ0g2NF9V SU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91OCAo dmFsLnZhbFsxXSwgdmNyZWF0ZV91OCAoX19BQVJDSDY0X1VJTlQ2NF9DICgw KSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21iaW5lX3U4ICh2YWwudmFsWzJd LCB2Y3JlYXRlX3U4IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIF9f byA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAo aW50OHgxNl90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRp bl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0 ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3Nl dF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB0ZW1wLnZhbFsyXSwg Mik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgzdjhxaSAoKF9fYnVpbHRp bl9hYXJjaDY0X3NpbWRfcWkgKikgX19hLCBfX28pOworfQorCitfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJpYnV0ZV9fICgo X19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCit2c3QxX3UxNl94MyAodWludDE2X3QgKiBfX2EsIHVpbnQxNng0 eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19v OworICB1aW50MTZ4OHgzX3QgdGVtcDsKKyAgdGVtcC52YWxbMF0gPSB2Y29t YmluZV91MTYgKHZhbC52YWxbMF0sIHZjcmVhdGVfdTE2IChfX0FBUkNINjRf VUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFsWzFdID0gdmNvbWJpbmVfdTE2 ICh2YWwudmFsWzFdLCB2Y3JlYXRlX3UxNiAoX19BQVJDSDY0X1VJTlQ2NF9D ICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZjb21iaW5lX3UxNiAodmFsLnZh bFsyXSwgdmNyZWF0ZV91MTYgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsK KyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9f bywgKGludDE2eDhfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1 aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhoaSAoX19vLCAoaW50MTZ4OF90 KSB0ZW1wLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0 X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3QpIHRlbXAudmFsWzJd LCAyKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDN2NGhpICgoX19idWls dGluX2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0 ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18g KChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKK3ZzdDFfdTMyX3gzICh1aW50MzJfdCAqIF9fYSwgdWludDMy eDJ4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBf X287CisgIHVpbnQzMng0eDNfdCB0ZW1wOworICB0ZW1wLnZhbFswXSA9IHZj b21iaW5lX3UzMiAodmFsLnZhbFswXSwgdmNyZWF0ZV91MzIgKF9fQUFSQ0g2 NF9VSU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMV0gPSB2Y29tYmluZV91 MzIgKHZhbC52YWxbMV0sIHZjcmVhdGVfdTMyIChfX0FBUkNINjRfVUlOVDY0 X0MgKDApKSk7CisgIHRlbXAudmFsWzJdID0gdmNvbWJpbmVfdTMyICh2YWwu dmFsWzJdLCB2Y3JlYXRlX3UzMiAoX19BQVJDSDY0X1VJTlQ2NF9DICgwKSkp OworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzaSAo X19vLCAoaW50MzJ4NF90KSB0ZW1wLnZhbFswXSwgMCk7CisgIF9fbyA9IF9f YnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2NHNpIChfX28sIChpbnQzMng0 X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNo NjRfc2V0X3FyZWdjaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdGVtcC52YWxb Ml0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3Yyc2kgKChfX2J1 aWx0aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSwgX19vKTsKK30KKworX19l eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVf XyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQordnN0MV9mMTZfeDMgKGZsb2F0MTZfdCAqIF9fYSwgZmxv YXQxNng0eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRf Y2kgX19vOworICBmbG9hdDE2eDh4M190IHRlbXA7CisgIHRlbXAudmFsWzBd ID0gdmNvbWJpbmVfZjE2ICh2YWwudmFsWzBdLCB2Y3JlYXRlX2YxNiAoX19B QVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsxXSA9IHZjb21i aW5lX2YxNiAodmFsLnZhbFsxXSwgdmNyZWF0ZV9mMTYgKF9fQUFSQ0g2NF9V SU5UNjRfQyAoMCkpKTsKKyAgdGVtcC52YWxbMl0gPSB2Y29tYmluZV9mMTYg KHZhbC52YWxbMl0sIHZjcmVhdGVfZjE2IChfX0FBUkNINjRfVUlOVDY0X0Mg KDApKSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2 OGhmIChfX28sIChmbG9hdDE2eDhfdCkgdGVtcC52YWxbMF0sIDApOworICBf X28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhoZiAoX19vLCAo ZmxvYXQxNng4X3QpIHRlbXAudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWls dGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGYgKF9fbywgKGZsb2F0MTZ4OF90 KSB0ZW1wLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgz djRoZiAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGYgKikgX19hLCBfX28p OworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitf X2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QxX2YzMl94MyAoZmxvYXQzMl90 ICogX19hLCBmbG9hdDMyeDJ4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2Fh cmNoNjRfc2ltZF9jaSBfX287CisgIGZsb2F0MzJ4NHgzX3QgdGVtcDsKKyAg dGVtcC52YWxbMF0gPSB2Y29tYmluZV9mMzIgKHZhbC52YWxbMF0sIHZjcmVh dGVfZjMyIChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFs WzFdID0gdmNvbWJpbmVfZjMyICh2YWwudmFsWzFdLCB2Y3JlYXRlX2YzMiAo X19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICB0ZW1wLnZhbFsyXSA9IHZj b21iaW5lX2YzMiAodmFsLnZhbFsyXSwgdmNyZWF0ZV9mMzIgKF9fQUFSQ0g2 NF9VSU5UNjRfQyAoMCkpKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRf c2V0X3FyZWdjaXY0c2YgKF9fbywgKGZsb2F0MzJ4NF90KSB0ZW1wLnZhbFsw XSwgMCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2 NHNmIChfX28sIChmbG9hdDMyeDRfdCkgdGVtcC52YWxbMV0sIDEpOworICBf X28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzZiAoX19vLCAo ZmxvYXQzMng0X3QpIHRlbXAudmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2Fh cmNoNjRfc3QxeDN2MnNmICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9zZiAq KSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s aW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywg X19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDFfcDY0X3gz IChwb2x5NjRfdCAqIF9fYSwgcG9seTY0eDF4M190IHZhbCkKK3sKKyAgX19i dWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIHBvbHk2NHgyeDNfdCB0 ZW1wOworICB0ZW1wLnZhbFswXSA9IHZjb21iaW5lX3A2NCAodmFsLnZhbFsw XSwgdmNyZWF0ZV9wNjQgKF9fQUFSQ0g2NF9VSU5UNjRfQyAoMCkpKTsKKyAg dGVtcC52YWxbMV0gPSB2Y29tYmluZV9wNjQgKHZhbC52YWxbMV0sIHZjcmVh dGVfcDY0IChfX0FBUkNINjRfVUlOVDY0X0MgKDApKSk7CisgIHRlbXAudmFs WzJdID0gdmNvbWJpbmVfcDY0ICh2YWwudmFsWzJdLCB2Y3JlYXRlX3A2NCAo X19BQVJDSDY0X1VJTlQ2NF9DICgwKSkpOworICBfX28gPSBfX2J1aWx0aW5f YWFyY2g2NF9zZXRfcXJlZ2NpdjJkaV9zc3BzIChfX28sCisJCQkJCSAgICAg ICAocG9seTY0eDJfdCkgdGVtcC52YWxbMF0sIDApOworICBfX28gPSBfX2J1 aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaV9zc3BzIChfX28sCisJCQkJ CSAgICAgICAocG9seTY0eDJfdCkgdGVtcC52YWxbMV0sIDEpOworICBfX28g PSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaV9zc3BzIChfX28s CisJCQkJCSAgICAgICAocG9seTY0eDJfdCkgdGVtcC52YWxbMl0sIDIpOwor ICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M2RpICgoX19idWlsdGluX2FhcmNo NjRfc2ltZF9kaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2Fsd2F5 c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK K3ZzdDFxX3M4X3gzIChpbnQ4X3QgKiBfX2EsIGludDh4MTZ4M190IHZhbCkK K3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2ltZF9jaSBfX287CisgIF9fbyA9 IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50 OHgxNl90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2Fh cmNoNjRfc2V0X3FyZWdjaXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52 YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJl Z2NpdjE2cWkgKF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFsyXSwgMik7Cisg IF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgzdjE2cWkgKChfX2J1aWx0aW5fYWFy Y2g2NF9zaW1kX3FpICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25f XyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3 YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQordnN0MXFfcDhfeDMgKHBvbHk4X3QgKiBfX2EsIHBvbHk4eDE2eDNfdCB2 YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBf X28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjE2cWkgKF9fbywg KGludDh4MTZfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVpbHRp bl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgxNl90KSB2 YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0 X3FyZWdjaXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxbMl0sIDIp OworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3YxNnFpICgoX19idWlsdGlu X2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChf X2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKK3ZzdDFxX3MxNl94MyAoaW50MTZfdCAqIF9fYSwgaW50MTZ4OHgz X3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsK KyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9f bywgKGludDE2eDhfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9fYnVp bHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3Qp IHZhbC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9z ZXRfcXJlZ2NpdjhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzJdLCAy KTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDN2OGhpICgoX19idWlsdGlu X2FhcmNoNjRfc2ltZF9oaSAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChf X2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKK3ZzdDFxX3AxNl94MyAocG9seTE2X3QgKiBfX2EsIHBvbHkxNng4 eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19v OworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjhoaSAo X19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19i dWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9fbywgKGludDE2eDhf dCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0 X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52YWxbMl0s IDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3Y4aGkgKChfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwgX19vKTsKK30KKworX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAo KF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQordnN0MXFfczMyX3gzIChpbnQzMl90ICogX19hLCBpbnQzMng0 eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19v OworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzaSAo X19vLCAoaW50MzJ4NF90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19i dWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY0c2kgKF9fbywgKGludDMyeDRf dCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0 X3NldF9xcmVnY2l2NHNpIChfX28sIChpbnQzMng0X3QpIHZhbC52YWxbMl0s IDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3Y0c2kgKChfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX3NpICopIF9fYSwgX19vKTsKK30KKworX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAo KF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQordnN0MXFfczY0X3gzIChpbnQ2NF90ICogX19hLCBpbnQ2NHgy eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19v OworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaSAo X19vLCAoaW50NjR4Ml90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19i dWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGkgKF9fbywgKGludDY0eDJf dCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0 X3NldF9xcmVnY2l2MmRpIChfX28sIChpbnQ2NHgyX3QpIHZhbC52YWxbMl0s IDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3YyZGkgKChfX2J1aWx0 aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSwgX19vKTsKK30KKworX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAo KF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQordnN0MXFfdThfeDMgKHVpbnQ4X3QgKiBfX2EsIHVpbnQ4eDE2 eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19v OworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjE2cWkg KF9fbywgKGludDh4MTZfdCkgdmFsLnZhbFswXSwgMCk7CisgIF9fbyA9IF9f YnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MTZxaSAoX19vLCAoaW50OHgx Nl90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNo NjRfc2V0X3FyZWdjaXYxNnFpIChfX28sIChpbnQ4eDE2X3QpIHZhbC52YWxb Ml0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3YxNnFpICgoX19i dWlsdGluX2FhcmNoNjRfc2ltZF9xaSAqKSBfX2EsIF9fbyk7Cit9CisKK19f ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRl X18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKK3ZzdDFxX3UxNl94MyAodWludDE2X3QgKiBfX2EsIHVp bnQxNng4eDNfdCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRf Y2kgX19vOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2Np djhoaSAoX19vLCAoaW50MTZ4OF90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19v ID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXY4aGkgKF9fbywgKGlu dDE2eDhfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9IF9fYnVpbHRpbl9h YXJjaDY0X3NldF9xcmVnY2l2OGhpIChfX28sIChpbnQxNng4X3QpIHZhbC52 YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3Y4aGkgKChf X2J1aWx0aW5fYWFyY2g2NF9zaW1kX2hpICopIF9fYSwgX19vKTsKK30KKwor X19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdm9pZAorX19hdHRyaWJ1 dGVfXyAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQordnN0MXFfdTMyX3gzICh1aW50MzJfdCAqIF9fYSwg dWludDMyeDR4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNoNjRfc2lt ZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVn Y2l2NHNpIChfX28sIChpbnQzMng0X3QpIHZhbC52YWxbMF0sIDApOworICBf X28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzaSAoX19vLCAo aW50MzJ4NF90KSB2YWwudmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGlu X2FhcmNoNjRfc2V0X3FyZWdjaXY0c2kgKF9fbywgKGludDMyeDRfdCkgdmFs LnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3N0MXgzdjRzaSAo KF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfc2kgKikgX19hLCBfX28pOworfQor CitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2b2lkCitfX2F0dHJp YnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCit2c3QxcV91NjRfeDMgKHVpbnQ2NF90ICogX19h LCB1aW50NjR4MngzX3QgdmFsKQoreworICBfX2J1aWx0aW5fYWFyY2g2NF9z aW1kX2NpIF9fbzsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3Fy ZWdjaXYyZGkgKF9fbywgKGludDY0eDJfdCkgdmFsLnZhbFswXSwgMCk7Cisg IF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MmRpIChfX28s IChpbnQ2NHgyX3QpIHZhbC52YWxbMV0sIDEpOworICBfX28gPSBfX2J1aWx0 aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaSAoX19vLCAoaW50NjR4Ml90KSB2 YWwudmFsWzJdLCAyKTsKKyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDN2MmRp ICgoX19idWlsdGluX2FhcmNoNjRfc2ltZF9kaSAqKSBfX2EsIF9fbyk7Cit9 CisKK19fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0 cmlidXRlX18gKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKK3ZzdDFxX2YxNl94MyAoZmxvYXQxNl90ICog X19hLCBmbG9hdDE2eDh4M190IHZhbCkKK3sKKyAgX19idWlsdGluX2FhcmNo NjRfc2ltZF9jaSBfX287CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3Nl dF9xcmVnY2l2OGhmIChfX28sIChmbG9hdDE2eDhfdCkgdmFsLnZhbFswXSwg MCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGhm IChfX28sIChmbG9hdDE2eDhfdCkgdmFsLnZhbFsxXSwgMSk7CisgIF9fbyA9 IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2OGhmIChfX28sIChmbG9h dDE2eDhfdCkgdmFsLnZhbFsyXSwgMik7CisgIF9fYnVpbHRpbl9hYXJjaDY0 X3N0MXgzdjhoZiAoKF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfaGYgKikgX19h LCBfX28pOworfQorCitfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB2 b2lkCitfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251 X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCit2c3QxcV9mMzJfeDMgKGZs b2F0MzJfdCAqIF9fYSwgZmxvYXQzMng0eDNfdCB2YWwpCit7CisgIF9fYnVp bHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOworICBfX28gPSBfX2J1aWx0aW5f YWFyY2g2NF9zZXRfcXJlZ2NpdjRzZiAoX19vLCAoZmxvYXQzMng0X3QpIHZh bC52YWxbMF0sIDApOworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRf cXJlZ2NpdjRzZiAoX19vLCAoZmxvYXQzMng0X3QpIHZhbC52YWxbMV0sIDEp OworICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjRzZiAo X19vLCAoZmxvYXQzMng0X3QpIHZhbC52YWxbMl0sIDIpOworICBfX2J1aWx0 aW5fYWFyY2g2NF9zdDF4M3Y0c2YgKChfX2J1aWx0aW5fYWFyY2g2NF9zaW1k X3NmICopIF9fYSwgX19vKTsKK30KKworX19leHRlbnNpb25fXyBleHRlcm4g X19pbmxpbmUgdm9pZAorX19hdHRyaWJ1dGVfXyAoKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQordnN0MXFf ZjY0X3gzIChmbG9hdDY0X3QgKiBfX2EsIGZsb2F0NjR4MngzX3QgdmFsKQor eworICBfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2NpIF9fbzsKKyAgX19vID0g X19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdjaXYyZGYgKF9fbywgKGZsb2F0 NjR4Ml90KSB2YWwudmFsWzBdLCAwKTsKKyAgX19vID0gX19idWlsdGluX2Fh cmNoNjRfc2V0X3FyZWdjaXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwu dmFsWzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3Fy ZWdjaXYyZGYgKF9fbywgKGZsb2F0NjR4Ml90KSB2YWwudmFsWzJdLCAyKTsK KyAgX19idWlsdGluX2FhcmNoNjRfc3QxeDN2MmRmICgoX19idWlsdGluX2Fh cmNoNjRfc2ltZF9kZiAqKSBfX2EsIF9fbyk7Cit9CisKK19fZXh0ZW5zaW9u X18gZXh0ZXJuIF9faW5saW5lIHZvaWQKK19fYXR0cmlidXRlX18gKChfX2Fs d2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKK3ZzdDFxX3A2NF94MyAocG9seTY0X3QgKiBfX2EsIHBvbHk2NHgyeDNf dCB2YWwpCit7CisgIF9fYnVpbHRpbl9hYXJjaDY0X3NpbWRfY2kgX19vOwor ICBfX28gPSBfX2J1aWx0aW5fYWFyY2g2NF9zZXRfcXJlZ2NpdjJkaV9zc3Bz IChfX28sCisJCQkJCSAgICAgICAocG9seTY0eDJfdCkgdmFsLnZhbFswXSwg MCk7CisgIF9fbyA9IF9fYnVpbHRpbl9hYXJjaDY0X3NldF9xcmVnY2l2MmRp X3NzcHMgKF9fbywKKwkJCQkJICAgICAgIChwb2x5NjR4Ml90KSB2YWwudmFs WzFdLCAxKTsKKyAgX19vID0gX19idWlsdGluX2FhcmNoNjRfc2V0X3FyZWdj aXYyZGlfc3NwcyAoX19vLAorCQkJCQkgICAgICAgKHBvbHk2NHgyX3QpIHZh bC52YWxbMl0sIDIpOworICBfX2J1aWx0aW5fYWFyY2g2NF9zdDF4M3YyZGkg KChfX2J1aWx0aW5fYWFyY2g2NF9zaW1kX2RpICopIF9fYSwgX19vKTsKK30K KwogLyogdnN0biAqLwogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu ZSB2b2lkCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv YWFyY2g2NC9hZHZzaW1kLWludHJpbnNpY3MvdmxkMXgzLmMgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hZHZzaW1kLWludHJpbnNpY3Mv dmxkMXgzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u YzM3YzcyYwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hYXJjaDY0L2FkdnNpbWQtaW50cmluc2ljcy92bGQxeDMuYwpA QCAtMCwwICsxLDgyIEBACisvKiBXZSBoYXZlbid0IGltcGxlbWVudGVkIHRo ZXNlIGludHJpbnNpY3MgZm9yIGFybSB5ZXQuICAqLworLyogeyBkZy1yZXF1 aXJlLWVmZmVjdGl2ZS10YXJnZXQgYWFyY2g2NF9saXR0bGVfZW5kaWFuIH0g Ki8KKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8z IiB9ICovCisKKyNpbmNsdWRlIDxhcm1fbmVvbi5oPgorCitleHRlcm4gdm9p ZCBhYm9ydCAodm9pZCk7CisKKyNkZWZpbmUgVEVTVE1FVEgoQkFTRSwgRUxU UywgU1VGRklYKQlcCitpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkJ CQlcCit0ZXN0X3ZsZCMjU1VGRklYIyNfeDMgKCkJCQlcCit7CQkJCQkJXAor ICBCQVNFIyNfdCBkYXRhW0VMVFMgKiAzXTsJCQlcCisgIEJBU0UjI190IHRl bXBbRUxUUyAqIDNdOwkJCVwKKyAgQkFTRSMjeCMjRUxUUyMjeCMjMyMjX3Qg dmVjdG9yczsJCVwKKyAgaW50IGksajsJCQkJCVwKKyAgZm9yIChpID0gMDsg aSA8IEVMVFMgKiAzOyBpKyspCQlcCisgICAgZGF0YSBbaV0gPSAoQkFTRSMj X3QpIDMqaTsJCVwKKyAgYXNtIHZvbGF0aWxlICgiIiA6IDogOiAibWVtb3J5 Iik7CQlcCisgIHZlY3RvcnMgPSB2bGQxIyNTVUZGSVgjI194MyAoZGF0YSk7 CQlcCisgIHZzdDEjI1NVRkZJWCAodGVtcCwgdmVjdG9ycy52YWxbMF0pOwkJ XAorICB2c3QxIyNTVUZGSVggKCZ0ZW1wW0VMVFNdLCB2ZWN0b3JzLnZhbFsx XSk7CVwKKyAgdnN0MSMjU1VGRklYICgmdGVtcFtFTFRTICogMl0sIHZlY3Rv cnMudmFsWzJdKTsJXAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1v cnkiKTsJCVwKKyAgZm9yIChqID0gMDsgaiA8IEVMVFMgKiAzOyBqKyspCQlc CisgICAgaWYgKHRlbXBbal0gIT0gZGF0YVtqXSkgCQkJXAorICAgICAgcmV0 dXJuIDE7CQkJCQlcCisgIHJldHVybiAwOwkJCQkJXAorfQorCisjZGVmaW5l IFZBUklBTlRTXzEoVkFSSUFOVCkJXAorVkFSSUFOVCAodWludDgsIDgsIF91 OCkJCVwKK1ZBUklBTlQgKHVpbnQxNiwgNCwgX3UxNikJXAorVkFSSUFOVCAo dWludDMyLCAyLCBfdTMyKQlcCitWQVJJQU5UICh1aW50NjQsIDEsIF91NjQp CVwKK1ZBUklBTlQgKGludDgsIDgsIF9zOCkJCVwKK1ZBUklBTlQgKGludDE2 LCA0LCBfczE2KQlcCitWQVJJQU5UIChpbnQzMiwgMiwgX3MzMikJXAorVkFS SUFOVCAoaW50NjQsIDEsIF9zNjQpCVwKK1ZBUklBTlQgKHBvbHk4LCA4LCBf cDgpCQlcCitWQVJJQU5UIChwb2x5MTYsIDQsIF9wMTYpCVwKK1ZBUklBTlQg KGZsb2F0MTYsIDQsIF9mMTYpCVwKK1ZBUklBTlQgKGZsb2F0MzIsIDIsIF9m MzIpCVwKK1ZBUklBTlQgKHVpbnQ4LCAxNiwgcV91OCkJXAorVkFSSUFOVCAo dWludDE2LCA4LCBxX3UxNikJXAorVkFSSUFOVCAodWludDMyLCA0LCBxX3Uz MikJXAorVkFSSUFOVCAodWludDY0LCAyLCBxX3U2NCkJXAorVkFSSUFOVCAo aW50OCwgMTYsIHFfczgpCVwKK1ZBUklBTlQgKGludDE2LCA4LCBxX3MxNikJ XAorVkFSSUFOVCAoaW50MzIsIDQsIHFfczMyKQlcCitWQVJJQU5UIChpbnQ2 NCwgMiwgcV9zNjQpCVwKK1ZBUklBTlQgKHBvbHk4LCAxNiwgcV9wOCkJXAor VkFSSUFOVCAocG9seTE2LCA4LCBxX3AxNikJXAorVkFSSUFOVCAoZmxvYXQx NiwgOCwgcV9mMTYpCVwKK1ZBUklBTlQgKGZsb2F0MzIsIDQsIHFfZjMyKQor CisjaWZkZWYgX19hYXJjaDY0X18KKyNkZWZpbmUgVkFSSUFOVFMoVkFSSUFO VCkgVkFSSUFOVFNfMShWQVJJQU5UKQlcCitWQVJJQU5UIChmbG9hdDY0LCAx LCBfZjY0KQkJCVwKK1ZBUklBTlQgKGZsb2F0NjQsIDIsIHFfZjY0KQorI2Vs c2UKKyNkZWZpbmUgVkFSSUFOVFMoVkFSSUFOVCkgVkFSSUFOVFNfMShWQVJJ QU5UKQorI2VuZGlmCisKKworLyogVGVzdHMgb2YgdmxkMV94MyBhbmQgdmxk MXFfeDMuICAqLworVkFSSUFOVFMgKFRFU1RNRVRIKQorCisjZGVmaW5lIENI RUNLKEJBU0UsIEVMVFMsIFNVRkZJWCkJXAorICBpZiAodGVzdF92bGQjI1NV RkZJWCMjX3gzICgpICE9IDApCVwKKyAgICBhYm9ydCAoKTsKKworaW50Citt YWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIFZBUklBTlRTIChD SEVDSykKKworICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvYWR2c2ltZC1pbnRyaW5zaWNz L3ZzdDF4Mi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQv YWR2c2ltZC1pbnRyaW5zaWNzL3ZzdDF4Mi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjNiNjc5N2MKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hZHZzaW1kLWlu dHJpbnNpY3MvdnN0MXgyLmMKQEAgLTAsMCArMSw4MCBAQAorLyogV2UgaGF2 ZW4ndCBpbXBsZW1lbnRlZCB0aGVzZSBpbnRyaW5zaWNzIGZvciBhcm0geWV0 LiAgKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGFhcmNo NjRfbGl0dGxlX2VuZGlhbiB9ICovCisvKiB7IGRnLWRvIHJ1biB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1PMyIgfSAqLworCisjaW5jbHVkZSA8YXJtX25l b24uaD4KKworZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpOworCisjZGVmaW5l IFRFU1RNRVRIKEJBU0UsIEVMVFMsIFNVRkZJWCkJXAoraW50IF9fYXR0cmli dXRlX18gKChub2lubGluZSkpCQkJXAordGVzdF92c3QxIyNTVUZGSVgjI194 MiAoKQkJCVwKK3sJCQkJCQlcCisgIEJBU0UjI190IGRhdGFbRUxUUyAqIDJd OwkJCVwKKyAgQkFTRSMjX3QgdGVtcFtFTFRTICogMl07CQkJXAorICBCQVNF IyN4IyNFTFRTIyN4IyMyIyNfdCB2ZWN0b3JzOwkJXAorICBpbnQgaSxqOwkJ CQkJXAorICBmb3IgKGkgPSAwOyBpIDwgRUxUUyAqIDI7IGkrKykJCVwKKyAg ICBkYXRhIFtpXSA9IChCQVNFIyNfdCkgMippOwkJXAorICBhc20gdm9sYXRp bGUgKCIiIDogOiA6ICJtZW1vcnkiKTsJCVwKKyAgdmVjdG9ycy52YWxbMF0g PSB2bGQxIyNTVUZGSVggKGRhdGEpOwkJXAorICB2ZWN0b3JzLnZhbFsxXSA9 IHZsZDEjI1NVRkZJWCAoJmRhdGFbRUxUU10pOwlcCisgIHZzdDEjI1NVRkZJ WCMjX3gyICh0ZW1wLCB2ZWN0b3JzKTsJCVwKKyAgYXNtIHZvbGF0aWxlICgi IiA6IDogOiAibWVtb3J5Iik7CQlcCisgIGZvciAoaiA9IDA7IGogPCBFTFRT ICogMjsgaisrKQkJXAorICAgIGlmICh0ZW1wW2pdICE9IGRhdGFbal0pCQkJ XAorICAgICAgcmV0dXJuIDE7CQkJCQlcCisgIHJldHVybiAwOwkJCQkJXAor fQorCisjZGVmaW5lIFZBUklBTlRTXzEoVkFSSUFOVCkJXAorVkFSSUFOVCAo dWludDgsIDgsIF91OCkJCVwKK1ZBUklBTlQgKHVpbnQxNiwgNCwgX3UxNikJ XAorVkFSSUFOVCAodWludDMyLCAyLCBfdTMyKQlcCitWQVJJQU5UICh1aW50 NjQsIDEsIF91NjQpCVwKK1ZBUklBTlQgKGludDgsIDgsIF9zOCkJCVwKK1ZB UklBTlQgKGludDE2LCA0LCBfczE2KQlcCitWQVJJQU5UIChpbnQzMiwgMiwg X3MzMikJXAorVkFSSUFOVCAoaW50NjQsIDEsIF9zNjQpCVwKK1ZBUklBTlQg KHBvbHk4LCA4LCBfcDgpCQlcCitWQVJJQU5UIChwb2x5MTYsIDQsIF9wMTYp CVwKK1ZBUklBTlQgKGZsb2F0MTYsIDQsIF9mMTYpCVwKK1ZBUklBTlQgKGZs b2F0MzIsIDIsIF9mMzIpCVwKK1ZBUklBTlQgKHVpbnQ4LCAxNiwgcV91OCkJ XAorVkFSSUFOVCAodWludDE2LCA4LCBxX3UxNikJXAorVkFSSUFOVCAodWlu dDMyLCA0LCBxX3UzMikJXAorVkFSSUFOVCAodWludDY0LCAyLCBxX3U2NCkJ XAorVkFSSUFOVCAoaW50OCwgMTYsIHFfczgpCVwKK1ZBUklBTlQgKGludDE2 LCA4LCBxX3MxNikJXAorVkFSSUFOVCAoaW50MzIsIDQsIHFfczMyKQlcCitW QVJJQU5UIChpbnQ2NCwgMiwgcV9zNjQpCVwKK1ZBUklBTlQgKHBvbHk4LCAx NiwgcV9wOCkJXAorVkFSSUFOVCAocG9seTE2LCA4LCBxX3AxNikJXAorVkFS SUFOVCAoZmxvYXQxNiwgOCwgcV9mMTYpCVwKK1ZBUklBTlQgKGZsb2F0MzIs IDQsIHFfZjMyKQorCisjaWZkZWYgX19hYXJjaDY0X18KKyNkZWZpbmUgVkFS SUFOVFMoVkFSSUFOVCkgVkFSSUFOVFNfMShWQVJJQU5UKQlcCitWQVJJQU5U IChmbG9hdDY0LCAxLCBfZjY0KQkJCVwKK1ZBUklBTlQgKGZsb2F0NjQsIDIs IHFfZjY0KQorI2Vsc2UKKyNkZWZpbmUgVkFSSUFOVFMoVkFSSUFOVCkgVkFS SUFOVFNfMShWQVJJQU5UKQorI2VuZGlmCisKKy8qIFRlc3RzIG9mIHZzdDFf eDIgYW5kIHZzdDFxX3gyLiAgKi8KK1ZBUklBTlRTIChURVNUTUVUSCkKKwor I2RlZmluZSBDSEVDSyhCQVNFLCBFTFRTLCBTVUZGSVgpCVwKKyAgaWYgKHRl c3RfdnN0MSMjU1VGRklYIyNfeDIgKCkgIT0gMCkJXAorICAgIGFib3J0ICgp OworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAg VkFSSUFOVFMgKENIRUNLKQorCisgIHJldHVybiAwOworfQorCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9hZHZzaW1k LWludHJpbnNpY3MvdnN0MXgzLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC9hZHZzaW1kLWludHJpbnNpY3MvdnN0MXgzLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwOTExNQotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L2FkdnNpbWQtaW50cmluc2ljcy92c3QxeDMuYwpAQCAtMCwwICsxLDgxIEBA CisvKiBXZSBoYXZlbid0IGltcGxlbWVudGVkIHRoZXNlIGludHJpbnNpY3Mg Zm9yIGFybSB5ZXQuICAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgYWFyY2g2NF9saXR0bGVfZW5kaWFuIH0gKi8KKy8qIHsgZGctZG8g cnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8zIiB9ICovCisKKyNpbmNs dWRlIDxhcm1fbmVvbi5oPgorCitleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7 CisKKyNkZWZpbmUgVEVTVE1FVEgoQkFTRSwgRUxUUywgU1VGRklYKQlcCitp bnQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkJCQlcCit0ZXN0X3ZzdDEj I1NVRkZJWCMjX3gzICgpCQkJXAorewkJCQkJCVwKKyAgQkFTRSMjX3QgZGF0 YVtFTFRTICogM107CQkJXAorICBCQVNFIyNfdCB0ZW1wW0VMVFMgKiAzXTsJ CQlcCisgIEJBU0UjI3gjI0VMVFMjI3gjIzMjI190IHZlY3RvcnM7CQlcCisg IGludCBpLGo7CQkJCQlcCisgIGZvciAoaSA9IDA7IGkgPCBFTFRTICogMzsg aSsrKQkJXAorICAgIGRhdGEgW2ldID0gKEJBU0UjI190KSAzKmk7CQlcCisg IGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9yeSIpOwkJXAorICB2ZWN0 b3JzLnZhbFswXSA9IHZsZDEjI1NVRkZJWCAoZGF0YSk7CQlcCisgIHZlY3Rv cnMudmFsWzFdID0gdmxkMSMjU1VGRklYICgmZGF0YVtFTFRTXSk7CVwKKyAg dmVjdG9ycy52YWxbMl0gPSB2bGQxIyNTVUZGSVggKCZkYXRhW0VMVFMgKiAy XSk7CVwKKyAgdnN0MSMjU1VGRklYIyNfeDMgKHRlbXAsIHZlY3RvcnMpOwkJ XAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsJCVwKKyAg Zm9yIChqID0gMDsgaiA8IEVMVFMgKiAzOyBqKyspCQlcCisgICAgaWYgKHRl bXBbal0gIT0gZGF0YVtqXSkJCQlcCisgICAgICByZXR1cm4gMTsJCQkJCVwK KyAgcmV0dXJuIDA7CQkJCQlcCit9CisKKyNkZWZpbmUgVkFSSUFOVFNfMShW QVJJQU5UKQlcCitWQVJJQU5UICh1aW50OCwgOCwgX3U4KQkJXAorVkFSSUFO VCAodWludDE2LCA0LCBfdTE2KQlcCitWQVJJQU5UICh1aW50MzIsIDIsIF91 MzIpCVwKK1ZBUklBTlQgKHVpbnQ2NCwgMSwgX3U2NCkJXAorVkFSSUFOVCAo aW50OCwgOCwgX3M4KQkJXAorVkFSSUFOVCAoaW50MTYsIDQsIF9zMTYpCVwK K1ZBUklBTlQgKGludDMyLCAyLCBfczMyKQlcCitWQVJJQU5UIChpbnQ2NCwg MSwgX3M2NCkJXAorVkFSSUFOVCAocG9seTgsIDgsIF9wOCkJCVwKK1ZBUklB TlQgKHBvbHkxNiwgNCwgX3AxNikJXAorVkFSSUFOVCAoZmxvYXQxNiwgNCwg X2YxNikJXAorVkFSSUFOVCAoZmxvYXQzMiwgMiwgX2YzMikJXAorVkFSSUFO VCAodWludDgsIDE2LCBxX3U4KQlcCitWQVJJQU5UICh1aW50MTYsIDgsIHFf dTE2KQlcCitWQVJJQU5UICh1aW50MzIsIDQsIHFfdTMyKQlcCitWQVJJQU5U ICh1aW50NjQsIDIsIHFfdTY0KQlcCitWQVJJQU5UIChpbnQ4LCAxNiwgcV9z OCkJXAorVkFSSUFOVCAoaW50MTYsIDgsIHFfczE2KQlcCitWQVJJQU5UIChp bnQzMiwgNCwgcV9zMzIpCVwKK1ZBUklBTlQgKGludDY0LCAyLCBxX3M2NCkJ XAorVkFSSUFOVCAocG9seTgsIDE2LCBxX3A4KQlcCitWQVJJQU5UIChwb2x5 MTYsIDgsIHFfcDE2KQlcCitWQVJJQU5UIChmbG9hdDE2LCA4LCBxX2YxNikJ XAorVkFSSUFOVCAoZmxvYXQzMiwgNCwgcV9mMzIpCisKKyNpZmRlZiBfX2Fh cmNoNjRfXworI2RlZmluZSBWQVJJQU5UUyhWQVJJQU5UKSBWQVJJQU5UU18x KFZBUklBTlQpCVwKK1ZBUklBTlQgKGZsb2F0NjQsIDEsIF9mNjQpCQkJXAor VkFSSUFOVCAoZmxvYXQ2NCwgMiwgcV9mNjQpCisjZWxzZQorI2RlZmluZSBW QVJJQU5UUyhWQVJJQU5UKSBWQVJJQU5UU18xKFZBUklBTlQpCisjZW5kaWYK KworLyogVGVzdHMgb2YgdnN0MV94MyBhbmQgdnN0MXFfeDMuICAqLworVkFS SUFOVFMgKFRFU1RNRVRIKQorCisjZGVmaW5lIENIRUNLKEJBU0UsIEVMVFMs IFNVRkZJWCkJXAorICBpZiAodGVzdF92c3QxIyNTVUZGSVgjI194MyAoKSAh PSAwKQlcCisgICAgYWJvcnQgKCk7CisKK2ludAorbWFpbiAoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQoreworICBWQVJJQU5UUyAoQ0hFQ0spCisKKyAgcmV0 dXJuIDA7Cit9CisK --0000000000009f985405698e1756--