From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10425 invoked by alias); 13 Aug 2013 20:32:02 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 10415 invoked by uid 89); 13 Aug 2013 20:32:01 -0000 X-Spam-SWARE-Status: No, score=-4.2 required=5.0 tests=AWL,BAYES_20,KAM_STOCKTIP,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,RP_MATCHES_RCVD,SPF_PASS autolearn=no version=3.3.2 Received: from mga09.intel.com (HELO mga09.intel.com) (134.134.136.24) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Tue, 13 Aug 2013 20:31:46 +0000 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP; 13 Aug 2013 13:28:55 -0700 X-ExtLoop1: 1 Received: from fmsmsx108.amr.corp.intel.com ([10.19.9.228]) by orsmga001.jf.intel.com with ESMTP; 13 Aug 2013 13:31:19 -0700 Received: from fmsmsx101.amr.corp.intel.com ([169.254.1.119]) by FMSMSX108.amr.corp.intel.com ([169.254.10.231]) with mapi id 14.03.0123.003; Tue, 13 Aug 2013 13:31:19 -0700 From: "Iyer, Balaji V" To: Aldy Hernandez CC: "rth@redhat.com" , Jeff Law , "gcc-patches@gcc.gnu.org" Subject: RE: [PATCH] Cilk Keywords (_Cilk_spawn and _Cilk_sync) for C Date: Tue, 13 Aug 2013 20:32:00 -0000 Message-ID: References: <52012923.6030409@redhat.com> <5204C718.9050402@redhat.com> In-Reply-To: <5204C718.9050402@redhat.com> Content-Type: multipart/mixed; boundary="_002_BF230D13CA30DD48930C31D4099330003A458F86FMSMSX101amrcor_" MIME-Version: 1.0 X-SW-Source: 2013-08/txt/msg00758.txt.bz2 --_002_BF230D13CA30DD48930C31D4099330003A458F86FMSMSX101amrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 14115 Hi Aldy et al., Attached, please find a fixed patch and the change-log entries below. Plea= se see my answers to your questions below. The patch is tested on x86_64. S= o, is this Ok for trunk? gcc/ChangeLog: 2013-08-13 Balaji V. Iyer * builtins.c (is_builtin_name): Added a check for __cilkrts_detach and __cilkrts_pop_frame. If matched, then return true for built-in function name. (expand_builtin): Added BUILT_IN_CILK_DETACH and BUILT_IN_CILK_POP_FRAME case. * langhooks-def.h (lhd_install_body_with_frame_cleanup): New prototype. (lhs_cilk_valid_spawn): Likewise. (LANG_HOOKS_DECLS): Added LANG_HOOKS_CILKPLUS. (LANG_HOOKS_CILKPLUS_SPAWNABLE_CTOR): New #define. (LANG_HOOKS_CILKPLUS_RECOGNIZE_SPAWN): Likewise. (LANG_HOOKS_CILKPLUS_VALID_SPAWN): Likewise. (LANG_HOOKS_CILKPLUS_FRAME_CLEANUP): Likewise. (LANG_HOOKS_CILKPLUS_GIMPLIFY_SPAWN): Likewise. (LANG_HOOKS_CILKPLUS_GIMPLIFY_SYNC): Likewise. (LANG_HOOKS_CILKPLUS): Likewise. * builtin.def (DEF_CILK_BUILTIN_STUB): Likewise. * Makefile.in (C_COMMON_OBJS): Added c-family/cilk.o. (OBJS): Added cilk-common.o. * langhooks.c (lhd_install_body_with_frame_cleanup): New function. (lhd_cilk_valid_spawn): Likewise. * langhooks.h (lang_hooks_for_cilkplus): New struct. (struct lang_hooks): Added new field called "cilkplus." * cilk-common.c: New file. * cilk.h: Likewise. * cilk-builtins.def: Likewise. * cppbuiltin.c (define_builtin_macros_for_compilation_flags): Added "__cilk" macro and set it to 200. * function.h (struct function::cilk_frame_decl): New field. (struct function::is_cilk_function): Likewise. (struct function::calls_cilk_spawn): Likewise. * gimplify.c (gimplify_call_expr): Added a check if the function call being gimplified is a spawn detach point. If so, then add pop_frame and detach function calls. (gimplify_expr): If a function call is a valid spawned function, then gimplify it using gimplify_cilk_spawn function call. Also, added a CILK_SYNC_STMT case for gimplifying _Cilk_sync statement. * ipa-inline-analysis (initialize_inline_failed): Prevent inlining of spawner function. (can_inline_edge_p): Prevent inling of spawnee function. * ira.c (ira_setup_eliminable_regset): Force usage of frame pointer for functions that use Cilk keywords. * tree-inline.h (struct copy_body_data::remap_var_for_cilk): New field. * tree-pretty-print.c (dump_generic_node): Added CILK_SPAWN_STMT and CILK_SYNC_STMT cases. * tree.def (DEFTREECODE): Added CILK_SPAWN_STMT and CILK_SYNC_STMT trees. * tree.h (CILK_SPAWN_FN): New #define. * generic.texi (CILK_SPAWN_STMT): Added documentation for _Cilk_spawn. (CILK_SYNC_STMT): Added documentation for _Cilk_sync. * passes.texi (Cilk Keywords): New section that describes the compiler code changes for handling Cilk Keywords. gcc/c/ChangeLog 2013-08-13 Balaji V. Iyer * c-decl.c (finish_function): Added a call for insert_cilk_frame when a spawning function is found. * c-objc-common.h (LANG_HOOKS_CILKPLUS_GIMPLIFY_SPAWN): New #define. (LANG_HOOKS_CILKPLUS_GIMPLIFY_SYNC): Likewise. (LANG_HOOKS_CILKPLUS_FRAME_CLEANUP): Likewise. (LANG_HOOKS_CILKPLUS_VALID_SPAWN): Likewise. * c-parser.c (c_parser_statement_after_labels): Added RID_CILK_SYNC case. (c_parser_postfix_expression): Added RID_CILK_SPAWN case. * c-tree.h (c_build_cilk_sync): New prototype. (c_build_cilk_spawn): Likewise. * c-typeck.c (build_compound_expr): Reject _Cilk_spawn in a comma expr. (c_finish_return): Added a check to reject _Cilk_spawn in return expressio= n. (c_build_cilk_spawn): New function. (c_build_cilk_sync): Likewise. gcc/c-family/ChangeLog 2013-08-13 Balaji V. Iyer * c-common.c (c_common_reswords[]): Added _Cilk_spawn and _Cilk_sync fields. (c_define_builtins): Called cilk_init_builtins if Cilk Plus is enabled. (c_common_init_ts): Marked CILK_SPAWN_STMT and CILK_SYNC_STMT as typed. * c-common.h (enum rid): Added RID_CILK_SPAWN and RID_CILK_SYNC. (insert_cilk_frame): New prototype. (cilk_init_builtins): Likewise. (gimplify_cilk_spawn): Likewise. (gimplify_cilk_sync): Likewise. (c_cilk_install_body_w_frame_cleanup): Likewise. (cilk_valid_spawn): Likewise. (cilk_set_spawn_marker): Likewise. * cilk.c: New file. gcc/lto/ChangeLog.cilk 2013-08-13 Balaji V. Iyer * Make-lang.in (lto/lto-lang.o): Added cilk.h in dependency list. * lto-lang.c (lto_init): Added a call to cilk_init_builtins if Cilk Plus is enabled. gcc/testsuite/ChangeLog.cilk 2013-08-13 Balaji V. Iyer * c-c++-common/cilk-plus/CK/compound_cilk_spawn.c: New test. * c-c++-common/cilk-plus/CK/concec_cilk_spawn.c: Likewise. * c-c++-common/cilk-plus/CK/fib.c: Likewise. * c-c++-common/cilk-plus/CK/no_args_error.c: Likewise. * c-c++-common/cilk-plus/CK/spawnee_inline.c: Likewise. * c-c++-common/cilk-plus/CK/spawner_inline.c: Likewise. * c-c++-common/cilk-plus/CK/spawning_arg.c: Likewise. * c-c++-common/cilk-plus/CK/steal_check.c: Likewise. * c-c++-common/cilk-plus/CK/test__cilk.c: Likewise. * c-c++-common/cilk-plus/CK/varargs_test.c: Likewise. * c-c++-common/cilk-plus/CK/sync_wo_spawn.c: Likewise. * c-c++-common/cilk-plus/CK/invalid_spawn.c: Likewise. * c-c++-common/cilk-plus/CK/spawn_in_return.c: Likewise. * gcc.dg/cilk-plus/cilk-plus.exp: Added support to run Cilk Keywords test stored in c-c++-common. Also, added the Cilk runtime's library to the ld_library_path. > -----Original Message----- > From: gcc-patches-owner@gcc.gnu.org [mailto:gcc-patches- > owner@gcc.gnu.org] On Behalf Of Aldy Hernandez > Sent: Friday, August 09, 2013 6:40 AM > To: Iyer, Balaji V > Cc: rth@redhat.com; Jeff Law; gcc-patches@gcc.gnu.org > Subject: Re: [PATCH] Cilk Keywords (_Cilk_spawn and _Cilk_sync) for C >=20 >=20 >=20 > >>> --- gcc/expr.c > >>> +++ gcc/expr.c > >>> @@ -9569,6 +9569,21 @@ expand_expr_real_1 (tree exp, rtx target, > >>> enum > >> machine_mode tmode, > >>> } > >>> > >>> return expand_constructor (exp, target, modifier, false); > >>> + case INDIRECT_REF: > >>> + { > >>> + tree exp1 =3D TREE_OPERAND (exp, 0); > >>> + if (modifier !=3D EXPAND_WRITE) > >>> + { > >>> + tree t =3D fold_read_from_constant_string (exp); > >>> + if (t) > >>> + return expand_expr (t, target, tmode, modifier); > >>> + } > >>> + op0 =3D expand_expr (exp1, NULL_RTX, VOIDmode, EXPAND_SUM); > >>> + op0 =3D memory_address (mode, op0); > >>> + temp =3D gen_rtx_MEM (mode, op0); > >>> + set_mem_attributes (temp, exp, 0); > >>> + return temp; > >>> + } > >> > >> Ughhh, what's the rationale for this? Are generic changes to > >> expand_expr really needed? > > > > Yes, I am expanding some variables of type "ptr->value" and those are e= mitted > as INDIRECT_REF. >=20 > The fact that you are getting an INDIRECT_REF this late in the game is su= spect. >=20 I have removed handling of indirect_ref case in expr.c > Are you building with ENABLE_CHECKING, because it seems this should have > been caught. See the places in tree-cfg.c with this: >=20 > case INDIRECT_REF: > error ("INDIRECT_REF in gimple IL"); > return t; > > > >> > >>> + /* During LTO, the is_cilk_function flag gets cleared. > >>> + If __cilkrts_pop_frame is called, then this definitely must be a > >>> + cilk function. */ > >>> + if (cfun) > >>> + cfun->is_cilk_function =3D 1; > >> > >> I don't know much about our LTO implementation, but perhaps you need > >> to teach LTO to stream this bit in/out? And of course, an > >> accompanying LTO test to check for this problem you're encountering wo= uld > be appropriate. > >> > > > > I also have a limited knowledge of LTO. This seem to be the most > straightforward way of doing it (atleast for me). >=20 > See how other bits in `struct function' are streamed in/out in LTO, for e= xample in > output_struct_function_base() >=20 > bp_pack_value (&bp, fn->calls_alloca, 1); > bp_pack_value (&bp, fn->calls_setjmp, 1); > bp_pack_value (&bp, fn->va_list_fpr_size, 8); > bp_pack_value (&bp, fn->va_list_gpr_size, 8); >=20 > and the corresponding in input_struct_function_base(): >=20 > fn->calls_alloca =3D bp_unpack_value (&bp, 1); > fn->calls_setjmp =3D bp_unpack_value (&bp, 1); > fn->va_list_fpr_size =3D bp_unpack_value (&bp, 8); > fn->va_list_gpr_size =3D bp_unpack_value (&bp, 8); >=20 > Also, you will need a testcase to make sure later changes to the compiler= do not > break LTO wrt Cilk features you have added. >=20 I have added lto tests > > > >>> + /* We need frame pointer for all Cilk Plus functions that uses > >>> + Cilk Keywords. */ > >>> + || (flag_enable_cilkplus && cfun->is_cilk_function) > >> > >> "need a frame pointer" > >> > >> "that use" > >> > >> s/Keywords/keywords/ > >> > > > > It should be keywords, because you need frame-pointer for "_Cilk_spawn = and > _Cilk_sync" and "_Cilk_for" >=20 > I meant that you should lowercase the "K". >=20 This is fixed also > > > >>> + /* This variable will tell whether we are on a spawn helper or > >>> + not */ unsigned int is_cilk_helper_function : 1; > >> > >> Where is this used? > >> > > > > Well, it is not used now but later on when I add Tools support it will = be. I will > remove it for now. >=20 > Yes, please. >=20 Yep, this is removed also. > >>> --- gcc/ipa-inline-analysis.c > >>> +++ gcc/ipa-inline-analysis.c > >>> @@ -1433,6 +1433,9 @@ initialize_inline_failed (struct cgraph_edge *e) > >>> e->inline_failed =3D CIF_REDEFINED_EXTERN_INLINE; > >>> else if (e->call_stmt_cannot_inline_p) > >>> e->inline_failed =3D CIF_MISMATCHED_ARGUMENTS; > >>> + else if (flag_enable_cilkplus && cfun && cfun->calls_spawn) > >>> + /* We can't inline if the function is spawing a function. */ > >>> + e->inline_failed =3D CIF_BODY_NOT_AVAILABLE; > >> > >> Hmmm, if we don't have a cfun, perhaps we should be sticking this > >> calls_spawn bit in the cgraph node. > >> > >> Richard? Anyone? > >> > > > > When I am first setting this, I don't think cgraph is available. >=20 > See Richard's comment with regards to struct function and its availabilit= y via the > callee edge. Also see his comment regarding the inappropriate error mess= age. >=20 Yes, I changed it to FUNCTION_NOT_INLINABLE. > >>> @@ -3496,7 +3510,7 @@ struct GTY(()) tree_function_decl { > >>> ??? The bitfield needs to be able to hold all target function > >>> codes as well. */ > >>> ENUM_BITFIELD(built_in_function) function_code : 11; > >>> - ENUM_BITFIELD(built_in_class) built_in_class : 2; > >>> + ENUM_BITFIELD(built_in_class) built_in_class ; > >> > >> What's this for? > >> > > > > Added a new enum field called BUILT_IN_CILK so we need 3 bits instead o= f 2, > since there are 5 fields instead of 4. >=20 > Hmm, yeah. I see you added another field here: >=20 Well, as requested by Joseph, I have removed this change. > > diff --git a/gcc/tree.h b/gcc/tree.h > > index 0058a4b..952362f 100644 > > --- a/gcc/tree.h > > +++ b/gcc/tree.h > > @@ -262,6 +262,7 @@ enum built_in_class > > NOT_BUILT_IN =3D 0, > > BUILT_IN_FRONTEND, > > BUILT_IN_MD, > > + BUILT_IN_CILK, > > BUILT_IN_NORMAL > > }; >=20 > If you look at the comment above enum built_in_class, you will see that t= hese > classes specify which part of the compiler created the built-in (the fron= tend, the > backend (MD), or a normal builtin). I don't see how Cilk should be treat= ed > specially. And even so, I don't see how you use this BUILT_IN_CILK class > anywhere. >=20 This field is also removed as requested by Joseph. > >>> + if (DECL_BUILT_IN_CLASS (exp) =3D=3D BUILT_IN_NORMAL) > >>> + return DECL_FUNCTION_CODE (exp) =3D=3D BUILT_IN_MEMCPY; return > >>> + lang_hooks.cilkplus.spawnable_constructor (exp); return false; > >> > > > > That would be necessary for C++, but it returns false for C. So, > > should I take out this hook for now? Would prefer to keep it in >=20 > You can keep the hook, but do put a comment specifying that it's a place = holder > for C++. And also, please remove the second return. >=20 > >> Are these two hooks ever set to anything but hook_bool_tree_false? > >> If so, why the need for them? > >> > > > > Used in C++ but not in C. >=20 > Leave them. Similar comment please. >=20 Added the comment in langhooks.h under its description. > >>> + struct __cilkrts_worker { > >>> + __cilkrts_stack_frame *volatile *volatile tail; > >>> + __cilkrts_stack_frame *volatile *volatile head; > >>> + __cilkrts_stack_frame *volatile *volatile exc; > >>> + __cilkrts_stack_frame *volatile *volatile protected_tail; > >>> + __cilkrts_stack_frame *volatile *ltq_limit; > >> > >> What's this "*volatile *volatile" stuff? > >> > > > > That is how the field is described in Cilk Runtime source (please see: > > http://gcc.gnu.org/svn/gcc/branches/cilkplus/libcilkrts/include/intern > > al/abi.h) >=20 > Ok, I'm not a language expert, I presume this is specifying volatile on b= oth > indirections and is proper form. >=20 > >>> +/* Gimplifies the cilk_sync expression passed in *EXPR_P. Returns > >> GS_ALL_DONE > >>> + when finished. */ > >>> + > >>> +int > >>> +gimplify_cilk_sync (tree *expr_p, gimple_seq *pre_p, gimple_seq *pos= t_p > >>> + ATTRIBUTE_UNUSED) > >>> +{ > >>> + tree sync_expr =3D build_cilk_sync (); > >>> + *expr_p =3D NULL_TREE; > >>> + gimplify_and_add (sync_expr, pre_p); > >>> + return GS_ALL_DONE; > >> > >> I'm not a big fan of functions that always return the same thing. > >> The caller should set GS_ALL_DONE accordingly. > >> > > > > The reason why I did this is that, there is a generic empty hook for th= is in > langhooks.c that returns int. So, to reduce the number of code addition, = I just > made it return int. Also in future, if i want to add more things, having = a return > value I thought would be helpful. >=20 > Use void. Set GS_ALL_DONE in the caller. You can add the return value w= hen > you use it in the future. >=20 Thanks, Balaji V. Iyer. > Aldy --_002_BF230D13CA30DD48930C31D4099330003A458F86FMSMSX101amrcor_ Content-Type: text/plain; name="diff.txt" Content-Description: diff.txt Content-Disposition: attachment; filename="diff.txt"; size=114130; creation-date="Tue, 13 Aug 2013 20:29:01 GMT"; modification-date="Tue, 13 Aug 2013 20:28:10 GMT" Content-Transfer-Encoding: base64 Content-length: 154713 ZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5p bgppbmRleCBmYjBjYjRiLi5lM2RhMTExIDEwMDY0NAotLS0gYS9nY2MvTWFr ZWZpbGUuaW4KKysrIGIvZ2NjL01ha2VmaWxlLmluCkBAIC04NjksNyArODY5 LDcgQEAgUlRMX0VSUk9SX0ggPSBydGwtZXJyb3IuaCAkKFJUTF9IKSAkKERJ QUdOT1NUSUNfQ09SRV9IKQogUkVBRF9NRF9IID0gJChPQlNUQUNLX0gpICQo SEFTSFRBQl9IKSByZWFkLW1kLmgKIFBBUkFNU19IID0gcGFyYW1zLmggcGFy YW1zLmRlZgogQlVJTFRJTlNfREVGID0gYnVpbHRpbnMuZGVmIHN5bmMtYnVp bHRpbnMuZGVmIG9tcC1idWlsdGlucy5kZWYgXAotCWd0bS1idWlsdGlucy5k ZWYgc2FuaXRpemVyLmRlZiBjaWxrcGx1cy5kZWYKKwlndG0tYnVpbHRpbnMu ZGVmIHNhbml0aXplci5kZWYgY2lsa3BsdXMuZGVmIGNpbGstYnVpbHRpbnMu ZGVmCiBJTlRFUk5BTF9GTl9ERUYgPSBpbnRlcm5hbC1mbi5kZWYKIElOVEVS TkFMX0ZOX0ggPSBpbnRlcm5hbC1mbi5oICQoSU5URVJOQUxfRk5fREVGKQog VFJFRV9IID0gY29yZXR5cGVzLmggdHJlZS5oIGFsbC10cmVlLmRlZiB0cmVl LmRlZiBjLWZhbWlseS9jLWNvbW1vbi5kZWYgXApAQCAtOTYwLDYgKzk2MCw3 IEBAIFNDRVZfSCA9IHRyZWUtc2NhbGFyLWV2b2x1dGlvbi5oICQoR0dDX0gp IHRyZWUtY2hyZWMuaCAkKFBBUkFNU19IKQogT01FR0FfSCA9IG9tZWdhLmgg JChQQVJBTVNfSCkKIFRSRUVfREFUQV9SRUZfSCA9IHRyZWUtZGF0YS1yZWYu aCAkKE9NRUdBX0gpIGdyYXBoZHMuaCAkKFNDRVZfSCkKIFRSRUVfSU5MSU5F X0ggPSB0cmVlLWlubGluZS5oCitDSUxLX0ggPSBjaWxrLmgKIFJFQUxfSCA9 IHJlYWwuaCAkKE1BQ0hNT0RFX0gpCiBJUkFfSU5UX0ggPSBpcmEuaCBpcmEt aW50LmggJChDRkdMT09QX0gpIGFsbG9jLXBvb2wuaAogTFJBX0lOVF9IID0g bHJhLmggJChCSVRNQVBfSCkgJChSRUNPR19IKSAkKElOU05fQVRUUl9IKSBp bnNuLWNvZGVzLmggXApAQCAtMTE1Myw3ICsxMTU0LDcgQEAgQ19DT01NT05f T0JKUyA9IGMtZmFtaWx5L2MtY29tbW9uLm8gYy1mYW1pbHkvYy1jcHBidWls dGluLm8gYy1mYW1pbHkvYy1kdW1wLm8gXAogICBjLWZhbWlseS9jLW9tcC5v IGMtZmFtaWx5L2Mtb3B0cy5vIGMtZmFtaWx5L2MtcGNoLm8gXAogICBjLWZh bWlseS9jLXBwb3V0cHV0Lm8gYy1mYW1pbHkvYy1wcmFnbWEubyBjLWZhbWls eS9jLXByZXR0eS1wcmludC5vIFwKICAgYy1mYW1pbHkvYy1zZW1hbnRpY3Mu byBjLWZhbWlseS9jLWFkYS1zcGVjLm8gdHJlZS1tdWRmbGFwLm8gXAotICBj LWZhbWlseS9hcnJheS1ub3RhdGlvbi1jb21tb24ubworICBjLWZhbWlseS9h cnJheS1ub3RhdGlvbi1jb21tb24ubyBjLWZhbWlseS9jaWxrLm8KIAogIyBM YW5ndWFnZS1pbmRlcGVuZGVudCBvYmplY3QgZmlsZXMuCiAjIFdlIHB1dCB0 aGUgaW5zbi0qLm8gZmlsZXMgZmlyc3Qgc28gdGhhdCBhIHBhcmFsbGVsIG1h a2Ugd2lsbCBidWlsZApAQCAtMTE5OCw2ICsxMTk5LDcgQEAgT0JKUyA9IFwK IAljZ3JhcGhidWlsZC5vIFwKIAljZ3JhcGh1bml0Lm8gXAogCWNncmFwaGNs b25lcy5vIFwKKwljaWxrLWNvbW1vbi5vIFwKIAljb21iaW5lLm8gXAogCWNv bWJpbmUtc3RhY2stYWRqLm8gXAogCWNvbXBhcmUtZWxpbS5vIFwKQEAgLTIw MjIsNiArMjAyNCwxMCBAQCBjLWZhbWlseS9jLWFkYS1zcGVjLm8gOiBjLWZh bWlseS9jLWFkYS1zcGVjLmMgYy1mYW1pbHkvYy1hZGEtc3BlYy5oIFwKIGMt ZmFtaWx5L2FycmF5LW5vdGF0aW9uLWNvbW1vbi5vIDogYy1mYW1pbHkvYXJy YXktbm90YXRpb24tY29tbW9uLmMgJChUUkVFX0gpIFwKIAkkKFNZU1RFTV9I KSAkKFRSRUVfSCkgY29yZXR5cGVzLmggdHJlZS1pdGVyYXRvci5oICQoRElB R05PU1RJQ19DT1JFX0gpCiAKK2MtZmFtaWx5L2NpbGsubyA6IGMtZmFtaWx5 L2NpbGsuYyAkKFRSRUVfSCkgJChTWVNURU1fSCkgJChDT05GSUdfSCkgdG9w bGV2LmggXAorCSQoVFJFRV9IKSBjb3JldHlwZXMuaCB0cmVlLWl0ZXJhdG9y LmggJChUUkVFX0lOTElORV9IKSAkKENHUkFQSF9IKSBcCisJJChESUFHTk9T VElDX0NPUkVfSCkgJChHSU1QTEVfSCkgJChDSUxLX0gpICQoQ19DT01NT05f SCkgbGFuZ2hvb2tzLmgKKwogYy1mYW1pbHkvc3R1Yi1vYmpjLm8gOiBjLWZh bWlseS9zdHViLW9iamMuYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBcCiAJ Y29yZXR5cGVzLmggJChUUkVFX0gpICQoQ19DT01NT05fSCkgYy1mYW1pbHkv Yy1vYmpjLmgKIApAQCAtMjU0MSw3ICsyNTQ3LDcgQEAgdHJlZS1vcHRpbWl6 ZS5vIDogdHJlZS1vcHRpbWl6ZS5jICQoVFJFRV9GTE9XX0gpICQoQ09ORklH X0gpICQoU1lTVEVNX0gpIFwKICAgICQoVFJFRV9QQVNTX0gpICQoQ0ZHTE9P UF9IKSAkKEVYQ0VQVF9IKQogCiBnaW1wbGlmeS5vIDogZ2ltcGxpZnkuYyAk KENPTkZJR19IKSAkKFNZU1RFTV9IKSAkKFRSRUVfSCkgJChHSU1QTEVfSCkg XAotICAgJChESUFHTk9TVElDX0gpICQoVFJFRV9JTkxJTkVfSCkgbGFuZ2hv b2tzLmggXAorICAgJChESUFHTk9TVElDX0gpICQoVFJFRV9JTkxJTkVfSCkg bGFuZ2hvb2tzLmggJChDSUxLX0gpIFwKICAgICQoTEFOR0hPT0tTX0RFRl9I KSAkKFRSRUVfRkxPV19IKSAkKENHUkFQSF9IKSAkKFRJTUVWQVJfSCkgJChU TV9IKSBcCiAgICBjb3JldHlwZXMuaCAkKEVYQ0VQVF9IKSAkKEZMQUdTX0gp ICQoUlRMX0gpICQoRlVOQ1RJT05fSCkgJChFWFBSX0gpIFwKICAgICQoR0dD X0gpIGd0LWdpbXBsaWZ5LmggJChIQVNIVEFCX0gpICQoVEFSR0VUX0gpICQo RElBR05PU1RJQ19DT1JFX0gpICQoT1BUQUJTX0gpIFwKQEAgLTI4MjAsNyAr MjgyNiw3IEBAIGJ1aWx0aW5zLm8gOiBidWlsdGlucy5jIGJ1aWx0aW5zLmgg JChDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmggJChUTV9IKSBc CiAgICBoYXJkLXJlZy1zZXQuaCAkKERJQUdOT1NUSUNfQ09SRV9IKSBoYXJk LXJlZy1zZXQuaCAkKEVYQ0VQVF9IKSBcCiAgICAkKFRNX1BfSCkgJChQUkVE SUNUX0gpICQoTElCRlVOQ1NfSCkgbGFuZ2hvb2tzLmggJChCQVNJQ19CTE9D S19IKSBcCiAgICB0cmVlLW11ZGZsYXAuaCByZWFsbXBmci5oICQoQlVJTFRJ TlNfREVGKSAkKE1BQ0hNT0RFX0gpIFwKLSAgICQoRElBR05PU1RJQ19DT1JF X0gpICQoVFJFRV9GTE9XX0gpIHZhbHVlLXByb2YuaAorICAgJChESUFHTk9T VElDX0NPUkVfSCkgJChUUkVFX0ZMT1dfSCkgdmFsdWUtcHJvZi5oICQoQ0lM S19IKQogY2FsbHMubyA6IGNhbGxzLmMgJChDT05GSUdfSCkgJChTWVNURU1f SCkgY29yZXR5cGVzLmggJChUTV9IKSAkKFJUTF9IKSBcCiAgICAkKFRSRUVf SCkgJChGTEFHU19IKSAkKEVYUFJfSCkgJChPUFRBQlNfSCkgbGFuZ2hvb2tz LmggJChUQVJHRVRfSCkgXAogICAgJChMSUJGVU5DU19IKSAkKFJFR1NfSCkg JChESUFHTk9TVElDX0NPUkVfSCkgb3V0cHV0LmggXApAQCAtMjkxNyw2ICsy OTIzLDggQEAgY2dyYXBoY2xvbmVzLm8gOiBjZ3JhcGhjbG9uZXMuYyAkKENP TkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCAkKFRNX0gpIFwKICAg IHRyZWUtaXRlcmF0b3IuaCAkKENPVkVSQUdFX0gpIFwKICAgICQoR0lNUExF X1BSRVRUWV9QUklOVF9IKSAkKElQQV9JTkxJTkVfSCkgJChJUEFfVVRJTFNf SCkgXAogICAgJChMVE9fU1RSRUFNRVJfSCkgJChFWENFUFRfSCkgJChHQ0Nf UExVR0lOX0gpIGd0LWNncmFwaGNsb25lcy5oCitjaWxrLWNvbW1vbi5vIDog Y2lsay1jb21tb24uYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlw ZXMuaCAkKFRSRUVfSCkgXAorICAgbGFuZ2hvb2tzLmggJChFWFBSX0gpICQo T1BUQUJTX0gpICQoUkVDT0dfSCkgJChDSUxLX0gpCiBjZ3JhcGhidWlsZC5v IDogY2dyYXBoYnVpbGQuYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3Jl dHlwZXMuaCAkKFRNX0gpIFwKICAgICQoVFJFRV9IKSBsYW5naG9va3MuaCAk KENHUkFQSF9IKSBpbnRsLmggcG9pbnRlci1zZXQuaCAkKEdJTVBMRV9IKSBc CiAgICAkKFRSRUVfRkxPV19IKSAkKFRSRUVfUEFTU19IKSAkKElQQV9VVElM U19IKSAkKEVYQ0VQVF9IKSBcCmRpZmYgLS1naXQgYS9nY2MvYnVpbHRpbnMu YyBiL2djYy9idWlsdGlucy5jCmluZGV4IDc4YjBkODQuLmI4YWIzYzcgMTAw NjQ0Ci0tLSBhL2djYy9idWlsdGlucy5jCisrKyBiL2djYy9idWlsdGlucy5j CkBAIC00OCw2ICs0OCw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZp bGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAidmFsdWUtcHJv Zi5oIgogI2luY2x1ZGUgImRpYWdub3N0aWMtY29yZS5oIgogI2luY2x1ZGUg ImJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiY2lsay5oIgogCiAKICNpZm5kZWYg UEFEX1ZBUkFSR1NfRE9XTgpAQCAtMjM3LDYgKzIzOCw5IEBAIGlzX2J1aWx0 aW5fbmFtZSAoY29uc3QgY2hhciAqbmFtZSkKICAgICByZXR1cm4gdHJ1ZTsK ICAgaWYgKHN0cm5jbXAgKG5hbWUsICJfX2F0b21pY18iLCA5KSA9PSAwKQog ICAgIHJldHVybiB0cnVlOworICBpZiAoZmxhZ19lbmFibGVfY2lsa3BsdXMg JiYgKCFzdHJjbXAgKG5hbWUsICJfX2NpbGtydHNfZGV0YWNoIikgICAKKwkJ CSAgICAgICB8fCAhc3RyY21wIChuYW1lLCAiX19jaWxrcnRzX3BvcF9mcmFt ZSIpKSkKKyAgICByZXR1cm4gdHJ1ZTsKICAgcmV0dXJuIGZhbHNlOwogfQog CkBAIC02ODY5LDYgKzY4NzMsMTQgQEAgZXhwYW5kX2J1aWx0aW4gKHRyZWUg ZXhwLCBydHggdGFyZ2V0LCBydHggc3VidGFyZ2V0LCBlbnVtIG1hY2hpbmVf bW9kZSBtb2RlLAogICAgICAgZXhwYW5kX2J1aWx0aW5fc2V0X3RocmVhZF9w b2ludGVyIChleHApOwogICAgICAgcmV0dXJuIGNvbnN0MF9ydHg7CiAKKyAg ICBjYXNlIEJVSUxUX0lOX0NJTEtfREVUQUNIOgorICAgICAgZXhwYW5kX2J1 aWx0aW5fY2lsa19kZXRhY2ggKGV4cCk7CisgICAgICByZXR1cm4gY29uc3Qw X3J0eDsKKyAgICAgIAorICAgIGNhc2UgQlVJTFRfSU5fQ0lMS19QT1BfRlJB TUU6CisgICAgICBleHBhbmRfYnVpbHRpbl9jaWxrX3BvcF9mcmFtZSAoZXhw KTsKKyAgICAgIHJldHVybiBjb25zdDBfcnR4OworCiAgICAgZGVmYXVsdDoJ LyoganVzdCBkbyBsaWJyYXJ5IGNhbGwsIGlmIHVua25vd24gYnVpbHRpbiAq LwogICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ2NjL2J1aWx0 aW5zLmRlZiBiL2djYy9idWlsdGlucy5kZWYKaW5kZXggOWI1NWIxZi4uNTk1 NWQ2ZiAxMDA2NDQKLS0tIGEvZ2NjL2J1aWx0aW5zLmRlZgorKysgYi9nY2Mv YnVpbHRpbnMuZGVmCkBAIC0xNDEsNiArMTQxLDEzIEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAgICAg ICAgICAgICAgICBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgQVRUUlMsIGZhbHNlLCBc CiAJICAgICAgIChmbGFnX29wZW5tcCB8fCBmbGFnX3RyZWVfcGFyYWxsZWxp emVfbG9vcHMpKQogCisvKiBCdWlsdGluIHVzZWQgYnkgaW1wbGVtZW50YXRp b24gb2YgQ2lsayBQbHVzLiBNb3N0IG9mIHRoZXNlIGFyZSBkZWNvbXBvc2Vk CisgICBieSB0aGUgY29tcGlsZXIgYnV0IGEgZmV3IGFyZSBpbXBsZW1lbnRl ZCBpbiBsaWJjaWxrcnRzLiAgKi8gCisjdW5kZWYgREVGX0NJTEtfQlVJTFRJ Tl9TVFVCCisjZGVmaW5lIERFRl9DSUxLX0JVSUxUSU5fU1RVQihFTlVNLCBO QU1FKSBcCisgIERFRl9CVUlMVElOIChFTlVNLCBOQU1FLCBCVUlMVF9JTl9O T1JNQUwsIEJUX0xBU1QsIEJUX0xBU1QsIGZhbHNlLCBmYWxzZSwgXAorCSAg ICAgICBmYWxzZSwgQVRUUl9MQVNULCBmYWxzZSwgZmFsc2UpCisKIC8qIEJ1 aWx0aW4gdXNlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gb2YgR05VIFRNLiAg VGhlc2UKICAgIGZ1bmN0aW9ucyBhcmUgbWFwcGVkIHRvIHRoZSBhY3R1YWwg aW1wbGVtZW50YXRpb24gb2YgdGhlIFNUTSBsaWJyYXJ5LiAqLwogI3VuZGVm IERFRl9UTV9CVUlMVElOCkBAIC04MzYsNiArODQzLDkgQEAgREVGX0dDQ19C VUlMVElOIChCVUlMVF9JTl9MSU5FLCAiTElORSIsIEJUX0ZOX0lOVCwgQVRU Ul9OT1RIUk9XX0xFQUZfTElTVCkKIC8qIE9wZW5NUCBidWlsdGlucy4gICov CiAjaW5jbHVkZSAib21wLWJ1aWx0aW5zLmRlZiIKIAorLyogQ2lsayBLZXl3 b3JkcyBidWlsdGlucy4gICovCisjaW5jbHVkZSAiY2lsay1idWlsdGlucy5k ZWYiCisKIC8qIEdUTSBidWlsdGlucy4gKi8KICNpbmNsdWRlICJndG0tYnVp bHRpbnMuZGVmIgogCmRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy1jb21t b24uYyBiL2djYy9jLWZhbWlseS9jLWNvbW1vbi5jCmluZGV4IDdiYmEzNzYu LjVlNjEzOTkgMTAwNjQ0Ci0tLSBhL2djYy9jLWZhbWlseS9jLWNvbW1vbi5j CisrKyBiL2djYy9jLWZhbWlseS9jLWNvbW1vbi5jCkBAIC00MDMsNiArNDAz LDggQEAgY29uc3Qgc3RydWN0IGNfY29tbW9uX3Jlc3dvcmQgY19jb21tb25f cmVzd29yZHNbXSA9CiAgIHsgIl9BbGlnbm9mIiwJCVJJRF9BTElHTk9GLCAg IERfQ09OTFkgfSwKICAgeyAiX0Jvb2wiLAkJUklEX0JPT0wsICAgICAgRF9D T05MWSB9LAogICB7ICJfQ29tcGxleCIsCQlSSURfQ09NUExFWCwJMCB9LAor ICB7ICJfQ2lsa19zcGF3biIsICAgICAgUklEX0NJTEtfU1BBV04sIDAgfSwK KyAgeyAiX0NpbGtfc3luYyIsICAgICAgIFJJRF9DSUxLX1NZTkMsICAwIH0s CiAgIHsgIl9JbWFnaW5hcnkiLAlSSURfSU1BR0lOQVJZLCBEX0NPTkxZIH0s CiAgIHsgIl9EZWNpbWFsMzIiLCAgICAgICBSSURfREZMT0FUMzIsICBEX0NP TkxZIHwgRF9FWFQgfSwKICAgeyAiX0RlY2ltYWw2NCIsICAgICAgIFJJRF9E RkxPQVQ2NCwgIERfQ09OTFkgfCBEX0VYVCB9LApAQCAtNTE3Niw2ICs1MTc4 LDkgQEAgY19kZWZpbmVfYnVpbHRpbnMgKHRyZWUgdmFfbGlzdF9yZWZfdHlw ZV9ub2RlLCB0cmVlIHZhX2xpc3RfYXJnX3R5cGVfbm9kZSkKIAogICBpZiAo ZmxhZ19tdWRmbGFwKQogICAgIG11ZGZsYXBfaW5pdCAoKTsKKworICBpZiAo ZmxhZ19lbmFibGVfY2lsa3BsdXMpCisgICAgY2lsa19pbml0X2J1aWx0aW5z ICgpOwogfQogCiAvKiBMaWtlIGdldF9pZGVudGlmaWVyLCBidXQgYXZvaWQg d2FybmluZ3MgYWJvdXQgbnVsbCBhcmd1bWVudHMgd2hlbgpAQCAtMTE0NjQs NiArMTE0NjksOCBAQCBjX2NvbW1vbl9pbml0X3RzICh2b2lkKQogICBNQVJL X1RTX1RZUEVEIChDX01BWUJFX0NPTlNUX0VYUFIpOwogICBNQVJLX1RTX1RZ UEVEIChFWENFU1NfUFJFQ0lTSU9OX0VYUFIpOwogICBNQVJLX1RTX1RZUEVE IChBUlJBWV9OT1RBVElPTl9SRUYpOworICBNQVJLX1RTX1RZUEVEIChDSUxL X1NZTkNfU1RNVCk7CisgIE1BUktfVFNfVFlQRUQgKENJTEtfU1BBV05fU1RN VCk7CiB9CiAKIC8qIEJ1aWxkIGEgdXNlci1kZWZpbmVkIG51bWVyaWMgbGl0 ZXJhbCBvdXQgb2YgYW4gaW50ZWdlciBjb25zdGFudCB0eXBlIFZBTFVFCmRp ZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy1jb21tb24uaCBiL2djYy9jLWZh bWlseS9jLWNvbW1vbi5oCmluZGV4IGRjNDMwYzMuLmFiNzdmYTQgMTAwNjQ0 Ci0tLSBhL2djYy9jLWZhbWlseS9jLWNvbW1vbi5oCisrKyBiL2djYy9jLWZh bWlseS9jLWNvbW1vbi5oCkBAIC0xNDgsNiArMTQ4LDkgQEAgZW51bSByaWQK ICAgLyogQysrMTEgKi8KICAgUklEX0NPTlNURVhQUiwgUklEX0RFQ0xUWVBF LCBSSURfTk9FWENFUFQsIFJJRF9OVUxMUFRSLCBSSURfU1RBVElDX0FTU0VS VCwKIAorICAvKiBDaWxrIFBsdXMgS2V5d29yZHMuICAqLworICBSSURfQ0lM S19TUEFXTiwgUklEX0NJTEtfU1lOQywKKyAgCiAgIC8qIE9iamVjdGl2ZS1D ICgiQVQiIHJlc2VydmVkIHdvcmRzIC0gdGhleSBhcmUgb25seSBrZXl3b3Jk cyB3aGVuCiAgICAgIHRoZXkgZm9sbG93ICdAJykgICovCiAgIFJJRF9BVF9F TkNPREUsICAgUklEX0FUX0VORCwKQEAgLTEyMDYsNCArMTIwOSwxMyBAQCBl eHRlcm4gdm9pZCBjaWxrcGx1c19leHRyYWN0X2FuX3RyaXBsZXRzICh2ZWM8 dHJlZSwgdmFfZ2M+ICosIHNpemVfdCwgc2l6ZV90LAogCQkJCQkgIHZlYzx2 ZWM8YW5fcGFydHM+ID4gKik7CiBleHRlcm4gdmVjIDx0cmVlLCB2YV9nYz4g KmZpeF9zZWNfaW1wbGljaXRfYXJncwogICAobG9jYXRpb25fdCwgdmVjIDx0 cmVlLCB2YV9nYz4gKiwgdmVjPGFuX2xvb3BfcGFydHM+LCBzaXplX3QsIHRy ZWUpOworCisvKiBJbiBjaWxrLmMuICAqLworZXh0ZXJuIHRyZWUgaW5zZXJ0 X2NpbGtfZnJhbWUgKHRyZWUpOworZXh0ZXJuIHZvaWQgY2lsa19pbml0X2J1 aWx0aW5zICh2b2lkKTsKK2V4dGVybiBpbnQgZ2ltcGxpZnlfY2lsa19zcGF3 biAodHJlZSAqLCBnaW1wbGVfc2VxICosIGdpbXBsZV9zZXEgKik7CitleHRl cm4gaW50IGdpbXBsaWZ5X2NpbGtfc3luYyAodHJlZSAqLCBnaW1wbGVfc2Vx ICosIGdpbXBsZV9zZXEgKik7CitleHRlcm4gdm9pZCBjX2NpbGtfaW5zdGFs bF9ib2R5X3dfZnJhbWVfY2xlYW51cCAodHJlZSwgdHJlZSk7CitleHRlcm4g Ym9vbCBjaWxrX3ZhbGlkX3NwYXduICh0cmVlICopOworZXh0ZXJuIGJvb2wg Y2lsa3BsdXNfc2V0X3NwYXduX21hcmtlciAobG9jYXRpb25fdCwgdHJlZSk7 CiAjZW5kaWYgLyogISBHQ0NfQ19DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEv Z2NjL2MtZmFtaWx5L2NpbGsuYyBiL2djYy9jLWZhbWlseS9jaWxrLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4ZTlmYQotLS0g L2Rldi9udWxsCisrKyBiL2djYy9jLWZhbWlseS9jaWxrLmMKQEAgLTAsMCAr MSwxNDY3IEBACisvKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW50ZWwo UikgQ2lsayhUTSkgUGx1cyBzdXBwb3J0CisgICBUaGlzIGZpbGUgY29udGFp bnMgdGhlIENpbGtQbHVzIEludHJpbnNpY3MKKyAgIENvcHlyaWdodCAoQykg MjAxMyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250 cmlidXRlZCBieSBCYWxhamkgVi4gSXllciA8YmFsYWppLnYuaXllckBpbnRl bC5jb20+LAorICAgSW50ZWwgQ29ycG9yYXRpb24KKworVGhpcyBmaWxlIGlz IHBhcnQgb2YgR0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAordW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKK2FueSBsYXRl ciB2ZXJzaW9uLgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CitXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxv bmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBz ZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNp bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNs dWRlICJjb3JldHlwZXMuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVk ZSAibGFuZ2hvb2tzLmgiCisjaW5jbHVkZSAiZ2ltcGxlLmgiCisjaW5jbHVk ZSAidHJlZS1pdGVyYXRvci5oIgorI2luY2x1ZGUgInRyZWUtaW5saW5lLmgi CisjaW5jbHVkZSAiYy1mYW1pbHkvYy1jb21tb24uaCIKKyNpbmNsdWRlICJ0 b3BsZXYuaCIgCisjaW5jbHVkZSAiY2dyYXBoLmgiCisjaW5jbHVkZSAiZGlh Z25vc3RpYy5oIgorI2luY2x1ZGUgImNpbGsuaCIKKworZW51bSBhZGRfdmFy aWFibGVfdHlwZSB7CisgICAgLyogUmVmZXJlbmNlIHRvIHByZXZpb3VzbHkt ZGVmaW5lZCB2YXJpYWJsZS4gICovCisgICAgQUREX1JFQUQsCisgICAgLyog RGVmaW5pdGlvbiBvZiBhIG5ldyB2YXJpYWJsZSBpbiBpbm5lci1zY29wZS4g ICovCisgICAgQUREX0JJTkQsCisgICAgLyogV3JpdGUgdG8gcG9zc2libHkg cHJldmlvdXNseS1kZWZpbmVkIHZhcmlhYmxlLiAgKi8KKyAgICBBRERfV1JJ VEUKK307CisKK2VudW0gY2lsa19ibG9ja190eXBlIHsKKyAgICAvKiBJbmRp Y2F0ZXMgYSBfQ2lsa19zcGF3biBibG9jay4gIDMwIHdhcyBhbiBhcmJpdGFy eSBudW1iZXIgcGlja2VkIGZvciAKKyAgICAgICBlYXNlIG9mIGRlYnVnZ2lu Zy4gICovCisgICAgQ0lMS19CTE9DS19TUEFXTiA9IDMwLAorICAgIC8qIElu ZGljYXRlcyBfQ2lsa19mb3Igc3RhdGVtZW50IGJsb2NrLiAgKi8KKyAgICBD SUxLX0JMT0NLX0ZPUgorfTsKKworc3RydWN0IHdyYXBwZXJfZGF0YQorewor ICAvKiBLaW5kIG9mIGZ1bmN0aW9uIHRvIGJlIGNyZWF0ZWQuICovCisgIGVu dW0gY2lsa19ibG9ja190eXBlIHR5cGU7CisgIC8qIFNpZ25hdHVyZSBvZiBo ZWxwZXIgZnVuY3Rpb24uICAqLworICB0cmVlIGZudHlwZTsKKyAgLyogQ29u dGFpbmluZyBmdW5jdGlvbi4gICovCisgIHRyZWUgY29udGV4dDsKKyAgLyog RGlzcG9zaXRpb24gb2YgYWxsIHZhcmlhYmxlcyBpbiB0aGUgaW5uZXIgc3Rh dGVtZW50LiAgKi8KKyAgc3RydWN0IHBvaW50ZXJfbWFwX3QgKmRlY2xfbWFw OworICAvKiBUcnVlIGlmIHRoaXMgZnVuY3Rpb24gbmVlZHMgYSBzdGF0aWMg Y2hhaW4uICAqLworICBib29sIG5lc3RlZDsKKyAgLyogQXJndW1lbnRzIHRv IGJlIHBhc3NlZCB0byB3cmFwcGVyIGZ1bmN0aW9uLCBjdXJyZW50bHkgYSBs aXN0LiAqLworICB0cmVlIGFyZ2xpc3Q7CisgIC8qIEFyZ3VtZW50IHR5cGVz LCBhIGxpc3QuICAqLworICB0cmVlIGFyZ3R5cGVzOworICAvKiBJbmNvbWlu ZyBwYXJhbWV0ZXJzLiAgKi8KKyAgdHJlZSBwYXJtczsKKyAgLyogT3V0ZXIg QkxPQ0sgb2JqZWN0LiAgKi8KKyAgdHJlZSBibG9jazsKK307CisKK3N0YXRp YyB2b2lkIGV4dHJhY3RfZnJlZV92YXJpYWJsZXMgKHRyZWUsIHN0cnVjdCB3 cmFwcGVyX2RhdGEgKiwKKwkJCQkgICAgZW51bSBhZGRfdmFyaWFibGVfdHlw ZSk7CitzdGF0aWMgSE9TVF9XSURFX0lOVCBjaWxrX3dyYXBwZXJfY291bnQ7 CisKKy8qIE1hcmtzIHRoZSBDQUxMX0VYUFIsIEZDQUxMLCBhcyBhIHNwYXdu ZWQgZnVuY3Rpb24gY2FsbCBhbmQgdGhlIGN1cnJlbnQKKyAgIGZ1bmN0aW9u IGFzIGEgc3Bhd25lci4gIEVtaXQgZXJyb3IgaWYgdGhlIGZ1bmN0aW9uIGNh bGwgaXMgb3V0c2lkZSBhCisgICBmdW5jdGlvbiBvciBpZiBhIG5vbiBmdW5j dGlvbi1jYWxsIGlzIHNwYXduZWQuICAqLworCitib29sCitjaWxrcGx1c19z ZXRfc3Bhd25fbWFya2VyIChsb2NhdGlvbl90IGxvYywgdHJlZSBmY2FsbCkK K3sKKyAgaWYgKCFjdXJyZW50X2Z1bmN0aW9uX2RlY2wpCisgICAgeyAKKyAg ICAgIGVycm9yX2F0IChsb2MsICJfQ2lsa19zcGF3biBtYXkgb25seSBiZSB1 c2VkIGluc2lkZSBhIGZ1bmN0aW9uIik7CisgICAgICByZXR1cm4gZmFsc2U7 CisgICAgfQorICBlbHNlIGlmIChmY2FsbCA9PSBlcnJvcl9tYXJrX25vZGUp CisgICAgLyogRXJyb3IgcmVwb3J0aW5nIGhlcmUgaXMgbm90IG5lY2Vzc2Fy eSBoZXJlIHNpbmNlIGlmIEZDQUxMIGlzIGFuCisgICAgICAgZXJyb3JfbWFy a19ub2RlLCB0aGUgZnVuY3Rpb24gbWFya2luZyBpdCBhcyBlcnJvciB3b3Vs ZCBoYXZlIHJlcG9ydGVkCisgICAgICAgaXQuICAqLworICAgIHJldHVybiBm YWxzZTsgCisgIGVsc2UgaWYgKFRSRUVfQ09ERSAoZmNhbGwpICE9IENBTExf RVhQUikKKyAgICB7IAorICAgICAgZXJyb3JfYXQgKGxvYywgIm9ubHkgZnVu Y3Rpb24gY2FsbHMgY2FuIGJlIHNwYXduZWQiKTsKKyAgICAgIHJldHVybiBm YWxzZTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBjZnVuLT5jYWxs c19jaWxrX3NwYXduID0gdHJ1ZTsKKyAgICAgIHJldHVybiB0cnVlOworICAg IH0KK30KKworLyogUmV0dXJucyBhIHNldGptcCBDQUxMX0VYUFIgd2l0aCBG UkFNRS0+Y29udGV4dCBhcyBpdHMgcGFyYW1ldGVyLiAgKi8KKwordHJlZQor Y2lsa19jYWxsX3NldGptcCAodHJlZSBmcmFtZSkKK3sKKyAgdHJlZSBjOwor CisgIGMgPSBjaWxrX2RvdCAoZnJhbWUsIENJTEtfVElfRlJBTUVfQ09OVEVY VCwgZmFsc2UpOworICBjID0gYnVpbGQxIChBRERSX0VYUFIsIGJ1aWxkX3Bv aW50ZXJfdHlwZSAocHRyX3R5cGVfbm9kZSksIGMpOworICByZXR1cm4gYnVp bGRfY2FsbF9leHByIChidWlsdGluX2RlY2xfaW1wbGljaXQgKEJVSUxUX0lO X1NFVEpNUCksIDEsIGMpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHdpbGwg ZXhwYW5kIGEgY2lsa19zeW5jIGNhbGwuICAqLworCitzdGF0aWMgdHJlZQor YnVpbGRfY2lsa19zeW5jICh2b2lkKQoreworICB0cmVlIGZyYW1lID0gY2Z1 bi0+Y2lsa19mcmFtZV9kZWNsOworCisgIC8qIENpbGtfc3luYyBpcyBjb252 ZXJ0ZWQgdG8gdGhlIGZvbGxvd2luZyBjb2RlOgorCisgICAgIHNmLnBlZGln cmVlID0gc2Yud29ya2VyLT5wZWRpZ3JlZTsKKyAgICAgaWYgKGZyYW1lLmZs YWdzICYgQ0lMS19GUkFNRV9VTlNZTkNIRUQpCisgICAgIHsKKyAgICAgICAg X19jaWxrcnRzX3NhdmVfZnBfY3N3ICgmc2YpOworICAgICAgICBpZiAoIWJ1 aWx0aW5fc2V0am1wIChzZi5jdHgpIAorCSAgICBfX2NpbGtydHNfc3luYygm c2YpOyAKKwllbHNlIAorCSAgIGlmIChzZi5mbGFncyAmIENJTEtfRlJBTUVf RVhDRVBUSU5HKSAKKwkgICAgIF9fY2lsa3J0c19yZXRocm93ICgmc2YpOyAK KyAgICAgIH0KKyAgICAgIHNmLndvcmtlci0+cGVkaWdyZWUucmFuayA9IHNm Lndvcmtlci0+cGVkaWdyZWUucmFuayArIDE7ICAqLworCisgIHRyZWUgZmxh Z3MgPSBjaWxrX2RvdCAoZnJhbWUsIENJTEtfVElfRlJBTUVfRkxBR1MsIGZh bHNlKTsKKyAgCisgIHRyZWUgdW5zeW5jaGVkID0gZm9sZF9idWlsZDIgKEJJ VF9BTkRfRVhQUiwgVFJFRV9UWVBFIChmbGFncyksIGZsYWdzLAorCQkJCWJ1 aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAoZmxhZ3MpLAorCQkJCQkgICAgICAg Q0lMS19GUkFNRV9VTlNZTkNIRUQpKTsKKworICB1bnN5bmNoZWQgPSBmb2xk X2J1aWxkMiAoTkVfRVhQUiwgVFJFRV9UWVBFICh1bnN5bmNoZWQpLCB1bnN5 bmNoZWQsCisJCQkgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKHVuc3lu Y2hlZCksIDApKTsKKworICB0cmVlIGZyYW1lX2FkZHIgPSBidWlsZDEgKEFE RFJfRVhQUiwgY2lsa19mcmFtZV9wdHJfdHlwZV9kZWNsLCBmcmFtZSk7CisK KyAgLyogQ2hlY2sgaWYgZXhjZXB0aW9uICgweDEwKSBiaXQgaXMgc2V0IGlu IHRoZSBzZi0+ZmxhZ3MuICAqLworICB0cmVlIGV4Y2VwdF9mbGFnID0gZm9s ZF9idWlsZDIgKEJJVF9BTkRfRVhQUiwgVFJFRV9UWVBFIChmbGFncyksIGZs YWdzLAorCQkJCSAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChmbGFncyks CisJCQkJCQkgQ0lMS19GUkFNRV9FWENFUFRJTkcpKTsKKyAgZXhjZXB0X2Zs YWcgPSBmb2xkX2J1aWxkMiAoTkVfRVhQUiwgVFJFRV9UWVBFIChleGNlcHRf ZmxhZyksIGV4Y2VwdF9mbGFnLAorCQkJICAgICBidWlsZF9pbnRfY3N0IChU UkVFX1RZUEUgKGV4Y2VwdF9mbGFnKSwgMCkpOworCisgIC8qIElmIHRoZSBl eGNlcHRpb24gZmxhZyBpcyBzZXQgdGhlbiBjYWxsIHRoZSBfX2NpbGtydHNf cmV0aHJvdyAoJnNmKS4gICovCisgIHRyZWUgZXhjZXB0X2NvbmQgPSBmb2xk X2J1aWxkMyAoQ09ORF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgZXhjZXB0X2Zs YWcsCisJCQkJICBidWlsZF9jYWxsX2V4cHIgKGNpbGtfcmV0aHJvd19mbmRl Y2wsIDEsCisJCQkJCQkgICBmcmFtZV9hZGRyKSwKKwkJCQkgIGJ1aWxkX2Vt cHR5X3N0bXQgKEVYUFJfTE9DQVRJT04gKHVuc3luY2hlZCkpKTsKKyAgCisg IHRyZWUgc3luY19leHByID0gYnVpbGRfY2FsbF9leHByIChjaWxrX3N5bmNf Zm5kZWNsLCAxLCBmcmFtZV9hZGRyKTsKKyAgdHJlZSBzZXRqbXBfZXhwciA9 IGNpbGtfY2FsbF9zZXRqbXAgKGZyYW1lKTsKKyAgc2V0am1wX2V4cHIgPSBm b2xkX2J1aWxkMiAoRVFfRVhQUiwgVFJFRV9UWVBFIChzZXRqbXBfZXhwciks IHNldGptcF9leHByLAorCQkJICAgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZ UEUgKHNldGptcF9leHByKSwgMCkpOworICAKKyAgc2V0am1wX2V4cHIgPSBm b2xkX2J1aWxkMyAoQ09ORF9FWFBSLCB2b2lkX3R5cGVfbm9kZSwgc2V0am1w X2V4cHIsCisJCQkgICAgIHN5bmNfZXhwciwgZXhjZXB0X2NvbmQpOworICB0 cmVlIHN5bmNfbGlzdCA9IGFsbG9jX3N0bXRfbGlzdCAoKTsKKyAgYXBwZW5k X3RvX3N0YXRlbWVudF9saXN0IChidWlsZF9jYWxsX2V4cHIgKGNpbGtfc2F2 ZV9mcF9mbmRlY2wsIDEsCisJCQkJCSAgICAgZnJhbWVfYWRkciksICZzeW5j X2xpc3QpOworICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3QgKHNldGptcF9l eHByLCAmc3luY19saXN0KTsKKyAgdHJlZSBzeW5jID0gZm9sZF9idWlsZDMg KENPTkRfRVhQUiwgdm9pZF90eXBlX25vZGUsIHVuc3luY2hlZCwgc3luY19s aXN0LAorCQkJICAgYnVpbGRfZW1wdHlfc3RtdCAoRVhQUl9MT0NBVElPTiAo dW5zeW5jaGVkKSkpOworICB0cmVlIHBhcmVudF9wZWRpZ3JlZSA9IGNpbGtf ZG90IChmcmFtZSwgQ0lMS19USV9GUkFNRV9QRURJR1JFRSwgZmFsc2UpOwor ICB0cmVlIHdvcmtlciA9IGNpbGtfZG90IChmcmFtZSwgQ0lMS19USV9GUkFN RV9XT1JLRVIsIGZhbHNlKTsKKyAgdHJlZSB3b3JrZXJfcGVkaWdyZWUgPSBj aWxrX2Fycm93ICh3b3JrZXIsIENJTEtfVElfV09SS0VSX1BFRElHUkVFLCBm YWxzZSk7CisgIHRyZWUgYXNzaWduX3BlZGlncmVlID0gZm9sZF9idWlsZDIg KE1PRElGWV9FWFBSLCB2b2lkX3R5cGVfbm9kZSwKKwkJCQkgICAgICBwYXJl bnRfcGVkaWdyZWUsIHdvcmtlcl9wZWRpZ3JlZSk7CisgIHRyZWUgd19wZWRf cmFuayA9IGNpbGtfZG90ICh1bnNoYXJlX2V4cHIgKHdvcmtlcl9wZWRpZ3Jl ZSksIAorCQkJICAgICAgQ0lMS19USV9QRURJR1JFRV9SQU5LLCBmYWxzZSk7 CisgIHRyZWUgaW5jcl9wZWRfcmFuayA9IGZvbGRfYnVpbGQyIChQTFVTX0VY UFIsIFRSRUVfVFlQRSAod19wZWRfcmFuayksCisJCQkJICAgIHdfcGVkX3Jh bmssCisJCQkJICAgIGJ1aWxkX29uZV9jc3QgKFRSRUVfVFlQRSAod19wZWRf cmFuaykpKTsKKyAgaW5jcl9wZWRfcmFuayA9IGZvbGRfYnVpbGQyIChNT0RJ RllfRVhQUiwgdm9pZF90eXBlX25vZGUsIHdfcGVkX3JhbmssCisJCQkgICAg ICAgaW5jcl9wZWRfcmFuayk7CisgIHRyZWUgcmV0X3N5bmNfZXhwID0gYWxs b2Nfc3RtdF9saXN0ICgpOworICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3Qg KGFzc2lnbl9wZWRpZ3JlZSwgJnJldF9zeW5jX2V4cCk7CisgIGFwcGVuZF90 b19zdGF0ZW1lbnRfbGlzdCAoc3luYywgJnJldF9zeW5jX2V4cCk7CisgIGFw cGVuZF90b19zdGF0ZW1lbnRfbGlzdCAoaW5jcl9wZWRfcmFuaywgJnJldF9z eW5jX2V4cCk7CisgIHJldHVybiByZXRfc3luY19leHA7Cit9CisKKy8qIFRo aXMgZnVuY3Rpb24gd2lsbCBvdXRwdXQgdGhlIGV4aXQgY29uZGl0aW9ucyBm b3IgYSBzcGF3biBjYWxsLiAgKi8KKwordHJlZQorYnVpbGRfY2lsa19mdW5j dGlvbl9leGl0ICh0cmVlIGZyYW1lLCBib29sIGRldGFjaGVzLCBib29sIG5l ZWRzX3N5bmMpCit7CisgIHRyZWUgc3luY19leHByID0gTlVMTF9UUkVFOwor CisgIHRyZWUgZXBpID0gYWxsb2Nfc3RtdF9saXN0ICgpOworCisgIGlmIChu ZWVkc19zeW5jKQorICAgIHsKKyAgICAgIHN5bmNfZXhwciA9IGJ1aWxkX2Np bGtfc3luYyAoKTsKKyAgICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAo c3luY19leHByLCAmZXBpKTsKKyAgICB9CisgIAorICB0cmVlIGZ1bmNfcHRy ID0gYnVpbGQxIChBRERSX0VYUFIsIGNpbGtfZnJhbWVfcHRyX3R5cGVfZGVj bCwgZnJhbWUpOworICB0cmVlIHBvcF9mcmFtZSA9IGJ1aWxkX2NhbGxfZXhw ciAoY2lsa19wb3BfZm5kZWNsLCAxLCBmdW5jX3B0cik7CisgIHRyZWUgd29y a2VyID0gY2lsa19kb3QgKGZyYW1lLCBDSUxLX1RJX0ZSQU1FX1dPUktFUiwg MCk7CisgIHRyZWUgY3VycmVudCA9IGNpbGtfYXJyb3cgKHdvcmtlciwgQ0lM S19USV9XT1JLRVJfQ1VSLCAwKTsKKyAgdHJlZSBwYXJlbnQgPSBjaWxrX2Rv dCAoZnJhbWUsIENJTEtfVElfRlJBTUVfUEFSRU5ULCAwKTsKKyAgdHJlZSBz ZXRfY3VycmVudCA9IGJ1aWxkMiAoTU9ESUZZX0VYUFIsIHZvaWRfdHlwZV9u b2RlLCBjdXJyZW50LCBwYXJlbnQpOworICBhcHBlbmRfdG9fc3RhdGVtZW50 X2xpc3QgKHNldF9jdXJyZW50LCAmZXBpKTsKKyAgYXBwZW5kX3RvX3N0YXRl bWVudF9saXN0IChwb3BfZnJhbWUsICZlcGkpOworICB0cmVlIGNhbGwgPSBi dWlsZF9jYWxsX2V4cHIgKGNpbGtfbGVhdmVfZm5kZWNsLCAxLCBmdW5jX3B0 cik7CisgIGlmICghZGV0YWNoZXMpCisgICAgeworICAgICAgdHJlZSBmbGFn c19jbXBfZXhwciA9IE5VTExfVFJFRTsKKyAgICAgIHRyZWUgZmxhZ3MgPSBj aWxrX2RvdCAoZnJhbWUsIENJTEtfVElfRlJBTUVfRkxBR1MsIGZhbHNlKTsK KyAgICAgIGZsYWdzX2NtcF9leHByID0gZm9sZF9idWlsZDIgKE5FX0VYUFIs IFRSRUVfVFlQRSAoZmxhZ3MpLCBmbGFncywKKwkJCQkgICAgYnVpbGRfaW50 X2NzdCAoVFJFRV9UWVBFIChmbGFncyksCisJCQkJCQkgICBDSUxLX0ZSQU1F X1ZFUlNJT04pKTsKKyAgICAgIGNhbGwgPSBmb2xkX2J1aWxkMyAoQ09ORF9F WFBSLCB2b2lkX3R5cGVfbm9kZSwgZmxhZ3NfY21wX2V4cHIsCisJCQkgIGNh bGwsIGJ1aWxkX2VtcHR5X3N0bXQgKEVYUFJfTE9DQVRJT04gKGZsYWdzKSkp OworICAgIH0KKyAgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0IChjYWxsLCAm ZXBpKTsgIAorICByZXR1cm4gZXBpOworfQorCisvKiBHaW1wbGlmaWVzIHRo ZSBjaWxrX3N5bmMgZXhwcmVzc2lvbiBwYXNzZWQgaW4gKkVYUFJfUC4gIFJl dHVybnMgR1NfQUxMX0RPTkUgCisgICB3aGVuIGZpbmlzaGVkLiAgKi8KKwor aW50CitnaW1wbGlmeV9jaWxrX3N5bmMgKHRyZWUgKmV4cHJfcCwgZ2ltcGxl X3NlcSAqcHJlX3AsIGdpbXBsZV9zZXEgKnBvc3RfcAorCQkgICAgQVRUUklC VVRFX1VOVVNFRCkKK3sKKyAgdHJlZSBzeW5jX2V4cHIgPSBidWlsZF9jaWxr X3N5bmMgKCk7CisgICpleHByX3AgPSBOVUxMX1RSRUU7CisgIGdpbXBsaWZ5 X2FuZF9hZGQgKHN5bmNfZXhwciwgcHJlX3ApOworICByZXR1cm4gR1NfQUxM X0RPTkU7Cit9CisKKy8qIFRyeWluZyB0byBnZXQgdGhlIGNvcnJlY3QgY2Z1 biBmb3IgdGhlIEZVTkNUSU9OX0RFQ0wgaW5kaWNhdGVkIGJ5IE9VVEVSLiAg Ki8KKworc3RhdGljIHZvaWQKK3BvcF9jZnVuX3RvICh0cmVlIG91dGVyKQor eworICBwb3BfY2Z1biAoKTsKKyAgY3VycmVudF9mdW5jdGlvbl9kZWNsID0g b3V0ZXI7CisgIGdjY19hc3NlcnQgKGNmdW4gPT0gREVDTF9TVFJVQ1RfRlVO Q1RJT04gKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCkpOworICBnY2NfYXNzZXJ0 IChjZnVuLT5kZWNsID09IGN1cnJlbnRfZnVuY3Rpb25fZGVjbCk7Cit9CisK Ky8qIFRoaXMgZnVuY3Rpb24gZG9lcyB3aGF0ZXZlciBpcyBuZWNlc3Nhcnkg dG8gbWFrZSB0aGUgY29tcGlsZXIgZW1pdCBhIG5ld2x5IAorICAgZ2VuZXJh dGVkIGZ1bmN0aW9uLCBGTkRFQ0wuICAqLworCitzdGF0aWMgdm9pZAorY2Fs bF9ncmFwaF9hZGRfZm4gKHRyZWUgZm5kZWNsKQoreworICBjb25zdCB0cmVl IG91dGVyID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOworICBzdHJ1Y3QgZnVu Y3Rpb24gKmYgPSBERUNMX1NUUlVDVF9GVU5DVElPTiAoZm5kZWNsKTsKKwor ICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKGZuZGVjbCkgPT0gRlVOQ1RJT05f REVDTCk7CisKKyAgZi0+aXNfY2lsa19mdW5jdGlvbiA9IDE7CisgIGYtPmN1 cnJfcHJvcGVydGllcyA9IGNmdW4tPmN1cnJfcHJvcGVydGllczsKKyAgZ2Nj X2Fzc2VydCAoY2Z1biA9PSBERUNMX1NUUlVDVF9GVU5DVElPTiAob3V0ZXIp KTsgCisgIGdjY19hc3NlcnQgKGNmdW4tPmRlY2wgPT0gb3V0ZXIpOworCisg IHB1c2hfY2Z1biAoZik7IAorCisgIGNncmFwaF9hZGRfbmV3X2Z1bmN0aW9u IChmbmRlY2wsIGZhbHNlKTsKKyAgY2dyYXBoX2ZpbmFsaXplX2Z1bmN0aW9u IChmbmRlY2wsIHRydWUpOyAKKworICBwb3BfY2Z1bl90byAob3V0ZXIpOwor fQorCisvKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGEgdHJlZSB3aGljaCBp cyBhbGxvd2VkIHRvIGNvbnRhaW4gYSBzcGF3biBhcyAKKyAgIG9wZXJhbmQg MC4KKyAgIEEgc3Bhd24gY2FsbCBtYXkgYmUgd3JhcHBlZCBpbiBhIHNlcmll cyBvZiB1bmFyeSBvcGVyYXRpb25zIHN1Y2gKKyAgIGFzIGNvbnZlcnNpb25z LiAgVGhlc2UgY29udmVyc2lvbnMgbmVlZCBub3QgYmUgInVzZWxlc3MiCisg ICB0byBiZSBkaXNyZWdhcmRlZCBiZWNhdXNlIHRoZXkgYXJlIHJldGFpbmVk IGluIHRoZSBzcGF3bmVkCisgICBzdGF0ZW1lbnQuICBUaGV5IGFyZSBieXBh c3NlZCBvbmx5IHRvIGxvb2sgZm9yIGEgc3Bhd24KKyAgIHdpdGhpbi4KKyAg IEEgY29tcGFyaXNvbiB0byBjb25zdGFudCBpcyBzaW1wbGUgZW5vdWdoIHRv IGFsbG93LCBhbmQKKyAgIGlzIHVzZWQgdG8gY29udmVydCB0byBib29sLiAg Ki8KKworc3RhdGljIGJvb2wKK2NpbGtfaWdub3JhYmxlX3NwYXduX3Joc19v cCAodHJlZSBleHApCit7CisgIGVudW0gdHJlZV9jb2RlIGNvZGUgPSBUUkVF X0NPREUgKGV4cCk7CisgIHN3aXRjaCAoVFJFRV9DT0RFX0NMQVNTIChjb2Rl KSkKKyAgICB7CisgICAgY2FzZSB0Y2NfZXhwcmVzc2lvbjoKKyAgICAgIHJl dHVybiBjb2RlID09IEFERFJfRVhQUjsKKyAgICBjYXNlIHRjY19jb21wYXJp c29uOgorICAgICAgLyogV2UgbmVlZCB0aGUgc3Bhd24gYXMgb3BlcmFuZCAw IGZvciBub3cuICAgVGhhdCdzIHdoZXJlIGl0CisJIGFwcGVhcnMgaW4gdGhl IG9ubHkgY2FzZSB3ZSByZWFsbHkgY2FyZSBhYm91dCwgY29udmVyc2lvbgor CSB0byBib29sLiAgKi8KKyAgICAgIHJldHVybiAoVFJFRV9DT0RFIChUUkVF X09QRVJBTkQgKGV4cCwgMSkpID09IElOVEVHRVJfQ1NUKTsKKyAgICBjYXNl IHRjY191bmFyeToKKyAgICBjYXNlIHRjY19yZWZlcmVuY2U6CisgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNl OworICAgIH0KK30KKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciB3YWxrX3Ry ZWUuICBJZiAqVFAgaXMgYSBDSUxLX1NQQVdOX1NUTVQsIHRoZW4gdW53cmFw CisgICB0aGlzICJ3cmFwcGVyIiBhbmQgICpXQUxLX1NVQlRSRUVTIGlzIHNl dCB0byAwLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgCisgICBOVUxMX1RSRUUg cmVnYXJkbGVzcy4gICovCisKK3N0YXRpYyB0cmVlCit1bndyYXBfY2lsa19z eW5jX3N0bXQgKHRyZWUgKnRwLCBpbnQgKndhbGtfc3VidHJlZXMsIHZvaWQg KikKK3sKKyAgaWYgKFRSRUVfQ09ERSAoKnRwKSA9PSBDSUxLX1NQQVdOX1NU TVQpCisgICAgeworICAgICAgKnRwID0gQ0lMS19TUEFXTl9GTiAoKnRwKTsK KyAgICAgICp3YWxrX3N1YnRyZWVzID0gMDsKKyAgICB9CisgIHJldHVybiBO VUxMX1RSRUU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRvIHNl ZSBpZiB0aGUgY29uc3RydWN0b3IgaW4gRVhQIGNhbiBiZSBzcGF3bmFibGUu ICAqLworCitzdGF0aWMgYm9vbAorY2lsa19zcGF3bmFibGVfY29uc3RydWN0 b3IgKHRyZWUgZXhwKQoreworICBpZiAoVFJFRV9DT0RFIChleHApICE9IEFE RFJfRVhQUikKKyAgICByZXR1cm4gZmFsc2U7CisgIGV4cCA9IFRSRUVfT1BF UkFORCAoZXhwLCAwKTsKKyAgaWYgKFRSRUVfQ09ERSAoZXhwKSAhPSBGVU5D VElPTl9ERUNMKQorICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKERFQ0xfQlVJ TFRfSU5fQ0xBU1MgKGV4cCkgPT0gQlVJTFRfSU5fTk9STUFMKQorICAgIHJl dHVybiBERUNMX0ZVTkNUSU9OX0NPREUgKGV4cCkgPT0gQlVJTFRfSU5fTUVN Q1BZOworICByZXR1cm4gbGFuZ19ob29rcy5jaWxrcGx1cy5zcGF3bmFibGVf Y29uc3RydWN0b3IgKGV4cCk7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSB3aGVu IEVYUCBpcyBhIENBTExfRVhQUiB3aXRoIF9DaWxrX3NwYXduIGluIGZyb250 LiAgVW53cmFwcworICAgQ0lMS19TUEFXTl9TVE1UIHdyYXBwZXIgZnJvbSB0 aGUgQ0FMTF9FWFBSIGluICpFWFAwIHN0YXRlbWVudC4gICovCisKK3N0YXRp YyBib29sCityZWNvZ25pemVfc3Bhd24gKHRyZWUgZXhwLCB0cmVlICpleHAw KQoreworICBib29sIHNwYXduX2ZvdW5kID0gZmFsc2U7CisgIGlmIChUUkVF X0NPREUgKGV4cCkgPT0gQ0lMS19TUEFXTl9TVE1UKQorICAgIHsKKyAgICAg IC8qIFJlbW92ZSB0aGUgQ0FMTF9FWFBSIGZyb20gQ0lMS19TUEFXTl9TVE1U IHdyYXBwZXIgYW5kIHJldHVybiB0cnVlLiAgKi8KKyAgICAgIGV4cCA9IENJ TEtfU1BBV05fRk4gKGV4cCk7CisgICAgICB3YWxrX3RyZWUgKGV4cDAsIHVu d3JhcF9jaWxrX3N5bmNfc3RtdCwgTlVMTCwgTlVMTCk7CisgICAgICBzcGF3 bl9mb3VuZCA9IHRydWU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg aWYgKFRSRUVfQ09ERSAoZXhwKSAhPSBDQUxMX0VYUFIgJiYgVFJFRV9DT0RF IChleHApICE9IFRBUkdFVF9FWFBSKSAKKwlzcGF3bl9mb3VuZCA9IGxhbmdf aG9va3MuY2lsa3BsdXMucmVjb2duaXplX3NwYXduIChleHApOworICAgICAg ZWxzZQorCXJldHVybiBmYWxzZTsKKyAgICB9CisgIHJldHVybiBzcGF3bl9m b3VuZDsKK30KKworLyogUmV0dXJucyB0cnVlIGlmICpFWFAwIGlzIGEgcmVj b2duaXplZCBmb3JtIG9mIHNwYXduLiAgUmVjb2duaXplZCBmb3JtcyBhcmUs CisgICBhZnRlciBjb252ZXJzaW9uIHRvIHZvaWQsIGEgY2FsbCBleHByZXNz aW9uIGF0IG91dGVyIGxldmVsIG9yIGFuIGFzc2lnbm1lbnQKKyAgIGF0IG91 dGVyIGxldmVsIHdpdGggdGhlIHJpZ2h0IGhhbmQgc2lkZSBiZWluZyBhIHNw YXduZWQgY2FsbC4KKyAgIE5vdGUgdGhhdCBgPScgaW4gQysrIG1heSB0dXJu IGludG8gYSBDQUxMX0VYUFIgcmF0aGVyIHRoYW4gYSBNT0RJRllfRVhQUi4g ICovCisKK2Jvb2wKK2NpbGtfdmFsaWRfc3Bhd24gKHRyZWUgKmV4cDApCit7 CisgIHRyZWUgZXhwID0gKmV4cDA7CisgIGJvb2wgd2FybjsKKworICBpZiAo IVRSRUVfU0lERV9FRkZFQ1RTIChleHApKQorICAgIHJldHVybiBmYWxzZTsK KworICAvKiBJZiB0aGUgZnVuY3Rpb24gY29udGFpbnMgbm8gQ2lsayBjb2Rl LCB0aGlzIGlzbid0IGEgc3Bhd24uICAqLworICBpZiAoIWNmdW4tPmNpbGtf ZnJhbWVfZGVjbCkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLyogU3RyaXAg b2ZmIGFueSBjb252ZXJzaW9uIHRvIHZvaWQuICBJdCBkb2VzIG5vdCBhZmZl Y3Qgd2hldGhlciBzcGF3biAKKyAgICAgaXMgc3VwcG9ydGVkIGhlcmUuICAq LworICBpZiAoVFJFRV9DT0RFIChleHApID09IENPTlZFUlRfRVhQUiAmJiBW T0lEX1RZUEVfUCAoVFJFRV9UWVBFIChleHApKSkKKyAgICBleHAgPSBUUkVF X09QRVJBTkQgKGV4cCwgMCk7CisKKyAgaWYgKFRSRUVfQ09ERSAoZXhwKSA9 PSBNT0RJRllfRVhQUiB8fCBUUkVFX0NPREUgKGV4cCkgPT0gSU5JVF9FWFBS KQorICAgIGV4cCA9IFRSRUVfT1BFUkFORCAoZXhwLCAxKTsKKworICB3aGls ZSAoY2lsa19pZ25vcmFibGVfc3Bhd25fcmhzX29wIChleHApKQorICAgIGV4 cCA9IFRSRUVfT1BFUkFORCAoZXhwLCAwKTsKKworICBpZiAoVFJFRV9DT0RF IChleHApID09IFRBUkdFVF9FWFBSKQorICAgIGlmIChUQVJHRVRfRVhQUl9J TklUSUFMIChleHApCisJJiYgVFJFRV9DT0RFIChUQVJHRVRfRVhQUl9JTklU SUFMIChleHApKSAhPSBBR0dSX0lOSVRfRVhQUikKKyAgICAgIGV4cCA9IFRB UkdFVF9FWFBSX0lOSVRJQUwgKGV4cCk7CisKKyAgLyogSGFwcGVucyB3aXRo IEMrKyBUQVJHRVRfRVhQUi4gICovCisgIGlmIChleHAgPT0gTlVMTF9UUkVF KQorICAgIHJldHVybiBmYWxzZTsgCisKKyAgd2hpbGUgKFRSRUVfQ09ERSAo ZXhwKSA9PSBDTEVBTlVQX1BPSU5UX0VYUFIgfHwgVFJFRV9DT0RFIChleHAp ID09IEVYUFJfU1RNVCkKKyAgICBleHAgPSBUUkVFX09QRVJBTkQgKGV4cCwg MCk7CisgIAorICAvKiBOb3cgd2UgaGF2ZSBhIGNhbGwsIG9yIHRoaXMgaXNu J3QgYSB2YWxpZCBzcGF3bi4gIFRoaXMgd2lsbCByZWplY3QgYW55IAorICAg ICBvdXRlciBub24tc3Bhd24gQUdHUl9JTklUX0VYUFIgdGhhdCBpcyB2YWxp ZCBiZWNhdXNlIG9mIGEgc3Bhd24gaW5zaWRlLiAgKi8KKyAgaWYgKHJlY29n bml6ZV9zcGF3biAoZXhwLCBleHAwKSkKKyAgICByZXR1cm4gdHJ1ZTsKKwor ICBpZiAoVFJFRV9DT0RFIChleHApICE9IENBTExfRVhQUikKKyAgICByZXR1 cm4gZmFsc2U7CisKKyAgLyogVGhpcyBtYXkgYmUgYSBjYWxsIHRoYXQgaXMg bm90IGEgc3Bhd24gaXRzZWxmIGJ1dCBjb250YWlucyBhIHNwYXduLgorICAg ICBJbiB0aGF0IGNhc2UsIHRoZSBjYWxsIHNob3VsZCBiZSBhIGNvbnN0cnVj dG9yLgorCisgICAgIHggPSBzcGF3biBmKCk7CisKKyAgICAgbWF5IGV4cGFu ZCB0bworCisgICAgIChjYWxsIG9wZXJhdG9yPSAoJnZhcjEsIChjb252ZXJ0 ICYodGFyZ2V0IHZhcjIgKGFnZ3JfaW5pdC9zcGF3biAuLi4pKSkpCisKKyAg ICAgb3BlcmF0b3I9IG1heSBiZSBhIGZ1bmN0aW9uIG9yIGEgY2FsbCB0byBf X2J1aWx0aW5fbWVtY3B5ICh3aGljaAorICAgICB3aWxsIGhhdmUgb25lIG1v cmUgYXJndW1lbnQsIHRoZSBzaXplKS4KKworICAgICBXaGF0IHdlIHNwZWNp ZmljYWxseSBzdXBwb3J0IGlzIHRoZSBhZGRyZXNzIG9mIHRoZSB2YWx1ZQor ICAgICBpbml0aWFsaXplZCBieSBhIHNwYXduaW5nIEFHR1JfSU5JVF9FWFBS IGJlaW5nIHBhc3NlZCBhcworICAgICB0aGUgc2Vjb25kIGFyZ3VtZW50IHRv IGEgZnVuY3Rpb24uICAqLworCisgIHdhcm4gPSAhY2lsa19zcGF3bmFibGVf Y29uc3RydWN0b3IgKENBTExfRVhQUl9GTiAoZXhwKSk7CisKKyAgLyogVGhl IGZ1bmN0aW9uIGFkZHJlc3Mgb2YgYSBjYWxsIG1heSBub3QgYmUgY29tcHV0 ZWQgdmlhIGEgc3Bhd24uCisgICAgIExvb2sgYXQgdGhlIGFyZ2xpc3Qgb25s eSwgYW5kIG9ubHkgdGhlIHNlY29uZCBhcmd1bWVudCB3aGljaAorICAgICBp cyB0aGUgUkhTIG9mIGFueSBwbGF1c2libGUgYXNzaWdubWVudCBvciBjb3B5 LiAgVGhlIGZpcnN0CisgICAgIGFyZ3VtZW50IGlzIHRoZSBMSFMuICBBIHRo aXJkIGFyZ3VtZW50IGNvdWxkIGJlIGEgc2l6ZSBmb3IKKyAgICAgbWVtY3B5 LiAgVGhpcyBwYXRoIHN1cHBvcnRzIG9wPSBpbiBhZGRpdGlvbiB0byA9LCBv bmx5IGJlY2F1c2UKKyAgICAgaXQgaXMgZWFzeSB0byBkbyBzby4gKi8KKyAg aWYgKGNhbGxfZXhwcl9uYXJncyAoZXhwKSA8IDIpCisgICAgcmV0dXJuIGZh bHNlOworCisgIGV4cCA9IENBTExfRVhQUl9BUkcgKGV4cCwgMCk7CisKKyAg U1RSSVBfVVNFTEVTU19UWVBFX0NPTlZFUlNJT04gKGV4cCk7CisKKyAgaWYg KFRSRUVfQ09ERSAoZXhwKSA9PSBBRERSX0VYUFIpCisgICAgZXhwID0gVFJF RV9PUEVSQU5EIChleHAsIDApOworCisgIGlmIChUUkVFX0NPREUgKGV4cCkg PT0gVEFSR0VUX0VYUFIpCisgICAgZXhwID0gVEFSR0VUX0VYUFJfSU5JVElB TCAoZXhwKTsKKworICBpZiAoIWV4cCB8fCAhcmVjb2duaXplX3NwYXduIChl eHAsIGV4cDApKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAod2Fybikg CisgICAgd2FybmluZyAoMCwgInN1c3BpY2lvdXMgdXNlIG9mIF9DaWxrX3Nw YXduIik7CisgIHJldHVybiB0cnVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9u IHdpbGwgcmV0dXJuIGEgRk5ERUNMIHVzaW5nIGluZm9ybWF0aW9uIGZyb20g KldELiAgKi8KKworc3RhdGljIHRyZWUKK2J1aWxkX2NpbGtfaGVscGVyX2Rl Y2wgKHN0cnVjdCB3cmFwcGVyX2RhdGEgKndkKQoreworICBjaGFyIG5hbWVb MjBdOworICBpZiAod2QtPnR5cGUgPT0gQ0lMS19CTE9DS19GT1IpCisgICAg c3ByaW50ZiAobmFtZSwgIl9jaWxrX2Zvcl8lbGQiLCBjaWxrX3dyYXBwZXJf Y291bnQrKyk7CisgIGVsc2UgaWYgKHdkLT50eXBlID09IENJTEtfQkxPQ0tf U1BBV04pCisgICAgc3ByaW50ZiAobmFtZSwgIl9jaWxrX3Nwbl8lbGQiLCBj aWxrX3dyYXBwZXJfY291bnQrKyk7CisgIGVsc2UKKyAgICBnY2NfdW5yZWFj aGFibGUgKCk7IAorICAKKyAgY2xlYW5fc3ltYm9sX25hbWUgKG5hbWUpOwor ICB0cmVlIGZuZGVjbCA9IGJ1aWxkX2RlY2wgKFVOS05PV05fTE9DQVRJT04s IEZVTkNUSU9OX0RFQ0wsIAorCQkJICAgIGdldF9pZGVudGlmaWVyIChuYW1l KSwgd2QtPmZudHlwZSk7CisKKyAgVFJFRV9QVUJMSUMgKGZuZGVjbCkgPSAw OworICBUUkVFX1NUQVRJQyAoZm5kZWNsKSA9IDE7CisgIFRSRUVfVVNFRCAo Zm5kZWNsKSA9IDE7CisgIERFQ0xfQVJUSUZJQ0lBTCAoZm5kZWNsKSA9IDA7 CisgIERFQ0xfSUdOT1JFRF9QIChmbmRlY2wpID0gMDsKKyAgREVDTF9FWFRF Uk5BTCAoZm5kZWNsKSA9IDA7CisKKyAgaWYgKHdkLT5uZXN0ZWQpIAorICAg IERFQ0xfQ09OVEVYVCAoZm5kZWNsKSA9IHdkLT5jb250ZXh0OworICBlbHNl IAorICAgIC8qIEluIEMrKywgY29weWluZyB0aGUgb3V0ZXIgZnVuY3Rpb24n cyBjb250ZXh0IG1ha2VzIHRoZSBsb29wIAorICAgICAgIGZ1bmN0aW9uIGFw cGVhciBsaWtlIGEgc3RhdGljIG1lbWJlciBmdW5jdGlvbi4gICovIAorICAg IERFQ0xfQ09OVEVYVCAoZm5kZWNsKSA9IERFQ0xfQ09OVEVYVCAod2QtPmNv bnRleHQpOworCisgIHRyZWUgYmxvY2sgPSBtYWtlX25vZGUgKEJMT0NLKTsK KyAgREVDTF9JTklUSUFMIChmbmRlY2wpID0gYmxvY2s7CisgIFRSRUVfVVNF RCAoYmxvY2spID0gMTsKKyAgZ2NjX2Fzc2VydCAoIURFQ0xfU0FWRURfVFJF RSAoZm5kZWNsKSk7CisKKyAgLyogSW5saW5pbmcgd291bGQgZGVmZWF0IHRo ZSBwdXJwb3NlIG9mIHRoaXMgd3JhcHBlci4KKyAgICAgRWl0aGVyIGl0IHNl Y3JldGx5IHN3aXRjaGVzIHN0YWNrIGZyYW1lcyBvciBpdCBhbGxvY2F0ZXMK KyAgICAgYSBzdGFibGUgc3RhY2sgZnJhbWUgdG8gaG9sZCBmdW5jdGlvbiBh cmd1bWVudHMgZXZlbiBpZgorICAgICB0aGUgcGFyZW50IHN0YWNrIGZyYW1l IGlzIHN0b2xlbi4gICovCisgIERFQ0xfVU5JTkxJTkFCTEUgKGZuZGVjbCkg PSAxOworCisgIHRyZWUgcmVzdWx0X2RlY2wgPSBidWlsZF9kZWNsIChVTktO T1dOX0xPQ0FUSU9OLCBSRVNVTFRfREVDTCwgTlVMTF9UUkVFLCAKKwkJCQkg dm9pZF90eXBlX25vZGUpOworICBERUNMX0FSVElGSUNJQUwgKHJlc3VsdF9k ZWNsKSA9IDA7CisgIERFQ0xfSUdOT1JFRF9QIChyZXN1bHRfZGVjbCkgPSAx OworICBERUNMX0NPTlRFWFQgKHJlc3VsdF9kZWNsKSA9IGZuZGVjbDsKKyAg REVDTF9SRVNVTFQgKGZuZGVjbCkgPSByZXN1bHRfZGVjbDsKKyAgCisgIHJl dHVybiBmbmRlY2w7Cit9CisKKy8qIEEgZnVuY3Rpb24gdXNlZCBieSB3YWxr IHRyZWUgdG8gZmluZCB3cmFwcGVyIHBhcm1zLiAgKi8KKworc3RhdGljIGJv b2wKK3dyYXBwZXJfcGFybV9jYiAoY29uc3Qgdm9pZCAqa2V5MCwgdm9pZCAq KnZhbDAsIHZvaWQgKmRhdGEpCit7CisgIHN0cnVjdCB3cmFwcGVyX2RhdGEg KndkID0gKHN0cnVjdCB3cmFwcGVyX2RhdGEgKikgZGF0YTsKKyAgdHJlZSBh cmcgPSAqICh0cmVlICopJmtleTA7CisgIHRyZWUgdmFsID0gKHRyZWUpKnZh bDA7CisgIHRyZWUgcGFybTsKKworICBpZiAodmFsID09IGVycm9yX21hcmtf bm9kZSB8fCB2YWwgPT0gYXJnKQorICAgIHJldHVybiB0cnVlOworCisgIGlm IChUUkVFX0NPREUgKHZhbCkgPT0gUEFSRU5fRVhQUikKKyAgICB7CisgICAg ICAvKiBXZSBzaG91bGQgbm90IHJlYWNoIGhlcmUgd2l0aCBhIHJlZ2lzdGVy IHJlY2VpdmVyLgorCSBXZSBtYXkgc2VlIGEgcmVnaXN0ZXIgdmFyaWFibGUg bW9kaWZpZWQgaW4gdGhlCisJIGFyZ3VtZW50IGxpc3QuICBCZWNhdXNlIHJl Z2lzdGVyIHZhcmlhYmxlcyBhcmUKKwkgd29ya2VyLWxvY2FsIHdlIGRvbid0 IG5lZWQgdG8gd29yayBoYXJkIHRvIHN1cHBvcnQKKwkgdGhlbSBpbiBjb2Rl IHRoYXQgc3Bhd25zLiAqLworICAgICAgaWYgKChUUkVFX0NPREUgKGFyZykg PT0gVkFSX0RFQ0wpICYmIERFQ0xfSEFSRF9SRUdJU1RFUiAoYXJnKSkKKwl7 CisJICBlcnJvcl9hdCAoRVhQUl9MT0NBVElPTiAoYXJnKSwKKwkJICAgICJl eHBsaWNpdCByZWdpc3RlciB2YXJpYWJsZSAlcUQgbWF5IG5vdCBiZSBtb2Rp ZmllZCBpbiAiCisJCSAgICAic3Bhd24iLCBhcmcpOworCSAgYXJnID0gbnVs bF9wb2ludGVyX25vZGU7CisJfQorICAgICAgZWxzZQorCWFyZyA9IGJ1aWxk MSAoQUREUl9FWFBSLCBidWlsZF9wb2ludGVyX3R5cGUgKFRSRUVfVFlQRSAo YXJnKSksIGFyZyk7CisJCisgICAgICB2YWwgPSBUUkVFX09QRVJBTkQgKHZh bCwgMCk7CisgICAgICAqdmFsMCA9IHZhbDsKKyAgICAgIGdjY19hc3NlcnQg KFRSRUVfQ09ERSAodmFsKSA9PSBJTkRJUkVDVF9SRUYpOworICAgICAgcGFy bSA9IFRSRUVfT1BFUkFORCAodmFsLCAwKTsKKyAgICAgIFNUUklQX05PUFMg KHBhcm0pOworICAgIH0KKyAgZWxzZQorICAgIHBhcm0gPSB2YWw7CisgIFRS RUVfQ0hBSU4gKHBhcm0pID0gd2QtPnBhcm1zOworICB3ZC0+cGFybXMgPSBw YXJtOworICB3ZC0+YXJndHlwZXMgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwg VFJFRV9UWVBFIChwYXJtKSwgd2QtPmFyZ3R5cGVzKTsgCisgIHdkLT5hcmds aXN0ID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIGFyZywgd2QtPmFyZ2xpc3Qp OyAKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMg dXNlZCB0byBidWlsZCBhIHdyYXBwZXIgb2YgYSBjZXJ0YWluIHR5cGUuICAq LworCitzdGF0aWMgdm9pZAorYnVpbGRfd3JhcHBlcl90eXBlIChzdHJ1Y3Qg d3JhcHBlcl9kYXRhICp3ZCkKK3sKKyAgd2QtPmFyZ2xpc3QgPSBOVUxMX1RS RUU7CisgIHdkLT5wYXJtcyA9IE5VTExfVFJFRTsKKyAgd2QtPmFyZ3R5cGVz ID0gdm9pZF9saXN0X25vZGU7CisKKyAgcG9pbnRlcl9tYXBfdHJhdmVyc2Ug KHdkLT5kZWNsX21hcCwgd3JhcHBlcl9wYXJtX2NiLCB3ZCk7CisgIGdjY19h c3NlcnQgKHdkLT50eXBlICE9IENJTEtfQkxPQ0tfRk9SKTsKKworICAvKiBO b3cgYnVpbGQgYSBmdW5jdGlvbi4KKyAgICAgSXRzIHJldHVybiB0eXBlIGlz IHZvaWQgKGFsbCBzaWRlIGVmZmVjdHMgYXJlIHZpYSBleHBsaWNpdCBwYXJh bWV0ZXJzKS4KKyAgICAgSXRzIHBhcmFtZXRlcnMgYXJlIFdSQVBQRVJfUEFS TVMgd2l0aCB0eXBlIFdSQVBQRVJfVFlQRVMuCisgICAgIEFjdHVhbCBhcmd1 bWVudHMgaW4gdGhlIGNhbGxlciBhcmUgV1JBUFBFUl9BUkdTLiAgKi8KKyAg d2QtPmZudHlwZSA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHZvaWRfdHlwZV9u b2RlLCB3ZC0+YXJndHlwZXMpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGNo ZWNrcyBhbGwgdGhlIENBTExfRVhQUnMgaW4gKlRQIGZvdW5kIGJ5IGNpbGtf b3V0bGluZS4gICovCisKK3N0YXRpYyB0cmVlCitjaGVja19vdXRsaW5lZF9j YWxscyAodHJlZSAqdHAsIGludCAqd2Fsa19zdWJ0cmVlcyBBVFRSSUJVVEVf VU5VU0VELCAKKwkJICAgICAgdm9pZCAqZGF0YSkKK3sKKyAgYm9vbCAqdGhy b3dzID0gKGJvb2wgKikgZGF0YTsKKyAgdHJlZSB0ID0gKnRwOworICBpbnQg ZmxhZ3M7CisKKyAgaWYgKFRSRUVfQ09ERSAodCkgIT0gQ0FMTF9FWFBSKQor ICAgIHJldHVybiAwOworICBmbGFncyA9IGNhbGxfZXhwcl9mbGFncyAodCk7 CisKKyAgaWYgKCEoZmxhZ3MgJiBFQ0ZfTk9USFJPVykgJiYgZmxhZ19leGNl cHRpb25zKQorICAgICp0aHJvd3MgPSB0cnVlOworICBpZiAoZmxhZ3MgJiBF Q0ZfUkVUVVJOU19UV0lDRSkKKyAgICBlcnJvcl9hdCAoRVhQUl9MT0NBVElP TiAodCksIAorCSAgICAgICJjYW5ub3Qgc3Bhd24gY2FsbCB0byBmdW5jdGlv biB0aGF0IHJldHVybnMgdHdpY2UiKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8q IEVhY2ggREVDTCBpbiB0aGUgc291cmNlIGNvZGUgKHNwYXduZWQgc3RhdGVt ZW50KSBpcyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbgorICAgb25jZS4gIEVh Y2ggaW5zdGFuY2Ugb2YgdGhlIERFQ0wgaXMgcmVwbGFjZWQgd2l0aCB0aGUg cmVzdWx0IG9mIHRoaXMgCisgICBmdW5jdGlvbi4KKworICAgVGhlIHBhcmFt ZXRlcnMgb2YgdGhlIHdyYXBwZXIgc2hvdWxkIGhhdmUgYmVlbiBlbnRlcmVk IGludG8gdGhlIG1hcCBhbHJlYWR5LgorICAgVGhpcyBmdW5jdGlvbiBvbmx5 IGRlYWxzIHdpdGggdmFyaWFibGVzIHdpdGggc2NvcGUgbGltaXRlZCB0byB0 aGUgCisgICBzcGF3bmVkIGV4cHJlc3Npb24uICAqLworCitzdGF0aWMgdHJl ZQorY29weV9kZWNsX2Zvcl9jaWxrICh0cmVlIGRlY2wsIGNvcHlfYm9keV9k YXRhICppZCkKK3sKKyAgc3dpdGNoIChUUkVFX0NPREUgKGRlY2wpKQorICAg IHsKKyAgICBjYXNlIFZBUl9ERUNMOgorICAgICAgcmV0dXJuIGNvcHlfZGVj bF9ub19jaGFuZ2UgKGRlY2wsIGlkKTsKKworICAgIGNhc2UgTEFCRUxfREVD TDoKKyAgICAgIGVycm9yX2F0IChFWFBSX0xPQ0FUSU9OIChkZWNsKSwgImlu dmFsaWQgdXNlIG9mIGxhYmVsICVxK0QgaW4gc3Bhd24iLCAKKwkJZGVjbCk7 CisgICAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOworCisgICAgY2FzZSBS RVNVTFRfREVDTDoKKyAgICBjYXNlIFBBUk1fREVDTDoKKyAgICAgIC8qIFJF U1VMVF9ERUNMIGFuZCBQQVJNX0RFQ0wgaGFzIGFscmVhZHkgYmVlbiBlbnRl cmVkIGludG8gdGhlIG1hcC4gICovCisgICAgZGVmYXVsdDoKKyAgICAgIGdj Y191bnJlYWNoYWJsZSAoKTsKKyAgICAgIHJldHVybiBlcnJvcl9tYXJrX25v ZGU7CisgICAgfQorfQorCisvKiBDb3B5IGFsbCBsb2NhbCB2YXJpYWJsZXMu ICAqLworCitzdGF0aWMgYm9vbAorZm9yX2xvY2FsX2NiIChjb25zdCB2b2lk ICprX3YsIHZvaWQgKip2cCwgdm9pZCAqcCkKK3sKKyAgdHJlZSBrID0gKih0 cmVlICopICZrX3Y7CisgIHRyZWUgdiA9ICh0cmVlKSAqdnA7CisKKyAgaWYg KHYgPT0gZXJyb3JfbWFya19ub2RlKQorICAgICp2cCA9IGNvcHlfZGVjbF9u b19jaGFuZ2UgKGssIChjb3B5X2JvZHlfZGF0YSAqKSBwKTsKKyAgcmV0dXJu IHRydWU7Cit9CisKKy8qIENvcHkgYWxsIGxvY2FsIGRlY2xhcmF0aW9ucyBm cm9tIGEgX0NpbGtfc3Bhd25lZCBmdW5jdGlvbidzIGJvZHkuICAqLworCitz dGF0aWMgYm9vbAord3JhcHBlcl9sb2NhbF9jYiAoY29uc3Qgdm9pZCAqa192 LCB2b2lkICoqdnAsIHZvaWQgKmRhdGEpCit7CisgIGNvcHlfYm9keV9kYXRh ICppZCA9IChjb3B5X2JvZHlfZGF0YSAqKSBkYXRhOworICB0cmVlIGtleSA9 ICoodHJlZSAqKSAma192OworICB0cmVlIHZhbCA9ICh0cmVlKSAqdnA7CisK KyAgaWYgKHZhbCA9PSBlcnJvcl9tYXJrX25vZGUpCisgICAgKnZwID0gY29w eV9kZWNsX2Zvcl9jaWxrIChrZXksIGlkKTsKKworICByZXR1cm4gdHJ1ZTsK K30KKworLyogQWx0ZXIgYSB0cmVlIFNUTVQgZnJvbSBPVVRFUl9GTiB0byBm b3JtIHRoZSBib2R5IG9mIElOTkVSX0ZOLiAgKi8KKworc3RhdGljIHZvaWQK K2NpbGtfb3V0bGluZSAodHJlZSBpbm5lcl9mbiwgdHJlZSAqc3RtdF9wLCBz dHJ1Y3Qgd3JhcHBlcl9kYXRhICp3ZCkKK3sKKyAgY29uc3QgdHJlZSBvdXRl cl9mbiA9IHdkLT5jb250ZXh0OwkgICAgICAKKyAgY29uc3QgYm9vbCBuZXN0 ZWQgPSAod2QtPnR5cGUgPT0gQ0lMS19CTE9DS19GT1IpOworICBjb3B5X2Jv ZHlfZGF0YSBpZDsKKyAgYm9vbCB0aHJvd3M7CisKKyAgREVDTF9TVEFUSUNf Q0hBSU4gKG91dGVyX2ZuKSA9IDE7CisKKyAgbWVtc2V0ICgmaWQsIDAsIHNp emVvZiAoaWQpKTsKKyAgLyogQ29weSBGUk9NIHRoZSBmdW5jdGlvbiBjb250 YWluaW5nIHRoZSBzcGF3bi4uLiAgKi8KKyAgaWQuc3JjX2ZuID0gb3V0ZXJf Zm47CisKKyAgLyogLi4uVE8gdGhlIHdyYXBwZXIuICAqLworICBpZC5kc3Rf Zm4gPSBpbm5lcl9mbjsgCisgIGlkLnNyY19jZnVuID0gREVDTF9TVFJVQ1Rf RlVOQ1RJT04gKG91dGVyX2ZuKTsKKworICAvKiBUaGVyZSBzaGFsbCBiZSBu byBSRVRVUk4gaW4gc3Bhd24uICAqLworICBpZC5yZXR2YXIgPSAwOyAKKyAg aWQuZGVjbF9tYXAgPSB3ZC0+ZGVjbF9tYXA7CisgIGlkLmNvcHlfZGVjbCA9 IG5lc3RlZCA/IGNvcHlfZGVjbF9ub19jaGFuZ2UgOiBjb3B5X2RlY2xfZm9y X2NpbGs7CisgIGlkLmJsb2NrID0gREVDTF9JTklUSUFMIChpbm5lcl9mbik7 CisgIGlkLnRyYW5zZm9ybV9sYW5nX2luc2VydF9ibG9jayA9IE5VTEw7CisK KyAgaWQudHJhbnNmb3JtX25ld19jZmcgPSB0cnVlOworICBpZC50cmFuc2Zv cm1fY2FsbF9ncmFwaF9lZGdlcyA9IENCX0NHRV9NT1ZFOworICBpZC5yZW1h cF92YXJfZm9yX2NpbGsgPSB0cnVlOworICBpZC5yZWdpbXBsaWZ5ID0gdHJ1 ZTsgLyogdW51c2VkPyAqLworCisgIGluc2VydF9kZWNsX21hcCAoJmlkLCB3 ZC0+YmxvY2ssIERFQ0xfSU5JVElBTCAoaW5uZXJfZm4pKTsKKworICAvKiBX ZSBkb24ndCB3YW50IHRoZSBwcml2YXRlIHZhcmlhYmxlcyBhbnkgbW9yZS4g ICovCisgIHBvaW50ZXJfbWFwX3RyYXZlcnNlICh3ZC0+ZGVjbF9tYXAsIG5l c3RlZCA/IGZvcl9sb2NhbF9jYiA6IHdyYXBwZXJfbG9jYWxfY2IsCisJCQkm aWQpOworCisgIHdhbGtfdHJlZSAoc3RtdF9wLCBjb3B5X3RyZWVfYm9keV9y LCAmaWQsIE5VTEwpOworCisgIC8qIFNlZSBpZiB0aGlzIGZ1bmN0aW9uIGNh biB0aHJvdyBvciBjYWxscyBzb21ldGhpbmcgdGhhdCBzaG91bGQKKyAgICAg bm90IGJlIHNwYXduZWQuICBUaGUgZXhjZXB0aW9uIHBhcnQgaXMgb25seSBu ZWNlc3NhcnkgaWYKKyAgICAgZmxhZ19leGNlcHRpb25zICYmICFmbGFnX25v bl9jYWxsX2V4Y2VwdGlvbnMuICAqLworICB0aHJvd3MgPSBmYWxzZSA7Cisg ICh2b2lkKSB3YWxrX3RyZWVfd2l0aG91dF9kdXBsaWNhdGVzIChzdG10X3As IGNoZWNrX291dGxpbmVkX2NhbGxzLCAmdGhyb3dzKTsKK30KKworLyogR2Vu ZXJhdGUgdGhlIGJvZHkgb2YgYSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgYXNz aWducyB0aGUKKyAgIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBSSFMgaW50 byBSRUNFSVZFUi4gIFJFQ0VJVkVSIG11c3QKKyAgIGJlIE5VTEwgaWYgdGhp cyBpcyBub3QgYSBzcGF3biAtLSB0aGUgd3JhcHBlciB3aWxsIHJldHVybgor ICAgYSB2YWx1ZS4gIElmIHRoaXMgaXMgYSBzcGF3biwgdGhlIHdyYXBwZXIg d2lsbCByZXR1cm4gdm9pZC4gICovCisKK3N0YXRpYyB0cmVlCitidWlsZF9j aWxrX3dyYXBwZXJfYm9keSAodHJlZSBzdG10LCBzdHJ1Y3Qgd3JhcHBlcl9k YXRhICp3ZCkKK3sKKyAgY29uc3QgdHJlZSBvdXRlciA9IGN1cnJlbnRfZnVu Y3Rpb25fZGVjbDsKKyAgdHJlZSBmbmRlY2w7CisgIHRyZWUgcDsKKworICAg LyogQnVpbGQgdGhlIHR5cGUgb2YgdGhlIHdyYXBwZXIgYW5kIGl0cyBhcmd1 bWVudCBsaXN0IGZyb20gdGhlCisgICAgIHZhcmlhYmxlcyB0aGF0IGl0IHJl cXVpcmVzLiAgKi8KKyAgYnVpbGRfd3JhcHBlcl90eXBlICh3ZCk7CisKKyAg LyogRW1pdCBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgV1JBUFBFUl9QQVJNUyBp bmNvbWluZyBhbmQgYXBwbGllcyBBUkdTIAorICAgICAobW9kaWZpZWQpIHRv IHRoZSB3cmFwcGVkIGZ1bmN0aW9uLiAgUmV0dXJuIHRoZSB3cmFwcGVyIGFu ZCBtb2RpZmllZCBBUkdTIAorICAgICB0byB0aGUgY2FsbGVyIHRvIGdlbmVy YXRlIGEgZnVuY3Rpb24gY2FsbC4gICovCisgIGZuZGVjbCA9IGJ1aWxkX2Np bGtfaGVscGVyX2RlY2wgKHdkKTsKKyAgcHVzaF9zdHJ1Y3RfZnVuY3Rpb24g KGZuZGVjbCk7CisgIGlmICh3ZC0+bmVzdGVkICYmICh3ZC0+dHlwZSA9PSBD SUxLX0JMT0NLX0ZPUikpCisgICAgeworICAgICAgZ2NjX2Fzc2VydCAoVFJF RV9WQUxVRSAod2QtPmFyZ2xpc3QpID09IE5VTExfVFJFRSk7CisgICAgICBU UkVFX1ZBTFVFICh3ZC0+YXJnbGlzdCkgPSBidWlsZDIgKEZERVNDX0VYUFIs IHB0cl90eXBlX25vZGUgLAorCQkJCQkgZm5kZWNsLCBpbnRlZ2VyX29uZV9u b2RlKTsKKyAgICB9CisgIERFQ0xfQVJHVU1FTlRTIChmbmRlY2wpID0gd2Qt PnBhcm1zOworCisgIGZvciAocCA9IHdkLT5wYXJtczsgcDsgcCA9IFRSRUVf Q0hBSU4gKHApKQorICAgIERFQ0xfQ09OVEVYVCAocCkgPSBmbmRlY2w7CisK KyAgY2lsa19vdXRsaW5lIChmbmRlY2wsICZzdG10LCB3ZCk7CisgIHN0bXQg PSBmb2xkX2J1aWxkX2NsZWFudXBfcG9pbnRfZXhwciAodm9pZF90eXBlX25v ZGUsIHN0bXQpOworICBnY2NfYXNzZXJ0ICghREVDTF9TQVZFRF9UUkVFIChm bmRlY2wpKTsKKyAgbGFuZ19ob29rcy5jaWxrcGx1cy5pbnN0YWxsX2JvZHlf d2l0aF9mcmFtZV9jbGVhbnVwIChmbmRlY2wsIHN0bXQpOworICBnY2NfYXNz ZXJ0IChERUNMX1NBVkVEX1RSRUUgKGZuZGVjbCkpOworCisgIHBvcF9jZnVu X3RvIChvdXRlcik7CisKKyAgLyogUmVjb2duaXplIHRoZSBuZXcgZnVuY3Rp b24uICAqLworICBjYWxsX2dyYXBoX2FkZF9mbiAoZm5kZWNsKTsKKyAgcmV0 dXJuIGZuZGVjbDsKK30KKworLyogSW5pdGlhbGl6ZXMgdGhlIHdyYXBwZXIg ZGF0YSBzdHJ1Y3R1cmUuICAqLworCitzdGF0aWMgdm9pZAoraW5pdF93ZCAo c3RydWN0IHdyYXBwZXJfZGF0YSAqd2QsIGVudW0gY2lsa19ibG9ja190eXBl IHR5cGUpCit7CisgIHdkLT50eXBlID0gdHlwZTsKKyAgd2QtPmZudHlwZSA9 IE5VTExfVFJFRTsKKyAgd2QtPmNvbnRleHQgPSBjdXJyZW50X2Z1bmN0aW9u X2RlY2w7CisgIHdkLT5kZWNsX21hcCA9IHBvaW50ZXJfbWFwX2NyZWF0ZSAo KTsKKyAgLyogX0NpbGtfZm9yIGJvZGllcyBhcmUgYWx3YXlzIG5lc3RlZC4g IE90aGVycyBzdGFydCBvZmYgYXMgCisgICAgIG5vcm1hbCBmdW5jdGlvbnMu ICAqLworICB3ZC0+bmVzdGVkID0gKHR5cGUgPT0gQ0lMS19CTE9DS19GT1Ip OworICB3ZC0+YXJnbGlzdCA9IE5VTExfVFJFRTsKKyAgd2QtPmFyZ3R5cGVz ID0gTlVMTF9UUkVFOworICB3ZC0+YmxvY2sgPSBOVUxMX1RSRUU7Cit9CisK Ky8qIENsZWFycyB0aGUgd3JhcHBlciBkYXRhIHN0cnVjdHVyZS4gICovCisK K3N0YXRpYyB2b2lkCitmcmVlX3dkIChzdHJ1Y3Qgd3JhcHBlcl9kYXRhICp3 ZCkKK3sKKyAgcG9pbnRlcl9tYXBfZGVzdHJveSAod2QtPmRlY2xfbWFwKTsK KyAgd2QtPm5lc3RlZCA9IGZhbHNlOworICB3ZC0+YXJnbGlzdCA9IE5VTExf VFJFRTsKKyAgd2QtPmFyZ3R5cGVzID0gTlVMTF9UUkVFOworICB3ZC0+cGFy bXMgPSBOVUxMX1RSRUU7Cit9CisKKworIC8qIEdpdmVuIGEgdmFyaWFibGUg aW4gYW4gZXhwcmVzc2lvbiB0byBiZSBleHRyYWN0ZWQgaW50bworICAgYSBo ZWxwZXIgZnVuY3Rpb24sIGRlY2xhcmUgdGhlIGhlbHBlciBmdW5jdGlvbiBw YXJhbWV0ZXIKKyAgIHRvIHJlY2VpdmUgaXQuCisKKyAgIE9uIGVudHJ5IHRo ZSB2YWx1ZSBvZiB0aGUgKGtleSwgdmFsdWUpIHBhaXIgbWF5IGJlCisKKyAg ICgqLCBlcnJvcl9tYXJrX25vZGUpIC0tIFZhcmlhYmxlIGlzIHByaXZhdGUg dG8gaGVscGVyIGZ1bmN0aW9uLAorICAgZG8gbm90aGluZy4KKworICAgKHZh ciwgdmFyKSAtLSBSZWZlcmVuY2UgdG8gb3V0ZXIgc2NvcGUgKGZ1bmN0aW9u IG9yIGdsb2JhbCBzY29wZSkuCisKKyAgICh2YXIsIGludGVnZXIgMCkgLS0g Q2FwdHVyZSBieSB2YWx1ZSwgc2F2ZSBuZXdseS1kZWNsYXJlZCBQQVJNX0RF Q0wKKyAgIGZvciB2YWx1ZSBpbiB2YWx1ZSBzbG90LgorCisgICAodmFyLCBp bnRlZ2VyIDEpIC0tIENhcHR1cmUgYnkgcmVmZXJlbmNlLCBkZWNsYXJlIHBv aW50ZXIgdG8gdHlwZQorICAgYXMgbmV3IFBBUk1fREVDTCBhbmQgc3RvcmUg KHNwYXduX3N0bXQgKGluZGlyZWN0X3JlZiAocGFybSkpLgorICAgCisgICAo dmFyLCA/Pz8pIC0tIFB1cmUgb3V0cHV0IGFyZ3VtZW50LCBoYW5kbGVkIHNp bWlsYXJseSB0byBhYm92ZS4KKyovCisKK3N0YXRpYyBib29sCitkZWNsYXJl X29uZV9mcmVlX3ZhcmlhYmxlIChjb25zdCB2b2lkICp2YXIwLCB2b2lkICoq bWFwMCwKKwkJCSAgIHZvaWQgKmRhdGEgQVRUUklCVVRFX1VOVVNFRCkKK3sK KyAgY29uc3RfdHJlZSB2YXIgPSAoY29uc3RfdHJlZSkgdmFyMDsKKyAgdHJl ZSBtYXAgPSAodHJlZSkqbWFwMDsKKyAgdHJlZSB2YXJfdHlwZSA9IFRSRUVf VFlQRSAodmFyKSwgYXJnX3R5cGU7CisgIGJvb2wgYnlfcmVmZXJlbmNlOwor ICB0cmVlIHBhcm07CisKKyAgZ2NjX2Fzc2VydCAoREVDTF9QICh2YXIpKTsK KworICAvKiBJZ25vcmUgdHJ1bHkgbG9jYWwgdmFyaWFibGVzLiAgKi8KKyAg aWYgKG1hcCA9PSBlcnJvcl9tYXJrX25vZGUpCisgICAgcmV0dXJuIHRydWU7 CisgIC8qIElnbm9yZSByZWZlcmVuY2VzIHRvIHRoZSBwYXJlbnQgZnVuY3Rp b24uICAqLworICBpZiAobWFwID09IHZhcikKKyAgICByZXR1cm4gdHJ1ZTsK KworICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKG1hcCkgPT0gSU5URUdFUl9D U1QpOworCisgIC8qIEEgdmFsdWUgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSBp ZjoKKworICAgICAxLiBJdCBpcyBhZGRyZXNzYWJsZSwgc28gdGhhdCBhIGNv cHkgbWF5IG5vdCBiZSBtYWRlLgorICAgICAyLiBJdCBpcyBtb2RpZmllZCBp biB0aGUgc3Bhd25lZCBzdGF0ZW1lbnQuCisgICAgIEluIHRoZSBmdXR1cmUg dGhpcyBmdW5jdGlvbiBtYXkgd2FudCB0byBhcnJhbmdlCisgICAgIGEgd2Fy bmluZyBpZiB0aGUgc3Bhd25lZCBzdGF0ZW1lbnQgaXMgYSBsb29wIGJvZHkK KyAgICAgYmVjYXVzZSBhbiBvdXRwdXQgYXJndW1lbnQgd291bGQgaW5kaWNh dGUgYSByYWNlLgorICAgICBOb3RlOiBFYXJsaWVyIHBhc3NlcyBtdXN0IGhh dmUgbWFya2VkIHRoZSB2YXJpYWJsZSBhZGRyZXNzYWJsZS4KKyAgICAgMy4g SXQgaXMgZXhwZW5zaXZlIHRvIGNvcHkuICAqLworICBieV9yZWZlcmVuY2Ug PQorICAgIChUUkVFX0FERFJFU1NBQkxFICh2YXJfdHlwZSkKKyAgICAgLyog QXJyYXlzIG11c3QgYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZS4gIFRoaXMgaXMg cmVxdWlyZWQgZm9yIEMKKwlzZW1hbnRpY3MgLS0gYXJyYXlzIGFyZSBub3Qg Zmlyc3QgY2xhc3Mgb2JqZWN0cy4gIE90aGVyCisJYWdncmVnYXRlIHR5cGVz IGNhbiBhbmQgc2hvdWxkIGJlIHBhc3NlZCBieSByZWZlcmVuY2UgaWYKKwl0 aGV5IGFyZSBub3QgcGFzc2VkIHRvIHRoZSBzcGF3bmVkIGZ1bmN0aW9uLiAg V2UgYXJlbid0IHlldAorCWRpc3Rpbmd1aXNoaW5nIHNhZmUgdXNlcyBpbiBh cmd1bWVudCBjYWxjdWxhdGlvbiBmcm9tIHVuc2FmZQorCXVzZXMgYXMgb3V0 Z29pbmcgZnVuY3Rpb24gYXJndW1lbnRzLCBzbyB3ZSBtYWtlIGEgY29weSB0 bworCXN0YWJpbGl6ZSB0aGUgdmFsdWUuICAqLworICAgICB8fCBUUkVFX0NP REUgKHZhcl90eXBlKSA9PSBBUlJBWV9UWVBFCisgICAgIHx8ICh0cmVlKSBt YXAgPT0gaW50ZWdlcl9vbmVfbm9kZSk7CisKKyAgaWYgKGJ5X3JlZmVyZW5j ZSkKKyAgICB2YXJfdHlwZSA9IGJ1aWxkX3F1YWxpZmllZF90eXBlIChidWls ZF9wb2ludGVyX3R5cGUgKHZhcl90eXBlKSwKKwkJCQkgICAgIFRZUEVfUVVB TF9SRVNUUklDVCk7CisgIGdjY19hc3NlcnQgKCFUUkVFX0FERFJFU1NBQkxF ICh2YXJfdHlwZSkpOworCisgIC8qIE1heWJlIHByb21vdGUgdG8gaW50LiAg Ki8KKyAgaWYgKElOVEVHUkFMX1RZUEVfUCAodmFyX3R5cGUpICYmIENPTVBM RVRFX1RZUEVfUCAodmFyX3R5cGUpCisgICAgICAmJiBJTlRfQ1NUX0xUX1VO U0lHTkVEIChUWVBFX1NJWkUgKHZhcl90eXBlKSwKKwkJCSAgICAgIFRZUEVf U0laRSAoaW50ZWdlcl90eXBlX25vZGUpKSkKKyAgICBhcmdfdHlwZSA9IGlu dGVnZXJfdHlwZV9ub2RlOworICBlbHNlCisgICAgYXJnX3R5cGUgPSB2YXJf dHlwZTsKKworICBwYXJtID0gYnVpbGRfZGVjbCAoVU5LTk9XTl9MT0NBVElP TiwgUEFSTV9ERUNMLCBOVUxMX1RSRUUsIHZhcl90eXBlKTsKKyAgREVDTF9B UkdfVFlQRSAocGFybSkgPSBhcmdfdHlwZTsKKyAgREVDTF9BUlRJRklDSUFM IChwYXJtKSA9IDA7CisgIFRSRUVfUkVBRE9OTFkgKHBhcm0pID0gMTsKKyAg CisgIGlmIChieV9yZWZlcmVuY2UpCisgICAgeworICAgICAgcGFybSA9IGJ1 aWxkMSAoSU5ESVJFQ1RfUkVGLCBUUkVFX1RZUEUgKHZhcl90eXBlKSwgcGFy bSk7CisgICAgICBwYXJtID0gYnVpbGQxIChQQVJFTl9FWFBSLCB2b2lkX3R5 cGVfbm9kZSwgcGFybSk7CisgICAgfQorICAqbWFwMCA9IHBhcm07CisgIHJl dHVybiB0cnVlOworfQorIAorLyogUmV0dXJucyBhIHdyYXBwZXIgZnVuY3Rp b24gZm9yIGEgX0NpbGtfc3Bhd24uICAqLworCitzdGF0aWMgdHJlZQorYnVp bGRfY2lsa193cmFwcGVyICh0cmVlIGV4cCwgdHJlZSAqYXJnc19vdXQpCit7 CisgIHN0cnVjdCB3cmFwcGVyX2RhdGEgd2Q7CisgIHRyZWUgZm5kZWNsOwor CisgIGluaXRfd2QgKCZ3ZCwgQ0lMS19CTE9DS19TUEFXTik7CisKKyAgaWYg KFRSRUVfQ09ERSAoZXhwKSA9PSBDT05WRVJUX0VYUFIpCisgICAgZXhwID0g VFJFRV9PUEVSQU5EIChleHAsIDApOworICAKKyAgLyogU3BlY2lhbCBoYW5k bGluZyBmb3IgdG9wIGxldmVsIElOSVRfRVhQUi4gIFVzdWFsbHkgSU5JVF9F WFBSIG1lYW5zIHRoZSAKKyAgICAgdmFyaWFibGUgaXMgZGVmaW5lZCBpbiB0 aGUgc3Bhd25lZCBleHByZXNzaW9uIGFuZCBjYW4gYmUgcHJpdmF0ZSB0byB0 aGUgCisgICAgIHNwYXduIGhlbHBlci4gIEEgdG9wIGxldmVsIElOSVRfRVhQ UiBkZWZpbmVzIGEgdmFyaWFibGUgdG8gYmUgaW5pdGlhbGl6ZWQgCisgICAg IGJ5IHNwYXduIGFuZCB0aGUgdmFyaWFibGUgbXVzdCByZW1haW4gaW4gdGhl IG91dGVyIGZ1bmN0aW9uLiAqLworICBpZiAoVFJFRV9DT0RFIChleHApID09 IElOSVRfRVhQUikKKyAgICB7CisgICAgICBleHRyYWN0X2ZyZWVfdmFyaWFi bGVzIChUUkVFX09QRVJBTkQgKGV4cCwgMCksICZ3ZCwgQUREX1dSSVRFKTsK KyAgICAgIGV4dHJhY3RfZnJlZV92YXJpYWJsZXMgKFRSRUVfT1BFUkFORCAo ZXhwLCAxKSwgJndkLCBBRERfUkVBRCk7CisgICAgICAvKiBUUkVFX1RZUEUg c2hvdWxkIGJlIHZvaWQuICBCZSBkZWZlbnNpdmUuICAqLworICAgICAgaWYg KFRSRUVfVFlQRSAoZXhwKSAhPSB2b2lkX3R5cGVfbm9kZSkKKwlleHRyYWN0 X2ZyZWVfdmFyaWFibGVzIChUUkVFX1RZUEUgKGV4cCksICZ3ZCwgQUREX1JF QUQpOworICAgIH0KKyAgZWxzZQorICAgIGV4dHJhY3RfZnJlZV92YXJpYWJs ZXMgKGV4cCwgJndkLCBBRERfUkVBRCk7CisgIHBvaW50ZXJfbWFwX3RyYXZl cnNlICh3ZC5kZWNsX21hcCwgZGVjbGFyZV9vbmVfZnJlZV92YXJpYWJsZSwg JndkKTsKKyAgd2QuYmxvY2sgPSBUUkVFX0JMT0NLIChleHApOworICBpZiAo IXdkLmJsb2NrKQorICAgIHdkLmJsb2NrID0gREVDTF9JTklUSUFMIChjdXJy ZW50X2Z1bmN0aW9uX2RlY2wpOworCisgIC8qIE5vdyBmdmFycyBtYXBzIHRo ZSBvbGQgdmFyaWFibGUgdG8gaW5jb21pbmcgdmFyaWFibGUuICBVcGRhdGUK KyAgICAgdGhlIGV4cHJlc3Npb24gYW5kIGFyZ3VtZW50cyB0byByZWZlciB0 byB0aGUgbmV3IG5hbWVzLiAgKi8KKyAgZm5kZWNsID0gYnVpbGRfY2lsa193 cmFwcGVyX2JvZHkgKGV4cCwgJndkKTsKKyAgKmFyZ3Nfb3V0ID0gd2QuYXJn bGlzdDsKKyAgCisgIGZyZWVfd2QgKCZ3ZCk7CisKKyAgcmV0dXJuIGZuZGVj bDsKK30KKworLyogVHJhbnNmb3JtICpTUEFXTl9QLCBhIHNwYXduZWQgQ0FM TF9FWFBSLCB0byBnaW1wbGUuICAqU1BBV05fUCBjYW4gYmUgYQorICAgQ0FM TF9FWFBSLCBJTklUX0VYUFIgb3IgTU9ESUZZX0VYUFIuICBSZXR1cm5zIEdT X09LIGlmIGV2ZXJ5dGhpbmcgaXMgZmluZSwKKyAgIGFuZCBHU19VTkhBTkRM RUQsIG90aGVyd2lzZS4gICovCisKK2ludAorZ2ltcGxpZnlfY2lsa19zcGF3 biAodHJlZSAqc3Bhd25fcCwgZ2ltcGxlX3NlcSAqYmVmb3JlIEFUVFJJQlVU RV9VTlVTRUQsCisJCSAgICAgZ2ltcGxlX3NlcSAqYWZ0ZXIgQVRUUklCVVRF X1VOVVNFRCkKK3sKKyAgdHJlZSBleHByID0gKnNwYXduX3A7CisgIHRyZWUg ZnVuY3Rpb24sIGNhbGwxLCBjYWxsMiwgbmV3X2FyZ3M7CisgIHRyZWUgaWlf YXJncyA9IE5VTExfVFJFRTsKKyAgaW50IHRvdGFsX2FyZ3MgPSAwLCBpaSA9 IDA7CisgIHRyZWUgKmFyZ19hcnJheTsKKyAgdHJlZSBzZXRqbXBfY29uZF9l eHByID0gTlVMTF9UUkVFOworICB0cmVlIHNldGptcF9leHByLCBzcGF3bl9l eHByLCBzZXRqbXBfdmFsdWUgPSBOVUxMX1RSRUU7CisKKyAgY2Z1bi0+Y2Fs bHNfY2lsa19zcGF3biA9IDE7CisgIGNmdW4tPmlzX2NpbGtfZnVuY3Rpb24g PSAxOworCisgIGdjY19hc3NlcnQgKGZsYWdfZW5hYmxlX2NpbGtwbHVzKTsK KworICAvKiBSZW1vdmUgQ0xFQU5VUF9QT0lOVF9FWFBSIGFuZCBFWFBSX1NU TVQgZnJvbSAqc3Bhd25fcC4gICovCisgIHdoaWxlIChUUkVFX0NPREUgKGV4 cHIpID09IENMRUFOVVBfUE9JTlRfRVhQUgorCSB8fCBUUkVFX0NPREUgKGV4 cHIpID09IEVYUFJfU1RNVCkKKyAgICBleHByID0gVFJFRV9PUEVSQU5EIChl eHByLCAwKTsKKyAgCisgIG5ld19hcmdzID0gTlVMTDsKKyAgZnVuY3Rpb24g PSBidWlsZF9jaWxrX3dyYXBwZXIgKGV4cHIsICZuZXdfYXJncyk7CisKKyAg LyogVGhpcyBzaG91bGQgZ2l2ZSB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMu ICAqLworICB0b3RhbF9hcmdzID0gbGlzdF9sZW5ndGggKG5ld19hcmdzKTsK KyAgYXJnX2FycmF5ID0gWE5FV1ZFQyAodHJlZSwgdG90YWxfYXJncyk7CisK KyAgaWlfYXJncyA9IG5ld19hcmdzOworICBmb3IgKGlpID0gMDsgaWkgPCB0 b3RhbF9hcmdzOyBpaSsrKQorICAgIHsKKyAgICAgIGFyZ19hcnJheVtpaV0g PSBUUkVFX1ZBTFVFIChpaV9hcmdzKTsKKyAgICAgIGlpX2FyZ3MgPSBUUkVF X0NIQUlOIChpaV9hcmdzKTsKKyAgICB9CisgIAorICBUUkVFX1VTRUQgKGZ1 bmN0aW9uKSA9IDE7CisgIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiAoZnVu Y3Rpb24sIDAsIDApOworCisgIGNhbGwxID0gY2lsa19jYWxsX3NldGptcCAo Y2Z1bi0+Y2lsa19mcmFtZV9kZWNsKTsKKworICBpZiAoKmFyZ19hcnJheSA9 PSBOVUxMX1RSRUUpCisgICAgY2FsbDIgPSBidWlsZF9jYWxsX2V4cHIgKGZ1 bmN0aW9uLCAwKTsKKyAgZWxzZSAKKyAgICBjYWxsMiA9IGJ1aWxkX2NhbGxf ZXhwcl9sb2NfYXJyYXkgKEVYUFJfTE9DQVRJT04gKCpzcGF3bl9wKSwgZnVu Y3Rpb24sIAorCQkJCQkgdG90YWxfYXJncywgYXJnX2FycmF5KTsKKyAgKnNw YXduX3AgPSBhbGxvY19zdG10X2xpc3QgKCk7CisgIGdjY19hc3NlcnQgKGNm dW4tPmNpbGtfZnJhbWVfZGVjbCAhPSBOVUxMX1RSRUUpOworCisgIHRyZWUg ZnJhbWVfcHRyID0KKyAgICBidWlsZDEgKEFERFJfRVhQUiwgYnVpbGRfcG9p bnRlcl90eXBlIChUUkVFX1RZUEUgKGNmdW4tPmNpbGtfZnJhbWVfZGVjbCkp LAorCSAgICBjZnVuLT5jaWxrX2ZyYW1lX2RlY2wpOworICB0cmVlIHNhdmVf ZnAgPSBidWlsZF9jYWxsX2V4cHIgKGNpbGtfc2F2ZV9mcF9mbmRlY2wsIDEs IGZyYW1lX3B0cik7CisgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAoc2F2 ZV9mcCwgc3Bhd25fcCk7CQkgIAorICBzZXRqbXBfdmFsdWUgPSBjcmVhdGVf dG1wX3ZhciAoVFJFRV9UWVBFIChjYWxsMSksIE5VTEwpOworICBzZXRqbXBf ZXhwciA9IGZvbGRfYnVpbGQyIChNT0RJRllfRVhQUiwgdm9pZF90eXBlX25v ZGUsIHNldGptcF92YWx1ZSwgY2FsbDEpOworCisgIGFwcGVuZF90b19zdGF0 ZW1lbnRfbGlzdF9mb3JjZSAoc2V0am1wX2V4cHIsIHNwYXduX3ApOworICAK KyAgc2V0am1wX2NvbmRfZXhwciA9IGZvbGRfYnVpbGQyIChFUV9FWFBSLCBU UkVFX1RZUEUgKGNhbGwxKSwgc2V0am1wX3ZhbHVlLAorCQkJCSAgYnVpbGRf aW50X2NzdCAoVFJFRV9UWVBFIChjYWxsMSksIDApKTsKKyAgc3Bhd25fZXhw ciA9IGZvbGRfYnVpbGQzIChDT05EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBz ZXRqbXBfY29uZF9leHByLAorCQkJICAgIGNhbGwyLCBidWlsZF9lbXB0eV9z dG10IChFWFBSX0xPQ0FUSU9OIChjYWxsMSkpKTsKKyAgYXBwZW5kX3RvX3N0 YXRlbWVudF9saXN0IChzcGF3bl9leHByLCBzcGF3bl9wKTsKKworICByZXR1 cm4gR1NfT0s7Cit9CisKKy8qIE1ha2UgdGhlIGZyYW1lcyBuZWNlc3Nhcnkg Zm9yIGEgc3Bhd24gY2FsbC4gICovCisKK3N0YXRpYyB0cmVlCittYWtlX2Np bGtfZnJhbWUgKHRyZWUgZm4pCit7CisgIHN0cnVjdCBmdW5jdGlvbiAqZiA9 IERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChmbik7CisgIHRyZWUgZGVjbDsKKwor ICBpZiAoZi0+Y2lsa19mcmFtZV9kZWNsKQorICAgIHJldHVybiBmLT5jaWxr X2ZyYW1lX2RlY2w7CisKKyAgZGVjbCA9IGJ1aWxkX2RlY2wgKEVYUFJfTE9D QVRJT04gKGZuKSwgVkFSX0RFQ0wsIE5VTExfVFJFRSwgCisJCSAgICAgY2ls a19mcmFtZV90eXBlX2RlY2wpOworICBERUNMX0NPTlRFWFQgKGRlY2wpID0g Zm47CisgIERFQ0xfU0VFTl9JTl9CSU5EX0VYUFJfUCAoZGVjbCkgPSAxOwor ICBmLT5jaWxrX2ZyYW1lX2RlY2wgPSBkZWNsOworICByZXR1cm4gZGVjbDsK K30KKworLyogQ3JlYXRlcyB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBz cGF3biBoZWxwZXIgYW5kIHBhcmVudC4gICovCisKKy8qIEluc2VydHMgImNs ZWFudXAiIGZ1bmN0aW9ucyBhZnRlciB0aGUgZnVuY3Rpb24tYm9keSBvZiBG TkRFQ0wuICBGTkRFQ0wgaXMgYSAKKyAgIHNwYXduLWhlbHBlciBhbmQgQk9E WSBpcyB0aGUgbmV3bHkgY3JlYXRlZCBib2R5IGZvciBGTkRFQ0wuICAqLwor Cit2b2lkCitjX2NpbGtfaW5zdGFsbF9ib2R5X3dfZnJhbWVfY2xlYW51cCAo dHJlZSBmbmRlY2wsIHRyZWUgYm9keSkKK3sKKyAgdHJlZSBsaXN0ID0gYWxs b2Nfc3RtdF9saXN0ICgpOworICB0cmVlIGZyYW1lID0gbWFrZV9jaWxrX2Zy YW1lIChmbmRlY2wpOworICB0cmVlIGR0b3IgPSBidWlsZF9jaWxrX2Z1bmN0 aW9uX2V4aXQgKGZyYW1lLCBmYWxzZSwgZmFsc2UpOworICBhZGRfbG9jYWxf ZGVjbCAoY2Z1biwgZnJhbWUpOworICAKKyAgREVDTF9TQVZFRF9UUkVFIChm bmRlY2wpID0gbGlzdDsKKyAgdHJlZSBib2R5X2xpc3QgPSBhbGxvY19zdG10 X2xpc3QgKCk7CisgIHRyZWUgZnJhbWVfcHRyID0gYnVpbGQxIChBRERSX0VY UFIsIGJ1aWxkX3BvaW50ZXJfdHlwZSAoVFJFRV9UWVBFIChmcmFtZSkpLCAK KwkJCSAgIGZyYW1lKTsgCisgIHRyZWUgZW50ZXJfZnJhbWUgPSBidWlsZF9j YWxsX2V4cHIgKGNpbGtfZW50ZXJfZmFzdF9mbmRlY2wsIDEsIGZyYW1lX3B0 cik7IAorICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3QgKGVudGVyX2ZyYW1l LCAmYm9keV9saXN0KTsKKyAgCisgIHRyZWUgcGFyZW50ID0gY2lsa19hcnJv dyAoZnJhbWVfcHRyLCBDSUxLX1RJX0ZSQU1FX1BBUkVOVCwgMCk7CisgIHRy ZWUgd29ya2VyID0gY2lsa19hcnJvdyAoZnJhbWVfcHRyLCBDSUxLX1RJX0ZS QU1FX1dPUktFUiwgMCk7CisKKyAgdHJlZSBwZWRpZ3JlZSA9IGNpbGtfYXJy b3cgKGZyYW1lX3B0ciwgQ0lMS19USV9GUkFNRV9QRURJR1JFRSwgMCk7Cisg IHRyZWUgcGVkaWdyZWVfcmFuayA9IGNpbGtfZG90IChwZWRpZ3JlZSwgQ0lM S19USV9QRURJR1JFRV9SQU5LLCAwKTsKKyAgdHJlZSBwYXJlbnRfcGVkaWdy ZWUgPSBjaWxrX2RvdCAocGVkaWdyZWUsIENJTEtfVElfUEVESUdSRUVfUEFS RU5ULCAwKTsKKyAgdHJlZSBwZWRpZ3JlZV9wYXJlbnQgPSBjaWxrX2Fycm93 IChwYXJlbnQsIENJTEtfVElfRlJBTUVfUEVESUdSRUUsIDApOworICB0cmVl IHBlZGlncmVlX3BhcmVudF9yYW5rID0gY2lsa19kb3QgKHBlZGlncmVlX3Bh cmVudCwgCisJCQkJCUNJTEtfVElfUEVESUdSRUVfUkFOSywgMCk7CisgIHRy ZWUgcGVkaWdyZWVfcGFyZW50X3BhcmVudCA9IGNpbGtfZG90IChwZWRpZ3Jl ZV9wYXJlbnQsIAorCQkJCSAgICAgQ0lMS19USV9QRURJR1JFRV9QQVJFTlQs IDApOworICB0cmVlIHdvcmtlcl9wZWRpZ3JlZSA9IGNpbGtfYXJyb3cgKHdv cmtlciwgQ0lMS19USV9XT1JLRVJfUEVESUdSRUUsIDEpOworICB0cmVlIHdf cGVkaWdyZWVfcmFuayA9IGNpbGtfZG90ICh3b3JrZXJfcGVkaWdyZWUsIENJ TEtfVElfUEVESUdSRUVfUkFOSywgMCk7CisgIHRyZWUgd19wZWRpZ3JlZV9w YXJlbnQgPSBjaWxrX2RvdCAod29ya2VyX3BlZGlncmVlLCAKKwkJCQkgICAg IENJTEtfVElfUEVESUdSRUVfUEFSRU5ULCAwKTsKKworICAvKiBzZi5wZWRp Z3JlZS5yYW5rID0gd29ya2VyLT5wZWRpZ3JlZS5yYW5rLiAgKi8KKyAgdHJl ZSBleHAxID0gYnVpbGQyIChNT0RJRllfRVhQUiwgdm9pZF90eXBlX25vZGUs IHBlZGlncmVlX3JhbmssCisJCSAgICAgd19wZWRpZ3JlZV9yYW5rKTsKKyAg YXBwZW5kX3RvX3N0YXRlbWVudF9saXN0IChleHAxLCAmYm9keV9saXN0KTsK KworICAvKiBzZi5wZWRpZ3JlZS5wYXJlbnQgPSB3b3JrZXItPnBlZGlncmVl LnBhcmVudC4gICovCisgIGV4cDEgPSBidWlsZDIgKE1PRElGWV9FWFBSLCB2 b2lkX3R5cGVfbm9kZSwgcGFyZW50X3BlZGlncmVlLAorCQkgd19wZWRpZ3Jl ZV9wYXJlbnQpOworICBhcHBlbmRfdG9fc3RhdGVtZW50X2xpc3QgKGV4cDEs ICZib2R5X2xpc3QpOworCisgIC8qIHNmLmNhbGxfcGFyZW50LT5wZWRpZ3Jl ZS5yYW5rID0gd29ya2VyLT5wZWRpZ3JlZS5yYW5rLiAgKi8KKyAgZXhwMSA9 IGJ1aWxkMiAoTU9ESUZZX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBwZWRpZ3Jl ZV9wYXJlbnRfcmFuaywKKwkJIHdfcGVkaWdyZWVfcmFuayk7CisgIGFwcGVu ZF90b19zdGF0ZW1lbnRfbGlzdCAoZXhwMSwgJmJvZHlfbGlzdCk7CisKKyAg Lyogc2YuY2FsbF9wYXJlbnQtPnBlZGlncmVlLnBhcmVudCA9IHdvcmtlci0+ cGVkaWdyZWUucGFyZW50LiAgKi8KKyAgZXhwMSA9IGJ1aWxkMiAoTU9ESUZZ X0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBwZWRpZ3JlZV9wYXJlbnRfcGFyZW50 LAorCQkgd19wZWRpZ3JlZV9wYXJlbnQpOworICBhcHBlbmRfdG9fc3RhdGVt ZW50X2xpc3QgKGV4cDEsICZib2R5X2xpc3QpOworCisgIC8qIHNmLT53b3Jr ZXIucGVkaWdyZWUucmFuayA9IDAuICAqLworICBleHAxID0gYnVpbGQyIChN T0RJRllfRVhQUiwgdm9pZF90eXBlX25vZGUsIHdfcGVkaWdyZWVfcmFuaywg CisJCSBidWlsZF96ZXJvX2NzdCAodWludDY0X3R5cGVfbm9kZSkpOworICBh cHBlbmRfdG9fc3RhdGVtZW50X2xpc3QgKGV4cDEsICZib2R5X2xpc3QpOwor CisgIC8qIHNmLT5wZWRpZ3JlZS5wYXJlbnQgPSAmc2YtPnBlZGlncmVlLiAg Ki8KKyAgZXhwMSA9IGJ1aWxkMiAoTU9ESUZZX0VYUFIsIHZvaWRfdHlwZV9u b2RlLCB3X3BlZGlncmVlX3BhcmVudCwKKwkJIGJ1aWxkMSAoQUREUl9FWFBS LAorCQkJIGJ1aWxkX3BvaW50ZXJfdHlwZSAoY2lsa19wZWRpZ3JlZV90eXBl X2RlY2wpLAorCQkJIHBlZGlncmVlKSk7CisgIGFwcGVuZF90b19zdGF0ZW1l bnRfbGlzdCAoZXhwMSwgJmJvZHlfbGlzdCk7CisKKyAgdHJlZSBkZXRhY2hf ZXhwciA9IGJ1aWxkX2NhbGxfZXhwciAoY2lsa19kZXRhY2hfZm5kZWNsLCAx LCBmcmFtZV9wdHIpOyAKKyAgYXBwZW5kX3RvX3N0YXRlbWVudF9saXN0IChk ZXRhY2hfZXhwciwgJmJvZHlfbGlzdCk7CisgIGFwcGVuZF90b19zdGF0ZW1l bnRfbGlzdCAoYm9keSwgJmJvZHlfbGlzdCk7CisgIGFwcGVuZF90b19zdGF0 ZW1lbnRfbGlzdCAoYnVpbGRfc3RtdCAoRVhQUl9MT0NBVElPTiAoYm9keSks IFRSWV9GSU5BTExZX0VYUFIsCisJCQkJICAgICAgIAlib2R5X2xpc3QsIGR0 b3IpLCAmbGlzdCk7Cit9CisKKy8qIEFkZCBhIG5ldyB2YXJpYWJsZSwgVkFS IHRvIGEgdmFyaWFibGUgbGlzdCBpbiBXRC0+REVDTF9NQVAuICBIT1cgaW5k aWNhdGVzCisgICB3aGV0aGVyIHRoZSB2YXJpYWJsZSBpcyBwcmV2aW91c2x5 IGRlZmluZWQsIGN1cnJlbnRseSBkZWZpbmVkLCBvciBhIHZhcmlhYmxlIAor ICAgdGhhdCBpcyBiZWluZyB3cml0dGVuIHRvLiAgKi8KKworc3RhdGljIHZv aWQKK2FkZF92YXJpYWJsZSAoc3RydWN0IHdyYXBwZXJfZGF0YSAqd2QsIHRy ZWUgdmFyLCBlbnVtIGFkZF92YXJpYWJsZV90eXBlIGhvdykKK3sKKyAgdm9p ZCAqKnZhbHA7CisgIAorICB2YWxwID0gcG9pbnRlcl9tYXBfY29udGFpbnMg KHdkLT5kZWNsX21hcCwgKHZvaWQgKikgdmFyKTsKKyAgaWYgKHZhbHApCisg ICAgeworICAgICAgdHJlZSB2YWwgPSAodHJlZSkgKnZhbHA7CisgICAgICAv KiBJZiB0aGUgdmFyaWFibGUgaXMgbG9jYWwsIGRvIG5vdGhpbmcuICAqLwor ICAgICAgaWYgKHZhbCA9PSBlcnJvcl9tYXJrX25vZGUpCisJcmV0dXJuOwor ICAgICAgLyogSWYgdGhlIHZhcmlhYmxlIHdhcyBlbnRlcmVkIHdpdGggaXRz ZWxmIGFzIHZhbHVlLAorCSBtZWFuaW5nIGl0IGJlbG9uZ3MgdG8gYW4gb3V0 ZXIgc2NvcGUsIGRvIG5vdCBhbHRlcgorCSB0aGUgdmFsdWUuICAqLworICAg ICAgaWYgKHZhbCA9PSB2YXIpIAorCXJldHVybjsKKyAgICAgIC8qIEEgc3Rh dGVtZW50IGV4cHJlc3Npb24gbWF5IGNhdXNlIGEgdmFyaWFibGUgdG8gYmUK KwkgYm91bmQgdHdpY2UsIG9uY2UgaW4gQklORF9FWFBSIGFuZCBhZ2FpbiBp biBhCisJIERFQ0xfRVhQUi4gIFRoYXQgY2FzZSBjYXVzZWQgYSByZXR1cm4g aW4gdGhlIAorCSB0ZXN0IGFib3ZlLiAgQW55IG90aGVyIGR1cGxpY2F0ZSBk ZWZpbml0aW9uIGlzCisJIGFuIGVycm9yLiAgKi8KKyAgICAgIGdjY19hc3Nl cnQgKGhvdyAhPSBBRERfQklORCk7CisgICAgICBpZiAoaG93ICE9IEFERF9X UklURSkKKwlyZXR1cm47CisgICAgICAvKiBUaGlzIHZhcmlhYmxlIG1pZ2h0 IGhhdmUgYmVlbiBlbnRlcmVkIGFzIHJlYWQgYnV0IGlzIG5vdyB3cml0dGVu LiAgKi8KKyAgICAgICp2YWxwID0gKHZvaWQgKikgdmFyOworICAgICAgd2Qt Pm5lc3RlZCA9IHRydWU7CisgICAgICByZXR1cm47CisgICAgfQorICBlbHNl CisgICAgeworICAgICAgdHJlZSB2YWwgPSBOVUxMX1RSRUU7CisKKyAgICAg IC8qIE5lc3RlZCBmdW5jdGlvbiByZXdyaXRpbmcgc2lsZW50bHkgZGlzY2Fy ZHMgaGFyZCByZWdpc3RlcgorCSBhc3NpZ25tZW50cyBmb3IgZnVuY3Rpb24g c2NvcGUgdmFyaWFibGVzLCBhbmQgdGhleSB3b3VsZG4ndAorCSB3b3JrIGFu eXdheS4gIFdhcm4gaGVyZS4gIFRoaXMgbWlzc2VzIG9uZSBjYXNlOiBpZiB0 aGUKKwkgcmVnaXN0ZXIgdmFyaWFibGUgaXMgdXNlZCBhcyB0aGUgbG9vcCBi b3VuZCBvciBpbmNyZW1lbnQgaXQKKwkgaGFzIGFscmVhZHkgYmVlbiBhZGRl ZCB0byB0aGUgbWFwLiAgKi8KKyAgICAgIGlmICgoaG93ICE9IEFERF9CSU5E KSAmJiAoVFJFRV9DT0RFICh2YXIpID09IFZBUl9ERUNMKQorCSAgJiYgIURF Q0xfRVhURVJOQUwgKHZhcikgJiYgREVDTF9IQVJEX1JFR0lTVEVSICh2YXIp KQorCXdhcm5pbmcgKDAsICJyZWdpc3RlciBhc3NpZ25tZW50IGlnbm9yZWQg Zm9yICVxRCB1c2VkIGluIENpbGsgYmxvY2siLAorCQkgdmFyKTsKKworICAg ICAgc3dpdGNoIChob3cpCisJeworCSAgLyogQUREX0JJTkQgbWVhbnMgYWx3 YXlzIG1ha2UgYSBmcmVzaCBuZXcgdmFyaWFibGUuICAqLworCWNhc2UgQURE X0JJTkQ6CisJICB2YWwgPSBlcnJvcl9tYXJrX25vZGU7CisJICBicmVhazsK KwkgIC8qIEFERF9SRUFEIG1lYW5zCisJICAgICAxLiBGb3IgY2lsa19mb3Is IHJlZmVyIHRvIHRoZSBvdXRlciBzY29wZSBkZWZpbml0aW9uIGFzLWlzCisJ ICAgICAyLiBGb3IgYSBzcGF3bmVkIGJsb2NrLCB0YWtlIGEgc2NhbGFyIGlu IGFuIHJndW1lbnQKKwkgICAgIGFuZCBvdGhlcndpc2UgcmVmZXIgdG8gdGhl IG91dGVyIHNjb3BlIGRlZmluaXRpb24gYXMtaXMuCisJICAgICAzLiBGb3Ig YSBzcGF3bmVkIGNhbGwsIHRha2UgYSBzY2FsYXIgaW4gYW4gYXJndW1lbnQu ICAqLworCWNhc2UgQUREX1JFQUQ6CisJICBzd2l0Y2ggKHdkLT50eXBlKQor CSAgICB7CisJICAgIGNhc2UgQ0lMS19CTE9DS19GT1I6CisJICAgICAgdmFs ID0gdmFyOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIENJTEtfQkxPQ0tf U1BBV046CisJICAgICAgaWYgKFRSRUVfQUREUkVTU0FCTEUgKHZhcikpCisJ CXsKKwkJICB2YWwgPSB2YXI7CisJCSAgd2QtPm5lc3RlZCA9IHRydWU7CisJ CSAgYnJlYWs7CisJCX0KKwkgICAgICB2YWwgPSBpbnRlZ2VyX3plcm9fbm9k ZTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSBB RERfV1JJVEU6CisJICBzd2l0Y2ggKHdkLT50eXBlKQorCSAgICB7CisJICAg IGNhc2UgQ0lMS19CTE9DS19GT1I6CisJICAgICAgdmFsID0gdmFyOworCSAg ICAgIHdkLT5uZXN0ZWQgPSB0cnVlOworCSAgICAgIGJyZWFrOworCSAgICBj YXNlIENJTEtfQkxPQ0tfU1BBV046CisJICAgICAgaWYgKFRSRUVfQUREUkVT U0FCTEUgKHZhcikpCisJCXZhbCA9IGludGVnZXJfb25lX25vZGU7CisJICAg ICAgZWxzZQorCQl7CisJCSAgdmFsID0gdmFyOworCQkgIHdkLT5uZXN0ZWQg PSB0cnVlOworCQl9CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAg ICAqcG9pbnRlcl9tYXBfaW5zZXJ0ICh3ZC0+ZGVjbF9tYXAsICh2b2lkICop IHZhcikgPSB2YWw7CisgICAgfQorfQorCisvKiBGaW5kIHRoZSB2YXJpYWJs ZXMgcmVmZXJlbmNlZCBpbiBhbiBleHByZXNzaW9uIFQuICBUaGlzIGRvZXMg bm90IGF2b2lkIAorICAgZHVwbGljYXRlcyBiZWNhdXNlIGEgdmFyaWFibGUg bWF5IGJlIHJlYWQgaW4gb25lIGNvbnRleHQgYW5kIHdyaXR0ZW4gaW4gCisg ICBhbm90aGVyLiAgSE9XIGRlc2NyaWJlcyB0aGUgY29udGV4dCBpbiB3aGlj aCB0aGUgcmVmZXJlbmNlIGlzIHNlZW4uICBJZiAKKyAgIE5FU1RFRCBpcyB0 cnVlIGEgbmVzdGVkIGZ1bmN0aW9uIGlzIGJlaW5nIGdlbmVyYXRlZCBhbmQg dmFyaWFibGVzIGluIHRoZSAKKyAgIG9yaWdpbmFsIGNvbnRleHQgc2hvdWxk IG5vdCBiZSByZW1hcHBlZC4gICovCisKK3N0YXRpYyB2b2lkCitleHRyYWN0 X2ZyZWVfdmFyaWFibGVzICh0cmVlIHQsIHN0cnVjdCB3cmFwcGVyX2RhdGEg KndkLAorCQkJZW51bSBhZGRfdmFyaWFibGVfdHlwZSBob3cpCit7CisjZGVm aW5lIFNVQlRSRUUoRVhQKSAgZXh0cmFjdF9mcmVlX3ZhcmlhYmxlcyAoRVhQ LCB3ZCwgQUREX1JFQUQpCisjZGVmaW5lIE1PRElGSUVEKEVYUCkgZXh0cmFj dF9mcmVlX3ZhcmlhYmxlcyAoRVhQLCB3ZCwgQUREX1dSSVRFKQorI2RlZmlu ZSBJTklUSUFMSVpFRChFWFApIGV4dHJhY3RfZnJlZV92YXJpYWJsZXMgKEVY UCwgd2QsIEFERF9CSU5EKQorICAKKyAgaWYgKHQgPT0gTlVMTF9UUkVFKQor ICAgIHJldHVybjsKKworICBlbnVtIHRyZWVfY29kZSBjb2RlID0gVFJFRV9D T0RFICh0KTsKKyAgYm9vbCBpc19leHByID0gSVNfRVhQUl9DT0RFX0NMQVNT IChUUkVFX0NPREVfQ0xBU1MgKGNvZGUpKTsKKworICBpZiAoaXNfZXhwcikK KyAgICBTVUJUUkVFIChUUkVFX1RZUEUgKHQpKTsKKworICBzd2l0Y2ggKGNv ZGUpCisgICAgeworICAgIGNhc2UgRVJST1JfTUFSSzoKKyAgICBjYXNlIElE RU5USUZJRVJfTk9ERToKKyAgICBjYXNlIElOVEVHRVJfQ1NUOgorICAgIGNh c2UgUkVBTF9DU1Q6CisgICAgY2FzZSBGSVhFRF9DU1Q6CisgICAgY2FzZSBT VFJJTkdfQ1NUOgorICAgIGNhc2UgQkxPQ0s6CisgICAgY2FzZSBQTEFDRUhP TERFUl9FWFBSOgorICAgIGNhc2UgRklFTERfREVDTDoKKyAgICBjYXNlIFZP SURfVFlQRToKKyAgICBjYXNlIFJFQUxfVFlQRToKKyAgICAgIC8qIFRoZXNl IGRvIG5vdCBjb250YWluIHZhcmlhYmxlIHJlZmVyZW5jZXMuICAqLworICAg ICAgcmV0dXJuOworCisgICAgY2FzZSBTU0FfTkFNRToKKyAgICAgIC8qIEN1 cnJlbnRseSB3ZSBkb24ndCBzZWUgU1NBX05BTUUuICAqLworICAgICAgZXh0 cmFjdF9mcmVlX3ZhcmlhYmxlcyAoU1NBX05BTUVfVkFSICh0KSwgd2QsIGhv dyk7CisgICAgICByZXR1cm47CisKKyAgICBjYXNlIExBQkVMX0RFQ0w6Cisg ICAgICAvKiBUaGlzIG1pZ2h0IGJlIGEgcmVmZXJlbmNlIHRvIGEgbGFiZWwg b3V0c2lkZSB0aGUgQ2lsayBibG9jaywKKwkgd2hpY2ggaXMgYW4gZXJyb3Is IG9yIGEgcmVmZXJlbmNlIHRvIGEgbGFiZWwgaW4gdGhlIENpbGsgYmxvY2sK KwkgdGhhdCB3ZSBoYXZlbid0IHNlZW4geWV0LiAgV2UgY2FuJ3QgdGVsbC4g IElnbm9yZSBpdC4gIEFuCisJIGludmFsaWQgdXNlIHdpbGwgY2F1c2UgYW4g ZXJyb3IgbGF0ZXIgaW4gY29weV9kZWNsX2Zvcl9jaWxrLiAgKi8KKyAgICAg IHJldHVybjsKKworICAgIGNhc2UgUkVTVUxUX0RFQ0w6CisgICAgICBpZiAo d2QtPnR5cGUgIT0gQ0lMS19CTE9DS19TUEFXTikKKwlUUkVFX0FERFJFU1NB QkxFICh0KSA9IDE7CisgICAgY2FzZSBWQVJfREVDTDoKKyAgICBjYXNlIFBB Uk1fREVDTDoKKyAgICAgIGlmICghVFJFRV9TVEFUSUMgKHQpICYmICFERUNM X0VYVEVSTkFMICh0KSkKKwlhZGRfdmFyaWFibGUgKHdkLCB0LCBob3cpOwor ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBOT05fTFZBTFVFX0VYUFI6Cisg ICAgY2FzZSBDT05WRVJUX0VYUFI6CisgICAgY2FzZSBOT1BfRVhQUjoKKyAg ICAgIFNVQlRSRUUgKFRSRUVfT1BFUkFORCAodCwgMCkpOworICAgICAgcmV0 dXJuOworCisgICAgY2FzZSBJTklUX0VYUFI6CisgICAgICBJTklUSUFMSVpF RCAoVFJFRV9PUEVSQU5EICh0LCAwKSk7CisgICAgICBTVUJUUkVFIChUUkVF X09QRVJBTkQgKHQsIDEpKTsKKyAgICAgIHJldHVybjsKKworICAgIGNhc2Ug TU9ESUZZX0VYUFI6CisgICAgY2FzZSBQUkVERUNSRU1FTlRfRVhQUjoKKyAg ICBjYXNlIFBSRUlOQ1JFTUVOVF9FWFBSOgorICAgIGNhc2UgUE9TVERFQ1JF TUVOVF9FWFBSOgorICAgIGNhc2UgUE9TVElOQ1JFTUVOVF9FWFBSOgorICAg ICAgLyogVGhlc2Ugd3JpdGUgdGhlaXIgcmVzdWx0LiAgKi8KKyAgICAgIE1P RElGSUVEIChUUkVFX09QRVJBTkQgKHQsIDApKTsKKyAgICAgIFNVQlRSRUUg KFRSRUVfT1BFUkFORCAodCwgMSkpOworICAgICAgcmV0dXJuOworCisgICAg Y2FzZSBBRERSX0VYUFI6CisgICAgICAvKiBUaGlzIG1pZ2h0IG1vZGlmeSBp dHMgYXJndW1lbnQsIGFuZCB0aGUgdmFsdWUgbmVlZHMgdG8gYmUKKwkgcGFz c2VkIGJ5IHJlZmVyZW5jZSBpbiBhbnkgY2FzZSB0byBwcmVzZXJ2ZSBpZGVu dGl0eSBhbmQKKwkgdHlwZSBpZiBpcyBhIHByb21vdGluZyB0eXBlLiAgSW4g dGhlIGNhc2Ugb2YgYSBuZXN0ZWQgbG9vcAorCSBqdXN0IG5vdGljZSB0aGF0 IHdlIHRvdWNoIHRoZSB2YXJpYWJsZS4gIEl0IHdpbGwgYWxyZWFkeQorCSBi ZSBhZGRyZXNzYWJsZSwgYW5kIG1hcmtpbmcgaXQgbW9kaWZpZWQgd2lsbCBj YXVzZSBhIHNwdXJpb3VzCisJIHdhcm5pbmcgYWJvdXQgd3JpdGluZyB0aGUg Y29udHJvbCB2YXJpYWJsZS4gICovCisgICAgICBpZiAod2QtPnR5cGUgIT0g Q0lMS19CTE9DS19TUEFXTikKKwlTVUJUUkVFIChUUkVFX09QRVJBTkQgKHQs IDApKTsKKyAgICAgIGVsc2UKKwlNT0RJRklFRCAoVFJFRV9PUEVSQU5EICh0 LCAwKSk7CisgICAgICByZXR1cm47CisKKyAgICBjYXNlIEFSUkFZX1JFRjoK KyAgICAgIC8qIFRyZWF0aW5nIEFSUkFZX1JFRiBhbmQgQklUX0ZJRUxEX1JF RiBpZGVudGljYWxseSBtYXkKKwkgbWFyayB0aGUgYXJyYXkgYXMgd3JpdHRl biBidXQgdGhlIGVuZCByZXN1bHQgaXMgY29ycmVjdAorCSBiZWNhdXNlIHRo ZSBhcnJheSBpcyBwYXNzZWQgYnkgcG9pbnRlciBhbnl3YXkuICAqLworICAg IGNhc2UgQklUX0ZJRUxEX1JFRjoKKyAgICAgIC8qIFByb3BhZ2F0ZSB0aGUg YWNjZXNzIHR5cGUgdG8gdGhlIG9iamVjdCBwYXJ0IG9mIHdoaWNoCisJIGlz IGJlaW5nIGFjY2Vzc2VkIGhlcmUuICBBcyBmb3IgQUREUl9FWFBSLCBkb24n dCBkbyB0aGlzCisJIGluIGEgbmVzdGVkIGxvb3AsIHVubGVzcyB0aGUgYWNj ZXNzIGlzIHRvIGEgZml4ZWQgaW5kZXguICAqLworICAgICAgaWYgKHdkLT50 eXBlICE9IENJTEtfQkxPQ0tfRk9SIHx8IFRSRUVfQ09OU1RBTlQgKFRSRUVf T1BFUkFORCAodCwgMSkpKQorCWV4dHJhY3RfZnJlZV92YXJpYWJsZXMgKFRS RUVfT1BFUkFORCAodCwgMCksIHdkLCBob3cpOworICAgICAgZWxzZQorCVNV QlRSRUUgKFRSRUVfT1BFUkFORCAodCwgMCkpOworICAgICAgU1VCVFJFRSAo VFJFRV9PUEVSQU5EICh0LCAxKSk7CisgICAgICBTVUJUUkVFIChUUkVFX09Q RVJBTkQgKHQsIDIpKTsKKyAgICAgIHJldHVybjsKKworICAgIGNhc2UgVFJF RV9MSVNUOgorICAgICAgU1VCVFJFRSAoVFJFRV9QVVJQT1NFICh0KSk7Cisg ICAgICBTVUJUUkVFIChUUkVFX1ZBTFVFICh0KSk7CisgICAgICBTVUJUUkVF IChUUkVFX0NIQUlOICh0KSk7CisgICAgICByZXR1cm47CisKKyAgICBjYXNl IFRSRUVfVkVDOgorICAgICAgeworCWludCBsZW4gPSBUUkVFX1ZFQ19MRU5H VEggKHQpOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykK KwkgIFNVQlRSRUUgKFRSRUVfVkVDX0VMVCAodCwgaSkpOworCXJldHVybjsK KyAgICAgIH0KKworICAgIGNhc2UgVkVDVE9SX0NTVDoKKyAgICAgIHsKKwl1 bnNpZ25lZCBpaSA9IDA7CisJZm9yIChpaSA9IDA7IGlpIDwgVkVDVE9SX0NT VF9ORUxUUyAodCk7IGlpKyspCisJICBTVUJUUkVFIChWRUNUT1JfQ1NUX0VM VCAodCwgaWkpKTsgCisJYnJlYWs7CisgICAgICB9CisKKyAgICBjYXNlIENP TVBMRVhfQ1NUOgorICAgICAgU1VCVFJFRSAoVFJFRV9SRUFMUEFSVCAodCkp OworICAgICAgU1VCVFJFRSAoVFJFRV9JTUFHUEFSVCAodCkpOworICAgICAg cmV0dXJuOworCisgICAgY2FzZSBCSU5EX0VYUFI6CisgICAgICB7CisJdHJl ZSBkZWNsOworCWZvciAoZGVjbCA9IEJJTkRfRVhQUl9WQVJTICh0KTsgZGVj bDsgZGVjbCA9IFRSRUVfQ0hBSU4gKGRlY2wpKQorCSAgeworCSAgICBhZGRf dmFyaWFibGUgKHdkLCBkZWNsLCBBRERfQklORCk7CisJICAgIC8qIEEgc2Vs Zi1yZWZlcmVudGlhbCBpbml0aWFsaXphdGlvbiBpcyBubyBwcm9ibGVtIGJl Y2F1c2UKKwkgICAgICAgd2UgYWxyZWFkeSBlbnRlcmVkIHRoZSB2YXJpYWJs ZSBpbnRvIHRoZSBtYXAgYXMgbG9jYWwuICAqLworCSAgICBTVUJUUkVFIChE RUNMX0lOSVRJQUwgKGRlY2wpKTsKKwkgICAgU1VCVFJFRSAoREVDTF9TSVpF IChkZWNsKSk7CisJICAgIFNVQlRSRUUgKERFQ0xfU0laRV9VTklUIChkZWNs KSk7CisJICB9CisJU1VCVFJFRSAoQklORF9FWFBSX0JPRFkgKHQpKTsKKwly ZXR1cm47CisgICAgICB9CisKKyAgICBjYXNlIFNUQVRFTUVOVF9MSVNUOgor ICAgICAgeworCXRyZWVfc3RtdF9pdGVyYXRvciBpOworCWZvciAoaSA9IHRz aV9zdGFydCAodCk7ICF0c2lfZW5kX3AgKGkpOyB0c2lfbmV4dCAoJmkpKQor CSAgU1VCVFJFRSAoKnRzaV9zdG10X3B0ciAoaSkpOworCXJldHVybjsKKyAg ICAgIH0KKworICAgIGNhc2UgVEFSR0VUX0VYUFI6CisgICAgICB7CisJSU5J VElBTElaRUQgKFRSRUVfT1BFUkFORCAodCwgMCkpOworCVNVQlRSRUUgKFRS RUVfT1BFUkFORCAodCwgMSkpOworCVNVQlRSRUUgKFRSRUVfT1BFUkFORCAo dCwgMikpOworCWlmIChUUkVFX09QRVJBTkQgKHQsIDMpICE9IFRSRUVfT1BF UkFORCAodCwgMSkpCisJICBTVUJUUkVFIChUUkVFX09QRVJBTkQgKHQsIDMp KTsKKwlyZXR1cm47CisgICAgICB9CisKKyAgICBjYXNlIFJFVFVSTl9FWFBS OgorICAgICAgaWYgKFRSRUVfTk9fV0FSTklORyAodCkpCisJeworCSAgZ2Nj X2Fzc2VydCAoZXJyb3Jjb3VudCk7CisJICByZXR1cm47CisJfQorICAgICAg cmV0dXJuOworCisgICAgY2FzZSBERUNMX0VYUFI6CisgICAgICBpZiAoVFJF RV9DT0RFIChERUNMX0VYUFJfREVDTCAodCkpICE9IFRZUEVfREVDTCkKKwlJ TklUSUFMSVpFRCAoREVDTF9FWFBSX0RFQ0wgKHQpKTsKKyAgICAgIHJldHVy bjsKKworICAgIGNhc2UgSU5URUdFUl9UWVBFOgorICAgIGNhc2UgRU5VTUVS QUxfVFlQRToKKyAgICBjYXNlIEJPT0xFQU5fVFlQRToKKyAgICAgIFNVQlRS RUUgKFRZUEVfTUlOX1ZBTFVFICh0KSk7CisgICAgICBTVUJUUkVFIChUWVBF X01BWF9WQUxVRSAodCkpOworICAgICAgcmV0dXJuOworCisgICAgY2FzZSBQ T0lOVEVSX1RZUEU6CisgICAgICBTVUJUUkVFIChUUkVFX1RZUEUgKHQpKTsK KyAgICAgIGJyZWFrOworCisgICAgY2FzZSBBUlJBWV9UWVBFOgorICAgICAg U1VCVFJFRSAoVFJFRV9UWVBFICh0KSk7CisgICAgICBTVUJUUkVFIChUWVBF X0RPTUFJTiAodCkpOworICAgICAgcmV0dXJuOworCisgICAgY2FzZSBSRUNP UkRfVFlQRToKKyAgICAgIFNVQlRSRUUgKFRZUEVfRklFTERTICh0KSk7Cisg ICAgICByZXR1cm47CisgICAgCisgICAgY2FzZSBNRVRIT0RfVFlQRToKKyAg ICAgIFNVQlRSRUUgKFRZUEVfQVJHX1RZUEVTICh0KSk7CisgICAgICBTVUJU UkVFIChUWVBFX01FVEhPRF9CQVNFVFlQRSAodCkpOworICAgICAgcmV0dXJu OworCisgICAgY2FzZSBBR0dSX0lOSVRfRVhQUjoKKyAgICBjYXNlIENBTExf RVhQUjoKKyAgICAgIHsKKwlpbnQgbGVuID0gMDsKKwlpbnQgaWkgPSAwOwor CWlmIChUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAodCwgMCkpID09IElOVEVH RVJfQ1NUKQorCSAgeworCSAgICBsZW4gPSBUUkVFX0lOVF9DU1RfTE9XIChU UkVFX09QRVJBTkQgKHQsIDApKTsKKworCSAgICBmb3IgKGlpID0gMDsgaWkg PCBsZW47IGlpKyspCisJICAgICAgU1VCVFJFRSAoVFJFRV9PUEVSQU5EICh0 LCBpaSkpOworCSAgICBTVUJUUkVFIChUUkVFX1RZUEUgKHQpKTsKKwkgIH0K KwlicmVhazsKKyAgICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICBpZiAo aXNfZXhwcikKKwl7CisJICBpbnQgaSwgbGVuOworCisJICAvKiBXYWxrIG92 ZXIgYWxsIHRoZSBzdWItdHJlZXMgb2YgdGhpcyBvcGVyYW5kLiAgKi8KKwkg IGxlbiA9IFRSRUVfQ09ERV9MRU5HVEggKGNvZGUpOworCisJICAvKiBHbyB0 aHJvdWdoIHRoZSBzdWJ0cmVlcy4gIFdlIG5lZWQgdG8gZG8gdGhpcyBpbiBm b3J3YXJkIG9yZGVyIHNvCisJICAgICB0aGF0IHRoZSBzY29wZSBvZiBhIEZP Ul9FWFBSIGlzIGhhbmRsZWQgcHJvcGVybHkuICAqLworCSAgZm9yIChpID0g MDsgaSA8IGxlbjsgKytpKQorCSAgICBTVUJUUkVFIChUUkVFX09QRVJBTkQg KHQsIGkpKTsKKwl9CisgICAgfQorfQorCisKKy8qIEFkZCBhcHByb3ByaWF0 ZSBmcmFtZXMgbmVlZGVkIGZvciBhIENpbGsgc3Bhd25lZCBmdW5jdGlvbiBj YWxsLCBGTkRFQ0wuIAorICAgUmV0dXJucyB0aGUgX19jaWxrcnRzX3N0YWNr X2ZyYW1lICogdmFyaWFibGUuICAqLworCit0cmVlCitpbnNlcnRfY2lsa19m cmFtZSAodHJlZSBmbmRlY2wpCit7CisgIHRyZWUgYWRkciwgYm9keSwgZW50 ZXIsIG91dCwgb3JpZ19ib2R5OworICBsb2NhdGlvbl90IGxvYyA9IEVYUFJf TE9DQVRJT04gKGZuZGVjbCk7CisKKyAgaWYgKCFjZnVuIHx8IGNmdW4tPmRl Y2wgIT0gZm5kZWNsKQorICAgIHB1c2hfY2Z1biAoREVDTF9TVFJVQ1RfRlVO Q1RJT04gKGZuZGVjbCkpOyAKKworICB0cmVlIGRlY2wgPSBjZnVuLT5jaWxr X2ZyYW1lX2RlY2w7CisgIGlmICghZGVjbCkKKyAgICB7CisgICAgICB0cmVl ICpzYXZlZF90cmVlID0gJkRFQ0xfU0FWRURfVFJFRSAoZm5kZWNsKTsKKyAg ICAgIGRlY2wgPSBtYWtlX2NpbGtfZnJhbWUgKGZuZGVjbCk7CisgICAgICBh ZGRfbG9jYWxfZGVjbCAoY2Z1biwgZGVjbCk7CisKKyAgICAgIGFkZHIgPSBi dWlsZDEgKEFERFJfRVhQUiwgY2lsa19mcmFtZV9wdHJfdHlwZV9kZWNsLCBk ZWNsKTsKKyAgICAgIGVudGVyID0gYnVpbGRfY2FsbF9leHByIChjaWxrX2Vu dGVyX2ZuZGVjbCwgMSwgYWRkcik7CisgICAgICBvdXQgPSBidWlsZF9jaWxr X2Z1bmN0aW9uX2V4aXQgKGNmdW4tPmNpbGtfZnJhbWVfZGVjbCwgZmFsc2Us IHRydWUpOworCisgICAgICAvKiBUaGUgbmV3IGJvZHkgd2lsbCBiZToKKwkg X19jaWxrcnRzX2VudGVyX2ZyYW1lXzEgKCZzZik7CisJIHRyeSB7CisJICAg IG9yaWdfYm9keTsKKwkgfSAKKwkgZmluYWxseSB7CisJICAgICBfX2NpbGty dHNfcG9wX2ZyYW1lICgmc2YpOworCSAgICAgX19jaWxrcnRzX2xlYXZlX2Zy YW1lICgmc2YpOworICAgICAgICAgfSAgKi8KKworICAgICAgYm9keSA9IGFs bG9jX3N0bXRfbGlzdCAoKTsKKyAgICAgIG9yaWdfYm9keSA9ICpzYXZlZF90 cmVlOworCisgICAgICBpZiAoVFJFRV9DT0RFIChvcmlnX2JvZHkpID09IEJJ TkRfRVhQUikKKwlvcmlnX2JvZHkgPSBCSU5EX0VYUFJfQk9EWSAob3JpZ19i b2R5KTsKKyAKKyAgICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAoZW50 ZXIsICZib2R5KTsKKyAgICAgIGFwcGVuZF90b19zdGF0ZW1lbnRfbGlzdCAo YnVpbGRfc3RtdCAobG9jLCBUUllfRklOQUxMWV9FWFBSLCBvcmlnX2JvZHks IAorCQkJCQkgICAgb3V0KSwgJmJvZHkpOworICAgICAgaWYgKFRSRUVfQ09E RSAoKnNhdmVkX3RyZWUpID09IEJJTkRfRVhQUikKKwlCSU5EX0VYUFJfQk9E WSAoKnNhdmVkX3RyZWUpID0gYm9keTsKKyAgICAgIGVsc2UKKwkqc2F2ZWRf dHJlZSA9IGJvZHk7CisgICAgfQorICByZXR1cm4gZGVjbDsKK30KZGlmZiAt LWdpdCBhL2djYy9jL2MtZGVjbC5jIGIvZ2NjL2MvYy1kZWNsLmMKaW5kZXgg ZjdhZTY0OC4uZmZkNjJjNiAxMDA2NDQKLS0tIGEvZ2NjL2MvYy1kZWNsLmMK KysrIGIvZ2NjL2MvYy1kZWNsLmMKQEAgLTgzODAsNiArODM4MCwxMiBAQCBm aW5pc2hfZnVuY3Rpb24gKHZvaWQpCiAgIC8qIFRpZSBvZmYgdGhlIHN0YXRl bWVudCB0cmVlIGZvciB0aGlzIGZ1bmN0aW9uLiAgKi8KICAgREVDTF9TQVZF RF9UUkVFIChmbmRlY2wpID0gcG9wX3N0bXRfbGlzdCAoREVDTF9TQVZFRF9U UkVFIChmbmRlY2wpKTsKIAorICAvKiBJRiB0aGUgZnVuY3Rpb24gaGFzIF9D aWxrX3NwYXduIGluIGZyb250IG9mIGEgZnVuY3Rpb24gY2FsbCBpbnNpZGUg aXQKKyAgICAgaS5lLiBpdCBpcyBhIHNwYXduaW5nIGZ1bmN0aW9uLCB0aGVu IGFkZCB0aGUgYXBwcm9wcmlhdGUgQ2lsayBwbHVzCisgICAgIGZ1bmN0aW9u cyBpbnNpZGUuICAqLworICBpZiAoZmxhZ19lbmFibGVfY2lsa3BsdXMgJiYg Y2Z1bi0+Y2FsbHNfY2lsa19zcGF3biA9PSAxKQorICAgIGNmdW4tPmNpbGtf ZnJhbWVfZGVjbCA9IGluc2VydF9jaWxrX2ZyYW1lIChmbmRlY2wpOworCiAg IGZpbmlzaF9mbmFtZV9kZWNscyAoKTsKIAogICAvKiBDb21wbGFpbiBpZiB0 aGVyZSdzIGp1c3Qgbm8gcmV0dXJuIHN0YXRlbWVudC4gICovCmRpZmYgLS1n aXQgYS9nY2MvYy9jLW9iamMtY29tbW9uLmggYi9nY2MvYy9jLW9iamMtY29t bW9uLmgKaW5kZXggZTE0NDgyNC4uMmYwYjU5ZSAxMDA2NDQKLS0tIGEvZ2Nj L2MvYy1vYmpjLWNvbW1vbi5oCisrKyBiL2djYy9jL2Mtb2JqYy1jb21tb24u aApAQCAtMTA1LDQgKzEwNSwxNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRo ZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI3VuZGVmIExBTkdfSE9P S1NfVFJFRV9JTkxJTklOR19WQVJfTU9EX1RZUEVfUAogI2RlZmluZSBMQU5H X0hPT0tTX1RSRUVfSU5MSU5JTkdfVkFSX01PRF9UWVBFX1AgY192bGFfdW5z cGVjX3AKIAorI3VuZGVmICBMQU5HX0hPT0tTX0NJTEtQTFVTX0dJTVBMSUZZ X1NQQVdOCisjZGVmaW5lIExBTkdfSE9PS1NfQ0lMS1BMVVNfR0lNUExJRllf U1BBV04gZ2ltcGxpZnlfY2lsa19zcGF3bgorCisjdW5kZWYgIExBTkdfSE9P S1NfQ0lMS1BMVVNfR0lNUExJRllfU1lOQworI2RlZmluZSBMQU5HX0hPT0tT X0NJTEtQTFVTX0dJTVBMSUZZX1NZTkMgZ2ltcGxpZnlfY2lsa19zeW5jCisK KyN1bmRlZiAgTEFOR19IT09LU19DSUxLUExVU19GUkFNRV9DTEVBTlVQCisj ZGVmaW5lIExBTkdfSE9PS1NfQ0lMS1BMVVNfRlJBTUVfQ0xFQU5VUCBjX2Np bGtfaW5zdGFsbF9ib2R5X3dfZnJhbWVfY2xlYW51cAorCisjdW5kZWYgIExB TkdfSE9PS1NfQ0lMS1BMVVNfVkFMSURfU1BBV04KKyNkZWZpbmUgTEFOR19I T09LU19DSUxLUExVU19WQUxJRF9TUEFXTiBjaWxrX3ZhbGlkX3NwYXduCiAj ZW5kaWYgLyogR0NDX0NfT0JKQ19DT01NT04gKi8KZGlmZiAtLWdpdCBhL2dj Yy9jL2MtcGFyc2VyLmMgYi9nY2MvYy9jLXBhcnNlci5jCmluZGV4IGI2MTJl MjkuLjc5NDEwMDIgMTAwNjQ0Ci0tLSBhL2djYy9jL2MtcGFyc2VyLmMKKysr IGIvZ2NjL2MvYy1wYXJzZXIuYwpAQCAtNDQ5Nyw2ICs0NDk3LDE0IEBAIGNf cGFyc2VyX3N0YXRlbWVudF9hZnRlcl9sYWJlbHMgKGNfcGFyc2VyICpwYXJz ZXIpCiAJY2FzZSBSSURfRk9SOgogCSAgY19wYXJzZXJfZm9yX3N0YXRlbWVu dCAocGFyc2VyKTsKIAkgIGJyZWFrOworCWNhc2UgUklEX0NJTEtfU1lOQzoK KwkgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CisJICBjX3Bh cnNlcl9za2lwX3VudGlsX2ZvdW5kIChwYXJzZXIsIENQUF9TRU1JQ09MT04s ICJleHBlY3RlZCAlPDslPiIpOworCSAgaWYgKCFmbGFnX2VuYWJsZV9jaWxr cGx1cykgCisJICAgIGVycm9yX2F0IChsb2MsICItZmNpbGtwbHVzIG11c3Qg YmUgZW5hYmxlZCB0byB1c2UgX0NpbGtfc3luYyIpOworCSAgZWxzZSAKKwkg ICAgYWRkX3N0bXQgKGNfYnVpbGRfY2lsa19zeW5jICgpKTsKKwkgIGJyZWFr OwogCWNhc2UgUklEX0dPVE86CiAJICBjX3BhcnNlcl9jb25zdW1lX3Rva2Vu IChwYXJzZXIpOwogCSAgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBh cnNlciwgQ1BQX05BTUUpKQpAQCAtNzA0Niw2ICs3MDU0LDI5IEBAIGNfcGFy c2VyX3Bvc3RmaXhfZXhwcmVzc2lvbiAoY19wYXJzZXIgKnBhcnNlcikKIAlj YXNlIFJJRF9HRU5FUklDOgogCSAgZXhwciA9IGNfcGFyc2VyX2dlbmVyaWNf c2VsZWN0aW9uIChwYXJzZXIpOwogCSAgYnJlYWs7CisJY2FzZSBSSURfQ0lM S19TUEFXTjoKKwkgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7 CisJICBpZiAoIWZsYWdfZW5hYmxlX2NpbGtwbHVzKQorCSAgICB7CisJICAg ICAgZXJyb3JfYXQgKGxvYywgIi1mY2lsa3BsdXMgbXVzdCBiZSBlbmFibGVk IHRvIHVzZSBfQ2lsa19zcGF3biIpOworCSAgICAgIGV4cHIgPSBjX3BhcnNl cl9wb3N0Zml4X2V4cHJlc3Npb24gKHBhcnNlcik7CisJICAgICAgZXhwci52 YWx1ZSA9IGVycm9yX21hcmtfbm9kZTsJICAgICAgCisJICAgIH0KKwkgIGlm IChjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpLT5rZXl3b3JkID09IFJJ RF9DSUxLX1NQQVdOKQorCSAgICB7CisJICAgICAgZXJyb3JfYXQgKGlucHV0 X2xvY2F0aW9uLCAiY29uc2VjdXRpdmUgX0NpbGtfc3Bhd24ga2V5d29yZHMg IgorCQkJImFyZSBub3QgcGVybWl0dGVkIik7CisJICAgICAgLyogTm93IGZs dXNoIG91dCBhbGwgdGhlIF9DaWxrX3NwYXducy4gICovCisJICAgICAgd2hp bGUgKGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmtleXdvcmQgPT0g UklEX0NJTEtfU1BBV04pCisJCWNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBh cnNlcik7CisJICAgICAgZXhwciA9IGNfcGFyc2VyX3Bvc3RmaXhfZXhwcmVz c2lvbiAocGFyc2VyKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAg ICAgZXhwciA9IGNfcGFyc2VyX3Bvc3RmaXhfZXhwcmVzc2lvbiAocGFyc2Vy KTsKKwkgICAgICBleHByLnZhbHVlID0gY19idWlsZF9jaWxrX3NwYXduIChp bnB1dF9sb2NhdGlvbiwgZXhwci52YWx1ZSk7CisJICAgIH0KKwkgIGJyZWFr OyAKIAlkZWZhdWx0OgogCSAgY19wYXJzZXJfZXJyb3IgKHBhcnNlciwgImV4 cGVjdGVkIGV4cHJlc3Npb24iKTsKIAkgIGV4cHIudmFsdWUgPSBlcnJvcl9t YXJrX25vZGU7CmRpZmYgLS1naXQgYS9nY2MvYy9jLXRyZWUuaCBiL2djYy9j L2MtdHJlZS5oCmluZGV4IGQxYTg3MWQuLmJiNmYwNTIgMTAwNjQ0Ci0tLSBh L2djYy9jL2MtdHJlZS5oCisrKyBiL2djYy9jL2MtdHJlZS5oCkBAIC02NDAs NiArNjQwLDggQEAgZXh0ZXJuIHRyZWUgY19maW5pc2hfb21wX3Rhc2sgKGxv Y2F0aW9uX3QsIHRyZWUsIHRyZWUpOwogZXh0ZXJuIHRyZWUgY19maW5pc2hf b21wX2NsYXVzZXMgKHRyZWUpOwogZXh0ZXJuIHRyZWUgY19idWlsZF92YV9h cmcgKGxvY2F0aW9uX3QsIHRyZWUsIHRyZWUpOwogZXh0ZXJuIHRyZWUgY19m aW5pc2hfdHJhbnNhY3Rpb24gKGxvY2F0aW9uX3QsIHRyZWUsIGludCk7Citl eHRlcm4gdHJlZSBjX2J1aWxkX2NpbGtfc3luYyAodm9pZCk7CitleHRlcm4g dHJlZSBjX2J1aWxkX2NpbGtfc3Bhd24gKGxvY2F0aW9uX3QsIHRyZWUpOwog CiAvKiBTZXQgdG8gMCBhdCBiZWdpbm5pbmcgb2YgYSBmdW5jdGlvbiBkZWZp bml0aW9uLCBzZXQgdG8gMSBpZgogICAgYSByZXR1cm4gc3RhdGVtZW50IHRo YXQgc3BlY2lmaWVzIGEgcmV0dXJuIHZhbHVlIGlzIHNlZW4uICAqLwpkaWZm IC0tZ2l0IGEvZ2NjL2MvYy10eXBlY2suYyBiL2djYy9jL2MtdHlwZWNrLmMK aW5kZXggMzA4NzFkYi4uYWI1M2E1YyAxMDA2NDQKLS0tIGEvZ2NjL2MvYy10 eXBlY2suYworKysgYi9nY2MvYy9jLXR5cGVjay5jCkBAIC00Mzc1LDYgKzQz NzUsMTQgQEAgYnVpbGRfY29tcG91bmRfZXhwciAobG9jYXRpb25fdCBsb2Ms IHRyZWUgZXhwcjEsIHRyZWUgZXhwcjIpCiAgIHRyZWUgZXB0eXBlID0gTlVM TF9UUkVFOwogICB0cmVlIHJldDsKIAorICBpZiAoZmxhZ19lbmFibGVfY2ls a3BsdXMKKyAgICAgICYmIChUUkVFX0NPREUgKGV4cHIxKSA9PSBDSUxLX1NQ QVdOX1NUTVQKKwkgIHx8IFRSRUVfQ09ERSAoZXhwcjIpID09IENJTEtfU1BB V05fU1RNVCkpCisgICAgeworICAgICAgZXJyb3JfYXQgKGxvYywKKwkJInNw YXduZWQgZnVuY3Rpb24gY2FsbCBjYW5ub3QgYmUgcGFydCBvZiBhIGNvbW1h IGV4cHJlc3Npb24iKTsKKyAgICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7 CisgICAgfQogICBleHByMV9pbnRfb3BlcmFuZHMgPSBFWFBSX0lOVF9DT05T VF9PUEVSQU5EUyAoZXhwcjEpOwogICBpZiAoZXhwcjFfaW50X29wZXJhbmRz KQogICAgIGV4cHIxID0gcmVtb3ZlX2NfbWF5YmVfY29uc3RfZXhwciAoZXhw cjEpOwpAQCAtODY4Miw2ICs4NjkwLDExIEBAIGNfZmluaXNoX3JldHVybiAo bG9jYXRpb25fdCBsb2MsIHRyZWUgcmV0dmFsLCB0cmVlIG9yaWd0eXBlKQog CSAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKIAl9CiAgICAgfQorICBpZiAo ZmxhZ19lbmFibGVfY2lsa3BsdXMgJiYgcmV0dmFsICYmIFRSRUVfQ09ERSAo cmV0dmFsKSA9PSBDSUxLX1NQQVdOX1NUTVQpCisgICAgeworICAgICAgZXJy b3JfYXQgKGxvYywgInVzZSBvZiBfQ2lsa19zcGF3biBpbiByZXR1cm4gc3Rh dGVtZW50IGlzIG5vdCBhbGxvd2VkIik7CisgICAgICByZXR1cm4gZXJyb3Jf bWFya19ub2RlOworICAgIH0KICAgaWYgKHJldHZhbCkKICAgICB7CiAgICAg ICB0cmVlIHNlbWFudGljX3R5cGUgPSBOVUxMX1RSRUU7CkBAIC0xMDk3Miwz ICsxMDk4NSwyNiBAQCBjX2J1aWxkX3ZhX2FyZyAobG9jYXRpb25fdCBsb2Ms IHRyZWUgZXhwciwgdHJlZSB0eXBlKQogCQkiQysrIHJlcXVpcmVzIHByb21v dGVkIHR5cGUsIG5vdCBlbnVtIHR5cGUsIGluICU8dmFfYXJnJT4iKTsKICAg cmV0dXJuIGJ1aWxkX3ZhX2FyZyAobG9jLCBleHByLCB0eXBlKTsKIH0KKwor LyogTWFya3MgQ0FMTCwgYSBDQUxMX0VYUFIsIGFzIGEgc3Bhd25lZCBmdW5j dGlvbiBjYWxsLiAgKi8KKwordHJlZQorY19idWlsZF9jaWxrX3NwYXduIChs b2NhdGlvbl90IGxvYywgdHJlZSBjYWxsKQoreworICBpZiAoIWNpbGtwbHVz X3NldF9zcGF3bl9tYXJrZXIgKGxvYywgY2FsbCkpCisgICAgcmV0dXJuIGVy cm9yX21hcmtfbm9kZTsKKyAgdHJlZSBzcGF3bl9zdG10ID0gYnVpbGQxIChD SUxLX1NQQVdOX1NUTVQsIFRSRUVfVFlQRSAoY2FsbCksIGNhbGwpOworICBU UkVFX1NJREVfRUZGRUNUUyAoc3Bhd25fc3RtdCkgPSAxOworICByZXR1cm4g c3Bhd25fc3RtdDsKK30KKworLyogUmV0dXJucyBhIHRyZWUgb2YgdHlwZSBD SUxLX1NZTkNfU1RNVCBpZiBDaWxrIFBsdXMgaXMgZW5hYmxlZC4gIE90aGVy d2lzZQorICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZS4gICovCisKK3RyZWUK K2NfYnVpbGRfY2lsa19zeW5jICh2b2lkKQoreworICB0cmVlIHN5bmMgPSBi dWlsZDAgKENJTEtfU1lOQ19TVE1ULCB2b2lkX3R5cGVfbm9kZSk7CisgIFRS RUVfU0lERV9FRkZFQ1RTIChzeW5jKSA9IDE7CisgIHJldHVybiBzeW5jOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL2NpbGstYnVpbHRpbnMuZGVmIGIvZ2NjL2Np bGstYnVpbHRpbnMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjg2MzQxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY2lsay1i dWlsdGlucy5kZWYKQEAgLTAsMCArMSwzMyBAQAorLyogVGhpcyBmaWxlIGNv bnRhaW5zIHRoZSBkZWZpbml0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiBmb3Ig dGhlCisgICBDaWxrIFBsdXMgYnVpbHRpbnMgdXNlZCBpbiB0aGUgR05VIGNv bXBpbGVyLgorICAgQ29weXJpZ2h0IChDKSAyMDEzIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorCisgICBDb250cmlidXRlZCBieSBCYWxhamkg Vi4gSXllciA8YmFsYWppLnYuaXllckBpbnRlbC5jb20+CisgICAJICAgICAg ICAgIEludGVsIENvcnBvcmF0aW9uLgorCitUaGlzIGZpbGUgaXMgcGFydCBv ZiBHQ0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNp b24uCisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB QklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3Jl IGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRo IEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworREVGX0NJTEtf QlVJTFRJTl9TVFVCIChCVUlMVF9JTl9DSUxLX0VOVEVSX0ZSQU1FLCAiX19j aWxrcnRzX2VudGVyX2ZyYW1lXzEiKQorREVGX0NJTEtfQlVJTFRJTl9TVFVC IChCVUlMVF9JTl9DSUxLX0VOVEVSX0ZSQU1FX0ZBU1QsIAorCQkgICAgICAg Il9fY2lsa3J0c19lbnRlcl9mcmFtZV9mYXN0XzEiKQorREVGX0NJTEtfQlVJ TFRJTl9TVFVCIChCVUlMVF9JTl9DSUxLX0RFVEFDSCwgIl9fY2lsa3J0c19k ZXRhY2giKQorREVGX0NJTEtfQlVJTFRJTl9TVFVCIChCVUlMVF9JTl9DSUxL X1JFVEhST1csICJfX2NpbGtydHNfcmV0aHJvdyIpCitERUZfQ0lMS19CVUlM VElOX1NUVUIgKEJVSUxUX0lOX0NJTEtfU1lOQ0hFRCwgIl9fY2lsa3J0c19z eW5jaGVkIikKK0RFRl9DSUxLX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fQ0lM S19TWU5DLCAiX19jaWxrcnRzX3N5bmMiKQorREVGX0NJTEtfQlVJTFRJTl9T VFVCIChCVUlMVF9JTl9DSUxLX0xFQVZFX0ZSQU1FLCAiX19jaWxrcnRzX2xl YXZlX2ZyYW1lIikKK0RFRl9DSUxLX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5f Q0lMS19QT1BfRlJBTUUsICJfX2NpbGtydHNfcG9wX2ZyYW1lIikKK0RFRl9D SUxLX0JVSUxUSU5fU1RVQiAoQlVJTFRfSU5fQ0lMS19TQVZFX0ZQLCAiX19j aWxrcnRzX3NhdmVfZnBfY3RybF9zdGF0ZSIpCmRpZmYgLS1naXQgYS9nY2Mv Y2lsay1jb21tb24uYyBiL2djYy9jaWxrLWNvbW1vbi5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzk1MjUKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvY2lsay1jb21tb24uYwpAQCAtMCwwICsxLDM5MCBAQAor LyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEludGVsKFIpIENpbGsoVE0p IFBsdXMgc3VwcG9ydAorICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBDaWxr UGx1cyBJbnRyaW5zaWNzCisgICBDb3B5cmlnaHQgKEMpIDIwMTMgIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29udHJpYnV0ZWQgYnkg QmFsYWppIFYuIEl5ZXIgPGJhbGFqaS52Lml5ZXJAaW50ZWwuY29tPiwKKyAg IEludGVsIENvcnBvcmF0aW9uCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdD Qy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4K KworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0ND OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCis8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVkZSAiY29u ZmlnLmgiCisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAiY29yZXR5 cGVzLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImxhbmdob29r cy5oIgorI2luY2x1ZGUgImV4cHIuaCIKKyNpbmNsdWRlICJvcHRhYnMuaCIK KyNpbmNsdWRlICJyZWNvZy5oIgorI2luY2x1ZGUgImNpbGsuaCIKKworLyog VGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYWxsIHRoZSBpbXBvcnRhbnQgZmllbGRz IG9mIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzLAorICAgaW50ZXJuYWwgYnVp bHQtaW4gZnVuY3Rpb25zLCBhbmQgQ2lsay1zcGVjaWZpYyBkYXRhIHR5cGVz LiAgRXhwbGFuYXRpb24gb2YgCisgICBhbGwgdGhlIHRoZXNlIGZpZWxzZCBh cmUgZ2l2ZW4gaW4gY2lsay5oLiAgKi8KK3RyZWUgY2lsa190cmVlc1soaW50 KSBDSUxLX1RJX01BWF07CisKKworLyogUmV0dXJucyB0aGUgdmFsdWUgaW4g c3RydWN0dXJlIEZSQU1FIHBvaW50ZWQgYnkgdGhlIEZJRUxEX05VTUJFUgor ICAgKGUuZy4gWC55KS4gIAorICAgRklFTERfTlVNQkVSIGlzIGFuIGluZGV4 IHRvIHRoZSBzdHJ1Y3R1cmUgRlJBTUVfUFRSLiAgRm9yIGRldGFpbHMKKyAg IGFib3V0IHRoZXNlIGZpZWxkcywgcmVmZXIgdG8gY2lsa190cmVlcyBzdHJ1 Y3R1cmUgaW4gY2lsay5oIGFuZAorICAgY2lsa19pbml0X2J1aWx0aW5zIGZ1 bmN0aW9uICBpbiB0aGlzIGZpbGUuICBSZXR1cm5zIGEgVFJFRSB0aGF0IGlz IHRoZSB0eXBlIAorICAgb2YgdGhlIGZpZWxkIHJlcHJlc2VudGVkIGJ5IEZJ RUxEX05VTUJFUi4gICovCisKK3RyZWUKK2NpbGtfZG90ICh0cmVlIGZyYW1l LCBpbnQgZmllbGRfbnVtYmVyLCBib29sIHZvbGF0aWwpCit7CisgIHRyZWUg ZmllbGQgPSBjaWxrX3RyZWVzW2ZpZWxkX251bWJlcl07CisgIGZpZWxkID0g Zm9sZF9idWlsZDMgKENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQp LCBmcmFtZSwgZmllbGQsIAorCQkgICAgICAgTlVMTF9UUkVFKTsKKyAgVFJF RV9USElTX1ZPTEFUSUxFIChmaWVsZCkgPSB2b2xhdGlsOworICByZXR1cm4g ZmllbGQ7Cit9CisKKy8qIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgYSBmaWVs ZCBpbiBGUkFNRV9QVFIsIHBvaW50ZWQgYnkgRklFTERfTlVNQkVSLiAgCisg ICAoZS5nLiAoJlgpLT55KS4gICBQbGVhc2Ugc2VlIGNpbGtfZG90IGZ1bmN0 aW9uIGZvciBleHBsYW5hdGlvbiBvZiB0aGUgCisgICBGSUVMRF9OVU1CRVIu ICBSZXR1cm5zIGEgdHJlZSB0aGF0IGlzIHRoZSB0eXBlIG9mIHRoZSBmaWVs ZCByZXByZXNlbnRlZCAKKyAgIGJ5IEZJRUxEX05VTUJFUi4gICovCisKK3Ry ZWUKK2NpbGtfYXJyb3cgKHRyZWUgZnJhbWVfcHRyLCBpbnQgZmllbGRfbnVt YmVyLCBib29sIHZvbGF0aWwpCit7CisgIHJldHVybiBjaWxrX2RvdCAoZm9s ZF9idWlsZDEgKElORElSRUNUX1JFRiwgCisJCQkJVFJFRV9UWVBFIChUUkVF X1RZUEUgKGZyYW1lX3B0cikpLCBmcmFtZV9wdHIpLCAKKwkJICAgZmllbGRf bnVtYmVyLCB2b2xhdGlsKTsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9uIHdp bGwgYWRkIEZJRUxEIG9mIHR5cGUgVFlQRSB0byBhIGRlZmluZWQgYnVpbHQt aW4gCisgICBzdHJ1Y3R1cmUuICAqLworCitzdGF0aWMgdHJlZQorYWRkX2Zp ZWxkIChjb25zdCBjaGFyICpuYW1lLCB0cmVlIHR5cGUsIHRyZWUgZmllbGRz KQoreworICB0cmVlICB0ID0gZ2V0X2lkZW50aWZpZXIgKG5hbWUpOworICB0 cmVlIGZpZWxkID0gYnVpbGRfZGVjbCAoQlVJTFRJTlNfTE9DQVRJT04sIEZJ RUxEX0RFQ0wsIHQsIHR5cGUpOworICBUUkVFX0NIQUlOIChmaWVsZCkgPSBm aWVsZHM7CisgIHJldHVybiBmaWVsZDsKK30KKworLyogVGhpcyBmdW5jdGlv biB3aWxsIGRlZmluZSBhIGJ1aWx0LWluIGZ1bmN0aW9uIG9mIE5BTUUsIG9m IHR5cGUgRk5UWVBFIGFuZAorICAgcmVnaXN0ZXIgaXQgdW5kZXIgdGhlIGJ1 aWx0LWluIGZ1bmN0aW9uIGNvZGUgQ09ERS4gICovCisKK3N0YXRpYyB0cmVl CitpbnN0YWxsX2J1aWx0aW4gKGNvbnN0IGNoYXIgKm5hbWUsIHRyZWUgZm50 eXBlLCBlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGNvZGUsCisgICAgICAgICAg ICAgICAgIGJvb2wgcHVibGlzaCkKK3sKKyAgdHJlZSBmbmRlY2wgPSBidWls ZF9mbl9kZWNsIChuYW1lLCBmbnR5cGUpOworICBERUNMX0JVSUxUX0lOX0NM QVNTIChmbmRlY2wpID0gQlVJTFRfSU5fTk9STUFMOworICBERUNMX0ZVTkNU SU9OX0NPREUgKGZuZGVjbCkgPSBjb2RlOworICBpZiAocHVibGlzaCkKKyAg ICB7CisgICAgICB0cmVlIHQgPSBsYW5nX2hvb2tzLmRlY2xzLnB1c2hkZWNs IChmbmRlY2wpOworICAgICAgaWYgKHQpCisgICAgICAgIGZuZGVjbCA9IHQ7 CisgICAgfQorICBzZXRfYnVpbHRpbl9kZWNsIChjb2RlLCBmbmRlY2wsIHRy dWUpOworICByZXR1cm4gZm5kZWNsOworfQorCisvKiBDcmVhdGVzIGFuZCBp bml0aWFsaXplcyBhbGwgdGhlIGJ1aWx0LWluIENpbGsga2V5d29yZHMgZnVu Y3Rpb25zIGFuZCB0aHJlZQorICAgaW50ZXJuYWwgc3RydWN0dXJlczogX19j aWxrcnRzX3N0YWNrX2ZyYW1lLCBfX2NpbGtydHNfcGVkaWdyZWUgYW5kCisg ICBfX2NpbGtydHNfd29ya2VyLiAgRGV0YWlsZWQgaW5mb3JtYXRpb24gYWJv dXQgX19jaWxrcnRzX3N0YWNrX2ZyYW1lIGFuZAorICAgX19jaWxrcnRzX3dv cmtlciBzdHJ1Y3R1cmVzIGFyZSBnaXZlbiBpbiBsaWJjaWxrcnRzL2luY2x1 ZGUvaW50ZXJuYWwvYWJpLmguCisgICBfX2NpbGtydHNfcGVkaWdyZWUgaXMg ZGVzY3JpYmVkIGluIGxpYmNpbGtydHMvaW5jbHVkZS9jaWxrL2NvbW1vbi5o LiAgKi8KKwordm9pZAorY2lsa19pbml0X2J1aWx0aW5zICh2b2lkKQorewor ICAvKiBOb3cgYnVpbGQgdGhlIGZvbGxvd2luZyBfX2NpbGtydHNfcGVkaWdy ZWUgc3RydWN0OgorICAgICBzdHJ1Y3QgX19jaWxrcnRzX3BlZGlncmVlIHsK KyAgICAgICAgdWludDY0X3QgcmFuazsKKyAgICAgICAgc3RydWN0IF9fY2ls a3J0c19wZWRpZ3JlZSAqcGFyZW50OworICAgICAgfSAgKi8KKyAgICAgICAK KyAgdHJlZSBwZWRpZ3JlZV90eXBlID0gbGFuZ19ob29rcy50eXBlcy5tYWtl X3R5cGUgKFJFQ09SRF9UWVBFKTsKKyAgdHJlZSBwZWRpZ3JlZV9wdHIgID0g YnVpbGRfcG9pbnRlcl90eXBlIChwZWRpZ3JlZV90eXBlKTsKKyAgdHJlZSBm aWVsZCA9IGFkZF9maWVsZCAoInJhbmsiLCB1aW50NjRfdHlwZV9ub2RlLCBO VUxMX1RSRUUpOworICBjaWxrX3RyZWVzW0NJTEtfVElfUEVESUdSRUVfUkFO S10gPSBmaWVsZDsKKyAgZmllbGQgPSBhZGRfZmllbGQgKCJwYXJlbnQiLCBw ZWRpZ3JlZV9wdHIsIGZpZWxkKTsKKyAgY2lsa190cmVlc1tDSUxLX1RJX1BF RElHUkVFX1BBUkVOVF0gPSBmaWVsZDsKKyAgZmluaXNoX2J1aWx0aW5fc3Ry dWN0IChwZWRpZ3JlZV90eXBlLCAiX19jaWxrcnRzX3BlZGlncmVlX0dDQyIs IGZpZWxkLAorCQkJIE5VTExfVFJFRSk7CisgIGxhbmdfaG9va3MudHlwZXMu cmVnaXN0ZXJfYnVpbHRpbl90eXBlIChwZWRpZ3JlZV90eXBlLAorCQkJCQkg ICJfX2NpbGtydHNfcGVkaWdyZWVfdCIpOworICBERUNMX0FMSUdOIChmaWVs ZCkgPSBCSUdHRVNUX0FMSUdOTUVOVDsKKyAgY2lsa19wZWRpZ3JlZV90eXBl X2RlY2wgPSBwZWRpZ3JlZV90eXBlOyAKKyAgCisgIC8qIEJ1aWxkIHRoZSBD aWxrIFN0YWNrIEZyYW1lOgorICAgICBzdHJ1Y3QgX19jaWxrcnRzX3N0YWNr X2ZyYW1lIHsKKyAgICAgICB1aW50MzJfdCBmbGFnczsKKyAgICAgICB1aW50 MzJfdCBzaXplOworICAgICAgIHN0cnVjdCBfX2NpbGtydHNfc3RhY2tfZnJh bWUgKmNhbGxfcGFyZW50OworICAgICAgIF9fY2lsa3J0c193b3JrZXIgKndv cmtlcjsKKyAgICAgICB2b2lkICpleGNlcHRfZGF0YTsKKyAgICAgICB2b2lk ICpjdHhbNF07CisgICAgICAgdWludDMyX3QgbXhjc3I7CisgICAgICAgdWlu dDE2X3QgZnBjc3I7CisgICAgICAgdWludDE2X3QgcmVzZXJ2ZWQ7CisgICAg ICAgX19jaWxrcnRzX3BlZGlncmVlIHBlZGlncmVlOworICAgICB9OyAgKi8K KworICB0cmVlIGZyYW1lID0gbGFuZ19ob29rcy50eXBlcy5tYWtlX3R5cGUg KFJFQ09SRF9UWVBFKTsKKyAgdHJlZSBmcmFtZV9wdHIgPSBidWlsZF9wb2lu dGVyX3R5cGUgKGZyYW1lKTsKKyAgdHJlZSB3b3JrZXJfdHlwZSA9IGxhbmdf aG9va3MudHlwZXMubWFrZV90eXBlIChSRUNPUkRfVFlQRSk7CisgIHRyZWUg d29ya2VyX3B0ciA9IGJ1aWxkX3BvaW50ZXJfdHlwZSAod29ya2VyX3R5cGUp OworICB0cmVlIHNfdHlwZV9ub2RlID0gYnVpbGRfaW50X2NzdCAoc2l6ZV90 eXBlX25vZGUsIDQpOworCisgIHRyZWUgZmxhZ3MgPSBhZGRfZmllbGQgKCJm bGFncyIsIHVpbnQzMl90eXBlX25vZGUsIE5VTExfVFJFRSk7CisgIHRyZWUg c2l6ZSA9IGFkZF9maWVsZCAoInNpemUiLCB1aW50MzJfdHlwZV9ub2RlLCBm bGFncyk7CisgIHRyZWUgcGFyZW50ID0gYWRkX2ZpZWxkICgiY2FsbF9wYXJl bnQiLCBmcmFtZV9wdHIsIHNpemUpOworICB0cmVlIHdvcmtlciA9IGFkZF9m aWVsZCAoIndvcmtlciIsIHdvcmtlcl9wdHIsIHBhcmVudCk7CisgIHRyZWUg ZXhjZXB0ID0gYWRkX2ZpZWxkICgiZXhjZXB0X2RhdGEiLCBmcmFtZV9wdHIs IHdvcmtlcik7CisgIHRyZWUgY29udGV4dCA9IGFkZF9maWVsZCAoImN0eCIs CisJCQkgICAgYnVpbGRfYXJyYXlfdHlwZSAocHRyX3R5cGVfbm9kZSwKKwkJ CQkJICAgICAgYnVpbGRfaW5kZXhfdHlwZSAoc190eXBlX25vZGUpKSwKKwkJ CSAgICBleGNlcHQpOworICB0cmVlIG14Y3NyID0gYWRkX2ZpZWxkICgibXhj c3IiLCB1aW50MzJfdHlwZV9ub2RlLCBjb250ZXh0KTsKKyAgdHJlZSBmcGNz ciA9IGFkZF9maWVsZCAoImZwY3NyIiwgdWludDE2X3R5cGVfbm9kZSwgbXhj c3IpOworICB0cmVlIHJlc2VydmVkID0gYWRkX2ZpZWxkICgicmVzZXJ2ZWQi LCB1aW50MTZfdHlwZV9ub2RlLCBmcGNzcik7CisgIHRyZWUgcGVkaWdyZWUg PSBhZGRfZmllbGQgKCJwZWRpZ3JlZSIsIHBlZGlncmVlX3R5cGUsIHJlc2Vy dmVkKTsKKyAgCisgIC8qIE5vdyBhZGQgdGhlbSB0byBhIGNvbW1vbiBzdHJ1 Y3R1cmUgd2hvc2UgZmllbGRzIGFyZSAjZGVmaW5lZCB0byBzb21ldGhpbmcK KyAgICAgdGhhdCBpcyB1c2VkIGF0IGEgbGF0ZXIgc3RhZ2UuICAqLworICBj aWxrX3RyZWVzW0NJTEtfVElfRlJBTUVfRkxBR1NdID0gZmxhZ3M7CisgIGNp bGtfdHJlZXNbQ0lMS19USV9GUkFNRV9QQVJFTlRdID0gcGFyZW50OworICBj aWxrX3RyZWVzW0NJTEtfVElfRlJBTUVfV09SS0VSXSA9IHdvcmtlcjsKKyAg Y2lsa190cmVlc1tDSUxLX1RJX0ZSQU1FX0VYQ0VQVElPTl0gPSBleGNlcHQ7 CisgIGNpbGtfdHJlZXNbQ0lMS19USV9GUkFNRV9DT05URVhUXSA9IGNvbnRl eHQ7CisgIC8qIFdlIGRvbid0IGNhcmUgYWJvdXQgcmVzZXJ2ZWQsIHNvIG5v IG5lZWQgdG8gc3RvcmUgaXQgaW4gY2lsa190cmVlcy4gICovCisgIGNpbGtf dHJlZXNbQ0lMS19USV9GUkFNRV9QRURJR1JFRV0gPSBwZWRpZ3JlZTsKKwor ICBUWVBFX0FMSUdOIChmcmFtZSkgPSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRB Ulk7CisgIFRSRUVfQUREUkVTU0FCTEUgKGZyYW1lKSA9IDE7CisKKyAgZmlu aXNoX2J1aWx0aW5fc3RydWN0IChmcmFtZSwgIl9fY2lsa3J0c19zdF9mcmFt ZV9HQ0MiLCBwZWRpZ3JlZSwgTlVMTF9UUkVFKTsKKyAgY2lsa19mcmFtZV90 eXBlX2RlY2wgPSBmcmFtZTsKKyAgbGFuZ19ob29rcy50eXBlcy5yZWdpc3Rl cl9idWlsdGluX3R5cGUgKGZyYW1lLCAiX19jaWxrcnRzX2ZyYW1lX3QiKTsK KworICBjaWxrX2ZyYW1lX3B0cl90eXBlX2RlY2wgPSBidWlsZF9xdWFsaWZp ZWRfdHlwZSAoZnJhbWVfcHRyLAorCQkJCQkJICAgVFlQRV9RVUFMX1ZPTEFU SUxFKTsKKyAgLyogTm93IGxldCdzIGRvIHRoZSBmb2xsb3dpbmcgd29ya2Vy IHN0cnVjdDoKKworICAgICBzdHJ1Y3QgX19jaWxrcnRzX3dvcmtlciB7Cisg ICAgICAgX19jaWxrcnRzX3N0YWNrX2ZyYW1lICp2b2xhdGlsZSAqdm9sYXRp bGUgdGFpbDsKKyAgICAgICBfX2NpbGtydHNfc3RhY2tfZnJhbWUgKnZvbGF0 aWxlICp2b2xhdGlsZSBoZWFkOworICAgICAgIF9fY2lsa3J0c19zdGFja19m cmFtZSAqdm9sYXRpbGUgKnZvbGF0aWxlIGV4YzsKKyAgICAgICBfX2NpbGty dHNfc3RhY2tfZnJhbWUgKnZvbGF0aWxlICp2b2xhdGlsZSBwcm90ZWN0ZWRf dGFpbDsKKyAgICAgICBfX2NpbGtydHNfc3RhY2tfZnJhbWUgKnZvbGF0aWxl ICpsdHFfbGltaXQ7CisgICAgICAgaW50MzJfdCBzZWxmOworICAgICAgIGds b2JhbF9zdGF0ZV90ICpnOworICAgICAgIGxvY2FsX3N0YXRlICpsOworICAg ICAgIGNpbGtyZWRfbWFwICpyZWR1Y2VyX21hcDsKKyAgICAgICBfX2NpbGty dHNfc3RhY2tfZnJhbWUgKmN1cnJlbnRfc3RhY2tfZnJhbWU7CisgICAgICAg dm9pZCAqcmVzZXJ2ZWQ7CisgICAgICAgX19jaWxrcnRzX3dvcmtlcl9zeXNk ZXBfc3RhdGUgKnN5c2RlcDsKKyAgICAgICBfX2NpbGtydHNfcGVkaWdyZWUg cGVkaWdyZWU7CisgICAgfSAgICovCisKKyAgdHJlZSBmcHRyX3ZvbGF0aWxf dHlwZSA9IGJ1aWxkX3F1YWxpZmllZF90eXBlIChmcmFtZV9wdHIsIFRZUEVf UVVBTF9WT0xBVElMRSk7CisgIHRyZWUgZnB0cl92b2xhdGlsZV9wdHIgPSBi dWlsZF9wb2ludGVyX3R5cGUgKGZwdHJfdm9sYXRpbF90eXBlKTsKKyAgdHJl ZSBmcHRyX3ZvbF9wdHJfdm9sID0gYnVpbGRfcXVhbGlmaWVkX3R5cGUgKGZw dHJfdm9sYXRpbGVfcHRyLAorCQkJCQkJVFlQRV9RVUFMX1ZPTEFUSUxFKTsK KyAgdHJlZSBnID0gbGFuZ19ob29rcy50eXBlcy5tYWtlX3R5cGUgKFJFQ09S RF9UWVBFKTsKKyAgZmluaXNoX2J1aWx0aW5fc3RydWN0IChnLCAiX19jaWxr cnRzX2dsb2JhbF9zdGF0ZSIsIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKKyAg dHJlZSBsID0gbGFuZ19ob29rcy50eXBlcy5tYWtlX3R5cGUgKFJFQ09SRF9U WVBFKTsKKyAgZmluaXNoX2J1aWx0aW5fc3RydWN0IChsLCAiX19jaWxrcnRz X2xvY2FsX3N0YXRlIiwgTlVMTF9UUkVFLCBOVUxMX1RSRUUpOworICB0cmVl IHN5c2RlcF90ID0gbGFuZ19ob29rcy50eXBlcy5tYWtlX3R5cGUgKFJFQ09S RF9UWVBFKTsKKyAgZmluaXNoX2J1aWx0aW5fc3RydWN0IChzeXNkZXBfdCwg Il9fY2lsa3J0c193b3JrZXJfc3lzZGVwX3N0YXRlIiwgTlVMTF9UUkVFLAor CQkJIE5VTExfVFJFRSk7CisgIAorICBmaWVsZCA9IGFkZF9maWVsZCAoInRh aWwiLCBmcHRyX3ZvbF9wdHJfdm9sLCBOVUxMX1RSRUUpOworICBjaWxrX3Ry ZWVzW0NJTEtfVElfV09SS0VSX1RBSUxdID0gZmllbGQ7CisgIGZpZWxkID0g YWRkX2ZpZWxkICgiaGVhZCIsIGZwdHJfdm9sX3B0cl92b2wsIGZpZWxkKTsK KyAgZmllbGQgID0gYWRkX2ZpZWxkICgiZXhjIiwgZnB0cl92b2xfcHRyX3Zv bCwgZmllbGQpOworICBmaWVsZCA9IGFkZF9maWVsZCAoInByb3RlY3RlZF90 YWlsIiwgZnB0cl92b2xfcHRyX3ZvbCwgZmllbGQpOworICBmaWVsZCA9IGFk ZF9maWVsZCAoImx0cV9saW1pdCIsIGZwdHJfdm9sYXRpbGVfcHRyLCBmaWVs ZCk7CisgIGZpZWxkID0gYWRkX2ZpZWxkICgic2VsZiIsIGludGVnZXJfdHlw ZV9ub2RlLCBmaWVsZCk7CisgIGZpZWxkID0gYWRkX2ZpZWxkICgiZyIsIGJ1 aWxkX3BvaW50ZXJfdHlwZSAoZyksIGZpZWxkKTsKKyAgZmllbGQgPSBhZGRf ZmllbGQgKCJsIiwgYnVpbGRfcG9pbnRlcl90eXBlIChnKSwgZmllbGQpOwor ICBmaWVsZCA9IGFkZF9maWVsZCAoInJlZHVjZXJfbWFwIiwgcHRyX3R5cGVf bm9kZSwgZmllbGQpOworICBmaWVsZCA9IGFkZF9maWVsZCAoImN1cnJlbnRf c3RhY2tfZnJhbWUiLCBmcmFtZV9wdHIsIGZpZWxkKTsKKyAgY2lsa190cmVl c1tDSUxLX1RJX1dPUktFUl9DVVJdID0gZmllbGQ7CisgIGZpZWxkID0gYWRk X2ZpZWxkICgic2F2ZWRfcHJvdGVjdGVkX3RhaWwiLCBmcHRyX3ZvbGF0aWxl X3B0ciwgZmllbGQpOworICBmaWVsZCA9IGFkZF9maWVsZCAoInN5c2RlcCIs IGJ1aWxkX3BvaW50ZXJfdHlwZSAoc3lzZGVwX3QpLCBmaWVsZCk7CisgIGZp ZWxkID0gYWRkX2ZpZWxkICgicGVkaWdyZWUiLCBwZWRpZ3JlZV90eXBlLCBm aWVsZCk7CisgIGNpbGtfdHJlZXNbQ0lMS19USV9XT1JLRVJfUEVESUdSRUVd ID0gZmllbGQ7CisgIERFQ0xfQUxJR04gKGZpZWxkKSA9IEJJR0dFU1RfQUxJ R05NRU5UOworICBmaW5pc2hfYnVpbHRpbl9zdHJ1Y3QgKHdvcmtlcl90eXBl LCAiX19jaWxrcnRzX3dvcmtlcl9HQ0MiLCBmaWVsZCwKKwkJCSBOVUxMX1RS RUUpOworCisgIHRyZWUgZnB0cl9hcmdsaXN0ID0gdHJlZV9jb25zIChOVUxM X1RSRUUsIGZyYW1lX3B0ciwgdm9pZF9saXN0X25vZGUpOworICB0cmVlIGZw dHJfZnVuID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAodm9pZF90eXBlX25vZGUs IGZwdHJfYXJnbGlzdCk7CisgIAorICAvKiB2b2lkIF9fY2lsa3J0c19lbnRl cl9mcmFtZV8xIChfX2NpbGtydHNfc3RhY2tfZnJhbWUgKik7ICAqLworICBj aWxrX2VudGVyX2ZuZGVjbCA9IGluc3RhbGxfYnVpbHRpbiAoIl9fY2lsa3J0 c19lbnRlcl9mcmFtZV8xIiwgZnB0cl9mdW4sCisJCQkJICAgICAgIEJVSUxU X0lOX0NJTEtfRU5URVJfRlJBTUUsIGZhbHNlKTsKKworICAvKiB2b2lkIF9f Y2lsa3J0c19lbnRlcl9mcmFtZV9mYXN0XzEgKF9fY2lsa3J0c19zdGFja19m cmFtZSAqKTsgICovCisgIGNpbGtfZW50ZXJfZmFzdF9mbmRlY2wgPSAKKyAg ICBpbnN0YWxsX2J1aWx0aW4gKCJfX2NpbGtydHNfZW50ZXJfZnJhbWVfZmFz dF8xIiwgZnB0cl9mdW4sIAorCQkgICAgIEJVSUxUX0lOX0NJTEtfRU5URVJf RlJBTUVfRkFTVCwgZmFsc2UpOworICAKKyAgLyogdm9pZCBfX2NpbGtydHNf cG9wX2ZyYW1lIChfX2NpbGtydHNfc3RhY2tfZnJhbWUgKik7ICAqLworICBj aWxrX3BvcF9mbmRlY2wgPSBpbnN0YWxsX2J1aWx0aW4gKCJfX2NpbGtydHNf cG9wX2ZyYW1lIiwgZnB0cl9mdW4sCisJCQkJICAgICBCVUlMVF9JTl9DSUxL X1BPUF9GUkFNRSwgZmFsc2UpOworCisgIC8qIHZvaWQgX19jaWxrcnRzX2xl YXZlX2ZyYW1lIChfX2NpbGtydHNfc3RhY2tfZnJhbWUgKik7ICAqLworICBj aWxrX2xlYXZlX2ZuZGVjbCA9IGluc3RhbGxfYnVpbHRpbiAoIl9fY2lsa3J0 c19sZWF2ZV9mcmFtZSIsIGZwdHJfZnVuLAorCQkJCSAgICAgICBCVUlMVF9J Tl9DSUxLX0xFQVZFX0ZSQU1FLCBmYWxzZSk7CisKKyAgLyogdm9pZCBfX2Np bGtydHNfc3luYyAoX19jaWxrcnRzX3N0YWNrX2ZyYW1lICopOyAgKi8KKyAg Y2lsa19zeW5jX2ZuZGVjbCA9IGluc3RhbGxfYnVpbHRpbiAoIl9fY2lsa3J0 c19zeW5jIiwgZnB0cl9mdW4sCisJCQkJICAgICAgQlVJTFRfSU5fQ0lMS19T WU5DLCBmYWxzZSk7CisKKyAgLyogdm9pZCBfX2NpbGtydHNfZGV0YWNoIChf X2NpbGtydHNfc3RhY2tfZnJhbWUgKik7ICAqLworICBjaWxrX2RldGFjaF9m bmRlY2wgPSBpbnN0YWxsX2J1aWx0aW4gKCJfX2NpbGtydHNfZGV0YWNoIiwg ZnB0cl9mdW4sCisJCQkJCUJVSUxUX0lOX0NJTEtfREVUQUNILCBmYWxzZSk7 CisKKyAgLyogX19jaWxrcnRzX3JldGhyb3cgKHN0cnVjdCBzdGFja19mcmFt ZSAqKTsgICovCisgIGNpbGtfcmV0aHJvd19mbmRlY2wgPSBpbnN0YWxsX2J1 aWx0aW4gKCJfX2NpbGtydHNfcmV0aHJvdyIsIGZwdHJfZnVuLCAKKwkJCQkJ IEJVSUxUX0lOX0NJTEtfUkVUSFJPVywgZmFsc2UpOworCisgIC8qIF9fY2ls a3J0c19zYXZlX2ZwX2N0cmxfc3RhdGUgKF9fY2lsa3J0c19zdGFja19mcmFt ZSAqKTsgICovCisgIGNpbGtfc2F2ZV9mcF9mbmRlY2wgPSBpbnN0YWxsX2J1 aWx0aW4gKCJfX2NpbGtydHNfc2F2ZV9mcF9jdHJsX3N0YXRlIiwgCisJCQkJ CSBmcHRyX2Z1biwgQlVJTFRfSU5fQ0lMS19TQVZFX0ZQLAorCQkJCQkgZmFs c2UpOworfQorCisvKiBHZXQgdGhlIGFwcHJvcHJpYXRlIGZyYW1lIGFyZ3Vt ZW50cyBmb3IgQ0FMTCB0aGF0IGlzIG9mIHR5cGUgQ0FMTF9FWFBSLiAgKi8K Kworc3RhdGljIHRyZWUKK2dldF9mcmFtZV9hcmcgKHRyZWUgY2FsbCkKK3sK KyAgdHJlZSBhcmcsIGFyZ3R5cGU7CisKKyAgaWYgKGNhbGxfZXhwcl9uYXJn cyAoY2FsbCkgPCAxKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisKKyAgYXJn ID0gQ0FMTF9FWFBSX0FSRyAoY2FsbCwgMCk7CisgIGFyZ3R5cGUgPSBUUkVF X1RZUEUgKGFyZyk7CisgIGlmIChUUkVFX0NPREUgKGFyZ3R5cGUpICE9IFBP SU5URVJfVFlQRSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisgIGFyZ3R5 cGUgPSBUUkVFX1RZUEUgKGFyZ3R5cGUpOworICAKKyAgaWYgKGxhbmdfaG9v a3MudHlwZXNfY29tcGF0aWJsZV9wICYmCisgICAgICAhbGFuZ19ob29rcy50 eXBlc19jb21wYXRpYmxlX3AgKGFyZ3R5cGUsIGNpbGtfZnJhbWVfdHlwZV9k ZWNsKSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisgIC8qIElmIGl0IGlz IHBhc3NlZCBpbiBhcyBhbiBhZGRyZXNzLCB0aGVuIGp1c3QgdXNlIHRoZSB2 YWx1ZSBkaXJlY3RseSAKKyAgICAgc2luY2UgdGhlIGZ1bmN0aW9uIGlzIGlu bGluZWQuICAqLworICBpZiAoVFJFRV9DT0RFIChhcmcpID09IElORElSRUNU X1JFRiB8fCBUUkVFX0NPREUgKGFyZykgPT0gQUREUl9FWFBSKQorICAgIHJl dHVybiBUUkVFX09QRVJBTkQgKGFyZywgMCk7CisgIHJldHVybiBhcmc7Cit9 CisKKy8qIEV4cGFuZHMgdGhlIF9fY2lsa3J0c19wb3BfZnJhbWUgZnVuY3Rp b24gY2FsbCBzdG9yZWQgaW4gRVhQLgorICAgUmV0dXJucyBjb25zdDBfcnR4 LiAgKi8KKwordm9pZAorZXhwYW5kX2J1aWx0aW5fY2lsa19wb3BfZnJhbWUg KHRyZWUgZXhwKQoreworICB0cmVlIGZyYW1lID0gZ2V0X2ZyYW1lX2FyZyAo ZXhwKTsKKyAgdHJlZSBwYXJlbnQgPSBjaWxrX2RvdCAoZnJhbWUsIENJTEtf VElfRlJBTUVfUEFSRU5ULCAwKTsKKworICB0cmVlIGNsZWFyX3BhcmVudCA9 IGJ1aWxkMiAoTU9ESUZZX0VYUFIsIHZvaWRfdHlwZV9ub2RlLCBwYXJlbnQs CisJCQkgICAgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKHBhcmVudCks IDApKTsKKyAgZXhwYW5kX2V4cHIgKGNsZWFyX3BhcmVudCwgY29uc3QwX3J0 eCwgVk9JRG1vZGUsIEVYUEFORF9OT1JNQUwpOworCisgIC8qIER1cmluZyBM VE8sIHRoZSBpc19jaWxrX2Z1bmN0aW9uIGZsYWcgZ2V0cyBjbGVhcmVkLgor ICAgICBJZiBfX2NpbGtydHNfcG9wX2ZyYW1lIGlzIGNhbGxlZCwgdGhlbiB0 aGlzIGRlZmluaXRlbHkgbXVzdCBiZSBhCisgICAgIGNpbGsgZnVuY3Rpb24u ICAqLworICBpZiAoY2Z1bikKKyAgICBjZnVuLT5pc19jaWxrX2Z1bmN0aW9u ID0gMTsKK30KKworCisvKiBFeHBhbmRzIHRoZSBjaWxrX2RldGFjaCBmdW5j dGlvbiBjYWxsIHN0b3JlZCBpbiBFWFAuICBSZXR1cm5zIGNvbnN0MF9ydHgu ICAqLworCit2b2lkCitleHBhbmRfYnVpbHRpbl9jaWxrX2RldGFjaCAodHJl ZSBleHApCit7CisgIHJ0eCBpbnNuOworICB0cmVlIGZwdHIgPSBnZXRfZnJh bWVfYXJnIChleHApOworCisgIGlmIChmcHRyID09IE5VTExfVFJFRSkKKyAg ICByZXR1cm47CisKKyAgdHJlZSBwYXJlbnQgPSBjaWxrX2RvdCAoZnB0ciwg Q0lMS19USV9GUkFNRV9QQVJFTlQsIDApOworICB0cmVlIHdvcmtlciA9IGNp bGtfZG90IChmcHRyLCBDSUxLX1RJX0ZSQU1FX1dPUktFUiwgMCk7CisgIHRy ZWUgdGFpbCA9IGNpbGtfZG90ICh3b3JrZXIsIENJTEtfVElfV09SS0VSX1RB SUwsIDEpOworCisgIHJ0eCB3cmVnID0gZXhwYW5kX2V4cHIgKHdvcmtlciwg TlVMTF9SVFgsIFBtb2RlLCBFWFBBTkRfTk9STUFMKTsKKyAgaWYgKEdFVF9D T0RFICh3cmVnKSAhPSBSRUcpCisgICAgd3JlZyA9IGNvcHlfdG9fcmVnICh3 cmVnKTsKKyAgcnR4IHByZWcgPSBleHBhbmRfZXhwciAocGFyZW50LCBOVUxM X1JUWCwgUG1vZGUsIEVYUEFORF9OT1JNQUwpOworCisgIC8qIFRNUCA8LSBX T1JLRVIuVEFJTAorICAgICpUTVAgPC0gUEFSRU5UCisgICAgIFRNUCA8LSBU TVAgKyAxCisgICAgIFdPUktFUi5UQUlMIDwtIFRNUCAgICovCisKKyAgSE9T VF9XSURFX0lOVCB3b3JrZXJfdGFpbF9vZmZzZXQgPQorICAgIHRyZWVfbG93 X2NzdCAoREVDTF9GSUVMRF9PRkZTRVQgKGNpbGtfdHJlZXNbQ0lMS19USV9X T1JLRVJfVEFJTF0pLCAwKSArCisgICAgdHJlZV9sb3dfY3N0IChERUNMX0ZJ RUxEX0JJVF9PRkZTRVQgKGNpbGtfdHJlZXNbQ0lMS19USV9XT1JLRVJfVEFJ TF0pLCAwKSAvCisgICAgQklUU19QRVJfVU5JVDsKKyAgcnR4IHRtZW0wID0g Z2VuX3J0eF9NRU0gKFBtb2RlLAorCQkJICAgcGx1c19jb25zdGFudCAoUG1v ZGUsIHdyZWcsIHdvcmtlcl90YWlsX29mZnNldCkpOworICBzZXRfbWVtX2F0 dHJpYnV0ZXMgKHRtZW0wLCB0YWlsLCAwKTsKKyAgTUVNX05PVFJBUF9QICh0 bWVtMCkgPSAxOworICBnY2NfYXNzZXJ0IChNRU1fVk9MQVRJTEVfUCAodG1l bTApKTsKKyAgcnR4IHRyZWcgPSBjb3B5X3RvX21vZGVfcmVnIChQbW9kZSwg dG1lbTApOworICBydHggdG1lbTEgPSBnZW5fcnR4X01FTSAoUG1vZGUsIHRy ZWcpOworICBzZXRfbWVtX2F0dHJpYnV0ZXMgKHRtZW0xLCBUUkVFX1RZUEUg KFRSRUVfVFlQRSAodGFpbCkpLCAwKTsKKyAgTUVNX05PVFJBUF9QICh0bWVt MSkgPSAxOworICBlbWl0X21vdmVfaW5zbiAodG1lbTEsIHByZWcpOworICBl bWl0X21vdmVfaW5zbiAodHJlZywgcGx1c19jb25zdGFudCAoUG1vZGUsIHRy ZWcsIEdFVF9NT0RFX1NJWkUgKFBtb2RlKSkpOworCisgIC8qIFRoZXJlIGlz IGEgcmVsZWFzZSBiYXJyaWVyIChzdDgucmVsLCBtZW1iYXIgI1N0b3JlU3Rv cmUsCisgICAgIHNmZW5jZSwgbHdzeW5jLCBldGMuKSBiZXR3ZWVuIHRoZSB0 d28gc3RvcmVzLiAgT24geDg2CisgICAgIG5vcm1hbCB2b2xhdGlsZSBzdG9y ZXMgaGF2ZSBwcm9wZXIgc2VtYW50aWNzOyB0aGUgc2ZlbmNlCisgICAgIHdv dWxkIG9ubHkgYmUgbmVlZGVkIGZvciBub250ZW1wb3JhbCBzdG9yZXMgKHdo aWNoIHdlCisgICAgIGNvdWxkIGdlbmVyYXRlIHVzaW5nIHRoZSBzdG9yZW50 IG9wdGFiLCBmb3Igbm8gYmVuZWZpdAorICAgICBpbiB0aGlzIGNhc2UpLgor CisgICAgIFRoZSBwcmVkaWNhdGUgbWF5IHJldHVybiBmYWxzZSBldmVuIGZv ciBhIFJFRyBpZiB0aGlzIGlzCisgICAgIHRoZSBsaW1pdGVkIHJlbGVhc2Ug b3BlcmF0aW9uIHRoYXQgb25seSBzdG9yZXMgMC4gICovCisgIGVudW0gaW5z bl9jb2RlIGljb2RlID0gZGlyZWN0X29wdGFiX2hhbmRsZXIgKHN5bmNfbG9j a19yZWxlYXNlX29wdGFiLCBQbW9kZSk7IAorICBpZiAoaWNvZGUgIT0gQ09E RV9GT1Jfbm90aGluZworICAgICAgJiYgaW5zbl9kYXRhW2ljb2RlXS5vcGVy YW5kWzFdLnByZWRpY2F0ZSAodHJlZywgUG1vZGUpCisgICAgICAmJiAoaW5z biA9IEdFTl9GQ04gKGljb2RlKSAodG1lbTAsIHRyZWcpKSAhPSBOVUxMX1JU WCkKKyAgICBlbWl0X2luc24gKGluc24pOworICBlbHNlCisgICAgZW1pdF9t b3ZlX2luc24gKHRtZW0wLCB0cmVnKTsKKworICAvKiBUaGUgbWVtb3J5IGJh cnJpZXIgaW5zZXJ0ZWQgYWJvdmUgc2hvdWxkIG5vdCBwcmV2ZW50CisgICAg IHRoZSBsb2FkIG9mIGZsYWdzIGZyb20gYmVpbmcgbW92ZWQgYmVmb3JlIHRo ZSBzdG9yZXMsCisgICAgIGJ1dCBpbiBwcmFjdGljZSBpdCBkb2VzIGJlY2F1 c2UgaXQgaXMgaW1wbGVtZW50ZWQgd2l0aAorICAgICB1bnNwZWNfdm9sYXRp bGUuICBJbi1vcmRlciBSSVNDIG1hY2hpbmVzIHNob3VsZAorICAgICBleHBs aWNpdGx5IGxvYWQgZmxhZ3MgZWFybGllci4gICovCisKKyAgdHJlZSBmbGFn cyA9IGNpbGtfZG90IChmcHRyLCBDSUxLX1RJX0ZSQU1FX0ZMQUdTLCAwKTsK KyAgZXhwYW5kX2V4cHIgKGJ1aWxkMiAoTU9ESUZZX0VYUFIsIHZvaWRfdHlw ZV9ub2RlLCBmbGFncywKKwkJICAgICAgIGJ1aWxkMiAoQklUX0lPUl9FWFBS LCBUUkVFX1RZUEUgKGZsYWdzKSwgZmxhZ3MsCisJCQkgICAgICAgYnVpbGRf aW50X2NzdCAoVFJFRV9UWVBFIChmbGFncyksCisJCQkJCSAgICAgIENJTEtf RlJBTUVfREVUQUNIRUQpKSksCisJICAgICAgIGNvbnN0MF9ydHgsIFZPSURt b2RlLCBFWFBBTkRfTk9STUFMKTsKK30KZGlmZiAtLWdpdCBhL2djYy9jaWxr LmggYi9nY2MvY2lsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjAzODMxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvY2lsay5o CkBAIC0wLDAgKzEsOTQgQEAKKy8qIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo ZSBJbnRlbChSKSBDaWxrKFRNKSBQbHVzIHN1cHBvcnQKKyAgIFRoaXMgZmls ZSBjb250YWlucyBDaWxrIFN1cHBvcnQgZmlsZXMuCisgICBDb3B5cmlnaHQg KEMpIDIwMTMgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAg Q29udHJpYnV0ZWQgYnkgQmFsYWppIFYuIEl5ZXIgPGJhbGFqaS52Lml5ZXJA aW50ZWwuY29tPiwKKyAgICAgICAgICAgICAgICAgIEludGVsIENvcnBvcmF0 aW9uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0ND IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz LCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsIGJ1dAorICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAgIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLworCisjaWZuZGVmIEdDQ19DSUxLX0gKKyNkZWZpbmUgR0NDX0NJTEtf SAorCisjaW5jbHVkZSAidHJlZS5oIgorCisvKiBGcmFtZSBzdGF0dXMgYml0 cyBrbm93biB0byBjb21waWxlci4gICovCisjZGVmaW5lIENJTEtfRlJBTUVf U1RPTEVOICAgIDB4MDEKKyNkZWZpbmUgQ0lMS19GUkFNRV9VTlNZTkNIRUQg MHgwMgorI2RlZmluZSBDSUxLX0ZSQU1FX0RFVEFDSEVEICAweDA0CisjZGVm aW5lIENJTEtfRlJBTUVfRVhDRVBUSU5HIDB4MTAKKyNkZWZpbmUgQ0lMS19G UkFNRV9WRVJTSU9OICAgKDEgPDwgMjQpCisKK2VudW0gY2lsa190cmVlX2lu ZGV4ICB7CisvKiBBbGwgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgQ2ls ayBrZXl3b3Jkcy4gICovCisgIENJTEtfVElfRl9XT1JLRVIgPSAwLCAgICAg ICAgICAgICAgIC8qIF9fY2lsa3J0c19nZXRfd29ya2VyICgpLiAgKi8KKyAg Q0lMS19USV9GX1NZTkMsICAgICAgICAgICAgICAgICAgICAgLyogX19jaWxr cnRzX3N5bmMgKCkuICAqLworICBDSUxLX1RJX0ZfREVUQUNILCAgICAgICAg ICAgICAgICAgICAvKiBfX2NpbGtydHNfZGV0YWNoICguLi4pLiAgICovCisg IENJTEtfVElfRl9FTlRFUiwgICAgICAgICAgICAgICAgICAgIC8qIF9fY2ls a3J0c19lbnRlcl9mcmFtZSAoLi4uKS4gICovCisgIENJTEtfVElfRl9FTlRF Ul9GQVNULCAgICAgICAgICAgICAgIC8qIF9fY2lsa3J0c19lbnRlcl9mcmFt ZV9mYXN0ICguKS4gICovCisgIENJTEtfVElfRl9MRUFWRSwgICAgICAgICAg ICAgICAgICAgIC8qIF9fY2lsa3J0c19sZWF2ZV9mcmFtZSAoLi4uKS4gICov CisgIENJTEtfVElfRl9QT1AsICAgICAgICAgICAgICAgICAgICAgIC8qIF9f Y2lsa3J0c19wb3BfZnJhbWUgKC4uLikuICAqLworICBDSUxLX1RJX0ZfUkVU SFJPVywgICAgICAgICAgICAgICAgICAvKiBfX2NpbGtydHNfcmV0aHJvdyAo Li4uKS4gICovCisgIENJTEtfVElfRl9TQVZFX0ZQLCAgICAgICAgICAgICAg ICAgIC8qIF9fY2lsa3J0c19zYXZlX2ZwX2N0cmxfc3RhdGUgKC4uLikuICAq LworICAvKiBfX2NpbGtydHNfc3RhY2tfZnJhbWUgc3RydWN0IGZpZWxkcy4g ICovCisgIENJTEtfVElfRlJBTUVfRkxBR1MsICAgICAgICAgICAgICAgIC8q IHN0YWNrX2ZyYW1lLT5mbGFncy4gICovCisgIENJTEtfVElfRlJBTUVfUEFS RU5ULCAgICAgICAgICAgICAgIC8qIHN0YWNrX2ZyYW1lLT5wYXJlbnQuICAq LworICBDSUxLX1RJX0ZSQU1FX1dPUktFUiwgICAgICAgICAgICAgICAvKiBz dGFja19mcmFtZS0+d29ya2VyLiAgKi8KKyAgQ0lMS19USV9GUkFNRV9FWENF UFRJT04sICAgICAgICAgICAgLyogc3RhY2tfZnJhbWUtPmV4Y2VwdF9kYXRh LiAgKi8KKyAgQ0lMS19USV9GUkFNRV9DT05URVhULCAgICAgICAgICAgICAg Lyogc3RhY2tfZnJhbWUtPmNvbnRleHRbNF0uICAqLworICBDSUxLX1RJX0ZS QU1FX1BFRElHUkVFLCAgICAgICAgICAgICAvKiBzdGFja19mcmFtZS0+cGVk aWdyZWUuICAqLworCisgIC8qIF9fY2lsa3J0c193b3JrZXIgc3RydWN0IGZp ZWxkcy4gICovCisgIENJTEtfVElfV09SS0VSX0NVUiwgICAgICAgICAgICAg ICAgIC8qIHdvcmtlci0+Y3VycmVudF9zdGFja19mcmFtZS4gICovCisgIENJ TEtfVElfV09SS0VSX1RBSUwsICAgICAgICAgICAgICAgIC8qIHdvcmtlci0+ dGFpbC4gICovCisgIENJTEtfVElfV09SS0VSX1BFRElHUkVFLCAgICAgICAg ICAgIC8qIHdvcmtlci0+cGVkaWdyZWUuICAqLworCisgIC8qIF9fY2lsa3J0 c19wZWRpZ3JlZSBzdHJ1Y3QgZmllbGRzLiAgKi8KKyAgQ0lMS19USV9QRURJ R1JFRV9SQU5LLCAgICAgICAgICAgICAgLyogcGVkaWdyZWUtPnJhbmsuICAq LworICBDSUxLX1RJX1BFRElHUkVFX1BBUkVOVCwgICAgICAgICAgICAvKiBw ZWRpZ3JlZS0+cGFyZW50LiAgKi8KKyAgCisgIC8qIFR5cGVzLiAgKi8KKyAg Q0lMS19USV9GUkFNRV9UWVBFLCAgICAgICAgICAgICAgICAgLyogc3RydWN0 IF9fY2lsa3J0c19zdGFja19mcmFtZS4gICovCisgIENJTEtfVElfRlJBTUVf UFRSLCAgICAgICAgICAgICAgICAgIC8qIF9fY2lsa3J0c19zdGFja19mcmFt ZSAqLiAgKi8KKyAgQ0lMS19USV9XT1JLRVJfVFlQRSwgICAgICAgICAgICAg ICAgLyogc3RydWN0IF9fY2lsa3J0c193b3JrZXIuICAqLworICBDSUxLX1RJ X1BFRElHUkVFX1RZUEUsICAgICAgICAgICAgICAvKiBzdHJ1Y3QgX19jaWxr cnRzX3BlZGlncmVlLiAgKi8KKyAgQ0lMS19USV9NQVgKK307CisKK2V4dGVy biBHVFkgKCgpKSB0cmVlIGNpbGtfdHJlZXNbQ0lMS19USV9NQVhdOworCisj ZGVmaW5lIGNpbGtfd29ya2VyX2ZuZGVjbCAgICAgICAgICAgIGNpbGtfdHJl ZXNbQ0lMS19USV9GX1dPUktFUl0KKyNkZWZpbmUgY2lsa19zeW5jX2ZuZGVj bCAgICAgICAgICAgICAgY2lsa190cmVlc1tDSUxLX1RJX0ZfU1lOQ10KKyNk ZWZpbmUgY2lsa19zeW5jaGVkX2ZuZGVjbCAgICAgICAgICAgY2lsa190cmVl c1tDSUxLX1RJX0ZfU1lOQ0VEXQorI2RlZmluZSBjaWxrX2RldGFjaF9mbmRl Y2wgICAgICAgICAgICBjaWxrX3RyZWVzW0NJTEtfVElfRl9ERVRBQ0hdCisj ZGVmaW5lIGNpbGtfZW50ZXJfZm5kZWNsICAgICAgICAgICAgIGNpbGtfdHJl ZXNbQ0lMS19USV9GX0VOVEVSXQorI2RlZmluZSBjaWxrX2VudGVyX2Zhc3Rf Zm5kZWNsICAgICAgICBjaWxrX3RyZWVzW0NJTEtfVElfRl9FTlRFUl9GQVNU XQorI2RlZmluZSBjaWxrX2xlYXZlX2ZuZGVjbCAgICAgICAgICAgICBjaWxr X3RyZWVzW0NJTEtfVElfRl9MRUFWRV0KKyNkZWZpbmUgY2lsa19yZXRocm93 X2ZuZGVjbCAgICAgICAgICAgY2lsa190cmVlc1tDSUxLX1RJX0ZfUkVUSFJP V10KKyNkZWZpbmUgY2lsa19wb3BfZm5kZWNsICAgICAgICAgICAgICAgY2ls a190cmVlc1tDSUxLX1RJX0ZfUE9QXQorI2RlZmluZSBjaWxrX3NhdmVfZnBf Zm5kZWNsICAgICAgICAgICBjaWxrX3RyZWVzW0NJTEtfVElfRl9TQVZFX0ZQ XQorCisjZGVmaW5lIGNpbGtfd29ya2VyX3R5cGVfZm5kZWNsICAgICAgIGNp bGtfdHJlZXNbQ0lMS19USV9XT1JLRVJfVFlQRV0KKyNkZWZpbmUgY2lsa19m cmFtZV90eXBlX2RlY2wgICAgICAgICAgY2lsa190cmVlc1tDSUxLX1RJX0ZS QU1FX1RZUEVdCisjZGVmaW5lIGNpbGtfZnJhbWVfcHRyX3R5cGVfZGVjbCAg ICAgIGNpbGtfdHJlZXNbQ0lMS19USV9GUkFNRV9QVFJdCisjZGVmaW5lIGNp bGtfcGVkaWdyZWVfdHlwZV9kZWNsICAgICAgIGNpbGtfdHJlZXNbQ0lMS19U SV9QRURJR1JFRV9UWVBFXQorCitleHRlcm4gdm9pZCBleHBhbmRfYnVpbHRp bl9jaWxrX2RldGFjaCAodHJlZSk7CitleHRlcm4gdm9pZCBleHBhbmRfYnVp bHRpbl9jaWxrX3BvcF9mcmFtZSAodHJlZSk7CitleHRlcm4gdHJlZSBjaWxr X2Fycm93ICh0cmVlLCBpbnQsIGJvb2wpOworZXh0ZXJuIHRyZWUgY2lsa19k b3QgKHRyZWUsIGludCwgYm9vbCk7CitleHRlcm4gdm9pZCBjaWxrX2luaXRf YnVpbHRpbnMgKHZvaWQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9nY2MvY3Bw YnVpbHRpbi5jIGIvZ2NjL2NwcGJ1aWx0aW4uYwppbmRleCA3Y2UwMWNiLi45 ZTQ3NTFmIDEwMDY0NAotLS0gYS9nY2MvY3BwYnVpbHRpbi5jCisrKyBiL2dj Yy9jcHBidWlsdGluLmMKQEAgLTEwNSw2ICsxMDUsOCBAQCBkZWZpbmVfYnVp bHRpbl9tYWNyb3NfZm9yX2NvbXBpbGF0aW9uX2ZsYWdzIChjcHBfcmVhZGVy ICpwZmlsZSkKIAogICBjcHBfZGVmaW5lX2Zvcm1hdHRlZCAocGZpbGUsICJf X0ZJTklURV9NQVRIX09OTFlfXz0lZCIsCiAJCQlmbGFnX2Zpbml0ZV9tYXRo X29ubHkpOworICBpZiAoZmxhZ19lbmFibGVfY2lsa3BsdXMpCisgICAgY3Bw X2RlZmluZSAocGZpbGUsICJfX2NpbGs9MjAwIik7CiB9CiAKIApkaWZmIC0t Z2l0IGEvZ2NjL2RvYy9nZW5lcmljLnRleGkgYi9nY2MvZG9jL2dlbmVyaWMu dGV4aQppbmRleCBjYWNhYjAxLi5kMTMyOTZiIDEwMDY0NAotLS0gYS9nY2Mv ZG9jL2dlbmVyaWMudGV4aQorKysgYi9nY2MvZG9jL2dlbmVyaWMudGV4aQpA QCAtMzE1NSw2ICszMTU1LDMwIEBAIHNldmVyYWwgc3RhdGVtZW50cyBjaGFp bmVkIHRvZ2V0aGVyLgogVXNlZCB0byByZXByZXNlbnQgYSBAY29kZXticmVh a30gc3RhdGVtZW50LiAgVGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwKIGZpZWxk cy4KIAorQGl0ZW0gQ0lMS19TUEFXTl9TVE1UCisKK1VzZWQgdG8gcmVwcmVz ZW50IGEgc3Bhd25pbmcgZnVuY3Rpb24gaW4gdGhlIENpbGsgUGx1cyBsYW5n dWFnZSBleHRlbnNpb24uICAKK1RoaXMgdHJlZSBoYXMgb25lIGZpZWxkIHRo YXQgaG9sZHMgdGhlIG5hbWUgb2YgdGhlIHNwYXduaW5nIGZ1bmN0aW9uLgor QGNvZGV7X0NpbGtfc3Bhd259IGNhbiBiZSB3cml0dGVuIGluIEMgaW4gdGhl IGZvbGxvd2luZyB3YXk6CisKK0BzbWFsbGV4YW1wbGUKK0Bjb2Rle19DaWxr X3NwYXdufSA8ZnVuY3Rpb25fbmFtZT4gKDxwYXJhbWV0ZXJzPik7CitAZW5k IHNtYWxsZXhhbXBsZQorCitEZXRhaWxlZCBkZXNjcmlwdGlvbiBmb3IgdXNh Z2UgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgQGNvZGV7X0NpbGtfc3Bhd259IGNh biBiZSAKK2ZvdW5kIGF0IGh0dHA6Ly93d3cuY2lsa3BsdXMub3JnCisKK0Bp dGVtIENJTEtfU1lOQ19TVE1UCisKK1RoaXMgc3RhdGVtZW50IGlzIHBhcnQg b2YgdGhlIENpbGsgUGx1cyBsYW5ndWFnZSBleHRlbnNpb24uICBJdCBpbmRp Y2F0ZXMgdGhhdAordGhlIGN1cnJlbnQgZnVuY3Rpb24gY2Fubm90IGNvbnRp bnVlIGluIHBhcmFsbGVsIHdpdGggaXRzIHNwYXduZWQgY2hpbGRyZW4uICAK K1RoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGZpZWxkcy4gIEBjb2Rle19DaWxr X3N5bmN9IGNhbiBiZSB3cml0dGVuIGluIEMgaW4gdGhlIAorZm9sbG93aW5n IHdheToKKworQHNtYWxsZXhhbXBsZQorQGNvZGV7X0NpbGtfc3luY307CitA ZW5kIHNtYWxsZXhhbXBsZQorCiBAaXRlbSBDTEVBTlVQX1NUTVQKIAogVXNl ZCB0byByZXByZXNlbnQgYW4gYWN0aW9uIHRoYXQgc2hvdWxkIHRha2UgcGxh Y2UgdXBvbiBleGl0IGZyb20gdGhlCmRpZmYgLS1naXQgYS9nY2MvZG9jL3Bh c3Nlcy50ZXhpIGIvZ2NjL2RvYy9wYXNzZXMudGV4aQppbmRleCAwNDVmOTY0 Li5lN2UyOGY0IDEwMDY0NAotLS0gYS9nY2MvZG9jL3Bhc3Nlcy50ZXhpCisr KyBiL2djYy9kb2MvcGFzc2VzLnRleGkKQEAgLTEyNCwxMyArMTI0LDQ1IEBA IHRydWUsIHRoZW4gd2UgZXhwYW5kIHRoZW0gdXNpbmcgZWl0aGVyIEBjb2Rl e2V4cGFuZF9hcnJheV9ub3RhdGlvbl9leHByc30gb3IKIGluc2lkZSBjb25k aXRpb25zLCB0aGV5IGFyZSB0cmFuc2Zvcm1lZCB1c2luZyB0aGUgZnVuY3Rp b24gCiBAY29kZXtmaXhfY29uZGl0aW9uYWxfYXJyYXlfbm90YXRpb25zfS4g IFRoZSBDIGxhbmd1YWdlLXNwZWNpZmljIHJvdXRpbmVzIGFyZSAKIGxvY2F0 ZWQgaW4gQGZpbGV7Yy9jLWFycmF5LW5vdGF0aW9uLmN9IGFuZCB0aGUgZXF1 aXZhbGVudCBDKysgcm91dGluZXMgYXJlIGluIAotZmlsZSBAZmlsZXtjcC9j cC1hcnJheS1ub3RhdGlvbi5jfS4gIENvbW1vbiByb3V0aW5lcyBzdWNoIGFz IGZ1bmN0aW9ucyB0byAKLWluaXRpYWxpemUgYnVpbHRpbiBmdW5jdGlvbnMg YXJlIHN0b3JlZCBpbiBAZmlsZXthcnJheS1ub3RhdGlvbi1jb21tb24uY30u Cit0aGUgZmlsZSBAZmlsZXtjcC9jcC1hcnJheS1ub3RhdGlvbi5jfS4gIENv bW1vbiByb3V0aW5lcyBzdWNoIGFzIGZ1bmN0aW9ucyB0byAKK2luaXRpYWxp emUgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBzdG9yZWQgaW4gQGZpbGV7YXJy YXktbm90YXRpb24tY29tbW9uLmN9LgorCitAaXRlbSBDaWxrIEtleXdvcmRz OgorQGl0ZW1pemUgQGJ1bGxldCAKK0BpdGVtIEBjb2Rle19DaWxrX3NwYXdu fToKK1RoZSBAY29kZXtfQ2lsa19zcGF3bn0ga2V5d29yZCBpcyBwYXJzZWQg YW5kIHRoZSBmdW5jdGlvbiBpdCBjb250YWlucyBpcyBtYXJrZWQgCithcyBh IHNwYXduaW5nIGZ1bmN0aW9uLiAgVGhlIHNwYXduaW5nIGZ1bmN0aW9uIGlz IGNhbGxlZCB0aGUgc3Bhd25lci4gIEF0IAordGhlIGVuZCBvZiB0aGUgcGFy c2luZyBwaGFzZSwgYXBwcm9wcmlhdGUgYnVpbHQtaW4gZnVuY3Rpb25zIGFy ZSAKK2FkZGVkIHRvIHRoZSBzcGF3bmVyIHRoYXQgYXJlIGRlZmluZWQgaW4g dGhlIENpbGsgcnVudGltZS4gIFRoZSBhcHByb3ByaWF0ZSAKK2xvY2F0aW9u cyBvZiB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGUgaW50ZXJuYWwgc3RydWN0 dXJlcyBhcmUgZGV0YWlsZWQgaW4gCitAY29kZXtjaWxrX2luaXRfYnVpbHRp bnN9IGluIHRoZSBmaWxlIEBmaWxle2NpbGstY29tbW9uLmN9LiAgVGhlIHBv aW50ZXJzIHRvIAorQ2lsayBmdW5jdGlvbnMgYW5kIGZpZWxkcyBvZiBpbnRl cm5hbCBzdHJ1Y3R1cmVzIGFyZSBkZXNjcmliZWQgCitpbiBAZmlsZXtjaWxr Lmh9LiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGlu IAorQGZpbGV7Y2lsay1idWlsdGlucy5kZWZ9LgorCitEdXJpbmcgZ2ltcGxp ZmljYXRpb24sIGEgbmV3ICJzcGF3bi1oZWxwZXIiIGZ1bmN0aW9uIGlzIGNy ZWF0ZWQuICAKK1RoZSBzcGF3bmVkIGZ1bmN0aW9uIGlzIHJlcGxhY2VkIHdp dGggYSBzcGF3biBoZWxwZXIgZnVuY3Rpb24gaW4gdGhlIHNwYXduZXIuICAK K1RoZSBzcGF3bmVkIGZ1bmN0aW9uLWNhbGwgaXMgbW92ZWQgaW50byB0aGUg c3Bhd24gaGVscGVyLiAgVGhlIG1haW4gZnVuY3Rpb24KK3RoYXQgZG9lcyB0 aGVzZSB0cmFuc2Zvcm1hdGlvbnMgaXMgQGNvZGV7Z2ltcGxpZnlfY2lsa19z cGF3bn0gaW4KK0BmaWxle2MtZmFtaWx5L2NpbGsuY30uICBJbiB0aGUgc3Bh d24taGVscGVyLCB0aGUgZ2ltcGxpZmljYXRpb24gZnVuY3Rpb24gCitAY29k ZXtnaW1wbGlmeV9jYWxsX2V4cHJ9LCBpbnNlcnRzIGEgZnVuY3Rpb24gY2Fs bCBAY29kZXtfX2NpbGtydHNfZGV0YWNofS4KK1RoaXMgZnVuY3Rpb24gaXMg ZXhwYW5kZWQgYnkgQGNvZGV7YnVpbHRpbl9leHBhbmRfY2lsa19kZXRhY2h9 IGxvY2F0ZWQgaW4KK0BmaWxle2MtZmFtaWx5L2NpbGsuY30uCisKK0BpdGVt IEBjb2Rle19DaWxrX3N5bmN9OgorQGNvZGV7X0NpbGtfc3luY30gaXMgcGFy c2VkIGxpa2UgYSBrZXl3b3JkLiAgRHVyaW5nIGdpbXBsaWZpY2F0aW9uLCAK K3RoZSBmdW5jdGlvbiBAY29kZXtnaW1wbGlmeV9jaWxrX3N5bmN9IGluIEBm aWxle2MtZmFtaWx5L2NpbGsuY30sIHdpbGwgcmVwbGFjZQordGhpcyBrZXl3 b3JkIHdpdGggYSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgYXJlIHN0b3JlZCBp biB0aGUgQ2lsayBSdW50aW1lLiAgCitPbmUgb2YgdGhlIGludGVybmFsIGZ1 bmN0aW9ucyBpbnNlcnRlZCBkdXJpbmcgZ2ltcGxpZmljYXRpb24sIAorQGNv ZGV7X19jaWxrcnRzX3BvcF9mcmFtZX0gbXVzdCBiZSBleHBhbmRlZCBieSB0 aGUgY29tcGlsZXIgYW5kIGlzIAorZG9uZSBieSBAY29kZXtidWlsdGluX2V4 cGFuZF9jaWxrX3BvcF9mcmFtZX0gaW4gQGZpbGV7Y2lsay1jb21tb24uY30u CisKK0BlbmQgaXRlbWl6ZQogQGVuZCBpdGVtaXplCiAKLURldGFpbGVkIGlu Zm9ybWF0aW9uIGFib3V0IENpbGsgUGx1cyBhbmQgbGFuZ3VhZ2Ugc3BlY2lm aWNhdGlvbiBpcyBwcm92aWRlZCBpbiAKLUB3e0B1cmVme2h0dHA6Ly93d3cu Y2lsa3BsdXMub3JnL319LiAgSXQgaXMgd29ydGggbWVudGlvbmluZyB0aGF0 IHRoZSBjdXJyZW50IAotaW1wbGVtZW50YXRpb24gZm9sbG93cyBBQkkgMC45 LgorRG9jdW1lbnRhdGlvbiBhYm91dCBDaWxrIFBsdXMgYW5kIGxhbmd1YWdl IHNwZWNpZmljYXRpb24gaXMgcHJvdmlkZWQgdW5kZXIgdGhlCisiTGVhcm4i IHNlY3Rpb24gaW4gQHd7QHVyZWZ7aHR0cDovL3d3dy5jaWxrcGx1cy5vcmcv fX0uICBJdCBpcyB3b3J0aCBtZW50aW9uaW5nCit0aGF0IHRoZSBjdXJyZW50 IGltcGxlbWVudGF0aW9uIGZvbGxvd3MgQUJJIDEuMS4KIAogQG5vZGUgR2lt cGxpZmljYXRpb24gcGFzcwogQHNlY3Rpb24gR2ltcGxpZmljYXRpb24gcGFz cwpkaWZmIC0tZ2l0IGEvZ2NjL2Z1bmN0aW9uLmggYi9nY2MvZnVuY3Rpb24u aAppbmRleCBjNjUxZjUwLi5iZDIzOGVmIDEwMDY0NAotLS0gYS9nY2MvZnVu Y3Rpb24uaAorKysgYi9nY2MvZnVuY3Rpb24uaApAQCAtNTUyLDYgKzU1Miw5 IEBAIHN0cnVjdCBHVFkoKCkpIGZ1bmN0aW9uIHsKICAgLyogVmVjdG9yIG9m IGZ1bmN0aW9uIGxvY2FsIHZhcmlhYmxlcywgZnVuY3Rpb25zLCB0eXBlcyBh bmQgY29uc3RhbnRzLiAgKi8KICAgdmVjPHRyZWUsIHZhX2djPiAqbG9jYWxf ZGVjbHM7CiAKKyAgLyogSW4gYSBDaWxrIGZ1bmN0aW9uLCB0aGUgVkFSX0RF Q0wgZm9yIHRoZSBmcmFtZSBkZXNjcmlwdG9yLiAqLworICB0cmVlIGNpbGtf ZnJhbWVfZGVjbDsKKwogICAvKiBGb3IgbWQgZmlsZXMuICAqLwogCiAgIC8q IHRtLmggY2FuIHVzZSB0aGlzIHRvIHN0b3JlIHdoYXRldmVyIGl0IGxpa2Vz LiAgKi8KQEAgLTYwNyw2ICs2MTAsMTIgQEAgc3RydWN0IEdUWSgoKSkgZnVu Y3Rpb24gewogICAgICBlaXRoZXIgYXMgYSBzdWJyb3V0aW5lIG9yIGJ1aWx0 aW4uICAqLwogICB1bnNpZ25lZCBpbnQgY2FsbHNfYWxsb2NhIDogMTsKIAor ICAvKiBUaGlzIHdpbGwgaW5kaWNhdGUgd2hldGhlciBhIGZ1bmN0aW9uIGlz IGEgY2lsayBmdW5jdGlvbiAqLworICB1bnNpZ25lZCBpbnQgaXNfY2lsa19m dW5jdGlvbiA6IDE7CisKKyAgLyogTm9uemVybyBpZiB0aGlzIGlzIGEgQ2ls ayBmdW5jdGlvbiB0aGF0IHNwYXducy4gKi8KKyAgdW5zaWduZWQgaW50IGNh bGxzX2NpbGtfc3Bhd24gOiAxOworICAKICAgLyogTm9uemVybyBpZiBmdW5j dGlvbiBiZWluZyBjb21waWxlZCByZWNlaXZlcyBub25sb2NhbCBnb3Rvcwog ICAgICBmcm9tIG5lc3RlZCBmdW5jdGlvbnMuICAqLwogICB1bnNpZ25lZCBp bnQgaGFzX25vbmxvY2FsX2xhYmVsIDogMTsKZGlmZiAtLWdpdCBhL2djYy9n aW1wbGlmeS5jIGIvZ2NjL2dpbXBsaWZ5LmMKaW5kZXggNGQzOWQ1My4uZDM3 NDhlNSAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsaWZ5LmMKKysrIGIvZ2NjL2dp bXBsaWZ5LmMKQEAgLTQyLDYgKzQyLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJw b2ludGVyLXNldC5oIgogI2luY2x1ZGUgInNwbGF5LXRyZWUuaCIKICNpbmNs dWRlICJ2ZWMuaCIKKyNpbmNsdWRlICJjaWxrLmgiCiAKICNpbmNsdWRlICJs YW5naG9va3MtZGVmLmgiCS8qIEZJWE1FOiBmb3IgbGhkX3NldF9kZWNsX2Fz c2VtYmxlcl9uYW1lICovCiAjaW5jbHVkZSAidHJlZS1wYXNzLmgiCQkvKiBG SVhNRTogb25seSBmb3IgUFJPUF9naW1wbGVfYW55ICovCkBAIC03MDg2LDYg KzcwODcsMTkgQEAgZ2ltcGxpZnlfZXhwciAodHJlZSAqZXhwcl9wLCBnaW1w bGVfc2VxICpwcmVfcCwgZ2ltcGxlX3NlcSAqcG9zdF9wLAogICAgICAgZWxz ZSBpZiAocmV0ICE9IEdTX1VOSEFORExFRCkKIAlicmVhazsKIAorICAgICAg aWYgKGZsYWdfZW5hYmxlX2NpbGtwbHVzICYmIGxhbmdfaG9va3MuY2lsa3Bs dXMuY2lsa192YWxpZF9zcGF3biAoZXhwcl9wKSkKKwl7CisJICAvKiBJZiB0 aGVyZSBhcmUgZXJyb3JzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBleHBhbmRp bmcgdGhlCisJICAgICBfQ2lsa19zcGF3bi4gIEp1c3QgZ2ltcGxpZnkgbGlr ZSBhIG5vcm1hbCBjYWxsIGV4cHIuICAqLworCSAgaWYgKCFzZWVuX2Vycm9y ICgpKQorCSAgICB7CisJICAgICAgcmV0ID0gKGVudW0gZ2ltcGxpZnlfc3Rh dHVzKQorCQlsYW5nX2hvb2tzLmNpbGtwbHVzLmdpbXBsaWZ5X2NpbGtfc3Bh d24gKGV4cHJfcCwgcHJlX3AsIHBvc3RfcCk7CisJICAgICAgaWYgKHJldCAh PSBHU19VTkhBTkRMRUQpCisJCWNvbnRpbnVlOworCSAgICB9CisJfQorCiAg ICAgICAvKiBNYWtlIHN1cmUgdGhhdCBhbGwgdGhlIGNhc2VzIHNldCAncmV0 JyBhcHByb3ByaWF0ZWx5LiAgKi8KICAgICAgIHJldCA9IEdTX1VOSEFORExF RDsKICAgICAgIHN3aXRjaCAoVFJFRV9DT0RFICgqZXhwcl9wKSkKQEAgLTc3 MjIsNiArNzczNiwyOCBAQCBnaW1wbGlmeV9leHByICh0cmVlICpleHByX3As IGdpbXBsZV9zZXEgKnByZV9wLCBnaW1wbGVfc2VxICpwb3N0X3AsCiAJICAg IGJyZWFrOwogCSAgfQogCisJY2FzZSBDSUxLX1NZTkNfU1RNVDoKKwkgIHsK KwkgICAgaWYgKGZsYWdfZW5hYmxlX2NpbGtwbHVzKQorCSAgICAgIHsKKwkJ aWYgKCFjZnVuLT5jaWxrX2ZyYW1lX2RlY2wpCisJCSAgeworCQkgICAgZXJy b3JfYXQgKGlucHV0X2xvY2F0aW9uLCAiZXhwZWN0ZWQgX0NpbGtfc3Bhd24g YmVmb3JlICIKKwkJCSAgICAgICJfQ2lsa19zeW5jIik7CisJCSAgICByZXQg PSBHU19FUlJPUjsKKwkJICB9CisJCWVsc2UKKwkJICByZXQgPSAoZW51bSBn aW1wbGlmeV9zdGF0dXMpCisJCSAgICBsYW5nX2hvb2tzLmNpbGtwbHVzLmdp bXBsaWZ5X2NpbGtfc3luYyAoZXhwcl9wLCBwcmVfcCwKKwkJCQkJCQkgICAg cG9zdF9wKTsKKwkJYnJlYWs7CisJICAgICAgfQorCSAgICBlbHNlCisJICAg ICAgLyogX0NpbGtfc3luYyB3aXRob3V0IENpbGsgUGx1cyBlbmFibGluZyBz aG91bGQgYmUgY2F1Z2h0IGJ5CisJCSB0aGUgcGFyc2VyLiAgKi8KKwkgICAg ICBnY2NfdW5yZWFjaGFibGUgKCk7CisJICB9CisKIAlkZWZhdWx0OgogCSAg c3dpdGNoIChUUkVFX0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAoKmV4cHJfcCkp KQogCSAgICB7CmRpZmYgLS1naXQgYS9nY2MvaXBhLWlubGluZS1hbmFseXNp cy5jIGIvZ2NjL2lwYS1pbmxpbmUtYW5hbHlzaXMuYwppbmRleCA5YTM2Mjky Li43YzYzY2M4IDEwMDY0NAotLS0gYS9nY2MvaXBhLWlubGluZS1hbmFseXNp cy5jCisrKyBiL2djYy9pcGEtaW5saW5lLWFuYWx5c2lzLmMKQEAgLTE0MzMs NiArMTQzMyw5IEBAIGluaXRpYWxpemVfaW5saW5lX2ZhaWxlZCAoc3RydWN0 IGNncmFwaF9lZGdlICplKQogICAgIGUtPmlubGluZV9mYWlsZWQgPSBDSUZf UkVERUZJTkVEX0VYVEVSTl9JTkxJTkU7CiAgIGVsc2UgaWYgKGUtPmNhbGxf c3RtdF9jYW5ub3RfaW5saW5lX3ApCiAgICAgZS0+aW5saW5lX2ZhaWxlZCA9 IENJRl9NSVNNQVRDSEVEX0FSR1VNRU5UUzsKKyAgZWxzZSBpZiAoZmxhZ19l bmFibGVfY2lsa3BsdXMgJiYgY2Z1biAmJiBjZnVuLT5jYWxsc19jaWxrX3Nw YXduKQorICAgIC8qIFdlIGNhbid0IGlubGluZSBpZiB0aGUgZnVuY3Rpb24g aXMgc3Bhd2luZyBhIGZ1bmN0aW9uLiAgKi8KKyAgICBlLT5pbmxpbmVfZmFp bGVkID0gQ0lGX0ZVTkNUSU9OX05PVF9JTkxJTkFCTEU7CiAgIGVsc2UKICAg ICBlLT5pbmxpbmVfZmFpbGVkID0gQ0lGX0ZVTkNUSU9OX05PVF9DT05TSURF UkVEOwogfQpkaWZmIC0tZ2l0IGEvZ2NjL2lwYS1pbmxpbmUuYyBiL2djYy9p cGEtaW5saW5lLmMKaW5kZXggNmVlZGUwZC4uOTdjNDYzMiAxMDA2NDQKLS0t IGEvZ2NjL2lwYS1pbmxpbmUuYworKysgYi9nY2MvaXBhLWlubGluZS5jCkBA IC0yNTgsNyArMjU4LDkgQEAgY2FuX2lubGluZV9lZGdlX3AgKHN0cnVjdCBj Z3JhcGhfZWRnZSAqZSwgYm9vbCByZXBvcnQpCiAgICAgICBlLT5pbmxpbmVf ZmFpbGVkID0gQ0lGX0JPRFlfTk9UX0FWQUlMQUJMRTsKICAgICAgIGlubGlu YWJsZSA9IGZhbHNlOwogICAgIH0KLSAgZWxzZSBpZiAoIWlubGluZV9zdW1t YXJ5IChjYWxsZWUpLT5pbmxpbmFibGUpCisgIGVsc2UgaWYgKCFpbmxpbmVf c3VtbWFyeSAoY2FsbGVlKS0+aW5saW5hYmxlCisJICAgfHwgKGZsYWdfZW5h YmxlX2NpbGtwbHVzICYmIGNhbGxlcl9jZnVuIAorCSAgICAgICAmJiBjYWxs ZXJfY2Z1bi0+Y2FsbHNfY2lsa19zcGF3bikpCiAgICAgewogICAgICAgZS0+ aW5saW5lX2ZhaWxlZCA9IENJRl9GVU5DVElPTl9OT1RfSU5MSU5BQkxFOwog ICAgICAgaW5saW5hYmxlID0gZmFsc2U7CmRpZmYgLS1naXQgYS9nY2MvaXJh LmMgYi9nY2MvaXJhLmMKaW5kZXggZWUwYzVlOC4uNTgyNjM0NCAxMDA2NDQK LS0tIGEvZ2NjL2lyYS5jCisrKyBiL2djYy9pcmEuYwpAQCAtMTg3Myw2ICsx ODczLDkgQEAgaXJhX3NldHVwX2VsaW1pbmFibGVfcmVnc2V0IChib29sIGZy b21faXJhX3ApCiAgICAgICAgfHwgKGZsYWdfc3RhY2tfY2hlY2sgJiYgU1RB Q0tfQ0hFQ0tfTU9WSU5HX1NQKQogICAgICAgIHx8IGNydGwtPmFjY2Vzc2Vz X3ByaW9yX2ZyYW1lcwogICAgICAgIHx8IGNydGwtPnN0YWNrX3JlYWxpZ25f bmVlZGVkCisgICAgICAgLyogV2UgbmVlZCBhIGZyYW1lIHBvaW50ZXIgZm9y IGFsbCBDaWxrIFBsdXMgZnVuY3Rpb25zIHRoYXQgdXNlCisJICBDaWxrIGtl eXdvcmRzLiAgKi8KKyAgICAgICB8fCAoZmxhZ19lbmFibGVfY2lsa3BsdXMg JiYgY2Z1bi0+aXNfY2lsa19mdW5jdGlvbikKICAgICAgICB8fCB0YXJnZXRt LmZyYW1lX3BvaW50ZXJfcmVxdWlyZWQgKCkpOwogCiAgIGlmIChmcm9tX2ly YV9wICYmIGlyYV91c2VfbHJhX3ApCmRpZmYgLS1naXQgYS9nY2MvbGFuZ2hv b2tzLWRlZi5oIGIvZ2NjL2xhbmdob29rcy1kZWYuaAppbmRleCA3YmQyZTk5 Li5kYzMyYWY3IDEwMDY0NAotLS0gYS9nY2MvbGFuZ2hvb2tzLWRlZi5oCisr KyBiL2djYy9sYW5naG9va3MtZGVmLmgKQEAgLTIxMSw2ICsyMTEsMjQgQEAg ZXh0ZXJuIHRyZWUgbGhkX21ha2Vfbm9kZSAoZW51bSB0cmVlX2NvZGUpOwog I2RlZmluZSBMQU5HX0hPT0tTX09NUF9DTEFVU0VfRFRPUiBob29rX3RyZWVf dHJlZV90cmVlX251bGwKICNkZWZpbmUgTEFOR19IT09LU19PTVBfRklOSVNI X0NMQVVTRSBob29rX3ZvaWRfdHJlZQogCitleHRlcm4gdm9pZCBsaGRfaW5z dGFsbF9ib2R5X3dpdGhfZnJhbWVfY2xlYW51cCAodHJlZSwgdHJlZSk7Citl eHRlcm4gYm9vbCBsaGRfY2lsa192YWxpZF9zcGF3biAodHJlZSAqKTsKKyNk ZWZpbmUgTEFOR19IT09LU19DSUxLUExVU19TUEFXTkFCTEVfQ1RPUiBob29r X2Jvb2xfdHJlZV9mYWxzZQorI2RlZmluZSBMQU5HX0hPT0tTX0NJTEtQTFVT X1JFQ09HTklaRV9TUEFXTiBob29rX2Jvb2xfdHJlZV9mYWxzZQorI2RlZmlu ZSBMQU5HX0hPT0tTX0NJTEtQTFVTX1ZBTElEX1NQQVdOIGxoZF9jaWxrX3Zh bGlkX3NwYXduCisjZGVmaW5lIExBTkdfSE9PS1NfQ0lMS1BMVVNfRlJBTUVf Q0xFQU5VUCBsaGRfaW5zdGFsbF9ib2R5X3dpdGhfZnJhbWVfY2xlYW51cAor I2RlZmluZSBMQU5HX0hPT0tTX0NJTEtQTFVTX0dJTVBMSUZZX1NQQVdOIGxo ZF9naW1wbGlmeV9leHByCisjZGVmaW5lIExBTkdfSE9PS1NfQ0lMS1BMVVNf R0lNUExJRllfU1lOQyBsaGRfZ2ltcGxpZnlfZXhwcgorCisjZGVmaW5lIExB TkdfSE9PS1NfQ0lMS1BMVVMgewkgICAgICAgIFwKKyAgTEFOR19IT09LU19D SUxLUExVU19TUEFXTkFCTEVfQ1RPUiwJXAorICBMQU5HX0hPT0tTX0NJTEtQ TFVTX1JFQ09HTklaRV9TUEFXTiwJXAorICBMQU5HX0hPT0tTX0NJTEtQTFVT X1ZBTElEX1NQQVdOLAlcCisgIExBTkdfSE9PS1NfQ0lMS1BMVVNfRlJBTUVf Q0xFQU5VUCwJXAorICBMQU5HX0hPT0tTX0NJTEtQTFVTX0dJTVBMSUZZX1NQ QVdOLAlcCisgIExBTkdfSE9PS1NfQ0lMS1BMVVNfR0lNUExJRllfU1lOQwlc Cit9CisKICNkZWZpbmUgTEFOR19IT09LU19ERUNMUyB7IFwKICAgTEFOR19I T09LU19HTE9CQUxfQklORElOR1NfUCwgXAogICBMQU5HX0hPT0tTX1BVU0hE RUNMLCBcCkBAIC0yODgsNiArMzA2LDcgQEAgZXh0ZXJuIHZvaWQgbGhkX2Vu ZF9zZWN0aW9uICh2b2lkKTsKICAgTEFOR19IT09LU19UUkVFX0RVTVBfSU5J VElBTElaRVIsIFwKICAgTEFOR19IT09LU19ERUNMUywgXAogICBMQU5HX0hP T0tTX0ZPUl9UWVBFU19JTklUSUFMSVpFUiwgXAorICBMQU5HX0hPT0tTX0NJ TEtQTFVTLCBcCiAgIExBTkdfSE9PS1NfTFRPLCBcCiAgIExBTkdfSE9PS1Nf R0VUX0lOTkVSTU9TVF9HRU5FUklDX1BBUk1TLCBcCiAgIExBTkdfSE9PS1Nf R0VUX0lOTkVSTU9TVF9HRU5FUklDX0FSR1MsIFwKZGlmZiAtLWdpdCBhL2dj Yy9sYW5naG9va3MuYyBiL2djYy9sYW5naG9va3MuYwppbmRleCA5MDFmOWI0 Li4xNTY0YTEyIDEwMDY0NAotLS0gYS9nY2MvbGFuZ2hvb2tzLmMKKysrIGIv Z2NjL2xhbmdob29rcy5jCkBAIC02NjYsMyArNjY2LDE5IEBAIGxoZF9lbmRf c2VjdGlvbiAodm9pZCkKICAgICAgIHNhdmVkX3NlY3Rpb24gPSBOVUxMOwog ICAgIH0KIH0KKworLyogRW1wdHkgZnVuY3Rpb24gdGhhdCBpcyByZXBsYWNl ZCB3aXRoIGFwcHJvcHJpYXRlIGxhbmd1YWdlIGRlcGVuZGVudAorICAgZnJh bWUgY2xlYW51cCBmdW5jdGlvbiBmb3IgX0NpbGtfc3Bhd24uICAqLworCit2 b2lkCitsaGRfaW5zdGFsbF9ib2R5X3dpdGhfZnJhbWVfY2xlYW51cCAodHJl ZSwgdHJlZSkKK3sKKyAgcmV0dXJuOworfQorCisvKiBFbXB0eSBmdW5jdGlv biB0byBoYW5kbGUgY2lsa192YWxpZF9zcGF3bi4gICovCitib29sCitsaGRf Y2lsa192YWxpZF9zcGF3biAodHJlZSAqKQoreworICByZXR1cm4gZmFsc2U7 Cit9CmRpZmYgLS1naXQgYS9nY2MvbGFuZ2hvb2tzLmggYi9nY2MvbGFuZ2hv b2tzLmgKaW5kZXggODBkNGVmMy4uOWI4MTI5YSAxMDA2NDQKLS0tIGEvZ2Nj L2xhbmdob29rcy5oCisrKyBiL2djYy9sYW5naG9va3MuaApAQCAtMTM2LDYg KzEzNiwzNSBAQCBzdHJ1Y3QgbGFuZ19ob29rc19mb3JfdHlwZXMKICAgdHJl ZSAoKnJlY29uc3RydWN0X2NvbXBsZXhfdHlwZSkgKHRyZWUsIHRyZWUpOwog fTsKIAorLyogTGFuZ3VhZ2UgaG9va3MgcmVsYXRlZCB0byBDaWxrIFBsdXMu ICAqLworCitzdHJ1Y3QgbGFuZ19ob29rc19mb3JfY2lsa3BsdXMKK3sKKyAg LyogUmV0dXJucyB0cnVlIGlmIHRoZSBjb25zdHJ1Y3RvciBpbiBDKysgaXMg c3Bhd25hYmxlLiAgRGVmYXVsdCBpcyBmYWxzZS4KKyAgICAgVGhpcyBmdW5j dGlvbiBpcyBvbmx5IHVzZWQgYnkgQysrLiAgKi8KKyAgYm9vbCAoKnNwYXdu YWJsZV9jb25zdHJ1Y3RvcikgKHRyZWUpOworCisgIC8qIFJldHVybnMgdHJ1 ZSBpZiBpdCBpcyBhYmxlIHRvIHJlY29nbml6ZSBhIHNwYXduZWQgZnVuY3Rp b24gY2FsbCAKKyAgICAgaW5zaWRlIHRoZSBsYW5ndWFnZS1kZXBlbmRlbnQg dHJlZXMgKHVzZWQgYnkgQysrIGZyb250LWVuZCBvbmx5KS4gICovCisgIGJv b2wgKCpyZWNvZ25pemVfc3Bhd24pICh0cmVlKTsKKyAgCisgIC8qIFJldHVy bnMgdHJ1ZSBpZiB0aGUgY2FsbCBleHByIHBhc3NlZCBpcyBhIHNwYXduZWQg ZnVuY3Rpb24gY2FsbC4gICovCisgIGJvb2wgKCpjaWxrX3ZhbGlkX3NwYXdu KSAodHJlZSAqKTsKKworICAvKiBGdW5jdGlvbiB0byBhZGQgdGhlIGNsZWFu IHVwIGZ1bmN0aW9ucyBhZnRlciBzcGF3bi4gIFRoZSByZWFzb24gd2h5IGl0 IGlzCisgICAgIGxhbmd1YWdlIGRlcGVuZGVudCBpcyBiZWNhdXNlIGluIEMr KywgaXQgbXVzdCBoYW5kbGUgZXhjZXB0aW9ucy4gICovCisgIHZvaWQgKCpp bnN0YWxsX2JvZHlfd2l0aF9mcmFtZV9jbGVhbnVwKSAodHJlZSwgdHJlZSk7 CisKKyAgLyogRnVuY3Rpb24gdG8gZ2ltcGxpZnkgYSBzcGF3bmVkIGZ1bmN0 aW9uIGNhbGwuICBSZXR1cm5zIGVudW0gZ2ltcGxpZnkKKyAgICAgc3RhdHVz LCBidXQgYXMgbWVudGlvbmVkIGluIGEgcHJldmlvdXMgY29tbWVudCwgd2Ug Y2FuJ3Qgc2VlIHRoYXQgdHlwZSAKKyAgICAgaGVyZSwgc28ganVzdCByZXR1 cm4gYW4gaW50LiAgKi8KKyAgaW50ICgqZ2ltcGxpZnlfY2lsa19zcGF3bikg KHRyZWUgKiwgZ2ltcGxlX3NlcSAqLCBnaW1wbGVfc2VxICopOworCisgIC8q IEZ1bmN0aW9uIHRvIGdpbXBsaWZ5IF9DaWxrX3N5bmMuICBTYW1lIHJhdGlv bmFsZSBhcyBhYm92ZSBmb3IgcmV0dXJuaW5nCisgICAgIGludC4gICovCisg IGludCAoKmdpbXBsaWZ5X2NpbGtfc3luYykgKHRyZWUgKiwgZ2ltcGxlX3Nl cSAqLCBnaW1wbGVfc2VxICopOworfTsKKwogLyogTGFuZ3VhZ2UgaG9va3Mg cmVsYXRlZCB0byBkZWNscyBhbmQgdGhlIHN5bWJvbCB0YWJsZS4gICovCiAK IHN0cnVjdCBsYW5nX2hvb2tzX2Zvcl9kZWNscwpAQCAtNDA1LDYgKzQzNCw4 IEBAIHN0cnVjdCBsYW5nX2hvb2tzCiAKICAgc3RydWN0IGxhbmdfaG9va3Nf Zm9yX3R5cGVzIHR5cGVzOwogCisgIHN0cnVjdCBsYW5nX2hvb2tzX2Zvcl9j aWxrcGx1cyBjaWxrcGx1czsKKyAgCiAgIHN0cnVjdCBsYW5nX2hvb2tzX2Zv cl9sdG8gbHRvOwogCiAgIC8qIFJldHVybnMgYSBUUkVFX1ZFQyBvZiB0aGUg Z2VuZXJpYyBwYXJhbWV0ZXJzIG9mIGFuIGluc3RhbnRpYXRpb24gb2YKZGlm ZiAtLWdpdCBhL2djYy9sdG8vTWFrZS1sYW5nLmluIGIvZ2NjL2x0by9NYWtl LWxhbmcuaW4KaW5kZXggNWYyZjQ3NS4uZmQ5OGVjNSAxMDA2NDQKLS0tIGEv Z2NjL2x0by9NYWtlLWxhbmcuaW4KKysrIGIvZ2NjL2x0by9NYWtlLWxhbmcu aW4KQEAgLTc4LDcgKzc4LDcgQEAgJChMVE9fRVhFKTogJChMVE9fT0JKUykg JChCQUNLRU5EKSAkKExJQkRFUFMpCiBsdG8vbHRvLWxhbmcubzogbHRvL2x0 by1sYW5nLmMgJChDT05GSUdfSCkgY29yZXR5cGVzLmggZGVidWcuaCBcCiAJ ZmxhZ3MuaCAkKEdHQ19IKSBsYW5naG9va3MuaCAkKExBTkdIT09LU19ERUZf SCkgJChTWVNURU1fSCkgXAogCSQoVEFSR0VUX0gpICQoTFRPX0gpICQoR0lN UExFX0gpIGd0eXBlLWx0by5oIGd0LWx0by1sdG8tbGFuZy5oIFwKLQkkKEVY UFJfSCkgJChMVE9fU1RSRUFNRVJfSCkKKwkkKEVYUFJfSCkgJChMVE9fU1RS RUFNRVJfSCkgY2lsay5oCiBsdG8vbHRvLm86IGx0by9sdG8uYyAkKENPTkZJ R19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCAkKE9QVFNfSCkgXAogCXRv cGxldi5oICQoVFJFRV9IKSAkKFRSRUVfRkxPV19IKSAkKERJQUdOT1NUSUNf Q09SRV9IKSAkKFRNX0gpIFwKIAkkKENHUkFQSF9IKSAkKEdHQ19IKSB0cmVl LXNzYS1vcGVyYW5kcy5oICQoVFJFRV9QQVNTX0gpIFwKZGlmZiAtLWdpdCBh L2djYy9sdG8vbHRvLWxhbmcuYyBiL2djYy9sdG8vbHRvLWxhbmcuYwppbmRl eCA4N2E3NTZkLi5jZWYwZTI4IDEwMDY0NAotLS0gYS9nY2MvbHRvL2x0by1s YW5nLmMKKysrIGIvZ2NjL2x0by9sdG8tbGFuZy5jCkBAIC0zNSw2ICszNSw3 IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCiAjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCiAjaW5j bHVkZSAidG9wbGV2LmgiCiAjaW5jbHVkZSAibHRvLXN0cmVhbWVyLmgiCisj aW5jbHVkZSAiY2lsay5oIgogCiBzdGF0aWMgdHJlZSBsdG9fdHlwZV9mb3Jf c2l6ZSAodW5zaWduZWQsIGludCk7CiAKQEAgLTExODgsNiArMTE4OSw5IEBA IGx0b19pbml0ICh2b2lkKQogICAgICAgbHRvX2RlZmluZV9idWlsdGlucyAo dmFfbGlzdF90eXBlX25vZGUsCiAJCQkgICBidWlsZF9yZWZlcmVuY2VfdHlw ZSAodmFfbGlzdF90eXBlX25vZGUpKTsKICAgICB9CisgIAorICBpZiAoZmxh Z19lbmFibGVfY2lsa3BsdXMpCisgICAgY2lsa19pbml0X2J1aWx0aW5zICgp OwogCiAgIHRhcmdldG0uaW5pdF9idWlsdGlucyAoKTsKICAgYnVpbGRfY29t bW9uX2J1aWx0aW5fbm9kZXMgKCk7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svY29tcG91bmRfY2lsa19z cGF3bi5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vY2lsay1wbHVz L0NLL2NvbXBvdW5kX2NpbGtfc3Bhd24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi42ZWQ1NWUyCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NLL2NvbXBv dW5kX2NpbGtfc3Bhd24uYwpAQCAtMCwwICsxLDI2IEBACisvKiB7IGRnLWRv IGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZmNpbGtwbHVzIiB9 ICovCisKKy8qIDxmZWF0dXJlPgorICAgQSBwcm9ncmFtIGlzIGNvbnNpZGVy ZWQgaWxsIGZvcm1lZCBpZiB0aGUgX0NpbGtfc3Bhd24gZm9ybSBvZiB0aGlz CisgICAgZXhwcmVzc2lvbiBhcHBlYXJzIG90aGVyIHRoYW4gaW4gb25lIG9m IHRoZSBmb2xsb3dpbmcgY29udGV4dHM6CisgICAgYXMgdGhlIGVudGlyZSBi b2R5IG9mIGFuIGV4cHJlc3Npb24gc3RhdGVtZW50LAorICAgIGFzIHRoZSBl bnRpcmUgcmlnaHQgaGFuZCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQgZXhwcmVz c2lvbiB0aGF0IGlzIHRoZSBlbnRpcmUKKyAgICBib2R5IG9mIGFuIGV4cHJl c3Npb24gc3RhdGVtZW50LCBvciBhcyB0aGUgZW50aXJlIGluaXRpYWxpemVy LWNsYXVzZSBpbiBhIAorICAgIHNpbXBsZSBkZWNsYXJhdGlvbi4KKyAgIDwv ZmVhdHVyZT4KKyovCisKK2ludCBzcGF3bl9mdW5jIChpbnQgYXJnKQorewor ICByZXR1cm4gYXJnICsgMTsKK30KKworaW50IGNoZWNrKCkKK3sKKyAgaW50 IHo7CisgIHogPSAyMywgX0NpbGtfc3Bhd24gc3Bhd25fZnVuYyAoMyksIDM0 MjQ7IC8qIHsgZGctZXJyb3IgInNwYXduZWQgZnVuY3Rpb24gY2FsbCBjYW5u b3QgYmUgcGFydCBvZiBhIGNvbW1hIGV4cHJlc3Npb24iIH0gKi8KKyAgMjMs IHNwYXduX2Z1bmMgKDUpLCBfQ2lsa19zcGF3biBzcGF3bl9mdW5jICgzKTsg LyogeyBkZy1lcnJvciAic3Bhd25lZCBmdW5jdGlvbiBjYWxsIGNhbm5vdCBi ZSBwYXJ0IG9mIGEgY29tbWEgZXhwcmVzc2lvbiIgfSAqLworICBfQ2lsa19z cGF3biBzcGF3bl9mdW5jICgwKSwgX0NpbGtfc3Bhd24gc3Bhd25fZnVuYyAo MyksIDMsIHNwYXduX2Z1bmMgKDApOyAvKiB7IGRnLWVycm9yICJzcGF3bmVk IGZ1bmN0aW9uIGNhbGwgY2Fubm90IGJlIHBhcnQgb2YgYSBjb21tYSBleHBy ZXNzaW9uIiB9ICovCisgIHJldHVybiBfQ2lsa19zcGF3biBzcGF3bl9mdW5j ICgzKSwgMjM7IC8qIHsgZGctZXJyb3IgInNwYXduZWQgZnVuY3Rpb24gY2Fs bCBjYW5ub3QgYmUgcGFydCBvZiBhIGNvbW1hIGV4cHJlc3Npb24iIH0gKi8K K30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2Np bGstcGx1cy9DSy9jb25jZWNfY2lsa19zcGF3bi5jIGIvZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NLL2NvbmNlY19jaWxrX3NwYXdu LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkNTQ3 OAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29t bW9uL2NpbGstcGx1cy9DSy9jb25jZWNfY2lsa19zcGF3bi5jCkBAIC0wLDAg KzEsMjAgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1mY2lsa3BsdXMiIH0gKi8KKworLyogPGZlYXR1cmU+IENvbnNl Y3V0aXZlIF9DaWxrX3NwYXduIHRva2VucyBhcmUgbm90IHBlcm1pdHRlZAor ICAgPC9mZWF0dXJlPgorKi8KKworaW50IHNwYXduX2Z1bmMgKGludCBhcmcp Cit7CisgIHJldHVybiBhcmcgKyAxOworfQorCit2b2lkIGZ1bmMgKCkKK3sK KyAgaW50IGE7CisgIGEgPSBfQ2lsa19zcGF3biBfQ2lsa19zcGF3biBzcGF3 bl9mdW5jICg0KTsgLyogeyBkZy1lcnJvciAiY29uc2VjdXRpdmUgX0NpbGtf c3Bhd24ga2V5d29yZHMgYXJlIG5vdCBwZXJtaXR0ZWQiIH0gKi8KKyAgYSA9 IF9DaWxrX3NwYXduIF9DaWxrX3NwYXduIF9DaWxrX3NwYXduIHNwYXduX2Z1 bmMgKDQpOyAvKiB7IGRnLWVycm9yICJjb25zZWN1dGl2ZSBfQ2lsa19zcGF3 biBrZXl3b3JkcyBhcmUgbm90IHBlcm1pdHRlZCIgfSAqLworICBhID0gX0Np bGtfc3Bhd24gX0NpbGtfc3Bhd24gX0NpbGtfc3Bhd24gX0NpbGtfc3Bhd24g c3Bhd25fZnVuYyAoNCk7IC8qIHsgZGctZXJyb3IgImNvbnNlY3V0aXZlIF9D aWxrX3NwYXduIGtleXdvcmRzIGFyZSBub3QgcGVybWl0dGVkIiB9ICovCisg IHJldHVybjsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL2NpbGstcGx1cy9DSy9maWIuYyBiL2djYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL2NpbGstcGx1cy9DSy9maWIuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi4xOTYxNGZjCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NLL2Zp Yi5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICov CisvKiB7IGRnLWRvIHJ1biAgeyB0YXJnZXQgeyBpPzg2LSotKiB4ODZfNjQt Ki0qIGFybSotKi0qIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mY2ls a3BsdXMiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWxjaWxrcnRzIiB7IHRh cmdldCB7IGk/ODYtKi0qIHg4Nl82NC0qLSogYXJtKi0qLSogfSB9IH0gKi8K KworI2lmIEhBVkVfSU8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisK K2ludCBmaWIgICAgICAgIChpbnQpOworaW50IGZpYl9zZXJpYWwgKGludCk7 CisKK2ludCBtYWluKHZvaWQpCit7CisgIGludCBpaSA9IDAsIGVycm9yID0g MDsKKyAgaW50IGZpYl9yZXN1bHRbNDFdLCBmaWJfc2VyaWFsX3Jlc3VsdFs0 MV07CisjaWYgSEFWRV9JTworCisgIGZvciAoaWkgPSAwOyBpaSA8PSA0MDsg aWkrKykKKyAgICBwcmludGYoImZpYiAoJTJkKSA9ICUxMGRcbiIsIGlpLCBm aWIgKGlpKSk7CisjZWxzZQorICBmb3IgKGlpID0gMDsgaWkgPD0gNDA7IGlp KyspCisgICAgeworICAgICAgZmliX3Jlc3VsdFtpaV0gICAgICAgID0gZmli IChpaSk7CisgICAgICBmaWJfc2VyaWFsX3Jlc3VsdFtpaV0gPSBmaWJfc2Vy aWFsIChpaSk7CisgICAgfQorCisgIGZvciAoaWkgPSAwOyBpaSA8PSA0MDsg aWkrKykKKyAgICB7CisgICAgICBpZiAoZmliX3Jlc3VsdFtpaV0gIT0gZmli X3NlcmlhbF9yZXN1bHRbaWldKQorCWVycm9yID0gMTsKKyAgICB9CisjZW5k aWYKKyAgcmV0dXJuIGVycm9yOworfQorCitpbnQgZmliX3NlcmlhbCAoaW50 IG4pCit7CisgIGludCB4ID0gMCwgeSA9IDA7CisgIGlmIChuIDwgMikKKyAg ICByZXR1cm4gbjsKKyAgZWxzZQorICAgIHsKKyAgICAgIHggPSBmaWIgKG4t MSk7CisgICAgICB5ID0gZmliIChuLTIpOworICAgICAgcmV0dXJuICh4K3kp OworICAgIH0KK30KKworaW50IGZpYihpbnQgbikKK3sKKyAgaW50IHggPSAw LCB5ID0gMDsKKyAgaWYgKG4gPCAyKSAKKyAgICByZXR1cm4gbjsKKyAgZWxz ZQorICB7CisgICAgeCA9IF9DaWxrX3NwYXduIGZpYihuLTEpOworICAgIHkg PSBmaWIobi0yKTsKKyAgICBfQ2lsa19zeW5jOworICAgIHJldHVybiAoeCt5 KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vY2lsay1wbHVzL0NLL2ludmFsaWRfc3Bhd25zLmMgYi9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svaW52YWxpZF9zcGF3 bnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDIy YTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vY2lsay1wbHVzL0NLL2ludmFsaWRfc3Bhd25zLmMKQEAgLTAsMCAr MSwxMSBAQAorZXh0ZXJuIGludCBmb28gKCk7CitpbnQgYmFyID0gX0NpbGtf c3Bhd24gZm9vICgpOyAvKiB7IGRnLWVycm9yICJfQ2lsa19zcGF3biBtYXkg b25seSBiZSB1c2VkIGluc2lkZSBhIGZ1bmN0aW9uIiB9ICovCisKKworaW50 IG1haW4gKHZvaWQpCit7CisgIGludCB4OyAKKworICBfQ2lsa19zcGF3biB4 OyAvKiB7IGRnLWVycm9yICJvbmx5IGZ1bmN0aW9uIGNhbGxzIGNhbiBiZSBz cGF3bmVkIiB9ICovCisgIHJldHVybiB4OworfQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NLL25vX2FyZ3Nf ZXJyb3IuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2NpbGstcGx1 cy9DSy9ub19hcmdzX2Vycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uOWEwODQ3NgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL2NpbGstcGx1cy9DSy9ub19hcmdzX2Vy cm9yLmMKQEAgLTAsMCArMSwxMSBAQAorLyogeyBkZy1kbyBjb21waWxlIH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLWZjaWxrcGx1cyIgfSAqLworCitpbnQg c3Bhd25fMSAoKTsKK3R5cGVkZWYgaW50KCpmdW5jKSAoaW50KTsKKwordm9p ZCBjaGVjayAoKSB7CisgICAgICBmdW5jIHZhciA9IHNwYXduXzE7CisgICAg ICAgIF9DaWxrX3NwYXduIHZhciAoKTsgLyogeyBkZy1lcnJvciAidG9vIGZl dyBhcmd1bWVudHMgdG8gZnVuY3Rpb24iIH0gKi8KK30KKwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NLL3Nw YXduX2luX3JldHVybi5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24v Y2lsay1wbHVzL0NLL3NwYXduX2luX3JldHVybi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjlhMGQKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0sv c3Bhd25faW5fcmV0dXJuLmMKQEAgLTAsMCArMSw4IEBACisvKiB7IGRnLWRv IGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItZmNpbGtwbHVzIiB9 ICovCisKK2ludCBtYWluICh2b2lkKQoreworICBleHRlcm4gaW50IGZvbyAo KTsKKyAgcmV0dXJuIF9DaWxrX3NwYXduIGZvbyAoKTsgLyogeyBkZy1lcnJv ciAiaW4gcmV0dXJuIHN0YXRlbWVudCBpcyBub3QgYWxsb3dlZCIgfSAqLwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vY2ls ay1wbHVzL0NLL3NwYXduZWVfaW5saW5lLmMgYi9nY2MvdGVzdHN1aXRlL2Mt YysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svc3Bhd25lZV9pbmxpbmUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWY5MzJlCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vY2ls ay1wbHVzL0NLL3NwYXduZWVfaW5saW5lLmMKQEAgLTAsMCArMSw4MSBAQAor LyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctZG8gcnVuICB7IHRh cmdldCB7IGk/ODYtKi0qIHg4Nl82NC0qLSogYXJtKi0qLSogfSB9IH0gKi8K Ky8qIHsgZGctb3B0aW9ucyAiLWZjaWxrcGx1cyAtdyIgfSAqLworLyogeyBk Zy1vcHRpb25zICItbGNpbGtydHMiIHsgdGFyZ2V0IHsgaT84Ni0qLSogeDg2 XzY0LSotKiBhcm0qLSotKiB9IH0gfSAqLworCisjaW5jbHVkZSA8c3RkaW8u aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNkZWZpbmUgREVGQVVMVF9WQUxV RSAiMzAiCisKK2ludCBmaWIgKGNoYXIgKm5fY2hhcikKK3sKKyAgaW50IG47 CisgIGNoYXIgbl9jaGFyX21pbnVzX29uZVsyMF0sIG5fY2hhcl9taW51c190 d29bMjBdOworICBpZiAobl9jaGFyKQorICAgIG4gPSBhdG9pIChuX2NoYXIp OworICBlbHNlCisgICAgbiA9IGF0b2koREVGQVVMVF9WQUxVRSk7CisgIAor ICBpZiAobiA8IDIpCisgICAgcmV0dXJuIG47CisgIGVsc2UKKyAgICB7CSAg IAorICAgICAgaW50IHgsIHk7CisgICAgICBzcHJpbnRmIChuX2NoYXJfbWlu dXNfb25lLCIlZCIsIG4tMSk7IAorICAgICAgc3ByaW50ZiAobl9jaGFyX21p bnVzX3R3bywiJWQiLCBuLTIpOyAKKyAgICAgIHggPSBfQ2lsa19zcGF3biBm aWIgKG5fY2hhcl9taW51c19vbmUpOworICAgICAgeSA9IF9DaWxrX3NwYXdu IGZpYiAobl9jaGFyX21pbnVzX3R3byk7CisgICAgICBfQ2lsa19zeW5jOwor ICAgICAgcmV0dXJuICh4K3kpOworICAgIH0KK30KKworaW50IGZpYl9zZXJp YWwgKGludCBuKQoreworICBpbnQgeCwgeTsKKyAgaWYgKG4gPCAyKQorICAg IHJldHVybiBuOworICBlbHNlCisgICAgeworICAgICAgeCA9IGZpYl9zZXJp YWwgKG4tMSk7CisgICAgICB5ID0gZmliX3NlcmlhbCAobi0yKTsKKyAgICAg IHJldHVybiAoeCt5KTsKKyAgICB9CisgIHJldHVybiAwOworfQorCitpbnQg bWFpbjJfcGFyYWxsZWwgKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7Cisg IGludCBuLCByZXN1bHRfcGFyYWxsZWwgPSAwOworCisgIGlmIChhcmdjID09 IDIpCisgICAgeworICAgICAgcmVzdWx0X3BhcmFsbGVsID0gX0NpbGtfc3Bh d24gZmliIChhcmd2WzFdKTsKKyAgICAgIF9DaWxrX3N5bmM7IAorICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIHJlc3VsdF9wYXJhbGxlbCA9IF9DaWxr X3NwYXduIGZpYigiMzAiKTsKKyAgICAgIF9DaWxrX3N5bmM7IAorICAgIH0K KyAgcmV0dXJuIHJlc3VsdF9wYXJhbGxlbDsKK30KKworaW50IG1haW4yX3Nl cmlhbCAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgaW50IG4sIHJl c3VsdF9zZXJpYWwgPSAwOworICBpZiAoYXJnYyA9PSAyKSAKKyAgICByZXN1 bHRfc2VyaWFsID0gZmliX3NlcmlhbCAoYXRvaSAoYXJndlsxXSkpOworICBl bHNlCisgICAgcmVzdWx0X3NlcmlhbCA9IGZpYl9zZXJpYWwgKGF0b2kgKERF RkFVTFRfVkFMVUUpKTsKKworICByZXR1cm4gcmVzdWx0X3NlcmlhbDsKK30K KworaW50IG1haW4gKHZvaWQpCit7CisgIGlmIChtYWluMl9zZXJpYWwgKDEs IDApICE9IG1haW4yX3BhcmFsbGVsICgxLDApKQorICAgIHJldHVybiAxOwor ICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vY2lsay1wbHVzL0NLL3NwYXduZXJfaW5saW5lLmMgYi9n Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svc3Bhd25l cl9pbmxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4xMmE0NGM4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vY2lsay1wbHVzL0NLL3NwYXduZXJfaW5saW5lLmMKQEAg LTAsMCArMSw2OCBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsg ZGctZG8gcnVuICB7IHRhcmdldCB7IGk/ODYtKi0qIHg4Nl82NC0qLSogYXJt Ki0qLSogfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZjaWxrcGx1cyIg fSAqLworLyogeyBkZy1vcHRpb25zICItbGNpbGtydHMiIHsgdGFyZ2V0IHsg aT84Ni0qLSogeDg2XzY0LSotKiBhcm0qLSotKiB9IH0gfSAqLworCisjaW5j bHVkZSA8c3RkbGliLmg+CisjZGVmaW5lIERFRkFVTFRfVkFMVUUgMzAKK2lu dCBmaWIgKGludCBuKQoreworICBpZiAobjwyKQorICAgIHJldHVybiBuOwor ICBlbHNlCisgICAgeworICAgICAgaW50IHgsIHk7CisgICAgICB4ID0gX0Np bGtfc3Bhd24gZmliIChuLTEpOworICAgICAgeSA9IF9DaWxrX3NwYXduIGZp YiAobi0yKTsKKyAgICAgIF9DaWxrX3N5bmM7CisgICAgICByZXR1cm4gKHgr eSk7CisgICAgICByZXR1cm4gNTsKKyAgICB9Cit9CisKK2ludCBtYWluX3Bh cmFsbGVsIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBpbnQgbiwg cmVzdWx0OworICBpZiAoYXJnYyA9PSAyKQorICAgIG4gPSBhdG9pKGFyZ3Zb MV0pOworICBlbHNlCisgICAgbiA9IERFRkFVTFRfVkFMVUU7CisgIHJlc3Vs dCA9IF9DaWxrX3NwYXduIGZpYihuKTsKKyAgX0NpbGtfc3luYzsgCisgIHJl dHVybiByZXN1bHQ7Cit9CisKK2ludCBmaWJfc2VyaWFsIChpbnQgbikKK3sK KyAgaW50IHgsIHk7CisgIGlmIChuIDwgMikKKyAgICByZXR1cm4gbjsKKyAg ZWxzZQorICAgIHsKKyAgICAgIHggPSBmaWIgKG4tMSk7CisgICAgICB5ID0g ZmliIChuLTIpOworICAgICAgcmV0dXJuICh4K3kpOworICAgIH0KK30KKyAg CitpbnQgbWFpbl9zZXJpYWwgKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7 CisgIGludCBuLCByZXN1bHQ7CisKKyAgaWYgKGFyZ2MgPT0gMikKKyAgICBu ID0gYXRvaSAoYXJndlsxXSk7CisgIGVsc2UKKyAgICBuID0gREVGQVVMVF9W QUxVRTsKKyAgcmVzdWx0ID0gZmliX3NlcmlhbCAobik7CisKKyAgcmV0dXJu IHJlc3VsdDsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGlmIChtYWlu X3NlcmlhbCAoMSwgMCkgIT0gbWFpbl9wYXJhbGxlbCAoMSwwKSkKKyAgICBy ZXR1cm4gMTsKKyAgZWxzZSAKKyAgICByZXR1cm4gMDsKK30KKwpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NL L3NwYXduaW5nX2FyZy5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24v Y2lsay1wbHVzL0NLL3NwYXduaW5nX2FyZy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjQ2NWQxZGEKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svc3Bh d25pbmdfYXJnLmMKQEAgLTAsMCArMSwzOCBAQAorLyogeyBkZy1kbyBjb21w aWxlIH0gKi8KKy8qIHsgZGctZG8gcnVuICB7IHRhcmdldCB7IGk/ODYtKi0q IHg4Nl82NC0qLSogYXJtKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9u cyAiLWZjaWxrcGx1cyIgfSAqLworLyogeyBkZy1vcHRpb25zICItbGNpbGty dHMiIHsgdGFyZ2V0IHsgaT84Ni0qLSogeDg2XzY0LSotKiBhcm0qLSotKiB9 IH0gfSAqLworCit2b2lkIGYwKHZvbGF0aWxlIGludCAqc3RlYWxfZmxhZykK K3sgCisgIGludCBpID0gMDsKKyAgLyogV2FpdCBmb3Igc3RlYWxfZmxhZyB0 byBiZSBzZXQgKi8KKyAgd2hpbGUgKCEqc3RlYWxfZmxhZykgCisgICAgOwor fQorCitpbnQgZjEoKQoreworCisgIHZvbGF0aWxlIGludCBzdGVhbF9mbGFn ID0gMDsKKyAgX0NpbGtfc3Bhd24gZjAoJnN0ZWFsX2ZsYWcpOworICBzdGVh bF9mbGFnID0gMTsgIC8vIEluZGljYXRlIHN0b2xlbgorICBfQ2lsa19zeW5j OyAKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZjIoaW50IHEpCit7CisgIHEg PSA1OworfQorCit2b2lkIGYzKCkKK3sKKyAgIF9DaWxrX3NwYXduIGYyKGYx KCkpOworfQorCitpbnQgbWFpbigpCit7CisgIGYzKCk7CisgIHJldHVybiAw OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24v Y2lsay1wbHVzL0NLL3N0ZWFsX2NoZWNrLmMgYi9nY2MvdGVzdHN1aXRlL2Mt YysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svc3RlYWxfY2hlY2suYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDMwY2UzCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vY2lsay1w bHVzL0NLL3N0ZWFsX2NoZWNrLmMKQEAgLTAsMCArMSw0MyBAQAorLyogeyBk Zy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctZG8gcnVuICB7IHRhcmdldCB7 IGk/ODYtKi0qIHg4Nl82NC0qLSogYXJtKi0qLSogfSB9IH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLWZjaWxrcGx1cyIgfSAqLworLyogeyBkZy1vcHRpb25z ICItbGNpbGtydHMiIHsgdGFyZ2V0IHsgaT84Ni0qLSogeDg2XzY0LSotKiBh cm0qLSotKiB9IH0gfSAqLworCitleHRlcm4gdm9pZCBfX2NpbGtydHNfc2V0 X3BhcmFtIChjaGFyICp4LCBjaGFyICp5KTsKKwordm9pZCBmb28odm9sYXRp bGUgaW50ICopOworCit2b2lkIG1haW4yKHZvaWQpOworCitpbnQgbWFpbih2 b2lkKQoreworICBfX2NpbGtydHNfc2V0X3BhcmFtICgibndvcmtlcnMiLCAi MiIpOworICBtYWluMigpOworICByZXR1cm4gMDsKK30KKworCit2b2lkIG1h aW4yKHZvaWQpCit7CisgIGludCBzb21lX3ZhciA9IDA7CisKKyAgX0NpbGtf c3Bhd24gZm9vKCZzb21lX3Zhcik7CisKKyAgc29tZV92YXI9MTsKKyAgc29t ZV92YXI9NTsKKyAgc29tZV92YXI9MzsKKyAgc29tZV92YXI9NDsKKworICBf Q2lsa19zeW5jOyAKKyAgcmV0dXJuOworfQorCit2b2lkIGZvbyh2b2xhdGls ZSBpbnQgKnNvbWVfb3RoZXJfdmFyKQoreworICB3aGlsZSAoKnNvbWVfb3Ro ZXJfdmFyID09IDApCisgIHsKKyAgIDsKKyAgfQorfQorCisKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2NpbGstcGx1cy9DSy9z eW5jX3dvX3NwYXduLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9j aWxrLXBsdXMvQ0svc3luY193b19zcGF3bi5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjg5ODViMDAKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svc3lu Y193b19zcGF3bi5jCkBAIC0wLDAgKzEsOSBAQAorLyogeyBkZy1kbyBjb21w aWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWZjaWxrcGx1cyIgfSAqLwor CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgX0NpbGtfc3luYzsgLyogeyBkZy1l cnJvciAiZXhwZWN0ZWQgX0NpbGtfc3Bhd24gYmVmb3JlIF9DaWxrX3N5bmMi IH0gKi8KKyAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvYy1jKystY29tbW9uL2NpbGstcGx1cy9DSy90ZXN0X19jaWxrLmMg Yi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svdGVz dF9fY2lsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjY5MTk3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2Mt YysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svdGVzdF9fY2lsay5jCkBAIC0wLDAg KzEsMTAgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLWRv IHJ1biAgeyB0YXJnZXQgeyBpPzg2LSotKiB4ODZfNjQtKi0qIGFybSotKi0q IH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mY2lsa3BsdXMiIH0gKi8K KworaW50IG1haW4gKHZvaWQpCit7CisgIGlmIChfX2NpbGsgPT0gMjAwKQor ICAgcmV0dXJuIDA7IAorICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2NpbGstcGx1cy9DSy92YXJhcmdz X3Rlc3QuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2NpbGstcGx1 cy9DSy92YXJhcmdzX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lNjE3Mzc2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NLL3ZhcmFyZ3NfdGVz dC5jCkBAIC0wLDAgKzEsNDggQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICov CisvKiB7IGRnLWRvIHJ1biAgeyB0YXJnZXQgeyBpPzg2LSotKiB4ODZfNjQt Ki0qIGFybSotKi0qIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1mY2ls a3BsdXMiIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLWxjaWxrcnRzIiB7IHRh cmdldCB7IGk/ODYtKi0qIHg4Nl82NC0qLSogYXJtKi0qLSogfSB9IH0gKi8K KworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor CisKK2RvdWJsZSBjb21wdXRlX3RvdGFsIChpbnQgbm9fZWxlbWVudHMsIC4u Lik7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAg ZG91YmxlIGFycmF5WzVdID0gezUuMCwgNC4wLCA5LjAsIDMuMCwgNC4wfTsK KyAgZG91YmxlIGFycmF5Mls1XSA9IHs1LjAsIDYuMCwgOC4wLCA2LjB9Owor ICBkb3VibGUgeXk9MCwgeHg9MCwgeHhfc2VyaWFsLCB5eV9zZXJpYWw7CisK KyAgeXkgPSBfQ2lsa19zcGF3biBjb21wdXRlX3RvdGFsKDUsYXJyYXlbMF0s YXJyYXlbMV0sYXJyYXlbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhcnJheVszXSwgYXJyYXlbNF0pOworICB4eD0gY29tcHV0ZV90 b3RhbCg0LGFycmF5MlswXSxhcnJheTJbMV0sYXJyYXkyWzJdLCBhcnJheTJb M10pOworICAKKyAgX0NpbGtfc3luYzsKKworICB5eV9zZXJpYWwgPSBjb21w dXRlX3RvdGFsKDUsYXJyYXlbMF0sYXJyYXlbMV0sYXJyYXlbMl0sIGFycmF5 WzNdLCBhcnJheVs0XSk7CisgIHh4X3NlcmlhbCA9IGNvbXB1dGVfdG90YWwo NCxhcnJheTJbMF0sYXJyYXkyWzFdLGFycmF5MlsyXSwgYXJyYXkyWzNdKTsK KworICBpZiAoKHh4ICsgeXkpICE9ICh4eF9zZXJpYWwgKyB5eV9zZXJpYWwp KSAKKyAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7CisgIAorfQorCisKK2Rv dWJsZSBjb21wdXRlX3RvdGFsIChpbnQgbm9fZWxlbWVudHMsIC4uLikKK3sK KyAgZG91YmxlIHRvdGFsID0gMDsKKyAgdmFfbGlzdCBhcmdzOworICB2YV9z dGFydChhcmdzLCBub19lbGVtZW50cyk7CisgIGludCBpaSA9IDA7CisgIGZv ciAoaWkgPSAwOyBpaSA8IG5vX2VsZW1lbnRzOyBpaSsrKQorICB7CisgICAg dG90YWwgKz0gdmFfYXJnKGFyZ3MsZG91YmxlKTsKKyAgfQorICB2YV9lbmQo YXJncyk7CisKKyAgcmV0dXJuIHRvdGFsOworfQorCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy5kZy9jaWxrLXBsdXMvY2lsay1wbHVzLmV4cCBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9jaWxrLXBsdXMuZXhw CmluZGV4IDI1MzNmZWIuLjdhYTE4MzkgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9jaWxrLXBsdXMuZXhwCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL2NpbGstcGx1cy9jaWxrLXBsdXMuZXhwCkBA IC0yMyw2ICsyMywxMSBAQCBpZiB7ICFbY2hlY2tfZWZmZWN0aXZlX3Rhcmdl dF9jaWxrcGx1c10gfSB7CiAgICAgcmV0dXJuOwogfQogCit2ZXJib3NlICIk dG9vbCAkbGliZGlyIiAxCitzZXQgbGlicmFyeV92YXIgIltnZXRfbXVsdGls aWJzXSIKKyMgUG9pbnRpbmcgdGhlIGxkX2xpYnJhcnlfcGF0aCB0byB0aGUg Q2lsayBSdW50aW1lIGxpYnJhcnkgYmluYXJpZXMuIAorc2V0IGxkX2xpYnJh cnlfcGF0aCAiJFtnZXRfbXVsdGlsaWJzXS9saWJjaWxrcnRzLy5saWJzIgor CiBkZy1pbml0CiBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFp biAkc3JjZGlyL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQU4vKi5jXV0gIiAt ZmNpbGtwbHVzIiAiICIKIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2Nv bXBsYWluICRzcmNkaXIvYy1jKystY29tbW9uL2NpbGstcGx1cy9BTi8qLmNd XSAiIC1PMCAtZmNpbGtwbHVzIiAiICIKQEAgLTQ2LDQgKzUxLDMxIEBAIGRn LXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvYy1j KystY29tbW9uL2NpbGstcGx1cy9BTi8qLmNdXSAiIC1mCiBkZy1ydW50ZXN0 IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyL2MtYysrLWNvbW1v bi9jaWxrLXBsdXMvQU4vKi5jXV0gIiAtZmNpbGtwbHVzIC1nIC1PMiAtZnRy ZWUtdmVjdG9yaXplIC1zdGQ9Yzk5IiAiICIKIGRnLXJ1bnRlc3QgW2xzb3J0 IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvYy1jKystY29tbW9uL2NpbGst cGx1cy9BTi8qLmNdXSAiIC1mY2lsa3BsdXMgLWcgLU8zIC1zdGQ9Yzk5IiAi ICIKIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNk aXIvYy1jKystY29tbW9uL2NpbGstcGx1cy9BTi8qLmNdXSAiIC1PMyAtZnRy ZWUtdmVjdG9yaXplIC1zdGQ9Yzk5IC1nIC1mY2lsa3BsdXMiICIgIgorCisK K2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIv Yy1jKystY29tbW9uL2NpbGstcGx1cy9DSy8qLmNdXSAiIC1mY2lsa3BsdXMi ICIgIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNy Y2Rpci9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NLLyouY11dICIgLU8wIC1m Y2lsa3BsdXMiICIgIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29t cGxhaW4gJHNyY2Rpci9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NLLyouY11d ICIgLU8xIC1mY2lsa3BsdXMiICIgIgorZGctcnVudGVzdCBbbHNvcnQgW2ds b2IgLW5vY29tcGxhaW4gJHNyY2Rpci9jLWMrKy1jb21tb24vY2lsay1wbHVz L0NLLyouY11dICIgLU8yIC1mdHJlZS12ZWN0b3JpemUgLWZjaWxrcGx1cyIg IiAiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3Jj ZGlyL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svKi5jXV0gIiAtTzMgLWZj aWxrcGx1cyIgIiAiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21w bGFpbiAkc3JjZGlyL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svKi5jXV0g IiAtZyAtZmNpbGtwbHVzIiAiICIKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9i IC1ub2NvbXBsYWluICRzcmNkaXIvYy1jKystY29tbW9uL2NpbGstcGx1cy9D Sy8qLmNdXSAiIC1nIC1PMCAtZmNpbGtwbHVzIiAiICIKK2RnLXJ1bnRlc3Qg W2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvYy1jKystY29tbW9u L2NpbGstcGx1cy9DSy8qLmNdXSAiIC1nIC1PMSAtZmNpbGtwbHVzIiAiICIK K2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIv Yy1jKystY29tbW9uL2NpbGstcGx1cy9DSy8qLmNdXSAiIC1nIC1PMiAtZnRy ZWUtdmVjdG9yaXplIC1mY2lsa3BsdXMiICIgIgorZGctcnVudGVzdCBbbHNv cnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci9jLWMrKy1jb21tb24vY2ls ay1wbHVzL0NLLyouY11dICIgLWcgLU8zIC1mY2lsa3BsdXMiICIgIgorZGct cnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci9jLWMr Ky1jb21tb24vY2lsay1wbHVzL0NLLyouY11dICIgLU8zIC1mdHJlZS12ZWN0 b3JpemUgLWZjaWxrcGx1cyAtZyIgIiAiCitkZy1ydW50ZXN0IFtsc29ydCBb Z2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyL2MtYysrLWNvbW1vbi9jaWxrLXBs dXMvQ0svKi5jXV0gIiAtZmNpbGtwbHVzIC1zdGQ9Yzk5IiAiICIKK2RnLXJ1 bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvYy1jKyst Y29tbW9uL2NpbGstcGx1cy9DSy8qLmNdXSAiIC1mY2lsa3BsdXMgLU8wIC1z dGQ9Yzk5IiAiICIKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBs YWluICRzcmNkaXIvYy1jKystY29tbW9uL2NpbGstcGx1cy9DSy8qLmNdXSAi IC1mY2lsa3BsdXMgLU8xIC1zdGQ9Yzk5IiAiICIKK2RnLXJ1bnRlc3QgW2xz b3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvYy1jKystY29tbW9uL2Np bGstcGx1cy9DSy8qLmNdXSAiIC1mY2lsa3BsdXMgLU8yIC1mdHJlZS12ZWN0 b3JpemUgLXN0ZD1jOTkiICIgIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2Ig LW5vY29tcGxhaW4gJHNyY2Rpci9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NL LyouY11dICIgLWZjaWxrcGx1cyAtTzMgLXN0ZD1jOTkiICIgIgorZGctcnVu dGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci9jLWMrKy1j b21tb24vY2lsay1wbHVzL0NLLyouY11dICIgLWZjaWxrcGx1cyAtZyAtc3Rk PWM5OSIgIiAiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFp biAkc3JjZGlyL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svKi5jXV0gIiAt ZmNpbGtwbHVzIC1nIC1PMCAtc3RkPWM5OSIgIiAiCitkZy1ydW50ZXN0IFts c29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyL2MtYysrLWNvbW1vbi9j aWxrLXBsdXMvQ0svKi5jXV0gIiAtZmNpbGtwbHVzIC1nIC1PMSAtc3RkPWM5 OSIgIiAiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAk c3JjZGlyL2MtYysrLWNvbW1vbi9jaWxrLXBsdXMvQ0svKi5jXV0gIiAtZmNp bGtwbHVzIC1nIC1PMiAtZnRyZWUtdmVjdG9yaXplIC1zdGQ9Yzk5IiAiICIK K2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIv Yy1jKystY29tbW9uL2NpbGstcGx1cy9DSy8qLmNdXSAiIC1mY2lsa3BsdXMg LWcgLU8zIC1zdGQ9Yzk5IiAiICIKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9i IC1ub2NvbXBsYWluICRzcmNkaXIvYy1jKystY29tbW9uL2NpbGstcGx1cy9D Sy8qLmNdXSAiIC1PMyAtZnRyZWUtdmVjdG9yaXplIC1zdGQ9Yzk5IC1nIC1m Y2lsa3BsdXMiICIgIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29t cGxhaW4gJHNyY2Rpci9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NLLyouY11d ICIgLU8wIC1mbHRvIC1nIC1mY2lsa3BsdXMiICIgIgorZGctcnVudGVzdCBb bHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci9jLWMrKy1jb21tb24v Y2lsay1wbHVzL0NLLyouY11dICIgLU8yIC1mbHRvIC1nIC1mY2lsa3BsdXMi ICIgIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNy Y2Rpci9jLWMrKy1jb21tb24vY2lsay1wbHVzL0NLLyouY11dICIgLU8zICAt Zmx0byAtZyAtZmNpbGtwbHVzIiAiICIKIGRnLWZpbmlzaApkaWZmIC0tZ2l0 IGEvZ2NjL3RyZWUtaW5saW5lLmggYi9nY2MvdHJlZS1pbmxpbmUuaAppbmRl eCBiNjVkZWU5Li4zMmJlZGFjIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1pbmxp bmUuaAorKysgYi9nY2MvdHJlZS1pbmxpbmUuaApAQCAtMTIzLDYgKzEyMywx MCBAQCB0eXBlZGVmIHN0cnVjdCBjb3B5X2JvZHlfZGF0YQogICAgICB0aGUg b3JpZ2luYWxzIGhhdmUgYmVlbiBtYXBwZWQgdG8gYSB2YWx1ZSByYXRoZXIg dGhhbiB0byBhCiAgICAgIHZhcmlhYmxlLiAgKi8KICAgc3RydWN0IHBvaW50 ZXJfbWFwX3QgKmRlYnVnX21hcDsKKyAKKyAgLyogQ2lsayBrZXl3b3JkcyBj dXJyZW50bHkgbmVlZCB0byByZXBsYWNlIHNvbWUgdmFyaWFibGVzIHRoYXQK KyAgICAgb3JkaW5hcnkgbmVzdGVkIGZ1bmN0aW9ucyBkbyBub3QuICAqLyAK KyAgYm9vbCByZW1hcF92YXJfZm9yX2NpbGs7CiB9IGNvcHlfYm9keV9kYXRh OwogCiAvKiBXZWlnaHRzIG9mIGNvbnN0cnVjdGlvbnMgZm9yIGVzdGltYXRl X251bV9pbnNucy4gICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1wcmV0dHkt cHJpbnQuYyBiL2djYy90cmVlLXByZXR0eS1wcmludC5jCmluZGV4IDc3NDVm NzMuLmY0NDljNjggMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXByZXR0eS1wcmlu dC5jCisrKyBiL2djYy90cmVlLXByZXR0eS1wcmludC5jCkBAIC0yNDAzLDYg KzI0MDMsMTQgQEAgZHVtcF9nZW5lcmljX25vZGUgKHByZXR0eV9wcmludGVy ICpidWZmZXIsIHRyZWUgbm9kZSwgaW50IHNwYywgaW50IGZsYWdzLAogICAg ICAgZHVtcF9ibG9ja19ub2RlIChidWZmZXIsIG5vZGUsIHNwYywgZmxhZ3Mp OwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIENJTEtfU1BBV05fU1RNVDoK KyAgICAgIHBwX3N0cmluZyAoYnVmZmVyLCAiX0NpbGtfc3Bhd24gIik7Cisg ICAgICBkdW1wX2dlbmVyaWNfbm9kZSAoYnVmZmVyLCBUUkVFX09QRVJBTkQg KG5vZGUsIDApLCBzcGMsIGZsYWdzLCBmYWxzZSk7CisgICAgICBicmVhazsK KworICAgIGNhc2UgQ0lMS19TWU5DX1NUTVQ6CisgICAgICBwcF9zdHJpbmcg KGJ1ZmZlciwgIl9DaWxrX3N5bmM7Iik7CisgICAgICBicmVhazsKICAgICBk ZWZhdWx0OgogICAgICAgTklZOwogICAgIH0KZGlmZiAtLWdpdCBhL2djYy90 cmVlLmRlZiBiL2djYy90cmVlLmRlZgppbmRleCBkYTMwMDc0Li4xYzk4ODYx IDEwMDY0NAotLS0gYS9nY2MvdHJlZS5kZWYKKysrIGIvZ2NjL3RyZWUuZGVm CkBAIC0xMjI3LDYgKzEyMjcsMTQgQEAgREVGVFJFRUNPREUgKE9QVElNSVpB VElPTl9OT0RFLCAib3B0aW1pemF0aW9uX25vZGUiLCB0Y2NfZXhjZXB0aW9u YWwsIDApCiAvKiBUQVJHRVRfT1BUSU9OX05PREUuICBOb2RlIHRvIHN0b3Jl IHRoZSB0YXJnZXQgc3BlY2lmaWMgb3B0aW9ucy4gICovCiBERUZUUkVFQ09E RSAoVEFSR0VUX09QVElPTl9OT0RFLCAidGFyZ2V0X29wdGlvbl9ub2RlIiwg dGNjX2V4Y2VwdGlvbmFsLCAwKQogCisvKiBDaWxrIHNwYXduIGV4cHJlc3Np b24KKyAgIE9wZXJhbmQgMCBpcyB0aGUgQ0FMTF9FWFBSLiAgKi8KK0RFRlRS RUVDT0RFIChDSUxLX1NQQVdOX1NUTVQsICJjaWxrX3NwYXduX3N0bXQiLCB0 Y2Nfc3RhdGVtZW50LCAxKQorCisvKiBDaWxrIFN5bmMgU3RhdGVtZW50OiBE b2VzIG5vdCBoYXZlIGFueSBvcGVyYW5kcy4gICovCitERUZUUkVFQ09ERSAo Q0lMS19TWU5DX1NUTVQsICJjaWxrX3N5bmNfc3RtdCIsIHRjY19leHByZXNz aW9uLCAwKQorCisKIC8qCiBMb2NhbCB2YXJpYWJsZXM6CiBtb2RlOmMKZGlm ZiAtLWdpdCBhL2djYy90cmVlLmggYi9nY2MvdHJlZS5oCmluZGV4IDAwNThh NGIuLjQ0YmIzNzUgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLmgKKysrIGIvZ2Nj L3RyZWUuaApAQCAtMTc0OSw2ICsxNzQ5LDkgQEAgZXh0ZXJuIHZvaWQgcHJv dGVjdGVkX3NldF9leHByX2xvY2F0aW9uICh0cmVlLCBsb2NhdGlvbl90KTsK ICNkZWZpbmUgQ0FMTF9FWFBSX0FSR1AoTk9ERSkgXAogICAoJihUUkVFX09Q RVJBTkQgKENBTExfRVhQUl9DSEVDSyAoTk9ERSksIDApKSArIDMpCiAKKy8q IENpbGsgS2V5d29yZHMgYWNjZXNzb3JzLiAgKi8KKyNkZWZpbmUgQ0lMS19T UEFXTl9GTihOT0RFKSBUUkVFX09QRVJBTkQgKENJTEtfU1BBV05fU1RNVF9D SEVDSyAoTk9ERSksIDApCisKIC8qIFRNIGRpcmVjdGl2ZXMgYW5kIGFjY2Vz c29ycy4gICovCiAjZGVmaW5lIFRSQU5TQUNUSU9OX0VYUFJfQk9EWShOT0RF KSBcCiAgIFRSRUVfT1BFUkFORCAoVFJBTlNBQ1RJT05fRVhQUl9DSEVDSyAo Tk9ERSksIDApCg== --_002_BF230D13CA30DD48930C31D4099330003A458F86FMSMSX101amrcor_--