From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by sourceware.org (Postfix) with ESMTPS id 798453834683 for ; Mon, 14 Nov 2022 05:38:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 798453834683 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-x62f.google.com with SMTP id 13so25799331ejn.3 for ; Sun, 13 Nov 2022 21:38:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=RE3ew8JBOWdln9x/4dm4UyN+tR7c9ga8lkZuYtndEQo=; b=NMNN8je+B59N6wdPllba9y6nGSgDxznFGAIeuE4rm+gob1SeBFy6hpN02Zs48UDmME 5pge2W7lXJwt21U3FeM0P78+NHEf9tpOsyDENAsTuIUmZ6URxf6invmFT9QD5GwP7RmW d9qAyTaZB7ktK8O4lAcyPn0UEC1+snAlbunCRqGqcXrpuOF4GIF8bYB7vzoH6fGPoOF1 lo57bEqegp84XFVAI29A1NzVYIEv/fSSfhLWjfm6/npmum0bbKjDajDCb5lFdiiFSoM/ +Vm3jgwPUJQ54UaP9emjZDDW6y0RniM57FiNoBI/ilodEcxCr5W15CZYofzckBlo1nZs PM9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RE3ew8JBOWdln9x/4dm4UyN+tR7c9ga8lkZuYtndEQo=; b=mCfbEYQ67TgJ52c32+hV/sK39oZFCbMtBIYHKRoRyFFysiChnNYS2C3XR7oobZX1nk J92KIHZq9EWCwQkaWxcJJnCn2e8yGRtrMZ+HF82cz9sysbQjZZ54Rs/CmzKmnL6dMawt ClTyWpJFPWb+gUDcL1kNnufifVWMSb1xTXXbrupqAMD8MiBJ6fCJU3YyE+6v9OC2mcfM lA/jCvKZJBUnk1IRpZgxCeSu+VxTX5UbixdnZNtoR0GHVWzwVYJEk5djqlVfcAztpYz/ NAKBy79utIutMft4CHnlN8T5lRINnqzZkStE2fE3VnW+AJQHQstGay+MnxePNtTXI566 UIPQ== X-Gm-Message-State: ANoB5pmzFkmj3Kf6lVeBVxO39XmmyDv3U7bRmGKhPv7lOVMCIp9dFlb6 hp6WLCd6Gt5vC89D+f350wYx30wd9EWdu10lbh0= X-Google-Smtp-Source: AA0mqf6p/aN3DlPnrgq29piXVytZrxHaRx7V+FraPIMF+Yz5cNGMoUHKabiqsny2euy1eR8402WWa3H9vQB5n8OBTsI= X-Received: by 2002:a17:906:1515:b0:78e:2ba7:70f6 with SMTP id b21-20020a170906151500b0078e2ba770f6mr9427794ejd.382.1668404284486; Sun, 13 Nov 2022 21:38:04 -0800 (PST) MIME-Version: 1.0 References: <20221102033728.99379-1-hongyu.wang@intel.com> In-Reply-To: From: Hongyu Wang Date: Mon, 14 Nov 2022 13:32:47 +0800 Message-ID: Subject: Re: [PATCH V2] Enable small loop unrolling for O2 To: Hongtao Liu Cc: Richard Biener , Hongyu Wang , gcc-patches@gcc.gnu.org, ubizjak@gmail.com, hongtao.liu@intel.com Content-Type: multipart/mixed; boundary="000000000000b83c0105ed67a411" X-Spam-Status: No, score=-7.3 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,GIT_PATCH_0,KAM_NUMSUBJECT,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000b83c0105ed67a411 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable > Ok, Note GCC documents have been ported to sphinx, so you need to > adjust changes in invoke.texi to new sphinx files. Yes, this is the patch I'm going to check-in. Thanks. Hongtao Liu =E4=BA=8E2022=E5=B9=B411=E6=9C=8814=E6=97= =A5=E5=91=A8=E4=B8=80 09:35=E5=86=99=E9=81=93=EF=BC=9A > > On Wed, Nov 9, 2022 at 9:29 AM Hongyu Wang wrote= : > > > > > Although ix86_small_unroll_insns is coming from issue_rate, it's tune= d > > > for codesize. > > > Make it exact as issue_rate and using factor * issue_width / > > > loop->ninsns may increase code size too much. > > > So I prefer to add those 2 parameters to the cost table for core > > > tunings instead of 1. > > > > Yes, here is the updated patch that changes the cost table. > > > > Bootstrapped & regrtested on x86_64-pc-linux-gnu. > > > > Ok for trunk? > Ok, Note GCC documents have been ported to sphinx, so you need to > adjust changes in invoke.texi to new sphinx files. > > > > Hongtao Liu via Gcc-patches =E4=BA=8E2022=E5= =B9=B411=E6=9C=888=E6=97=A5=E5=91=A8=E4=BA=8C 11:05=E5=86=99=E9=81=93=EF=BC= =9A > > > > > > On Mon, Nov 7, 2022 at 10:25 PM Richard Biener via Gcc-patches > > > wrote: > > > > > > > > On Wed, Nov 2, 2022 at 4:37 AM Hongyu Wang = wrote: > > > > > > > > > > Hi, this is the updated patch of > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2022-October/604345.htm= l, > > > > > which uses targetm.loop_unroll_adjust as gate to enable small loo= p unroll. > > > > > > > > > > This patch does not change rs6000/s390 since I don't have machine= to > > > > > test them, but I suppose the default behavior is the same since t= hey > > > > > enable flag_unroll_loops at O2. > > > > > > > > > > Bootstrapped & regrtested on x86_64-pc-linux-gnu. > > > > > > > > > > Ok for trunk? > > > > > > > > > > ---------- Patch content -------- > > > > > > > > > > Modern processors has multiple way instruction decoders > > > > > For x86, icelake/zen3 has 5 uops, so for small loop with <=3D 4 > > > > > instructions (usually has 3 uops with a cmp/jmp pair that can be > > > > > macro-fused), the decoder would have 2 uops bubble for each itera= tion > > > > > and the pipeline could not be fully utilized. > > > > > > > > > > Therefore, this patch enables loop unrolling for small size loop = at O2 > > > > > to fullfill the decoder as much as possible. It turns on rtl loop > > > > > unrolling when targetm.loop_unroll_adjust exists and O2 plus spee= d only. > > > > > In x86 backend the default behavior is to unroll small loops with= less > > > > > than 4 insns by 1 time. > > > > > > > > > > This improves 548.exchange2 by 9% on icelake and 7.4% on zen3 wit= h > > > > > 0.9% codesize increment. For other benchmarks the variants are mi= nor > > > > > and overall codesize increased by 0.2%. > > > > > > > > > > The kernel image size increased by 0.06%, and no impact on eembc. > > > > > > > > > > gcc/ChangeLog: > > > > > > > > > > * common/config/i386/i386-common.cc (ix86_optimization_ta= ble): > > > > > Enable small loop unroll at O2 by default. > > > > > * config/i386/i386.cc (ix86_loop_unroll_adjust): Adjust u= nroll > > > > > factor if -munroll-only-small-loops enabled and -funroll-= loops/ > > > > > -funroll-all-loops are disabled. > > > > > * config/i386/i386.opt: Add -munroll-only-small-loops, > > > > > -param=3Dx86-small-unroll-ninsns=3D for loop insn limit, > > > > > -param=3Dx86-small-unroll-factor=3D for unroll factor. > > > > > * doc/invoke.texi: Document -munroll-only-small-loops, > > > > > x86-small-unroll-ninsns and x86-small-unroll-factor. > > > > > * loop-init.cc (pass_rtl_unroll_loops::gate): Enable rtl > > > > > loop unrolling for -O2-speed and above if target hook > > > > > loop_unroll_adjust exists. > > > > > > > > > > gcc/testsuite/ChangeLog: > > > > > > > > > > * gcc.dg/guality/loop-1.c: Add additional option > > > > > -mno-unroll-only-small-loops. > > > > > * gcc.target/i386/pr86270.c: Add -mno-unroll-only-small-l= oops. > > > > > * gcc.target/i386/pr93002.c: Likewise. > > > > > --- > > > > > gcc/common/config/i386/i386-common.cc | 1 + > > > > > gcc/config/i386/i386.cc | 18 ++++++++++++++++++ > > > > > gcc/config/i386/i386.opt | 13 +++++++++++++ > > > > > gcc/doc/invoke.texi | 16 ++++++++++++++++ > > > > > gcc/loop-init.cc | 10 +++++++--- > > > > > gcc/testsuite/gcc.dg/guality/loop-1.c | 2 ++ > > > > > gcc/testsuite/gcc.target/i386/pr86270.c | 2 +- > > > > > gcc/testsuite/gcc.target/i386/pr93002.c | 2 +- > > > > > 8 files changed, 59 insertions(+), 5 deletions(-) > > > > > > > > > > diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/c= onfig/i386/i386-common.cc > > > > > index f66bdd5a2af..c6891486078 100644 > > > > > --- a/gcc/common/config/i386/i386-common.cc > > > > > +++ b/gcc/common/config/i386/i386-common.cc > > > > > @@ -1724,6 +1724,7 @@ static const struct default_options ix86_op= tion_optimization_table[] =3D > > > > > /* The STC algorithm produces the smallest code at -Os, for = x86. */ > > > > > { OPT_LEVELS_2_PLUS, OPT_freorder_blocks_algorithm_, NULL, > > > > > REORDER_BLOCKS_ALGORITHM_STC }, > > > > > + { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_munroll_only_small_loops= , NULL, 1 }, > > > > > /* Turn off -fschedule-insns by default. It tends to make t= he > > > > > problem with not enough registers even worse. */ > > > > > { OPT_LEVELS_ALL, OPT_fschedule_insns, NULL, 0 }, > > > > > diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc > > > > > index c0f37149ed0..0f94a3b609e 100644 > > > > > --- a/gcc/config/i386/i386.cc > > > > > +++ b/gcc/config/i386/i386.cc > > > > > @@ -23827,6 +23827,24 @@ ix86_loop_unroll_adjust (unsigned nunrol= l, class loop *loop) > > > > > unsigned i; > > > > > unsigned mem_count =3D 0; > > > > > > > > > > + /* Unroll small size loop when unroll factor is not explicitly > > > > > + specified. */ > > > > > + if (!(flag_unroll_loops > > > > > + || flag_unroll_all_loops > > > > > + || loop->unroll)) > > > > > + { > > > > > + nunroll =3D 1; > > > > > + > > > > > + /* Any explicit -f{no-}unroll-{all-}loops turns off > > > > > + -munroll-only-small-loops. */ > > > > > + if (ix86_unroll_only_small_loops > > > > > + && !OPTION_SET_P (flag_unroll_loops)) > > > > > + if (loop->ninsns <=3D (unsigned) ix86_small_unroll_ninsns= ) > > > > > > > > either add braces or combine the two if's > > > > > > > > Otherwise the middle-end changes look OK. The target maintainers n= eed to decide > > > > whether the two --params should be core tunings instead - I would a= ssume that > > > > given your rationale the decode and issue widths of the core plays = an important > > > > role here. That might also suggest a single parameter instead and = unrolling > > > > (factor * issue_width) / loop->ninsns times instead of a static unr= oll_factor? > > > Although ix86_small_unroll_insns is coming from issue_rate, it's tune= d > > > for codesize. > > > Make it exact as issue_rate and using factor * issue_width / > > > loop->ninsns may increase code size too much. > > > So I prefer to add those 2 parameters to the cost table for core > > > tunings instead of 1. > > > > > > > > Thanks, > > > > Richard. > > > > > > > > > + nunroll =3D (unsigned) ix86_small_unroll_factor; > > > > > + > > > > > + return nunroll; > > > > > + } > > > > > + > > > > > if (!TARGET_ADJUST_UNROLL) > > > > > return nunroll; > > > > > > > > > > diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt > > > > > index 53d534f6392..6da9c8d670d 100644 > > > > > --- a/gcc/config/i386/i386.opt > > > > > +++ b/gcc/config/i386/i386.opt > > > > > @@ -1224,3 +1224,16 @@ mavxvnniint8 > > > > > Target Mask(ISA2_AVXVNNIINT8) Var(ix86_isa_flags2) Save > > > > > Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 a= nd > > > > > AVXVNNIINT8 built-in functions and code generation. > > > > > + > > > > > +munroll-only-small-loops > > > > > +Target Var(ix86_unroll_only_small_loops) Init(0) Save > > > > > +Enable conservative small loop unrolling. > > > > > + > > > > > +-param=3Dx86-small-unroll-ninsns=3D > > > > > +Target Joined UInteger Var(ix86_small_unroll_ninsns) Init(4) Par= am > > > > > +Insturctions number limit for loop to be unrolled under > > > > > +-munroll-only-small-loops. > > > > > + > > > > > +-param=3Dx86-small-unroll-factor=3D > > > > > +Target Joined UInteger Var(ix86_small_unroll_factor) Init(2) Par= am > > > > > +Unroll factor for -munroll-only-small-loops. > > > > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > > > > > index 550aec87809..487218bd0ce 100644 > > > > > --- a/gcc/doc/invoke.texi > > > > > +++ b/gcc/doc/invoke.texi > > > > > @@ -15821,6 +15821,14 @@ The following choices of @var{name} are = available on i386 and x86_64 targets: > > > > > @item x86-stlf-window-ninsns > > > > > Instructions number above which STFL stall penalty can be compen= sated. > > > > > > > > > > +@item x86-small-unroll-ninsns > > > > > +If -munroll-only-small-loops is enabled, only unroll loops with = instruction > > > > > +count less than this parameter. The default value is 4. > > > > > + > > > > > +@item x86-small-unroll-factor > > > > > +If -munroll-only-small-loops is enabled, reset the unroll factor= with this > > > > > +value. The default value is 2 which means the loop will be unrol= led once. > > > > > + > > > > > @end table > > > > > > > > > > @end table > > > > > @@ -25232,6 +25240,14 @@ environments where no dynamic link is pe= rformed, like firmwares, OS > > > > > kernels, executables linked with @option{-static} or @option{-st= atic-pie}. > > > > > @option{-mdirect-extern-access} is not compatible with @option{-= fPIC} or > > > > > @option{-fpic}. > > > > > + > > > > > +@item -munroll-only-small-loops > > > > > +@itemx -mno-unroll-only-small-loops > > > > > +@opindex munroll-only-small-loops > > > > > +Controls conservative small loop unrolling. It is default enbale= d by > > > > > +O2, and unrolls loop with less than 4 insns by 1 time. Explicit > > > > > +-f[no-]unroll-[all-]loops would disable this flag to avoid any > > > > > +unintended unrolling behavior that user does not want. > > > > > @end table > > > > > > > > > > @node M32C Options > > > > > diff --git a/gcc/loop-init.cc b/gcc/loop-init.cc > > > > > index b9e07973dd6..9789efa1e11 100644 > > > > > --- a/gcc/loop-init.cc > > > > > +++ b/gcc/loop-init.cc > > > > > @@ -565,9 +565,12 @@ public: > > > > > {} > > > > > > > > > > /* opt_pass methods: */ > > > > > - bool gate (function *) final override > > > > > + bool gate (function *fun) final override > > > > > { > > > > > - return (flag_unroll_loops || flag_unroll_all_loops || cfun= ->has_unroll); > > > > > + return (flag_unroll_loops || flag_unroll_all_loops || cfun= ->has_unroll > > > > > + || (targetm.loop_unroll_adjust > > > > > + && optimize >=3D 2 > > > > > + && optimize_function_for_speed_p (fun))); > > > > > } > > > > > > > > > > unsigned int execute (function *) final override; > > > > > @@ -583,7 +586,8 @@ pass_rtl_unroll_loops::execute (function *fun= ) > > > > > if (dump_file) > > > > > df_dump (dump_file); > > > > > > > > > > - if (flag_unroll_loops) > > > > > + if (flag_unroll_loops > > > > > + || targetm.loop_unroll_adjust) > > > > > flags |=3D UAP_UNROLL; > > > > > if (flag_unroll_all_loops) > > > > > flags |=3D UAP_UNROLL_ALL; > > > > > diff --git a/gcc/testsuite/gcc.dg/guality/loop-1.c b/gcc/testsuit= e/gcc.dg/guality/loop-1.c > > > > > index 1b1f6d32271..a32ea445a3f 100644 > > > > > --- a/gcc/testsuite/gcc.dg/guality/loop-1.c > > > > > +++ b/gcc/testsuite/gcc.dg/guality/loop-1.c > > > > > @@ -1,5 +1,7 @@ > > > > > /* { dg-do run } */ > > > > > /* { dg-options "-fno-tree-scev-cprop -fno-tree-vectorize -g" } = */ > > > > > +/* { dg-additional-options "-mno-unroll-only-small-loops" { targ= et ia32 } } */ > > > > > + > > > > > > > > > > #include "../nop.h" > > > > > > > > > > diff --git a/gcc/testsuite/gcc.target/i386/pr86270.c b/gcc/testsu= ite/gcc.target/i386/pr86270.c > > > > > index 81841ef5bd7..cbc9fbb0450 100644 > > > > > --- a/gcc/testsuite/gcc.target/i386/pr86270.c > > > > > +++ b/gcc/testsuite/gcc.target/i386/pr86270.c > > > > > @@ -1,5 +1,5 @@ > > > > > /* { dg-do compile } */ > > > > > -/* { dg-options "-O2" } */ > > > > > +/* { dg-options "-O2 -mno-unroll-only-small-loops" } */ > > > > > > > > > > int *a; > > > > > long len; > > > > > diff --git a/gcc/testsuite/gcc.target/i386/pr93002.c b/gcc/testsu= ite/gcc.target/i386/pr93002.c > > > > > index 0248fcc00a5..f75a847f75d 100644 > > > > > --- a/gcc/testsuite/gcc.target/i386/pr93002.c > > > > > +++ b/gcc/testsuite/gcc.target/i386/pr93002.c > > > > > @@ -1,6 +1,6 @@ > > > > > /* PR target/93002 */ > > > > > /* { dg-do compile } */ > > > > > -/* { dg-options "-O2" } */ > > > > > +/* { dg-options "-O2 -mno-unroll-only-small-loops" } */ > > > > > /* { dg-final { scan-assembler-not "cmp\[^\n\r]*-1" } } */ > > > > > > > > > > volatile int sink; > > > > > -- > > > > > 2.18.1 > > > > > > > > > > > > > > > > > -- > > > BR, > > > Hongtao > > > > -- > BR, > Hongtao --000000000000b83c0105ed67a411 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Enable-small-loop-unrolling-for-O2.patch" Content-Disposition: attachment; filename="0001-Enable-small-loop-unrolling-for-O2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lagcjiei0 RnJvbSA3NzkwMTc1Y2NmOWEzNzA1NmY0ZDEyMzRkOTE0ZmM5MjRjZDE4MTJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIb25neXUgV2FuZyA8aG9uZ3l1LndhbmdAaW50ZWwuY29tPgpE YXRlOiBUaHUsIDggU2VwIDIwMjIgMTY6NTI6MDIgKzA4MDAKU3ViamVjdDogW1BBVENIXSBFbmFi bGUgc21hbGwgbG9vcCB1bnJvbGxpbmcgZm9yIE8yCgpNb2Rlcm4gcHJvY2Vzc29ycyBoYXMgbXVs dGlwbGUgd2F5IGluc3RydWN0aW9uIGRlY29kZXJzCkZvciB4ODYsIGljZWxha2UvemVuMyBoYXMg NSB1b3BzLCBzbyBmb3Igc21hbGwgbG9vcCB3aXRoIDw9IDQKaW5zdHJ1Y3Rpb25zICh1c3VhbGx5 IGhhcyAzIHVvcHMgd2l0aCBhIGNtcC9qbXAgcGFpciB0aGF0IGNhbiBiZQptYWNyby1mdXNlZCks IHRoZSBkZWNvZGVyIHdvdWxkIGhhdmUgMiB1b3BzIGJ1YmJsZSBmb3IgZWFjaCBpdGVyYXRpb24K YW5kIHRoZSBwaXBlbGluZSBjb3VsZCBub3QgYmUgZnVsbHkgdXRpbGl6ZWQuCgpUaGVyZWZvcmUs IHRoaXMgcGF0Y2ggZW5hYmxlcyBsb29wIHVucm9sbGluZyBmb3Igc21hbGwgc2l6ZSBsb29wIGF0 IE8yCnRvIGZ1bGxmaWxsIHRoZSBkZWNvZGVyIGFzIG11Y2ggYXMgcG9zc2libGUuIEl0IHR1cm5z IG9uIHJ0bCBsb29wCnVucm9sbGluZyB3aGVuIHRhcmdldG0ubG9vcF91bnJvbGxfYWRqdXN0IGV4 aXN0cyBhbmQgTzIgcGx1cyBzcGVlZCBvbmx5LgpJbiB4ODYgYmFja2VuZCB0aGUgZGVmYXVsdCBi ZWhhdmlvciBpcyB0byB1bnJvbGwgc21hbGwgbG9vcHMgd2l0aCBsZXNzCnRoYW4gNCBpbnNucyBi eSAxIHRpbWUuCgpUaGlzIGltcHJvdmVzIDU0OC5leGNoYW5nZTIgYnkgOSUgb24gaWNlbGFrZSBh bmQgNy40JSBvbiB6ZW4zIHdpdGgKMC45JSBjb2Rlc2l6ZSBpbmNyZW1lbnQuIEZvciBvdGhlciBi ZW5jaG1hcmtzIHRoZSB2YXJpYW50cyBhcmUgbWlub3IKYW5kIG92ZXJhbGwgY29kZXNpemUgaW5j cmVhc2VkIGJ5IDAuMiUuCgpUaGUga2VybmVsIGltYWdlIHNpemUgaW5jcmVhc2VkIGJ5IDAuMDYl LCBhbmQgbm8gaW1wYWN0IG9uIGVlbWJjLgoKZ2NjL0NoYW5nZUxvZzoKCgkqIGNvbW1vbi9jb25m aWcvaTM4Ni9pMzg2LWNvbW1vbi5jYyAoaXg4Nl9vcHRpbWl6YXRpb25fdGFibGUpOgoJRW5hYmxl IHNtYWxsIGxvb3AgdW5yb2xsIGF0IE8yIGJ5IGRlZmF1bHQuCgkqIGNvbmZpZy9pMzg2L2kzODYu Y2MgKGl4ODZfbG9vcF91bnJvbGxfYWRqdXN0KTogQWRqdXN0IHVucm9sbAoJZmFjdG9yIGlmIC1t dW5yb2xsLW9ubHktc21hbGwtbG9vcHMgZW5hYmxlZCBhbmQgLWZ1bnJvbGwtbG9vcHMvCgktZnVu cm9sbC1hbGwtbG9vcHMgYXJlIGRpc2FibGVkLgoJKiBjb25maWcvaTM4Ni9pMzg2LmggKHN0cnVj dCBwcm9jZXNzb3JfY29zdHMpOiBBZGQgMiBmaWVsZAoJc21hbGxfdW5yb2xsX25pbnNucyBhbmQg c21hbGxfdW5yb2xsX2ZhY3Rvci4KCSogY29uZmlnL2kzODYvaTM4Ni5vcHQ6IEFkZCAtbXVucm9s bC1vbmx5LXNtYWxsLWxvb3BzLgoJKiBkb2MvZ2NjL2djYy1jb21tYW5kLW9wdGlvbnMvbWFjaGlu ZS1kZXBlbmRlbnQtb3B0aW9ucy94ODYtb3B0aW9ucy5yc3Q6CglEb2N1bWVudCAtbXVucm9sbC1v bmx5LXNtYWxsLWxvb3BzLgoJKiBkb2MvZ2NjL2djYy1jb21tYW5kLW9wdGlvbnMvb3B0aW9uLXN1 bW1hcnkucnN0OiBMaWtld2lzZS4KCSogbG9vcC1pbml0LmNjIChwYXNzX3J0bF91bnJvbGxfbG9v cHM6OmdhdGUpOiBFbmFibGUgcnRsCglsb29wIHVucm9sbGluZyBmb3IgLU8yLXNwZWVkIGFuZCBh Ym92ZSBpZiB0YXJnZXQgaG9vawoJbG9vcF91bnJvbGxfYWRqdXN0IGV4aXN0cy4KCShwYXNzX3J0 bF91bnJvbGxfbG9vcHM6OmV4ZWN1dGUpOiBTZXQgVUFQX1VOUk9MTCBmbGFnCgl3aGVuIHRhcmdl dCBob29rIGxvb3BfdW5yb2xsX2FkanVzdCBleGlzdHMuCgkqIGNvbmZpZy9pMzg2L3g4Ni10dW5l LWNvc3RzLmg6IFVwZGF0ZSBhbGwgcHJvY2Vzc29yIGNvc3RzCgl3aXRoIHNtYWxsX3Vucm9sbF9u aW5zbnMgPSA0IGFuZCBzbWFsbF91bnJvbGxfZmFjdG9yID0gMi4KCmdjYy90ZXN0c3VpdGUvQ2hh bmdlTG9nOgoKCSogZ2NjLmRnL2d1YWxpdHkvbG9vcC0xLmM6IEFkZCBhZGRpdGlvbmFsIG9wdGlv bgoJLW1uby11bnJvbGwtb25seS1zbWFsbC1sb29wcy4KCSogZ2NjLnRhcmdldC9pMzg2L3ByODYy NzAuYzogQWRkIC1tbm8tdW5yb2xsLW9ubHktc21hbGwtbG9vcHMuCgkqIGdjYy50YXJnZXQvaTM4 Ni9wcjkzMDAyLmM6IExpa2V3aXNlLgotLS0KIGdjYy9jb21tb24vY29uZmlnL2kzODYvaTM4Ni1j b21tb24uY2MgICAgICAgICB8ICAxICsKIGdjYy9jb25maWcvaTM4Ni9pMzg2LmNjICAgICAgICAg ICAgICAgICAgICAgICB8IDE4ICsrKysrKwogZ2NjL2NvbmZpZy9pMzg2L2kzODYuaCAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDUgKysKIGdjYy9jb25maWcvaTM4Ni9pMzg2Lm9wdCAgICAgICAg ICAgICAgICAgICAgICB8ICA0ICsrCiBnY2MvY29uZmlnL2kzODYveDg2LXR1bmUtY29zdHMuaCAg ICAgICAgICAgICAgfCA2MCArKysrKysrKysrKysrKysrKysrCiAuLi4vbWFjaGluZS1kZXBlbmRl bnQtb3B0aW9ucy94ODYtb3B0aW9ucy5yc3QgfCAgNiArKwogLi4uL2djYy1jb21tYW5kLW9wdGlv bnMvb3B0aW9uLXN1bW1hcnkucnN0ICAgIHwgIDMgKy0KIGdjYy9sb29wLWluaXQuY2MgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IDEwICsrKy0KIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2d1 YWxpdHkvbG9vcC0xLmMgICAgICAgICB8ICAyICsKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L3ByODYyNzAuYyAgICAgICB8ICAyICstCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9wcjkzMDAyLmMgICAgICAgfCAgMiArLQogMTEgZmlsZXMgY2hhbmdlZCwgMTA3IGluc2VydGlv bnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbW1vbi9jb25maWcvaTM4 Ni9pMzg2LWNvbW1vbi5jYyBiL2djYy9jb21tb24vY29uZmlnL2kzODYvaTM4Ni1jb21tb24uY2MK aW5kZXggNDMxZmQwZDNhZDEuLjJmNDkxYjJmODRiIDEwMDY0NAotLS0gYS9nY2MvY29tbW9uL2Nv bmZpZy9pMzg2L2kzODYtY29tbW9uLmNjCisrKyBiL2djYy9jb21tb24vY29uZmlnL2kzODYvaTM4 Ni1jb21tb24uY2MKQEAgLTE4MDMsNiArMTgwMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVm YXVsdF9vcHRpb25zIGl4ODZfb3B0aW9uX29wdGltaXphdGlvbl90YWJsZVtdID0KICAgICAvKiBU aGUgU1RDIGFsZ29yaXRobSBwcm9kdWNlcyB0aGUgc21hbGxlc3QgY29kZSBhdCAtT3MsIGZvciB4 ODYuICAqLwogICAgIHsgT1BUX0xFVkVMU18yX1BMVVMsIE9QVF9mcmVvcmRlcl9ibG9ja3NfYWxn b3JpdGhtXywgTlVMTCwKICAgICAgIFJFT1JERVJfQkxPQ0tTX0FMR09SSVRITV9TVEMgfSwKKyAg ICB7IE9QVF9MRVZFTFNfMl9QTFVTX1NQRUVEX09OTFksIE9QVF9tdW5yb2xsX29ubHlfc21hbGxf bG9vcHMsIE5VTEwsIDEgfSwKICAgICAvKiBUdXJuIG9mZiAtZnNjaGVkdWxlLWluc25zIGJ5IGRl ZmF1bHQuICBJdCB0ZW5kcyB0byBtYWtlIHRoZQogICAgICAgIHByb2JsZW0gd2l0aCBub3QgZW5v dWdoIHJlZ2lzdGVycyBldmVuIHdvcnNlLiAgKi8KICAgICB7IE9QVF9MRVZFTFNfQUxMLCBPUFRf ZnNjaGVkdWxlX2luc25zLCBOVUxMLCAwIH0sCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYv aTM4Ni5jYyBiL2djYy9jb25maWcvaTM4Ni9pMzg2LmNjCmluZGV4IGY4NTg2NDk5Y2QxLi4yOTJi MzJjNWU5OSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuY2MKKysrIGIvZ2NjL2Nv bmZpZy9pMzg2L2kzODYuY2MKQEAgLTIzODI3LDYgKzIzODI3LDI0IEBAIGl4ODZfbG9vcF91bnJv bGxfYWRqdXN0ICh1bnNpZ25lZCBudW5yb2xsLCBjbGFzcyBsb29wICpsb29wKQogICB1bnNpZ25l ZCBpOwogICB1bnNpZ25lZCBtZW1fY291bnQgPSAwOwogCisgIC8qIFVucm9sbCBzbWFsbCBzaXpl IGxvb3Agd2hlbiB1bnJvbGwgZmFjdG9yIGlzIG5vdCBleHBsaWNpdGx5CisgICAgIHNwZWNpZmll ZC4gICovCisgIGlmICghKGZsYWdfdW5yb2xsX2xvb3BzCisJfHwgZmxhZ191bnJvbGxfYWxsX2xv b3BzCisJfHwgbG9vcC0+dW5yb2xsKSkKKyAgICB7CisgICAgICBudW5yb2xsID0gMTsKKworICAg ICAgLyogQW55IGV4cGxpY2l0IC1me25vLX11bnJvbGwte2FsbC19bG9vcHMgdHVybnMgb2ZmCisJ IC1tdW5yb2xsLW9ubHktc21hbGwtbG9vcHMuICAqLworICAgICAgaWYgKGl4ODZfdW5yb2xsX29u bHlfc21hbGxfbG9vcHMKKwkgICYmICFPUFRJT05fU0VUX1AgKGZsYWdfdW5yb2xsX2xvb3BzKQor CSAgJiYgbG9vcC0+bmluc25zIDw9IGl4ODZfY29zdC0+c21hbGxfdW5yb2xsX25pbnNucykKKwlu dW5yb2xsID0gaXg4Nl9jb3N0LT5zbWFsbF91bnJvbGxfZmFjdG9yOworCisgICAgICByZXR1cm4g bnVucm9sbDsKKyAgICB9CisKICAgaWYgKCFUQVJHRVRfQURKVVNUX1VOUk9MTCkKICAgICAgcmV0 dXJuIG51bnJvbGw7CiAKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmggYi9nY2Mv Y29uZmlnL2kzODYvaTM4Ni5oCmluZGV4IGE1YWQ5ZjM4N2Y3Li4zODY5ZGI4ZjJkMyAxMDA2NDQK LS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaAorKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5o CkBAIC0yMTksNiArMjE5LDExIEBAIHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgewogICBjb25zdCBj aGFyICpjb25zdCBhbGlnbl9qdW1wOwkJLyogSnVtcCBhbGlnbm1lbnQuICAqLwogICBjb25zdCBj aGFyICpjb25zdCBhbGlnbl9sYWJlbDsJLyogTGFiZWwgYWxpZ25tZW50LiAgKi8KICAgY29uc3Qg Y2hhciAqY29uc3QgYWxpZ25fZnVuYzsJCS8qIEZ1bmN0aW9uIGFsaWdubWVudC4gICovCisKKyAg Y29uc3QgdW5zaWduZWQgc21hbGxfdW5yb2xsX25pbnNuczsJLyogSW5zbiBjb3VudCBsaW1pdCBm b3Igc21hbGwgbG9vcAorCQkJCQkgICB0byBiZSB1bnJvbGxlZC4gICovCisgIGNvbnN0IHVuc2ln bmVkIHNtYWxsX3Vucm9sbF9mYWN0b3I7ICAgLyogVW5yb2xsIGZhY3RvciBmb3Igc21hbGwgbG9v cCB0bworCQkJCQkgICBiZSB1bnJvbGxlZC4gICovCiB9OwogCiBleHRlcm4gY29uc3Qgc3RydWN0 IHByb2Nlc3Nvcl9jb3N0cyAqaXg4Nl9jb3N0OwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2 L2kzODYub3B0IGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYub3B0CmluZGV4IDQxNWM1MmUxYmI0Li5k NmI4MGVmYTA0ZCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYub3B0CisrKyBiL2dj Yy9jb25maWcvaTM4Ni9pMzg2Lm9wdApAQCAtMTI0NiwzICsxMjQ2LDcgQEAgU3VwcG9ydCBQUkVG RVRDSEkgYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBjb2RlIGdlbmVyYXRpb24uCiBtcmFvaW50CiBU YXJnZXQgTWFzayhJU0EyX1JBT0lOVCkgVmFyKGl4ODZfaXNhX2ZsYWdzMikgU2F2ZQogU3VwcG9y dCBSQU9JTlQgYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBjb2RlIGdlbmVyYXRpb24uCisKK211bnJv bGwtb25seS1zbWFsbC1sb29wcworVGFyZ2V0IFZhcihpeDg2X3Vucm9sbF9vbmx5X3NtYWxsX2xv b3BzKSBJbml0KDApIFNhdmUKK0VuYWJsZSBjb25zZXJ2YXRpdmUgc21hbGwgbG9vcCB1bnJvbGxp bmcuCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYveDg2LXR1bmUtY29zdHMuaCBiL2djYy9j b25maWcvaTM4Ni94ODYtdHVuZS1jb3N0cy5oCmluZGV4IGFlYWE3ZWIwMDhlLi5mMDFiOGVlOWVl ZiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L3g4Ni10dW5lLWNvc3RzLmgKKysrIGIvZ2Nj L2NvbmZpZy9pMzg2L3g4Ni10dW5lLWNvc3RzLmgKQEAgLTEzNSw2ICsxMzUsOCBAQCBzdHJ1Y3Qg cHJvY2Vzc29yX2Nvc3RzIGl4ODZfc2l6ZV9jb3N0ID0gey8qIGNvc3RzIGZvciB0dW5pbmcgZm9y IHNpemUgKi8KICAgTlVMTCwJCQkJCS8qIEp1bXAgYWxpZ25tZW50LiAgKi8KICAgTlVMTCwJCQkJ CS8qIExhYmVsIGFsaWdubWVudC4gICovCiAgIE5VTEwsCQkJCQkvKiBGdW5jIGFsaWdubWVudC4g ICovCisgIDQsCQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJLyogU21h bGwgdW5yb2xsIGZhY3Rvci4gICovCiB9OwogCiAvKiBQcm9jZXNzb3IgY29zdHMgKHJlbGF0aXZl IHRvIGFuIGFkZCkgKi8KQEAgLTI0NCw2ICsyNDYsOCBAQCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3Rz IGkzODZfY29zdCA9IHsJLyogMzg2IHNwZWNpZmljIGNvc3RzICovCiAgICI0IiwJCQkJCS8qIEp1 bXAgYWxpZ25tZW50LiAgKi8KICAgTlVMTCwJCQkJCS8qIExhYmVsIGFsaWdubWVudC4gICovCiAg ICI0IiwJCQkJCS8qIEZ1bmMgYWxpZ25tZW50LiAgKi8KKyAgNCwJCQkJCS8qIFNtYWxsIHVucm9s bCBsaW1pdC4gICovCisgIDIsCQkJCQkvKiBTbWFsbCB1bnJvbGwgZmFjdG9yLiAgKi8KIH07CiAK IHN0YXRpYyBzdHJpbmdvcF9hbGdzIGk0ODZfbWVtY3B5WzJdID0gewpAQCAtMzU0LDYgKzM1OCw4 IEBAIHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgaTQ4Nl9jb3N0ID0gewkvKiA0ODYgc3BlY2lmaWMg Y29zdHMgKi8KICAgIjE2IiwJCQkJCS8qIEp1bXAgYWxpZ25tZW50LiAgKi8KICAgIjA6MDo4IiwJ CQkJLyogTGFiZWwgYWxpZ25tZW50LiAgKi8KICAgIjE2IiwJCQkJCS8qIEZ1bmMgYWxpZ25tZW50 LiAgKi8KKyAgNCwJCQkJCS8qIFNtYWxsIHVucm9sbCBsaW1pdC4gICovCisgIDIsCQkJCQkvKiBT bWFsbCB1bnJvbGwgZmFjdG9yLiAgKi8KIH07CiAKIHN0YXRpYyBzdHJpbmdvcF9hbGdzIHBlbnRp dW1fbWVtY3B5WzJdID0gewpAQCAtNDYyLDYgKzQ2OCw4IEBAIHN0cnVjdCBwcm9jZXNzb3JfY29z dHMgcGVudGl1bV9jb3N0ID0gewogICAiMTY6ODo4IiwJCQkJLyogSnVtcCBhbGlnbm1lbnQuICAq LwogICAiMDowOjgiLAkJCQkvKiBMYWJlbCBhbGlnbm1lbnQuICAqLwogICAiMTYiLAkJCQkJLyog RnVuYyBhbGlnbm1lbnQuICAqLworICA0LAkJCQkJLyogU21hbGwgdW5yb2xsIGxpbWl0LiAgKi8K KyAgMiwJCQkJCS8qIFNtYWxsIHVucm9sbCBmYWN0b3IuICAqLwogfTsKIAogc3RhdGljIGNvbnN0 CkBAIC01NjMsNiArNTcxLDggQEAgc3RydWN0IHByb2Nlc3Nvcl9jb3N0cyBsYWtlbW9udF9jb3N0 ID0gewogICAiMTY6ODo4IiwJCQkJLyogSnVtcCBhbGlnbm1lbnQuICAqLwogICAiMDowOjgiLAkJ CQkvKiBMYWJlbCBhbGlnbm1lbnQuICAqLwogICAiMTYiLAkJCQkJLyogRnVuYyBhbGlnbm1lbnQu ICAqLworICA0LAkJCQkJLyogU21hbGwgdW5yb2xsIGxpbWl0LiAgKi8KKyAgMiwJCQkJCS8qIFNt YWxsIHVucm9sbCBmYWN0b3IuICAqLwogfTsKIAogLyogUGVudGl1bVBybyBoYXMgb3B0aW1pemVk IHJlcCBpbnN0cnVjdGlvbnMgZm9yIGJsb2NrcyBhbGlnbmVkIGJ5IDggYnl0ZXMKQEAgLTY3OSw2 ICs2ODksOCBAQCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzIHBlbnRpdW1wcm9fY29zdCA9IHsKICAg IjE2OjExOjgiLAkJCQkvKiBKdW1wIGFsaWdubWVudC4gICovCiAgICIwOjA6OCIsCQkJCS8qIExh YmVsIGFsaWdubWVudC4gICovCiAgICIxNiIsCQkJCQkvKiBGdW5jIGFsaWdubWVudC4gICovCisg IDQsCQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJLyogU21hbGwgdW5y b2xsIGZhY3Rvci4gICovCiB9OwogCiBzdGF0aWMgc3RyaW5nb3BfYWxncyBnZW9kZV9tZW1jcHlb Ml0gPSB7CkBAIC03ODYsNiArNzk4LDggQEAgc3RydWN0IHByb2Nlc3Nvcl9jb3N0cyBnZW9kZV9j b3N0ID0gewogICBOVUxMLAkJCQkJLyogSnVtcCBhbGlnbm1lbnQuICAqLwogICBOVUxMLAkJCQkJ LyogTGFiZWwgYWxpZ25tZW50LiAgKi8KICAgTlVMTCwJCQkJCS8qIEZ1bmMgYWxpZ25tZW50LiAg Ki8KKyAgNCwJCQkJCS8qIFNtYWxsIHVucm9sbCBsaW1pdC4gICovCisgIDIsCQkJCQkvKiBTbWFs bCB1bnJvbGwgZmFjdG9yLiAgKi8KIH07CiAKIHN0YXRpYyBzdHJpbmdvcF9hbGdzIGs2X21lbWNw eVsyXSA9IHsKQEAgLTg5Niw2ICs5MTAsOCBAQCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzIGs2X2Nv c3QgPSB7CiAgICIzMjo4OjgiLAkJCQkvKiBKdW1wIGFsaWdubWVudC4gICovCiAgICIwOjA6OCIs CQkJCS8qIExhYmVsIGFsaWdubWVudC4gICovCiAgICIzMiIsCQkJCQkvKiBGdW5jIGFsaWdubWVu dC4gICovCisgIDQsCQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJLyog U21hbGwgdW5yb2xsIGZhY3Rvci4gICovCiB9OwogCiAvKiBGb3Igc29tZSByZWFzb24sIEF0aGxv biBkZWFscyBiZXR0ZXIgd2l0aCBSRVAgcHJlZml4IChyZWxhdGl2ZSB0byBsb29wcykKQEAgLTEw MDcsNiArMTAyMyw4IEBAIHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgYXRobG9uX2Nvc3QgPSB7CiAg ICIxNjo4OjgiLAkJCQkvKiBKdW1wIGFsaWdubWVudC4gICovCiAgICIwOjA6OCIsCQkJCS8qIExh YmVsIGFsaWdubWVudC4gICovCiAgICIxNiIsCQkJCQkvKiBGdW5jIGFsaWdubWVudC4gICovCisg IDQsCQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJLyogU21hbGwgdW5y b2xsIGZhY3Rvci4gICovCiB9OwogCiAvKiBLOCBoYXMgb3B0aW1pemVkIFJFUCBpbnN0cnVjdGlv biBmb3IgbWVkaXVtIHNpemVkIGJsb2NrcywgYnV0IGZvciB2ZXJ5CkBAIC0xMTI3LDYgKzExNDUs OCBAQCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzIGs4X2Nvc3QgPSB7CiAgICIxNjo4OjgiLAkJCQkv KiBKdW1wIGFsaWdubWVudC4gICovCiAgICIwOjA6OCIsCQkJCS8qIExhYmVsIGFsaWdubWVudC4g ICovCiAgICIxNiIsCQkJCQkvKiBGdW5jIGFsaWdubWVudC4gICovCisgIDQsCQkJCQkvKiBTbWFs bCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJLyogU21hbGwgdW5yb2xsIGZhY3Rvci4gICov CiB9OwogCiAvKiBBTURGQU0xMCBoYXMgb3B0aW1pemVkIFJFUCBpbnN0cnVjdGlvbiBmb3IgbWVk aXVtIHNpemVkIGJsb2NrcywgYnV0IGZvcgpAQCAtMTI1NSw2ICsxMjc1LDggQEAgc3RydWN0IHBy b2Nlc3Nvcl9jb3N0cyBhbWRmYW0xMF9jb3N0ID0gewogICAiMzI6ODo4IiwJCQkJLyogSnVtcCBh bGlnbm1lbnQuICAqLwogICAiMDowOjgiLAkJCQkvKiBMYWJlbCBhbGlnbm1lbnQuICAqLwogICAi MzIiLAkJCQkJLyogRnVuYyBhbGlnbm1lbnQuICAqLworICA0LAkJCQkJLyogU21hbGwgdW5yb2xs IGxpbWl0LiAgKi8KKyAgMiwJCQkJCS8qIFNtYWxsIHVucm9sbCBmYWN0b3IuICAqLwogfTsKIAog LyogIEJEVkVSIGhhcyBvcHRpbWl6ZWQgUkVQIGluc3RydWN0aW9uIGZvciBtZWRpdW0gc2l6ZWQg YmxvY2tzLCBidXQgZm9yCkBAIC0xMzc2LDYgKzEzOTgsOCBAQCBjb25zdCBzdHJ1Y3QgcHJvY2Vz c29yX2Nvc3RzIGJkdmVyX2Nvc3QgPSB7CiAgICIxNjo4OjgiLAkJCQkvKiBKdW1wIGFsaWdubWVu dC4gICovCiAgICIwOjA6OCIsCQkJCS8qIExhYmVsIGFsaWdubWVudC4gICovCiAgICIxMSIsCQkJ CQkvKiBGdW5jIGFsaWdubWVudC4gICovCisgIDQsCQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQu ICAqLworICAyLAkJCQkJLyogU21hbGwgdW5yb2xsIGZhY3Rvci4gICovCiB9OwogCiAKQEAgLTE1 MjksNiArMTU1Myw4IEBAIHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgem52ZXIxX2Nvc3QgPSB7CiAg ICIxNiIsCQkJCQkvKiBKdW1wIGFsaWdubWVudC4gICovCiAgICIwOjA6OCIsCQkJCS8qIExhYmVs IGFsaWdubWVudC4gICovCiAgICIxNiIsCQkJCQkvKiBGdW5jIGFsaWdubWVudC4gICovCisgIDQs CQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJLyogU21hbGwgdW5yb2xs IGZhY3Rvci4gICovCiB9OwogCiAvKiAgWk5WRVIyIGhhcyBvcHRpbWl6ZWQgUkVQIGluc3RydWN0 aW9uIGZvciBtZWRpdW0gc2l6ZWQgYmxvY2tzLCBidXQgZm9yCkBAIC0xNjg2LDYgKzE3MTIsOCBA QCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzIHpudmVyMl9jb3N0ID0gewogICAiMTYiLAkJCQkJLyog SnVtcCBhbGlnbm1lbnQuICAqLwogICAiMDowOjgiLAkJCQkvKiBMYWJlbCBhbGlnbm1lbnQuICAq LwogICAiMTYiLAkJCQkJLyogRnVuYyBhbGlnbm1lbnQuICAqLworICA0LAkJCQkJLyogU21hbGwg dW5yb2xsIGxpbWl0LiAgKi8KKyAgMiwJCQkJCS8qIFNtYWxsIHVucm9sbCBmYWN0b3IuICAqLwog fTsKIAogc3RydWN0IHByb2Nlc3Nvcl9jb3N0cyB6bnZlcjNfY29zdCA9IHsKQEAgLTE4MTgsNiAr MTg0Niw4IEBAIHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgem52ZXIzX2Nvc3QgPSB7CiAgICIxNiIs CQkJCQkvKiBKdW1wIGFsaWdubWVudC4gICovCiAgICIwOjA6OCIsCQkJCS8qIExhYmVsIGFsaWdu bWVudC4gICovCiAgICIxNiIsCQkJCQkvKiBGdW5jIGFsaWdubWVudC4gICovCisgIDQsCQkJCQkv KiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJLyogU21hbGwgdW5yb2xsIGZhY3Rv ci4gICovCiB9OwogCiAvKiBUaGlzIHRhYmxlIGN1cnJlbnRseSByZXBsaWNhdGVzIHpudmVyM19j b3N0IHRhYmxlLiAqLwpAQCAtMTk1MSw2ICsxOTgxLDggQEAgc3RydWN0IHByb2Nlc3Nvcl9jb3N0 cyB6bnZlcjRfY29zdCA9IHsKICAgIjE2IiwJCQkJCS8qIEp1bXAgYWxpZ25tZW50LiAgKi8KICAg IjA6MDo4IiwJCQkJLyogTGFiZWwgYWxpZ25tZW50LiAgKi8KICAgIjE2IiwJCQkJCS8qIEZ1bmMg YWxpZ25tZW50LiAgKi8KKyAgNCwJCQkJCS8qIFNtYWxsIHVucm9sbCBsaW1pdC4gICovCisgIDIs CQkJCQkvKiBTbWFsbCB1bnJvbGwgZmFjdG9yLiAgKi8KIH07CiAKIC8qIHNreWxha2VfY29zdCBz aG91bGQgcHJvZHVjZSBjb2RlIHR1bmVkIGZvciBTa3lsYWtlIGZhbWlsbHkgb2YgQ1BVcy4gICov CkBAIC0yMDc1LDYgKzIxMDcsOCBAQCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzIHNreWxha2VfY29z dCA9IHsKICAgIjE2OjExOjgiLAkJCQkvKiBKdW1wIGFsaWdubWVudC4gICovCiAgICIwOjA6OCIs CQkJCS8qIExhYmVsIGFsaWdubWVudC4gICovCiAgICIxNiIsCQkJCQkvKiBGdW5jIGFsaWdubWVu dC4gICovCisgIDQsCQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJLyog U21hbGwgdW5yb2xsIGZhY3Rvci4gICovCiB9OwogCiAvKiBpY2VsYWtlX2Nvc3Qgc2hvdWxkIHBy b2R1Y2UgY29kZSB0dW5lZCBmb3IgSWNlbGFrZSBmYW1pbHkgb2YgQ1BVcy4KQEAgLTIyMDEsNiAr MjIzNSw4IEBAIHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgaWNlbGFrZV9jb3N0ID0gewogICAiMTY6 MTE6OCIsCQkJCS8qIEp1bXAgYWxpZ25tZW50LiAgKi8KICAgIjA6MDo4IiwJCQkJLyogTGFiZWwg YWxpZ25tZW50LiAgKi8KICAgIjE2IiwJCQkJCS8qIEZ1bmMgYWxpZ25tZW50LiAgKi8KKyAgNCwJ CQkJCS8qIFNtYWxsIHVucm9sbCBsaW1pdC4gICovCisgIDIsCQkJCQkvKiBTbWFsbCB1bnJvbGwg ZmFjdG9yLiAgKi8KIH07CiAKIC8qIGFsZGVybGFrZV9jb3N0IHNob3VsZCBwcm9kdWNlIGNvZGUg dHVuZWQgZm9yIGFsZGVybGFrZSBmYW1pbHkgb2YgQ1BVcy4gICovCkBAIC0yMzIxLDYgKzIzNTcs OCBAQCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzIGFsZGVybGFrZV9jb3N0ID0gewogICAiMTY6MTE6 OCIsCQkJCS8qIEp1bXAgYWxpZ25tZW50LiAgKi8KICAgIjA6MDo4IiwJCQkJLyogTGFiZWwgYWxp Z25tZW50LiAgKi8KICAgIjE2IiwJCQkJCS8qIEZ1bmMgYWxpZ25tZW50LiAgKi8KKyAgNCwJCQkJ CS8qIFNtYWxsIHVucm9sbCBsaW1pdC4gICovCisgIDIsCQkJCQkvKiBTbWFsbCB1bnJvbGwgZmFj dG9yLiAgKi8KIH07CiAKICAgLyogQlRWRVIxIGhhcyBvcHRpbWl6ZWQgUkVQIGluc3RydWN0aW9u IGZvciBtZWRpdW0gc2l6ZWQgYmxvY2tzLCBidXQgZm9yCkBAIC0yNDM0LDYgKzI0NzIsOCBAQCBj b25zdCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzIGJ0dmVyMV9jb3N0ID0gewogICAiMTY6ODo4IiwJ CQkJLyogSnVtcCBhbGlnbm1lbnQuICAqLwogICAiMDowOjgiLAkJCQkvKiBMYWJlbCBhbGlnbm1l bnQuICAqLwogICAiMTEiLAkJCQkJLyogRnVuYyBhbGlnbm1lbnQuICAqLworICA0LAkJCQkJLyog U21hbGwgdW5yb2xsIGxpbWl0LiAgKi8KKyAgMiwJCQkJCS8qIFNtYWxsIHVucm9sbCBmYWN0b3Iu ICAqLwogfTsKIAogc3RhdGljIHN0cmluZ29wX2FsZ3MgYnR2ZXIyX21lbWNweVsyXSA9IHsKQEAg LTI1NDQsNiArMjU4NCw4IEBAIGNvbnN0IHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgYnR2ZXIyX2Nv c3QgPSB7CiAgICIxNjo4OjgiLAkJCQkvKiBKdW1wIGFsaWdubWVudC4gICovCiAgICIwOjA6OCIs CQkJCS8qIExhYmVsIGFsaWdubWVudC4gICovCiAgICIxMSIsCQkJCQkvKiBGdW5jIGFsaWdubWVu dC4gICovCisgIDQsCQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJLyog U21hbGwgdW5yb2xsIGZhY3Rvci4gICovCiB9OwogCiBzdGF0aWMgc3RyaW5nb3BfYWxncyBwZW50 aXVtNF9tZW1jcHlbMl0gPSB7CkBAIC0yNjUzLDYgKzI2OTUsOCBAQCBzdHJ1Y3QgcHJvY2Vzc29y X2Nvc3RzIHBlbnRpdW00X2Nvc3QgPSB7CiAgIE5VTEwsCQkJCQkvKiBKdW1wIGFsaWdubWVudC4g ICovCiAgIE5VTEwsCQkJCQkvKiBMYWJlbCBhbGlnbm1lbnQuICAqLwogICBOVUxMLAkJCQkJLyog RnVuYyBhbGlnbm1lbnQuICAqLworICA0LAkJCQkJLyogU21hbGwgdW5yb2xsIGxpbWl0LiAgKi8K KyAgMiwJCQkJCS8qIFNtYWxsIHVucm9sbCBmYWN0b3IuICAqLwogfTsKIAogc3RhdGljIHN0cmlu Z29wX2FsZ3Mgbm9jb25hX21lbWNweVsyXSA9IHsKQEAgLTI3NjUsNiArMjgwOSw4IEBAIHN0cnVj dCBwcm9jZXNzb3JfY29zdHMgbm9jb25hX2Nvc3QgPSB7CiAgIE5VTEwsCQkJCQkvKiBKdW1wIGFs aWdubWVudC4gICovCiAgIE5VTEwsCQkJCQkvKiBMYWJlbCBhbGlnbm1lbnQuICAqLwogICBOVUxM LAkJCQkJLyogRnVuYyBhbGlnbm1lbnQuICAqLworICA0LAkJCQkJLyogU21hbGwgdW5yb2xsIGxp bWl0LiAgKi8KKyAgMiwJCQkJCS8qIFNtYWxsIHVucm9sbCBmYWN0b3IuICAqLwogfTsKIAogc3Rh dGljIHN0cmluZ29wX2FsZ3MgYXRvbV9tZW1jcHlbMl0gPSB7CkBAIC0yODc1LDYgKzI5MjEsOCBA QCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzIGF0b21fY29zdCA9IHsKICAgIjE2Ojg6OCIsCQkJCS8q IEp1bXAgYWxpZ25tZW50LiAgKi8KICAgIjA6MDo4IiwJCQkJLyogTGFiZWwgYWxpZ25tZW50LiAg Ki8KICAgIjE2IiwJCQkJCS8qIEZ1bmMgYWxpZ25tZW50LiAgKi8KKyAgNCwJCQkJCS8qIFNtYWxs IHVucm9sbCBsaW1pdC4gICovCisgIDIsCQkJCQkvKiBTbWFsbCB1bnJvbGwgZmFjdG9yLiAgKi8K IH07CiAKIHN0YXRpYyBzdHJpbmdvcF9hbGdzIHNsbV9tZW1jcHlbMl0gPSB7CkBAIC0yOTg1LDYg KzMwMzMsOCBAQCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzIHNsbV9jb3N0ID0gewogICAiMTY6ODo4 IiwJCQkJLyogSnVtcCBhbGlnbm1lbnQuICAqLwogICAiMDowOjgiLAkJCQkvKiBMYWJlbCBhbGln bm1lbnQuICAqLwogICAiMTYiLAkJCQkJLyogRnVuYyBhbGlnbm1lbnQuICAqLworICA0LAkJCQkJ LyogU21hbGwgdW5yb2xsIGxpbWl0LiAgKi8KKyAgMiwJCQkJCS8qIFNtYWxsIHVucm9sbCBmYWN0 b3IuICAqLwogfTsKIAogc3RhdGljIHN0cmluZ29wX2FsZ3MgdHJlbW9udF9tZW1jcHlbMl0gPSB7 CkBAIC0zMTA5LDYgKzMxNTksOCBAQCBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzIHRyZW1vbnRfY29z dCA9IHsKICAgIjE2OjExOjgiLAkJCQkvKiBKdW1wIGFsaWdubWVudC4gICovCiAgICIwOjA6OCIs CQkJCS8qIExhYmVsIGFsaWdubWVudC4gICovCiAgICIxNiIsCQkJCQkvKiBGdW5jIGFsaWdubWVu dC4gICovCisgIDQsCQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJLyog U21hbGwgdW5yb2xsIGZhY3Rvci4gICovCiB9OwogCiBzdGF0aWMgc3RyaW5nb3BfYWxncyBpbnRl bF9tZW1jcHlbMl0gPSB7CkBAIC0zMjE5LDYgKzMyNzEsOCBAQCBzdHJ1Y3QgcHJvY2Vzc29yX2Nv c3RzIGludGVsX2Nvc3QgPSB7CiAgICIxNjo4OjgiLAkJCQkvKiBKdW1wIGFsaWdubWVudC4gICov CiAgICIwOjA6OCIsCQkJCS8qIExhYmVsIGFsaWdubWVudC4gICovCiAgICIxNiIsCQkJCQkvKiBG dW5jIGFsaWdubWVudC4gICovCisgIDQsCQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLwor ICAyLAkJCQkJLyogU21hbGwgdW5yb2xsIGZhY3Rvci4gICovCiB9OwogCiAvKiBsdWppYXp1aV9j b3N0IHNob3VsZCBwcm9kdWNlIGNvZGUgdHVuZWQgZm9yIFpIQU9YSU4gbHVqaWF6dWkgQ1BVLiAg Ki8KQEAgLTMzMzQsNiArMzM4OCw4IEBAIHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgbHVqaWF6dWlf Y29zdCA9IHsKICAgIjE2OjExOjgiLAkJCQkvKiBKdW1wIGFsaWdubWVudC4gICovCiAgICIwOjA6 OCIsCQkJCS8qIExhYmVsIGFsaWdubWVudC4gICovCiAgICIxNiIsCQkJCQkvKiBGdW5jIGFsaWdu bWVudC4gICovCisgIDQsCQkJCQkvKiBTbWFsbCB1bnJvbGwgbGltaXQuICAqLworICAyLAkJCQkJ LyogU21hbGwgdW5yb2xsIGZhY3Rvci4gICovCiB9OwogCiAvKiBHZW5lcmljIHNob3VsZCBwcm9k dWNlIGNvZGUgdHVuZWQgZm9yIENvcmUtaTcgKGFuZCBuZXdlciBjaGlwcykKQEAgLTM0NTMsNiAr MzUwOSw4IEBAIHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgZ2VuZXJpY19jb3N0ID0gewogICAiMTY6 MTE6OCIsCQkJCS8qIEp1bXAgYWxpZ25tZW50LiAgKi8KICAgIjA6MDo4IiwJCQkJLyogTGFiZWwg YWxpZ25tZW50LiAgKi8KICAgIjE2IiwJCQkJCS8qIEZ1bmMgYWxpZ25tZW50LiAgKi8KKyAgNCwJ CQkJCS8qIFNtYWxsIHVucm9sbCBsaW1pdC4gICovCisgIDIsCQkJCQkvKiBTbWFsbCB1bnJvbGwg ZmFjdG9yLiAgKi8KIH07CiAKIC8qIGNvcmVfY29zdCBzaG91bGQgcHJvZHVjZSBjb2RlIHR1bmVk IGZvciBDb3JlIGZhbWlsbHkgb2YgQ1BVcy4gICovCkBAIC0zNTc5LDUgKzM2MzcsNyBAQCBzdHJ1 Y3QgcHJvY2Vzc29yX2Nvc3RzIGNvcmVfY29zdCA9IHsKICAgIjE2OjExOjgiLAkJCQkvKiBKdW1w IGFsaWdubWVudC4gICovCiAgICIwOjA6OCIsCQkJCS8qIExhYmVsIGFsaWdubWVudC4gICovCiAg ICIxNiIsCQkJCQkvKiBGdW5jIGFsaWdubWVudC4gICovCisgIDQsCQkJCQkvKiBTbWFsbCB1bnJv bGwgbGltaXQuICAqLworICAyLAkJCQkJLyogU21hbGwgdW5yb2xsIGZhY3Rvci4gICovCiB9Owog CmRpZmYgLS1naXQgYS9nY2MvZG9jL2djYy9nY2MtY29tbWFuZC1vcHRpb25zL21hY2hpbmUtZGVw ZW5kZW50LW9wdGlvbnMveDg2LW9wdGlvbnMucnN0IGIvZ2NjL2RvYy9nY2MvZ2NjLWNvbW1hbmQt b3B0aW9ucy9tYWNoaW5lLWRlcGVuZGVudC1vcHRpb25zL3g4Ni1vcHRpb25zLnJzdAppbmRleCA2 ZjAxNWU5ZTk2YS4uNWUxOGZkNzdmODcgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvZ2NjL2djYy1jb21t YW5kLW9wdGlvbnMvbWFjaGluZS1kZXBlbmRlbnQtb3B0aW9ucy94ODYtb3B0aW9ucy5yc3QKKysr IGIvZ2NjL2RvYy9nY2MvZ2NjLWNvbW1hbmQtb3B0aW9ucy9tYWNoaW5lLWRlcGVuZGVudC1vcHRp b25zL3g4Ni1vcHRpb25zLnJzdApAQCAtMTYxNCwzICsxNjE0LDkgQEAgb24geDg2LTY0IHByb2Nl c3NvcnMgaW4gNjQtYml0IGVudmlyb25tZW50cy4KIC4uIG9wdGlvbjo6IC1tZGlyZWN0LWV4dGVy bi1hY2Nlc3MKIAogICBEZWZhdWx0IHNldHRpbmc7IG92ZXJyaWRlcyA6b3B0aW9uOmAtbW5vLWRp cmVjdC1leHRlcm4tYWNjZXNzYC4KKworLi4gb3B0aW9uOjogLW11bnJvbGwtb25seS1zbWFsbC1s b29wcworICBDb250cm9scyBjb25zZXJ2YXRpdmUgc21hbGwgbG9vcCB1bnJvbGxpbmcuIEl0IGlz IGRlZmF1bHQgZW5iYWxlZCBieQorICBPMiwgYW5kIHVucm9sbHMgbG9vcCB3aXRoIGxlc3MgdGhh biA0IGluc25zIGJ5IDEgdGltZS4gRXhwbGljaXQKKyAgLWZbbm8tXXVucm9sbC1bYWxsLV1sb29w cyB3b3VsZCBkaXNhYmxlIHRoaXMgZmxhZyB0byBhdm9pZCBhbnkKKyAgdW5pbnRlbmRlZCB1bnJv bGxpbmcgYmVoYXZpb3IgdGhhdCB1c2VyIGRvZXMgbm90IHdhbnQuCmRpZmYgLS1naXQgYS9nY2Mv ZG9jL2djYy9nY2MtY29tbWFuZC1vcHRpb25zL29wdGlvbi1zdW1tYXJ5LnJzdCBiL2djYy9kb2Mv Z2NjL2djYy1jb21tYW5kLW9wdGlvbnMvb3B0aW9uLXN1bW1hcnkucnN0CmluZGV4IGI5MGI2NjAw ZDcwLi4wMjg5OGZiNjVjZCAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9nY2MvZ2NjLWNvbW1hbmQtb3B0 aW9ucy9vcHRpb24tc3VtbWFyeS5yc3QKKysrIGIvZ2NjL2RvYy9nY2MvZ2NjLWNvbW1hbmQtb3B0 aW9ucy9vcHRpb24tc3VtbWFyeS5yc3QKQEAgLTE0OTAsNyArMTQ5MCw4IEBAIGluIHRoZSBmb2xs b3dpbmcgc2VjdGlvbnMuCiAgIDpvcHRpb246YC1tZ2VuZXJhbC1yZWdzLW9ubHlgICA6b3B0aW9u OmAtbWNhbGwtbXMyc3lzdi14bG9ndWVzYCA6b3B0aW9uOmAtbXJlbGF4LWNtcHhjaGctbG9vcGAg fGdvbHwKICAgOm9wdGlvbjpgLW1pbmRpcmVjdC1icmFuY2g9Y2hvaWNlYCAgOm9wdGlvbjpgLW1m dW5jdGlvbi1yZXR1cm49Y2hvaWNlYCB8Z29sfAogICA6b3B0aW9uOmAtbWluZGlyZWN0LWJyYW5j aC1yZWdpc3RlcmAgOm9wdGlvbjpgLW1oYXJkZW4tc2xzPWNob2ljZWAgfGdvbHwKLSAgOm9wdGlv bjpgLW1pbmRpcmVjdC1icmFuY2gtY3MtcHJlZml4YCA6b3B0aW9uOmAtbW5lZWRlZGAgOm9wdGlv bjpgLW1uby1kaXJlY3QtZXh0ZXJuLWFjY2Vzc2AKKyAgOm9wdGlvbjpgLW1pbmRpcmVjdC1icmFu Y2gtY3MtcHJlZml4YCA6b3B0aW9uOmAtbW5lZWRlZGAgOm9wdGlvbjpgLW1uby1kaXJlY3QtZXh0 ZXJuLWFjY2Vzc2AgfGdvbHwKKyAgOm9wdGlvbjpgLW11bnJvbGwtb25seS1zbWFsbC1sb29wc2AK IAogICAqeDg2IFdpbmRvd3MgT3B0aW9ucyoKIApkaWZmIC0tZ2l0IGEvZ2NjL2xvb3AtaW5pdC5j YyBiL2djYy9sb29wLWluaXQuY2MKaW5kZXggYjllMDc5NzNkZDYuLjk3ODllZmExZTExIDEwMDY0 NAotLS0gYS9nY2MvbG9vcC1pbml0LmNjCisrKyBiL2djYy9sb29wLWluaXQuY2MKQEAgLTU2NSw5 ICs1NjUsMTIgQEAgcHVibGljOgogICB7fQogCiAgIC8qIG9wdF9wYXNzIG1ldGhvZHM6ICovCi0g IGJvb2wgZ2F0ZSAoZnVuY3Rpb24gKikgZmluYWwgb3ZlcnJpZGUKKyAgYm9vbCBnYXRlIChmdW5j dGlvbiAqZnVuKSBmaW5hbCBvdmVycmlkZQogICAgIHsKLSAgICAgIHJldHVybiAoZmxhZ191bnJv bGxfbG9vcHMgfHwgZmxhZ191bnJvbGxfYWxsX2xvb3BzIHx8IGNmdW4tPmhhc191bnJvbGwpOwor ICAgICAgcmV0dXJuIChmbGFnX3Vucm9sbF9sb29wcyB8fCBmbGFnX3Vucm9sbF9hbGxfbG9vcHMg fHwgY2Z1bi0+aGFzX3Vucm9sbAorCSAgICAgIHx8ICh0YXJnZXRtLmxvb3BfdW5yb2xsX2FkanVz dAorCQkgICYmIG9wdGltaXplID49IDIKKwkJICAmJiBvcHRpbWl6ZV9mdW5jdGlvbl9mb3Jfc3Bl ZWRfcCAoZnVuKSkpOwogICAgIH0KIAogICB1bnNpZ25lZCBpbnQgZXhlY3V0ZSAoZnVuY3Rpb24g KikgZmluYWwgb3ZlcnJpZGU7CkBAIC01ODMsNyArNTg2LDggQEAgcGFzc19ydGxfdW5yb2xsX2xv b3BzOjpleGVjdXRlIChmdW5jdGlvbiAqZnVuKQogICAgICAgaWYgKGR1bXBfZmlsZSkKIAlkZl9k dW1wIChkdW1wX2ZpbGUpOwogCi0gICAgICBpZiAoZmxhZ191bnJvbGxfbG9vcHMpCisgICAgICBp ZiAoZmxhZ191bnJvbGxfbG9vcHMKKwkgIHx8IHRhcmdldG0ubG9vcF91bnJvbGxfYWRqdXN0KQog CWZsYWdzIHw9IFVBUF9VTlJPTEw7CiAgICAgICBpZiAoZmxhZ191bnJvbGxfYWxsX2xvb3BzKQog CWZsYWdzIHw9IFVBUF9VTlJPTExfQUxMOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvZ3VhbGl0eS9sb29wLTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2d1YWxpdHkvbG9vcC0x LmMKaW5kZXggMWIxZjZkMzIyNzEuLmEzMmVhNDQ1YTNmIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1 aXRlL2djYy5kZy9ndWFsaXR5L2xvb3AtMS5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2d1 YWxpdHkvbG9vcC0xLmMKQEAgLTEsNSArMSw3IEBACiAvKiB7IGRnLWRvIHJ1biB9ICovCiAvKiB7 IGRnLW9wdGlvbnMgIi1mbm8tdHJlZS1zY2V2LWNwcm9wIC1mbm8tdHJlZS12ZWN0b3JpemUgLWci IH0gKi8KKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItbW5vLXVucm9sbC1vbmx5LXNtYWxs LWxvb3BzIiB7IHRhcmdldCBpYTMyIH0gfSAqLworCiAKICNpbmNsdWRlICIuLi9ub3AuaCIKIApk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4NjI3MC5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4NjI3MC5jCmluZGV4IDgxODQxZWY1YmQ3Li5j YmM5ZmJiMDQ1MCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4 NjI3MC5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODYyNzAuYwpAQCAt MSw1ICsxLDUgQEAKIC8qIHsgZGctZG8gY29tcGlsZSB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1P MiIgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1uby11bnJvbGwtb25seS1zbWFsbC1sb29w cyIgfSAqLwogCiBpbnQgKmE7CiBsb25nIGxlbjsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByOTMwMDIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByOTMwMDIuYwppbmRleCAwMjQ4ZmNjMDBhNS4uZjc1YTg0N2Y3NWQgMTAwNjQ0Ci0tLSBhL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTMwMDIuYworKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjkzMDAyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBQUiB0YXJnZXQv OTMwMDIgKi8KIC8qIHsgZGctZG8gY29tcGlsZSB9ICovCi0vKiB7IGRnLW9wdGlvbnMgIi1PMiIg fSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1uby11bnJvbGwtb25seS1zbWFsbC1sb29wcyIg fSAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiY21wXFteXG5ccl0qLTEi IH0gfSAqLwogCiB2b2xhdGlsZSBpbnQgc2luazsKLS0gCjIuMTguMQoK --000000000000b83c0105ed67a411--