From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25492 invoked by alias); 12 Feb 2013 19:00:40 -0000 Received: (qmail 25281 invoked by uid 22791); 12 Feb 2013 19:00:37 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_50,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,TW_FN 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, 12 Feb 2013 19:00:18 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1U5L5V-00032Y-Au from Catherine_Moore@mentor.com ; Tue, 12 Feb 2013 11:00:17 -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, 12 Feb 2013 11:00:16 -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, 12 Feb 2013 11:00:02 -0800 From: "Moore, Catherine" To: Richard Sandiford CC: "gcc-patches@gcc.gnu.org" , "Rozycki, Maciej" Subject: RE: FW: [PATCH] [MIPS] microMIPS gcc support Date: Tue, 12 Feb 2013 19:00:00 -0000 Message-ID: References: <87y5mfjm4c.fsf@talisman.home> <87622noebh.fsf@talisman.default> In-Reply-To: <87622noebh.fsf@talisman.default> Content-Type: multipart/mixed; boundary="_007_FD3DCEAC5B03E9408544A1E416F11242987BA154NAMBX01mgcmento_" 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-02/txt/msg00556.txt.bz2 --_007_FD3DCEAC5B03E9408544A1E416F11242987BA154NAMBX01mgcmento_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 51146 Hi Richard, A new patch that incorporates your latest suggestions is attached. I hope = that we are converging on an implementation. I have at least three follow-on patches to submit (short delay slot identif= ication, jraddiusp, and testsuite cleanup).=20 You had requested that the -mno-jals option be changed to -mno-interlink-un= compress. I'd like to support -mno-jals (as an alias for -mno-interlink-un= compress) to accommodate folks who are already using that option. If you d= on't have objections, I will submit that as a follow-on patch as well. As usual, thanks for the thorough review. Catherine > -----Original Message----- > From: Richard Sandiford [mailto:rdsandiford@googlemail.com] > Sent: Wednesday, January 23, 2013 3:05 PM > To: Moore, Catherine > Cc: gcc-patches@gcc.gnu.org; Rozycki, Maciej > Subject: Re: FW: [PATCH] [MIPS] microMIPS gcc support >=20 > Hi Catherine, >=20 > Thanks for the update. Despite the length of this reply, there isn't any= thing > major. >=20 > Please don't change all NOMIPS16 to NOCOMPRESSION in the testsuite. > Most NOMIPSs are there because of the drastically reduced MIPS16 > instruction set. I would have expected most of them to pass with > microMIPS. >=20 > Instead, please add NOCOMPRESSION as an alternative to NOMIPS16, and > only change NOMIPS16 to NOCOMPRESSION in tests that also fail for > microMIPS. I think that should be a separate patch and isn't really a > prerequisite for the core patch going in, although obviously it would bet= ter if > the testsuite results were clean. Please explain why each > NOMIPS16 to NOCOMPRESSION change is needed; even if it's obvious to > you, it probably won't be to me. >=20 > There need to be more test casees. We should at least test: >=20 > * LWM and SWM (see gcc.target/mips/save-restore-* for possible > templates) > * MOVEP > * positive LWP and SWP tests (rather than just the volatile "not used" on= e) > * the new asm constraints >=20 > (Unlike the NOCOMPRESSION bits, these should be part of the core patch.) >=20 >=20 > As a general comment, I think it would be good to have: >=20 > /* The ISA compression flags that are currently in effect. */ #define > TARGET_COMPRESSION (target_flags & (MASK_MIPS16 | > MASK_MICROMIPS)) >=20 > I've used this in some of the comments below. >=20 > "Moore, Catherine" writes: > > Index: config/mips/linux-unwind.h > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D=3D=3D=3D=3D > > --- config/mips/linux-unwind.h (revision 195304) > > +++ config/mips/linux-unwind.h (working copy) > > @@ -52,6 +52,11 @@ > > _Unwind_Ptr new_cfa, reg_offset; > > int i; > > > > + /* microMIPS frame; the kernel does not have microMIPS signal > > + frames. */ > > + if ((_Unwind_Ptr) pc & 3) > > + return _URC_END_OF_STACK; >=20 > Should mention MIPS16 too. E.g.: >=20 > /* A MIPS16 or microMIPS frame. Signal frames always use the standard > ISA encoding. */ >=20 > > @@ -15991,18 +15995,33 @@ Generate MIPS16 code on alternating > > functions. Th for regression testing of mixed MIPS16/non-MIPS16 code > > generation, and is not intended for ordinary use in compiling user cod= e. > > > > +@item -minterlink-compressed > > +@item -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-microMIPS jumps to microMIPS code. > > +@option{-minterlink-compressed} therefore disables direct jumps unless > GCC knows that the target of the jump is not compressed. >=20 > I think I'm reediting a previous suggestion, sorry, but: >=20 > For example, code using the standard ISA encoding cannot jump directly > to MIPS16 or microMIPS code; it must either use a call or an indirect j= ump. > @option{-minterlink-compressed} therefore disables direct jumps unless > GCC > knows that the target of the jump is not compressed. >=20 > > +@item -minterlink-uncompressed > > +@item -mno-interlink-uncompressed > > +@opindex minterlink-compressed > > +@opindex mno-interlink-compressed > > +Require (do not require) that code using microMIPS instructions be > > +link-compatible with the standard (uncompressed) MIPS ISA. >=20 > The distinction between this and -minterlink-compressed seems confusing to > me, and it wasn't handled consistently in the patch (see the sibcall and = gnu- > user.h comments below). I think it would be better to fold the functiona= lity > into -minterlink-compressed, with the documentation changed to: >=20 > Require (do not require) that code using the standard (uncompressed) > MIPS ISA > be link-compatible with MIPS16 and microMIPS code, and vice versa. >=20 > > Index: config/mips/gnu-user.h > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D=3D=3D=3D=3D > > --- config/mips/gnu-user.h (revision 195351) > > +++ config/mips/gnu-user.h (working copy) > > @@ -137,3 +137,12 @@ extern const char *host_detect_local_cpu (int > > argc #define ENDFILE_SPEC \ > > GNU_USER_TARGET_MATHFILE_SPEC " " \ > > GNU_USER_TARGET_ENDFILE_SPEC > > + > > +#undef SUBTARGET_OVERRIDE_OPTIONS > > +#define SUBTARGET_OVERRIDE_OPTIONS \ > > +do { \ > > + /* microMIPS PLT entries are non-microMIPS. */ \ > > + TARGET_INTERLINK_COMPRESSED =3D 1; \ > > +} while (0) > > + > > + >=20 > Hmm, that sounds like a reason to set TARGET_INTERLINK_UNCOMPRESSED > rather than TARGET_INTERLINK_COMPRESSED. I.e. we need to avoid direct > branches from microMIPS code to standard PLTs. >=20 > But that means that microMIPS code can't even jump directly to functions > that have a micromips attribute when the call might go via a PLT. > TARGET_INTERLINK_(UN)COMPRESSED doesn't cover that case. I think > instead we need to handle it directly in mips_function_ok_for_sibcall, ke= yed > off TARGET_ABICALLS_PIC0. Specific suggestion below. >=20 > > +(define_insn "*lwp" > > + [(parallel [(set (match_operand:SI 0 "d_operand") > > + (match_operand:SI 1 "non_volatile_mem_operand")) > > + (set (match_operand:SI 2 "d_operand") > > + (match_operand:SI 3 "non_volatile_mem_operand"))])] > > + > > + "TARGET_MICROMIPS > > + && umips_load_store_pair_p (true, operands)" > > + { > > + umips_output_load_store_pair (true, operands); > > + return ""; > > + } >=20 > Very minor, sorry, but other MIPS patterns put multiline { ... } blocks in > column 0. Same for *swp, but *movep is > already OK. >=20 > > + [(set_attr "type" "load") > > + (set_attr "mode" "SI") > > + (set_attr "can_delay" "no")]) >=20 > Please add a comment saying why LWP can't go in a delay slot. > Same for SWP and MOVEP. >=20 > > +(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")]) >=20 > Is this pattern used? If not, please leave it out for now. > If it is used, please add a testcase. >=20 > > +; For movep > > +(define_peephole2 > > + [(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])" > > + [(parallel [(set (match_dup 0) (match_dup 1)) > > + (set (match_dup 2) (match_dup 3))])] > > +) >=20 > Probably not worth having movep_operand, because all the checking is done > by umips_movep_target_p. reg_or_0_operand should be OK.=20=20=20=20=20=20 The source and target register criteria are not identical. I've now rename= d the movep_operand predicate to movep_src_operand.=20 >=20 > > Index: config/mips/constraints.md > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D=3D=3D=3D=3D > > --- config/mips/constraints.md (revision 195351) > > +++ config/mips/constraints.md (working copy) > > @@ -232,6 +232,26 @@ > > "@internal" > > (match_operand 0 "low_bitmask_operand")) > > > > +(define_memory_constraint "ZC" > > + "When compiling microMIPS code, this constraing 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} a= nd > > + @code{sc}. When not compiling for microMIPS code, @code{ZC} is > > + equivalent to @code{R}." > > + (and (match_code "mem") > > + (ior (and (match_test "TARGET_MICROMIPS") > > + (match_test "umips_12bit_offset_address_p (XEXP (op, 0), > mode)")) > > + (match_test "mips_address_insns (XEXP (op, 0), mode, false)")))) >=20 > The last line should be: >=20 > (match_test "mips_address_insns (XEXP (op, 0), mode, false) =3D=3D 1") >=20 > to match "R". The documentation makes it sound like an if-then-else, but > the implementation isn't. Should it be: >=20 > (and (match_code "mem") > (if_then_else > (match_test "TARGET_MICROMIPS") > (match_test "umips_12bit_offset_address_p (XEXP (op, 0), > mode)")) > (match_test "mips_address_insns (XEXP (op, 0), mode, false) =3D=3D > 1")))) >=20 > instead? >=20 > > +(define_address_constraint "ZD" > > + "When compiling microMIPS code, this constraint matches an address > operand > > + that is formed from a base register and a 12-bit offset. These ope= rands > > + can be used for microMIPS instructions such as @code{prefetch}. Wh= en > > + not compiling for microMIPS code, @code{YC} is equivalent to > @code{p}." > > + (ior (and (match_test "TARGET_MICROMIPS") > > + (match_test "umips_12bit_offset_address_p (op, mode)")) > > + (match_test "mips_address_insns (op, mode, false)"))) >=20 > Same comments here. >=20 > > +;; 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" > > + (and (match_operand 0 "memory_operand") > > + (not (match_test "MEM_VOLATILE_P (op)")))) >=20 > I don't understand the comment. We're trying to avoid all volatile > references. >=20 > > +minterlink-uncompressed > > +Target Report Var(TARGET_INTERLINK_UNCOMPRESSED) Init(1) > Generated > > +code that is link-compatible with the standard (uncompressed) MIPS > > +ISA. >=20 > Do multi-line documentation strings work? Please check the --target-help > output to make sure. >=20 Yes, this does work. > > Index: config/mips/mips.c > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > =3D=3D=3D=3D=3D=3D=3D=3D=3D > > --- config/mips/mips.c (revision 195351) > > +++ config/mips/mips.c (working copy) > > @@ -77,6 +77,9 @@ along with GCC; see the file COPYING3. If not see > > preserve the maximum stack alignment. We therefore use a value > > of 0x7ff0 in this case. > > > > + microMIPS LWM and SWM support 12-bit offsets (from -0x800 to 0x7ff), > > + so we use a maximum of 0x7f0 for TARGET_MICROMIPS. > > + > > MIPS16e SAVE and RESTORE instructions can adjust the stack pointer = by > > up to 0x7f8 bytes and can usually save or restore all the registers > > that we need to save or restore. (Note that we can only use these > > @@ -87,7 +90,8 @@ along with GCC; see the file COPYING3. If not see > > to save and restore registers, and to allocate and deallocate the t= op > > part of the frame. */ > > #define MIPS_MAX_FIRST_STACK_STEP > \ > > - (!TARGET_MIPS16 ? 0x7ff0 \ > > + ((!TARGET_MIPS16 && !TARGET_MICROMIPS) ? 0x7ff0 > \ > > + : TARGET_MICROMIPS ? 0x7f0 > \ > > : GENERATE_MIPS16E_SAVE_RESTORE ? 0x7f8 > \ > > : TARGET_64BIT ? 0x100 : 0x400) >=20 > I'd prefer: >=20 > (TARGET_MICROMIPS ? 0x7f0 \ > : !TARGET_MIPS16 ? 0x7ff0 \ > : GENERATE_MIPS16E_SAVE_RESTORE ? 0x7f8 > \ > : TARGET_64BIT ? 0x100 : 0x400) >=20 > The comment doesn't really explain the reason for 0x7f0 rather than 0x7f8. > Is this in anticipation of future n32 and n64 support, where the stack mu= st be > 16-byte aligned? If so, that's OK, but worth mentioning. >=20 > > @@ -1167,10 +1174,11 @@ mflip_mips16_use_mips16_p (tree decl) > > const char *name; > > hashval_t hash; > > void **slot; > > + bool base_is_mips16 =3D mips_base_compression_flags & MASK_MIPS16; >=20 > Please make this: >=20 > bool base_is_mips16 =3D (mips_base_compression_flags & MASK_MIPS16) !=3D > 0; >=20 > > @@ -1257,12 +1252,57 @@ mips_use_debug_exception_return_p (tree > type) > > TYPE_ATTRIBUTES (type)) !=3D NULL; } > > > > -/* Return true if function DECL is a MIPS16 function. Return the ambi= ent > > - setting if DECL is null. */ > > +/* Return the set of compression modes that are explicitly required > > + by DECL. */ > > > > -static bool > > -mips_use_mips16_mode_p (tree decl) > > +static unsigned int > > +mips_get_compress_on_flags (tree decl) > > { > > + unsigned int flags =3D 0; > > + > > + if (!decl || !DECL_P (decl)) > > + return flags; >=20 > Is this check necessary? Same for mips_get_compress_off_flags. >=20 > > @@ -1297,29 +1337,47 @@ static void > > mips_insert_attributes (tree decl, tree *attributes) { > > const char *name; > > - bool mips16_p, nomips16_p; > > + unsigned int compression_p, nocompression_p; >=20 > No _p, since these aren't booleans now. _flags would be better. >=20 > > /* Check for "mips16" and "nomips16" attributes. */ > > - mips16_p =3D lookup_attribute ("mips16", *attributes) !=3D NULL; > > - nomips16_p =3D lookup_attribute ("nomips16", *attributes) !=3D NULL; > > + compression_p =3D mips_get_compress_on_flags (decl); > nocompression_p > > + =3D mips_get_compress_off_flags (decl); > > + > > if (TREE_CODE (decl) !=3D FUNCTION_DECL) > > { > > - if (mips16_p) > > + if (compression_p & MASK_MIPS16) > > error ("%qs attribute only applies to functions", "mips16"); > > - if (nomips16_p) > > + if (nocompression_p & MASK_MIPS16) > > error ("%qs attribute only applies to functions", "nomips16"); > > + > > + if (nocompression_p & MASK_MICROMIPS > > + && nocompression_p & MASK_MIPS16) > > + error ("%qs attribute only applies to functions", "nocompression"); >=20 > This case needs to come first, otherwise nomips16 will be reported instea= d. > Although... >=20 > > + else > > + { > > + if (compression_p & MASK_MICROMIPS) > > + error ("%qs attribute only applies to functions", "micromips"); > > + if (nocompression_p & MASK_MICROMIPS) > > + error ("%qs attribute only applies to functions", "nomicromips"); > > + } >=20 > ...I think it would be easier to have: >=20 > /* Return the attribute name associated with MASK_MIPS16 and > MASK_MICROMIPS > flags FLAGS. */ >=20 > static const char * > mips_get_compress_on_name (unsigned int flags) { > if (flags =3D=3D MASK_MIPS16) > return "mips16"; > return "micromips"; > } >=20 > /* Return the attribute that forbids MASK_MIPS16 and MASK_MICROMIPS > flags FLAGS. */ >=20 > static const char * > mips_get_compress_off_name (unsigned int flags) { > if (flags =3D=3D MASK_MIPS16) > return "nomips16"; > if (flags =3D=3D MASK_MICROMIPS) > return "nomicromips"; > return "nocompression"; > } >=20 > Then: >=20 > if (nocompression_flags) > error ("%qs attribute only applies to functions", > mips_get_compress_off_name (nocompression_flags)); > if (compression_flags) > error ("%qs attribute only applies to functions", > mips_get_compress_on_name (compression_flags)); >=20 > > } > > else > > { > > - mips16_p |=3D mips_mips16_decl_p (decl); > > - nomips16_p |=3D mips_nomips16_decl_p (decl); > > - if (mips16_p || nomips16_p) > > + if (compression_p & MASK_MIPS16 > > + && nocompression_p & (MASK_MIPS16 | MASK_MICROMIPS)) > > { > > + /* DECL cannot be simultaneously "mips16" and "nocompression". > */ > > + error ("%qE cannot have both % and " > > + "% attributes", > > + DECL_NAME (decl)); > > + } > > + else if (compression_p & MASK_MIPS16 > > + && nocompression_p & MASK_MIPS16) > > + { > > /* DECL cannot be simultaneously "mips16" and "nomips16". */ > > - if (mips16_p && nomips16_p) > > - error ("%qE cannot have both % and " > > - "% attributes", > > - DECL_NAME (decl)); > > + error ("%qE cannot have both % and " > > + "% attributes", > > + DECL_NAME (decl)); > > } > > else if (TARGET_FLIP_MIPS16 && !DECL_ARTIFICIAL (decl)) > > { > > @@ -1329,6 +1387,39 @@ mips_insert_attributes (tree decl, tree > *attribute > > name =3D mflip_mips16_use_mips16_p (decl) ? "mips16" : > "nomips16"; > > *attributes =3D tree_cons (get_identifier (name), NULL, *attributes= ); > > } > > + > > + if (compression_p & MASK_MICROMIPS > > + && nocompression_p & (MASK_MIPS16 | MASK_MICROMIPS)) > > + { > > + /* DECL cannot be simultaneously "micromips" and > "nocompression". */ > > + error ("%qE cannot have both % and " > > + "% attributes", > > + DECL_NAME (decl)); > > + } > > + else if (compression_p & MASK_MICROMIPS > > + && nocompression_p & MASK_MICROMIPS) > > + { > > + /* DECL cannot be simultaneously "micromips" and "nomicromips". > */ > > + error ("%qs cannot have both % and " > > + "% attributes", > > + IDENTIFIER_POINTER (DECL_NAME (decl))); > > + } >=20 > All the above then becomes: >=20 > if (compression_flags && nocompression_flags) > error ("%qE cannot have both %qs and %qs attributes", > DECL_NAME (decl), mips_get_compress_on_name > (compression_flags), > mips_get_compress_off_name (nocompression_flags)); >=20 > > + > > + if (compression_p & MASK_MIPS16 > > + && compression_p & MASK_MICROMIPS) > > + error ("%qs cannot have both % and % > attributes", > > + IDENTIFIER_POINTER (DECL_NAME (decl))); >=20 > %qE and no IDENTIFIER_POINTER. Please use the %qs form here too, with > "mips16" and "micromips" as error() arguments, so that one translation > covers both this case and the previous one. >=20 > > + /* If DECL is "nocompression" set the "nomips16" and > > + "nomicromips" attributes. */ > > + if (nocompression_p & MASK_MIPS16 > > + && nocompression_p & MASK_MICROMIPS) > > + { > > + name =3D "nomips16"; > > + *attributes =3D tree_cons (get_identifier (name), NULL, *attributes= ); > > + name =3D "nomicromips"; > > + *attributes =3D tree_cons (get_identifier (name), NULL, *attributes= ); > > + } >=20 > Hmm, why is this necessary? Anything that cares should be using > mips_get_compress_off_flags. >=20 > > @@ -1338,12 +1429,9 @@ static tree > > mips_merge_decl_attributes (tree olddecl, tree newdecl) { > > /* The decls' "mips16" and "nomips16" attributes must match > > exactly. */ > > - if (mips_mips16_decl_p (olddecl) !=3D mips_mips16_decl_p (newdecl)) > > + if (mips_get_compress_mode (olddecl) !=3D mips_get_compress_mode > > + (newdecl)) > > error ("%qE redeclared with conflicting %qs attributes", > > - DECL_NAME (newdecl), "mips16"); > > - if (mips_nomips16_decl_p (olddecl) !=3D mips_nomips16_decl_p > (newdecl)) > > - error ("%qE redeclared with conflicting %qs attributes", > > - DECL_NAME (newdecl), "nomips16"); > > + DECL_NAME (newdecl), "compression"); >=20 > This should be: >=20 > unsigned int diff; >=20 > diff =3D (mips_get_compress_on_flags (olddecl) > ^ mips_get_compress_on_flags (newdecl)); > if (diff) > error ("%qE redeclared with conflicting %qs attributes", > DECL_NAME (newdecl), mips_get_compress_on_name (diff)); >=20 > diff =3D (mips_get_compress_off_flags (olddecl) > ^ mips_get_compress_off_flags (newdecl)); > if (diff) > error ("%qE redeclared with conflicting %qs attributes", > DECL_NAME (newdecl), mips_get_compress_off_name (diff)); >=20 > > @@ -2300,6 +2388,20 @@ mips_address_insns (rtx x, enum > machine_mode mode, > > return 0; > > } > > > > +/* Return true if X is a legitimate 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) >=20 > Space before '(' >=20 > > + && addr.type =3D=3D ADDRESS_REG > > + && CONST_INT_P (addr.offset) > > + && UMIPS_12BIT_OFFSET_P (addr.offset)); >=20 > Isn't there a missing INTVAL here? Please check the patch to make sure > there are no compiler warnings. >=20 > > @@ -6908,6 +7017,8 @@ mips_split_call (rtx insn, rtx call_pattern) > > static bool mips_function_ok_for_sibcall (tree decl, tree exp > > ATTRIBUTE_UNUSED) { > > + unsigned int compression_mode =3D mips_get_compress_mode (decl); > > + >=20 > Might as well move this down to where it's needed, especially now that > we're C++. >=20 > > if (!TARGET_SIBCALLS) > > return false; > > > > @@ -6916,22 +7027,45 @@ mips_function_ok_for_sibcall (tree decl, tree > exp > > if (mips_interrupt_type_p (TREE_TYPE (current_function_decl))) > > return false; > > > > + if (TARGET_MICROMIPS) > > + { > > + /* We can't do a sibcall if the called function is a MIPS32 > > + function. */ >=20 > s/is a MIPS32 function/isn't microMIPS/, to avoid confusion with the MIPS= 32 > ISA. >=20 > > + if (decl > > + && (compression_mode & MASK_MICROMIPS) =3D=3D 0 > > + && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), > VOIDmode)) > > + return false; > > + > > + /* When -minterlink-compressed is in effect, assume that non-loc= ally- > binding > > + functions could be MIPS32 ones unless an attribute explicitly tells > > + us otherwise. */ > > + if (TARGET_INTERLINK_COMPRESSED > > + && decl > > + && (DECL_EXTERNAL (decl) || !targetm.binds_local_p (decl)) > > + && (compression_mode & MASK_MICROMIPS) =3D=3D 0 > > + && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), > VOIDmode)) > > + return false; >=20 > We're dealing here with branches from microMIPS to non-microMIPS, so > shouldn't this be TARGET_INTERLINK_UNCOMPRESSED? >=20 > We need to use mips_get_compress_on_flags rather than > mips_get_compress_mode for the second condition, because we can only > assume that external functions are micromips if they have been explicitly > tagged. >=20 > > + > > + /* Otherwise OK. */ > > + return true; > > + } > > + >=20 > There's too much cut-&-paste of the MIPS16 code here, so that it becomes > difficult to see what the logic actually is. With the suggested change t= o fold - > minterlink-nocompressed into -minterlink-compressed, the block above and: >=20 > > /* We can't do a sibcall if the called function is a MIPS16 function > > because there is no direct "jx" instruction equivalent to "jalx" = to > > switch the ISA mode. We only care about cases where the sibling > > and normal calls would both be direct. */ > > if (decl > > - && mips_use_mips16_mode_p (decl) > > + && ((compression_mode & (MASK_MIPS16 | MASK_MICROMIPS)) !=3D > 0) > > && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), VOIDmode)) > > return false; > > > > - /* When -minterlink-mips16 is in effect, assume that non-locally-bin= ding > > - functions could be MIPS16 ones unless an attribute explicitly tel= ls > > + /* When -minterlink-compressed is in effect, assume that non-locally- > binding > > + functions could be MIPS16 or microMIPS unless an attribute > > + explicitly tells > > us otherwise. */ > > - if (TARGET_INTERLINK_MIPS16 > > + if (TARGET_INTERLINK_COMPRESSED > > && decl > > && (DECL_EXTERNAL (decl) || !targetm.binds_local_p (decl)) > > - && !mips_nomips16_decl_p (decl) > > + && (compression_mode & MASK_MICROMIPS) =3D=3D 0 > > + && (compression_mode & MASK_MIPS16) =3D=3D 0 > > && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), VOIDmode)) > > return false; >=20 > should be something like: >=20 > /* Direct Js are only possible to functions that use the same ISA encod= ing. > There is no JX counterpart of JALX. */ > if (decl > && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), VOIDmode) > && mips_call_may_need_jalx_p (decl)) > return false; >=20 > with: >=20 > /* Return true if a call to DECL may need to use JALX. */ >=20 > static bool > mips_call_may_need_jalx_p (decl) > { > /* If the current translation unit would use a different mode for DECL, > assume that the call needs JALX. */ > if (mips_get_compress_mode (decl) !=3D TARGET_COMPRESSION) > return true; >=20 > /* mips_get_compress_mode is always accurate for locally-binding > functions in the current translation unit. */ > if (!DECL_EXTERNAL (decl) && targetm.binds_local_p (decl)) > return false; >=20 > /* PLTs use the standard encoding, so calls that might go via PLTs > must use JALX. */ > if (TARGET_COMPRESSED > && TARGET_ABICALLS_PIC0 > && DECL_EXTERNAL (decl) > && !targetm.binds_local_p (decl)) > return true; >=20 > /* When -minterlink-compressed is in effect, assume that functions > could use a different encoding mode unless an attribute explicitly > tells us otherwise. */ > if (TARGET_INTERLINK_COMPRESSED) > { > if (!TARGET_COMPRESSION && mips_get_compress_off_flags (decl) =3D=3D > 0) > return true; > if (TARGET_COMPRESSION && mips_get_compress_on_flags (decl) =3D=3D = 0) > return true; > } >=20 > return false; > } >=20 > The TARGET_ABICALLS_PIC0 case should deal with the gnu-user.h comment > above. >=20 > > @@ -7881,6 +8018,20 @@ mips_print_operand_punctuation (FILE *file, int > ch > > fputs (reg_names[STACK_POINTER_REGNUM], file); > > break; > > > > + case ':': > > + /* 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 (final_sequence =3D=3D 0) > > + putc ('c', file); > > + break; > > + > > + case '!': > > + /* 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 (final_sequence =3D=3D 0) > > + putc ('s', file); > > + break; > > + >=20 > Pasto: the second "the compact version" should be "16-bit delay slots". >=20 > > @@ -10198,7 +10349,7 @@ typedef void (*mips_save_restore_fn) (rtx, > rtx); > > stack pointer. */ > > > > static void > > -mips_save_restore_reg (enum machine_mode mode, int regno, > > +mips_save_restore_single_reg (enum machine_mode mode, int regno, > > HOST_WIDE_INT offset, mips_save_restore_fn fn) { > > rtx mem; >=20 > Please reindent the second line, although I'd prefer not to have this cha= nge; > more below. >=20 > > @@ -10208,6 +10359,23 @@ static void > > fn (gen_rtx_REG (mode, regno), mem); } > > > > +static void > > +mips_save_restore_registers (int start_reg, int end_reg, HOST_WIDE_INT > *offset, > > + mips_save_restore_fn fn, HOST_WIDE_INT > sp_offset) { > > + int regno; > > + > > + for (regno =3D start_reg; regno > end_reg; regno--) > > + if (BITSET_P (cfun->machine->frame.mask, regno - GP_REG_FIRST)) > > + { > > + /* Record the ra offset for use by mips_function_profiler. */ > > + if (regno =3D=3D RETURN_ADDR_REGNUM) > > + cfun->machine->frame.ra_fp_offset =3D *offset + sp_offset; > > + mips_save_restore_single_reg (word_mode, regno, *offset, fn); > > + *offset -=3D UNITS_PER_WORD; > > + } > > +} > > + >=20 > Function lacks a comment, although I'm not sure it's needed; see below. >=20 > > +static const unsigned int type[19] =3D { 0x00010000, 0x00030000, 0x000= 70000, > > + 0x000f0000, 0x001f0000, 0x003f0000, > > + 0x007f0000, 0x00ff0000, 0x40ff0000, > > + 0x80000000, 0x80010000, 0x80030000, > > + 0x80070000, 0x800f0000, 0x801f0000, > > + 0x803f0000, 0x807f0000, 0x80ff0000, > > + 0xc0ff0000 }; > > + > > +static const unsigned int encode[19] =3D { 1, 2, 3, 4, 5, 6, 7, 8, 9, = 16, 17, > > + 18, 19, 20, 21, 22, 23, 24, 25}; >=20 > Please give these longer names, since they have file scope. E.g.: >=20 > /* The masks of GPRs that can be saved by a microMIPS SWM and restored > by an LWM. */ > static const unsigned int umips_swm_mask[19] =3D { > 0x00010000, 0x00030000, 0x00070000, 0x000f0000, > 0x001f0000, 0x003f0000, 0x007f0000, 0x00ff0000, 0x40ff0000, > 0x80000000, 0x80010000, 0x80030000, 0x80070000, 0x800f0000, > 0x801f0000, 0x803f0000, 0x807f0000, 0x80ff0000, 0xc0ff0000 }; >=20 > /* umips_swm_encoding[I] is the instruction encoding used to represent > mask > umips_swm_mask[I]. */ > static const unsigned int umips_swm_encoding[19] =3D { > 1, 2, 3, 4, > 5, 6, 7, 8, 9, > 16, 17, 18, 19, 20, > 21, 22, 23, 24, 25 > }; >=20 > > +/* 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. */ > > + > > +static bool > > +umips_build_save_restore (mips_save_restore_fn fn, > > + HOST_WIDE_INT offset, HOST_WIDE_INT sp_offset) >=20 > The comment doesn't say what SP_OFFSET is, although with the comments > below I think the prototype should be: >=20 > /* Try to use a microMIPS LWM or SWM instruction to save or restore > as many GPRs in *MASK as possible. *OFFSET is the offset from the > stack pointer of the topmost save slot. >=20 > Remove from *MASK all registers that were handled using LWM and SWM. > Update *OFFSET so that it points to the first unused save slot. */ >=20 > static void > umips_build_save_restore (mips_save_restore_fn fn, unsigned *mask > HOST_WIDE_INT *offset) >=20 > > +{ > > + int i, num_of_reg; > > + unsigned int j; > > + rtx pattern, set, reg, mem; > > + HOST_WIDE_INT this_offset; > > + rtx this_base; > > + > > + /* LWM/SWM can only support offsets from -2048 to 2047. */ if > > + (!UMIPS_12BIT_OFFSET_P (offset)) > > + return false; >=20 > At this point OFFSET is still the offset of the top of the save area, whe= reas the > instruction operand is the address of the first saved register. > I think you need to check this later, after: >=20 > offset -=3D (UNITS_PER_WORD * (num_of_reg - 1)); >=20 > > + if (i < 8 && (cfun->machine->frame.mask & 0xff000000)) > > + mips_save_restore_registers (GP_REG_LAST, GP_REG_LAST - 8, > > + &offset, fn, sp_offset); >=20 > Any reason for handling this differently from the MIPS16 code? I prefer > passing back a mask of the unhandled registers, like it does. It would m= ake > this function a bit simpler and would also allow the function to be used = in > future with masks that don't exactly match. E.g. if we need to save and > restore registers $16-$20 + $23, we could use LWM for $16-$20 and LW for > $23. The prototype suggested above was for this. >=20 > > + /* Adjust offset for output. */ > > + num_of_reg =3D (encode[i] & 0xf) + (encode[i] >> 4); offset -=3D > > + (UNITS_PER_WORD * (num_of_reg - 1)); >=20 > Very minor, sorry, but s/num_of_reg/nregs/; >=20 > > + /* Create the final PARALLEL. */ > > + pattern =3D gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (num_of_reg)); > > + > > + this_base =3D stack_pointer_rtx; > > + this_offset =3D offset; > > + > > + /* For $16-$23, $30. */ > > + for (j =3D 0; j < (encode[i] & 0xf); j++) > > + { > > + unsigned int regno; > > + long long offset =3D this_offset + j * UNITS_PER_WORD; >=20 > s/long long/HOST_WIDE_INT/. >=20 > > + pattern =3D emit_insn (pattern); > > + if (fn =3D=3D mips_save_reg) > > + RTX_FRAME_RELATED_P(pattern) =3D 1; >=20 > Missing space before "(". >=20 > > @@ -10253,16 +10555,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; > > - for (regno =3D GP_REG_LAST; regno >=3D GP_REG_FIRST; regno--) > > - if (BITSET_P (cfun->machine->frame.mask, regno - GP_REG_FIRST)) > > - { > > - /* Record the ra offset for use by mips_function_profiler. */ > > - if (regno =3D=3D RETURN_ADDR_REGNUM) > > - cfun->machine->frame.ra_fp_offset =3D offset + sp_offset; > > - mips_save_restore_reg (word_mode, regno, offset, fn); > > - offset -=3D UNITS_PER_WORD; > > - } > > > > + if (!TARGET_MICROMIPS > > + || (TARGET_MICROMIPS > > + && !umips_build_save_restore (fn, offset, sp_offset))) > > + mips_save_restore_registers (GP_REG_LAST, GP_REG_FIRST, > > + &offset, fn, sp_offset); > > + >=20 > With the pass-back suggestion above, I think this should be: >=20 > offset =3D cfun->machine->frame.gp_sp_offset - sp_offset; > mask =3D cfun->machine->frame.mask > if (TARET_MICROMIPS16) > umips_build_save_restore (fn, &mask, &offset); > for (regno =3D GP_REG_LAST; regno >=3D GP_REG_FIRST; regno--) > if (BITSET_P (mask, regno - GP_REG_FIRST)) > { > /* Record the ra offset for use by mips_function_profiler. */ > if (regno =3D=3D RETURN_ADDR_REGNUM) > cfun->machine->frame.ra_fp_offset =3D offset + sp_offset; > mips_save_restore_reg (word_mode, regno, offset, fn); > offset -=3D UNITS_PER_WORD; > } >=20 > > @@ -11078,6 +11357,7 @@ mips_deallocate_stack (rtx base, rtx offset, > HOST_ > > return; > > > > mips_frame_barrier (); > > + > > if (offset =3D=3D const0_rtx) > > { > > emit_move_insn (stack_pointer_rtx, base); @@ -11196,9 +11476,9 > > @@ mips_expand_epilogue (bool sibcall_p) > > if (BITSET_P (mask, regno - GP_REG_FIRST)) > > { > > offset -=3D UNITS_PER_WORD; > > - mips_save_restore_reg (word_mode, regno, offset, > mips_restore_reg); > > + mips_save_restore_single_reg (word_mode, regno, > > + offset, mips_restore_reg); > > } > > - > > /* Restore the remaining registers and deallocate the final bit > > of the frame. */ > > mips_frame_barrier (); > > @@ -11211,7 +11491,6 @@ mips_expand_epilogue (bool sibcall_p) > > mips_for_each_saved_acc (frame->total_size - step2, > mips_restore_reg); > > mips_for_each_saved_gpr_and_fpr (frame->total_size - step2, > > mips_restore_reg); > > - > > if (cfun->machine->interrupt_handler_p) > > { > > HOST_WIDE_INT offset; >=20 > Please leave out these whitespace changes. I'd also prefer not to add the > _single_reg suffix to mips_save_restore_reg. >=20 > > @@ -11254,7 +11533,6 @@ mips_expand_epilogue (bool sibcall_p) > > /* Deallocate the final bit of the frame. */ > > mips_deallocate_stack (stack_pointer_rtx, GEN_INT (step2), 0); > > } > > - gcc_assert (!mips_epilogue.cfa_restores); > > > > /* Add in the __builtin_eh_return stack adjustment. We need to >=20 > Please don't remove the assert. AIUI this was for epilogues that use > JRADDIUSP, which isn't part of the initial patch. >=20 > > @@ -16211,17 +16489,19 @@ mips_output_mi_thunk (FILE *file, tree > thunk_fndec > > reload_completed =3D 0; > > } > >=20=20 > > -/* The last argument passed to mips_set_mips16_mode, or negative if the > > - function hasn't been called yet. */ > > +/* The last argument passed to mips_set_mips16_micromips_mode, > > + or negative if the function hasn't been called yet. */ > > static int was_mips16_p =3D -1; > > +static int was_micromips_p =3D -1; > > > > /* Set up the target-dependent global state so that it matches the > > current function's ISA mode. */ > > > > static void > > -mips_set_mips16_mode (int mips16_p) > > +mips_set_mips16_micromips_mode (int mips16_p, int micromips_p) > > { > > - if (mips16_p =3D=3D was_mips16_p) > > + if (mips16_p =3D=3D was_mips16_p > > + && micromips_p =3D=3D was_micromips_p) > > return; > > > > /* Restore base settings of various flags. */ >=20 > Now that we represent the mode using masks of MASK_MIPS16 and > MASK_MICROMIPS, I think it would be better to have a mask rather than > two booleans here too. > I.e.: >=20 > /* The last argument passed to mips_set_mips16_micromips_mode, > or negative if the function hasn't been called yet. */ static unsigne= d int > old_compression_mode =3D -1; >=20 > /* Set up the target-dependent global state for ISA mode > COMPRESSION_MODE, > which is either MASK_MIPS16 or MASK_MICROMIPS. */ >=20 > static void > mips_set_compression_mode (unsigned int compression_mode) >=20 > > @@ -16290,6 +16570,18 @@ static void > > /* Switch to normal (non-MIPS16) mode. */ > > target_flags &=3D ~MASK_MIPS16; > > > > + if (micromips_p) > > + { > > + /* Switch to microMIPS mode. */ > > + target_flags |=3D MASK_MICROMIPS; > > + > > + /* Avoid branch likely. */ > > + target_flags &=3D ~MASK_BRANCHLIKELY; > > + } > > + else > > + /* Switch to normal (non-microMIPS) mode. */ > > + target_flags &=3D ~MASK_MICROMIPS; > > + >=20 > With the change above, I think we should have: >=20 > target_flags &=3D ~(MASK_MIPS16 | MASK_MICROMIPS); > target_flags |=3D compression_mode; >=20 > outside of the "if" statement, with the code above becoming: >=20 > /* There are no microMIPS branch-likely instructions. */ > if (TARGET_MICROMIPS) > target_flags &=3D ~MASK_BRANCHLIKELY; >=20 > > + /* Save the base compression state and process flags as though we > > + are generating uncompressed code. */ if (TARGET_MIPS16) > > + mips_base_compression_flags |=3D MASK_MIPS16; if > > + (TARGET_MICROMIPS) > > + mips_base_compression_flags |=3D MASK_MICROMIPS; > > + > > + target_flags &=3D ~MASK_MIPS16; > > + target_flags &=3D ~MASK_MICROMIPS; >=20 > Would prefer: >=20 > mips_base_compression_flags =3D TARGET_COMPRESSION; > target_flags &=3D ~TARGET_COMPRESSION; >=20 > > @@ -17088,6 +17397,316 @@ mips_mulsidi3_gen_fn (enum rtx_code > ext_code) > > return signed_p ? gen_mulsidi3_32bit : gen_umulsidi3_32bit; > > } > > } > > + > > + > > +/* Return true if PATTERN matches the kind of instruction generated by > > + micromips_build_save_restore. SAVE_P is true for store. */ >=20 > umips_build_save_restore >=20 > > + > > +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) || MEM_VOLATILE_P (mem)) > > + return false; > > + > > + /* Check that the address is the sum of base and a possibly-zero > > + constant offset. Determine if the offset is in range. */ > > + mips_split_plus (XEXP (mem, 0), &this_base, &this_offset); > > + if (!REG_P (this_base) > > + && UMIPS_12BIT_OFFSET_P (this_offset)) > > + return false; > > + > > + if (n =3D=3D 0) > > + { > > + first_base =3D this_base; > > + first_offset =3D this_offset; > > + } >=20 > The UMIPS_12BIT_OFFSET_P check should be in the "n =3D=3D 0" arm. >=20 > > + else > > + { > > + /* Check if this_base is the same as first_base. */ > > + if (REGNO (this_base) !=3D REGNO (first_base)) > > + return false; > > + > > + /* Check if this_offset is first_offset + UNITS_PER_WORD * n. */ > > + if (this_offset !=3D first_offset + UNITS_PER_WORD * n) > > + return false; >=20 > /* Check that the save slots are consecutive. */ > if (REGNO (this_base) !=3D REGNO (first_base) > || this_offset !=3D first_offset + UNITS_PER_WORD * n) >=20 > > + /* 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; > > + } > > + } >=20 > Please instead check that the registers are in ascending order, build a m= ask, > and then check that mask against umips_swm_mask at the end. >=20 > > +} > > +/* Return true if MEM1 and MEM2 use the same base register, and the >=20 > Missing space between functions. >=20 > > + offset of MEM2 equals the offset of MEM1 plus 4. FIRST_REG is the > > + register into (from) which the contents of MEM1 will be loaded > > + (stored), depending on the value of LOAD_P. > > + SWAP_P is true when the 1st and 2nd instructions are swapped. */ > > + > > +static bool > > +umips_load_store_pair_p_1 (bool load_p, bool swap_p, rtx first_reg, > > + rtx mem1, rtx mem2) > > +{ > > + rtx base1, base2; > > + HOST_WIDE_INT offset1, offset2; > > + > > + if (!MEM_P (mem1) || !MEM_P (mem2)) > > + return false; > > + > > + /* Make sure memory is base plus offset. */ if (GET_CODE (XEXP > > + (mem1, 0)) !=3D PLUS > > + || GET_CODE (XEXP (mem2, 0)) !=3D PLUS > > + || GET_CODE (XEXP (XEXP (mem1, 0), 1)) !=3D CONST_INT > > + || GET_CODE (XEXP (XEXP (mem2, 0), 1)) !=3D CONST_INT) > > + return false; > > + > > + mips_split_plus (XEXP (mem1, 0), &base1, &offset1); > > + mips_split_plus (XEXP (mem2, 0), &base2, &offset2); >=20 > Please remove the: >=20 > /* Make sure memory is base plus offset. */ > if (GET_CODE (XEXP (mem1, 0)) !=3D PLUS > || GET_CODE (XEXP (mem2, 0)) !=3D PLUS > || GET_CODE (XEXP (XEXP (mem1, 0), 1)) !=3D CONST_INT > || GET_CODE (XEXP (XEXP (mem2, 0), 1)) !=3D CONST_INT) > return false; >=20 > part. The point of using mips_split_plus is that we want to handle > (reg) paired with (plus (reg) (const_int 4)) and (plus (reg) (const_int -= 4)) > paired with (reg). >=20 > > + if (!REG_P (base1) || !rtx_equal_p (base1, base2)) > > + return false; > > + > > + /* Avoid invalid load pair instructions. */ if (load_p && REGNO > > + (first_reg) =3D=3D REGNO (base1)) > > + return false; > > + > > + /* We must avoid this case for anti-dependence. > > + Ex: lw $3, 4($3) > > + lw $2, 0($3) > > + first_reg is $2, but the base is $3. */ if (load_p && swap_p > > + && (REGNO (first_reg) + 1) =3D=3D REGNO (base1)) > > + return false; >=20 > Redundant brackets around "REGNO (first_reg) + 1". >=20 > > + > > + if (swap_p > > + && offset2 + 4 !=3D offset1) > > + return false; > > + > > + if (offset1 + 4 !=3D offset2) > > + return false; >=20 > This always returns false for swap_p. Please add tests for both cases to > make sure that the code is triggering. E.g. you could have an inline asm= that > takes two asm register variables, one in $2 and one in $3. >=20 > > +bool > > +umips_load_store_pair_p (bool load_p, rtx *operands) >=20 > Function needs a comment. >=20 > > +{ > > + rtx reg1, reg2, mem1, mem2; > > + > > + if (load_p) > > + { > > + reg1 =3D operands[0]; > > + reg2 =3D operands[2]; > > + mem1 =3D operands[1]; > > + mem2 =3D operands[3]; > > + } > > + else > > + { > > + reg1 =3D operands[1]; > > + reg2 =3D operands[3]; > > + mem1 =3D operands[0]; > > + mem2 =3D operands[2]; > > + } > > + > > + if (REGNO (reg2) =3D=3D REGNO (reg1) + 1) > > + return umips_load_store_pair_p_1 (load_p, false, reg1, mem1, > > + mem2); > > + > > + else if (REGNO (reg1) =3D=3D REGNO (reg2) + 1) > > + return umips_load_store_pair_p_1 (load_p, true, reg2, mem1, > > + mem2); > > + > > + return false; >=20 > Excess indentation. Probably better without the "else", since this is re= ally > early-exit style. >=20 > > +/* Return the assembly instruction for microMIPS lwp or swp. > > + LOAD_P is true for load. */ > > + > > +static void > > +umips_output_load_store_pair_1 (bool load_p, rtx reg, rtx mem) { > > + HOST_WIDE_INT offset; > > + rtx base, local_ops[3]; > > + > > + gcc_assert (REG_P (reg) && MEM_P (mem)); > > + > > + mips_split_plus (XEXP (mem, 0), &base, &offset); gcc_assert (REG_P > > + (base)); > > + > > + local_ops[0] =3D reg; > > + local_ops[1] =3D gen_rtx_CONST_INT (Pmode, offset); > > + local_ops[2] =3D base; > > + if (load_p) > > + output_asm_insn ("lwp %0,%1(%2)", local_ops); > > + else > > + output_asm_insn ("swp %0,%1(%2)", local_ops); } >=20 > This ought to be equivalent to: >=20 > rtx ops[] =3D { reg, mem }; >=20 > if (load_p) > output_asm_insn ("lwp %0,%1", ops); > else > output_asm_insn ("swp %0,%1", ops); >=20 > > +/* Return true if reg1 and reg2 can be target of movep. */ > > + > > +bool > > +umips_movep_target_p (rtx reg1, rtx reg2) { > > + int regno1, regno2, pair; > > + unsigned int i; > > + static const 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 */ >=20 > Should be formatted as: >=20 > static const int match[8] =3D { > 0x00000060, /* 5, 6 */ > ... > }; >=20 > > + for (i =3D 0; i < ARRAY_SIZE (match); i++) > > + { > > + if (pair =3D=3D match[i]) > > + return true; > > + } >=20 > Redundant { ... }. >=20 > > @@ -2452,18 +2459,48 @@ typedef struct mips_args { > > all calls should use assembly macros. Otherwise, all indirect > > calls should use "jr" or "jalr"; we will arrange to restore $gp > > afterwards if necessary. Finally, we can only generate direct > > - calls for -mabicalls by temporarily switching to non-PIC mode. */ > > + calls for -mabicalls by temporarily switching to non-PIC mode. > > + > > + For microMIPS jal(r), we try to generate jal(r)s when a 16-bit > > + instruction is in the delay slot of jal(r). */ > > #define MIPS_CALL(INSN, OPERANDS, TARGET_OPNO, SIZE_OPNO) \ > > + (TARGET_MICROMIPS \ > > + ? (TARGET_USE_GOT && !TARGET_EXPLICIT_RELOCS > \ > > + ? (TARGET_INTERLINK_UNCOMPRESSED \ > > + ? "%*" INSN "%!\t%" #TARGET_OPNO "%/" \ > > + : "%*" INSN "\t%" #TARGET_OPNO "%/") \ >=20 > Is this special case really necessary? Normally when using assembly macr= os > we should leave the choice up to the assembler. On the one hand we gain > by having knowledge that the target is microMIPS, while on the other we > lose because the assembler can't fill the delay slot with a 32-bit instru= ction > from a preceding assembly macro. >=20 > Hopefully no-one really uses -mno-explicit-relocs these days anyway, so I > think this case should be handled in the same way for all modes. >=20 > I.e.: >=20 > TARGET_USE_GOT && !TARGET_EXPLICIT_RELOCS \ > ? "%*" INSN "\t%" #TARGET_OPNO "%/" \ > : REG_P (OPERANDS[TARGET_OPNO]) \ > ? (mips_get_pic_call_symbol (OPERANDS, SIZE_OPNO) \ > ? ("%*.reloc\t1f,R_MIPS_JALR,%" #SIZE_OPNO "\n" \ > "1:\t" INSN "r\t%" #TARGET_OPNO "%/") \ > : TARGET_MICROMIPS && TARGET_INTERLINK_UNCOMPRESSED \ > ? "%*" INSN "r%!\t%" #TARGET_OPNO "%/" \ > : "%*" INSN "r\t%" #TARGET_OPNO "%/") \ > : MIPS_ABSOLUTE_JUMP ("%*" INSN "\t%" #TARGET_OPNO "%/"))) >=20 > if that works. >=20 > > + > > +/* Similar to MIPS_CALL, but this is for MICROMIPS "j" to generate > > + "jrc" when nop is in the delay slot of "jr". */ > > +#define MICROMIPS_J(OPERANDS, OPNO) \ > > (TARGET_USE_GOT && !TARGET_EXPLICIT_RELOCS \ > > - ? "%*" INSN "\t%" #TARGET_OPNO "%/" \ > > - : (REG_P (OPERANDS[TARGET_OPNO]) \ > > - && mips_get_pic_call_symbol (OPERANDS, SIZE_OPNO)) \ > > - ? ("%*.reloc\t1f,R_MIPS_JALR,%" #SIZE_OPNO "\n" \ > > - "1:\t" INSN "r\t%" #TARGET_OPNO "%/") \ > > - : REG_P (OPERANDS[TARGET_OPNO]) \ > > - ? "%*" INSN "r\t%" #TARGET_OPNO "%/" \ > > - : MIPS_ABSOLUTE_JUMP ("%*" INSN "\t%" #TARGET_OPNO "%/")) > > - > > + ? "%*j\t%" #OPNO "%/" \ > > + : REG_P (OPERANDS[OPNO]) \ > > + ? "%*jr%:\t%" #OPNO \ > > + : TARGET_ABICALLS && flag_pic \ > > + ? (".option\tpic0\n\t" \ > > + "%*j\t%" #OPNO "%/\n\t" \ > > + ".option\tpic2") \ > > + : "%*j\t%" #OPNO "%/") >=20 > Looks like the last bit could/should use MIPS_ABSOLUTE_JUMP. >=20 > > @@ -2923,3 +2960,5 @@ extern GTY(()) struct target_globals > *mips16_globa > > with arguments ARGS. */ > > #define PMODE_INSN(NAME, ARGS) \ > > (Pmode =3D=3D SImode ? NAME ## _si ARGS : NAME ## _di ARGS) > > + > > +#define UMIPS_12BIT_OFFSET_P(OFFSET) (IN_RANGE (OFFSET, -2048, > 2047)) >=20 > Please put this after #define LUI_INT, to keep the range checks together. >=20 > Thanks, > Richard --_007_FD3DCEAC5B03E9408544A1E416F11242987BA154NAMBX01mgcmento_ Content-Type: application/octet-stream; name="gcc.cl" Content-Description: gcc.cl Content-Disposition: attachment; filename="gcc.cl"; size=5712; creation-date="Tue, 22 Jan 2013 20:13:16 GMT"; modification-date="Tue, 12 Feb 2013 18:34:19 GMT" Content-Transfer-Encoding: base64 Content-length: 7743 MjAxMy0wMi0xMiAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGNvZGVzb3VyY2Vy eS5jb20+DQoJICAgIE1hY2llaiBXLiBSb3p5Y2tpICA8bWFjcm9AY29kZXNv dXJjZXJ5LmNvbT4NCgkgICAgVG9tIGRlIFZyaWVzICA8dG9tQGNvZGVzb3Vy Y2VyeS5jb20+DQoJICAgIE5hdGhhbiBTaWR3ZWxsIDxuYXRoYW5AY29kZXNv dXJjZXJ5LmNvbT4NCgkgICAgSWFpbiBTYW5kb2UgIDxpYWluQGNvZGVzb3Vy Y2VyeS5jb20+DQoJICAgIE5hdGhhbiBGcm95ZCAgPGZyb3lkbmpAY29kZXNv dXJjZXJ5LmNvbT4NCgkgICAgQ2hhby15aW5nIEZ1IDxmdUBtaXBzLmNvbT4N Cg0KCSogZG9jL2V4dGVuZC50ZXhpOiAobWljcm9taXBzLCBub21pY3JvbWlw cywgbm9jb21wcmVzc2lvbik6DQoJRG9jdW1lbnQgbmV3IGZ1bmN0aW9uIGF0 dHJpYnV0ZXMuIA0KCSogZG9jL2ludm9rZS50ZXhpIChtaW50ZXJsaW5rLWNv bXByZXNzZWQsIG1taWNyb21pcHMsDQoJbWludGVybGluay11bmNvbXByZXNz ZWQsIG0xNGssIG0xNGtlLCBtMTRrZWMpOiBEb2N1bWVudCBuZXcNCglvcHRp b25zLg0KCShtaW50ZXJsaW5rLW1pcHMxNik6IFVwZGF0ZSBkb2N1bWVudGF0 aW9uLg0KCSogZG9jL21kLnRleGkgKFpDLCBaRCk6IERvY3VtZW50IG5ldyBj b25zdHJhaW50cy4NCgkqIGNvbmZpZ3VyZS5hYyAoZ2NjX2N2X2FzX21pY3Jv bWlzKTogQ2hlY2sgaWYgbGlua2VyDQoJc3VwcG9ydHMgdGhlIC5zZXQgbWlj cm9taXBzIGRpcmVjdGl2ZS4NCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4N CgkqIGNvbmZpZy5pbjogUmVnZW5lcmF0ZS4NCgkqIGNvbmZpZy9taXBzL21p cHMtdGFibGVzLm9wdDogUmVnZW5lcmF0ZS4NCgkqIGNvbmZpZy9taXBzL2du dS11c2VyLmggKFNVQlRBUkdFVF9PVkVSUklERV9PUFRJT05TKTogU2V0DQoJ VEFSR0VUX0lOVEVSTElOS19DT01QUkVTU0VELg0KCSogY29uZmlnL21pcHMv bWljcm9taXBzLm1kOiBOZXcgZmlsZS4NCgkqIGNvbnN0cmFpbnRzLm1kICha QywgQUQpOiBOZXcgY29uc3RyYWludHMuDQoJKiBjb25maWcvbWlwcy9wcmVk aWNhdGVzLm1kIChtb3ZlcF9zcmNfcmVnaXN0ZXIpOiBOZXcgcHJlZGljYXRl Lg0KCShtb3ZlcF9zcmNfb3BlcmFuZCk6IE5ldyBwcmVkaWNhdGUuDQoJKG5v bl92b2xhdGlsZV9tZW1fb3BlcmFuZCk6IE5ldyBwcmVkaWNhdGUuDQoJKiBj b25maWcvbWlwcy9taXBzLm1kIChtdWx0aW1lbSk6IE5ldyB0eXBlLg0KCShs ZW5ndGgpOiBEaWZmZXJlbnRpYXRlIGJldHdlZW4gMTctYml0IGFuZCAxOC1i aXQgYnJhbmNoIG9mZnNldHMuDQoJKE1PVkVQMSwgTU9WRVAyKTogTmV3IG1v ZGUgaXRlcmF0b3IuDQogCShtb3ZfPGxvYWQ+bCk6IFVzZSBaQyBjb25zdHJh aW50Lg0KCShtb3ZfPGxvYWQ+cik6IExpa2V3aXNlLg0KCShtb3ZfPHN0b3Jl PmwpOiBMaWtld2lzZS4NCgkobW92XzxzdG9yZT5yKTogTGlrZXdpc2UuDQoJ KCpicmFuY2hfZXF1YWxpdHk8bW9kZT5fbWljcm9taXBzKTogTmV3IGluc24u DQoJKCpicmFuY2hfZXF1YWxpdHk8bW9kZT5faW52ZXJ0ZWRfbWljcm9taXBz KTogTmV3IGluc24uDQoJKCpicmFuY2hfZXF1YWxpdHk8bW9kZT5faW52ZXJ0 ZWQpOiBEaXNhYmxlIGZvciBtaWNyb01JUFMuDQoJKCpicmFuY2hfZXF1YWxp dHk8bW9kZT4pOiBMaWtld2lzZS4NCgkoKmp1bXBfYWJzb2x1dGUpOiBtaWNy b01JUFMgdmFyaWFudC4NCgkoaW5kaXJlY3RfanVtcF88bW9kZT4pOiBMaWtl d2lzZS4NCgkodGFibGVqdW1wXzxtb2RlPik6IExpa2V3aXNlLg0KCSg8b3B0 YWI+X2ludGVybmFsKTogTGlrZXdpc2UuDQoJKHNpYmNhbGxfaW50ZXJuYWwp OiBMaWtld2lzZS4NCgkoc2liY2FsbF92YWx1ZV9pbnRlcm5hbCk6IExpa2V3 aXNlLg0KCShwcmVmZXRjaCk6IFVzZSBjb25zdHJhaW50IFpELg0KCSogY29u ZmlnL21pcHMvbWlwcy5vcHQgKG1pbnRlcmxpbmstY29tcHJlc3NlZCk6IE5l dyBvcHRpb24uDQoJKG1pbnRlcmxpbmstdW5jb21wcmVzc2VkKTogTmV3IG9w dGlvbi4NCgkobWludGVybGluay1taXBzMTYpOiBOb3cgYW4gYWxpYXMgZm9y IG1pbnRlcmxpbmstY29tcHJlc3NlZC4NCgkobW1pY3JvbWlwcyk6IE5ldyBv cHRpb24uDQoJKiBjb25maWcvbWlwcy9zeW5jLm1kIChzeW5jX2NvbXBhcmVf YW5kX3N3YXA8bW9kZT4pOiBVc2UgWlIgY29uc3RyYWludC4NCgkoY29tcGFy ZV9hbmRfc3dhcF8xMik6IExpa2V3aXNlLg0KCShzeW5jX2FkZDxtb2RlPik6 IExpa2V3aXNlLg0KCShzeW5jXzxvcHRhYj5fMTIpOiBMaWtld2lzZS4NCgko c3luY19vbGRfPG9wdGFiPl8xMik6IExpa2V3aXNlLg0KCShzeW5jX25ld188 b3B0YWI+XzEyKTogTGlrZXdpc2UuDQoJKHN5bmNfbmFuZF8xMik6IExpa2V3 aXNlLg0KCShzeW5jX29sZF9uYW5kXzEyKTogTGlrZXdpc2UuDQoJKHN5bmNf bmV3X25hbmRfMTIpOiBMaWtld2lzZS4NCgkoc3luY19zdWI8bW9kZT4pOiBM aWtld2lzZS4NCgkoc3luY19vbGRfYWRkPG1vZGU+KTogTGlrZXdpc2UuDQoJ KHN5bmNfb2xkX3N1Yjxtb2RlPik6IExpa2V3aXNlLg0KCShzeW5jX25ld19h ZGQ8bW9kZT4pOiBMaWtld2lzZS4NCgkoc3luY19uZXdfc3ViPG1vZGU+KTog TGlrZXdpc2UuDQoJKHN5bmNfPG9wdGFiPjxtb2RlPik6IExpa2V3aXNlLg0K CShzeW5jX29sZF88b3B0YWI+PG1vZGU+KTogTGlrZXdpc2UuDQoJKHN5bmNf bmV3XzxvcHRhYj48bW9kZT4pOiBMaWtld2lzZS4NCgkoc3luY19uYW5kPG1v ZGU+KTogTGlrZXdpc2UuDQoJKHN5bmNfb2xkX25hbmQ8bW9kZT4pOiBMaWtl d2lzZS4NCgkoc3luY19uZXdfbmFuZDxtb2RlPik6IExpa2V3aXNlLg0KCShz eW5jX2xvY2tfdGVzdF9hbmRfc2V0PG1vZGU+KTogTGlrZXdpc2UuDQoJKHRl c3RfYW5kX3NldF8xMik6IExpa2V3aXNlLg0KCShhdG9taWNfY29tcGFyZV9h bmRfc3dhcDxtb2RlPik6IExpa2V3aXNlLg0KCShhdG9taWNfZXhjaGFuZ2U8 bW9kZT5fbGxzYyk6IExpa2V3aXNlLg0KCShhdG9taWNfZmV0Y2hfYWRkPG1v ZGU+X2xsc2MpOiBMaWtld2lzZS4NCgkqIGNvbmZpZy9taXBzL21pcHMtY3B1 cy5kZWYgKG0xNGtjLCBtMTRrKTogTmV3IHByb2Nlc3NvcnMuDQoJKiBjb25m aWcvbWlwcy9taXBzLXByb3Rvcy5oICh1bWlwc19vdXRwdXRfc2F2ZV9yZXN0 b3JlKTogTmV3IHByb3RvdHlwZS4NCgkodW1pcHNfc2F2ZV9yZXN0b3JlX3Bh dHRlcm5fcCk6IExpa2V3aXNlLg0KCSh1bWlwc19sb2FkX3N0b3JlX3BhaXJf cCk6IExpa2V3aXNlLg0KCSh1bWlwc19vdXRwdXRfbG9hZF9zdG9yZV9wYWly KTogTGlrZXdpc2UuDQoJKHVtaXBzX21vdmVwX3RhcmdldF9wKTogTGlrZXdp c2UuDQoJKHVtaXBzXzEyYml0X29mZnNldF9hZGRyZXNzX3ApOiBMaWtld2lz ZS4NCgkqIGNvbmZpZy9taXBzL21pcHMuYyAoTUlQU19NQVhfRklSU1RfU1RF UCk6IFVwZGF0ZSBmb3IgbWljcm9NSVBTLg0KCShtaXBzX2Jhc2VfbWlwczE2 KTogUmVuYW1lIHRoaXMuLi4NCgkobWlwc19iYXNlX2NvbXByZXNzaW9uX2Zs YWdzKTogLi4udG8gdGhpcy4gVXBkYXRlIGFsbCB1c2VzLg0KCShtaXBzX2F0 dHJpYnV0ZV90YWJsZSk6IEFkZCBtaWNyb21pcHMsIG5vbWljcm9taXBzIGFu ZCBub2NvbXByZXNzaW9uLg0KCShtaXBzX21pcHMxNl9kZWNsX3ApOiBEZWxl dGUuDQoJKG1pcHNfbm9taXBzMTZfZGVjbF9wKTogRGVsZXRlLg0KIAkobWlw c19nZXRfY29tcHJlc3Nfb25fZmxhZ3MpOiBOZXcgZnVuY3Rpb24uDQoJKG1p cHNfZ2V0X2NvbXByZXNzX29mZl9mbGFncyk6IE5ldyBmdW5jdGlvbi4NCgko bWlwc19nZXRfY29tcHJlc3NfbW9kZSk6IE5ldyBmdW5jdGlvbi4NCgkobWlw c19nZXRfY29tcHJlc3Nfb25fbmFtZSk6IE5ldyBmdW5jdGlvbi4NCgkobWlw c19nZXRfY29tcHJlc3Nfb2ZmX25hbWUpOiBOZXcgZnVuY3Rpb24uDQoJKG1p cHNfZ2V0X2NvbXByZXNzaW9uX2F0dHJzKTogTmV3IGZ1bmN0aW9uLg0KCSht aXBzX2dldF9ub2NvbXByZXNzaW9uX2F0dHJzKTogTmV3IGZ1bmN0aW9uLg0K CShtaXBzX2luc2VydF9hdHRyaWJ1dGVzKTogU3VwcG9ydCBtdWx0aXBsZSBj b21wcmVzc2lvbiB0eXBlcy4NCgkobWlwc19tZXJnZV9kZWNsX2F0dHJpYnV0 ZXMpOiBMaWtld2lzZS4NCgkodW1pcHNfMTJiaXRfb2Zmc2V0X2FkZHJlc3Nf cCk6IE5ldyBmdW5jdGlvbi4NCgkobWlwc19zdGFydF9mdW5jdGlvbl9kZWZp bml0aW9uKTogRW1pdCAuc2V0IG1pY3JvbWlwcyBkaXJlY3RpdmUuDQoJKG1p cHNfY2FsbF9tYXlfbmVlZF9qYWx4X3ApOiBOZXcgZnVuY3Rpb24uDQoJKG1p cHNfZnVuY3Rpb25fb2tfZm9yX3NpYmNhbGwpOiBBZGQgbWljcm9NSVBTIHN1 cHBvcnQuDQoJKG1pcHNfcHJpbnRfb3BlcmFuZF9wdW5jdHVhdGlvbik6IFN1 cHBvcnQgc2hvcnQgZGVsYXkgc2xvdHMgYW5kDQoJY29tcGFjdCBqdW1wcy4N CgkodW1pcHNfc3dtX21hc2ssIHVtaXBzX3N3bV9lbmNvZGluZyk6IE5ldy4N CgkodW1pcHNfYnVpbGRfc2F2ZV9yZXN0b3JlKTogTmV3IGZ1bmN0aW9uLg0K CShtaXBzX2Zvcl9lYWNoX3NhdmVkX2dwcl9hbmRfZnByKTogQWRkIG1pY3Jv TUlQUyBzdXBwb3J0Lg0KCSh3YXNfbWlwczE2X3ApOiBSZW1vdmUuDQoJKG9s ZF9jb21wcmVzc2lvbl9tb2RlKTogTmV3Lg0KCShtaXBzX3NldF9jb21wcmVz c2lvbl9tb2RlKTogTmV3IGZ1bmN0aW9uLg0KCShtaXBzX3NldF9jdXJyZW50 X2Z1bmN0aW9uKTogQWRkIG1pY3JvTUlQUyBzdXBwb3J0Lg0KCShtaXBzX29w dGlvbl9vdmVycmlkZSk6IExpa2V3aXNlLg0KCSh1bWlwc19zYXZlX3Jlc3Rv cmVfcGF0dGVybl9wKTogTmV3IGZ1bmN0aW9uLg0KCSh1bWlwc19vdXRwdXRf c2F2ZV9yZXN0b3JlKTogTmV3IGZ1bmN0aW9uLg0KCSh1bWlwc19sb2FkX3N0 b3JlX3BhaXJfcF8xKTogTmV3IGZ1bmN0aW9uLg0KCSh1bWlwc19sb2FkX3N0 b3JlX3BhaXJfcCk6IE5ldyBmdW5jdGlvbi4NCgkodW1pcHNfb3V0cHV0X2xv YWRfc3RvcmVfcGFpcl8xKTogTmV3IGZ1bmN0aW9uLg0KCSh1bWlwc19vdXRw dXRfbG9hZF9zdG9yZV9wYWlyKTogTmV3IGZ1bmN0aW9uLg0KCSh1bWlwc19t b3ZlcF90YXJnZXRfcCkgTmV3IGZ1bmN0aW9uLg0KCShtaXBzX3ByZXBhcmVf cGNoX3NhdmUpOiBBZGQgbWljcm9NSVBTIHN1cHBvcnQuDQoJKiBjb25maWcv bWlwcy9taXBzLmggKFRBUkdFVF9DT01QUkVTU0lPTik6IE5ldy4NCgkoVEFS R0VUX0NQVV9DUFBfQlVJTFRJTlMpOiBVcGRhdGUgbWFjcm8NCgl0byB1c2Ug bmV3IGNvbXByZXNzaW9uIGZsYWdzIGFuZCB0byBzdXBwb3J0IG1pY3JvTUlQ Uy4NCgkoTUlQU19JU0FfTEVWRUxfU1BFQyk6IEFkZCBtMTRrIHByb2Nlc3Nv cnMuDQoJKE1JUFNfQVJDSF9GTE9BVF9TUEVDKTogTGlrZXdpc2UuDQoJKElT QV9IQVNfTFdYUyk6IEluY2x1ZGUgVEFSR0VUX01JQ1JPTUlQUy4NCgkoQVNN X1NQRUMpOiBTdXBwb3J0IG1taWNyb21pcHMgYW5kIG1uby1taWNyb21pcHMu DQoJKE0xNlNUT1JFX1JFR19QKTogTmV3IG1hY3JvLg0KCShNSVBTX0NBTEwp OiBTdXBwb3J0IFRBUkdFVF9NSUNST01JUFMuDQoJKE1JQ1JPTUlQU19KKTog TmV3IG1hY3JvLg0KCShtaXBzX2Jhc2VfbWlwczE2KTogUmVuYW1lIHRoaXMu Li4NCgkobWlwc19iYXNlX2NvbXByZXNzaW9uX2ZsYWdzKTogLi4udG8gdGhp cy4NCgkoVU1JUFNfMTJCSVRfT0ZGU0VUX1ApOiBOZXcgbWFjcm8uDQoJKiBj b25maWcvbWlwcy90LXNkZTogKE1VTFRJTElCX09QVElPTlMpOiBBZGQgbWlj cm9NSVBTLg0KCShNVUxUSUxJQl9ESVJOQU1FUyk6IExpa2V3aXNlLg0K --_007_FD3DCEAC5B03E9408544A1E416F11242987BA154NAMBX01mgcmento_ Content-Type: application/octet-stream; name="gcc.patch" Content-Description: gcc.patch Content-Disposition: attachment; filename="gcc.patch"; size=91330; creation-date="Tue, 22 Jan 2013 20:13:16 GMT"; modification-date="Tue, 12 Feb 2013 18:25:58 GMT" Content-Transfer-Encoding: base64 Content-length: 123806 SW5kZXg6IGRvYy9leHRlbmQudGV4aQ0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGRvYy9leHRlbmQudGV4aQkocmV2aXNpb24gMTk1OTAwKQ0KKysr IGRvYy9leHRlbmQudGV4aQkod29ya2luZyBjb3B5KQ0KQEAgLTMwNTMsNiAr MzA1MywyNSBAQA0KIG1heSBpbnRlcmFjdCBiYWRseSB3aXRoIHNvbWUgR0ND IGV4dGVuc2lvbnMgc3VjaCBhcyBAY29kZXtfX2J1aWx0aW5fYXBwbHl9DQog KEBweHJlZntDb25zdHJ1Y3RpbmcgQ2FsbHN9KS4NCiANCitAaXRlbSBtaWNy b21pcHMvbm9taWNyb21pcHMNCitAY2luZGV4IEBjb2Rle21pY3JvbWlwc30g YXR0cmlidXRlDQorQGNpbmRleCBAY29kZXtub21pY3JvbWlwc30gYXR0cmli dXRlDQorDQorT24gTUlQUyB0YXJnZXRzLCB5b3UgY2FuIHVzZSB0aGUgQGNv ZGV7bWljcm9taXBzfSBhbmQgQGNvZGV7bm9taWNyb21pcHN9DQorZnVuY3Rp b24gYXR0cmlidXRlcyB0byBsb2NhbGx5IHNlbGVjdCBvciB0dXJuIG9mZiBt aWNyb01JUFMgY29kZSBnZW5lcmF0aW9uLg0KK0EgZnVuY3Rpb24gd2l0aCB0 aGUgQGNvZGV7bWljcm9taXBzfSBhdHRyaWJ1dGUgaXMgZW1pdHRlZCBhcyBt aWNyb01JUFMgY29kZSwNCit3aGlsZSBtaWNyb01JUFMgY29kZSBnZW5lcmF0 aW9uIGlzIGRpc2FibGVkIGZvciBmdW5jdGlvbnMgd2l0aCB0aGUNCitAY29k ZXtub21pY3JvbWlwc30gYXR0cmlidXRlLiAgVGhlc2UgYXR0cmlidXRlcyBv dmVycmlkZSB0aGUNCitAb3B0aW9uey1tbWljcm9taXBzfSBhbmQgQG9wdGlv bnstbW5vLW1pY3JvbWlwc30gb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5l DQorKEBweHJlZntNSVBTIE9wdGlvbnN9KS4NCisNCitXaGVuIGNvbXBpbGlu ZyBmaWxlcyBjb250YWluaW5nIG1peGVkIG1pY3JvTUlQUyBhbmQgbm9uLW1p Y3JvTUlQUyBjb2RlLCB0aGUNCitwcmVwcm9jZXNzb3Igc3ltYm9sIEBjb2Rl e19fbWlwc19taWNyb21pcHN9IHJlZmxlY3RzIHRoZSBzZXR0aW5nIG9uIHRo ZQ0KK2NvbW1hbmQgbGluZSwNCitub3QgdGhhdCB3aXRoaW4gaW5kaXZpZHVh bCBmdW5jdGlvbnMuICBNaXhlZCBtaWNyb01JUFMgYW5kIG5vbi1taWNyb01J UFMgY29kZQ0KK21heSBpbnRlcmFjdCBiYWRseSB3aXRoIHNvbWUgR0NDIGV4 dGVuc2lvbnMgc3VjaCBhcyBAY29kZXtfX2J1aWx0aW5fYXBwbHl9DQorKEBw eHJlZntDb25zdHJ1Y3RpbmcgQ2FsbHN9KS4NCisNCiBAaXRlbSBtb2RlbCAo QHZhcnttb2RlbC1uYW1lfSkNCiBAY2luZGV4IGZ1bmN0aW9uIGFkZHJlc3Nh YmlsaXR5IG9uIHRoZSBNMzJSL0QNCiBAY2luZGV4IHZhcmlhYmxlIGFkZHJl c3NhYmlsaXR5IG9uIHRoZSBJQS02NA0KQEAgLTMxNTUsNiArMzE3NCwxMyBA QA0KIGV4aXQgc2VxdWVuY2VzIHN1aXRhYmxlIGZvciB1c2UgaW4gYW4gTk1J IGhhbmRsZXIgd2hlbiB0aGlzDQogYXR0cmlidXRlIGlzIHByZXNlbnQuDQog DQorQGl0ZW0gbm9jb21wcmVzc2lvbg0KK0BjaW5kZXggQGNvZGV7bm9jb21w cmVzc2lvbn0gYXR0cmlidXRlDQorT24gTUlQUyB0YXJnZXRzLCB5b3UgY2Fu IHVzZSB0aGUgQGNvZGV7bm9jb21wcmVzc2lvbn0gZnVuY3Rpb24gYXR0cmli dXRlDQordG8gbG9jYWxseSB0dXJuIG9mZiBNSVBTMTYgYW5kIG1pY3JvTUlQ UyBjb2RlIGdlbmVyYXRpb24uICBUaGlzIGF0dHJpYnV0ZQ0KK292ZXJyaWRl cyB0aGUgQG9wdGlvbnstbWlwczE2fSBhbmQgQG9wdGlvbnstbW1pY3JvbWlw c30gb3B0aW9ucyBvbiB0aGUNCitjb21tYW5kIGxpbmUgKEBweHJlZntNSVBT IE9wdGlvbnN9KS4NCisNCiBAaXRlbSBub19pbnN0cnVtZW50X2Z1bmN0aW9u DQogQGNpbmRleCBAY29kZXtub19pbnN0cnVtZW50X2Z1bmN0aW9ufSBmdW5j dGlvbiBhdHRyaWJ1dGUNCiBAb3BpbmRleCBmaW5zdHJ1bWVudC1mdW5jdGlv bnMNCkluZGV4OiBkb2MvaW52b2tlLnRleGkNCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSBkb2MvaW52b2tlLnRleGkJKHJldmlzaW9uIDE5NTkwMCkN CisrKyBkb2MvaW52b2tlLnRleGkJKHdvcmtpbmcgY29weSkNCkBAIC03NDAs NiArNzQwLDggQEANCiAtbWlwczEgIC1taXBzMiAgLW1pcHMzICAtbWlwczQg IC1taXBzMzIgIC1taXBzMzJyMiBAZ29sDQogLW1pcHM2NCAgLW1pcHM2NHIy IEBnb2wNCiAtbWlwczE2ICAtbW5vLW1pcHMxNiAgLW1mbGlwLW1pcHMxNiBA Z29sDQorLW1pbnRlcmxpbmstY29tcHJlc3NlZCAtbW5vLWludGVybGluay1j b21wcmVzc2VkIEBnb2wNCistbWludGVybGluay11bmNvbXByZXNzZWQgLW1u by1pbnRlcmxpbmstdW5jb21wcmVzc2VkIEBnb2wNCiAtbWludGVybGluay1t aXBzMTYgIC1tbm8taW50ZXJsaW5rLW1pcHMxNiBAZ29sDQogLW1hYmk9QHZh cnthYml9ICAtbWFiaWNhbGxzICAtbW5vLWFiaWNhbGxzIEBnb2wNCiAtbXNo YXJlZCAgLW1uby1zaGFyZWQgIC1tcGx0ICAtbW5vLXBsdCAgLW14Z290ICAt bW5vLXhnb3QgQGdvbA0KQEAgLTc0Nyw2ICs3NDksNyBAQA0KIC1tbm8tZmxv YXQgLW1zaW5nbGUtZmxvYXQgIC1tZG91YmxlLWZsb2F0ICBAZ29sDQogLW1k c3AgIC1tbm8tZHNwICAtbWRzcHIyICAtbW5vLWRzcHIyIEBnb2wNCiAtbW1j dSAtbW1uby1tY3UgQGdvbA0KKy1tbWljcm9taXBzIC1tbm8tbWljcm9taXBz IEBnb2wNCiAtbWZwdT1AdmFye2ZwdS10eXBlfSBAZ29sDQogLW1zbWFydG1p cHMgIC1tbm8tc21hcnRtaXBzIEBnb2wNCiAtbXBhaXJlZC1zaW5nbGUgIC1t bm8tcGFpcmVkLXNpbmdsZSAgLW1kbXggIC1tbm8tbWRteCBAZ29sDQpAQCAt MTU4ODAsNiArMTU4ODMsNyBAQA0KIEBzYW1wezEwMDRrY30sIEBzYW1wezEw MDRrZjJfMX0sIEBzYW1wezEwMDRrZjFfMX0sDQogQHNhbXB7bG9vbmdzb24y ZX0sIEBzYW1we2xvb25nc29uMmZ9LCBAc2FtcHtsb29uZ3NvbjNhfSwNCiBA c2FtcHttNGt9LA0KK0BzYW1we20xNGt9LCBAc2FtcHttMTRrZX0sIEBzYW1w e20xNGtlY30sDQogQHNhbXB7b2N0ZW9ufSwgQHNhbXB7b2N0ZW9uK30sIEBz YW1we29jdGVvbjJ9LA0KIEBzYW1we29yaW9ufSwNCiBAc2FtcHtyMjAwMH0s IEBzYW1we3IzMDAwfSwgQHNhbXB7cjM5MDB9LCBAc2FtcHtyNDAwMH0sIEBz YW1we3I0NDAwfSwNCkBAIC0xNTk5MywxOCArMTU5OTcsMzAgQEANCiBmb3Ig cmVncmVzc2lvbiB0ZXN0aW5nIG9mIG1peGVkIE1JUFMxNi9ub24tTUlQUzE2 IGNvZGUgZ2VuZXJhdGlvbiwgYW5kIGlzDQogbm90IGludGVuZGVkIGZvciBv cmRpbmFyeSB1c2UgaW4gY29tcGlsaW5nIHVzZXIgY29kZS4NCiANCitAaXRl bSAtbWludGVybGluay1jb21wcmVzc2VkDQorQGl0ZW0gLW1uby1pbnRlcmxp bmstY29tcHJlc3NlZA0KK0BpdGVtIC1taW50ZXJsaW5rLXVuY29tcHJlc3Nl ZA0KK0BpdGVtIC1tbm8taW50ZXJsaW5rLXVuY29tcHJlc3NlZA0KK0BvcGlu ZGV4IG1pbnRlcmxpbmstY29tcHJlc3NlZA0KK0BvcGluZGV4IG1uby1pbnRl cmxpbmstY29tcHJlc3NlZA0KK0BvcGluZGV4IG1pbnRlcmxpbmstY29tcHJl c3NlZA0KK0BvcGluZGV4IG1uby1pbnRlcmxpbmstY29tcHJlc3NlZA0KK1Jl cXVpcmUgKGRvIG5vdCByZXF1aXJlKSB0aGF0IGNvZGUgdXNpbmcgdGhlIHN0 YW5kYXJkICh1bmNvbXByZXNzZWQpIE1JUFMgSVNBDQorYmUgbGluay1jb21w YXRpYmxlIHdpdGggTUlQUzE2IGFuZCBtaWNyb01JUFMgY29kZSwgYW5kIHZp Y2UgdmVyc2EuDQorDQorRm9yIGV4YW1wbGUsIGNvZGUgdXNpbmcgdGhlIHN0 YW5kYXJkIElTQSBlbmNvZGluZyBjYW5ub3QganVtcCBkaXJlY3RseQ0KK3Rv IE1JUFMxNiBvciBtaWNyb01JUFMgY29kZTsgaXQgbXVzdCBlaXRoZXIgdXNl IGEgY2FsbCBvciBhbiBpbmRpcmVjdCBqdW1wLg0KK0BvcHRpb257LW1pbnRl cmxpbmstY29tcHJlc3NlZH0gdGhlcmVmb3JlIGRpc2FibGVzIGRpcmVjdCBq dW1wcyB1bmxlc3MgR0NDDQora25vd3MgdGhhdCB0aGUgdGFyZ2V0IG9mIHRo ZSBqdW1wIGlzIG5vdCBjb21wcmVzc2VkLg0KKw0KIEBpdGVtIC1taW50ZXJs aW5rLW1pcHMxNg0KIEBpdGVteCAtbW5vLWludGVybGluay1taXBzMTYNCiBA b3BpbmRleCBtaW50ZXJsaW5rLW1pcHMxNg0KIEBvcGluZGV4IG1uby1pbnRl cmxpbmstbWlwczE2DQotUmVxdWlyZSAoZG8gbm90IHJlcXVpcmUpIHRoYXQg bm9uLU1JUFMxNiBjb2RlIGJlIGxpbmstY29tcGF0aWJsZSB3aXRoDQotTUlQ UzE2IGNvZGUuDQorQWxpYXNlcyBvZiBAb3B0aW9uey1taW50ZXJsaW5rLWNv bXByZXNzZWR9IGFuZA0KK0BvcHRpb257LW1uby1pbnRlcmxpbmstY29tcHJl c3NlZH0uICBUaGVzZSBvcHRpb25zIHByZWRhdGUgdGhlIG1pY3JvTUlQUyBB U0UNCithbmQgYXJlIHJldGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJs aXR5Lg0KIA0KLUZvciBleGFtcGxlLCBub24tTUlQUzE2IGNvZGUgY2Fubm90 IGp1bXAgZGlyZWN0bHkgdG8gTUlQUzE2IGNvZGU7DQotaXQgbXVzdCBlaXRo ZXIgdXNlIGEgY2FsbCBvciBhbiBpbmRpcmVjdCBqdW1wLiAgQG9wdGlvbnst bWludGVybGluay1taXBzMTZ9DQotdGhlcmVmb3JlIGRpc2FibGVzIGRpcmVj dCBqdW1wcyB1bmxlc3MgR0NDIGtub3dzIHRoYXQgdGhlIHRhcmdldCBvZiB0 aGUNCi1qdW1wIGlzIG5vdCBNSVBTMTYuDQotDQogQGl0ZW0gLW1hYmk9MzIN CiBAaXRlbXggLW1hYmk9bzY0DQogQGl0ZW14IC1tYWJpPW4zMg0KQEAgLTE2 MjE4LDYgKzE2MjM0LDE2IEBADQogVXNlIChkbyBub3QgdXNlKSB0aGUgTUlQ Uy0zRCBBU0VALiAgQHhyZWZ7TUlQUy0zRCBCdWlsdC1pbiBGdW5jdGlvbnN9 Lg0KIFRoZSBvcHRpb24gQG9wdGlvbnstbWlwczNkfSBpbXBsaWVzIEBvcHRp b257LW1wYWlyZWQtc2luZ2xlfS4NCiANCitAaXRlbSAtbW1pY3JvbWlwcw0K K0BpdGVteCAtbW5vLW1pY3JvbWlwcw0KK0BvcGluZGV4IG1taWNyb21pcHMN CitAb3BpbmRleCBtbm8tbW1pY3JvbWlwcw0KK0dlbmVyYXRlIChkbyBub3Qg Z2VuZXJhdGUpIG1pY3JvTUlQUyBjb2RlLg0KKw0KK01pY3JvTUlQUyBjb2Rl IGdlbmVyYXRpb24gY2FuIGFsc28gYmUgY29udHJvbGxlZCBvbiBhIHBlci1m dW5jdGlvbiBiYXNpcw0KK2J5IG1lYW5zIG9mIEBjb2Rle21pY3JvbWlwc30g YW5kIEBjb2Rle25vbWljcm9taXBzfSBhdHRyaWJ1dGVzLg0KK0B4cmVme0Z1 bmN0aW9uIEF0dHJpYnV0ZXN9LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4NCisN CiBAaXRlbSAtbW10DQogQGl0ZW14IC1tbm8tbXQNCiBAb3BpbmRleCBtbXQN CkluZGV4OiBkb2MvbWQudGV4aQ0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIGRvYy9tZC50ZXhpCShyZXZpc2lvbiAxOTU5MDApDQorKysgZG9jL21k LnRleGkJKHdvcmtpbmcgY29weSkNCkBAIC0yOTE2LDYgKzI5MTYsMTkgQEAN CiANCiBAaXRlbSBSDQogQW4gYWRkcmVzcyB0aGF0IGNhbiBiZSB1c2VkIGlu IGEgbm9uLW1hY3JvIGxvYWQgb3Igc3RvcmUuDQorDQorQGl0ZW0gWkMNCitX aGVuIGNvbXBpbGluZyBtaWNyb01JUFMgY29kZSwgdGhpcyBjb25zdHJhaW5n IG1hdGNoZXMgYSBtZW1vcnkgb3BlcmFuZA0KK3dob3NlIGFkZHJlc3MgaXMg Zm9ybWVkIGZyb20gYSBiYXNlIHJlZ2lzdGVyIGFuZCBhIDEyLWJpdCBvZmZz ZXQuICBUaGVzZQ0KK29wZXJhbmRzIGNhbiBiZSB1c2VkIGZvciBtaWNyb01J UFMgaW5zdHJ1Y3Rpb25zIHN1Y2ggYXMgQGNvZGV7bGx9IGFuZA0KK0Bjb2Rl e3NjfS4gIFdoZW4gbm90IGNvbXBpbGluZyBmb3IgbWljcm9NSVBTIGNvZGUs IEBjb2Rle1pDfSBpcw0KK2VxdWl2YWxlbnQgdG8gQGNvZGV7Un0uDQorDQor QGl0ZW0gWkQNCitXaGVuIGNvbXBpbGluZyBtaWNyb01JUFMgY29kZSwgdGhp cyBjb25zdHJhaW50IG1hdGNoZXMgYW4gYWRkcmVzcyBvcGVyYW5kDQordGhh dCBpcyBmb3JtZWQgZnJvbSBhIGJhc2UgcmVnaXN0ZXIgYW5kIGEgMTItYml0 IG9mZnNldC4gIFRoZXNlIG9wZXJhbmRzDQorY2FuIGJlIHVzZWQgZm9yIG1p Y3JvTUlQUyBpbnN0cnVjdGlvbnMgc3VjaCBhcyBAY29kZXtwcmVmZXRjaH0u ICBXaGVuDQorbm90IGNvbXBpbGluZyBmb3IgbWljcm9NSVBTIGNvZGUsIEBj b2Rle1lDfSBpcyBlcXVpdmFsZW50IHRvIEBjb2Rle3B9Lg0KIEBlbmQgdGFi bGUNCiANCiBAaXRlbSBNb3Rvcm9sYSA2ODB4MC0tLUBmaWxle2NvbmZpZy9t NjhrL2NvbnN0cmFpbnRzLm1kfQ0KSW5kZXg6IGNvbmZpZ3VyZQ0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIGNvbmZpZ3VyZQkocmV2aXNpb24gMTk1 OTAwKQ0KKysrIGNvbmZpZ3VyZQkod29ya2luZyBjb3B5KQ0KQEAgLTI1NzA4 LDYgKzI1NzA4LDM3IEBADQogDQogZmkNCiANCisgICAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhc3NlbWJs ZXIgZm9yIC5taWNyb21pcHMgc3VwcG9ydCIgPiY1DQorJGFzX2VjaG9fbiAi Y2hlY2tpbmcgYXNzZW1ibGVyIGZvciAubWljcm9taXBzIHN1cHBvcnQuLi4g IiA+JjY7IH0NCitpZiB0ZXN0ICIke2djY19jdl9hc19taWNyb21pcHNfc3Vw cG9ydCtzZXR9IiA9IHNldDsgdGhlbiA6DQorICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KK2Vsc2UNCisgIGdjY19jdl9hc19taWNyb21pcHNfc3Vw cG9ydD1ubw0KKyAgaWYgdGVzdCB4JGdjY19jdl9hcyAhPSB4OyB0aGVuDQor ICAgICRhc19lY2hvICcuc2V0IG1pY3JvbWlwcycgPiBjb25mdGVzdC5zDQor ICAgIGlmIHsgYWNfdHJ5PSckZ2NjX2N2X2FzICRnY2NfY3ZfYXNfZmxhZ3Mg IC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QucyA+JjUnDQorICB7IHsgZXZhbCBl Y2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNf dHJ5XCIiOyB9ID4mNQ0KKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQ0KKyAgYWNf c3RhdHVzPSQ/DQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCisgIHRlc3QgJGFjX3N0 YXR1cyA9IDA7IH07IH0NCisgICAgdGhlbg0KKwlnY2NfY3ZfYXNfbWljcm9t aXBzX3N1cHBvcnQ9eWVzDQorICAgIGVsc2UNCisgICAgICBlY2hvICJjb25m aWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhcyIgPiY1DQorICAgICAgY2F0IGNv bmZ0ZXN0LnMgPiY1DQorICAgIGZpDQorICAgIHJtIC1mIGNvbmZ0ZXN0Lm8g Y29uZnRlc3Qucw0KKyAgZmkNCitmaQ0KK3sgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX21pY3Jv bWlwc19zdXBwb3J0IiA+JjUNCiskYXNfZWNobyAiJGdjY19jdl9hc19taWNy b21pcHNfc3VwcG9ydCIgPiY2OyB9DQoraWYgdGVzdCAkZ2NjX2N2X2FzX21p Y3JvbWlwc19zdXBwb3J0ID0geWVzOyB0aGVuDQorDQorJGFzX2VjaG8gIiNk ZWZpbmUgSEFWRV9HQVNfTUlDUk9NSVBTIDEiID4+Y29uZmRlZnMuaA0KKw0K K2ZpDQorDQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgYXNzZW1ibGVyIGZvciAuZHRwcmVsd29yZCBz dXBwb3J0IiA+JjUNCiAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIg Zm9yIC5kdHByZWx3b3JkIHN1cHBvcnQuLi4gIiA+JjY7IH0NCiBpZiB0ZXN0 ICIke2djY19jdl9hc19taXBzX2R0cHJlbHdvcmQrc2V0fSIgPSBzZXQ7IHRo ZW4gOg0KSW5kZXg6IGNvbmZpZy5pbg0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KLS0tIGNvbmZpZy5pbgkocmV2aXNpb24gMTk1OTAwKQ0KKysrIGNvbmZp Zy5pbgkod29ya2luZyBjb3B5KQ0KQEAgLTEwMzQsNiArMTAzNCwxMiBAQA0K ICNlbmRpZg0KIA0KIA0KKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBz dXBwb3J0cyB0aGUgLnNldCBtaWNyb21pcHMgZGlyZWN0aXZlICovDQorI2lm bmRlZiBVU0VEX0ZPUl9UQVJHRVQNCisjdW5kZWYgSEFWRV9HQVNfTUlDUk9N SVBTDQorI2VuZGlmDQorDQorDQogLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1i bGVyIHN1cHBvcnRzIC5uc3Vic3BhIGNvbWRhdCBvcHRpb24uICovDQogI2lm bmRlZiBVU0VEX0ZPUl9UQVJHRVQNCiAjdW5kZWYgSEFWRV9HQVNfTlNVQlNQ QV9DT01EQVQNCkluZGV4OiBjb25maWd1cmUuYWMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDE5NTkwMCkN CisrKyBjb25maWd1cmUuYWMJKHdvcmtpbmcgY29weSkNCkBAIC00MDM2LDYg KzQwMzYsMTIgQEANCiAgICAgICBbQUNfREVGSU5FKEhBVkVfQVNfR05VX0FU VFJJQlVURSwgMSwNCiAJICBbRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1 cHBvcnRzIC5nbnVfYXR0cmlidXRlLl0pXSkNCiANCisgICAgZ2NjX0dBU19D SEVDS19GRUFUVVJFKFsubWljcm9taXBzIHN1cHBvcnRdLA0KKyAgICAgIGdj Y19jdl9hc19taWNyb21pcHNfc3VwcG9ydCwsLA0KKyAgICAgIFsuc2V0IG1p Y3JvbWlwc10sLA0KKyAgICAgIFtBQ19ERUZJTkUoSEFWRV9HQVNfTUlDUk9N SVBTLCAxLA0KKyAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVy IHN1cHBvcnRzIHRoZSAuc2V0IG1pY3JvbWlwcyBkaXJlY3RpdmVdKV0pDQor DQogICAgIGdjY19HQVNfQ0hFQ0tfRkVBVFVSRShbLmR0cHJlbHdvcmQgc3Vw cG9ydF0sDQogICAgICAgZ2NjX2N2X2FzX21pcHNfZHRwcmVsd29yZCwgWzIs MTgsMF0sLA0KICAgICAgIFsuc2VjdGlvbiAudGRhdGEsImF3VCIsQHByb2di aXRzDQpJbmRleDogY29uZmlnL21pcHMvbWlwcy10YWJsZXMub3B0DQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gY29uZmlnL21pcHMvbWlwcy10YWJs ZXMub3B0CShyZXZpc2lvbiAxOTU5MDApDQorKysgY29uZmlnL21pcHMvbWlw cy10YWJsZXMub3B0CSh3b3JraW5nIGNvcHkpDQpAQCAtMzczLDI1NCArMzcz LDI2MCBAQA0KIEVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKG00 aykgVmFsdWUoMzkpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVudW0o bWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDRrZWMpIFZhbHVlKDQwKSBD YW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyht MTRrYykgVmFsdWUoNDApIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVu dW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI0a2VjKSBWYWx1ZSg0 MCkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhtMTRrKSBW YWx1ZSg0MSkgQ2Fub25pY2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBz X2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoNGtlbSkgVmFsdWUoNDEpIENhbm9u aWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDRrZWMp IFZhbHVlKDQyKSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyNGtlbSkgVmFsdWUoNDEpDQor RW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjRrZWMpIFZhbHVl KDQyKQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1 ZSkgU3RyaW5nKDRrZXApIFZhbHVlKDQyKSBDYW5vbmljYWwNCitFbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg0a2VtKSBWYWx1ZSg0MykgQ2Fu b25pY2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3Zh bHVlKSBTdHJpbmcocjRrZXApIFZhbHVlKDQyKQ0KK0VudW0obWlwc19hcmNo X29wdF92YWx1ZSkgU3RyaW5nKHI0a2VtKSBWYWx1ZSg0MykNCiANCiBFbnVt VmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg0a3Nk KSBWYWx1ZSg0MykgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3Zh bHVlKSBTdHJpbmcoNGtlcCkgVmFsdWUoNDQpIENhbm9uaWNhbA0KIA0KIEVu dW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI0 a3NkKSBWYWx1ZSg0MykNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0 cmluZyhyNGtlcCkgVmFsdWUoNDQpDQogDQogRW51bVZhbHVlDQotRW51bSht aXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRrYykgVmFsdWUoNDQpIENh bm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDRr c2QpIFZhbHVlKDQ1KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVt KG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMjRrYykgVmFsdWUoNDQp DQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjRrc2QpIFZh bHVlKDQ1KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92 YWx1ZSkgU3RyaW5nKDI0a2YyXzEpIFZhbHVlKDQ1KSBDYW5vbmljYWwNCitF bnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygyNGtjKSBWYWx1ZSg0 NikgQ2Fub25pY2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hf b3B0X3ZhbHVlKSBTdHJpbmcocjI0a2YyXzEpIFZhbHVlKDQ1KQ0KK0VudW0o bWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIyNGtjKSBWYWx1ZSg0NikN CiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0 cmluZygyNGtmKSBWYWx1ZSg0NikgQ2Fub25pY2FsDQorRW51bShtaXBzX2Fy Y2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRrZjJfMSkgVmFsdWUoNDcpIENhbm9u aWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1 ZSkgU3RyaW5nKHIyNGtmKSBWYWx1ZSg0NikNCitFbnVtKG1pcHNfYXJjaF9v cHRfdmFsdWUpIFN0cmluZyhyMjRrZjJfMSkgVmFsdWUoNDcpDQogDQogRW51 bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRr ZjFfMSkgVmFsdWUoNDcpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29w dF92YWx1ZSkgU3RyaW5nKDI0a2YpIFZhbHVlKDQ4KSBDYW5vbmljYWwNCiAN CiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmlu ZyhyMjRrZjFfMSkgVmFsdWUoNDcpDQorRW51bShtaXBzX2FyY2hfb3B0X3Zh bHVlKSBTdHJpbmcocjI0a2YpIFZhbHVlKDQ4KQ0KIA0KIEVudW1WYWx1ZQ0K LUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDI0a2Z4KSBWYWx1 ZSg0OCkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBT dHJpbmcoMjRrZjFfMSkgVmFsdWUoNDkpIENhbm9uaWNhbA0KIA0KIEVudW1W YWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIyNGtm eCkgVmFsdWUoNDgpDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcocjI0a2YxXzEpIFZhbHVlKDQ5KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0o bWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDI0a3gpIFZhbHVlKDQ5KSBD YW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygy NGtmeCkgVmFsdWUoNTApIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVu dW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIyNGt4KSBWYWx1ZSg0 OSkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMjRrZngp IFZhbHVlKDUwKQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29w dF92YWx1ZSkgU3RyaW5nKDI0a2VjKSBWYWx1ZSg1MCkgQ2Fub25pY2FsDQor RW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRreCkgVmFsdWUo NTEpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNo X29wdF92YWx1ZSkgU3RyaW5nKHIyNGtlYykgVmFsdWUoNTApDQorRW51bSht aXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjI0a3gpIFZhbHVlKDUxKQ0K IA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3Ry aW5nKDI0a2VmMl8xKSBWYWx1ZSg1MSkgQ2Fub25pY2FsDQorRW51bShtaXBz X2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMjRrZWMpIFZhbHVlKDUyKSBDYW5v bmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFs dWUpIFN0cmluZyhyMjRrZWYyXzEpIFZhbHVlKDUxKQ0KK0VudW0obWlwc19h cmNoX29wdF92YWx1ZSkgU3RyaW5nKHIyNGtlYykgVmFsdWUoNTIpDQogDQog RW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmco MjRrZWYpIFZhbHVlKDUyKSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9v cHRfdmFsdWUpIFN0cmluZygyNGtlZjJfMSkgVmFsdWUoNTMpIENhbm9uaWNh bA0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkg U3RyaW5nKHIyNGtlZikgVmFsdWUoNTIpDQorRW51bShtaXBzX2FyY2hfb3B0 X3ZhbHVlKSBTdHJpbmcocjI0a2VmMl8xKSBWYWx1ZSg1MykNCiANCiBFbnVt VmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygyNGtl ZjFfMSkgVmFsdWUoNTMpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29w dF92YWx1ZSkgU3RyaW5nKDI0a2VmKSBWYWx1ZSg1NCkgQ2Fub25pY2FsDQog DQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcocjI0a2VmMV8xKSBWYWx1ZSg1MykNCitFbnVtKG1pcHNfYXJjaF9vcHRf dmFsdWUpIFN0cmluZyhyMjRrZWYpIFZhbHVlKDU0KQ0KIA0KIEVudW1WYWx1 ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDI0a2VmeCkg VmFsdWUoNTQpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1 ZSkgU3RyaW5nKDI0a2VmMV8xKSBWYWx1ZSg1NSkgQ2Fub25pY2FsDQogDQog RW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmco cjI0a2VmeCkgVmFsdWUoNTQpDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVl KSBTdHJpbmcocjI0a2VmMV8xKSBWYWx1ZSg1NSkNCiANCiBFbnVtVmFsdWUN Ci1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygyNGtleCkgVmFs dWUoNTUpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkg U3RyaW5nKDI0a2VmeCkgVmFsdWUoNTYpIENhbm9uaWNhbA0KIA0KIEVudW1W YWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIyNGtl eCkgVmFsdWUoNTUpDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcocjI0a2VmeCkgVmFsdWUoNTYpDQogDQogRW51bVZhbHVlDQotRW51bSht aXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMzRrYykgVmFsdWUoNTYpIENh bm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDI0 a2V4KSBWYWx1ZSg1NykgQ2Fub25pY2FsDQogDQogRW51bVZhbHVlDQotRW51 bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjM0a2MpIFZhbHVlKDU2 KQ0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIyNGtleCkg VmFsdWUoNTcpDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0 X3ZhbHVlKSBTdHJpbmcoMzRrZjJfMSkgVmFsdWUoNTcpIENhbm9uaWNhbA0K K0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDM0a2MpIFZhbHVl KDU4KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJj aF9vcHRfdmFsdWUpIFN0cmluZyhyMzRrZjJfMSkgVmFsdWUoNTcpDQorRW51 bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjM0a2MpIFZhbHVlKDU4 KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkg U3RyaW5nKDM0a2YpIFZhbHVlKDU4KSBDYW5vbmljYWwNCitFbnVtKG1pcHNf YXJjaF9vcHRfdmFsdWUpIFN0cmluZygzNGtmMl8xKSBWYWx1ZSg1OSkgQ2Fu b25pY2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3Zh bHVlKSBTdHJpbmcocjM0a2YpIFZhbHVlKDU4KQ0KK0VudW0obWlwc19hcmNo X29wdF92YWx1ZSkgU3RyaW5nKHIzNGtmMl8xKSBWYWx1ZSg1OSkNCiANCiBF bnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygz NGtmMV8xKSBWYWx1ZSg1OSkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hf b3B0X3ZhbHVlKSBTdHJpbmcoMzRrZikgVmFsdWUoNjApIENhbm9uaWNhbA0K IA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3Ry aW5nKHIzNGtmMV8xKSBWYWx1ZSg1OSkNCitFbnVtKG1pcHNfYXJjaF9vcHRf dmFsdWUpIFN0cmluZyhyMzRrZikgVmFsdWUoNjApDQogDQogRW51bVZhbHVl DQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMzRrZngpIFZh bHVlKDYwKSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUp IFN0cmluZygzNGtmMV8xKSBWYWx1ZSg2MSkgQ2Fub25pY2FsDQogDQogRW51 bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjM0 a2Z4KSBWYWx1ZSg2MCkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0 cmluZyhyMzRrZjFfMSkgVmFsdWUoNjEpDQogDQogRW51bVZhbHVlDQotRW51 bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMzRreCkgVmFsdWUoNjEp IENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5n KDM0a2Z4KSBWYWx1ZSg2MikgQ2Fub25pY2FsDQogDQogRW51bVZhbHVlDQot RW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjM0a3gpIFZhbHVl KDYxKQ0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIzNGtm eCkgVmFsdWUoNjIpDQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hf b3B0X3ZhbHVlKSBTdHJpbmcoMzRrbikgVmFsdWUoNjIpIENhbm9uaWNhbA0K K0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDM0a3gpIFZhbHVl KDYzKSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJj aF9vcHRfdmFsdWUpIFN0cmluZyhyMzRrbikgVmFsdWUoNjIpDQorRW51bSht aXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjM0a3gpIFZhbHVlKDYzKQ0K IA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3Ry aW5nKDc0a2MpIFZhbHVlKDYzKSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJj aF9vcHRfdmFsdWUpIFN0cmluZygzNGtuKSBWYWx1ZSg2NCkgQ2Fub25pY2Fs DQogDQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBT dHJpbmcocjc0a2MpIFZhbHVlKDYzKQ0KK0VudW0obWlwc19hcmNoX29wdF92 YWx1ZSkgU3RyaW5nKHIzNGtuKSBWYWx1ZSg2NCkNCiANCiBFbnVtVmFsdWUN Ci1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg3NGtmMl8xKSBW YWx1ZSg2NCkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVl KSBTdHJpbmcoNzRrYykgVmFsdWUoNjUpIENhbm9uaWNhbA0KIA0KIEVudW1W YWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI3NGtm Ml8xKSBWYWx1ZSg2NCkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0 cmluZyhyNzRrYykgVmFsdWUoNjUpDQogDQogRW51bVZhbHVlDQotRW51bSht aXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoNzRrZikgVmFsdWUoNjUpIENh bm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDc0 a2YyXzEpIFZhbHVlKDY2KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1F bnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyNzRrZikgVmFsdWUo NjUpDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjc0a2Yy XzEpIFZhbHVlKDY2KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNo X29wdF92YWx1ZSkgU3RyaW5nKDc0a2YxXzEpIFZhbHVlKDY2KSBDYW5vbmlj YWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg3NGtmKSBW YWx1ZSg2NykgQ2Fub25pY2FsDQogDQogRW51bVZhbHVlDQotRW51bShtaXBz X2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcocjc0a2YxXzEpIFZhbHVlKDY2KQ0K K0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI3NGtmKSBWYWx1 ZSg2NykNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFs dWUpIFN0cmluZyg3NGtmeCkgVmFsdWUoNjcpIENhbm9uaWNhbA0KK0VudW0o bWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKDc0a2YxXzEpIFZhbHVlKDY4 KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9v cHRfdmFsdWUpIFN0cmluZyhyNzRrZngpIFZhbHVlKDY3KQ0KK0VudW0obWlw c19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI3NGtmMV8xKSBWYWx1ZSg2OCkN CiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0 cmluZyg3NGt4KSBWYWx1ZSg2OCkgQ2Fub25pY2FsDQorRW51bShtaXBzX2Fy Y2hfb3B0X3ZhbHVlKSBTdHJpbmcoNzRrZngpIFZhbHVlKDY5KSBDYW5vbmlj YWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUp IFN0cmluZyhyNzRreCkgVmFsdWUoNjgpDQorRW51bShtaXBzX2FyY2hfb3B0 X3ZhbHVlKSBTdHJpbmcocjc0a2Z4KSBWYWx1ZSg2OSkNCiANCiBFbnVtVmFs dWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg3NGtmM18y KSBWYWx1ZSg2OSkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3Zh bHVlKSBTdHJpbmcoNzRreCkgVmFsdWUoNzApIENhbm9uaWNhbA0KIA0KIEVu dW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHI3 NGtmM18yKSBWYWx1ZSg2OSkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUp IFN0cmluZyhyNzRreCkgVmFsdWUoNzApDQogDQogRW51bVZhbHVlDQotRW51 bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoMTAwNGtjKSBWYWx1ZSg3 MCkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcoNzRrZjNfMikgVmFsdWUoNzEpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1 ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHIxMDA0a2Mp IFZhbHVlKDcwKQ0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5n KHI3NGtmM18yKSBWYWx1ZSg3MSkNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygxMDA0a2YyXzEpIFZhbHVlKDcx KSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmlu ZygxMDA0a2MpIFZhbHVlKDcyKSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUN Ci1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMTAwNGtmMl8x KSBWYWx1ZSg3MSkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmlu ZyhyMTAwNGtjKSBWYWx1ZSg3MikNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygxMDA0a2YpIFZhbHVlKDcyKSBD YW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygx MDA0a2YyXzEpIFZhbHVlKDczKSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUN Ci1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMTAwNGtmKSBW YWx1ZSg3MikNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhy MTAwNGtmMl8xKSBWYWx1ZSg3MykNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygxMDA0a2YxXzEpIFZhbHVlKDcz KSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmlu ZygxMDA0a2YpIFZhbHVlKDc0KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUN Ci1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMTAwNGtmMV8x KSBWYWx1ZSg3MykNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmlu ZyhyMTAwNGtmKSBWYWx1ZSg3NCkNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg1a2MpIFZhbHVlKDc0KSBDYW5v bmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZygxMDA0 a2YxXzEpIFZhbHVlKDc1KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1F bnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyNWtjKSBWYWx1ZSg3 NCkNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyMTAwNGtm MV8xKSBWYWx1ZSg3NSkNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJj aF9vcHRfdmFsdWUpIFN0cmluZyg1a2YpIFZhbHVlKDc1KSBDYW5vbmljYWwN CitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyg1a2MpIFZhbHVl KDc2KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJj aF9vcHRfdmFsdWUpIFN0cmluZyhyNWtmKSBWYWx1ZSg3NSkNCitFbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhyNWtjKSBWYWx1ZSg3NikNCiAN CiBFbnVtVmFsdWUNCi1FbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmlu ZygyMGtjKSBWYWx1ZSg3NikgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hf b3B0X3ZhbHVlKSBTdHJpbmcoNWtmKSBWYWx1ZSg3NykgQ2Fub25pY2FsDQog DQogRW51bVZhbHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcocjIwa2MpIFZhbHVlKDc2KQ0KK0VudW0obWlwc19hcmNoX29wdF92YWx1 ZSkgU3RyaW5nKHI1a2YpIFZhbHVlKDc3KQ0KIA0KIEVudW1WYWx1ZQ0KLUVu dW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHNiMSkgVmFsdWUoNzcp IENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5n KDIwa2MpIFZhbHVlKDc4KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1F bnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhzYjFhKSBWYWx1ZSg3 OCkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcocjIwa2MpIFZhbHVlKDc4KQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlw c19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHNyNzEwMDApIFZhbHVlKDc5KSBD YW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhz YjEpIFZhbHVlKDc5KSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVt KG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhzcjcxaykgVmFsdWUoNzkp DQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoc2IxYSkgVmFs dWUoODApIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlwc19h cmNoX29wdF92YWx1ZSkgU3RyaW5nKHhscikgVmFsdWUoODApIENhbm9uaWNh bA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHNyNzEwMDAp IFZhbHVlKDgxKSBDYW5vbmljYWwNCiANCiBFbnVtVmFsdWUNCi1FbnVtKG1p cHNfYXJjaF9vcHRfdmFsdWUpIFN0cmluZyhsb29uZ3NvbjNhKSBWYWx1ZSg4 MSkgQ2Fub25pY2FsDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJp bmcoc3I3MWspIFZhbHVlKDgxKQ0KIA0KIEVudW1WYWx1ZQ0KLUVudW0obWlw c19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKG9jdGVvbikgVmFsdWUoODIpIENh bm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKHhs cikgVmFsdWUoODIpIENhbm9uaWNhbA0KIA0KIEVudW1WYWx1ZQ0KLUVudW0o bWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5nKG9jdGVvbispIFZhbHVlKDgz KSBDYW5vbmljYWwNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0cmlu Zyhsb29uZ3NvbjNhKSBWYWx1ZSg4MykgQ2Fub25pY2FsDQogDQogRW51bVZh bHVlDQotRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcob2N0ZW9u MikgVmFsdWUoODQpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29wdF92 YWx1ZSkgU3RyaW5nKG9jdGVvbikgVmFsdWUoODQpIENhbm9uaWNhbA0KIA0K IEVudW1WYWx1ZQ0KLUVudW0obWlwc19hcmNoX29wdF92YWx1ZSkgU3RyaW5n KHhscCkgVmFsdWUoODUpIENhbm9uaWNhbA0KK0VudW0obWlwc19hcmNoX29w dF92YWx1ZSkgU3RyaW5nKG9jdGVvbispIFZhbHVlKDg1KSBDYW5vbmljYWwN CiANCitFbnVtVmFsdWUNCitFbnVtKG1pcHNfYXJjaF9vcHRfdmFsdWUpIFN0 cmluZyhvY3Rlb24yKSBWYWx1ZSg4NikgQ2Fub25pY2FsDQorDQorRW51bVZh bHVlDQorRW51bShtaXBzX2FyY2hfb3B0X3ZhbHVlKSBTdHJpbmcoeGxwKSBW YWx1ZSg4NykgQ2Fub25pY2FsDQorDQpJbmRleDogY29uZmlnL21pcHMvZ251 LXVzZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGNvbmZpZy9t aXBzL2dudS11c2VyLmgJKHJldmlzaW9uIDE5NTkwMCkNCisrKyBjb25maWcv bWlwcy9nbnUtdXNlci5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMTM3LDMgKzEz NywxMiBAQA0KICNkZWZpbmUgRU5ERklMRV9TUEVDIFwNCiAgIEdOVV9VU0VS X1RBUkdFVF9NQVRIRklMRV9TUEVDICIgIiBcDQogICBHTlVfVVNFUl9UQVJH RVRfRU5ERklMRV9TUEVDDQorDQorI3VuZGVmIFNVQlRBUkdFVF9PVkVSUklE RV9PUFRJT05TDQorI2RlZmluZSBTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9O UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCitkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXA0KKyAgLyogbWljcm9NSVBTIFBMVCBlbnRyaWVzIGFyZSBu b24tbWljcm9NSVBTLiAgKi8gICAgICAgICAgICAgICBcDQorICBUQVJHRVRf SU5URVJMSU5LX1VOQ09NUFJFU1NFRCA9IDE7ICAgCQkJCVwNCit9IHdoaWxl ICgwKQ0KKw0KKw0KSW5kZXg6IGNvbmZpZy9taXBzL21pY3JvbWlwcy5tZA0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGNvbmZpZy9taXBzL21pY3Jv bWlwcy5tZAkocmV2aXNpb24gMCkNCisrKyBjb25maWcvbWlwcy9taWNyb21p cHMubWQJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDEwOCBAQA0KKyhkZWZp bmVfaW5zbiAiKnN0b3JlX3dvcmRfbXVsdGlwbGUiDQorICBbKG1hdGNoX3Bh cmFsbGVsIDAgIiINCisgICAgICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kg MSAibWVtb3J5X29wZXJhbmQiKQ0KKwkgICAgIChtYXRjaF9vcGVyYW5kOlNJ IDIgInJlZ2lzdGVyX29wZXJhbmQiKSldKV0NCisgICJUQVJHRVRfTUlDUk9N SVBTDQorICAgJiYgdW1pcHNfc2F2ZV9yZXN0b3JlX3BhdHRlcm5fcCAodHJ1 ZSwgb3BlcmFuZHNbMF0pIg0KKyAgeyByZXR1cm4gdW1pcHNfb3V0cHV0X3Nh dmVfcmVzdG9yZSAodHJ1ZSwgb3BlcmFuZHNbMF0pOyB9DQorICBbKHNldF9h dHRyICJ0eXBlIiAibXVsdGltZW0iKQ0KKyAgIChzZXRfYXR0ciAibW9kZSIg IlNJIikNCisgICAoc2V0X2F0dHIgImNhbl9kZWxheSIgIm5vIildKQ0KKw0K KyhkZWZpbmVfaW5zbiAiKmxvYWRfd29yZF9tdWx0aXBsZSINCisgIFsobWF0 Y2hfcGFyYWxsZWwgMCAiIg0KKyAgICAgICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIikNCisJICAgICAobWF0Y2hfb3Bl cmFuZDpTSSAyICJtZW1vcnlfb3BlcmFuZCIpKV0pXQ0KKyAgIlRBUkdFVF9N SUNST01JUFMNCisgICAmJiB1bWlwc19zYXZlX3Jlc3RvcmVfcGF0dGVybl9w IChmYWxzZSwgb3BlcmFuZHNbMF0pIg0KKyAgeyByZXR1cm4gdW1pcHNfb3V0 cHV0X3NhdmVfcmVzdG9yZSAoZmFsc2UsIG9wZXJhbmRzWzBdKTsgfQ0KKyAg WyhzZXRfYXR0ciAidHlwZSIgIm11bHRpbWVtIikNCisgICAoc2V0X2F0dHIg Im1vZGUiICJTSSIpDQorICAgKHNldF9hdHRyICJjYW5fZGVsYXkiICJubyIp XSkNCisNCis7IEZvciBsd3ANCisoZGVmaW5lX3BlZXBob2xlMg0KKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiZF9vcGVyYW5kIiAiIikNCisgICAg ICAgIChtYXRjaF9vcGVyYW5kOlNJIDEgIm5vbl92b2xhdGlsZV9tZW1fb3Bl cmFuZCIgIiIpKQ0KKyAgIChzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMiAiZF9v cGVyYW5kIiAiIikNCisgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgIm5v bl92b2xhdGlsZV9tZW1fb3BlcmFuZCIgIiIpKV0NCisgICJUQVJHRVRfTUlD Uk9NSVBTDQorICAgJiYgdW1pcHNfbG9hZF9zdG9yZV9wYWlyX3AgKHRydWUs IG9wZXJhbmRzKSINCisgIFsocGFyYWxsZWwgWyhzZXQgKG1hdGNoX2R1cCAw KSAobWF0Y2hfZHVwIDEpKQ0KKyAgICAgICAgICAgICAgKHNldCAobWF0Y2hf ZHVwIDIpIChtYXRjaF9kdXAgMykpXSldDQorKQ0KKw0KKzs7ICBUaGUgYmVo YXZpb3Igb2YgdGhlIGx3cCBpbnNuIGlzIHVuZGVmaW5lZCBpZiBwbGFjZWQg aW4gYSBkZWxheSBzbG90Lg0KKyhkZWZpbmVfaW5zbiAiKmx3cCINCisgIFso cGFyYWxsZWwgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAiZF9vcGVyYW5k IikNCisJCSAgIChtYXRjaF9vcGVyYW5kOlNJIDEgIm5vbl92b2xhdGlsZV9t ZW1fb3BlcmFuZCIpKQ0KKwkgICAgICAoc2V0IChtYXRjaF9vcGVyYW5kOlNJ IDIgImRfb3BlcmFuZCIpDQorCQkgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJu b25fdm9sYXRpbGVfbWVtX29wZXJhbmQiKSldKV0NCisNCisgICJUQVJHRVRf TUlDUk9NSVBTDQorICAgJiYgdW1pcHNfbG9hZF9zdG9yZV9wYWlyX3AgKHRy dWUsIG9wZXJhbmRzKSINCit7DQorICB1bWlwc19vdXRwdXRfbG9hZF9zdG9y ZV9wYWlyICh0cnVlLCBvcGVyYW5kcyk7DQorICByZXR1cm4gIiI7DQorfQ0K KyAgWyhzZXRfYXR0ciAidHlwZSIgImxvYWQiKQ0KKyAgIChzZXRfYXR0ciAi bW9kZSIgIlNJIikNCisgICAoc2V0X2F0dHIgImNhbl9kZWxheSIgIm5vIild KQ0KKw0KKzsgRm9yIHN3cA0KKyhkZWZpbmVfcGVlcGhvbGUyDQorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpTSSAwICJub25fdm9sYXRpbGVfbWVtX29wZXJh bmQiICIiKQ0KKyAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAiZF9vcGVy YW5kIiAiIikpDQorICAgKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAyICJub25f dm9sYXRpbGVfbWVtX29wZXJhbmQiICIiKQ0KKyAgICAgICAgKG1hdGNoX29w ZXJhbmQ6U0kgMyAiZF9vcGVyYW5kIiAiIikpXQ0KKyAgIlRBUkdFVF9NSUNS T01JUFMNCisgICAmJiB1bWlwc19sb2FkX3N0b3JlX3BhaXJfcCAoZmFsc2Us IG9wZXJhbmRzKSINCisgIFsocGFyYWxsZWwgWyhzZXQgKG1hdGNoX2R1cCAw KSAobWF0Y2hfZHVwIDEpKQ0KKyAgICAgICAgICAgICAgKHNldCAobWF0Y2hf ZHVwIDIpIChtYXRjaF9kdXAgMykpXSldDQorKQ0KKw0KKyhkZWZpbmVfaW5z biAiKnN3cCINCisgIFsocGFyYWxsZWwgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 U0kgMCAibm9uX3ZvbGF0aWxlX21lbV9vcGVyYW5kIikNCisJCSAgIChtYXRj aF9vcGVyYW5kOlNJIDEgImRfb3BlcmFuZCIpKQ0KKwkgICAgICAoc2V0ICht YXRjaF9vcGVyYW5kOlNJIDIgIm5vbl92b2xhdGlsZV9tZW1fb3BlcmFuZCIp DQorCQkgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJkX29wZXJhbmQiKSldKV0N CisNCisgICJUQVJHRVRfTUlDUk9NSVBTDQorICAgJiYgdW1pcHNfbG9hZF9z dG9yZV9wYWlyX3AgKGZhbHNlLCBvcGVyYW5kcykiDQorew0KKyAgdW1pcHNf b3V0cHV0X2xvYWRfc3RvcmVfcGFpciAoZmFsc2UsIG9wZXJhbmRzKTsNCisg IHJldHVybiAiIjsNCit9DQorICBbKHNldF9hdHRyICJ0eXBlIiAic3RvcmUi KQ0KKyAgIChzZXRfYXR0ciAibW9kZSIgIlNJIikNCisgICAoc2V0X2F0dHIg ImNhbl9kZWxheSIgIm5vIildKQ0KKw0KKzsgRm9yIG1vdmVwDQorKGRlZmlu ZV9wZWVwaG9sZTINCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOk1PVkVQMSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikNCisgICAgICAgIChtYXRjaF9vcGVy YW5kOk1PVkVQMSAxICJtb3ZlcF9zcmNfb3BlcmFuZCIgIiIpKQ0KKyAgIChz ZXQgKG1hdGNoX29wZXJhbmQ6TU9WRVAyIDIgInJlZ2lzdGVyX29wZXJhbmQi ICIiKQ0KKyAgICAgICAgKG1hdGNoX29wZXJhbmQ6TU9WRVAyIDMgIm1vdmVw X3NyY19vcGVyYW5kIiAiIikpXQ0KKyAgIlRBUkdFVF9NSUNST01JUFMNCisg ICAmJiB1bWlwc19tb3ZlcF90YXJnZXRfcCAob3BlcmFuZHNbMF0sIG9wZXJh bmRzWzJdKSINCisgIFsocGFyYWxsZWwgWyhzZXQgKG1hdGNoX2R1cCAwKSAo bWF0Y2hfZHVwIDEpKQ0KKyAgICAgICAgICAgICAgKHNldCAobWF0Y2hfZHVw IDIpIChtYXRjaF9kdXAgMykpXSldDQorKQ0KKw0KKzs7ICBUaGUgYmVoYXZp b3Igb2YgdGhlIG1vdmVwIGluc24gaXMgdW5kZWZpbmVkIGlmIHBsYWNlZCBp biBhIGRlbGF5IHNsb3QuDQorKGRlZmluZV9pbnNuICIqbW92ZXA8TU9WRVAx Om1vZGU+PE1PVkVQMjptb2RlPiINCisgIFsocGFyYWxsZWwgWyhzZXQgKG1h dGNoX29wZXJhbmQ6TU9WRVAxIDAgInJlZ2lzdGVyX29wZXJhbmQiKQ0KKwkJ ICAgKG1hdGNoX29wZXJhbmQ6TU9WRVAxIDEgIm1vdmVwX3NyY19vcGVyYW5k IikpDQorCSAgICAgIChzZXQgKG1hdGNoX29wZXJhbmQ6TU9WRVAyIDIgInJl Z2lzdGVyX29wZXJhbmQiKQ0KKwkJICAgKG1hdGNoX29wZXJhbmQ6TU9WRVAy IDMgIm1vdmVwX3NyY19vcGVyYW5kIikpXSldDQorICAiVEFSR0VUX01JQ1JP TUlQUw0KKyAgICYmIHVtaXBzX21vdmVwX3RhcmdldF9wIChvcGVyYW5kc1sw XSwgb3BlcmFuZHNbMl0pIg0KK3sNCisgIGlmIChSRUdOTyAob3BlcmFuZHNb MF0pIDwgUkVHTk8gKG9wZXJhbmRzWzJdKSkNCisgICAgcmV0dXJuICJtb3Zl cFx0JTAsJTIsJXoxLCV6MyI7DQorICBlbHNlDQorICAgIHJldHVybiAibW92 ZXBcdCUyLCUwLCV6MywlejEiOw0KK30NCisgIFsoc2V0X2F0dHIgInR5cGUi ICJtb3ZlIikNCisgICAoc2V0X2F0dHIgIm1vZGUiICI8TU9ERT4iKQ0KKyAg IChzZXRfYXR0ciAiY2FuX2RlbGF5IiAibm8iKV0pDQpJbmRleDogY29uZmln L21pcHMvY29uc3RyYWludHMubWQNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBjb25maWcvbWlwcy9jb25zdHJhaW50cy5tZAkocmV2aXNpb24gMTk1 OTAwKQ0KKysrIGNvbmZpZy9taXBzL2NvbnN0cmFpbnRzLm1kCSh3b3JraW5n IGNvcHkpDQpAQCAtMjMyLDYgKzIzMiwyNiBAQA0KICAgICJAaW50ZXJuYWwi DQogICAgKG1hdGNoX29wZXJhbmQgMCAibG93X2JpdG1hc2tfb3BlcmFuZCIp KQ0KIA0KKyhkZWZpbmVfbWVtb3J5X2NvbnN0cmFpbnQgIlpDIg0KKyAgIldo ZW4gY29tcGlsaW5nIG1pY3JvTUlQUyBjb2RlLCB0aGlzIGNvbnN0cmFpbmcg bWF0Y2hlcyBhIG1lbW9yeSBvcGVyYW5kDQorICAgd2hvc2UgYWRkcmVzcyBp cyBmb3JtZWQgZnJvbSBhIGJhc2UgcmVnaXN0ZXIgYW5kIGEgMTItYml0IG9m ZnNldC4gIFRoZXNlDQorICAgb3BlcmFuZHMgY2FuIGJlIHVzZWQgZm9yIG1p Y3JvTUlQUyBpbnN0cnVjdGlvbnMgc3VjaCBhcyBAY29kZXtsbH0gYW5kDQor ICAgQGNvZGV7c2N9LiAgV2hlbiBub3QgY29tcGlsaW5nIGZvciBtaWNyb01J UFMgY29kZSwgQGNvZGV7WkN9IGlzDQorICAgZXF1aXZhbGVudCB0byBAY29k ZXtSfS4iDQorICAoYW5kIChtYXRjaF9jb2RlICJtZW0iKQ0KKyAgICAgICAo aW9yIChhbmQgKG1hdGNoX3Rlc3QgIlRBUkdFVF9NSUNST01JUFMiKQ0KKwkJ IChtYXRjaF90ZXN0ICJ1bWlwc18xMmJpdF9vZmZzZXRfYWRkcmVzc19wIChY RVhQIChvcCwgMCksIG1vZGUpIikpDQorCSAgICAobWF0Y2hfdGVzdCAibWlw c19hZGRyZXNzX2luc25zIChYRVhQIChvcCwgMCksIG1vZGUsIGZhbHNlKSIp KSkpDQorDQorKGRlZmluZV9hZGRyZXNzX2NvbnN0cmFpbnQgIlpEIg0KKyAg IldoZW4gY29tcGlsaW5nIG1pY3JvTUlQUyBjb2RlLCB0aGlzIGNvbnN0cmFp bnQgbWF0Y2hlcyBhbiBhZGRyZXNzIG9wZXJhbmQNCisgICB0aGF0IGlzIGZv cm1lZCBmcm9tIGEgYmFzZSByZWdpc3RlciBhbmQgYSAxMi1iaXQgb2Zmc2V0 LiAgVGhlc2Ugb3BlcmFuZHMNCisgICBjYW4gYmUgdXNlZCBmb3IgbWljcm9N SVBTIGluc3RydWN0aW9ucyBzdWNoIGFzIEBjb2Rle3ByZWZldGNofS4gIFdo ZW4NCisgICBub3QgY29tcGlsaW5nIGZvciBtaWNyb01JUFMgY29kZSwgQGNv ZGV7WUN9IGlzIGVxdWl2YWxlbnQgdG8gQGNvZGV7cH0uIg0KKyAgIChpb3Ig KGFuZCAobWF0Y2hfdGVzdCAiVEFSR0VUX01JQ1JPTUlQUyIpDQorCSAgICAg KG1hdGNoX3Rlc3QgInVtaXBzXzEyYml0X29mZnNldF9hZGRyZXNzX3AgKG9w LCBtb2RlKSIpKQ0KKwkobWF0Y2hfdGVzdCAibWlwc19hZGRyZXNzX2luc25z IChvcCwgbW9kZSwgZmFsc2UpIikpKQ0KKw0KIChkZWZpbmVfbWVtb3J5X2Nv bnN0cmFpbnQgIlpSIg0KICAiQGludGVybmFsDQogICBBbiBhZGRyZXNzIHZh bGlkIGZvciBsb2FkaW5nL3N0b3JpbmcgcmVnaXN0ZXIgZXhjbHVzaXZlIg0K SW5kZXg6IGNvbmZpZy9taXBzL3ByZWRpY2F0ZXMubWQNCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBjb25maWcvbWlwcy9wcmVkaWNhdGVzLm1kCShy ZXZpc2lvbiAxOTU5MDApDQorKysgY29uZmlnL21pcHMvcHJlZGljYXRlcy5t ZAkod29ya2luZyBjb3B5KQ0KQEAgLTEyMiw2ICsxMjIsMTUgQEANCiAJCSAg ICA/IE0xNl9SRUdfUCAoUkVHTk8gKG9wKSkNCiAJCSAgICA6IEdQX1JFR19Q IChSRUdOTyAob3ApKSIpKSkNCiANCisoZGVmaW5lX3ByZWRpY2F0ZSAibW92 ZXBfc3JjX3JlZ2lzdGVyIg0KKyAgKGFuZCAobWF0Y2hfY29kZSAicmVnIikN CisgICAgICAgKGlvciAobWF0Y2hfdGVzdCAoIklOX1JBTkdFIChSRUdOTyAo b3ApLCAwLCAzKSIpKQ0KKwkgICAgKG1hdGNoX3Rlc3QgKCJJTl9SQU5HRSAo UkVHTk8gKG9wKSwgMTYsIDIwKSIpKSkpKQ0KKw0KKyhkZWZpbmVfcHJlZGlj YXRlICJtb3ZlcF9zcmNfb3BlcmFuZCINCisgIChpb3IgKG1hdGNoX29wZXJh bmQgMCAiY29uc3RfMF9vcGVyYW5kIikNCisgICAgICAgKG1hdGNoX29wZXJh bmQgMCAibW92ZXBfc3JjX3JlZ2lzdGVyIikpKQ0KKw0KIChkZWZpbmVfcHJl ZGljYXRlICJsb19vcGVyYW5kIg0KICAgKGFuZCAobWF0Y2hfY29kZSAicmVn IikNCiAgICAgICAgKG1hdGNoX3Rlc3QgIlJFR05PIChvcCkgPT0gTE9fUkVH TlVNIikpKQ0KQEAgLTM3MSwzICszODAsOCBAQA0KIChkZWZpbmVfcHJlZGlj YXRlICJtZW1fbm9vZnNfb3BlcmFuZCINCiAgIChhbmQgKG1hdGNoX2NvZGUg Im1lbSIpDQogICAgICAgIChtYXRjaF9jb2RlICJyZWciICIwIikpKQ0KKw0K Kzs7IFJldHVybiAxIGlmIHRoZSBvcGVyYW5kIGlzIGluIG5vbi12b2xhdGls ZSBtZW1vcnkuDQorKGRlZmluZV9wcmVkaWNhdGUgIm5vbl92b2xhdGlsZV9t ZW1fb3BlcmFuZCINCisgIChhbmQgKG1hdGNoX29wZXJhbmQgMCAibWVtb3J5 X29wZXJhbmQiKQ0KKyAgICAgICAobm90IChtYXRjaF90ZXN0ICJNRU1fVk9M QVRJTEVfUCAob3ApIikpKSkNCkluZGV4OiBjb25maWcvbWlwcy9taXBzLm1k DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gY29uZmlnL21pcHMvbWlw cy5tZAkocmV2aXNpb24gMTk1OTAwKQ0KKysrIGNvbmZpZy9taXBzL21pcHMu bWQJKHdvcmtpbmcgY29weSkNCkBAIC0zNDIsMTMgKzM0MiwxNCBAQA0KIDs7 IHN5bmNsb29wCW1lbW9yeSBhdG9taWMgb3BlcmF0aW9uIGltcGxlbWVudGVk IGFzIGEgc3luYyBsb29wDQogOzsgbm9wCQlubyBvcGVyYXRpb24NCiA7OyBn aG9zdAlhbiBpbnN0cnVjdGlvbiB0aGF0IHByb2R1Y2VzIG5vIHJlYWwgY29k ZQ0KKzs7IG11bHRpbWVtCW1pY3JvTUlQUyBtdWx0aXdvcmQgbG9hZCBhbmQg c3RvcmUNCiAoZGVmaW5lX2F0dHIgInR5cGUiDQogICAidW5rbm93bixicmFu Y2gsanVtcCxjYWxsLGxvYWQsZnBsb2FkLGZwaWR4bG9hZCxzdG9yZSxmcHN0 b3JlLGZwaWR4c3RvcmUsDQogICAgcHJlZmV0Y2gscHJlZmV0Y2h4LGNvbmRt b3ZlLG10YyxtZmMsbXRoaSxtdGxvLG1maGksbWZsbyxjb25zdCxhcml0aCxs b2dpY2FsLA0KICAgIHNoaWZ0LHNsdCxzaWduZXh0LGNseixwb3AsdHJhcCxp bXVsLGltdWwzLGltdWwzbmMsaW1hZGQsaWRpdixpZGl2Myxtb3ZlLA0KICAg IGZtb3ZlLGZhZGQsZm11bCxmbWFkZCxmZGl2LGZyZGl2LGZyZGl2MSxmcmRp djIsZmFicyxmbmVnLGZjbXAsZmN2dCxmc3FydCwNCiAgICBmcnNxcnQsZnJz cXJ0MSxmcnNxcnQyLGRzcG1hYyxkc3BtYWNzYXQsYWNjZXh0LGFjY21vZCxk c3BhbHUsZHNwYWx1c2F0LA0KLSAgIG11bHRpLGF0b21pYyxzeW5jbG9vcCxu b3AsZ2hvc3QiDQorICAgbXVsdGksYXRvbWljLHN5bmNsb29wLG5vcCxnaG9z dCxtdWx0aW1lbSINCiAgIChjb25kIFsoZXFfYXR0ciAiamFsIiAiIXVuc2V0 IikgKGNvbnN0X3N0cmluZyAiY2FsbCIpDQogCSAoZXFfYXR0ciAiZ290IiAi bG9hZCIpIChjb25zdF9zdHJpbmcgImxvYWQiKQ0KIA0KQEAgLTQxMyw5ICs0 MTQsMTUgQEANCiANCiA7OyBMZW5ndGggb2YgaW5zdHJ1Y3Rpb24gaW4gYnl0 ZXMuDQogKGRlZmluZV9hdHRyICJsZW5ndGgiICIiDQotICAgKGNvbmQgWzs7 IERpcmVjdCBicmFuY2ggaW5zdHJ1Y3Rpb25zIGhhdmUgYSByYW5nZSBvZiBb LTB4MjAwMDAsMHgxZmZmY10sDQotCSAgOzsgcmVsYXRpdmUgdG8gdGhlIGFk ZHJlc3Mgb2YgdGhlIGRlbGF5IHNsb3QuICBJZiBhIGJyYW5jaCBpcw0KLQkg IDs7IG91dHNpZGUgdGhpcyByYW5nZSwgd2UgaGF2ZSBhIGNob2ljZSBvZiB0 d28gc2VxdWVuY2VzLg0KKyAgIChjb25kIFsoYW5kIChlcV9hdHRyICJleHRl bmRlZF9taXBzMTYiICJ5ZXMiKQ0KKwkgICAgICAgKG1hdGNoX3Rlc3QgIlRB UkdFVF9NSVBTMTYiKSkNCisJICAoY29uc3RfaW50IDgpDQorDQorCSAgOzsg RGlyZWN0IG1pY3JvTUlQUyBicmFuY2ggaW5zdHJ1Y3Rpb25zIGhhdmUgYSBy YW5nZSBvZg0KKwkgIDs7IFstMHgxMDAwMCwweGZmZmVdLCBvdGhlcndpc2Ug dGhlIHJhbmdlIGlzIFstMHgyMDAwMCwweDFmZmZjXS4NCisJICA7OyBJZiBh IGJyYW5jaCBpcyBvdXRzaWRlIHRoaXMgcmFuZ2UsIHdlIGhhdmUgYSBjaG9p Y2Ugb2YgdHdvDQorCSAgOzsgc2VxdWVuY2VzLg0KKwkgIDs7DQogCSAgOzsg Rm9yIFBJQywgYW4gb3V0LW9mLXJhbmdlIGJyYW5jaCBsaWtlOg0KIAkgIDs7 DQogCSAgOzsJYm5lCXIxLHIyLHRhcmdldA0KQEAgLTQ1MSwxMCArNDU4LDE3 IEBADQogCSAgOzsgZnJvbSB0aGUgc2hvcnRlbl9icmFuY2hlcyByZWZlcmVu Y2UgYWRkcmVzcy4NCiAJICAoYW5kIChlcV9hdHRyICJ0eXBlIiAiYnJhbmNo IikNCiAJICAgICAgIChub3QgKG1hdGNoX3Rlc3QgIlRBUkdFVF9NSVBTMTYi KSkpDQotCSAgKGNvbmQgWyhhbmQgKGxlIChtaW51cyAobWF0Y2hfZHVwIDAp IChwYykpIChjb25zdF9pbnQgMTMxMDY0KSkNCi0JCSAgICAgIChsZSAobWlu dXMgKHBjKSAobWF0Y2hfZHVwIDApKSAoY29uc3RfaW50IDEzMTA2OCkpKQ0K KwkgIAkgOzsgYW55IHZhcmlhbnQgY2FuIGhhbmRsZSB0aGUgMTctYml0IHJh bmdlDQorCSAgKGNvbmQgWyhhbmQgKGxlIChtaW51cyAobWF0Y2hfZHVwIDAp IChwYykpIChjb25zdF9pbnQgNjU1MzIpKQ0KKwkJICAgICAgKGxlIChtaW51 cyAocGMpIChtYXRjaF9kdXAgMCkpIChjb25zdF9pbnQgNjU1MzQpKSkNCiAJ CSAgIChjb25zdF9pbnQgNCkNCiANCisJCSA7OyBUaGUgMTgtYml0IHJhbmdl IGlzIE9LIG90aGVyIHRoYW4gZm9yIG1pY3JvTUlQUy4NCisJCSAoYW5kIChl cSAoc3ltYm9sX3JlZiAiVEFSR0VUX01JQ1JPTUlQUyIpIChjb25zdF9pbnQg MCkpDQorCQkgICAgICAoYW5kIChsZSAobWludXMgKG1hdGNoX2R1cCAwKSAo cGMpKSAoY29uc3RfaW50IDEzMTA2NCkpDQorCQkgICAgICAJICAgKGxlICht aW51cyAocGMpIChtYXRjaF9kdXAgMCkpIChjb25zdF9pbnQgMTMxMDY4KSkp KQ0KKwkJICAgKGNvbnN0X2ludCA0KQ0KKw0KIAkJIDs7IFRoZSBub24tUElD IGNhc2U6IGJyYW5jaCwgZmlyc3QgZGVsYXkgc2xvdCwgYW5kIEouDQogCQkg KG1hdGNoX3Rlc3QgIlRBUkdFVF9BQlNPTFVURV9KVU1QUyIpDQogCQkgICAo Y29uc3RfaW50IDEyKV0NCkBAIC03MTIsNiArNzI2LDkgQEANCiA7OyBtb2Rl cy4NCiAoZGVmaW5lX21vZGVfaXRlcmF0b3IgR1BSMiBbU0kgKERJICJUQVJH RVRfNjRCSVQiKV0pDQogDQorKGRlZmluZV9tb2RlX2l0ZXJhdG9yIE1PVkVQ MSBbU0kgU0ZdKQ0KKyhkZWZpbmVfbW9kZV9pdGVyYXRvciBNT1ZFUDIgW1NJ IFNGXSkNCisNCiA7OyBUaGlzIG1vZGUgaXRlcmF0b3IgYWxsb3dzIDpISUxP IHRvIGJlIHVzZWQgYXMgdGhlIG1vZGUgb2YgdGhlDQogOzsgY29uY2F0ZW5h dGVkIEhJIGFuZCBMTyByZWdpc3RlcnMuDQogKGRlZmluZV9tb2RlX2l0ZXJh dG9yIEhJTE8gWyhESSAiIVRBUkdFVF82NEJJVCIpIChUSSAiVEFSR0VUXzY0 QklUIildKQ0KQEAgLTM5MzcsNyArMzk1NCw3IEBADQogKGRlZmluZV9pbnNu ICJtb3ZfPGxvYWQ+bCINCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWQiKQ0KIAkodW5zcGVjOkdQUiBbKG1h dGNoX29wZXJhbmQ6QkxLIDEgIm1lbW9yeV9vcGVyYW5kIiAibSIpDQotCQkg ICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgIm1lbW9yeV9vcGVyYW5kIiAibSIp XQ0KKwkJICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJtZW1vcnlfb3BlcmFu ZCIgIlpDIildDQogCQkgICAgVU5TUEVDX0xPQURfTEVGVCkpXQ0KICAgIiFU QVJHRVRfTUlQUzE2ICYmIG1pcHNfbWVtX2ZpdHNfbW9kZV9wICg8TU9ERT5t b2RlLCBvcGVyYW5kc1sxXSkiDQogICAiPGxvYWQ+bFx0JTAsJTIiDQpAQCAt Mzk0Nyw3ICszOTY0LDcgQEANCiAoZGVmaW5lX2luc24gIm1vdl88bG9hZD5y Ig0KICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29w ZXJhbmQiICI9ZCIpDQogCSh1bnNwZWM6R1BSIFsobWF0Y2hfb3BlcmFuZDpC TEsgMSAibWVtb3J5X29wZXJhbmQiICJtIikNCi0JCSAgICAgKG1hdGNoX29w ZXJhbmQ6UUkgMiAibWVtb3J5X29wZXJhbmQiICJtIikNCisJCSAgICAgKG1h dGNoX29wZXJhbmQ6UUkgMiAibWVtb3J5X29wZXJhbmQiICJaQyIpDQogCQkg ICAgIChtYXRjaF9vcGVyYW5kOkdQUiAzICJyZWdpc3Rlcl9vcGVyYW5kIiAi MCIpXQ0KIAkJICAgIFVOU1BFQ19MT0FEX1JJR0hUKSldDQogICAiIVRBUkdF VF9NSVBTMTYgJiYgbWlwc19tZW1fZml0c19tb2RlX3AgKDxNT0RFPm1vZGUs IG9wZXJhbmRzWzFdKSINCkBAIC0zOTU4LDcgKzM5NzUsNyBAQA0KIChkZWZp bmVfaW5zbiAibW92XzxzdG9yZT5sIg0KICAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6QkxLIDAgIm1lbW9yeV9vcGVyYW5kIiAiPW0iKQ0KIAkodW5zcGVjOkJM SyBbKG1hdGNoX29wZXJhbmQ6R1BSIDEgInJlZ19vcl8wX29wZXJhbmQiICJk SiIpDQotCQkgICAgIChtYXRjaF9vcGVyYW5kOlFJIDIgIm1lbW9yeV9vcGVy YW5kIiAibSIpXQ0KKwkJICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJtZW1v cnlfb3BlcmFuZCIgIlpDIildDQogCQkgICAgVU5TUEVDX1NUT1JFX0xFRlQp KV0NCiAgICIhVEFSR0VUX01JUFMxNiAmJiBtaXBzX21lbV9maXRzX21vZGVf cCAoPE1PREU+bW9kZSwgb3BlcmFuZHNbMF0pIg0KICAgIjxzdG9yZT5sXHQl ejEsJTIiDQpAQCAtMzk2OCw3ICszOTg1LDcgQEANCiAoZGVmaW5lX2luc24g Im1vdl88c3RvcmU+ciINCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkJMSyAw ICJtZW1vcnlfb3BlcmFuZCIgIittIikNCiAJKHVuc3BlYzpCTEsgWyhtYXRj aF9vcGVyYW5kOkdQUiAxICJyZWdfb3JfMF9vcGVyYW5kIiAiZEoiKQ0KLQkJ ICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJtZW1vcnlfb3BlcmFuZCIgIm0i KQ0KKwkJICAgICAobWF0Y2hfb3BlcmFuZDpRSSAyICJtZW1vcnlfb3BlcmFu ZCIgIlpDIikNCiAJCSAgICAgKG1hdGNoX2R1cCAwKV0NCiAJCSAgICBVTlNQ RUNfU1RPUkVfUklHSFQpKV0NCiAgICIhVEFSR0VUX01JUFMxNiAmJiBtaXBz X21lbV9maXRzX21vZGVfcCAoPE1PREU+bW9kZSwgb3BlcmFuZHNbMF0pIg0K QEAgLTU0NDUsMTIgKzU0NjIsMzUgQEANCiAJCQkgIChtYXRjaF9vcGVyYW5k OkdQUiAzICJyZWdfb3JfMF9vcGVyYW5kIiAiZEoiKV0pDQogCSAobGFiZWxf cmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKQ0KIAkgKHBjKSkpXQ0KLSAg IiFUQVJHRVRfTUlQUzE2Ig0KKyAgIiFUQVJHRVRfTUlQUzE2ICYmICFUQVJH RVRfTUlDUk9NSVBTIg0KIHsNCiAgIHJldHVybiBtaXBzX291dHB1dF9jb25k aXRpb25hbF9icmFuY2ggKGluc24sIG9wZXJhbmRzLA0KIAkJCQkJIE1JUFNf QlJBTkNIICgiYiVDMSIsICIlMiwlejMsJTAiKSwNCiAJCQkJCSBNSVBTX0JS QU5DSCAoImIlTjEiLCAiJTIsJXozLCUwIikpOw0KIH0NCisgIFsoc2V0X2F0 dHIgInR5cGUiICJicmFuY2giKQ0KKyAgIChzZXRfYXR0ciAibW9kZSIgIm5v bmUiKV0pDQorDQorKGRlZmluZV9pbnNuICIqYnJhbmNoX2VxdWFsaXR5PG1v ZGU+X21pY3JvbWlwcyINCisgIFsoc2V0IChwYykNCisJKGlmX3RoZW5fZWxz ZQ0KKwkgKG1hdGNoX29wZXJhdG9yIDEgImVxdWFsaXR5X29wZXJhdG9yIg0K KwkJCSBbKG1hdGNoX29wZXJhbmQ6R1BSIDIgInJlZ2lzdGVyX29wZXJhbmQi ICJkIikNCisJCQkgIChtYXRjaF9vcGVyYW5kOkdQUiAzICJyZWdfb3JfMF9v cGVyYW5kIiAiZEoiKV0pDQorCSAobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5k IDAgIiIgIiIpKQ0KKwkgKHBjKSkpXQ0KKyAgIlRBUkdFVF9NSUNST01JUFMi DQorew0KKyAgLyogRm9yIGEgc2ltcGxlIGJuZXogb3IgYmVxeiBtaWNyb01J UFMgYnJhbmNoLiAgKi8NCisgIGlmIChvcGVyYW5kc1szXSA9PSBjb25zdDBf cnR4ICYmIGdldF9hdHRyX2xlbmd0aCAoaW5zbikgPD0gOCkNCisgICAgcmV0 dXJuIG1pcHNfb3V0cHV0X2NvbmRpdGlvbmFsX2JyYW5jaCAoaW5zbiwgb3Bl cmFuZHMsDQorCQkJCQkgICAiJSpiJUMxeiU6XHQlMiwlMCIsDQorCQkJCQkg ICAiJSpiJU4xeiU6XHQlMiwlMCIpOw0KKw0KKyAgcmV0dXJuIG1pcHNfb3V0 cHV0X2NvbmRpdGlvbmFsX2JyYW5jaCAoaW5zbiwgb3BlcmFuZHMsDQorCQkJ CQkgTUlQU19CUkFOQ0ggKCJiJUMxIiwgIiUyLCV6MywlMCIpLA0KKwkJCQkJ IE1JUFNfQlJBTkNIICgiYiVOMSIsICIlMiwlejMsJTAiKSk7DQorfQ0KICAg WyhzZXRfYXR0ciAidHlwZSIgImJyYW5jaCIpXSkNCiANCiAoZGVmaW5lX2lu c24gIipicmFuY2hfZXF1YWxpdHk8bW9kZT5faW52ZXJ0ZWQiDQpAQCAtNTQ2 MSw3ICs1NTAxLDcgQEANCiAJCQkgIChtYXRjaF9vcGVyYW5kOkdQUiAzICJy ZWdfb3JfMF9vcGVyYW5kIiAiZEoiKV0pDQogCSAocGMpDQogCSAobGFiZWxf cmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKSkpXQ0KLSAgIiFUQVJHRVRf TUlQUzE2Ig0KKyAgIiFUQVJHRVRfTUlQUzE2ICYmICFUQVJHRVRfTUlDUk9N SVBTIg0KIHsNCiAgIHJldHVybiBtaXBzX291dHB1dF9jb25kaXRpb25hbF9i cmFuY2ggKGluc24sIG9wZXJhbmRzLA0KIAkJCQkJIE1JUFNfQlJBTkNIICgi YiVOMSIsICIlMiwlejMsJTAiKSwNCkBAIC01NTMyLDYgKzU1NzIsMjkgQEAN CiAJCSAgICAgIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMSkpDQogCQkg ICAgICAocGMpKSldKQ0KIA0KKyhkZWZpbmVfaW5zbiAiKmJyYW5jaF9lcXVh bGl0eTxtb2RlPl9pbnZlcnRlZF9taWNyb21pcHMiDQorICBbKHNldCAocGMp DQorCShpZl90aGVuX2Vsc2UNCisJIChtYXRjaF9vcGVyYXRvciAwICJlcXVh bGl0eV9vcGVyYXRvciINCisJCQkgWyhtYXRjaF9vcGVyYW5kOkdQUiAyICJy ZWdpc3Rlcl9vcGVyYW5kIiAiZCIpDQorCQkJICAobWF0Y2hfb3BlcmFuZDpH UFIgMyAicmVnX29yXzBfb3BlcmFuZCIgImRKIildKQ0KKwkgKHBjKQ0KKwkg KGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkpKV0NCisgICJU QVJHRVRfTUlDUk9NSVBTIg0KK3sNCisgIC8qIEZvciBhIHNpbXBsZSBibmV6 IG9yIGJlcXogbWljcm9NSVBTIGJyYW5jaC4gICovDQorICBpZiAob3BlcmFu ZHNbM10gPT0gY29uc3QwX3J0eCAmJiBnZXRfYXR0cl9sZW5ndGggKGluc24p IDw9IDgpDQorICAgIHJldHVybiBtaXBzX291dHB1dF9jb25kaXRpb25hbF9i cmFuY2ggKGluc24sIG9wZXJhbmRzLA0KKwkJCQkJICAgIiUqYiVOMHolOlx0 JTIsJTEiLA0KKwkJCQkJICAgIiUqYiVDMHolOlx0JTIsJTEiKTsNCisNCisg IHJldHVybiBtaXBzX291dHB1dF9jb25kaXRpb25hbF9icmFuY2ggKGluc24s IG9wZXJhbmRzLA0KKwkJCQkJIE1JUFNfQlJBTkNIICgiYiVOMCIsICIlMiwl ejMsJTEiKSwNCisJCQkJCSBNSVBTX0JSQU5DSCAoImIlQzAiLCAiJTIsJXoz LCUxIikpOw0KK30NCisgIFsoc2V0X2F0dHIgInR5cGUiICJicmFuY2giKQ0K KyAgIChzZXRfYXR0ciAibW9kZSIgIm5vbmUiKV0pDQorDQogOzsgQnJhbmNo IGlmIGJpdCBpcyBzZXQvY2xlYXIuDQogDQogKGRlZmluZV9pbnNuICIqYnJh bmNoX2JpdDxiYnY+PG1vZGU+Ig0KQEAgLTU3NjYsNyArNTgyOSwxNCBAQA0K ICAgWyhzZXQgKHBjKQ0KIAkobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAp KSldDQogICAiIVRBUkdFVF9NSVBTMTYgJiYgVEFSR0VUX0FCU09MVVRFX0pV TVBTIg0KLSAgeyByZXR1cm4gTUlQU19BQlNPTFVURV9KVU1QICgiJSpqXHQl bDAlLyIpOyB9DQorew0KKyAgLyogVXNlIGEgYnJhbmNoIGZvciBtaWNyb01J UFMuICBUaGUgYXNzZW1ibGVyIHdpbGwgY2hvb3NlDQorICAgICBhIDE2LWJp dCBicmFuY2gsIGEgMzItYml0IGJyYW5jaCwgb3IgYSAzMi1iaXQganVtcC4g ICovDQorICBpZiAoVEFSR0VUX01JQ1JPTUlQUyAmJiAhVEFSR0VUX0FCSUNB TExTX1BJQzIpDQorICAgIHJldHVybiAiJSpiXHQlbDAlLyI7DQorICBlbHNl DQorICAgIHJldHVybiBNSVBTX0FCU09MVVRFX0pVTVAgKCIlKmpcdCVsMCUv Iik7DQorfQ0KICAgWyhzZXRfYXR0ciAidHlwZSIgImp1bXAiKV0pDQogDQog KGRlZmluZV9pbnNuICIqanVtcF9waWMiDQpAQCAtNTgyOSw3ICs1ODk5LDEy IEBADQogKGRlZmluZV9pbnNuICJpbmRpcmVjdF9qdW1wXzxtb2RlPiINCiAg IFsoc2V0IChwYykgKG1hdGNoX29wZXJhbmQ6UCAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiZCIpKV0NCiAgICIiDQotICAiJSpqXHQlMCUvIg0KK3sNCisgIGlm IChUQVJHRVRfTUlDUk9NSVBTKQ0KKyAgICByZXR1cm4gIiUqanIlOlx0JTAi Ow0KKyAgZWxzZQ0KKyAgICByZXR1cm4gIiUqalx0JTAlLyI7DQorfQ0KICAg WyhzZXRfYXR0ciAidHlwZSIgImp1bXAiKQ0KICAgIChzZXRfYXR0ciAibW9k ZSIgIm5vbmUiKV0pDQogDQpAQCAtNTg3Myw3ICs1OTQ4LDEyIEBADQogCSht YXRjaF9vcGVyYW5kOlAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgImQiKSkNCiAg ICAodXNlIChsYWJlbF9yZWYgKG1hdGNoX29wZXJhbmQgMSAiIiAiIikpKV0N CiAgICIiDQotICAiJSpqXHQlMCUvIg0KK3sNCisgIGlmIChUQVJHRVRfTUlD Uk9NSVBTKQ0KKyAgICByZXR1cm4gIiUqanIlOlx0JTAiOw0KKyAgZWxzZQ0K KyAgICByZXR1cm4gIiUqalx0JTAlLyI7DQorfQ0KICAgWyhzZXRfYXR0ciAi dHlwZSIgImp1bXAiKQ0KICAgIChzZXRfYXR0ciAibW9kZSIgIm5vbmUiKV0p DQogDQpAQCAtNjA5NCw3ICs2MTc0LDEyIEBADQogICBbKGFueV9yZXR1cm4p DQogICAgKHVzZSAobWF0Y2hfb3BlcmFuZCAwICJwbW9kZV9yZWdpc3Rlcl9v cGVyYW5kIiAiIikpXQ0KICAgIiINCi0gICIlKmpcdCUwJS8iDQorew0KKyAg aWYgKFRBUkdFVF9NSUNST01JUFMpDQorICAgIHJldHVybiAiJSpqciU6XHQl MCI7DQorICBlbHNlDQorICAgIHJldHVybiAiJSpqXHQlMCUvIjsNCit9DQog ICBbKHNldF9hdHRyICJ0eXBlIgkianVtcCIpDQogICAgKHNldF9hdHRyICJt b2RlIgkibm9uZSIpXSkNCiANCkBAIC02MzUwLDcgKzY0MzUsMTIgQEANCiAg IFsoY2FsbCAobWVtOlNJIChtYXRjaF9vcGVyYW5kIDAgImNhbGxfaW5zbl9v cGVyYW5kIiAiaixTIikpDQogCSAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSld DQogICAiVEFSR0VUX1NJQkNBTExTICYmIFNJQkxJTkdfQ0FMTF9QIChpbnNu KSINCi0gIHsgcmV0dXJuIE1JUFNfQ0FMTCAoImoiLCBvcGVyYW5kcywgMCwg MSk7IH0NCisgIHsNCisgICAgaWYgKFRBUkdFVF9NSUNST01JUFMpDQorICAg ICAgcmV0dXJuIE1JQ1JPTUlQU19KICgiaiIsIG9wZXJhbmRzLCAwKTsNCisg ICAgZWxzZQ0KKyAgICAgIHJldHVybiBNSVBTX0NBTEwgKCJqIiwgb3BlcmFu ZHMsIDAsIDEpOw0KKyAgfQ0KICAgWyhzZXRfYXR0ciAiamFsIiAiaW5kaXJl Y3QsZGlyZWN0IikNCiAgICAoc2V0X2F0dHIgImphbF9tYWNybyIgIm5vIild KQ0KIA0KQEAgLTYzNzEsNyArNjQ2MSwxMiBAQA0KICAgICAgICAgKGNhbGwg KG1lbTpTSSAobWF0Y2hfb3BlcmFuZCAxICJjYWxsX2luc25fb3BlcmFuZCIg ImosUyIpKQ0KICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQgMiAiIiAi IikpKV0NCiAgICJUQVJHRVRfU0lCQ0FMTFMgJiYgU0lCTElOR19DQUxMX1Ag KGluc24pIg0KLSAgeyByZXR1cm4gTUlQU19DQUxMICgiaiIsIG9wZXJhbmRz LCAxLCAyKTsgfQ0KKyAgew0KKyAgICBpZiAoVEFSR0VUX01JQ1JPTUlQUykN CisgICAgICByZXR1cm4gTUlDUk9NSVBTX0ogKCJqIiwgb3BlcmFuZHMsIDEp Ow0KKyAgICBlbHNlDQorICAgICAgcmV0dXJuIE1JUFNfQ0FMTCAoImoiLCBv cGVyYW5kcywgMSwgMik7DQorICB9DQogICBbKHNldF9hdHRyICJqYWwiICJp bmRpcmVjdCxkaXJlY3QiKQ0KICAgIChzZXRfYXR0ciAiamFsX21hY3JvIiAi bm8iKV0pDQogDQpAQCAtNjM4Myw3ICs2NDc4LDEyIEBADQogCShjYWxsICht ZW06U0kgKG1hdGNoX2R1cCAxKSkNCiAJICAgICAgKG1hdGNoX2R1cCAyKSkp XQ0KICAgIlRBUkdFVF9TSUJDQUxMUyAmJiBTSUJMSU5HX0NBTExfUCAoaW5z bikiDQotICB7IHJldHVybiBNSVBTX0NBTEwgKCJqIiwgb3BlcmFuZHMsIDEs IDIpOyB9DQorICB7DQorICAgIGlmIChUQVJHRVRfTUlDUk9NSVBTKQ0KKyAg ICAgIHJldHVybiBNSUNST01JUFNfSiAoImoiLCBvcGVyYW5kcywgMSk7DQor ICAgIGVsc2UNCisgICAgICByZXR1cm4gTUlQU19DQUxMICgiaiIsIG9wZXJh bmRzLCAxLCAyKTsNCisgIH0NCiAgIFsoc2V0X2F0dHIgImphbCIgImluZGly ZWN0LGRpcmVjdCIpDQogICAgKHNldF9hdHRyICJqYWxfbWFjcm8iICJubyIp XSkNCiANCkBAIC02NjI5LDcgKzY3MjksNyBAQA0KIA0KIA0KIChkZWZpbmVf aW5zbiAicHJlZmV0Y2giDQotICBbKHByZWZldGNoIChtYXRjaF9vcGVyYW5k OlFJIDAgImFkZHJlc3Nfb3BlcmFuZCIgInAiKQ0KKyAgWyhwcmVmZXRjaCAo bWF0Y2hfb3BlcmFuZDpRSSAwICJhZGRyZXNzX29wZXJhbmQiICJaRCIpDQog CSAgICAgKG1hdGNoX29wZXJhbmQgMSAiY29uc3RfaW50X29wZXJhbmQiICJu IikNCiAJICAgICAobWF0Y2hfb3BlcmFuZCAyICJjb25zdF9pbnRfb3BlcmFu ZCIgIm4iKSldDQogICAiSVNBX0hBU19QUkVGRVRDSCAmJiBUQVJHRVRfRVhQ TElDSVRfUkVMT0NTIg0KQEAgLTY5MjIsNiArNzAyMiw5IEBADQogOyBNSVBT IGZpeGVkLXBvaW50IGluc3RydWN0aW9ucy4NCiAoaW5jbHVkZSAibWlwcy1m aXhlZC5tZCIpDQogDQorOyBtaWNyb01JUFMgcGF0dGVybnMuDQorKGluY2x1 ZGUgIm1pY3JvbWlwcy5tZCIpDQorDQogOyBTVC1NaWNyb2VsZWN0cm9uaWNz IExvb25nc29uLTJFLzJGLXNwZWNpZmljIHBhdHRlcm5zLg0KIChpbmNsdWRl ICJsb29uZ3Nvbi5tZCIpDQogDQpJbmRleDogY29uZmlnL21pcHMvbWlwcy5v cHQNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBjb25maWcvbWlwcy9t aXBzLm9wdAkocmV2aXNpb24gMTk1OTAwKQ0KKysrIGNvbmZpZy9taXBzL21p cHMub3B0CSh3b3JraW5nIGNvcHkpDQpAQCAtMjE3LDkgKzIxNywxOCBAQA0K IFRhcmdldCBSZXBvcnQgUmVqZWN0TmVnYXRpdmUgSW52ZXJzZU1hc2soU09G VF9GTE9BVF9BQkksIEhBUkRfRkxPQVRfQUJJKQ0KIEFsbG93IHRoZSB1c2Ug b2YgaGFyZHdhcmUgZmxvYXRpbmctcG9pbnQgQUJJIGFuZCBpbnN0cnVjdGlv bnMNCiANCittaW50ZXJsaW5rLWNvbXByZXNzZWQNCitUYXJnZXQgUmVwb3J0 IFZhcihUQVJHRVRfSU5URVJMSU5LX0NPTVBSRVNTRUQpIEluaXQoMCkNCitH ZW5lcmF0ZSBjb2RlIHRoYXQgaXMgbGluay1jb21wYXRpYmxlIHdpdGggTUlQ UzE2IGFuZCBtaWNyb01JUFMgY29kZS4NCisNCittaW50ZXJsaW5rLXVuY29t cHJlc3NlZA0KK1RhcmdldCBSZXBvcnQgVmFyKFRBUkdFVF9JTlRFUkxJTktf VU5DT01QUkVTU0VEKSBJbml0KDEpDQorR2VuZXJhdGUgY29kZSB0aGF0IGlz IGxpbmstY29tcGF0aWJsZSB3aXRoIHRoZSBzdGFuZGFyZCAodW5jb21wcmVz c2VkKQ0KK01JUFMgSVNBLg0KKw0KIG1pbnRlcmxpbmstbWlwczE2DQotVGFy Z2V0IFJlcG9ydCBWYXIoVEFSR0VUX0lOVEVSTElOS19NSVBTMTYpIEluaXQo MCkNCi1HZW5lcmF0ZSBjb2RlIHRoYXQgY2FuIGJlIHNhZmVseSBsaW5rZWQg d2l0aCBNSVBTMTYgY29kZS4NCitUYXJnZXQgUmVwb3J0IFZhcihUQVJHRVRf SU5URVJMSU5LX0NPTVBSRVNTRUQpIEluaXQoMCkNCitBbiBhbGlhcyBmb3Ig bWludGVybGluay1jb21wcmVzc2VkIHByb3ZpZGVkIGZvciBiYWNrd2FyZC1j b21wYXRpYmlsaXR5Lg0KIA0KIG1pcHMNCiBUYXJnZXQgUmVqZWN0TmVnYXRp dmUgSm9pbmVkIFRvTG93ZXIgRW51bShtaXBzX21pcHNfb3B0X3ZhbHVlKSBW YXIobWlwc19pc2Ffb3B0aW9uKQ0KQEAgLTI2MSw2ICsyNzAsMTAgQEANCiBU YXJnZXQgUmVwb3J0IE1hc2soTUVNQ1BZKQ0KIERvbid0IG9wdGltaXplIGJs b2NrIG1vdmVzDQogDQorbW1pY3JvbWlwcw0KK1RhcmdldCBSZXBvcnQgTWFz ayhNSUNST01JUFMpDQorVXNlIG1pY3JvTUlQUyBpbnN0cnVjdGlvbnMNCisN CiBtbXQNCiBUYXJnZXQgUmVwb3J0IFZhcihUQVJHRVRfTVQpDQogQWxsb3cg dGhlIHVzZSBvZiBNVCBpbnN0cnVjdGlvbnMNCkluZGV4OiBjb25maWcvbWlw cy9zeW5jLm1kDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gY29uZmln L21pcHMvc3luYy5tZAkocmV2aXNpb24gMTk1OTAwKQ0KKysrIGNvbmZpZy9t aXBzL3N5bmMubWQJKHdvcmtpbmcgY29weSkNCkBAIC01OSw3ICs1OSw3IEBA DQogOzsgQ2FuIGJlIHJlbW92ZWQgaW4gZmF2b3Igb2YgYXRvbWljX2NvbXBh cmVfYW5kX3N3YXAgYmVsb3cuDQogKGRlZmluZV9pbnNuICJzeW5jX2NvbXBh cmVfYW5kX3N3YXA8bW9kZT4iDQogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpH UFIgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mZCwmZCIpDQotCShtYXRjaF9v cGVyYW5kOkdQUiAxICJtZW1vcnlfb3BlcmFuZCIgIitSLFIiKSkNCisJKG1h dGNoX29wZXJhbmQ6R1BSIDEgIm1lbW9yeV9vcGVyYW5kIiAiK1pSLFpSIikp DQogICAgKHNldCAobWF0Y2hfZHVwIDEpDQogCSh1bnNwZWNfdm9sYXRpbGU6 R1BSIFsobWF0Y2hfb3BlcmFuZDpHUFIgMiAicmVnX29yXzBfb3BlcmFuZCIg ImRKLGRKIikNCiAJCQkgICAgICAobWF0Y2hfb3BlcmFuZDpHUFIgMyAiYXJp dGhfb3BlcmFuZCIgIkksZCIpXQ0KQEAgLTg5LDcgKzg5LDcgQEANCiA7OyBI ZWxwZXIgaW5zbiBmb3IgbWlwc19leHBhbmRfYXRvbWljX3FpaGkuDQogKGRl ZmluZV9pbnNuICJjb21wYXJlX2FuZF9zd2FwXzEyIg0KICAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mZCwmZCIp DQotCShtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAiK1Is UiIpKQ0KKwkobWF0Y2hfb3BlcmFuZDpTSSAxICJtZW1vcnlfb3BlcmFuZCIg IitaUixaUiIpKQ0KICAgIChzZXQgKG1hdGNoX2R1cCAxKQ0KIAkodW5zcGVj X3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9v cGVyYW5kIiAiZCxkIikNCiAJCQkgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMg InJlZ2lzdGVyX29wZXJhbmQiICJkLGQiKQ0KQEAgLTEwNiw3ICsxMDYsNyBA QA0KICAgIChzZXRfYXR0ciAic3luY19pbnNuMV9vcDIiICI1IildKQ0KIA0K IChkZWZpbmVfaW5zbiAic3luY19hZGQ8bW9kZT4iDQotICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpHUFIgMCAibWVtb3J5X29wZXJhbmQiICIrUixSIikNCisg IFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJtZW1vcnlfb3BlcmFuZCIg IitaUixaUiIpDQogCSh1bnNwZWNfdm9sYXRpbGU6R1BSDQogICAgICAgICAg IFsocGx1czpHUFIgKG1hdGNoX2R1cCAwKQ0KIAkJICAgICAobWF0Y2hfb3Bl cmFuZDpHUFIgMSAiYXJpdGhfb3BlcmFuZCIgIkksZCIpKV0NCkBAIC0xMzQs NyArMTM0LDcgQEANCiANCiA7OyBIZWxwZXIgaW5zbiBmb3Igc3luY188b3B0 YWI+PG1vZGU+DQogKGRlZmluZV9pbnNuICJzeW5jXzxvcHRhYj5fMTIiDQot ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJtZW1vcnlfb3BlcmFuZCIg IitSIikNCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm1lbW9yeV9v cGVyYW5kIiAiK1pSIikNCiAJKHVuc3BlY192b2xhdGlsZTpTSQ0KICAgICAg ICAgICBbKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIg ImQiKQ0KIAkgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVy YW5kIiAiZCIpDQpAQCAtMTc0LDcgKzE3NCw3IEBADQogOzsgSGVscGVyIGlu c24gZm9yIHN5bmNfb2xkXzxvcHRhYj48bW9kZT4NCiAoZGVmaW5lX2luc24g InN5bmNfb2xkXzxvcHRhYj5fMTIiDQogICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZkIikNCi0JKG1hdGNoX29w ZXJhbmQ6U0kgMSAibWVtb3J5X29wZXJhbmQiICIrUiIpKQ0KKwkobWF0Y2hf b3BlcmFuZDpTSSAxICJtZW1vcnlfb3BlcmFuZCIgIitaUiIpKQ0KICAgIChz ZXQgKG1hdGNoX2R1cCAxKQ0KIAkodW5zcGVjX3ZvbGF0aWxlOlNJDQogICAg ICAgICAgIFsobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5k IiAiZCIpDQpAQCAtMjE3LDcgKzIxNyw3IEBADQogKGRlZmluZV9pbnNuICJz eW5jX25ld188b3B0YWI+XzEyIg0KICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mZCIpDQogCSh1bnNwZWNfdm9s YXRpbGU6U0kNCi0gICAgICAgICAgWyhtYXRjaF9vcGVyYW5kOlNJIDEgIm1l bW9yeV9vcGVyYW5kIiAiK1IiKQ0KKyAgICAgICAgICBbKG1hdGNoX29wZXJh bmQ6U0kgMSAibWVtb3J5X29wZXJhbmQiICIrWlIiKQ0KIAkgICAobWF0Y2hf b3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiZCIpDQogCSAgICht YXRjaF9vcGVyYW5kOlNJIDMgInJlZ2lzdGVyX29wZXJhbmQiICJkIikNCiAJ ICAgKGF0b21pY19oaXFpX29wOlNJIChtYXRjaF9kdXAgMCkNCkBAIC0yNTcs NyArMjU3LDcgQEANCiANCiA7OyBIZWxwZXIgaW5zbiBmb3Igc3luY19uYW5k PG1vZGU+DQogKGRlZmluZV9pbnNuICJzeW5jX25hbmRfMTIiDQotICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpTSSAwICJtZW1vcnlfb3BlcmFuZCIgIitSIikN CisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAgIm1lbW9yeV9vcGVyYW5k IiAiK1pSIikNCiAJKHVuc3BlY192b2xhdGlsZTpTSQ0KICAgICAgICAgICBb KG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgImQiKQ0K IAkgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAi ZCIpDQpAQCAtMjk2LDcgKzI5Niw3IEBADQogOzsgSGVscGVyIGluc24gZm9y IHN5bmNfb2xkX25hbmQ8bW9kZT4NCiAoZGVmaW5lX2luc24gInN5bmNfb2xk X25hbmRfMTIiDQogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPSZkIikNCi0JKG1hdGNoX29wZXJhbmQ6U0kgMSAi bWVtb3J5X29wZXJhbmQiICIrUiIpKQ0KKwkobWF0Y2hfb3BlcmFuZDpTSSAx ICJtZW1vcnlfb3BlcmFuZCIgIitaUiIpKQ0KICAgIChzZXQgKG1hdGNoX2R1 cCAxKQ0KIAkodW5zcGVjX3ZvbGF0aWxlOlNJDQogICAgICAgICAgIFsobWF0 Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiZCIpDQpAQCAt MzM3LDcgKzMzNyw3IEBADQogKGRlZmluZV9pbnNuICJzeW5jX25ld19uYW5k XzEyIg0KICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJf b3BlcmFuZCIgIj0mZCIpDQogCSh1bnNwZWNfdm9sYXRpbGU6U0kNCi0gICAg ICAgICAgWyhtYXRjaF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAi K1IiKQ0KKyAgICAgICAgICBbKG1hdGNoX29wZXJhbmQ6U0kgMSAibWVtb3J5 X29wZXJhbmQiICIrWlIiKQ0KIAkgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJy ZWdpc3Rlcl9vcGVyYW5kIiAiZCIpDQogCSAgIChtYXRjaF9vcGVyYW5kOlNJ IDMgInJlZ2lzdGVyX29wZXJhbmQiICJkIikNCiAJICAgKG1hdGNoX29wZXJh bmQ6U0kgNCAicmVnX29yXzBfb3BlcmFuZCIgImRKIildDQpAQCAtMzYwLDcg KzM2MCw3IEBADQogICAgKHNldF9hdHRyICJzeW5jX2luc24xX29wMiIgIjQi KV0pDQogDQogKGRlZmluZV9pbnNuICJzeW5jX3N1Yjxtb2RlPiINCi0gIFso c2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJtZW1vcnlfb3BlcmFuZCIgIitS IikNCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJtZW1vcnlfb3Bl cmFuZCIgIitaUiIpDQogCSh1bnNwZWNfdm9sYXRpbGU6R1BSDQogICAgICAg ICAgIFsobWludXM6R1BSIChtYXRjaF9kdXAgMCkNCiAJCSAgICAgIChtYXRj aF9vcGVyYW5kOkdQUiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiZCIpKV0NCkBA IC0zNzQsNyArMzc0LDcgQEANCiA7OyBDYW4gYmUgcmVtb3ZlZCBpbiBmYXZv ciBvZiBhdG9taWNfZmV0Y2hfYWRkIGJlbG93Lg0KIChkZWZpbmVfaW5zbiAi c3luY19vbGRfYWRkPG1vZGU+Ig0KICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 R1BSIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9JmQsJmQiKQ0KLQkobWF0Y2hf b3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrUixSIikpDQorCSht YXRjaF9vcGVyYW5kOkdQUiAxICJtZW1vcnlfb3BlcmFuZCIgIitaUixaUiIp KQ0KICAgIChzZXQgKG1hdGNoX2R1cCAxKQ0KIAkodW5zcGVjX3ZvbGF0aWxl OkdQUg0KICAgICAgICAgICBbKHBsdXM6R1BSIChtYXRjaF9kdXAgMSkNCkBA IC0zODksNyArMzg5LDcgQEANCiANCiAoZGVmaW5lX2luc24gInN5bmNfb2xk X3N1Yjxtb2RlPiINCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPSZkIikNCi0JKG1hdGNoX29wZXJhbmQ6R1BS IDEgIm1lbW9yeV9vcGVyYW5kIiAiK1IiKSkNCisJKG1hdGNoX29wZXJhbmQ6 R1BSIDEgIm1lbW9yeV9vcGVyYW5kIiAiK1pSIikpDQogICAgKHNldCAobWF0 Y2hfZHVwIDEpDQogCSh1bnNwZWNfdm9sYXRpbGU6R1BSDQogICAgICAgICAg IFsobWludXM6R1BSIChtYXRjaF9kdXAgMSkNCkBAIC00MDQsNyArNDA0LDcg QEANCiANCiAoZGVmaW5lX2luc24gInN5bmNfbmV3X2FkZDxtb2RlPiINCiAg IFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPSZkLCZkIikNCi0gICAgICAgIChwbHVzOkdQUiAobWF0Y2hfb3BlcmFu ZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrUixSIikNCisgICAgICAgIChw bHVzOkdQUiAobWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQi ICIrWlIsWlIiKQ0KIAkJICAobWF0Y2hfb3BlcmFuZDpHUFIgMiAiYXJpdGhf b3BlcmFuZCIgIkksZCIpKSkNCiAgICAoc2V0IChtYXRjaF9kdXAgMSkNCiAJ KHVuc3BlY192b2xhdGlsZTpHUFINCkBAIC00MjAsNyArNDIwLDcgQEANCiAN CiAoZGVmaW5lX2luc24gInN5bmNfbmV3X3N1Yjxtb2RlPiINCiAgIFsoc2V0 IChtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZk IikNCi0gICAgICAgIChtaW51czpHUFIgKG1hdGNoX29wZXJhbmQ6R1BSIDEg Im1lbW9yeV9vcGVyYW5kIiAiK1IiKQ0KKyAgICAgICAgKG1pbnVzOkdQUiAo bWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrWlIiKQ0K IAkJICAgKG1hdGNoX29wZXJhbmQ6R1BSIDIgInJlZ2lzdGVyX29wZXJhbmQi ICJkIikpKQ0KICAgIChzZXQgKG1hdGNoX2R1cCAxKQ0KIAkodW5zcGVjX3Zv bGF0aWxlOkdQUg0KQEAgLTQzNSw3ICs0MzUsNyBAQA0KICAgIChzZXRfYXR0 ciAic3luY19pbnNuMV9vcDIiICIyIildKQ0KIA0KIChkZWZpbmVfaW5zbiAi c3luY188b3B0YWI+PG1vZGU+Ig0KLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 R1BSIDAgIm1lbW9yeV9vcGVyYW5kIiAiK1IsUiIpDQorICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpHUFIgMCAibWVtb3J5X29wZXJhbmQiICIrWlIsWlIiKQ0K IAkodW5zcGVjX3ZvbGF0aWxlOkdQUg0KICAgICAgICAgICBbKGZldGNob3Bf Yml0OkdQUiAobWF0Y2hfb3BlcmFuZDpHUFIgMSAidW5zX2FyaXRoX29wZXJh bmQiICJLLGQiKQ0KIAkJCSAgICAgIChtYXRjaF9kdXAgMCkpXQ0KQEAgLTQ0 OCw3ICs0NDgsNyBAQA0KIA0KIChkZWZpbmVfaW5zbiAic3luY19vbGRfPG9w dGFiPjxtb2RlPiINCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPSZkLCZkIikNCi0JKG1hdGNoX29wZXJhbmQ6 R1BSIDEgIm1lbW9yeV9vcGVyYW5kIiAiK1IsUiIpKQ0KKwkobWF0Y2hfb3Bl cmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrWlIsWlIiKSkNCiAgICAo c2V0IChtYXRjaF9kdXAgMSkNCiAJKHVuc3BlY192b2xhdGlsZTpHUFINCiAg ICAgICAgICAgWyhmZXRjaG9wX2JpdDpHUFIgKG1hdGNoX29wZXJhbmQ6R1BS IDIgInVuc19hcml0aF9vcGVyYW5kIiAiSyxkIikNCkBAIC00NjMsNyArNDYz LDcgQEANCiANCiAoZGVmaW5lX2luc24gInN5bmNfbmV3XzxvcHRhYj48bW9k ZT4iDQogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUFIgMCAicmVnaXN0ZXJf b3BlcmFuZCIgIj0mZCwmZCIpDQotCShtYXRjaF9vcGVyYW5kOkdQUiAxICJt ZW1vcnlfb3BlcmFuZCIgIitSLFIiKSkNCisJKG1hdGNoX29wZXJhbmQ6R1BS IDEgIm1lbW9yeV9vcGVyYW5kIiAiK1pSLFpSIikpDQogICAgKHNldCAobWF0 Y2hfZHVwIDEpDQogCSh1bnNwZWNfdm9sYXRpbGU6R1BSDQogICAgICAgICAg IFsoZmV0Y2hvcF9iaXQ6R1BSIChtYXRjaF9vcGVyYW5kOkdQUiAyICJ1bnNf YXJpdGhfb3BlcmFuZCIgIkssZCIpDQpAQCAtNDc4LDcgKzQ3OCw3IEBADQog ICAgKHNldF9hdHRyICJzeW5jX2luc24xX29wMiIgIjIiKV0pDQogDQogKGRl ZmluZV9pbnNuICJzeW5jX25hbmQ8bW9kZT4iDQotICBbKHNldCAobWF0Y2hf b3BlcmFuZDpHUFIgMCAibWVtb3J5X29wZXJhbmQiICIrUixSIikNCisgIFso c2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJtZW1vcnlfb3BlcmFuZCIgIita UixaUiIpDQogCSh1bnNwZWNfdm9sYXRpbGU6R1BSIFsobWF0Y2hfb3BlcmFu ZDpHUFIgMSAidW5zX2FyaXRoX29wZXJhbmQiICJLLGQiKV0NCiAJIFVOU1BF Q19TWU5DX09MRF9PUCkpXQ0KICAgIkdFTkVSQVRFX0xMX1NDIg0KQEAgLTQ5 MCw3ICs0OTAsNyBAQA0KIA0KIChkZWZpbmVfaW5zbiAic3luY19vbGRfbmFu ZDxtb2RlPiINCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPSZkLCZkIikNCi0JKG1hdGNoX29wZXJhbmQ6R1BS IDEgIm1lbW9yeV9vcGVyYW5kIiAiK1IsUiIpKQ0KKwkobWF0Y2hfb3BlcmFu ZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrWlIsWlIiKSkNCiAgICAoc2V0 IChtYXRjaF9kdXAgMSkNCiAgICAgICAgICh1bnNwZWNfdm9sYXRpbGU6R1BS IFsobWF0Y2hfb3BlcmFuZDpHUFIgMiAidW5zX2FyaXRoX29wZXJhbmQiICJL LGQiKV0NCiAJIFVOU1BFQ19TWU5DX09MRF9PUCkpXQ0KQEAgLTUwNCw3ICs1 MDQsNyBAQA0KIA0KIChkZWZpbmVfaW5zbiAic3luY19uZXdfbmFuZDxtb2Rl PiINCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdpc3Rlcl9v cGVyYW5kIiAiPSZkLCZkIikNCi0JKG1hdGNoX29wZXJhbmQ6R1BSIDEgIm1l bW9yeV9vcGVyYW5kIiAiK1IsUiIpKQ0KKwkobWF0Y2hfb3BlcmFuZDpHUFIg MSAibWVtb3J5X29wZXJhbmQiICIrWlIsWlIiKSkNCiAgICAoc2V0IChtYXRj aF9kdXAgMSkNCiAJKHVuc3BlY192b2xhdGlsZTpHUFIgWyhtYXRjaF9vcGVy YW5kOkdQUiAyICJ1bnNfYXJpdGhfb3BlcmFuZCIgIkssZCIpXQ0KIAkgVU5T UEVDX1NZTkNfTkVXX09QKSldDQpAQCAtNTE5LDcgKzUxOSw3IEBADQogDQog KGRlZmluZV9pbnNuICJzeW5jX2xvY2tfdGVzdF9hbmRfc2V0PG1vZGU+Ig0K ICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29wZXJh bmQiICI9JmQsJmQiKQ0KLQkobWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5 X29wZXJhbmQiICIrUixSIikpDQorCShtYXRjaF9vcGVyYW5kOkdQUiAxICJt ZW1vcnlfb3BlcmFuZCIgIitaUixaUiIpKQ0KICAgIChzZXQgKG1hdGNoX2R1 cCAxKQ0KIAkodW5zcGVjX3ZvbGF0aWxlOkdQUiBbKG1hdGNoX29wZXJhbmQ6 R1BSIDIgImFyaXRoX29wZXJhbmQiICJJLGQiKV0NCiAJIFVOU1BFQ19TWU5D X0VYQ0hBTkdFKSldDQpAQCAtNTQ2LDcgKzU0Niw3IEBADQogDQogKGRlZmlu ZV9pbnNuICJ0ZXN0X2FuZF9zZXRfMTIiDQogICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZkIikNCi0JKG1hdGNo X29wZXJhbmQ6U0kgMSAibWVtb3J5X29wZXJhbmQiICIrUiIpKQ0KKwkobWF0 Y2hfb3BlcmFuZDpTSSAxICJtZW1vcnlfb3BlcmFuZCIgIitaUiIpKQ0KICAg IChzZXQgKG1hdGNoX2R1cCAxKQ0KIAkodW5zcGVjX3ZvbGF0aWxlOlNJIFso bWF0Y2hfb3BlcmFuZDpTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiZCIpDQog CQkJICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJyZWdpc3Rlcl9vcGVyYW5k IiAiZCIpDQpAQCAtNTc2LDcgKzU3Niw3IEBADQogCTs7IFRPRE86IHRoZSBv YnNjdXJpbmcgdW5zcGVjIGNhbiBiZSByZWxheGVkIGZvciBwZXJtaXNzaXZl IG1lbW9yeQ0KIAk7OyBtb2RlbHMuDQogCTs7IFNhbWUgYXBwbGllcyB0byBv dGhlciBhdG9taWNfKiBwYXR0ZXJucy4NCi0JKHVuc3BlY192b2xhdGlsZTpH UFIgWyhtYXRjaF9vcGVyYW5kOkdQUiAyICJtZW1vcnlfb3BlcmFuZCIgIitS LFIiKQ0KKwkodW5zcGVjX3ZvbGF0aWxlOkdQUiBbKG1hdGNoX29wZXJhbmQ6 R1BSIDIgIm1lbW9yeV9vcGVyYW5kIiAiK1pSLFpSIikNCiAJCQkgICAgICAo bWF0Y2hfb3BlcmFuZDpHUFIgMyAicmVnX29yXzBfb3BlcmFuZCIgImRKLGRK IildDQogCSBVTlNQRUNfQVRPTUlDX0NPTVBBUkVfQU5EX1NXQVApKQ0KICAg IChzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDEgInJlZ2lzdGVyX29wZXJhbmQi ICI9JmQsJmQiKQ0KQEAgLTYyOSw3ICs2MjksNyBAQA0KIA0KIChkZWZpbmVf aW5zbiAiYXRvbWljX2V4Y2hhbmdlPG1vZGU+X2xsc2MiDQogICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpHUFIgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mZCwm ZCIpDQotCSh1bnNwZWNfdm9sYXRpbGU6R1BSIFsobWF0Y2hfb3BlcmFuZDpH UFIgMSAibWVtb3J5X29wZXJhbmQiICIrUixSIildDQorCSh1bnNwZWNfdm9s YXRpbGU6R1BSIFsobWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJh bmQiICIrWlIsWlIiKV0NCiAJIFVOU1BFQ19BVE9NSUNfRVhDSEFOR0UpKQ0K ICAgIChzZXQgKG1hdGNoX2R1cCAxKQ0KIAkodW5zcGVjX3ZvbGF0aWxlOkdQ UiBbKG1hdGNoX29wZXJhbmQ6R1BSIDIgImFyaXRoX29wZXJhbmQiICJJLGQi KV0NCkBAIC02ODQsNyArNjg0LDcgQEANCiANCiAoZGVmaW5lX2luc24gImF0 b21pY19mZXRjaF9hZGQ8bW9kZT5fbGxzYyINCiAgIFsoc2V0IChtYXRjaF9v cGVyYW5kOkdQUiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZkLCZkIikNCi0J KHVuc3BlY192b2xhdGlsZTpHUFIgWyhtYXRjaF9vcGVyYW5kOkdQUiAxICJt ZW1vcnlfb3BlcmFuZCIgIitSLFIiKV0NCisJKHVuc3BlY192b2xhdGlsZTpH UFIgWyhtYXRjaF9vcGVyYW5kOkdQUiAxICJtZW1vcnlfb3BlcmFuZCIgIita UixaUiIpXQ0KIAkgVU5TUEVDX0FUT01JQ19GRVRDSF9PUCkpDQogICAgKHNl dCAobWF0Y2hfZHVwIDEpDQogCSh1bnNwZWNfdm9sYXRpbGU6R1BSDQpJbmRl eDogY29uZmlnL21pcHMvbWlwcy1jcHVzLmRlZg0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGNvbmZpZy9taXBzL21pcHMtY3B1cy5kZWYJKHJldmlz aW9uIDE5NTkwMCkNCisrKyBjb25maWcvbWlwcy9taXBzLWNwdXMuZGVmCSh3 b3JraW5nIGNvcHkpDQpAQCAtOTIsNiArOTIsOCBAQA0KIA0KIC8qIE1JUFMz MiBSZWxlYXNlIDIgcHJvY2Vzc29ycy4gICovDQogTUlQU19DUFUgKCJtNGsi LCBQUk9DRVNTT1JfTTRLLCAzMywgMCkNCitNSVBTX0NQVSAoIm0xNGtjIiwg UFJPQ0VTU09SX000SywgMzMsIDApDQorTUlQU19DUFUgKCJtMTRrIiwgUFJP Q0VTU09SX000SywgMzMsIDApDQogTUlQU19DUFUgKCI0a2VjIiwgUFJPQ0VT U09SXzRLQywgMzMsIDApDQogTUlQU19DUFUgKCI0a2VtIiwgUFJPQ0VTU09S XzRLQywgMzMsIDApDQogTUlQU19DUFUgKCI0a2VwIiwgUFJPQ0VTU09SXzRL UCwgMzMsIDApDQpJbmRleDogY29uZmlnL21pcHMvbWlwcy1wcm90b3MuaA0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGNvbmZpZy9taXBzL21pcHMt cHJvdG9zLmgJKHJldmlzaW9uIDE5NTkwMCkNCisrKyBjb25maWcvbWlwcy9t aXBzLXByb3Rvcy5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMzUwLDYgKzM1MCwx MiBAQA0KIGV4dGVybiB2b2lkIG1pcHNfZXhwYW5kX3ZlY19taW5tYXggKHJ0 eCwgcnR4LCBydHgsDQogCQkJCSAgICBydHggKCopIChydHgsIHJ0eCwgcnR4 KSwgYm9vbCk7DQogDQorZXh0ZXJuIGNvbnN0IGNoYXIgKnVtaXBzX291dHB1 dF9zYXZlX3Jlc3RvcmUgKGJvb2wsIHJ0eCk7DQorZXh0ZXJuIGJvb2wgdW1p cHNfc2F2ZV9yZXN0b3JlX3BhdHRlcm5fcCAoYm9vbCwgcnR4KTsNCitleHRl cm4gYm9vbCB1bWlwc19sb2FkX3N0b3JlX3BhaXJfcCAoYm9vbCwgcnR4ICop Ow0KK2V4dGVybiB2b2lkIHVtaXBzX291dHB1dF9sb2FkX3N0b3JlX3BhaXIg KGJvb2wsIHJ0eCAqKTsNCitleHRlcm4gYm9vbCB1bWlwc19tb3ZlcF90YXJn ZXRfcCAocnR4LCBydHgpOw0KK2V4dGVybiBib29sIHVtaXBzXzEyYml0X29m ZnNldF9hZGRyZXNzX3AgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOw0KIGV4 dGVybiBydHggbWlwc19leHBhbmRfdGhyZWFkX3BvaW50ZXIgKHJ0eCk7DQog DQogZXh0ZXJuIGJvb2wgbWlwc19laF91c2VzICh1bnNpZ25lZCBpbnQpOw0K SW5kZXg6IGNvbmZpZy9taXBzL21pcHMuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KLS0tIGNvbmZpZy9taXBzL21pcHMuYwkocmV2aXNpb24gMTk1OTAw KQ0KKysrIGNvbmZpZy9taXBzL21pcHMuYwkod29ya2luZyBjb3B5KQ0KQEAg LTc3LDYgKzc3LDkgQEANCiAgICBwcmVzZXJ2ZSB0aGUgbWF4aW11bSBzdGFj ayBhbGlnbm1lbnQuICBXZSB0aGVyZWZvcmUgdXNlIGEgdmFsdWUNCiAgICBv ZiAweDdmZjAgaW4gdGhpcyBjYXNlLg0KIA0KKyAgIG1pY3JvTUlQUyBMV00g YW5kIFNXTSBzdXBwb3J0IDEyLWJpdCBvZmZzZXRzIChmcm9tIC0weDgwMCB0 byAweDdmZiksDQorICAgc28gd2UgdXNlIGEgbWF4aW11bSBvZiAweDdmMCBm b3IgVEFSR0VUX01JQ1JPTUlQUy4NCisNCiAgICBNSVBTMTZlIFNBVkUgYW5k IFJFU1RPUkUgaW5zdHJ1Y3Rpb25zIGNhbiBhZGp1c3QgdGhlIHN0YWNrIHBv aW50ZXIgYnkNCiAgICB1cCB0byAweDdmOCBieXRlcyBhbmQgY2FuIHVzdWFs bHkgc2F2ZSBvciByZXN0b3JlIGFsbCB0aGUgcmVnaXN0ZXJzDQogICAgdGhh dCB3ZSBuZWVkIHRvIHNhdmUgb3IgcmVzdG9yZS4gIChOb3RlIHRoYXQgd2Ug Y2FuIG9ubHkgdXNlIHRoZXNlDQpAQCAtODYsOCArODksMTAgQEANCiAgICBS RVNUT1JFIGFyZSBub3QgYXZhaWxhYmxlLiAgV2UgY2FuIHRoZW4gdXNlIHVu ZXh0ZW5kZWQgaW5zdHJ1Y3Rpb25zDQogICAgdG8gc2F2ZSBhbmQgcmVzdG9y ZSByZWdpc3RlcnMsIGFuZCB0byBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0ZSB0 aGUgdG9wDQogICAgcGFydCBvZiB0aGUgZnJhbWUuICAqLw0KKw0KICNkZWZp bmUgTUlQU19NQVhfRklSU1RfU1RBQ0tfU1RFUAkJCQkJXA0KLSAgKCFUQVJH RVRfTUlQUzE2ID8gMHg3ZmYwCQkJCQkJXA0KKyAgKFRBUkdFVF9NSUNST01J UFMgPyAweDdmMAkJCQkJCVwNCisgICA6ICFUQVJHRVRfTUlQUzE2ID8gMHg3 ZmYwCQkJCQkJXA0KICAgIDogR0VORVJBVEVfTUlQUzE2RV9TQVZFX1JFU1RP UkUgPyAweDdmOAkJCQlcDQogICAgOiBUQVJHRVRfNjRCSVQgPyAweDEwMCA6 IDB4NDAwKQ0KIA0KQEAgLTU2MCw4ICs1NjUsOCBAQA0KIC8qIFRoZSBhbWJp ZW50IHRhcmdldCBmbGFncywgZXhjbHVkaW5nIE1BU0tfTUlQUzE2LiAgKi8N CiBzdGF0aWMgaW50IG1pcHNfYmFzZV90YXJnZXRfZmxhZ3M7DQogDQotLyog VHJ1ZSBpZiBNSVBTMTYgaXMgdGhlIGRlZmF1bHQgbW9kZS4gICovDQotYm9v bCBtaXBzX2Jhc2VfbWlwczE2Ow0KKy8qIFRoZSBkZWZhdWx0IGNvbXByZXNz aW9uIG1vZGUuICAqLw0KK3Vuc2lnbmVkIGludCBtaXBzX2Jhc2VfY29tcHJl c3Npb25fZmxhZ3M7DQogDQogLyogVGhlIGFtYmllbnQgdmFsdWVzIG9mIG90 aGVyIGdsb2JhbCB2YXJpYWJsZXMuICAqLw0KIHN0YXRpYyBpbnQgbWlwc19i YXNlX3NjaGVkdWxlX2luc25zOyAvKiBmbGFnX3NjaGVkdWxlX2luc25zICov DQpAQCAtNjc0LDYgKzY3OSw5IEBADQogICAgICBjb2RlIGdlbmVyYXRpb24g YnV0IGRvbid0IGNhcnJ5IG90aGVyIHNlbWFudGljcy4gICovDQogICB7ICJt aXBzMTYiLCAJICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgTlVMTCwg ZmFsc2UgfSwNCiAgIHsgIm5vbWlwczE2IiwgICAgMCwgMCwgdHJ1ZSwgIGZh bHNlLCBmYWxzZSwgTlVMTCwgZmFsc2UgfSwNCisgIHsgIm1pY3JvbWlwcyIs ICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgTlVMTCwgZmFsc2UgfSwN CisgIHsgIm5vbWljcm9taXBzIiwgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxz ZSwgTlVMTCwgZmFsc2UgfSwNCisgIHsgIm5vY29tcHJlc3Npb24iLCAwLCAw LCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBOVUxMLCBmYWxzZSB9LA0KICAgLyog QWxsb3cgZnVuY3Rpb25zIHRvIGJlIHNwZWNpZmllZCBhcyBpbnRlcnJ1cHQg aGFuZGxlcnMgKi8NCiAgIHsgImludGVycnVwdCIsICAgMCwgMCwgZmFsc2Us IHRydWUsICB0cnVlLCBOVUxMLCBmYWxzZSB9LA0KICAgeyAidXNlX3NoYWRv d19yZWdpc3Rlcl9zZXQiLAkwLCAwLCBmYWxzZSwgdHJ1ZSwgIHRydWUsIE5V TEwsIGZhbHNlIH0sDQpAQCAtMTE2NywxMCArMTE3NSwxMSBAQA0KICAgY29u c3QgY2hhciAqbmFtZTsNCiAgIGhhc2h2YWxfdCBoYXNoOw0KICAgdm9pZCAq KnNsb3Q7DQorICBib29sIGJhc2VfaXNfbWlwczE2ID0gKG1pcHNfYmFzZV9j b21wcmVzc2lvbl9mbGFncyAmIE1BU0tfTUlQUzE2KSAhPSAwOw0KIA0KICAg LyogVXNlIHRoZSBvcHBvc2l0ZSBvZiB0aGUgY29tbWFuZC1saW5lIHNldHRp bmcgZm9yIGFub255bW91cyBkZWNscy4gICovDQogICBpZiAoIURFQ0xfTkFN RSAoZGVjbCkpDQotICAgIHJldHVybiAhbWlwc19iYXNlX21pcHMxNjsNCisg ICAgcmV0dXJuICFiYXNlX2lzX21pcHMxNjsNCiANCiAgIGlmICghbWZsaXBf bWlwczE2X2h0YWIpDQogICAgIG1mbGlwX21pcHMxNl9odGFiID0gaHRhYl9j cmVhdGVfZ2djICgzNywgbWZsaXBfbWlwczE2X2h0YWJfaGFzaCwNCkBAIC0x MTg1LDcgKzExOTQsNyBAQA0KICAgICAgIG1pcHMxNl9mbGlwcGVyID0gIW1p cHMxNl9mbGlwcGVyOw0KICAgICAgIGVudHJ5ID0gZ2djX2FsbG9jX21mbGlw X21pcHMxNl9lbnRyeSAoKTsNCiAgICAgICBlbnRyeS0+bmFtZSA9IG5hbWU7 DQotICAgICAgZW50cnktPm1pcHMxNl9wID0gbWlwczE2X2ZsaXBwZXIgPyAh bWlwc19iYXNlX21pcHMxNiA6IG1pcHNfYmFzZV9taXBzMTY7DQorICAgICAg ZW50cnktPm1pcHMxNl9wID0gbWlwczE2X2ZsaXBwZXIgPyAhYmFzZV9pc19t aXBzMTYgOiBiYXNlX2lzX21pcHMxNjsNCiAgICAgICAqc2xvdCA9IGVudHJ5 Ow0KICAgICB9DQogICByZXR1cm4gZW50cnktPm1pcHMxNl9wOw0KQEAgLTEy MDcsMjAgKzEyMTYsNyBAQA0KIAkgIHx8IGxvb2t1cF9hdHRyaWJ1dGUgKCJm YXIiLCBUWVBFX0FUVFJJQlVURVMgKHR5cGUpKSAhPSBOVUxMKTsNCiB9DQog DQotLyogU2ltaWxhciBwcmVkaWNhdGVzIGZvciAibWlwczE2Ii8ibm9taXBz MTYiIGZ1bmN0aW9uIGF0dHJpYnV0ZXMuICAqLw0KIA0KLXN0YXRpYyBib29s DQotbWlwc19taXBzMTZfZGVjbF9wIChjb25zdF90cmVlIGRlY2wpDQotew0K LSAgcmV0dXJuIGxvb2t1cF9hdHRyaWJ1dGUgKCJtaXBzMTYiLCBERUNMX0FU VFJJQlVURVMgKGRlY2wpKSAhPSBOVUxMOw0KLX0NCi0NCi1zdGF0aWMgYm9v bA0KLW1pcHNfbm9taXBzMTZfZGVjbF9wIChjb25zdF90cmVlIGRlY2wpDQot ew0KLSAgcmV0dXJuIGxvb2t1cF9hdHRyaWJ1dGUgKCJub21pcHMxNiIsIERF Q0xfQVRUUklCVVRFUyAoZGVjbCkpICE9IE5VTEw7DQotfQ0KLQ0KIC8qIENo ZWNrIGlmIHRoZSBpbnRlcnJ1cHQgYXR0cmlidXRlIGlzIHNldCBmb3IgYSBm dW5jdGlvbi4gICovDQogDQogc3RhdGljIGJvb2wNCkBAIC0xMjU3LDEyICsx MjUzLDUxIEBADQogCQkJICAgVFlQRV9BVFRSSUJVVEVTICh0eXBlKSkgIT0g TlVMTDsNCiB9DQogDQotLyogUmV0dXJuIHRydWUgaWYgZnVuY3Rpb24gREVD TCBpcyBhIE1JUFMxNiBmdW5jdGlvbi4gIFJldHVybiB0aGUgYW1iaWVudA0K LSAgIHNldHRpbmcgaWYgREVDTCBpcyBudWxsLiAgKi8NCisvKiBSZXR1cm4g dGhlIHNldCBvZiBjb21wcmVzc2lvbiBtb2RlcyB0aGF0IGFyZSBleHBsaWNp dGx5IHJlcXVpcmVkDQorICAgYnkgREVDTC4gICovDQogDQotc3RhdGljIGJv b2wNCi1taXBzX3VzZV9taXBzMTZfbW9kZV9wICh0cmVlIGRlY2wpDQorc3Rh dGljIHVuc2lnbmVkIGludA0KK21pcHNfZ2V0X2NvbXByZXNzX29uX2ZsYWdz ICh0cmVlIGRlY2wpDQogew0KKyAgdW5zaWduZWQgaW50IGZsYWdzID0gMDsN CisNCisgIGlmIChsb29rdXBfYXR0cmlidXRlICgibWlwczE2IiwgREVDTF9B VFRSSUJVVEVTIChkZWNsKSkgIT0gTlVMTCkNCisgICAgZmxhZ3MgfD0gTUFT S19NSVBTMTY7DQorDQorICBpZiAobG9va3VwX2F0dHJpYnV0ZSAoIm1pY3Jv bWlwcyIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpICE9IE5VTEwpDQorICAg IGZsYWdzIHw9IE1BU0tfTUlDUk9NSVBTOw0KKw0KKyAgcmV0dXJuIGZsYWdz Ow0KK30NCisNCisvKiBSZXR1cm4gdGhlIHNldCBvZiBjb21wcmVzc2lvbiBt b2RlcyB0aGF0IGFyZSBleHBsaWNpdGx5IGZvcmJpZGRlbg0KKyAgIGJ5IERF Q0wuICAqLw0KKw0KK3N0YXRpYyB1bnNpZ25lZCBpbnQNCittaXBzX2dldF9j b21wcmVzc19vZmZfZmxhZ3MgKHRyZWUgZGVjbCkNCit7DQorICB1bnNpZ25l ZCBpbnQgZmxhZ3MgPSAwOw0KKw0KKyAgaWYgKGxvb2t1cF9hdHRyaWJ1dGUg KCJub2NvbXByZXNzaW9uIiwgREVDTF9BVFRSSUJVVEVTIChkZWNsKSkgIT0g TlVMTCkNCisgICAgZmxhZ3MgfD0gTUFTS19NSVBTMTYgfCBNQVNLX01JQ1JP TUlQUzsNCisNCisgIGlmIChsb29rdXBfYXR0cmlidXRlICgibm9taXBzMTYi LCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKSAhPSBOVUxMKQ0KKyAgICBmbGFn cyB8PSBNQVNLX01JUFMxNjsNCisNCisgIGlmIChsb29rdXBfYXR0cmlidXRl ICgibm9taWNyb21pcHMiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKSAhPSBO VUxMKQ0KKyAgICBmbGFncyB8PSBNQVNLX01JQ1JPTUlQUzsNCisNCisgIHJl dHVybiBmbGFnczsNCit9DQorDQorLyogUmV0dXJuIHRoZSBjb21wcmVzc2lv biBtb2RlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIGZ1bmN0aW9uIERFQ0wu DQorICAgUmV0dXJuIHRoZSBhbWJpZW50IHNldHRpbmcgaWYgREVDTCBpcyBu dWxsLiAgKi8NCitzdGF0aWMgdW5zaWduZWQgaW50DQorbWlwc19nZXRfY29t cHJlc3NfbW9kZSAodHJlZSBkZWNsKQ0KK3sNCisgIHVuc2lnbmVkIGludCBm bGFncywgZm9yY2Vfb247DQorDQorICBmbGFncyA9IG1pcHNfYmFzZV9jb21w cmVzc2lvbl9mbGFnczsNCiAgIGlmIChkZWNsKQ0KICAgICB7DQogICAgICAg LyogTmVzdGVkIGZ1bmN0aW9ucyBtdXN0IHVzZSB0aGUgc2FtZSBmcmFtZSBw b2ludGVyIGFzIHRoZWlyDQpAQCAtMTI3MCwxNCArMTMwNSwzOCBAQA0KICAg ICAgIHRyZWUgcGFyZW50ID0gZGVjbF9mdW5jdGlvbl9jb250ZXh0IChkZWNs KTsNCiAgICAgICBpZiAocGFyZW50KQ0KIAlkZWNsID0gcGFyZW50Ow0KLSAg ICAgIGlmIChtaXBzX21pcHMxNl9kZWNsX3AgKGRlY2wpKQ0KLQlyZXR1cm4g dHJ1ZTsNCi0gICAgICBpZiAobWlwc19ub21pcHMxNl9kZWNsX3AgKGRlY2wp KQ0KLQlyZXR1cm4gZmFsc2U7DQorICAgICAgZm9yY2Vfb24gPSBtaXBzX2dl dF9jb21wcmVzc19vbl9mbGFncyAoZGVjbCk7DQorICAgICAgaWYgKGZvcmNl X29uKQ0KKwlyZXR1cm4gZm9yY2Vfb247DQorICAgICAgZmxhZ3MgJj0gfm1p cHNfZ2V0X2NvbXByZXNzX29mZl9mbGFncyAoZGVjbCk7DQogICAgIH0NCi0g IHJldHVybiBtaXBzX2Jhc2VfbWlwczE2Ow0KKyAgcmV0dXJuIGZsYWdzOw0K IH0NCiANCisvKiAgUmV0dXJuIHRoZSBhdHRyaWJ1dGUgbmFtZSBhc3NvY2lh dGVkIHdpdGggTUFTS19NSVBTMTYgYW5kIE1BU0tfTUlDUk9NSVBTDQorICAg IGZsYWdzIEZMQUdTLiAgKi8NCisNCitzdGF0aWMgY29uc3QgY2hhciAqDQor bWlwc19nZXRfY29tcHJlc3Nfb25fbmFtZSAodW5zaWduZWQgaW50IGZsYWdz KQ0KK3sNCisgIGlmIChmbGFncyA9PSBNQVNLX01JUFMxNikNCisgICAgcmV0 dXJuICJtaXBzMTYiOw0KKyAgcmV0dXJuICJtaWNyb21pcHMiOw0KK30NCisN CisvKiBSZXR1cm4gdGhlIGF0dHJpYnV0ZSBuYW1lIHRoYXQgZm9yYmlkcyBN QVNLX01JUFMxNiBhbmQgTUFTS19NSUNST01JUFMNCisgICBmbGFncyBGTEFH Uy4gICovDQorDQorc3RhdGljIGNvbnN0IGNoYXIgKg0KK21pcHNfZ2V0X2Nv bXByZXNzX29mZl9uYW1lICh1bnNpZ25lZCBpbnQgZmxhZ3MpDQorew0KKyAg aWYgKGZsYWdzID09IE1BU0tfTUlQUzE2KQ0KKyAgICByZXR1cm4gIm5vbWlw czE2IjsNCisgIGlmIChmbGFncyA9PSBNQVNLX01JQ1JPTUlQUykNCisgICAg cmV0dXJuICJub21pY3JvbWlwcyI7DQorICByZXR1cm4gIm5vY29tcHJlc3Np b24iOw0KK30NCisNCiAvKiBJbXBsZW1lbnQgVEFSR0VUX0NPTVBfVFlQRV9B VFRSSUJVVEVTLiAgKi8NCiANCiBzdGF0aWMgaW50DQpAQCAtMTI5MSw0NCAr MTM1MCw5MyBAQA0KICAgcmV0dXJuIDE7DQogfQ0KIA0KKy8qIFNldCBjb21w cmVzc2lvbiBmbGFncyBiYXNlZCBvbiBhdHRyaWJ1dGVzLiAgKi8NCisNCitz dGF0aWMgdW5zaWduZWQgaW50DQorbWlwc19nZXRfY29tcHJlc3Npb25fYXR0 cnMgKHRyZWUgKmF0dHJpYnV0ZXMpDQorew0KKyAgdW5zaWduZWQgaW50IGNv bXByZXNzaW9uX2ZsYWdzID0gMDsNCisgIGlmIChsb29rdXBfYXR0cmlidXRl ICgibWlwczE2IiwgKmF0dHJpYnV0ZXMpICE9IE5VTEwpDQorICAgIGNvbXBy ZXNzaW9uX2ZsYWdzIHw9IE1BU0tfTUlQUzE2Ow0KKyAgaWYgKGxvb2t1cF9h dHRyaWJ1dGUgKCJtaWNyb21pcHMiLCAqYXR0cmlidXRlcykgIT0gTlVMTCkN CisgICAgY29tcHJlc3Npb25fZmxhZ3MgfD0gTUFTS19NSUNST01JUFM7DQor ICByZXR1cm4gY29tcHJlc3Npb25fZmxhZ3M7DQorfQ0KKw0KKy8qIFNldCBu b2NvbXByZXNzaW9uIGZsYWdzIGJhc2VkIG9uIGF0dHJpYnV0ZXMuICAqLw0K Kw0KK3N0YXRpYyB1bnNpZ25lZCBpbnQNCittaXBzX2dldF9ub2NvbXByZXNz aW9uX2F0dHJzICh0cmVlICphdHRyaWJ1dGVzKQ0KK3sNCisgIHVuc2lnbmVk IGludCBub2NvbXByZXNzaW9uX2ZsYWdzID0gMDsNCisNCisgIGlmIChsb29r dXBfYXR0cmlidXRlICgibm9taXBzMTYiLCAqYXR0cmlidXRlcykgIT0gTlVM TCkNCisgICAgbm9jb21wcmVzc2lvbl9mbGFncyB8PSBNQVNLX01JUFMxNjsN CisgIGlmIChsb29rdXBfYXR0cmlidXRlICgibm9taWNyb21pcHMiLCAqYXR0 cmlidXRlcykgIT0gTlVMTCkNCisgICAgbm9jb21wcmVzc2lvbl9mbGFncyB8 PSBNQVNLX01JQ1JPTUlQUzsNCisgIGlmIChsb29rdXBfYXR0cmlidXRlICgi bm9jb21wcmVzc2lvbiIsICphdHRyaWJ1dGVzKSAhPSBOVUxMKQ0KKyAgICBu b2NvbXByZXNzaW9uX2ZsYWdzIHw9IE1BU0tfTUlDUk9NSVBTIHwgTUFTS19N SVBTMTY7DQorICByZXR1cm4gbm9jb21wcmVzc2lvbl9mbGFnczsNCit9DQor DQogLyogSW1wbGVtZW50IFRBUkdFVF9JTlNFUlRfQVRUUklCVVRFUy4gICov DQogDQogc3RhdGljIHZvaWQNCiBtaXBzX2luc2VydF9hdHRyaWJ1dGVzICh0 cmVlIGRlY2wsIHRyZWUgKmF0dHJpYnV0ZXMpDQogew0KICAgY29uc3QgY2hh ciAqbmFtZTsNCi0gIGJvb2wgbWlwczE2X3AsIG5vbWlwczE2X3A7DQorICB1 bnNpZ25lZCBpbnQgY29tcHJlc3Npb25fZmxhZ3MsIG5vY29tcHJlc3Npb25f ZmxhZ3M7DQogDQogICAvKiBDaGVjayBmb3IgIm1pcHMxNiIgYW5kICJub21p cHMxNiIgYXR0cmlidXRlcy4gICovDQotICBtaXBzMTZfcCA9IGxvb2t1cF9h dHRyaWJ1dGUgKCJtaXBzMTYiLCAqYXR0cmlidXRlcykgIT0gTlVMTDsNCi0g IG5vbWlwczE2X3AgPSBsb29rdXBfYXR0cmlidXRlICgibm9taXBzMTYiLCAq YXR0cmlidXRlcykgIT0gTlVMTDsNCisgIGNvbXByZXNzaW9uX2ZsYWdzID0g bWlwc19nZXRfY29tcHJlc3Npb25fYXR0cnMgKGF0dHJpYnV0ZXMpOw0KKyAg bm9jb21wcmVzc2lvbl9mbGFncyA9IG1pcHNfZ2V0X25vY29tcHJlc3Npb25f YXR0cnMgKGF0dHJpYnV0ZXMpOw0KKw0KICAgaWYgKFRSRUVfQ09ERSAoZGVj bCkgIT0gRlVOQ1RJT05fREVDTCkNCiAgICAgew0KLSAgICAgIGlmIChtaXBz MTZfcCkNCi0JZXJyb3IgKCIlcXMgYXR0cmlidXRlIG9ubHkgYXBwbGllcyB0 byBmdW5jdGlvbnMiLCAibWlwczE2Iik7DQotICAgICAgaWYgKG5vbWlwczE2 X3ApDQotCWVycm9yICgiJXFzIGF0dHJpYnV0ZSBvbmx5IGFwcGxpZXMgdG8g ZnVuY3Rpb25zIiwgIm5vbWlwczE2Iik7DQorICAgICAgaWYgKG5vY29tcHJl c3Npb25fZmxhZ3MpDQorCWVycm9yICgiJXFzIGF0dHJpYnV0ZSBvbmx5IGFw cGxpZXMgdG8gZnVuY3Rpb24iLA0KKwkgICAgICAgbWlwc19nZXRfY29tcHJl c3Nfb2ZmX25hbWUgKG5vY29tcHJlc3Npb25fZmxhZ3MpKTsNCisNCisgICAg ICBpZiAoY29tcHJlc3Npb25fZmxhZ3MpDQorCWVycm9yICgiJXFzIGF0dHJp YnV0ZSBvbmx5IGFwcGxpZXMgdG8gZnVuY3Rpb24iLA0KKwkgICAgICAgbWlw c19nZXRfY29tcHJlc3Nfb25fbmFtZSAobm9jb21wcmVzc2lvbl9mbGFncykp Ow0KICAgICB9DQogICBlbHNlDQogICAgIHsNCi0gICAgICBtaXBzMTZfcCB8 PSBtaXBzX21pcHMxNl9kZWNsX3AgKGRlY2wpOw0KLSAgICAgIG5vbWlwczE2 X3AgfD0gbWlwc19ub21pcHMxNl9kZWNsX3AgKGRlY2wpOw0KLSAgICAgIGlm IChtaXBzMTZfcCB8fCBub21pcHMxNl9wKQ0KKyAgICAgIGNvbXByZXNzaW9u X2ZsYWdzIHw9IG1pcHNfZ2V0X2NvbXByZXNzX29uX2ZsYWdzIChkZWNsKTsN CisgICAgICBub2NvbXByZXNzaW9uX2ZsYWdzIHw9IG1pcHNfZ2V0X2NvbXBy ZXNzX29mZl9mbGFncyAoZGVjbCk7DQorDQorICAgICAgaWYgKGNvbXByZXNz aW9uX2ZsYWdzICYmIG5vY29tcHJlc3Npb25fZmxhZ3MpDQorCWVycm9yICgi JXFFIGNhbm5vdCBoYXZlIGJvdGggJXFzIGFuZCAlcXMgYXR0cmlidXRlcyIs DQorCSAgICAgICBERUNMX05BTUUgKGRlY2wpLCBtaXBzX2dldF9jb21wcmVz c19vbl9uYW1lIChjb21wcmVzc2lvbl9mbGFncyksDQorCSAgICAgICBtaXBz X2dldF9jb21wcmVzc19vZmZfbmFtZSAobm9jb21wcmVzc2lvbl9mbGFncykp Ow0KKw0KKyAgICAgIGlmIChjb21wcmVzc2lvbl9mbGFncyAmIE1BU0tfTUlQ UzE2DQorICAgICAgICAgICYmIGNvbXByZXNzaW9uX2ZsYWdzICYgTUFTS19N SUNST01JUFMpDQorCWVycm9yICgiJXFFIGNhbm5vdCBoYXZlIGJvdGggJXMg YW5kICVzIGF0dHJpYnV0ZXMiLA0KKwkgICAgICAgREVDTF9OQU1FIChkZWNs KSwgIm1pcHMxNiIsICJtaWNyb21pcHMiKTsNCisNCisgICAgICAvKiBJZiBE RUNMIGlzICJub2NvbXByZXNzaW9uIiBzZXQgdGhlICJub21pcHMxNiIgYW5k IA0KKwkgIm5vbWljcm9taXBzIiBhdHRyaWJ1dGVzLiAgKi8NCisgICAgICBp ZiAobm9jb21wcmVzc2lvbl9mbGFncyAmIE1BU0tfTUlQUzE2DQorICAgICAg ICAgICYmIG5vY29tcHJlc3Npb25fZmxhZ3MgJiBNQVNLX01JQ1JPTUlQUykN CiAJew0KLQkgIC8qIERFQ0wgY2Fubm90IGJlIHNpbXVsdGFuZW91c2x5ICJt aXBzMTYiIGFuZCAibm9taXBzMTYiLiAgKi8NCi0JICBpZiAobWlwczE2X3Ag JiYgbm9taXBzMTZfcCkNCi0JICAgIGVycm9yICgiJXFFIGNhbm5vdCBoYXZl IGJvdGggJTxtaXBzMTYlPiBhbmQgIg0KLQkJICAgIiU8bm9taXBzMTYlPiBh dHRyaWJ1dGVzIiwNCi0JCSAgIERFQ0xfTkFNRSAoZGVjbCkpOw0KKwkgIG5h bWUgPSAibm9taXBzMTYiOw0KKwkgICphdHRyaWJ1dGVzID0gdHJlZV9jb25z IChnZXRfaWRlbnRpZmllciAobmFtZSksIE5VTEwsICphdHRyaWJ1dGVzKTsN CisJICBuYW1lID0gIm5vbWljcm9taXBzIjsNCisJICAqYXR0cmlidXRlcyA9 IHRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIgKG5hbWUpLCBOVUxMLCAqYXR0 cmlidXRlcyk7DQogCX0NCi0gICAgICBlbHNlIGlmIChUQVJHRVRfRkxJUF9N SVBTMTYgJiYgIURFQ0xfQVJUSUZJQ0lBTCAoZGVjbCkpDQorICAgICBlbHNl IGlmIChUQVJHRVRfRkxJUF9NSVBTMTYgJiYgIURFQ0xfQVJUSUZJQ0lBTCAo ZGVjbCkpDQogCXsNCiAJICAvKiBJbXBsZW1lbnQgLW1mbGlwLW1pcHMxNi4g IElmIERFQ0wgaGFzIG5laXRoZXIgYSAibm9taXBzMTYiIG5vciBhDQogCSAg ICAgIm1pcHMxNiIgYXR0cmlidXRlLCBhcmJpdHJhcmlseSBwaWNrIG9uZS4g IFdlIG11c3QgcGljayB0aGUgc2FtZQ0KIAkgICAgIHNldHRpbmcgZm9yIGR1 cGxpY2F0ZSBkZWNsYXJhdGlvbnMgb2YgYSBmdW5jdGlvbi4gICovDQogCSAg bmFtZSA9IG1mbGlwX21pcHMxNl91c2VfbWlwczE2X3AgKGRlY2wpID8gIm1p cHMxNiIgOiAibm9taXBzMTYiOw0KKwkgIG5hbWUgPSAibm9taXBzMTYiOw0K KyAJICAqYXR0cmlidXRlcyA9IHRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIg KG5hbWUpLCBOVUxMLCAqYXR0cmlidXRlcyk7DQorCSAgbmFtZSA9ICJub21p Y3JvbWlwcyI7DQogCSAgKmF0dHJpYnV0ZXMgPSB0cmVlX2NvbnMgKGdldF9p ZGVudGlmaWVyIChuYW1lKSwgTlVMTCwgKmF0dHJpYnV0ZXMpOw0KLQl9DQor IAl9DQogICAgIH0NCiB9DQogDQpAQCAtMTMzNywxNCArMTQ0NSwyNCBAQA0K IHN0YXRpYyB0cmVlDQogbWlwc19tZXJnZV9kZWNsX2F0dHJpYnV0ZXMgKHRy ZWUgb2xkZGVjbCwgdHJlZSBuZXdkZWNsKQ0KIHsNCi0gIC8qIFRoZSBkZWNs cycgIm1pcHMxNiIgYW5kICJub21pcHMxNiIgYXR0cmlidXRlcyBtdXN0IG1h dGNoIGV4YWN0bHkuICAqLw0KLSAgaWYgKG1pcHNfbWlwczE2X2RlY2xfcCAo b2xkZGVjbCkgIT0gbWlwc19taXBzMTZfZGVjbF9wIChuZXdkZWNsKSkNCisg IHVuc2lnbmVkIGludCBkaWZmOw0KKw0KKyAgZGlmZiA9IChtaXBzX2dldF9j b21wcmVzc19vbl9mbGFncyAob2xkZGVjbCkNCisJICBeIG1pcHNfZ2V0X2Nv bXByZXNzX29uX2ZsYWdzIChuZXdkZWNsKSk7DQorDQorICBpZiAoZGlmZikN CiAgICAgZXJyb3IgKCIlcUUgcmVkZWNsYXJlZCB3aXRoIGNvbmZsaWN0aW5n ICVxcyBhdHRyaWJ1dGVzIiwNCi0JICAgREVDTF9OQU1FIChuZXdkZWNsKSwg Im1pcHMxNiIpOw0KLSAgaWYgKG1pcHNfbm9taXBzMTZfZGVjbF9wIChvbGRk ZWNsKSAhPSBtaXBzX25vbWlwczE2X2RlY2xfcCAobmV3ZGVjbCkpDQorCSAg IERFQ0xfTkFNRSAobmV3ZGVjbCksIG1pcHNfZ2V0X2NvbXByZXNzX29uX25h bWUgKGRpZmYpKTsNCisNCisNCisgIGRpZmYgPSAobWlwc19nZXRfY29tcHJl c3Nfb2ZmX2ZsYWdzIChvbGRkZWNsKQ0KKwkgIF4gbWlwc19nZXRfY29tcHJl c3Nfb2ZmX2ZsYWdzIChuZXdkZWNsKSk7DQorDQorICBpZiAoZGlmZikNCiAg ICAgZXJyb3IgKCIlcUUgcmVkZWNsYXJlZCB3aXRoIGNvbmZsaWN0aW5nICVx cyBhdHRyaWJ1dGVzIiwNCi0JICAgREVDTF9OQU1FIChuZXdkZWNsKSwgIm5v bWlwczE2Iik7DQorCSAgIERFQ0xfTkFNRSAobmV3ZGVjbCksIG1pcHNfZ2V0 X2NvbXByZXNzX29mZl9uYW1lIChkaWZmKSk7DQogDQorDQogICByZXR1cm4g bWVyZ2VfYXR0cmlidXRlcyAoREVDTF9BVFRSSUJVVEVTIChvbGRkZWNsKSwN CiAJCQkgICBERUNMX0FUVFJJQlVURVMgKG5ld2RlY2wpKTsNCiB9DQpAQCAt MTU1MCw3ICsxNjY4LDcgQEANCiAgIHJldHVybiAoR0VUX0NPREUgKHgpID09 IFNZTUJPTF9SRUYNCiAJICAmJiBTWU1CT0xfUkVGX0xPQ0FMX1AgKHgpDQog CSAgJiYgIVNZTUJPTF9SRUZfRVhURVJOQUxfUCAoeCkNCi0JICAmJiBtaXBz X3VzZV9taXBzMTZfbW9kZV9wIChTWU1CT0xfUkVGX0RFQ0wgKHgpKSk7DQor CSAgJiYgKG1pcHNfZ2V0X2NvbXByZXNzX21vZGUgKFNZTUJPTF9SRUZfREVD TCAoeCkpICYgTUFTS19NSVBTMTYpKTsNCiB9DQogDQogLyogUmV0dXJuIHRy dWUgaWYgU1lNQk9MX1JFRiBYIGJpbmRzIGxvY2FsbHkuICAqLw0KQEAgLTIz MDAsNiArMjQxOCwyMCBAQA0KICAgcmV0dXJuIDA7DQogfQ0KIA0KKy8qIFJl dHVybiB0cnVlIGlmIFggaXMgYSBsZWdpdGltYXRlIGFkZHJlc3Mgd2l0aCBh IDEyLWJpdCBvZmZzZXQuDQorICAgTU9ERSBpcyB0aGUgbW9kZSBvZiB0aGUg dmFsdWUgYmVpbmcgYWNjZXNzZWQuICAqLw0KKw0KK2Jvb2wNCit1bWlwc18x MmJpdF9vZmZzZXRfYWRkcmVzc19wIChydHggeCwgZW51bSBtYWNoaW5lX21v ZGUgbW9kZSkNCit7DQorICBzdHJ1Y3QgbWlwc19hZGRyZXNzX2luZm8gYWRk cjsNCisNCisgIHJldHVybiAobWlwc19jbGFzc2lmeV9hZGRyZXNzICgmYWRk ciwgeCwgbW9kZSwgZmFsc2UpDQorCSAgJiYgYWRkci50eXBlID09IEFERFJF U1NfUkVHDQorCSAgJiYgQ09OU1RfSU5UX1AgKGFkZHIub2Zmc2V0KQ0KKwkg ICYmIFVNSVBTXzEyQklUX09GRlNFVF9QIChhZGRyLm9mZnNldCkpOw0KK30N CisNCiAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgbmVl ZGVkIHRvIGxvYWQgY29uc3RhbnQgWC4NCiAgICBSZXR1cm4gMCBpZiBYIGlz bid0IGEgdmFsaWQgY29uc3RhbnQuICAqLw0KIA0KQEAgLTYwOTcsNiArNjIy OSwxMyBAQA0KICAgZWxzZQ0KICAgICBmcHJpbnRmIChhc21fb3V0X2ZpbGUs ICJcdC5zZXRcdG5vbWlwczE2XG4iKTsNCiANCisgIGlmIChUQVJHRVRfTUlD Uk9NSVBTKQ0KKyAgICBmcHJpbnRmIChhc21fb3V0X2ZpbGUsICJcdC5zZXRc dG1pY3JvbWlwc1xuIik7DQorI2lmZGVmIEhBVkVfR0FTX01JQ1JPTUlQUw0K KyAgZWxzZSANCisgICAgZnByaW50ZiAoYXNtX291dF9maWxlLCAiXHQuc2V0 XHRub21pY3JvbWlwc1xuIik7DQorI2VuZGlmDQorDQogICBpZiAoIWZsYWdf aW5oaWJpdF9zaXplX2RpcmVjdGl2ZSkNCiAgICAgew0KICAgICAgIGZwdXRz ICgiXHQuZW50XHQiLCBhc21fb3V0X2ZpbGUpOw0KQEAgLTY5MDMsMTEgKzcw NDIsNTEgQEANCiAgICAgbWlwc19yZXN0b3JlX2dwX2Zyb21fY3ByZXN0b3Jl X3Nsb3QgKGdlbl9ydHhfUkVHIChQbW9kZSwgR1BfQVJHX0ZJUlNUICsgMikp Ow0KIH0NCiANCisvKiBSZXR1cm4gdHJ1ZSBpZiBhIGNhbGwgdG8gREVDTCBt YXkgbmVlZCB0byB1c2UgSkFMWC4gICovDQorDQorc3RhdGljIGJvb2wNCitt aXBzX2NhbGxfbWF5X25lZWRfamFseF9wICh0cmVlIGRlY2wpDQorew0KKyAg LyogSWYgdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24gdW5pdCB3b3VsZCB1c2Ug YSBkaWZmZXJlbnQgbW9kZSBmb3IgREVDTCwNCisgICAgIGFzc3VtZSB0aGF0 IHRoZSBjYWxsIG5lZWRzIEpBTFguICAqLw0KKyAgaWYgKG1pcHNfZ2V0X2Nv bXByZXNzX21vZGUgKGRlY2wpICE9IFRBUkdFVF9DT01QUkVTU0lPTikNCisg ICAgcmV0dXJuIHRydWU7DQorDQorICAvKiBtaXBzX2dldF9jb21wcmVzc19t b2RlIGlzIGFsd2F5cyBhY2N1cmF0ZSBmb3IgbG9jYWxseS1iaW5kaW5nDQor ICAgICBmdW5jdGlvbnMgaW4gdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24gdW5p dC4gICovDQorICBpZiAoIURFQ0xfRVhURVJOQUwgKGRlY2wpICYmIHRhcmdl dG0uYmluZHNfbG9jYWxfcCAoZGVjbCkpDQorICAgIHJldHVybiBmYWxzZTsN CisNCisgIC8qIFBMVHMgdXNlIHRoZSBzdGFuZGFyZCBlbmNvZGluZywgc28g Y2FsbHMgdGhhdCBtaWdodCBnbyB2aWEgUExUcw0KKyAgICAgbXVzdCB1c2Ug SkFMWC4gICovDQorICBpZiAoVEFSR0VUX0NPTVBSRVNTSU9ODQorICAgICAg JiYgVEFSR0VUX0FCSUNBTExTX1BJQzANCisgICAgICAmJiBERUNMX0VYVEVS TkFMIChkZWNsKQ0KKyAgICAgICYmICF0YXJnZXRtLmJpbmRzX2xvY2FsX3Ag KGRlY2wpKQ0KKyAgICByZXR1cm4gdHJ1ZTsNCisNCisgIC8qIFdoZW4gLW1p bnRlcmxpbmstY29tcHJlc3NlZCBpcyBpbiBlZmZlY3QsIGFzc3VtZSB0aGF0 IGZ1bmN0aW9ucw0KKyAgICAgY291bGQgdXNlIGEgZGlmZmVyZW50IGVuY29k aW5nIG1vZGUgdW5sZXNzIGFuIGF0dHJpYnV0ZSBleHBsaWNpdGx5DQorICAg ICB0ZWxscyB1cyBvdGhlcndpc2UuICAqLw0KKyAgaWYgKFRBUkdFVF9JTlRF UkxJTktfQ09NUFJFU1NFRCkNCisgICAgew0KKyAgICAgIGlmICghVEFSR0VU X0NPTVBSRVNTSU9OICYmIG1pcHNfZ2V0X2NvbXByZXNzX29mZl9mbGFncyAo ZGVjbCkgPT0gMCkNCisJcmV0dXJuIHRydWU7DQorICAgICAgaWYgKFRBUkdF VF9DT01QUkVTU0lPTiAmJiBtaXBzX2dldF9jb21wcmVzc19vbl9mbGFncyAo ZGVjbCkgPT0gMCkNCisJcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgIHJl dHVybiBmYWxzZTsNCit9DQorDQogLyogSW1wbGVtZW50IFRBUkdFVF9GVU5D VElPTl9PS19GT1JfU0lCQ0FMTC4gICovDQogDQogc3RhdGljIGJvb2wNCiBt aXBzX2Z1bmN0aW9uX29rX2Zvcl9zaWJjYWxsICh0cmVlIGRlY2wsIHRyZWUg ZXhwIEFUVFJJQlVURV9VTlVTRUQpDQogew0KKw0KKyAgdW5zaWduZWQgaW50 IGNvbXByZXNzaW9uX21vZGUgPSBtaXBzX2dldF9jb21wcmVzc19tb2RlIChk ZWNsKTsNCisNCiAgIGlmICghVEFSR0VUX1NJQkNBTExTKQ0KICAgICByZXR1 cm4gZmFsc2U7DQogDQpAQCAtNjkxNiwyMiArNzA5NSw0MyBAQA0KICAgaWYg KG1pcHNfaW50ZXJydXB0X3R5cGVfcCAoVFJFRV9UWVBFIChjdXJyZW50X2Z1 bmN0aW9uX2RlY2wpKSkNCiAgICAgcmV0dXJuIGZhbHNlOw0KIA0KKyAgaWYg KFRBUkdFVF9NSUNST01JUFMpDQorICAgIHsNCisNCisgICAgICAvKiBXZSBj YW4ndCBkbyBhIHNpYmNhbGwgaWYgdGhlIGNhbGxlZCBmdW5jdGlvbiBpc24n dCBtaWNyb01JUFMuICAqLw0KKyAgICAgIGlmIChkZWNsDQorCSAgJiYgKGNv bXByZXNzaW9uX21vZGUgJiBNQVNLX01JQ1JPTUlQUykgPT0gMA0KKwkgICYm IGNvbnN0X2NhbGxfaW5zbl9vcGVyYW5kIChYRVhQIChERUNMX1JUTCAoZGVj bCksIDApLCBWT0lEbW9kZSkpDQorCXJldHVybiBmYWxzZTsNCisNCisgICAg ICAvKiBEaXJlY3QgSnMgYXJlIG9ubHkgcG9zc2libGUgdG8gZnVuY3Rpb25z IHRoYXQgdXNlIHRoZSBzYW1lIElTQQ0KKwkgZW5jb2RpbmcuICBUaGVyZSBp cyBubyBKWCBjb3VudGVycG9hcnQgb2YgSkFMWC4gICovDQorICAgICAgaWYg KGRlY2wNCisJICAmJiBjb25zdF9jYWxsX2luc25fb3BlcmFuZCAoWEVYUCAo REVDTF9SVEwgKGRlY2wpLCAwKSwgVk9JRG1vZGUpDQorCSAgJiYgbWlwc19j YWxsX21heV9uZWVkX2phbHhfcCAoZGVjbCkpDQorCXJldHVybiBmYWxzZTsN CisNCisgICAgICAvKiBPdGhlcndpc2UgT0suICAqLw0KKyAgICAgIHJldHVy biB0cnVlOw0KKyAgICB9DQorDQogICAvKiBXZSBjYW4ndCBkbyBhIHNpYmNh bGwgaWYgdGhlIGNhbGxlZCBmdW5jdGlvbiBpcyBhIE1JUFMxNiBmdW5jdGlv bg0KICAgICAgYmVjYXVzZSB0aGVyZSBpcyBubyBkaXJlY3QgImp4IiBpbnN0 cnVjdGlvbiBlcXVpdmFsZW50IHRvICJqYWx4IiB0bw0KICAgICAgc3dpdGNo IHRoZSBJU0EgbW9kZS4gIFdlIG9ubHkgY2FyZSBhYm91dCBjYXNlcyB3aGVy ZSB0aGUgc2libGluZw0KICAgICAgYW5kIG5vcm1hbCBjYWxscyB3b3VsZCBi b3RoIGJlIGRpcmVjdC4gICovDQogICBpZiAoZGVjbA0KLSAgICAgICYmIG1p cHNfdXNlX21pcHMxNl9tb2RlX3AgKGRlY2wpDQorICAgICAgJiYgKChjb21w cmVzc2lvbl9tb2RlICYgKE1BU0tfTUlQUzE2IHwgTUFTS19NSUNST01JUFMp KSAhPSAwKQ0KICAgICAgICYmIGNvbnN0X2NhbGxfaW5zbl9vcGVyYW5kIChY RVhQIChERUNMX1JUTCAoZGVjbCksIDApLCBWT0lEbW9kZSkpDQogICAgIHJl dHVybiBmYWxzZTsNCiANCi0gIC8qIFdoZW4gLW1pbnRlcmxpbmstbWlwczE2 IGlzIGluIGVmZmVjdCwgYXNzdW1lIHRoYXQgbm9uLWxvY2FsbHktYmluZGlu Zw0KLSAgICAgZnVuY3Rpb25zIGNvdWxkIGJlIE1JUFMxNiBvbmVzIHVubGVz cyBhbiBhdHRyaWJ1dGUgZXhwbGljaXRseSB0ZWxscw0KKyAgLyogV2hlbiAt bWludGVybGluay1jb21wcmVzc2VkIGlzIGluIGVmZmVjdCwgYXNzdW1lIHRo YXQgbm9uLWxvY2FsbHktYmluZGluZw0KKyAgICAgZnVuY3Rpb25zIGNvdWxk IGJlIE1JUFMxNiBvciBtaWNyb01JUFMgdW5sZXNzIGFuIGF0dHJpYnV0ZSBl eHBsaWNpdGx5IHRlbGxzDQogICAgICB1cyBvdGhlcndpc2UuICAqLw0KLSAg aWYgKFRBUkdFVF9JTlRFUkxJTktfTUlQUzE2DQorICBpZiAoVEFSR0VUX0lO VEVSTElOS19DT01QUkVTU0VEDQogICAgICAgJiYgZGVjbA0KICAgICAgICYm IChERUNMX0VYVEVSTkFMIChkZWNsKSB8fCAhdGFyZ2V0bS5iaW5kc19sb2Nh bF9wIChkZWNsKSkNCi0gICAgICAmJiAhbWlwc19ub21pcHMxNl9kZWNsX3Ag KGRlY2wpDQorICAgICAgJiYgKGNvbXByZXNzaW9uX21vZGUgJiBNQVNLX01J Q1JPTUlQUykgPT0gMA0KKyAgICAgICYmIChjb21wcmVzc2lvbl9tb2RlICYg TUFTS19NSVBTMTYpID09IDANCiAgICAgICAmJiBjb25zdF9jYWxsX2luc25f b3BlcmFuZCAoWEVYUCAoREVDTF9SVEwgKGRlY2wpLCAwKSwgVk9JRG1vZGUp KQ0KICAgICByZXR1cm4gZmFsc2U7DQogDQpAQCAtNzc5OCw2ICs3OTk4LDkg QEANCiAgICAnXicJUHJpbnQgdGhlIG5hbWUgb2YgdGhlIHBpYyBjYWxsLXRo cm91Z2ggcmVnaXN0ZXIgKHQ5IG9yICQyNSkuDQogICAgJysnCVByaW50IHRo ZSBuYW1lIG9mIHRoZSBncCByZWdpc3RlciAodXN1YWxseSBncCBvciAkMjgp Lg0KICAgICckJwlQcmludCB0aGUgbmFtZSBvZiB0aGUgc3RhY2sgcG9pbnRl ciByZWdpc3RlciAoc3Agb3IgJDI5KS4NCisgICAnOicgIFByaW50ICJjIiB0 byB1c2UgdGhlIGNvbXBhY3QgdmVyc2lvbiBpZiB0aGUgZGVsYXkgc2xvdCBp cyBhIG5vcC4NCisgICAnIScgIFByaW50ICJzIiB0byB1c2UgdGhlIHNob3J0 IHZlcnNpb24gaWYgdGhlIGRlbGF5IHNsb3QgY29udGFpbnMgYQ0KKwkxNi1i aXQgaW5zdHJ1Y3Rpb24uDQogDQogICAgU2VlIGFsc28gbWlwc19pbml0X3By aW50X29wZXJhbmRfcHVjbnQuICAqLw0KIA0KQEAgLTc4ODEsNiArODA4NCwy MCBAQA0KICAgICAgIGZwdXRzIChyZWdfbmFtZXNbU1RBQ0tfUE9JTlRFUl9S RUdOVU1dLCBmaWxlKTsNCiAgICAgICBicmVhazsNCiANCisgICAgY2FzZSAn Oic6DQorICAgICAgLyogV2hlbiBmaW5hbF9zZXF1ZW5jZSBpcyAwLCB0aGUg ZGVsYXkgc2xvdCB3aWxsIGJlIGEgbm9wLiAgV2UgY2FuDQorCSB1c2UgdGhl IGNvbXBhY3QgdmVyc2lvbiBmb3IgbWljcm9NSVBTLiAgKi8NCisgICAgICBp ZiAoZmluYWxfc2VxdWVuY2UgPT0gMCkNCisJcHV0YyAoJ2MnLCBmaWxlKTsN CisgICAgICBicmVhazsNCisNCisgICAgY2FzZSAnISc6DQorICAgICAgLyog V2hlbiBmaW5hbF9zZXF1ZW5jZSBpcyAwLCB0aGUgZGVsYXkgc2xvdCB3aWxs IGJlIGEgbm9wLiAgV2UgY2FuDQorCSBhIDE2LWJpdCBkZWxheSBzbG90IGZv ciBtaWNyb01JUFMuICAqLw0KKyAgICAgIGlmIChmaW5hbF9zZXF1ZW5jZSA9 PSAwKQ0KKwlwdXRjICgncycsIGZpbGUpOw0KKyAgICAgIGJyZWFrOw0KKw0K ICAgICBkZWZhdWx0Og0KICAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsNCiAg ICAgICBicmVhazsNCkBAIC03ODk0LDcgKzgxMTEsNyBAQA0KIHsNCiAgIGNv bnN0IGNoYXIgKnA7DQogDQotICBmb3IgKHAgPSAiKClbXTw+KiMvP34uQF4r JCI7ICpwOyBwKyspDQorICBmb3IgKHAgPSAiKClbXTw+KiMvP34uQF4rJDoh IjsgKnA7IHArKykNCiAgICAgbWlwc19wcmludF9vcGVyYW5kX3B1bmN0Wyh1 bnNpZ25lZCBjaGFyKSAqcF0gPSB0cnVlOw0KIH0NCiANCkBAIC0xMDIzNiw2 ICsxMDQ1MywxMjkgQEANCiAgICAgICB9DQogfQ0KIA0KKy8qIFNhdmUgcmVn aXN0ZXIgUkVHIHRvIE1FTS4gIE1ha2UgdGhlIGluc3RydWN0aW9uIGZyYW1l LXJlbGF0ZWQuICAqLw0KKw0KK3N0YXRpYyB2b2lkDQorbWlwc19zYXZlX3Jl ZyAocnR4IHJlZywgcnR4IG1lbSkNCit7DQorICBpZiAoR0VUX01PREUgKHJl ZykgPT0gREZtb2RlICYmICFUQVJHRVRfRkxPQVQ2NCkNCisgICAgew0KKyAg ICAgIHJ0eCB4MSwgeDI7DQorDQorICAgICAgbWlwc19lbWl0X21vdmVfb3Jf c3BsaXQgKG1lbSwgcmVnLCBTUExJVF9JRl9ORUNFU1NBUlkpOw0KKw0KKyAg ICAgIHgxID0gbWlwc19mcmFtZV9zZXQgKG1pcHNfc3Vid29yZCAobWVtLCBm YWxzZSksDQorCQkJICAgbWlwc19zdWJ3b3JkIChyZWcsIGZhbHNlKSk7DQor ICAgICAgeDIgPSBtaXBzX2ZyYW1lX3NldCAobWlwc19zdWJ3b3JkIChtZW0s IHRydWUpLA0KKwkJCSAgIG1pcHNfc3Vid29yZCAocmVnLCB0cnVlKSk7DQor ICAgICAgbWlwc19zZXRfZnJhbWVfZXhwciAoZ2VuX3J0eF9QQVJBTExFTCAo Vk9JRG1vZGUsIGdlbl9ydHZlYyAoMiwgeDEsIHgyKSkpOw0KKyAgICB9DQor ICBlbHNlDQorICAgIG1pcHNfZW1pdF9zYXZlX3Nsb3RfbW92ZSAobWVtLCBy ZWcsIE1JUFNfUFJPTE9HVUVfVEVNUCAoR0VUX01PREUgKHJlZykpKTsNCit9 DQorDQorDQorLyogQ2FwdHVyZSB0aGUgcmVnaXN0ZXIgY29tYmluYXRpb25z IHRoYXQgYXJlIGFsbG93ZWQgaW4gYSBzd20gb3IgbHdtDQorICAgaW5zdHJ1 Y3Rpb24uICBUaGUgZW50cmllcyBhcmUgb3JkZXJlZCBieSBudW1iZXIgb2Yg cmVnaXN0ZXJzIHNldCBpbg0KKyAgIHRoZSBtYXNrLiAgV2UgYWxzbyBpZ25v cmUgdGhlIHNpbmdsZSByZWdpc3RlciBlbmNvZGluZ3MgYmVjYXVzZSBhDQor ICAgbm9ybWFsIHN3L2x3IGlzIHByZWZlcnJlZC4gICovDQorICAgDQorc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGludCB1bWlwc19zd21fbWFza1sxN10gPSB7 DQorIDB4YzBmZjAwMDAsIDB4ODBmZjAwMDAsIDB4NDBmZjAwMDAsIDB4ODA3 ZjAwMDAsDQorIDB4MDBmZjAwMDAsIDB4ODAzZjAwMDAsIDB4MDA3ZjAwMDAs IDB4ODAxZjAwMDAsCQ0KKyAweDAwM2YwMDAwLCAweDgwMGYwMDAwLCAweDAw MWYwMDAwLCAweDgwMDcwMDAwLA0KKyAweDAwMGYwMDAwLCAweDgwMDMwMDAw LCAweDAwMDcwMDAwLCAweDgwMDEwMDAwLA0KKyAweDAwMDMwMDAwIH07DQor DQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1bWlwc19zd21fZW5jb2Rp bmdbMTddID0gew0KKyAyNSwgMjQsIDksIDIzLCA4LCAyMiwgNywgMjEsIDYs IDIwLCA1LCAxOSwgNCwgMTgsIDMsIDE3LCAyIH07DQorDQorDQorLyogVHJ5 IHRvIHVzZSBhIG1pY3JvTUlQUyBMV00gb3IgU1dNIGluc3RydWN0aW9uIHRv IHNhdmUgb3IgcmVzdG9yZQ0KKyAgIGFzIG1hbnkgR1BScyBpbiAqTUFTSyBh cyBwb3NzaWJsZS4gICpPRkZTRVQgaXMgdGhlIG9mZnNldCBmcm9tIHRoZQ0K KyAgIHN0YWNrIHBvaW50ZXIgb2YgdGhlIHRvcG1vc3Qgc2F2ZSBzbG90Lg0K Kw0KKyAgIFJlbW92ZSBmcm9tICpNQVNLIGFsbCByZWdpc3RlcnMgdGhhdCB3 ZXJlIGhhbmRsZWQgdXNpbmcgTFdNIGFuZCBTV00uDQorICAgVXBkYXRlICpP RkZTRVQgc28gdGhhdCBpdCBwb2ludHMgdG8gdGhlIGZpcnN0IHVudXNlZCBz YXZlIHNsb3QuICAqLw0KKw0KK3N0YXRpYyBib29sDQordW1pcHNfYnVpbGRf c2F2ZV9yZXN0b3JlIChtaXBzX3NhdmVfcmVzdG9yZV9mbiBmbiwNCisJCQkg IHVuc2lnbmVkICptYXNrLCBIT1NUX1dJREVfSU5UICpvZmZzZXQpDQorew0K KyAgaW50IGksIG5yZWdzOw0KKyAgdW5zaWduZWQgaW50IGo7DQorICBydHgg cGF0dGVybiwgc2V0LCByZWcsIG1lbTsNCisgIEhPU1RfV0lERV9JTlQgdGhp c19vZmZzZXQ7DQorICBydHggdGhpc19iYXNlOw0KKw0KKyAgLyogVHJ5IG1h dGNoaW5nICQxNiB0byAkMzEgKHMwIHRvIHJhKS4gICovDQorICBmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRSAodW1pcHNfc3dtX21hc2spOyBpKyspDQor ICAgIGlmICgoKm1hc2sgJiAweGZmZmYwMDAwKSA9PSB1bWlwc19zd21fbWFz a1tpXSkNCisgICAgICBicmVhazsNCisNCisgIGlmIChpID09IEFSUkFZX1NJ WkUgKHVtaXBzX3N3bV9tYXNrKSkNCisgICAgcmV0dXJuIGZhbHNlOw0KKw0K KyAgLyogQWRqdXN0IG9mZnNldCBmb3Igb3V0cHV0LiAgKi8NCisgIG5yZWdz ID0gKHVtaXBzX3N3bV9lbmNvZGluZ1tpXSAmIDB4ZikgKyAodW1pcHNfc3dt X2VuY29kaW5nW2ldID4+IDQpOw0KKyAgKm9mZnNldCAtPSAoVU5JVFNfUEVS X1dPUkQgKiAobnJlZ3MgLSAxKSk7DQorDQorICAvKiBMV00vU1dNIGNhbiBv bmx5IHN1cHBvcnQgb2Zmc2V0cyBmcm9tIC0yMDQ4IHRvIDIwNDcuICAqLw0K KyAgaWYgKCFVTUlQU18xMkJJVF9PRkZTRVRfUCAoKm9mZnNldCkpDQorICAg IHJldHVybiBmYWxzZTsNCisNCisgIC8qIENyZWF0ZSB0aGUgZmluYWwgUEFS QUxMRUwuICAqLw0KKyAgcGF0dGVybiA9IGdlbl9ydHhfUEFSQUxMRUwgKFZP SURtb2RlLCBydHZlY19hbGxvYyAobnJlZ3MpKTsNCisNCisgIHRoaXNfYmFz ZSA9IHN0YWNrX3BvaW50ZXJfcnR4Ow0KKyAgdGhpc19vZmZzZXQgPSAqb2Zm c2V0Ow0KKw0KKyAgLyogRm9yIHJlZ2lzdGVycyAkMTYtJDIzIGFuZCAkMzAu ICAqLw0KKyAgZm9yIChqID0gMDsgaiA8ICh1bWlwc19zd21fZW5jb2Rpbmdb aV0gJiAweGYpOyBqKyspDQorICAgIHsNCisgICAgICB1bnNpZ25lZCBpbnQg cmVnbm87DQorICAgICAgSE9TVF9XSURFX0lOVCBvZmZzZXQgPSB0aGlzX29m ZnNldCArIGogKiBVTklUU19QRVJfV09SRDsNCisgICAgICBtZW0gPSBnZW5f ZnJhbWVfbWVtIChTSW1vZGUsIHBsdXNfY29uc3RhbnQgKFBtb2RlLCB0aGlz X2Jhc2UsIG9mZnNldCkpOw0KKyAgICAgIHJlZ25vID0gKGogIT0gOCkgPyAx NiArIGogOiAzMDsNCisgICAgICAqbWFzayAmPSAwIDw8IHJlZ25vOw0KKyAg ICAgIHJlZyA9IGdlbl9ydHhfUkVHIChTSW1vZGUsIHJlZ25vKTsNCisgICAg ICBpZiAoZm4gPT0gbWlwc19zYXZlX3JlZykNCisJc2V0ID0gbWlwc19mcmFt ZV9zZXQgKG1lbSwgcmVnKTsNCisgICAgICBlbHNlDQorCXsNCisJICBzZXQg PSBnZW5fcnR4X1NFVCAoVk9JRG1vZGUsIHJlZywgbWVtKTsNCisJICBtaXBz X2FkZF9jZmFfcmVzdG9yZSAocmVnKTsNCisJfQ0KKyAgICAgIFhWRUNFWFAg KHBhdHRlcm4sIDAsIGopID0gc2V0Ow0KKyAgICB9DQorDQorICAvKiBGb3Ig cmVnaXN0ZXIgJDMxLiAgKi8NCisgIGlmICh1bWlwc19zd21fZW5jb2Rpbmdb aV0gPj4gNCkNCisgICAgew0KKyAgICAgIGxvbmcgbG9uZyBvZmZzZXQgPSB0 aGlzX29mZnNldCArIGogKiBVTklUU19QRVJfV09SRDsNCisgICAgICAqbWFz ayAmPSAwIDw8IDMxOw0KKyAgICAgIG1lbSA9IGdlbl9mcmFtZV9tZW0gKFNJ bW9kZSwgcGx1c19jb25zdGFudCAoUG1vZGUsIHRoaXNfYmFzZSwgb2Zmc2V0 KSk7DQorICAgICAgcmVnID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgMzEpOw0K KyAgICAgIGlmIChmbiA9PSBtaXBzX3NhdmVfcmVnKQ0KKwlzZXQgPSBtaXBz X2ZyYW1lX3NldCAobWVtLCByZWcpOw0KKyAgICAgIGVsc2UNCisJew0KKwkg IHNldCA9IGdlbl9ydHhfU0VUIChWT0lEbW9kZSwgcmVnLCBtZW0pOw0KKwkg IG1pcHNfYWRkX2NmYV9yZXN0b3JlIChyZWcpOw0KKwl9DQorICAgICAgWFZF Q0VYUCAocGF0dGVybiwgMCwgaikgPSBzZXQ7DQorICAgIH0NCisNCisgIHBh dHRlcm4gPSBlbWl0X2luc24gKHBhdHRlcm4pOw0KKyAgaWYgKGZuID09IG1p cHNfc2F2ZV9yZWcpDQorICAgIFJUWF9GUkFNRV9SRUxBVEVEX1AgKHBhdHRl cm4pID0gMTsgIA0KKw0KKyAgLyogQWRqdXN0IHRoZSBsYXN0IG9mZnNldC4g ICovDQorICBvZmZzZXQgLT0gVU5JVFNfUEVSX1dPUkQ7DQorDQorICByZXR1 cm4gdHJ1ZTsNCit9DQorDQogLyogQ2FsbCBGTiBmb3IgZWFjaCByZWdpc3Rl ciB0aGF0IGlzIHNhdmVkIGJ5IHRoZSBjdXJyZW50IGZ1bmN0aW9uLg0KICAg IFNQX09GRlNFVCBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBjdXJyZW50IHN0YWNr IHBvaW50ZXIgZnJvbSB0aGUgc3RhcnQNCiAgICBvZiB0aGUgZnJhbWUuICAq Lw0KQEAgLTEwMjQ1LDE2ICsxMDU4NSwyMSBAQA0KIAkJCQkgbWlwc19zYXZl X3Jlc3RvcmVfZm4gZm4pDQogew0KICAgZW51bSBtYWNoaW5lX21vZGUgZnBy X21vZGU7DQotICBIT1NUX1dJREVfSU5UIG9mZnNldDsNCiAgIGludCByZWdu bzsNCisgIGNvbnN0IHN0cnVjdCBtaXBzX2ZyYW1lX2luZm8gKmZyYW1lID0g JmNmdW4tPm1hY2hpbmUtPmZyYW1lOw0KKyAgSE9TVF9XSURFX0lOVCBvZmZz ZXQgPSBmcmFtZS0+Z3Bfc3Bfb2Zmc2V0IC0gc3Bfb2Zmc2V0Ow0KKyAgdW5z aWduZWQgaW50IG1hc2sgPSBmcmFtZS0+bWFzazsNCiANCiAgIC8qIFNhdmUg cmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gaGlnaCB0byBsb3cuICBUaGUgZGVi dWdnZXJzIHByZWZlciBhdCBsZWFzdA0KICAgICAgdGhlIHJldHVybiByZWdp c3RlciBiZSBzdG9yZWQgYXQgZnVuYys0LCBhbmQgYWxzbyBpdCBhbGxvd3Mg dXMgbm90IHRvDQogICAgICBuZWVkIGEgbm9wIGluIHRoZSBlcGlsb2d1ZSBp ZiBhdCBsZWFzdCBvbmUgcmVnaXN0ZXIgaXMgcmVsb2FkZWQgaW4NCiAgICAg IGFkZGl0aW9uIHRvIHJldHVybiBhZGRyZXNzLiAgKi8NCi0gIG9mZnNldCA9 IGNmdW4tPm1hY2hpbmUtPmZyYW1lLmdwX3NwX29mZnNldCAtIHNwX29mZnNl dDsNCisNCisgIGlmIChUQVJHRVRfTUlDUk9NSVBTKQ0KKyAgICB1bWlwc19i dWlsZF9zYXZlX3Jlc3RvcmUgKGZuLCAmbWFzaywgJm9mZnNldCk7DQorDQog ICBmb3IgKHJlZ25vID0gR1BfUkVHX0xBU1Q7IHJlZ25vID49IEdQX1JFR19G SVJTVDsgcmVnbm8tLSkNCi0gICAgaWYgKEJJVFNFVF9QIChjZnVuLT5tYWNo aW5lLT5mcmFtZS5tYXNrLCByZWdubyAtIEdQX1JFR19GSVJTVCkpDQorICAg IGlmIChCSVRTRVRfUCAobWFzaywgcmVnbm8gLSBHUF9SRUdfRklSU1QpKQ0K ICAgICAgIHsNCiAJLyogUmVjb3JkIHRoZSByYSBvZmZzZXQgZm9yIHVzZSBi eSBtaXBzX2Z1bmN0aW9uX3Byb2ZpbGVyLiAgKi8NCiAJaWYgKHJlZ25vID09 IFJFVFVSTl9BRERSX1JFR05VTSkNCkBAIC0xMDUwMSwyNyArMTA4NDYsNyBA QA0KICAgZW1pdF9jbG9iYmVyIChnZW5fZnJhbWVfbWVtIChCTEttb2RlLCBz dGFja19wb2ludGVyX3J0eCkpOw0KIH0NCiANCi0vKiBTYXZlIHJlZ2lzdGVy IFJFRyB0byBNRU0uICBNYWtlIHRoZSBpbnN0cnVjdGlvbiBmcmFtZS1yZWxh dGVkLiAgKi8NCiANCi1zdGF0aWMgdm9pZA0KLW1pcHNfc2F2ZV9yZWcgKHJ0 eCByZWcsIHJ0eCBtZW0pDQotew0KLSAgaWYgKEdFVF9NT0RFIChyZWcpID09 IERGbW9kZSAmJiAhVEFSR0VUX0ZMT0FUNjQpDQotICAgIHsNCi0gICAgICBy dHggeDEsIHgyOw0KLQ0KLSAgICAgIG1pcHNfZW1pdF9tb3ZlX29yX3NwbGl0 IChtZW0sIHJlZywgU1BMSVRfSUZfTkVDRVNTQVJZKTsNCi0NCi0gICAgICB4 MSA9IG1pcHNfZnJhbWVfc2V0IChtaXBzX3N1YndvcmQgKG1lbSwgZmFsc2Up LA0KLQkJCSAgIG1pcHNfc3Vid29yZCAocmVnLCBmYWxzZSkpOw0KLSAgICAg IHgyID0gbWlwc19mcmFtZV9zZXQgKG1pcHNfc3Vid29yZCAobWVtLCB0cnVl KSwNCi0JCQkgICBtaXBzX3N1YndvcmQgKHJlZywgdHJ1ZSkpOw0KLSAgICAg IG1pcHNfc2V0X2ZyYW1lX2V4cHIgKGdlbl9ydHhfUEFSQUxMRUwgKFZPSURt b2RlLCBnZW5fcnR2ZWMgKDIsIHgxLCB4MikpKTsNCi0gICAgfQ0KLSAgZWxz ZQ0KLSAgICBtaXBzX2VtaXRfc2F2ZV9zbG90X21vdmUgKG1lbSwgcmVnLCBN SVBTX1BST0xPR1VFX1RFTVAgKEdFVF9NT0RFIChyZWcpKSk7DQotfQ0KLQ0K IC8qIFRoZSBfX2dudV9sb2NhbF9ncCBzeW1ib2wuICAqLw0KIA0KIHN0YXRp YyBHVFkoKCkpIHJ0eCBtaXBzX2dudV9sb2NhbF9ncDsNCkBAIC0xNjIxMSwx NyArMTY1MzYsMTkgQEANCiAgIHJlbG9hZF9jb21wbGV0ZWQgPSAwOw0KIH0N CiAMDQotLyogVGhlIGxhc3QgYXJndW1lbnQgcGFzc2VkIHRvIG1pcHNfc2V0 X21pcHMxNl9tb2RlLCBvciBuZWdhdGl2ZSBpZiB0aGUNCi0gICBmdW5jdGlv biBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LiAgKi8NCi1zdGF0aWMgaW50IHdh c19taXBzMTZfcCA9IC0xOw0KIA0KLS8qIFNldCB1cCB0aGUgdGFyZ2V0LWRl cGVuZGVudCBnbG9iYWwgc3RhdGUgc28gdGhhdCBpdCBtYXRjaGVzIHRoZQ0K LSAgIGN1cnJlbnQgZnVuY3Rpb24ncyBJU0EgbW9kZS4gICovDQorLyogVGhl IGxhc3QgYXJndW1lbnQgcGFzc2VkIHRvIG1pcHNfc2V0X2NvbXByZXNzaW9u X21vZGUsDQorICAgb3IgbmVnYXRpdmUgaWYgdGhlIGZ1bmN0aW9uIGhhc24n dCBiZWVuIGNhbGxlZCB5ZXQuICAqLw0KK3N0YXRpYyB1bnNpZ25lZCBpbnQg b2xkX2NvbXByZXNzaW9uX21vZGUgPSAtMTsNCiANCisvKiBTZXQgdXAgdGhl IHRhcmdldC1kZXBlbmRlbnQgZ2xvYmFsIHN0YXRlIGZvciBJU0EgbW9kZSBD T01QUkVTU0lPTl9NT0RFLA0KKyAgIHdoaWNoIGlzIGVpdGhlciBNQVNLX01J UFMxNiBvciBNQVNLX01JQ1JPTUlQUy4gICovDQorDQogc3RhdGljIHZvaWQN Ci1taXBzX3NldF9taXBzMTZfbW9kZSAoaW50IG1pcHMxNl9wKQ0KK21pcHNf c2V0X2NvbXByZXNzaW9uX21vZGUgKHVuc2lnbmVkIGludCBjb21wcmVzc2lv bl9tb2RlKQ0KIHsNCi0gIGlmIChtaXBzMTZfcCA9PSB3YXNfbWlwczE2X3Ap DQorDQorICBpZiAoY29tcHJlc3Npb25fbW9kZSA9PSBvbGRfY29tcHJlc3Np b25fbW9kZSkNCiAgICAgcmV0dXJuOw0KIA0KICAgLyogUmVzdG9yZSBiYXNl IHNldHRpbmdzIG9mIHZhcmlvdXMgZmxhZ3MuICAqLw0KQEAgLTE2MjMzLDcg KzE2NTYwLDcgQEANCiAgIGFsaWduX2p1bXBzID0gbWlwc19iYXNlX2FsaWdu X2p1bXBzOw0KICAgYWxpZ25fZnVuY3Rpb25zID0gbWlwc19iYXNlX2FsaWdu X2Z1bmN0aW9uczsNCiANCi0gIGlmIChtaXBzMTZfcCkNCisgIGlmIChjb21w cmVzc2lvbl9tb2RlICYgTUFTS19NSVBTMTYpDQogICAgIHsNCiAgICAgICAv KiBTd2l0Y2ggdG8gTUlQUzE2IG1vZGUuICAqLw0KICAgICAgIHRhcmdldF9m bGFncyB8PSBNQVNLX01JUFMxNjsNCkBAIC0xNjI4OCw4ICsxNjYxNSwxNSBA QA0KICAgZWxzZQ0KICAgICB7DQogICAgICAgLyogU3dpdGNoIHRvIG5vcm1h bCAobm9uLU1JUFMxNikgbW9kZS4gICovDQotICAgICAgdGFyZ2V0X2ZsYWdz ICY9IH5NQVNLX01JUFMxNjsNCisgICAgICB0YXJnZXRfZmxhZ3MgJj0gfihN QVNLX01JUFMxNiB8IE1BU0tfTUlDUk9NSVBTKTsNCisgICAgICB0YXJnZXRf ZmxhZ3MgfD0gY29tcHJlc3Npb25fbW9kZTsNCiANCisgICAgICBpZiAoVEFS R0VUX01JQ1JPTUlQUykNCisJew0KKwkgIC8qIEF2b2lkIGJyYW5jaCBsaWtl bHkuICAqLw0KKwkgIHRhcmdldF9mbGFncyAmPSB+TUFTS19CUkFOQ0hMSUtF TFk7DQorCX0NCisNCiAgICAgICAvKiBQcm92aWRlIGRlZmF1bHQgdmFsdWVz IGZvciBhbGlnbl8qIGZvciA2NC1iaXQgdGFyZ2V0cy4gICovDQogICAgICAg aWYgKFRBUkdFVF82NEJJVCkNCiAJew0KQEAgLTE2MzEwLDcgKzE2NjQ0LDcg QEANCiAgIC8qIChSZSlpbml0aWFsaXplIE1JUFMgdGFyZ2V0IGludGVybmFs cyBmb3IgbmV3IElTQS4gICovDQogICBtaXBzX2luaXRfcmVsb2NzICgpOw0K IA0KLSAgaWYgKG1pcHMxNl9wKQ0KKyAgaWYgKGNvbXByZXNzaW9uX21vZGUg JiBNQVNLX01JUFMxNikNCiAgICAgew0KICAgICAgIGlmICghbWlwczE2X2ds b2JhbHMpDQogCW1pcHMxNl9nbG9iYWxzID0gc2F2ZV90YXJnZXRfZ2xvYmFs cyAoKTsNCkBAIC0xNjMyMCwxNiArMTY2NTQsMjEgQEANCiAgIGVsc2UNCiAg ICAgcmVzdG9yZV90YXJnZXRfZ2xvYmFscyAoJmRlZmF1bHRfdGFyZ2V0X2ds b2JhbHMpOw0KIA0KLSAgd2FzX21pcHMxNl9wID0gbWlwczE2X3A7DQorICBv bGRfY29tcHJlc3Npb25fbW9kZSA9IGNvbXByZXNzaW9uX21vZGU7DQogfQ0K IA0KIC8qIEltcGxlbWVudCBUQVJHRVRfU0VUX0NVUlJFTlRfRlVOQ1RJT04u ICBEZWNpZGUgd2hldGhlciB0aGUgY3VycmVudA0KLSAgIGZ1bmN0aW9uIHNo b3VsZCB1c2UgdGhlIE1JUFMxNiBJU0EgYW5kIHN3aXRjaCBtb2RlcyBhY2Nv cmRpbmdseS4gICovDQorICAgZnVuY3Rpb24gc2hvdWxkIHVzZSB0aGUgTUlQ UzE2IG9yIG1pY3JvTUlQUyBJU0EgYW5kIHN3aXRjaCBtb2Rlcw0KKyAgIGFj Y29yZGluZ2x5LiAgKi8NCiANCiBzdGF0aWMgdm9pZA0KIG1pcHNfc2V0X2N1 cnJlbnRfZnVuY3Rpb24gKHRyZWUgZm5kZWNsKQ0KIHsNCi0gIG1pcHNfc2V0 X21pcHMxNl9tb2RlIChtaXBzX3VzZV9taXBzMTZfbW9kZV9wIChmbmRlY2wp KTsNCisNCisgIHVuc2lnbmVkIGludCBjb21wcmVzc2lvbl9wID0gbWlwc19n ZXRfY29tcHJlc3NfbW9kZSAoZm5kZWNsKTsNCisNCisgIG1pcHNfc2V0X2Nv bXByZXNzaW9uX21vZGUgKGNvbXByZXNzaW9uX3AgJiAoTUFTS19NSVBTMTYg fCBNQVNLX01JQ1JPTUlQUykpOw0KKw0KIH0NCiAMDQogLyogQWxsb2NhdGUg YSBjaHVuayBvZiBtZW1vcnkgZm9yIHBlci1mdW5jdGlvbiBtYWNoaW5lLWRl cGVuZGVudCBkYXRhLiAgKi8NCkBAIC0xNjQzNywxNCArMTY3NzYsMTkgQEAN CiAgIGlmIChnbG9iYWxfb3B0aW9uc19zZXQueF9taXBzX2lzYV9vcHRpb24p DQogICAgIG1pcHNfaXNhX29wdGlvbl9pbmZvID0gJm1pcHNfY3B1X2luZm9f dGFibGVbbWlwc19pc2Ffb3B0aW9uXTsNCiANCi0gIC8qIFByb2Nlc3MgZmxh Z3MgYXMgdGhvdWdoIHdlIHdlcmUgZ2VuZXJhdGluZyBub24tTUlQUzE2IGNv ZGUuICAqLw0KLSAgbWlwc19iYXNlX21pcHMxNiA9IFRBUkdFVF9NSVBTMTY7 DQotICB0YXJnZXRfZmxhZ3MgJj0gfk1BU0tfTUlQUzE2Ow0KLQ0KICNpZmRl ZiBTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUw0KICAgU1VCVEFSR0VUX09W RVJSSURFX09QVElPTlM7DQogI2VuZGlmDQogDQorICAvKiBNSVBTMTYgYW5k IG1pY3JvTUlQUyBjYW5ub3QgY29leGlzdCAgKi8NCisgIGlmIChUQVJHRVRf TUlDUk9NSVBTICYmIFRBUkdFVF9NSVBTMTYpDQorICAgIGVycm9yICgidW5z dXBwb3J0ZWQgY29tYmluYXRpb246ICVzIiwgIi1taXBzMTYgLW1taWNyb21p cHMiKTsNCisNCisgIC8qIFNhdmUgdGhlIGJhc2UgY29tcHJlc3Npb24gc3Rh dGUgYW5kIHByb2Nlc3MgZmxhZ3MgYXMgdGhvdWdoIHdlDQorICAgICBhcmUg Z2VuZXJhdGluZyB1bmNvbXByZXNzZWQgY29kZS4gICovDQorICBtaXBzX2Jh c2VfY29tcHJlc3Npb25fZmxhZ3MgPSBUQVJHRVRfQ09NUFJFU1NJT047DQor ICB0YXJnZXRfZmxhZ3MgJj0gflRBUkdFVF9DT01QUkVTU0lPTjsNCisNCiAg IC8qIC1tbm8tZmxvYXQgb3ZlcnJpZGVzIC1taGFyZC1mbG9hdCBhbmQgLW1z b2Z0LWZsb2F0LiAgKi8NCiAgIGlmIChUQVJHRVRfTk9fRkxPQVQpDQogICAg IHsNCkBAIC0xNjQ1Myw3ICsxNjc5Nyw3IEBADQogICAgIH0NCiANCiAgIGlm IChUQVJHRVRfRkxJUF9NSVBTMTYpDQotICAgIFRBUkdFVF9JTlRFUkxJTktf TUlQUzE2ID0gMTsNCisgICAgVEFSR0VUX0lOVEVSTElOS19DT01QUkVTU0VE ID0gMTsNCiANCiAgIC8qIFNldCB0aGUgc21hbGwgZGF0YSBsaW1pdC4gICov DQogICBtaXBzX3NtYWxsX2RhdGFfdGhyZXNob2xkID0gKGdsb2JhbF9vcHRp b25zX3NldC54X2dfc3dpdGNoX3ZhbHVlDQpAQCAtMTY4MjYsOSArMTcxNzAs OSBAQA0KIA0KICAgLyogTm93IHNlbGVjdCB0aGUgSVNBIG1vZGUuDQogDQot ICAgICBEbyBhbGwgQ1BQLXNlbnNpdGl2ZSBzdHVmZiBpbiBub24tTUlQUzE2 IG1vZGU7IHdlJ2xsIHN3aXRjaCB0bw0KLSAgICAgTUlQUzE2IG1vZGUgYWZ0 ZXJ3YXJkcyBpZiBuZWVkIGJlLiAgKi8NCi0gIG1pcHNfc2V0X21pcHMxNl9t b2RlIChmYWxzZSk7DQorICAgICBEbyBhbGwgQ1BQLXNlbnNpdGl2ZSBzdHVm ZiBpbiBub24tTUlQUzE2L25vbi1taWNyb01JUFMgbW9kZTsNCisgICAgIFdl J2xsIHN3aXRjaCBtb2RlcyBsYXRlciBpZiByZXF1aXJlZC4gICovDQorICBt aXBzX3NldF9jb21wcmVzc2lvbl9tb2RlIChmYWxzZSk7DQogfQ0KIA0KIC8q IFN3YXAgdGhlIHJlZ2lzdGVyIGluZm9ybWF0aW9uIGZvciByZWdpc3RlcnMg SSBhbmQgSSArIDEsIHdoaWNoDQpAQCAtMTcwODgsNiArMTc0MzIsMjc5IEBA DQogICAgICAgcmV0dXJuIHNpZ25lZF9wID8gZ2VuX211bHNpZGkzXzMyYml0 IDogZ2VuX3VtdWxzaWRpM18zMmJpdDsNCiAgICAgfQ0KIH0NCisNCisNCisv KiBSZXR1cm4gdHJ1ZSBpZiBQQVRURVJOIG1hdGNoZXMgdGhlIGtpbmQgb2Yg aW5zdHJ1Y3Rpb24gZ2VuZXJhdGVkIGJ5DQorICAgdW1pcHNfYnVpbGRfc2F2 ZV9yZXN0b3JlLiAgU0FWRV9QIGlzIHRydWUgZm9yIHN0b3JlLiAgKi8NCisN Citib29sDQordW1pcHNfc2F2ZV9yZXN0b3JlX3BhdHRlcm5fcCAoYm9vbCBz YXZlX3AsIHJ0eCBwYXR0ZXJuKQ0KK3sNCisgIGludCBuOw0KKyAgdW5zaWdu ZWQgaW50IGk7DQorICBIT1NUX1dJREVfSU5UIGZpcnN0X29mZnNldCA9IDA7 DQorICBydHggZmlyc3RfYmFzZSA9IDA7DQorICB1bnNpZ25lZCBpbnQgcmVn bWFzayA9IDA7DQorDQorICBmb3IgKG4gPSAwOyBuIDwgWFZFQ0xFTiAocGF0 dGVybiwgMCk7IG4rKykNCisgICAgew0KKyAgICAgIHJ0eCBzZXQsIHJlZywg bWVtLCB0aGlzX2Jhc2U7DQorICAgICAgSE9TVF9XSURFX0lOVCB0aGlzX29m ZnNldDsNCisgICAgICB1bnNpZ25lZCBpbnQgdGhpc19yZWdubzsNCisNCisg ICAgICAvKiBDaGVjayB0aGF0IHdlIGhhdmUgYSBTRVQuICAqLw0KKyAgICAg IHNldCA9IFhWRUNFWFAgKHBhdHRlcm4sIDAsIG4pOw0KKyAgICAgIGlmIChH RVRfQ09ERSAoc2V0KSAhPSBTRVQpDQorCXJldHVybiBmYWxzZTsNCisNCisg ICAgICAvKiBDaGVjayB0aGF0IHRoZSBTRVQgaXMgYSBsb2FkIChpZiByZXN0 b3JpbmcpIG9yIGEgc3RvcmUNCisJIChpZiBzYXZpbmcpLiAgKi8NCisgICAg ICBtZW0gPSBzYXZlX3AgPyBTRVRfREVTVCAoc2V0KSA6IFNFVF9TUkMgKHNl dCk7DQorICAgICAgaWYgKCFNRU1fUCAobWVtKSB8fCBNRU1fVk9MQVRJTEVf UCAobWVtKSkNCisJcmV0dXJuIGZhbHNlOw0KKw0KKyAgICAgIC8qIENoZWNr IHRoYXQgdGhlIGFkZHJlc3MgaXMgdGhlIHN1bSBvZiBiYXNlIGFuZCBhIHBv c3NpYmx5LXplcm8NCisJIGNvbnN0YW50IG9mZnNldC4gIERldGVybWluZSBp ZiB0aGUgb2Zmc2V0IGlzIGluIHJhbmdlLiAgKi8NCisgICAgICBtaXBzX3Nw bGl0X3BsdXMgKFhFWFAgKG1lbSwgMCksICZ0aGlzX2Jhc2UsICZ0aGlzX29m ZnNldCk7DQorICAgICAgaWYgKCFSRUdfUCAodGhpc19iYXNlKSkNCisJcmV0 dXJuIGZhbHNlOw0KKw0KKyAgICAgIGlmIChuID09IDApDQorCXsNCisJICBp ZiAoIVVNSVBTXzEyQklUX09GRlNFVF9QICh0aGlzX29mZnNldCkpDQorCSAg ICByZXR1cm4gZmFsc2U7DQorCSAgZmlyc3RfYmFzZSA9IHRoaXNfYmFzZTsN CisJICBmaXJzdF9vZmZzZXQgPSB0aGlzX29mZnNldDsNCisJfQ0KKyAgICAg IGVsc2UNCisJew0KKwkgIC8qIENoZWNrIHRoYXQgdGhlIHNhdmUgc2xvdHMg YXJlIGNvbnNlY3V0aXZlLiAgKi8NCisJICBpZiAoUkVHTk8gKHRoaXNfYmFz ZSkgIT0gUkVHTk8gKGZpcnN0X2Jhc2UpDQorCSAgICAgIHx8IHRoaXNfb2Zm c2V0ICE9IGZpcnN0X29mZnNldCArIFVOSVRTX1BFUl9XT1JEICogbikNCisJ ICAgIHJldHVybiBmYWxzZTsNCisJfQ0KKw0KKyAgICAgIC8qIENoZWNrIHRo YXQgU0VUJ3Mgb3RoZXIgb3BlcmFuZCBpcyBhIHJlZ2lzdGVyLiAgKi8NCisg ICAgICByZWcgPSBzYXZlX3AgPyBTRVRfU1JDIChzZXQpIDogU0VUX0RFU1Qg KHNldCk7DQorICAgICAgaWYgKCFSRUdfUCAocmVnKSkNCisJcmV0dXJuIGZh bHNlOw0KKw0KKyAgICAgIHRoaXNfcmVnbm8gPSBSRUdOTyAocmVnKTsNCisg ICAgICByZWdtYXNrIHw9IDEgPDwgdGhpc19yZWdubzsNCisgICAgfQ0KKw0K KyAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUgKHVtaXBzX3N3bV9tYXNr KTsgaSsrKQ0KKyAgICBpZiAocmVnbWFzayA9PSB1bWlwc19zd21fbWFza1tp XSkNCisgICAgICByZXR1cm4gdHJ1ZTsNCisNCisgIHJldHVybiBmYWxzZTsN Cit9DQorLyogUmV0dXJuIHRoZSBhc3NlbWJseSBpbnN0cnVjdGlvbiBmb3Ig bWljcm9NSVBTIGx3bSBvciBzd20uDQorICAgU0FWRV9QIGFuZCBQQVRURVJO IGFyZSBhcyBmb3IgdW1pcHNfc2F2ZV9yZXN0b3JlX3BhdHRlcm5fcC4gICov DQorDQorY29uc3QgY2hhciAqDQordW1pcHNfb3V0cHV0X3NhdmVfcmVzdG9y ZSAoYm9vbCBzYXZlX3AsIHJ0eCBwYXR0ZXJuKQ0KK3sNCisgIHN0YXRpYyBj aGFyIGJ1ZmZlclszMDBdOw0KKyAgY2hhciAqczsNCisgIGludCBuOw0KKyAg SE9TVF9XSURFX0lOVCBvZmZzZXQ7DQorICBydHggYmFzZSwgbWVtLCBzZXQs IHJlZywgbGFzdF9zZXQsIGxhc3RfcmVnOw0KKw0KKyAgLyogUGFyc2UgdGhl IHBhdHRlcm4uICAqLw0KKyAgZ2NjX2Fzc2VydCAodW1pcHNfc2F2ZV9yZXN0 b3JlX3BhdHRlcm5fcCAoc2F2ZV9wLCBwYXR0ZXJuKSk7DQorDQorICBzID0g c3RyY3B5IChidWZmZXIsIHNhdmVfcCA/ICJzd21cdCIgOiAibHdtXHQiKTsN CisgIHMgKz0gc3RybGVuIChzKTsNCisgIG4gPSBYVkVDTEVOIChwYXR0ZXJu LCAwKTsNCisNCisgIHNldCA9IFhWRUNFWFAgKHBhdHRlcm4sIDAsIDApOw0K KyAgcmVnID0gc2F2ZV9wID8gU0VUX1NSQyAoc2V0KSA6IFNFVF9ERVNUIChz ZXQpOw0KKyAgbWVtID0gc2F2ZV9wID8gU0VUX0RFU1QgKHNldCkgOiBTRVRf U1JDIChzZXQpOw0KKyAgbWlwc19zcGxpdF9wbHVzIChYRVhQIChtZW0sIDAp LCAmYmFzZSwgJm9mZnNldCk7DQorDQorICBsYXN0X3NldCA9IFhWRUNFWFAg KHBhdHRlcm4sIDAsIG4gLSAxKTsNCisgIGxhc3RfcmVnID0gc2F2ZV9wID8g U0VUX1NSQyAobGFzdF9zZXQpIDogU0VUX0RFU1QgKGxhc3Rfc2V0KTsNCisN CisgIGlmIChSRUdOTyAobGFzdF9yZWcpID09IDMxKQ0KKyAgICBuLS07DQor DQorICBnY2NfYXNzZXJ0IChuIDw9IDkpOw0KKyAgaWYgKG4gPT0gMCkNCisg ICAgOw0KKyAgZWxzZSBpZiAobiA9PSAxKQ0KKyAgICBzICs9IHNwcmludGYg KHMsICIlcywiLCByZWdfbmFtZXNbMTZdKTsNCisgIGVsc2UgaWYgKG4gPCA5 KQ0KKyAgICBzICs9IHNwcmludGYgKHMsICIlcy0lcywiLCByZWdfbmFtZXNb MTZdLCByZWdfbmFtZXNbMTUgKyBuXSk7DQorICBlbHNlIGlmIChuID09IDkp DQorICAgIHMgKz0gc3ByaW50ZiAocywgIiVzLSVzLCVzLCIsIHJlZ19uYW1l c1sxNl0sIHJlZ19uYW1lc1syM10sDQorCQkgIHJlZ19uYW1lc1szMF0pOw0K Kw0KKyAgaWYgKFJFR05PIChsYXN0X3JlZykgPT0gMzEpDQorICAgIHMgKz0g c3ByaW50ZiAocywgIiVzLCIsIHJlZ19uYW1lc1szMV0pOw0KKw0KKyAgcyAr PSBzcHJpbnRmIChzLCAiJWQoJXMpIiwgKGludClvZmZzZXQsIHJlZ19uYW1l c1tSRUdOTyAoYmFzZSldKTsNCisgIHJldHVybiBidWZmZXI7DQorfQ0KKw0K Ky8qIFJldHVybiB0cnVlIGlmIE1FTTEgYW5kIE1FTTIgdXNlIHRoZSBzYW1l IGJhc2UgcmVnaXN0ZXIsIGFuZCB0aGUNCisgICBvZmZzZXQgb2YgTUVNMiBl cXVhbHMgdGhlIG9mZnNldCBvZiBNRU0xIHBsdXMgNC4gIEZJUlNUX1JFRyBp cyB0aGUNCisgICByZWdpc3RlciBpbnRvIChmcm9tKSB3aGljaCB0aGUgY29u dGVudHMgb2YgTUVNMSB3aWxsIGJlIGxvYWRlZA0KKyAgIChzdG9yZWQpLCBk ZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIExPQURfUC4NCisgICBTV0FQX1Ag aXMgdHJ1ZSB3aGVuIHRoZSAxc3QgYW5kIDJuZCBpbnN0cnVjdGlvbnMgYXJl IHN3YXBwZWQuICAqLw0KKw0KK3N0YXRpYyBib29sDQordW1pcHNfbG9hZF9z dG9yZV9wYWlyX3BfMSAoYm9vbCBsb2FkX3AsIGJvb2wgc3dhcF9wLCBydHgg Zmlyc3RfcmVnLA0KKwkJCSAgIHJ0eCBtZW0xLCBydHggbWVtMikNCit7DQor ICBydHggYmFzZTEsIGJhc2UyOw0KKyAgSE9TVF9XSURFX0lOVCBvZmZzZXQx LCBvZmZzZXQyOw0KKw0KKyAgaWYgKCFNRU1fUCAobWVtMSkgfHwgIU1FTV9Q IChtZW0yKSkNCisgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgbWlwc19zcGxp dF9wbHVzIChYRVhQIChtZW0xLCAwKSwgJmJhc2UxLCAmb2Zmc2V0MSk7DQor ICBtaXBzX3NwbGl0X3BsdXMgKFhFWFAgKG1lbTIsIDApLCAmYmFzZTIsICZv ZmZzZXQyKTsNCisNCisgIGlmICghUkVHX1AgKGJhc2UxKSB8fCAhcnR4X2Vx dWFsX3AgKGJhc2UxLCBiYXNlMikpDQorICAgIHJldHVybiBmYWxzZTsNCisN CisgIC8qIEF2b2lkIGludmFsaWQgbG9hZCBwYWlyIGluc3RydWN0aW9ucy4g ICovDQorICBpZiAobG9hZF9wICYmIFJFR05PIChmaXJzdF9yZWcpID09IFJF R05PIChiYXNlMSkpDQorICAgIHJldHVybiBmYWxzZTsNCisNCisgIC8qIFdl IG11c3QgYXZvaWQgdGhpcyBjYXNlIGZvciBhbnRpLWRlcGVuZGVuY2UuDQor ICAgICBFeDogIGx3ICQzLCA0KCQzKQ0KKyAgICAgICAgICBsdyAkMiwgMCgk MykNCisgICAgIGZpcnN0X3JlZyBpcyAkMiwgYnV0IHRoZSBiYXNlIGlzICQz LiAgKi8NCisgIGlmIChsb2FkX3ANCisgICAgICAmJiBzd2FwX3ANCisgICAg ICAmJiBSRUdOTyAoZmlyc3RfcmVnKSArIDEgPT0gUkVHTk8gKGJhc2UxKSkN CisgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgaWYgKHN3YXBfcA0KKyAgICAg ICYmIG9mZnNldDIgKyA0ICE9IG9mZnNldDEpDQorICAgIHJldHVybiBmYWxz ZTsNCisNCisgIGlmICghc3dhcF9wDQorICAgICAgJiYgb2Zmc2V0MSArIDQg IT0gb2Zmc2V0MikNCisgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgaWYgKCFV TUlQU18xMkJJVF9PRkZTRVRfUCAob2Zmc2V0MSkpDQorICAgIHJldHVybiBm YWxzZTsNCisNCisgIHJldHVybiB0cnVlOw0KK30NCisNCisvKiBSZXR1cm4g dHJ1ZSBpZiBvcGVyYW5kcyBjYW4gYmUgdXNlZCBpbiBhbiBsd3Agb3Igc3dw IGluc3RydWN0aW9uLiAgKi8NCisNCitib29sDQordW1pcHNfbG9hZF9zdG9y ZV9wYWlyX3AgKGJvb2wgbG9hZF9wLCBydHggKm9wZXJhbmRzKQ0KK3sNCisg IHJ0eCByZWcxLCByZWcyLCBtZW0xLCBtZW0yOw0KKw0KKyAgaWYgKGxvYWRf cCkNCisgICAgew0KKyAgICAgIHJlZzEgPSBvcGVyYW5kc1swXTsNCisgICAg ICByZWcyID0gb3BlcmFuZHNbMl07DQorICAgICAgbWVtMSA9IG9wZXJhbmRz WzFdOw0KKyAgICAgIG1lbTIgPSBvcGVyYW5kc1szXTsNCisgICAgfQ0KKyAg ZWxzZQ0KKyAgICB7DQorICAgICAgcmVnMSA9IG9wZXJhbmRzWzFdOw0KKyAg ICAgIHJlZzIgPSBvcGVyYW5kc1szXTsNCisgICAgICBtZW0xID0gb3BlcmFu ZHNbMF07DQorICAgICAgbWVtMiA9IG9wZXJhbmRzWzJdOw0KKyAgICB9DQor DQorICBpZiAoUkVHTk8gKHJlZzIpID09IFJFR05PIChyZWcxKSArIDEpDQor ICAgIHJldHVybiB1bWlwc19sb2FkX3N0b3JlX3BhaXJfcF8xIChsb2FkX3As IGZhbHNlLCByZWcxLCBtZW0xLCBtZW0yKTsNCisNCisgIGlmIChSRUdOTyAo cmVnMSkgPT0gUkVHTk8gKHJlZzIpICsgMSkNCisgICAgcmV0dXJuIHVtaXBz X2xvYWRfc3RvcmVfcGFpcl9wXzEgKGxvYWRfcCwgdHJ1ZSwgcmVnMiwgbWVt MSwgbWVtMik7DQorDQorICByZXR1cm4gZmFsc2U7DQorfQ0KKw0KKy8qIFJl dHVybiB0aGUgYXNzZW1ibHkgaW5zdHJ1Y3Rpb24gZm9yIG1pY3JvTUlQUyBs d3Agb3Igc3dwLg0KKyAgIExPQURfUCBpcyB0cnVlIGZvciBsb2FkLiAgKi8N CisNCitzdGF0aWMgdm9pZA0KK3VtaXBzX291dHB1dF9sb2FkX3N0b3JlX3Bh aXJfMSAoYm9vbCBsb2FkX3AsIHJ0eCByZWcsIHJ0eCBtZW0pDQorew0KKyAg cnR4IG9wc1tdID0ge3JlZywgbWVtfTsNCisNCisgIGlmIChsb2FkX3ApDQor ICAgIG91dHB1dF9hc21faW5zbiAoImx3cCAlMCwlMSIsIG9wcyk7DQorICBl bHNlDQorICAgIG91dHB1dF9hc21faW5zbiAoInN3cCAlMCwlMSIsIG9wcyk7 DQorfQ0KKw0KK3ZvaWQNCit1bWlwc19vdXRwdXRfbG9hZF9zdG9yZV9wYWly IChib29sIGxvYWRfcCwgcnR4ICpvcGVyYW5kcykNCit7DQorICBydHggcmVn MSwgcmVnMiwgbWVtMSwgbWVtMjsNCisgIGlmIChsb2FkX3ApDQorICAgIHsN CisgICAgICByZWcxID0gb3BlcmFuZHNbMF07DQorICAgICAgcmVnMiA9IG9w ZXJhbmRzWzJdOw0KKyAgICAgIG1lbTEgPSBvcGVyYW5kc1sxXTsNCisgICAg ICBtZW0yID0gb3BlcmFuZHNbM107DQorICAgIH0NCisgIGVsc2UNCisgICAg ew0KKyAgICAgIHJlZzEgPSBvcGVyYW5kc1sxXTsNCisgICAgICByZWcyID0g b3BlcmFuZHNbM107DQorICAgICAgbWVtMSA9IG9wZXJhbmRzWzBdOw0KKyAg ICAgIG1lbTIgPSBvcGVyYW5kc1syXTsNCisgICAgfQ0KKyAgIA0KKyAgaWYg KFJFR05PIChyZWcyKSA9PSBSRUdOTyAocmVnMSkgKyAxKQ0KKyAgICB7DQor ICAgICAgdW1pcHNfb3V0cHV0X2xvYWRfc3RvcmVfcGFpcl8xIChsb2FkX3As IHJlZzEsIG1lbTEpOw0KKyAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAg Z2NjX2Fzc2VydCAoUkVHTk8gKHJlZzEpID09IFJFR05PIChyZWcyKSArIDEp Ow0KKyAgdW1pcHNfb3V0cHV0X2xvYWRfc3RvcmVfcGFpcl8xIChsb2FkX3As IHJlZzIsIG1lbTIpOw0KK30NCisNCisvKiBSZXR1cm4gdHJ1ZSBpZiByZWcx IGFuZCByZWcyIG1hdGNoIHRoZSBjcml0ZXJpYSBmb3IgYSBtb3ZlcCBpbnNu LiAgKi8NCisNCitib29sDQordW1pcHNfbW92ZXBfdGFyZ2V0X3AgKHJ0eCBy ZWcxLCBydHggcmVnMikNCit7DQorICBpbnQgcmVnbm8xLCByZWdubzIsIHBh aXI7DQorICB1bnNpZ25lZCBpbnQgaTsNCisgIHN0YXRpYyBjb25zdCBpbnQg bWF0Y2hbOF0gPSB7DQorICAgMHgwMDAwMDA2MCwJLyogNSwgNiAqLw0KKyAg IDB4MDAwMDAwYTAsCS8qIDUsIDcgKi8NCisgICAweDAwMDAwMGMwLAkvKiA2 LCA3ICovDQorICAgMHgwMDIwMDAxMCwJLyogNCwgMjEgKi8NCisgICAweDAw NDAwMDEwLAkvKiA0LCAyMiAqLw0KKyAgIDB4MDAwMDAwMzAsCS8qIDQsIDUg Ki8NCisgICAweDAwMDAwMDUwLCAgLyogNCwgNiAqLw0KKyAgIDB4MDAwMDAw OTAgICAvKiA0LCA3ICovDQorICB9Ow0KKw0KKyAgaWYgKCFSRUdfUCAocmVn MSkgfHwgIVJFR19QIChyZWcyKSkNCisgICAgcmV0dXJuIGZhbHNlOw0KKw0K KyAgcmVnbm8xID0gUkVHTk8gKHJlZzEpOw0KKyAgcmVnbm8yID0gUkVHTk8g KHJlZzIpOw0KKw0KKyAgaWYgKCFHUF9SRUdfUCAocmVnbm8xKSAgfHwgIUdQ X1JFR19QIChyZWdubzIpKQ0KKyAgICByZXR1cm4gZmFsc2U7DQorDQorICBw YWlyID0gKDEgPDwgcmVnbm8xKSB8ICgxIDw8IHJlZ25vMik7DQorDQorICBm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSAobWF0Y2gpOyBpKyspDQorICAg IGlmIChwYWlyID09IG1hdGNoW2ldKQ0KKyAgICAgIHJldHVybiB0cnVlOw0K Kw0KKyAgcmV0dXJuIGZhbHNlOw0KK30NCiAMDQogLyogUmV0dXJuIHRoZSBz aXplIGluIGJ5dGVzIG9mIHRoZSB0cmFtcG9saW5lIGNvZGUsIHBhZGRlZCB0 bw0KICAgIFRSQU1QT0xJTkVfQUxJR05NRU5UIGJpdHMuICBUaGUgc3RhdGlj IGNoYWluIHBvaW50ZXIgYW5kIHRhcmdldA0KQEAgLTE3MzQyLDcgKzE3OTU5 LDcgQEANCiAgICAgIEl0IHRoZXJlZm9yZSBzZWVtcyBiZXN0IHRvIHN3aXRj aCBiYWNrIHRvIG5vbi1NSVBTMTYgbW9kZSBhdA0KICAgICAgc2F2ZSB0aW1l LCBhbmQgdG8gZW5zdXJlIHRoYXQgbWlwczE2X2dsb2JhbHMgcmVtYWlucyBu dWxsIGFmdGVyDQogICAgICBhIFBDSCBsb2FkLiAgKi8NCi0gIG1pcHNfc2V0 X21pcHMxNl9tb2RlIChmYWxzZSk7DQorICBtaXBzX3NldF9jb21wcmVzc2lv bl9tb2RlIChmYWxzZSk7DQogICBtaXBzMTZfZ2xvYmFscyA9IDA7DQogfQ0K IAwNCkluZGV4OiBjb25maWcvbWlwcy9taXBzLmgNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSBjb25maWcvbWlwcy9taXBzLmgJKHJldmlzaW9uIDE5 NTkwMCkNCisrKyBjb25maWcvbWlwcy9taXBzLmgJKHdvcmtpbmcgY29weSkN CkBAIC0xNzQsNiArMTc0LDkgQEANCiAjZGVmaW5lIElTQV9IQVNfRFNQX01V TFQgSVNBX0hBU19EU1BSMg0KICNlbmRpZg0KIA0KKy8qIFRoZSBJU0EgY29t cHJlc3Npb24gZmxhZ3MgdGhhdCBhcmUgY3VycmVudGx5IGluIGVmZmVjdC4g ICovDQorI2RlZmluZSBUQVJHRVRfQ09NUFJFU1NJT04gKHRhcmdldF9mbGFn cyAmIChNQVNLX01JUFMxNiB8IE1BU0tfTUlDUk9NSVBTKSkNCisNCiAvKiBH ZW5lcmF0ZSBtaXBzMTYgY29kZSAqLw0KICNkZWZpbmUgVEFSR0VUX01JUFMx NgkJKCh0YXJnZXRfZmxhZ3MgJiBNQVNLX01JUFMxNikgIT0gMCkNCiAvKiBH ZW5lcmF0ZSBtaXBzMTZlIGNvZGUuIERlZmF1bHQgMTZiaXQgQVNFIGZvciBt aXBzMzIqIGFuZCBtaXBzNjQqICovDQpAQCAtMzc0LDcgKzM3Nyw3IEBADQog ICAgICAgZWxzZQkJCQkJCQkJXA0KIAlidWlsdGluX2RlZmluZSAoIl9fbWlw c19mcHI9MzIiKTsJCQkJXA0KIAkJCQkJCQkJCVwNCi0gICAgICBpZiAobWlw c19iYXNlX21pcHMxNikJCQkJCQlcDQorICAgICAgaWYgKG1pcHNfYmFzZV9j b21wcmVzc2lvbl9mbGFncyAmIE1BU0tfTUlQUzE2KQkJCVwNCiAJYnVpbHRp bl9kZWZpbmUgKCJfX21pcHMxNiIpOwkJCQkJXA0KIAkJCQkJCQkJCVwNCiAg ICAgICBpZiAoVEFSR0VUX01JUFMzRCkJCQkJCQlcDQpAQCAtMzgzLDYgKzM4 Niw5IEBADQogICAgICAgaWYgKFRBUkdFVF9TTUFSVE1JUFMpCQkJCQkJXA0K IAlidWlsdGluX2RlZmluZSAoIl9fbWlwc19zbWFydG1pcHMiKTsJCQkJXA0K IAkJCQkJCQkJCVwNCisgICAgICBpZiAobWlwc19iYXNlX2NvbXByZXNzaW9u X2ZsYWdzICYgTUFTS19NSUNST01JUFMpCQkJXA0KKwlidWlsdGluX2RlZmlu ZSAoIl9fbWlwc19taWNyb21pcHMiKTsJCQkJXA0KKwkJCQkJCQkJCVwNCiAg ICAgICBpZiAoVEFSR0VUX01DVSkJCQkJCQkJXA0KIAlidWlsdGluX2RlZmlu ZSAoIl9fbWlwc19tY3UiKTsJCQkJCVwNCiAJCQkJCQkJCQlcDQpAQCAtNzAy LDcgKzcwOCw3IEBADQogICAgICAgIHxtYXJjaD1yMTAwMDB8bWFyY2g9cjEy MDAwfG1hcmNoPXIxNDAwMHxtYXJjaD1yMTYwMDA6LW1pcHM0fSBcDQogICAg ICAle21hcmNoPW1pcHMzMnxtYXJjaD00a2N8bWFyY2g9NGttfG1hcmNoPTRr cHxtYXJjaD00a3NjOi1taXBzMzJ9IFwNCiAgICAgICV7bWFyY2g9bWlwczMy cjJ8bWFyY2g9bTRrfG1hcmNoPTRrZSp8bWFyY2g9NGtzZHxtYXJjaD0yNGsq IFwNCi0gICAgICAgfG1hcmNoPTM0ayp8bWFyY2g9NzRrKnxtYXJjaD0xMDA0 ayo6IC1taXBzMzJyMn0gXA0KKyAgICAgICB8bWFyY2g9MzRrKnxtYXJjaD03 NGsqfG1hcmNoPW0xNGsqfG1hcmNoPTEwMDRrKjogLW1pcHMzMnIyfSBcDQog ICAgICAle21hcmNoPW1pcHM2NHxtYXJjaD01ayp8bWFyY2g9MjBrKnxtYXJj aD1zYjEqfG1hcmNoPXNyNzEwMDAgXA0KICAgICAgICB8bWFyY2g9eGxyfG1h cmNoPWxvb25nc29uM2E6IC1taXBzNjR9IFwNCiAgICAgICV7bWFyY2g9bWlw czY0cjJ8bWFyY2g9b2N0ZW9ufG1hcmNoPXhscDogLW1pcHM2NHIyfSBcDQpA QCAtNzE2LDcgKzcyMiw3IEBADQogICAiJXttaGFyZC1mbG9hdHxtc29mdC1m bG9hdHxtbm8tZmxvYXR8bWFyY2g9bWlwcyo6OyBcDQogICAgICBtYXJjaD12 cjQxKnxtYXJjaD1tNGt8bWFyY2g9NGsqfG1hcmNoPTI0a2N8bWFyY2g9MjRr ZWMgXA0KICAgICAgfG1hcmNoPTM0a2N8bWFyY2g9MzRrbnxtYXJjaD03NGtj fG1hcmNoPTEwMDRrY3xtYXJjaD01a2MgXA0KLSAgICAgfG1hcmNoPW9jdGVv bnxtYXJjaD14bHI6IC1tc29mdC1mbG9hdDsJCSAgXA0KKyAgICAgfG1hcmNo PW0xNGsqfG1hcmNoPW9jdGVvbnxtYXJjaD14bHI6IC1tc29mdC1mbG9hdDsJ CSAgXA0KICAgICAgbWFyY2g9KjogLW1oYXJkLWZsb2F0fSINCiANCiAvKiBB IHNwZWMgY29uZGl0aW9uIHRoYXQgbWF0Y2hlcyAzMi1iaXQgb3B0aW9ucy4g IEl0IG9ubHkgd29ya3MgaWYNCkBAIC05ODksNyArOTk1LDggQEANCiAJCQkJ ICAgICB8fCBJU0FfTUlQUzY0UjIpKQ0KIA0KIC8qIElTQSBoYXMgbHd4cyBp bnN0cnVjdGlvbiAobG9hZCB3L3NjYWxlZCBpbmRleCBhZGRyZXNzLiAgKi8N Ci0jZGVmaW5lIElTQV9IQVNfTFdYUwkJKFRBUkdFVF9TTUFSVE1JUFMgJiYg IVRBUkdFVF9NSVBTMTYpDQorI2RlZmluZSBJU0FfSEFTX0xXWFMJCSgoVEFS R0VUX1NNQVJUTUlQUyB8fCBUQVJHRVRfTUlDUk9NSVBTKSBcDQorCQkJCSAm JiAhVEFSR0VUX01JUFMxNikNCiANCiAvKiBJU0EgaGFzIGxieCwgbGJ1eCwg bGh4LCBsaHgsIGxodXgsIGx3eCwgbHd1eCwgb3IgbGR4IGluc3RydWN0aW9u LiAqLw0KICNkZWZpbmUgSVNBX0hBU19MQlgJCShUQVJHRVRfT0NURU9OMikN CkBAIC0xMTIzLDYgKzExMzAsNyBAQA0KICV7Ryp9ICUoZW5kaWFuX3NwZWMp ICV7bWlwczF9ICV7bWlwczJ9ICV7bWlwczN9ICV7bWlwczR9IFwNCiAle21p cHMzMip9ICV7bWlwczY0Kn0gXA0KICV7bWlwczE2fSAle21uby1taXBzMTY6 LW5vLW1pcHMxNn0gXA0KKyV7bW1pY3JvbWlwc30gJXttbm8tbWljcm9taXBz fSBcDQogJXttaXBzM2R9ICV7bW5vLW1pcHMzZDotbm8tbWlwczNkfSBcDQog JXttZG14fSAle21uby1tZG14Oi1uby1tZG14fSBcDQogJXttZHNwfSAle21u by1kc3B9IFwNCkBAIC0xNjcyLDYgKzE2ODAsOCBAQA0KICAgKCh1bnNpZ25l ZCBpbnQpICgoaW50KSAoUkVHTk8pIC0gR1BfUkVHX0ZJUlNUKSA8IEdQX1JF R19OVU0pDQogI2RlZmluZSBNMTZfUkVHX1AoUkVHTk8pIFwNCiAgICgoKFJF R05PKSA+PSAyICYmIChSRUdOTykgPD0gNykgfHwgKFJFR05PKSA9PSAxNiB8 fCAoUkVHTk8pID09IDE3KQ0KKyNkZWZpbmUgTTE2U1RPUkVfUkVHX1AoUkVH Tk8pIFwNCisgICgoKFJFR05PKSA+PSAyICYmIChSRUdOTykgPD0gNykgfHwg KFJFR05PKSA9PSAwIHx8IChSRUdOTykgPT0gMTcpDQogI2RlZmluZSBGUF9S RUdfUChSRUdOTykgIFwNCiAgICgodW5zaWduZWQgaW50KSAoKGludCkgKFJF R05PKSAtIEZQX1JFR19GSVJTVCkgPCBGUF9SRUdfTlVNKQ0KICNkZWZpbmUg TURfUkVHX1AoUkVHTk8pIFwNCkBAIC0yMDM0LDYgKzIwNDQsNyBAQA0KICNk ZWZpbmUgU01BTExfSU5UKFgpIFNNQUxMX09QRVJBTkQgKElOVFZBTCAoWCkp DQogI2RlZmluZSBTTUFMTF9JTlRfVU5TSUdORUQoWCkgU01BTExfT1BFUkFO RF9VTlNJR05FRCAoSU5UVkFMIChYKSkNCiAjZGVmaW5lIExVSV9JTlQoWCkg TFVJX09QRVJBTkQgKElOVFZBTCAoWCkpDQorI2RlZmluZSBVTUlQU18xMkJJ VF9PRkZTRVRfUChPRkZTRVQpIChJTl9SQU5HRSAoT0ZGU0VULCAtMjA0OCwg MjA0NykpDQogDQogLyogVGhlIEhJIGFuZCBMTyByZWdpc3RlcnMgY2FuIG9u bHkgYmUgcmVsb2FkZWQgdmlhIHRoZSBnZW5lcmFsDQogICAgcmVnaXN0ZXJz LiAgQ29uZGl0aW9uIGNvZGUgcmVnaXN0ZXJzIGNhbiBvbmx5IGJlIGxvYWRl ZCB0byB0aGUNCkBAIC0yNDUyLDE4ICsyNDYzLDMyIEBADQogICAgYWxsIGNh bGxzIHNob3VsZCB1c2UgYXNzZW1ibHkgbWFjcm9zLiAgT3RoZXJ3aXNlLCBh bGwgaW5kaXJlY3QNCiAgICBjYWxscyBzaG91bGQgdXNlICJqciIgb3IgImph bHIiOyB3ZSB3aWxsIGFycmFuZ2UgdG8gcmVzdG9yZSAkZ3ANCiAgICBhZnRl cndhcmRzIGlmIG5lY2Vzc2FyeS4gIEZpbmFsbHksIHdlIGNhbiBvbmx5IGdl bmVyYXRlIGRpcmVjdA0KLSAgIGNhbGxzIGZvciAtbWFiaWNhbGxzIGJ5IHRl bXBvcmFyaWx5IHN3aXRjaGluZyB0byBub24tUElDIG1vZGUuICAqLw0KKyAg IGNhbGxzIGZvciAtbWFiaWNhbGxzIGJ5IHRlbXBvcmFyaWx5IHN3aXRjaGlu ZyB0byBub24tUElDIG1vZGUuDQorDQorICAgRm9yIG1pY3JvTUlQUyBqYWwo ciksIHdlIHRyeSB0byBnZW5lcmF0ZSBqYWwocilzIHdoZW4gYSAxNi1iaXQN CisgICBpbnN0cnVjdGlvbiBpcyBpbiB0aGUgZGVsYXkgc2xvdCBvZiBqYWwo cikuICAqLw0KICNkZWZpbmUgTUlQU19DQUxMKElOU04sIE9QRVJBTkRTLCBU QVJHRVRfT1BOTywgU0laRV9PUE5PKQlcDQogICAoVEFSR0VUX1VTRV9HT1Qg JiYgIVRBUkdFVF9FWFBMSUNJVF9SRUxPQ1MJCQlcDQogICAgPyAiJSoiIElO U04gIlx0JSIgI1RBUkdFVF9PUE5PICIlLyIJCQkJXA0KLSAgIDogKFJFR19Q IChPUEVSQU5EU1tUQVJHRVRfT1BOT10pCQkJCVwNCi0gICAgICAmJiBtaXBz X2dldF9waWNfY2FsbF9zeW1ib2wgKE9QRVJBTkRTLCBTSVpFX09QTk8pKQlc DQotICAgPyAoIiUqLnJlbG9jXHQxZixSX01JUFNfSkFMUiwlIiAjU0laRV9P UE5PICJcbiIJCVwNCi0gICAgICAiMTpcdCIgSU5TTiAiclx0JSIgI1RBUkdF VF9PUE5PICIlLyIpCQkJXA0KICAgIDogUkVHX1AgKE9QRVJBTkRTW1RBUkdF VF9PUE5PXSkJCQkJXA0KLSAgID8gIiUqIiBJTlNOICJyXHQlIiAjVEFSR0VU X09QTk8gIiUvIgkJCQlcDQorICAgPyAobWlwc19nZXRfcGljX2NhbGxfc3lt Ym9sIChPUEVSQU5EUywgU0laRV9PUE5PKQkJXA0KKyAgICAgID8gKCIlKi5y ZWxvY1x0MWYsUl9NSVBTX0pBTFIsJSIgI1NJWkVfT1BOTyAiXG4iCQlcDQor CSAiMTpcdCIgSU5TTiAiclx0JSIgI1RBUkdFVF9PUE5PICIlLyIpCQkJXA0K KyAgICAgIDogVEFSR0VUX01JQ1JPTUlQUyAmJiBUQVJHRVRfSU5URVJMSU5L X1VOQ09NUFJFU1NFRAlcDQorICAgICAgPyAiJSoiIElOU04gInIlIVx0JSIg I1RBUkdFVF9PUE5PICIlLyIJCQlcDQorICAgICAgOiAiJSoiIElOU04gInJc dCUiICNUQVJHRVRfT1BOTyAiJS8iKQkJCVwNCiAgICA6IE1JUFNfQUJTT0xV VEVfSlVNUCAoIiUqIiBJTlNOICJcdCUiICNUQVJHRVRfT1BOTyAiJS8iKSkN Ci0MDQorDQorLyogU2ltaWxhciB0byBNSVBTX0NBTEwsIGJ1dCB0aGlzIGlz IGZvciBNSUNST01JUFMgImoiIHRvIGdlbmVyYXRlDQorICAgImpyYyIgd2hl biBub3AgaXMgaW4gdGhlIGRlbGF5IHNsb3Qgb2YgImpyIi4gICovDQorDQor I2RlZmluZSBNSUNST01JUFNfSihJTlNOLCBPUEVSQU5EUywgT1BOTykJCQlc DQorICAoVEFSR0VUX1VTRV9HT1QgJiYgIVRBUkdFVF9FWFBMSUNJVF9SRUxP Q1MJCQlcDQorICAgPyAiJSpqXHQlIiAjT1BOTyAiJS8iCQkJCQlcDQorICAg OiBSRUdfUCAoT1BFUkFORFNbT1BOT10pCQkJCQlcDQorICAgPyAiJSpqciU6 XHQlIiAjT1BOTwkJCQkJCVwNCisgICA6IE1JUFNfQUJTT0xVVEVfSlVNUCAo IiUqIiBJTlNOICJcdCUiICNPUE5PICIlLyIpKQ0KKw0KIC8qIENvbnRyb2wg dGhlIGFzc2VtYmxlciBmb3JtYXQgdGhhdCB3ZSBvdXRwdXQuICAqLw0KIA0K IC8qIE91dHB1dCB0byBhc3NlbWJsZXIgZmlsZSB0ZXh0IHNheWluZyBmb2xs b3dpbmcgbGluZXMNCkBAIC0yODc3LDcgKzI5MDIsNyBAQA0KIGV4dGVybiBp bnQgbWlwc19pc2E7CQkJLyogYXJjaGl0ZWN0dXJhbCBsZXZlbCAqLw0KIGV4 dGVybiBjb25zdCBzdHJ1Y3QgbWlwc19jcHVfaW5mbyAqbWlwc19hcmNoX2lu Zm87DQogZXh0ZXJuIGNvbnN0IHN0cnVjdCBtaXBzX2NwdV9pbmZvICptaXBz X3R1bmVfaW5mbzsNCi1leHRlcm4gYm9vbCBtaXBzX2Jhc2VfbWlwczE2Ow0K K2V4dGVybiB1bnNpZ25lZCBpbnQgbWlwc19iYXNlX2NvbXByZXNzaW9uX2Zs YWdzOw0KIGV4dGVybiBHVFkoKCkpIHN0cnVjdCB0YXJnZXRfZ2xvYmFscyAq bWlwczE2X2dsb2JhbHM7DQogI2VuZGlmDQogDQpJbmRleDogY29uZmlnL21p cHMvdC1zZGUNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBjb25maWcv bWlwcy90LXNkZQkocmV2aXNpb24gMTk1OTAwKQ0KKysrIGNvbmZpZy9taXBz L3Qtc2RlCSh3b3JraW5nIGNvcHkpDQpAQCAtMTYsOCArMTYsOCBAQA0KICMg YWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUNCiAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCiAN Ci1NVUxUSUxJQl9PUFRJT05TID0gRUwvRUIgbWlwczMyL21pcHMzMnIyL21p cHM2NC9taXBzNjRyMiBtaXBzMTYgbXNvZnQtZmxvYXQvbWZwNjQgbWNvZGUt cmVhZGFibGU9bm8NCi1NVUxUSUxJQl9ESVJOQU1FUyA9IGVsIGViIG1pcHMz MiBtaXBzMzJyMiBtaXBzNjQgbWlwczY0cjIgbWlwczE2IHNvZiBmNjQgc3By YW0NCitNVUxUSUxJQl9PUFRJT05TID0gRUwvRUIgbWlwczMyL21pcHMzMnIy L21pcHM2NC9taXBzNjRyMiBtaXBzMTYvbW1pY3JvbWlwcyBtc29mdC1mbG9h dC9tZnA2NCBtY29kZS1yZWFkYWJsZT1ubw0KK01VTFRJTElCX0RJUk5BTUVT ID0gZWwgZWIgbWlwczMyIG1pcHMzMnIyIG1pcHM2NCBtaXBzNjRyMiBtaXBz MTYgbWljcm9taXBzIHNvZiBmNjQgc3ByYW0NCiBNVUxUSUxJQl9NQVRDSEVT ID0gRUw9bWVsIEVCPW1lYg0KIA0KICMgVGhlIC1tZnA2NCBvcHRpb24gaXMg b25seSB2YWxpZCBpbiBjb25qdW5jdGlvbiB3aXRoIC1taXBzMzJyMi4NCkBA IC0zMywzICszMyw2IEBADQogZWxzZQ0KIE1VTFRJTElCX0VYQ0xVU0lPTlMg Kz0gbWlwczY0L21pcHMxNiBtaXBzNjRyMi9taXBzMTYNCiBlbmRpZg0KKw0K KyMgVGhlIC1tY29kZS1yZWFkYWJsZT1ubyBpcyBvbmx5IGluIGNvbmp1bmN0 aW9uIHdpdGggLW1pcHMxNi4NCitNVUxUSUxJQl9FWENMVVNJT05TICs9IG1j b2RlLXJlYWRhYmxlPW5vLyFtaXBzMTYNCg== --_007_FD3DCEAC5B03E9408544A1E416F11242987BA154NAMBX01mgcmento_ Content-Type: application/octet-stream; name="libgcc.patch" Content-Description: libgcc.patch Content-Disposition: attachment; filename="libgcc.patch"; size=2727; creation-date="Tue, 22 Jan 2013 20:13:20 GMT"; modification-date="Tue, 12 Feb 2013 16:05:44 GMT" Content-Transfer-Encoding: base64 Content-length: 3697 SW5kZXg6IE1ha2VmaWxlLmluDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot LS0gTWFrZWZpbGUuaW4JKHJldmlzaW9uIDE5NTkzMSkNCisrKyBNYWtlZmls ZS5pbgkod29ya2luZyBjb3B5KQ0KQEAgLTIyMyw3ICsyMjMsNyBAQA0KICMg T3B0aW9ucyB0byB1c2Ugd2hlbiBjb21waWxpbmcgbGliZ2NjMi5hLg0KICMN CiBMSUJHQ0MyX0RFQlVHX0NGTEFHUyA9IC1nDQotTElCR0NDMl9DRkxBR1Mg PSAtTzIgJChMSUJHQ0MyX0lOQ0xVREVTKSAkKEdDQ19DRkxBR1MpICQoSE9T VF9MSUJHQ0MyX0NGTEFHUykgXA0KK0xJQkdDQzJfQ0ZMQUdTID0gJChMSUJH Q0MyX0lOQ0xVREVTKSAkKEdDQ19DRkxBR1MpICQoSE9TVF9MSUJHQ0MyX0NG TEFHUykgXA0KIAkJICQoTElCR0NDMl9ERUJVR19DRkxBR1MpIC1ESU5fTElC R0NDMiBcDQogCQkgLWZidWlsZGluZy1saWJnY2MgLWZuby1zdGFjay1wcm90 ZWN0b3IgXA0KIAkJICQoSU5ISUJJVF9MSUJDX0NGTEFHUykNCkluZGV4OiBD aGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBDaGFuZ2VM b2cJKHJldmlzaW9uIDE5NTkzMSkNCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcg Y29weSkNCkBAIC0xLDMgKzEsMTEgQEANCisyMDEzLTAyLTA4ICBDYXRoZXJp bmUgTW9vcmUgIDxjbG1AY29kZXNvdXJjZXJ5LmNvbT4NCisJICAgIEpvc2Vw aCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPg0KKwkgICAgQ2hh by15aW5nIEZ1ICA8ZnVAbWlwcy5jb20+DQorDQorCSogY29uZmlnL21pcHMv bWlwczE2LlM6ICBEb24ndCBidWlsZCBmb3IgbWljcm9NSVBTLg0KKwkqIGNv bmZpZy9taXBzL2xpbnV4LXVud2luZC5oOiBIYW5kbGUgbWljcm9NSVBTIGZy YW1lLg0KKwkqIGNvbmZpZy9taXBzL2NydG4uUyAoZmluaSwgaW5pdCk6IE5l dyBsYWJlbHMuDQorDQogMjAxMy0wMi0wOCAgR2VvcmctSm9oYW5uIExheSAg PGF2ckBnamxheS5kZT4NCiANCiAJUFIgdGFyZ2V0LzU0MjIyDQpJbmRleDog Y29uZmlnL21pcHMvbWlwczE2LlMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBjb25maWcvbWlwcy9taXBzMTYuUwkocmV2aXNpb24gMTk1OTMxKQ0K KysrIGNvbmZpZy9taXBzL21pcHMxNi5TCSh3b3JraW5nIGNvcHkpDQpAQCAt MjEsNiArMjEsMTAgQEANCiBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBD T1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUNCiA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLw0KIA0KKyNpZmRl ZiBfX21pcHNfbWljcm9taXBzDQorICAvKiBETyBOT1RISU5HICovDQorI2Vs c2UNCisNCiAvKiBUaGlzIGZpbGUgY29udGFpbnMgbWlwczE2IGZsb2F0aW5n IHBvaW50IHN1cHBvcnQgZnVuY3Rpb25zLiAgVGhlc2UNCiAgICBmdW5jdGlv bnMgYXJlIGNhbGxlZCBieSBtaXBzMTYgY29kZSB0byBoYW5kbGUgZmxvYXRp bmcgcG9pbnQgd2hlbg0KICAgIC1tc29mdC1mbG9hdCBpcyBub3QgdXNlZC4g IFRoZXkgYWNjZXB0IHRoZSBhcmd1bWVudHMgYW5kIHJldHVybg0KQEAgLTcx OCwzICs3MjIsNCBAQA0KICNlbmRpZiAvKiAhX19taXBzX3NpbmdsZV9mbG9h dCAqLw0KIA0KICNlbmRpZg0KKyNlbmRpZiAvKiBfX21pcHNfbWljcm9taXBz ICovDQpJbmRleDogY29uZmlnL21pcHMvbGludXgtdW53aW5kLmgNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSBjb25maWcvbWlwcy9saW51eC11bndp bmQuaAkocmV2aXNpb24gMTk1OTMxKQ0KKysrIGNvbmZpZy9taXBzL2xpbnV4 LXVud2luZC5oCSh3b3JraW5nIGNvcHkpDQpAQCAtNTEsNiArNTEsMTEgQEAN CiAgIF9VbndpbmRfUHRyIG5ld19jZmEsIHJlZ19vZmZzZXQ7DQogICBpbnQg aTsNCiANCisgIC8qIEEgTUlQUzE2IG9yIG1pY3JvTUlQUyBmcmFtZS4gIFNp Z25hbCBmcmFtZXMgYWx3YXlzIHVzZSB0aGUgc3RhbmRhcmQNCisgICAgIElT QSBlbmNvZGluZy4gICovDQorICBpZiAoKF9VbndpbmRfUHRyKSBwYyAmIDMp DQorICAgIHJldHVybiBfVVJDX0VORF9PRl9TVEFDSzsNCisNCiAgIC8qIDI0 MDIxMDYxIGxpIHYwLCAweDEwNjEgKHJ0X3NpZ3JldHVybikqLw0KICAgLyog MDAwMDAwMGMgc3lzY2FsbCAgICAqLw0KICAgLyogICAgb3IgKi8NCkluZGV4 OiBjb25maWcvbWlwcy9jcnRuLlMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Ci0tLSBjb25maWcvbWlwcy9jcnRuLlMJKHJldmlzaW9uIDE5NTkzMSkNCisr KyBjb25maWcvbWlwcy9jcnRuLlMJKHdvcmtpbmcgY29weSkNCkBAIC0zMSw2 ICszMSw3IEBADQogI2VuZGlmDQogDQogCS5zZWN0aW9uIC5pbml0LCJheCIs QHByb2diaXRzDQoraW5pdDoJDQogI2lmZGVmIF9fbWlwczY0DQogCWxkICAg ICAgUkEsNDAoJHNwKQ0KIAlkYWRkdQkkc3AsJHNwLDQ4DQpAQCAtNDEsNiAr NDIsNyBAQA0KIAlqCVJBDQogDQogCS5zZWN0aW9uIC5maW5pLCJheCIsQHBy b2diaXRzDQorZmluaToJDQogI2lmZGVmCV9fbWlwczY0DQogCWxkCVJBLDQw KCRzcCkNCiAJZGFkZHUJJHNwLCRzcCw0OA0K --_007_FD3DCEAC5B03E9408544A1E416F11242987BA154NAMBX01mgcmento_ 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, 12 Feb 2013 18:35:09 GMT" Content-Transfer-Encoding: base64 Content-length: 403 MjAxMy0wMi0xMiAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGNvZGVzb3VyY2Vy eS5jb20+DQoJICAgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNl cnkuY29tPg0KCSAgICBDaGFvLXlpbmcgRnUgIDxmdUBtaXBzLmNvbT4NCg0K CSogY29uZmlnL21pcHMvbWlwczE2LlM6ICBEb24ndCBidWlsZCBmb3IgbWlj cm9NSVBTLg0KCSogY29uZmlnL21pcHMvbGludXgtdW53aW5kLmg6IEhhbmRs ZSBtaWNyb01JUFMgZnJhbWUuDQoJKiBjb25maWcvbWlwcy9jcnRuLlMgKGZp bmksIGluaXQpOiBOZXcgbGFiZWxzLg0KDQo= --_007_FD3DCEAC5B03E9408544A1E416F11242987BA154NAMBX01mgcmento_ Content-Type: application/octet-stream; name="gcc-testsuite.patch" Content-Description: gcc-testsuite.patch Content-Disposition: attachment; filename="gcc-testsuite.patch"; size=8129; creation-date="Tue, 22 Jan 2013 20:13:19 GMT"; modification-date="Tue, 12 Feb 2013 16:07:23 GMT" Content-Transfer-Encoding: base64 Content-length: 11021 SW5kZXg6IGdjYy50YXJnZXQvbWlwcy9taXBzLmV4cA0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy9taXBzLmV4cAkocmV2 aXNpb24gMTk1NTc4KQ0KKysrIGdjYy50YXJnZXQvbWlwcy9taXBzLmV4cAko d29ya2luZyBjb3B5KQ0KQEAgLTIzOCw2ICsyMzgsNyBAQCBzZXQgbWlwc19v cHRpb25fZ3JvdXBzIHsNCiAgICAgZnAgIi1tZnAoMzJ8NjQpIg0KICAgICBn cCAiLW1ncCgzMnw2NCkiDQogICAgIGxvbmcgIi1tbG9uZygzMnw2NCkiDQor ICAgIG1pY3JvbWlwcyAiLW1taWNyb21pcHN8LW1uby1taWNyb21pcHMiDQog ICAgIG1pcHMxNiAiLW1pcHMxNnwtbW5vLW1pcHMxNnwtbWZsaXAtbWlwczE2 Ig0KICAgICBtaXBzM2QgIi1taXBzM2R8LW1uby1taXBzM2QiDQogICAgIHBp YyAiLWYobm8tfCkocGljfFBJQykiDQpAQCAtMTI0Niw2ICsxMjQ3LDEwIEBA IHByb2MgbWlwcy1kZy1vcHRpb25zIHsgYXJncyB9IHsNCiAJYXBwZW5kIGV4 dHJhX3Rvb2xfZmxhZ3MgIiAtRE1JUFMxNj1fX2F0dHJpYnV0ZV9fKChtaXBz MTYpKSINCiAgICAgfQ0KIA0KKyAgICBpZiB7IFttaXBzX2hhdmVfdGVzdF9v cHRpb25fcCBvcHRpb25zICItbW1pY3JvbWlwcyJdIH0gew0KKwlhcHBlbmQg ZXh0cmFfdG9vbF9mbGFncyAiIC1ETUlDUk9NSVBTPV9fYXR0cmlidXRlX18o KG1pY3JvbWlwcykpIg0KKyAgICB9DQorDQogICAgICMgVXNlIG91ciB2ZXJz aW9uIG9mIGdjYy1kZy10ZXN0IGZvciB0aGlzIHRlc3QuDQogICAgIGlmIHsg IVtzdHJpbmcgZXF1YWwgW2luZm8gcHJvY3MgIm1pcHMtZ2NjLWRnLXRlc3Qi XSAiIl0gfSB7DQogCXJlbmFtZSBnY2MtZGctdGVzdCBtaXBzLW9sZC1nY2Mt ZGctdGVzdA0KQEAgLTEyNzUsNiArMTI4MCw2IEBAIHByb2MgbWlwcy1nY2Mt ZGctdGVzdCB7IHByb2cgZG9fd2hhdCBleHRyYV90b29sX2ZsDQogZGctaW5p dA0KIG1pcHMtZGctaW5pdA0KIGdjYy1kZy1ydW50ZXN0IFtsc29ydCBbZ2xv YiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jXV0gXA0KLSAgICAi LUROT01JUFMxNj1fX2F0dHJpYnV0ZV9fKChub21pcHMxNikpIg0KKyAgICAi LUROT01JUFMxNj1fX2F0dHJpYnV0ZV9fKChub21pcHMxNikpIC1ETk9NSUNS T01JUFM9X19hdHRyaWJ1dGVfXygobm9taWNyb21pcHMpKSAtRE5PQ09NUFJF U1NJT049X19hdHRyaWJ1dGVfXygobm9jb21wcmVzc2lvbikpIC1ETUlDUk9N SVBTPV9fYXR0cmlidXRlX18oKG1pY3JvbWlwcykpIg0KIG1pcHMtZGctZmlu aXNoDQogZGctZmluaXNoDQpJbmRleDogZ2NjLnRhcmdldC9taXBzL3VtaXBz LWx3cC1zd3AtMS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gZ2Nj LnRhcmdldC9taXBzL3VtaXBzLWx3cC1zd3AtMS5jCShyZXZpc2lvbiAwKQ0K KysrIGdjYy50YXJnZXQvbWlwcy91bWlwcy1sd3Atc3dwLTEuYwkocmV2aXNp b24gMCkNCkBAIC0wLDAgKzEsMTkgQEANCisvKiB7IGRnLXNraXAtaWYgImNv ZGUgcXVhbGl0eSB0ZXN0IiB7ICotKi0qIH0geyAiLU8wIiAiLU8xIiB9IHsg IiIgfSB9ICovDQorDQordm9pZCBNSUNST01JUFMNCitmb28gKGxvbmcgbG9u ZyBsMSwgbG9uZyBsb25nICpsMikNCit7DQorICAqbDIgPSBsMTsNCit9DQor DQorbG9uZyBsb25nIE1JQ1JPTUlQUw0KK2JhciAobG9uZyBsb25nIGQpDQor ew0KKyAgcmVnaXN0ZXIgbG9uZyBsb25nIGwxIGFzbSAoIiQ4IikgPSBkOw0K KyAgcmVnaXN0ZXIgbG9uZyBsb25nIGwyIGFzbSAoIiQxMiIpID0gMDsNCisg IGFzbSAoIiNmb28iIDogIj1yIiAobDEpIDogInIiIChsMSkpOw0KKyAgYXNt IHZvbGF0aWxlICgiI2ZvbyIgOjogInIiIChsMikpOw0KKyAgcmV0dXJuIGwx Ow0KK30NCisNCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIlx0 c3dwIiB9ICovDQpJbmRleDogZ2NjLnRhcmdldC9taXBzL3VtaXBzLXNhdmUt cmVzdG9yZS0xLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2Mu dGFyZ2V0L21pcHMvdW1pcHMtc2F2ZS1yZXN0b3JlLTEuYwkocmV2aXNpb24g MCkNCisrKyBnY2MudGFyZ2V0L21pcHMvdW1pcHMtc2F2ZS1yZXN0b3JlLTEu YwkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMTkgQEANCisvKiBDaGVjayB0 aGF0IHdlIGNhbiB1c2UgdGhlIHN3bS9sd20gaW5zdHJ1Y3Rpb25zLiAgKi8N CisvKiB7IGRnLW9wdGlvbnMgIigtbW1pY3JvbWlwcykiIH0gKi8NCisvKiB7 IGRnLXNraXAtaWYgImNvZGUgcXVhbGl0eSB0ZXN0IiB7ICotKi0qIH0geyAi LU8wIiB9IHsgIiIgfSB9ICovDQorDQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0K Kw0KK2ludCBiYXIgKGludCwgaW50LCBpbnQsIGludCwgaW50KTsNCisNCitN SUNST01JUFMgaW50DQorZm9vIChpbnQgbiwgaW50IGEsIGludCBiLCBpbnQg YywgaW50IGQpIA0KK3sNCisgIGludCBpLCBqOw0KKw0KKyAgaSA9IGJhciAo biwgYSwgYiwgYywgZCk7DQorICBqID0gYmFyIChuLCBhLCBiLCBjLCBkKTsN CisgIHJldHVybiBpICsgajsNCit9DQorLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyICJcdHN3bVx0IiB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXIgIlx0bHdtXHQiIH0gfSAqLw0KSW5kZXg6IGdjYy50 YXJnZXQvbWlwcy91bWlwcy1sd3Atc3dwLTIuYw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KLS0tIGdjYy50YXJnZXQvbWlwcy91bWlwcy1sd3Atc3dwLTIu YwkocmV2aXNpb24gMCkNCisrKyBnY2MudGFyZ2V0L21pcHMvdW1pcHMtbHdw LXN3cC0yLmMJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDE5IEBADQorLyog eyBkZy1za2lwLWlmICJjb2RlIHF1YWxpdHkgdGVzdCIgeyAqLSotKiB9IHsg Ii1PMCIgIi1PMSIgfSB7ICIiIH0gfSAqLw0KKw0KK3ZvaWQgTUlDUk9NSVBT DQorZm9vIChsb25nIGxvbmcgKmwxLCBsb25nIGxvbmcgbDIpDQorew0KKyAg KmwxID0gbDI7DQorfQ0KKw0KK2xvbmcgbG9uZyBNSUNST01JUFMNCitiYXIg KGxvbmcgbG9uZyBkKQ0KK3sNCisgIHJlZ2lzdGVyIGxvbmcgbG9uZyBsMSBh c20gKCIkOCIpID0gZDsNCisgIHJlZ2lzdGVyIGxvbmcgbG9uZyBsMiBhc20g KCIkMTIiKSA9IDA7DQorICBhc20gKCIjZm9vIiA6ICI9ciIgKGwxKSA6ICJy IiAobDEpKTsNCisgIGFzbSB2b2xhdGlsZSAoIiNmb28iIDo6ICJyIiAobDIp KTsNCisgIHJldHVybiBsMTsNCit9DQorDQorLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJcdHN3cCIgfSAqLw0KSW5kZXg6IGdjYy50YXJnZXQv bWlwcy91bWlwcy1zYXZlLXJlc3RvcmUtMi5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL3VtaXBzLXNhdmUtcmVzdG9y ZS0yLmMJKHJldmlzaW9uIDApDQorKysgZ2NjLnRhcmdldC9taXBzL3VtaXBz LXNhdmUtcmVzdG9yZS0yLmMJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDE1 IEBADQorLyogQ2hlY2sgdGhhdCB3ZSBjYW4gdXNlIHRoZSBzYXZlIGluc3Ry dWN0aW9uIHRvIHNhdmUgc3BpbGxlZCBhcmd1bWVudHMuICAqLw0KKy8qIHsg ZGctc2tpcC1pZiAiY29kZSBxdWFsaXR5IHRlc3QiIHsgKi0qLSogfSB7ICIt TzAiIH0geyAiIiB9IH0gKi8NCisNCitNSUNST01JUFMgdm9pZA0KK2ZvbyAo aW50ICphLCBpbnQgYiwgaW50IGMpDQorew0KKyAgYXNtIHZvbGF0aWxlICgi IiA6OjogIiQyIiwgIiQzIiwgIiQ0IiwgIiQ1IiwgIiQ2IiwgIiQ3IiwgIiQ4 IiwNCisJCSIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0 IiwgIiQxNSIsICIkMTYiLA0KKwkJIiQxNyIsICIkMTgiLCAiJDE5IiwgIiQy MCIsICIkMjEiLCAiJDIyIiwgIiQyMyIsICIkMjQiLA0KKwkJIiQyNSIsICIk MzAiLCAibWVtb3J5Iik7DQorICBhW2JdID0gMTsNCisgIGFbY10gPSAxOw0K K30NCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIlx0c3dtXHQi IH0gfSAqLw0KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiXHRs d21cdCIgfSB9ICovDQpJbmRleDogZ2NjLnRhcmdldC9taXBzL3VtaXBzLWx3 cC1zd3Atdm9sYXRpbGUuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IGdjYy50YXJnZXQvbWlwcy91bWlwcy1sd3Atc3dwLXZvbGF0aWxlLmMJKHJl dmlzaW9uIDApDQorKysgZ2NjLnRhcmdldC9taXBzL3VtaXBzLWx3cC1zd3At dm9sYXRpbGUuYwkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsNDEgQEANCisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLw0KKw0KKy8qIFRoaXMgdGVzdCBlbnN1 cmVzIHRoYXQgd2UgZG8gbm90IGdlbmVyYXRlIG1pY3JvTUlQUyBTV1Agb3Ig TFdQDQorICAgaW5zdHJ1Y3Rpb25zIHdoZW4gYW55IGNvbXBvbmVudCBvZiB0 aGUgYWNjZXNzZWQgbWVtb3J5IGlzIHZvbGF0aWxlOyANCisgICB0aGV5IGFy ZSB1bnNhZmUgZm9yIHN1Y2ggc2luY2UgdGhleSBtaWdodCBjYXVzZSByZXBs YXkgb2YgcGFydGlhbCANCisgICBhY2Nlc3NlcyBpZiBpbnRlcnJ1cHRlZCBi eSBhbiBleGNlcHRpb24uICAqLw0KKw0KK3N0YXRpYyB2b2lkIHNldF9jc3Ig KHZvbGF0aWxlIHZvaWQgKnAsIGludCB2KQ0KK3sNCisgICoodm9sYXRpbGUg aW50ICopIChwKSA9IHY7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZ2V0X2NzciAo dm9sYXRpbGUgdm9pZCAqcCkNCit7DQorICByZXR1cm4gKih2b2xhdGlsZSBp bnQgKikgKHApOw0KK30NCisNCitpbnQgbWFpbiAoKQ0KK3sNCisgIGludCBp LCBxID0gMCwgcCA9IDAsIHIgPSAwOw0KKw0KKyAgZm9yIChpID0gMDsgaSA8 IDIwOyBpKyspDQorICAgIHsNCisgICAgICBzZXRfY3NyICgodm9sYXRpbGUg dm9pZCAqKSAweGJmMDEwMGE4LCAweGZmZmYwMDAyKTsNCisgICAgICBzZXRf Y3NyICgodm9sYXRpbGUgdm9pZCAqKSAweGJmMDEwMGE0LCAweDgwMDAwMDA4 KTsNCisgICAgfQ0KKw0KKyAgZm9yIChpID0gMDsgaSA8IDIwOyBpKyspDQor ICAgIHsNCisgICAgICByZWdpc3RlciBpbnQgaywgajsNCisgICAgICBrID0g Z2V0X2NzciAoKHZvbGF0aWxlIHZvaWQgKikgMHhiZjAxMDBiOCk7DQorICAg ICAgcCArPSBrOw0KKyAgICAgIGogPSBnZXRfY3NyICgodm9sYXRpbGUgdm9p ZCAqKSAweGJmMDEwMGI0KTsNCisgICAgICByICs9IGo7DQorICAgICAgcSA9 IGogKyBrOw0KKyAgICB9DQorICByZXR1cm4gcSArIHIgKyBwOw0KK30NCisN CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHN3cFx0 XFxcJCIgfSB9ICovDQorLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LW5vdCAiXHRsd3BcdFxcXCQiIH0gfSAqLw0KSW5kZXg6IGdjYy50YXJnZXQv bWlwcy91bWlwcy1zYXZlLXJlc3RvcmUtMy5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQotLS0gZ2NjLnRhcmdldC9taXBzL3VtaXBzLXNhdmUtcmVzdG9y ZS0zLmMJKHJldmlzaW9uIDApDQorKysgZ2NjLnRhcmdldC9taXBzL3VtaXBz LXNhdmUtcmVzdG9yZS0zLmMJKHJldmlzaW9uIDApDQpAQCAtMCwwICsxLDEz IEBADQorLyogQ2hlY2sgdGhhdCB3ZSBjYW4gdXNlIHRoZSBzd20gaW5zdHJ1 Y3Rpb24gdG8gc2F2ZSAkMTYsICQxNyBhbmQgJDMxLiAgKi8NCisvKiB7IGRn LXNraXAtaWYgImNvZGUgcXVhbGl0eSB0ZXN0IiB7ICotKi0qIH0geyAiLU8w IiB9IHsgIiIgfSB9ICovDQorDQordm9pZCBiYXIgKHZvaWQpOw0KKw0KK01J Q1JPTUlQUyB2b2lkDQorZm9vICh2b2lkKQ0KK3sNCisgIGJhciAoKTsNCisg IGFzbSB2b2xhdGlsZSAoIiIgOjo6ICIkMTYiLCAiJDE3Iik7DQorfQ0KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiXHRzd21cdFxcXCQxNi1c XFwkMTcsXFxcJDMxIiB9IH0gKi8NCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgIlx0bHdtXHRcXFwkMTYtXFxcJDE3LFxcXCQzMSIgfSB9ICov DQpJbmRleDogZ2NjLnRhcmdldC9taXBzL3VtaXBzLW1vdmVwLmMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MudGFyZ2V0L21pcHMvdW1pcHMt bW92ZXAuYwkocmV2aXNpb24gMCkNCisrKyBnY2MudGFyZ2V0L21pcHMvdW1p cHMtbW92ZXAuYwkocmV2aXNpb24gMCkNCkBAIC0wLDAgKzEsMTggQEANCisv KiBDaGVjayB0aGF0IHdlIGNhbiB1c2UgdGhlIHNhdmUgaW5zdHJ1Y3Rpb24g dG8gc2F2ZSB2YXJhcmdzLiAgKi8NCisvKiB7IGRnLW9wdGlvbnMgIigtbW1p Y3JvbWlwcykiIH0gKi8NCisvKiB7IGRnLXNraXAtaWYgImNvZGUgcXVhbGl0 eSB0ZXN0IiB7ICotKi0qIH0geyAiLU8wIiAiLU8xIiB9IHsgIiIgfSB9ICov DQorDQorI2luY2x1ZGUgPHN0ZGFyZy5oPg0KKw0KK2xvbmcgbG9uZyBiYXIg KGxvbmcgbG9uZywgbG9uZyBsb25nKTsNCisNCitNSUNST01JUFMgbG9uZyBs b25nDQorZm9vIChsb25nIGxvbmcgbiwgbG9uZyBsb25nIGEpDQorew0KKyAg bG9uZyBsb25nIGksIGo7DQorDQorICBpID0gYmFyIChuLCBhKTsNCisgIGog PSBiYXIgKG4sIGEpOw0KKyAgcmV0dXJuIGkgKyBqOw0KK30NCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIlx0bW92ZXBcdCIgfSB9ICovDQpJ bmRleDogZ2NjLmMtdG9ydHVyZS9leGVjdXRlL2llZWUvaWVlZS5leHANCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCi0tLSBnY2MuYy10b3J0dXJlL2V4ZWN1 dGUvaWVlZS9pZWVlLmV4cAkocmV2aXNpb24gMTk1Mzc4KQ0KKysrIGdjYy5j LXRvcnR1cmUvZXhlY3V0ZS9pZWVlL2llZWUuZXhwCSh3b3JraW5nIGNvcHkp DQpAQCAtNTQsNiArNTQsOSBAQCBpZiB7IFtpc3RhcmdldCAiYWxwaGEqLSot KiJdDQogICAgICB8fCBbaXN0YXJnZXQgInNoKi0qLSoiXSB9IHRoZW4gew0K ICAgbGFwcGVuZCBhZGRpdGlvbmFsX2ZsYWdzICItbWllZWUiDQogfQ0KK2lm IFtpc3RhcmdldCAibWlwcyotc2RlLSoiXSB0aGVuIHsNCisgIGxhcHBlbmQg YWRkaXRpb25hbF9mbGFncyAiLVdsLC0tZGVmc3ltPV9fY3MzX21pcHNfZmxv YXRfdHlwZT0yIiAiLWxjczMtbWlwcy1jcDEiICItbGNzMy1taXBzLWZwZW11 Ig0KK30NCiANCiAjIGxvYWQgc3VwcG9ydCBwcm9jcw0KIGxvYWRfbGliIGMt dG9ydHVyZS5leHANCkluZGV4OiBDaGFuZ2VMb2cNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCi0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE5NTkwNCkNCisr KyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkNCkBAIC0xLDMgKzEsMTQgQEAN CisyMDEyLTAyLTA4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY29kZXNvdXJj ZXJ5LmNvbT4NCisNCisJKiBnY2MudGFyZ2V0L21pcHMvbWlwcy5leHA6IEFk ZCBtaWNyb01JUFMgc3VwcG9ydC4NCisJKiBnY2MudGFyZ2V0L21pcHMvdW1p cHMtbHdwLXN3cC0xLmM6IE5ldyB0ZXN0Lg0KKwkqIGdjYy50YXJnZXQvbWlw cy91bWlwcy1zYXZlLXJlc3RvcmUtMS5jOiBOZXcgdGVzdC4NCisJKiBnY2Mu dGFyZ2V0L21pcHMvdW1pcHMtbHdwLXN3cC0yLmM6IE5ldyB0ZXN0Lg0KKwkq IGdjYy50YXJnZXQvbWlwcy91bWlwcy1zYXZlLXJlc3RvcmUtMi5jOiBOZXcg dGVzdC4NCisJKiBnY2MudGFyZ2V0L21pcHMvdW1pcHMtbHdwLXN3cC12b2xh dGlsZS5jOiBOZXcgdGVzdC4NCisJKiBnY2MudGFyZ2V0L21pcHMvdW1pcHMt c2F2ZS1yZXN0b3JlLTMuYzogTmV3IHRlc3QuDQorCSogZ2NjLnRhcmdldC9t aXBzL3VtaXBzLW1vdmVwLmM6IE5ldyB0ZXN0Lg0KKw0KIDIwMTMtMDItMDgg IFZsYWRpbWlyIE1ha2Fyb3YgIDx2bWFrYXJvdkByZWRoYXQuY29tPg0KIA0K IAlQUiBydGwtb3B0aW1pemF0aW9uLzU2MjQ2DQo= --_007_FD3DCEAC5B03E9408544A1E416F11242987BA154NAMBX01mgcmento_ Content-Type: application/octet-stream; name="gcc-testsuite.cl" Content-Description: gcc-testsuite.cl Content-Disposition: attachment; filename="gcc-testsuite.cl"; size=471; creation-date="Tue, 22 Jan 2013 20:13:18 GMT"; modification-date="Tue, 12 Feb 2013 18:35:21 GMT" Content-Transfer-Encoding: base64 Content-length: 639 MjAxMi0wMi0xMiAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGNvZGVzb3VyY2Vy eS5jb20+DQoNCgkqIGdjYy50YXJnZXQvbWlwcy9taXBzLmV4cDogQWRkIG1p Y3JvTUlQUyBzdXBwb3J0Lg0KCSogZ2NjLnRhcmdldC9taXBzL3VtaXBzLWx3 cC1zd3AtMS5jOiBOZXcgdGVzdC4NCgkqIGdjYy50YXJnZXQvbWlwcy91bWlw cy1zYXZlLXJlc3RvcmUtMS5jOiBOZXcgdGVzdC4NCgkqIGdjYy50YXJnZXQv bWlwcy91bWlwcy1sd3Atc3dwLTIuYzogTmV3IHRlc3QuDQoJKiBnY2MudGFy Z2V0L21pcHMvdW1pcHMtc2F2ZS1yZXN0b3JlLTIuYzogTmV3IHRlc3QuDQoJ KiBnY2MudGFyZ2V0L21pcHMvdW1pcHMtbHdwLXN3cC12b2xhdGlsZS5jOiBO ZXcgdGVzdC4NCgkqIGdjYy50YXJnZXQvbWlwcy91bWlwcy1zYXZlLXJlc3Rv cmUtMy5jOiBOZXcgdGVzdC4NCgkqIGdjYy50YXJnZXQvbWlwcy91bWlwcy1t b3ZlcC5jOiBOZXcgdGVzdC4NCg0K --_007_FD3DCEAC5B03E9408544A1E416F11242987BA154NAMBX01mgcmento_--