From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6259 invoked by alias); 22 Jan 2013 20:27:52 -0000 Received: (qmail 6212 invoked by uid 22791); 22 Jan 2013 20:27:49 -0000 X-SWARE-Spam-Status: No, hits=-3.7 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,TW_EQ X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 22 Jan 2013 20:27:11 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1TxkR4-0003Eh-G5 from Catherine_Moore@mentor.com ; Tue, 22 Jan 2013 12:27:10 -0800 Received: from SVR-ORW-FEM-04.mgc.mentorg.com ([147.34.97.41]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 22 Jan 2013 12:27:10 -0800 Received: from NA-MBX-01.mgc.mentorg.com ([169.254.1.207]) by SVR-ORW-FEM-04.mgc.mentorg.com ([147.34.97.41]) with mapi id 14.01.0289.001; Tue, 22 Jan 2013 12:27:08 -0800 From: "Moore, Catherine" To: Richard Sandiford CC: "gcc-patches@gcc.gnu.org" , "Rozycki, Maciej" , "Moore, Catherine" Subject: RE: FW: [PATCH] [MIPS] microMIPS gcc support Date: Tue, 22 Jan 2013 20:27:00 -0000 Message-ID: References: <87y5mfjm4c.fsf@talisman.home> In-Reply-To: Content-Type: multipart/mixed; boundary="_007_FD3DCEAC5B03E9408544A1E416F11242987B49BFNAMBX01mgcmento_" MIME-Version: 1.0 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 X-SW-Source: 2013-01/txt/msg01118.txt.bz2 --_007_FD3DCEAC5B03E9408544A1E416F11242987B49BFNAMBX01mgcmento_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 56870 And this time with the patches attached... Sorry > -----Original Message----- > From: Moore, Catherine > Sent: Tuesday, January 22, 2013 3:25 PM > To: Richard Sandiford > Cc: gcc-patches@gcc.gnu.org; Rozycki, Maciej; Moore, Catherine > Subject: RE: FW: [PATCH] [MIPS] microMIPS gcc support >=20 > Hi Richard, > I hope that I have addressed all of your comments in this cleaned up patc= h. > There are a couple of items that have been omitted that I plan to submit = as > follow-on patches. The use of jraddiusp and the use of short delay slots= have > both been deferred. You had suggested a function named > mips_get_compression_name but I did not see where this was used. It's > been omitted for now. I cleaned up most of the gcc.target/mips tests for > microMIPS, but some of the MIPS16-specific tests will fail. It looks lik= e an > overhaul of mips.exp may be required and that is beyond the scope of this > patch. > Let me know what you think. I'll submit the optimizations once the base > patch is approved. > Thanks, > Catherine >=20 > > -----Original Message----- > > From: Richard Sandiford [mailto:rdsandiford@googlemail.com] > > Sent: Thursday, July 19, 2012 8:46 PM > > To: Moore, Catherine > > Cc: gcc-patches@gcc.gnu.org > > Subject: Re: FW: [PATCH] [MIPS] microMIPS gcc support > > > > "Moore, Catherine" writes: > > > Forgot to copy the list ... > > > > Same with my reply... > > > > > Here is the updated microMIPS patch. It's been a very long time (two > > > years!) since I posted the original. Please let me know what we're > > > going to need to do to get this committed. > > > > This is looking better. At least that huge if statement in > > mips_adjust_insn_length (IIRC) is gone :-) > > > > -----------------------------------------------------------------------= -- > > @itemx -mno-interlink-mips16 > > @opindex minterlink-mips16 > > @opindex mno-interlink-mips16 > > -Require (do not require) that non-MIPS16 code be link-compatible with > > -MIPS16 code. > > +Require (do not require) that non-MIPS16/non-microMIPS code be > > +link-compatible with MIPS16/microMIPS code. > > > > -For example, non-MIPS16 code cannot jump directly to MIPS16 code; > > +For example, non-MIPS16/non-microMIPS code cannot jump directly to > > +MIPS16/microMIPS code; > > it must either use a call or an indirect jump. @option{-minterlink-mi= ps16} > > therefore disables direct jumps unless GCC knows that the target of the= - > > jump is not MIPS16. > > +jump is not MIPS16/non microMIPS. > > -----------------------------------------------------------------------= -- > > > > This doesn't read very well. Let's add a -minterlink-compressed option= and > > treat -mno-interlink-mips16 as an alias of it. So: > > > > -----------------------------------------------------------------------= -- > > @item -minterlink-compressed > > @itemx -mno-interlink-compressed > > @opindex minterlink-compressed > > @opindex mno-interlink-compressed > > Require (do not require) that code using the standard (uncompressed) > MIPS > > ISA be link-compatible with MIPS16 and microMIPS code. > > > > For example, non-MIPS16 code cannot jump directly to MIPS16 code; it > must > > either use a call or an indirect jump. The same applies to non-microMI= PS > > jumps to microMIPS code. @option{-minterlink-compressed} therefore > > disables direct jumps unless GCC knows that the target of the jump is n= ot > > compressed. > > > > @item -minterlink-mips16 > > @itemx -mno-interlink-mips16 > > @opindex minterlink-mips16 > > @opindex mno-interlink-mips16 > > Aliases of @option{-minterlink-compressed} and @option{-mno-interlink- > > compressed}. These options predate the mipsMIPS ASE and are retained > for > > backwards compatiblity. > > -----------------------------------------------------------------------= -- > > > > Let's also make TARGET_INTERLINK_COMPRESSED the internal name. > > > > -----------------------------------------------------------------------= -- > > +@item -mmicromips > > +@itemx -mno-micromips > > +@opindex mmicromips > > +@opindex mno-mmicromips > > +Generate (do not generate) microMIPS code. If GCC is targetting a > > +MIPS32 or MIPS64 architecture, it will make use of the microMIPS ASE@. > > -----------------------------------------------------------------------= -- > > > > Looks like excess cut-&-paste from the MIPS16 version. The point of the > > MIPS16 documentation is to distinguish between the original MIPS16 "ASE" > > and MIPS16e. There's no such distinction here. > > > > -----------------------------------------------------------------------= -- > > +@item -mjals > > +@itemx -mno-jals > > +@opindex mjals > > +@opindex mno-jals > > +Generate (do not generate) the @code{jals} instruction for microMIPS by > > +recognizing that the branch delay slot instruction can be 16 bits. > > +This implies that the funciton call cannot switch the current mode > > +during the linking stage, because we don't have the @code{jalxs} > > +instruction that supports 16-bit branch delay slot instructions. > > -----------------------------------------------------------------------= -- > > > > typo: function > > > > The assumption we're making seems to be that calls from microMIPS code > > cannot go to non-microMIPS code. If so, let's make that the option ins= tead. > > The above is too low-level. > > > > With analogy to -minterlink-compressed, the option could be -minterlink- > > uncompressed/-mno-interlink-uncompressed, with the default being - > > minterlink-uncompressed. > > > > -----------------------------------------------------------------------= -- > > +@item YC > > +For MIPS, it is the same as the constraint @code{R}. For microMIPS, it > > +matches an address within a 12-bit offset that can be used for > > +microMIPS @code{ll}, @code{sc}, etc. > > + > > +@item YD > > +For MIPS, it is the same as the constraint @code{p} For microMIPS, it > > +matches a 12-bit offsest address. > > + > > +@item YE > > +A singler register memory operand. > > -----------------------------------------------------------------------= -- > > > > "For MIPS" is a bit vague (it actually applies to MIPS16 too). > > So how about: > > > > -----------------------------------------------------------------------= -- > > @item YC > > when compiling microMIPS code, this constraint matches a memory > operand > > whose address is formed from a base register and a 12-bit offset. > > These operands can be used for microMIPS instructions such as @code{ll} > > and @code{sc}. When not compiling for microMIPS code, @code{YC} is > > equivalent to @code{R}. > > > > @item YD > > when compiling microMIPS code, this constraint matches an address > operand > > that is formed from a base register and a 12-bit offset. > > These operands can be used for microMIPS instructions such as > > @code{prefetch}. > > When not compiling for microMIPS code, @code{YC} is equivalent to > > @code{p}. > > -----------------------------------------------------------------------= -- > > > > No need for "YE": we have "ZR" now. I'd like to make the other constra= ints > > "Z" rather than "Y" too -- ZC and ZD -- since "Y" is really for constan= ts. > > > > -----------------------------------------------------------------------= -- > > +(define_insn "*store_word_multiple" > > + [(match_parallel 0 "" > > + [(set (match_operand:SI 1 "memory_operand") > > + (match_operand:SI 2 "register_operand"))])] > > + "TARGET_MICROMIPS > > + && umips_save_restore_pattern_p (true, operands[0])" > > + { > > + return umips_output_save_restore (true, operands[0]); > > + } > > + [(set_attr "type" "multimem") > > + (set_attr "mode" "SI") > > + (set_attr "can_delay" "no")]) > > -----------------------------------------------------------------------= -- > > > > Nitlet: local style is to use "{ return ...; }" for single-line stateme= nts and > > column-0 placement of "{" and "}" for multi-line ones. Same for rest o= f file. > > > > -----------------------------------------------------------------------= -- > > +; For lwp > > +(define_peephole2 > > + [(set (match_operand:SI 0 "umips_lwp_register" "") > > + (match_operand:SI 1 "non_volatile_mem_operand" "")) > > + (set (match_operand:SI 2 "umips_lwp_register" "") > > + (match_operand:SI 3 "non_volatile_mem_operand" ""))] > > + "TARGET_MICROMIPS > > + && ((REGNO (operands[0]) + 1 =3D=3D REGNO (operands[2]) > > + && umips_load_store_pair_p (true, false, operands[0], > > + operands[1], operands[3])) > > + || (REGNO (operands[2]) + 1 =3D=3D REGNO (operands[0]) > > + && umips_load_store_pair_p (true, true, operands[2], > > + operands[3], operands[1])))" > > + [(parallel [(set (match_dup 0) (match_dup 1)) > > + (set (match_dup 2) (match_dup 3))])] > > -----------------------------------------------------------------------= -- > > > > Please split out this: > > > > && ((REGNO (operands[0]) + 1 =3D=3D REGNO (operands[2]) > > && umips_load_store_pair_p (true, false, operands[0], > > operands[1], operands[3])) > > || (REGNO (operands[2]) + 1 =3D=3D REGNO (operands[0]) > > && umips_load_store_pair_p (true, true, operands[2], > > operands[3], operands[1]))) > > > > into a function: > > > > bool > > umips_load_store_pair_p (bool load_p, rtx reg1, rtx reg2, rtx mem1, rtx > > mem2) > > > > with the current umips_load_store_pair_p being a subroutine > > (umips_load_store_pair_p_1). > > > > -----------------------------------------------------------------------= -- > > +(define_insn "*lwp" > > + [(parallel [(set (match_operand:SI 0 "umips_lwp_register") > > + (match_operand:SI 1 "memory_operand")) > > + (set (match_operand:SI 2 "umips_lwp_register") > > + (match_operand:SI 3 "memory_operand"))])] > > + > > + "TARGET_MICROMIPS > > + && ((REGNO (operands[0]) + 1 =3D=3D REGNO (operands[2]) > > + && umips_load_store_pair_p (true, false, operands[0], > > + operands[1], operands[3])) > > + || (REGNO (operands[2]) + 1 =3D=3D REGNO (operands[0]) > > + && umips_load_store_pair_p (true, true, operands[2], > > + operands[3], operands[1])))" > > + { > > + if (REGNO (operands[0]) + 1 =3D=3D REGNO (operands[2])) > > + return umips_output_load_store_pair (true, operands[0], > operands[1]); > > + else > > + return umips_output_load_store_pair (true, operands[2], > > +operands[3]); > > + } > > + [(set_attr "type" "load") > > + (set_attr "mode" "SI") > > + (set_attr "can_delay" "no")]) > > -----------------------------------------------------------------------= -- > > > > Same with the output: > > > > void > > umips_output_load_store_pair (bool load_p, rtx reg1, rtx reg2, > > rtx mem1, rtx mem2) > > > > Why do only the stores require non_volatile_mem_operand? It looks like > > you could be reordering loads from volatile memory otherwise. > > > > -----------------------------------------------------------------------= -- > > +; For jraddiusp > > +(define_insn "mips_jraddiusp" > > + [(parallel [(return) > > + (use (reg:SI 31)) > > + (set (reg:SI 29) > > + (plus:SI (reg:SI 29) > > + (match_operand 0 "const_int_operand")))])] > > + "TARGET_MICROMIPS" > > + "jraddiusp\t%0" > > + [(set_attr "type" "trap") > > + (set_attr "mode" "SI") > > + (set_attr "can_delay" "no")]) > > -----------------------------------------------------------------------= -- > > > > Redundant comment. > > > > -----------------------------------------------------------------------= -- > > +; For movep > > +(define_peephole2 > > + [(set (match_operand:SI 0 "register_operand" "") > > + (match_operand:SI 1 "movep_si_operand" "")) > > + (set (match_operand:SI 2 "register_operand" "") > > + (match_operand:SI 3 "movep_si_operand" ""))] > > + "TARGET_MICROMIPS > > + && umips_movep_target_p (operands[0], operands[2])" > > + [(parallel [(set (match_dup 0) (match_dup 1)) > > + (set (match_dup 2) (match_dup 3))])] > > +) > > + > > +(define_peephole2 > > + [(set (match_operand:SI 0 "register_operand" "") > > + (match_operand:SI 1 "movep_si_operand" "")) > > + (set (match_operand:SF 2 "register_operand" "") > > + (match_operand:SF 3 "const_0_sf_operand" ""))] > > + "TARGET_MICROMIPS > > + && umips_movep_target_p (operands[0], operands[2])" > > + [(parallel [(set (match_dup 0) (match_dup 1)) > > + (set (match_dup 2) (match_dup 3))])] > > +) > > + > > +(define_peephole2 > > + [(set (match_operand:SF 0 "register_operand" "") > > + (match_operand:SF 1 "const_0_sf_operand" "")) > > + (set (match_operand:SI 2 "register_operand" "") > > + (match_operand:SI 3 "movep_si_operand" ""))] > > + "TARGET_MICROMIPS > > + && umips_movep_target_p (operands[0], operands[2])" > > + [(parallel [(set (match_dup 0) (match_dup 1)) > > + (set (match_dup 2) (match_dup 3))])] > > +) > > + > > +(define_peephole2 > > + [(set (match_operand:SF 0 "register_operand" "") > > + (match_operand:SF 1 "const_0_sf_operand" "")) > > + (set (match_operand:SF 2 "register_operand" "") > > + (match_operand:SF 3 "const_0_sf_operand" ""))] > > + "TARGET_MICROMIPS > > + && umips_movep_target_p (operands[0], operands[2])" > > + [(parallel [(set (match_dup 0) (match_dup 1)) > > + (set (match_dup 2) (match_dup 3))])] > > +) > > + > > +(define_insn "*movep" > > + [(parallel [(set (match_operand:MOVEP1 0 "register_operand") > > + (match_operand:MOVEP1 1 > > "movep__operand")) > > + (set (match_operand:MOVEP2 2 "register_operand") > > + (match_operand:MOVEP2 3 > > "movep__operand"))])] > > + "TARGET_MICROMIPS > > + && umips_movep_target_p (operands[0], operands[2])" > > +{ > > + if (REGNO (operands[0]) < REGNO (operands[2])) > > + return "movep\t%0,%2,%z1,%z3"; > > + else > > + return "movep\t%2,%0,%z3,%z1"; > > +} > > + [(set_attr "type" "move") > > + (set_attr "mode" "") > > + (set_attr "can_delay" "no")]) > > -----------------------------------------------------------------------= -- > > > > Seems to be a mismatch between the peepholes (which only accept 0.0f > for > > SFmode) and the insn (which allows registers too). Can't you use MOVEP1 > > and MOVEP2 for the peepholes too? > > > > -----------------------------------------------------------------------= -- > > (define_memory_constraint "R" > > "An address that can be used in a non-macro load or store." > > (and (match_code "mem") > > - (match_test "mips_address_insns (XEXP (op, 0), mode, false) =3D= =3D 1"))) > > + (match_test "mips_address_insns (XEXP (op, 0), mode, false)"))) > > -----------------------------------------------------------------------= -- > > > > No, this defeats the purpose of "R", which is supposed to disallow addr= ess > > that require assembly macros. > > > > -----------------------------------------------------------------------= -- > > +(define_memory_constraint "YC" > > + "For MIPS, it is the same as the constraint R. For microMIPS, it ma= tches > > + an address within a 12-bit offset that can be used in ll, sc, etc." > > + (and (match_code "mem") > > + (ior (and (match_test "TARGET_MICROMIPS") > > + (match_test "umips_address_insns (XEXP (op, 0), mode, > > false)")) > > + (match_test "mips_address_insns (XEXP (op, 0), mode, false)")))) > > + > > +(define_address_constraint "YD" > > + "@internal > > + For MIPS, it is the same as the constraint p. For microMIPS, it ma= tches > > + a 12-bit offset address." > > + (ior (and (match_test "TARGET_MICROMIPS") > > + (match_test "umips_address_insns (op, mode, false)")) > > + (match_test "mips_address_insns (op, mode, false)"))) > > -----------------------------------------------------------------------= -- > > > > Is YD internal or not? We should remove it from the docs if so, otherw= ise > the > > @internal is wrong. > > > > Please keep the doc strings exactly the same as the .texi version (incl= uding > @ > > mark-up). I think the idea was that at some glorious time in the futur= e, > we'd > > be able to auto-generate the .texi parts from the .md doc strings. > > > > -----------------------------------------------------------------------= -- > > +(define_predicate "gpr_operand" > > + (and (match_code "reg") > > + (match_test "GP_REG_P (REGNO (op))"))) > > -----------------------------------------------------------------------= -- > > > > This is d_operand. > > > > -----------------------------------------------------------------------= -- > > +(define_predicate "umips_register" > > + (and (match_code "reg") > > + (match_test "M16_REG_P (REGNO (op))"))) > > -----------------------------------------------------------------------= -- > > > > I think I'd prefer to call the predicate m16_register too, for consiste= ncy. > > > > -----------------------------------------------------------------------= -- > > +(define_predicate "umips_andi16_operand" > > + (and (match_code "const") > > + (match_test "UMIPS_ANDI16_IMM (INTVAL (op))"))) > > -----------------------------------------------------------------------= -- > > > > Looks like this should be "const_int" instead. Same for the other cons= tants. > > It seems on face value like some parts of the patch weren't exercised > > because of this. > > > > -----------------------------------------------------------------------= -- > > +(define_predicate "umips_add_uimm5" > > + (and (match_code "const") > > + (match_test "IN_RANGE (INTVAL (op), -8, 7)"))) > > -----------------------------------------------------------------------= -- > > > > Looks like a signed rather than unsigned immediate. Should this be > > "umips_add_imm5" instead? > > > > -----------------------------------------------------------------------= -- > > +(define_predicate "umips_addiur2_imm3" > > + (and (match_code "const") > > + (ior (match_test "INTVAL(op) =3D=3D 1") > > + (ior (match_test "INTVAL(op) =3D=3D 4") > > + (ior (match_test "INTVAL(op) =3D=3D 8") > > + (ior (match_test "INTVAL(op) =3D=3D 12") > > + (ior (match_test "INTVAL(op) =3D=3D 16") > > + (ior (match_test "INTVAL(op) =3D=3D 20") > > + (ior (match_test "INTVAL(op) =3D=3D 24") > > + (match_test "INTVAL(op) =3D=3D -1")))))))))) > > -----------------------------------------------------------------------= -- > > > > (ior ...) can take any number of operands these days, so no need for all > those > > ")"s. Space after INTVAL. > > > > -----------------------------------------------------------------------= -- > > +(define_predicate "umips_lw16_memref" > > + (and (match_code "plus") > > + (match_operand 0 "umips_register" "")) { > > + rtx op2 =3D XEXP (op, 1); > > + > > + return (GET_CODE (op2) =3D=3D CONST_INT > > + && ((INTVAL (op2) & 3) =3D=3D 0) > > + && (IN_RANGE (INTVAL (op2), 0, 60))); > > +}) > > -----------------------------------------------------------------------= -- > > > > This tests an address, whereas it sounds from the name (and looks from > the > > later code) like it's supposed to be testing a (mem ...) instead. > > Also: > > > > (and (match_code "plus") > > (match_operand 0 "umips_register" "")) > > > > tests for something that is both a PLUS and a REG, which is never true. > > ((match_operand X ...) doesn't test XEXP (..., X).) > > > > -----------------------------------------------------------------------= -- > > +(define_predicate "const_0_si_operand" > > + (and (match_code "const_int,const_double,const_vector") > > + (match_test "op =3D=3D CONST0_RTX (SImode)"))) > > + > > +(define_predicate "const_0_sf_operand" > > + (and (match_code "const_int,const_double,const_vector") > > + (match_test "op =3D=3D CONST0_RTX (SFmode)"))) > > -----------------------------------------------------------------------= -- > > > > Should be redundant with const_0_operand. Modes should be checked at > > the match_operand level where important. > > > > -----------------------------------------------------------------------= -- > > +(define_predicate "movep_si_operand" > > + (ior (and (match_code "const_int,const_double,const_vector") > > + (match_test "op =3D=3D CONST0_RTX (SImode)")) > > + (and (match_code "reg") > > + (ior (match_test ("IN_RANGE (REGNO (op), 0, 3)")) > > + (match_test ("IN_RANGE (REGNO (op), 16, 20)")))))) > > + > > +(define_predicate "movep_sf_operand" > > + (ior (and (match_code "const_int, const_double, const_vector") > > + (match_test "op =3D=3D CONST0_RTX (SFmode)")) > > + (and (match_code "reg") > > + (ior (match_test ("IN_RANGE (REGNO (op), 0, 3)")) > > + (match_test ("IN_RANGE (REGNO (op), 16, 20)")))))) > > -----------------------------------------------------------------------= -- > > > > These two should be combined: > > > > -----------------------------------------------------------------------= -- > > (define_predicate "movep_register" > > (and (match_code "reg") > > (ior (match_test ("IN_RANGE (REGNO (op), 0, 3)")) > > (match_test ("IN_RANGE (REGNO (op), 16, 20)"))))) > > > > (define_predicate "movep_operand" > > (ior (match_operand 0 "const_0_operand") > > (match_operand 0 "movep_register"))) > > -----------------------------------------------------------------------= -- > > > > -----------------------------------------------------------------------= -- > > +(define_predicate "umips_lwp_register" > > + (and (match_code "reg") > > + (match_test "REGNO (op) <=3D GP_REG_LAST"))) > > -----------------------------------------------------------------------= -- > > > > Reundant with d_operand/gpr_operand? > > > > -----------------------------------------------------------------------= -- > > +;; Return 1 if the operand is in non-volatile memory. Note that during > > +the ;; RTL generation phase, memory_operand does not return TRUE for > > +volatile ;; memory references. So this function allows us to recognize > > +volatile ;; references where it's safe. > > +(define_predicate "non_volatile_mem_operand" > > + (not (and (and (match_code "mem") > > + (match_test "MEM_VOLATILE_P (op)")) > > + (if_then_else (match_test "reload_completed") > > + (match_operand 0 "memory_operand") > > + (if_then_else (match_test "reload_in_progress") > > + (match_test "strict_memory_address_p (mode, XEXP (op, 0))") > > + (match_test "memory_address_p (mode, XEXP (op, 0))")))))) > > -----------------------------------------------------------------------= -- > > > > This looks wrong: the whole thing is wrapped in (not ...), so it matches > > something that specifically _isn't_ a memory_operand. All that reload = stuff > > shouldn't be needed, plain: > > > > (define_predicate "non_volatile_mem_operand" > > (and (match_operand 0 "memory_operand") > > (not (match_test "MEM_VOLATILE_P (op)")))) > > > > should be OK. > > > > -----------------------------------------------------------------------= -- > > +(define_attr "umips_not" "no, yes" > > + (if_then_else (and (eq_attr "alu_type" "not") > > + (match_test "umips_two_reg (PATTERN (insn))")) > > + (const_string "yes") > > + (const_string "no"))) > > -----------------------------------------------------------------------= -- > > > > Looks odd: reg-to-reg is the only possiblity for "not". > > Should be enough to test "alu_type" against "not" directly and drop this > > attribute. > > > > -----------------------------------------------------------------------= -- > > +(define_attr "umips_arith" "no, yes" > > + (if_then_else (and (eq_attr "type" "arith") > > + (not (eq_attr "mode" "DI")) > > + (match_test "umips_three_reg_match0 (PATTERN > > (insn))")) > > + (const_string "yes") > > + (const_string "no"))) > > -----------------------------------------------------------------------= -- > > > > Well, I suppose this OK for now, but it seems odd to be hiding the > difference > > from the main patterns. Don't we want IRA+reload to optimise for this > > where possible? Or does that produce bad results? > > More below. > > > > Rather than define lots of attributes, please just use [(cond ...)] to = set the > > default directly: > > > > (define_attr "umips_short_insn" "no, yes" > > (cond [(and (eq_attr "type" "arith") > > (not (eq_attr "mode" "DI")) > > (match_test "umips_three_reg_match0 (PATTERN (insn))")) > > (const_string "yes") > > > > ...] > > (const_string "no"))) > > > > -----------------------------------------------------------------------= -- > > +(define_attr "umips_mfhi" "no, yes" > > + (if_then_else (and (eq_attr "move_type" "mfhilo") > > + (match_operand 1 "gpr_operand" "")) > > + (const_string "yes") > > + (const_string "no"))) > > -----------------------------------------------------------------------= -- > > > > Patch collision: as of a couple of days ago, we now have an "mfhi" > > "type" attribute. > > > > -----------------------------------------------------------------------= -- > > +(define_attr "umips_logicals" "no, yes" > > + (if_then_else (and (ior (eq_attr "alu_type" "and") > > + (eq_attr "alu_type" "or") > > + (eq_attr "alu_type" "xor")) > > + (match_test "umips_three_reg_match0 (PATTERN > > (insn))")) > > + (const_string "yes") > > + (const_string "no"))) > > -----------------------------------------------------------------------= -- > > > > (eq_attr "alu_type" "and,or,xor"). > > > > -----------------------------------------------------------------------= -- > > ;; Direct branch instructions have a range of [-0x20000,0x1fffc], > > - ;; relative to the address of the delay slot. If a branch is > > - ;; outside this range, we have a choice of two sequences. > > + ;; relative to the address of the delay slot. > > + ;; > > + ;; For microMIPS the range is reduced to [-0x10000,0xfffe]. > > + ;; > > + ;; If a branch is outside this range, we have a choice of two > > + ;; sequences. > > -----------------------------------------------------------------------= -- > > > > I'd prefer: > > -----------------------------------------------------------------------= -- > > ;; Direct microMIPS branch instructions have a range of > > ;; [-0x10000,0xfffe], otherwise the range is [-0x20000,0x1fffc]. > > ;; If a branch is outside this range, we have a choice of two > > ;; sequences. > > -----------------------------------------------------------------------= -- > > > > -----------------------------------------------------------------------= -- > > ;; pattern has no explicit delay slot, mips_adjust_insn_length > > ;; will add the length of the implicit nop. The values for > > ;; forward and backward branches will be different as well. > > + > > -----------------------------------------------------------------------= -- > > > > Excess whitespace. > > > > -----------------------------------------------------------------------= -- > > + (eq_attr "type" "multimem") > > + (const_int 4) > > -----------------------------------------------------------------------= -- > > > > Not necessary, 4 is the default. > > > > -----------------------------------------------------------------------= -- > > +(define_insn "*branch_equality_micromips" > > + [(set (pc) > > + (if_then_else > > + (match_operator 1 "equality_operator" > > + [(match_operand:GPR 2 "register_operand" "d") > > + (match_operand:GPR 3 "reg_or_0_operand" "dJ")]) > > + (label_ref (match_operand 0 "" "")) > > + (pc)))] > > + "TARGET_MICROMIPS" > > +{ > > + /* For a simple bnez or beqz microMIPS branch. */ > > + if (!TARGET_BRANCHLIKELY > > + && get_attr_length (insn) <=3D 8 > > + && GET_CODE (operands[3]) =3D=3D CONST_INT > > + && INTVAL (operands[3]) =3D=3D 0) > > + return mips_output_conditional_branch (insn, operands, > > + "%*b%C1z%:\t%2,%0", > > + "%*b%N1z%:\t%2,%0"); > > + > > + return mips_output_conditional_branch (insn, operands, > > + MIPS_BRANCH ("b%C1", > > "%2,%z3,%0"), > > + MIPS_BRANCH ("b%N1", > > "%2,%z3,%0")); } > > -----------------------------------------------------------------------= -- > > > > This: > > > > && GET_CODE (operands[3]) =3D=3D CONST_INT > > && INTVAL (operands[3]) =3D=3D 0) > > > > can just be: > > > > && operands[3] =3D=3D const0_rtx) > > > > Why the !TARGET_BRANCHLIKELY test? You force it off anyway in > > mips_set_mips16_micromips_mode (which I agree is a good thing) > > > > -----------------------------------------------------------------------= -- > > (define_insn "indirect_jump_" > > [(set (pc) (match_operand:P 0 "register_operand" "d"))] > > "" > > - "%*j\t%0%/" > > +{ > > + if (TARGET_MICROMIPS) > > + return "%*jr%:\t%0"; > > + else > > + return "%*j\t%0%/"; > > +} > > -----------------------------------------------------------------------= -- > > > > "jr" should be fine across the board. Same later. > > > > -----------------------------------------------------------------------= -- > > + microMIPS LWM and SWM support 12-bit offsets (from -2048 to 2047) > and > > + to preserve the maximum stack alignment, so 0x7f0 is used when > > + TARGET_MICROMIPS. > > -----------------------------------------------------------------------= -- > > > > I'd prefer: > > > > -----------------------------------------------------------------------= -- > > microMIPS LWM and SWM support 12-bit offsets (from -0x800 to 0x7ff), > > so we use a maximum of 0x7f0 for TARGET_MICROMIPS. > > -----------------------------------------------------------------------= -- > > > > (where the context already describes the alignment constraint). > > > > -----------------------------------------------------------------------= -- > > +static bool > > +mips_nocompression_decl_p (const_tree decl) > > +{ > > + if (lookup_attribute ("nocompression", DECL_ATTRIBUTES (decl)) !=3D > NULL) > > + return true; > > + > > + return (lookup_attribute ("nomips16", DECL_ATTRIBUTES (decl)) !=3D N= ULL > > + && lookup_attribute ("nomicromips", DECL_ATTRIBUTES (decl)) = !=3D > > NULL); > > +} > > ... > > +/* Similar predicates for "micromips"/"nomicromips" function attribute= s. > */ > > + > > +static bool > > +mips_micromips_decl_p (const_tree decl) > > +{ > > + return lookup_attribute ("micromips", DECL_ATTRIBUTES (decl)) !=3D > NULL; > > +} > > + > > +static bool > > +mips_nomicromips_decl_p (const_tree decl) > > +{ > > + return lookup_attribute ("nomicromips", DECL_ATTRIBUTES (decl)) !=3D > > NULL; > > +} > > + > > +/* Return true if function DECL is a microMIPS function. Return the > ambient > > + setting if DECL is null. */ > > + > > +static bool > > +mips_use_micromips_mode_p (tree decl) > > +{ > > + if (decl) > > + { > > + /* Nested functions must use the same frame pointer as their > > + parent and must therefore use the same ISA mode. */ > > + tree parent =3D decl_function_context (decl); > > + if (parent) > > + decl =3D parent; > > + if (mips_micromips_decl_p (decl)) > > + return true; > > + if (mips_nomicromips_decl_p (decl)) > > + return false; > > + } > > + return mips_base_micromips; > > +} > > -----------------------------------------------------------------------= -- > > > > To reduce the cut-&-paste here and elsewhere, I think it would be > > better to have: > > > > -----------------------------------------------------------------------= -- > > unsigned int mips_base_compression_flags; > > -----------------------------------------------------------------------= -- > > > > to replace mips_base_mips16 & mips_base_micromips and: > > > > -----------------------------------------------------------------------= -- > > /* Return the set of compression modes that are explicitly required > > by DECL. */ > > > > static unsigned int > > mips_get_compress_on_flags (tree decl) > > { > > unsigned int flags =3D 0; > > > > if (lookup_attribute ("mips16", DECL_ATTRIBUTES (decl)) !=3D NULL) > > flags |=3D MASK_MIPS16; > > > > if (lookup_attribute ("micromips", DECL_ATTRIBUTES (decl)) !=3D NULL) > > flags |=3D MASK_MICROMIPS; > > > > return flags; > > } > > > > /* Return the set of compression modes that are explicitly forbidden > > by DECL. */ > > > > static unsigned int > > mips_get_compress_off_flags (tree decl) > > { > > unsigned int flags =3D 0; > > > > if (lookup_attribute ("nocompression", DECL_ATTRIBUTES (decl)) !=3D N= ULL) > > flags |=3D MASK_MIPS16 | MASK_MICROMIPS; > > > > if (lookup_attribute ("nomips16", DECL_ATTRIBUTES (decl)) !=3D NULL) > > flags |=3D MASK_MIPS16; > > > > if (lookup_attribute ("nomicromips", DECL_ATTRIBUTES (decl)) !=3D NUL= L) > > flags |=3D MASK_MICROMIPS; > > > > return flags; > > } > > > > /* Return the compression mode that should be used for function DECL. > > Return the ambient setting if DECL is null. */ > > > > static unsigned int > > mips_get_compress_mode (tree decl) > > { > > unsigned int flags, force_on; > > > > flags =3D mips_base_compression_flags; > > if (decl) > > { > > /* Nested functions must use the same frame pointer as their > > parent and must therefore use the same ISA mode. */ > > tree parent =3D decl_function_context (decl); > > if (parent) > > decl =3D parent; > > force_on =3D mips_get_compression_on_flags (decl); > > if (force_on) > > return force_on; > > flags &=3D ~mips_get_compression_off_flags (decl); > > } > > return flags; > > } > > > > /* Return the name of the compression mode represented by target > > flags FLAGS. */ > > > > static const char * > > mips_get_compression_name (unsigned int flags) > > { > > if (flags & TARGET_MIPS16) > > return "mips16"; > > if (flags & TARGET_MICROMIPS) > > return "micromips"; > > gcc_unreachable(); > > } > > -----------------------------------------------------------------------= -- > > > > then use these instead of tests for individual mips16 or micromips > > attributes. > > > > -----------------------------------------------------------------------= -- > > switch (addr.type) > > { > > case ADDRESS_REG: > > + > > if (TARGET_MIPS16 > > && !mips16_unextended_reference_p (mode, addr.reg, > > UINTVAL (addr.offset))) > > -----------------------------------------------------------------------= -- > > > > Excess whitespace. > > > > -----------------------------------------------------------------------= -- > > +int > > +umips_address_insns (rtx x, enum machine_mode mode, bool > > might_split_p) > > +{ > > + struct mips_address_info addr; > > + int factor; > > + > > + /* BLKmode is used for single unaligned loads and stores and should > > + not count as a multiword mode. (GET_MODE_SIZE (BLKmode) is pretty > > + meaningless, so we have to single it out as a special case one way > > + or the other.) */ > > + if (mode !=3D BLKmode && might_split_p) > > + factor =3D (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / > > UNITS_PER_WORD; > > + else > > + factor =3D 1; > > + > > + if (mips_classify_address (&addr, x, mode, false)) > > + switch (addr.type) > > + { > > + case ADDRESS_REG: > > + if (!CONST_INT_P (addr.offset) > > + || INTVAL (addr.offset) < -2048 > > + || INTVAL (addr.offset) > 2047) > > + return 0; > > + > > + return factor; > > + > > + default: > > + break; > > + > > + } > > + return 0; > > +} > > -----------------------------------------------------------------------= -- > > > > Function lacks a comment. It's only use is for YC/YD, which always > > pass false for might_split_p, so this is really just a predicate > > that tests for 12-bit offset addresses. So: > > > > -----------------------------------------------------------------------= -- > > /* Return true if X is a legimate address with a 12-bit offset. > > MODE is the mode of the value being accessed. */ > > > > bool > > umips_12bit_offset_address_p (rtx x, enum machine_mode mode) > > { > > struct mips_address_info addr; > > > > return (mips_classify_address (&addr, x, mode, false) > > && addr.type =3D=3D ADDRESS_REG > > && CONST_INT_P (addr.offset) > > && IN_RANGE (INTVAL (addr.offset), -2048, 2047)); > > } > > -----------------------------------------------------------------------= -- > > > > Seems like you could reuse this elsewhere in places that also > > check for 12-bit offsets. > > > > -----------------------------------------------------------------------= -- > > +/* Return true if the insn has three micromips register operands. */ > > +int > > +umips_three_reg (rtx insn) > > +{ > > + rtx op0 =3D XEXP (insn, 0); > > + rtx op1 =3D XEXP (insn, 1); > > + rtx op2 =3D XEXP (insn, 2); > > + > > + return (op0 !=3D NULL_RTX > > + && op1 !=3D NULL_RTX > > + && op2 !=3D NULL_RTX > > + && REG_P (op0) > > + && M16_REG_P (REGNO (op0)) > > + && REG_P (op1) > > + && M16_REG_P (REGNO (op1)) > > + && REG_P (op2) > > + && M16_REG_P (REGNO (op2))); > > +} > > -----------------------------------------------------------------------= -- > > > > This doesn't look right. You pass in a complete PATTERN, > > so XEXP (insn, 1) will typically be the SET_SRC (such as a PLUS) > > and XEXP (insn, 2) usually isn't valid. > > > > I think --enable-checking=3Dyes,rtl would have tripped over the op2 > > extraction and flagged it as a problem. Could you use that option > > when testing the updated patch? > > > > Same problem with the other predicates. > > > > Please make the predicates return bool rather than int. > > > > Like I said above, I'd really prefer to see the register requirements > > modelled in the patterns directly. You could use the "enabled" to > > prevent the new alternatives from being used by non-MIPS16 code. > > > > -----------------------------------------------------------------------= -- > > + if (TARGET_MICROMIPS) > > + fprintf (asm_out_file, "\t.set\tmicromips\n"); > > + else > > + fprintf (asm_out_file, "\t.set\tnomicromips\n"); > > -----------------------------------------------------------------------= -- > > > > We need a configure test to see whether the assembler supports > > microMIPS. > > We shouldn't emit ".set\tnomicromips" if it doesn't. > > > > -----------------------------------------------------------------------= -- > > + /* When reorder or noreorder with final_squence 0, the delay slo= t will > > + be a nop, so we just use the compact version for microMIPS. */ > > + if (mips_noreorder.nesting_level =3D=3D 0 || final_sequence =3D= =3D 0) > > + putc ('c', file); > > -----------------------------------------------------------------------= -- > > > > Should just be "final_sequence =3D=3D 0". Same for '%!'. > > > > -----------------------------------------------------------------------= -- > > +static void mips_save_reg (rtx reg, rtx mem); > > -----------------------------------------------------------------------= -- > > > > Please move the functions around so that this isn't necessary. > > > > -----------------------------------------------------------------------= -- > > +/* Build microMIPS save or restore. FN is save or restore function. > > + OFFSET is the current stack offset. > > + Return true if we succeed creating save or restore. */ > > -----------------------------------------------------------------------= -- > > > > /* Consider building a microMIPS LDM or STM for the current stack frame. > > FN is mips_save_reg for stores or mips_restore_reg for loads. > > OFFSET is the offset of the first register save slot from the > > current stack pointer. > > > > Return true on success, in which case all GPRs will have been saved.= */ > > > > -----------------------------------------------------------------------= -- > > +static bool > > +umips_build_save_restore (mips_save_restore_fn fn, > > + HOST_WIDE_INT offset) > > -----------------------------------------------------------------------= -- > > > > Odd formatting. > > > > -----------------------------------------------------------------------= -- > > + unsigned int type[19] =3D {0x00010000, 0x00030000, 0x00070000, > 0x000f0000, > > + 0x001f0000, 0x003f0000, 0x007f0000, 0x00ff0000, > > + 0x40ff0000, 0x80000000, 0x80010000, 0x80030000, > > + 0x80070000, 0x800f0000, 0x801f0000, 0x803f0000, > > + 0x807f0000, 0x80ff0000, 0xc0ff0000}; > > + unsigned int encode[19] =3D {1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 17, 18, = 19, > > + 20, 21, 22, 23, 24, 25}; > > -----------------------------------------------------------------------= -- > > > > Make these static const arrays. > > > > -----------------------------------------------------------------------= -- > > + /* Try matching $16 to $31 (s0 to ra). */ > > + for (i =3D 0; i < 19; i++) > > + if ((cfun->machine->frame.mask & 0xffff0000) =3D=3D type[i]) > > + break; > > -----------------------------------------------------------------------= -- > > > > ARRAY_SIZE (type) instead of 19 (here and elsewhere). > > > > -----------------------------------------------------------------------= -- > > + /* For only one register, we use normal sw/lw for speed. */ > > + if (i =3D=3D 0 || i =3D=3D 9) > > + return false; > > -----------------------------------------------------------------------= -- > > > > Seems easier to drop these two elements from the array (with a > comment). > > > > -----------------------------------------------------------------------= -- > > + /* For $31 to $24. */ > > + if (i < 8 && (cfun->machine->frame.mask & 0xff000000)) > > + { > > + int regno; > > + for (regno =3D GP_REG_LAST; regno > GP_REG_LAST - 8; regno--) > > + if (BITSET_P (cfun->machine->frame.mask, regno - GP_REG_FIRST)) > > + { > > + mips_save_restore_reg (word_mode, regno, offset, fn); > > + offset -=3D UNITS_PER_WORD; > > + } > > + } > > -----------------------------------------------------------------------= -- > > > > Rather than this, please just use: > > > > -----------------------------------------------------------------------= -- > > extra_regs =3D (cfun->machine->frame.mask & ~type[i]); > > for (regno =3D GP_REG_LAST; regno > GP_REG_LAST - 8; regno--) > > if (BITSET_P (extra_regs, regno - GP_REG_FIRST)) > > { > > mips_save_restore_reg (word_mode, regno, offset, fn); > > offset -=3D UNITS_PER_WORD; > > } > > -----------------------------------------------------------------------= -- > > > > -----------------------------------------------------------------------= -- > > + mem =3D gen_frame_mem (SImode, plus_constant (Pmode, this_base, > > + this_offset + j * UNITS_PER_WORD)); > > -----------------------------------------------------------------------= -- > > > > Nonstandard formatting. Might be easiest to split out the offset > calculation. > > > > -----------------------------------------------------------------------= -- > > @@ -10050,6 +10434,13 @@ mips_for_each_saved_gpr_and_fpr > > (HOST_WIDE_INT sp_ > > need a nop in the epilogue if at least one register is reloaded in > > addition to return address. */ > > offset =3D cfun->machine->frame.gp_sp_offset - sp_offset; > > + > > + if (TARGET_MICROMIPS) > > + { > > + if (umips_build_save_restore (fn, offset)) > > + goto save_restore_fp_reg; > > + } > > + > > for (regno =3D GP_REG_LAST; regno >=3D GP_REG_FIRST; regno--) > > if (BITSET_P (cfun->machine->frame.mask, regno - GP_REG_FIRST)) > > { > > @@ -10060,6 +10451,8 @@ mips_for_each_saved_gpr_and_fpr > > (HOST_WIDE_INT sp_ > > offset -=3D UNITS_PER_WORD; > > } > > > > +save_restore_fp_reg: > > + > > /* This loop must iterate over the same space as its companion in > > mips_compute_frame_info. */ > > offset =3D cfun->machine->frame.fp_sp_offset - sp_offset; > > -----------------------------------------------------------------------= -- > > > > No!!! :-) Just wrap the GPR save in: > > > > if (!(TARGET_MICROMIPS && umips_build_save_restore (fn, offset))) > > > > Please also split out the save loop, since we now have three copies of = it. > > > > -----------------------------------------------------------------------= -- > > static void > > -mips_deallocate_stack (rtx base, rtx offset, HOST_WIDE_INT > > new_frame_size) > > +mips_deallocate_stack (rtx base, rtx offset, HOST_WIDE_INT > > new_frame_size, > > + bool use_jraddiusp_p) > > { > > + if (use_jraddiusp_p) > > + return; > > + > > if (base =3D=3D stack_pointer_rtx && offset =3D=3D const0_rtx) > > return; > > > > mips_frame_barrier (); > > + > > -----------------------------------------------------------------------= -- > > > > Seems odd to add a parameter that causes the function to return instant= ly. > > But... > > > > -----------------------------------------------------------------------= -- > > const struct mips_frame_info *frame; > > HOST_WIDE_INT step1, step2; > > rtx base, adjust, insn; > > + bool use_jraddiusp_p =3D false; > > > > if (!sibcall_p && mips_can_use_return_insn ()) > > { > > @@ -10831,7 +11230,7 @@ mips_expand_epilogue (bool sibcall_p) > > mips_emit_move (MIPS_EPILOGUE_TEMP (Pmode), adjust); > > adjust =3D MIPS_EPILOGUE_TEMP (Pmode); > > } > > - mips_deallocate_stack (base, adjust, step2); > > + mips_deallocate_stack (base, adjust, step2, use_jraddiusp_p); > > > > /* If we're using addressing macros, $gp is implicitly used by all > > SYMBOL_REFs. We must emit a blockage insn before restoring $gp > > @@ -10900,7 +11299,8 @@ mips_expand_epilogue (bool sibcall_p) > > > > /* If we don't use shoadow register set, we need to update SP. */ > > if (!cfun->machine->use_shadow_register_set_p) > > - mips_deallocate_stack (stack_pointer_rtx, GEN_INT (step2), 0); > > + mips_deallocate_stack (stack_pointer_rtx, GEN_INT (step2), > > + 0, use_jraddiusp_p); > > else > > /* The choice of position is somewhat arbitrary in this case. */ > > mips_epilogue_emit_cfa_restores (); > > @@ -10911,9 +11311,11 @@ mips_expand_epilogue (bool sibcall_p) > > } > > else > > /* Deallocate the final bit of the frame. */ > > - mips_deallocate_stack (stack_pointer_rtx, GEN_INT (step2), 0); > > + mips_deallocate_stack (stack_pointer_rtx, GEN_INT (step2), > > + 0, use_jraddiusp_p); > > } > > - gcc_assert (!mips_epilogue.cfa_restores); > > + if (!use_jraddiusp_p) > > + gcc_assert (!mips_epilogue.cfa_restores); > > > > /* Add in the __builtin_eh_return stack adjustment. We need to > > use a temporary in MIPS16 code. */ > > @@ -10963,6 +11365,10 @@ mips_expand_epilogue (bool sibcall_p) > > rtx reg =3D gen_rtx_REG (Pmode, GP_REG_FIRST + 7); > > pat =3D gen_return_internal (reg); > > } > > + else if (use_jraddiusp_p) > > + { > > + pat =3D gen_mips_jraddiusp (GEN_INT (step2)); > > + } > > else > > { > > rtx reg =3D gen_rtx_REG (Pmode, RETURN_ADDR_REGNUM); > > -----------------------------------------------------------------------= -- > > > > ...unless I'm missing something, it never gets set anyway. > > > > -----------------------------------------------------------------------= -- > > static void > > mips_set_current_function (tree fndecl) > > { > > - mips_set_mips16_mode (mips_use_mips16_mode_p (fndecl)); > > + mips_set_mips16_micromips_mode (mips_use_mips16_mode_p > (fndecl), > > + mips_use_micromips_mode_p (fndecl)); > > + > > + /* Override the default setting for function alignment once it is de= cided > > + which mode is in force. */ > > + > > + if (fndecl > > + && TARGET_MICROMIPS > > + && optimize_size > > + && ! TARGET_INTERLINK_MIPS16 > > + && lookup_attribute ("aligned", DECL_ATTRIBUTES (fndecl)) =3D=3D= NULL) > > + DECL_ALIGN (fndecl) =3D 16; > > } > > -----------------------------------------------------------------------= -- > > > > Looks like the wrong place to do this. Please treat this as a separate > > patch and get a tree expert to comment. > > > > -----------------------------------------------------------------------= -- > > +/* Return true if PATTERN matches the kind of instruction generated by > > + micromips_build_save_restore. SAVE_P is true for store. */ > > + > > +bool > > +umips_save_restore_pattern_p (bool save_p, rtx pattern) > > +{ > > + int n; > > + HOST_WIDE_INT first_offset =3D 0; > > + rtx first_base =3D 0; > > + unsigned int first_regno =3D 0; > > + > > + for (n =3D 0; n < XVECLEN (pattern, 0); n++) > > + { > > + rtx set, reg, mem, this_base; > > + HOST_WIDE_INT this_offset; > > + unsigned int this_regno; > > + > > + /* Check that we have a SET. */ > > + set =3D XVECEXP (pattern, 0, n); > > + if (GET_CODE (set) !=3D SET) > > + return false; > > + > > + /* Check that the SET is a load (if restoring) or a store > > + (if saving). */ > > + mem =3D save_p ? SET_DEST (set) : SET_SRC (set); > > + if (!MEM_P (mem)) > > + return false; > > + > > + /* Check that the address is the sum of base and a > > + possibly-zero constant offset. */ > > + mips_split_plus (XEXP (mem, 0), &this_base, &this_offset); > > + if (!REG_P (this_base)) > > + return false; > > + > > + if (n =3D=3D 0) > > + { > > + first_base =3D this_base; > > + first_offset =3D this_offset; > > -----------------------------------------------------------------------= -- > > > > Need to check the offset is in range. > > > > -----------------------------------------------------------------------= -- > > + /* Make sure the order of regno is "$16-$23, $30, $31", "$16-$23= , $30", > > + or "$31". */ > > + this_regno =3D REGNO (reg); > > + if (n =3D=3D 0) > > + { > > + if (this_regno !=3D 16 && this_regno !=3D 31) > > + return false; > > + first_regno =3D this_regno; > > + } > > + else if (n =3D=3D 8) /* For s8. */ > > + { > > + if (n =3D=3D XVECLEN (pattern, 0) - 1) > > + { > > + if (this_regno !=3D 30 && this_regno !=3D 31) > > + return false; > > + } > > + else > > + { > > + if (this_regno !=3D 30) > > + return false; > > + } > > + } > > + else if (n !=3D XVECLEN (pattern, 0) - 1) > > + { > > + if (this_regno !=3D first_regno + n) > > + return false; > > + } > > + else /* The last item. */ > > + { > > + if ((this_regno !=3D first_regno + n) && this_regno !=3D 31) > > + return false; > > + } > > -----------------------------------------------------------------------= -- > > > > Please just build a mask of the registers and check it against the > > same array as the build function. > > > > -----------------------------------------------------------------------= -- > > + /* If any item in the list is volatile then disallow. This is a > > + safeguard only as this is a path unlikely to be exercised sin= ce > > + typical code only generates the instructions for stack access= es. */ > > + if (MEM_VOLATILE_P (mem)) > > + return false; > > -----------------------------------------------------------------------= -- > > > > Please add this to the earlier !MEM_P check, i.e.: > > > > -----------------------------------------------------------------------= -- > > if (!MEM_P (mem) || MEM_VOLATILE_P (mem)) > > return false; > > -----------------------------------------------------------------------= -- > > > > -----------------------------------------------------------------------= -- > > +/* Return the assembly instruction for microMIPS lwm or swm. > > + SAVE_P and PATTERN are as for umips_save_restore_pattern_p. */ > > + > > +const char * > > +umips_output_save_restore (bool save_p, rtx pattern) > > +{ > > + static char buffer[300]; > > + char *s; > > + int n; > > + HOST_WIDE_INT offset; > > + rtx base, mem, set, reg, last_set, last_reg; > > + > > + /* Parse the pattern. */ > > + gcc_assert (umips_save_restore_pattern_p (save_p, pattern)); > > -----------------------------------------------------------------------= -- > > > > Would be nice to have a shared subroutine of this and > > umips_save_restore_pattern_p that returns the type/encoding index > > (or -1 if none). That'd make this function easier to write. > > > > -----------------------------------------------------------------------= -- > > + mem1_temp =3D XEXP (mem1, 0); > > + mem2_temp =3D XEXP (mem2, 0); > > + > > + /* Make sure memory is base plus offset. */ > > + if (GET_CODE (mem1_temp) !=3D PLUS > > + || GET_CODE (mem2_temp) !=3D PLUS > > + || GET_CODE (XEXP (mem1_temp, 1)) !=3D CONST_INT > > + || GET_CODE (XEXP (mem2_temp, 1)) !=3D CONST_INT) > > + return false; > > + > > + mips_split_plus (mem1_temp, &base1, &offset1); > > + mips_split_plus (mem2_temp, &base2, &offset2); > > + > > + if (!REG_P (base1) || !REG_P (base2)) > > + return false; > > + > > + if (REGNO (base1) !=3D REGNO (base2)) > > + return false; > > -----------------------------------------------------------------------= -- > > > > Better as: > > > > -----------------------------------------------------------------------= -- > > mips_split_plus (XEXP (mem1, 0), &base1, &offset1); > > mips_split_plus (XEXP (mem2, 0), &base2, &offset2); > > if (!REG_P (base1) || !rtx_equal_p (base1, base2)) > > return false; > > -----------------------------------------------------------------------= -- > > > > Note that this allows cases where mem1 or mem2 are unoffsetted > registers, > > which should always be (reg) rather than (plus (reg) (const_int 0)). > > > > -----------------------------------------------------------------------= -- > > +/* Return the assembly instruction for microMIPS lwp or swp. > > + LOAD_P is true for load. */ > > + > > +const char * > > +umips_output_load_store_pair (bool load_p, rtx reg, rtx mem) > > +{ > > + static char buffer[300]; > > + HOST_WIDE_INT offset; > > + rtx base; > > + > > + gcc_assert (REG_P (reg) && MEM_P (mem)); > > + > > + mips_split_plus (XEXP (mem, 0), &base, &offset); > > + gcc_assert (REG_P (base)); > > + > > + sprintf (buffer, "%s\t%s,%d(%s)", load_p ? "lwp" : "swp", > > + reg_names [REGNO (reg)], (int) offset, reg_names [REGNO > > (base)]); > > + return buffer; > > +} > > -----------------------------------------------------------------------= -- > > > > Instead use output_asm_insn and return "". This allows you to use > > the normal assembly formatting. > > > > -----------------------------------------------------------------------= -- > > + int match[8] =3D {0x00000060, /* 5, 6 */ > > + 0x000000a0, /* 5, 7 */ > > + 0x000000c0, /* 6, 7 */ > > + 0x00200010, /* 4, 21 */ > > + 0x00400010, /* 4, 22 */ > > + 0x00000030, /* 4, 5 */ > > + 0x00000050, /* 4, 6 */ > > + 0x00000090}; /* 4, 7 */ > > -----------------------------------------------------------------------= -- > > > > static const. > > > > -----------------------------------------------------------------------= -- > > + for (i =3D 0; i < 8; i++) > > + { > > + if (pair =3D=3D match[i]) > > + return true; > > + } > > -----------------------------------------------------------------------= -- > > > > ARRAY_SIZE (match) instead of 8. > > > > -----------------------------------------------------------------------= -- > > +/* True if this constant is valid for the microMIPS andi16 insn. */ > > +#define UMIPS_ANDI16_IMM(VALUE) \ > > + (((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 1) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 2) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 3) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 4) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 7) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 8) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 15) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 16) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 31) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 32) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 63) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 64) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 255) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 32768) \ > > + || ((unsigned HOST_WIDE_INT) (VALUE) =3D=3D 65536)) > > -----------------------------------------------------------------------= -- > > > > These casts look redundant. > > > > Richard --_007_FD3DCEAC5B03E9408544A1E416F11242987B49BFNAMBX01mgcmento_ Content-Type: application/octet-stream; name="libgcc.cl" Content-Description: libgcc.cl Content-Disposition: attachment; filename="libgcc.cl"; size=296; creation-date="Tue, 22 Jan 2013 20:13:20 GMT"; modification-date="Tue, 22 Jan 2013 19:51:22 GMT" Content-Transfer-Encoding: base64 Content-length: 403 MjAxMy0wMS0yMiAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGNvZGVzb3VyY2Vy eS5jb20+DQoJICAgIENoYW8teWluZyBGdSAgPGZ1QG1pcHMuY29tPg0KCSAg ICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4NCg0K CSogY29uZmlnL21pcHMvbWlwczE2LlM6ICBEb24ndCBidWlsZCBmb3IgbWlj cm9NSVBTLg0KCSogY29uZmlnL21pcHMvbGludXgtdW53aW5kLmg6IEhhbmRs ZSBtaWNyb01JUFMgZnJhbWUuDQoJKiBjb25maWcvbWlwcy9jcnRuLlMgKGZp bmksIGluaXQpOiBOZXcgbGFiZWxzLg0KDQo= --_007_FD3DCEAC5B03E9408544A1E416F11242987B49BFNAMBX01mgcmento_ Content-Type: application/octet-stream; name="libgcc.patch" Content-Description: libgcc.patch Content-Disposition: attachment; filename="libgcc.patch"; size=2154; creation-date="Tue, 22 Jan 2013 20:13:20 GMT"; modification-date="Tue, 22 Jan 2013 19:22:36 GMT" Content-Transfer-Encoding: base64 Content-length: 2920 SW5kZXg6IENoYW5nZUxvZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IENoYW5nZUxvZwkocmV2aXNpb24gMTk1MzA0KQ0KKysrIENoYW5nZUxvZwko d29ya2luZyBjb3B5KQ0KQEAgLTEsMyArMSw5IEBADQorMjAxMy0wMS0yMiAg Q2F0aGVyaW5lIE1vb3JlICA8Y2xtQGNvZGVzb3VyY2VyeS5jb20+DQorDQor CSogY29uZmlnL21pcHMvbWlwczE2LlM6ICBEb24ndCBidWlsZCBmb3IgbWlj cm9NSVBTLg0KKwkqIGNvbmZpZy9taXBzL2xpbnV4LXVud2luZC5oOiBIYW5k bGUgbWljcm9NSVBTIGZyYW1lLg0KKwkqIGNvbmZpZy9taXBzL2NydG4uUyAo ZmluaSwgaW5pdCk6IE5ldyBsYWJlbHMuDQorDQogMjAxMy0wMS0xNyAgWXVm ZW5nIFpoYW5nICA8eXVmZW5nLnpoYW5nQGFybS5jb20+DQogDQogCSogY29u ZmlnL2FhcmNoNjQvc3luYy1jYWNoZS5jIChfX2FhcmNoNjRfc3luY19jYWNo ZV9yYW5nZSk6IENhc3QgdGhlDQpJbmRleDogY29uZmlnL21pcHMvbWlwczE2 LlMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBjb25maWcvbWlwcy9t aXBzMTYuUwkocmV2aXNpb24gMTk1MzA0KQ0KKysrIGNvbmZpZy9taXBzL21p cHMxNi5TCSh3b3JraW5nIGNvcHkpDQpAQCAtMjIsNiArMjIsMTAgQEANCiBz ZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVz cGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUNCiA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLw0KIA0KKyNpZmRlZiBfX21pcHNfbWljcm9taXBz DQorICAvKiBETyBOT1RISU5HICovDQorI2Vsc2UNCisNCiAvKiBUaGlzIGZp bGUgY29udGFpbnMgbWlwczE2IGZsb2F0aW5nIHBvaW50IHN1cHBvcnQgZnVu Y3Rpb25zLiAgVGhlc2UNCiAgICBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBt aXBzMTYgY29kZSB0byBoYW5kbGUgZmxvYXRpbmcgcG9pbnQgd2hlbg0KICAg IC1tc29mdC1mbG9hdCBpcyBub3QgdXNlZC4gIFRoZXkgYWNjZXB0IHRoZSBh cmd1bWVudHMgYW5kIHJldHVybg0KQEAgLTcxOSwzICs3MjMsNCBAQA0KICNl bmRpZiAvKiAhX19taXBzX3NpbmdsZV9mbG9hdCAqLw0KIA0KICNlbmRpZg0K KyNlbmRpZiAvKiBfX21pcHNfbWljcm9taXBzICovDQpJbmRleDogY29uZmln L21pcHMvbGludXgtdW53aW5kLmgNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBjb25maWcvbWlwcy9saW51eC11bndpbmQuaAkocmV2aXNpb24gMTk1 MzA0KQ0KKysrIGNvbmZpZy9taXBzL2xpbnV4LXVud2luZC5oCSh3b3JraW5n IGNvcHkpDQpAQCAtNTIsNiArNTIsMTEgQEANCiAgIF9VbndpbmRfUHRyIG5l d19jZmEsIHJlZ19vZmZzZXQ7DQogICBpbnQgaTsNCiANCisgIC8qIG1pY3Jv TUlQUyBmcmFtZTsgdGhlIGtlcm5lbCBkb2VzIG5vdCBoYXZlIG1pY3JvTUlQ UyBzaWduYWwNCisgICAgIGZyYW1lcy4gICovDQorICBpZiAoKF9VbndpbmRf UHRyKSBwYyAmIDMpDQorICAgIHJldHVybiBfVVJDX0VORF9PRl9TVEFDSzsN CisNCiAgIC8qIDI0MDIxMDYxIGxpIHYwLCAweDEwNjEgKHJ0X3NpZ3JldHVy bikqLw0KICAgLyogMDAwMDAwMGMgc3lzY2FsbCAgICAqLw0KICAgLyogICAg b3IgKi8NCkluZGV4OiBjb25maWcvbWlwcy9jcnRuLlMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBjb25maWcvbWlwcy9jcnRuLlMJKHJldmlzaW9u IDE5NTMwNCkNCisrKyBjb25maWcvbWlwcy9jcnRuLlMJKHdvcmtpbmcgY29w eSkNCkBAIC0zMSw2ICszMSw3IEBADQogI2VuZGlmDQogDQogCS5zZWN0aW9u IC5pbml0LCJheCIsQHByb2diaXRzDQoraW5pdDoJDQogI2lmZGVmIF9fbWlw czY0DQogCWxkICAgICAgUkEsNDAoJHNwKQ0KIAlkYWRkdQkkc3AsJHNwLDQ4 DQpAQCAtNDEsNiArNDIsNyBAQA0KIAlqCVJBDQogDQogCS5zZWN0aW9uIC5m aW5pLCJheCIsQHByb2diaXRzDQorZmluaToJDQogI2lmZGVmCV9fbWlwczY0 DQogCWxkCVJBLDQwKCRzcCkNCiAJZGFkZHUJJHNwLCRzcCw0OA0K --_007_FD3DCEAC5B03E9408544A1E416F11242987B49BFNAMBX01mgcmento_ Content-Type: application/octet-stream; name="gcc.cl" Content-Description: gcc.cl Content-Disposition: attachment; filename="gcc.cl"; size=5657; creation-date="Tue, 22 Jan 2013 20:13:16 GMT"; modification-date="Tue, 22 Jan 2013 20:09:56 GMT" Content-Transfer-Encoding: base64 Content-length: 7670 MjAxMy0wMS0yMSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGNvZGVzb3VyY2Vy eS5jb20+DQoJICAgIENoYW8teWluZyBGdSA8ZnVAbWlwcy5jb20+DQoJICAg IE1hY2llaiBXLiBSb3p5Y2tpICA8bWFjcm9AY29kZXNvdXJjZXJ5LmNvbT4N CgkgICAgTmF0aGFuIEZyb3lkICA8ZnJveWRuakBjb2Rlc291cmNlcnkuY29t Pg0KCSAgICBUb20gZGUgVnJpZXMgIDx0b21AY29kZXNvdXJjZXJ5LmNvbT4N CgkgICAgTmF0aGFuIFNpZHdlbGwgPG5hdGhhbkBjb2Rlc291cmNlcnkuY29t Pg0KCSAgICBJYWluIFNhbmRvZSAgPGlhaW5AY29kZXNvdXJjZXJ5LmNvbT4N CgkNCgkqIGNvbmZpZ3VyZS5hYyAoZ2NjX2N2X2FzX21pY3JvbWlzKTogQ2hl Y2sgaWYgbGlua2VyDQoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuDQoJKiBj b25maWcuaW46IFJlZ2VuZXJhdGUuDQoJKiBkb2MvZXh0ZW5kLnRleGk6ICht aWNyb21pcHMsIG5vbWljcm9taXBzLCBub2NvbXByZXNzaW9uKToNCglEb2N1 bWVudCBuZXcgZnVuY3Rpb24gYXR0cmlidXRlcy4gDQoJKiBkb2MvaW52b2tl LnRleGkgKG1pbnRlcmxpbmstY29tcHJlc3NlZCwgbW1pY3JvbWlwcywNCglt aW50ZXJsaW5rLXVuY29tcHJlc3NlZCwgbTE0aywgbTE0a2UsIG0xNGtlYyk6 IERvY3VtZW50IG5ldw0KCW9wdGlvbnMuDQoJKG1pbnRlcmxpbmstbWlwczE2 KTogVXBkYXRlIGRvY3VtZW50YXRpb24uDQoJKiBkb2MvbWQudGV4aSAoWkMs IFpEKTogRG9jdW1lbnQgbmV3IGNvbnN0cmFpbnRzLg0KCXN1cHBvcnRzIHRo ZSAuc2V0IG1pY3JvbWlwcyBkaXJlY3RpdmUuDQoJKiBjb25maWcvbWlwcy9t aXBzLXRhYmxlcy5vcHQ6IFJlZ2VuZXJhdGUuDQoJKiBjb25maWcvbWlwcy9n bnUtdXNlci5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IFNldA0K CVRBUkdFVF9JTlRFUkxJTktfQ09NUFJFU1NFRC4NCgkqIGNvbmZpZy9taXBz L21pY3JvbWlwcy5tZDogTmV3IGZpbGUuDQoJKiBjb25zdHJhaW50cy5tZCAo WkMsIEFEKTogTmV3IGNvbnN0cmFpbnRzLg0KCSogY29uZmlnL21pcHMvcHJl ZGljYXRlcy5tZCAobW92ZXBfcmVnaXN0ZXIpOiBOZXcgcHJlZGljYXRlLg0K CShtb3ZlcF9vcGVyYW5kKTogTmV3IHByZWRpY2F0ZS4NCgkobm9uX3ZvbGF0 aWxlX21lbV9vcGVyYW5kKTogTmV3IHByZWRpY2F0ZS4NCgkqIGNvbmZpZy9t aXBzL21pcHMubWQgKG11bHRpbWVtKTogTmV3IHR5cGUuDQoJKGxlbmd0aCk6 IERpZmZlcmVudGlhdGUgYmV0d2VlbiAxNy1iaXQgYW5kIDE4LWJpdCBicmFu Y2ggb2Zmc2V0cy4NCgkoTU9WRVAxLCBNT1ZFUDIpOiBOZXcgbW9kZSBpdGVy YXRvci4NCiAJKG1vdl88bG9hZD5sKTogVXNlIFpDIGNvbnN0cmFpbnQuDQoJ KG1vdl88bG9hZD5yKTogTGlrZXdpc2UuDQoJKG1vdl88c3RvcmU+bCk6IExp a2V3aXNlLg0KCShtb3ZfPHN0b3JlPnIpOiBMaWtld2lzZS4NCgkoKmJyYW5j aF9lcXVhbGl0eTxtb2RlPl9taWNyb21pcHMpOiBOZXcgaW5zbi4NCgkoKmJy YW5jaF9lcXVhbGl0eTxtb2RlPl9pbnZlcnRlZF9taWNyb21pcHMpOiBOZXcg aW5zbi4NCgkoKmJyYW5jaF9lcXVhbGl0eTxtb2RlPl9pbnZlcnRlZCk6IERp c2FibGUgZm9yIG1pY3JvTUlQUy4NCgkoKmJyYW5jaF9lcXVhbGl0eTxtb2Rl Pik6IExpa2V3aXNlLg0KCSgqanVtcF9hYnNvbHV0ZSk6IG1pY3JvTUlQUyB2 YXJpYW50Lg0KCShpbmRpcmVjdF9qdW1wXzxtb2RlPik6IExpa2V3aXNlLg0K CSh0YWJsZWp1bXBfPG1vZGU+KTogTGlrZXdpc2UuDQoJKDxvcHRhYj5faW50 ZXJuYWwpOiBMaWtld2lzZS4NCgkoc2liY2FsbF9pbnRlcm5hbCk6IExpa2V3 aXNlLg0KCShzaWJjYWxsX3ZhbHVlX2ludGVybmFsKTogTGlrZXdpc2UuDQoJ KHByZWZldGNoKTogVXNlIGNvbnN0cmFpbnQgWkQuDQoJKG1pY3JvbWlwcy5t ZCk6IEluY2x1ZGUuDQoJKiBjb25maWcvbWlwcy9taXBzLm9wdCAobWludGVy bGluay1jb21wcmVzc2VkKTogTmV3IG9wdGlvbi4NCgkobWludGVybGluay11 bmNvbXByZXNzZWQpOiBOZXcgb3B0aW9uLg0KCShtaW50ZXJsaW5rLW1pcHMx Nik6IE5vdyBhbiBhbGlhcyBmb3IgbWludGVybGluay1jb21wcmVzc2VkLg0K CShtbWljcm9taXBzKTogTmV3IG9wdGlvbi4NCgkqIGNvbmZpZy9taXBzL3N5 bmMubWQgKHN5bmNfY29tcGFyZV9hbmRfc3dhcDxtb2RlPik6IFVzZSBaUiBj b25zdHJhaW50Lg0KCShjb21wYXJlX2FuZF9zd2FwXzEyKTogTGlrZXdpc2Uu DQoJKHN5bmNfYWRkPG1vZGU+KTogTGlrZXdpc2UuDQoJKHN5bmNfPG9wdGFi Pl8xMik6IExpa2V3aXNlLg0KCShzeW5jX29sZF88b3B0YWI+XzEyKTogTGlr ZXdpc2UuDQoJKHN5bmNfbmV3XzxvcHRhYj5fMTIpOiBMaWtld2lzZS4NCgko c3luY19uYW5kXzEyKTogTGlrZXdpc2UuDQoJKHN5bmNfb2xkX25hbmRfMTIp OiBMaWtld2lzZS4NCgkoc3luY19uZXdfbmFuZF8xMik6IExpa2V3aXNlLg0K CShzeW5jX3N1Yjxtb2RlPik6IExpa2V3aXNlLg0KCShzeW5jX29sZF9hZGQ8 bW9kZT4pOiBMaWtld2lzZS4NCgkoc3luY19vbGRfc3ViPG1vZGU+KTogTGlr ZXdpc2UuDQoJKHN5bmNfbmV3X2FkZDxtb2RlPik6IExpa2V3aXNlLg0KCShz eW5jX25ld19zdWI8bW9kZT4pOiBMaWtld2lzZS4NCgkoc3luY188b3B0YWI+ PG1vZGU+KTogTGlrZXdpc2UuDQoJKHN5bmNfb2xkXzxvcHRhYj48bW9kZT4p OiBMaWtld2lzZS4NCgkoc3luY19uZXdfPG9wdGFiPjxtb2RlPik6IExpa2V3 aXNlLg0KCShzeW5jX25hbmQ8bW9kZT4pOiBMaWtld2lzZS4NCgkoc3luY19v bGRfbmFuZDxtb2RlPik6IExpa2V3aXNlLg0KCShzeW5jX25ld19uYW5kPG1v ZGU+KTogTGlrZXdpc2UuDQoJKHN5bmNfbG9ja190ZXN0X2FuZF9zZXQ8bW9k ZT4pOiBMaWtld2lzZS4NCgkodGVzdF9hbmRfc2V0XzEyKTogTGlrZXdpc2Uu DQoJKGF0b21pY19jb21wYXJlX2FuZF9zd2FwPG1vZGU+KTogTGlrZXdpc2Uu DQoJKGF0b21pY19leGNoYW5nZTxtb2RlPl9sbHNjKTogTGlrZXdpc2UuDQoJ KGF0b21pY19mZXRjaF9hZGQ8bW9kZT5fbGxzYyk6IExpa2V3aXNlLg0KCSog Y29uZmlnL21pcHMvbWlwcy1jcHVzLmRlZiAobTE0a2MsIG0xNGspOiBOZXcg cHJvY2Vzc29ycy4NCgkqIGNvbmlmZy9taXBzL21pcHMtcHJvdG9zLmggKHVt aXBzX291dHB1dF9zYXZlX3Jlc3RvcmUpOiBOZXcgcHJvdG90eXBlLg0KCSh1 bWlwc19zYXZlX3Jlc3RvcmVfcGF0dGVybl9wKTogTGlrZXdpc2UuDQoJKHVt aXBzX2xvYWRfc3RvcmVfcGFpcl9wKTogTGlrZXdpc2UuDQoJKHVtaXBzX291 dHB1dF9sb2FkX3N0b3JlX3BhaXIpOiBMaWtld2lzZS4NCgkodW1pcHNfbW92 ZXBfdGFyZ2V0X3ApOiBMaWtld2lzZS4NCgkodW1pcHNfMTJiaXRfb2Zmc2V0 X2FkZHJlc3NfcCk6IExpa2V3aXNlLg0KCSogY29uZmlnL21pcHMvbWlwcy5j IChNSVBTX01BWF9GSVJTVF9TVEFDS19TVEVQKTogVXBkYXRlIGZvciBtaWNy b01JUFMuDQoJKiBjb25maWcvYXJtL2FybS5tZCAoVU5TUEVDX1BST0xPR1VF X1VTRSk6IFJlbmFtZSB0aGlzLi4uDQoJKFVOU1BFQ19SRUdJU1RFUl9VU0Up OiAuLi4gdG8gdGhpcy4NCgkobWlwc19iYXNlX21pcHMxNik6IFJlbmFtZSB0 aGlzLi4uDQoJKG1pcHNfYmFzZV9jb21wcmVzc2lvbl9mbGFncyk6IC4uLnRv IHRoaXMuIFVwZGF0ZSBhbGwgdXNlcy4NCgkobWlwc19hdHRyaWJ1dGVfdGFi bGUpOiBBZGQgbWljcm9taXBzLCBub21pY3JvbWlwcyBhbmQgbm9jb21wcmVz c2lvbi4NCgkobWlwc19taXBzMTZfZGVjbF9wKTogRGVsZXRlLg0KCShtaXBz X25vbWlwczE2X2RlY2xfcCk6IERlbGV0ZS4NCiAJKG1pcHNfZ2V0X2NvbXBy ZXNzX29uX2ZsYWdzKTogTmV3IGZ1bmN0aW9uLg0KCShtaXBzX2dldF9jb21w cmVzc19vZmZfZmxhZ3MpOiBOZXcgZnVuY3Rpb24uDQoJKG1pcHNfZ2V0X2Nv bXByZXNzX21vZGUpOiBOZXcgZnVuY3Rpb24uDQoJKG1pcHNfaW5zZXJ0X2F0 dHJpYnV0ZXMpOiBTdXBwb3J0IG11bHRpcGxlIGNvbXByZXNzaW9uIHR5cGVz Lg0KCShtaXBzX21lcmdlX2RlY2xfYXR0cmlidXRlcyk6IExpa2V3aXNlLg0K CSh1bWlwc18xMmJpdF9vZmZzZXRfYWRkcmVzc19wKTogTmV3IGZ1bmN0aW9u Lg0KCShtaXBzX3N0YXJ0X2Z1bmN0aW9uX2RlZmluaXRpb24pOiBFbWl0IC5z ZXQgbWljcm9taXBzIGRpcmVjdGl2ZS4NCgkobWlwc19mdW5jdGlvbl9va19m b3Jfc2liY2FsbCk6IEFkZCBtaWNyb01JUFMgc3VwcG9ydC4NCgkobWlwc19w cmludF9vcGVyYW5kX3B1bmN0dWF0aW9uKTogU3VwcG9ydCBzaG9ydCBkZWxh eSBzbG90cyBhbmQNCgljb21wYWN0IGp1bXBzLg0KCShtaXBzX3NhdmVfcmVz dG9yZV9yZWcpOiBSZW5hbWUgdGhpcy4uLg0KCShtaXBzX3NhdmVfcmVzdG9y ZV9zaW5nbGVfcmVnKTogLi4udG8gdGhpcy4gIFVwZGF0ZSBjYWxsZXJzLg0K CShtaXBzX3NhdmVfcmVzdG9yZV9yZWdpc3RlcnMpOiBOZXcgZnVuY3Rpb24u DQoJKHR5cGUsIGVuY29kZSk6IE5ldy4NCgkodW1pcHNfYnVpbGRfc2F2ZV9y ZXN0b3JlKTogTmV3IGZ1bmN0aW9uLg0KCShtaXBzX2Zvcl9lYWNoX3NhdmVk X2dwcl9hbmRfZnByKTogQWRkIG1pY3JvTUlQUyBzdXBwb3J0Lg0KCSh3YXNf bWljcm9taXBzX3ApOiBOZXcuDQoJKG1pcHNfc2V0X21pcHMxNl9tb2RlKTog UmVuYW1lIHRoaXMuLi4NCgkobWlwc19zZXRfbWlwczE2X21pY3JvbWlwc19t b2RlKTogLi4udG8gdGhpcy4gIEFkZCBtaWNyb01JUFMgc3VwcG9ydC4NCglV cGRhdGUgY2FsbGVycy4NCgkodW1pcHNfc2F2ZV9yZXN0b3JlX3BhdHRlcm5f cCk6IE5ldyBmdW5jdGlvbi4NCgkodW1pcHNfb3V0cHV0X3NhdmVfcmVzdG9y ZSk6IE5ldyBmdW5jdGlvbi4NCgkodW1pcHNfbG9hZF9zdG9yZV9wYWlyX3Bf MSk6IE5ldyBmdW5jdGlvbi4NCgkodW1pcHNfbG9hZF9zdG9yZV9wYWlyX3Ap OiBOZXcgZnVuY3Rpb24uDQoJKHVtaXBzX291dHB1dF9sb2FkX3N0b3JlX3Bh aXJfMSk6IE5ldyBmdW5jdGlvbi4gKGJvb2wgbG9hZF9wLCBydHggcmVnLCBy dHggbWVtKQ0KCSh1bWlwc19vdXRwdXRfbG9hZF9zdG9yZV9wYWlyKTogTmV3 IGZ1bmN0aW9uLg0KCSh1bWlwc19tb3ZlcF90YXJnZXRfcCk6IE5ldyBmdW5j dGlvbi4NCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoVEFSR0VUX0NQVV9DUFBf QlVJTFRJTlMpOiBVcGRhdGUgbWFjcm8NCgl0byB1c2UgbmV3IGNvbXByZXNz aW9uIGZsYWdzIGFuZCB0byBzdXBwb3J0IG1pY3JvTUlQUy4NCgkoTUlQU19J U0FfTEVWRUxfU1BFQyk6IEFkZCBtMTRrIHByb2Nlc3NvcnMuDQoJKE1JUFNf QVJDSF9GTE9BVF9TUEVDKTogTGlrZXdpc2UuDQoJKElTQV9IQVNfTFdYUyk6 IEluY2x1ZGUgVEFSR0VUX01JQ1JPTUlQUy4NCgkoQVNNX1NQRUMpOiBTdXBw b3J0IG1taWNyb21pcHMgYW5kIG1uby1taWNyb21pcHMuDQoJKE0xNlNUT1JF X1JFR19QKTogTmV3IG1hY3JvLg0KCShNSVBTX0NBTEwpOiBTdXBwb3J0IFRB UkdFVF9NSUNST01JUFMuDQoJKE1JQ1JPTUlQU19KKTogTmV3IG1hY3JvLg0K CShtaXBzX2Jhc2VfbWlwczE2KTogUmVuYW1lIHRoaXMuLi4NCgkobWlwc19i YXNlX2NvbXByZXNzaW9uX2ZsYWdzKTogLi4udG8gdGhpcy4NCgkoVU1JUFNf MTJCSVRfT0ZGU0VUX1ApOiBOZXcgbWFjcm8uDQoJKiBjb25maWcvbWlwcy90 LXNkZTogKE1VTFRJTElCX09QVElPTlMpOiBBZGQgbWljcm9NSVBTLg0KCShN VUxUSUxJQl9ESVJOQU1FUyk6IExpa2V3aXNlLg0KDQo= --_007_FD3DCEAC5B03E9408544A1E416F11242987B49BFNAMBX01mgcmento_ Content-Type: application/octet-stream; name="gcc.patch" Content-Description: gcc.patch Content-Disposition: attachment; filename="gcc.patch"; size=97823; creation-date="Tue, 22 Jan 2013 20:13:16 GMT"; modification-date="Tue, 22 Jan 2013 20:08:54 GMT" Content-Transfer-Encoding: base64 Content-length: 132606 SW5kZXg6IGRvYy9leHRlbmQudGV4aQ0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGRvYy9leHRlbmQudGV4aQkocmV2aXNpb24gMTk1MzUxKQ0KKysr IGRvYy9leHRlbmQudGV4aQkod29ya2luZyBjb3B5KQ0KQEAgLTMwNTMsNiAr MzA1MywyNSBAQCBub3QgdGhhdCB3aXRoaW4gaW5kaXZpZHVhbCBmdW5jdGlv bnMuICBNaXhlZCBNSVBTMQ0KIG1heSBpbnRlcmFjdCBiYWRseSB3aXRoIHNv bWUgR0NDIGV4dGVuc2lvbnMgc3VjaCBhcyBAY29kZXtfX2J1aWx0aW5fYXBw bHl9DQogKEBweHJlZntDb25zdHJ1Y3RpbmcgQ2FsbHN9KS4NCiANCitAaXRl bSBtaWNyb21pcHMvbm9taWNyb21pcHMNCitAY2luZGV4IEBjb2Rle21pY3Jv bWlwc30gYXR0cmlidXRlDQorQGNpbmRleCBAY29kZXtub21pY3JvbWlwc30g YXR0cmlidXRlDQorDQorT24gTUlQUyB0YXJnZXRzLCB5b3UgY2FuIHVzZSB0 aGUgQGNvZGV7bWljcm9taXBzfSBhbmQgQGNvZGV7bm9taWNyb21pcHN9DQor ZnVuY3Rpb24gYXR0cmlidXRlcyB0byBsb2NhbGx5IHNlbGVjdCBvciB0dXJu IG9mZiBtaWNyb01JUFMgY29kZSBnZW5lcmF0aW9uLg0KK0EgZnVuY3Rpb24g d2l0aCB0aGUgQGNvZGV7bWljcm9taXBzfSBhdHRyaWJ1dGUgaXMgZW1pdHRl ZCBhcyBtaWNyb01JUFMgY29kZSwNCit3aGlsZSBtaWNyb01JUFMgY29kZSBn ZW5lcmF0aW9uIGlzIGRpc2FibGVkIGZvciBmdW5jdGlvbnMgd2l0aCB0aGUN CitAY29kZXtub21pY3JvbWlwc30gYXR0cmlidXRlLiAgVGhlc2UgYXR0cmli dXRlcyBvdmVycmlkZSB0aGUNCitAb3B0aW9uey1tbWljcm9taXBzfSBhbmQg QG9wdGlvbnstbW5vLW1pY3JvbWlwc30gb3B0aW9ucyBvbiB0aGUgY29tbWFu ZCBsaW5lDQorKEBweHJlZntNSVBTIE9wdGlvbnN9KS4NCisNCitXaGVuIGNv bXBpbGluZyBmaWxlcyBjb250YWluaW5nIG1peGVkIG1pY3JvTUlQUyBhbmQg bm9uLW1pY3JvTUlQUyBjb2RlLCB0aGUNCitwcmVwcm9jZXNzb3Igc3ltYm9s IEBjb2Rle19fbWlwc19taWNyb21pcHN9IHJlZmxlY3RzIHRoZSBzZXR0aW5n IG9uIHRoZQ0KK2NvbW1hbmQgbGluZSwNCitub3QgdGhhdCB3aXRoaW4gaW5k aXZpZHVhbCBmdW5jdGlvbnMuICBNaXhlZCBtaWNyb01JUFMgYW5kIG5vbi1t aWNyb01JUFMgY29kZQ0KK21heSBpbnRlcmFjdCBiYWRseSB3aXRoIHNvbWUg R0NDIGV4dGVuc2lvbnMgc3VjaCBhcyBAY29kZXtfX2J1aWx0aW5fYXBwbHl9 DQorKEBweHJlZntDb25zdHJ1Y3RpbmcgQ2FsbHN9KS4NCisNCiBAaXRlbSBt b2RlbCAoQHZhcnttb2RlbC1uYW1lfSkNCiBAY2luZGV4IGZ1bmN0aW9uIGFk ZHJlc3NhYmlsaXR5IG9uIHRoZSBNMzJSL0QNCiBAY2luZGV4IHZhcmlhYmxl IGFkZHJlc3NhYmlsaXR5IG9uIHRoZSBJQS02NA0KQEAgLTMxNTUsNiArMzE3 NCwxMyBAQCBpcyBhbiBOTUkgaGFuZGxlci4gIFRoZSBjb21waWxlciBnZW5l cmF0ZXMgZnVuY3Rpbw0KIGV4aXQgc2VxdWVuY2VzIHN1aXRhYmxlIGZvciB1 c2UgaW4gYW4gTk1JIGhhbmRsZXIgd2hlbiB0aGlzDQogYXR0cmlidXRlIGlz IHByZXNlbnQuDQogDQorQGl0ZW0gbm9jb21wcmVzc2lvbg0KK0BjaW5kZXgg QGNvZGV7bm9jb21wcmVzc2lvbn0gYXR0cmlidXRlDQorT24gTUlQUyB0YXJn ZXRzLCB5b3UgY2FuIHVzZSB0aGUgQGNvZGV7bm9jb21wcmVzc2lvbn0gZnVu Y3Rpb24gYXR0cmlidXRlDQordG8gbG9jYWxseSB0dXJuIG9mZiBNSVBTMTYg YW5kIG1pY3JvTUlQUyBjb2RlIGdlbmVyYXRpb24uICBUaGlzIGF0dHJpYnV0 ZQ0KK292ZXJyaWRlcyB0aGUgQG9wdGlvbnstbWlwczE2fSBhbmQgQG9wdGlv bnstbW1pY3JvbWlwc30gb3B0aW9ucyBvbiB0aGUNCitjb21tYW5kIGxpbmUg KEBweHJlZntNSVBTIE9wdGlvbnN9KS4NCisNCiBAaXRlbSBub19pbnN0cnVt ZW50X2Z1bmN0aW9uDQogQGNpbmRleCBAY29kZXtub19pbnN0cnVtZW50X2Z1 bmN0aW9ufSBmdW5jdGlvbiBhdHRyaWJ1dGUNCiBAb3BpbmRleCBmaW5zdHJ1 bWVudC1mdW5jdGlvbnMNCkluZGV4OiBkb2MvaW52b2tlLnRleGkNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSBkb2MvaW52b2tlLnRleGkJKHJldmlz aW9uIDE5NTM1MSkNCisrKyBkb2MvaW52b2tlLnRleGkJKHdvcmtpbmcgY29w eSkNCkBAIC03MzksNiArNzM5LDggQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVj dGl2ZS1DKysgRGlhbGVjdHN9Lg0KIC1taXBzMSAgLW1pcHMyICAtbWlwczMg IC1taXBzNCAgLW1pcHMzMiAgLW1pcHMzMnIyIEBnb2wNCiAtbWlwczY0ICAt bWlwczY0cjIgQGdvbA0KIC1taXBzMTYgIC1tbm8tbWlwczE2ICAtbWZsaXAt bWlwczE2IEBnb2wNCistbWludGVybGluay1jb21wcmVzc2VkIC1tbm8taW50 ZXJsaW5rLWNvbXByZXNzZWQgQGdvbA0KKy1taW50ZXJsaW5rLXVuY29tcHJl c3NlZCAtbW5vLWludGVybGluay11bmNvbXByZXNzZWQgQGdvbA0KIC1taW50 ZXJsaW5rLW1pcHMxNiAgLW1uby1pbnRlcmxpbmstbWlwczE2IEBnb2wNCiAt bWFiaT1AdmFye2FiaX0gIC1tYWJpY2FsbHMgIC1tbm8tYWJpY2FsbHMgQGdv bA0KIC1tc2hhcmVkICAtbW5vLXNoYXJlZCAgLW1wbHQgIC1tbm8tcGx0ICAt bXhnb3QgIC1tbm8teGdvdCBAZ29sDQpAQCAtNzQ2LDYgKzc0OCw3IEBAIE9i amVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4NCiAtbW5v LWZsb2F0IC1tc2luZ2xlLWZsb2F0ICAtbWRvdWJsZS1mbG9hdCAgQGdvbA0K IC1tZHNwICAtbW5vLWRzcCAgLW1kc3ByMiAgLW1uby1kc3ByMiBAZ29sDQog LW1tY3UgLW1tbm8tbWN1IEBnb2wNCistbW1pY3JvbWlwcyAtbW5vLW1pY3Jv bWlwcyBAZ29sDQogLW1mcHU9QHZhcntmcHUtdHlwZX0gQGdvbA0KIC1tc21h cnRtaXBzICAtbW5vLXNtYXJ0bWlwcyBAZ29sDQogLW1wYWlyZWQtc2luZ2xl ICAtbW5vLXBhaXJlZC1zaW5nbGUgIC1tZG14ICAtbW5vLW1kbXggQGdvbA0K QEAgLTE1ODc4LDYgKzE1ODgxLDcgQEAgVGhlIHByb2Nlc3NvciBuYW1lcyBh cmU6DQogQHNhbXB7MTAwNGtjfSwgQHNhbXB7MTAwNGtmMl8xfSwgQHNhbXB7 MTAwNGtmMV8xfSwNCiBAc2FtcHtsb29uZ3NvbjJlfSwgQHNhbXB7bG9vbmdz b24yZn0sIEBzYW1we2xvb25nc29uM2F9LA0KIEBzYW1we200a30sDQorQHNh bXB7bTE0a30sIEBzYW1we20xNGtlfSwgQHNhbXB7bTE0a2VjfSwNCiBAc2Ft cHtvY3Rlb259LCBAc2FtcHtvY3Rlb24rfSwgQHNhbXB7b2N0ZW9uMn0sDQog QHNhbXB7b3Jpb259LA0KIEBzYW1we3IyMDAwfSwgQHNhbXB7cjMwMDB9LCBA c2FtcHtyMzkwMH0sIEBzYW1we3I0MDAwfSwgQHNhbXB7cjQ0MDB9LA0KQEAg LTE1OTkxLDE4ICsxNTk5NSwzMyBAQCBHZW5lcmF0ZSBNSVBTMTYgY29kZSBv biBhbHRlcm5hdGluZyBmdW5jdGlvbnMuICBUaA0KIGZvciByZWdyZXNzaW9u IHRlc3Rpbmcgb2YgbWl4ZWQgTUlQUzE2L25vbi1NSVBTMTYgY29kZSBnZW5l cmF0aW9uLCBhbmQgaXMNCiBub3QgaW50ZW5kZWQgZm9yIG9yZGluYXJ5IHVz ZSBpbiBjb21waWxpbmcgdXNlciBjb2RlLg0KIA0KK0BpdGVtIC1taW50ZXJs aW5rLWNvbXByZXNzZWQNCitAaXRlbSAtbW5vLWludGVybGluay1jb21wcmVz c2VkDQorQG9waW5kZXggbWludGVybGluay1jb21wcmVzc2VkDQorQG9waW5k ZXggbW5vLWludGVybGluay1jb21wcmVzc2VkDQorUmVxdWlyZSAoZG8gbm90 IHJlcXVpcmUpIHRoYXQgY29kZSB1c2luZyB0aGUgc3RhbmRhcmQgKHVuY29t cHJlc3NlZCkgTUlQUyBJU0ENCitiZSBsaW5rLWNvbXBhdGlibGUgd2l0aCBN SVBTMTYgYW5kIG1pY3JvTUlQUyBjb2RlLg0KKw0KK0ZvciBleGFtcGxlLCBu b24tTUlQUzE2IGNvZGUgY2Fubm90IGp1bXAgZGlyZWN0bHkgdG8gTUlQUzE2 IGNvZGU7IGl0IG11c3QNCitlaXRoZXIgdXNlIGEgY2FsbCBvciBhbiBpbmRp cmVjdCBqdW1wLiAgVGhlIHNhbWUgYXBwbGllcyB0byBub24tbWljcm9NSVBT DQoranVtcHMgdG8gbWljcm9NSVBTIGNvZGUuICBAb3B0aW9uey1taW50ZXJs aW5rLWNvbXByZXNzZWR9IHRoZXJlZm9yZSBkaXNhYmxlcw0KK2RpcmVjdCBq dW1wcyB1bmxlc3MgR0NDIGtub3dzIHRoYXQgdGhlIHRhcmdldCBvZiB0aGUg anVtcCBpcyBub3QgY29tcHJlc3NlZC4NCisNCitAaXRlbSAtbWludGVybGlu ay11bmNvbXByZXNzZWQNCitAaXRlbSAtbW5vLWludGVybGluay11bmNvbXBy ZXNzZWQNCitAb3BpbmRleCBtaW50ZXJsaW5rLWNvbXByZXNzZWQNCitAb3Bp bmRleCBtbm8taW50ZXJsaW5rLWNvbXByZXNzZWQNCitSZXF1aXJlIChkbyBu b3QgcmVxdWlyZSkgdGhhdCBjb2RlIHVzaW5nIG1pY3JvTUlQUyBpbnN0cnVj dGlvbnMgYmUNCitsaW5rLWNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQg KHVuY29tcHJlc3NlZCkgTUlQUyBJU0EuDQorDQogQGl0ZW0gLW1pbnRlcmxp bmstbWlwczE2DQogQGl0ZW14IC1tbm8taW50ZXJsaW5rLW1pcHMxNg0KIEBv cGluZGV4IG1pbnRlcmxpbmstbWlwczE2DQogQG9waW5kZXggbW5vLWludGVy bGluay1taXBzMTYNCi1SZXF1aXJlIChkbyBub3QgcmVxdWlyZSkgdGhhdCBu b24tTUlQUzE2IGNvZGUgYmUgbGluay1jb21wYXRpYmxlIHdpdGgNCi1NSVBT MTYgY29kZS4NCitBbGlhc2VzIG9mIEBvcHRpb257LW1pbnRlcmxpbmstY29t cHJlc3NlZH0gYW5kDQorQG9wdGlvbnstbW5vLWludGVybGluay1jb21wcmVz c2VkfS4gIFRoZXNlIG9wdGlvbnMgcHJlZGF0ZSB0aGUgbWljcm9NSVBTIEFT RQ0KK2FuZCBhcmUgcmV0YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmxp dHkuDQogDQotRm9yIGV4YW1wbGUsIG5vbi1NSVBTMTYgY29kZSBjYW5ub3Qg anVtcCBkaXJlY3RseSB0byBNSVBTMTYgY29kZTsNCi1pdCBtdXN0IGVpdGhl ciB1c2UgYSBjYWxsIG9yIGFuIGluZGlyZWN0IGp1bXAuICBAb3B0aW9uey1t aW50ZXJsaW5rLW1pcHMxNn0NCi10aGVyZWZvcmUgZGlzYWJsZXMgZGlyZWN0 IGp1bXBzIHVubGVzcyBHQ0Mga25vd3MgdGhhdCB0aGUgdGFyZ2V0IG9mIHRo ZQ0KLWp1bXAgaXMgbm90IE1JUFMxNi4NCi0NCiBAaXRlbSAtbWFiaT0zMg0K IEBpdGVteCAtbWFiaT1vNjQNCiBAaXRlbXggLW1hYmk9bjMyDQpAQCAtMTYy MTYsNiArMTYyMzUsMTYgQEAgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgc3Vw cG9ydCB0byBiZSBlbmFibGVkLg0KIFVzZSAoZG8gbm90IHVzZSkgdGhlIE1J UFMtM0QgQVNFQC4gIEB4cmVme01JUFMtM0QgQnVpbHQtaW4gRnVuY3Rpb25z fS4NCiBUaGUgb3B0aW9uIEBvcHRpb257LW1pcHMzZH0gaW1wbGllcyBAb3B0 aW9uey1tcGFpcmVkLXNpbmdsZX0uDQogDQorQGl0ZW0gLW1taWNyb21pcHMN CitAaXRlbXggLW1uby1taWNyb21pcHMNCitAb3BpbmRleCBtbWljcm9taXBz DQorQG9waW5kZXggbW5vLW1taWNyb21pcHMNCitHZW5lcmF0ZSAoZG8gbm90 IGdlbmVyYXRlKSBtaWNyb01JUFMgY29kZS4NCisNCitNaWNyb01JUFMgY29k ZSBnZW5lcmF0aW9uIGNhbiBhbHNvIGJlIGNvbnRyb2xsZWQgb24gYSBwZXIt ZnVuY3Rpb24gYmFzaXMNCitieSBtZWFucyBvZiBAY29kZXttaWNyb21pcHN9 IGFuZCBAY29kZXtub21pY3JvbWlwc30gYXR0cmlidXRlcy4NCitAeHJlZntG dW5jdGlvbiBBdHRyaWJ1dGVzfSwgZm9yIG1vcmUgaW5mb3JtYXRpb24uDQor DQogQGl0ZW0gLW1tdA0KIEBpdGVteCAtbW5vLW10DQogQG9waW5kZXggbW10 DQpJbmRleDogZG9jL21kLnRleGkNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBkb2MvbWQudGV4aQkocmV2aXNpb24gMTk1MzUxKQ0KKysrIGRvYy9t ZC50ZXhpCSh3b3JraW5nIGNvcHkpDQpAQCAtMjkxNiw2ICsyOTE2LDE5IEBA IEZsb2F0aW5nLXBvaW50IHplcm8uDQogDQogQGl0ZW0gUg0KIEFuIGFkZHJl c3MgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIG5vbi1tYWNybyBsb2FkIG9yIHN0 b3JlLg0KKw0KK0BpdGVtIFpDDQorV2hlbiBjb21waWxpbmcgbWljcm9NSVBT IGNvZGUsIHRoaXMgY29uc3RyYWluZyBtYXRjaGVzIGEgbWVtb3J5IG9wZXJh bmQNCit3aG9zZSBhZGRyZXNzIGlzIGZvcm1lZCBmcm9tIGEgYmFzZSByZWdp c3RlciBhbmQgYSAxMi1iaXQgb2Zmc2V0LiAgVGhlc2UNCitvcGVyYW5kcyBj YW4gYmUgdXNlZCBmb3IgbWljcm9NSVBTIGluc3RydWN0aW9ucyBzdWNoIGFz IEBjb2Rle2xsfSBhbmQNCitAY29kZXtzY30uICBXaGVuIG5vdCBjb21waWxp bmcgZm9yIG1pY3JvTUlQUyBjb2RlLCBAY29kZXtaQ30gaXMNCitlcXVpdmFs ZW50IHRvIEBjb2Rle1J9Lg0KKw0KK0BpdGVtIFpEDQorV2hlbiBjb21waWxp bmcgbWljcm9NSVBTIGNvZGUsIHRoaXMgY29uc3RyYWludCBtYXRjaGVzIGFu IGFkZHJlc3Mgb3BlcmFuZA0KK3RoYXQgaXMgZm9ybWVkIGZyb20gYSBiYXNl IHJlZ2lzdGVyIGFuZCBhIDEyLWJpdCBvZmZzZXQuICBUaGVzZSBvcGVyYW5k cw0KK2NhbiBiZSB1c2VkIGZvciBtaWNyb01JUFMgaW5zdHJ1Y3Rpb25zIHN1 Y2ggYXMgQGNvZGV7cHJlZmV0Y2h9LiAgV2hlbg0KK25vdCBjb21waWxpbmcg Zm9yIG1pY3JvTUlQUyBjb2RlLCBAY29kZXtZQ30gaXMgZXF1aXZhbGVudCB0 byBAY29kZXtwfS4NCiBAZW5kIHRhYmxlDQogDQogQGl0ZW0gTW90b3JvbGEg NjgweDAtLS1AZmlsZXtjb25maWcvbTY4ay9jb25zdHJhaW50cy5tZH0NCklu ZGV4OiBjb25maWd1cmUNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBj b25maWd1cmUJKHJldmlzaW9uIDE5NTM1MSkNCisrKyBjb25maWd1cmUJKHdv cmtpbmcgY29weSkNCkBAIC0yNTY2Niw2ICsyNTY2NiwzNyBAQCAkYXNfZWNo byAiI2RlZmluZSBIQVZFX0FTX0dOVV9BVFRSSUJVVEUgMSIgPj5jb25mZA0K IA0KIGZpDQogDQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgYXNzZW1ibGVyIGZvciAubWljcm9taXBz IHN1cHBvcnQiID4mNQ0KKyRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxl ciBmb3IgLm1pY3JvbWlwcyBzdXBwb3J0Li4uICIgPiY2OyB9DQoraWYgdGVz dCAiJHtnY2NfY3ZfYXNfbWljcm9taXBzX3N1cHBvcnQrc2V0fSIgPSBzZXQ7 IHRoZW4gOg0KKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCitlbHNl DQorICBnY2NfY3ZfYXNfbWljcm9taXBzX3N1cHBvcnQ9bm8NCisgIGlmIHRl c3QgeCRnY2NfY3ZfYXMgIT0geDsgdGhlbg0KKyAgICAkYXNfZWNobyAnLnNl dCBtaWNyb21pcHMnID4gY29uZnRlc3Qucw0KKyAgICBpZiB7IGFjX3RyeT0n JGdjY19jdl9hcyAkZ2NjX2N2X2FzX2ZsYWdzICAtbyBjb25mdGVzdC5vIGNv bmZ0ZXN0LnMgPiY1Jw0KKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6 JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUNCisg IChldmFsICRhY190cnkpIDI+JjUNCisgIGFjX3N0YXR1cz0kPw0KKyAgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFj X3N0YXR1cyIgPiY1DQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9DQor ICAgIHRoZW4NCisJZ2NjX2N2X2FzX21pY3JvbWlwc19zdXBwb3J0PXllcw0K KyAgICBlbHNlDQorICAgICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJv Z3JhbSB3YXMiID4mNQ0KKyAgICAgIGNhdCBjb25mdGVzdC5zID4mNQ0KKyAg ICBmaQ0KKyAgICBybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0LnMNCisgIGZp DQorZmkNCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGdjY19jdl9hc19taWNyb21pcHNfc3VwcG9ydCIgPiY1 DQorJGFzX2VjaG8gIiRnY2NfY3ZfYXNfbWljcm9taXBzX3N1cHBvcnQiID4m NjsgfQ0KK2lmIHRlc3QgJGdjY19jdl9hc19taWNyb21pcHNfc3VwcG9ydCA9 IHllczsgdGhlbg0KKw0KKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0FTX01J Q1JPTUlQUyAxIiA+PmNvbmZkZWZzLmgNCisNCitmaQ0KKw0KICAgICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGFzc2VtYmxlciBmb3IgLmR0cHJlbHdvcmQgc3VwcG9ydCIgPiY1DQogJGFz X2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGZvciAuZHRwcmVsd29yZCBz dXBwb3J0Li4uICIgPiY2OyB9DQogaWYgdGVzdCAiJHtnY2NfY3ZfYXNfbWlw c19kdHByZWx3b3JkK3NldH0iID0gc2V0OyB0aGVuIDoNCkluZGV4OiBjb25m aWcuaW4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBjb25maWcuaW4J KHJldmlzaW9uIDE5NTM1MSkNCisrKyBjb25maWcuaW4JKHdvcmtpbmcgY29w eSkNCkBAIC0yNjYsMTIgKzI2Niw2IEBADQogI2VuZGlmDQogDQogDQotLyog RGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIFNQQVJDNCBpbnN0 cnVjdGlvbnMuICovDQotI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQNCi0jdW5k ZWYgSEFWRV9BU19TUEFSQzQNCi0jZW5kaWYNCi0NCi0NCiAvKiBEZWZpbmUg aWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgZnBybmQuICovDQogI2lmbmRl ZiBVU0VEX0ZPUl9UQVJHRVQNCiAjdW5kZWYgSEFWRV9BU19GUFJORA0KQEAg LTQ3Nyw2ICs0NzEsMTIgQEANCiAjZW5kaWYNCiANCiANCisvKiBEZWZpbmUg aWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgU1BBUkM0IGluc3RydWN0aW9u cy4gKi8NCisjaWZuZGVmIFVTRURfRk9SX1RBUkdFVA0KKyN1bmRlZiBIQVZF X0FTX1NQQVJDNA0KKyNlbmRpZg0KKw0KKw0KIC8qIERlZmluZSBpZiB5b3Vy IGFzc2VtYmxlciBhbmQgbGlua2VyIHN1cHBvcnQgR09UREFUQV9PUCByZWxv Y3MuICovDQogI2lmbmRlZiBVU0VEX0ZPUl9UQVJHRVQNCiAjdW5kZWYgSEFW RV9BU19TUEFSQ19HT1REQVRBX09QDQpAQCAtMTAzNCw2ICsxMDM0LDEyIEBA DQogI2VuZGlmDQogDQogDQorLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVy IHN1cHBvcnRzIHRoZSAuc2V0IG1pY3JvbWlwcyBkaXJlY3RpdmUgKi8NCisj aWZuZGVmIFVTRURfRk9SX1RBUkdFVA0KKyN1bmRlZiBIQVZFX0dBU19NSUNS T01JUFMNCisjZW5kaWYNCisNCisNCiAvKiBEZWZpbmUgaWYgeW91ciBhc3Nl bWJsZXIgc3VwcG9ydHMgLm5zdWJzcGEgY29tZGF0IG9wdGlvbi4gKi8NCiAj aWZuZGVmIFVTRURfRk9SX1RBUkdFVA0KICN1bmRlZiBIQVZFX0dBU19OU1VC U1BBX0NPTURBVA0KQEAgLTEyMjgsNyArMTIzNCw3IEBADQogI2VuZGlmDQog DQogDQotLyogRGVmaW5lIGlmIHlvdXIgUG93ZXJQQzY0IGxpbmtlciBzdXBw b3J0cyBhIGxhcmdlIFRPQy4gKi8NCisvKiBEZWZpbmUgaWYgeW91ciBBSVgg bGlua2VyIHN1cHBvcnRzIGEgbGFyZ2UgVE9DLiAqLw0KICNpZm5kZWYgVVNF RF9GT1JfVEFSR0VUDQogI3VuZGVmIEhBVkVfTERfTEFSR0VfVE9DDQogI2Vu ZGlmDQpJbmRleDogY29uZmlndXJlLmFjDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gY29uZmlndXJlLmFjCShyZXZpc2lvbiAxOTUzNTEpDQorKysg Y29uZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpDQpAQCAtNDAyMCw2ICs0MDIw LDEyIEBAIExDRjA6DQogICAgICAgW0FDX0RFRklORShIQVZFX0FTX0dOVV9B VFRSSUJVVEUsIDEsDQogCSAgW0RlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBz dXBwb3J0cyAuZ251X2F0dHJpYnV0ZS5dKV0pDQogDQorICAgIGdjY19HQVNf Q0hFQ0tfRkVBVFVSRShbLm1pY3JvbWlwcyBzdXBwb3J0XSwNCisgICAgICBn Y2NfY3ZfYXNfbWljcm9taXBzX3N1cHBvcnQsLCwNCisgICAgICBbLnNldCBt aWNyb21pcHNdLCwNCisgICAgICBbQUNfREVGSU5FKEhBVkVfR0FTX01JQ1JP TUlQUywgMSwNCisgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIGFzc2VtYmxl ciBzdXBwb3J0cyB0aGUgLnNldCBtaWNyb21pcHMgZGlyZWN0aXZlXSldKQ0K Kw0KICAgICBnY2NfR0FTX0NIRUNLX0ZFQVRVUkUoWy5kdHByZWx3b3JkIHN1 cHBvcnRdLA0KICAgICAgIGdjY19jdl9hc19taXBzX2R0cHJlbHdvcmQsIFsy LDE4LDBdLCwNCiAgICAgICBbLnNlY3Rpb24gLnRkYXRhLCJhd1QiLEBwcm9n Yml0cw0KSW5kZXg6IGNvbmZpZy9taXBzL21pcHMtdGFibGVzLm9wdA0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGNvbmZpZy9taXBzL21pcHMtdGFi bGVzLm9wdAkocmV2aXNpb24gMTk1MzUxKQ0KKysrIGNvbmZpZy9taXBzL21p cHMtdGFibGVzLm9wdAkod29ya2luZyBjb3B5KQ0KQEAgLTM3MywyNTQgKzM3 MywyNjAgQEAgRW51bVZhbHVlDQogRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVl KSBTdHJpbmcobTRrKSBWYWx1ZSgzOSkgQ2Fub25pY2FsDQogDQogRW51bVZh bHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoNGtlYykg VmFsdWUoNDApIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1 ZSkgU3RyaW5nKG0xNGtjKSBWYWx1ZSg0MCkgQ2Fub25pY2FsDQogDQogRW51 bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjRr ZWMpIFZhbHVlKDQwKQ0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3Ry aW5nKG0xNGspIFZhbHVlKDQxKSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUN Ci1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg0a2VtKSBWYWx1 ZSg0MSkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBT dHJpbmcoNGtlYykgVmFsdWUoNDIpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1 ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI0a2VtKSBW YWx1ZSg0MSkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhy NGtlYykgVmFsdWUoNDIpDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2Fy Y2hfb3B0X3ZhbHVlKSBTdHJpbmcoNGtlcCkgVmFsdWUoNDIpIENhbm9uaWNh bA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDRrZW0pIFZh bHVlKDQzKSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNf YXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyNGtlcCkgVmFsdWUoNDIpDQorRW51 bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjRrZW0pIFZhbHVlKDQz KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkg U3RyaW5nKDRrc2QpIFZhbHVlKDQzKSBDYW5vbmljYWwNCitFbnVtKG1pcHNf YXJjaF9vcHRfdmFsdWUpIFN0cmluZyg0a2VwKSBWYWx1ZSg0NCkgQ2Fub25p Y2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVl KSBTdHJpbmcocjRrc2QpIFZhbHVlKDQzKQ0KK0VudW0obWlwc19hcmNoX29w dF92YWx1ZSkgU3RyaW5nKHI0a2VwKSBWYWx1ZSg0NCkNCiANCiBFbnVtVmFs dWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygyNGtjKSBW YWx1ZSg0NCkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVl KSBTdHJpbmcoNGtzZCkgVmFsdWUoNDUpIENhbm9uaWNhbA0KIA0KIEVudW1W YWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIyNGtj KSBWYWx1ZSg0NCkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmlu ZyhyNGtzZCkgVmFsdWUoNDUpDQogDQogRW51bVZhbHVlDQotRW51bShtaXBz X2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRrZjJfMSkgVmFsdWUoNDUpIENh bm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDI0 a2MpIFZhbHVlKDQ2KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVt KG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMjRrZjJfMSkgVmFsdWUo NDUpDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjI0a2Mp IFZhbHVlKDQ2KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29w dF92YWx1ZSkgU3RyaW5nKDI0a2YpIFZhbHVlKDQ2KSBDYW5vbmljYWwNCitF bnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygyNGtmMl8xKSBWYWx1 ZSg0NykgQ2Fub25pY2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2Fy Y2hfb3B0X3ZhbHVlKSBTdHJpbmcocjI0a2YpIFZhbHVlKDQ2KQ0KK0VudW0o bWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIyNGtmMl8xKSBWYWx1ZSg0 NykNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUp IFN0cmluZygyNGtmMV8xKSBWYWx1ZSg0NykgQ2Fub25pY2FsDQorRW51bSht aXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRrZikgVmFsdWUoNDgpIENh bm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92 YWx1ZSkgU3RyaW5nKHIyNGtmMV8xKSBWYWx1ZSg0NykNCitFbnVtKG1pcHNf YXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMjRrZikgVmFsdWUoNDgpDQogDQog RW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmco MjRrZngpIFZhbHVlKDQ4KSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9v cHRfdmFsdWUpIFN0cmluZygyNGtmMV8xKSBWYWx1ZSg0OSkgQ2Fub25pY2Fs DQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBT dHJpbmcocjI0a2Z4KSBWYWx1ZSg0OCkNCitFbnVtKG1pcHNfYXJjaF9vcHRf dmFsdWUpIFN0cmluZyhyMjRrZjFfMSkgVmFsdWUoNDkpDQogDQogRW51bVZh bHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRreCkg VmFsdWUoNDkpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1 ZSkgU3RyaW5nKDI0a2Z4KSBWYWx1ZSg1MCkgQ2Fub25pY2FsDQogDQogRW51 bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjI0 a3gpIFZhbHVlKDQ5KQ0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3Ry aW5nKHIyNGtmeCkgVmFsdWUoNTApDQogDQogRW51bVZhbHVlDQotRW51bSht aXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRrZWMpIFZhbHVlKDUwKSBD YW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygy NGt4KSBWYWx1ZSg1MSkgQ2Fub25pY2FsDQogDQogRW51bVZhbHVlDQotRW51 bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjI0a2VjKSBWYWx1ZSg1 MCkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMjRreCkg VmFsdWUoNTEpDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0 X3ZhbHVlKSBTdHJpbmcoMjRrZWYyXzEpIFZhbHVlKDUxKSBDYW5vbmljYWwN CitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygyNGtlYykgVmFs dWUoNTIpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19h cmNoX29wdF92YWx1ZSkgU3RyaW5nKHIyNGtlZjJfMSkgVmFsdWUoNTEpDQor RW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjI0a2VjKSBWYWx1 ZSg1MikNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFs dWUpIFN0cmluZygyNGtlZikgVmFsdWUoNTIpIENhbm9uaWNhbA0KK0VudW0o bWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDI0a2VmMl8xKSBWYWx1ZSg1 MykgQ2Fub25pY2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hf b3B0X3ZhbHVlKSBTdHJpbmcocjI0a2VmKSBWYWx1ZSg1MikNCitFbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMjRrZWYyXzEpIFZhbHVlKDUz KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkg U3RyaW5nKDI0a2VmMV8xKSBWYWx1ZSg1MykgQ2Fub25pY2FsDQorRW51bSht aXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRrZWYpIFZhbHVlKDU0KSBD YW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRf dmFsdWUpIFN0cmluZyhyMjRrZWYxXzEpIFZhbHVlKDUzKQ0KK0VudW0obWlw c19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIyNGtlZikgVmFsdWUoNTQpDQog DQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcoMjRrZWZ4KSBWYWx1ZSg1NCkgQ2Fub25pY2FsDQorRW51bShtaXBzX2Fy Y2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRrZWYxXzEpIFZhbHVlKDU1KSBDYW5v bmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFs dWUpIFN0cmluZyhyMjRrZWZ4KSBWYWx1ZSg1NCkNCitFbnVtKG1pcHNfYXJj aF9vcHRfdmFsdWUpIFN0cmluZyhyMjRrZWYxXzEpIFZhbHVlKDU1KQ0KIA0K IEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5n KDI0a2V4KSBWYWx1ZSg1NSkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hf b3B0X3ZhbHVlKSBTdHJpbmcoMjRrZWZ4KSBWYWx1ZSg1NikgQ2Fub25pY2Fs DQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBT dHJpbmcocjI0a2V4KSBWYWx1ZSg1NSkNCitFbnVtKG1pcHNfYXJjaF9vcHRf dmFsdWUpIFN0cmluZyhyMjRrZWZ4KSBWYWx1ZSg1NikNCiANCiBFbnVtVmFs dWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygzNGtjKSBW YWx1ZSg1NikgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVl KSBTdHJpbmcoMjRrZXgpIFZhbHVlKDU3KSBDYW5vbmljYWwNCiANCiBFbnVt VmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMzRr YykgVmFsdWUoNTYpDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcocjI0a2V4KSBWYWx1ZSg1NykNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygzNGtmMl8xKSBWYWx1ZSg1Nykg Q2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmco MzRrYykgVmFsdWUoNTgpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVu dW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIzNGtmMl8xKSBWYWx1 ZSg1NykNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMzRr YykgVmFsdWUoNTgpDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hf b3B0X3ZhbHVlKSBTdHJpbmcoMzRrZikgVmFsdWUoNTgpIENhbm9uaWNhbA0K K0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDM0a2YyXzEpIFZh bHVlKDU5KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNf YXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMzRrZikgVmFsdWUoNTgpDQorRW51 bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjM0a2YyXzEpIFZhbHVl KDU5KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1 ZSkgU3RyaW5nKDM0a2YxXzEpIFZhbHVlKDU5KSBDYW5vbmljYWwNCitFbnVt KG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygzNGtmKSBWYWx1ZSg2MCkg Q2Fub25pY2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0 X3ZhbHVlKSBTdHJpbmcocjM0a2YxXzEpIFZhbHVlKDU5KQ0KK0VudW0obWlw c19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIzNGtmKSBWYWx1ZSg2MCkNCiAN CiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmlu ZygzNGtmeCkgVmFsdWUoNjApIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNo X29wdF92YWx1ZSkgU3RyaW5nKDM0a2YxXzEpIFZhbHVlKDYxKSBDYW5vbmlj YWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUp IFN0cmluZyhyMzRrZngpIFZhbHVlKDYwKQ0KK0VudW0obWlwc19hcmNoX29w dF92YWx1ZSkgU3RyaW5nKHIzNGtmMV8xKSBWYWx1ZSg2MSkNCiANCiBFbnVt VmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygzNGt4 KSBWYWx1ZSg2MSkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3Zh bHVlKSBTdHJpbmcoMzRrZngpIFZhbHVlKDYyKSBDYW5vbmljYWwNCiANCiBF bnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhy MzRreCkgVmFsdWUoNjEpDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBT dHJpbmcocjM0a2Z4KSBWYWx1ZSg2MikNCiANCiBFbnVtVmFsdWUNCi1FbnVt KG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygzNGtuKSBWYWx1ZSg2Mikg Q2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmco MzRreCkgVmFsdWUoNjMpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVu dW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIzNGtuKSBWYWx1ZSg2 MikNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMzRreCkg VmFsdWUoNjMpDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0 X3ZhbHVlKSBTdHJpbmcoNzRrYykgVmFsdWUoNjMpIENhbm9uaWNhbA0KK0Vu dW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDM0a24pIFZhbHVlKDY0 KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9v cHRfdmFsdWUpIFN0cmluZyhyNzRrYykgVmFsdWUoNjMpDQorRW51bShtaXBz X2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjM0a24pIFZhbHVlKDY0KQ0KIA0K IEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5n KDc0a2YyXzEpIFZhbHVlKDY0KSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJj aF9vcHRfdmFsdWUpIFN0cmluZyg3NGtjKSBWYWx1ZSg2NSkgQ2Fub25pY2Fs DQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBT dHJpbmcocjc0a2YyXzEpIFZhbHVlKDY0KQ0KK0VudW0obWlwc19hcmNoX29w dF92YWx1ZSkgU3RyaW5nKHI3NGtjKSBWYWx1ZSg2NSkNCiANCiBFbnVtVmFs dWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg3NGtmKSBW YWx1ZSg2NSkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVl KSBTdHJpbmcoNzRrZjJfMSkgVmFsdWUoNjYpIENhbm9uaWNhbA0KIA0KIEVu dW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI3 NGtmKSBWYWx1ZSg2NSkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0 cmluZyhyNzRrZjJfMSkgVmFsdWUoNjYpDQogDQogRW51bVZhbHVlDQotRW51 bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoNzRrZjFfMSkgVmFsdWUo NjYpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3Ry aW5nKDc0a2YpIFZhbHVlKDY3KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUN Ci1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyNzRrZjFfMSkg VmFsdWUoNjYpDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmco cjc0a2YpIFZhbHVlKDY3KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19h cmNoX29wdF92YWx1ZSkgU3RyaW5nKDc0a2Z4KSBWYWx1ZSg2NykgQ2Fub25p Y2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoNzRrZjFf MSkgVmFsdWUoNjgpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVudW0o bWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI3NGtmeCkgVmFsdWUoNjcp DQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjc0a2YxXzEp IFZhbHVlKDY4KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29w dF92YWx1ZSkgU3RyaW5nKDc0a3gpIFZhbHVlKDY4KSBDYW5vbmljYWwNCitF bnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg3NGtmeCkgVmFsdWUo NjkpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNo X29wdF92YWx1ZSkgU3RyaW5nKHI3NGt4KSBWYWx1ZSg2OCkNCitFbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyNzRrZngpIFZhbHVlKDY5KQ0K IA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3Ry aW5nKDc0a2YzXzIpIFZhbHVlKDY5KSBDYW5vbmljYWwNCitFbnVtKG1pcHNf YXJjaF9vcHRfdmFsdWUpIFN0cmluZyg3NGt4KSBWYWx1ZSg3MCkgQ2Fub25p Y2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVl KSBTdHJpbmcocjc0a2YzXzIpIFZhbHVlKDY5KQ0KK0VudW0obWlwc19hcmNo X29wdF92YWx1ZSkgU3RyaW5nKHI3NGt4KSBWYWx1ZSg3MCkNCiANCiBFbnVt VmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygxMDA0 a2MpIFZhbHVlKDcwKSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRf dmFsdWUpIFN0cmluZyg3NGtmM18yKSBWYWx1ZSg3MSkgQ2Fub25pY2FsDQog DQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcocjEwMDRrYykgVmFsdWUoNzApDQorRW51bShtaXBzX2FyY2hfb3B0X3Zh bHVlKSBTdHJpbmcocjc0a2YzXzIpIFZhbHVlKDcxKQ0KIA0KIEVudW1WYWx1 ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDEwMDRrZjJf MSkgVmFsdWUoNzEpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92 YWx1ZSkgU3RyaW5nKDEwMDRrYykgVmFsdWUoNzIpIENhbm9uaWNhbA0KIA0K IEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5n KHIxMDA0a2YyXzEpIFZhbHVlKDcxKQ0KK0VudW0obWlwc19hcmNoX29wdF92 YWx1ZSkgU3RyaW5nKHIxMDA0a2MpIFZhbHVlKDcyKQ0KIA0KIEVudW1WYWx1 ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDEwMDRrZikg VmFsdWUoNzIpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1 ZSkgU3RyaW5nKDEwMDRrZjJfMSkgVmFsdWUoNzMpIENhbm9uaWNhbA0KIA0K IEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5n KHIxMDA0a2YpIFZhbHVlKDcyKQ0KK0VudW0obWlwc19hcmNoX29wdF92YWx1 ZSkgU3RyaW5nKHIxMDA0a2YyXzEpIFZhbHVlKDczKQ0KIA0KIEVudW1WYWx1 ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDEwMDRrZjFf MSkgVmFsdWUoNzMpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92 YWx1ZSkgU3RyaW5nKDEwMDRrZikgVmFsdWUoNzQpIENhbm9uaWNhbA0KIA0K IEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5n KHIxMDA0a2YxXzEpIFZhbHVlKDczKQ0KK0VudW0obWlwc19hcmNoX29wdF92 YWx1ZSkgU3RyaW5nKHIxMDA0a2YpIFZhbHVlKDc0KQ0KIA0KIEVudW1WYWx1 ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDVrYykgVmFs dWUoNzQpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkg U3RyaW5nKDEwMDRrZjFfMSkgVmFsdWUoNzUpIENhbm9uaWNhbA0KIA0KIEVu dW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI1 a2MpIFZhbHVlKDc0KQ0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3Ry aW5nKHIxMDA0a2YxXzEpIFZhbHVlKDc1KQ0KIA0KIEVudW1WYWx1ZQ0KLUVu dW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDVrZikgVmFsdWUoNzUp IENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5n KDVrYykgVmFsdWUoNzYpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVu dW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI1a2YpIFZhbHVlKDc1 KQ0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI1a2MpIFZh bHVlKDc2KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92 YWx1ZSkgU3RyaW5nKDIwa2MpIFZhbHVlKDc2KSBDYW5vbmljYWwNCitFbnVt KG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg1a2YpIFZhbHVlKDc3KSBD YW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRf dmFsdWUpIFN0cmluZyhyMjBrYykgVmFsdWUoNzYpDQorRW51bShtaXBzX2Fy Y2hfb3B0X3ZhbHVlKSBTdHJpbmcocjVrZikgVmFsdWUoNzcpDQogDQogRW51 bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoc2Ix KSBWYWx1ZSg3NykgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3Zh bHVlKSBTdHJpbmcoMjBrYykgVmFsdWUoNzgpIENhbm9uaWNhbA0KIA0KIEVu dW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHNi MWEpIFZhbHVlKDc4KSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRf dmFsdWUpIFN0cmluZyhyMjBrYykgVmFsdWUoNzgpDQogDQogRW51bVZhbHVl DQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoc3I3MTAwMCkg VmFsdWUoNzkpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1 ZSkgU3RyaW5nKHNiMSkgVmFsdWUoNzkpIENhbm9uaWNhbA0KIA0KIEVudW1W YWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHNyNzFr KSBWYWx1ZSg3OSkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmlu ZyhzYjFhKSBWYWx1ZSg4MCkgQ2Fub25pY2FsDQogDQogRW51bVZhbHVlDQot RW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoeGxyKSBWYWx1ZSg4 MCkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcoc3I3MTAwMCkgVmFsdWUoODEpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1 ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKGxvb25nc29u M2EpIFZhbHVlKDgxKSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRf dmFsdWUpIFN0cmluZyhzcjcxaykgVmFsdWUoODEpDQogDQogRW51bVZhbHVl DQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcob2N0ZW9uKSBW YWx1ZSg4MikgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVl KSBTdHJpbmcoeGxyKSBWYWx1ZSg4MikgQ2Fub25pY2FsDQogDQogRW51bVZh bHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcob2N0ZW9u KykgVmFsdWUoODMpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92 YWx1ZSkgU3RyaW5nKGxvb25nc29uM2EpIFZhbHVlKDgzKSBDYW5vbmljYWwN CiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0 cmluZyhvY3Rlb24yKSBWYWx1ZSg4NCkgQ2Fub25pY2FsDQorRW51bShtaXBz X2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcob2N0ZW9uKSBWYWx1ZSg4NCkgQ2Fu b25pY2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3Zh bHVlKSBTdHJpbmcoeGxwKSBWYWx1ZSg4NSkgQ2Fub25pY2FsDQorRW51bSht aXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcob2N0ZW9uKykgVmFsdWUoODUp IENhbm9uaWNhbA0KIA0KK0VudW1WYWx1ZQ0KK0VudW0obWlwc19hcmNoX29w dF92YWx1ZSkgU3RyaW5nKG9jdGVvbjIpIFZhbHVlKDg2KSBDYW5vbmljYWwN CisNCitFbnVtVmFsdWUNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0 cmluZyh4bHApIFZhbHVlKDg3KSBDYW5vbmljYWwNCisNCkluZGV4OiBjb25m aWcvbWlwcy9nbnUtdXNlci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gY29uZmlnL21pcHMvZ251LXVzZXIuaAkocmV2aXNpb24gMTk1MzUxKQ0K KysrIGNvbmZpZy9taXBzL2dudS11c2VyLmgJKHdvcmtpbmcgY29weSkNCkBA IC0xMzcsMyArMTM3LDEyIEBAIGV4dGVybiBjb25zdCBjaGFyICpob3N0X2Rl dGVjdF9sb2NhbF9jcHUgKGludCBhcmdjDQogI2RlZmluZSBFTkRGSUxFX1NQ RUMgXA0KICAgR05VX1VTRVJfVEFSR0VUX01BVEhGSUxFX1NQRUMgIiAiIFwN CiAgIEdOVV9VU0VSX1RBUkdFVF9FTkRGSUxFX1NQRUMNCisNCisjdW5kZWYg U1VCVEFSR0VUX09WRVJSSURFX09QVElPTlMNCisjZGVmaW5lIFNVQlRBUkdF VF9PVkVSUklERV9PUFRJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXA0KK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAvKiBtaWNyb01JUFMg UExUIGVudHJpZXMgYXJlIG5vbi1taWNyb01JUFMuICAqLyAgICAgICAgICAg ICAgIFwNCisgIFRBUkdFVF9JTlRFUkxJTktfQ09NUFJFU1NFRCA9IDE7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KK30gd2hpbGUgKDApDQor DQorDQpJbmRleDogY29uZmlnL21pcHMvbWljcm9taXBzLm1kDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gY29uZmlnL21pcHMvbWljcm9taXBzLm1k CShyZXZpc2lvbiAwKQ0KKysrIGNvbmZpZy9taXBzL21pY3JvbWlwcy5tZAko cmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMTE4IEBADQorKGRlZmluZV9pbnNu ICIqc3RvcmVfd29yZF9tdWx0aXBsZSINCisgIFsobWF0Y2hfcGFyYWxsZWwg MCAiIg0KKyAgICAgICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAxICJtZW1v cnlfb3BlcmFuZCIpDQorCSAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAicmVn aXN0ZXJfb3BlcmFuZCIpKV0pXQ0KKyAgIlRBUkdFVF9NSUNST01JUFMNCisg ICAmJiB1bWlwc19zYXZlX3Jlc3RvcmVfcGF0dGVybl9wICh0cnVlLCBvcGVy YW5kc1swXSkiDQorICB7IHJldHVybiB1bWlwc19vdXRwdXRfc2F2ZV9yZXN0 b3JlICh0cnVlLCBvcGVyYW5kc1swXSk7IH0NCisgIFsoc2V0X2F0dHIgInR5 cGUiICJtdWx0aW1lbSIpDQorICAgKHNldF9hdHRyICJtb2RlIiAiU0kiKQ0K KyAgIChzZXRfYXR0ciAiY2FuX2RlbGF5IiAibm8iKV0pDQorDQorKGRlZmlu ZV9pbnNuICIqbG9hZF93b3JkX211bHRpcGxlIg0KKyAgWyhtYXRjaF9wYXJh bGxlbCAwICIiDQorICAgICAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDEg InJlZ2lzdGVyX29wZXJhbmQiKQ0KKwkgICAgIChtYXRjaF9vcGVyYW5kOlNJ IDIgIm1lbW9yeV9vcGVyYW5kIikpXSldDQorICAiVEFSR0VUX01JQ1JPTUlQ Uw0KKyAgICYmIHVtaXBzX3NhdmVfcmVzdG9yZV9wYXR0ZXJuX3AgKGZhbHNl LCBvcGVyYW5kc1swXSkiDQorICB7IHJldHVybiB1bWlwc19vdXRwdXRfc2F2 ZV9yZXN0b3JlIChmYWxzZSwgb3BlcmFuZHNbMF0pOyB9DQorICBbKHNldF9h dHRyICJ0eXBlIiAibXVsdGltZW0iKQ0KKyAgIChzZXRfYXR0ciAibW9kZSIg IlNJIikNCisgICAoc2V0X2F0dHIgImNhbl9kZWxheSIgIm5vIildKQ0KKw0K KzsgRm9yIGx3cA0KKyhkZWZpbmVfcGVlcGhvbGUyDQorICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpTSSAwICJkX29wZXJhbmQiICIiKQ0KKyAgICAgICAgKG1h dGNoX29wZXJhbmQ6U0kgMSAibm9uX3ZvbGF0aWxlX21lbV9vcGVyYW5kIiAi IikpDQorICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAyICJkX29wZXJhbmQi ICIiKQ0KKyAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAibm9uX3ZvbGF0 aWxlX21lbV9vcGVyYW5kIiAiIikpXQ0KKyAgIlRBUkdFVF9NSUNST01JUFMN CisgICAmJiB1bWlwc19sb2FkX3N0b3JlX3BhaXJfcCAodHJ1ZSwgb3BlcmFu ZHMpIg0KKyAgWyhwYXJhbGxlbCBbKHNldCAobWF0Y2hfZHVwIDApIChtYXRj aF9kdXAgMSkpDQorICAgICAgICAgICAgICAoc2V0IChtYXRjaF9kdXAgMikg KG1hdGNoX2R1cCAzKSldKV0NCispDQorDQorKGRlZmluZV9pbnNuICIqbHdw Ig0KKyAgWyhwYXJhbGxlbCBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJk X29wZXJhbmQiKQ0KKwkJICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAibm9uX3Zv bGF0aWxlX21lbV9vcGVyYW5kIikpDQorCSAgICAgIChzZXQgKG1hdGNoX29w ZXJhbmQ6U0kgMiAiZF9vcGVyYW5kIikNCisJCSAgIChtYXRjaF9vcGVyYW5k OlNJIDMgIm5vbl92b2xhdGlsZV9tZW1fb3BlcmFuZCIpKV0pXQ0KKw0KKyAg IlRBUkdFVF9NSUNST01JUFMNCisgICAmJiB1bWlwc19sb2FkX3N0b3JlX3Bh aXJfcCAodHJ1ZSwgb3BlcmFuZHMpIg0KKyAgew0KKyAgICB1bWlwc19vdXRw dXRfbG9hZF9zdG9yZV9wYWlyICh0cnVlLCBvcGVyYW5kcyk7DQorICAgIHJl dHVybiAiIjsNCisgIH0NCisgIFsoc2V0X2F0dHIgInR5cGUiICJsb2FkIikN CisgICAoc2V0X2F0dHIgIm1vZGUiICJTSSIpDQorICAgKHNldF9hdHRyICJj YW5fZGVsYXkiICJubyIpXSkNCisNCis7IEZvciBzd3ANCisoZGVmaW5lX3Bl ZXBob2xlMg0KKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAibm9uX3Zv bGF0aWxlX21lbV9vcGVyYW5kIiAiIikNCisgICAgICAgIChtYXRjaF9vcGVy YW5kOlNJIDEgImRfb3BlcmFuZCIgIiIpKQ0KKyAgIChzZXQgKG1hdGNoX29w ZXJhbmQ6U0kgMiAibm9uX3ZvbGF0aWxlX21lbV9vcGVyYW5kIiAiIikNCisg ICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgImRfb3BlcmFuZCIgIiIpKV0N CisgICJUQVJHRVRfTUlDUk9NSVBTDQorICAgJiYgdW1pcHNfbG9hZF9zdG9y ZV9wYWlyX3AgKGZhbHNlLCBvcGVyYW5kcykiDQorICBbKHBhcmFsbGVsIFso c2V0IChtYXRjaF9kdXAgMCkgKG1hdGNoX2R1cCAxKSkNCisgICAgICAgICAg ICAgIChzZXQgKG1hdGNoX2R1cCAyKSAobWF0Y2hfZHVwIDMpKV0pXQ0KKykN CisNCisoZGVmaW5lX2luc24gIipzd3AiDQorICBbKHBhcmFsbGVsIFsoc2V0 IChtYXRjaF9vcGVyYW5kOlNJIDAgIm5vbl92b2xhdGlsZV9tZW1fb3BlcmFu ZCIpDQorCQkgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJkX29wZXJhbmQiKSkN CisJICAgICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAyICJub25fdm9sYXRp bGVfbWVtX29wZXJhbmQiKQ0KKwkJICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAi ZF9vcGVyYW5kIikpXSldDQorDQorICAiVEFSR0VUX01JQ1JPTUlQUw0KKyAg ICYmIHVtaXBzX2xvYWRfc3RvcmVfcGFpcl9wIChmYWxzZSwgb3BlcmFuZHMp Ig0KKyAgew0KKyAgICB1bWlwc19vdXRwdXRfbG9hZF9zdG9yZV9wYWlyIChm YWxzZSwgb3BlcmFuZHMpOw0KKyAgICByZXR1cm4gIiI7DQorICB9DQorICBb KHNldF9hdHRyICJ0eXBlIiAic3RvcmUiKQ0KKyAgIChzZXRfYXR0ciAibW9k ZSIgIlNJIikNCisgICAoc2V0X2F0dHIgImNhbl9kZWxheSIgIm5vIildKQ0K Kw0KKyhkZWZpbmVfaW5zbiAibWlwc19qcmFkZGl1c3AiDQorICBbKHBhcmFs bGVsIFsocmV0dXJuKQ0KKyAgICAgICAgICAgICAgKHVzZSAocmVnOlNJIDMx KSkNCisJICAgICAgKHNldCAocmVnOlNJIDI5KQ0KKwkJICAgKHBsdXM6U0kg KHJlZzpTSSAyOSkNCisJCQkgICAgKG1hdGNoX29wZXJhbmQgMCAiY29uc3Rf aW50X29wZXJhbmQiKSkpXSldDQorICAiVEFSR0VUX01JQ1JPTUlQUyINCisg ICJqcmFkZGl1c3BcdCUwIg0KKyAgWyhzZXRfYXR0ciAidHlwZSIgInRyYXAi KQ0KKyAgIChzZXRfYXR0ciAibW9kZSIgIlNJIikNCisgICAoc2V0X2F0dHIg ImNhbl9kZWxheSIgIm5vIildKQ0KKw0KKzsgRm9yIG1vdmVwDQorKGRlZmlu ZV9wZWVwaG9sZTINCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOk1PVkVQMSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikNCisgICAgICAgIChtYXRjaF9vcGVy YW5kOk1PVkVQMSAxICJtb3ZlcF9vcGVyYW5kIiAiIikpDQorICAgKHNldCAo bWF0Y2hfb3BlcmFuZDpNT1ZFUDIgMiAicmVnaXN0ZXJfb3BlcmFuZCIgIiIp DQorICAgICAgICAobWF0Y2hfb3BlcmFuZDpNT1ZFUDIgMyAibW92ZXBfb3Bl cmFuZCIgIiIpKV0NCisgICJUQVJHRVRfTUlDUk9NSVBTDQorICAgJiYgdW1p cHNfbW92ZXBfdGFyZ2V0X3AgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1syXSki DQorICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9kdXAgMCkgKG1hdGNoX2R1 cCAxKSkNCisgICAgICAgICAgICAgIChzZXQgKG1hdGNoX2R1cCAyKSAobWF0 Y2hfZHVwIDMpKV0pXQ0KKykNCisNCisoZGVmaW5lX2luc24gIiptb3ZlcDxN T1ZFUDE6bW9kZT48TU9WRVAyOm1vZGU+Ig0KKyAgWyhwYXJhbGxlbCBbKHNl dCAobWF0Y2hfb3BlcmFuZDpNT1ZFUDEgMCAicmVnaXN0ZXJfb3BlcmFuZCIp DQorCQkgICAobWF0Y2hfb3BlcmFuZDpNT1ZFUDEgMSAibW92ZXBfb3BlcmFu ZCIpKQ0KKwkgICAgICAoc2V0IChtYXRjaF9vcGVyYW5kOk1PVkVQMiAyICJy ZWdpc3Rlcl9vcGVyYW5kIikNCisJCSAgIChtYXRjaF9vcGVyYW5kOk1PVkVQ MiAzICJtb3ZlcF9vcGVyYW5kIikpXSldDQorICAiVEFSR0VUX01JQ1JPTUlQ Uw0KKyAgICYmIHVtaXBzX21vdmVwX3RhcmdldF9wIChvcGVyYW5kc1swXSwg b3BlcmFuZHNbMl0pIg0KK3sNCisgIGlmIChSRUdOTyAob3BlcmFuZHNbMF0p IDwgUkVHTk8gKG9wZXJhbmRzWzJdKSkNCisgICAgcmV0dXJuICJtb3ZlcFx0 JTAsJTIsJXoxLCV6MyI7DQorICBlbHNlDQorICAgIHJldHVybiAibW92ZXBc dCUyLCUwLCV6MywlejEiOw0KK30NCisgIFsoc2V0X2F0dHIgInR5cGUiICJt b3ZlIikNCisgICAoc2V0X2F0dHIgIm1vZGUiICI8TU9ERT4iKQ0KKyAgIChz ZXRfYXR0ciAiY2FuX2RlbGF5IiAibm8iKV0pDQpJbmRleDogY29uZmlnL21p cHMvY29uc3RyYWludHMubWQNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t LSBjb25maWcvbWlwcy9jb25zdHJhaW50cy5tZAkocmV2aXNpb24gMTk1MzUx KQ0KKysrIGNvbmZpZy9taXBzL2NvbnN0cmFpbnRzLm1kCSh3b3JraW5nIGNv cHkpDQpAQCAtMjMyLDYgKzIzMiwyNiBAQA0KICAgICJAaW50ZXJuYWwiDQog ICAgKG1hdGNoX29wZXJhbmQgMCAibG93X2JpdG1hc2tfb3BlcmFuZCIpKQ0K IA0KKyhkZWZpbmVfbWVtb3J5X2NvbnN0cmFpbnQgIlpDIg0KKyAgIldoZW4g Y29tcGlsaW5nIG1pY3JvTUlQUyBjb2RlLCB0aGlzIGNvbnN0cmFpbmcgbWF0 Y2hlcyBhIG1lbW9yeSBvcGVyYW5kDQorICAgd2hvc2UgYWRkcmVzcyBpcyBm b3JtZWQgZnJvbSBhIGJhc2UgcmVnaXN0ZXIgYW5kIGEgMTItYml0IG9mZnNl dC4gIFRoZXNlDQorICAgb3BlcmFuZHMgY2FuIGJlIHVzZWQgZm9yIG1pY3Jv TUlQUyBpbnN0cnVjdGlvbnMgc3VjaCBhcyBAY29kZXtsbH0gYW5kDQorICAg QGNvZGV7c2N9LiAgV2hlbiBub3QgY29tcGlsaW5nIGZvciBtaWNyb01JUFMg Y29kZSwgQGNvZGV7WkN9IGlzDQorICAgZXF1aXZhbGVudCB0byBAY29kZXtS fS4iDQorICAoYW5kIChtYXRjaF9jb2RlICJtZW0iKQ0KKyAgICAgICAoaW9y IChhbmQgKG1hdGNoX3Rlc3QgIlRBUkdFVF9NSUNST01JUFMiKQ0KKwkJICht YXRjaF90ZXN0ICJ1bWlwc18xMmJpdF9vZmZzZXRfYWRkcmVzc19wIChYRVhQ IChvcCwgMCksIG1vZGUpIikpDQorCSAgICAobWF0Y2hfdGVzdCAibWlwc19h ZGRyZXNzX2luc25zIChYRVhQIChvcCwgMCksIG1vZGUsIGZhbHNlKSIpKSkp DQorDQorKGRlZmluZV9hZGRyZXNzX2NvbnN0cmFpbnQgIlpEIg0KKyAgIldo ZW4gY29tcGlsaW5nIG1pY3JvTUlQUyBjb2RlLCB0aGlzIGNvbnN0cmFpbnQg bWF0Y2hlcyBhbiBhZGRyZXNzIG9wZXJhbmQNCisgICB0aGF0IGlzIGZvcm1l ZCBmcm9tIGEgYmFzZSByZWdpc3RlciBhbmQgYSAxMi1iaXQgb2Zmc2V0LiAg VGhlc2Ugb3BlcmFuZHMNCisgICBjYW4gYmUgdXNlZCBmb3IgbWljcm9NSVBT IGluc3RydWN0aW9ucyBzdWNoIGFzIEBjb2Rle3ByZWZldGNofS4gIFdoZW4N CisgICBub3QgY29tcGlsaW5nIGZvciBtaWNyb01JUFMgY29kZSwgQGNvZGV7 WUN9IGlzIGVxdWl2YWxlbnQgdG8gQGNvZGV7cH0uIg0KKyAgIChpb3IgKGFu ZCAobWF0Y2hfdGVzdCAiVEFSR0VUX01JQ1JPTUlQUyIpDQorCSAgICAgKG1h dGNoX3Rlc3QgInVtaXBzXzEyYml0X29mZnNldF9hZGRyZXNzX3AgKG9wLCBt b2RlKSIpKQ0KKwkobWF0Y2hfdGVzdCAibWlwc19hZGRyZXNzX2luc25zIChv cCwgbW9kZSwgZmFsc2UpIikpKQ0KKw0KIChkZWZpbmVfbWVtb3J5X2NvbnN0 cmFpbnQgIlpSIg0KICAiQGludGVybmFsDQogICBBbiBhZGRyZXNzIHZhbGlk IGZvciBsb2FkaW5nL3N0b3JpbmcgcmVnaXN0ZXIgZXhjbHVzaXZlIg0KSW5k ZXg6IGNvbmZpZy9taXBzL3ByZWRpY2F0ZXMubWQNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSBjb25maWcvbWlwcy9wcmVkaWNhdGVzLm1kCShyZXZp c2lvbiAxOTUzNTEpDQorKysgY29uZmlnL21pcHMvcHJlZGljYXRlcy5tZAko d29ya2luZyBjb3B5KQ0KQEAgLTEyMiw2ICsxMjIsMTUgQEANCiAJCSAgICA/ IE0xNl9SRUdfUCAoUkVHTk8gKG9wKSkNCiAJCSAgICA6IEdQX1JFR19QIChS RUdOTyAob3ApKSIpKSkNCiANCisoZGVmaW5lX3ByZWRpY2F0ZSAibW92ZXBf cmVnaXN0ZXIiDQorICAoYW5kIChtYXRjaF9jb2RlICJyZWciKQ0KKyAgICAg ICAoaW9yIChtYXRjaF90ZXN0ICgiSU5fUkFOR0UgKFJFR05PIChvcCksIDAs IDMpIikpDQorCSAgICAobWF0Y2hfdGVzdCAoIklOX1JBTkdFIChSRUdOTyAo b3ApLCAxNiwgMjApIikpKSkpDQorDQorKGRlZmluZV9wcmVkaWNhdGUgIm1v dmVwX29wZXJhbmQiDQorICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgImNvbnN0 XzBfb3BlcmFuZCIpDQorICAgICAgIChtYXRjaF9vcGVyYW5kIDAgIm1vdmVw X3JlZ2lzdGVyIikpKQ0KKw0KIChkZWZpbmVfcHJlZGljYXRlICJsb19vcGVy YW5kIg0KICAgKGFuZCAobWF0Y2hfY29kZSAicmVnIikNCiAgICAgICAgKG1h dGNoX3Rlc3QgIlJFR05PIChvcCkgPT0gTE9fUkVHTlVNIikpKQ0KQEAgLTM3 MSwzICszODAsMTEgQEANCiAoZGVmaW5lX3ByZWRpY2F0ZSAibWVtX25vb2Zz X29wZXJhbmQiDQogICAoYW5kIChtYXRjaF9jb2RlICJtZW0iKQ0KICAgICAg ICAobWF0Y2hfY29kZSAicmVnIiAiMCIpKSkNCisNCis7OyBSZXR1cm4gMSBp ZiB0aGUgb3BlcmFuZCBpcyBpbiBub24tdm9sYXRpbGUgbWVtb3J5LiAgTm90 ZSB0aGF0IGR1cmluZyB0aGUNCis7OyBSVEwgZ2VuZXJhdGlvbiBwaGFzZSwg bWVtb3J5X29wZXJhbmQgZG9lcyBub3QgcmV0dXJuIFRSVUUgZm9yIHZvbGF0 aWxlDQorOzsgbWVtb3J5IHJlZmVyZW5jZXMuICBTbyB0aGlzIGZ1bmN0aW9u IGFsbG93cyB1cyB0byByZWNvZ25pemUgdm9sYXRpbGUNCis7OyByZWZlcmVu Y2VzIHdoZXJlIGl0J3Mgc2FmZS4NCisoZGVmaW5lX3ByZWRpY2F0ZSAibm9u X3ZvbGF0aWxlX21lbV9vcGVyYW5kIg0KKyAgKGFuZCAobWF0Y2hfb3BlcmFu ZCAwICJtZW1vcnlfb3BlcmFuZCIpDQorICAgICAgIChub3QgKG1hdGNoX3Rl c3QgIk1FTV9WT0xBVElMRV9QIChvcCkiKSkpKQ0KSW5kZXg6IGNvbmZpZy9t aXBzL21pcHMubWQNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBjb25m aWcvbWlwcy9taXBzLm1kCShyZXZpc2lvbiAxOTUzNTEpDQorKysgY29uZmln L21pcHMvbWlwcy5tZAkod29ya2luZyBjb3B5KQ0KQEAgLTM0MiwxMyArMzQy LDE0IEBADQogOzsgc3luY2xvb3AJbWVtb3J5IGF0b21pYyBvcGVyYXRpb24g aW1wbGVtZW50ZWQgYXMgYSBzeW5jIGxvb3ANCiA7OyBub3AJCW5vIG9wZXJh dGlvbg0KIDs7IGdob3N0CWFuIGluc3RydWN0aW9uIHRoYXQgcHJvZHVjZXMg bm8gcmVhbCBjb2RlDQorOzsgbXVsdGltZW0JbWljcm9NSVBTIG11bHRpd29y ZCBsb2FkIGFuZCBzdG9yZQ0KIChkZWZpbmVfYXR0ciAidHlwZSINCiAgICJ1 bmtub3duLGJyYW5jaCxqdW1wLGNhbGwsbG9hZCxmcGxvYWQsZnBpZHhsb2Fk LHN0b3JlLGZwc3RvcmUsZnBpZHhzdG9yZSwNCiAgICBwcmVmZXRjaCxwcmVm ZXRjaHgsY29uZG1vdmUsbXRjLG1mYyxtdGhpLG10bG8sbWZoaSxtZmxvLGNv bnN0LGFyaXRoLGxvZ2ljYWwsDQogICAgc2hpZnQsc2x0LHNpZ25leHQsY2x6 LHBvcCx0cmFwLGltdWwsaW11bDMsaW11bDNuYyxpbWFkZCxpZGl2LGlkaXYz LG1vdmUsDQogICAgZm1vdmUsZmFkZCxmbXVsLGZtYWRkLGZkaXYsZnJkaXYs ZnJkaXYxLGZyZGl2MixmYWJzLGZuZWcsZmNtcCxmY3Z0LGZzcXJ0LA0KICAg IGZyc3FydCxmcnNxcnQxLGZyc3FydDIsZHNwbWFjLGRzcG1hY3NhdCxhY2Nl eHQsYWNjbW9kLGRzcGFsdSxkc3BhbHVzYXQsDQotICAgbXVsdGksYXRvbWlj LHN5bmNsb29wLG5vcCxnaG9zdCINCisgICBtdWx0aSxhdG9taWMsc3luY2xv b3Asbm9wLGdob3N0LG11bHRpbWVtIg0KICAgKGNvbmQgWyhlcV9hdHRyICJq YWwiICIhdW5zZXQiKSAoY29uc3Rfc3RyaW5nICJjYWxsIikNCiAJIChlcV9h dHRyICJnb3QiICJsb2FkIikgKGNvbnN0X3N0cmluZyAibG9hZCIpDQogDQpA QCAtNDEzLDkgKzQxNCwxNSBAQA0KIA0KIDs7IExlbmd0aCBvZiBpbnN0cnVj dGlvbiBpbiBieXRlcy4NCiAoZGVmaW5lX2F0dHIgImxlbmd0aCIgIiINCi0g ICAoY29uZCBbOzsgRGlyZWN0IGJyYW5jaCBpbnN0cnVjdGlvbnMgaGF2ZSBh IHJhbmdlIG9mIFstMHgyMDAwMCwweDFmZmZjXSwNCi0JICA7OyByZWxhdGl2 ZSB0byB0aGUgYWRkcmVzcyBvZiB0aGUgZGVsYXkgc2xvdC4gIElmIGEgYnJh bmNoIGlzDQotCSAgOzsgb3V0c2lkZSB0aGlzIHJhbmdlLCB3ZSBoYXZlIGEg Y2hvaWNlIG9mIHR3byBzZXF1ZW5jZXMuDQorICAgKGNvbmQgWyhhbmQgKGVx X2F0dHIgImV4dGVuZGVkX21pcHMxNiIgInllcyIpDQorCSAgICAgICAobWF0 Y2hfdGVzdCAiVEFSR0VUX01JUFMxNiIpKQ0KKwkgIChjb25zdF9pbnQgOCkN CisNCisJICA7OyBEaXJlY3QgbWljcm9NSVBTIGJyYW5jaCBpbnN0cnVjdGlv bnMgaGF2ZSBhIHJhbmdlIG9mDQorCSAgOzsgWy0weDEwMDAwLDB4ZmZmZV0s IG90aGVyd2lzZSB0aGUgcmFuZ2UgaXMgWy0weDIwMDAwLDB4MWZmZmNdLg0K KwkgIDs7IElmIGEgYnJhbmNoIGlzIG91dHNpZGUgdGhpcyByYW5nZSwgd2Ug aGF2ZSBhIGNob2ljZSBvZiB0d28NCisJICA7OyBzZXF1ZW5jZXMuDQorCSAg OzsNCiAJICA7OyBGb3IgUElDLCBhbiBvdXQtb2YtcmFuZ2UgYnJhbmNoIGxp a2U6DQogCSAgOzsNCiAJICA7OwlibmUJcjEscjIsdGFyZ2V0DQpAQCAtNDUx LDEwICs0NTgsMTcgQEANCiAJICA7OyBmcm9tIHRoZSBzaG9ydGVuX2JyYW5j aGVzIHJlZmVyZW5jZSBhZGRyZXNzLg0KIAkgIChhbmQgKGVxX2F0dHIgInR5 cGUiICJicmFuY2giKQ0KIAkgICAgICAgKG5vdCAobWF0Y2hfdGVzdCAiVEFS R0VUX01JUFMxNiIpKSkNCi0JICAoY29uZCBbKGFuZCAobGUgKG1pbnVzICht YXRjaF9kdXAgMCkgKHBjKSkgKGNvbnN0X2ludCAxMzEwNjQpKQ0KLQkJICAg ICAgKGxlIChtaW51cyAocGMpIChtYXRjaF9kdXAgMCkpIChjb25zdF9pbnQg MTMxMDY4KSkpDQorCSAgCSA7OyBhbnkgdmFyaWFudCBjYW4gaGFuZGxlIHRo ZSAxNy1iaXQgcmFuZ2UNCisJICAoY29uZCBbKGFuZCAobGUgKG1pbnVzICht YXRjaF9kdXAgMCkgKHBjKSkgKGNvbnN0X2ludCA2NTUzMikpDQorCQkgICAg ICAobGUgKG1pbnVzIChwYykgKG1hdGNoX2R1cCAwKSkgKGNvbnN0X2ludCA2 NTUzNCkpKQ0KIAkJICAgKGNvbnN0X2ludCA0KQ0KIA0KKwkJIDs7IFRoZSAx OC1iaXQgcmFuZ2UgaXMgT0sgb3RoZXIgdGhhbiBmb3IgbWljcm9NSVBTLg0K KwkJIChhbmQgKGVxIChzeW1ib2xfcmVmICJUQVJHRVRfTUlDUk9NSVBTIikg KGNvbnN0X2ludCAwKSkNCisJCSAgICAgIChhbmQgKGxlIChtaW51cyAobWF0 Y2hfZHVwIDApIChwYykpIChjb25zdF9pbnQgMTMxMDY0KSkNCisJCSAgICAg IAkgICAobGUgKG1pbnVzIChwYykgKG1hdGNoX2R1cCAwKSkgKGNvbnN0X2lu dCAxMzEwNjgpKSkpDQorCQkgICAoY29uc3RfaW50IDQpDQorDQogCQkgOzsg VGhlIG5vbi1QSUMgY2FzZTogYnJhbmNoLCBmaXJzdCBkZWxheSBzbG90LCBh bmQgSi4NCiAJCSAobWF0Y2hfdGVzdCAiVEFSR0VUX0FCU09MVVRFX0pVTVBT IikNCiAJCSAgIChjb25zdF9pbnQgMTIpXQ0KQEAgLTcxMiw2ICs3MjYsOSBA QA0KIDs7IG1vZGVzLg0KIChkZWZpbmVfbW9kZV9pdGVyYXRvciBHUFIyIFtT SSAoREkgIlRBUkdFVF82NEJJVCIpXSkNCiANCisoZGVmaW5lX21vZGVfaXRl cmF0b3IgTU9WRVAxIFtTSSBTRl0pDQorKGRlZmluZV9tb2RlX2l0ZXJhdG9y IE1PVkVQMiBbU0kgU0ZdKQ0KKw0KIDs7IFRoaXMgbW9kZSBpdGVyYXRvciBh bGxvd3MgOkhJTE8gdG8gYmUgdXNlZCBhcyB0aGUgbW9kZSBvZiB0aGUNCiA7 OyBjb25jYXRlbmF0ZWQgSEkgYW5kIExPIHJlZ2lzdGVycy4NCiAoZGVmaW5l X21vZGVfaXRlcmF0b3IgSElMTyBbKERJICIhVEFSR0VUXzY0QklUIikgKFRJ ICJUQVJHRVRfNjRCSVQiKV0pDQpAQCAtMzkzNyw3ICszOTU0LDcgQEANCiAo ZGVmaW5lX2luc24gIm1vdl88bG9hZD5sIg0KICAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ZCIpDQogCSh1bnNw ZWM6R1BSIFsobWF0Y2hfb3BlcmFuZDpCTEsgMSAibWVtb3J5X29wZXJhbmQi ICJtIikNCi0JCSAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAibWVtb3J5X29w ZXJhbmQiICJtIildDQorCQkgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgIm1l bW9yeV9vcGVyYW5kIiAiWkMiKV0NCiAJCSAgICBVTlNQRUNfTE9BRF9MRUZU KSldDQogICAiIVRBUkdFVF9NSVBTMTYgJiYgbWlwc19tZW1fZml0c19tb2Rl X3AgKDxNT0RFPm1vZGUsIG9wZXJhbmRzWzFdKSINCiAgICI8bG9hZD5sXHQl MCwlMiINCkBAIC0zOTQ3LDcgKzM5NjQsNyBAQA0KIChkZWZpbmVfaW5zbiAi bW92Xzxsb2FkPnIiDQogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUFIgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj1kIikNCiAJKHVuc3BlYzpHUFIgWyhtYXRj aF9vcGVyYW5kOkJMSyAxICJtZW1vcnlfb3BlcmFuZCIgIm0iKQ0KLQkJICAg ICAobWF0Y2hfb3BlcmFuZDpRSSAyICJtZW1vcnlfb3BlcmFuZCIgIm0iKQ0K KwkJICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJtZW1vcnlfb3BlcmFuZCIg IlpDIikNCiAJCSAgICAgKG1hdGNoX29wZXJhbmQ6R1BSIDMgInJlZ2lzdGVy X29wZXJhbmQiICIwIildDQogCQkgICAgVU5TUEVDX0xPQURfUklHSFQpKV0N CiAgICIhVEFSR0VUX01JUFMxNiAmJiBtaXBzX21lbV9maXRzX21vZGVfcCAo PE1PREU+bW9kZSwgb3BlcmFuZHNbMV0pIg0KQEAgLTM5NTgsNyArMzk3NSw3 IEBADQogKGRlZmluZV9pbnNuICJtb3ZfPHN0b3JlPmwiDQogICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpCTEsgMCAibWVtb3J5X29wZXJhbmQiICI9bSIpDQog CSh1bnNwZWM6QkxLIFsobWF0Y2hfb3BlcmFuZDpHUFIgMSAicmVnX29yXzBf b3BlcmFuZCIgImRKIikNCi0JCSAgICAgKG1hdGNoX29wZXJhbmQ6UUkgMiAi bWVtb3J5X29wZXJhbmQiICJtIildDQorCQkgICAgIChtYXRjaF9vcGVyYW5k OlFJIDIgIm1lbW9yeV9vcGVyYW5kIiAiWkMiKV0NCiAJCSAgICBVTlNQRUNf U1RPUkVfTEVGVCkpXQ0KICAgIiFUQVJHRVRfTUlQUzE2ICYmIG1pcHNfbWVt X2ZpdHNfbW9kZV9wICg8TU9ERT5tb2RlLCBvcGVyYW5kc1swXSkiDQogICAi PHN0b3JlPmxcdCV6MSwlMiINCkBAIC0zOTY4LDcgKzM5ODUsNyBAQA0KIChk ZWZpbmVfaW5zbiAibW92XzxzdG9yZT5yIg0KICAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6QkxLIDAgIm1lbW9yeV9vcGVyYW5kIiAiK20iKQ0KIAkodW5zcGVj OkJMSyBbKG1hdGNoX29wZXJhbmQ6R1BSIDEgInJlZ19vcl8wX29wZXJhbmQi ICJkSiIpDQotCQkgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgIm1lbW9yeV9v cGVyYW5kIiAibSIpDQorCQkgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgIm1l bW9yeV9vcGVyYW5kIiAiWkMiKQ0KIAkJICAgICAobWF0Y2hfZHVwIDApXQ0K IAkJICAgIFVOU1BFQ19TVE9SRV9SSUdIVCkpXQ0KICAgIiFUQVJHRVRfTUlQ UzE2ICYmIG1pcHNfbWVtX2ZpdHNfbW9kZV9wICg8TU9ERT5tb2RlLCBvcGVy YW5kc1swXSkiDQpAQCAtNTQ0NSwxMiArNTQ2MiwzNSBAQA0KIAkJCSAgKG1h dGNoX29wZXJhbmQ6R1BSIDMgInJlZ19vcl8wX29wZXJhbmQiICJkSiIpXSkN CiAJIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpDQogCSAo cGMpKSldDQotICAiIVRBUkdFVF9NSVBTMTYiDQorICAiIVRBUkdFVF9NSVBT MTYgJiYgIVRBUkdFVF9NSUNST01JUFMiDQogew0KICAgcmV0dXJuIG1pcHNf b3V0cHV0X2NvbmRpdGlvbmFsX2JyYW5jaCAoaW5zbiwgb3BlcmFuZHMsDQog CQkJCQkgTUlQU19CUkFOQ0ggKCJiJUMxIiwgIiUyLCV6MywlMCIpLA0KIAkJ CQkJIE1JUFNfQlJBTkNIICgiYiVOMSIsICIlMiwlejMsJTAiKSk7DQogfQ0K KyAgWyhzZXRfYXR0ciAidHlwZSIgImJyYW5jaCIpDQorICAgKHNldF9hdHRy ICJtb2RlIiAibm9uZSIpXSkNCisNCisoZGVmaW5lX2luc24gIipicmFuY2hf ZXF1YWxpdHk8bW9kZT5fbWljcm9taXBzIg0KKyAgWyhzZXQgKHBjKQ0KKwko aWZfdGhlbl9lbHNlDQorCSAobWF0Y2hfb3BlcmF0b3IgMSAiZXF1YWxpdHlf b3BlcmF0b3IiDQorCQkJIFsobWF0Y2hfb3BlcmFuZDpHUFIgMiAicmVnaXN0 ZXJfb3BlcmFuZCIgImQiKQ0KKwkJCSAgKG1hdGNoX29wZXJhbmQ6R1BSIDMg InJlZ19vcl8wX29wZXJhbmQiICJkSiIpXSkNCisJIChsYWJlbF9yZWYgKG1h dGNoX29wZXJhbmQgMCAiIiAiIikpDQorCSAocGMpKSldDQorICAiVEFSR0VU X01JQ1JPTUlQUyINCit7DQorICAvKiBGb3IgYSBzaW1wbGUgYm5leiBvciBi ZXF6IG1pY3JvTUlQUyBicmFuY2guICAqLw0KKyAgaWYgKG9wZXJhbmRzWzNd ID09IGNvbnN0MF9ydHggJiYgZ2V0X2F0dHJfbGVuZ3RoIChpbnNuKSA8PSA4 KQ0KKyAgICByZXR1cm4gbWlwc19vdXRwdXRfY29uZGl0aW9uYWxfYnJhbmNo IChpbnNuLCBvcGVyYW5kcywNCisJCQkJCSAgICIlKmIlQzF6JTpcdCUyLCUw IiwNCisJCQkJCSAgICIlKmIlTjF6JTpcdCUyLCUwIik7DQorDQorICByZXR1 cm4gbWlwc19vdXRwdXRfY29uZGl0aW9uYWxfYnJhbmNoIChpbnNuLCBvcGVy YW5kcywNCisJCQkJCSBNSVBTX0JSQU5DSCAoImIlQzEiLCAiJTIsJXozLCUw IiksDQorCQkJCQkgTUlQU19CUkFOQ0ggKCJiJU4xIiwgIiUyLCV6MywlMCIp KTsNCit9DQogICBbKHNldF9hdHRyICJ0eXBlIiAiYnJhbmNoIildKQ0KIA0K IChkZWZpbmVfaW5zbiAiKmJyYW5jaF9lcXVhbGl0eTxtb2RlPl9pbnZlcnRl ZCINCkBAIC01NDYxLDcgKzU1MDEsNyBAQA0KIAkJCSAgKG1hdGNoX29wZXJh bmQ6R1BSIDMgInJlZ19vcl8wX29wZXJhbmQiICJkSiIpXSkNCiAJIChwYykN CiAJIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMCAiIiAiIikpKSldDQot ICAiIVRBUkdFVF9NSVBTMTYiDQorICAiIVRBUkdFVF9NSVBTMTYgJiYgIVRB UkdFVF9NSUNST01JUFMiDQogew0KICAgcmV0dXJuIG1pcHNfb3V0cHV0X2Nv bmRpdGlvbmFsX2JyYW5jaCAoaW5zbiwgb3BlcmFuZHMsDQogCQkJCQkgTUlQ U19CUkFOQ0ggKCJiJU4xIiwgIiUyLCV6MywlMCIpLA0KQEAgLTU1MzIsNiAr NTU3MiwyOSBAQA0KIAkJICAgICAgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFu ZCAxKSkNCiAJCSAgICAgIChwYykpKV0pDQogDQorKGRlZmluZV9pbnNuICIq YnJhbmNoX2VxdWFsaXR5PG1vZGU+X2ludmVydGVkX21pY3JvbWlwcyINCisg IFsoc2V0IChwYykNCisJKGlmX3RoZW5fZWxzZQ0KKwkgKG1hdGNoX29wZXJh dG9yIDAgImVxdWFsaXR5X29wZXJhdG9yIg0KKwkJCSBbKG1hdGNoX29wZXJh bmQ6R1BSIDIgInJlZ2lzdGVyX29wZXJhbmQiICJkIikNCisJCQkgIChtYXRj aF9vcGVyYW5kOkdQUiAzICJyZWdfb3JfMF9vcGVyYW5kIiAiZEoiKV0pDQor CSAocGMpDQorCSAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDEgIiIgIiIp KSkpXQ0KKyAgIlRBUkdFVF9NSUNST01JUFMiDQorew0KKyAgLyogRm9yIGEg c2ltcGxlIGJuZXogb3IgYmVxeiBtaWNyb01JUFMgYnJhbmNoLiAgKi8NCisg IGlmIChvcGVyYW5kc1szXSA9PSBjb25zdDBfcnR4ICYmIGdldF9hdHRyX2xl bmd0aCAoaW5zbikgPD0gOCkNCisgICAgcmV0dXJuIG1pcHNfb3V0cHV0X2Nv bmRpdGlvbmFsX2JyYW5jaCAoaW5zbiwgb3BlcmFuZHMsDQorCQkJCQkgICAi JSpiJU4weiU6XHQlMiwlMSIsDQorCQkJCQkgICAiJSpiJUMweiU6XHQlMiwl MSIpOw0KKw0KKyAgcmV0dXJuIG1pcHNfb3V0cHV0X2NvbmRpdGlvbmFsX2Jy YW5jaCAoaW5zbiwgb3BlcmFuZHMsDQorCQkJCQkgTUlQU19CUkFOQ0ggKCJi JU4wIiwgIiUyLCV6MywlMSIpLA0KKwkJCQkJIE1JUFNfQlJBTkNIICgiYiVD MCIsICIlMiwlejMsJTEiKSk7DQorfQ0KKyAgWyhzZXRfYXR0ciAidHlwZSIg ImJyYW5jaCIpDQorICAgKHNldF9hdHRyICJtb2RlIiAibm9uZSIpXSkNCisN CiA7OyBCcmFuY2ggaWYgYml0IGlzIHNldC9jbGVhci4NCiANCiAoZGVmaW5l X2luc24gIipicmFuY2hfYml0PGJidj48bW9kZT4iDQpAQCAtNTc2Niw3ICs1 ODI5LDE0IEBADQogICBbKHNldCAocGMpDQogCShsYWJlbF9yZWYgKG1hdGNo X29wZXJhbmQgMCkpKV0NCiAgICIhVEFSR0VUX01JUFMxNiAmJiBUQVJHRVRf QUJTT0xVVEVfSlVNUFMiDQotICB7IHJldHVybiBNSVBTX0FCU09MVVRFX0pV TVAgKCIlKmpcdCVsMCUvIik7IH0NCit7DQorICAvKiBVc2UgYSBicmFuY2gg Zm9yIG1pY3JvTUlQUy4gIFRoZSBhc3NlbWJsZXIgd2lsbCBjaG9vc2UNCisg ICAgIGEgMTYtYml0IGJyYW5jaCwgYSAzMi1iaXQgYnJhbmNoLCBvciBhIDMy LWJpdCBqdW1wLiAgKi8NCisgIGlmIChUQVJHRVRfTUlDUk9NSVBTICYmICFU QVJHRVRfQUJJQ0FMTFNfUElDMikNCisgICAgcmV0dXJuICIlKmJcdCVsMCUv IjsNCisgIGVsc2UNCisgICAgcmV0dXJuIE1JUFNfQUJTT0xVVEVfSlVNUCAo IiUqalx0JWwwJS8iKTsNCit9DQogICBbKHNldF9hdHRyICJ0eXBlIiAianVt cCIpXSkNCiANCiAoZGVmaW5lX2luc24gIipqdW1wX3BpYyINCkBAIC01ODI5 LDcgKzU4OTksMTIgQEANCiAoZGVmaW5lX2luc24gImluZGlyZWN0X2p1bXBf PG1vZGU+Ig0KICAgWyhzZXQgKHBjKSAobWF0Y2hfb3BlcmFuZDpQIDAgInJl Z2lzdGVyX29wZXJhbmQiICJkIikpXQ0KICAgIiINCi0gICIlKmpcdCUwJS8i DQorew0KKyAgaWYgKFRBUkdFVF9NSUNST01JUFMpDQorICAgIHJldHVybiAi JSpqciU6XHQlMCI7DQorICBlbHNlDQorICAgIHJldHVybiAiJSpqXHQlMCUv IjsNCit9DQogICBbKHNldF9hdHRyICJ0eXBlIiAianVtcCIpDQogICAgKHNl dF9hdHRyICJtb2RlIiAibm9uZSIpXSkNCiANCkBAIC01ODczLDcgKzU5NDgs MTIgQEANCiAJKG1hdGNoX29wZXJhbmQ6UCAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiZCIpKQ0KICAgICh1c2UgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAx ICIiICIiKSkpXQ0KICAgIiINCi0gICIlKmpcdCUwJS8iDQorew0KKyAgaWYg KFRBUkdFVF9NSUNST01JUFMpDQorICAgIHJldHVybiAiJSpqciU6XHQlMCI7 DQorICBlbHNlDQorICAgIHJldHVybiAiJSpqXHQlMCUvIjsNCit9DQogICBb KHNldF9hdHRyICJ0eXBlIiAianVtcCIpDQogICAgKHNldF9hdHRyICJtb2Rl IiAibm9uZSIpXSkNCiANCkBAIC02MDk0LDcgKzYxNzQsMTIgQEANCiAgIFso YW55X3JldHVybikNCiAgICAodXNlIChtYXRjaF9vcGVyYW5kIDAgInBtb2Rl X3JlZ2lzdGVyX29wZXJhbmQiICIiKSldDQogICAiIg0KLSAgIiUqalx0JTAl LyINCit7DQorICBpZiAoVEFSR0VUX01JQ1JPTUlQUykNCisgICAgcmV0dXJu ICIlKmpyJTpcdCUwIjsNCisgIGVsc2UNCisgICAgcmV0dXJuICIlKmpcdCUw JS8iOw0KK30NCiAgIFsoc2V0X2F0dHIgInR5cGUiCSJqdW1wIikNCiAgICAo c2V0X2F0dHIgIm1vZGUiCSJub25lIildKQ0KIA0KQEAgLTYzNTAsNyArNjQz NSwxMiBAQA0KICAgWyhjYWxsIChtZW06U0kgKG1hdGNoX29wZXJhbmQgMCAi Y2FsbF9pbnNuX29wZXJhbmQiICJqLFMiKSkNCiAJIChtYXRjaF9vcGVyYW5k IDEgIiIgIiIpKV0NCiAgICJUQVJHRVRfU0lCQ0FMTFMgJiYgU0lCTElOR19D QUxMX1AgKGluc24pIg0KLSAgeyByZXR1cm4gTUlQU19DQUxMICgiaiIsIG9w ZXJhbmRzLCAwLCAxKTsgfQ0KKyAgew0KKyAgICBpZiAoVEFSR0VUX01JQ1JP TUlQUykNCisgICAgICByZXR1cm4gTUlDUk9NSVBTX0ogKG9wZXJhbmRzLCAw KTsNCisgICAgZWxzZQ0KKyAgICAgIHJldHVybiBNSVBTX0NBTEwgKCJqIiwg b3BlcmFuZHMsIDAsIDEpOw0KKyAgfQ0KICAgWyhzZXRfYXR0ciAiamFsIiAi aW5kaXJlY3QsZGlyZWN0IikNCiAgICAoc2V0X2F0dHIgImphbF9tYWNybyIg Im5vIildKQ0KIA0KQEAgLTYzNzEsNyArNjQ2MSwxMiBAQA0KICAgICAgICAg KGNhbGwgKG1lbTpTSSAobWF0Y2hfb3BlcmFuZCAxICJjYWxsX2luc25fb3Bl cmFuZCIgImosUyIpKQ0KICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQg MiAiIiAiIikpKV0NCiAgICJUQVJHRVRfU0lCQ0FMTFMgJiYgU0lCTElOR19D QUxMX1AgKGluc24pIg0KLSAgeyByZXR1cm4gTUlQU19DQUxMICgiaiIsIG9w ZXJhbmRzLCAxLCAyKTsgfQ0KKyAgew0KKyAgICBpZiAoVEFSR0VUX01JQ1JP TUlQUykNCisgICAgICByZXR1cm4gTUlDUk9NSVBTX0ogKG9wZXJhbmRzLCAx KTsNCisgICAgZWxzZQ0KKyAgICAgIHJldHVybiBNSVBTX0NBTEwgKCJqIiwg b3BlcmFuZHMsIDEsIDIpOw0KKyAgfQ0KICAgWyhzZXRfYXR0ciAiamFsIiAi aW5kaXJlY3QsZGlyZWN0IikNCiAgICAoc2V0X2F0dHIgImphbF9tYWNybyIg Im5vIildKQ0KIA0KQEAgLTYzODMsNyArNjQ3OCwxMiBAQA0KIAkoY2FsbCAo bWVtOlNJIChtYXRjaF9kdXAgMSkpDQogCSAgICAgIChtYXRjaF9kdXAgMikp KV0NCiAgICJUQVJHRVRfU0lCQ0FMTFMgJiYgU0lCTElOR19DQUxMX1AgKGlu c24pIg0KLSAgeyByZXR1cm4gTUlQU19DQUxMICgiaiIsIG9wZXJhbmRzLCAx LCAyKTsgfQ0KKyAgew0KKyAgICBpZiAoVEFSR0VUX01JQ1JPTUlQUykNCisg ICAgICByZXR1cm4gTUlDUk9NSVBTX0ogKG9wZXJhbmRzLCAxKTsNCisgICAg ZWxzZQ0KKyAgICAgIHJldHVybiBNSVBTX0NBTEwgKCJqIiwgb3BlcmFuZHMs IDEsIDIpOw0KKyAgfQ0KICAgWyhzZXRfYXR0ciAiamFsIiAiaW5kaXJlY3Qs ZGlyZWN0IikNCiAgICAoc2V0X2F0dHIgImphbF9tYWNybyIgIm5vIildKQ0K IA0KQEAgLTY2MjksNyArNjcyOSw3IEBADQogDQogDQogKGRlZmluZV9pbnNu ICJwcmVmZXRjaCINCi0gIFsocHJlZmV0Y2ggKG1hdGNoX29wZXJhbmQ6UUkg MCAiYWRkcmVzc19vcGVyYW5kIiAicCIpDQorICBbKHByZWZldGNoIChtYXRj aF9vcGVyYW5kOlFJIDAgImFkZHJlc3Nfb3BlcmFuZCIgIlpEIikNCiAJICAg ICAobWF0Y2hfb3BlcmFuZCAxICJjb25zdF9pbnRfb3BlcmFuZCIgIm4iKQ0K IAkgICAgIChtYXRjaF9vcGVyYW5kIDIgImNvbnN0X2ludF9vcGVyYW5kIiAi biIpKV0NCiAgICJJU0FfSEFTX1BSRUZFVENIICYmIFRBUkdFVF9FWFBMSUNJ VF9SRUxPQ1MiDQpAQCAtNjkyMiw2ICs3MDIyLDkgQEANCiA7IE1JUFMgZml4 ZWQtcG9pbnQgaW5zdHJ1Y3Rpb25zLg0KIChpbmNsdWRlICJtaXBzLWZpeGVk Lm1kIikNCiANCis7IG1pY3JvTUlQUyBwYXR0ZXJucy4NCisoaW5jbHVkZSAi bWljcm9taXBzLm1kIikNCisNCiA7IFNULU1pY3JvZWxlY3Ryb25pY3MgTG9v bmdzb24tMkUvMkYtc3BlY2lmaWMgcGF0dGVybnMuDQogKGluY2x1ZGUgImxv b25nc29uLm1kIikNCiANCkluZGV4OiBjb25maWcvbWlwcy9taXBzLm9wdA0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGNvbmZpZy9taXBzL21pcHMu b3B0CShyZXZpc2lvbiAxOTUzNTEpDQorKysgY29uZmlnL21pcHMvbWlwcy5v cHQJKHdvcmtpbmcgY29weSkNCkBAIC0yMTcsOSArMjE3LDE4IEBAIG1oYXJk LWZsb2F0DQogVGFyZ2V0IFJlcG9ydCBSZWplY3ROZWdhdGl2ZSBJbnZlcnNl TWFzayhTT0ZUX0ZMT0FUX0FCSSwgSEFSRF9GTE9BVF9BQkkpDQogQWxsb3cg dGhlIHVzZSBvZiBoYXJkd2FyZSBmbG9hdGluZy1wb2ludCBBQkkgYW5kIGlu c3RydWN0aW9ucw0KIA0KK21pbnRlcmxpbmstY29tcHJlc3NlZA0KK1Rhcmdl dCBSZXBvcnQgVmFyKFRBUkdFVF9JTlRFUkxJTktfQ09NUFJFU1NFRCkgSW5p dCgwKQ0KK0dlbmVyYXRlIGNvZGUgdGhhdCBpcyBsaW5rLWNvbXBhdGlibGUg d2l0aCBNSVBTMTYgYW5kIG1pY3JvTUlQUyBjb2RlLg0KKw0KK21pbnRlcmxp bmstdW5jb21wcmVzc2VkDQorVGFyZ2V0IFJlcG9ydCBWYXIoVEFSR0VUX0lO VEVSTElOS19VTkNPTVBSRVNTRUQpIEluaXQoMSkNCitHZW5lcmF0ZWQgY29k ZSB0aGF0IGlzIGxpbmstY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZCAo dW5jb21wcmVzc2VkKQ0KK01JUFMgSVNBLg0KKw0KIG1pbnRlcmxpbmstbWlw czE2DQotVGFyZ2V0IFJlcG9ydCBWYXIoVEFSR0VUX0lOVEVSTElOS19NSVBT MTYpIEluaXQoMCkNCi1HZW5lcmF0ZSBjb2RlIHRoYXQgY2FuIGJlIHNhZmVs eSBsaW5rZWQgd2l0aCBNSVBTMTYgY29kZS4NCitUYXJnZXQgUmVwb3J0IFZh cihUQVJHRVRfSU5URVJMSU5LX0NPTVBSRVNTRUQpIEluaXQoMCkNCitBbiBh bGlhcyBmb3IgbWludGVybGluay1jb21wcmVzc2VkIHByb3ZpZGVkIGZvciBi YWNrd2FyZC1jb21wYXRpYmlsaXR5Lg0KIA0KIG1pcHMNCiBUYXJnZXQgUmVq ZWN0TmVnYXRpdmUgSm9pbmVkIFRvTG93ZXIgRW51bShtaXBzX21pcHNfb3B0 X3ZhbHVlKSBWYXIobWlwc19pc2Ffb3B0aW9uKQ0KQEAgLTI2MSw2ICsyNzAs MTAgQEAgbW1lbWNweQ0KIFRhcmdldCBSZXBvcnQgTWFzayhNRU1DUFkpDQog RG9uJ3Qgb3B0aW1pemUgYmxvY2sgbW92ZXMNCiANCittbWljcm9taXBzDQor VGFyZ2V0IFJlcG9ydCBNYXNrKE1JQ1JPTUlQUykNCitVc2UgbWljcm9NSVBT IGluc3RydWN0aW9ucw0KKw0KIG1tdA0KIFRhcmdldCBSZXBvcnQgVmFyKFRB UkdFVF9NVCkNCiBBbGxvdyB0aGUgdXNlIG9mIE1UIGluc3RydWN0aW9ucw0K SW5kZXg6IGNvbmZpZy9taXBzL3N5bmMubWQNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSBjb25maWcvbWlwcy9zeW5jLm1kCShyZXZpc2lvbiAxOTUz NTEpDQorKysgY29uZmlnL21pcHMvc3luYy5tZAkod29ya2luZyBjb3B5KQ0K QEAgLTU5LDcgKzU5LDcgQEANCiA7OyBDYW4gYmUgcmVtb3ZlZCBpbiBmYXZv ciBvZiBhdG9taWNfY29tcGFyZV9hbmRfc3dhcCBiZWxvdy4NCiAoZGVmaW5l X2luc24gInN5bmNfY29tcGFyZV9hbmRfc3dhcDxtb2RlPiINCiAgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZk LCZkIikNCi0JKG1hdGNoX29wZXJhbmQ6R1BSIDEgIm1lbW9yeV9vcGVyYW5k IiAiK1IsUiIpKQ0KKwkobWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29w ZXJhbmQiICIrWlIsWlIiKSkNCiAgICAoc2V0IChtYXRjaF9kdXAgMSkNCiAJ KHVuc3BlY192b2xhdGlsZTpHUFIgWyhtYXRjaF9vcGVyYW5kOkdQUiAyICJy ZWdfb3JfMF9vcGVyYW5kIiAiZEosZEoiKQ0KIAkJCSAgICAgIChtYXRjaF9v cGVyYW5kOkdQUiAzICJhcml0aF9vcGVyYW5kIiAiSSxkIildDQpAQCAtODks NyArODksNyBAQA0KIDs7IEhlbHBlciBpbnNuIGZvciBtaXBzX2V4cGFuZF9h dG9taWNfcWloaS4NCiAoZGVmaW5lX2luc24gImNvbXBhcmVfYW5kX3N3YXBf MTIiDQogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPSZkLCZkIikNCi0JKG1hdGNoX29wZXJhbmQ6U0kgMSAibWVt b3J5X29wZXJhbmQiICIrUixSIikpDQorCShtYXRjaF9vcGVyYW5kOlNJIDEg Im1lbW9yeV9vcGVyYW5kIiAiK1pSLFpSIikpDQogICAgKHNldCAobWF0Y2hf ZHVwIDEpDQogCSh1bnNwZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5k OlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJkLGQiKQ0KIAkJCSAgICAgKG1h dGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgImQsZCIpDQpA QCAtMTA2LDcgKzEwNiw3IEBADQogICAgKHNldF9hdHRyICJzeW5jX2luc24x X29wMiIgIjUiKV0pDQogDQogKGRlZmluZV9pbnNuICJzeW5jX2FkZDxtb2Rl PiINCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJtZW1vcnlfb3Bl cmFuZCIgIitSLFIiKQ0KKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAg Im1lbW9yeV9vcGVyYW5kIiAiK1pSLFpSIikNCiAJKHVuc3BlY192b2xhdGls ZTpHUFINCiAgICAgICAgICAgWyhwbHVzOkdQUiAobWF0Y2hfZHVwIDApDQog CQkgICAgIChtYXRjaF9vcGVyYW5kOkdQUiAxICJhcml0aF9vcGVyYW5kIiAi SSxkIikpXQ0KQEAgLTEzNCw3ICsxMzQsNyBAQA0KIA0KIDs7IEhlbHBlciBp bnNuIGZvciBzeW5jXzxvcHRhYj48bW9kZT4NCiAoZGVmaW5lX2luc24gInN5 bmNfPG9wdGFiPl8xMiINCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAg Im1lbW9yeV9vcGVyYW5kIiAiK1IiKQ0KKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6U0kgMCAibWVtb3J5X29wZXJhbmQiICIrWlIiKQ0KIAkodW5zcGVjX3Zv bGF0aWxlOlNJDQogICAgICAgICAgIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJy ZWdpc3Rlcl9vcGVyYW5kIiAiZCIpDQogCSAgIChtYXRjaF9vcGVyYW5kOlNJ IDIgInJlZ2lzdGVyX29wZXJhbmQiICJkIikNCkBAIC0xNzQsNyArMTc0LDcg QEANCiA7OyBIZWxwZXIgaW5zbiBmb3Igc3luY19vbGRfPG9wdGFiPjxtb2Rl Pg0KIChkZWZpbmVfaW5zbiAic3luY19vbGRfPG9wdGFiPl8xMiINCiAgIFso c2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 JmQiKQ0KLQkobWF0Y2hfb3BlcmFuZDpTSSAxICJtZW1vcnlfb3BlcmFuZCIg IitSIikpDQorCShtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5k IiAiK1pSIikpDQogICAgKHNldCAobWF0Y2hfZHVwIDEpDQogCSh1bnNwZWNf dm9sYXRpbGU6U0kNCiAgICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOlNJIDIg InJlZ2lzdGVyX29wZXJhbmQiICJkIikNCkBAIC0yMTcsNyArMjE3LDcgQEAN CiAoZGVmaW5lX2luc24gInN5bmNfbmV3XzxvcHRhYj5fMTIiDQogICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZk IikNCiAJKHVuc3BlY192b2xhdGlsZTpTSQ0KLSAgICAgICAgICBbKG1hdGNo X29wZXJhbmQ6U0kgMSAibWVtb3J5X29wZXJhbmQiICIrUiIpDQorICAgICAg ICAgIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJtZW1vcnlfb3BlcmFuZCIgIita UiIpDQogCSAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJh bmQiICJkIikNCiAJICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJf b3BlcmFuZCIgImQiKQ0KIAkgICAoYXRvbWljX2hpcWlfb3A6U0kgKG1hdGNo X2R1cCAwKQ0KQEAgLTI1Nyw3ICsyNTcsNyBAQA0KIA0KIDs7IEhlbHBlciBp bnNuIGZvciBzeW5jX25hbmQ8bW9kZT4NCiAoZGVmaW5lX2luc24gInN5bmNf bmFuZF8xMiINCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm1lbW9y eV9vcGVyYW5kIiAiK1IiKQ0KKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kg MCAibWVtb3J5X29wZXJhbmQiICIrWlIiKQ0KIAkodW5zcGVjX3ZvbGF0aWxl OlNJDQogICAgICAgICAgIFsobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiZCIpDQogCSAgIChtYXRjaF9vcGVyYW5kOlNJIDIgInJl Z2lzdGVyX29wZXJhbmQiICJkIikNCkBAIC0yOTYsNyArMjk2LDcgQEANCiA7 OyBIZWxwZXIgaW5zbiBmb3Igc3luY19vbGRfbmFuZDxtb2RlPg0KIChkZWZp bmVfaW5zbiAic3luY19vbGRfbmFuZF8xMiINCiAgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9JmQiKQ0KLQkobWF0 Y2hfb3BlcmFuZDpTSSAxICJtZW1vcnlfb3BlcmFuZCIgIitSIikpDQorCSht YXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAiK1pSIikpDQog ICAgKHNldCAobWF0Y2hfZHVwIDEpDQogCSh1bnNwZWNfdm9sYXRpbGU6U0kN CiAgICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29w ZXJhbmQiICJkIikNCkBAIC0zMzcsNyArMzM3LDcgQEANCiAoZGVmaW5lX2lu c24gInN5bmNfbmV3X25hbmRfMTIiDQogICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZkIikNCiAJKHVuc3BlY192 b2xhdGlsZTpTSQ0KLSAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6U0kgMSAi bWVtb3J5X29wZXJhbmQiICIrUiIpDQorICAgICAgICAgIFsobWF0Y2hfb3Bl cmFuZDpTSSAxICJtZW1vcnlfb3BlcmFuZCIgIitaUiIpDQogCSAgIChtYXRj aF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJkIikNCiAJICAg KG1hdGNoX29wZXJhbmQ6U0kgMyAicmVnaXN0ZXJfb3BlcmFuZCIgImQiKQ0K IAkgICAobWF0Y2hfb3BlcmFuZDpTSSA0ICJyZWdfb3JfMF9vcGVyYW5kIiAi ZEoiKV0NCkBAIC0zNjAsNyArMzYwLDcgQEANCiAgICAoc2V0X2F0dHIgInN5 bmNfaW5zbjFfb3AyIiAiNCIpXSkNCiANCiAoZGVmaW5lX2luc24gInN5bmNf c3ViPG1vZGU+Ig0KLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgIm1l bW9yeV9vcGVyYW5kIiAiK1IiKQ0KKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 R1BSIDAgIm1lbW9yeV9vcGVyYW5kIiAiK1pSIikNCiAJKHVuc3BlY192b2xh dGlsZTpHUFINCiAgICAgICAgICAgWyhtaW51czpHUFIgKG1hdGNoX2R1cCAw KQ0KIAkJICAgICAgKG1hdGNoX29wZXJhbmQ6R1BSIDEgInJlZ2lzdGVyX29w ZXJhbmQiICJkIikpXQ0KQEAgLTM3NCw3ICszNzQsNyBAQA0KIDs7IENhbiBi ZSByZW1vdmVkIGluIGZhdm9yIG9mIGF0b21pY19mZXRjaF9hZGQgYmVsb3cu DQogKGRlZmluZV9pbnNuICJzeW5jX29sZF9hZGQ8bW9kZT4iDQogICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpHUFIgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0m ZCwmZCIpDQotCShtYXRjaF9vcGVyYW5kOkdQUiAxICJtZW1vcnlfb3BlcmFu ZCIgIitSLFIiKSkNCisJKG1hdGNoX29wZXJhbmQ6R1BSIDEgIm1lbW9yeV9v cGVyYW5kIiAiK1pSLFpSIikpDQogICAgKHNldCAobWF0Y2hfZHVwIDEpDQog CSh1bnNwZWNfdm9sYXRpbGU6R1BSDQogICAgICAgICAgIFsocGx1czpHUFIg KG1hdGNoX2R1cCAxKQ0KQEAgLTM4OSw3ICszODksNyBAQA0KIA0KIChkZWZp bmVfaW5zbiAic3luY19vbGRfc3ViPG1vZGU+Ig0KICAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9JmQiKQ0KLQko bWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrUiIpKQ0K KwkobWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrWlIi KSkNCiAgICAoc2V0IChtYXRjaF9kdXAgMSkNCiAJKHVuc3BlY192b2xhdGls ZTpHUFINCiAgICAgICAgICAgWyhtaW51czpHUFIgKG1hdGNoX2R1cCAxKQ0K QEAgLTQwNCw3ICs0MDQsNyBAQA0KIA0KIChkZWZpbmVfaW5zbiAic3luY19u ZXdfYWRkPG1vZGU+Ig0KICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAg InJlZ2lzdGVyX29wZXJhbmQiICI9JmQsJmQiKQ0KLSAgICAgICAgKHBsdXM6 R1BSIChtYXRjaF9vcGVyYW5kOkdQUiAxICJtZW1vcnlfb3BlcmFuZCIgIitS LFIiKQ0KKyAgICAgICAgKHBsdXM6R1BSIChtYXRjaF9vcGVyYW5kOkdQUiAx ICJtZW1vcnlfb3BlcmFuZCIgIitaUixaUiIpDQogCQkgIChtYXRjaF9vcGVy YW5kOkdQUiAyICJhcml0aF9vcGVyYW5kIiAiSSxkIikpKQ0KICAgIChzZXQg KG1hdGNoX2R1cCAxKQ0KIAkodW5zcGVjX3ZvbGF0aWxlOkdQUg0KQEAgLTQy MCw3ICs0MjAsNyBAQA0KIA0KIChkZWZpbmVfaW5zbiAic3luY19uZXdfc3Vi PG1vZGU+Ig0KICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJlZ2lz dGVyX29wZXJhbmQiICI9JmQiKQ0KLSAgICAgICAgKG1pbnVzOkdQUiAobWF0 Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrUiIpDQorICAg ICAgICAobWludXM6R1BSIChtYXRjaF9vcGVyYW5kOkdQUiAxICJtZW1vcnlf b3BlcmFuZCIgIitaUiIpDQogCQkgICAobWF0Y2hfb3BlcmFuZDpHUFIgMiAi cmVnaXN0ZXJfb3BlcmFuZCIgImQiKSkpDQogICAgKHNldCAobWF0Y2hfZHVw IDEpDQogCSh1bnNwZWNfdm9sYXRpbGU6R1BSDQpAQCAtNDM1LDcgKzQzNSw3 IEBADQogICAgKHNldF9hdHRyICJzeW5jX2luc24xX29wMiIgIjIiKV0pDQog DQogKGRlZmluZV9pbnNuICJzeW5jXzxvcHRhYj48bW9kZT4iDQotICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpHUFIgMCAibWVtb3J5X29wZXJhbmQiICIrUixS IikNCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJtZW1vcnlfb3Bl cmFuZCIgIitaUixaUiIpDQogCSh1bnNwZWNfdm9sYXRpbGU6R1BSDQogICAg ICAgICAgIFsoZmV0Y2hvcF9iaXQ6R1BSIChtYXRjaF9vcGVyYW5kOkdQUiAx ICJ1bnNfYXJpdGhfb3BlcmFuZCIgIkssZCIpDQogCQkJICAgICAgKG1hdGNo X2R1cCAwKSldDQpAQCAtNDQ4LDcgKzQ0OCw3IEBADQogDQogKGRlZmluZV9p bnNuICJzeW5jX29sZF88b3B0YWI+PG1vZGU+Ig0KICAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9JmQsJmQiKQ0K LQkobWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrUixS IikpDQorCShtYXRjaF9vcGVyYW5kOkdQUiAxICJtZW1vcnlfb3BlcmFuZCIg IitaUixaUiIpKQ0KICAgIChzZXQgKG1hdGNoX2R1cCAxKQ0KIAkodW5zcGVj X3ZvbGF0aWxlOkdQUg0KICAgICAgICAgICBbKGZldGNob3BfYml0OkdQUiAo bWF0Y2hfb3BlcmFuZDpHUFIgMiAidW5zX2FyaXRoX29wZXJhbmQiICJLLGQi KQ0KQEAgLTQ2Myw3ICs0NjMsNyBAQA0KIA0KIChkZWZpbmVfaW5zbiAic3lu Y19uZXdfPG9wdGFiPjxtb2RlPiINCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5k OkdQUiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZkLCZkIikNCi0JKG1hdGNo X29wZXJhbmQ6R1BSIDEgIm1lbW9yeV9vcGVyYW5kIiAiK1IsUiIpKQ0KKwko bWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrWlIsWlIi KSkNCiAgICAoc2V0IChtYXRjaF9kdXAgMSkNCiAJKHVuc3BlY192b2xhdGls ZTpHUFINCiAgICAgICAgICAgWyhmZXRjaG9wX2JpdDpHUFIgKG1hdGNoX29w ZXJhbmQ6R1BSIDIgInVuc19hcml0aF9vcGVyYW5kIiAiSyxkIikNCkBAIC00 NzgsNyArNDc4LDcgQEANCiAgICAoc2V0X2F0dHIgInN5bmNfaW5zbjFfb3Ay IiAiMiIpXSkNCiANCiAoZGVmaW5lX2luc24gInN5bmNfbmFuZDxtb2RlPiIN Ci0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJtZW1vcnlfb3BlcmFu ZCIgIitSLFIiKQ0KKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgIm1l bW9yeV9vcGVyYW5kIiAiK1pSLFpSIikNCiAJKHVuc3BlY192b2xhdGlsZTpH UFIgWyhtYXRjaF9vcGVyYW5kOkdQUiAxICJ1bnNfYXJpdGhfb3BlcmFuZCIg IkssZCIpXQ0KIAkgVU5TUEVDX1NZTkNfT0xEX09QKSldDQogICAiR0VORVJB VEVfTExfU0MiDQpAQCAtNDkwLDcgKzQ5MCw3IEBADQogDQogKGRlZmluZV9p bnNuICJzeW5jX29sZF9uYW5kPG1vZGU+Ig0KICAgWyhzZXQgKG1hdGNoX29w ZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9JmQsJmQiKQ0KLQko bWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrUixSIikp DQorCShtYXRjaF9vcGVyYW5kOkdQUiAxICJtZW1vcnlfb3BlcmFuZCIgIita UixaUiIpKQ0KICAgIChzZXQgKG1hdGNoX2R1cCAxKQ0KICAgICAgICAgKHVu c3BlY192b2xhdGlsZTpHUFIgWyhtYXRjaF9vcGVyYW5kOkdQUiAyICJ1bnNf YXJpdGhfb3BlcmFuZCIgIkssZCIpXQ0KIAkgVU5TUEVDX1NZTkNfT0xEX09Q KSldDQpAQCAtNTA0LDcgKzUwNCw3IEBADQogDQogKGRlZmluZV9pbnNuICJz eW5jX25ld19uYW5kPG1vZGU+Ig0KICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 R1BSIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9JmQsJmQiKQ0KLQkobWF0Y2hf b3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrUixSIikpDQorCSht YXRjaF9vcGVyYW5kOkdQUiAxICJtZW1vcnlfb3BlcmFuZCIgIitaUixaUiIp KQ0KICAgIChzZXQgKG1hdGNoX2R1cCAxKQ0KIAkodW5zcGVjX3ZvbGF0aWxl OkdQUiBbKG1hdGNoX29wZXJhbmQ6R1BSIDIgInVuc19hcml0aF9vcGVyYW5k IiAiSyxkIildDQogCSBVTlNQRUNfU1lOQ19ORVdfT1ApKV0NCkBAIC01MTks NyArNTE5LDcgQEANCiANCiAoZGVmaW5lX2luc24gInN5bmNfbG9ja190ZXN0 X2FuZF9zZXQ8bW9kZT4iDQogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUFIg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mZCwmZCIpDQotCShtYXRjaF9vcGVy YW5kOkdQUiAxICJtZW1vcnlfb3BlcmFuZCIgIitSLFIiKSkNCisJKG1hdGNo X29wZXJhbmQ6R1BSIDEgIm1lbW9yeV9vcGVyYW5kIiAiK1pSLFpSIikpDQog ICAgKHNldCAobWF0Y2hfZHVwIDEpDQogCSh1bnNwZWNfdm9sYXRpbGU6R1BS IFsobWF0Y2hfb3BlcmFuZDpHUFIgMiAiYXJpdGhfb3BlcmFuZCIgIkksZCIp XQ0KIAkgVU5TUEVDX1NZTkNfRVhDSEFOR0UpKV0NCkBAIC01NDYsNyArNTQ2 LDcgQEANCiANCiAoZGVmaW5lX2luc24gInRlc3RfYW5kX3NldF8xMiINCiAg IFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9JmQiKQ0KLQkobWF0Y2hfb3BlcmFuZDpTSSAxICJtZW1vcnlfb3BlcmFu ZCIgIitSIikpDQorCShtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVy YW5kIiAiK1pSIikpDQogICAgKHNldCAobWF0Y2hfZHVwIDEpDQogCSh1bnNw ZWNfdm9sYXRpbGU6U0kgWyhtYXRjaF9vcGVyYW5kOlNJIDIgInJlZ2lzdGVy X29wZXJhbmQiICJkIikNCiAJCQkgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMg InJlZ2lzdGVyX29wZXJhbmQiICJkIikNCkBAIC01NzYsNyArNTc2LDcgQEAN CiAJOzsgVE9ETzogdGhlIG9ic2N1cmluZyB1bnNwZWMgY2FuIGJlIHJlbGF4 ZWQgZm9yIHBlcm1pc3NpdmUgbWVtb3J5DQogCTs7IG1vZGVscy4NCiAJOzsg U2FtZSBhcHBsaWVzIHRvIG90aGVyIGF0b21pY18qIHBhdHRlcm5zLg0KLQko dW5zcGVjX3ZvbGF0aWxlOkdQUiBbKG1hdGNoX29wZXJhbmQ6R1BSIDIgIm1l bW9yeV9vcGVyYW5kIiAiK1IsUiIpDQorCSh1bnNwZWNfdm9sYXRpbGU6R1BS IFsobWF0Y2hfb3BlcmFuZDpHUFIgMiAibWVtb3J5X29wZXJhbmQiICIrWlIs WlIiKQ0KIAkJCSAgICAgIChtYXRjaF9vcGVyYW5kOkdQUiAzICJyZWdfb3Jf MF9vcGVyYW5kIiAiZEosZEoiKV0NCiAJIFVOU1BFQ19BVE9NSUNfQ09NUEFS RV9BTkRfU1dBUCkpDQogICAgKHNldCAobWF0Y2hfb3BlcmFuZDpHUFIgMSAi cmVnaXN0ZXJfb3BlcmFuZCIgIj0mZCwmZCIpDQpAQCAtNjI5LDcgKzYyOSw3 IEBADQogDQogKGRlZmluZV9pbnNuICJhdG9taWNfZXhjaGFuZ2U8bW9kZT5f bGxzYyINCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPSZkLCZkIikNCi0JKHVuc3BlY192b2xhdGlsZTpHUFIg WyhtYXRjaF9vcGVyYW5kOkdQUiAxICJtZW1vcnlfb3BlcmFuZCIgIitSLFIi KV0NCisJKHVuc3BlY192b2xhdGlsZTpHUFIgWyhtYXRjaF9vcGVyYW5kOkdQ UiAxICJtZW1vcnlfb3BlcmFuZCIgIitaUixaUiIpXQ0KIAkgVU5TUEVDX0FU T01JQ19FWENIQU5HRSkpDQogICAgKHNldCAobWF0Y2hfZHVwIDEpDQogCSh1 bnNwZWNfdm9sYXRpbGU6R1BSIFsobWF0Y2hfb3BlcmFuZDpHUFIgMiAiYXJp dGhfb3BlcmFuZCIgIkksZCIpXQ0KQEAgLTY4NCw3ICs2ODQsNyBAQA0KIA0K IChkZWZpbmVfaW5zbiAiYXRvbWljX2ZldGNoX2FkZDxtb2RlPl9sbHNjIg0K ICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29wZXJh bmQiICI9JmQsJmQiKQ0KLQkodW5zcGVjX3ZvbGF0aWxlOkdQUiBbKG1hdGNo X29wZXJhbmQ6R1BSIDEgIm1lbW9yeV9vcGVyYW5kIiAiK1IsUiIpXQ0KKwko dW5zcGVjX3ZvbGF0aWxlOkdQUiBbKG1hdGNoX29wZXJhbmQ6R1BSIDEgIm1l bW9yeV9vcGVyYW5kIiAiK1pSLFpSIildDQogCSBVTlNQRUNfQVRPTUlDX0ZF VENIX09QKSkNCiAgICAoc2V0IChtYXRjaF9kdXAgMSkNCiAJKHVuc3BlY192 b2xhdGlsZTpHUFINCkluZGV4OiBjb25maWcvbWlwcy9taXBzLWNwdXMuZGVm DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gY29uZmlnL21pcHMvbWlw cy1jcHVzLmRlZgkocmV2aXNpb24gMTk1MzUxKQ0KKysrIGNvbmZpZy9taXBz L21pcHMtY3B1cy5kZWYJKHdvcmtpbmcgY29weSkNCkBAIC05Miw2ICs5Miw4 IEBAIE1JUFNfQ1BVICgiNGtzYyIsIFBST0NFU1NPUl80S0MsIDMyLCAwKQ0K IA0KIC8qIE1JUFMzMiBSZWxlYXNlIDIgcHJvY2Vzc29ycy4gICovDQogTUlQ U19DUFUgKCJtNGsiLCBQUk9DRVNTT1JfTTRLLCAzMywgMCkNCitNSVBTX0NQ VSAoIm0xNGtjIiwgUFJPQ0VTU09SX000SywgMzMsIDApDQorTUlQU19DUFUg KCJtMTRrIiwgUFJPQ0VTU09SX000SywgMzMsIDApDQogTUlQU19DUFUgKCI0 a2VjIiwgUFJPQ0VTU09SXzRLQywgMzMsIDApDQogTUlQU19DUFUgKCI0a2Vt IiwgUFJPQ0VTU09SXzRLQywgMzMsIDApDQogTUlQU19DUFUgKCI0a2VwIiwg UFJPQ0VTU09SXzRLUCwgMzMsIDApDQpJbmRleDogY29uZmlnL21pcHMvbWlw cy1wcm90b3MuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGNvbmZp Zy9taXBzL21pcHMtcHJvdG9zLmgJKHJldmlzaW9uIDE5NTM1MSkNCisrKyBj b25maWcvbWlwcy9taXBzLXByb3Rvcy5oCSh3b3JraW5nIGNvcHkpDQpAQCAt MzUwLDYgKzM1MCwxMiBAQCBleHRlcm4gdm9pZCBtaXBzX2V4cGFuZF92ZWNf cmVkdWMgKHJ0eCwgcnR4LCBydHggKA0KIGV4dGVybiB2b2lkIG1pcHNfZXhw YW5kX3ZlY19taW5tYXggKHJ0eCwgcnR4LCBydHgsDQogCQkJCSAgICBydHgg KCopIChydHgsIHJ0eCwgcnR4KSwgYm9vbCk7DQogDQorZXh0ZXJuIGNvbnN0 IGNoYXIgKnVtaXBzX291dHB1dF9zYXZlX3Jlc3RvcmUgKGJvb2wsIHJ0eCk7 DQorZXh0ZXJuIGJvb2wgdW1pcHNfc2F2ZV9yZXN0b3JlX3BhdHRlcm5fcCAo Ym9vbCwgcnR4KTsNCitleHRlcm4gYm9vbCB1bWlwc19sb2FkX3N0b3JlX3Bh aXJfcCAoYm9vbCwgcnR4ICopOw0KK2V4dGVybiB2b2lkIHVtaXBzX291dHB1 dF9sb2FkX3N0b3JlX3BhaXIgKGJvb2wsIHJ0eCAqKTsNCitleHRlcm4gYm9v bCB1bWlwc19tb3ZlcF90YXJnZXRfcCAocnR4LCBydHgpOw0KK2V4dGVybiBi b29sIHVtaXBzXzEyYml0X29mZnNldF9hZGRyZXNzX3AgKHJ0eCwgZW51bSBt YWNoaW5lX21vZGUpOw0KIGV4dGVybiBydHggbWlwc19leHBhbmRfdGhyZWFk X3BvaW50ZXIgKHJ0eCk7DQogDQogZXh0ZXJuIGJvb2wgbWlwc19laF91c2Vz ICh1bnNpZ25lZCBpbnQpOw0KSW5kZXg6IGNvbmZpZy9taXBzL21pcHMuYw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGNvbmZpZy9taXBzL21pcHMu YwkocmV2aXNpb24gMTk1MzUxKQ0KKysrIGNvbmZpZy9taXBzL21pcHMuYwko d29ya2luZyBjb3B5KQ0KQEAgLTc3LDYgKzc3LDkgQEAgYWxvbmcgd2l0aCBH Q0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUNCiAgICBw cmVzZXJ2ZSB0aGUgbWF4aW11bSBzdGFjayBhbGlnbm1lbnQuICBXZSB0aGVy ZWZvcmUgdXNlIGEgdmFsdWUNCiAgICBvZiAweDdmZjAgaW4gdGhpcyBjYXNl Lg0KIA0KKyAgIG1pY3JvTUlQUyBMV00gYW5kIFNXTSBzdXBwb3J0IDEyLWJp dCBvZmZzZXRzIChmcm9tIC0weDgwMCB0byAweDdmZiksDQorICAgc28gd2Ug dXNlIGEgbWF4aW11bSBvZiAweDdmMCBmb3IgVEFSR0VUX01JQ1JPTUlQUy4N CisNCiAgICBNSVBTMTZlIFNBVkUgYW5kIFJFU1RPUkUgaW5zdHJ1Y3Rpb25z IGNhbiBhZGp1c3QgdGhlIHN0YWNrIHBvaW50ZXIgYnkNCiAgICB1cCB0byAw eDdmOCBieXRlcyBhbmQgY2FuIHVzdWFsbHkgc2F2ZSBvciByZXN0b3JlIGFs bCB0aGUgcmVnaXN0ZXJzDQogICAgdGhhdCB3ZSBuZWVkIHRvIHNhdmUgb3Ig cmVzdG9yZS4gIChOb3RlIHRoYXQgd2UgY2FuIG9ubHkgdXNlIHRoZXNlDQpA QCAtODcsNyArOTAsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQ0KICAgIHRvIHNhdmUgYW5kIHJlc3Rv cmUgcmVnaXN0ZXJzLCBhbmQgdG8gYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUg dGhlIHRvcA0KICAgIHBhcnQgb2YgdGhlIGZyYW1lLiAgKi8NCiAjZGVmaW5l IE1JUFNfTUFYX0ZJUlNUX1NUQUNLX1NURVAJCQkJCVwNCi0gICghVEFSR0VU X01JUFMxNiA/IDB4N2ZmMAkJCQkJCVwNCisgICgoIVRBUkdFVF9NSVBTMTYg JiYgIVRBUkdFVF9NSUNST01JUFMpID8gMHg3ZmYwCQkJXA0KKyAgIDogVEFS R0VUX01JQ1JPTUlQUyA/IDB4N2YwCQkJCQkJXA0KICAgIDogR0VORVJBVEVf TUlQUzE2RV9TQVZFX1JFU1RPUkUgPyAweDdmOAkJCQlcDQogICAgOiBUQVJH RVRfNjRCSVQgPyAweDEwMCA6IDB4NDAwKQ0KIA0KQEAgLTU2MCw4ICs1NjQs OCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1pcHNfcnR4X2Nvc3RfZGF0YSAq bWlwc19jb3N0Ow0KIC8qIFRoZSBhbWJpZW50IHRhcmdldCBmbGFncywgZXhj bHVkaW5nIE1BU0tfTUlQUzE2LiAgKi8NCiBzdGF0aWMgaW50IG1pcHNfYmFz ZV90YXJnZXRfZmxhZ3M7DQogDQotLyogVHJ1ZSBpZiBNSVBTMTYgaXMgdGhl IGRlZmF1bHQgbW9kZS4gICovDQotYm9vbCBtaXBzX2Jhc2VfbWlwczE2Ow0K Ky8qIFRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIG1vZGUuICAqLw0KK3Vuc2ln bmVkIGludCBtaXBzX2Jhc2VfY29tcHJlc3Npb25fZmxhZ3M7DQogDQogLyog VGhlIGFtYmllbnQgdmFsdWVzIG9mIG90aGVyIGdsb2JhbCB2YXJpYWJsZXMu ICAqLw0KIHN0YXRpYyBpbnQgbWlwc19iYXNlX3NjaGVkdWxlX2luc25zOyAv KiBmbGFnX3NjaGVkdWxlX2luc25zICovDQpAQCAtNjcyLDggKzY3NiwxMSBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjIG1pcHNfYXR0 cmlidXRlXw0KICAgICAgYXR0cmlidXRlcywgYnV0IEdDQyBkb2Vzbid0IHBy b3ZpZGUgdGhlIGhvb2tzIHdlIG5lZWQgdG8gc3VwcG9ydA0KICAgICAgdGhl IHJpZ2h0IGNvbnZlcnNpb24gcnVsZXMuICBBcyBkZWNsYXJhdGlvbiBhdHRy aWJ1dGVzLCB0aGV5IGFmZmVjdA0KICAgICAgY29kZSBnZW5lcmF0aW9uIGJ1 dCBkb24ndCBjYXJyeSBvdGhlciBzZW1hbnRpY3MuICAqLw0KLSAgeyAibWlw czE2IiwgCSAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIE5VTEwsIGZh bHNlIH0sDQotICB7ICJub21pcHMxNiIsICAgIDAsIDAsIHRydWUsICBmYWxz ZSwgZmFsc2UsIE5VTEwsIGZhbHNlIH0sDQorICB7ICJtaXBzMTYiLAkgICAg IDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIE5VTEwsIGZhbHNlIH0sDQor ICB7ICJub21pcHMxNiIsCSAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxz ZSwgTlVMTCwgZmFsc2UgfSwNCisgIHsgIm1pY3JvbWlwcyIsICAgICAwLCAw LCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBOVUxMLCBmYWxzZSB9LA0KKyAgeyAi bm9taWNyb21pcHMiLCAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIE5V TEwsIGZhbHNlIH0sDQorICB7ICJub2NvbXByZXNzaW9uIiwgMCwgMCwgdHJ1 ZSwgIGZhbHNlLCBmYWxzZSwgTlVMTCwgZmFsc2UgfSwNCiAgIC8qIEFsbG93 IGZ1bmN0aW9ucyB0byBiZSBzcGVjaWZpZWQgYXMgaW50ZXJydXB0IGhhbmRs ZXJzICovDQogICB7ICJpbnRlcnJ1cHQiLCAgIDAsIDAsIGZhbHNlLCB0cnVl LCAgdHJ1ZSwgTlVMTCwgZmFsc2UgfSwNCiAgIHsgInVzZV9zaGFkb3dfcmVn aXN0ZXJfc2V0IiwJMCwgMCwgZmFsc2UsIHRydWUsICB0cnVlLCBOVUxMLCBm YWxzZSB9LA0KQEAgLTExNjcsMTAgKzExNzQsMTEgQEAgbWZsaXBfbWlwczE2 X3VzZV9taXBzMTZfcCAodHJlZSBkZWNsKQ0KICAgY29uc3QgY2hhciAqbmFt ZTsNCiAgIGhhc2h2YWxfdCBoYXNoOw0KICAgdm9pZCAqKnNsb3Q7DQorICBi b29sIGJhc2VfaXNfbWlwczE2ID0gbWlwc19iYXNlX2NvbXByZXNzaW9uX2Zs YWdzICYgTUFTS19NSVBTMTY7DQogDQogICAvKiBVc2UgdGhlIG9wcG9zaXRl IG9mIHRoZSBjb21tYW5kLWxpbmUgc2V0dGluZyBmb3IgYW5vbnltb3VzIGRl Y2xzLiAgKi8NCiAgIGlmICghREVDTF9OQU1FIChkZWNsKSkNCi0gICAgcmV0 dXJuICFtaXBzX2Jhc2VfbWlwczE2Ow0KKyAgICByZXR1cm4gIWJhc2VfaXNf bWlwczE2Ow0KIA0KICAgaWYgKCFtZmxpcF9taXBzMTZfaHRhYikNCiAgICAg bWZsaXBfbWlwczE2X2h0YWIgPSBodGFiX2NyZWF0ZV9nZ2MgKDM3LCBtZmxp cF9taXBzMTZfaHRhYl9oYXNoLA0KQEAgLTExODUsNyArMTE5Myw3IEBAIG1m bGlwX21pcHMxNl91c2VfbWlwczE2X3AgKHRyZWUgZGVjbCkNCiAgICAgICBt aXBzMTZfZmxpcHBlciA9ICFtaXBzMTZfZmxpcHBlcjsNCiAgICAgICBlbnRy eSA9IGdnY19hbGxvY19tZmxpcF9taXBzMTZfZW50cnkgKCk7DQogICAgICAg ZW50cnktPm5hbWUgPSBuYW1lOw0KLSAgICAgIGVudHJ5LT5taXBzMTZfcCA9 IG1pcHMxNl9mbGlwcGVyID8gIW1pcHNfYmFzZV9taXBzMTYgOiBtaXBzX2Jh c2VfbWlwczE2Ow0KKyAgICAgIGVudHJ5LT5taXBzMTZfcCA9IG1pcHMxNl9m bGlwcGVyID8gIWJhc2VfaXNfbWlwczE2IDogYmFzZV9pc19taXBzMTY7DQog ICAgICAgKnNsb3QgPSBlbnRyeTsNCiAgICAgfQ0KICAgcmV0dXJuIGVudHJ5 LT5taXBzMTZfcDsNCkBAIC0xMjA3LDIwICsxMjE1LDcgQEAgbWlwc19mYXJf dHlwZV9wIChjb25zdF90cmVlIHR5cGUpDQogCSAgfHwgbG9va3VwX2F0dHJp YnV0ZSAoImZhciIsIFRZUEVfQVRUUklCVVRFUyAodHlwZSkpICE9IE5VTEwp Ow0KIH0NCiANCi0vKiBTaW1pbGFyIHByZWRpY2F0ZXMgZm9yICJtaXBzMTYi LyJub21pcHMxNiIgZnVuY3Rpb24gYXR0cmlidXRlcy4gICovDQogDQotc3Rh dGljIGJvb2wNCi1taXBzX21pcHMxNl9kZWNsX3AgKGNvbnN0X3RyZWUgZGVj bCkNCi17DQotICByZXR1cm4gbG9va3VwX2F0dHJpYnV0ZSAoIm1pcHMxNiIs IERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpICE9IE5VTEw7DQotfQ0KLQ0KLXN0 YXRpYyBib29sDQotbWlwc19ub21pcHMxNl9kZWNsX3AgKGNvbnN0X3RyZWUg ZGVjbCkNCi17DQotICByZXR1cm4gbG9va3VwX2F0dHJpYnV0ZSAoIm5vbWlw czE2IiwgREVDTF9BVFRSSUJVVEVTIChkZWNsKSkgIT0gTlVMTDsNCi19DQot DQogLyogQ2hlY2sgaWYgdGhlIGludGVycnVwdCBhdHRyaWJ1dGUgaXMgc2V0 IGZvciBhIGZ1bmN0aW9uLiAgKi8NCiANCiBzdGF0aWMgYm9vbA0KQEAgLTEy NTcsMTIgKzEyNTIsNTcgQEAgbWlwc191c2VfZGVidWdfZXhjZXB0aW9uX3Jl dHVybl9wICh0cmVlIHR5cGUpDQogCQkJICAgVFlQRV9BVFRSSUJVVEVTICh0 eXBlKSkgIT0gTlVMTDsNCiB9DQogDQotLyogUmV0dXJuIHRydWUgaWYgZnVu Y3Rpb24gREVDTCBpcyBhIE1JUFMxNiBmdW5jdGlvbi4gIFJldHVybiB0aGUg YW1iaWVudA0KLSAgIHNldHRpbmcgaWYgREVDTCBpcyBudWxsLiAgKi8NCisv KiBSZXR1cm4gdGhlIHNldCBvZiBjb21wcmVzc2lvbiBtb2RlcyB0aGF0IGFy ZSBleHBsaWNpdGx5IHJlcXVpcmVkDQorICAgYnkgREVDTC4gICovDQogDQot c3RhdGljIGJvb2wNCi1taXBzX3VzZV9taXBzMTZfbW9kZV9wICh0cmVlIGRl Y2wpDQorc3RhdGljIHVuc2lnbmVkIGludA0KK21pcHNfZ2V0X2NvbXByZXNz X29uX2ZsYWdzICh0cmVlIGRlY2wpDQogew0KKyAgdW5zaWduZWQgaW50IGZs YWdzID0gMDsNCisNCisgIGlmICghZGVjbCB8fCAhREVDTF9QIChkZWNsKSkN CisgICAgcmV0dXJuIGZsYWdzOw0KKw0KKyAgaWYgKGxvb2t1cF9hdHRyaWJ1 dGUgKCJtaXBzMTYiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKSAhPSBOVUxM KQ0KKyAgICBmbGFncyB8PSBNQVNLX01JUFMxNjsNCisNCisgIGlmIChsb29r dXBfYXR0cmlidXRlICgibWljcm9taXBzIiwgREVDTF9BVFRSSUJVVEVTIChk ZWNsKSkgIT0gTlVMTCkNCisgICAgZmxhZ3MgfD0gTUFTS19NSUNST01JUFM7 DQorDQorICByZXR1cm4gZmxhZ3M7DQorfQ0KKw0KKy8qIFJldHVybiB0aGUg c2V0IG9mIGNvbXByZXNzaW9uIG1vZGVzIHRoYXQgYXJlIGV4cGxpY2l0bHkg Zm9yYmlkZGVuDQorICAgYnkgREVDTC4gICovDQorDQorc3RhdGljIHVuc2ln bmVkIGludA0KK21pcHNfZ2V0X2NvbXByZXNzX29mZl9mbGFncyAodHJlZSBk ZWNsKQ0KK3sNCisgIHVuc2lnbmVkIGludCBmbGFncyA9IDA7DQorDQorICBp ZiAoIWRlY2wgfHwgIURFQ0xfUCAoZGVjbCkpDQorICAgIHJldHVybiBmbGFn czsNCisNCisgIGlmIChsb29rdXBfYXR0cmlidXRlICgibm9jb21wcmVzc2lv biIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpICE9IE5VTEwpDQorICAgIGZs YWdzIHw9IE1BU0tfTUlQUzE2IHwgTUFTS19NSUNST01JUFM7DQorDQorICBp ZiAobG9va3VwX2F0dHJpYnV0ZSAoIm5vbWlwczE2IiwgREVDTF9BVFRSSUJV VEVTIChkZWNsKSkgIT0gTlVMTCkNCisgICAgZmxhZ3MgfD0gTUFTS19NSVBT MTY7DQorDQorICBpZiAobG9va3VwX2F0dHJpYnV0ZSAoIm5vbWljcm9taXBz IiwgREVDTF9BVFRSSUJVVEVTIChkZWNsKSkgIT0gTlVMTCkNCisgICAgZmxh Z3MgfD0gTUFTS19NSUNST01JUFM7DQorDQorICByZXR1cm4gZmxhZ3M7DQor fQ0KKw0KKy8qIFJldHVybiB0aGUgY29tcHJlc3Npb24gbW9kZSB0aGF0IHNo b3VsZCBiZSB1c2VkIGZvciBmdW5jdGlvbiBERUNMLg0KKyAgIFJldHVybiB0 aGUgYW1iaWVudCBzZXR0aW5nIGlmIERFQ0wgaXMgbnVsbC4gICovDQorc3Rh dGljIHVuc2lnbmVkIGludA0KK21pcHNfZ2V0X2NvbXByZXNzX21vZGUgKHRy ZWUgZGVjbCkNCit7DQorICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGZvcmNlX29u Ow0KKw0KKyAgZmxhZ3MgPSBtaXBzX2Jhc2VfY29tcHJlc3Npb25fZmxhZ3M7 DQogICBpZiAoZGVjbCkNCiAgICAgew0KICAgICAgIC8qIE5lc3RlZCBmdW5j dGlvbnMgbXVzdCB1c2UgdGhlIHNhbWUgZnJhbWUgcG9pbnRlciBhcyB0aGVp cg0KQEAgLTEyNzAsMTIgKzEzMTAsMTIgQEAgbWlwc191c2VfZGVidWdfZXhj ZXB0aW9uX3JldHVybl9wICh0cmVlIHR5cGUpDQogICAgICAgdHJlZSBwYXJl bnQgPSBkZWNsX2Z1bmN0aW9uX2NvbnRleHQgKGRlY2wpOw0KICAgICAgIGlm IChwYXJlbnQpDQogCWRlY2wgPSBwYXJlbnQ7DQotICAgICAgaWYgKG1pcHNf bWlwczE2X2RlY2xfcCAoZGVjbCkpDQotCXJldHVybiB0cnVlOw0KLSAgICAg IGlmIChtaXBzX25vbWlwczE2X2RlY2xfcCAoZGVjbCkpDQotCXJldHVybiBm YWxzZTsNCisgICAgICBmb3JjZV9vbiA9IG1pcHNfZ2V0X2NvbXByZXNzX29u X2ZsYWdzIChkZWNsKTsNCisgICAgICBpZiAoZm9yY2Vfb24pDQorCXJldHVy biBmb3JjZV9vbjsNCisgICAgICBmbGFncyAmPSB+bWlwc19nZXRfY29tcHJl c3Nfb2ZmX2ZsYWdzIChkZWNsKTsNCiAgICAgfQ0KLSAgcmV0dXJuIG1pcHNf YmFzZV9taXBzMTY7DQorICByZXR1cm4gZmxhZ3M7DQogfQ0KIA0KIC8qIElt cGxlbWVudCBUQVJHRVRfQ09NUF9UWVBFX0FUVFJJQlVURVMuICAqLw0KQEAg LTEyOTcsMjkgKzEzMzcsNDcgQEAgc3RhdGljIHZvaWQNCiBtaXBzX2luc2Vy dF9hdHRyaWJ1dGVzICh0cmVlIGRlY2wsIHRyZWUgKmF0dHJpYnV0ZXMpDQog ew0KICAgY29uc3QgY2hhciAqbmFtZTsNCi0gIGJvb2wgbWlwczE2X3AsIG5v bWlwczE2X3A7DQorICB1bnNpZ25lZCBpbnQgY29tcHJlc3Npb25fcCwgbm9j b21wcmVzc2lvbl9wOw0KIA0KICAgLyogQ2hlY2sgZm9yICJtaXBzMTYiIGFu ZCAibm9taXBzMTYiIGF0dHJpYnV0ZXMuICAqLw0KLSAgbWlwczE2X3AgPSBs b29rdXBfYXR0cmlidXRlICgibWlwczE2IiwgKmF0dHJpYnV0ZXMpICE9IE5V TEw7DQotICBub21pcHMxNl9wID0gbG9va3VwX2F0dHJpYnV0ZSAoIm5vbWlw czE2IiwgKmF0dHJpYnV0ZXMpICE9IE5VTEw7DQorICBjb21wcmVzc2lvbl9w ID0gbWlwc19nZXRfY29tcHJlc3Nfb25fZmxhZ3MgKGRlY2wpOw0KKyAgbm9j b21wcmVzc2lvbl9wID0gbWlwc19nZXRfY29tcHJlc3Nfb2ZmX2ZsYWdzIChk ZWNsKTsNCisNCiAgIGlmIChUUkVFX0NPREUgKGRlY2wpICE9IEZVTkNUSU9O X0RFQ0wpDQogICAgIHsNCi0gICAgICBpZiAobWlwczE2X3ApDQorICAgICAg aWYgKGNvbXByZXNzaW9uX3AgJiBNQVNLX01JUFMxNikNCiAJZXJyb3IgKCIl cXMgYXR0cmlidXRlIG9ubHkgYXBwbGllcyB0byBmdW5jdGlvbnMiLCAibWlw czE2Iik7DQotICAgICAgaWYgKG5vbWlwczE2X3ApDQorICAgICAgaWYgKG5v Y29tcHJlc3Npb25fcCAmIE1BU0tfTUlQUzE2KQ0KIAllcnJvciAoIiVxcyBh dHRyaWJ1dGUgb25seSBhcHBsaWVzIHRvIGZ1bmN0aW9ucyIsICJub21pcHMx NiIpOw0KKw0KKyAgICAgIGlmIChub2NvbXByZXNzaW9uX3AgJiBNQVNLX01J Q1JPTUlQUw0KKwkgICYmIG5vY29tcHJlc3Npb25fcCAmIE1BU0tfTUlQUzE2 KQ0KKwllcnJvciAoIiVxcyBhdHRyaWJ1dGUgb25seSBhcHBsaWVzIHRvIGZ1 bmN0aW9ucyIsICJub2NvbXByZXNzaW9uIik7DQorICAgICAgZWxzZQ0KKwl7 DQorCSAgaWYgKGNvbXByZXNzaW9uX3AgJiBNQVNLX01JQ1JPTUlQUykNCisJ ICAgIGVycm9yICgiJXFzIGF0dHJpYnV0ZSBvbmx5IGFwcGxpZXMgdG8gZnVu Y3Rpb25zIiwgIm1pY3JvbWlwcyIpOw0KKwkgIGlmIChub2NvbXByZXNzaW9u X3AgJiBNQVNLX01JQ1JPTUlQUykNCisJICAgIGVycm9yICgiJXFzIGF0dHJp YnV0ZSBvbmx5IGFwcGxpZXMgdG8gZnVuY3Rpb25zIiwgIm5vbWljcm9taXBz Iik7DQorCX0NCiAgICAgfQ0KICAgZWxzZQ0KICAgICB7DQotICAgICAgbWlw czE2X3AgfD0gbWlwc19taXBzMTZfZGVjbF9wIChkZWNsKTsNCi0gICAgICBu b21pcHMxNl9wIHw9IG1pcHNfbm9taXBzMTZfZGVjbF9wIChkZWNsKTsNCi0g ICAgICBpZiAobWlwczE2X3AgfHwgbm9taXBzMTZfcCkNCisgICAgICBpZiAo Y29tcHJlc3Npb25fcCAmIE1BU0tfTUlQUzE2DQorICAgICAgICAgICAmJiBu b2NvbXByZXNzaW9uX3AgJiAoTUFTS19NSVBTMTYgfCBNQVNLX01JQ1JPTUlQ UykpDQogCXsNCisJICAvKiBERUNMIGNhbm5vdCBiZSBzaW11bHRhbmVvdXNs eSAibWlwczE2IiBhbmQgIm5vY29tcHJlc3Npb24iLiAgKi8NCisJICBlcnJv ciAoIiVxRSBjYW5ub3QgaGF2ZSBib3RoICU8bWlwczE2JT4gYW5kICINCisJ CSAiJTxub2NvbXByZXNzaW9uJT4gYXR0cmlidXRlcyIsDQorCQkgREVDTF9O QU1FIChkZWNsKSk7DQorCX0NCisgICAgICBlbHNlIGlmIChjb21wcmVzc2lv bl9wICYgTUFTS19NSVBTMTYNCisJCSYmIG5vY29tcHJlc3Npb25fcCAmIE1B U0tfTUlQUzE2KQ0KKwl7DQogCSAgLyogREVDTCBjYW5ub3QgYmUgc2ltdWx0 YW5lb3VzbHkgIm1pcHMxNiIgYW5kICJub21pcHMxNiIuICAqLw0KLQkgIGlm IChtaXBzMTZfcCAmJiBub21pcHMxNl9wKQ0KLQkgICAgZXJyb3IgKCIlcUUg Y2Fubm90IGhhdmUgYm90aCAlPG1pcHMxNiU+IGFuZCAiDQotCQkgICAiJTxu b21pcHMxNiU+IGF0dHJpYnV0ZXMiLA0KLQkJICAgREVDTF9OQU1FIChkZWNs KSk7DQorCSAgZXJyb3IgKCIlcUUgY2Fubm90IGhhdmUgYm90aCAlPG1pcHMx NiU+IGFuZCAiDQorCQkgIiU8bm9taXBzMTYlPiBhdHRyaWJ1dGVzIiwNCisJ CSBERUNMX05BTUUgKGRlY2wpKTsNCiAJfQ0KICAgICAgIGVsc2UgaWYgKFRB UkdFVF9GTElQX01JUFMxNiAmJiAhREVDTF9BUlRJRklDSUFMIChkZWNsKSkN CiAJew0KQEAgLTEzMjksNiArMTM4NywzOSBAQCBtaXBzX2luc2VydF9hdHRy aWJ1dGVzICh0cmVlIGRlY2wsIHRyZWUgKmF0dHJpYnV0ZQ0KIAkgIG5hbWUg PSBtZmxpcF9taXBzMTZfdXNlX21pcHMxNl9wIChkZWNsKSA/ICJtaXBzMTYi IDogIm5vbWlwczE2IjsNCiAJICAqYXR0cmlidXRlcyA9IHRyZWVfY29ucyAo Z2V0X2lkZW50aWZpZXIgKG5hbWUpLCBOVUxMLCAqYXR0cmlidXRlcyk7DQog CX0NCisNCisgICAgICBpZiAoY29tcHJlc3Npb25fcCAmIE1BU0tfTUlDUk9N SVBTDQorICAgICAgICAgICAmJiBub2NvbXByZXNzaW9uX3AgJiAoTUFTS19N SVBTMTYgfCBNQVNLX01JQ1JPTUlQUykpDQorCXsNCisJICAvKiBERUNMIGNh bm5vdCBiZSBzaW11bHRhbmVvdXNseSAibWljcm9taXBzIiBhbmQgIm5vY29t cHJlc3Npb24iLiAgKi8NCisJICBlcnJvciAoIiVxRSBjYW5ub3QgaGF2ZSBi b3RoICU8bWljcm9taXBzJT4gYW5kICINCisJCSAiJTxub2NvbXByZXNzaW9u JT4gYXR0cmlidXRlcyIsDQorCQkgREVDTF9OQU1FIChkZWNsKSk7DQorCX0N CisgICAgICBlbHNlIGlmIChjb21wcmVzc2lvbl9wICYgTUFTS19NSUNST01J UFMNCisJCSYmIG5vY29tcHJlc3Npb25fcCAmIE1BU0tfTUlDUk9NSVBTKQ0K Kwl7DQorCSAgLyogREVDTCBjYW5ub3QgYmUgc2ltdWx0YW5lb3VzbHkgIm1p Y3JvbWlwcyIgYW5kICJub21pY3JvbWlwcyIuICAqLw0KKwkgIGVycm9yICgi JXFzIGNhbm5vdCBoYXZlIGJvdGggJTxtaWNyb21pcHMlPiBhbmQgIg0KKwkJ ICIlPG5vbWljcm9taXBzJT4gYXR0cmlidXRlcyIsDQorCQkgSURFTlRJRklF Ul9QT0lOVEVSIChERUNMX05BTUUgKGRlY2wpKSk7DQorCX0NCisNCisgICAg ICBpZiAoY29tcHJlc3Npb25fcCAmIE1BU0tfTUlQUzE2DQorICAgICAgICAg ICYmIGNvbXByZXNzaW9uX3AgJiBNQVNLX01JQ1JPTUlQUykNCisJZXJyb3Ig KCIlcXMgY2Fubm90IGhhdmUgYm90aCAlPG1pcHMxNiU+IGFuZCAlPG1pY3Jv bWlwcyU+IGF0dHJpYnV0ZXMiLA0KKwkgICAgICAgSURFTlRJRklFUl9QT0lO VEVSIChERUNMX05BTUUgKGRlY2wpKSk7DQorDQorICAgICAgLyogSWYgREVD TCBpcyAibm9jb21wcmVzc2lvbiIgc2V0IHRoZSAibm9taXBzMTYiIGFuZCAN CisJICJub21pY3JvbWlwcyIgYXR0cmlidXRlcy4gICovDQorICAgICAgaWYg KG5vY29tcHJlc3Npb25fcCAmIE1BU0tfTUlQUzE2DQorICAgICAgICAgICYm IG5vY29tcHJlc3Npb25fcCAmIE1BU0tfTUlDUk9NSVBTKQ0KKwl7DQorCSAg bmFtZSA9ICJub21pcHMxNiI7DQorCSAgKmF0dHJpYnV0ZXMgPSB0cmVlX2Nv bnMgKGdldF9pZGVudGlmaWVyIChuYW1lKSwgTlVMTCwgKmF0dHJpYnV0ZXMp Ow0KKwkgIG5hbWUgPSAibm9taWNyb21pcHMiOw0KKwkgICphdHRyaWJ1dGVz ID0gdHJlZV9jb25zIChnZXRfaWRlbnRpZmllciAobmFtZSksIE5VTEwsICph dHRyaWJ1dGVzKTsNCisJfQ0KICAgICB9DQogfQ0KIA0KQEAgLTEzMzgsMTIg KzE0MjksOSBAQCBzdGF0aWMgdHJlZQ0KIG1pcHNfbWVyZ2VfZGVjbF9hdHRy aWJ1dGVzICh0cmVlIG9sZGRlY2wsIHRyZWUgbmV3ZGVjbCkNCiB7DQogICAv KiBUaGUgZGVjbHMnICJtaXBzMTYiIGFuZCAibm9taXBzMTYiIGF0dHJpYnV0 ZXMgbXVzdCBtYXRjaCBleGFjdGx5LiAgKi8NCi0gIGlmIChtaXBzX21pcHMx Nl9kZWNsX3AgKG9sZGRlY2wpICE9IG1pcHNfbWlwczE2X2RlY2xfcCAobmV3 ZGVjbCkpDQorICBpZiAobWlwc19nZXRfY29tcHJlc3NfbW9kZSAob2xkZGVj bCkgIT0gbWlwc19nZXRfY29tcHJlc3NfbW9kZSAobmV3ZGVjbCkpDQogICAg IGVycm9yICgiJXFFIHJlZGVjbGFyZWQgd2l0aCBjb25mbGljdGluZyAlcXMg YXR0cmlidXRlcyIsDQotCSAgIERFQ0xfTkFNRSAobmV3ZGVjbCksICJtaXBz MTYiKTsNCi0gIGlmIChtaXBzX25vbWlwczE2X2RlY2xfcCAob2xkZGVjbCkg IT0gbWlwc19ub21pcHMxNl9kZWNsX3AgKG5ld2RlY2wpKQ0KLSAgICBlcnJv ciAoIiVxRSByZWRlY2xhcmVkIHdpdGggY29uZmxpY3RpbmcgJXFzIGF0dHJp YnV0ZXMiLA0KLQkgICBERUNMX05BTUUgKG5ld2RlY2wpLCAibm9taXBzMTYi KTsNCisJICAgREVDTF9OQU1FIChuZXdkZWNsKSwgImNvbXByZXNzaW9uIik7 DQogDQogICByZXR1cm4gbWVyZ2VfYXR0cmlidXRlcyAoREVDTF9BVFRSSUJV VEVTIChvbGRkZWNsKSwNCiAJCQkgICBERUNMX0FUVFJJQlVURVMgKG5ld2Rl Y2wpKTsNCkBAIC0xNTUwLDcgKzE2MzgsNyBAQCBtaXBzMTZfbG9jYWxfZnVu Y3Rpb25fcCAoY29uc3RfcnR4IHgpDQogICByZXR1cm4gKEdFVF9DT0RFICh4 KSA9PSBTWU1CT0xfUkVGDQogCSAgJiYgU1lNQk9MX1JFRl9MT0NBTF9QICh4 KQ0KIAkgICYmICFTWU1CT0xfUkVGX0VYVEVSTkFMX1AgKHgpDQotCSAgJiYg bWlwc191c2VfbWlwczE2X21vZGVfcCAoU1lNQk9MX1JFRl9ERUNMICh4KSkp Ow0KKwkgICYmIChtaXBzX2dldF9jb21wcmVzc19tb2RlIChTWU1CT0xfUkVG X0RFQ0wgKHgpKSAmIE1BU0tfTUlQUzE2KSk7DQogfQ0KIA0KIC8qIFJldHVy biB0cnVlIGlmIFNZTUJPTF9SRUYgWCBiaW5kcyBsb2NhbGx5LiAgKi8NCkBA IC0yMzAwLDYgKzIzODgsMjAgQEAgbWlwc19hZGRyZXNzX2luc25zIChydHgg eCwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwNCiAgIHJldHVybiAwOw0KIH0N CiANCisvKiBSZXR1cm4gdHJ1ZSBpZiBYIGlzIGEgbGVnaXRpbWF0ZSBhZGRy ZXNzIHdpdGggYSAxMi1iaXQgb2Zmc2V0Lg0KKyAgIE1PREUgaXMgdGhlIG1v ZGUgb2YgdGhlIHZhbHVlIGJlaW5nIGFjY2Vzc2VkLiAgKi8NCisNCitib29s DQordW1pcHNfMTJiaXRfb2Zmc2V0X2FkZHJlc3NfcCAocnR4IHgsIGVudW0g bWFjaGluZV9tb2RlIG1vZGUpDQorew0KKyAgc3RydWN0IG1pcHNfYWRkcmVz c19pbmZvIGFkZHI7DQorDQorICByZXR1cm4gKG1pcHNfY2xhc3NpZnlfYWRk cmVzcygmYWRkciwgeCwgbW9kZSwgZmFsc2UpDQorCSAgJiYgYWRkci50eXBl ID09IEFERFJFU1NfUkVHDQorCSAgJiYgQ09OU1RfSU5UX1AgKGFkZHIub2Zm c2V0KQ0KKwkgICYmIFVNSVBTXzEyQklUX09GRlNFVF9QIChhZGRyLm9mZnNl dCkpOw0KK30NCisNCiAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBpbnN0cnVj dGlvbnMgbmVlZGVkIHRvIGxvYWQgY29uc3RhbnQgWC4NCiAgICBSZXR1cm4g MCBpZiBYIGlzbid0IGEgdmFsaWQgY29uc3RhbnQuICAqLw0KIA0KQEAgLTYw OTcsNiArNjE5OSwxMyBAQCBtaXBzX3N0YXJ0X2Z1bmN0aW9uX2RlZmluaXRp b24gKGNvbnN0IGNoYXIgKm5hbWUsDQogICBlbHNlDQogICAgIGZwcmludGYg KGFzbV9vdXRfZmlsZSwgIlx0LnNldFx0bm9taXBzMTZcbiIpOw0KIA0KKyAg aWYgKFRBUkdFVF9NSUNST01JUFMpDQorICAgIGZwcmludGYgKGFzbV9vdXRf ZmlsZSwgIlx0LnNldFx0bWljcm9taXBzXG4iKTsNCisjaWZkZWYgSEFWRV9H QVNfTUlDUk9NSVBTDQorICBlbHNlIA0KKyAgICBmcHJpbnRmIChhc21fb3V0 X2ZpbGUsICJcdC5zZXRcdG5vbWljcm9taXBzXG4iKTsNCisjZW5kaWYNCisN CiAgIGlmICghZmxhZ19pbmhpYml0X3NpemVfZGlyZWN0aXZlKQ0KICAgICB7 DQogICAgICAgZnB1dHMgKCJcdC5lbnRcdCIsIGFzbV9vdXRfZmlsZSk7DQpA QCAtNjkwOCw2ICs3MDE3LDggQEAgbWlwc19zcGxpdF9jYWxsIChydHggaW5z biwgcnR4IGNhbGxfcGF0dGVybikNCiBzdGF0aWMgYm9vbA0KIG1pcHNfZnVu Y3Rpb25fb2tfZm9yX3NpYmNhbGwgKHRyZWUgZGVjbCwgdHJlZSBleHAgQVRU UklCVVRFX1VOVVNFRCkNCiB7DQorICB1bnNpZ25lZCBpbnQgY29tcHJlc3Np b25fbW9kZSA9IG1pcHNfZ2V0X2NvbXByZXNzX21vZGUgKGRlY2wpOw0KKw0K ICAgaWYgKCFUQVJHRVRfU0lCQ0FMTFMpDQogICAgIHJldHVybiBmYWxzZTsN CiANCkBAIC02OTE2LDIyICs3MDI3LDQ1IEBAIG1pcHNfZnVuY3Rpb25fb2tf Zm9yX3NpYmNhbGwgKHRyZWUgZGVjbCwgdHJlZSBleHANCiAgIGlmIChtaXBz X2ludGVycnVwdF90eXBlX3AgKFRSRUVfVFlQRSAoY3VycmVudF9mdW5jdGlv bl9kZWNsKSkpDQogICAgIHJldHVybiBmYWxzZTsNCiANCisgIGlmIChUQVJH RVRfTUlDUk9NSVBTKQ0KKyAgICB7DQorICAgICAgLyogV2UgY2FuJ3QgZG8g YSBzaWJjYWxsIGlmIHRoZSBjYWxsZWQgZnVuY3Rpb24gaXMgYSBNSVBTMzIg ZnVuY3Rpb24uICAqLw0KKyAgICAgIGlmIChkZWNsDQorCSAgJiYgKGNvbXBy ZXNzaW9uX21vZGUgJiBNQVNLX01JQ1JPTUlQUykgPT0gMA0KKwkgICYmIGNv bnN0X2NhbGxfaW5zbl9vcGVyYW5kIChYRVhQIChERUNMX1JUTCAoZGVjbCks IDApLCBWT0lEbW9kZSkpDQorCXJldHVybiBmYWxzZTsNCisNCisgICAgICAv KiBXaGVuIC1taW50ZXJsaW5rLWNvbXByZXNzZWQgaXMgaW4gZWZmZWN0LCBh c3N1bWUgdGhhdCBub24tbG9jYWxseS1iaW5kaW5nDQorCSBmdW5jdGlvbnMg Y291bGQgYmUgTUlQUzMyIG9uZXMgdW5sZXNzIGFuIGF0dHJpYnV0ZSBleHBs aWNpdGx5IHRlbGxzDQorCSB1cyBvdGhlcndpc2UuICAqLw0KKyAgICAgIGlm IChUQVJHRVRfSU5URVJMSU5LX0NPTVBSRVNTRUQNCisJICAmJiBkZWNsDQor CSAgJiYgKERFQ0xfRVhURVJOQUwgKGRlY2wpIHx8ICF0YXJnZXRtLmJpbmRz X2xvY2FsX3AgKGRlY2wpKQ0KKwkgICYmIChjb21wcmVzc2lvbl9tb2RlICYg TUFTS19NSUNST01JUFMpID09IDANCisJICAmJiBjb25zdF9jYWxsX2luc25f b3BlcmFuZCAoWEVYUCAoREVDTF9SVEwgKGRlY2wpLCAwKSwgVk9JRG1vZGUp KQ0KKwlyZXR1cm4gZmFsc2U7DQorDQorICAgICAgLyogT3RoZXJ3aXNlIE9L LiAgKi8NCisgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KICAgLyog V2UgY2FuJ3QgZG8gYSBzaWJjYWxsIGlmIHRoZSBjYWxsZWQgZnVuY3Rpb24g aXMgYSBNSVBTMTYgZnVuY3Rpb24NCiAgICAgIGJlY2F1c2UgdGhlcmUgaXMg bm8gZGlyZWN0ICJqeCIgaW5zdHJ1Y3Rpb24gZXF1aXZhbGVudCB0byAiamFs eCIgdG8NCiAgICAgIHN3aXRjaCB0aGUgSVNBIG1vZGUuICBXZSBvbmx5IGNh cmUgYWJvdXQgY2FzZXMgd2hlcmUgdGhlIHNpYmxpbmcNCiAgICAgIGFuZCBu b3JtYWwgY2FsbHMgd291bGQgYm90aCBiZSBkaXJlY3QuICAqLw0KICAgaWYg KGRlY2wNCi0gICAgICAmJiBtaXBzX3VzZV9taXBzMTZfbW9kZV9wIChkZWNs KQ0KKyAgICAgICYmICgoY29tcHJlc3Npb25fbW9kZSAmIChNQVNLX01JUFMx NiB8IE1BU0tfTUlDUk9NSVBTKSkgIT0gMCkNCiAgICAgICAmJiBjb25zdF9j YWxsX2luc25fb3BlcmFuZCAoWEVYUCAoREVDTF9SVEwgKGRlY2wpLCAwKSwg Vk9JRG1vZGUpKQ0KICAgICByZXR1cm4gZmFsc2U7DQogDQotICAvKiBXaGVu IC1taW50ZXJsaW5rLW1pcHMxNiBpcyBpbiBlZmZlY3QsIGFzc3VtZSB0aGF0 IG5vbi1sb2NhbGx5LWJpbmRpbmcNCi0gICAgIGZ1bmN0aW9ucyBjb3VsZCBi ZSBNSVBTMTYgb25lcyB1bmxlc3MgYW4gYXR0cmlidXRlIGV4cGxpY2l0bHkg dGVsbHMNCisgIC8qIFdoZW4gLW1pbnRlcmxpbmstY29tcHJlc3NlZCBpcyBp biBlZmZlY3QsIGFzc3VtZSB0aGF0IG5vbi1sb2NhbGx5LWJpbmRpbmcNCisg ICAgIGZ1bmN0aW9ucyBjb3VsZCBiZSBNSVBTMTYgb3IgbWljcm9NSVBTIHVu bGVzcyBhbiBhdHRyaWJ1dGUgZXhwbGljaXRseSB0ZWxscw0KICAgICAgdXMg b3RoZXJ3aXNlLiAgKi8NCi0gIGlmIChUQVJHRVRfSU5URVJMSU5LX01JUFMx Ng0KKyAgaWYgKFRBUkdFVF9JTlRFUkxJTktfQ09NUFJFU1NFRA0KICAgICAg ICYmIGRlY2wNCiAgICAgICAmJiAoREVDTF9FWFRFUk5BTCAoZGVjbCkgfHwg IXRhcmdldG0uYmluZHNfbG9jYWxfcCAoZGVjbCkpDQotICAgICAgJiYgIW1p cHNfbm9taXBzMTZfZGVjbF9wIChkZWNsKQ0KKyAgICAgICYmIChjb21wcmVz c2lvbl9tb2RlICYgTUFTS19NSUNST01JUFMpID09IDANCisgICAgICAmJiAo Y29tcHJlc3Npb25fbW9kZSAmIE1BU0tfTUlQUzE2KSA9PSAwDQogICAgICAg JiYgY29uc3RfY2FsbF9pbnNuX29wZXJhbmQgKFhFWFAgKERFQ0xfUlRMIChk ZWNsKSwgMCksIFZPSURtb2RlKSkNCiAgICAgcmV0dXJuIGZhbHNlOw0KIA0K QEAgLTc3OTgsNiArNzkzMiw5IEBAIG1pcHNfcG9wX2FzbV9zd2l0Y2ggKHN0 cnVjdCBtaXBzX2FzbV9zd2l0Y2ggKmFzbV9zDQogICAgJ14nCVByaW50IHRo ZSBuYW1lIG9mIHRoZSBwaWMgY2FsbC10aHJvdWdoIHJlZ2lzdGVyICh0OSBv ciAkMjUpLg0KICAgICcrJwlQcmludCB0aGUgbmFtZSBvZiB0aGUgZ3AgcmVn aXN0ZXIgKHVzdWFsbHkgZ3Agb3IgJDI4KS4NCiAgICAnJCcJUHJpbnQgdGhl IG5hbWUgb2YgdGhlIHN0YWNrIHBvaW50ZXIgcmVnaXN0ZXIgKHNwIG9yICQy OSkuDQorICAgJzonICBQcmludCAiYyIgdG8gdXNlIHRoZSBjb21wYWN0IHZl cnNpb24gaWYgdGhlIGRlbGF5IHNsb3QgaXMgYSBub3AuDQorICAgJyEnICBQ cmludCAicyIgdG8gdXNlIHRoZSBzaG9ydCB2ZXJzaW9uIGlmIHRoZSBkZWxh eSBzbG90IGNvbnRhaW5zIGENCisJMTYtYml0IGluc3RydWN0aW9uLg0KIA0K ICAgIFNlZSBhbHNvIG1pcHNfaW5pdF9wcmludF9vcGVyYW5kX3B1Y250LiAg Ki8NCiANCkBAIC03ODgxLDYgKzgwMTgsMjAgQEAgbWlwc19wcmludF9vcGVy YW5kX3B1bmN0dWF0aW9uIChGSUxFICpmaWxlLCBpbnQgY2gNCiAgICAgICBm cHV0cyAocmVnX25hbWVzW1NUQUNLX1BPSU5URVJfUkVHTlVNXSwgZmlsZSk7 DQogICAgICAgYnJlYWs7DQogDQorICAgIGNhc2UgJzonOg0KKyAgICAgIC8q IFdoZW4gcmVvcmRlciBvciBub3Jlb3JkZXIgd2l0aCBmaW5hbF9zcXVlbmNl IDAsIHRoZSBkZWxheSBzbG90IHdpbGwNCisJIGJlIGEgbm9wLCBzbyB3ZSBq dXN0IHVzZSB0aGUgY29tcGFjdCB2ZXJzaW9uIGZvciBtaWNyb01JUFMuICAq Lw0KKyAgICAgIGlmIChmaW5hbF9zZXF1ZW5jZSA9PSAwKQ0KKwlwdXRjICgn YycsIGZpbGUpOw0KKyAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlICchJzoN CisgICAgICAvKiBXaGVuIHJlb3JkZXIgb3Igbm9yZW9yZGVyIHdpdGggZmlu YWxfc3F1ZW5jZSAwLCB0aGUgZGVsYXkgc2xvdCB3aWxsDQorCSBiZSBhIG5v cCwgc28gd2UganVzdCB1c2UgdGhlIGNvbXBhY3QgdmVyc2lvbiBmb3IgbWlj cm9NSVBTLiAgKi8NCisgICAgICBpZiAoZmluYWxfc2VxdWVuY2UgPT0gMCkN CisJcHV0YyAoJ3MnLCBmaWxlKTsNCisgICAgICBicmVhazsNCisNCiAgICAg ZGVmYXVsdDoNCiAgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7DQogICAgICAg YnJlYWs7DQpAQCAtNzg5NCw3ICs4MDQ1LDcgQEAgbWlwc19pbml0X3ByaW50 X29wZXJhbmRfcHVuY3QgKHZvaWQpDQogew0KICAgY29uc3QgY2hhciAqcDsN CiANCi0gIGZvciAocCA9ICIoKVtdPD4qIy8/fi5AXiskIjsgKnA7IHArKykN CisgIGZvciAocCA9ICIoKVtdPD4qIy8/fi5AXiskOiEiOyAqcDsgcCsrKQ0K ICAgICBtaXBzX3ByaW50X29wZXJhbmRfcHVuY3RbKHVuc2lnbmVkIGNoYXIp ICpwXSA9IHRydWU7DQogfQ0KIA0KQEAgLTEwMTk4LDcgKzEwMzQ5LDcgQEAg dHlwZWRlZiB2b2lkICgqbWlwc19zYXZlX3Jlc3RvcmVfZm4pIChydHgsIHJ0 eCk7DQogICAgc3RhY2sgcG9pbnRlci4gICovDQogDQogc3RhdGljIHZvaWQN Ci1taXBzX3NhdmVfcmVzdG9yZV9yZWcgKGVudW0gbWFjaGluZV9tb2RlIG1v ZGUsIGludCByZWdubywNCittaXBzX3NhdmVfcmVzdG9yZV9zaW5nbGVfcmVn IChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgcmVnbm8sDQogCQkgICAg ICAgSE9TVF9XSURFX0lOVCBvZmZzZXQsIG1pcHNfc2F2ZV9yZXN0b3JlX2Zu IGZuKQ0KIHsNCiAgIHJ0eCBtZW07DQpAQCAtMTAyMDgsNiArMTAzNTksMjMg QEAgc3RhdGljIHZvaWQNCiAgIGZuIChnZW5fcnR4X1JFRyAobW9kZSwgcmVn bm8pLCBtZW0pOw0KIH0NCiANCitzdGF0aWMgdm9pZA0KK21pcHNfc2F2ZV9y ZXN0b3JlX3JlZ2lzdGVycyAoaW50IHN0YXJ0X3JlZywgaW50IGVuZF9yZWcs IEhPU1RfV0lERV9JTlQgKm9mZnNldCwNCisJCQkgICAgIG1pcHNfc2F2ZV9y ZXN0b3JlX2ZuIGZuLCBIT1NUX1dJREVfSU5UIHNwX29mZnNldCkNCit7DQor ICBpbnQgcmVnbm87DQorDQorICBmb3IgKHJlZ25vID0gc3RhcnRfcmVnOyBy ZWdubyA+IGVuZF9yZWc7IHJlZ25vLS0pDQorICAgIGlmIChCSVRTRVRfUCAo Y2Z1bi0+bWFjaGluZS0+ZnJhbWUubWFzaywgcmVnbm8gLSBHUF9SRUdfRklS U1QpKQ0KKyAgICAgIHsNCisgICAgICAgIC8qIFJlY29yZCB0aGUgcmEgb2Zm c2V0IGZvciB1c2UgYnkgbWlwc19mdW5jdGlvbl9wcm9maWxlci4gICovDQor ICAgICAgICBpZiAocmVnbm8gPT0gUkVUVVJOX0FERFJfUkVHTlVNKQ0KKyAg ICAgICAgICBjZnVuLT5tYWNoaW5lLT5mcmFtZS5yYV9mcF9vZmZzZXQgPSAq b2Zmc2V0ICsgc3Bfb2Zmc2V0Ow0KKwltaXBzX3NhdmVfcmVzdG9yZV9zaW5n bGVfcmVnICh3b3JkX21vZGUsIHJlZ25vLCAqb2Zmc2V0LCBmbik7DQorCSpv ZmZzZXQgLT0gVU5JVFNfUEVSX1dPUkQ7DQorICAgICAgfQ0KK30NCisNCiAv KiBDYWxsIEZOIGZvciBlYWNoIGFjY3VtbGF0b3IgdGhhdCBpcyBzYXZlZCBi eSB0aGUgY3VycmVudCBmdW5jdGlvbi4NCiAgICBTUF9PRkZTRVQgaXMgdGhl IG9mZnNldCBvZiB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyIGZyb20gdGhl IHN0YXJ0DQogICAgb2YgdGhlIGZyYW1lLiAgKi8NCkBAIC0xMDIyMSw5ICsx MDM4OSw5IEBAIG1pcHNfZm9yX2VhY2hfc2F2ZWRfYWNjIChIT1NUX1dJREVf SU5UIHNwX29mZnNldCwNCiAgIG9mZnNldCA9IGNmdW4tPm1hY2hpbmUtPmZy YW1lLmFjY19zcF9vZmZzZXQgLSBzcF9vZmZzZXQ7DQogICBpZiAoQklUU0VU X1AgKGNmdW4tPm1hY2hpbmUtPmZyYW1lLmFjY19tYXNrLCAwKSkNCiAgICAg ew0KLSAgICAgIG1pcHNfc2F2ZV9yZXN0b3JlX3JlZyAod29yZF9tb2RlLCBM T19SRUdOVU0sIG9mZnNldCwgZm4pOw0KKyAgICAgIG1pcHNfc2F2ZV9yZXN0 b3JlX3NpbmdsZV9yZWcgKHdvcmRfbW9kZSwgTE9fUkVHTlVNLCBvZmZzZXQs IGZuKTsNCiAgICAgICBvZmZzZXQgLT0gVU5JVFNfUEVSX1dPUkQ7DQotICAg ICAgbWlwc19zYXZlX3Jlc3RvcmVfcmVnICh3b3JkX21vZGUsIEhJX1JFR05V TSwgb2Zmc2V0LCBmbik7DQorICAgICAgbWlwc19zYXZlX3Jlc3RvcmVfc2lu Z2xlX3JlZyAod29yZF9tb2RlLCBISV9SRUdOVU0sIG9mZnNldCwgZm4pOw0K ICAgICAgIG9mZnNldCAtPSBVTklUU19QRVJfV09SRDsNCiAgICAgfQ0KIA0K QEAgLTEwMjMxLDExICsxMDM5OSwxNDUgQEAgbWlwc19mb3JfZWFjaF9zYXZl ZF9hY2MgKEhPU1RfV0lERV9JTlQgc3Bfb2Zmc2V0LA0KICAgICBpZiAoQklU U0VUX1AgKGNmdW4tPm1hY2hpbmUtPmZyYW1lLmFjY19tYXNrLA0KIAkJICAo KHJlZ25vIC0gRFNQX0FDQ19SRUdfRklSU1QpIC8gMikgKyAxKSkNCiAgICAg ICB7DQotCW1pcHNfc2F2ZV9yZXN0b3JlX3JlZyAod29yZF9tb2RlLCByZWdu bywgb2Zmc2V0LCBmbik7DQorCW1pcHNfc2F2ZV9yZXN0b3JlX3NpbmdsZV9y ZWcgKHdvcmRfbW9kZSwgcmVnbm8sIG9mZnNldCwgZm4pOw0KIAlvZmZzZXQg LT0gVU5JVFNfUEVSX1dPUkQ7DQogICAgICAgfQ0KIH0NCiANCisvKiBTYXZl IHJlZ2lzdGVyIFJFRyB0byBNRU0uICBNYWtlIHRoZSBpbnN0cnVjdGlvbiBm cmFtZS1yZWxhdGVkLiAgKi8NCisNCitzdGF0aWMgdm9pZA0KK21pcHNfc2F2 ZV9yZWcgKHJ0eCByZWcsIHJ0eCBtZW0pDQorew0KKyAgaWYgKEdFVF9NT0RF IChyZWcpID09IERGbW9kZSAmJiAhVEFSR0VUX0ZMT0FUNjQpDQorICAgIHsN CisgICAgICBydHggeDEsIHgyOw0KKw0KKyAgICAgIG1pcHNfZW1pdF9tb3Zl X29yX3NwbGl0IChtZW0sIHJlZywgU1BMSVRfSUZfTkVDRVNTQVJZKTsNCisN CisgICAgICB4MSA9IG1pcHNfZnJhbWVfc2V0IChtaXBzX3N1YndvcmQgKG1l bSwgZmFsc2UpLA0KKwkJCSAgIG1pcHNfc3Vid29yZCAocmVnLCBmYWxzZSkp Ow0KKyAgICAgIHgyID0gbWlwc19mcmFtZV9zZXQgKG1pcHNfc3Vid29yZCAo bWVtLCB0cnVlKSwNCisJCQkgICBtaXBzX3N1YndvcmQgKHJlZywgdHJ1ZSkp Ow0KKyAgICAgIG1pcHNfc2V0X2ZyYW1lX2V4cHIgKGdlbl9ydHhfUEFSQUxM RUwgKFZPSURtb2RlLCBnZW5fcnR2ZWMgKDIsIHgxLCB4MikpKTsNCisgICAg fQ0KKyAgZWxzZQ0KKyAgICBtaXBzX2VtaXRfc2F2ZV9zbG90X21vdmUgKG1l bSwgcmVnLCBNSVBTX1BST0xPR1VFX1RFTVAgKEdFVF9NT0RFIChyZWcpKSk7 DQorfQ0KKw0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdHlwZVsxOV0g PSB7IDB4MDAwMTAwMDAsIDB4MDAwMzAwMDAsIDB4MDAwNzAwMDAsDQorCQkJ CSAgICAgICAweDAwMGYwMDAwLCAweDAwMWYwMDAwLCAweDAwM2YwMDAwLA0K KwkJCQkgICAgICAgMHgwMDdmMDAwMCwgMHgwMGZmMDAwMCwgMHg0MGZmMDAw MCwNCisJCQkJICAgICAgIDB4ODAwMDAwMDAsIDB4ODAwMTAwMDAsIDB4ODAw MzAwMDAsDQorCQkJCSAgICAgICAweDgwMDcwMDAwLCAweDgwMGYwMDAwLCAw eDgwMWYwMDAwLA0KKwkJCQkgICAgICAgMHg4MDNmMDAwMCwgMHg4MDdmMDAw MCwgMHg4MGZmMDAwMCwNCisJCQkJICAgICAgIDB4YzBmZjAwMDAgfTsNCisN CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY29kZVsxOV0gPSB7IDEs IDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDE2LCAxNywNCisJCQkJCSAxOCwg MTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjV9Ow0KKw0KKy8qIEJ1aWxkIG1p Y3JvTUlQUyBzYXZlIG9yIHJlc3RvcmUuICBGTiBpcyBzYXZlIG9yIHJlc3Rv cmUgZnVuY3Rpb24uDQorICAgT0ZGU0VUIGlzIHRoZSBjdXJyZW50IHN0YWNr IG9mZnNldC4NCisgICBSZXR1cm4gdHJ1ZSBpZiB3ZSBzdWNjZWVkIGNyZWF0 aW5nIHNhdmUgb3IgcmVzdG9yZS4gICovDQorDQorc3RhdGljIGJvb2wNCit1 bWlwc19idWlsZF9zYXZlX3Jlc3RvcmUgKG1pcHNfc2F2ZV9yZXN0b3JlX2Zu IGZuLA0KKwkJCSAgSE9TVF9XSURFX0lOVCBvZmZzZXQsIEhPU1RfV0lERV9J TlQgc3Bfb2Zmc2V0KQ0KK3sNCisgIGludCBpLCBudW1fb2ZfcmVnOw0KKyAg dW5zaWduZWQgaW50IGo7DQorICBydHggcGF0dGVybiwgc2V0LCByZWcsIG1l bTsNCisgIEhPU1RfV0lERV9JTlQgdGhpc19vZmZzZXQ7DQorICBydHggdGhp c19iYXNlOw0KKw0KKyAgLyogTFdNL1NXTSBjYW4gb25seSBzdXBwb3J0IG9m ZnNldHMgZnJvbSAtMjA0OCB0byAyMDQ3LiAgKi8NCisgIGlmICghVU1JUFNf MTJCSVRfT0ZGU0VUX1AgKG9mZnNldCkpDQorICAgIHJldHVybiBmYWxzZTsN CisNCisgIC8qIFRyeSBtYXRjaGluZyAkMTYgdG8gJDMxIChzMCB0byByYSku ICAqLw0KKyAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUgKHR5cGUpOyBp KyspDQorICAgIGlmICgoY2Z1bi0+bWFjaGluZS0+ZnJhbWUubWFzayAmIDB4 ZmZmZjAwMDApID09IHR5cGVbaV0pDQorICAgICAgYnJlYWs7DQorDQorICBp ZiAoaSA9PSBBUlJBWV9TSVpFICh0eXBlKSkNCisgICAgew0KKyAgICAgIC8q IFRyeSBtYXRjaGluZyAkMTYgdG8gJDIzIChzMCB0byBzNykgb25seS4gICov DQorICAgICAgZm9yIChpID0gMDsgaSA8IDg7IGkgKyspDQorCWlmICgoY2Z1 bi0+bWFjaGluZS0+ZnJhbWUubWFzayAmIDB4MDBmZjAwMDApID09IHR5cGVb aV0pDQorCSAgYnJlYWs7DQorDQorICAgICAgaWYgKGkgPT0gOCkNCisJcmV0 dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAvKiBGb3Igb25seSBvbmUgcmVn aXN0ZXIsIHdlIHVzZSBub3JtYWwgc3cvbHcgZm9yIHNwZWVkLiAgKi8NCisg IGlmIChpID09IDAgfHwgaSA9PSA5KQ0KKyAgICByZXR1cm4gZmFsc2U7DQor DQorICBpZiAoaSA8IDggJiYgKGNmdW4tPm1hY2hpbmUtPmZyYW1lLm1hc2sg JiAweGZmMDAwMDAwKSkNCisgICAgbWlwc19zYXZlX3Jlc3RvcmVfcmVnaXN0 ZXJzIChHUF9SRUdfTEFTVCwgR1BfUkVHX0xBU1QgLSA4LA0KKwkJCQkgJm9m ZnNldCwgZm4sIHNwX29mZnNldCk7DQorDQorICAvKiBBZGp1c3Qgb2Zmc2V0 IGZvciBvdXRwdXQuICAqLw0KKyAgbnVtX29mX3JlZyA9IChlbmNvZGVbaV0g JiAweGYpICsgKGVuY29kZVtpXSA+PiA0KTsNCisgIG9mZnNldCAtPSAoVU5J VFNfUEVSX1dPUkQgKiAobnVtX29mX3JlZyAtIDEpKTsNCisNCisgIC8qIENy ZWF0ZSB0aGUgZmluYWwgUEFSQUxMRUwuICAqLw0KKyAgcGF0dGVybiA9IGdl bl9ydHhfUEFSQUxMRUwgKFZPSURtb2RlLCBydHZlY19hbGxvYyAobnVtX29m X3JlZykpOw0KKw0KKyAgdGhpc19iYXNlID0gc3RhY2tfcG9pbnRlcl9ydHg7 DQorICB0aGlzX29mZnNldCA9IG9mZnNldDsNCisNCisgIC8qIEZvciAkMTYt JDIzLCAkMzAuICAqLw0KKyAgZm9yIChqID0gMDsgaiA8IChlbmNvZGVbaV0g JiAweGYpOyBqKyspDQorICAgIHsNCisgICAgICB1bnNpZ25lZCBpbnQgcmVn bm87DQorICAgICAgbG9uZyBsb25nIG9mZnNldCA9IHRoaXNfb2Zmc2V0ICsg aiAqIFVOSVRTX1BFUl9XT1JEOw0KKyAgICAgIG1lbSA9IGdlbl9mcmFtZV9t ZW0gKFNJbW9kZSwgcGx1c19jb25zdGFudCAoUG1vZGUsIHRoaXNfYmFzZSwg b2Zmc2V0KSk7DQorICAgICAgcmVnbm8gPSAoaiAhPSA4KSA/IDE2ICsgaiA6 IDMwOw0KKyAgICAgIHJlZyA9IGdlbl9ydHhfUkVHIChTSW1vZGUsIHJlZ25v KTsNCisgICAgICBpZiAoZm4gPT0gbWlwc19zYXZlX3JlZykNCisJc2V0ID0g bWlwc19mcmFtZV9zZXQgKG1lbSwgcmVnKTsNCisgICAgICBlbHNlDQorCXsN CisJICBzZXQgPSBnZW5fcnR4X1NFVCAoVk9JRG1vZGUsIHJlZywgbWVtKTsN CisJICBtaXBzX2FkZF9jZmFfcmVzdG9yZSAocmVnKTsNCisJfQ0KKyAgICAg IFhWRUNFWFAgKHBhdHRlcm4sIDAsIGopID0gc2V0Ow0KKyAgICB9DQorDQor ICAvKiBGb3IgJDMxLiAgKi8NCisgIGlmIChlbmNvZGVbaV0gPj4gNCkNCisg ICAgew0KKyAgICAgIGxvbmcgbG9uZyBvZmZzZXQgPSB0aGlzX29mZnNldCAr IGogKiBVTklUU19QRVJfV09SRDsNCisgICAgICBtZW0gPSBnZW5fZnJhbWVf bWVtIChTSW1vZGUsIHBsdXNfY29uc3RhbnQgKFBtb2RlLCB0aGlzX2Jhc2Us IG9mZnNldCkpOw0KKyAgICAgIHJlZyA9IGdlbl9ydHhfUkVHIChTSW1vZGUs IDMxKTsNCisgICAgICBpZiAoZm4gPT0gbWlwc19zYXZlX3JlZykNCisJc2V0 ID0gbWlwc19mcmFtZV9zZXQgKG1lbSwgcmVnKTsNCisgICAgICBlbHNlDQor CXsNCisJICBzZXQgPSBnZW5fcnR4X1NFVCAoVk9JRG1vZGUsIHJlZywgbWVt KTsNCisJICBtaXBzX2FkZF9jZmFfcmVzdG9yZSAocmVnKTsNCisJfQ0KKyAg ICAgIFhWRUNFWFAgKHBhdHRlcm4sIDAsIGopID0gc2V0Ow0KKyAgICB9DQor DQorICBwYXR0ZXJuID0gZW1pdF9pbnNuIChwYXR0ZXJuKTsNCisgIGlmIChm biA9PSBtaXBzX3NhdmVfcmVnKQ0KKyAgICBSVFhfRlJBTUVfUkVMQVRFRF9Q KHBhdHRlcm4pID0gMTsgIA0KKw0KKyAgLyogQWRqdXN0IHRoZSBsYXN0IG9m ZnNldC4gICovDQorICBvZmZzZXQgLT0gVU5JVFNfUEVSX1dPUkQ7DQorDQor ICAvKiBGb3IgJDE1IHRvICQwLiAgKi8NCisgIGlmIChjZnVuLT5tYWNoaW5l LT5mcmFtZS5tYXNrICYgMHhmZmZmKQ0KKyAgICB7DQorICAgICAgbWlwc19z YXZlX3Jlc3RvcmVfcmVnaXN0ZXJzIChHUF9SRUdfRklSU1QgKyAxNSwgR1Bf UkVHX0ZJUlNULA0KKwkJCQkgICAmb2Zmc2V0LCBmbiwgc3Bfb2Zmc2V0KTsN CisgICAgfQ0KKw0KKyAgcmV0dXJuIHRydWU7DQorfQ0KIC8qIENhbGwgRk4g Zm9yIGVhY2ggcmVnaXN0ZXIgdGhhdCBpcyBzYXZlZCBieSB0aGUgY3VycmVu dCBmdW5jdGlvbi4NCiAgICBTUF9PRkZTRVQgaXMgdGhlIG9mZnNldCBvZiB0 aGUgY3VycmVudCBzdGFjayBwb2ludGVyIGZyb20gdGhlIHN0YXJ0DQogICAg b2YgdGhlIGZyYW1lLiAgKi8NCkBAIC0xMDI1MywxNiArMTA1NTUsMTMgQEAg bWlwc19mb3JfZWFjaF9zYXZlZF9ncHJfYW5kX2ZwciAoSE9TVF9XSURFX0lO VCBzcF8NCiAgICAgIG5lZWQgYSBub3AgaW4gdGhlIGVwaWxvZ3VlIGlmIGF0 IGxlYXN0IG9uZSByZWdpc3RlciBpcyByZWxvYWRlZCBpbg0KICAgICAgYWRk aXRpb24gdG8gcmV0dXJuIGFkZHJlc3MuICAqLw0KICAgb2Zmc2V0ID0gY2Z1 bi0+bWFjaGluZS0+ZnJhbWUuZ3Bfc3Bfb2Zmc2V0IC0gc3Bfb2Zmc2V0Ow0K LSAgZm9yIChyZWdubyA9IEdQX1JFR19MQVNUOyByZWdubyA+PSBHUF9SRUdf RklSU1Q7IHJlZ25vLS0pDQotICAgIGlmIChCSVRTRVRfUCAoY2Z1bi0+bWFj aGluZS0+ZnJhbWUubWFzaywgcmVnbm8gLSBHUF9SRUdfRklSU1QpKQ0KLSAg ICAgIHsNCi0JLyogUmVjb3JkIHRoZSByYSBvZmZzZXQgZm9yIHVzZSBieSBt aXBzX2Z1bmN0aW9uX3Byb2ZpbGVyLiAgKi8NCi0JaWYgKHJlZ25vID09IFJF VFVSTl9BRERSX1JFR05VTSkNCi0JICBjZnVuLT5tYWNoaW5lLT5mcmFtZS5y YV9mcF9vZmZzZXQgPSBvZmZzZXQgKyBzcF9vZmZzZXQ7DQotCW1pcHNfc2F2 ZV9yZXN0b3JlX3JlZyAod29yZF9tb2RlLCByZWdubywgb2Zmc2V0LCBmbik7 DQotCW9mZnNldCAtPSBVTklUU19QRVJfV09SRDsNCi0gICAgICB9DQogDQor ICBpZiAoIVRBUkdFVF9NSUNST01JUFMNCisgICAgICB8fCAoVEFSR0VUX01J Q1JPTUlQUw0KKyAgICAgICAgICAmJiAhdW1pcHNfYnVpbGRfc2F2ZV9yZXN0 b3JlIChmbiwgb2Zmc2V0LCBzcF9vZmZzZXQpKSkNCisgICAgbWlwc19zYXZl X3Jlc3RvcmVfcmVnaXN0ZXJzIChHUF9SRUdfTEFTVCwgR1BfUkVHX0ZJUlNU LA0KKwkJCQkgJm9mZnNldCwgZm4sIHNwX29mZnNldCk7DQorDQogICAvKiBU aGlzIGxvb3AgbXVzdCBpdGVyYXRlIG92ZXIgdGhlIHNhbWUgc3BhY2UgYXMg aXRzIGNvbXBhbmlvbiBpbg0KICAgICAgbWlwc19jb21wdXRlX2ZyYW1lX2lu Zm8uICAqLw0KICAgb2Zmc2V0ID0gY2Z1bi0+bWFjaGluZS0+ZnJhbWUuZnBf c3Bfb2Zmc2V0IC0gc3Bfb2Zmc2V0Ow0KQEAgLTEwMjcyLDcgKzEwNTcxLDcg QEAgbWlwc19mb3JfZWFjaF9zYXZlZF9ncHJfYW5kX2ZwciAoSE9TVF9XSURF X0lOVCBzcF8NCiAgICAgICAgcmVnbm8gLT0gTUFYX0ZQUlNfUEVSX0ZNVCkN CiAgICAgaWYgKEJJVFNFVF9QIChjZnVuLT5tYWNoaW5lLT5mcmFtZS5mbWFz aywgcmVnbm8gLSBGUF9SRUdfRklSU1QpKQ0KICAgICAgIHsNCi0JbWlwc19z YXZlX3Jlc3RvcmVfcmVnIChmcHJfbW9kZSwgcmVnbm8sIG9mZnNldCwgZm4p Ow0KKwltaXBzX3NhdmVfcmVzdG9yZV9zaW5nbGVfcmVnIChmcHJfbW9kZSwg cmVnbm8sIG9mZnNldCwgZm4pOw0KIAlvZmZzZXQgLT0gR0VUX01PREVfU0la RSAoZnByX21vZGUpOw0KICAgICAgIH0NCiB9DQpAQCAtMTA1MDEsMjcgKzEw ODAwLDcgQEAgbWlwc19mcmFtZV9iYXJyaWVyICh2b2lkKQ0KICAgZW1pdF9j bG9iYmVyIChnZW5fZnJhbWVfbWVtIChCTEttb2RlLCBzdGFja19wb2ludGVy X3J0eCkpOw0KIH0NCiANCi0vKiBTYXZlIHJlZ2lzdGVyIFJFRyB0byBNRU0u ICBNYWtlIHRoZSBpbnN0cnVjdGlvbiBmcmFtZS1yZWxhdGVkLiAgKi8NCiAN Ci1zdGF0aWMgdm9pZA0KLW1pcHNfc2F2ZV9yZWcgKHJ0eCByZWcsIHJ0eCBt ZW0pDQotew0KLSAgaWYgKEdFVF9NT0RFIChyZWcpID09IERGbW9kZSAmJiAh VEFSR0VUX0ZMT0FUNjQpDQotICAgIHsNCi0gICAgICBydHggeDEsIHgyOw0K LQ0KLSAgICAgIG1pcHNfZW1pdF9tb3ZlX29yX3NwbGl0IChtZW0sIHJlZywg U1BMSVRfSUZfTkVDRVNTQVJZKTsNCi0NCi0gICAgICB4MSA9IG1pcHNfZnJh bWVfc2V0IChtaXBzX3N1YndvcmQgKG1lbSwgZmFsc2UpLA0KLQkJCSAgIG1p cHNfc3Vid29yZCAocmVnLCBmYWxzZSkpOw0KLSAgICAgIHgyID0gbWlwc19m cmFtZV9zZXQgKG1pcHNfc3Vid29yZCAobWVtLCB0cnVlKSwNCi0JCQkgICBt aXBzX3N1YndvcmQgKHJlZywgdHJ1ZSkpOw0KLSAgICAgIG1pcHNfc2V0X2Zy YW1lX2V4cHIgKGdlbl9ydHhfUEFSQUxMRUwgKFZPSURtb2RlLCBnZW5fcnR2 ZWMgKDIsIHgxLCB4MikpKTsNCi0gICAgfQ0KLSAgZWxzZQ0KLSAgICBtaXBz X2VtaXRfc2F2ZV9zbG90X21vdmUgKG1lbSwgcmVnLCBNSVBTX1BST0xPR1VF X1RFTVAgKEdFVF9NT0RFIChyZWcpKSk7DQotfQ0KLQ0KIC8qIFRoZSBfX2du dV9sb2NhbF9ncCBzeW1ib2wuICAqLw0KIA0KIHN0YXRpYyBHVFkoKCkpIHJ0 eCBtaXBzX2dudV9sb2NhbF9ncDsNCkBAIC0xMDc5MCw4ICsxMTA2OSw4IEBA IG1pcHNfZXhwYW5kX3Byb2xvZ3VlICh2b2lkKQ0KICAJICAgIGlmIChCSVRT RVRfUCAobWFzaywgcmVnbm8gLSBHUF9SRUdfRklSU1QpKQ0KICAJICAgICAg ew0KIAkJb2Zmc2V0IC09IFVOSVRTX1BFUl9XT1JEOw0KLQkJbWlwc19zYXZl X3Jlc3RvcmVfcmVnICh3b3JkX21vZGUsIHJlZ25vLA0KLQkJCQkgICAgICAg b2Zmc2V0LCBtaXBzX3NhdmVfcmVnKTsNCisJCW1pcHNfc2F2ZV9yZXN0b3Jl X3NpbmdsZV9yZWcgKHdvcmRfbW9kZSwgcmVnbm8sDQorCQkJCQkgICAgICBv ZmZzZXQsIG1pcHNfc2F2ZV9yZWcpOw0KICAJICAgICAgfQ0KICAJfQ0KICAg ICAgIGVsc2UNCkBAIC0xMTA3OCw2ICsxMTM1Nyw3IEBAIG1pcHNfZGVhbGxv Y2F0ZV9zdGFjayAocnR4IGJhc2UsIHJ0eCBvZmZzZXQsIEhPU1RfDQogICAg IHJldHVybjsNCiANCiAgIG1pcHNfZnJhbWVfYmFycmllciAoKTsNCisNCiAg IGlmIChvZmZzZXQgPT0gY29uc3QwX3J0eCkNCiAgICAgew0KICAgICAgIGVt aXRfbW92ZV9pbnNuIChzdGFja19wb2ludGVyX3J0eCwgYmFzZSk7DQpAQCAt MTExOTYsOSArMTE0NzYsOSBAQCBtaXBzX2V4cGFuZF9lcGlsb2d1ZSAoYm9v bCBzaWJjYWxsX3ApDQogIAlpZiAoQklUU0VUX1AgKG1hc2ssIHJlZ25vIC0g R1BfUkVHX0ZJUlNUKSkNCiAgCSAgew0KICAJICAgIG9mZnNldCAtPSBVTklU U19QRVJfV09SRDsNCi0gCSAgICBtaXBzX3NhdmVfcmVzdG9yZV9yZWcgKHdv cmRfbW9kZSwgcmVnbm8sIG9mZnNldCwgbWlwc19yZXN0b3JlX3JlZyk7DQor IAkgICAgbWlwc19zYXZlX3Jlc3RvcmVfc2luZ2xlX3JlZyAod29yZF9tb2Rl LCByZWdubywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvZmZzZXQsIG1pcHNfcmVzdG9yZV9yZWcpOw0KICAJICB9DQot DQogICAgICAgLyogUmVzdG9yZSB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycyBh bmQgZGVhbGxvY2F0ZSB0aGUgZmluYWwgYml0DQogCSBvZiB0aGUgZnJhbWUu ICAqLw0KICAgICAgIG1pcHNfZnJhbWVfYmFycmllciAoKTsNCkBAIC0xMTIx MSw3ICsxMTQ5MSw2IEBAIG1pcHNfZXhwYW5kX2VwaWxvZ3VlIChib29sIHNp YmNhbGxfcCkNCiAgICAgICBtaXBzX2Zvcl9lYWNoX3NhdmVkX2FjYyAoZnJh bWUtPnRvdGFsX3NpemUgLSBzdGVwMiwgbWlwc19yZXN0b3JlX3JlZyk7DQog ICAgICAgbWlwc19mb3JfZWFjaF9zYXZlZF9ncHJfYW5kX2ZwciAoZnJhbWUt PnRvdGFsX3NpemUgLSBzdGVwMiwNCiAJCQkJICAgICAgIG1pcHNfcmVzdG9y ZV9yZWcpOw0KLQ0KICAgICAgIGlmIChjZnVuLT5tYWNoaW5lLT5pbnRlcnJ1 cHRfaGFuZGxlcl9wKQ0KIAl7DQogCSAgSE9TVF9XSURFX0lOVCBvZmZzZXQ7 DQpAQCAtMTEyNTQsNyArMTE1MzMsNiBAQCBtaXBzX2V4cGFuZF9lcGlsb2d1 ZSAoYm9vbCBzaWJjYWxsX3ApDQogCS8qIERlYWxsb2NhdGUgdGhlIGZpbmFs IGJpdCBvZiB0aGUgZnJhbWUuICAqLw0KIAltaXBzX2RlYWxsb2NhdGVfc3Rh Y2sgKHN0YWNrX3BvaW50ZXJfcnR4LCBHRU5fSU5UIChzdGVwMiksIDApOw0K ICAgICB9DQotICBnY2NfYXNzZXJ0ICghbWlwc19lcGlsb2d1ZS5jZmFfcmVz dG9yZXMpOw0KIA0KICAgLyogQWRkIGluIHRoZSBfX2J1aWx0aW5fZWhfcmV0 dXJuIHN0YWNrIGFkanVzdG1lbnQuICBXZSBuZWVkIHRvDQogICAgICB1c2Ug YSB0ZW1wb3JhcnkgaW4gTUlQUzE2IGNvZGUuICAqLw0KQEAgLTE2MjExLDE3 ICsxNjQ4OSwxOSBAQCBtaXBzX291dHB1dF9taV90aHVuayAoRklMRSAqZmls ZSwgdHJlZSB0aHVua19mbmRlYw0KICAgcmVsb2FkX2NvbXBsZXRlZCA9IDA7 DQogfQ0KIAwNCi0vKiBUaGUgbGFzdCBhcmd1bWVudCBwYXNzZWQgdG8gbWlw c19zZXRfbWlwczE2X21vZGUsIG9yIG5lZ2F0aXZlIGlmIHRoZQ0KLSAgIGZ1 bmN0aW9uIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuICAqLw0KKy8qIFRoZSBs YXN0IGFyZ3VtZW50IHBhc3NlZCB0byBtaXBzX3NldF9taXBzMTZfbWljcm9t aXBzX21vZGUsDQorICAgb3IgbmVnYXRpdmUgaWYgdGhlIGZ1bmN0aW9uIGhh c24ndCBiZWVuIGNhbGxlZCB5ZXQuICAqLw0KIHN0YXRpYyBpbnQgd2FzX21p cHMxNl9wID0gLTE7DQorc3RhdGljIGludCB3YXNfbWljcm9taXBzX3AgPSAt MTsNCiANCiAvKiBTZXQgdXAgdGhlIHRhcmdldC1kZXBlbmRlbnQgZ2xvYmFs IHN0YXRlIHNvIHRoYXQgaXQgbWF0Y2hlcyB0aGUNCiAgICBjdXJyZW50IGZ1 bmN0aW9uJ3MgSVNBIG1vZGUuICAqLw0KIA0KIHN0YXRpYyB2b2lkDQotbWlw c19zZXRfbWlwczE2X21vZGUgKGludCBtaXBzMTZfcCkNCittaXBzX3NldF9t aXBzMTZfbWljcm9taXBzX21vZGUgKGludCBtaXBzMTZfcCwgaW50IG1pY3Jv bWlwc19wKQ0KIHsNCi0gIGlmIChtaXBzMTZfcCA9PSB3YXNfbWlwczE2X3Ap DQorICBpZiAobWlwczE2X3AgPT0gd2FzX21pcHMxNl9wDQorICAgICAgJiYg bWljcm9taXBzX3AgPT0gd2FzX21pY3JvbWlwc19wKQ0KICAgICByZXR1cm47 DQogDQogICAvKiBSZXN0b3JlIGJhc2Ugc2V0dGluZ3Mgb2YgdmFyaW91cyBm bGFncy4gICovDQpAQCAtMTYyOTAsNiArMTY1NzAsMTggQEAgc3RhdGljIHZv aWQNCiAgICAgICAvKiBTd2l0Y2ggdG8gbm9ybWFsIChub24tTUlQUzE2KSBt b2RlLiAgKi8NCiAgICAgICB0YXJnZXRfZmxhZ3MgJj0gfk1BU0tfTUlQUzE2 Ow0KIA0KKyAgICAgIGlmIChtaWNyb21pcHNfcCkNCisJew0KKwkgIC8qIFN3 aXRjaCB0byBtaWNyb01JUFMgbW9kZS4gICovDQorCSAgdGFyZ2V0X2ZsYWdz IHw9IE1BU0tfTUlDUk9NSVBTOw0KKw0KKwkgIC8qIEF2b2lkIGJyYW5jaCBs aWtlbHkuICAqLw0KKwkgIHRhcmdldF9mbGFncyAmPSB+TUFTS19CUkFOQ0hM SUtFTFk7DQorCX0NCisgICAgICBlbHNlDQorCS8qIFN3aXRjaCB0byBub3Jt YWwgKG5vbi1taWNyb01JUFMpIG1vZGUuICAqLw0KKwl0YXJnZXRfZmxhZ3Mg Jj0gfk1BU0tfTUlDUk9NSVBTOw0KKw0KICAgICAgIC8qIFByb3ZpZGUgZGVm YXVsdCB2YWx1ZXMgZm9yIGFsaWduXyogZm9yIDY0LWJpdCB0YXJnZXRzLiAg Ki8NCiAgICAgICBpZiAoVEFSR0VUXzY0QklUKQ0KIAl7DQpAQCAtMTYzMjEs MTUgKzE2NjEzLDIyIEBAIHN0YXRpYyB2b2lkDQogICAgIHJlc3RvcmVfdGFy Z2V0X2dsb2JhbHMgKCZkZWZhdWx0X3RhcmdldF9nbG9iYWxzKTsNCiANCiAg IHdhc19taXBzMTZfcCA9IG1pcHMxNl9wOw0KKyAgd2FzX21pY3JvbWlwc19w ID0gbWljcm9taXBzX3A7DQogfQ0KIA0KIC8qIEltcGxlbWVudCBUQVJHRVRf U0VUX0NVUlJFTlRfRlVOQ1RJT04uICBEZWNpZGUgd2hldGhlciB0aGUgY3Vy cmVudA0KLSAgIGZ1bmN0aW9uIHNob3VsZCB1c2UgdGhlIE1JUFMxNiBJU0Eg YW5kIHN3aXRjaCBtb2RlcyBhY2NvcmRpbmdseS4gICovDQorICAgZnVuY3Rp b24gc2hvdWxkIHVzZSB0aGUgTUlQUzE2IG9yIG1pY3JvTUlQUyBJU0EgYW5k IHN3aXRjaCBtb2Rlcw0KKyAgIGFjY29yZGluZ2x5LiAgKi8NCiANCiBzdGF0 aWMgdm9pZA0KIG1pcHNfc2V0X2N1cnJlbnRfZnVuY3Rpb24gKHRyZWUgZm5k ZWNsKQ0KIHsNCi0gIG1pcHNfc2V0X21pcHMxNl9tb2RlIChtaXBzX3VzZV9t aXBzMTZfbW9kZV9wIChmbmRlY2wpKTsNCisNCisgIHVuc2lnbmVkIGludCBj b21wcmVzc2lvbl9wID0gbWlwc19nZXRfY29tcHJlc3NfbW9kZSAoZm5kZWNs KTsNCisNCisgIG1pcHNfc2V0X21pcHMxNl9taWNyb21pcHNfbW9kZSAoY29t cHJlc3Npb25fcCAmIE1BU0tfTUlQUzE2LA0KKwkJCQkgIGNvbXByZXNzaW9u X3AgJiBNQVNLX01JQ1JPTUlQUyk7DQorDQogfQ0KIAwNCiAvKiBBbGxvY2F0 ZSBhIGNodW5rIG9mIG1lbW9yeSBmb3IgcGVyLWZ1bmN0aW9uIG1hY2hpbmUt ZGVwZW5kZW50IGRhdGEuICAqLw0KQEAgLTE2NDM3LDE0ICsxNjczNiwyNCBA QCBtaXBzX29wdGlvbl9vdmVycmlkZSAodm9pZCkNCiAgIGlmIChnbG9iYWxf b3B0aW9uc19zZXQueF9taXBzX2lzYV9vcHRpb24pDQogICAgIG1pcHNfaXNh X29wdGlvbl9pbmZvID0gJm1pcHNfY3B1X2luZm9fdGFibGVbbWlwc19pc2Ff b3B0aW9uXTsNCiANCi0gIC8qIFByb2Nlc3MgZmxhZ3MgYXMgdGhvdWdoIHdl IHdlcmUgZ2VuZXJhdGluZyBub24tTUlQUzE2IGNvZGUuICAqLw0KLSAgbWlw c19iYXNlX21pcHMxNiA9IFRBUkdFVF9NSVBTMTY7DQotICB0YXJnZXRfZmxh Z3MgJj0gfk1BU0tfTUlQUzE2Ow0KLQ0KICNpZmRlZiBTVUJUQVJHRVRfT1ZF UlJJREVfT1BUSU9OUw0KICAgU1VCVEFSR0VUX09WRVJSSURFX09QVElPTlM7 DQogI2VuZGlmDQogDQorICAvKiBNSVBTMTYgYW5kIG1pY3JvTUlQUyBjYW5u b3QgY29leGlzdCAgKi8NCisgIGlmIChUQVJHRVRfTUlDUk9NSVBTICYmIFRB UkdFVF9NSVBTMTYpDQorICAgIGVycm9yICgidW5zdXBwb3J0ZWQgY29tYmlu YXRpb246ICVzIiwgIi1taXBzMTYgLW1taWNyb21pcHMiKTsNCisNCisgIC8q IFNhdmUgdGhlIGJhc2UgY29tcHJlc3Npb24gc3RhdGUgYW5kIHByb2Nlc3Mg ZmxhZ3MgYXMgdGhvdWdoIHdlDQorICAgICBhcmUgZ2VuZXJhdGluZyB1bmNv bXByZXNzZWQgY29kZS4gICovDQorICBpZiAoVEFSR0VUX01JUFMxNikNCisg ICAgbWlwc19iYXNlX2NvbXByZXNzaW9uX2ZsYWdzIHw9IE1BU0tfTUlQUzE2 Ow0KKyAgaWYgKFRBUkdFVF9NSUNST01JUFMpDQorICAgIG1pcHNfYmFzZV9j b21wcmVzc2lvbl9mbGFncyB8PSBNQVNLX01JQ1JPTUlQUzsNCisNCisgIHRh cmdldF9mbGFncyAmPSB+TUFTS19NSVBTMTY7DQorICB0YXJnZXRfZmxhZ3Mg Jj0gfk1BU0tfTUlDUk9NSVBTOw0KKw0KICAgLyogLW1uby1mbG9hdCBvdmVy cmlkZXMgLW1oYXJkLWZsb2F0IGFuZCAtbXNvZnQtZmxvYXQuICAqLw0KICAg aWYgKFRBUkdFVF9OT19GTE9BVCkNCiAgICAgew0KQEAgLTE2NDUzLDcgKzE2 NzYyLDcgQEAgbWlwc19vcHRpb25fb3ZlcnJpZGUgKHZvaWQpDQogICAgIH0N CiANCiAgIGlmIChUQVJHRVRfRkxJUF9NSVBTMTYpDQotICAgIFRBUkdFVF9J TlRFUkxJTktfTUlQUzE2ID0gMTsNCisgICAgVEFSR0VUX0lOVEVSTElOS19D T01QUkVTU0VEID0gMTsNCiANCiAgIC8qIFNldCB0aGUgc21hbGwgZGF0YSBs aW1pdC4gICovDQogICBtaXBzX3NtYWxsX2RhdGFfdGhyZXNob2xkID0gKGds b2JhbF9vcHRpb25zX3NldC54X2dfc3dpdGNoX3ZhbHVlDQpAQCAtMTY4MjYs OSArMTcxMzUsOSBAQCBtaXBzX29wdGlvbl9vdmVycmlkZSAodm9pZCkNCiAN CiAgIC8qIE5vdyBzZWxlY3QgdGhlIElTQSBtb2RlLg0KIA0KLSAgICAgRG8g YWxsIENQUC1zZW5zaXRpdmUgc3R1ZmYgaW4gbm9uLU1JUFMxNiBtb2RlOyB3 ZSdsbCBzd2l0Y2ggdG8NCi0gICAgIE1JUFMxNiBtb2RlIGFmdGVyd2FyZHMg aWYgbmVlZCBiZS4gICovDQotICBtaXBzX3NldF9taXBzMTZfbW9kZSAoZmFs c2UpOw0KKyAgICAgRG8gYWxsIENQUC1zZW5zaXRpdmUgc3R1ZmYgaW4gbm9u LU1JUFMxNi9ub24tbWljcm9NSVBTIG1vZGU7DQorICAgICBXZSdsbCBzd2l0 Y2ggbW9kZXMgbGF0ZXIgaWYgcmVxdWlyZWQuICAqLw0KKyAgbWlwc19zZXRf bWlwczE2X21pY3JvbWlwc19tb2RlIChmYWxzZSwgZmFsc2UpOw0KIH0NCiAN CiAvKiBTd2FwIHRoZSByZWdpc3RlciBpbmZvcm1hdGlvbiBmb3IgcmVnaXN0 ZXJzIEkgYW5kIEkgKyAxLCB3aGljaA0KQEAgLTE3MDg4LDYgKzE3Mzk3LDMx NiBAQCBtaXBzX211bHNpZGkzX2dlbl9mbiAoZW51bSBydHhfY29kZSBleHRf Y29kZSkNCiAgICAgICByZXR1cm4gc2lnbmVkX3AgPyBnZW5fbXVsc2lkaTNf MzJiaXQgOiBnZW5fdW11bHNpZGkzXzMyYml0Ow0KICAgICB9DQogfQ0KKw0K Kw0KKy8qIFJldHVybiB0cnVlIGlmIFBBVFRFUk4gbWF0Y2hlcyB0aGUga2lu ZCBvZiBpbnN0cnVjdGlvbiBnZW5lcmF0ZWQgYnkNCisgICBtaWNyb21pcHNf YnVpbGRfc2F2ZV9yZXN0b3JlLiAgU0FWRV9QIGlzIHRydWUgZm9yIHN0b3Jl LiAgKi8NCisNCitib29sDQordW1pcHNfc2F2ZV9yZXN0b3JlX3BhdHRlcm5f cCAoYm9vbCBzYXZlX3AsIHJ0eCBwYXR0ZXJuKQ0KK3sNCisgIGludCBuOw0K KyAgSE9TVF9XSURFX0lOVCBmaXJzdF9vZmZzZXQgPSAwOw0KKyAgcnR4IGZp cnN0X2Jhc2UgPSAwOw0KKyAgdW5zaWduZWQgaW50IGZpcnN0X3JlZ25vID0g MDsNCisNCisgIGZvciAobiA9IDA7IG4gPCBYVkVDTEVOIChwYXR0ZXJuLCAw KTsgbisrKQ0KKyAgICB7DQorICAgICAgcnR4IHNldCwgcmVnLCBtZW0sIHRo aXNfYmFzZTsNCisgICAgICBIT1NUX1dJREVfSU5UIHRoaXNfb2Zmc2V0Ow0K KyAgICAgIHVuc2lnbmVkIGludCB0aGlzX3JlZ25vOw0KKw0KKyAgICAgIC8q IENoZWNrIHRoYXQgd2UgaGF2ZSBhIFNFVC4gICovDQorICAgICAgc2V0ID0g WFZFQ0VYUCAocGF0dGVybiwgMCwgbik7DQorICAgICAgaWYgKEdFVF9DT0RF IChzZXQpICE9IFNFVCkNCisJcmV0dXJuIGZhbHNlOw0KKw0KKyAgICAgIC8q IENoZWNrIHRoYXQgdGhlIFNFVCBpcyBhIGxvYWQgKGlmIHJlc3RvcmluZykg b3IgYSBzdG9yZQ0KKwkgKGlmIHNhdmluZykuICAqLw0KKyAgICAgIG1lbSA9 IHNhdmVfcCA/IFNFVF9ERVNUIChzZXQpIDogU0VUX1NSQyAoc2V0KTsNCisg ICAgICBpZiAoIU1FTV9QIChtZW0pIHx8IE1FTV9WT0xBVElMRV9QIChtZW0p KQ0KKwlyZXR1cm4gZmFsc2U7DQorDQorICAgICAgLyogQ2hlY2sgdGhhdCB0 aGUgYWRkcmVzcyBpcyB0aGUgc3VtIG9mIGJhc2UgYW5kIGEgcG9zc2libHkt emVybw0KKwkgY29uc3RhbnQgb2Zmc2V0LiAgRGV0ZXJtaW5lIGlmIHRoZSBv ZmZzZXQgaXMgaW4gcmFuZ2UuICAqLw0KKyAgICAgIG1pcHNfc3BsaXRfcGx1 cyAoWEVYUCAobWVtLCAwKSwgJnRoaXNfYmFzZSwgJnRoaXNfb2Zmc2V0KTsN CisgICAgICBpZiAoIVJFR19QICh0aGlzX2Jhc2UpDQorCSAgJiYgVU1JUFNf MTJCSVRfT0ZGU0VUX1AgKHRoaXNfb2Zmc2V0KSkNCisJcmV0dXJuIGZhbHNl Ow0KKw0KKyAgICAgIGlmIChuID09IDApDQorCXsNCisJICBmaXJzdF9iYXNl ID0gdGhpc19iYXNlOw0KKwkgIGZpcnN0X29mZnNldCA9IHRoaXNfb2Zmc2V0 Ow0KKwl9DQorICAgICAgZWxzZQ0KKwl7DQorCSAgLyogQ2hlY2sgaWYgdGhp c19iYXNlIGlzIHRoZSBzYW1lIGFzIGZpcnN0X2Jhc2UuICAqLw0KKwkgIGlm IChSRUdOTyAodGhpc19iYXNlKSAhPSBSRUdOTyAoZmlyc3RfYmFzZSkpDQor CSAgICByZXR1cm4gZmFsc2U7DQorDQorCSAgLyogQ2hlY2sgaWYgdGhpc19v ZmZzZXQgaXMgZmlyc3Rfb2Zmc2V0ICsgVU5JVFNfUEVSX1dPUkQgKiBuLiAg Ki8NCisJICBpZiAodGhpc19vZmZzZXQgIT0gZmlyc3Rfb2Zmc2V0ICsgVU5J VFNfUEVSX1dPUkQgKiBuKQ0KKwkgICAgcmV0dXJuIGZhbHNlOw0KKwl9DQor DQorICAgICAgLyogQ2hlY2sgdGhhdCBTRVQncyBvdGhlciBvcGVyYW5kIGlz IGEgcmVnaXN0ZXIuICAqLw0KKyAgICAgIHJlZyA9IHNhdmVfcCA/IFNFVF9T UkMgKHNldCkgOiBTRVRfREVTVCAoc2V0KTsNCisgICAgICBpZiAoIVJFR19Q IChyZWcpKQ0KKwlyZXR1cm4gZmFsc2U7DQorDQorICAgICAgLyogTWFrZSBz dXJlIHRoZSBvcmRlciBvZiByZWdubyBpcyAiJDE2LSQyMywgJDMwLCAkMzEi LCAiJDE2LSQyMywgJDMwIiwNCisJIG9yICIkMzEiLiAgKi8NCisgICAgICB0 aGlzX3JlZ25vID0gUkVHTk8gKHJlZyk7DQorICAgICAgaWYgKG4gPT0gMCkN CisJew0KKwkgIGlmICh0aGlzX3JlZ25vICE9IDE2ICYmIHRoaXNfcmVnbm8g IT0gMzEpDQorCSAgICByZXR1cm4gZmFsc2U7DQorCSAgZmlyc3RfcmVnbm8g PSB0aGlzX3JlZ25vOw0KKwl9DQorICAgICAgZWxzZSBpZiAobiA9PSA4KSAv KiBGb3IgczguICAqLw0KKwl7DQorCSAgaWYgKG4gPT0gWFZFQ0xFTiAocGF0 dGVybiwgMCkgLSAxKQ0KKwkgICAgew0KKwkgICAgICBpZiAodGhpc19yZWdu byAhPSAzMCAmJiB0aGlzX3JlZ25vICE9IDMxKQ0KKwkJcmV0dXJuIGZhbHNl Ow0KKwkgICAgfQ0KKwkgIGVsc2UNCisJICAgIHsNCisJICAgICAgaWYgKHRo aXNfcmVnbm8gIT0gMzApDQorCQlyZXR1cm4gZmFsc2U7DQorCSAgICB9DQor CX0NCisgICAgICBlbHNlIGlmIChuICE9IFhWRUNMRU4gKHBhdHRlcm4sIDAp IC0gMSkNCisJew0KKwkgIGlmICh0aGlzX3JlZ25vICE9IGZpcnN0X3JlZ25v ICsgbikNCisJICAgIHJldHVybiBmYWxzZTsNCisJfQ0KKyAgICAgIGVsc2Ug LyogVGhlIGxhc3QgaXRlbS4gICovDQorCXsNCisJICBpZiAoKHRoaXNfcmVn bm8gIT0gZmlyc3RfcmVnbm8gKyBuKSAmJiB0aGlzX3JlZ25vICE9IDMxKQ0K KwkgICAgcmV0dXJuIGZhbHNlOw0KKwl9DQorICAgIH0NCisNCisgIHJldHVy biB0cnVlOw0KK30NCisvKiBSZXR1cm4gdGhlIGFzc2VtYmx5IGluc3RydWN0 aW9uIGZvciBtaWNyb01JUFMgbHdtIG9yIHN3bS4NCisgICBTQVZFX1AgYW5k IFBBVFRFUk4gYXJlIGFzIGZvciB1bWlwc19zYXZlX3Jlc3RvcmVfcGF0dGVy bl9wLiAgKi8NCisNCitjb25zdCBjaGFyICoNCit1bWlwc19vdXRwdXRfc2F2 ZV9yZXN0b3JlIChib29sIHNhdmVfcCwgcnR4IHBhdHRlcm4pDQorew0KKyAg c3RhdGljIGNoYXIgYnVmZmVyWzMwMF07DQorICBjaGFyICpzOw0KKyAgaW50 IG47DQorICBIT1NUX1dJREVfSU5UIG9mZnNldDsNCisgIHJ0eCBiYXNlLCBt ZW0sIHNldCwgcmVnLCBsYXN0X3NldCwgbGFzdF9yZWc7DQorDQorICAvKiBQ YXJzZSB0aGUgcGF0dGVybi4gICovDQorICBnY2NfYXNzZXJ0ICh1bWlwc19z YXZlX3Jlc3RvcmVfcGF0dGVybl9wIChzYXZlX3AsIHBhdHRlcm4pKTsNCisN CisgIHMgPSBzdHJjcHkgKGJ1ZmZlciwgc2F2ZV9wID8gInN3bVx0IiA6ICJs d21cdCIpOw0KKyAgcyArPSBzdHJsZW4gKHMpOw0KKyAgbiA9IFhWRUNMRU4g KHBhdHRlcm4sIDApOw0KKw0KKyAgc2V0ID0gWFZFQ0VYUCAocGF0dGVybiwg MCwgMCk7DQorICByZWcgPSBzYXZlX3AgPyBTRVRfU1JDIChzZXQpIDogU0VU X0RFU1QgKHNldCk7DQorICBtZW0gPSBzYXZlX3AgPyBTRVRfREVTVCAoc2V0 KSA6IFNFVF9TUkMgKHNldCk7DQorICBtaXBzX3NwbGl0X3BsdXMgKFhFWFAg KG1lbSwgMCksICZiYXNlLCAmb2Zmc2V0KTsNCisNCisgIGxhc3Rfc2V0ID0g WFZFQ0VYUCAocGF0dGVybiwgMCwgbiAtIDEpOw0KKyAgbGFzdF9yZWcgPSBz YXZlX3AgPyBTRVRfU1JDIChsYXN0X3NldCkgOiBTRVRfREVTVCAobGFzdF9z ZXQpOw0KKw0KKyAgaWYgKFJFR05PIChsYXN0X3JlZykgPT0gMzEpDQorICAg IG4tLTsNCisNCisgIGdjY19hc3NlcnQgKG4gPD0gOSk7DQorICBpZiAobiA9 PSAwKQ0KKyAgICA7DQorICBlbHNlIGlmIChuID09IDEpDQorICAgIHMgKz0g c3ByaW50ZiAocywgIiVzLCIsIHJlZ19uYW1lc1sxNl0pOw0KKyAgZWxzZSBp ZiAobiA8IDkpDQorICAgIHMgKz0gc3ByaW50ZiAocywgIiVzLSVzLCIsIHJl Z19uYW1lc1sxNl0sIHJlZ19uYW1lc1sxNSArIG5dKTsNCisgIGVsc2UgaWYg KG4gPT0gOSkNCisgICAgcyArPSBzcHJpbnRmIChzLCAiJXMtJXMsJXMsIiwg cmVnX25hbWVzWzE2XSwgcmVnX25hbWVzWzIzXSwNCisJCSAgcmVnX25hbWVz WzMwXSk7DQorDQorICBpZiAoUkVHTk8gKGxhc3RfcmVnKSA9PSAzMSkNCisg ICAgcyArPSBzcHJpbnRmIChzLCAiJXMsIiwgcmVnX25hbWVzWzMxXSk7DQor DQorICBzICs9IHNwcmludGYgKHMsICIlZCglcykiLCAoaW50KW9mZnNldCwg cmVnX25hbWVzW1JFR05PIChiYXNlKV0pOw0KKyAgcmV0dXJuIGJ1ZmZlcjsN Cit9DQorLyogUmV0dXJuIHRydWUgaWYgTUVNMSBhbmQgTUVNMiB1c2UgdGhl IHNhbWUgYmFzZSByZWdpc3RlciwgYW5kIHRoZQ0KKyAgIG9mZnNldCBvZiBN RU0yIGVxdWFscyB0aGUgb2Zmc2V0IG9mIE1FTTEgcGx1cyA0LiAgRklSU1Rf UkVHIGlzIHRoZQ0KKyAgIHJlZ2lzdGVyIGludG8gKGZyb20pIHdoaWNoIHRo ZSBjb250ZW50cyBvZiBNRU0xIHdpbGwgYmUgbG9hZGVkDQorICAgKHN0b3Jl ZCksIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgTE9BRF9QLg0KKyAgIFNX QVBfUCBpcyB0cnVlIHdoZW4gdGhlIDFzdCBhbmQgMm5kIGluc3RydWN0aW9u cyBhcmUgc3dhcHBlZC4gICovDQorDQorc3RhdGljIGJvb2wNCit1bWlwc19s b2FkX3N0b3JlX3BhaXJfcF8xIChib29sIGxvYWRfcCwgYm9vbCBzd2FwX3As IHJ0eCBmaXJzdF9yZWcsDQorCQkJICAgcnR4IG1lbTEsIHJ0eCBtZW0yKQ0K K3sNCisgIHJ0eCBiYXNlMSwgYmFzZTI7DQorICBIT1NUX1dJREVfSU5UIG9m ZnNldDEsIG9mZnNldDI7DQorDQorICBpZiAoIU1FTV9QIChtZW0xKSB8fCAh TUVNX1AgKG1lbTIpKQ0KKyAgICByZXR1cm4gZmFsc2U7DQorDQorICAvKiBN YWtlIHN1cmUgbWVtb3J5IGlzIGJhc2UgcGx1cyBvZmZzZXQuICAqLw0KKyAg aWYgKEdFVF9DT0RFIChYRVhQIChtZW0xLCAwKSkgIT0gUExVUw0KKyAgICAg IHx8IEdFVF9DT0RFIChYRVhQIChtZW0yLCAwKSkgIT0gUExVUw0KKyAgICAg IHx8IEdFVF9DT0RFIChYRVhQIChYRVhQIChtZW0xLCAwKSwgMSkpICE9IENP TlNUX0lOVA0KKyAgICAgIHx8IEdFVF9DT0RFIChYRVhQIChYRVhQIChtZW0y LCAwKSwgMSkpICE9IENPTlNUX0lOVCkNCisgICAgcmV0dXJuIGZhbHNlOw0K Kw0KKyAgbWlwc19zcGxpdF9wbHVzIChYRVhQIChtZW0xLCAwKSwgJmJhc2Ux LCAmb2Zmc2V0MSk7DQorICBtaXBzX3NwbGl0X3BsdXMgKFhFWFAgKG1lbTIs IDApLCAmYmFzZTIsICZvZmZzZXQyKTsNCisNCisgIGlmICghUkVHX1AgKGJh c2UxKSB8fCAhcnR4X2VxdWFsX3AgKGJhc2UxLCBiYXNlMikpDQorICAgIHJl dHVybiBmYWxzZTsNCisNCisgIC8qIEF2b2lkIGludmFsaWQgbG9hZCBwYWly IGluc3RydWN0aW9ucy4gICovDQorICBpZiAobG9hZF9wICYmIFJFR05PIChm aXJzdF9yZWcpID09IFJFR05PIChiYXNlMSkpDQorICAgIHJldHVybiBmYWxz ZTsNCisNCisgIC8qIFdlIG11c3QgYXZvaWQgdGhpcyBjYXNlIGZvciBhbnRp LWRlcGVuZGVuY2UuDQorICAgICBFeDogIGx3ICQzLCA0KCQzKQ0KKyAgICAg ICAgICBsdyAkMiwgMCgkMykNCisgICAgIGZpcnN0X3JlZyBpcyAkMiwgYnV0 IHRoZSBiYXNlIGlzICQzLiAgKi8NCisgIGlmIChsb2FkX3AgJiYgc3dhcF9w ICYmIChSRUdOTyAoZmlyc3RfcmVnKSArIDEpID09IFJFR05PIChiYXNlMSkp DQorICAgIHJldHVybiBmYWxzZTsNCisNCisgIGlmIChzd2FwX3ANCisgICAg ICAmJiBvZmZzZXQyICsgNCAhPSBvZmZzZXQxKQ0KKyAgICByZXR1cm4gZmFs c2U7DQorDQorICBpZiAob2Zmc2V0MSArIDQgIT0gb2Zmc2V0MikNCisgICAg cmV0dXJuIGZhbHNlOw0KKw0KKyAgaWYgKCFVTUlQU18xMkJJVF9PRkZTRVRf UCAob2Zmc2V0MSkpDQorICAgIHJldHVybiBmYWxzZTsNCisNCisgIHJldHVy biB0cnVlOw0KK30NCisNCitib29sDQordW1pcHNfbG9hZF9zdG9yZV9wYWly X3AgKGJvb2wgbG9hZF9wLCBydHggKm9wZXJhbmRzKQ0KK3sNCisgIHJ0eCBy ZWcxLCByZWcyLCBtZW0xLCBtZW0yOw0KKw0KKyAgaWYgKGxvYWRfcCkNCisg ICAgew0KKyAgICAgIHJlZzEgPSBvcGVyYW5kc1swXTsNCisgICAgICByZWcy ID0gb3BlcmFuZHNbMl07DQorICAgICAgbWVtMSA9IG9wZXJhbmRzWzFdOw0K KyAgICAgIG1lbTIgPSBvcGVyYW5kc1szXTsNCisgICAgfQ0KKyAgZWxzZQ0K KyAgICB7DQorICAgICAgcmVnMSA9IG9wZXJhbmRzWzFdOw0KKyAgICAgIHJl ZzIgPSBvcGVyYW5kc1szXTsNCisgICAgICBtZW0xID0gb3BlcmFuZHNbMF07 DQorICAgICAgbWVtMiA9IG9wZXJhbmRzWzJdOw0KKyAgICB9DQorDQorICBp ZiAoUkVHTk8gKHJlZzIpID09IFJFR05PIChyZWcxKSArIDEpDQorICAgICAg cmV0dXJuIHVtaXBzX2xvYWRfc3RvcmVfcGFpcl9wXzEgKGxvYWRfcCwgZmFs c2UsIHJlZzEsIG1lbTEsIG1lbTIpOw0KKw0KKyAgZWxzZSBpZiAoUkVHTk8g KHJlZzEpID09IFJFR05PIChyZWcyKSArIDEpDQorICAgICAgcmV0dXJuIHVt aXBzX2xvYWRfc3RvcmVfcGFpcl9wXzEgKGxvYWRfcCwgdHJ1ZSwgcmVnMiwg bWVtMSwgbWVtMik7DQorDQorICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8q IFJldHVybiB0aGUgYXNzZW1ibHkgaW5zdHJ1Y3Rpb24gZm9yIG1pY3JvTUlQ UyBsd3Agb3Igc3dwLg0KKyAgIExPQURfUCBpcyB0cnVlIGZvciBsb2FkLiAg Ki8NCisNCitzdGF0aWMgdm9pZA0KK3VtaXBzX291dHB1dF9sb2FkX3N0b3Jl X3BhaXJfMSAoYm9vbCBsb2FkX3AsIHJ0eCByZWcsIHJ0eCBtZW0pDQorew0K KyAgSE9TVF9XSURFX0lOVCBvZmZzZXQ7DQorICBydHggYmFzZSwgbG9jYWxf b3BzWzNdOw0KKw0KKyAgZ2NjX2Fzc2VydCAoUkVHX1AgKHJlZykgJiYgTUVN X1AgKG1lbSkpOw0KKw0KKyAgbWlwc19zcGxpdF9wbHVzIChYRVhQIChtZW0s IDApLCAmYmFzZSwgJm9mZnNldCk7DQorICBnY2NfYXNzZXJ0IChSRUdfUCAo YmFzZSkpOw0KKw0KKyAgbG9jYWxfb3BzWzBdID0gcmVnOw0KKyAgbG9jYWxf b3BzWzFdID0gZ2VuX3J0eF9DT05TVF9JTlQgKFBtb2RlLCBvZmZzZXQpOw0K KyAgbG9jYWxfb3BzWzJdID0gYmFzZTsNCisgIGlmIChsb2FkX3ApDQorICAg IG91dHB1dF9hc21faW5zbiAoImx3cCAlMCwlMSglMikiLCBsb2NhbF9vcHMp Ow0KKyAgZWxzZQ0KKyAgICBvdXRwdXRfYXNtX2luc24gKCJzd3AgJTAsJTEo JTIpIiwgbG9jYWxfb3BzKTsNCit9DQorDQordm9pZA0KK3VtaXBzX291dHB1 dF9sb2FkX3N0b3JlX3BhaXIgKGJvb2wgbG9hZF9wLCBydHggKm9wZXJhbmRz KQ0KK3sNCisgIHJ0eCByZWcxLCByZWcyLCBtZW0xLCBtZW0yOw0KKyAgaWYg KGxvYWRfcCkNCisgICAgew0KKyAgICAgIHJlZzEgPSBvcGVyYW5kc1swXTsN CisgICAgICByZWcyID0gb3BlcmFuZHNbMl07DQorICAgICAgbWVtMSA9IG9w ZXJhbmRzWzFdOw0KKyAgICAgIG1lbTIgPSBvcGVyYW5kc1szXTsNCisgICAg fQ0KKyAgZWxzZQ0KKyAgICB7DQorICAgICAgcmVnMSA9IG9wZXJhbmRzWzFd Ow0KKyAgICAgIHJlZzIgPSBvcGVyYW5kc1szXTsNCisgICAgICBtZW0xID0g b3BlcmFuZHNbMF07DQorICAgICAgbWVtMiA9IG9wZXJhbmRzWzJdOw0KKyAg ICB9DQorICAgDQorICBpZiAoUkVHTk8gKHJlZzIpID09IFJFR05PIChyZWcx KSArIDEpDQorICAgIHsNCisgICAgICB1bWlwc19vdXRwdXRfbG9hZF9zdG9y ZV9wYWlyXzEgKGxvYWRfcCwgcmVnMSwgbWVtMSk7DQorICAgICAgcmV0dXJu Ow0KKyAgICB9DQorDQorICBnY2NfYXNzZXJ0IChSRUdOTyAocmVnMSkgPT0g UkVHTk8gKHJlZzIpICsgMSk7DQorICB1bWlwc19vdXRwdXRfbG9hZF9zdG9y ZV9wYWlyXzEgKGxvYWRfcCwgcmVnMiwgbWVtMik7DQorfQ0KKw0KKy8qIFJl dHVybiB0cnVlIGlmIHJlZzEgYW5kIHJlZzIgY2FuIGJlIHRhcmdldCBvZiBt b3ZlcC4gICovDQorDQorYm9vbA0KK3VtaXBzX21vdmVwX3RhcmdldF9wIChy dHggcmVnMSwgcnR4IHJlZzIpDQorew0KKyAgaW50IHJlZ25vMSwgcmVnbm8y LCBwYWlyOw0KKyAgdW5zaWduZWQgaW50IGk7DQorICBzdGF0aWMgY29uc3Qg aW50IG1hdGNoWzhdID0gezB4MDAwMDAwNjAsCS8qIDUsIDYgKi8NCisJCQkg ICAgICAgMHgwMDAwMDBhMCwJLyogNSwgNyAqLw0KKwkJCSAgICAgICAweDAw MDAwMGMwLAkvKiA2LCA3ICovDQorCQkJICAgICAgIDB4MDAyMDAwMTAsCS8q IDQsIDIxICovDQorCQkJICAgICAgIDB4MDA0MDAwMTAsCS8qIDQsIDIyICov DQorCQkJICAgICAgIDB4MDAwMDAwMzAsCS8qIDQsIDUgKi8NCisJCQkgICAg ICAgMHgwMDAwMDA1MCwJLyogNCwgNiAqLw0KKwkJCSAgICAgICAweDAwMDAw MDkwfTsJLyogNCwgNyAqLw0KKw0KKyAgaWYgKCFSRUdfUCAocmVnMSkgfHwg IVJFR19QIChyZWcyKSkNCisgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgcmVn bm8xID0gUkVHTk8gKHJlZzEpOw0KKyAgcmVnbm8yID0gUkVHTk8gKHJlZzIp Ow0KKw0KKyAgaWYgKCFHUF9SRUdfUCAocmVnbm8xKSAgfHwgIUdQX1JFR19Q IChyZWdubzIpKQ0KKyAgICByZXR1cm4gZmFsc2U7DQorDQorICBwYWlyID0g KDEgPDwgcmVnbm8xKSB8ICgxIDw8IHJlZ25vMik7DQorDQorICBmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRSAobWF0Y2gpOyBpKyspDQorICAgIHsNCisg ICAgICBpZiAocGFpciA9PSBtYXRjaFtpXSkNCisJcmV0dXJuIHRydWU7DQor ICAgIH0NCisNCisgIHJldHVybiBmYWxzZTsNCit9DQogDA0KIC8qIFJldHVy biB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgdHJhbXBvbGluZSBjb2RlLCBw YWRkZWQgdG8NCiAgICBUUkFNUE9MSU5FX0FMSUdOTUVOVCBiaXRzLiAgVGhl IHN0YXRpYyBjaGFpbiBwb2ludGVyIGFuZCB0YXJnZXQNCkBAIC0xNzM0Miw3 ICsxNzk2MSw3IEBAIG1pcHNfcHJlcGFyZV9wY2hfc2F2ZSAodm9pZCkNCiAg ICAgIEl0IHRoZXJlZm9yZSBzZWVtcyBiZXN0IHRvIHN3aXRjaCBiYWNrIHRv IG5vbi1NSVBTMTYgbW9kZSBhdA0KICAgICAgc2F2ZSB0aW1lLCBhbmQgdG8g ZW5zdXJlIHRoYXQgbWlwczE2X2dsb2JhbHMgcmVtYWlucyBudWxsIGFmdGVy DQogICAgICBhIFBDSCBsb2FkLiAgKi8NCi0gIG1pcHNfc2V0X21pcHMxNl9t b2RlIChmYWxzZSk7DQorICBtaXBzX3NldF9taXBzMTZfbWljcm9taXBzX21v ZGUgKGZhbHNlLCBmYWxzZSk7DQogICBtaXBzMTZfZ2xvYmFscyA9IDA7DQog fQ0KIAwNCkluZGV4OiBjb25maWcvbWlwcy9taXBzLmgNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBjb25maWcvbWlwcy9taXBzLmgJKHJldmlzaW9u IDE5NTM1MSkNCisrKyBjb25maWcvbWlwcy9taXBzLmgJKHdvcmtpbmcgY29w eSkNCkBAIC0zNzQsNyArMzc0LDcgQEAgc3RydWN0IG1pcHNfY3B1X2luZm8g ew0KICAgICAgIGVsc2UJCQkJCQkJCVwNCiAJYnVpbHRpbl9kZWZpbmUgKCJf X21pcHNfZnByPTMyIik7CQkJCVwNCiAJCQkJCQkJCQlcDQotICAgICAgaWYg KG1pcHNfYmFzZV9taXBzMTYpCQkJCQkJXA0KKyAgICAgIGlmIChtaXBzX2Jh c2VfY29tcHJlc3Npb25fZmxhZ3MgJiBNQVNLX01JUFMxNikJCQlcDQogCWJ1 aWx0aW5fZGVmaW5lICgiX19taXBzMTYiKTsJCQkJCVwNCiAJCQkJCQkJCQlc DQogICAgICAgaWYgKFRBUkdFVF9NSVBTM0QpCQkJCQkJXA0KQEAgLTM4Myw2 ICszODMsOSBAQCBzdHJ1Y3QgbWlwc19jcHVfaW5mbyB7DQogICAgICAgaWYg KFRBUkdFVF9TTUFSVE1JUFMpCQkJCQkJXA0KIAlidWlsdGluX2RlZmluZSAo Il9fbWlwc19zbWFydG1pcHMiKTsJCQkJXA0KIAkJCQkJCQkJCVwNCisgICAg ICBpZiAobWlwc19iYXNlX2NvbXByZXNzaW9uX2ZsYWdzICYgTUFTS19NSUNS T01JUFMpCQkJXA0KKwlidWlsdGluX2RlZmluZSAoIl9fbWlwc19taWNyb21p cHMiKTsJCQkJXA0KKwkJCQkJCQkJCVwNCiAgICAgICBpZiAoVEFSR0VUX01D VSkJCQkJCQkJXA0KIAlidWlsdGluX2RlZmluZSAoIl9fbWlwc19tY3UiKTsJ CQkJCVwNCiAJCQkJCQkJCQlcDQpAQCAtNzAyLDcgKzcwNSw3IEBAIHN0cnVj dCBtaXBzX2NwdV9pbmZvIHsNCiAgICAgICAgfG1hcmNoPXIxMDAwMHxtYXJj aD1yMTIwMDB8bWFyY2g9cjE0MDAwfG1hcmNoPXIxNjAwMDotbWlwczR9IFwN CiAgICAgICV7bWFyY2g9bWlwczMyfG1hcmNoPTRrY3xtYXJjaD00a218bWFy Y2g9NGtwfG1hcmNoPTRrc2M6LW1pcHMzMn0gXA0KICAgICAgJXttYXJjaD1t aXBzMzJyMnxtYXJjaD1tNGt8bWFyY2g9NGtlKnxtYXJjaD00a3NkfG1hcmNo PTI0ayogXA0KLSAgICAgICB8bWFyY2g9MzRrKnxtYXJjaD03NGsqfG1hcmNo PTEwMDRrKjogLW1pcHMzMnIyfSBcDQorICAgICAgIHxtYXJjaD0zNGsqfG1h cmNoPTc0ayp8bWFyY2g9bTE0ayp8bWFyY2g9MTAwNGsqOiAtbWlwczMycjJ9 IFwNCiAgICAgICV7bWFyY2g9bWlwczY0fG1hcmNoPTVrKnxtYXJjaD0yMGsq fG1hcmNoPXNiMSp8bWFyY2g9c3I3MTAwMCBcDQogICAgICAgIHxtYXJjaD14 bHJ8bWFyY2g9bG9vbmdzb24zYTogLW1pcHM2NH0gXA0KICAgICAgJXttYXJj aD1taXBzNjRyMnxtYXJjaD1vY3Rlb258bWFyY2g9eGxwOiAtbWlwczY0cjJ9 IFwNCkBAIC03MTYsNyArNzE5LDcgQEAgc3RydWN0IG1pcHNfY3B1X2luZm8g ew0KICAgIiV7bWhhcmQtZmxvYXR8bXNvZnQtZmxvYXR8bW5vLWZsb2F0fG1h cmNoPW1pcHMqOjsgXA0KICAgICAgbWFyY2g9dnI0MSp8bWFyY2g9bTRrfG1h cmNoPTRrKnxtYXJjaD0yNGtjfG1hcmNoPTI0a2VjIFwNCiAgICAgIHxtYXJj aD0zNGtjfG1hcmNoPTM0a258bWFyY2g9NzRrY3xtYXJjaD0xMDA0a2N8bWFy Y2g9NWtjIFwNCi0gICAgIHxtYXJjaD1vY3Rlb258bWFyY2g9eGxyOiAtbXNv ZnQtZmxvYXQ7CQkgIFwNCisgICAgIHxtYXJjaD1tMTRrKnxtYXJjaD1vY3Rl b258bWFyY2g9eGxyOiAtbXNvZnQtZmxvYXQ7CQkgIFwNCiAgICAgIG1hcmNo PSo6IC1taGFyZC1mbG9hdH0iDQogDQogLyogQSBzcGVjIGNvbmRpdGlvbiB0 aGF0IG1hdGNoZXMgMzItYml0IG9wdGlvbnMuICBJdCBvbmx5IHdvcmtzIGlm DQpAQCAtOTg5LDcgKzk5Miw4IEBAIHN0cnVjdCBtaXBzX2NwdV9pbmZvIHsN CiAJCQkJICAgICB8fCBJU0FfTUlQUzY0UjIpKQ0KIA0KIC8qIElTQSBoYXMg bHd4cyBpbnN0cnVjdGlvbiAobG9hZCB3L3NjYWxlZCBpbmRleCBhZGRyZXNz LiAgKi8NCi0jZGVmaW5lIElTQV9IQVNfTFdYUwkJKFRBUkdFVF9TTUFSVE1J UFMgJiYgIVRBUkdFVF9NSVBTMTYpDQorI2RlZmluZSBJU0FfSEFTX0xXWFMJ CSgoVEFSR0VUX1NNQVJUTUlQUyB8fCBUQVJHRVRfTUlDUk9NSVBTKSBcDQor CQkJCSAmJiAhVEFSR0VUX01JUFMxNikNCiANCiAvKiBJU0EgaGFzIGxieCwg bGJ1eCwgbGh4LCBsaHgsIGxodXgsIGx3eCwgbHd1eCwgb3IgbGR4IGluc3Ry dWN0aW9uLiAqLw0KICNkZWZpbmUgSVNBX0hBU19MQlgJCShUQVJHRVRfT0NU RU9OMikNCkBAIC0xMTIzLDYgKzExMjcsNyBAQCBzdHJ1Y3QgbWlwc19jcHVf aW5mbyB7DQogJXtHKn0gJShlbmRpYW5fc3BlYykgJXttaXBzMX0gJXttaXBz Mn0gJXttaXBzM30gJXttaXBzNH0gXA0KICV7bWlwczMyKn0gJXttaXBzNjQq fSBcDQogJXttaXBzMTZ9ICV7bW5vLW1pcHMxNjotbm8tbWlwczE2fSBcDQor JXttbWljcm9taXBzfSAle21uby1taWNyb21pcHN9IFwNCiAle21pcHMzZH0g JXttbm8tbWlwczNkOi1uby1taXBzM2R9IFwNCiAle21kbXh9ICV7bW5vLW1k bXg6LW5vLW1kbXh9IFwNCiAle21kc3B9ICV7bW5vLWRzcH0gXA0KQEAgLTE2 NzIsNiArMTY3Nyw4IEBAIHN0cnVjdCBtaXBzX2NwdV9pbmZvIHsNCiAgICgo dW5zaWduZWQgaW50KSAoKGludCkgKFJFR05PKSAtIEdQX1JFR19GSVJTVCkg PCBHUF9SRUdfTlVNKQ0KICNkZWZpbmUgTTE2X1JFR19QKFJFR05PKSBcDQog ICAoKChSRUdOTykgPj0gMiAmJiAoUkVHTk8pIDw9IDcpIHx8IChSRUdOTykg PT0gMTYgfHwgKFJFR05PKSA9PSAxNykNCisjZGVmaW5lIE0xNlNUT1JFX1JF R19QKFJFR05PKSBcDQorICAoKChSRUdOTykgPj0gMiAmJiAoUkVHTk8pIDw9 IDcpIHx8IChSRUdOTykgPT0gMCB8fCAoUkVHTk8pID09IDE3KQ0KICNkZWZp bmUgRlBfUkVHX1AoUkVHTk8pICBcDQogICAoKHVuc2lnbmVkIGludCkgKChp bnQpIChSRUdOTykgLSBGUF9SRUdfRklSU1QpIDwgRlBfUkVHX05VTSkNCiAj ZGVmaW5lIE1EX1JFR19QKFJFR05PKSBcDQpAQCAtMjQ1MiwxOCArMjQ1OSw0 OCBAQCB0eXBlZGVmIHN0cnVjdCBtaXBzX2FyZ3Mgew0KICAgIGFsbCBjYWxs cyBzaG91bGQgdXNlIGFzc2VtYmx5IG1hY3Jvcy4gIE90aGVyd2lzZSwgYWxs IGluZGlyZWN0DQogICAgY2FsbHMgc2hvdWxkIHVzZSAianIiIG9yICJqYWxy Ijsgd2Ugd2lsbCBhcnJhbmdlIHRvIHJlc3RvcmUgJGdwDQogICAgYWZ0ZXJ3 YXJkcyBpZiBuZWNlc3NhcnkuICBGaW5hbGx5LCB3ZSBjYW4gb25seSBnZW5l cmF0ZSBkaXJlY3QNCi0gICBjYWxscyBmb3IgLW1hYmljYWxscyBieSB0ZW1w b3JhcmlseSBzd2l0Y2hpbmcgdG8gbm9uLVBJQyBtb2RlLiAgKi8NCisgICBj YWxscyBmb3IgLW1hYmljYWxscyBieSB0ZW1wb3JhcmlseSBzd2l0Y2hpbmcg dG8gbm9uLVBJQyBtb2RlLg0KKw0KKyAgIEZvciBtaWNyb01JUFMgamFsKHIp LCB3ZSB0cnkgdG8gZ2VuZXJhdGUgamFsKHIpcyB3aGVuIGEgMTYtYml0DQor ICAgaW5zdHJ1Y3Rpb24gaXMgaW4gdGhlIGRlbGF5IHNsb3Qgb2YgamFsKHIp LiAgKi8NCiAjZGVmaW5lIE1JUFNfQ0FMTChJTlNOLCBPUEVSQU5EUywgVEFS R0VUX09QTk8sIFNJWkVfT1BOTykJXA0KKyAgKFRBUkdFVF9NSUNST01JUFMJ CQkJCQlcDQorICAgPyAoVEFSR0VUX1VTRV9HT1QgJiYgIVRBUkdFVF9FWFBM SUNJVF9SRUxPQ1MJCQlcDQorICAgICAgPyAoVEFSR0VUX0lOVEVSTElOS19V TkNPTVBSRVNTRUQJCQkJXA0KKwkgPyAiJSoiIElOU04gIiUhXHQlIiAjVEFS R0VUX09QTk8gIiUvIgkJCVwNCisJIDogIiUqIiBJTlNOICJcdCUiICNUQVJH RVRfT1BOTyAiJS8iKQkJCVwNCisgICAgICA6IChSRUdfUCAoT1BFUkFORFNb VEFSR0VUX09QTk9dKQkJCQlcDQorICAgICAgICAgJiYgbWlwc19nZXRfcGlj X2NhbGxfc3ltYm9sIChPUEVSQU5EUywgU0laRV9PUE5PKSkJXA0KKyAgICAg ID8gKCIlKi5yZWxvY1x0MWYsUl9NSVBTX0pBTFIsJSIgI1NJWkVfT1BOTyAi XG4iCQlcDQorICAgICAgICAgIjE6XHQiIElOU04gInJcdCUiICNUQVJHRVRf T1BOTyAiJS8iKQkJCVwNCisgICAgICA6IFJFR19QIChPUEVSQU5EU1tUQVJH RVRfT1BOT10pCQkJCVwNCisgICAgICA/IChUQVJHRVRfSU5URVJMSU5LX1VO Q09NUFJFU1NFRAkJCQlcDQorCSA/ICIlKiIgSU5TTiAiciUhXHQlIiAjVEFS R0VUX09QTk8gIiUvIgkJCVwNCisJIDogIiUqIiBJTlNOICJyXHQlIiAjVEFS R0VUX09QTk8gIiUvIikJCQlcDQorICAgICAgOiBNSVBTX0FCU09MVVRFX0pV TVAgKCIlKiIgSU5TTiAiXHQlIiAjVEFSR0VUX09QTk8gIiUvIikpCVwNCisg IDogKFRBUkdFVF9VU0VfR09UICYmICFUQVJHRVRfRVhQTElDSVRfUkVMT0NT CQkJXA0KKyAgICAgPyAiJSoiIElOU04gIlx0JSIgI1RBUkdFVF9PUE5PICIl LyIJCQlcDQorICAgICA6IChSRUdfUCAoT1BFUkFORFNbVEFSR0VUX09QTk9d KQkJCQlcDQorICAgICAgICAmJiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wg KE9QRVJBTkRTLCBTSVpFX09QTk8pKQlcDQorICAgICA/ICgiJSoucmVsb2Nc dDFmLFJfTUlQU19KQUxSLCUiICNTSVpFX09QTk8gIlxuIgkJXA0KKyAgICAg ICAgIjE6XHQiIElOU04gInJcdCUiICNUQVJHRVRfT1BOTyAiJS8iKQkJCVwN CisgICAgIDogUkVHX1AgKE9QRVJBTkRTW1RBUkdFVF9PUE5PXSkJCQkJXA0K KyAgICAgPyAiJSoiIElOU04gInJcdCUiICNUQVJHRVRfT1BOTyAiJS8iCQkJ XA0KKyAgICAgOiBNSVBTX0FCU09MVVRFX0pVTVAgKCIlKiIgSU5TTiAiXHQl IiAjVEFSR0VUX09QTk8gIiUvIikpKQ0KKwwNCisvKiBTaW1pbGFyIHRvIE1J UFNfQ0FMTCwgYnV0IHRoaXMgaXMgZm9yIE1JQ1JPTUlQUyAiaiIgdG8gZ2Vu ZXJhdGUNCisgICAianJjIiB3aGVuIG5vcCBpcyBpbiB0aGUgZGVsYXkgc2xv dCBvZiAianIiLiAgKi8NCisjZGVmaW5lIE1JQ1JPTUlQU19KKE9QRVJBTkRT LCBPUE5PKQkJCQlcDQogICAoVEFSR0VUX1VTRV9HT1QgJiYgIVRBUkdFVF9F WFBMSUNJVF9SRUxPQ1MJCQlcDQotICAgPyAiJSoiIElOU04gIlx0JSIgI1RB UkdFVF9PUE5PICIlLyIJCQkJXA0KLSAgIDogKFJFR19QIChPUEVSQU5EU1tU QVJHRVRfT1BOT10pCQkJCVwNCi0gICAgICAmJiBtaXBzX2dldF9waWNfY2Fs bF9zeW1ib2wgKE9QRVJBTkRTLCBTSVpFX09QTk8pKQlcDQotICAgPyAoIiUq LnJlbG9jXHQxZixSX01JUFNfSkFMUiwlIiAjU0laRV9PUE5PICJcbiIJCVwN Ci0gICAgICAiMTpcdCIgSU5TTiAiclx0JSIgI1RBUkdFVF9PUE5PICIlLyIp CQkJXA0KLSAgIDogUkVHX1AgKE9QRVJBTkRTW1RBUkdFVF9PUE5PXSkJCQkJ XA0KLSAgID8gIiUqIiBJTlNOICJyXHQlIiAjVEFSR0VUX09QTk8gIiUvIgkJ CQlcDQotICAgOiBNSVBTX0FCU09MVVRFX0pVTVAgKCIlKiIgSU5TTiAiXHQl IiAjVEFSR0VUX09QTk8gIiUvIikpDQotDA0KKyAgID8gIiUqalx0JSIgI09Q Tk8gIiUvIgkJCQkJXA0KKyAgIDogUkVHX1AgKE9QRVJBTkRTW09QTk9dKQkJ CQkJXA0KKyAgID8gIiUqanIlOlx0JSIgI09QTk8JCQkJCQlcDQorICAgOiBU QVJHRVRfQUJJQ0FMTFMgJiYgZmxhZ19waWMJCQkJXA0KKyAgID8gKCIub3B0 aW9uXHRwaWMwXG5cdCIJCQkJCVwNCisgICAgICAiJSpqXHQlIiAjT1BOTyAi JS9cblx0IgkJCQkJXA0KKyAgICAgICIub3B0aW9uXHRwaWMyIikJCQkJCQlc DQorICAgOiAiJSpqXHQlIiAjT1BOTyAiJS8iKQ0KKw0KIC8qIENvbnRyb2wg dGhlIGFzc2VtYmxlciBmb3JtYXQgdGhhdCB3ZSBvdXRwdXQuICAqLw0KIA0K IC8qIE91dHB1dCB0byBhc3NlbWJsZXIgZmlsZSB0ZXh0IHNheWluZyBmb2xs b3dpbmcgbGluZXMNCkBAIC0yODc3LDcgKzI5MTQsNyBAQCBleHRlcm4gZW51 bSBwcm9jZXNzb3IgbWlwc190dW5lOyAgICAgICAgLyogd2hpY2ggYw0KIGV4 dGVybiBpbnQgbWlwc19pc2E7CQkJLyogYXJjaGl0ZWN0dXJhbCBsZXZlbCAq Lw0KIGV4dGVybiBjb25zdCBzdHJ1Y3QgbWlwc19jcHVfaW5mbyAqbWlwc19h cmNoX2luZm87DQogZXh0ZXJuIGNvbnN0IHN0cnVjdCBtaXBzX2NwdV9pbmZv ICptaXBzX3R1bmVfaW5mbzsNCi1leHRlcm4gYm9vbCBtaXBzX2Jhc2VfbWlw czE2Ow0KK2V4dGVybiB1bnNpZ25lZCBpbnQgbWlwc19iYXNlX2NvbXByZXNz aW9uX2ZsYWdzOw0KIGV4dGVybiBHVFkoKCkpIHN0cnVjdCB0YXJnZXRfZ2xv YmFscyAqbWlwczE2X2dsb2JhbHM7DQogI2VuZGlmDQogDQpAQCAtMjkyMywz ICsyOTYwLDUgQEAgZXh0ZXJuIEdUWSgoKSkgc3RydWN0IHRhcmdldF9nbG9i YWxzICptaXBzMTZfZ2xvYmENCiAgICB3aXRoIGFyZ3VtZW50cyBBUkdTLiAg Ki8NCiAjZGVmaW5lIFBNT0RFX0lOU04oTkFNRSwgQVJHUykgXA0KICAgKFBt b2RlID09IFNJbW9kZSA/IE5BTUUgIyMgX3NpIEFSR1MgOiBOQU1FICMjIF9k aSBBUkdTKQ0KKw0KKyNkZWZpbmUgVU1JUFNfMTJCSVRfT0ZGU0VUX1AoT0ZG U0VUKSAoSU5fUkFOR0UgKE9GRlNFVCwgLTIwNDgsIDIwNDcpKQ0KSW5kZXg6 IGNvbmZpZy9taXBzL3Qtc2RlDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gY29uZmlnL21pcHMvdC1zZGUJKHJldmlzaW9uIDE5NTM1MSkNCisrKyBj b25maWcvbWlwcy90LXNkZQkod29ya2luZyBjb3B5KQ0KQEAgLTE2LDggKzE2 LDggQEANCiAjIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlO RzMuICBJZiBub3Qgc2VlDQogIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uDQogDQotTVVMVElMSUJfT1BUSU9OUyA9IEVML0VCIG1pcHMzMi9t aXBzMzJyMi9taXBzNjQvbWlwczY0cjIgbWlwczE2IG1zb2Z0LWZsb2F0L21m cDY0IG1jb2RlLXJlYWRhYmxlPW5vDQotTVVMVElMSUJfRElSTkFNRVMgPSBl bCBlYiBtaXBzMzIgbWlwczMycjIgbWlwczY0IG1pcHM2NHIyIG1pcHMxNiBz b2YgZjY0IHNwcmFtDQorTVVMVElMSUJfT1BUSU9OUyA9IEVML0VCIG1pcHMz Mi9taXBzMzJyMi9taXBzNjQvbWlwczY0cjIgbWlwczE2L21taWNyb21pcHMg bXNvZnQtZmxvYXQvbWZwNjQgbWNvZGUtcmVhZGFibGU9bm8NCitNVUxUSUxJ Ql9ESVJOQU1FUyA9IGVsIGViIG1pcHMzMiBtaXBzMzJyMiBtaXBzNjQgbWlw czY0cjIgbWlwczE2IG1pY3JvbWlwcyBzb2YgZjY0IHNwcmFtDQogTVVMVElM SUJfTUFUQ0hFUyA9IEVMPW1lbCBFQj1tZWINCiANCiAjIFRoZSAtbWZwNjQg b3B0aW9uIGlzIG9ubHkgdmFsaWQgaW4gY29uanVuY3Rpb24gd2l0aCAtbWlw czMycjIuDQpAQCAtMzMsMyArMzMsNiBAQCBNVUxUSUxJQl9FWENMVVNJT05T ICs9ICFtaXBzMzIvIW1pcHMzMnIyL21pcHMxNg0KIGVsc2UNCiBNVUxUSUxJ Ql9FWENMVVNJT05TICs9IG1pcHM2NC9taXBzMTYgbWlwczY0cjIvbWlwczE2 DQogZW5kaWYNCisNCisjIFRoZSAtbWNvZGUtcmVhZGFibGU9bm8gaXMgb25s eSBpbiBjb25qdW5jdGlvbiB3aXRoIC1taXBzMTYuDQorTVVMVElMSUJfRVhD TFVTSU9OUyArPSBtY29kZS1yZWFkYWJsZT1uby8hbWlwczE2DQo= --_007_FD3DCEAC5B03E9408544A1E416F11242987B49BFNAMBX01mgcmento_ Content-Type: application/octet-stream; name="gcc-testsuite.cl" Content-Description: gcc-testsuite.cl Content-Disposition: attachment; filename="gcc-testsuite.cl"; size=3848; creation-date="Tue, 22 Jan 2013 20:13:18 GMT"; modification-date="Tue, 22 Jan 2013 19:23:51 GMT" Content-Transfer-Encoding: base64 Content-length: 5218 MjAxMy0wMS0yMiAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGNvZGVzb3VyY2Vy eS5jb20+DQoNCgkqIGdjYy50YXJnZXQvbWlwcy9icmFuY2gtMi5jOiBDaGFu Z2UgTk9NSVBTMTYgdG8gTk9DT01QUkVTU0lPTi4NCgkqIGdjYy50YXJnZXQv bWlwcy9icmFuY2gtNC5jOiBMaWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlw cy9icmFuY2gtNS5jOiBMaWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9i cmFuY2gtNi5jOiBMaWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9icmFu Y2gtOC5jOiBMaWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9icmFuY2gt MTAuYzogTGlrZXdpc2UuDQoJKiBnY2MudGFyZ2V0L21pcHMvYnJhbmNoLTEy LmM6IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL2JyYW5jaC0xMy5j OiBMaWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9jYWxsLTEuYzogQ2hh bmdlIE5PTUlQUzE2IHRvIE5PQ09NUFJFU1NJT04uDQoJKiBnY2MudGFyZ2V0 L21pcHMvY2FsbC1zYXZlZC0xLmM6IEFkZCBhdHRyaWJ1dGUgTk9NSUNST01J UFMuDQoJKiBnY2MudGFyZ2V0L21pcHMvY2FsbC1zYXZlZC0yLmM6IExpa2V3 aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL2NhbGwtc2F2ZWQtMy5jOiBMaWtl d2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9nY2MtaGF2ZS1zeW5jLWNvbXBh cmUtYW5kLXN3YXAtNC5jOiBDb21waWxlIHdpdGggLW1uby1taWNyb21pcHMu DQoJKiBnY2MudGFyZ2V0L21pcHMvbGF6eS1iaW5kaW5nLTEuYzogQ2hhbmdl IE5PTUlQUzE2IHRvIE5PQ09NUFJFU1NJT04uDQoJKiBnY2MudGFyZ2V0L21p cHMvbG9uZy1jYWxscy1wZy5jOiBMaWtld2lzZS4NCgkqIGdjYy50YXJnZXQv bWlwcy9sb29uZ3Nvbi1tdWxkaXYtMS5jOiBMaWtld2lzZS4NCgkqIGdjYy50 YXJnZXQvbWlwcy9sb29uZ3Nvbi1tdWxkaXYtMi5jOiBMaWtld2lzZS4NCgkq IGdjYy50YXJnZXQvbWlwcy9sb29uZ3NvbjNhLW11bGRpdi0xLmM6IExpa2V3 aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL2xvb25nc29uM2EtbXVsZGl2LTIu YzogTGlrZXdpc2UuDQoJKiBnY2MudGFyZ2V0L21pcHMvbG9vbmdzb24tc2hp ZnQtY291bnQtdHJ1bmNhdGVkLTEuYzogQWRkIE5PTUlDUk9NSVBTIGF0dHJp YnV0ZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9sb29uZ3Nvbi1zaW1kLmM6IENv bXBpbGUgd2l0aCAtbW5vLWNvbXByZXNzaW9uLg0KCSogZ2NjLnRhcmdldC9t aXBzL21pY3JvbWlwcy1sd3Atc3dwLXZvbGF0aWxlLmM6IE5ldyB0ZXN0Lg0K CSogZ2NjLnRhcmdldC9taXBzL21pcHMtM2QtMS5jOiBDaGFuZ2UgTk9NSVBT MTYgdG8gTk9DT01QUkVTU0lPTi4NCgkqIGdjYy50YXJnZXQvbWlwcy9taXBz LTNkLTIuYzogTGlrZXdpc2UuDQoJKiBnY2MudGFyZ2V0L21pcHMvbWlwcy0z ZC0zLmM6IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL21pcHMtM2Qt NC5jOiBMaWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9taXBzLTNkLTUu YzogTGlrZXdpc2UuDQoJKiBnY2MudGFyZ2V0L21pcHMvbWlwcy0zZC02LmM6 IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL21pcHMtM2QtOS5jOiBM aWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9taXBzLTNkLTcuYzogTGlr ZXdpc2UuDQoJKiBnY2MudGFyZ2V0L21pcHMvbWlwcy0zZC04LmM6IExpa2V3 aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL21tY291bnQtcmEtYWRkcmVzcy0x LmM6IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL21tY291bnQtcmEt YWRkcmVzcy0zLmM6IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL25l YXItZmFyLTEuYw0KCSogZ2NjLnRhcmdldC9taXBzL25lYXItZmFyLTIuYw0K CSogZ2NjLnRhcmdldC9taXBzL25vLXNtYXJ0bWlwcy1sd3hzLmM6IExpa2V3 aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1iYWRkdS0xLmM6IENo YW5nZSBOT01JUFMxNiB0byBOT0NPTVBSRVNTSU9OLg0KCSogZ2NjLnRhcmdl dC9taXBzL29jdGVvbi1iYml0LTEuYzogTGlrZXdpc2UuDQoJKiBnY2MudGFy Z2V0L21pcHMvb2N0ZW9uLWJiaXQtMi5jOiBMaWtld2lzZS4NCgkqIGdjYy50 YXJnZXQvbWlwcy9vY3Rlb24tYmJpdC0zLmM6IExpa2V3aXNlLg0KCSogZ2Nj LnRhcmdldC9taXBzL29jdGVvbi1jaW5zLTEuYzogTGlrZXdpc2UuDQoJKiBn Y2MudGFyZ2V0L21pcHMvb2N0ZW9uLWNpbnMtMi5jOiBMaWtld2lzZS4NCgkq IGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tZG11bC0xLmM6IExpa2V3aXNlLg0K CSogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1kbXVsLTIuYzogTGlrZXdpc2Uu DQoJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWRtdWwtMy5jOiBMaWtld2lz ZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tZXh0cy0xLmM6IExpa2V3 aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1leHRzLTIuYzogTGlr ZXdpc2UuDQoJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWV4dHMtMy5jOiBM aWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tZXh0cy01LmM6 IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1leHRzLTcu YzogTGlrZXdpc2UuDQoJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLXBpcGUt MS5jOiBMaWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tcG9w LTEuYzogTGlrZXdpc2UuDQoJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLXBv cC0yLmM6IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1z ZXEtMy5jOiBMaWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24t c2VxLTQuYzogTGlrZXdpc2UuDQoJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9u Mi1seC0yLmM6IFVzZSBhdHRyaWJ1dGUgTk9NSUNST01JUFMuDQoJKiBnY2Mu dGFyZ2V0L21pcHMvb2N0ZW9uMi1seC0zLmM6IExpa2V3aXNlLg0KCSogZ2Nj LnRhcmdldC9taXBzL29jdGVvbjItcGlwZS0xLmM6IENoYW5nZSBOT01JUFMx NiB0byBOT0NPTVBSRVNTSU9OLg0KCSogZ2NjLnRhcmdldC9taXBzL3IxMGst Y2FjaGUtYmFycmllci0xLmM6IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9t aXBzL3IxMGstY2FjaGUtYmFycmllci0yLmM6IExpa2V3aXNlLg0KCSogZ2Nj LnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFycmllci0zLmM6IExpa2V3aXNl Lg0KCSogZ2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFycmllci00LmM6 IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFy cmllci01LmM6IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL3IxMGst Y2FjaGUtYmFycmllci02LmM6IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9t aXBzL3IxMGstY2FjaGUtYmFycmllci03LmM6IExpa2V3aXNlLg0KCSogZ2Nj LnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFycmllci04LmM6IExpa2V3aXNl Lg0KCSogZ2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFycmllci05LmM6 IExpa2V3aXNlLg0KCSogZ2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFy cmllci0xMC5jOiBMaWtld2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9yMTBr LWNhY2hlLWJhcnJpZXItMTEuYzogTGlrZXdpc2UuDQoJKiBnY2MudGFyZ2V0 L21pcHMvcjEway1jYWNoZS1iYXJyaWVyLTEyLmM6IExpa2V3aXNlLg0KCSog Z2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFycmllci0xMy5jOiBMaWtl d2lzZS4NCgkqIGdjYy50YXJnZXQvbWlwcy9taXBzLmV4cCAobWlwc19vcHRp b25fZ3JvdXBzKTogQWRkIC1tbWljcm9taXBzDQoJYW5kIC1tbm8tbWljcm9t aXBzLiBQYXNzIG5vbWljcm9taXBzIGFuZCBub2NvbXByZXNzaW9uIGF0dHJp YnV0ZXMNCgl0byBhbGwgdGVzdHMuDQo= --_007_FD3DCEAC5B03E9408544A1E416F11242987B49BFNAMBX01mgcmento_ Content-Type: application/octet-stream; name="gcc-testsuite.patch" Content-Description: gcc-testsuite.patch Content-Disposition: attachment; filename="gcc-testsuite.patch"; size=100417; creation-date="Tue, 22 Jan 2013 20:13:19 GMT"; modification-date="Tue, 22 Jan 2013 19:24:04 GMT" Content-Transfer-Encoding: base64 Content-length: 136124 SW5kZXg6IGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tcG9wLTEuYw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24t cG9wLTEuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlw cy9vY3Rlb24tcG9wLTEuYwkod29ya2luZyBjb3B5KQ0KQEAgLTMsMTMgKzMs MTMgQEANCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIlx0cG9w XHQiIH0gfSAqLw0KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAi XHRkcG9wXHQiIH0gfSAqLw0KIA0KLU5PTUlQUzE2IGludA0KK05PQ09NUFJF U1NJT04gaW50DQogZiAobG9uZyBsb25nIGEpDQogew0KICAgcmV0dXJuIF9f YnVpbHRpbl9wb3Bjb3VudGxsIChhKTsNCiB9DQogDQotTk9NSVBTMTYgaW50 DQorTk9DT01QUkVTU0lPTiBpbnQNCiBnIChpbnQgYSkNCiB7DQogICByZXR1 cm4gX19idWlsdGluX3BvcGNvdW50IChhKTsNCkluZGV4OiBnY2MudGFyZ2V0 L21pcHMvb2N0ZW9uLWRtdWwtMS5jDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gZ2NjLnRhcmdldC9taXBzL29jdGVvbi1kbXVsLTEuYwkocmV2aXNp b24gMTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tZG11bC0x LmMJKHdvcmtpbmcgY29weSkNCkBAIC00LDcgKzQsNyBAQA0KIC8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0ZG11bHRcdCIgfSB9ICov DQogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXHRtZmxv XHQiIH0gfSAqLw0KIA0KLU5PTUlQUzE2IGxvbmcgbG9uZw0KK05PQ09NUFJF U1NJT04gbG9uZyBsb25nDQogZiAobG9uZyBsb25nIGEsIGxvbmcgbG9uZyBi KQ0KIHsNCiAgIHJldHVybiBhICogYjsNCkluZGV4OiBnY2MudGFyZ2V0L21p cHMvbG9vbmdzb24tc2ltZC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gZ2NjLnRhcmdldC9taXBzL2xvb25nc29uLXNpbWQuYwkocmV2aXNpb24g MTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9sb29uZ3Nvbi1zaW1kLmMJ KHdvcmtpbmcgY29weSkNCkBAIC0xOSwxMCArMTksMTAgQEANCiA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLw0KIA0KIC8qIHsgZGctZG8g cnVuIH0gKi8NCi0vKiBsb29uZ3Nvbi5oIGRvZXMgbm90IGhhbmRsZSBvciBj aGVjayBmb3IgTUlQUzE2bmVzcy4gIFRoZXJlIGRvZXNuJ3QNCisvKiBsb29u Z3Nvbi5oIGRvZXMgbm90IGhhbmRsZSBvciBjaGVjayBmb3IgTUlQUzE2IG9y IG1pY3JvTUlQUyAgVGhlcmUgZG9lc24ndA0KICAgIHNlZW0gYW55IGdvb2Qg cmVhc29uIGZvciBpdCB0bywgZ2l2ZW4gdGhhdCB0aGUgTG9vbmdzb24gcHJv Y2Vzc29ycw0KLSAgIGRvIG5vdCBzdXBwb3J0IE1JUFMxNi4gICovDQotLyog eyBkZy1vcHRpb25zICJpc2E9bG9vbmdzb24gLW1oYXJkLWZsb2F0IC1tbm8t bWlwczE2IC1mbGF4LXZlY3Rvci1jb252ZXJzaW9ucyIgfSAqLw0KKyAgIGRv IG5vdCBzdXBwb3J0IHRoZW0uICAqLw0KKy8qIHsgZGctb3B0aW9ucyAiaXNh PWxvb25nc29uIC1taGFyZC1mbG9hdCAtbW5vLWNvbXByZXNzaW9uIC1mbGF4 LXZlY3Rvci1jb252ZXJzaW9ucyIgfSAqLw0KIA0KICNpbmNsdWRlICJsb29u Z3Nvbi5oIg0KICNpbmNsdWRlIDxzdGRpby5oPg0KSW5kZXg6IGdjYy50YXJn ZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJpZXItMS5jDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFy cmllci0xLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21p cHMvcjEway1jYWNoZS1iYXJyaWVyLTEuYwkod29ya2luZyBjb3B5KQ0KQEAg LTQsNyArNCw3IEBADQogICAgY2FjaGUgYmFycmllcnMuICAqLw0KIA0KICNk ZWZpbmUgVEVTVChBRERSKQkJCQkJXA0KLSAgTk9NSVBTMTYgdm9pZAkJCQkJ CVwNCisgIE5PQ09NUFJFU1NJT04gdm9pZAkJCQkJCVwNCiAgIHRlc3RfIyNB RERSIChpbnQgbikJCQkJCVwNCiAgIHsJCQkJCQkJXA0KICAgICB3aGlsZSAo bi0tKQkJCQkJCVwNCkluZGV4OiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWV4 dHMtMS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjLnRhcmdl dC9taXBzL29jdGVvbi1leHRzLTEuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysr IGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tZXh0cy0xLmMJKHdvcmtpbmcgY29w eSkNCkBAIC05LDcgKzksNyBAQA0KICAgbG9uZyBsb25nIGM6Mzg7DQogfTsN CiANCi1OT01JUFMxNiBpbnQNCitOT0NPTVBSRVNTSU9OIGludA0KIGYgKHN0 cnVjdCBmb28gcykNCiB7DQogICByZXR1cm4gcy5iOw0KSW5kZXg6IGdjYy50 YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJpZXItOS5jDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUt YmFycmllci05LmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0 L21pcHMvcjEway1jYWNoZS1iYXJyaWVyLTkuYwkod29ya2luZyBjb3B5KQ0K QEAgLTUsNyArNSw3IEBADQogDQogc3RydWN0IHsgc3RydWN0IHsgY2hhciBp WzRdOyB9IGE7IHN0cnVjdCB7IGNoYXIgals0XTsgfSBiOyB9IHM7DQogDQot Tk9NSVBTMTYgdm9pZA0KK05PQ09NUFJFU1NJT04gdm9pZA0KIGZvbyAoaW50 IHNlbDEsIGludCBzZWwyLCBpbnQgc2VsMykNCiB7DQogICBpZiAoc2VsMSkN CkluZGV4OiBnY2MudGFyZ2V0L21pcHMvY2FsbC1zYXZlZC0zLmMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMvY2FsbC1z YXZlZC0zLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21p cHMvY2FsbC1zYXZlZC0zLmMJKHdvcmtpbmcgY29weSkNCkBAIC01LDcgKzUs NyBAQA0KIHZvaWQgYmFyICh2b2lkKTsNCiBleHRlcm4gaW50IGJ1ZltdOw0K IA0KLU1JUFMxNiB2b2lkDQorTUlQUzE2IE5PTUlDUk9NSVBTIHZvaWQNCiBm b28gKGludCB4KQ0KIHsNCiAgIGlmIChfX2J1aWx0aW5fc2V0am1wIChidWYp ID09IDApDQpJbmRleDogZ2NjLnRhcmdldC9taXBzL2xvb25nc29uM2EtbXVs ZGl2LTEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJn ZXQvbWlwcy9sb29uZ3NvbjNhLW11bGRpdi0xLmMJKHJldmlzaW9uIDE5NTM3 OCkNCisrKyBnY2MudGFyZ2V0L21pcHMvbG9vbmdzb24zYS1tdWxkaXYtMS5j CSh3b3JraW5nIGNvcHkpDQpAQCAtMywxMSArMywxMSBAQA0KIHR5cGVkZWYg aW50IHN0Ow0KIHR5cGVkZWYgdW5zaWduZWQgaW50IHV0Ow0KIA0KLU5PTUlQ UzE2IHN0IHNtdWwgKHN0IHgsIHN0IHkpIHsgcmV0dXJuIHggKiB5OyB9DQot Tk9NSVBTMTYgc3Qgc2RpdiAoc3QgeCwgc3QgeSkgeyByZXR1cm4geCAvIHkg KyB4ICUgeTsgfQ0KK05PQ09NUFJFU1NJT04gc3Qgc211bCAoc3QgeCwgc3Qg eSkgeyByZXR1cm4geCAqIHk7IH0NCitOT0NPTVBSRVNTSU9OIHN0IHNkaXYg KHN0IHgsIHN0IHkpIHsgcmV0dXJuIHggLyB5ICsgeCAlIHk7IH0NCiANCi1O T01JUFMxNiB1dCB1bXVsICh1dCB4LCB1dCB5KSB7IHJldHVybiB4ICogeTsg fQ0KLU5PTUlQUzE2IHV0IHVkaXYgKHV0IHgsIHV0IHkpIHsgcmV0dXJuIHgg LyB5ICsgeCAlIHk7IH0NCitOT0NPTVBSRVNTSU9OIHV0IHVtdWwgKHV0IHgs IHV0IHkpIHsgcmV0dXJuIHggKiB5OyB9DQorTk9DT01QUkVTU0lPTiB1dCB1 ZGl2ICh1dCB4LCB1dCB5KSB7IHJldHVybiB4IC8geSArIHggJSB5OyB9DQog DQogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJcdGdz bXVsdHVcdCIgMiB9IH0gKi8NCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItdGltZXMgIlx0Z3NkaXZ1XHQiIDEgfSB9ICovDQpJbmRleDogZ2Nj LnRhcmdldC9taXBzL2JyYW5jaC0xMy5jDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL2JyYW5jaC0xMy5jCShyZXZpc2lv biAxOTUzNzgpDQorKysgZ2NjLnRhcmdldC9taXBzL2JyYW5jaC0xMy5jCSh3 b3JraW5nIGNvcHkpDQpAQCAtOCw3ICs4LDcgQEANCiANCiAjaW5jbHVkZSAi YnJhbmNoLWhlbHBlci5oIg0KIA0KLU5PTUlQUzE2IHZvaWQNCitOT0NPTVBS RVNTSU9OIHZvaWQNCiBmb28gKGludCAoKmJhcikgKHZvaWQpLCBpbnQgKngp DQogew0KICAgKnggPSBiYXIgKCk7DQpJbmRleDogZ2NjLnRhcmdldC9taXBz L21pcHMtM2QtNi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2Nj LnRhcmdldC9taXBzL21pcHMtM2QtNi5jCShyZXZpc2lvbiAxOTUzNzgpDQor KysgZ2NjLnRhcmdldC9taXBzL21pcHMtM2QtNi5jCSh3b3JraW5nIGNvcHkp DQpAQCAtNSwyNCArNSwyNCBAQA0KICNpbmNsdWRlIDxzdGRsaWIuaD4NCiAj aW5jbHVkZSA8c3RkaW8uaD4NCiANCi1OT01JUFMxNiBpbnQgdGVzdDAgKGZs b2F0IGEsIGZsb2F0IGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MSAoZmxvYXQg YSwgZmxvYXQgYik7DQotTk9NSVBTMTYgaW50IHRlc3QyIChmbG9hdCBhLCBm bG9hdCBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDMgKGZsb2F0IGEsIGZsb2F0 IGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0NCAoZmxvYXQgYSwgZmxvYXQgYik7 DQotTk9NSVBTMTYgaW50IHRlc3Q1IChmbG9hdCBhLCBmbG9hdCBiKTsNCi1O T01JUFMxNiBpbnQgdGVzdDYgKGZsb2F0IGEsIGZsb2F0IGIpOw0KLU5PTUlQ UzE2IGludCB0ZXN0NyAoZmxvYXQgYSwgZmxvYXQgYik7DQotTk9NSVBTMTYg aW50IHRlc3Q4IChmbG9hdCBhLCBmbG9hdCBiKTsNCi1OT01JUFMxNiBpbnQg dGVzdDkgKGZsb2F0IGEsIGZsb2F0IGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0 MTAgKGZsb2F0IGEsIGZsb2F0IGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTEg KGZsb2F0IGEsIGZsb2F0IGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTIgKGZs b2F0IGEsIGZsb2F0IGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTMgKGZsb2F0 IGEsIGZsb2F0IGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTQgKGZsb2F0IGEs IGZsb2F0IGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTUgKGZsb2F0IGEsIGZs b2F0IGIpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QwIChmbG9hdCBhLCBm bG9hdCBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MSAoZmxvYXQgYSwg ZmxvYXQgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDIgKGZsb2F0IGEs IGZsb2F0IGIpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QzIChmbG9hdCBh LCBmbG9hdCBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NCAoZmxvYXQg YSwgZmxvYXQgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDUgKGZsb2F0 IGEsIGZsb2F0IGIpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q2IChmbG9h dCBhLCBmbG9hdCBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NyAoZmxv YXQgYSwgZmxvYXQgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDggKGZs b2F0IGEsIGZsb2F0IGIpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q5IChm bG9hdCBhLCBmbG9hdCBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTAg KGZsb2F0IGEsIGZsb2F0IGIpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Qx MSAoZmxvYXQgYSwgZmxvYXQgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVz dDEyIChmbG9hdCBhLCBmbG9hdCBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0 ZXN0MTMgKGZsb2F0IGEsIGZsb2F0IGIpOw0KK05PQ09NUFJFU1NJT04gaW50 IHRlc3QxNCAoZmxvYXQgYSwgZmxvYXQgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDE1IChmbG9hdCBhLCBmbG9hdCBiKTsNCiANCi1OT01JUFMxNiBp bnQgbWFpbiAoKQ0KK05PQ09NUFJFU1NJT04gaW50IG1haW4gKCkNCiB7DQog ICBmbG9hdCBhLCBiOw0KICAgaW50IGk7DQpAQCAtMjAzLDgyICsyMDMsODIg QEANCiAgIGV4aXQgKDApOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDAg KGZsb2F0IGEsIGZsb2F0IGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDAg KGZsb2F0IGEsIGZsb2F0IGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9t aXBzX2NhYnNfZl9zIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRl c3QxIChmbG9hdCBhLCBmbG9hdCBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRl c3QxIChmbG9hdCBhLCBmbG9hdCBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0 aW5fbWlwc19jYWJzX3VuX3MgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBp bnQgdGVzdDIgKGZsb2F0IGEsIGZsb2F0IGIpDQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDIgKGZsb2F0IGEsIGZsb2F0IGIpDQogew0KICAgcmV0dXJuIF9f YnVpbHRpbl9taXBzX2NhYnNfZXFfcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQ UzE2IGludCB0ZXN0MyAoZmxvYXQgYSwgZmxvYXQgYikNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0MyAoZmxvYXQgYSwgZmxvYXQgYikNCiB7DQogICByZXR1 cm4gX19idWlsdGluX21pcHNfY2Fic191ZXFfcyAoYSwgYik7DQogfQ0KIA0K LU5PTUlQUzE2IGludCB0ZXN0NCAoZmxvYXQgYSwgZmxvYXQgYikNCitOT0NP TVBSRVNTSU9OIGludCB0ZXN0NCAoZmxvYXQgYSwgZmxvYXQgYikNCiB7DQog ICByZXR1cm4gX19idWlsdGluX21pcHNfY2Fic19vbHRfcyAoYSwgYik7DQog fQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NSAoZmxvYXQgYSwgZmxvYXQgYikN CitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NSAoZmxvYXQgYSwgZmxvYXQgYikN CiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfY2Fic191bHRfcyAoYSwg Yik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NiAoZmxvYXQgYSwgZmxv YXQgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NiAoZmxvYXQgYSwgZmxv YXQgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfY2Fic19vbGVf cyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NyAoZmxvYXQg YSwgZmxvYXQgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NyAoZmxvYXQg YSwgZmxvYXQgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfY2Fi c191bGVfcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0OCAo ZmxvYXQgYSwgZmxvYXQgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0OCAo ZmxvYXQgYSwgZmxvYXQgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21p cHNfY2Fic19zZl9zIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRl c3Q5IChmbG9hdCBhLCBmbG9hdCBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRl c3Q5IChmbG9hdCBhLCBmbG9hdCBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0 aW5fbWlwc19jYWJzX25nbGVfcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2 IGludCB0ZXN0MTAgKGZsb2F0IGEsIGZsb2F0IGIpDQorTk9DT01QUkVTU0lP TiBpbnQgdGVzdDEwIChmbG9hdCBhLCBmbG9hdCBiKQ0KIHsNCiAgIHJldHVy biBfX2J1aWx0aW5fbWlwc19jYWJzX3NlcV9zIChhLCBiKTsNCiB9DQogDQot Tk9NSVBTMTYgaW50IHRlc3QxMSAoZmxvYXQgYSwgZmxvYXQgYikNCitOT0NP TVBSRVNTSU9OIGludCB0ZXN0MTEgKGZsb2F0IGEsIGZsb2F0IGIpDQogew0K ICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2NhYnNfbmdsX3MgKGEsIGIpOw0K IH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDEyIChmbG9hdCBhLCBmbG9hdCBi KQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxMiAoZmxvYXQgYSwgZmxvYXQg YikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfY2Fic19sdF9zIChh LCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QxMyAoZmxvYXQgYSwg ZmxvYXQgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTMgKGZsb2F0IGEs IGZsb2F0IGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2NhYnNf bmdlX3MgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDE0IChm bG9hdCBhLCBmbG9hdCBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxNCAo ZmxvYXQgYSwgZmxvYXQgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21p cHNfY2Fic19sZV9zIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRl c3QxNSAoZmxvYXQgYSwgZmxvYXQgYikNCitOT0NPTVBSRVNTSU9OIGludCB0 ZXN0MTUgKGZsb2F0IGEsIGZsb2F0IGIpDQogew0KICAgcmV0dXJuIF9fYnVp bHRpbl9taXBzX2NhYnNfbmd0X3MgKGEsIGIpOw0KIH0NCkluZGV4OiBnY2Mu dGFyZ2V0L21pcHMvbG9vbmdzb24tbXVsZGl2LTIuYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9sb29uZ3Nvbi1tdWxk aXYtMi5jCShyZXZpc2lvbiAxOTUzNzgpDQorKysgZ2NjLnRhcmdldC9taXBz L2xvb25nc29uLW11bGRpdi0yLmMJKHdvcmtpbmcgY29weSkNCkBAIC0zLDEx ICszLDExIEBADQogdHlwZWRlZiBsb25nIGxvbmcgc3Q7DQogdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGxvbmcgdXQ7DQogDQotTk9NSVBTMTYgc3Qgc211bCAo c3QgeCwgc3QgeSkgeyByZXR1cm4geCAqIHk7IH0NCi1OT01JUFMxNiBzdCBz ZGl2IChzdCB4LCBzdCB5KSB7IHJldHVybiB4IC8geSArIHggJSB5OyB9DQor Tk9DT01QUkVTU0lPTiBzdCBzbXVsIChzdCB4LCBzdCB5KSB7IHJldHVybiB4 ICogeTsgfQ0KK05PQ09NUFJFU1NJT04gc3Qgc2RpdiAoc3QgeCwgc3QgeSkg eyByZXR1cm4geCAvIHkgKyB4ICUgeTsgfQ0KIA0KLU5PTUlQUzE2IHV0IHVt dWwgKHV0IHgsIHV0IHkpIHsgcmV0dXJuIHggKiB5OyB9DQotTk9NSVBTMTYg dXQgdWRpdiAodXQgeCwgdXQgeSkgeyByZXR1cm4geCAvIHkgKyB4ICUgeTsg fQ0KK05PQ09NUFJFU1NJT04gdXQgdW11bCAodXQgeCwgdXQgeSkgeyByZXR1 cm4geCAqIHk7IH0NCitOT0NPTVBSRVNTSU9OIHV0IHVkaXYgKHV0IHgsIHV0 IHkpIHsgcmV0dXJuIHggLyB5ICsgeCAlIHk7IH0NCiANCiAvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIlx0ZG11bHR1LmdcdCIgMiB9 IH0gKi8NCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg Ilx0ZGRpdnUuZ1x0IiAxIH0gfSAqLw0KSW5kZXg6IGdjYy50YXJnZXQvbWlw cy9jYWxsLTEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50 YXJnZXQvbWlwcy9jYWxsLTEuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdj Yy50YXJnZXQvbWlwcy9jYWxsLTEuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEw LDcgKzEwLDcgQEANCiBpbnQgbm9ybWFsICgpOw0KIHZvaWQgbm9ybWFsMiAo KTsNCiANCi1OT01JUFMxNiBmIChpbnQgKnApDQorTk9DT01QUkVTU0lPTiBm IChpbnQgKnApDQogew0KICAgKnAgPSBub3JtYWwgKCk7DQogICBub3JtYWwy ICgpOw0KQEAgLTIwLDE0ICsyMCwxNCBAQA0KIA0KIGludCB0YWlsICgpOw0K IA0KLU5PTUlQUzE2IGggKCkNCitOT0NPTVBSRVNTSU9OIGggKCkNCiB7DQog ICByZXR1cm4gdGFpbCAoKTsNCiB9DQogDQogdm9pZCB0YWlsMiAoKTsNCiAN Ci1OT01JUFMxNiB2b2lkIGcgKCkNCitOT0NPTVBSRVNTSU9OIHZvaWQgZyAo KQ0KIHsNCiAgIHRhaWwyICgpOw0KIH0NCkluZGV4OiBnY2MudGFyZ2V0L21p cHMvbWlwcy5leHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2Mu dGFyZ2V0L21pcHMvbWlwcy5leHAJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBn Y2MudGFyZ2V0L21pcHMvbWlwcy5leHAJKHdvcmtpbmcgY29weSkNCkBAIC0y MzgsNiArMjM4LDcgQEANCiAgICAgZnAgIi1tZnAoMzJ8NjQpIg0KICAgICBn cCAiLW1ncCgzMnw2NCkiDQogICAgIGxvbmcgIi1tbG9uZygzMnw2NCkiDQor ICAgIG1pY3JvbWlwcyAiLW1taWNyb21pcHN8LW1uby1taWNyb21pcHMiDQog ICAgIG1pcHMxNiAiLW1pcHMxNnwtbW5vLW1pcHMxNnwtbWZsaXAtbWlwczE2 Ig0KICAgICBtaXBzM2QgIi1taXBzM2R8LW1uby1taXBzM2QiDQogICAgIHBp YyAiLWYobm8tfCkocGljfFBJQykiDQpAQCAtMTI3NSw2ICsxMjc2LDYgQEAN CiBkZy1pbml0DQogbWlwcy1kZy1pbml0DQogZ2NjLWRnLXJ1bnRlc3QgW2xz b3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNdXSBc DQotICAgICItRE5PTUlQUzE2PV9fYXR0cmlidXRlX18oKG5vbWlwczE2KSki DQorICAgICItRE5PTUlQUzE2PV9fYXR0cmlidXRlX18oKG5vbWlwczE2KSkg LUROT01JQ1JPTUlQUz1fX2F0dHJpYnV0ZV9fKChub21pY3JvbWlwcykpIC1E Tk9DT01QUkVTU0lPTj1fX2F0dHJpYnV0ZV9fKChub2NvbXByZXNzaW9uKSki DQogbWlwcy1kZy1maW5pc2gNCiBkZy1maW5pc2gNCkluZGV4OiBnY2MudGFy Z2V0L21pcHMvb2N0ZW9uLXBvcC0yLmMNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLXBvcC0yLmMJKHJldmlz aW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLXBvcC0y LmMJKHdvcmtpbmcgY29weSkNCkBAIC00LDcgKzQsNyBAQA0KIC8qIFRoZSBw b3AgaW5zdHJ1Y3Rpb24gZG9lcyBub3QgZGVwZW5kIG9uIHRoZSB3b3JkIHZh bHVlIHRvIGJlIHNpZ24gZXh0ZW5kZWQuICovDQogLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLW5vdCAic2xsXHQiIH0gfSAqLw0KIA0KLU5PTUlQ UzE2IGxvbmcgbG9uZyBmKGxvbmcgbG9uZyBpKQ0KK05PQ09NUFJFU1NJT04g bG9uZyBsb25nIGYobG9uZyBsb25nIGkpDQogew0KICAgcmV0dXJuIF9fYnVp bHRpbl9wb3Bjb3VudCAoaSk7DQogfQ0KSW5kZXg6IGdjYy50YXJnZXQvbWlw cy9vY3Rlb24tZG11bC0yLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t LSBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWRtdWwtMi5jCShyZXZpc2lvbiAx OTUzNzgpDQorKysgZ2NjLnRhcmdldC9taXBzL29jdGVvbi1kbXVsLTIuYwko d29ya2luZyBjb3B5KQ0KQEAgLTMsNyArMyw3IEBADQogLyogeyBkZy1za2lw LWlmICJ1c2luZyBETVVMIGlzIG5vIHdvcnNlIHNpemUtd2lzZSwgYW5kIGNh biBiZSBiZXR0ZXIgaWYgdGhlIGNvbnN0YW50IGlzIHVzZWQgZWxzZXdoZXJl IiB7ICotKi0qIH0geyAiLU9zIiB9IHsgIiIgfSB9ICovDQogLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXHRkbXVsIiB9IH0gKi8NCiAN Ci1OT01JUFMxNiBsb25nIGxvbmcNCitOT0NPTVBSRVNTSU9OIGxvbmcgbG9u Zw0KIGYgKGxvbmcgbG9uZyBhKQ0KIHsNCiAgIHJldHVybiBhICogNzsNCklu ZGV4OiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uMi1seC0yLmMNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uMi1s eC0yLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21pcHMv b2N0ZW9uMi1seC0yLmMJKHdvcmtpbmcgY29weSkNCkBAIC0zLDggKzMsOCBA QA0KIC8qIHsgZGctc2tpcC1pZiAiY29kZSBxdWFsaXR5IHRlc3QiIHsgKi0q LSogfSB7ICItTzAiIH0geyAiIiB9IH0gKi8NCiANCiAjZGVmaW5lIFRFU1Qo TiwgVCkgXA0KLSAgVCBmIyNOIChUICpwLCBpbnQgaSkgeyByZXR1cm4gcFtp XTsgfSBcDQotICB1bnNpZ25lZCBUIGcjI04gKHVuc2lnbmVkIFQgKnAsIGlu dCBpKSB7IHJldHVybiBwW2ldOyB9DQorICBUIE5PTUlDUk9NSVBTIGYjI04g KFQgKnAsIGludCBpKSB7IHJldHVybiBwW2ldOyB9IFwNCisgIHVuc2lnbmVk IFQgTk9NSUNST01JUFMgZyMjTiAodW5zaWduZWQgVCAqcCwgaW50IGkpIHsg cmV0dXJuIHBbaV07IH0NCiANCiBURVNUICgxLCBjaGFyKQ0KIC8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAiXHRsYnU/eFx0IiAyIH0g fSAqLw0KSW5kZXg6IGdjYy50YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJp ZXItMi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjLnRhcmdl dC9taXBzL3IxMGstY2FjaGUtYmFycmllci0yLmMJKHJldmlzaW9uIDE5NTM3 OCkNCisrKyBnY2MudGFyZ2V0L21pcHMvcjEway1jYWNoZS1iYXJyaWVyLTIu Ywkod29ya2luZyBjb3B5KQ0KQEAgLTQsNyArNCw3IEBADQogICAgYnkgY2Fj aGUgYmFycmllcnMuICAqLw0KIA0KICNkZWZpbmUgVEVTVChBRERSKQkJCQkJ XA0KLSAgTk9NSVBTMTYgdm9pZAkJCQkJCVwNCisgIE5PQ09NUFJFU1NJT04g dm9pZAkJCQkJCVwNCiAgIHRlc3RfIyNBRERSIChpbnQgbikJCQkJCVwNCiAg IHsJCQkJCQkJXA0KICAgICAqKHZvbGF0aWxlIGludCAqKSAoMHgjI0FERFIj I1VMKSA9IDE7CQlcDQpJbmRleDogZ2NjLnRhcmdldC9taXBzL29jdGVvbjIt cGlwZS0xLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MudGFy Z2V0L21pcHMvb2N0ZW9uMi1waXBlLTEuYwkocmV2aXNpb24gMTk1Mzc4KQ0K KysrIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24yLXBpcGUtMS5jCSh3b3JraW5n IGNvcHkpDQpAQCAtMyw3ICszLDcgQEANCiAvKiB7IGRnLW9wdGlvbnMgIi1m c2NoZWR1bGUtaW5zbnMyIC1mZHVtcC1ydGwtc2NoZWQyIC1tYXJjaD1vY3Rl b24yIiB9ICovDQogLyogeyBkZy1za2lwLWlmICJjb2RlIHF1YWxpdHkgdGVz dCIgeyAqLSotKiB9IHsgIi1PMCIgfSB7ICIiIH0gfSAqLw0KIA0KLU5PTUlQ UzE2IGludCBmIChpbnQgYSwgaW50IGIpDQorTk9DT01QUkVTU0lPTiBpbnQg ZiAoaW50IGEsIGludCBiKQ0KIHsNCiAgIHJldHVybiBhIC8gYjsNCiB9DQpJ bmRleDogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1leHRzLTIuYw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24t ZXh0cy0yLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21p cHMvb2N0ZW9uLWV4dHMtMi5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMTEsMTkg KzExLDE5IEBADQogICBsb25nIGxvbmcgZDoxOw0KIH07DQogDQotTk9NSVBT MTYgaW50DQorTk9DT01QUkVTU0lPTiBpbnQNCiBmMSAoc3RydWN0IGJhciAq cywgaW50IGEpDQogew0KICAgcmV0dXJuIChpbnQpIHMtPmIgKyBhOw0KIH0N CiANCi1OT01JUFMxNiBjaGFyDQorTk9DT01QUkVTU0lPTiBjaGFyDQogZjIg KHN0cnVjdCBiYXIgKnMpDQogew0KICAgcmV0dXJuIHMtPmQgKyAxOw0KIH0N CiANCi1OT01JUFMxNiBpbnQNCitOT0NPTVBSRVNTSU9OIGludA0KIGYzICgp DQogew0KICAgc3RydWN0IGJhciBzOw0KQEAgLTMxLDcgKzMxLDcgQEANCiAg IHJldHVybiAoaW50KSBzLmIgKyAxOw0KIH0NCiANCi1OT01JUFMxNiBsb25n IGxvbmcNCitOT0NPTVBSRVNTSU9OIGxvbmcgbG9uZw0KIGY0IChzdHJ1Y3Qg YmFyICpzKQ0KIHsNCiAgIHJldHVybiBzLT5kOw0KSW5kZXg6IGdjYy50YXJn ZXQvbWlwcy9sb29uZ3NvbjNhLW11bGRpdi0yLmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMvbG9vbmdzb24zYS1tdWxk aXYtMi5jCShyZXZpc2lvbiAxOTUzNzgpDQorKysgZ2NjLnRhcmdldC9taXBz L2xvb25nc29uM2EtbXVsZGl2LTIuYwkod29ya2luZyBjb3B5KQ0KQEAgLTMs MTEgKzMsMTEgQEANCiB0eXBlZGVmIGxvbmcgbG9uZyBzdDsNCiB0eXBlZGVm IHVuc2lnbmVkIGxvbmcgbG9uZyB1dDsNCiANCi1OT01JUFMxNiBzdCBzbXVs IChzdCB4LCBzdCB5KSB7IHJldHVybiB4ICogeTsgfQ0KLU5PTUlQUzE2IHN0 IHNkaXYgKHN0IHgsIHN0IHkpIHsgcmV0dXJuIHggLyB5ICsgeCAlIHk7IH0N CitOT0NPTVBSRVNTSU9OIHN0IHNtdWwgKHN0IHgsIHN0IHkpIHsgcmV0dXJu IHggKiB5OyB9DQorTk9DT01QUkVTU0lPTiBzdCBzZGl2IChzdCB4LCBzdCB5 KSB7IHJldHVybiB4IC8geSArIHggJSB5OyB9DQogDQotTk9NSVBTMTYgdXQg dW11bCAodXQgeCwgdXQgeSkgeyByZXR1cm4geCAqIHk7IH0NCi1OT01JUFMx NiB1dCB1ZGl2ICh1dCB4LCB1dCB5KSB7IHJldHVybiB4IC8geSArIHggJSB5 OyB9DQorTk9DT01QUkVTU0lPTiB1dCB1bXVsICh1dCB4LCB1dCB5KSB7IHJl dHVybiB4ICogeTsgfQ0KK05PQ09NUFJFU1NJT04gdXQgdWRpdiAodXQgeCwg dXQgeSkgeyByZXR1cm4geCAvIHkgKyB4ICUgeTsgfQ0KIA0KIC8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAiXHRnc2RtdWx0dVx0IiAy IH0gfSAqLw0KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyAiXHRnc2RkaXZ1XHQiIDEgfSB9ICovDQpJbmRleDogZ2NjLnRhcmdldC9t aXBzL21pcHMtM2QtNy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g Z2NjLnRhcmdldC9taXBzL21pcHMtM2QtNy5jCShyZXZpc2lvbiAxOTUzNzgp DQorKysgZ2NjLnRhcmdldC9taXBzL21pcHMtM2QtNy5jCSh3b3JraW5nIGNv cHkpDQpAQCAtNSwyNCArNSwyNCBAQA0KICNpbmNsdWRlIDxzdGRsaWIuaD4N CiAjaW5jbHVkZSA8c3RkaW8uaD4NCiANCi1OT01JUFMxNiBpbnQgdGVzdDAg KGRvdWJsZSBhLCBkb3VibGUgYik7DQotTk9NSVBTMTYgaW50IHRlc3QxIChk b3VibGUgYSwgZG91YmxlIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MiAoZG91 YmxlIGEsIGRvdWJsZSBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDMgKGRvdWJs ZSBhLCBkb3VibGUgYik7DQotTk9NSVBTMTYgaW50IHRlc3Q0IChkb3VibGUg YSwgZG91YmxlIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0NSAoZG91YmxlIGEs IGRvdWJsZSBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDYgKGRvdWJsZSBhLCBk b3VibGUgYik7DQotTk9NSVBTMTYgaW50IHRlc3Q3IChkb3VibGUgYSwgZG91 YmxlIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0OCAoZG91YmxlIGEsIGRvdWJs ZSBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDkgKGRvdWJsZSBhLCBkb3VibGUg Yik7DQotTk9NSVBTMTYgaW50IHRlc3QxMCAoZG91YmxlIGEsIGRvdWJsZSBi KTsNCi1OT01JUFMxNiBpbnQgdGVzdDExIChkb3VibGUgYSwgZG91YmxlIGIp Ow0KLU5PTUlQUzE2IGludCB0ZXN0MTIgKGRvdWJsZSBhLCBkb3VibGUgYik7 DQotTk9NSVBTMTYgaW50IHRlc3QxMyAoZG91YmxlIGEsIGRvdWJsZSBiKTsN Ci1OT01JUFMxNiBpbnQgdGVzdDE0IChkb3VibGUgYSwgZG91YmxlIGIpOw0K LU5PTUlQUzE2IGludCB0ZXN0MTUgKGRvdWJsZSBhLCBkb3VibGUgYik7DQor Tk9DT01QUkVTU0lPTiBpbnQgdGVzdDAgKGRvdWJsZSBhLCBkb3VibGUgYik7 DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDEgKGRvdWJsZSBhLCBkb3VibGUg Yik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDIgKGRvdWJsZSBhLCBkb3Vi bGUgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDMgKGRvdWJsZSBhLCBk b3VibGUgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDQgKGRvdWJsZSBh LCBkb3VibGUgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDUgKGRvdWJs ZSBhLCBkb3VibGUgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDYgKGRv dWJsZSBhLCBkb3VibGUgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDcg KGRvdWJsZSBhLCBkb3VibGUgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVz dDggKGRvdWJsZSBhLCBkb3VibGUgYik7DQorTk9DT01QUkVTU0lPTiBpbnQg dGVzdDkgKGRvdWJsZSBhLCBkb3VibGUgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDEwIChkb3VibGUgYSwgZG91YmxlIGIpOw0KK05PQ09NUFJFU1NJ T04gaW50IHRlc3QxMSAoZG91YmxlIGEsIGRvdWJsZSBiKTsNCitOT0NPTVBS RVNTSU9OIGludCB0ZXN0MTIgKGRvdWJsZSBhLCBkb3VibGUgYik7DQorTk9D T01QUkVTU0lPTiBpbnQgdGVzdDEzIChkb3VibGUgYSwgZG91YmxlIGIpOw0K K05PQ09NUFJFU1NJT04gaW50IHRlc3QxNCAoZG91YmxlIGEsIGRvdWJsZSBi KTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTUgKGRvdWJsZSBhLCBkb3Vi bGUgYik7DQogDQotTk9NSVBTMTYgaW50IG1haW4gKCkNCitOT0NPTVBSRVNT SU9OIGludCBtYWluICgpDQogew0KICAgZG91YmxlIGEsIGI7DQogICBpbnQg aTsNCkBAIC0yMDMsODIgKzIwMyw4MiBAQA0KICAgZXhpdCAoMCk7DQogfQ0K IA0KLU5PTUlQUzE2IGludCB0ZXN0MCAoZG91YmxlIGEsIGRvdWJsZSBiKQ0K K05PQ09NUFJFU1NJT04gaW50IHRlc3QwIChkb3VibGUgYSwgZG91YmxlIGIp DQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2NhYnNfZl9kIChhLCBi KTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QxIChkb3VibGUgYSwgZG91 YmxlIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDEgKGRvdWJsZSBhLCBk b3VibGUgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfY2Fic191 bl9kIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QyIChkb3Vi bGUgYSwgZG91YmxlIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDIgKGRv dWJsZSBhLCBkb3VibGUgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21p cHNfY2Fic19lcV9kIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRl c3QzIChkb3VibGUgYSwgZG91YmxlIGIpDQorTk9DT01QUkVTU0lPTiBpbnQg dGVzdDMgKGRvdWJsZSBhLCBkb3VibGUgYikNCiB7DQogICByZXR1cm4gX19i dWlsdGluX21pcHNfY2Fic191ZXFfZCAoYSwgYik7DQogfQ0KIA0KLU5PTUlQ UzE2IGludCB0ZXN0NCAoZG91YmxlIGEsIGRvdWJsZSBiKQ0KK05PQ09NUFJF U1NJT04gaW50IHRlc3Q0IChkb3VibGUgYSwgZG91YmxlIGIpDQogew0KICAg cmV0dXJuIF9fYnVpbHRpbl9taXBzX2NhYnNfb2x0X2QgKGEsIGIpOw0KIH0N CiANCi1OT01JUFMxNiBpbnQgdGVzdDUgKGRvdWJsZSBhLCBkb3VibGUgYikN CitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NSAoZG91YmxlIGEsIGRvdWJsZSBi KQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19jYWJzX3VsdF9kIChh LCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3Q2IChkb3VibGUgYSwg ZG91YmxlIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDYgKGRvdWJsZSBh LCBkb3VibGUgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfY2Fi c19vbGVfZCAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NyAo ZG91YmxlIGEsIGRvdWJsZSBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q3 IChkb3VibGUgYSwgZG91YmxlIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRp bl9taXBzX2NhYnNfdWxlX2QgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBp bnQgdGVzdDggKGRvdWJsZSBhLCBkb3VibGUgYikNCitOT0NPTVBSRVNTSU9O IGludCB0ZXN0OCAoZG91YmxlIGEsIGRvdWJsZSBiKQ0KIHsNCiAgIHJldHVy biBfX2J1aWx0aW5fbWlwc19jYWJzX3NmX2QgKGEsIGIpOw0KIH0NCiANCi1O T01JUFMxNiBpbnQgdGVzdDkgKGRvdWJsZSBhLCBkb3VibGUgYikNCitOT0NP TVBSRVNTSU9OIGludCB0ZXN0OSAoZG91YmxlIGEsIGRvdWJsZSBiKQ0KIHsN CiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19jYWJzX25nbGVfZCAoYSwgYik7 DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MTAgKGRvdWJsZSBhLCBkb3Vi bGUgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTAgKGRvdWJsZSBhLCBk b3VibGUgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfY2Fic19z ZXFfZCAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MTEgKGRv dWJsZSBhLCBkb3VibGUgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTEg KGRvdWJsZSBhLCBkb3VibGUgYikNCiB7DQogICByZXR1cm4gX19idWlsdGlu X21pcHNfY2Fic19uZ2xfZCAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGlu dCB0ZXN0MTIgKGRvdWJsZSBhLCBkb3VibGUgYikNCitOT0NPTVBSRVNTSU9O IGludCB0ZXN0MTIgKGRvdWJsZSBhLCBkb3VibGUgYikNCiB7DQogICByZXR1 cm4gX19idWlsdGluX21pcHNfY2Fic19sdF9kIChhLCBiKTsNCiB9DQogDQot Tk9NSVBTMTYgaW50IHRlc3QxMyAoZG91YmxlIGEsIGRvdWJsZSBiKQ0KK05P Q09NUFJFU1NJT04gaW50IHRlc3QxMyAoZG91YmxlIGEsIGRvdWJsZSBiKQ0K IHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19jYWJzX25nZV9kIChhLCBi KTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QxNCAoZG91YmxlIGEsIGRv dWJsZSBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxNCAoZG91YmxlIGEs IGRvdWJsZSBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19jYWJz X2xlX2QgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDE1IChk b3VibGUgYSwgZG91YmxlIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDE1 IChkb3VibGUgYSwgZG91YmxlIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRp bl9taXBzX2NhYnNfbmd0X2QgKGEsIGIpOw0KIH0NCkluZGV4OiBnY2MudGFy Z2V0L21pcHMvcjEway1jYWNoZS1iYXJyaWVyLTEwLmMNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMvcjEway1jYWNoZS1i YXJyaWVyLTEwLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0 L21pcHMvcjEway1jYWNoZS1iYXJyaWVyLTEwLmMJKHdvcmtpbmcgY29weSkN CkBAIC02LDcgKzYsNyBAQA0KIC8qIFRlc3QgdGhhdCBjb2RlIGFmdGVyIGEg YnJhbmNoLWxpa2VseSBkb2VzIG5vdCBnZXQgYW4gdW5uZWNlc3NhcnkNCiAg ICBjYWNoZSBiYXJyaWVyLiAgKi8NCiANCi1OT01JUFMxNiB2b2lkDQorTk9D T01QUkVTU0lPTiB2b2lkDQogZm9vICh1bnNpZ25lZCBjaGFyICpuKQ0KIHsN CiAgIC8qIG4gc3RhcnRzIGluICQ0LCBidXQgd2lsbCBiZSBpbiAkMiBhZnRl ciB0aGUgY2FsbCB0byBiYXIuDQpJbmRleDogZ2NjLnRhcmdldC9taXBzL2Jy YW5jaC00LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MudGFy Z2V0L21pcHMvYnJhbmNoLTQuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdj Yy50YXJnZXQvbWlwcy9icmFuY2gtNC5jCSh3b3JraW5nIGNvcHkpDQpAQCAt NCw3ICs0LDcgQEANCiANCiAjaW5jbHVkZSAiYnJhbmNoLWhlbHBlci5oIg0K IA0KLU5PTUlQUzE2IHZvaWQNCitOT0NPTVBSRVNTSU9OIHZvaWQNCiBmb28g KHZvbGF0aWxlIGludCAqeCkNCiB7DQogICBpZiAoX19idWlsdGluX2V4cGVj dCAoKnggPT0gMCwgMSkpDQpJbmRleDogZ2NjLnRhcmdldC9taXBzL21tY291 bnQtcmEtYWRkcmVzcy0xLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t LSBnY2MudGFyZ2V0L21pcHMvbW1jb3VudC1yYS1hZGRyZXNzLTEuYwkocmV2 aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9tbWNvdW50LXJh LWFkZHJlc3MtMS5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMSw3ICsxLDcgQEAN CiAvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KIC8qIHsgZGctb3B0aW9ucyAi LXBnIC1tbWNvdW50LXJhLWFkZHJlc3MgLW1hYmk9NjQiIH0gKi8NCiAvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIlx0bW92ZVx0XFxcJDEyLFxc XCQwIiB9IH0gKi8NCi1OT01JUFMxNiBpbnQgYmF6bChpbnQgaSkNCitOT0NP TVBSRVNTSU9OIGludCBiYXpsKGludCBpKQ0KIHsNCiAgIHJldHVybiBpICsg MjsNCiB9DQpJbmRleDogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1iYml0LTEu Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlw cy9vY3Rlb24tYmJpdC0xLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2Mu dGFyZ2V0L21pcHMvb2N0ZW9uLWJiaXQtMS5jCSh3b3JraW5nIGNvcHkpDQpA QCAtNiwzNyArNiwzNyBAQA0KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAiXHRiYml0Llx0IiA2IH0gfSAqLw0KIC8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgImFuZGlcdCIgfSB9ICovDQogDQot Tk9NSVBTMTYgdm9pZCBmb28gKHZvaWQpOw0KK05PQ09NUFJFU1NJT04gdm9p ZCBmb28gKHZvaWQpOw0KIA0KLU5PTUlQUzE2IHZvaWQNCitOT0NPTVBSRVNT SU9OIHZvaWQNCiBmMSAobG9uZyBsb25nIGkpDQogew0KICAgaWYgKGkgJiAw eDgwKQ0KICAgICBmb28gKCk7DQogfQ0KIA0KLU5PTUlQUzE2IHZvaWQNCitO T0NPTVBSRVNTSU9OIHZvaWQNCiBmMiAoaW50IGkpDQogew0KICAgaWYgKCEo aSAmIDB4ODApKQ0KICAgICBmb28gKCk7DQogfQ0KIA0KLU5PTUlQUzE2IHZv aWQNCitOT0NPTVBSRVNTSU9OIHZvaWQNCiBmMyAoaW50IGkpDQogew0KICAg aWYgKGkgJSAyKQ0KICAgICBmb28gKCk7DQogfQ0KIA0KLU5PTUlQUzE2IHZv aWQNCitOT0NPTVBSRVNTSU9OIHZvaWQNCiBmNCAoaW50IGkpDQogew0KICAg aWYgKGkgJiAxKQ0KICAgICBmb28gKCk7DQogfQ0KIA0KLU5PTUlQUzE2IHZv aWQNCitOT0NPTVBSRVNTSU9OIHZvaWQNCiBmNSAobG9uZyBsb25nIGkpDQog ew0KICAgaWYgKChpID4+IDMpICYgMSkNCkBAIC00NSwxMyArNDUsMTMgQEAN CiANCiB1bnNpZ25lZCBsb25nIGxvbmcgcjsNCiANCi1OT01JUFMxNiBzdGF0 aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbnQN CitOT0NPTVBSRVNTSU9OIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygo YWx3YXlzX2lubGluZSkpIGludA0KIHRlc3RfYml0KHVuc2lnbmVkIGxvbmcg bG9uZyBuciwgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICphZGRyKQ0KIHsN CiAgIHJldHVybiAxVUwgJiAoYWRkcltuciA+PiA2XSA+PiAobnIgJiA2M1VM TCkpOw0KIH0NCiANCi1OT01JUFMxNiB2b2lkDQorTk9DT01QUkVTU0lPTiB2 b2lkDQogZjYgKCkNCiB7DQogICBpZiAoIXRlc3RfYml0KDAsICZyKSkNCklu ZGV4OiBnY2MudGFyZ2V0L21pcHMvbm8tc21hcnRtaXBzLWx3eHMuYw0KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9uby1z bWFydG1pcHMtbHd4cy5jCShyZXZpc2lvbiAxOTUzNzgpDQorKysgZ2NjLnRh cmdldC9taXBzL25vLXNtYXJ0bWlwcy1sd3hzLmMJKHdvcmtpbmcgY29weSkN CkBAIC0xLDcgKzEsNyBAQA0KIC8qIHsgZGctZG8gY29tcGlsZSB9ICovDQog LyogeyBkZy1vcHRpb25zICItbW5vLXNtYXJ0bWlwcyIgfSAqLw0KIA0KLU5P TUlQUzE2IGludCBzY2FsZWRfaW5kZXhlZF93b3JkX2xvYWQgKGludCBhW10s IGludCBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHNjYWxlZF9pbmRleGVkX3dv cmRfbG9hZCAoaW50IGFbXSwgaW50IGIpDQogew0KICAgcmV0dXJuIGFbYl07 DQogfQ0KSW5kZXg6IGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tZG11bC0zLmMN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMv b2N0ZW9uLWRtdWwtMy5jCShyZXZpc2lvbiAxOTUzNzgpDQorKysgZ2NjLnRh cmdldC9taXBzL29jdGVvbi1kbXVsLTMuYwkod29ya2luZyBjb3B5KQ0KQEAg LTUsMTQgKzUsMTQgQEANCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICJcdGQ/bXVsdFx0IiB9IH0gKi8NCiAvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgIlx0ZGV4dFx0IiAyIH0gfSAqLw0KIA0K LU5PTUlQUzE2IGxvbmcgbG9uZw0KK05PQ09NUFJFU1NJT04gbG9uZyBsb25n DQogZiAoaW50IGksIGludCBqKQ0KIHsNCiAgIGkrKzsNCiAgIHJldHVybiAo bG9uZyBsb25nKSBpICogajsNCiB9DQogDQotTk9NSVBTMTYgdW5zaWduZWQg bG9uZyBsb25nDQorTk9DT01QUkVTU0lPTiB1bnNpZ25lZCBsb25nIGxvbmcN CiBnICh1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IGopDQogew0KICAg aSsrOw0KSW5kZXg6IGdjYy50YXJnZXQvbWlwcy9vY3Rlb24yLWx4LTMuYw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9v Y3Rlb24yLWx4LTMuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy50YXJn ZXQvbWlwcy9vY3Rlb24yLWx4LTMuYwkod29ya2luZyBjb3B5KQ0KQEAgLTMs OCArMyw4IEBADQogLyogeyBkZy1za2lwLWlmICJjb2RlIHF1YWxpdHkgdGVz dCIgeyAqLSotKiB9IHsgIi1PMCIgfSB7ICIiIH0gfSAqLw0KIA0KICNkZWZp bmUgVEVTVChOLCBUKSBcDQotICBUIGYjI04gKFQgKnAsIGludCBpKSB7IHJl dHVybiBwW2ldOyB9IFwNCi0gIHVuc2lnbmVkIFQgZyMjTiAodW5zaWduZWQg VCAqcCwgaW50IGkpIHsgcmV0dXJuIHBbaV07IH0NCisgIFQgTk9NSUNST01J UFMgZiMjTiAoVCAqcCwgaW50IGkpIHsgcmV0dXJuIHBbaV07IH0gXA0KKyAg dW5zaWduZWQgVCBOT01JQ1JPTUlQUyBnIyNOICh1bnNpZ25lZCBUICpwLCBp bnQgaSkgeyByZXR1cm4gcFtpXTsgfQ0KIA0KIFRFU1QgKDEsIGNoYXIpDQog LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJcdGxidT94 XHQiIDIgfSB9ICovDQpJbmRleDogZ2NjLnRhcmdldC9taXBzL3IxMGstY2Fj aGUtYmFycmllci0zLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBn Y2MudGFyZ2V0L21pcHMvcjEway1jYWNoZS1iYXJyaWVyLTMuYwkocmV2aXNp b24gMTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJh cnJpZXItMy5jCSh3b3JraW5nIGNvcHkpDQpAQCAtNSw3ICs1LDcgQEANCiAN CiB2b2lkIGJhciAoaW50ICp4KTsNCiANCi1OT01JUFMxNiB2b2lkDQorTk9D T01QUkVTU0lPTiB2b2lkDQogZm9vIChpbnQgdikNCiB7DQogICBpbnQgeFsw eDEwMDAwMF07DQpJbmRleDogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1leHRz LTMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQv bWlwcy9vY3Rlb24tZXh0cy0zLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBn Y2MudGFyZ2V0L21pcHMvb2N0ZW9uLWV4dHMtMy5jCSh3b3JraW5nIGNvcHkp DQpAQCAtMTAsNyArMTAsNyBAQA0KICAgdW5zaWduZWQgbG9uZyBsb25nIGM6 MjI7DQogfTsNCiANCi1OT01JUFMxNiB1bnNpZ25lZA0KK05PQ09NUFJFU1NJ T04gdW5zaWduZWQNCiBmIChzdHJ1Y3QgZm9vIHMpDQogew0KICAgcmV0dXJu IHMuYjsNCkBAIC0yMywxMyArMjMsMTMgQEANCiAgIHVuc2lnbmVkIGxvbmcg bG9uZyBjOjE7DQogfTsNCiANCi1OT01JUFMxNiBpbnQNCitOT0NPTVBSRVNT SU9OIGludA0KIGcgKHN0cnVjdCBiYXIgcykNCiB7DQogICByZXR1cm4gKGlu dCkgcy5iOw0KIH0NCiANCi1OT01JUFMxNiBpbnQNCitOT0NPTVBSRVNTSU9O IGludA0KIGggKGludCBpKQ0KIHsNCiAgIHJldHVybiAoaSA8PCA0KSA+PiAy NDsNCkluZGV4OiBnY2MudGFyZ2V0L21pcHMvbWlwcy0zZC04LmMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMvbWlwcy0z ZC04LmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21pcHMv bWlwcy0zZC04LmMJKHdvcmtpbmcgY29weSkNCkBAIC03LDQyICs3LDQyIEBA DQogDQogdHlwZWRlZiBmbG9hdCB2MnNmIF9fYXR0cmlidXRlX18oKHZlY3Rv cl9zaXplKDgpKSk7DQogDQotTk9NSVBTMTYgdjJzZiB0ZXN0MCAodjJzZiBh LCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRl c3QxICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQ UzE2IHYyc2YgdGVzdDIgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCk7DQotTk9NSVBTMTYgdjJzZiB0ZXN0MyAodjJzZiBhLCB2MnNmIGIsIHYy c2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3Q0ICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IHYyc2YgdGVz dDUgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBT MTYgdjJzZiB0ZXN0NiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KTsNCi1OT01JUFMxNiB2MnNmIHRlc3Q3ICh2MnNmIGEsIHYyc2YgYiwgdjJz ZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IHYyc2YgdGVzdDggKHYyc2YgYSwg djJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgdjJzZiB0ZXN0 OSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMx NiB2MnNmIHRlc3QxMCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KTsNCi1OT01JUFMxNiB2MnNmIHRlc3QxMSAodjJzZiBhLCB2MnNmIGIsIHYy c2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3QxMiAodjJzZiBh LCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRl c3QxMyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01J UFMxNiB2MnNmIHRlc3QxNCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJz ZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3QxNSAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3QxNiAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNm IHRlc3QxNyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1O T01JUFMxNiB2MnNmIHRlc3QxOCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywg djJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3QxOSAodjJzZiBhLCB2MnNm IGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3QyMCAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2 MnNmIHRlc3QyMSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsN Ci1OT01JUFMxNiB2MnNmIHRlc3QyMiAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3QyMyAodjJzZiBhLCB2 MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3Qy NCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMx NiB2MnNmIHRlc3QyNSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KTsNCi1OT01JUFMxNiB2MnNmIHRlc3QyNiAodjJzZiBhLCB2MnNmIGIsIHYy c2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3QyNyAodjJzZiBh LCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRl c3QyOCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01J UFMxNiB2MnNmIHRlc3QyOSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJz ZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3QzMCAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiB2MnNmIHRlc3QzMSAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9O IHYyc2YgdGVzdDAgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7 DQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3QxICh2MnNmIGEsIHYyc2YgYiwg djJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MiAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNT SU9OIHYyc2YgdGVzdDMgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCk7DQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3Q0ICh2MnNmIGEsIHYyc2Yg YiwgdjJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0 NSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBS RVNTSU9OIHYyc2YgdGVzdDYgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYy c2YgZCk7DQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3Q3ICh2MnNmIGEsIHYy c2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gdjJzZiB0 ZXN0OCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NP TVBSRVNTSU9OIHYyc2YgdGVzdDkgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMs IHYyc2YgZCk7DQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3QxMCAodjJzZiBh LCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIHYy c2YgdGVzdDExICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0K K05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MTIgKHYyc2YgYSwgdjJzZiBiLCB2 MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3QxMyAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNT SU9OIHYyc2YgdGVzdDE0ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNm IGQpOw0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MTUgKHYyc2YgYSwgdjJz ZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVTU0lPTiB2MnNmIHRl c3QxNiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NP TVBSRVNTSU9OIHYyc2YgdGVzdDE3ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBj LCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MTggKHYyc2Yg YSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVTU0lPTiB2 MnNmIHRlc3QxOSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsN CitOT0NPTVBSRVNTSU9OIHYyc2YgdGVzdDIwICh2MnNmIGEsIHYyc2YgYiwg djJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MjEg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVT U0lPTiB2MnNmIHRlc3QyMiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJz ZiBkKTsNCitOT0NPTVBSRVNTSU9OIHYyc2YgdGVzdDIzICh2MnNmIGEsIHYy c2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gdjJzZiB0 ZXN0MjQgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9D T01QUkVTU0lPTiB2MnNmIHRlc3QyNSAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIHYyc2YgdGVzdDI2ICh2MnNm IGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04g djJzZiB0ZXN0MjcgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7 DQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3QyOCAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIHYyc2YgdGVzdDI5 ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJF U1NJT04gdjJzZiB0ZXN0MzAgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYy c2YgZCk7DQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3QzMSAodjJzZiBhLCB2 MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCiANCiBmbG9hdCBxbmFuID0gMS4w Zi8wLjBmIC0gMS4wZi8wLjBmOw0KIA0KLU5PTUlQUzE2IGludCBtYWluICgp DQorTk9DT01QUkVTU0lPTiBpbnQgbWFpbiAoKQ0KIHsNCiAgIHYyc2YgYSwg YiwgYywgZCwgZSwgZjsNCiANCkBAIC00NjksMTYyICs0NjksMTYyIEBADQog ICBleGl0ICgwKTsNCiB9DQogDQotTk9NSVBTMTYgdjJzZiB0ZXN0MCAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04g djJzZiB0ZXN0MCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0K IHsNCiAgIHJldHVybiAgX19idWlsdGluX21pcHNfbW92dF9jYWJzX2ZfcHMg KGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiB2MnNmIHRlc3QxICh2 MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lP TiB2MnNmIHRlc3QxICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQp DQogew0KICAgcmV0dXJuICBfX2J1aWx0aW5fbWlwc19tb3ZmX2NhYnNfZl9w cyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IHYyc2YgdGVzdDIg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNT SU9OIHYyc2YgdGVzdDIgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21vdnRfY2Fic191 bl9wcyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IHYyc2YgdGVz dDMgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBS RVNTSU9OIHYyc2YgdGVzdDMgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYy c2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21vdmZfY2Fi c191bl9wcyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IHYyc2Yg dGVzdDQgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NP TVBSRVNTSU9OIHYyc2YgdGVzdDQgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMs IHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21vdnRf Y2Fic19lcV9wcyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IHYy c2YgdGVzdDUgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitO T0NPTVBSRVNTSU9OIHYyc2YgdGVzdDUgKHYyc2YgYSwgdjJzZiBiLCB2MnNm IGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21v dmZfY2Fic19lcV9wcyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2 IHYyc2YgdGVzdDYgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkN CitOT0NPTVBSRVNTSU9OIHYyc2YgdGVzdDYgKHYyc2YgYSwgdjJzZiBiLCB2 MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBz X21vdnRfY2Fic191ZXFfcHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01J UFMxNiB2MnNmIHRlc3Q3ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNm IGQpDQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3Q3ICh2MnNmIGEsIHYyc2Yg YiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJuICBfX2J1aWx0aW5f bWlwc19tb3ZmX2NhYnNfdWVxX3BzIChhLCBiLCBjLCBkKTsNCiB9DQogDQot Tk9NSVBTMTYgdjJzZiB0ZXN0OCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywg djJzZiBkKQ0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0OCAodjJzZiBhLCB2 MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiAgX19idWls dGluX21pcHNfbW92dF9jYWJzX29sdF9wcyAoYSwgYiwgYywgZCk7DQogfQ0K IA0KLU5PTUlQUzE2IHYyc2YgdGVzdDkgKHYyc2YgYSwgdjJzZiBiLCB2MnNm IGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIHYyc2YgdGVzdDkgKHYyc2Yg YSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9f YnVpbHRpbl9taXBzX21vdmZfY2Fic19vbHRfcHMgKGEsIGIsIGMsIGQpOw0K IH0NCiANCi1OT01JUFMxNiB2MnNmIHRlc3QxMCAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MTAg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1 cm4gIF9fYnVpbHRpbl9taXBzX21vdnRfY2Fic191bHRfcHMgKGEsIGIsIGMs IGQpOw0KIH0NCiANCi1OT01JUFMxNiB2MnNmIHRlc3QxMSAodjJzZiBhLCB2 MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gdjJzZiB0 ZXN0MTEgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQog ICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21vdmZfY2Fic191bHRfcHMgKGEs IGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiB2MnNmIHRlc3QxMiAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04g djJzZiB0ZXN0MTIgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkN CiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21vdnRfY2Fic19vbGVf cHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiB2MnNmIHRlc3Qx MyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJF U1NJT04gdjJzZiB0ZXN0MTMgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYy c2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21vdmZfY2Fi c19vbGVfcHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiB2MnNm IHRlc3QxNCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05P Q09NUFJFU1NJT04gdjJzZiB0ZXN0MTQgKHYyc2YgYSwgdjJzZiBiLCB2MnNm IGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21v dnRfY2Fic191bGVfcHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMx NiB2MnNmIHRlc3QxNSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KQ0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MTUgKHYyc2YgYSwgdjJzZiBi LCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9t aXBzX21vdmZfY2Fic191bGVfcHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1O T01JUFMxNiB2MnNmIHRlc3QxNiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywg djJzZiBkKQ0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MTYgKHYyc2YgYSwg djJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVp bHRpbl9taXBzX21vdnRfY2Fic19zZl9wcyAoYSwgYiwgYywgZCk7DQogfQ0K IA0KLU5PTUlQUzE2IHYyc2YgdGVzdDE3ICh2MnNmIGEsIHYyc2YgYiwgdjJz ZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3QxNyAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiAg X19idWlsdGluX21pcHNfbW92Zl9jYWJzX3NmX3BzIChhLCBiLCBjLCBkKTsN CiB9DQogDQotTk9NSVBTMTYgdjJzZiB0ZXN0MTggKHYyc2YgYSwgdjJzZiBi LCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIHYyc2YgdGVzdDE4 ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0 dXJuICBfX2J1aWx0aW5fbWlwc19tb3Z0X2NhYnNfbmdsZV9wcyAoYSwgYiwg YywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IHYyc2YgdGVzdDE5ICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiB2MnNm IHRlc3QxOSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsN CiAgIHJldHVybiAgX19idWlsdGluX21pcHNfbW92Zl9jYWJzX25nbGVfcHMg KGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiB2MnNmIHRlc3QyMCAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJ T04gdjJzZiB0ZXN0MjAgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21vdnRfY2Fic19z ZXFfcHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiB2MnNmIHRl c3QyMSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09N UFJFU1NJT04gdjJzZiB0ZXN0MjEgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMs IHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21vdmZf Y2Fic19zZXFfcHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiB2 MnNmIHRlc3QyMiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0K K05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MjIgKHYyc2YgYSwgdjJzZiBiLCB2 MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBz X21vdnRfY2Fic19uZ2xfcHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01J UFMxNiB2MnNmIHRlc3QyMyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJz ZiBkKQ0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MjMgKHYyc2YgYSwgdjJz ZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRp bl9taXBzX21vdmZfY2Fic19uZ2xfcHMgKGEsIGIsIGMsIGQpOw0KIH0NCiAN Ci1OT01JUFMxNiB2MnNmIHRlc3QyNCAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gdjJzZiB0ZXN0MjQgKHYyc2Yg YSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9f YnVpbHRpbl9taXBzX21vdnRfY2Fic19sdF9wcyAoYSwgYiwgYywgZCk7DQog fQ0KIA0KLU5PTUlQUzE2IHYyc2YgdGVzdDI1ICh2MnNmIGEsIHYyc2YgYiwg djJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3QyNSAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVy biAgX19idWlsdGluX21pcHNfbW92Zl9jYWJzX2x0X3BzIChhLCBiLCBjLCBk KTsNCiB9DQogDQotTk9NSVBTMTYgdjJzZiB0ZXN0MjYgKHYyc2YgYSwgdjJz ZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIHYyc2YgdGVz dDI2ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAg cmV0dXJuICBfX2J1aWx0aW5fbWlwc19tb3Z0X2NhYnNfbmdlX3BzIChhLCBi LCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgdjJzZiB0ZXN0MjcgKHYyc2Yg YSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIHYy c2YgdGVzdDI3ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQog ew0KICAgcmV0dXJuICBfX2J1aWx0aW5fbWlwc19tb3ZmX2NhYnNfbmdlX3Bz IChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgdjJzZiB0ZXN0Mjgg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNT SU9OIHYyc2YgdGVzdDI4ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNm IGQpDQogew0KICAgcmV0dXJuICBfX2J1aWx0aW5fbWlwc19tb3Z0X2NhYnNf bGVfcHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiB2MnNmIHRl c3QyOSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09N UFJFU1NJT04gdjJzZiB0ZXN0MjkgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMs IHYyc2YgZCkNCiB7DQogICByZXR1cm4gIF9fYnVpbHRpbl9taXBzX21vdmZf Y2Fic19sZV9wcyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IHYy c2YgdGVzdDMwICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQor Tk9DT01QUkVTU0lPTiB2MnNmIHRlc3QzMCAodjJzZiBhLCB2MnNmIGIsIHYy c2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiAgX19idWlsdGluX21pcHNf bW92dF9jYWJzX25ndF9wcyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQ UzE2IHYyc2YgdGVzdDMxICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNm IGQpDQorTk9DT01QUkVTU0lPTiB2MnNmIHRlc3QzMSAodjJzZiBhLCB2MnNm IGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiAgX19idWlsdGlu X21pcHNfbW92Zl9jYWJzX25ndF9wcyAoYSwgYiwgYywgZCk7DQogfQ0KSW5k ZXg6IGdjYy50YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJpZXItMTEuYw0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9y MTBrLWNhY2hlLWJhcnJpZXItMTEuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysr IGdjYy50YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJpZXItMTEuYwkod29y a2luZyBjb3B5KQ0KQEAgLTQsNyArNCw3IEBADQogDQogaW50IGJhciAoaW50 KTsNCiANCi1OT01JUFMxNiB2b2lkDQorTk9DT01QUkVTU0lPTiB2b2lkDQog Zm9vIChpbnQgKnB0cikNCiB7DQogICAqcHRyID0gYmFyICgqcHRyKTsNCklu ZGV4OiBnY2MudGFyZ2V0L21pcHMvYnJhbmNoLTUuYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9icmFuY2gtNS5jCShy ZXZpc2lvbiAxOTUzNzgpDQorKysgZ2NjLnRhcmdldC9taXBzL2JyYW5jaC01 LmMJKHdvcmtpbmcgY29weSkNCkBAIC02LDcgKzYsNyBAQA0KIA0KICNpbmNs dWRlICJicmFuY2gtaGVscGVyLmgiDQogDQotTk9NSVBTMTYgdm9pZA0KK05P Q09NUFJFU1NJT04gdm9pZA0KIGZvbyAodm9sYXRpbGUgaW50ICp4KQ0KIHsN CiAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgqeCA9PSAwLCAxKSkNCkluZGV4 OiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWJiaXQtMi5jDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL29jdGVvbi1iYml0 LTIuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9v Y3Rlb24tYmJpdC0yLmMJKHdvcmtpbmcgY29weSkNCkBAIC01LDcgKzUsNyBA QA0KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0YmJp dFxbMDFcXWxcdCIgfSB9ICovDQogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJcdGJuZWxcdCIgfSB9ICovDQogDQotTk9NSVBTMTYgaW50DQor Tk9DT01QUkVTU0lPTiBpbnQNCiBmIChpbnQgKmEsIGludCAqYikNCiB7DQog ICBkbw0KQEAgLTE0LDcgKzE0LDcgQEANCiAgIHdoaWxlICgrK2EgPCBiKTsN CiB9DQogDQotTk9NSVBTMTYgaW50DQorTk9DT01QUkVTU0lPTiBpbnQNCiBn IChpbnQgKmEsIGludCAqYikNCiB7DQogICBkbw0KSW5kZXg6IGdjYy50YXJn ZXQvbWlwcy9nY2MtaGF2ZS1zeW5jLWNvbXBhcmUtYW5kLXN3YXAtNC5jDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL2dj Yy1oYXZlLXN5bmMtY29tcGFyZS1hbmQtc3dhcC00LmMJKHJldmlzaW9uIDE5 NTM3OCkNCisrKyBnY2MudGFyZ2V0L21pcHMvZ2NjLWhhdmUtc3luYy1jb21w YXJlLWFuZC1zd2FwLTQuYwkod29ya2luZyBjb3B5KQ0KQEAgLTEsNCArMSw0 IEBADQotLyogeyBkZy1vcHRpb25zICItbWdwNjQgLW1pcHMxNiIgfSAqLw0K Ky8qIHsgZGctb3B0aW9ucyAiLW1ncDY0IC1taXBzMTYgLW1uby1taWNyb21p cHMiIH0gKi8NCiANCiAjaWZuZGVmIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJF X0FORF9TV0FQXzENCiAjZXJyb3Igbm9ub25vDQpJbmRleDogZ2NjLnRhcmdl dC9taXBzL3IxMGstY2FjaGUtYmFycmllci00LmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMvcjEway1jYWNoZS1iYXJy aWVyLTQuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlw cy9yMTBrLWNhY2hlLWJhcnJpZXItNC5jCSh3b3JraW5nIGNvcHkpDQpAQCAt NSw3ICs1LDcgQEANCiAvKiBUZXN0IHRoYXQgb3V0LW9mLXJhbmdlIHN0b3Jl cyB0byB0aGUgZnJhbWUgYXJlIHByb3RlY3RlZCBieSBjYWNoZQ0KICAgIGJh cnJpZXJzLiAgKi8NCiANCi1OT01JUFMxNiB2b2lkDQorTk9DT01QUkVTU0lP TiB2b2lkDQogZm9vIChpbnQgdikNCiB7DQogICBpbnQgeFs4XTsNCkluZGV4 OiBnY2MudGFyZ2V0L21pcHMvbWlwcy0zZC0xLmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMvbWlwcy0zZC0xLmMJKHJl dmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21pcHMvbWlwcy0zZC0x LmMJKHdvcmtpbmcgY29weSkNCkBAIC03LDcgKzcsNyBAQA0KIA0KIHR5cGVk ZWYgZmxvYXQgdjJzZiBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUoOCkp KTsNCiANCi1OT01JUFMxNiBpbnQgbWFpbiAoKQ0KK05PQ09NUFJFU1NJT04g aW50IG1haW4gKCkNCiB7DQogICBpbnQgbGl0dGxlX2VuZGlhbjsNCiAgIHYy c2YgYSwgYiwgYywgZDsNCkluZGV4OiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9u LXBpcGUtMS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjLnRh cmdldC9taXBzL29jdGVvbi1waXBlLTEuYwkocmV2aXNpb24gMTk1Mzc4KQ0K KysrIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tcGlwZS0xLmMJKHdvcmtpbmcg Y29weSkNCkBAIC0zLDcgKzMsNyBAQA0KIC8qIHsgZGctb3B0aW9ucyAiLW1h cmNoPW9jdGVvbiAtZnNjaGVkdWxlLWluc25zMiAtZmR1bXAtcnRsLXNjaGVk MiIgfSAqLw0KIC8qIHsgZGctc2tpcC1pZiAiY29kZSBxdWFsaXR5IHRlc3Qi IHsgKi0qLSogfSB7ICItTzAiIH0geyAiIiB9IH0gKi8NCiANCi1OT01JUFMx NiBpbnQgZiAoaW50IGEsIGludCBiKQ0KK05PQ09NUFJFU1NJT04gaW50IGYg KGludCBhLCBpbnQgYikNCiB7DQogICByZXR1cm4gYSAvIGI7DQogfQ0KSW5k ZXg6IGdjYy50YXJnZXQvbWlwcy9taXBzLTNkLTkuYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9taXBzLTNkLTkuYwko cmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9taXBzLTNk LTkuYwkod29ya2luZyBjb3B5KQ0KQEAgLTE5LDkgKzE5LDkgQEANCiBmbG9h dCBmWzRdOyAvKiBSZXN1bHQgZm9yIG1hdHJpeF9tdWx0aXBseTQoKSAqLw0K IA0KIHZvaWQgbWF0cml4X211bHRpcGx5MSgpOw0KLU5PTUlQUzE2IHZvaWQg bWF0cml4X211bHRpcGx5MigpOw0KLU5PTUlQUzE2IHZvaWQgbWF0cml4X211 bHRpcGx5MygpOw0KLU5PTUlQUzE2IHZvaWQgbWF0cml4X211bHRpcGx5NCgp Ow0KK05PQ09NUFJFU1NJT04gdm9pZCBtYXRyaXhfbXVsdGlwbHkyKCk7DQor Tk9DT01QUkVTU0lPTiB2b2lkIG1hdHJpeF9tdWx0aXBseTMoKTsNCitOT0NP TVBSRVNTSU9OIHZvaWQgbWF0cml4X211bHRpcGx5NCgpOw0KIA0KIGludCBt YWluICgpDQogew0KQEAgLTY1LDcgKzY1LDcgQEANCiAgICB9DQogfQ0KIA0K LU5PTUlQUzE2IHZvaWQgbWF0cml4X211bHRpcGx5MigpDQorTk9DT01QUkVT U0lPTiB2b2lkIG1hdHJpeF9tdWx0aXBseTIoKQ0KIHsNCiAgIGludCBpLCBq Ow0KICAgdjJzZiBtMSwgbTI7DQpAQCAtOTEsNyArOTEsNyBAQA0KICAgIH0N CiB9DQogDQotTk9NSVBTMTYgdm9pZCBtYXRyaXhfbXVsdGlwbHkzKCkNCitO T0NPTVBSRVNTSU9OIHZvaWQgbWF0cml4X211bHRpcGx5MygpDQogew0KICAg aW50IGk7DQogICB2MnNmIG0xLCBtMiwgbjEsIG4yOw0KQEAgLTExNCw3ICsx MTQsNyBAQA0KICAgIH0NCiB9DQogDQotTk9NSVBTMTYgdm9pZCBtYXRyaXhf bXVsdGlwbHk0KCkNCitOT0NPTVBSRVNTSU9OIHZvaWQgbWF0cml4X211bHRp cGx5NCgpDQogew0KICAgdjJzZiBtMSwgbTI7DQogICB2MnNmIG4xLCBuMiwg bjMsIG40LCBuNSwgbjYsIG43LCBuODsNCkluZGV4OiBnY2MudGFyZ2V0L21p cHMvcjEway1jYWNoZS1iYXJyaWVyLTEyLmMNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMvcjEway1jYWNoZS1iYXJyaWVy LTEyLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21pcHMv cjEway1jYWNoZS1iYXJyaWVyLTEyLmMJKHdvcmtpbmcgY29weSkNCkBAIC00 LDcgKzQsNyBAQA0KIA0KIGludCBiYXIgKGludCk7DQogDQotTk9NSVBTMTYg dm9pZA0KK05PQ09NUFJFU1NJT04gdm9pZA0KIGZvbyAoaW50ICpwdHIpDQog ew0KICAgKnB0ciA9IGJhciAoKnB0cik7DQpJbmRleDogZ2NjLnRhcmdldC9t aXBzL25lYXItZmFyLTEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IGdjYy50YXJnZXQvbWlwcy9uZWFyLWZhci0xLmMJKHJldmlzaW9uIDE5NTM3 OCkNCisrKyBnY2MudGFyZ2V0L21pcHMvbmVhci1mYXItMS5jCSh3b3JraW5n IGNvcHkpDQpAQCAtMTYsNSArMTYsNSBAQA0KIA0KIC8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0amFsXHRsb25nX2NhbGxfZnVuY1xu IiB9IH0gKi8NCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 ICJcdGphbFx0ZmFyX2Z1bmNcbiIgfSB9ICovDQotLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICAgICAiXHRqYWxcdG5lYXJfZnVuY1xuIiB9IH0g Ki8NCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgICAgICJcdGph bHM/XHRuZWFyX2Z1bmNcbiIgfSB9ICovDQogLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLW5vdCAiXHRqYWxcdG5vcm1hbF9mdW5jXG4iIH0gfSAq Lw0KSW5kZXg6IGdjYy50YXJnZXQvbWlwcy9icmFuY2gtNi5jDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL2JyYW5jaC02 LmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21pcHMvYnJh bmNoLTYuYwkod29ya2luZyBjb3B5KQ0KQEAgLTQsNyArNCw3IEBADQogDQog I2luY2x1ZGUgImJyYW5jaC1oZWxwZXIuaCINCiANCi1OT01JUFMxNiB2b2lk DQorTk9DT01QUkVTU0lPTiB2b2lkDQogZm9vICh2b2xhdGlsZSBpbnQgKngp DQogew0KICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCp4ID09IDAsIDEpKQ0K SW5kZXg6IGdjYy50YXJnZXQvbWlwcy9tbWNvdW50LXJhLWFkZHJlc3MtMy5j DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBz L21tY291bnQtcmEtYWRkcmVzcy0zLmMJKHJldmlzaW9uIDE5NTM3OCkNCisr KyBnY2MudGFyZ2V0L21pcHMvbW1jb3VudC1yYS1hZGRyZXNzLTMuYwkod29y a2luZyBjb3B5KQ0KQEAgLTMsNyArMyw3IEBADQogLyogeyBkZy1za2lwLWlm ICJyZXF1aXJpbmcgYSBzcGVjaWZpYyBmcmFtZSBsYXlvdXQgbWFrZXMgdGhp cyBhIGNvZGUgcXVhbGl0eSB0ZXN0IiB7ICotKi0qIH0geyAiLU8wIiB9IHsg IiIgfSB9ICovDQogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJc dGRsYVx0XFxcJDEyLDIwMDAwOFxcKFxcXCRzcFxcKSIgfSB9ICovDQogaW50 IGZvbyAoaW50ICopOw0KLU5PTUlQUzE2IGludCBiYXIoaW50IGkpDQorTk9D T01QUkVTU0lPTiBpbnQgYmFyKGludCBpKQ0KIHsNCiAgIGludCBiaWdbNTAw MDBdOw0KICAgcmV0dXJuIGZvbyAoYmlnKSArIDI7DQpJbmRleDogZ2NjLnRh cmdldC9taXBzL29jdGVvbi1iYml0LTMuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tYmJpdC0zLmMJKHJl dmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWJi aXQtMy5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMzMsNyArMzMsNyBAQA0KIA0K IGJpdGZpZWxkX3QgYmFyOw0KIA0KLU5PTUlQUzE2IHZvaWQNCitOT0NPTVBS RVNTSU9OIHZvaWQNCiBmICgpDQogew0KICAgZm9vKCZiYXIpOw0KSW5kZXg6 IGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tc2VxLTMuYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tc2VxLTMu YwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9vY3Rl b24tc2VxLTMuYwkod29ya2luZyBjb3B5KQ0KQEAgLTcsOCArNyw4IEBADQog DQogDQogI2RlZmluZSBURVNUKE4sIExIUywgUkVMLCBSSFMpIFwNCi0gIE5P TUlQUzE2IGxvbmcgbG9uZyB3IyNOIChpbnQgYSwgaW50IGIpIHtyZXR1cm4g TEhTIFJFTCBSSFM7fSBcDQotICBOT01JUFMxNiBpbnQgbiMjTiAobG9uZyBs b25nIGEsIGxvbmcgbG9uZyBiKSB7cmV0dXJuIExIUyBSRUwgUkhTO30gXA0K KyAgTk9DT01QUkVTU0lPTiBsb25nIGxvbmcgdyMjTiAoaW50IGEsIGludCBi KSB7cmV0dXJuIExIUyBSRUwgUkhTO30gXA0KKyAgTk9DT01QUkVTU0lPTiBp bnQgbiMjTiAobG9uZyBsb25nIGEsIGxvbmcgbG9uZyBiKSB7cmV0dXJuIExI UyBSRUwgUkhTO30gXA0KIA0KIFRFU1QgKGVxLCBhLCA9PSwgMTApOw0KIFRF U1QgKG5lLCBhLCAhPSwgMzIpOw0KSW5kZXg6IGdjYy50YXJnZXQvbWlwcy9y MTBrLWNhY2hlLWJhcnJpZXItNS5jDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 DQotLS0gZ2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFycmllci01LmMJ KHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21pcHMvcjEway1j YWNoZS1iYXJyaWVyLTUuYwkod29ya2luZyBjb3B5KQ0KQEAgLTYsNyArNiw3 IEBADQogaW50IHhbNF07DQogdm9pZCBiYXIgKHZvaWQpOw0KIA0KLU5PTUlQ UzE2IHZvaWQNCitOT0NPTVBSRVNTSU9OIHZvaWQNCiBmb28gKGludCBuKQ0K IHsNCiAgIHdoaWxlIChuLS0pDQpJbmRleDogZ2NjLnRhcmdldC9taXBzL29j dGVvbi1leHRzLTUuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdj Yy50YXJnZXQvbWlwcy9vY3Rlb24tZXh0cy01LmMJKHJldmlzaW9uIDE5NTM3 OCkNCisrKyBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWV4dHMtNS5jCSh3b3Jr aW5nIGNvcHkpDQpAQCAtMTIsMTkgKzEyLDE5IEBADQogICB1bnNpZ25lZCBs b25nIGxvbmcgYToxOw0KIH07DQogDQotTk9NSVBTMTYgaW50DQorTk9DT01Q UkVTU0lPTiBpbnQNCiBmMSAoc3RydWN0IGJhciAqcywgaW50IGEpDQogew0K ICAgcmV0dXJuIChpbnQpIHMtPmIgKyBhOw0KIH0NCiANCi1OT01JUFMxNiBj aGFyDQorTk9DT01QUkVTU0lPTiBjaGFyDQogZjIgKHN0cnVjdCBiYXIgKnMp DQogew0KICAgcmV0dXJuIHMtPmQgKyAxOw0KIH0NCiANCi1OT01JUFMxNiBp bnQNCitOT0NPTVBSRVNTSU9OIGludA0KIGYzICgpDQogew0KICAgc3RydWN0 IGJhciBzOw0KQEAgLTMyLDcgKzMyLDcgQEANCiAgIHJldHVybiAoaW50KSBz LmIgKyAxOw0KIH0NCiANCi1OT01JUFMxNiBsb25nIGxvbmcNCitOT0NPTVBS RVNTSU9OIGxvbmcgbG9uZw0KIGY0IChzdHJ1Y3QgYmFyICpzKQ0KIHsNCiAg IHJldHVybiBzLT5kOw0KSW5kZXg6IGdjYy50YXJnZXQvbWlwcy9taXBzLTNk LTIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQv bWlwcy9taXBzLTNkLTIuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy50 YXJnZXQvbWlwcy9taXBzLTNkLTIuYwkod29ya2luZyBjb3B5KQ0KQEAgLTcs NDIgKzcsNDIgQEANCiANCiB0eXBlZGVmIGZsb2F0IHYyc2YgX19hdHRyaWJ1 dGVfXyAoKHZlY3Rvcl9zaXplKDgpKSk7DQogDQotTk9NSVBTMTYgaW50IHRl c3QwICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QxICh2 MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QyICh2MnNmIGEs IHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QzICh2MnNmIGEsIHYyc2Yg Yik7DQotTk9NSVBTMTYgaW50IHRlc3Q0ICh2MnNmIGEsIHYyc2YgYik7DQot Tk9NSVBTMTYgaW50IHRlc3Q1ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBT MTYgaW50IHRlc3Q2ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50 IHRlc3Q3ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3Q4 ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3Q5ICh2MnNm IGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QxMCAodjJzZiBhLCB2 MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTEgKHYyc2YgYSwgdjJzZiBi KTsNCi1OT01JUFMxNiBpbnQgdGVzdDEyICh2MnNmIGEsIHYyc2YgYik7DQot Tk9NSVBTMTYgaW50IHRlc3QxMyAodjJzZiBhLCB2MnNmIGIpOw0KLU5PTUlQ UzE2IGludCB0ZXN0MTQgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01JUFMxNiBp bnQgdGVzdDE1ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRl c3QxNiAodjJzZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTcg KHYyc2YgYSwgdjJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDE4ICh2MnNm IGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QxOSAodjJzZiBhLCB2 MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MjAgKHYyc2YgYSwgdjJzZiBi KTsNCi1OT01JUFMxNiBpbnQgdGVzdDIxICh2MnNmIGEsIHYyc2YgYik7DQot Tk9NSVBTMTYgaW50IHRlc3QyMiAodjJzZiBhLCB2MnNmIGIpOw0KLU5PTUlQ UzE2IGludCB0ZXN0MjMgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01JUFMxNiBp bnQgdGVzdDI0ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRl c3QyNSAodjJzZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MjYg KHYyc2YgYSwgdjJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDI3ICh2MnNm IGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QyOCAodjJzZiBhLCB2 MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MjkgKHYyc2YgYSwgdjJzZiBi KTsNCi1OT01JUFMxNiBpbnQgdGVzdDMwICh2MnNmIGEsIHYyc2YgYik7DQot Tk9NSVBTMTYgaW50IHRlc3QzMSAodjJzZiBhLCB2MnNmIGIpOw0KK05PQ09N UFJFU1NJT04gaW50IHRlc3QwICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01Q UkVTU0lPTiBpbnQgdGVzdDEgKHYyc2YgYSwgdjJzZiBiKTsNCitOT0NPTVBS RVNTSU9OIGludCB0ZXN0MiAodjJzZiBhLCB2MnNmIGIpOw0KK05PQ09NUFJF U1NJT04gaW50IHRlc3QzICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVT U0lPTiBpbnQgdGVzdDQgKHYyc2YgYSwgdjJzZiBiKTsNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0NSAodjJzZiBhLCB2MnNmIGIpOw0KK05PQ09NUFJFU1NJ T04gaW50IHRlc3Q2ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lP TiBpbnQgdGVzdDcgKHYyc2YgYSwgdjJzZiBiKTsNCitOT0NPTVBSRVNTSU9O IGludCB0ZXN0OCAodjJzZiBhLCB2MnNmIGIpOw0KK05PQ09NUFJFU1NJT04g aW50IHRlc3Q5ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDEwICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDExICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDEyICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDEzICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDE0ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDE1ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDE2ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDE3ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDE4ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDE5ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDIwICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDIxICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDIyICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDIzICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDI0ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDI1ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDI2ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDI3ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDI4ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDI5ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDMwICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDMxICh2MnNmIGEsIHYyc2YgYik7DQogDQogZmxvYXQgcW5hbiA9 IDEuMGYvMC4wZiAtIDEuMGYvMC4wZjsNCiANCi1OT01JUFMxNiBpbnQgbWFp biAoKQ0KK05PQ09NUFJFU1NJT04gaW50IG1haW4gKCkNCiB7DQogICB2MnNm IGEsIGIsIGMsIGQ7DQogICBpbnQgaSwgajsNCkBAIC0zOTMsMTYyICszOTMs MTYyIEBADQogICBleGl0ICgwKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRl c3QwICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0 MCAodjJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9t aXBzX2FueV9jX2ZfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQg dGVzdDEgKHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRl c3QxICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGlu X21pcHNfYWxsX2NfZl9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGlu dCB0ZXN0MiAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQg dGVzdDIgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0 aW5fbWlwc19hbnlfY191bl9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2 IGludCB0ZXN0MyAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDMgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1 aWx0aW5fbWlwc19hbGxfY191bl9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQ UzE2IGludCB0ZXN0NCAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lP TiBpbnQgdGVzdDQgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBf X2J1aWx0aW5fbWlwc19hbnlfY19lcV9wcyAoYSwgYik7DQogfQ0KIA0KLU5P TUlQUzE2IGludCB0ZXN0NSAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVT U0lPTiBpbnQgdGVzdDUgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVy biBfX2J1aWx0aW5fbWlwc19hbGxfY19lcV9wcyAoYSwgYik7DQogfQ0KIA0K LU5PTUlQUzE2IGludCB0ZXN0NiAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01Q UkVTU0lPTiBpbnQgdGVzdDYgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJl dHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY191ZXFfcHMgKGEsIGIpOw0KIH0N CiANCi1OT01JUFMxNiBpbnQgdGVzdDcgKHYyc2YgYSwgdjJzZiBiKQ0KK05P Q09NUFJFU1NJT04gaW50IHRlc3Q3ICh2MnNmIGEsIHYyc2YgYikNCiB7DQog ICByZXR1cm4gX19idWlsdGluX21pcHNfYWxsX2NfdWVxX3BzIChhLCBiKTsN CiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3Q4ICh2MnNmIGEsIHYyc2YgYikN CitOT0NPTVBSRVNTSU9OIGludCB0ZXN0OCAodjJzZiBhLCB2MnNmIGIpDQog ew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FueV9jX29sdF9wcyAoYSwg Yik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0OSAodjJzZiBhLCB2MnNm IGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDkgKHYyc2YgYSwgdjJzZiBi KQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY19vbHRfcHMg KGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDEwICh2MnNmIGEs IHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTAgKHYyc2YgYSwg djJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY191 bHRfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDExICh2 MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTEgKHYy c2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19h bGxfY191bHRfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVz dDEyICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0 MTIgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5f bWlwc19hbnlfY19vbGVfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBp bnQgdGVzdDEzICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGlu dCB0ZXN0MTMgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1 aWx0aW5fbWlwc19hbGxfY19vbGVfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01J UFMxNiBpbnQgdGVzdDE0ICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0MTQgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVy biBfX2J1aWx0aW5fbWlwc19hbnlfY191bGVfcHMgKGEsIGIpOw0KIH0NCiAN Ci1OT01JUFMxNiBpbnQgdGVzdDE1ICh2MnNmIGEsIHYyc2YgYikNCitOT0NP TVBSRVNTSU9OIGludCB0ZXN0MTUgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAg IHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY191bGVfcHMgKGEsIGIpOw0K IH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDE2ICh2MnNmIGEsIHYyc2YgYikN CitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTYgKHYyc2YgYSwgdjJzZiBiKQ0K IHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY19zZl9wcyAoYSwg Yik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MTcgKHYyc2YgYSwgdjJz ZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxNyAodjJzZiBhLCB2MnNm IGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FsbF9jX3NmX3Bz IChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QxOCAodjJzZiBh LCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDE4ICh2MnNmIGEs IHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYW55X2Nf bmdsZV9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MTkg KHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxOSAo djJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBz X2FsbF9jX25nbGVfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQg dGVzdDIwICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0 ZXN0MjAgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0 aW5fbWlwc19hbnlfY19zZXFfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMx NiBpbnQgdGVzdDIxICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9O IGludCB0ZXN0MjEgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBf X2J1aWx0aW5fbWlwc19hbGxfY19zZXFfcHMgKGEsIGIpOw0KIH0NCiANCi1O T01JUFMxNiBpbnQgdGVzdDIyICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBS RVNTSU9OIGludCB0ZXN0MjIgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJl dHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY19uZ2xfcHMgKGEsIGIpOw0KIH0N CiANCi1OT01JUFMxNiBpbnQgdGVzdDIzICh2MnNmIGEsIHYyc2YgYikNCitO T0NPTVBSRVNTSU9OIGludCB0ZXN0MjMgKHYyc2YgYSwgdjJzZiBiKQ0KIHsN CiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY19uZ2xfcHMgKGEsIGIp Ow0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDI0ICh2MnNmIGEsIHYyc2Yg YikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjQgKHYyc2YgYSwgdjJzZiBi KQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY19sdF9wcyAo YSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MjUgKHYyc2YgYSwg djJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QyNSAodjJzZiBhLCB2 MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FsbF9jX2x0 X3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QyNiAodjJz ZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDI2ICh2MnNm IGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYW55 X2NfbmdlX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3Qy NyAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDI3 ICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21p cHNfYWxsX2NfbmdlX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50 IHRlc3QyOCAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQg dGVzdDI4ICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWls dGluX21pcHNfYW55X2NfbGVfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMx NiBpbnQgdGVzdDI5ICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9O IGludCB0ZXN0MjkgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBf X2J1aWx0aW5fbWlwc19hbGxfY19sZV9wcyAoYSwgYik7DQogfQ0KIA0KLU5P TUlQUzE2IGludCB0ZXN0MzAgKHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJF U1NJT04gaW50IHRlc3QzMCAodjJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0 dXJuIF9fYnVpbHRpbl9taXBzX2FueV9jX25ndF9wcyAoYSwgYik7DQogfQ0K IA0KLU5PTUlQUzE2IGludCB0ZXN0MzEgKHYyc2YgYSwgdjJzZiBiKQ0KK05P Q09NUFJFU1NJT04gaW50IHRlc3QzMSAodjJzZiBhLCB2MnNmIGIpDQogew0K ICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FsbF9jX25ndF9wcyAoYSwgYik7 DQogfQ0KSW5kZXg6IGdjYy50YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJp ZXItMTMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJn ZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJpZXItMTMuYwkocmV2aXNpb24gMTk1 Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJpZXIt MTMuYwkod29ya2luZyBjb3B5KQ0KQEAgLTQsNyArNCw3IEBADQogDQogaW50 IGJhciAoaW50KTsNCiANCi1OT01JUFMxNiB2b2lkDQorTk9DT01QUkVTU0lP TiB2b2lkDQogZm9vICh2b2lkICgqZm4pICh2b2lkKSwgaW50IHgpDQogew0K ICAgaWYgKHgpDQpJbmRleDogZ2NjLnRhcmdldC9taXBzL25lYXItZmFyLTIu Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlw cy9uZWFyLWZhci0yLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFy Z2V0L21pcHMvbmVhci1mYXItMi5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMTYs NSArMTYsNSBAQA0KIA0KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci1ub3QgIlx0amFsXHRsb25nX2NhbGxfZnVuY1xuIiB9IH0gKi8NCiAvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdGphbFx0ZmFyX2Z1 bmNcbiIgfSB9ICovDQotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICAgICAiXHRqYWxcdG5lYXJfZnVuY1xuIiB9IH0gKi8NCi0vKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXIgICAgICJcdGphbFx0bm9ybWFsX2Z1bmNc biIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICAg ICAiXHRqYWxzP1x0bmVhcl9mdW5jXG4iIH0gfSAqLw0KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlciAgICAgIlx0amFscz9cdG5vcm1hbF9mdW5j XG4iIH0gfSAqLw0KSW5kZXg6IGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tc2Vx LTQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQv bWlwcy9vY3Rlb24tc2VxLTQuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdj Yy50YXJnZXQvbWlwcy9vY3Rlb24tc2VxLTQuYwkod29ya2luZyBjb3B5KQ0K QEAgLTYsNyArNiw3IEBADQogdW5zaWduZWQNCiBtICh1bnNpZ25lZCBlKTsN CiANCi1OT01JUFMxNiB2b2lkDQorTk9DT01QUkVTU0lPTiB2b2lkDQogZiAo dW5zaWduZWQgaSkNCiB7DQogICB1bnNpZ25lZCBqID0gbSAoaSk7DQpJbmRl eDogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1jaW5zLTEuYw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tY2lu cy0xLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21pcHMv b2N0ZW9uLWNpbnMtMS5jCSh3b3JraW5nIGNvcHkpDQpAQCAtNiwxOSArNiwx OSBAQA0KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi XHRjaW5zXHQiIDMgfSB9ICovDQogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLW5vdCAiXHRhbmRpXHR8c2xsXHQiIH0gfSAqLw0KIA0KLU5PTUlQ UzE2IGxvbmcgbG9uZw0KK05PQ09NUFJFU1NJT04gbG9uZyBsb25nDQogZiAo bG9uZyBsb25nIGkpDQogew0KICAgcmV0dXJuIChpICYgMHhmZikgPDwgMzQ7 DQogfQ0KIA0KLU5PTUlQUzE2IGludA0KK05PQ09NUFJFU1NJT04gaW50DQog ZyAoaW50IGkpDQogew0KICAgcmV0dXJuIChpIDw8IDQpICYgMHhmZjA7DQog fQ0KIA0KLU5PTUlQUzE2IGxvbmcgbG9uZw0KK05PQ09NUFJFU1NJT04gbG9u ZyBsb25nDQogaCAobG9uZyBsb25nIGkpDQogew0KICAgcmV0dXJuIChpIDw8 IDQpICYgMHhmZmY7DQpJbmRleDogZ2NjLnRhcmdldC9taXBzL3IxMGstY2Fj aGUtYmFycmllci02LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBn Y2MudGFyZ2V0L21pcHMvcjEway1jYWNoZS1iYXJyaWVyLTYuYwkocmV2aXNp b24gMTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJh cnJpZXItNi5jCSh3b3JraW5nIGNvcHkpDQpAQCAtNiw3ICs2LDcgQEANCiAv KiBUZXN0IHRoYXQgb3V0LW9mLXJhbmdlIHN0b3JlcyB0byBzdGF0aWMgb2Jq ZWN0cyBhcmUgcHJvdGVjdGVkIGJ5IGENCiAgICBjYWNoZSBiYXJyaWVyLiAg Ki8NCiANCi1OT01JUFMxNiB2b2lkDQorTk9DT01QUkVTU0lPTiB2b2lkDQog Zm9vIChpbnQgbikNCiB7DQogICB3aGlsZSAobi0tKQ0KSW5kZXg6IGdjYy50 YXJnZXQvbWlwcy9icmFuY2gtMTAuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9icmFuY2gtMTAuYwkocmV2aXNpb24g MTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9icmFuY2gtMTAuYwkod29y a2luZyBjb3B5KQ0KQEAgLTQsNyArNCw3IEBADQogDQogI2luY2x1ZGUgImJy YW5jaC1oZWxwZXIuaCINCiANCi1OT01JUFMxNiB2b2lkDQorTk9DT01QUkVT U0lPTiB2b2lkDQogZm9vIChpbnQgKCpiYXIpICh2b2lkKSwgaW50ICp4KQ0K IHsNCiAgICp4ID0gYmFyICgpOw0KSW5kZXg6IGdjYy50YXJnZXQvbWlwcy9t aXBzLTNkLTMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50 YXJnZXQvbWlwcy9taXBzLTNkLTMuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysr IGdjYy50YXJnZXQvbWlwcy9taXBzLTNkLTMuYwkod29ya2luZyBjb3B5KQ0K QEAgLTcsNzQgKzcsNzQgQEANCiANCiB0eXBlZGVmIGZsb2F0IHYyc2YgX19h dHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplKDgpKSk7DQogDQotTk9NSVBTMTYg aW50IHRlc3QwICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRl c3QxICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QyICh2 MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QzICh2MnNmIGEs IHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3Q0ICh2MnNmIGEsIHYyc2Yg Yik7DQotTk9NSVBTMTYgaW50IHRlc3Q1ICh2MnNmIGEsIHYyc2YgYik7DQot Tk9NSVBTMTYgaW50IHRlc3Q2ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBT MTYgaW50IHRlc3Q3ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50 IHRlc3Q4ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3Q5 ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QxMCAodjJz ZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTEgKHYyc2YgYSwg djJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDEyICh2MnNmIGEsIHYyc2Yg Yik7DQotTk9NSVBTMTYgaW50IHRlc3QxMyAodjJzZiBhLCB2MnNmIGIpOw0K LU5PTUlQUzE2IGludCB0ZXN0MTQgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01J UFMxNiBpbnQgdGVzdDE1ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYg aW50IHRlc3QxNiAodjJzZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0 ZXN0MTcgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDE4 ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QxOSAodjJz ZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MjAgKHYyc2YgYSwg djJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDIxICh2MnNmIGEsIHYyc2Yg Yik7DQotTk9NSVBTMTYgaW50IHRlc3QyMiAodjJzZiBhLCB2MnNmIGIpOw0K LU5PTUlQUzE2IGludCB0ZXN0MjMgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01J UFMxNiBpbnQgdGVzdDI0ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYg aW50IHRlc3QyNSAodjJzZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0 ZXN0MjYgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDI3 ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QyOCAodjJz ZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MjkgKHYyc2YgYSwg djJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDMwICh2MnNmIGEsIHYyc2Yg Yik7DQotTk9NSVBTMTYgaW50IHRlc3QzMSAodjJzZiBhLCB2MnNmIGIpOw0K LU5PTUlQUzE2IGludCB0ZXN0MzIgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01J UFMxNiBpbnQgdGVzdDMzICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYg aW50IHRlc3QzNCAodjJzZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0 ZXN0MzUgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDM2 ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3QzNyAodjJz ZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0MzggKHYyc2YgYSwg djJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDM5ICh2MnNmIGEsIHYyc2Yg Yik7DQotTk9NSVBTMTYgaW50IHRlc3Q0MCAodjJzZiBhLCB2MnNmIGIpOw0K LU5PTUlQUzE2IGludCB0ZXN0NDEgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01J UFMxNiBpbnQgdGVzdDQyICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYg aW50IHRlc3Q0MyAodjJzZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0 ZXN0NDQgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDQ1 ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3Q0NiAodjJz ZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0NDcgKHYyc2YgYSwg djJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDQ4ICh2MnNmIGEsIHYyc2Yg Yik7DQotTk9NSVBTMTYgaW50IHRlc3Q0OSAodjJzZiBhLCB2MnNmIGIpOw0K LU5PTUlQUzE2IGludCB0ZXN0NTAgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01J UFMxNiBpbnQgdGVzdDUxICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYg aW50IHRlc3Q1MiAodjJzZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0 ZXN0NTMgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDU0 ICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYgaW50IHRlc3Q1NSAodjJz ZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0ZXN0NTYgKHYyc2YgYSwg djJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDU3ICh2MnNmIGEsIHYyc2Yg Yik7DQotTk9NSVBTMTYgaW50IHRlc3Q1OCAodjJzZiBhLCB2MnNmIGIpOw0K LU5PTUlQUzE2IGludCB0ZXN0NTkgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01J UFMxNiBpbnQgdGVzdDYwICh2MnNmIGEsIHYyc2YgYik7DQotTk9NSVBTMTYg aW50IHRlc3Q2MSAodjJzZiBhLCB2MnNmIGIpOw0KLU5PTUlQUzE2IGludCB0 ZXN0NjIgKHYyc2YgYSwgdjJzZiBiKTsNCi1OT01JUFMxNiBpbnQgdGVzdDYz ICh2MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDAg KHYyc2YgYSwgdjJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MSAo djJzZiBhLCB2MnNmIGIpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QyICh2 MnNmIGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDMgKHYy c2YgYSwgdjJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NCAodjJz ZiBhLCB2MnNmIGIpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q1ICh2MnNm IGEsIHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDYgKHYyc2Yg YSwgdjJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NyAodjJzZiBh LCB2MnNmIGIpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q4ICh2MnNmIGEs IHYyc2YgYik7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDkgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTAgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTEgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTIgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTMgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTQgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTUgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTYgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTcgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTggKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTkgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjAgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjEgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjIgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjMgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjQgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjUgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjYgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjcgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjggKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjkgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzAgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzEgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzIgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzMgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzQgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzUgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzYgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzcgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzggKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzkgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDAgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDEgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDIgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDMgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDQgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDUgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDYgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDcgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDggKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDkgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTAgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTEgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTIgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTMgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTQgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTUgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTYgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTcgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTggKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTkgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NjAgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NjEgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NjIgKHYyc2YgYSwg djJzZiBiKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NjMgKHYyc2YgYSwg djJzZiBiKTsNCiANCiBmbG9hdCBxbmFuID0gMS4wZi8wLjBmIC0gMS4wZi8w LjBmOw0KIA0KLU5PTUlQUzE2IGludCBtYWluICgpDQorTk9DT01QUkVTU0lP TiBpbnQgbWFpbiAoKQ0KIHsNCiAgIGludCBsaXR0bGVfZW5kaWFuOw0KICAg djJzZiBhLCBiLCBjLCBkOw0KQEAgLTc3NCwzMjIgKzc3NCwzMjIgQEANCiAg IGV4aXQgKDApOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDAgKHYyc2Yg YSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QwICh2MnNmIGEs IHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYW55X2Nh YnNfZl9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MSAo djJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDEgKHYy c2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc191 cHBlcl9jYWJzX2ZfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQg dGVzdDIgKHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRl c3QyICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGlu X21pcHNfbG93ZXJfY2Fic19mX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBT MTYgaW50IHRlc3QzICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9O IGludCB0ZXN0MyAodjJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9f YnVpbHRpbl9taXBzX2FsbF9jYWJzX2ZfcHMgKGEsIGIpOw0KIH0NCiANCi1O T01JUFMxNiBpbnQgdGVzdDQgKHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJF U1NJT04gaW50IHRlc3Q0ICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1 cm4gX19idWlsdGluX21pcHNfYW55X2NhYnNfdW5fcHMgKGEsIGIpOw0KIH0N CiANCi1OT01JUFMxNiBpbnQgdGVzdDUgKHYyc2YgYSwgdjJzZiBiKQ0KK05P Q09NUFJFU1NJT04gaW50IHRlc3Q1ICh2MnNmIGEsIHYyc2YgYikNCiB7DQog ICByZXR1cm4gX19idWlsdGluX21pcHNfdXBwZXJfY2Fic191bl9wcyAoYSwg Yik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NiAodjJzZiBhLCB2MnNm IGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDYgKHYyc2YgYSwgdjJzZiBi KQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19sb3dlcl9jYWJzX3Vu X3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3Q3ICh2MnNm IGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NyAodjJzZiBh LCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FsbF9j YWJzX3VuX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3Q4 ICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0OCAo djJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBz X2FueV9jYWJzX2VxX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50 IHRlc3Q5ICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0 ZXN0OSAodjJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRp bl9taXBzX3VwcGVyX2NhYnNfZXFfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01J UFMxNiBpbnQgdGVzdDEwICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0MTAgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVy biBfX2J1aWx0aW5fbWlwc19sb3dlcl9jYWJzX2VxX3BzIChhLCBiKTsNCiB9 DQogDQotTk9NSVBTMTYgaW50IHRlc3QxMSAodjJzZiBhLCB2MnNmIGIpDQor Tk9DT01QUkVTU0lPTiBpbnQgdGVzdDExICh2MnNmIGEsIHYyc2YgYikNCiB7 DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYWxsX2NhYnNfZXFfcHMgKGEs IGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDEyICh2MnNmIGEsIHYy c2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTIgKHYyc2YgYSwgdjJz ZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY2Fic191 ZXFfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDEzICh2 MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTMgKHYy c2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc191 cHBlcl9jYWJzX3VlcV9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGlu dCB0ZXN0MTQgKHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50 IHRlc3QxNCAodjJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVp bHRpbl9taXBzX2xvd2VyX2NhYnNfdWVxX3BzIChhLCBiKTsNCiB9DQogDQot Tk9NSVBTMTYgaW50IHRlc3QxNSAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01Q UkVTU0lPTiBpbnQgdGVzdDE1ICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICBy ZXR1cm4gX19idWlsdGluX21pcHNfYWxsX2NhYnNfdWVxX3BzIChhLCBiKTsN CiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QxNiAodjJzZiBhLCB2MnNmIGIp DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDE2ICh2MnNmIGEsIHYyc2YgYikN CiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYW55X2NhYnNfb2x0X3Bz IChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QxNyAodjJzZiBh LCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDE3ICh2MnNmIGEs IHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfdXBwZXJf Y2Fic19vbHRfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVz dDE4ICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0 MTggKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5f bWlwc19sb3dlcl9jYWJzX29sdF9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQ UzE2IGludCB0ZXN0MTkgKHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJ T04gaW50IHRlc3QxOSAodjJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJu IF9fYnVpbHRpbl9taXBzX2FsbF9jYWJzX29sdF9wcyAoYSwgYik7DQogfQ0K IA0KLU5PTUlQUzE2IGludCB0ZXN0MjAgKHYyc2YgYSwgdjJzZiBiKQ0KK05P Q09NUFJFU1NJT04gaW50IHRlc3QyMCAodjJzZiBhLCB2MnNmIGIpDQogew0K ICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FueV9jYWJzX3VsdF9wcyAoYSwg Yik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MjEgKHYyc2YgYSwgdjJz ZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QyMSAodjJzZiBhLCB2MnNm IGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX3VwcGVyX2NhYnNf dWx0X3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QyMiAo djJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDIyICh2 MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNf bG93ZXJfY2Fic191bHRfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBp bnQgdGVzdDIzICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGlu dCB0ZXN0MjMgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1 aWx0aW5fbWlwc19hbGxfY2Fic191bHRfcHMgKGEsIGIpOw0KIH0NCiANCi1O T01JUFMxNiBpbnQgdGVzdDI0ICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBS RVNTSU9OIGludCB0ZXN0MjQgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJl dHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY2Fic19vbGVfcHMgKGEsIGIpOw0K IH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDI1ICh2MnNmIGEsIHYyc2YgYikN CitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MjUgKHYyc2YgYSwgdjJzZiBiKQ0K IHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc191cHBlcl9jYWJzX29sZV9w cyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MjYgKHYyc2Yg YSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QyNiAodjJzZiBh LCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2xvd2Vy X2NhYnNfb2xlX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRl c3QyNyAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVz dDI3ICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGlu X21pcHNfYWxsX2NhYnNfb2xlX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBT MTYgaW50IHRlc3QyOCAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lP TiBpbnQgdGVzdDI4ICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4g X19idWlsdGluX21pcHNfYW55X2NhYnNfdWxlX3BzIChhLCBiKTsNCiB9DQog DQotTk9NSVBTMTYgaW50IHRlc3QyOSAodjJzZiBhLCB2MnNmIGIpDQorTk9D T01QUkVTU0lPTiBpbnQgdGVzdDI5ICh2MnNmIGEsIHYyc2YgYikNCiB7DQog ICByZXR1cm4gX19idWlsdGluX21pcHNfdXBwZXJfY2Fic191bGVfcHMgKGEs IGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDMwICh2MnNmIGEsIHYy c2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzAgKHYyc2YgYSwgdjJz ZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19sb3dlcl9jYWJz X3VsZV9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MzEg KHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QzMSAo djJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBz X2FsbF9jYWJzX3VsZV9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGlu dCB0ZXN0MzIgKHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50 IHRlc3QzMiAodjJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVp bHRpbl9taXBzX2FueV9jYWJzX3NmX3BzIChhLCBiKTsNCiB9DQogDQotTk9N SVBTMTYgaW50IHRlc3QzMyAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVT U0lPTiBpbnQgdGVzdDMzICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1 cm4gX19idWlsdGluX21pcHNfdXBwZXJfY2Fic19zZl9wcyAoYSwgYik7DQog fQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MzQgKHYyc2YgYSwgdjJzZiBiKQ0K K05PQ09NUFJFU1NJT04gaW50IHRlc3QzNCAodjJzZiBhLCB2MnNmIGIpDQog ew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2xvd2VyX2NhYnNfc2ZfcHMg KGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDM1ICh2MnNmIGEs IHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzUgKHYyc2YgYSwg djJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY2Fi c19zZl9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MzYg KHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QzNiAo djJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBz X2FueV9jYWJzX25nbGVfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBp bnQgdGVzdDM3ICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGlu dCB0ZXN0MzcgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1 aWx0aW5fbWlwc191cHBlcl9jYWJzX25nbGVfcHMgKGEsIGIpOw0KIH0NCiAN Ci1OT01JUFMxNiBpbnQgdGVzdDM4ICh2MnNmIGEsIHYyc2YgYikNCitOT0NP TVBSRVNTSU9OIGludCB0ZXN0MzggKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAg IHJldHVybiBfX2J1aWx0aW5fbWlwc19sb3dlcl9jYWJzX25nbGVfcHMgKGEs IGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDM5ICh2MnNmIGEsIHYy c2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzkgKHYyc2YgYSwgdjJz ZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY2Fic19u Z2xlX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3Q0MCAo djJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDQwICh2 MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNf YW55X2NhYnNfc2VxX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50 IHRlc3Q0MSAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQg dGVzdDQxICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWls dGluX21pcHNfdXBwZXJfY2Fic19zZXFfcHMgKGEsIGIpOw0KIH0NCiANCi1O T01JUFMxNiBpbnQgdGVzdDQyICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBS RVNTSU9OIGludCB0ZXN0NDIgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJl dHVybiBfX2J1aWx0aW5fbWlwc19sb3dlcl9jYWJzX3NlcV9wcyAoYSwgYik7 DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NDMgKHYyc2YgYSwgdjJzZiBi KQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q0MyAodjJzZiBhLCB2MnNmIGIp DQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FsbF9jYWJzX3NlcV9w cyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NDQgKHYyc2Yg YSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q0NCAodjJzZiBh LCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FueV9j YWJzX25nbF9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0 NDUgKHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q0 NSAodjJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9t aXBzX3VwcGVyX2NhYnNfbmdsX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBT MTYgaW50IHRlc3Q0NiAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lP TiBpbnQgdGVzdDQ2ICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4g X19idWlsdGluX21pcHNfbG93ZXJfY2Fic19uZ2xfcHMgKGEsIGIpOw0KIH0N CiANCi1OT01JUFMxNiBpbnQgdGVzdDQ3ICh2MnNmIGEsIHYyc2YgYikNCitO T0NPTVBSRVNTSU9OIGludCB0ZXN0NDcgKHYyc2YgYSwgdjJzZiBiKQ0KIHsN CiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY2Fic19uZ2xfcHMgKGEs IGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDQ4ICh2MnNmIGEsIHYy c2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NDggKHYyc2YgYSwgdjJz ZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY2Fic19s dF9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NDkgKHYy c2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q0OSAodjJz ZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX3Vw cGVyX2NhYnNfbHRfcHMgKGEsIGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQg dGVzdDUwICh2MnNmIGEsIHYyc2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0 ZXN0NTAgKHYyc2YgYSwgdjJzZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0 aW5fbWlwc19sb3dlcl9jYWJzX2x0X3BzIChhLCBiKTsNCiB9DQogDQotTk9N SVBTMTYgaW50IHRlc3Q1MSAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVT U0lPTiBpbnQgdGVzdDUxICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1 cm4gX19idWlsdGluX21pcHNfYWxsX2NhYnNfbHRfcHMgKGEsIGIpOw0KIH0N CiANCi1OT01JUFMxNiBpbnQgdGVzdDUyICh2MnNmIGEsIHYyc2YgYikNCitO T0NPTVBSRVNTSU9OIGludCB0ZXN0NTIgKHYyc2YgYSwgdjJzZiBiKQ0KIHsN CiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY2Fic19uZ2VfcHMgKGEs IGIpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDUzICh2MnNmIGEsIHYy c2YgYikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTMgKHYyc2YgYSwgdjJz ZiBiKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc191cHBlcl9jYWJz X25nZV9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NTQg KHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q1NCAo djJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBz X2xvd2VyX2NhYnNfbmdlX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYg aW50IHRlc3Q1NSAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDU1ICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19i dWlsdGluX21pcHNfYWxsX2NhYnNfbmdlX3BzIChhLCBiKTsNCiB9DQogDQot Tk9NSVBTMTYgaW50IHRlc3Q1NiAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01Q UkVTU0lPTiBpbnQgdGVzdDU2ICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICBy ZXR1cm4gX19idWlsdGluX21pcHNfYW55X2NhYnNfbGVfcHMgKGEsIGIpOw0K IH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDU3ICh2MnNmIGEsIHYyc2YgYikN CitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NTcgKHYyc2YgYSwgdjJzZiBiKQ0K IHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc191cHBlcl9jYWJzX2xlX3Bz IChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3Q1OCAodjJzZiBh LCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDU4ICh2MnNmIGEs IHYyc2YgYikNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfbG93ZXJf Y2Fic19sZV9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0 NTkgKHYyc2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q1 OSAodjJzZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9t aXBzX2FsbF9jYWJzX2xlX3BzIChhLCBiKTsNCiB9DQogDQotTk9NSVBTMTYg aW50IHRlc3Q2MCAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01QUkVTU0lPTiBp bnQgdGVzdDYwICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICByZXR1cm4gX19i dWlsdGluX21pcHNfYW55X2NhYnNfbmd0X3BzIChhLCBiKTsNCiB9DQogDQot Tk9NSVBTMTYgaW50IHRlc3Q2MSAodjJzZiBhLCB2MnNmIGIpDQorTk9DT01Q UkVTU0lPTiBpbnQgdGVzdDYxICh2MnNmIGEsIHYyc2YgYikNCiB7DQogICBy ZXR1cm4gX19idWlsdGluX21pcHNfdXBwZXJfY2Fic19uZ3RfcHMgKGEsIGIp Ow0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDYyICh2MnNmIGEsIHYyc2Yg YikNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NjIgKHYyc2YgYSwgdjJzZiBi KQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19sb3dlcl9jYWJzX25n dF9wcyAoYSwgYik7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NjMgKHYy c2YgYSwgdjJzZiBiKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q2MyAodjJz ZiBhLCB2MnNmIGIpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2Fs bF9jYWJzX25ndF9wcyAoYSwgYik7DQogfQ0KSW5kZXg6IGdjYy50YXJnZXQv bWlwcy9sb25nLWNhbGxzLXBnLmMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBnY2MudGFyZ2V0L21pcHMvbG9uZy1jYWxscy1wZy5jCShyZXZpc2lv biAxOTUzNzgpDQorKysgZ2NjLnRhcmdldC9taXBzL2xvbmctY2FsbHMtcGcu Ywkod29ya2luZyBjb3B5KQ0KQEAgLTEsNyArMSw3IEBADQogLyogeyBkZy1k byBjb21waWxlIH0gKi8NCiAvKiB7IGRnLW9wdGlvbnMgIi1tYWJpPTMyIC1w ZyAtbW5vLWFiaWNhbGxzIC1tbG9uZy1jYWxscyIgfSAqLw0KIC8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0amFsXHRfbWNvdW50IiB9 IH0gKi8NCi1OT01JUFMxNiB2b2lkDQorTk9DT01QUkVTU0lPTiB2b2lkDQog Zm9vICh2b2lkKQ0KIHsNCiB9DQpJbmRleDogZ2NjLnRhcmdldC9taXBzL2Jy YW5jaC04LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MudGFy Z2V0L21pcHMvYnJhbmNoLTguYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdj Yy50YXJnZXQvbWlwcy9icmFuY2gtOC5jCSh3b3JraW5nIGNvcHkpDQpAQCAt NCw3ICs0LDcgQEANCiANCiAjaW5jbHVkZSAiYnJhbmNoLWhlbHBlci5oIg0K IA0KLU5PTUlQUzE2IHZvaWQNCitOT0NPTVBSRVNTSU9OIHZvaWQNCiBmb28g KGludCAoKmJhcikgKHZvaWQpLCBpbnQgKngpDQogew0KICAgKnggPSBiYXIg KCk7DQpJbmRleDogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1iYWRkdS0xLmMN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMv b2N0ZW9uLWJhZGR1LTEuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy50 YXJnZXQvbWlwcy9vY3Rlb24tYmFkZHUtMS5jCSh3b3JraW5nIGNvcHkpDQpA QCAtNCwyNyArNCwyNyBAQA0KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAiXHRiYWRkdVx0IiA0IH0gfSAqLw0KIC8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0YW5kaVx0IiB9IH0gKi8NCiAN Ci1OT01JUFMxNiB1bnNpZ25lZCBjaGFyDQorTk9DT01QUkVTU0lPTiB1bnNp Z25lZCBjaGFyDQogZyAobG9uZyBsb25nIGEsIGxvbmcgbG9uZyBiKQ0KIHsN CiAgIHJldHVybiBhICsgYjsNCiB9DQogDQotTk9NSVBTMTYgdW5zaWduZWQg bG9uZyBsb25nDQorTk9DT01QUkVTU0lPTiB1bnNpZ25lZCBsb25nIGxvbmcN CiBoICh1bnNpZ25lZCBsb25nIGxvbmcgYSwgdW5zaWduZWQgbG9uZyBsb25n IGIpDQogew0KICAgdW5zaWduZWQgY2hhciBjID0gYSArIGI7DQogICByZXR1 cm4gYzsNCiB9DQogDQotTk9NSVBTMTYgbG9uZyBsb25nDQorTk9DT01QUkVT U0lPTiBsb25nIGxvbmcNCiBmZiAobG9uZyBsb25nIGEsIGxvbmcgbG9uZyBi KQ0KIHsNCiAgIHVuc2lnbmVkIGNoYXIgYyA9IGEgKyBiOw0KICAgcmV0dXJu IGM7DQogfQ0KIA0KLU5PTUlQUzE2IGludA0KK05PQ09NUFJFU1NJT04gaW50 DQogZ2cgKGludCBhLCBpbnQgYikNCiB7DQogICByZXR1cm4gKGEgKyBiKSAm IDB4ZmY7DQpJbmRleDogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1jaW5zLTIu Yw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlw cy9vY3Rlb24tY2lucy0yLmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2Mu dGFyZ2V0L21pcHMvb2N0ZW9uLWNpbnMtMi5jCSh3b3JraW5nIGNvcHkpDQpA QCAtMywxMyArMywxMyBAQA0KIC8qIHsgZGctc2tpcC1pZiAiY29kZSBxdWFs aXR5IHRlc3QiIHsgKi0qLSogfSB7ICItTzAiIH0geyAiIiB9IH0gKi8NCiAv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdGNpbnNcdCIg fSB9ICovDQogDQotTk9NSVBTMTYgdW5zaWduZWQNCitOT0NPTVBSRVNTSU9O IHVuc2lnbmVkDQogZiAodW5zaWduZWQgaSkNCiB7DQogICByZXR1cm4gKGkg JiAweGZmKSA8PCAyNDsNCiB9DQogDQotTk9NSVBTMTYgdW5zaWduZWQgbG9u ZyBsb25nDQorTk9DT01QUkVTU0lPTiB1bnNpZ25lZCBsb25nIGxvbmcNCiBn ICh1bnNpZ25lZCBsb25nIGxvbmcgaSkNCiB7DQogICByZXR1cm4gKGkgJiAw eDFmZmZmZmZmZlVMTCkgPDwgNDsNCkluZGV4OiBnY2MudGFyZ2V0L21pcHMv bGF6eS1iaW5kaW5nLTEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IGdjYy50YXJnZXQvbWlwcy9sYXp5LWJpbmRpbmctMS5jCShyZXZpc2lvbiAx OTUzNzgpDQorKysgZ2NjLnRhcmdldC9taXBzL2xhenktYmluZGluZy0xLmMJ KHdvcmtpbmcgY29weSkNCkBAIC02LDcgKzYsNyBAQA0KIA0KIHZvaWQgYmFy ICh2b2lkKTsNCiANCi1OT01JUFMxNiB2b2lkDQorTk9DT01QUkVTU0lPTiB2 b2lkDQogZm9vIChpbnQgbikNCiB7DQogICB3aGlsZSAobi0tKQ0KSW5kZXg6 IGdjYy50YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJpZXItNy5jDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL3IxMGst Y2FjaGUtYmFycmllci03LmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2Mu dGFyZ2V0L21pcHMvcjEway1jYWNoZS1iYXJyaWVyLTcuYwkod29ya2luZyBj b3B5KQ0KQEAgLTQsNyArNCw3IEBADQogdm9pZCBiYXIyICh2b2lkKTsNCiB2 b2lkIGJhcjMgKHZvaWQpOw0KIA0KLU5PTUlQUzE2IHZvaWQNCitOT0NPTVBS RVNTSU9OIHZvaWQNCiBmb28gKGludCAqeCwgaW50IHNlbCwgaW50IG4pDQog ew0KICAgaWYgKHNlbCkNCkluZGV4OiBnY2MudGFyZ2V0L21pcHMvY2FsbC1z YXZlZC0xLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MudGFy Z2V0L21pcHMvY2FsbC1zYXZlZC0xLmMJKHJldmlzaW9uIDE5NTM3OCkNCisr KyBnY2MudGFyZ2V0L21pcHMvY2FsbC1zYXZlZC0xLmMJKHdvcmtpbmcgY29w eSkNCkBAIC00LDcgKzQsNyBAQA0KIA0KIHZvaWQgYmFyICh2b2lkKTsNCiAN Ci1NSVBTMTYgdm9pZA0KK01JUFMxNiBOT01JQ1JPTUlQUyB2b2lkDQogZm9v IChpbnQgeCkNCiB7DQogICBfX2J1aWx0aW5fdW53aW5kX2luaXQgKCk7DQpJ bmRleDogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1leHRzLTcuYw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24t ZXh0cy03LmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21p cHMvb2N0ZW9uLWV4dHMtNy5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMTIsNyAr MTIsNyBAQA0KICAgbG9uZyBsb25nIGM6MjI7DQogfTsNCiANCi1OT01JUFMx NiBpbnQNCitOT0NPTVBSRVNTSU9OIGludA0KIGYxIChzdHJ1Y3QgYmFyICpz KQ0KIHsNCiAgIHJldHVybiBzLT5iOw0KSW5kZXg6IGdjYy50YXJnZXQvbWlw cy9taXBzLTNkLTQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdj Yy50YXJnZXQvbWlwcy9taXBzLTNkLTQuYwkocmV2aXNpb24gMTk1Mzc4KQ0K KysrIGdjYy50YXJnZXQvbWlwcy9taXBzLTNkLTQuYwkod29ya2luZyBjb3B5 KQ0KQEAgLTcsNDIgKzcsNDIgQEANCiANCiB0eXBlZGVmIGZsb2F0IHYyc2Yg X19hdHRyaWJ1dGVfXyAoKHZlY3Rvcl9zaXplKDgpKSk7DQogDQotTk9NSVBT MTYgaW50IHRlc3QwICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQp Ow0KLU5PTUlQUzE2IGludCB0ZXN0MSAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVzdDIgKHYyc2YgYSwgdjJz ZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgaW50IHRlc3QzICh2 MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IGlu dCB0ZXN0NCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1O T01JUFMxNiBpbnQgdGVzdDUgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYy c2YgZCk7DQotTk9NSVBTMTYgaW50IHRlc3Q2ICh2MnNmIGEsIHYyc2YgYiwg djJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0NyAodjJzZiBh LCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVz dDggKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBT MTYgaW50IHRlc3Q5ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQp Ow0KLU5PTUlQUzE2IGludCB0ZXN0MTAgKHYyc2YgYSwgdjJzZiBiLCB2MnNm IGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgaW50IHRlc3QxMSAodjJzZiBhLCB2 MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVzdDEy ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2 IGludCB0ZXN0MTMgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7 DQotTk9NSVBTMTYgaW50IHRlc3QxNCAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVzdDE1ICh2MnNmIGEsIHYy c2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTYg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYg aW50IHRlc3QxNyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsN Ci1OT01JUFMxNiBpbnQgdGVzdDE4ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBj LCB2MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTkgKHYyc2YgYSwgdjJz ZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgaW50IHRlc3QyMCAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiBp bnQgdGVzdDIxICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0K LU5PTUlQUzE2IGludCB0ZXN0MjIgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMs IHYyc2YgZCk7DQotTk9NSVBTMTYgaW50IHRlc3QyMyAodjJzZiBhLCB2MnNm IGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVzdDI0ICh2 MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IGlu dCB0ZXN0MjUgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQot Tk9NSVBTMTYgaW50IHRlc3QyNiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywg djJzZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVzdDI3ICh2MnNmIGEsIHYyc2Yg YiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0MjggKHYy c2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgaW50 IHRlc3QyOSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1O T01JUFMxNiBpbnQgdGVzdDMwICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2 MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0MzEgKHYyc2YgYSwgdjJzZiBi LCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDAg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVT U0lPTiBpbnQgdGVzdDEgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDIgKHYyc2YgYSwgdjJzZiBi LCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDMg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVT U0lPTiBpbnQgdGVzdDQgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDUgKHYyc2YgYSwgdjJzZiBi LCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDYg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVT U0lPTiBpbnQgdGVzdDcgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDggKHYyc2YgYSwgdjJzZiBi LCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDkg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVT U0lPTiBpbnQgdGVzdDEwICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNm IGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxMSAodjJzZiBhLCB2MnNm IGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0 MTIgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01Q UkVTU0lPTiBpbnQgdGVzdDEzICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2 MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxNCAodjJzZiBhLCB2 MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIGludCB0 ZXN0MTUgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9D T01QUkVTU0lPTiBpbnQgdGVzdDE2ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBj LCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxNyAodjJzZiBh LCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIGlu dCB0ZXN0MTggKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQor Tk9DT01QUkVTU0lPTiBpbnQgdGVzdDE5ICh2MnNmIGEsIHYyc2YgYiwgdjJz ZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QyMCAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9O IGludCB0ZXN0MjEgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7 DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDIyICh2MnNmIGEsIHYyc2YgYiwg djJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QyMyAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0MjQgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDI1ICh2MnNmIGEsIHYyc2Yg YiwgdjJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Qy NiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBS RVNTSU9OIGludCB0ZXN0MjcgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYy c2YgZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDI4ICh2MnNmIGEsIHYy c2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRl c3QyOSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NP TVBSRVNTSU9OIGludCB0ZXN0MzAgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMs IHYyc2YgZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDMxICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KIA0KIGZsb2F0IHFuYW4gPSAx LjBmLzAuMGYgLSAxLjBmLzAuMGY7DQogDQotTk9NSVBTMTYgaW50IG1haW4g KCkNCitOT0NPTVBSRVNTSU9OIGludCBtYWluICgpDQogew0KICAgdjJzZiBh LCBiLCBjLCBkOw0KICAgaW50IGksIGo7DQpAQCAtNDI5LDE2MiArNDI5LDE2 MiBAQA0KICAgZXhpdCAoMCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0 MCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJF U1NJT04gaW50IHRlc3QwICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNm IGQpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FueV9jX2ZfNHMg KGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDEgKHYy c2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9O IGludCB0ZXN0MSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0K IHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY19mXzRzIChhLCBi LCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QyICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiBpbnQg dGVzdDIgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQog ICByZXR1cm4gX19idWlsdGluX21pcHNfYW55X2NfdW5fNHMgKGEsIGIsIGMs IGQpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDMgKHYyc2YgYSwgdjJz ZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0 MyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJl dHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY191bl80cyAoYSwgYiwgYywgZCk7 DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0NCAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q0ICh2 MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJu IF9fYnVpbHRpbl9taXBzX2FueV9jX2VxXzRzIChhLCBiLCBjLCBkKTsNCiB9 DQogDQotTk9NSVBTMTYgaW50IHRlc3Q1ICh2MnNmIGEsIHYyc2YgYiwgdjJz ZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDUgKHYyc2Yg YSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gX19i dWlsdGluX21pcHNfYWxsX2NfZXFfNHMgKGEsIGIsIGMsIGQpOw0KIH0NCiAN Ci1OT01JUFMxNiBpbnQgdGVzdDYgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMs IHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NiAodjJzZiBhLCB2 MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0 aW5fbWlwc19hbnlfY191ZXFfNHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1O T01JUFMxNiBpbnQgdGVzdDcgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYy c2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NyAodjJzZiBhLCB2MnNm IGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5f bWlwc19hbGxfY191ZXFfNHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01J UFMxNiBpbnQgdGVzdDggKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0OCAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlw c19hbnlfY19vbHRfNHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMx NiBpbnQgdGVzdDkgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkN CitOT0NPTVBSRVNTSU9OIGludCB0ZXN0OSAodjJzZiBhLCB2MnNmIGIsIHYy c2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19h bGxfY19vbHRfNHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiBp bnQgdGVzdDEwICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQor Tk9DT01QUkVTU0lPTiBpbnQgdGVzdDEwICh2MnNmIGEsIHYyc2YgYiwgdjJz ZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2Fu eV9jX3VsdF80cyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGlu dCB0ZXN0MTEgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitO T0NPTVBSRVNTSU9OIGludCB0ZXN0MTEgKHYyc2YgYSwgdjJzZiBiLCB2MnNm IGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYWxs X2NfdWx0XzRzIChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50 IHRlc3QxMiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05P Q09NUFJFU1NJT04gaW50IHRlc3QxMiAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlf Y19vbGVfNHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQg dGVzdDEzICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9D T01QUkVTU0lPTiBpbnQgdGVzdDEzICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBj LCB2MnNmIGQpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FsbF9j X29sZV80cyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0 ZXN0MTQgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NP TVBSRVNTSU9OIGludCB0ZXN0MTQgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMs IHYyc2YgZCkNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYW55X2Nf dWxlXzRzIChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRl c3QxNSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09N UFJFU1NJT04gaW50IHRlc3QxNSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywg djJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY191 bGVfNHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVz dDE2ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01Q UkVTU0lPTiBpbnQgdGVzdDE2ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2 MnNmIGQpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FueV9jX3Nm XzRzIChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3Qx NyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJF U1NJT04gaW50IHRlc3QxNyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJz ZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY19zZl80 cyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MTgg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0MTggKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCkNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYW55X2NfbmdsZV80 cyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MTkg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0MTkgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCkNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYWxsX2NfbmdsZV80 cyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MjAg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0MjAgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCkNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYW55X2Nfc2VxXzRz IChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QyMSAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJ T04gaW50IHRlc3QyMSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY19zZXFfNHMg KGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDIyICh2 MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lP TiBpbnQgdGVzdDIyICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQp DQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FueV9jX25nbF80cyAo YSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MjMgKHYy c2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9O IGludCB0ZXN0MjMgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkN CiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYWxsX2NfbmdsXzRzIChh LCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QyNCAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04g aW50IHRlc3QyNCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0K IHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY19sdF80cyAoYSwg YiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MjUgKHYyc2Yg YSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGlu dCB0ZXN0MjUgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7 DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYWxsX2NfbHRfNHMgKGEsIGIs IGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDI2ICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiBpbnQg dGVzdDI2ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0K ICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FueV9jX25nZV80cyAoYSwgYiwg YywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MjcgKHYyc2YgYSwg djJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0 ZXN0MjcgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQog ICByZXR1cm4gX19idWlsdGluX21pcHNfYWxsX2NfbmdlXzRzIChhLCBiLCBj LCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QyOCAodjJzZiBhLCB2 MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRl c3QyOCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAg IHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY19sZV80cyAoYSwgYiwgYywg ZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MjkgKHYyc2YgYSwgdjJz ZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0 MjkgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICBy ZXR1cm4gX19idWlsdGluX21pcHNfYWxsX2NfbGVfNHMgKGEsIGIsIGMsIGQp Ow0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDMwICh2MnNmIGEsIHYyc2Yg YiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDMw ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0 dXJuIF9fYnVpbHRpbl9taXBzX2FueV9jX25ndF80cyAoYSwgYiwgYywgZCk7 DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MzEgKHYyc2YgYSwgdjJzZiBi LCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzEg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1 cm4gX19idWlsdGluX21pcHNfYWxsX2Nfbmd0XzRzIChhLCBiLCBjLCBkKTsN CiB9DQpJbmRleDogZ2NjLnRhcmdldC9taXBzL2xvb25nc29uLXNoaWZ0LWNv dW50LXRydW5jYXRlZC0xLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t LSBnY2MudGFyZ2V0L21pcHMvbG9vbmdzb24tc2hpZnQtY291bnQtdHJ1bmNh dGVkLTEuYwkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy50YXJnZXQvbWlw cy9sb29uZ3Nvbi1zaGlmdC1jb3VudC10cnVuY2F0ZWQtMS5jCSh3b3JraW5n IGNvcHkpDQpAQCAtMTMsNyArMTMsNyBAQA0KIA0KIHR5cGVkZWYgdW5pb24g eyBpbnQzMngyX3QgdjsgaW50MzJfdCBhWzJdOyB9IGludDMyeDJfZW5jYXBf dDsNCiANCi12b2lkDQordm9pZCBOT01JQ1JPTUlQUw0KIG1haW4xIChpbnQg c2hpZnQpDQogew0KICAgaW50MzJ4Ml9lbmNhcF90IHM7DQpAQCAtMjksNyAr MjksNyBAQA0KICAgYXNzZXJ0IChyLmFbMV0gPT0gMHhmZmZmZmZmZik7DQog fQ0KIA0KLWludA0KK2ludCBOT01JQ1JPTUlQUw0KIG1haW4gKHZvaWQpDQog ew0KICAgbWFpbjEgKDB4NDApOw0KSW5kZXg6IGdjYy50YXJnZXQvbWlwcy9t aWNyb21pcHMtbHdwLXN3cC12b2xhdGlsZS5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL21pY3JvbWlwcy1sd3Atc3dw LXZvbGF0aWxlLmMJKHJldmlzaW9uIDApDQorKysgZ2NjLnRhcmdldC9taXBz L21pY3JvbWlwcy1sd3Atc3dwLXZvbGF0aWxlLmMJKHJldmlzaW9uIDApDQpA QCAtMCwwICsxLDQyIEBADQorLyogeyBkZy1kbyBjb21waWxlIH0gKi8NCisv KiB7IGRnLW9wdGlvbnMgIi1PMiIgfSAqLw0KKw0KKy8qIFRoaXMgdGVzdCBl bnN1cmVzIHRoYXQgd2UgZG8gbm90IGdlbmVyYXRlIG1pY3JvTUlQUyBTV1Ag b3IgTFdQDQorICAgaW5zdHJ1Y3Rpb25zIHdoZW4gYW55IGNvbXBvbmVudCBv ZiB0aGUgYWNjZXNzZWQgbWVtb3J5IGlzIHZvbGF0aWxlOyANCisgICB0aGV5 IGFyZSB1bnNhZmUgZm9yIHN1Y2ggc2luY2UgdGhleSBtaWdodCBjYXVzZSBy ZXBsYXkgb2YgcGFydGlhbCANCisgICBhY2Nlc3NlcyBpZiBpbnRlcnJ1cHRl ZCBieSBhbiBleGNlcHRpb24uICAqLw0KKw0KK3N0YXRpYyB2b2lkIHNldF9j c3IgKHZvbGF0aWxlIHZvaWQgKnAsIGludCB2KQ0KK3sNCisgICoodm9sYXRp bGUgaW50ICopIChwKSA9IHY7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZ2V0X2Nz ciAodm9sYXRpbGUgdm9pZCAqcCkNCit7DQorICByZXR1cm4gKih2b2xhdGls ZSBpbnQgKikgKHApOw0KK30NCisNCitpbnQgbWFpbiAoKQ0KK3sNCisgIGlu dCBpLCBxID0gMCwgcCA9IDAsIHIgPSAwOw0KKw0KKyAgZm9yIChpID0gMDsg aSA8IDIwOyBpKyspDQorICAgIHsNCisgICAgICBzZXRfY3NyICgodm9sYXRp bGUgdm9pZCAqKSAweGJmMDEwMGE4LCAweGZmZmYwMDAyKTsNCisgICAgICBz ZXRfY3NyICgodm9sYXRpbGUgdm9pZCAqKSAweGJmMDEwMGE0LCAweDgwMDAw MDA4KTsNCisgICAgfQ0KKw0KKyAgZm9yIChpID0gMDsgaSA8IDIwOyBpKysp DQorICAgIHsNCisgICAgICByZWdpc3RlciBpbnQgaywgajsNCisgICAgICBr ID0gZ2V0X2NzciAoKHZvbGF0aWxlIHZvaWQgKikgMHhiZjAxMDBiOCk7DQor ICAgICAgcCArPSBrOw0KKyAgICAgIGogPSBnZXRfY3NyICgodm9sYXRpbGUg dm9pZCAqKSAweGJmMDEwMGI0KTsNCisgICAgICByICs9IGo7DQorICAgICAg cSA9IGogKyBrOw0KKyAgICB9DQorICByZXR1cm4gcSArIHIgKyBwOw0KK30N CisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHN3 cFx0XFxcJCIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLW5vdCAiXHRsd3BcdFxcXCQiIH0gfSAqLw0KSW5kZXg6IGdjYy50YXJn ZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJpZXItOC5jDQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFy cmllci04LmMJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBnY2MudGFyZ2V0L21p cHMvcjEway1jYWNoZS1iYXJyaWVyLTguYwkod29ya2luZyBjb3B5KQ0KQEAg LTUsNyArNSw3IEBADQogDQogc3RydWN0IHsgc3RydWN0IHsgY2hhciBpWzRd OyB9IGE7IHN0cnVjdCB7IGNoYXIgals0XTsgfSBiOyB9IHM7DQogDQotTk9N SVBTMTYgdm9pZA0KK05PQ09NUFJFU1NJT04gdm9pZA0KIGZvbyAoaW50IHNl bCkNCiB7DQogICBzLmEuaVswXSA9IDE7DQpJbmRleDogZ2NjLnRhcmdldC9t aXBzL2NhbGwtc2F2ZWQtMi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gZ2NjLnRhcmdldC9taXBzL2NhbGwtc2F2ZWQtMi5jCShyZXZpc2lvbiAx OTUzNzgpDQorKysgZ2NjLnRhcmdldC9taXBzL2NhbGwtc2F2ZWQtMi5jCSh3 b3JraW5nIGNvcHkpDQpAQCAtMiw3ICsyLDcgQEANCiAvKiB7IGRnLW9wdGlv bnMgIigtbWlwczE2KSBpc2FfcmV2PTAiIH0gKi8NCiAvKiB7IGRnLXNraXAt aWYgIm5hbWluZyByZWdpc3RlcnMgbWFrZXMgdGhpcyBhIGNvZGUgcXVhbGl0 eSB0ZXN0IiB7ICotKi0qIH0geyAiLU8wIiB9IHsgIiIgfSB9ICovDQogDQot TUlQUzE2IHZvaWQNCitNSVBTMTYgTk9NSUNST01JUFMgdm9pZA0KIGZvbyAo dm9pZCkNCiB7DQogICBhc20gdm9sYXRpbGUgKCIiIDo6OiAiJDE5IiwgIiQy MyIsICIkMjQiLCAiJDMwIik7DQpJbmRleDogZ2NjLnRhcmdldC9taXBzL2Jy YW5jaC0xMi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjLnRh cmdldC9taXBzL2JyYW5jaC0xMi5jCShyZXZpc2lvbiAxOTUzNzgpDQorKysg Z2NjLnRhcmdldC9taXBzL2JyYW5jaC0xMi5jCSh3b3JraW5nIGNvcHkpDQpA QCAtNCw3ICs0LDcgQEANCiANCiAjaW5jbHVkZSAiYnJhbmNoLWhlbHBlci5o Ig0KIA0KLU5PTUlQUzE2IHZvaWQNCitOT0NPTVBSRVNTSU9OIHZvaWQNCiBm b28gKGludCAoKmJhcikgKHZvaWQpLCBpbnQgKngpDQogew0KICAgKnggPSBi YXIgKCk7DQpJbmRleDogZ2NjLnRhcmdldC9taXBzL21pcHMtM2QtNS5jDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL21p cHMtM2QtNS5jCShyZXZpc2lvbiAxOTUzNzgpDQorKysgZ2NjLnRhcmdldC9t aXBzL21pcHMtM2QtNS5jCSh3b3JraW5nIGNvcHkpDQpAQCAtNyw0MiArNyw0 MiBAQA0KIA0KIHR5cGVkZWYgZmxvYXQgdjJzZiBfX2F0dHJpYnV0ZV9fICgo dmVjdG9yX3NpemUoOCkpKTsNCiANCi1OT01JUFMxNiBpbnQgdGVzdDAgKHYy c2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgaW50 IHRlc3QxICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5P TUlQUzE2IGludCB0ZXN0MiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJz ZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVzdDMgKHYyc2YgYSwgdjJzZiBiLCB2 MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgaW50IHRlc3Q0ICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0 NSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMx NiBpbnQgdGVzdDYgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7 DQotTk9NSVBTMTYgaW50IHRlc3Q3ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBj LCB2MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0OCAodjJzZiBhLCB2MnNm IGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVzdDkgKHYy c2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgaW50 IHRlc3QxMCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1O T01JUFMxNiBpbnQgdGVzdDExICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2 MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0MTIgKHYyc2YgYSwgdjJzZiBi LCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgaW50IHRlc3QxMyAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiBpbnQg dGVzdDE0ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5P TUlQUzE2IGludCB0ZXN0MTUgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYy c2YgZCk7DQotTk9NSVBTMTYgaW50IHRlc3QxNiAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVzdDE3ICh2MnNm IGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0 ZXN0MTggKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9N SVBTMTYgaW50IHRlc3QxOSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJz ZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVzdDIwICh2MnNmIGEsIHYyc2YgYiwg djJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0MjEgKHYyc2Yg YSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgaW50IHRl c3QyMiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01J UFMxNiBpbnQgdGVzdDIzICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNm IGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0MjQgKHYyc2YgYSwgdjJzZiBiLCB2 MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBTMTYgaW50IHRlc3QyNSAodjJzZiBh LCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVz dDI2ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQ UzE2IGludCB0ZXN0MjcgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCk7DQotTk9NSVBTMTYgaW50IHRlc3QyOCAodjJzZiBhLCB2MnNmIGIsIHYy c2YgYywgdjJzZiBkKTsNCi1OT01JUFMxNiBpbnQgdGVzdDI5ICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KLU5PTUlQUzE2IGludCB0ZXN0 MzAgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQotTk9NSVBT MTYgaW50IHRlc3QzMSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MCAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MSAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0MiAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MyAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NCAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0NSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NiAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NyAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0OCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0OSAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTAg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01QUkVT U0lPTiBpbnQgdGVzdDExICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNm IGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxMiAodjJzZiBhLCB2MnNm IGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0 MTMgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9DT01Q UkVTU0lPTiBpbnQgdGVzdDE0ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2 MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxNSAodjJzZiBhLCB2 MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIGludCB0 ZXN0MTYgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQorTk9D T01QUkVTU0lPTiBpbnQgdGVzdDE3ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBj LCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxOCAodjJzZiBh LCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9OIGlu dCB0ZXN0MTkgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7DQor Tk9DT01QUkVTU0lPTiBpbnQgdGVzdDIwICh2MnNmIGEsIHYyc2YgYiwgdjJz ZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QyMSAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNTSU9O IGludCB0ZXN0MjIgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCk7 DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDIzICh2MnNmIGEsIHYyc2YgYiwg djJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QyNCAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBSRVNT SU9OIGludCB0ZXN0MjUgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDI2ICh2MnNmIGEsIHYyc2Yg YiwgdjJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Qy NyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NPTVBS RVNTSU9OIGludCB0ZXN0MjggKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYy c2YgZCk7DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDI5ICh2MnNmIGEsIHYy c2YgYiwgdjJzZiBjLCB2MnNmIGQpOw0KK05PQ09NUFJFU1NJT04gaW50IHRl c3QzMCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKTsNCitOT0NP TVBSRVNTSU9OIGludCB0ZXN0MzEgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMs IHYyc2YgZCk7DQogDQogZmxvYXQgcW5hbiA9IDEuMGYvMC4wZiAtIDEuMGYv MC4wZjsNCiANCi1OT01JUFMxNiBpbnQgbWFpbiAoKQ0KK05PQ09NUFJFU1NJ T04gaW50IG1haW4gKCkNCiB7DQogICB2MnNmIGEsIGIsIGMsIGQ7DQogICBp bnQgaSwgajsNCkBAIC00MjksMTYyICs0MjksMTYyIEBADQogICBleGl0ICgw KTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QwICh2MnNmIGEsIHYyc2Yg YiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDAg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1 cm4gX19idWlsdGluX21pcHNfYW55X2NhYnNfZl80cyAoYSwgYiwgYywgZCk7 DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MSAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxICh2 MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJu IF9fYnVpbHRpbl9taXBzX2FsbF9jYWJzX2ZfNHMgKGEsIGIsIGMsIGQpOw0K IH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDIgKHYyc2YgYSwgdjJzZiBiLCB2 MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MiAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBf X2J1aWx0aW5fbWlwc19hbnlfY2Fic191bl80cyAoYSwgYiwgYywgZCk7DQog fQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MyAodjJzZiBhLCB2MnNmIGIsIHYy c2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QzICh2MnNm IGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJuIF9f YnVpbHRpbl9taXBzX2FsbF9jYWJzX3VuXzRzIChhLCBiLCBjLCBkKTsNCiB9 DQogDQotTk9NSVBTMTYgaW50IHRlc3Q0ICh2MnNmIGEsIHYyc2YgYiwgdjJz ZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDQgKHYyc2Yg YSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gX19i dWlsdGluX21pcHNfYW55X2NhYnNfZXFfNHMgKGEsIGIsIGMsIGQpOw0KIH0N CiANCi1OT01JUFMxNiBpbnQgdGVzdDUgKHYyc2YgYSwgdjJzZiBiLCB2MnNm IGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0NSAodjJzZiBh LCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1 aWx0aW5fbWlwc19hbGxfY2Fic19lcV80cyAoYSwgYiwgYywgZCk7DQogfQ0K IA0KLU5PTUlQUzE2IGludCB0ZXN0NiAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q2ICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJuIF9fYnVp bHRpbl9taXBzX2FueV9jYWJzX3VlcV80cyAoYSwgYiwgYywgZCk7DQogfQ0K IA0KLU5PTUlQUzE2IGludCB0ZXN0NyAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q3ICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJuIF9fYnVp bHRpbl9taXBzX2FsbF9jYWJzX3VlcV80cyAoYSwgYiwgYywgZCk7DQogfQ0K IA0KLU5PTUlQUzE2IGludCB0ZXN0OCAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q4ICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJuIF9fYnVp bHRpbl9taXBzX2FueV9jYWJzX29sdF80cyAoYSwgYiwgYywgZCk7DQogfQ0K IA0KLU5PTUlQUzE2IGludCB0ZXN0OSAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Q5ICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJuIF9fYnVp bHRpbl9taXBzX2FsbF9jYWJzX29sdF80cyAoYSwgYiwgYywgZCk7DQogfQ0K IA0KLU5PTUlQUzE2IGludCB0ZXN0MTAgKHYyc2YgYSwgdjJzZiBiLCB2MnNm IGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTAgKHYyc2Yg YSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gX19i dWlsdGluX21pcHNfYW55X2NhYnNfdWx0XzRzIChhLCBiLCBjLCBkKTsNCiB9 DQogDQotTk9NSVBTMTYgaW50IHRlc3QxMSAodjJzZiBhLCB2MnNmIGIsIHYy c2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QxMSAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBf X2J1aWx0aW5fbWlwc19hbGxfY2Fic191bHRfNHMgKGEsIGIsIGMsIGQpOw0K IH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDEyICh2MnNmIGEsIHYyc2YgYiwg djJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDEyICh2 MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJu IF9fYnVpbHRpbl9taXBzX2FueV9jYWJzX29sZV80cyAoYSwgYiwgYywgZCk7 DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MTMgKHYyc2YgYSwgdjJzZiBi LCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MTMg KHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1 cm4gX19idWlsdGluX21pcHNfYWxsX2NhYnNfb2xlXzRzIChhLCBiLCBjLCBk KTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QxNCAodjJzZiBhLCB2MnNm IGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3Qx NCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJl dHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY2Fic191bGVfNHMgKGEsIGIsIGMs IGQpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDE1ICh2MnNmIGEsIHYy c2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiBpbnQgdGVz dDE1ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0KICAg cmV0dXJuIF9fYnVpbHRpbl9taXBzX2FsbF9jYWJzX3VsZV80cyAoYSwgYiwg YywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0MTYgKHYyc2YgYSwg djJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBSRVNTSU9OIGludCB0 ZXN0MTYgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCiB7DQog ICByZXR1cm4gX19idWlsdGluX21pcHNfYW55X2NhYnNfc2ZfNHMgKGEsIGIs IGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDE3ICh2MnNmIGEs IHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVTU0lPTiBpbnQg dGVzdDE3ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQogew0K ICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FsbF9jYWJzX3NmXzRzIChhLCBi LCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QxOCAodjJzZiBh LCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50 IHRlc3QxOCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsN CiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY2Fic19uZ2xlXzRzIChh LCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QxOSAodjJz ZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJT04g aW50IHRlc3QxOSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0K IHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY2Fic19uZ2xlXzRz IChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRlc3QyMCAo djJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09NUFJFU1NJ T04gaW50IHRlc3QyMCAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbnlfY2Fic19zZXFf NHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQgdGVzdDIx ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9DT01QUkVT U0lPTiBpbnQgdGVzdDIxICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNm IGQpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FsbF9jYWJzX3Nl cV80cyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGludCB0ZXN0 MjIgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitOT0NPTVBS RVNTSU9OIGludCB0ZXN0MjIgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYy c2YgZCkNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYW55X2NhYnNf bmdsXzRzIChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50IHRl c3QyMyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05PQ09N UFJFU1NJT04gaW50IHRlc3QyMyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywg djJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxfY2Fi c19uZ2xfNHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMxNiBpbnQg dGVzdDI0ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQpDQorTk9D T01QUkVTU0lPTiBpbnQgdGVzdDI0ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBj LCB2MnNmIGQpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBzX2FueV9j YWJzX2x0XzRzIChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYgaW50 IHRlc3QyNSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0KK05P Q09NUFJFU1NJT04gaW50IHRlc3QyNSAodjJzZiBhLCB2MnNmIGIsIHYyc2Yg YywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19hbGxf Y2Fic19sdF80cyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQUzE2IGlu dCB0ZXN0MjYgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2YgZCkNCitO T0NPTVBSRVNTSU9OIGludCB0ZXN0MjYgKHYyc2YgYSwgdjJzZiBiLCB2MnNm IGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gX19idWlsdGluX21pcHNfYW55 X2NhYnNfbmdlXzRzIChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBTMTYg aW50IHRlc3QyNyAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBkKQ0K K05PQ09NUFJFU1NJT04gaW50IHRlc3QyNyAodjJzZiBhLCB2MnNmIGIsIHYy c2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlwc19h bGxfY2Fic19uZ2VfNHMgKGEsIGIsIGMsIGQpOw0KIH0NCiANCi1OT01JUFMx NiBpbnQgdGVzdDI4ICh2MnNmIGEsIHYyc2YgYiwgdjJzZiBjLCB2MnNmIGQp DQorTk9DT01QUkVTU0lPTiBpbnQgdGVzdDI4ICh2MnNmIGEsIHYyc2YgYiwg djJzZiBjLCB2MnNmIGQpDQogew0KICAgcmV0dXJuIF9fYnVpbHRpbl9taXBz X2FueV9jYWJzX2xlXzRzIChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9NSVBT MTYgaW50IHRlc3QyOSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJzZiBk KQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QyOSAodjJzZiBhLCB2MnNmIGIs IHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5fbWlw c19hbGxfY2Fic19sZV80cyAoYSwgYiwgYywgZCk7DQogfQ0KIA0KLU5PTUlQ UzE2IGludCB0ZXN0MzAgKHYyc2YgYSwgdjJzZiBiLCB2MnNmIGMsIHYyc2Yg ZCkNCitOT0NPTVBSRVNTSU9OIGludCB0ZXN0MzAgKHYyc2YgYSwgdjJzZiBi LCB2MnNmIGMsIHYyc2YgZCkNCiB7DQogICByZXR1cm4gX19idWlsdGluX21p cHNfYW55X2NhYnNfbmd0XzRzIChhLCBiLCBjLCBkKTsNCiB9DQogDQotTk9N SVBTMTYgaW50IHRlc3QzMSAodjJzZiBhLCB2MnNmIGIsIHYyc2YgYywgdjJz ZiBkKQ0KK05PQ09NUFJFU1NJT04gaW50IHRlc3QzMSAodjJzZiBhLCB2MnNm IGIsIHYyc2YgYywgdjJzZiBkKQ0KIHsNCiAgIHJldHVybiBfX2J1aWx0aW5f bWlwc19hbGxfY2Fic19uZ3RfNHMgKGEsIGIsIGMsIGQpOw0KIH0NCkluZGV4 OiBnY2MudGFyZ2V0L21pcHMvbG9vbmdzb24tbXVsZGl2LTEuYw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9sb29uZ3Nv bi1tdWxkaXYtMS5jCShyZXZpc2lvbiAxOTUzNzgpDQorKysgZ2NjLnRhcmdl dC9taXBzL2xvb25nc29uLW11bGRpdi0xLmMJKHdvcmtpbmcgY29weSkNCkBA IC0zLDExICszLDExIEBADQogdHlwZWRlZiBpbnQgc3Q7DQogdHlwZWRlZiB1 bnNpZ25lZCBpbnQgdXQ7DQogDQotTk9NSVBTMTYgc3Qgc211bCAoc3QgeCwg c3QgeSkgeyByZXR1cm4geCAqIHk7IH0NCi1OT01JUFMxNiBzdCBzZGl2IChz dCB4LCBzdCB5KSB7IHJldHVybiB4IC8geSArIHggJSB5OyB9DQorTk9DT01Q UkVTU0lPTiBzdCBzbXVsIChzdCB4LCBzdCB5KSB7IHJldHVybiB4ICogeTsg fQ0KK05PQ09NUFJFU1NJT04gc3Qgc2RpdiAoc3QgeCwgc3QgeSkgeyByZXR1 cm4geCAvIHkgKyB4ICUgeTsgfQ0KIA0KLU5PTUlQUzE2IHV0IHVtdWwgKHV0 IHgsIHV0IHkpIHsgcmV0dXJuIHggKiB5OyB9DQotTk9NSVBTMTYgdXQgdWRp diAodXQgeCwgdXQgeSkgeyByZXR1cm4geCAvIHkgKyB4ICUgeTsgfQ0KK05P Q09NUFJFU1NJT04gdXQgdW11bCAodXQgeCwgdXQgeSkgeyByZXR1cm4geCAq IHk7IH0NCitOT0NPTVBSRVNTSU9OIHV0IHVkaXYgKHV0IHgsIHV0IHkpIHsg cmV0dXJuIHggLyB5ICsgeCAlIHk7IH0NCiANCiAvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgIlx0bXVsdHUuZ1x0IiAyIH0gfSAqLw0K IC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAiXHRkaXZ1 LmdcdCIgMSB9IH0gKi8NCkluZGV4OiBnY2MudGFyZ2V0L21pcHMvYnJhbmNo LTIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQv bWlwcy9icmFuY2gtMi5jCShyZXZpc2lvbiAxOTUzNzgpDQorKysgZ2NjLnRh cmdldC9taXBzL2JyYW5jaC0yLmMJKHdvcmtpbmcgY29weSkNCkBAIC01LDcg KzUsNyBAQA0KIA0KICNpbmNsdWRlICJicmFuY2gtaGVscGVyLmgiDQogDQot Tk9NSVBTMTYgdm9pZA0KK05PQ09NUFJFU1NJT04gdm9pZA0KIGZvbyAodm9s YXRpbGUgaW50ICp4KQ0KIHsNCiAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgq eCA9PSAwLCAxKSkNCkluZGV4OiBnY2MuYy10b3J0dXJlL2V4ZWN1dGUvaWVl ZS9pZWVlLmV4cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGdjYy5j LXRvcnR1cmUvZXhlY3V0ZS9pZWVlL2llZWUuZXhwCShyZXZpc2lvbiAxOTUz NzgpDQorKysgZ2NjLmMtdG9ydHVyZS9leGVjdXRlL2llZWUvaWVlZS5leHAJ KHdvcmtpbmcgY29weSkNCkBAIC01NCw2ICs1NCw5IEBADQogICAgICB8fCBb aXN0YXJnZXQgInNoKi0qLSoiXSB9IHRoZW4gew0KICAgbGFwcGVuZCBhZGRp dGlvbmFsX2ZsYWdzICItbWllZWUiDQogfQ0KK2lmIFtpc3RhcmdldCAibWlw cyotc2RlLSoiXSB0aGVuIHsNCisgIGxhcHBlbmQgYWRkaXRpb25hbF9mbGFn cyAiLVdsLC0tZGVmc3ltPV9fY3MzX21pcHNfZmxvYXRfdHlwZT0yIiAiLWxj czMtbWlwcy1jcDEiICItbGNzMy1taXBzLWZwZW11Ig0KK30NCiANCiAjIGxv YWQgc3VwcG9ydCBwcm9jcw0KIGxvYWRfbGliIGMtdG9ydHVyZS5leHANCklu ZGV4OiBDaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBD aGFuZ2VMb2cJKHJldmlzaW9uIDE5NTM3OCkNCisrKyBDaGFuZ2VMb2cJKHdv cmtpbmcgY29weSkNCkBAIC0xLDMgKzEsODAgQEANCisyMDEzLTAxLTIyICBD YXRoZXJpbmUgTW9vcmUgIDxjbG1AY29kZXNvdXJjZXJ5LmNvbT4NCisNCisJ KiBnY2MudGFyZ2V0L21pcHMvYnJhbmNoLTIuYzogQ2hhbmdlIE5PTUlQUzE2 IHRvIE5PQ09NUFJFU1NJT04uDQorCSogZ2NjLnRhcmdldC9taXBzL2JyYW5j aC00LmM6IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlwcy9icmFuY2gt NS5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvYnJhbmNoLTYu YzogTGlrZXdpc2UuDQorCSogZ2NjLnRhcmdldC9taXBzL2JyYW5jaC04LmM6 IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlwcy9icmFuY2gtMTAuYzog TGlrZXdpc2UuDQorCSogZ2NjLnRhcmdldC9taXBzL2JyYW5jaC0xMi5jOiBM aWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvYnJhbmNoLTEzLmM6IExp a2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlwcy9jYWxsLTEuYzogQ2hhbmdl IE5PTUlQUzE2IHRvIE5PQ09NUFJFU1NJT04uDQorCSogZ2NjLnRhcmdldC9t aXBzL2NhbGwtc2F2ZWQtMS5jOiBBZGQgYXR0cmlidXRlIE5PTUlDUk9NSVBT Lg0KKwkqIGdjYy50YXJnZXQvbWlwcy9jYWxsLXNhdmVkLTIuYzogTGlrZXdp c2UuDQorCSogZ2NjLnRhcmdldC9taXBzL2NhbGwtc2F2ZWQtMy5jOiBMaWtl d2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvZ2NjLWhhdmUtc3luYy1jb21w YXJlLWFuZC1zd2FwLTQuYzogQ29tcGlsZSB3aXRoIC1tbm8tbWljcm9taXBz Lg0KKwkqIGdjYy50YXJnZXQvbWlwcy9sYXp5LWJpbmRpbmctMS5jOiBDaGFu Z2UgTk9NSVBTMTYgdG8gTk9DT01QUkVTU0lPTi4NCisJKiBnY2MudGFyZ2V0 L21pcHMvbG9uZy1jYWxscy1wZy5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFy Z2V0L21pcHMvbG9vbmdzb24tbXVsZGl2LTEuYzogTGlrZXdpc2UuDQorCSog Z2NjLnRhcmdldC9taXBzL2xvb25nc29uLW11bGRpdi0yLmM6IExpa2V3aXNl Lg0KKwkqIGdjYy50YXJnZXQvbWlwcy9sb29uZ3NvbjNhLW11bGRpdi0xLmM6 IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlwcy9sb29uZ3NvbjNhLW11 bGRpdi0yLmM6IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlwcy9sb29u Z3Nvbi1zaGlmdC1jb3VudC10cnVuY2F0ZWQtMS5jOiBBZGQgTk9NSUNST01J UFMgYXR0cmlidXRlLg0KKwkqIGdjYy50YXJnZXQvbWlwcy9sb29uZ3Nvbi1z aW1kLmM6IENvbXBpbGUgd2l0aCAtbW5vLWNvbXByZXNzaW9uLg0KKwkqIGdj Yy50YXJnZXQvbWlwcy9taWNyb21pcHMtbHdwLXN3cC12b2xhdGlsZS5jOiBO ZXcgdGVzdC4NCisJKiBnY2MudGFyZ2V0L21pcHMvbWlwcy0zZC0xLmM6IENo YW5nZSBOT01JUFMxNiB0byBOT0NPTVBSRVNTSU9OLg0KKwkqIGdjYy50YXJn ZXQvbWlwcy9taXBzLTNkLTIuYzogTGlrZXdpc2UuDQorCSogZ2NjLnRhcmdl dC9taXBzL21pcHMtM2QtMy5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0 L21pcHMvbWlwcy0zZC00LmM6IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQv bWlwcy9taXBzLTNkLTUuYzogTGlrZXdpc2UuDQorCSogZ2NjLnRhcmdldC9t aXBzL21pcHMtM2QtNi5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21p cHMvbWlwcy0zZC05LmM6IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlw cy9taXBzLTNkLTcuYzogTGlrZXdpc2UuDQorCSogZ2NjLnRhcmdldC9taXBz L21pcHMtM2QtOC5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMv bW1jb3VudC1yYS1hZGRyZXNzLTEuYzogTGlrZXdpc2UuDQorCSogZ2NjLnRh cmdldC9taXBzL21tY291bnQtcmEtYWRkcmVzcy0zLmM6IExpa2V3aXNlLg0K KwkqIGdjYy50YXJnZXQvbWlwcy9uZWFyLWZhci0xLmMNCisJKiBnY2MudGFy Z2V0L21pcHMvbmVhci1mYXItMi5jDQorCSogZ2NjLnRhcmdldC9taXBzL25v LXNtYXJ0bWlwcy1sd3hzLmM6IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQv bWlwcy9vY3Rlb24tYmFkZHUtMS5jOiBDaGFuZ2UgTk9NSVBTMTYgdG8gTk9D T01QUkVTU0lPTi4NCisJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWJiaXQt MS5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWJi aXQtMi5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9u LWJiaXQtMy5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvb2N0 ZW9uLWNpbnMtMS5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMv b2N0ZW9uLWNpbnMtMi5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21p cHMvb2N0ZW9uLWRtdWwtMS5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0 L21pcHMvb2N0ZW9uLWRtdWwtMi5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFy Z2V0L21pcHMvb2N0ZW9uLWRtdWwtMy5jOiBMaWtld2lzZS4NCisJKiBnY2Mu dGFyZ2V0L21pcHMvb2N0ZW9uLWV4dHMtMS5jOiBMaWtld2lzZS4NCisJKiBn Y2MudGFyZ2V0L21pcHMvb2N0ZW9uLWV4dHMtMi5jOiBMaWtld2lzZS4NCisJ KiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWV4dHMtMy5jOiBMaWtld2lzZS4N CisJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWV4dHMtNS5jOiBMaWtld2lz ZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLWV4dHMtNy5jOiBMaWtl d2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLXBpcGUtMS5jOiBM aWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLXBvcC0xLmM6 IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24tcG9wLTIu YzogTGlrZXdpc2UuDQorCSogZ2NjLnRhcmdldC9taXBzL29jdGVvbi1zZXEt My5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvb2N0ZW9uLXNl cS00LmM6IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlwcy9vY3Rlb24y LWx4LTIuYzogVXNlIGF0dHJpYnV0ZSBOT01JQ1JPTUlQUy4NCisJKiBnY2Mu dGFyZ2V0L21pcHMvb2N0ZW9uMi1seC0zLmM6IExpa2V3aXNlLg0KKwkqIGdj Yy50YXJnZXQvbWlwcy9vY3Rlb24yLXBpcGUtMS5jOiBDaGFuZ2UgTk9NSVBT MTYgdG8gTk9DT01QUkVTU0lPTi4NCisJKiBnY2MudGFyZ2V0L21pcHMvcjEw ay1jYWNoZS1iYXJyaWVyLTEuYzogTGlrZXdpc2UuDQorCSogZ2NjLnRhcmdl dC9taXBzL3IxMGstY2FjaGUtYmFycmllci0yLmM6IExpa2V3aXNlLg0KKwkq IGdjYy50YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJpZXItMy5jOiBMaWtl d2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvcjEway1jYWNoZS1iYXJyaWVy LTQuYzogTGlrZXdpc2UuDQorCSogZ2NjLnRhcmdldC9taXBzL3IxMGstY2Fj aGUtYmFycmllci01LmM6IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlw cy9yMTBrLWNhY2hlLWJhcnJpZXItNi5jOiBMaWtld2lzZS4NCisJKiBnY2Mu dGFyZ2V0L21pcHMvcjEway1jYWNoZS1iYXJyaWVyLTcuYzogTGlrZXdpc2Uu DQorCSogZ2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFycmllci04LmM6 IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlwcy9yMTBrLWNhY2hlLWJh cnJpZXItOS5jOiBMaWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvcjEw ay1jYWNoZS1iYXJyaWVyLTEwLmM6IExpa2V3aXNlLg0KKwkqIGdjYy50YXJn ZXQvbWlwcy9yMTBrLWNhY2hlLWJhcnJpZXItMTEuYzogTGlrZXdpc2UuDQor CSogZ2NjLnRhcmdldC9taXBzL3IxMGstY2FjaGUtYmFycmllci0xMi5jOiBM aWtld2lzZS4NCisJKiBnY2MudGFyZ2V0L21pcHMvcjEway1jYWNoZS1iYXJy aWVyLTEzLmM6IExpa2V3aXNlLg0KKwkqIGdjYy50YXJnZXQvbWlwcy9taXBz LmV4cCAobWlwc19vcHRpb25fZ3JvdXBzKTogQWRkIC1tbWljcm9taXBzDQor CWFuZCAtbW5vLW1pY3JvbWlwcy4gUGFzcyBub21pY3JvbWlwcyBhbmQgbm9j b21wcmVzc2lvbiBhdHRyaWJ1dGVzDQorCXRvIGFsbCB0ZXN0cy4NCisJDQog MjAxMy0wMS0yMiAgRG9kamkgU2VrZXRlbGkgIDxkb2RqaUByZWRoYXQuY29t Pg0KIA0KIAlQUiBjKysvNTM2MDkNCg== --_007_FD3DCEAC5B03E9408544A1E416F11242987B49BFNAMBX01mgcmento_--